Chapter 05

SageMaker Training Job概要

kazuhito
kazuhito
2021.12.21に更新

概要

SageMaker Training Jobの概要です。
このチャプターは以下ページを参考にしています。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/how-it-works-training.html
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/docker-containers.html

SageMaker Training Job概要

以下は、SageMaker Training Jobのイメージ図です。

Amazon SageMaker でモデルをトレーニングする 」の図を一部抜粋。

超ざっくり言うと、ECRにDockerイメージを置いておいて、
SageMakerがインスタンスを準備して、コンテナを起動します。
起動したコンテナ内の特定パスに、S3から入力データをコピーし、学習を回した後、
出力用ディレクトリファイルを置いておくと、S3にアップロードされる感じです。

以下は、SageMakerが実施するため、
ユーザーが注力するのはトレーニングコード作成がメインになります。

  • インスタンスの準備
  • Dockerコンテナの起動
  • S3からの入力データのコピー
  • S3への出力データのアップロード

上記は、Dockerコンテナを例に記載しましたが、
トレーニングアルゴリズムは以下を使用することが出来ます。
「独自のカスタムアルゴリズムを使用する」が今回使用する方法に該当します。

トレーニングアルゴリズム 概要
SageMaker が提供するアルゴリズムを使用する SageMaker が提供するトレーニングアルゴリズムを使用する。
提供アルゴリズムのリストは、Use Amazon SageMaker Built-in Algorithms を参照。
SageMaker デバッガーを使用する TensorFlow、PyTorch および Apache MXNet 学習フレームワークまたは XGBoost アルゴリズムで作業をする際に、トレーニングプロセス全体を通してトレーニングパラメータとデータを検査します。
SageMaker でApache Spark を使用する SageMaker でモデルをトレーニングするために Apache Spark で使用できるライブラリを提供します。
ディープラーニングフレームワークで
トレーニングするカスタムコードを提出する
モデルトレーニングに TensorFlow、PyTorch または Apache MXNet を使用するカスタム Python コードを送信できます。
独自のカスタムアルゴリズムを使用する Docker イメージとしてコードをまとめ、SageMaker でイメージのレジストリパスを指定します。CreateTrainingJobAPI コールを使用します。
AWS Marketplace のアルゴリズムを使用する AWS Marketplace でアルゴリズムとモデルパッケージを見つけて使用する。
「Amazon SageMaker でモデルをトレーニングする」から抜粋。

トレーニングで使用するDockerコンテナについて

トレーニング用のコンテナは以下のようなディレクトリ構成になります。
ユーザーが用意するのはトレーニング用のコード(/opt/program/train)のみです。

opt
├── program
│   └─ train
└── ml
    ├── input
    │   ├── config
    │   │   ├── hyperparameters.json 
    │   │   ├── inputdataconfig.json
    │   │   └── resourceconfig.json
    │   └── data
    │       └── <channel_name>
    │           └── <input data>
    ├── model
    └── output
        └── failure

各ファイルやディレクトリの概要は以下です。

パス 概要
/opt/program/train コンテナ起動時に実行されるスクリプトファイル。
学習処理などを記述する。
また、ディレクトリ名はprogramでなくても良く、
programにはtrain以外のファイルを格納しても良い。
※コンフィグファイルやモデルファイルなど
/opt/ml SageMakerによって用意されるディレクトリ。
コンテナイメージ作成時には用意しない。
/opt/ml/input/config/hyperparameters.json 指定したハイパーパラメータがJSONファイルとして格納される
必要に応じてtrainから読み込んで使用する。
/opt/ml/input/config/resourceconfig.json 分散学習のための設定がJSONファイルとして格納される
/opt/ml/input/config/inputdataconfig.json 入力データ情報がJSONファイルとして格納される。
チャネルごとにコンテンツタイプやインプットモードが記述される。
/opt/ml/input/data/<channel_name>/ 指定したチャネルの入力データ格納される。
コンテナ起動時にS3からデータがコピーされる。
/opt/ml/model ユーザーが学習したモデルなどを格納する。
ここに格納されたファイルは、SageMakerが「model.tar.gz」に圧縮しS3にアップロードする。
ファイルは複数格納しても良い。
/opt/ml/output ジョブ失敗時などのエラーメッセージを書き込む。

処理の流れ 概要

上記のディレクトリ構成を踏まえ、改めて処理の流れの概要を記載します。
トレーニングジョブを発行すると、

  1. SageMaker がインスタンスを準備する
  2. インスタンスに学習用コンテナイメージを起動
    以下のようなコマンドで起動される感じで、trainスクリプトが実行される
    docker run 【イメージ名】 train
  3. trainスクリプト内で、/opt/ml/input の config や data 情報を読み込み学習を行う
  4. trainスクリプト内で、学習したモデルファイルを/opt/ml/modelに出力する。
  5. SageMaker が、/opt/ml/model 内のファイルを「output.tar.gz」に圧縮しS3にアップロードする。

トレーニングジョブで推論

SageMaker Training Job の名が表す通り、思いっきりモデル学習用のためのサービスですが、、、
以下のように扱って推論処理パイプラインとして扱います。

パス 概要
/opt/program/train train という名前だが推論処理を記述する。
また、今回はモデルファイルを program 配下に同梱する。
/opt/ml/input/config/hyperparameters.json 推論や処理の制御に必要なパラメータの受け渡しに使用する。
/opt/ml/input/data/<channel_name>/ 推論対象の動画を格納するために使用する。
/opt/ml/model 推論結果などを格納する。
※「model.tar.gz」という名前でアップロードされますが、、、