Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JAWS-UG AI/ML #15 - SageMaker Experimentsで始める機械学習モデルの実験管理

JAWS-UG AI/ML #15 - SageMaker Experimentsで始める機械学習モデルの実験管理

JAWS-UG AI/ML #15の登壇スライドです.
https://jawsug-ai.connpass.com/event/263957/

SageMakerを使った機械学習モデルの学習の際に,ミニマムな実験管理ツールとして,SageMaker Experimentsを使った例を紹介しています.

Masataka Kashiwagi

January 17, 2023
Tweet

More Decks by Masataka Kashiwagi

Other Decks in Technology

Transcript

  1. 自己紹介 名前:柏木 正隆(Masataka Kashiwagi) 所属:コネヒト株式会社 - 機械学習エンジニア 出身:大阪府 SNS Twitter:@asteriam_fp

    Podcast:@double_m2ml お仕事 • レコメンドエンジンの開発 • 検索システムのデータ整備(←最近のメインのお仕事) • MLOpsの推進 MLOps勉強会の運営メンバーとしても活動してます! Twitterアイコン
  2. アジェンダ ☑ 自己紹介 □ SageMaker Experimentsで始める機械学習モデルの実験管理(古い情報も入ってます󰢛) - なぜ実験管理が必要か - SageMaker

    Experimentsとは? - 実験結果の活用方法 - プロジェクトの管理方法 - 実験結果をダッシュボードに連携 - (時間に余裕があれば)Callback関数をカスタマイズしてロギング □ まとめ ※ 本資料は後ほど公開します!
  3. 機械学習における再現性とは何か? 再現性を成す要素として以下があげられる • Code ◦ 実験中のコードとアルゴリズム • Data ◦ 実験に使用したデータセット(学習・検証・テスト)

    • Environment ◦ フレームワークの依存関係,バージョン,使用したハードウェアなど • Model parameters ◦ 学習プロセスに関連するハイパーパラメータやシードなどのパラメータ Ref. 1. Why reproducibility is important for ML
  4. SageMaker Experimentsとは? 公式ドキュメントによると “Amazon SageMaker Experiments is a capability of

    Amazon SageMaker that lets you organize, track, compare, and evaluate your machine learning experiments.” 機械学習モデルの再現性を担保するために必要な情報を収集して管理することができる機能で, 記録をGUI上から確認することができる 2022年12月16日に大幅アップデート! Next generation Amazon SageMaker Experiments – Organize, track, and compare your machine learning trainings at scale Ref. 1. Manage Machine Learning with Amazon SageMaker Experiments 2. Next generation Amazon SageMaker Experiments – Organize, track, and compare your machine learning trainings at scale
  5. ミニマムな実験管理ツールとしてのsmexperiments ※ 最新のアップデート情報と乖離する場合があるかもしれないです SageMaker Experimentsの特徴: • SageMaker StudioのUIからチーム間で情報を共有できる • SageMakerの機能の一つなので,専用のサーバーを立てて管理する必要はない

    ◦ OSSの実験管理ツールをホスティングするより,運用の手間が省ける • APIが用意されているので,メタデータをcsvにして保存できる • SageMaker Training Jobによるモデル学習で,自動的にメトリクスを保存できる ◦ metric_definitionsの引数に正規表現を駆使して定義する ◦ 最新のアップデートでは,run.log_metricで簡単にロギングできる • 実験単位で情報を分割しながら記録できる
  6. 参考:実験管理コンポーネント SageMaker Experimentsの3つのコンポーネント - Experiment・Trial・Trial Components 左側から順番に上位の概念(クラス) e.g. あるプロジェクトを考えてみると... -

    1つのExperimentを作成する(1プロジェクトに相当) - Tracker.createでTrackerを作成 - Experimentのメタデータを記録&追跡 - Trial.createで実行するジョブ毎にTrialを作成 - Experimentに紐づく実験単位 - Tracker情報を付与 コンポーネントの仕組み
  7. 再現性のための4要素 - smexperiments • Code ◦ 実験中のコードとアルゴリズム → この部分は管理が難しいが,Gitリポジトリ連携可能 •

    Data ◦ sagemaker.inputs.TrainingInputでS3のデータを指定可能 ▪ パスなどをメタデータとしても残すことも可能(log_input, log_output) ◦ モデルの保存場所などアーティファクトの情報は自動的に記録される(log_artifact) • Environment ◦ ジョブ実行に関連したインスタンス情報は取得可能 • Model parameters ◦ Scikit Learn/TensorFlow/PyTorch Estimatorのhyperparameters引数に指定 or set_hyperparametersでパラメータをセット(log_parameters, log_metric)
  8. smexperimentsの少し物足りない or 使いづらい部分 • 実装方法がSageMakerのフレームワークに依存する ◦ 特有のお作法があってそれに則る必要があり,その理解に時間がかかる ◦ Experiment・Trial・Trial Componentsの関係性

    • 全く不要な実験結果の削除がUIからできない ◦ コマンド実行で削除できるが,順番に削除していく必要があり大変 • (実験後の結果に対するコメント記入) • 世の中にそもそもSageMaker Experimentsに関する情報が少ない
  9. プロジェクトの管理方法 どの単位で「Experiment・Trial・Trial Components」を分割すればいいか? - 我々のチームの一例を紹介(他にも良い方法があると思います...) - レコメンドシステムを例にすると Experiment Trial Trial

    Components Trial Trial Components Experiment • Experiment ◦ 複数あるレコメンドシステム毎に作成 • Trial ◦ バージョン毎に作成(e.g. アルゴリズムが変わ るとバージョンを更新) • Trial Components ◦ モデルの作成タイミング毎に作成(日毎に作ら れていく)
  10. Callback関数をカスタマイズしてロギング SageMaker Experimentsで実験結果のメトリクス(loss, acc, rmse...etc)を上手く収集するためには ,Callback関数のカスタマイズが良い → metric_definitionsで指定が容易になる e.g. TrainとValidationのLossやMetricsを両方残したい場合

    Tensorflow: - model.fit(callbacks=[CustomCallback()]) PyTorch: - trainer = Trainer(callbacks=[CustomCallback()]) Tensorflow PyTorch (pytorch_lightning) tf.keras.callbacks.Callback pytorch_lightning.callbacks.Callback Tensorflowの場合
  11. Callback関数をカスタマイズしてロギング:Tensorflowの例 Ref. 1. TensorflowのCallback関数をカスタマイズ 2. Train an TensorFlow model with

    a SageMaker Training Job and track it using SageMaker Experiments 以前のログ取得方法であるmetric_definitionsを使う場合[1] - Training JobのEstimator引数のmetric_definitionsに NameとRegexを指定することで,実験ログを記録できる 現在はrun.log_metricに必要な値をセットすることでより簡単 に実験ログを記録することができる![2]
  12. References URL • https://www.qwak.com/post/why-reproducibility-is-important-for-ml • https://docs.aws.amazon.com/sagemaker/latest/dg/experiments.html • https://aws.amazon.com/jp/blogs/machine-learning/next-generation-amazon-sagemaker-experiments- organize-track-and-compare-your-machine-learning-trainings-at-scale/ •

    https://neptune.ai/blog/ml-experiment-tracking • https://masatakashiwagi.github.io/portfolio/post/customize-tf-callback/ • https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-experiments/sagemaker_j ob_tracking/tensorflow_script_mode_training_job.ipynb