Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Dopo aver registrato una versione del modello e averne approvato la distribuzione, distribuiscila su un SageMaker endpoint AI per l'inferenza in tempo reale. Puoi implementare il tuo modello utilizzando l'AI SDK o il SageMaker . AWS SDK for Python (Boto3)
Quando crei un progetto di machine learning operations (MLOps) e scegli un modello di MLOps progetto che includa la distribuzione del modello, le versioni del modello approvate nel Model Registry vengono automaticamente distribuite in produzione. Per informazioni sull'utilizzo dei MLOps progetti di SageMaker intelligenza artificiale, consultaMLOps Automazione con SageMaker progetti.
Puoi anche consentire a un AWS account di distribuire versioni del modello create in un account diverso aggiungendo una politica delle risorse per più account. Ad esempio, un team dell'organizzazione può essere responsabile dei modelli di addestramento e un altro team responsabile della distribuzione e dell'aggiornamento dei modelli.
Argomenti
Implementa un modello dal registro (SageMaker AI SDK)
Per distribuire una versione del modello utilizzando l'SDK 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
')
Implementazione di un modello dal registro (boto3)
Per distribuire una versione del modello utilizzando il, completa i AWS SDK for Python (Boto3) seguenti passaggi:
-
Il seguente frammento di codice presuppone che tu abbia già creato il client SageMaker AI Boto3
sm_client
e una versione del modello il cui ARN è memorizzato nella variabile.model_version_arn
Crea un oggetto modello dalla versione del modello chiamando l'operazione API create_model.
Passa l'Amazon Resource Name (ARN) della versione del modello come parte dell'oggetto Containers
for the 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"]))
-
Creazione di una configurazione dell'endpoint chiamando
create_endpoint_config
. La configurazione dell'endpoint specifica il numero e il tipo di EC2 istanze Amazon da utilizzare per l'endpoint.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'}])
-
Crea l'endpoint chiamando
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'])
Implementazione di una versione del modello da un account diverso
Puoi consentire a un AWS account di distribuire versioni del modello create in un account diverso aggiungendo una politica delle risorse per più account. Ad esempio, un team dell'organizzazione può essere responsabile dei modelli di addestramento e un altro team responsabile della distribuzione e dell'aggiornamento dei modelli. Quando si creano queste policy relative alle risorse, le si applica alla risorsa specifica a cui si desidera concedere l'accesso. Per ulteriori informazioni sulle politiche relative alle risorse tra account in AWS, consulta Logica di valutazione delle politiche tra account nella Guida per l'utente.AWS Identity and Access Management
Nota
È necessario utilizzare una chiave KMS per crittografare l'azione di configurazione dei dati di output durante l'addestramento per la distribuzione del modello tra account.
Per abilitare l'implementazione di modelli tra account nell' SageMaker intelligenza artificiale, devi fornire una politica di risorse per più account per il Model Group che contenga le versioni del modello che desideri distribuire, il repository Amazon ECR in cui risiede l'immagine di inferenza per il Model Group e il bucket Amazon S3 in cui sono archiviate le versioni del modello.
Per poter implementare un modello creato in un account diverso, devi avere un ruolo che abbia accesso alle azioni di SageMaker intelligenza artificiale, ad esempio un ruolo con la policy AmazonSageMakerFullAccess
gestita. Per informazioni sulle politiche gestite dall' SageMaker IA, consultaAWS politiche gestite per Amazon SageMaker AI.
L'esempio seguente crea policy tra account per tutte e tre queste risorse, applicandole alle stesse. L'esempio presuppone inoltre che in precedenza siano state definite le seguenti variabili:
-
bucket
— Il bucket Amazon S3 in cui sono archiviate le versioni del modello. -
kms_key_id
— La chiave KMS utilizzata per crittografare l'output dell'allenamento. -
sm_client
— Un client SageMaker AI Boto3. -
model_package_group_name
— Il gruppo di modelli a cui desideri concedere l'accesso su più account. -
model_package_group_arn
— L'ARN del gruppo di modelli a cui si desidera concedere l'accesso su più account.
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.")