

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.

# Définissez l'environnement de votre script d'algorithme
<a name="braket-jobs-script-environment"></a>

Amazon Braket prend en charge les environnements définis par des conteneurs pour votre script d'algorithme :
+ Un conteneur de base (par défaut, si aucun conteneur n'`image_uri`est spécifié)
+ Un conteneur avec CUDA-Q
+ Un conteneur avec Tensorflow et PennyLane
+ Un conteneur avec PyTorch, PennyLane, et CUDA-Q

Le tableau suivant fournit des informations détaillées sur les conteneurs et les bibliothèques qu'ils incluent.


**Conteneurs Amazon Braket**  

| Type | Base | CUDA-Q | TensorFlow | PyTorch | 
| --- | --- | --- | --- | --- | 
|   **URI de l'image**   |  292282985366.dkr. ecr.us-west-2.amazonaws.com /:latest amazon-braket-base-jobs  |  292282985366.dkr. ecr.us-west-2.amazonaws.com /:latest amazon-braket-cudaq-jobs  |  292282985366.dkr. ecr.us-east-1.amazonaws.com /:latest amazon-braket-tensorflow-jobs  |  292282985366.dkr. ecr.us-west-2.amazonaws.com /:latest amazon-braket-pytorch-jobs  | 
|   **Bibliothèques héritées**   |  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/braket-jobs-script-environment.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/braket-jobs-script-environment.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/braket-jobs-script-environment.html)  | 
|   **Bibliothèques supplémentaires**   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/braket-jobs-script-environment.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/braket-jobs-script-environment.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/braket-jobs-script-environment.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/braket-jobs-script-environment.html)  | 

Vous pouvez consulter et accéder aux définitions de conteneurs open source sur [aws/ amazon-braket-containers](https://github.com/aws/amazon-braket-containers). Choisissez le contenant qui correspond le mieux à votre cas d'utilisation. Vous pouvez utiliser n'importe laquelle des AWS régions disponibles dans Braket (us-east-1, us-west-1, us-west-2, eu-north-1, eu-west-2), mais la région du conteneur doit correspondre à la région correspondant à votre tâche hybride. Spécifiez l'image du conteneur lorsque vous créez une tâche hybride en ajoutant l'un des trois arguments suivants à votre `create(…​)` appel dans le script de tâche hybride. Vous pouvez installer des dépendances supplémentaires dans le conteneur que vous choisissez lors de l'exécution (au prix du démarrage ou de l'exécution) car les conteneurs Amazon Braket sont connectés à Internet. L'exemple suivant concerne la région us-west-2.
+  **Image de base :** image\$1uri="292282985366.dkr. ecr.us-west-2.amazonaws.com /:latest » amazon-braket-base-jobs
+  Image **CUDA-Q : image\$1uri="292282985366.dkr. ecr.us-west-2.amazonaws.com /:latest** » amazon-braket-cudaq-jobs
+  Image de **Tensorflow : image\$1uri="292282985366.dkr**. ecr.us-west-2.amazonaws.com /:latest » amazon-braket-tensorflow-jobs
+  **PyTorch image :** image\$1uri="292282985366.dkr. ecr.us-west-2.amazonaws.com /:latest » amazon-braket-pytorch-jobs

Ils `image-uris` peuvent également être récupérés à l'aide de la `retrieve_image()` fonction du SDK Amazon Braket. L'exemple suivant montre comment les récupérer depuis l'us-west-2 Région AWS.

```
from braket.jobs.image_uris import retrieve_image, Framework

image_uri_base = retrieve_image(Framework.BASE, "us-west-2")
image_uri_cudaq = retrieve_image(Framework.CUDAQ, "us-west-2")
image_uri_tf = retrieve_image(Framework.PL_TENSORFLOW, "us-west-2")
image_uri_pytorch = retrieve_image(Framework.PL_PYTORCH, "us-west-2")
```

# Apport de votre propre conteneur
<a name="braket-jobs-byoc"></a>

Amazon Braket Hybrid Jobs fournit trois conteneurs prédéfinis pour exécuter du code dans différents environnements. Si l'un de ces conteneurs prend en charge votre cas d'utilisation, il vous suffit de fournir votre script d'algorithme lorsque vous créez une tâche hybride. Les dépendances manquantes mineures peuvent être ajoutées à partir de votre script d'algorithme ou d'un `requirements.txt` fichier à l'aide de`pip`.

Si aucun de ces conteneurs ne correspond à votre cas d'utilisation, ou si vous souhaitez les développer, Braket Hybrid Jobs prend en charge l'exécution de tâches hybrides avec votre propre image de Docker conteneur personnalisée, ou le Bring Your Own Container (BYOC). Assurez-vous qu'il s'agit de la fonctionnalité adaptée à votre cas d'utilisation. 

**Topics**
+ [

## Quand est-ce qu'apporter mon propre contenant est la bonne décision ?
](#bring-own-container-decision)
+ [

# Recette pour apporter votre propre contenant
](bring-own-container-recipe.md)
+ [

# Exécution de tâches hybrides avec Braket dans votre propre conteneur
](running-hybrid-jobs-in-own-container.md)

## Quand est-ce qu'apporter mon propre contenant est la bonne décision ?
<a name="bring-own-container-decision"></a>

Bringing your own container (BYOC) to Braket Hybrid Jobs offre la flexibilité d'utiliser votre propre logiciel en l'installant dans un environnement packagé. En fonction de vos besoins spécifiques, il existe peut-être des moyens d'obtenir la même flexibilité sans avoir à passer par le cycle complet de BYOC Docker compilation (téléchargement Amazon ECR) et d'URI d'image personnalisée.

**Note**  
Le BYOC n'est peut-être pas le bon choix si vous souhaitez ajouter un petit nombre de packages Python supplémentaires (généralement moins de 10) accessibles au public. Par exemple, si vous utilisez PyPi.

Dans ce cas, vous pouvez utiliser l'une des images Braket prédéfinies, puis inclure un `requirements.txt` fichier dans votre répertoire source lors de la soumission de la tâche. Le fichier est automatiquement lu et `pip` installera les packages avec les versions spécifiées comme d'habitude. Si vous installez un grand nombre de packages, le temps d'exécution de vos tâches peut être considérablement augmenté. Vérifiez la version Python et, le cas échéant, la version CUDA du conteneur prédéfini que vous souhaitez utiliser pour tester le fonctionnement de votre logiciel.

Le BYOC est nécessaire lorsque vous souhaitez utiliser un langage autre que Python (comme C\$1\$1 ou Rust) pour votre script de travail, ou si vous souhaitez utiliser une version de Python non disponible dans les conteneurs prédéfinis de Braket. C'est également un bon choix si :
+ Vous utilisez un logiciel doté d'une clé de licence, et vous devez authentifier cette clé auprès d'un serveur de licences pour exécuter le logiciel. Avec BYOC, vous pouvez intégrer la clé de licence dans votre Docker image et inclure du code pour l'authentifier.
+ Vous utilisez un logiciel qui n'est pas accessible au public. Par exemple, le logiciel est hébergé sur un dépôt privé GitLab ou un GitHub dépôt auquel vous avez besoin d'une clé SSH spécifique pour accéder.
+ Vous devez installer une vaste suite de logiciels qui n'est pas incluse dans les conteneurs fournis par Braket. Le BYOC vous permettra d'éliminer les longs délais de démarrage de vos conteneurs de tâches hybrides en raison de l'installation de logiciels.

Le BYOC vous permet également de mettre votre SDK ou algorithme personnalisé à la disposition des clients en créant un Docker conteneur avec votre logiciel et en le mettant à la disposition de vos utilisateurs. Vous pouvez le faire en définissant les autorisations appropriées dans Amazon ECR.

**Note**  
Vous devez respecter toutes les licences logicielles applicables.

# Recette pour apporter votre propre contenant
<a name="bring-own-container-recipe"></a>

Dans cette section, nous fournissons un step-by-step guide expliquant ce dont vous avez besoin bring your own container (BYOC) pour Braket Hybrid Jobs : les scripts, les fichiers et les étapes à suivre pour les combiner afin de les utiliser avec vos Docker images personnalisées. Les recettes pour deux cas courants :

1. Installez des logiciels supplémentaires dans une Docker image et utilisez uniquement des scripts d'algorithme Python dans vos tâches.

1. Utilisez des scripts d'algorithme écrits dans un langage autre que Python avec Hybrid Jobs, ou une architecture de processeur 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'instances Amazon EC2 demandés, puis exécute Docker l'image spécifiée par l'URI de l'image pour créer la tâche sur celles-ci. Lorsque vous utilisez la fonctionnalité BYOC, vous spécifiez un URI d'image hébergé dans un [référentiel Amazon ECR privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html) 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 une Docker image utilisable avec Hybrid Jobs. [Si vous n'êtes pas familiarisé avec l'écriture et la construction`Dockerfiles`, reportez-vous à la documentation [Dockerfile et à la Amazon ECR CLI documentation](https://docs.docker.com/reference/dockerfile/).](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)

**Topics**
+ [

## Une image de base pour votre Dockerfile
](#base-image-dockerfile)
+ [

## (Facultatif) Script de point d'entrée du conteneur modifié
](#modified-container-entry-point)
+ [

## Installez le logiciel et le script de conteneur nécessaires avec `Dockerfile`
](#install-docketfile)

## Une image de base pour votre Dockerfile
<a name="base-image-dockerfile"></a>

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 Amazon ECR](https://github.com/amazon-braket/amazon-braket-containers). Vous devrez vous [authentifier auprès d'Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-authenticate-registry) pour extraire l'image et créer dessus. Par exemple, la première ligne de votre Docker fichier BYOC pourrait être : `FROM [IMAGE_URI_HERE]`

Ensuite, remplissez le reste 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\$1\$1, Rust ou Julia, ou si vous souhaitez créer une image pour une architecture de processeur autre que x86, comme ARM, vous devrez peut-être créer à partir d'une image publique simple. Vous trouverez de nombreuses images de ce type dans la [galerie publique d'Amazon Elastic Container Registry](https://gallery.ecr.aws/). Assurez-vous d'en choisir un qui convient à l'architecture du processeur et, si nécessaire, au processeur graphique que vous souhaitez utiliser.

## (Facultatif) Script de point d'entrée du conteneur modifié
<a name="modified-container-entry-point"></a>

**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, modifiez 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 Braket](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py). Il s'agit du script que les images précréées par Braket utilisent pour lancer votre script d'algorithme et définir les variables d'environnement appropriées. Le script du point d'entrée du conteneur lui-même **doit** être en Python, mais il peut lancer des scripts autres que Python. Dans l'exemple prédéfini, vous pouvez voir que les scripts d'algorithme Python sont lancés soit en tant que [sous-processus Python, soit en tant que processus](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L274) [entièrement nouveau](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L257). En modifiant cette logique, vous pouvez permettre au script du point d'entrée de lancer des scripts d'algorithmes autres que Python. Par exemple, vous pouvez modifier la [https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L139](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L139)fonction pour lancer des processus Rust en fonction de la fin de l'extension du fichier.

Vous pouvez également choisir d'en écrire un tout nouveau`braket_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`
<a name="install-docketfile"></a>

**Note**  
Si vous utilisez une image Braket prédéfinie comme image de Docker base, le script de 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` to`braket_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 de Jobs accélérées par GPU :

```
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 unMIT 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 clés SSH dans l'Dockerimage pour y accéder. Utilisez-le plutôt Docker Compose lorsque vous créez pour autoriser l'accès Docker à SSH sur la machine hôte sur laquelle il est construit. Pour plus d'informations, consultez le guide [Utilisation sécurisée des clés SSH dans Docker pour accéder aux référentiels Github privés](https://www.fastruby.io/blog/docker/docker-ssh-keys.html).

**Création et téléchargement de votre image Docker**

Une fois correctement défini`Dockerfile`, vous êtes maintenant prêt à suivre les étapes pour [créer un référentiel Amazon ECR privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html), 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 Docker](https://docs.docker.com/reference/cli/docker/buildx/build/) pour une explication complète des options `docker 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 Dockerles images doivent être hébergées dans des référentiels Amazon ECR privés. Par défaut, un dépôt Amazon ECR privé ne fournit **pas** d'accès en lecture aux utilisateurs qui souhaitent utiliser votre image, tels qu'un collaborateur Braket Hybrid Jobs IAM role ou un étudiant. Vous devez [définir une politique de dépôt](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html) pour accorder les autorisations appropriées. En général, autorisez uniquement les utilisateurs et les IAM rôles spécifiques auxquels vous souhaitez accéder à vos images, plutôt que de permettre image URI à toute personne possédant le droit de les récupérer.

# Exécution de tâches hybrides avec Braket dans votre propre conteneur
<a name="running-hybrid-jobs-in-own-container"></a>

Pour créer une tâche hybride avec votre propre conteneur, appelez `AwsQuantumJob.create()` avec l'argument `image_uri` spécifié. Vous pouvez utiliser un QPU, un simulateur à la demande ou exécuter votre code localement sur le processeur classique disponible avec Braket Hybrid Jobs. Nous vous recommandons de tester votre code sur un simulateur SV1 DM1, ou TN1 avant de l'exécuter sur un véritable QPU.

Pour exécuter votre code sur le processeur classique, spécifiez le `instanceType` et `instanceCount` que vous utilisez en mettant à jour le`InstanceConfig`. Notez que si vous spécifiez un `instance_count` > 1, vous devez vous assurer que votre code peut être exécuté sur plusieurs hôtes. La limite supérieure du nombre d'instances que vous pouvez choisir est de 5. Par exemple :

```
job = AwsQuantumJob.create(
    source_module="source_dir",
    entry_point="source_dir.algorithm_script:start_here",
    image_uri="111122223333.dkr.ecr.us-west-2.amazonaws.com/my-byoc-container:latest",
    instance_config=InstanceConfig(instanceType="ml.g4dn.xlarge", instanceCount=3),
    device="local:braket/braket.local.qubit",
    # ...)
```

**Note**  
Utilisez l'ARN de l'appareil pour suivre le simulateur que vous avez utilisé comme métadonnées de tâches hybrides. Les valeurs acceptables doivent respecter le format`device = "local:<provider>/<simulator_name>"`. N'oubliez pas cela `<provider>` et ne `<simulator_name>` devez être composé que de lettres`_`, de chiffres`-`, et`.`. La chaîne est limitée à 256 caractères.  
Si vous envisagez d'utiliser le BYOC et que vous n'utilisez pas le SDK Braket pour créer des tâches quantiques, vous devez transmettre la valeur de la variable environnementale `AMZN_BRAKET_JOB_TOKEN` au `jobToken` paramètre de la demande. `CreateQuantumTask` Si vous ne le faites pas, les tâches quantiques ne sont pas prioritaires et sont facturées comme des tâches quantiques autonomes ordinaires.