As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Criar um contêiner de processamento (cenário avançado)
Você pode fornecer ao Amazon SageMaker Processing uma imagem do Docker que tenha seu próprio código e dependências para executar suas cargas de trabalho de processamento de dados, engenharia de recursos e avaliação de modelos.
O exemplo a seguir de um Dockerfile cria um contêiner com as bibliotecas Python de scikit-learn e pandas que podem ser executados como um trabalho de processamento.
FROM python:3.7-slim-buster # Install scikit-learn and pandas RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3 # Add a Python script and configure Docker to run it ADD processing_script.py / ENTRYPOINT ["python3", "/processing_script.py"]
Para ver um exemplo de script de processamento, consulte Introdução ao SageMaker processamento
Crie e envie essa imagem do Docker para um repositório do Amazon Elastic Container Registry (Amazon ECR) e garanta que sua função SageMaker do IAM possa extrair a imagem do Amazon ECR. Em seguida, você pode executar essa imagem no Amazon SageMaker Processing.
Como o Amazon SageMaker Processing executa sua imagem de contêiner de processamento
O Amazon SageMaker Processing executa sua imagem de contêiner de processamento de forma semelhante ao comando a seguir, onde AppSpecification.ImageUri
está o URI da imagem do Amazon ECR que você especifica em uma CreateProcessingJob
operação.
docker run [AppSpecification.ImageUri]
Esse comando executa o comando ENTRYPOINT
configurado na imagem do Docker.
Também é possível substituir o comando do ponto de entrada na imagem ou fornecer argumentos da linha de comando ao comando do ponto de entrada usando os parâmetros AppSpecification.ContainerEntrypoint
e AppSpecification.ContainerArgument
na solicitação CreateProcessingJob
. A especificação desses parâmetros configura o Amazon SageMaker Processing para executar o contêiner da mesma forma que o comando a seguir.
docker run --entry-point [AppSpecification.ContainerEntrypoint] [AppSpecification.ImageUri] [AppSpecification.ContainerArguments]
Por exemplo, se você especificar “ContainerEntrypoint
para estar [python3, -v, /processing_script.py]
em sua CreateProcessingJob
solicitação” e “ser”[data-format, csv]
, ContainerArguments
o Amazon SageMaker Processing executará seu contêiner com o seguinte comando.
python3 -v /processing_script.py data-format csv
Considere os seguintes detalhes ao criar o contêiner de processamento:
-
O Amazon SageMaker Processing decide se o trabalho é concluído ou falhado, dependendo do código de saída da execução do comando. Um trabalho de processamento será concluído se todos os contêineres de processamento forem encerrados com êxito, com um código de saída de 0 e apresentará falha se algum dos contêineres for encerrado com um código de saída diferente de zero.
-
O Amazon SageMaker Processing permite que você substitua o ponto de entrada do contêiner de processamento e defina argumentos de linha de comando da mesma forma que você pode fazer com a API do Docker. As imagens do Docker também podem configurar os argumentos do ponto de entrada e da linha de comando usando as instruções da CMD e de
ENTRYPOINT
. A maneira como os parâmetros deCreateProcessingJob
,ContainerEntrypoint
e doContainerArgument
configuram o ponto de entrada e os argumentos de uma imagem do Docker espelha como o Docker substitui o ponto de entrada e os argumentos usando a API do Docker:-
Se nem
ContainerEntrypoint
nemContainerArguments
forem fornecidos, o Processing usará o padrãoENTRYPOINT
ou a CMD na imagem. -
Se
ContainerEntrypoint
for fornecido, masContainerArguments
não for, o Processing executa a imagem com o ponto de entrada fornecido e ignora oENTRYPOINT
e a CMD na imagem. -
Se
ContainerArguments
for fornecido, masContainerEntrypoint
não for, o Processing executa a imagem com o padrãoENTRYPOINT
na imagem e com os argumentos fornecidos. -
Se
ContainerEntrypoint
eContainerArguments
forem fornecidos, o Processing executa a imagem com o ponto de entrada e os argumentos fornecidos, e ignorará oENTRYPOINT
e a CMD na imagem.
-
-
Use a forma "exec" da instrução
ENTRYPOINT
no Dockerfile (ENTRYPOINT
["executable", "param1", "param2"])
em vez da forma "shell" (ENTRYPOINT
command param1 param2
). Isso permite que o contêiner de processamento receba sinaisSIGINT
eSIGKILL
, que o Processing usa para interromper trabalhos de processamento com a APIStopProcessingJob
. -
/opt/ml
e todos os seus subdiretórios são reservados por. SageMaker Ao criar a imagem de processamento do Docker, não coloque nenhum dado exigido pelo contêiner de processamento nesses diretórios. -
Se você planeja usar dispositivos de GPU, verifique se os contêineres são compatíveis com nvidia-docker. Inclua somente o CUDA toolkit nos contêineres. Não empacote drivers NVIDIA com a imagem. Para obter mais informações sobre o nvidia-docker, consulte NVIDIA/nvidia-docker
.
Como o Amazon SageMaker Processing configura a entrada e a saída para seu contêiner de processamento
Ao criar um trabalho de processamento usando a operação CreateProcessingJob
, é possível especificar vários valores de ProcessingInput
e ProcessingOutput
.
Use o parâmetro ProcessingInput
para especificar um URI do Amazon Simple Storage Service (Amazon S3) de onde fazer download de dados e um caminho no contêiner de processamento para o qual fazer download dos dados. O parâmetro ProcessingOutput
configura um caminho no contêiner de processamento a partir do qual fazer upload dos dados e para onde no Amazon S3 fazer upload desses dados. Para ProcessingInput
e ProcessingOutput
, o caminho no contêiner de processamento deve começar com /opt/ml/processing/
.
Por exemplo, é possível criar um trabalho de processamento com um parâmetro ProcessingInput
que faça download dos dados de s3://your-data-bucket/path/to/input/csv/data
em um /opt/ml/processing/csv
no contêiner de processamento e um parâmetro ProcessingOutput
que faça upload dos dados de /opt/ml/processing/processed_csv
para s3://your-data-bucket/path/to/output/csv/data
. Seu trabalho de processamento faria a leitura dos dados de entrada e gravaria os dados de saída em /opt/ml/processing/processed_csv
. Depois, faz o upload dos dados gravados nesse caminho para o local de saída do Amazon S3 especificado.
Importante
Links simbólicos (links simbólicos) não podem ser usados para carregar dados de saída no Amazon S3. Os links simbólicos não são seguidos ao fazer o upload dos dados de saída.
Como o Amazon SageMaker Processing fornece registros e métricas para seu contêiner de processamento
Quando seu contêiner de processamento grava em stdout
oustderr
, o Amazon SageMaker Processing salva a saída de cada contêiner de processamento e a coloca nos CloudWatch registros da Amazon. Para obter informações sobre registro em log, consulte Registre SageMaker eventos da Amazon com a Amazon CloudWatch.
O Amazon SageMaker Processing também fornece CloudWatch métricas para cada instância que executa seu contêiner de processamento. Para obter informações sobre métricas, consulte Monitore a Amazon SageMaker com a Amazon CloudWatch.
Como o Amazon SageMaker Processing configura seu contêiner de processamento
O Amazon SageMaker Processing fornece informações de configuração para seu contêiner de processamento por meio de variáveis de ambiente e dois arquivos JSON — /opt/ml/config/processingjobconfig.json
e /opt/ml/config/resourceconfig.json
— em locais predefinidos no contêiner.
Quando um trabalho de processamento é iniciado, ele usa as variáveis de ambiente que você especificou com o mapa de Environment
na solicitação CreateProcessingJob
. O arquivo /opt/ml/config/processingjobconfig.json
contém informações sobre os nomes de host dos contêineres de processamento e também é especificado na solicitação CreateProcessingJob
.
O exemplo a seguir mostra o formato do arquivo /opt/ml/config/processingjobconfig.json
.
{ "ProcessingJobArn": "<processing_job_arn>", "ProcessingJobName": "<processing_job_name>", "AppSpecification": { "ImageUri": "<image_uri>", "ContainerEntrypoint": null, "ContainerArguments": null }, "Environment": { "KEY": "VALUE" }, "ProcessingInputs": [ { "InputName": "input-1", "S3Input": { "LocalPath": "/opt/ml/processing/input/dataset", "S3Uri": "<s3_uri>", "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3InputMode": "File", "S3CompressionType": "None", "S3DownloadMode": "StartOfJob" } } ], "ProcessingOutputConfig": { "Outputs": [ { "OutputName": "output-1", "S3Output": { "LocalPath": "/opt/ml/processing/output/dataset", "S3Uri": "<s3_uri>", "S3UploadMode": "EndOfJob" } } ], "KmsKeyId": null }, "ProcessingResources": { "ClusterConfig": { "InstanceCount": 1, "InstanceType": "ml.m5.xlarge", "VolumeSizeInGB": 30, "VolumeKmsKeyId": null } }, "RoleArn": "<IAM role>", "StoppingCondition": { "MaxRuntimeInSeconds": 86400 } }
O arquivo /opt/ml/config/resourceconfig.json
contém informações sobre os nomes de host dos contêineres de processamento. Use nomes de host a seguir ao criar ou executar código de processamento distribuído.
{ "current_host": "algo-1", "hosts": ["algo-1","algo-2","algo-3"] }
Não use as informações sobre nomes de host contidos no /etc/hostname
ou no /etc/hosts
porque elas podem estar incorretas.
As informações do nome do host podem não estar imediatamente disponíveis para o contêiner de processamento. Recomendamos adicionar uma política de nova tentativa em operações de resolução de nomes de host à medida que os nós se tornarem disponíveis no cluster.
Salvar e acessar informações de metadados sobre seu trabalho de processamento
Para salvar metadados do contêiner de processamento depois de sair dele, os contêineres podem gravar texto codificado em UTF-8 no arquivo /opt/ml/output/message
. Depois que o trabalho de processamento entrar em qualquer status terminal ("Completed
", "Stopped
" ou "Failed
"), o campo "ExitMessage
" em DescribeProcessingJob
conterá o primeiro 1 KB desse arquivo. Acesse essa parte inicial do arquivo com uma chamada para DescribeProcessingJob
, que a retornará pelo parâmetro ExitMessage
. Por exemplo, para trabalhos de processamento com falha, é possível usar esse campo para comunicar por que houve falha no contêiner de processamento.
Importante
Não grave dados confidenciais no arquivo /opt/ml/output/message
.
Se os dados neste arquivo não estiverem codificados em UTF-8, haverá falha no trabalho e um ClientError
será retornado. Se vários contêineres forem encerrados com uma ExitMessage,
, o conteúdo da ExitMessage
de cada contêiner de processamento será concatenado e truncado para 1 KB.
Execute seu contêiner de processamento usando o SDK do SageMaker Python
Você pode usar o SDK do SageMaker Python para executar sua própria imagem de processamento usando a classe. Processor
O exemplo a seguir mostra como executar seu próprio contêiner de processamento com uma entrada do Amazon Simple Storage Service (Amazon S3) e uma saída para o Amazon S3.
from sagemaker.processing import Processor, ProcessingInput, ProcessingOutput processor = Processor(image_uri='<your_ecr_image_uri>', role=role, instance_count=1, instance_type="ml.m5.xlarge") processor.run(inputs=[ProcessingInput( source='<s3_uri or local path>', destination='/opt/ml/processing/input_data')], outputs=[ProcessingOutput( source='/opt/ml/processing/processed_data', destination='<s3_uri>')], )
Em vez de criar o código de processamento na imagem de processamento, é possível fornecer um ScriptProcessor
com sua imagem e o comando que deseja executar com o código que deseja executar dentro desse contêiner. Para ver um exemplo, consulte Executar scripts com seu próprio contêiner de processamento.
Você também pode usar a imagem scikit-learn fornecida pela Amazon SageMaker Processing SKLearnProcessor
para executar scripts scikit-learn. Para ver um exemplo, consulte Processamento de recursos com scikit-learn.