

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Bawa wadah Anda sendiri (BYOC)
<a name="braket-jobs-byoc"></a>

Amazon Braket Hybrid Jobs menyediakan tiga kontainer pra-bangun untuk menjalankan kode di lingkungan yang berbeda. Jika salah satu wadah ini mendukung kasus penggunaan Anda, Anda hanya perlu menyediakan skrip algoritme saat membuat pekerjaan hibrida. Dependensi kecil yang hilang dapat ditambahkan dari skrip algoritme Anda atau dari `requirements.txt` file yang menggunakan. `pip`

Jika tidak ada kontainer ini yang mendukung kasus penggunaan Anda, atau jika Anda ingin mengembangkannya, Braket Hybrid Jobs mendukung menjalankan pekerjaan hibrida dengan gambar Docker penampung kustom Anda sendiri, atau membawa wadah Anda sendiri (BYOC). Pastikan itu adalah fitur yang tepat untuk kasus penggunaan Anda. 

**Topics**
+ [Kapan membawa wadah saya sendiri keputusan yang tepat?](#bring-own-container-decision)
+ [Resep untuk membawa wadah Anda sendiri](bring-own-container-recipe.md)
+ [Menjalankan pekerjaan hybrid Braket di wadah Anda sendiri](running-hybrid-jobs-in-own-container.md)

## Kapan membawa wadah saya sendiri keputusan yang tepat?
<a name="bring-own-container-decision"></a>

Membawa wadah Anda sendiri (BYOC) ke Braket Hybrid Jobs menawarkan fleksibilitas untuk menggunakan perangkat lunak Anda sendiri dengan menginstalnya di lingkungan yang dikemas. Bergantung pada kebutuhan spesifik Anda, mungkin ada cara untuk mencapai fleksibilitas yang sama tanpa harus melalui BYOC Docker build penuh - unggahan Amazon ECR - siklus URI gambar khusus.

**catatan**  
BYOC mungkin bukan pilihan yang tepat jika Anda ingin menambahkan sejumlah kecil paket Python tambahan (umumnya kurang dari 10) yang tersedia untuk umum. Misalnya, jika Anda menggunakan PyPi.

Dalam hal ini, Anda dapat menggunakan salah satu gambar Braket yang sudah dibuat sebelumnya, dan kemudian menyertakan `requirements.txt` file di direktori sumber Anda pada pengiriman pekerjaan. File secara otomatis dibaca, dan `pip` akan menginstal paket dengan versi yang ditentukan seperti biasa. Jika Anda menginstal sejumlah besar paket, runtime pekerjaan Anda mungkin meningkat secara substansional. Periksa Python dan, jika ada, versi CUDA dari wadah bawaan yang ingin Anda gunakan untuk menguji apakah perangkat lunak Anda akan berfungsi.

BYOC diperlukan ketika Anda ingin menggunakan bahasa non-Python (seperti C \$1\$1 atau Rust) untuk skrip pekerjaan Anda, atau jika Anda ingin menggunakan versi Python yang tidak tersedia melalui wadah pra-bangun Braket. Ini juga merupakan pilihan yang baik jika:
+ Anda menggunakan perangkat lunak dengan kunci lisensi, dan Anda perlu mengautentikasi kunci itu terhadap server lisensi untuk menjalankan perangkat lunak. Dengan BYOC, Anda dapat menyematkan kunci lisensi dalam Docker gambar Anda dan menyertakan kode untuk mengotentikasi itu.
+ Anda menggunakan perangkat lunak yang tidak tersedia untuk umum. Misalnya, perangkat lunak di-host di pribadi GitLab atau GitHub repositori yang Anda perlukan kunci SSH tertentu untuk diakses.
+ Anda perlu menginstal serangkaian besar perangkat lunak yang tidak dikemas dalam wadah yang disediakan Braket. BYOC akan memungkinkan Anda untuk menghilangkan waktu startup yang lama untuk wadah pekerjaan hybrid Anda karena instalasi perangkat lunak.

BYOC juga memungkinkan Anda membuat SDK atau algoritme khusus Anda tersedia bagi pelanggan dengan membangun Docker wadah dengan perangkat lunak Anda dan membuatnya tersedia bagi pengguna Anda. Anda dapat melakukan ini dengan menetapkan izin yang sesuai di Amazon ECR.

**catatan**  
Anda harus mematuhi semua lisensi perangkat lunak yang berlaku.

# Resep untuk membawa wadah Anda sendiri
<a name="bring-own-container-recipe"></a>

Di bagian ini, kami menyediakan step-by-step panduan tentang apa yang Anda butuhkan bring your own container (BYOC) untuk Braket Hybrid Jobs — skrip, file, dan langkah-langkah untuk menggabungkannya agar dapat bangkit dan berjalan dengan gambar kustom Docker Anda. Resep untuk dua kasus umum:

1. Instal perangkat lunak tambahan dalam Docker gambar dan gunakan hanya skrip algoritma Python dalam pekerjaan Anda.

1. Gunakan skrip algoritma yang ditulis dalam bahasa non-Python dengan Hybrid Jobs, atau arsitektur CPU selain x86.

Mendefinisikan *skrip entri kontainer* lebih kompleks untuk kasus 2.

Saat Braket menjalankan Job Hybrid Anda, Braket akan meluncurkan nomor dan jenis instans Amazon EC2 yang diminta, lalu menjalankan gambar Docker yang ditentukan oleh input URI gambar ke pembuatan pekerjaan pada mereka. Saat menggunakan fitur BYOC, Anda menentukan URI gambar yang dihosting di [repositori ECR Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html) pribadi yang memiliki akses Baca. Braket Hybrid Jobs menggunakan gambar kustom itu untuk menjalankan pekerjaan.

Komponen spesifik yang Anda butuhkan untuk membangun Docker gambar yang dapat digunakan dengan Hybrid Jobs. [Jika Anda tidak terbiasa menulis dan membangun`Dockerfiles`, lihat dokumentasi [Dockerfile dan dokumentasinya](https://docs.docker.com/reference/dockerfile/). Amazon ECR CLI](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)

**Topics**
+ [Gambar dasar untuk Dockerfile Anda](#base-image-dockerfile)
+ [(Opsional) Skrip titik masuk kontainer yang dimodifikasi](#modified-container-entry-point)
+ [Instal perangkat lunak dan skrip kontainer yang diperlukan dengan `Dockerfile`](#install-docketfile)

## Gambar dasar untuk Dockerfile Anda
<a name="base-image-dockerfile"></a>

Jika Anda menggunakan Python dan ingin menginstal perangkat lunak di atas apa yang disediakan dalam wadah yang disediakan Braket, opsi untuk gambar dasar adalah salah satu gambar wadah Braket, yang dihosting di [GitHub repo](https://github.com/amazon-braket/amazon-braket-containers) kami dan di Amazon ECR. Anda perlu [mengautentikasi ke Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-authenticate-registry) untuk menarik gambar dan membangun di atasnya. Misalnya, baris pertama Docker file BYOC Anda dapat berupa: `FROM [IMAGE_URI_HERE]`

Selanjutnya, isi sisa Dockerfile untuk menginstal dan mengatur perangkat lunak yang ingin Anda tambahkan ke wadah. Gambar Braket yang sudah dibuat sebelumnya sudah berisi skrip titik masuk kontainer yang sesuai, jadi Anda tidak perlu khawatir untuk memasukkannya.

Jika Anda ingin menggunakan bahasa non-Python, seperti C \$1\$1, Rust, atau Julia, atau jika Anda ingin membuat gambar untuk arsitektur CPU non-x86, seperti ARM, Anda mungkin perlu membangun di atas gambar publik barebone. Anda dapat menemukan banyak gambar seperti itu di [Galeri Publik Amazon Elastic Container Registry](https://gallery.ecr.aws/). Pastikan Anda memilih salah satu yang sesuai untuk arsitektur CPU, dan jika perlu, GPU yang ingin Anda gunakan.

## (Opsional) Skrip titik masuk kontainer yang dimodifikasi
<a name="modified-container-entry-point"></a>

**catatan**  
Jika Anda hanya menambahkan perangkat lunak tambahan ke gambar Braket yang sudah dibuat sebelumnya, Anda dapat melewati bagian ini.

Untuk menjalankan kode non-Python sebagai bagian dari pekerjaan hybrid Anda, modifikasi skrip Python yang mendefinisikan titik masuk kontainer. Misalnya, [skrip `braket_container.py` python di Amazon Braket](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py) Github. Ini adalah skrip gambar yang dibuat sebelumnya oleh Braket digunakan untuk meluncurkan skrip algoritme Anda dan mengatur variabel lingkungan yang sesuai. Skrip titik masuk kontainer itu sendiri **harus** menggunakan Python, tetapi dapat meluncurkan skrip non-Python. [Dalam contoh pra-bangun, Anda dapat melihat bahwa skrip algoritma Python diluncurkan baik sebagai subproses [Python](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L274) atau sebagai proses yang sepenuhnya baru.](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L257) Dengan memodifikasi logika ini, Anda dapat mengaktifkan skrip titik masuk untuk meluncurkan skrip algoritma non-Python. Misalnya, Anda dapat memodifikasi [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)fungsi untuk meluncurkan proses Rust tergantung pada akhir ekstensi file.

Anda juga dapat memilih untuk menulis yang benar-benar baru`braket_container.py`. Ini harus menyalin data input, arsip sumber, dan file lain yang diperlukan dari Amazon S3 ke dalam wadah, dan menentukan variabel lingkungan yang sesuai.

## Instal perangkat lunak dan skrip kontainer yang diperlukan dengan `Dockerfile`
<a name="install-docketfile"></a>

**catatan**  
Jika Anda menggunakan gambar Braket yang sudah dibuat sebelumnya sebagai gambar Docker dasar Anda, skrip kontainer sudah ada.

Jika Anda membuat skrip kontainer yang dimodifikasi pada langkah sebelumnya, Anda harus menyalinnya ke dalam wadah **dan** menentukan variabel `SAGEMAKER_PROGRAM` lingkungan`braket_container.py`, atau apa yang telah Anda beri nama skrip titik masuk kontainer baru Anda.

Berikut ini adalah contoh `Dockerfile` yang memungkinkan Anda untuk menggunakan Julia pada instance Jobs yang dipercepat 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
```

Contoh ini, mengunduh dan menjalankan skrip yang disediakan oleh AWS untuk memastikan kepatuhan terhadap semua lisensi Sumber Terbuka yang relevan. Misalnya, dengan menghubungkan kode yang diinstal dengan benar yang diatur oleh file. MIT license

Jika Anda perlu menyertakan kode non-publik, misalnya kode yang di-host di privat GitHub atau GitLab repositori, **jangan** sematkan kunci SSH pada gambar untuk mengaksesnyaDocker. Sebagai gantinya, gunakan Docker Compose saat Anda membangun Docker untuk memungkinkan mengakses SSH pada mesin host tempat ia dibangun. Untuk informasi selengkapnya, lihat [Securely using SSH keys in Docker to access private Github](https://www.fastruby.io/blog/docker/docker-ssh-keys.html) repositories guide.

**Membangun dan mengunggah gambar Anda Docker**

Dengan didefinisikan dengan benar`Dockerfile`, Anda sekarang siap untuk mengikuti langkah-langkah untuk [membuat repositori Amazon ECR pribadi](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html), jika belum ada. Anda juga dapat membuat, menandai, dan mengunggah gambar kontainer Anda ke repositori.

Anda siap untuk membangun, menandai, dan mendorong gambar. Lihat [dokumentasi build Docker](https://docs.docker.com/reference/cli/docker/buildx/build/) untuk penjelasan lengkap tentang opsi `docker build` dan beberapa contoh.

Untuk file contoh yang ditentukan di atas, Anda dapat menjalankan:

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

**Menetapkan izin ECR Amazon yang sesuai**

Braket Hybrid Jobs Dockergambar harus di-host di repositori Amazon ECR pribadi. Secara default, repo Amazon ECR pribadi **tidak** menyediakan akses baca ke Braket Hybrid Jobs IAM role atau ke pengguna lain yang ingin menggunakan gambar Anda, seperti kolaborator atau siswa. Anda harus [menetapkan kebijakan repositori](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html) untuk memberikan izin yang sesuai. Secara umum, hanya berikan izin kepada pengguna dan IAM peran tertentu yang ingin Anda akses ke gambar Anda, daripada mengizinkan siapa pun image URI yang menariknya.

# Menjalankan pekerjaan hybrid Braket di wadah Anda sendiri
<a name="running-hybrid-jobs-in-own-container"></a>

Untuk membuat pekerjaan hybrid dengan container Anda sendiri, panggil `AwsQuantumJob.create()` dengan argumen yang `image_uri` ditentukan. Anda dapat menggunakan QPU, simulator sesuai permintaan, atau menjalankan kode Anda secara lokal pada prosesor klasik yang tersedia dengan Braket Hybrid Jobs. Kami merekomendasikan pengujian kode Anda pada simulator seperti SV1, DM1, atau TN1 sebelum menjalankan QPU nyata.

Untuk menjalankan kode Anda pada prosesor klasik, tentukan `instanceType` dan yang `instanceCount` Anda gunakan dengan memperbarui file`InstanceConfig`. Perhatikan bahwa jika Anda menentukan `instance_count` > 1, Anda perlu memastikan bahwa kode Anda dapat berjalan di beberapa host. Batas atas untuk jumlah instance yang dapat Anda pilih adalah 5. Contoh:

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

**catatan**  
Gunakan perangkat ARN untuk melacak simulator yang Anda gunakan sebagai metadata pekerjaan hibrida. Nilai yang dapat diterima harus mengikuti format`device = "local:<provider>/<simulator_name>"`. Ingat itu `<provider>` dan `<simulator_name>` harus hanya terdiri dari huruf, angka,`_`,`-`, dan`.`. String dibatasi hingga 256 karakter.  
Jika Anda berencana untuk menggunakan BYOC dan Anda tidak menggunakan Braket SDK untuk membuat tugas kuantum, Anda harus meneruskan nilai variabel lingkungan `AMZN_BRAKET_JOB_TOKEN` ke `jobToken` parameter dalam permintaan. `CreateQuantumTask` Jika tidak, tugas kuantum tidak mendapatkan prioritas dan ditagih sebagai tugas kuantum mandiri biasa.