

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à.

# Definisci l'ambiente per lo script del tuo algoritmo
<a name="braket-jobs-script-environment"></a>

Amazon Braket supporta ambienti definiti da contenitori per lo script dell'algoritmo:
+ Un contenitore di base (predefinito, se non `image_uri` è specificato)
+ Un contenitore con CUDA-Q
+ Un contenitore con Tensorflow e PennyLane
+ Un contenitore con PyTorch, PennyLane e CUDA-Q

La tabella seguente fornisce dettagli sui contenitori e sulle librerie che includono.


**Contenitori Amazon Braket**  

| Tipo | Base | CUDA-Q | TensorFlow | PyTorch | 
| --- | --- | --- | --- | --- | 
|   **URI dell'immagine**   |  292282985366.dkr. ecr.us-west-2.amazonaws.com /:più recente amazon-braket-base-jobs  |  292282985366.dkr. ecr.us-west-2.amazonaws.com /:più recente amazon-braket-cudaq-jobs  |  292282985366.dkr. ecr.us-east-1.amazonaws.com /:più recente amazon-braket-tensorflow-jobs  |  292282985366.dkr. ecr.us-west-2.amazonaws.com /:più recente amazon-braket-pytorch-jobs  | 
|   **Librerie ereditate**   |  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/braket-jobs-script-environment.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/braket-jobs-script-environment.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/braket-jobs-script-environment.html)  | 
|   **Librerie aggiuntive**   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/braket-jobs-script-environment.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/braket-jobs-script-environment.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/braket-jobs-script-environment.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/braket-jobs-script-environment.html)  | 

[Puoi visualizzare e accedere alle definizioni dei contenitori open source su aws/. amazon-braket-containers](https://github.com/aws/amazon-braket-containers) Scegli il contenitore più adatto al tuo caso d'uso. Puoi utilizzare una qualsiasi delle AWS regioni disponibili in Braket (us-east-1, us-west-1, us-west-2, eu-north-1, eu-west-2), ma la regione del contenitore deve corrispondere alla regione per il tuo lavoro ibrido. Specificate l'immagine del contenitore quando create un lavoro ibrido aggiungendo uno dei seguenti tre argomenti alla chiamata nello script del lavoro ibrido. `create(…​)` Puoi installare dipendenze aggiuntive nel contenitore che scegli in fase di esecuzione (al costo dell'avvio o del runtime) perché i contenitori Amazon Braket dispongono di connettività Internet. L'esempio seguente si riferisce alla regione us-west-2.
+  **Immagine di base:** image\$1uri="292282985366.dkr. ecr.us-west-2.amazonaws.com /:latest» amazon-braket-base-jobs
+  **Immagine CUDA-Q:** image\$1uri="292282985366.dkr. ecr.us-west-2.amazonaws.com /:latest» amazon-braket-cudaq-jobs
+  **Immagine Tensorflow:** image\$1uri="292282985366.dkr. ecr.us-west-2.amazonaws.com /:latest» amazon-braket-tensorflow-jobs
+  **PyTorch immagine**: image\$1uri="292282985366.dkr. ecr.us-west-2.amazonaws.com /:latest» amazon-braket-pytorch-jobs

Possono `image-uris` anche essere recuperati utilizzando la funzione in Braket SDK. `retrieve_image()` Amazon L'esempio seguente mostra come recuperarli da Regione AWS us-west-2.

```
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")
```

# Importare un container personalizzato (Bring Your Own Container, BYOC)
<a name="braket-jobs-byoc"></a>

Amazon Braket Hybrid Jobs offre tre contenitori predefiniti per l'esecuzione di codice in ambienti diversi. Se uno di questi contenitori supporta il tuo caso d'uso, devi fornire lo script dell'algoritmo solo quando crei un lavoro ibrido. Le dipendenze minori mancanti possono essere aggiunte dallo script dell'algoritmo o da un `requirements.txt` file utilizzando`pip`.

Se nessuno di questi contenitori supporta il tuo caso d'uso o se desideri ampliarli, Braket Hybrid Jobs supporta l'esecuzione di lavori ibridi con la tua immagine del Docker contenitore personalizzata o Bring your own container (BYOC). Assicurati che sia la funzionalità giusta per il tuo caso d'uso. 

**Topics**
+ [

## Quando portare il mio container è la decisione giusta?
](#bring-own-container-decision)
+ [

# Ricetta per portare il proprio contenitore
](bring-own-container-recipe.md)
+ [

# Esecuzione dei job ibridi di Braket nel tuo contenitore
](running-hybrid-jobs-in-own-container.md)

## Quando portare il mio container è la decisione giusta?
<a name="bring-own-container-decision"></a>

Bringing your own container (BYOC) a Braket Hybrid Jobs offre la flessibilità di utilizzare il proprio software installandolo in un ambiente impacchettato. A seconda delle esigenze specifiche, potrebbero esserci modi per ottenere la stessa flessibilità senza dover passare attraverso la BYOC Docker build completa - caricamento Amazon ECR - ciclo URI dell'immagine personalizzata.

**Nota**  
BYOC potrebbe non essere la scelta giusta se si desidera aggiungere un numero limitato di pacchetti Python aggiuntivi (generalmente meno di 10) disponibili pubblicamente. Ad esempio, se stai usando. PyPi

In questo caso, puoi utilizzare una delle immagini Braket predefinite e quindi includere un `requirements.txt` file nella directory dei sorgenti al momento dell'invio del lavoro. Il file viene letto automaticamente e `pip` installerà i pacchetti con le versioni specificate come di consueto. Se state installando un gran numero di pacchetti, la durata dei vostri job potrebbe aumentare notevolmente. Controlla la versione Python e, se applicabile, CUDA del contenitore precostruito che desideri utilizzare per verificare se il tuo software funzionerà.

Il BYOC è necessario quando si desidera utilizzare un linguaggio non Python (come C\$1\$1 o Rust) per lo script di lavoro o se si desidera utilizzare una versione Python non disponibile tramite i contenitori predefiniti di Braket. È anche una buona scelta se:
+ Stai utilizzando un software con una chiave di licenza e devi autenticarla su un server di licenza per eseguire il software. Con BYOC, puoi incorporare la chiave di licenza nell'Dockerimmagine e includere il codice per autenticarla.
+ Stai utilizzando un software che non è disponibile pubblicamente. Ad esempio, il software è ospitato su un archivio privato GitLab o su un GitHub repository a cui è necessaria una particolare chiave SSH per accedere.
+ È necessario installare un'ampia suite di software che non sia inclusa nei contenitori forniti da Braket. Il BYOC ti consentirà di eliminare i lunghi tempi di avvio per i contenitori di lavori ibridi dovuti all'installazione del software.

BYOC consente inoltre di mettere a disposizione dei clienti il proprio SDK o algoritmo personalizzato creando un Docker contenitore con il software e rendendolo disponibile agli utenti. Puoi farlo impostando le autorizzazioni appropriate in Amazon ECR.

**Nota**  
È necessario rispettare tutte le licenze software applicabili.

# Ricetta per portare il proprio contenitore
<a name="bring-own-container-recipe"></a>

In questa sezione, forniamo una step-by-step guida su ciò che ti serve bring your own container (BYOC) per Braket Hybrid Jobs: gli script, i file e i passaggi per combinarli per iniziare a utilizzare le tue immagini personalizzateDocker. Le ricette per due casi comuni:

1. Installa software aggiuntivo in un'Dockerimmagine e usa solo script di algoritmi Python nei tuoi lavori.

1. Usa script di algoritmi scritti in un linguaggio non Python con Hybrid Jobs o un'architettura CPU diversa da x86.

La definizione dello *script di immissione del contenitore* è più complessa nel caso 2.

Quando Braket esegue il tuo Hybrid Job, avvia il numero e il tipo richiesti di istanze Amazon EC2, quindi esegue Docker l'immagine specificata dall'input URI dell'immagine per la creazione di job su di esse. Quando utilizzi la funzionalità BYOC, specifichi un URI di immagine ospitato in un [repository Amazon ECR privato](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html) a cui hai accesso in lettura. Braket Hybrid Jobs utilizza quell'immagine personalizzata per eseguire il lavoro.

I componenti specifici necessari per creare un'Dockerimmagine che può essere utilizzata con Hybrid Jobs. [Se non hai familiarità con la scrittura e la creazione`Dockerfiles`, fai riferimento alla documentazione e alla [documentazione di Dockerfile](https://docs.docker.com/reference/dockerfile/). Amazon ECR CLI](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)

**Topics**
+ [

## Un'immagine di base per il tuo Dockerfile
](#base-image-dockerfile)
+ [

## (Facoltativo) Uno script modificato per il punto di ingresso del contenitore
](#modified-container-entry-point)
+ [

## Installa il software e lo script del contenitore necessari con `Dockerfile`
](#install-docketfile)

## Un'immagine di base per il tuo Dockerfile
<a name="base-image-dockerfile"></a>

Se utilizzi Python e desideri installare software in aggiunta a quanto fornito nei contenitori forniti da Braket, un'opzione per un'immagine di base è una delle immagini del contenitore Braket, ospitate nel nostro [GitHub repository](https://github.com/amazon-braket/amazon-braket-containers) e su Amazon ECR. Dovrai [autenticarti su Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-authenticate-registry) per estrarre l'immagine e crearla su di essa. Ad esempio, la prima riga del tuo file BYOC potrebbe essereDocker: `FROM [IMAGE_URI_HERE]`

Quindi, compila il resto Dockerfile per installare e configurare il software che desideri aggiungere al contenitore. Le immagini Braket predefinite conterranno già lo script del punto di ingresso del contenitore appropriato, quindi non devi preoccuparti di includerlo.

Se vuoi usare un linguaggio non Python, come C\$1\$1, Rust o Julia, o se vuoi creare un'immagine per un'architettura CPU non x86, come ARM, potresti dover creare su un'immagine pubblica barebone. Puoi trovare molte di queste immagini nella [galleria pubblica di Amazon Elastic Container Registry](https://gallery.ecr.aws/). Assicurati di sceglierne una adatta all'architettura della CPU e, se necessario, alla GPU che desideri utilizzare.

## (Facoltativo) Uno script modificato per il punto di ingresso del contenitore
<a name="modified-container-entry-point"></a>

**Nota**  
Se stai solo aggiungendo software aggiuntivo a un'immagine Braket predefinita, puoi saltare questa sezione.

Per eseguire codice non Python come parte del tuo lavoro ibrido, modifica lo script Python che definisce il punto di ingresso del contenitore. Ad esempio, lo [script `braket_container.py` python su Amazon Braket](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py) Github. Questo è lo script che le immagini precreate da Braket utilizzano per avviare lo script dell'algoritmo e impostare le variabili di ambiente appropriate. Lo script del punto di ingresso del contenitore stesso **deve** essere in Python, ma può avviare script non Python. [Nell'esempio predefinito, puoi vedere che gli script degli algoritmi Python vengono avviati come sottoprocesso [Python](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L274) o come processo completamente nuovo.](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L257) Modificando questa logica, è possibile abilitare lo script del punto di ingresso per avviare script di algoritmi non Python. Ad esempio, è possibile modificare 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)funzione per avviare i processi Rust in base alla fine dell'estensione del file.

Puoi anche scegliere di scriverne uno completamente nuovo`braket_container.py`. Dovrebbe copiare i dati di input, gli archivi di origine e altri file necessari da Amazon S3 nel contenitore e definire le variabili di ambiente appropriate.

## Installa il software e lo script del contenitore necessari con `Dockerfile`
<a name="install-docketfile"></a>

**Nota**  
Se utilizzi un'immagine Braket predefinita come immagine di Docker base, lo script del contenitore è già presente.

Se hai creato uno script contenitore modificato nel passaggio precedente, dovrai copiarlo nel contenitore **e** definire la variabile di ambiente o il nome che hai dato `SAGEMAKER_PROGRAM` al `braket_container.py` nuovo script del punto di ingresso del contenitore.

Di seguito è riportato un esempio `Dockerfile` che consente di utilizzare Julia su istanze Jobs accelerate da 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
```

Questo esempio scarica ed esegue gli script forniti da per garantire la conformità con tutte le licenze AWS Open-Source pertinenti. Ad esempio, attribuendo correttamente qualsiasi codice installato governato da un. MIT license

Se devi includere codice non pubblico, ad esempio codice ospitato in un GitLab archivio GitHub o in un archivio privato, **non** incorporare le chiavi SSH nell'immagine per accedervi. Docker Utilizza invece Docker Compose when you build per consentire l'accesso Docker a SSH sulla macchina host su cui è costruito. Per maggiori informazioni, consulta la guida [Uso sicuro delle chiavi SSH in Docker per accedere ai repository privati](https://www.fastruby.io/blog/docker/docker-ssh-keys.html) di Github.

**DockerCreazione e caricamento della tua immagine**

Una volta definito correttamente`Dockerfile`, sei pronto a seguire i passaggi per [creare un repository Amazon ECR privato](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html), se non ne esiste già uno. Puoi anche creare, etichettare e caricare l'immagine del contenitore nel repository.

Sei pronto per creare, etichettare e inserire l'immagine. Consulta la [documentazione della build di Docker](https://docs.docker.com/reference/cli/docker/buildx/build/) per una spiegazione completa delle opzioni `docker build` e alcuni esempi.

Per il file di esempio sopra definito, puoi eseguire:

```
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
```

**Assegnazione delle autorizzazioni Amazon ECR appropriate**

Braket Hybrid Jobs Dockerle immagini devono essere ospitate in repository privati di Amazon ECR. Per impostazione predefinita, un repository Amazon ECR privato **non** fornisce l'accesso in lettura a Braket Hybrid Jobs IAM role o ad altri utenti che desiderano utilizzare la tua immagine, ad esempio un collaboratore o uno studente. È necessario [impostare una politica di repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html) per concedere le autorizzazioni appropriate. In generale, concedi l'autorizzazione solo agli utenti e ai IAM ruoli specifici a cui desideri accedere alle tue immagini, anziché consentire a chiunque li possieda di image URI recuperarle.

# Esecuzione dei job ibridi di Braket nel tuo contenitore
<a name="running-hybrid-jobs-in-own-container"></a>

Per creare un lavoro ibrido con il tuo contenitore, chiama `AwsQuantumJob.create()` con l'argomento `image_uri` specificato. È possibile utilizzare una QPU, un simulatore on-demand o eseguire il codice localmente sul processore classico disponibile con Braket Hybrid Jobs. Ti consigliamo di testare il codice su un simulatore come SV1 DM1, o TN1 prima di eseguirlo su una vera QPU.

Per eseguire il codice sul processore classico, specifica `instanceType` and the `instanceCount` che usi aggiornando il. `InstanceConfig` Tieni presente che se specifichi un valore `instance_count` > 1, devi assicurarti che il codice possa essere eseguito su più host. Il limite massimo per il numero di istanze che puoi scegliere è 5. Esempio:

```
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",
    # ...)
```

**Nota**  
Usa l'ARN del dispositivo per tracciare il simulatore che hai usato come metadati di lavoro ibridi. I valori accettabili devono seguire il formato. `device = "local:<provider>/<simulator_name>"` Ricordatelo `<provider>` e `<simulator_name>` deve essere composto solo da lettere, numeri`_`,`-`, e`.`. La stringa è limitata a 256 caratteri.  
Se intendi utilizzare BYOC e non utilizzi l'SDK Braket per creare attività quantistiche, dovresti passare il valore della variabile ambientale `AMZN_BRAKET_JOB_TOKEN` al parametro nella richiesta. `jobToken` `CreateQuantumTask` In caso contrario, le attività quantistiche non hanno la priorità e vengono fatturate come normali attività quantistiche autonome.