独自のカスタムコンテナをトレーニングや推論のために Amazon SageMaker で使用する際の問題をトラブルシューティングしたいと考えています。
簡単な説明
SageMaker では、次のいずれかの方法を使用してコンテナイメージをカスタマイズできます。
構築済みの SageMaker コンテナを拡張する: 機能をさらに追加して環境やフレームワークをカスタマイズする必要がある場合は、この方法を使用します。この方法では、深層学習ライブラリが既に定義されているため、コンテナイメージをゼロから構築する必要はありません。
独自のコンテナを使用する: データ処理、モデルトレーニング、リアルタイム推論用の既存のイメージがあり、SageMaker の構築済みイメージでは現在サポートされていない追加機能や安全要件がある場合は、この方法を使用します。
コンテナイメージをゼロから構築する: カスタムアルゴリズムがあり、カスタムコンテナイメージがまだない場合は、この方法を使用するのがベストプラクティスです。
これらのいずれの方法であっても、発生するエラーは主にコンテナイメージが誤って構築されていることに関連している可能性があります。そのため、コンテナが正しく設定されていることを確認してください。
解決方法
構築済みの SageMaker コンテナを拡張する
- 環境変数 SAGEMAKER_SUBMIT_DIRECTORY と SAGEMAKER_PROGRAM が Dockerfile で設定されていることを確認してください。
- 必要な追加ライブラリが Dockerfile にインストールされていることを確認してください。次のコマンドを実行して、これを行うことができます。
# SageMaker PyTorch image
FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.5.1-cpu-py36-ubuntu16.04
ENV PATH="/opt/ml/code:${PATH}"
# this environment variable is used by the SageMaker PyTorch container to determine our user code directory.
ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code
# install the libraries using pip
COPY requirements.txt./requirements.txt
RUN pip install requirements.txt
# /opt/ml and all subdirectories are utilized by SageMaker, use the /code subdirectory to store your user code.
COPY cifar10.py /opt/ml/code/cifar10.py
# Defines cifar10.py as script
entrypoint
ENV SAGEMAKER_PROGRAM cifar10.py
- イメージの構築が成功したら、コンテナをローカルモードで実行します。イメージが想定どおりに動作することを確認してください。
詳細については、「Extend a prebuilt container」(構築済みコンテナを拡張する) を参照してください。
独自のコンテナを使用する
それぞれの SageMaker Toolkit ライブラリがトレーニングまたは推論用にインストールされていることを確認してください。これらのツールキットは、コンテナの起動時に実行する必要があるコードを含むエントリポイントとともに、コードやその他のリソースの場所を定義します。SageMaker トレーニングジョブまたは推論エンドポイントを作成すると、SageMaker によって次のディレクトリが作成されます。
/opt/ml
├── input
│
├── model
│
├── code
│
├── output
│
└── failure
トレーニングジョブを実行すると、/opt/ml/input ディレクトリには、Amazon Simple Storage Service (Amazon S3) に保存されているデータへのアクセスに使用されるデータチャネルに関する情報が含まれます。トレーニングスクリプト (train.py) とその依存関係は opt/ml/code に保存されます。トレーニングジョブが完了したら、必ずスクリプトが最終モデルを /opt/ml/model ディレクトリに書き込むようにしてください。
トレーニングされたモデルを SageMaker でホストして推論を行うと、モデルは /opt/ml/model に保存され、推論コード (inference.py) は /opt/ml/code に保存されます。
詳細については、「Adapting your own Docker container to work with SageMaker」(独自の Docker コンテナを SageMaker と連携するように調整する) を参照してください。
コンテナをゼロから構築する
- コンテナが実行可能ファイルとして実行されることを確認するには、Dockerfile 内の exec 形式の ENTRYPOINT 命令を使用します。
ENTRYPOINT ["python", "cifar10.py"]
- トレーニングジョブの場合、トレーニングスクリプトは、トレーニングが成功した場合は 0 で終了し、トレーニングが失敗した場合は 0 以外の終了コードで終了する必要があります。
- 最終モデルが /opt/ml/model に書き込まれており、すべての依存関係とアーティファクトが /opt/ml/output に保存されているようにしてください。トレーニングジョブが失敗した場合、スクリプトは失敗に関する情報を /opt/ml/output/failure に書き込む必要があります。
- 推論エンドポイントを作成するときは、モデルが FILENAME.tar.gz 形式で保存されるようにしてください。コンテナは、推論のために**/invocations** で HTTP POST リクエストを実装し、エンドポイントのヘルスチェックのために /ping で HTTP GET リクエストを実装する必要があります。
詳細については、「Create a container with your own algorithms and models」(独自のアルゴリズムとモデルを使用してコンテナを作成する) を参照してください。
関連情報
Use the Amazon SageMaker local mode to train on your notebook instance (ノートブックインスタンスのトレーニングに Amazon SageMaker のローカルモードを使用する)