SlideShare a Scribd company logo
5
Most read
7
Most read
9
Most read
Amazon SageMakerで
カスタムコンテナを使った学習
Training Toolkitを使った実装
2022/08/27 第14回勉強会
自己紹介
● 名前: 西岡 賢一郎
○ Twitter: @ken_nishi
○ note: 西岡賢一郎@研究者から経営者へ (https://note.com/kenichiro)
○ YouTube: 【経営xデータサイエンスx開発】西岡 賢一郎のチャンネル
(https://www.youtube.com/channel/UCpiskjqLv1AJg64jFCQIyBg)
● 経歴
○ 東京大学で位置予測アルゴリズムを研究し博士 (学術) を取得
○ 東京大学の博士課程在学中にデータサイエンスをもとにしたサービスを提供する株式会社ト
ライディアを設立
○ トライディアを別のIT会社に売却し、CTOとして3年半務め、2021年10月末にCTOを退職
○ CDPのスタートアップと株式会社データインフォームドの2つに所属
○ 自社および他社のプロダクト開発チーム・データサイエンスチームの立ち上げ経験
今回のお話
● カスタムコンテナ
● sagemaker-training-toolkit
● SageMaker上でイメージのbuild
● デモ
カスタムコンテナ (前回のおさらい)
SageMakerのEndpoint作成フロー
SageMakerで学習を実施しEndpoint作成する
Step
1.学習 (fit)
2.モデル作成
3.Endpoint Config作成
4.Endpoint作成
トレーニングと推論のDockerイメージ
トレーニングと推論では別々のイメージを使うこともできる。
小さいコンテナのほうが実行は早くなるが、管理コストとのバランスで決める。
トレーニング用イメージ 推論用イメージ
カスタムコンテナ
出典: https://aws.amazon.com/jp/blogs/news/sagemaker-custom-containers-pattern-training/
カスタムコンテナは以下の3種類のパターンで
作成できる
1. AWS 提供のコンテナイメージを拡張
a. 最も簡単
b. 独自ライブラリを使いたいときなど
2. 独自のコンテナイメージ + SageMaker
Training Toolkit
a. SageMaker Training Toolkit
3. スクラッチのコンテナイメージ
a. 非推奨
b. 最も難しい
c. SageMaker Training Jobの外部とデータとの
やり取りの使用の理解が必要
今回は、2の独自のコンテナイメージ +
SageMaker Training Toolkitでカスタムコンテナ
を作る方法を紹介
今回はこちらを紹介
sagemaker-training-toolkit
sagemaker-training-toolkitのイメージ作成に必要な3つのこと
必ずやることは以下の3つ
1. 使いたいイメージの中で
pip install sagemaker-training
を実行
2. 学習用スクリプトを /opt/ml/code下に配置
3.SAGEMAKER_PROGRAM でスクリプトを指定
(カスタムコンテナ構築に必要な唯一の環境変
数)
出典: https://github.com/aws/sagemaker-training-toolkit
指定する項目が少なくて
実装も簡単!
https://github.com/knishioka/machine-learning-workshop/blob/main/sagemaker/sklearn_custom_ml.py
学習用スクリプト train.py
大きく分けて2つのパートを用意しておく
1.モデルを学習しシリアライズし
/opt/ml/modelに保存
○ SKlearnのコンテナはカスタムスクリプトをイン
ポートするため、間違えて実行されないように
if __name__ == "__main__" に入れておく
2.学習済みモデルを/opt/ml/modelから読
み込む
○ model_fnは、学習、評価、予測をサポートする
すべてのロジックを含む関数
学習 → シリアライズ → /opt/ml/modelに保存
/opt/ml/modelからモデル読み込み
学習パートと推論用のモデル読み込
みを実装。
推論を別のイメージにする場合は推
論用の実装は不要。
学習 推論
コンテナ内の構造
● /opt/ml
すべてSageMaker用となるため、アルゴリズムが必要
とするようなデータを置いてはいけない
● /opt/ml/input
トレーニングジョブ実行時に利用
● /opt/ml/code
コンテナが実行するスクリプトを配置
● /opt/ml/model
アルゴリズムによって生成されたモデルを書き込む
● /opt/ml/output
モデル以外に保存するアーティファクトを書き込む
● /opt/ml/failure
トレーニングに失敗した場合、すべてのアルゴリズム
の出力を書き込む
出典: https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/amazon-sagemaker-toolkits.html
CHANNELを理解する
SM_CHANNEL_XXXのXXXがそのまま展開(Fileモード)。
例えば、以下のように実行すると
fit({
"training": "s3://path/to/training"
"validation": "s3://path/to/validation",
"testing": "s3://path/to/testing"
})
コンテナ内の以下の場所にデータが展開される
● /opt/ml/input/data/training
● /opt/ml/input/data/validation
● /opt/ml/input/data/testing
チャネル名は大文字として環境変数に設定される
● SM_CHANNEL_TRAINING=/opt/ml/input/data/training
● SM_CHANNEL_VALIDATION=/opt/ml/input/data/validation
● SM_CHANNEL_TESTING=/opt/ml/input/data/testing
SageMakerがトレーニング時に行うこと
● docker run image train を実行
○ train引数によりコンテナ内のデフォルトのCMDが上書きされる
● ENTRYPOINTで実行形式を指定
○ 例: ENTRYPOINT ["python", "k-means-algorithm.py"]
○ ENTRYPOINTで直接実行ファイルを指定することで、SageMaker APIからSIGTERMや
SIGKILLのシグナルを送ることができるようになる
● ハイパーパラメータで渡された値はオプションとして渡される
hyperparameters={"max_leaf_nodes": 30} python … --max_leaf_nodes 30
argparseなどで読み込む
SageMaker上でイメージのbuild
通常のbuild
● SageMakerでカスタムコンテナを使うためにはECRに作成したイメージをプ
ッシュする必要がある
● ECRにプッシュするためには、dockerコマンドだけでなくawsコマンドも使
う必要があり、ステップが少し多い
docker build
aws ecr get-
login
aws ecr create-
repository
docker push
実行コマンドが多い!!
sm-dockerをつかったbuild
sm-docker コマンドで以下の作業を一つのコマンドで実行
1.Dockerfile・コード・buildspec.ymlをS3へアップロード
2.CodeBuildでのイメージのbuild
3.ECRへのイメージのアップロード
出典: https://aws.amazon.com/blogs/machine-learning/using-the-amazon-sagemaker-studio-image-build-cli-to-build-container-images-from-your-studio-notebooks/
たった一つのコマンドで
多くのタスクを実行
sm-dockerの使い方
● SageMaker実行ロールの設定
○ SageMakerで使用している実行ロールに対して、CodeBuildの信頼ポリシーを追加
○ SageMakerで使用している実行ロールに対して、ECRにレポジトリを作成しイメージをプッ
シュできる権限を追加
○ 詳しくは、Using the Amazon SageMaker Studio Image Build CLI to build container images
from your Studio notebooks を参照
● インストール: !pip install sagemaker-studio-image-build
● イメージ作成: !sm-docker build .
最初の準備は大変だが
実行は圧倒的に楽!!
Trust Policy追記
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"codebuild.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
codebuildを追加する
Permission Policy追加
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codebuild:DeleteProject",
"codebuild:CreateProject",
"codebuild:BatchGetBuilds",
"codebuild:StartBuild"
],
"Resource":
"arn:aws:codebuild:*:*:project/sagemaker-studio*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogStream",
"Resource": "arn:aws:logs:*:*:log-
group:/aws/codebuild/sagemaker-studio*"
},
{
"Effect": "Allow",
"Action": [
"logs:GetLogEvents",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:log-
group:/aws/codebuild/sagemaker-studio*:log-stream:*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ecr:CreateRepository",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:DescribeImages",
"ecr:DescribeRepositories",
"ecr:UploadLayerPart",
"ecr:ListImages",
"ecr:InitiateLayerUpload",
"ecr:BatchCheckLayerAvailability",
"ecr:PutImage"
],
"Resource": "arn:aws:ecr:*:*:repository/sagemaker-
studio*"
},
{
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::sagemaker-*/*"
},
{
"Effect": "Allow",
"Action": [
"s3:CreateBucket"
],
"Resource": "arn:aws:s3:::sagemaker*"
},
{
"Effect": "Allow",
"Action": [
"iam:GetRole",
"iam:ListRoles"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::*:role/*",
"Condition": {
"StringLikeIfExists": {
"iam:PassedToService": "codebuild.amazonaws.com"
}
}
}
]
}
codebuildやecrやS3などの
権限を追加する
カスタムコンテナの使用
● image_uriにECRのURIを指定
● その他はSageMakerが用意してい
るイメージを使った場合の実装と
同じ
image_uri以外は
いつも通りの実装
デモ
● SageMaker上でのイメージのビルドとカスタムコンテナを使った学習の実行
● コード
○ 全体: https://github.com/knishioka/machine-learning-
workshop/tree/main/sagemaker/custom_container_with_sagemaker-training-toolkit
○ 実行用notebook: https://github.com/knishioka/machine-learning-
workshop/blob/main/sagemaker/custom_container_with_sagemaker-training-
toolkit/training_with_custom_container.ipynb

More Related Content

PDF
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
PDF
AWSではじめるMLOps
PPTX
MLOps入門
PDF
機械学習モデルのサービングとは?
PDF
社内ドキュメント検索システム構築のノウハウ
PDF
MLOpsの概要と初学者が気をつけたほうが良いこと
PDF
20190806 AWS Black Belt Online Seminar AWS Glue
PDF
Infrastructure as Code (IaC) 談義 2022
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
AWSではじめるMLOps
MLOps入門
機械学習モデルのサービングとは?
社内ドキュメント検索システム構築のノウハウ
MLOpsの概要と初学者が気をつけたほうが良いこと
20190806 AWS Black Belt Online Seminar AWS Glue
Infrastructure as Code (IaC) 談義 2022

What's hot (20)

PDF
機械学習で泣かないためのコード設計
PDF
推薦アルゴリズムの今までとこれから
PDF
ユーザーインタビューするときは、どうやらゾンビのおでましさ
PPTX
MLOpsはバズワード
PDF
ビジネスパーソンのためのDX入門講座エッセンス版
PPTX
Amazon AthenaでSageMakerを使った推論
PDF
マッチングサービスにおけるKPIの話
PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
PPTX
DockerコンテナでGitを使う
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
PDF
マルチテナントのアプリケーション実装〜実践編〜
PDF
ユーザーストーリー駆動開発で行こう。
PDF
研究効率化Tips Ver.2
PDF
Snowflake Architecture and Performance
PDF
ナレッジグラフ入門
PPTX
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
PDF
ナレッジグラフとオントロジー
PDF
Python 3.9からの新定番zoneinfoを使いこなそう
機械学習で泣かないためのコード設計
推薦アルゴリズムの今までとこれから
ユーザーインタビューするときは、どうやらゾンビのおでましさ
MLOpsはバズワード
ビジネスパーソンのためのDX入門講座エッセンス版
Amazon AthenaでSageMakerを使った推論
マッチングサービスにおけるKPIの話
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
DockerコンテナでGitを使う
マルチテナント化で知っておきたいデータベースのこと
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
マルチテナントのアプリケーション実装〜実践編〜
ユーザーストーリー駆動開発で行こう。
研究効率化Tips Ver.2
Snowflake Architecture and Performance
ナレッジグラフ入門
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
ナレッジグラフとオントロジー
Python 3.9からの新定番zoneinfoを使いこなそう
Ad

Similar to Amazon SageMakerでカスタムコンテナを使った学習 (20)

PPTX
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
PPTX
機械学習の特徴量を管理するAmazon SageMaker Feature Store
PPTX
Amazon SageMakerのNotebookからJobを作成する
PPTX
機械学習用のデータを準備する Amazon SageMaker Data Wrangler - ノーコードで前処理から学習まで
PPTX
Amazon SageMaker JumpStart
PPTX
Amazon SageMaker Foundation Modelsで事前学習済みモデルを利用する
PPTX
Amazon SageMaker Canvasを使ったノーコード機械学習
PPTX
Amazon SageMaker ML Governance 3つの機能紹介
PPTX
Amazon SageMaker Ground Truthを使って手動のラベル付けを簡略化する
PPTX
Amazon SageMaker Studio Lab紹介
PPTX
Feature StoreのOnline StoreとOffline Storeの違いについて理解する
PPTX
Amazon Athenaで独自の関数を使う Amazon Athena UDF - AthenaでTweetの感情分析
PPTX
H2Oを使ったノーコードのAutoML
PPTX
TorchDataチュートリアル解説
PPTX
AutoGluonではじめるAutoML
PPTX
H2O Waveを使ったAIアプリケーション作成入門
PPTX
機械学習の技術的負債
PPTX
XAI (説明可能なAI) の必要性
PPTX
PMFを目指すプロダクト開発組織が組織拡大するときににやるべきこと
PPTX
未来のカタチ x AI
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
機械学習の特徴量を管理するAmazon SageMaker Feature Store
Amazon SageMakerのNotebookからJobを作成する
機械学習用のデータを準備する Amazon SageMaker Data Wrangler - ノーコードで前処理から学習まで
Amazon SageMaker JumpStart
Amazon SageMaker Foundation Modelsで事前学習済みモデルを利用する
Amazon SageMaker Canvasを使ったノーコード機械学習
Amazon SageMaker ML Governance 3つの機能紹介
Amazon SageMaker Ground Truthを使って手動のラベル付けを簡略化する
Amazon SageMaker Studio Lab紹介
Feature StoreのOnline StoreとOffline Storeの違いについて理解する
Amazon Athenaで独自の関数を使う Amazon Athena UDF - AthenaでTweetの感情分析
H2Oを使ったノーコードのAutoML
TorchDataチュートリアル解説
AutoGluonではじめるAutoML
H2O Waveを使ったAIアプリケーション作成入門
機械学習の技術的負債
XAI (説明可能なAI) の必要性
PMFを目指すプロダクト開発組織が組織拡大するときににやるべきこと
未来のカタチ x AI
Ad

More from 西岡 賢一郎 (9)

PPTX
リモートワークで知っておきたい コミュニケーション時の過大な期待
PPTX
リモートワークで意識すべき7つのこと
PPTX
機械学習プラットフォーム5つの課題とAmazon SageMakerの4つの利点
PPTX
ストリートビューから地域の豊かさを推定
PPTX
大域的探索から局所的探索へデータ拡張 (Data Augmentation)を用いた学習の探索テクニック
PPTX
人間の意思決定を機械学習でモデル化できるか
PPTX
協力ゲーム理論でXAI (説明可能なAI) を目指すSHAP (Shapley Additive exPlanation)
PPTX
ブラックボックスからXAI (説明可能なAI) へ - LIME (Local Interpretable Model-agnostic Explanat...
PPTX
表形式データで高性能な予測モデルを構築する「DNNとXGBoostのアンサンブル学習」
リモートワークで知っておきたい コミュニケーション時の過大な期待
リモートワークで意識すべき7つのこと
機械学習プラットフォーム5つの課題とAmazon SageMakerの4つの利点
ストリートビューから地域の豊かさを推定
大域的探索から局所的探索へデータ拡張 (Data Augmentation)を用いた学習の探索テクニック
人間の意思決定を機械学習でモデル化できるか
協力ゲーム理論でXAI (説明可能なAI) を目指すSHAP (Shapley Additive exPlanation)
ブラックボックスからXAI (説明可能なAI) へ - LIME (Local Interpretable Model-agnostic Explanat...
表形式データで高性能な予測モデルを構築する「DNNとXGBoostのアンサンブル学習」

Amazon SageMakerでカスタムコンテナを使った学習

Editor's Notes

  • #3: こちらが私のプロフィールとなります。 機械学習には、大学時代の研究から携わっており、自分で立ち上げたスタートアップでも機械学習を使ったサービスを提供していました。 プロダクト開発チームやデータサイエンスチームの立ち上げなどもやっています。
  • #6: ここでは、SageMakerでどのように学習をしていくかを説明。 SageMakerではECRやS3を使って学習を進めていく。 ECRは学習や推論に使うイメージの取得に使われ、S3は学習データなどの入力データや学習済みモデルなどの出力に使う。 fitでは学習済みモデルがS3に保存されるが、これだけだとSageMakerで学習済みモデルを使えないので、create_modelをすることにより、学習済みモデルを作る。 あとは細かい話として、エンドポイントを作ることで外部から推論を実行できるようになる。
  • #7: こちらは、先程のフローをもう少し簡略化したもの。 青い丸が解析者がやるアクション。 重要な点はfitとcreate_modelがそれぞれ学習と推論のためのアクションであり、それらに対してコンテナが必要となること。 つまり、学習で独自のコンテナを使うということは、fitで使うコンテナを自分で作るということになる。
  • #8: カスタムコンテナの作り方は3種類。 1, 2, 3の順番で難易度が高くなる。 まず一つ目がAWSがすでに提供しているコンテナイメージを拡張する方法。独自ライブラリを使いたい場合などはこちらで対応。 2つめがSageMaker Training Toolkitを使ったもの。こちらは自分で好きなベースイメージを選ぶことができる。 3つめがスクラッチで作っていくもの。こちらはTraining Jobが外部とどのようにデータをやり取りしているか知る必要があり難しい。
  • #10: sagemaker-training-toolkitの使い方は非常にシンプル。 自分の好きなベースイメージを使ったDockerfileの中で3つの操作を指定するだけ。 まず一つ目が、sagemaker-trainingのライブラリをインストールします。こちらはpipを使えばすぐにインストールできます。 次に学習用の独自スクリプトを/opt/ml/code/train.pyに配置します。 そして、環境変数SAGEMAKER_PROGRAMにtrain.pyを指定します。 train.pyの実装は必要ですが、コンテナイメージ自体はこんなにシンプルに作ることができるようになっています。
  • #11: では、学習用スクリプトはどんなものかを紹介。 こちらは、学習と推論両方に対応するために作ったスクリプトで、大きく分けて2つのパートに別れている。 一つがname==mainとなっている部分。ここが学習データを読み込み、学習をし、学習済みモデルを保存する部分。 学習モデルの保存場所は決まっていて、/opt/ml/modelに保存する。 もう一つが推論のためのモデルの読み込みで、model_fn関数で定義されている。 こちらは先程の/opt/ml/modelからモデルを読み込む。 /opt/ml/modelは環境変数でSM_MODEL_DIRで呼び出すこともできる。
  • #12: コンテナ内の構造をもう少し説明。
  • #13: CHANNELがどのように作成されるか理解しておくことも重要。 fitのときにどのように与えるかでCHANNELは変わる。 training, validation, testingで与えた場合は、/opt/ml/input/data以下にそれぞれのデータが配置される。 そして、環境変数SM_CHANNEL_でそれぞれのパスを取得できるようになる。
  • #14: 最後にSageMakerがトレーニングのときに行うことを紹介。
  • #15: sagemaker-training-toolkitの使い方は紹介済み。 sagemaker上でのイメージのbuildについて説明。
  • #16: イメージはbuild下だけでは使えないので、ecrにプッシュする必要がある。 イメージを作ってecrにログインして、ecrにレポジトリを作って、そこにpushするという作業が必要。 何回も修正するたびに作り直すのもめんどくさい。
  • #17: sagemaker上ではsm-dockerを使えば、面倒くさい作業を一気にやることができます。 sm-dockerでbuildをすると、dockerfile, コード、buildspec.ymlなどをs3へアップロードし、codebuildでイメージをbuildし、ecrへのイメージのアップロードまでしてくれます。
  • #18: sm-docker自体のインストールはpip installをするだけなので簡単なのですが、実際に実行するためにはSageMakerに紐付いている実行ロールに信頼ポリシーと権限を追加する必要があります。 ここが少しハードルが高い部分。 IAMをいじらないといけない。 ただ、この設定をしてしまえば、sm-docker buildとするだけで、簡単にイメージの作成とプッシュまで行ってくれる。
  • #19: 詳細はあとから見てほしいが、trust policyとpermission policyを少し紹介。 trust policyに関しては、codebuildのものを追加するだけ。
  • #20: permisson policyはもはや文字が小さくて見えないと思うが、codebuildやecr, s3などの権限を追加。 policyさえ作ってしまえばいいし、サンプルとなるポリシーも公開されているので、IAMに慣れている人であれば、設定はそこまで大変ではない。
  • #21: 最後にカスタムコンテナを使った実行のためのコードを紹介。 こちらは非常に簡単で、image_uriに先程作ったECRのURIを指定するだけ。
  • #22: 最後に簡単にデモ。