Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Recette pour apporter votre propre contenant
Dans cette section, nous vous proposons un step-by-step guide de ce dont vous aurez besoin pour bring your own container (BYOC) vers Braket Hybrid Jobs : les scripts, les fichiers et les étapes pour les combiner afin de démarrer avec vos tâches personnalisées Docker images. Nous proposons des recettes pour deux cas courants :
-
Installez des logiciels supplémentaires dans un Docker imagez et utilisez uniquement des scripts d'algorithme Python dans vos tâches.
-
Utilisez des scripts d'algorithme écrits dans un langage autre que Python avec Hybrid Jobs ou une CPU architecture autre que x86.
La définition du script de saisie du conteneur est plus complexe dans le cas 2.
Lorsque Braket exécute votre Hybrid Job, il lance le nombre et le type d'EC2instances Amazon demandés, puis exécute le Docker image spécifiée par l'image URI saisie pour la création de tâches sur eux. Lorsque vous utilisez BYOC cette fonctionnalité, vous spécifiez une image URI hébergée dans un ECRréférentiel Amazon privé auquel vous avez accès en lecture. Braket Hybrid Jobs utilise cette image personnalisée pour exécuter le job.
Les composants spécifiques dont vous avez besoin pour créer un Docker image qui peut être utilisée avec Hybrid Jobs. Si vous n'êtes pas familiarisé avec l'écriture et la constructionDockerfiles
, nous vous suggérons de vous référer à la documentation Dockerfile
Voici un aperçu de ce dont vous aurez besoin :
Une image de base pour votre Dockerfile
Si vous utilisez Python et que vous souhaitez installer un logiciel en plus de ce qui est fourni dans les conteneurs fournis par Braket, une option pour une image de base est l'une des images de conteneur Braket, hébergées dans notre GitHub dépôt et sur AmazonFROM [IMAGE_URI_HERE]
Ensuite, remplissez le reste du Dockerfile pour installer et configurer le logiciel que vous souhaitez ajouter au conteneur. Les images Braket prédéfinies contiennent déjà le script de point d'entrée du conteneur approprié, vous n'avez donc pas à vous soucier de l'inclure.
Si vous souhaitez utiliser un langage autre que Python, tel que C++, Rust ou Julia, ou si vous souhaitez créer une image pour une CPU architecture non x86ARM, vous devrez peut-être créer sur une image publique simple. Vous trouverez de nombreuses images de ce type dans la galerie publique d'Amazon Elastic Container Registry
(Facultatif) Script de point d'entrée du conteneur modifié
Note
Si vous ajoutez uniquement un logiciel supplémentaire à une image Braket prédéfinie, vous pouvez ignorer cette section.
Pour exécuter du code autre que Python dans le cadre de votre tâche hybride, vous devez modifier le script Python qui définit le point d'entrée du conteneur. Par exemple, le script braket_container.py
python sur le Github d'Amazon Braketthekick_off_customer_script()
Vous pouvez également choisir d'en écrire un tout nouveaubraket_container.py
. Il doit copier les données d'entrée, les archives sources et les autres fichiers nécessaires depuis Amazon S3 dans le conteneur, et définir les variables d'environnement appropriées.
Installez le logiciel et le script de conteneur nécessaires avec Dockerfile
Note
Si vous utilisez une image Braket prédéfinie comme Docker image de base, le script du conteneur est déjà présent.
Si vous avez créé un script de conteneur modifié à l'étape précédente, vous devez le copier dans le conteneur et définir la variable d'environnement SAGEMAKER_PROGRAM
tobraket_container.py
, ou le nom que vous avez donné à votre nouveau script de point d'entrée de conteneur.
Voici un exemple Dockerfile
qui vous permet d'utiliser Julia sur des instances Jobs GPU accélérées :
FROM nvidia/cuda:12.2.0-devel-ubuntu22.04 ARG DEBIAN_FRONTEND=noninteractive ARG JULIA_RELEASE=1.8 ARG JULIA_VERSION=1.8.3 ARG PYTHON=python3.11 ARG PYTHON_PIP=python3-pip ARG PIP=pip ARG JULIA_URL = https://julialang-s3.julialang.org/bin/linux/x64/${JULIA_RELEASE}/ ARG TAR_NAME = julia-${JULIA_VERSION}-linux-x86_64.tar.gz ARG PYTHON_PKGS = # list your Python packages and versions here RUN curl -s -L ${JULIA_URL}/${TAR_NAME} | tar -C /usr/local -x -z --strip-components=1 -f - RUN apt-get update \ && apt-get install -y --no-install-recommends \ build-essential \ tzdata \ openssh-client \ openssh-server \ ca-certificates \ curl \ git \ libtemplate-perl \ libssl1.1 \ openssl \ unzip \ wget \ zlib1g-dev \ ${PYTHON_PIP} \ ${PYTHON}-dev \ RUN ${PIP} install --no-cache --upgrade ${PYTHON_PKGS} RUN ${PIP} install --no-cache --upgrade sagemaker-training==4.1.3 # Add EFA and SMDDP to LD library path ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH" ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH # Julia specific installation instructions COPY Project.toml /usr/local/share/julia/environments/v${JULIA_RELEASE}/ RUN JULIA_DEPOT_PATH=/usr/local/share/julia \ julia -e 'using Pkg; Pkg.instantiate(); Pkg.API.precompile()' # generate the device runtime library for all known and supported devices RUN JULIA_DEPOT_PATH=/usr/local/share/julia \ julia -e 'using CUDA; CUDA.precompile_runtime()' # Open source compliance scripts RUN HOME_DIR=/root \ && curl -o ${HOME_DIR}/oss_compliance.zip https://aws-dlinfra-utilities.s3.amazonaws.com/oss_compliance.zip \ && unzip ${HOME_DIR}/oss_compliance.zip -d ${HOME_DIR}/ \ && cp ${HOME_DIR}/oss_compliance/test/testOSSCompliance /usr/local/bin/testOSSCompliance \ && chmod +x /usr/local/bin/testOSSCompliance \ && chmod +x ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh \ && ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh ${HOME_DIR} ${PYTHON} \ && rm -rf ${HOME_DIR}/oss_compliance* # Copying the container entry point script COPY braket_container.py /opt/ml/code/braket_container.py ENV SAGEMAKER_PROGRAM braket_container.py
Cet exemple télécharge et exécute des scripts fournis par AWS pour garantir la conformité avec toutes les licences Open Source pertinentes. Par exemple, en attribuant correctement tout code installé régi par un MIT license.
Si vous devez inclure du code non public, par exemple du code hébergé dans un dépôt privé GitHub ou dans un GitLab dépôt, n'intégrez pas de SSH clés dans Docker image pour y accéder. Utilisez plutôt Docker Compose lorsque vous créez pour autoriser Docker pour accéder à la machine hôte SSH sur laquelle il est construit. Pour plus d'informations, consultez le guide Utilisation sécurisée des SSH clés dans Docker pour accéder aux référentiels Github privés
Création et téléchargement de votre Docker image
Avec un dépôt correctement définiDockerfile
, vous êtes maintenant prêt à suivre les étapes pour créer un ECR dépôt Amazon privé, s'il n'en existe pas déjà un. Vous pouvez également créer, étiqueter et télécharger votre image de conteneur dans le référentiel.
Vous êtes prêt à créer, étiqueter et publier l'image. Consultez la documentation de compilation de Dockerdocker build
et quelques exemples.
Pour le fichier d'exemple défini ci-dessus, vous pouvez exécuter :
aws ecr get-login-password --region ${your_region} | docker login --username AWS --password-stdin ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com docker build -t braket-julia . docker tag braket-julia:latest ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com/braket-julia:latest docker push ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com/braket-julia:latest
Attribution des autorisations Amazon ECR appropriées
Braket Hybrid Jobs Docker les images doivent être hébergées dans des ECR référentiels Amazon privés. Par défaut, un ECR dépôt Amazon privé ne fournit pas d'accès en lecture au Braket Hybrid Jobs IAM role ou à tout autre utilisateur qui souhaite utiliser votre image, tel qu'un collaborateur ou un étudiant. Vous devez définir une politique de dépôt afin d'accorder les autorisations appropriées. En général, ne donnez l'autorisation qu'à ces utilisateurs spécifiques et IAM rôles dans lesquels vous souhaitez accéder à vos images, plutôt que de permettre à toute personne possédant image URI pour les tirer.