

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menyebarkan Model dari Registry dengan Python
<a name="model-registry-deploy"></a>

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 proyek operasi pembelajaran mesin (MLOPs) dan memilih templat proyek MLOPS yang menyertakan penerapan model, versi model yang disetujui dalam Registri Model secara otomatis diterapkan ke produksi. Untuk informasi tentang penggunaan proyek SageMaker AI MLOPs, lihat. [Otomatisasi MLOPs Dengan Proyek SageMaker](sagemaker-projects.md)

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.

**Topics**
+ [Menerapkan Model dari Registry (SageMaker SDK)](#model-registry-deploy-smsdk)
+ [Menyebarkan Model dari Registry (Boto3)](#model-registry-deploy-api)
+ [Menerapkan Versi Model dari Akun yang Berbeda](#model-registry-deploy-xaccount)

## Menerapkan Model dari Registry (SageMaker SDK)
<a name="model-registry-deploy-smsdk"></a>

Untuk menerapkan versi model menggunakan [Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable) SDK gunakan cuplikan kode berikut:

```
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)
<a name="model-registry-deploy-api"></a>

Untuk menerapkan versi model menggunakan AWS SDK untuk Python (Boto3), selesaikan langkah-langkah berikut:

1. 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](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.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"]))
   ```

1. Buat konfigurasi titik akhir dengan memanggil`create_endpoint_config`. Konfigurasi titik akhir menentukan jumlah dan jenis instans Amazon EC2 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'}])
   ```

1. 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
<a name="model-registry-deploy-xaccount"></a>

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 Cross-account kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html) di *Panduan AWS Identity and Access Management Pengguna*.

**catatan**  
Anda harus menggunakan kunci KMS untuk mengenkripsi tindakan [konfigurasi data keluaran](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html) 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, lihat[AWS kebijakan terkelola untuk Amazon SageMaker AI](security-iam-awsmanpol.md).

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.")
```