翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
独自のコンテナを持ち込むためのレシピ
このセクションでは、ハイブリッドジョブを Braket bring your own container (BYOC)するために必要なもの、つまりカスタムDockerイメージを起動して実行するためにそれらを組み合わせるスクリプト、ファイル、ステップをstep-by-stepステップガイドで説明します。2 つの一般的なケースのレシピを提供しています。
-
Docker イメージに追加のソフトウェアをインストールし、ジョブで Python アルゴリズムスクリプトのみを使用します。
-
Hybrid Jobs で Python 以外の言語で記述されたアルゴリズムスクリプト、または x86 以外の CPU アーキテクチャを使用します。
コンテナエントリスクリプトの定義は、ケース 2 ではより複雑です。
Braket がハイブリッドジョブを実行すると、リクエストされた数とタイプの Amazon EC2 インスタンスを起動し、Dockerイメージ URI 入力で指定されたイメージを実行して、それらのインスタンスでジョブを作成します。BYOC 機能を使用する場合は、読み取りアクセス権があるプライベート Amazon ECR リポジトリでホストされているイメージ URI を指定します。Braket Hybrid Jobs は、そのカスタムイメージを使用してジョブを実行します。
Hybrid Jobs で使用できるDockerイメージの構築に必要な特定のコンポーネント。の記述と構築に慣れていない場合はDockerfiles
、必要に応じて Dockerfile のドキュメント
必要なものの概要は次のとおりです。
Dockerfile のベースイメージ
Python を使用していて、Braket が提供するコンテナで提供されているものの上にソフトウェアをインストールする場合、ベースイメージのオプションは、GitHub リポジトリFROM [IMAGE_URI_HERE]
次に、残りの Dockerfileに入力して、コンテナに追加するソフトウェアをインストールしてセットアップします。構築済みの Braket イメージには既に適切なコンテナエントリポイントスクリプトが含まれているため、これを含めることを心配する必要はありません。
C++、Rust、Julia などの Python 以外の言語を使用する場合、または ARM などの x86 以外の CPU アーキテクチャ用のイメージを構築する場合は、ベアボーンパブリックイメージの上に構築する必要がある場合があります。このようなイメージの多くは、Amazon Elastic Container Registry Public Gallery
(オプション) 変更されたコンテナエントリポイントスクリプト
注記
構築済みの Braket イメージにのみソフトウェアを追加する場合は、このセクションをスキップできます。
ハイブリッドジョブの一部として Python 以外のコードを実行するには、コンテナエントリポイントを定義する Python スクリプトを変更する必要があります。例えば、braket_container.py
Amazon Braket Github の Python スクリプトthekick_off_customer_script()
まったく新しい を記述することもできますbraket_container.py
。入力データ、ソースアーカイブ、およびその他の必要なファイルを Amazon S3 からコンテナにコピーし、適切な環境変数を定義する必要があります。
で必要なソフトウェアとコンテナスクリプトをインストールする Dockerfile
注記
構築済みの Braket イメージをDockerベースイメージとして使用している場合、コンテナスクリプトは既に存在します。
前のステップで変更したコンテナスクリプトを作成した場合は、コンテナにコピーし、環境変数を SAGEMAKER_PROGRAM
に定義するかbraket_container.py
、新しいコンテナエントリポイントスクリプトに名前を付けたものを定義する必要があります。
以下は、GPU アクセラレーションDockerfile
の Jobs インスタンスで Julia を使用できるようにする の例です。
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
この例では、 は が提供するスクリプトをダウンロードして実行 AWS し、関連するすべてのオープンソースライセンスへの準拠を確保します。例えば、 によって管理されるインストール済みコードに適切に帰属させることですMIT license。
プライベート GitHub または GitLab リポジトリでホストされているインスタンスコードなど、非パブリックコードを含める必要がある場合は、Dockerイメージに SSH キーを埋め込んでアクセスしないでください。代わりに、ビルドDocker Compose時に を使用して、ビルドされているホストマシン上の SSH Dockerへのアクセスを に許可します。詳細については、Docker の「Securely using SSH keys in Docker to access private Github repositories
Dockerイメージの構築とアップロード
適切に定義された ではDockerfile
、プライベート Amazon ECR リポジトリが存在しない場合は、そのリポジトリを作成するステップに従う準備が整いました。コンテナイメージをビルド、タグ付け、リポジトリにアップロードすることもできます。
イメージを構築、タグ付け、プッシュする準備が整いました。のオプションの完全な説明docker build
といくつかの例については、Docker ビルドドキュメントを参照してください
上記のサンプルファイルでは、以下を実行できます。
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
適切な Amazon ECR アクセス許可の割り当て
Braket Hybrid Jobs Docker イメージはプライベート Amazon ECR リポジトリでホストする必要があります。デフォルトでは、プライベート Amazon ECR リポジトリは、 への読み取りアクセスや、共同作業者Braket Hybrid Jobs IAM roleや学生などのイメージを使用する他のユーザーへの読み取りアクセスを提供しません。適切なアクセス許可を付与するには、リポジトリポリシーを設定する必要があります。一般的に、 を使用してすべてのユーザーがイメージをプルimage URIできるようにするのではなく、イメージにアクセスする特定のユーザーとIAMロールにのみアクセス許可を付与します。