Création de votre propre conteneur de traitement (scénario avancé) - Amazon SageMaker AI

Création de votre propre conteneur de traitement (scénario avancé)

Vous pouvez fournir à Amazon SageMaker Processing une image Docker comprenant votre propre code et vos propres dépendances pour exécuter vos applications de traitement des données, d'ingénierie des fonctionnalités et d'évaluation des modèles. Vous trouverez ci-dessous des informations sur la façon de créer votre propre conteneur de traitement.

L'exemple suivant d'un Dockerfile génère un conteneur avec les bibliothèques Python scikit-learn et pandas que vous pouvez exécuter en tant que tâche de traitement.

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"]

Pour un exemple de script de traitement, consultez Mise en route avec le traitement SageMaker.

Créez et envoyez cette image Docker à un référentiel Amazon Elastic Container Registry (Amazon ECR), et assurez-vous que votre rôle IAM SageMaker AI peut extraire l’image d’Amazon ECR. Ensuite, vous pouvez exécuter cette image sur Amazon SageMaker Processing.

Configuration de votre conteneur de traitement par Amazon SageMaker Processing

Amazon SageMaker Processing fournit des informations de configuration à votre conteneur de traitement via des variables d'environnement et deux fichiers JSON, /opt/ml/config/processingjobconfig.json et /opt/ml/config/resourceconfig.json, à des emplacements prédéfinis dans le conteneur.

Lorsqu'une tâche de traitement démarre, elle utilise les variables d'environnement que vous avez spécifiées avec la carte Environment dans la demande CreateProcessingJob. Le fichier /opt/ml/config/processingjobconfig.json contient des informations sur les noms d'hôte de vos conteneurs de traitement et est également spécifié dans la demande CreateProcessingJob.

L'exemple suivant illustre le format du fichier /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 } }

Le fichier /opt/ml/config/resourceconfig.json contient des informations sur les noms d'hôte de vos conteneurs de traitement. Utilisez les noms d'hôte suivants lors de la création ou de l'exécution du code de traitement distribué.

{ "current_host": "algo-1", "hosts": ["algo-1","algo-2","algo-3"] }

N'utilisez pas les informations relatives aux noms d'hôte contenues dans /etc/hostname ou /etc/hosts, car elles peuvent être inexactes.

Les informations sur le nom d'hôte peuvent ne pas être immédiatement disponibles pour le conteneur de traitement. Nous vous recommandons d'ajouter une politique de nouvelle tentative aux opérations de résolution de nom d'hôte quand les nœuds deviennent disponibles dans le cluster.