Resep untuk membawa wadah Anda sendiri - Amazon Braket

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

Resep untuk membawa wadah Anda sendiri

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

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

  2. 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 Hybrid Job Anda, Braket meluncurkan nomor dan jenis EC2 instans Amazon yang diminta, lalu menjalankan Docker gambar yang ditentukan oleh input URI gambar untuk pembuatan pekerjaan pada mereka. Saat menggunakan fitur BYOC, Anda menentukan URI gambar yang dihosting di repositori ECR Amazon 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 dengan menulis dan membangunDockerfiles, kami sarankan Anda merujuk ke dokumentasi Dockerfile dan Amazon ECR CLI dokumentasi yang diperlukan saat Anda membaca petunjuk ini.

Gambar dasar untuk Dockerfile Anda

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 kami dan di Amazon ECR. Anda perlu mengautentikasi ke Amazon ECR untuk menarik gambar dan membangun di atasnya. Misalnya, baris pertama BYOC Anda Docker file bisa jadi: 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 ++, 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. 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

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, Anda harus memodifikasi skrip Python yang mendefinisikan titik masuk kontainer. Misalnya, skrip braket_container.py python di Amazon Braket 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 atau sebagai proses yang sepenuhnya baru. Dengan memodifikasi logika ini, Anda dapat mengaktifkan skrip titik masuk untuk meluncurkan skrip algoritma non-Python. Misalnya, Anda dapat memodifikasi thekick_off_customer_script()fungsi untuk meluncurkan proses Rust tergantung pada akhir ekstensi file.

Anda juga dapat memilih untuk menulis yang benar-benar barubraket_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

catatan

Jika Anda menggunakan gambar Braket yang sudah dibuat sebelumnya sebagai Docker gambar dasar, 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 lingkunganbraket_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 MIT license.

Jika Anda perlu menyertakan kode non-publik, misalnya kode yang di-host di privat GitHub atau GitLab repositori, jangan menyematkan kunci SSH di Docker gambar untuk mengaksesnya. Sebagai gantinya, gunakan Docker Compose ketika Anda membangun untuk mengizinkan Docker untuk mengakses SSH pada mesin host tempat ia dibangun. Untuk informasi selengkapnya, lihat Securely using SSH keys in Docker to access private Github repositories guide.

Membangun dan mengunggah Docker gambar

Dengan didefinisikan dengan benarDockerfile, Anda sekarang siap untuk mengikuti langkah-langkah untuk membuat repositori Amazon ECR pribadi, 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 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 Docker gambar harus di-host di repositori Amazon ECR pribadi. Secara default, repo ECR Amazon pribadi tidak menyediakan akses baca ke Braket Hybrid Jobs IAM role atau untuk pengguna lain yang ingin menggunakan gambar Anda, seperti kolaborator atau siswa. Anda harus menetapkan kebijakan repositori untuk memberikan izin yang sesuai. Secara umum, hanya memberikan izin kepada pengguna tertentu dan IAM peran yang Anda inginkan untuk mengakses gambar Anda, daripada mengizinkan siapa pun dengan image URI untuk menarik mereka.