Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Setelah Anda mendaftarkan versi model dan menyetujuinya untuk penerapan, terapkan ke titik akhir SageMaker AI untuk inferensi waktu nyata. Anda dapat menerapkan model Anda dengan menggunakan SageMaker AI SDK atau. AWS SDK untuk Python (Boto3)
Saat Anda membuat project machine learning operations (MLOps) dan memilih templat MLOps proyek yang menyertakan penerapan model, versi model yang disetujui dalam Registri Model secara otomatis akan diterapkan ke produksi. Untuk informasi tentang penggunaan MLOps proyek SageMaker AI, lihatMLOps Otomatisasi Dengan SageMaker Proyek.
Anda juga dapat mengaktifkan AWS akun untuk menerapkan versi model yang dibuat di akun lain dengan menambahkan kebijakan sumber daya lintas akun. Misalnya, satu tim di organisasi Anda mungkin bertanggung jawab atas model pelatihan, dan tim yang berbeda bertanggung jawab untuk menerapkan dan memperbarui model.
Topik
Menerapkan Model dari Registry (SageMaker AI SDK)
Untuk menerapkan versi model menggunakan Amazon SageMaker Python
from sagemaker import ModelPackage
from time import gmtime, strftime
model_package_arn = 'arn:aws:sagemaker:us-east-2:12345678901:model-package/modeltest/1'
model = ModelPackage(role=role,
model_package_arn=model_package_arn,
sagemaker_session=sagemaker_session)
model.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge
')
Menyebarkan Model dari Registry (Boto3)
Untuk menerapkan versi model menggunakan AWS SDK untuk Python (Boto3), selesaikan langkah-langkah berikut:
-
Cuplikan kode berikut mengasumsikan Anda sudah membuat klien SageMaker AI Boto3
sm_client
dan versi model yang ARN-nya disimpan dalam variabel.model_version_arn
Buat objek model dari versi model dengan memanggil operasi API create_model
. Lulus Amazon Resource Name (ARN) dari versi model sebagai bagian dari Containers
objek model:model_name = 'DEMO-modelregistry-model-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("Model name : {}".format(model_name)) container_list = [{'ModelPackageName': model_version_arn}] create_model_response = sm_client.create_model( ModelName = model_name, ExecutionRoleArn = role, Containers = container_list ) print("Model arn : {}".format(create_model_response["ModelArn"]))
-
Buat konfigurasi titik akhir dengan memanggil
create_endpoint_config
. Konfigurasi titik akhir menentukan jumlah dan jenis EC2 instans Amazon yang akan digunakan untuk titik akhir.endpoint_config_name = 'DEMO-modelregistry-EndpointConfig-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print(endpoint_config_name) create_endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName = endpoint_config_name, ProductionVariants=[{ 'InstanceType':'ml.m4.xlarge', 'InitialVariantWeight':1, 'InitialInstanceCount':1, 'ModelName':model_name, 'VariantName':'AllTraffic'}])
-
Buat titik akhir dengan menelepon
create_endpoint
.endpoint_name = 'DEMO-modelregistry-endpoint-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("EndpointName={}".format(endpoint_name)) create_endpoint_response = sm_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name) print(create_endpoint_response['EndpointArn'])
Menerapkan Versi Model dari Akun yang Berbeda
Anda dapat mengizinkan AWS akun untuk menerapkan versi model yang dibuat di akun lain dengan menambahkan kebijakan sumber daya lintas akun. Misalnya, satu tim di organisasi Anda mungkin bertanggung jawab atas model pelatihan, dan tim yang berbeda bertanggung jawab untuk menerapkan dan memperbarui model. Saat membuat kebijakan sumber daya ini, Anda menerapkan kebijakan tersebut ke sumber daya tertentu yang ingin Anda berikan aksesnya. Untuk informasi selengkapnya tentang kebijakan sumber daya lintas akun AWS, lihat Logika evaluasi kebijakan lintas akun di AWS Identity and Access Management Panduan Pengguna.
catatan
Anda harus menggunakan kunci KMS untuk mengenkripsi tindakan konfigurasi data keluaran selama pelatihan untuk penerapan model lintas akun.
Untuk mengaktifkan penerapan model lintas akun di SageMaker AI, Anda harus menyediakan kebijakan sumber daya lintas akun untuk Grup Model yang berisi versi model yang ingin Anda terapkan, repositori Amazon ECR tempat gambar inferensi untuk Grup Model berada, dan bucket Amazon S3 tempat versi model disimpan.
Untuk dapat menerapkan model yang dibuat di akun yang berbeda, Anda harus memiliki peran yang memiliki akses ke tindakan SageMaker AI, seperti peran dengan kebijakan AmazonSageMakerFullAccess
terkelola. Untuk informasi tentang kebijakan yang dikelola SageMaker AI, lihatAWS kebijakan terkelola untuk Amazon SageMaker AI.
Contoh berikut membuat kebijakan lintas akun untuk ketiga sumber daya ini, dan menerapkan kebijakan ke sumber daya. Contoh ini juga mengasumsikan bahwa Anda sebelumnya mendefinisikan variabel berikut:
-
bucket
- Bucket Amazon S3 tempat versi model disimpan. -
kms_key_id
— Kunci KMS digunakan untuk mengenkripsi output pelatihan. -
sm_client
- SageMaker Klien AI Boto3. -
model_package_group_name
— Grup Model tempat Anda ingin memberikan akses lintas akun. -
model_package_group_arn
— ARN Grup Model tempat Anda ingin memberikan akses lintas akun.
import json
# The cross-account id to grant access to
cross_account_id = "123456789012"
# Create the policy for access to the ECR repository
ecr_repository_policy = {
'Version': '2012-10-17',
'Statement': [{
'Sid': 'AddPerm',
'Effect': 'Allow',
'Principal': {
'AWS': f'arn:aws:iam::{cross_account_id}:root'
},
'Action': ['ecr:*']
}]
}
# Convert the ECR policy from JSON dict to string
ecr_repository_policy = json.dumps(ecr_repository_policy)
# Set the new ECR policy
ecr = boto3.client('ecr')
response = ecr.set_repository_policy(
registryId = account,
repositoryName = 'decision-trees-sample',
policyText = ecr_repository_policy
)
# Create a policy for accessing the S3 bucket
bucket_policy = {
'Version': '2012-10-17',
'Statement': [{
'Sid': 'AddPerm',
'Effect': 'Allow',
'Principal': {
'AWS': f'arn:aws:iam::{cross_account_id}:root'
},
'Action': 's3:*',
'Resource': f'arn:aws:s3:::{bucket}/*'
}]
}
# Convert the policy from JSON dict to string
bucket_policy = json.dumps(bucket_policy)
# Set the new policy
s3 = boto3.client('s3')
response = s3.put_bucket_policy(
Bucket = bucket,
Policy = bucket_policy)
# Create the KMS grant for encryption in the source account to the
# Model Registry account Model Group
client = boto3.client('kms')
response = client.create_grant(
GranteePrincipal=cross_account_id,
KeyId=kms_key_id
Operations=[
'Decrypt',
'GenerateDataKey',
],
)
# 3. Create a policy for access to the Model Group.
model_package_group_policy = {
'Version': '2012-10-17',
'Statement': [{
'Sid': 'AddPermModelPackageGroup',
'Effect': 'Allow',
'Principal': {
'AWS': f'arn:aws:iam::{cross_account_id}:root'
},
'Action': ['sagemaker:DescribeModelPackageGroup'],
'Resource': f'arn:aws:sagemaker:{region}:{account}:model-package-group/{model_package_group_name}'
},{
'Sid': 'AddPermModelPackageVersion',
'Effect': 'Allow',
'Principal': {
'AWS': f'arn:aws:iam::{cross_account_id}:root'
},
'Action': ["sagemaker:DescribeModelPackage",
"sagemaker:ListModelPackages",
"sagemaker:UpdateModelPackage",
"sagemaker:CreateModel"],
'Resource': f'arn:aws:sagemaker:{region}:{account}:model-package/{model_package_group_name}/*'
}]
}
# Convert the policy from JSON dict to string
model_package_group_policy = json.dumps(model_package_group_policy)
# Set the policy to the Model Group
response = sm_client.put_model_package_group_policy(
ModelPackageGroupName = model_package_group_name,
ResourcePolicy = model_package_group_policy)
print('ModelPackageGroupArn : {}'.format(create_model_package_group_response['ModelPackageGroupArn']))
print("First Versioned ModelPackageArn: " + model_package_arn)
print("Second Versioned ModelPackageArn: " + model_package_arn2)
print("Success! You are all set to proceed for cross-account deployment.")