モデルのトレーニングとデプロイのための Docker コンテナ
Amazon SageMaker AI は、構築およびランタイムタスク用に Docker コンテナを広範に使用します。SageMaker AI は、組み込みアルゴリズム用に構築済み Docker イメージを提供し、トレーニングと推論に使用される深層学習フレームワークをサポートします。コンテナを使用することで、機械学習アルゴリズムをトレーニングし、規模を問わずモデルを迅速かつ確実にデプロイできます。このセクションの各トピックでは、独自のユースケース用にこれらのコンテナをデプロイする方法について説明します。Amazon SageMaker Studio Classic で使用する独自のコンテナを取り込む方法については、「Amazon SageMaker Studio Classic でのカスタムイメージ」を参照してください。
トピック
SageMaker AI を使用したスクリプトの実行、アルゴリズムのトレーニング、またはモデルのデプロイのシナリオ
Amazon SageMaker AI は、スクリプトの実行、アルゴリズムのトレーニング、モデルのデプロイに、常に Docker コンテナを使用します。コンテナとのエンゲージメントのレベルは、ユースケースによって異なります。
以下のデシジョンツリーは、3 つの主なシナリオを示しています。SageMaker AI で構築済み Docker コンテナを使用する場合のユースケース、構築済み Docker コンテナを拡張するユースケース、独自のコンテナを構築する場合のユースケースです。
SageMaker AI で構築済みの Docker コンテナを使用する場合のユースケース
SageMaker AI でコンテナを使用する場合は、次のユースケースを検討してください。
-
構築済みの SageMaker AI アルゴリズム — 組み込みアルゴリズムに付属するイメージを使用してください。詳細については、「Use Amazon SageMaker AI Built-in Algorithms or Pre-trained Models」を参照してください。
-
構築済み SageMaker AI コンテナを使用したカスタムモデル — カスタムモデルをトレーニングまたはデプロイするが、TensorFlow や PyTorch などの構築済み SageMaker AI コンテナを含むフレームワークを使用する場合は、以下のオプションのいずれかを選択します。
-
カスタムパッケージが不要で、必要なパッケージがコンテナに既にすべて含まれている場合、フレームワークに関連する構築済み Docker イメージを使用してください。詳細については、「構築済みの SageMaker AI Docker イメージ」を参照してください。
-
構築済みコンテナのいずれかにカスタムパッケージをインストールする必要がある場合、構築済みの Docker イメージで requirements.txt ファイルが許可されていることを確認するか、以下のユースケースに基づいて構築済みコンテナを拡張してください。
-
構築済みの Docker コンテナを拡張するユースケース
構築済みの Docker コンテナを拡張するユースケースは次のとおりです。
-
依存関係をインポートできない場合 — フレームワークに関連する構築済みの Docker イメージを拡張してください。詳細については「構築済みコンテナを拡張する」を参照してください。
-
構築済みコンテナの依存関係をインポートすることができず、構築済みコンテナが requirements.txt をサポートする場合 — 必要な依存関係はすべて requirements.txt に追加してください。以下のフレームワークは requirements.txt の使用をサポートしています。
独自のコンテナを構築するためのユースケース
カスタムモデルを構築またはトレーニングしていて、構築済みのイメージがないカスタムフレームワークが必要な場合は、カスタムコンテナを構築してください。
TensorFlow モデルのトレーニングとデプロイのユースケースの例として、次のガイドでは、ユースケースの前のセクションのどのオプションがケースに適合するかを判断する方法を示します。
TensorFlow モデルのトレーニングとデプロイに、以下の要件があると仮定します。
-
TensorFlow モデルはカスタムモデルです。
-
TensorFlow モデルは TensorFlow フレームワークで構築されるため、TensorFlow の構築済みフレームワークコンテナを使用してモデルのトレーニングとホストを行います。
-
エントリポイント
スクリプトまたは推論スクリプトでカスタムパッケージが必要な場合は、構築済みのコンテナを拡張するか、requirements.txt ファイルを使用してランタイム時に依存関係をインストールしてください 。
必要なコンテナの種類を決定すると、以下のリストに前述のオプションの詳細が表示されます。
-
組み込みの SageMaker AI アルゴリズムまたはフレームワークを使用する。ほとんどのユースケースでは、コンテナを気にすることなく、組み込みのアルゴリズムとフレームワークを使用できます。これらのアルゴリズムは、SageMaker AI コンソール、AWS Command Line Interface (AWS CLI)、Python ノートブック、または Amazon SageMaker Python SDK
からトレーニングおよびデプロイできます。そのためには、Estimator の作成時にアルゴリズムまたはフレームワークのバージョンを指定してください。使用可能な組み込みアルゴリズムは、「Amazon SageMaker の組み込みアルゴリズムと事前トレーニング済みモデル」トピックで項目別に説明しています。使用可能なフレームワークの詳細については、「ML のフレームワークと言語」を参照してください。SageMaker ノートブックインスタンスで実行されている Jupyter ノートブックを使用して、組み込みアルゴリズムをトレーニングおよびデプロイする方法の例については、「Amazon SageMaker AI のセットアップガイド」のトピックを参照してください。 -
構築済みの SageMaker AI コンテナイメージを使用する。別の方法として、Docker コンテナを使用して組み込みのアルゴリズムとフレームワークを使用することもできます。SageMaker AI は、Apache MXNet、TensorFlow、PyTorch、Chainer など、いくつかの最も一般的な機械学習フレームワーク用に、組み込みアルゴリズムおよび構築済みの Docker イメージのコンテナを提供しています。使用可能な SageMaker イメージの完全なリストについては、「使用可能な Deep Learning Containers イメージ
」を参照してください。また、scikit-learn や SparkML などの機械学習ライブラリもサポートしています。Amazon SageMaker Python SDK を使用すると、完全なコンテナ URI をそれぞれの SageMaker SDK Estimatorクラスに渡すことで、コンテナをデプロイできます。SageMaker AI で現在サポートされている深層学習フレームワークの完全なリストについては、「深層学習用の構築済み SageMaker AI Docker イメージ」を参照してください。scikit-learn および SparkML の構築済みコンテナイメージの詳細については、「Scikit-learn および Spark ML 用 Docker イメージへのアクセス」を参照してください。Amazon SageMaker Python SDKでのフレームワークの使用の詳細については、「機械学習フレームワークと言語」でそれぞれのトピックを参照してください。 -
構築済みの SageMaker AI コンテナイメージを拡張する。構築済みの SageMaker AI アルゴリズムまたはモデルの Docker イメージを拡張する場合は、SageMaker イメージをニーズに合わせて変更できます。例については、「PyTorch コンテナの拡張
」を参照してください。 -
既存のコンテナイメージを適応させる: 既存のコンテナイメージを SageMaker AI に適応させて連携させる場合は、SageMaker トレーニングツールキットまたは推論ツールキットを有効化するよう Docker コンテナを変更する必要があります。独自のコンテナを構築してアルゴリズムをトレーニングまたはホストする方法を示す例については、「Bring Your Own R Algorithm
」を参照してください。
Docker コンテナとデプロイのトラブルシューティング
以下は、SageMaker AI で Docker コンテナを使うときに発生する一般的な問題です。各問題の後に、問題の解決策が説明されています。
-
エラー: SageMaker AI に Docker デーモンがなくなりました。
このエラーを修正するには、次のコマンドを使用して Docker を再起動します。
sudo service docker restart -
エラー: Docker コンテナの
/tmpディレクトリで容量不足が発生しました。Docker コンテナは
/および/tmpのパーティションを使用してコードを保存します。ローカルモードで大きなコードモジュールを使用すると、これらのパーティションはすぐにいっぱいになります。SageMaker AI Python SDK では、この問題を回避するために、ローカルモードのルートディレクトリ用のカスタム一時ディレクトリを指定できます。Amazon Elastic Block Store ボリュームストレージでカスタム一時ディレクトリを指定するには、次のパス
~/.sagemaker/config.yamlにファイルを作成し、次の設定を追加します。container_rootとして指定するディレクトリは既存であることが必要です。SageMaker AI Python SDK が作成することはありません。local: container_root: /home/ec2-user/SageMaker/tempこの設定では、ローカルモードが使用するのは
/tempディレクトリで、デフォルトの/tmpディレクトリではありません。 -
SageMaker ノートブックインスタンスのスペース不足エラー
SageMaker ノートブックインスタンスで実行される Docker コンテナは、デフォルトでノートブックインスタンスのルート Amazon EBS ボリュームを使用します。スペース不足エラーを解決するには、Docker コマンドのボリュームパラメータの一部として、ノートブックインスタンスにアタッチされた Amazon EBS ボリュームのパスを指定します。
docker run -vEBS-volume-path:container-path