【セッションレポート】Amazon SageMaker を利用した ML のための CI/CD パイプライン【#AWSDevDay】

秋葉原にある神田明神にて開催されております AWS DevDay Tokyo(2019/10/03-04)に参加して来ました!2日目のセッションをレポートします。 セッション資料等が共有されましたら、随時更新いたします。

セッション概要

機械学習においては、推論の精度や速度を改善したり、様々なアプリケーションとの連携を行うために、機械学習のコードを継続的に改修・拡張する必要があります。一方で、機械学習は大きく分けて開発・学習・推論の3ステップで構成されており、これらを通して効率的にサービスを提供するためには、自動化による効率化が必要不可欠になります。本セッションでは、機械学習サービスを効率的に提供するために、Amazon SageMakerを利用したCI/CDパイプラインをご紹介します。

https://aws-seminar.smktg.jp/public/session/view/564

登壇者

アマゾン ウェブ サービス ジャパン株式会社 鮫島 正樹様

セッション資料

  • セッション資料リンク予定

目次

機械学習のプロセス

  • 機械学習とは
  • 分類と予測などを行うための技術
    • 分類
      • 犬や猫などを正しく分類
    • 予測
      • 過去の売り上げから将来の売り上げを予測
  • 機械学習のプロセス
    • コードを書く
    • データで学習する
    • 推論環境をつくる
  • 機械学習をすすめるにつれて
    • コードが複雑に
    • モデルも増える
    • できあがる推論環境も違う
    • コードが混在する
    • 実行環境がばらばらに
    • モデルが誰のものかわからない
    • エンドポイントがわからない
  • 機械学習のコード管理
    • 試行錯誤をおこないながら最終的なコードができる
    • 並列で開発していくことも多い
    • コードを修正した過程を記録していたい
  • 実行環境・テスト環境の統一
    • 人により、フレームワークやインスタンスが違う
    • プロダクション環境に近いデータ、同じフレームワークで統一することが重要
  • モデルの管理
    • 機械学習のモデルはコード・データとセットで管理する
    • モデルだけでは理解することは難しい
    • モデルに対応するコードとデータがあれば理解しやすい
  • エンドポイントの管理
    • そのエンドポイントにどういったモデルがデプロイされているか外からはわからない。
    • 月に1回更新する必要があれば、エンドポイントを毎月更新する必要がある。
    • フロントはまた別のサイクルで更新される。
    • 自動でデプロイされる仕組みがないと効率的に開発できない。

MLの為のCI/CDパイプライン

  • CI/CDパイプラインの目的
    • 手作業でするのは大変なので自動化したい
    • かならずしも、最新バージョンが良いとはかぎらないので管理したい
    • 試行錯誤を記録することが重要となる
    • 統一された学習、環境を組み込むことで、学習の精度を評価し、不具合のある学習モデルの誤ったデプロイを防止する
  • CI/CDパイプラインの例( Source & Build)
    • 機械学習はいろいろなモデルをつくりたい
    • 精度の良いマスターを採用したい
    • 機械学習の場合はアルゴリズムとパラメータごとのブランチもありうる
  • CI/CDパイプラインの例( Build & Deploy)
    • master のコードで学習されたモデルをdevにデプロイ
      • 速度の問題やUIなどをテストする必要がある
    • テストで問題がなければ、prodにデプロイ
  • パイプライン構築におけるML特有の課題
    • 学習
      • 学習の規模にあわせてスケール可能にする必要がある
    • 実験管理
      • Pull requestのタイミングだけでなく、精度やモデルも自動で管理できる手段が必要
    • 機械学習モデルのデプロイ
      • 開発環境で作った環境をそのまま使えると便利
      • デプロイ先のオートスケール

AWS によるパイプライン構築

  • 基本的な方針
    • AWSのマネージドサービスを活用する
    • CI/CD
      • AWS CodeCommit: コード管理
      • AWS CodeBuild: 自動で学習・テスト
      • AWS CodeDeploy: 推論環境の自動構築
    • ML
      • Amazon SageMaker: 学習、実験管理、デプロイ
  • AWS CodeCommit
    • バージョン管理をして再現可能に
    • セキュアでスケーラブルな
    • リポジトリサイズ上限なし
  • AWS CodeBuild
    • コードを変更したら、自動で学習・テストを実行
    • 同時並行、同時実行することができる
  • AWS CodeDeploy
    • 機械学習モデルを含めた推論環境のデプロイ
    • デプロイ中のダウンタウンを回避
    • ロールバックも可能
    • EC2, Lambdaなどのデプロイも行える
  • Amazon SageMaker
    • 機械学習の寛容を数分で作成可能
    • 複数台数の
    • SageMakerで使用しているコンテナはオープンソースになっている
    • カスタムコンテナを持ち込むことも可能
    • SDKもオープンソースになっている
    • 自動で最適化してくれる機能
  • Amazon SageMakerによる学習
    • データとコードと環境(コンテナ)が必要になる
    • サポートしているフレームワークもあるが、自由に環境を選んで学習を実行できる
  • Amazon SageMakerによる実験管理
    • CI/CDパイプラインで重要なものが実験管理
    • ある学習をおこなったときに精度がどれくらいあるのか?
    • どのモデルに紐ついているのか、どのコードで実行されたのかを管理する物が実験管理
    • SageMakerの機能として実験管理の機能が今年追加された。
    • どのジョブをなげたのか、どのアルゴリズム、どのモデルかなど
  • Amazon SageMakerによるモデルデプロイ
    • 実験管理することができるので精度の良いモデルを選んでデプロイすることができる
    • GUIからも可能だが, CodeDeployを使用して、自動でデプロイすることもできる
    • GPUを簡単にアタッチしてデプロイする事が可能
    • エンドポイントはオートスケールも可能
    • A/Bテスト
  • CD/CDパイプライン for ML
    1. コード変更 (Source:) CodeCommit/Github
    2. 学習をトリガー (Build:) CodeBuild
    3. 学習 : Amaozon SageMaker
    4. 実験管理 : Amazon SageMaker
    5. モデルデプロイ: Amazon SageMaker
    6. 推論環境デプロイ: (Deploy:) CodeBuild
  • その他の関連サービス
    • AWS StepFunctions
      • 今日 StepFunctionsでSageMakerのサポートする機能が増えた
    • Apache Airflow
      • Airflow Operator でSageMakerを実行可能

実装例:デモ

  • 実装内容
    • Github のmasterに対して、機械学習のコードをpull Request
    • SageMakerによる学習がエラーなく実行され、制度に問題ないことを確認するとmasterにマージする
  • Githubに配置するファイル
    • buildspec.yml
    • train.py
    • deploy.py
    • など
  • buildspec.yml
    • (bulidspec.ymlの説明)
  • train.py
    • SageMakerの学習ジョブ作成のAPIをコール
    • 精度などを自動取得
    • タグ付けなど
  • デモ
    • Githubのコードを変更
    • CommitをトリガーでCodeBuildを実行
    • 学習が開始
    • SageMakerの学習が開始
      • CodeのURLなどをタグで設定
    • 学習が終わるとマージして終了
    • Github上の設定でCodeBuildのSuccessをマージの条件に設定

まとめ

  • MLのCI/CDパイプラインは、標準的なCI/CDのパイプラインに、機械学習の学習とデプロイを組み込む必要がある
  • AWS Code シリーズをAmazon SageMakerと連携することで、少ない実装量で、MLのCI/CDパイプラインを構築できる

感想

  • 機械学習だからCI/CDの実施は結構むずかしいといった先入観が若干あったのですが、通常のCI/CDと大きく変わるようなことはない印象でした。
  • デモでされていた実施されていた内容レベルであればできそうな気がしたので、機会があればやってみたしてみたいと思います。