[レポート]FSV304-i – CI / CDテクニックを使った機械学習の工業化 #reinvent

2018.12.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

FSV304-i - Industrialize Machine Learning Using CI/CD Techniques を受講したので、そのセッションレポートです。 CI / CDと機械学習という組み合わせに興味をもったので、受講しました。 概要の内には、金融機関の機械学習の利用といった文言が出ましたが、
内容としては、機械学習全般で適用できるケースが多い内容という印象でした。

セッション概要

As financial institutions look to accelerate and scale their use of machine learning, they need to address questions related to specific results, such as the version of the code and the data that lead to a particular inference. The use of disparate and increasingly non-traditional data sources for activities such as targeted marketing, fraud detection, and improved returns is driving a need for structured development of machine learning models. In this session, we’ll discuss how we can use a combination of AWS services including Amazon SageMaker, AWS CodeCommit, AWS CodeBuild, and AWS CodePipeline to create a workflow that will help financial institutions meet their requirements and drive business results.

金融機関が機械学習の利用を加速し、規模を拡大しようとするにつれて、コードのバージョンや特定の推論につながるデータなど、特定の結果に関連する質問に対処する必要があります。ターゲットを絞ったマーケティング、詐欺の検出、リターンの改善などの活動に異種かつますます非伝統的なデータソースを使用することは、機械学習モデルの構造化された開発の必要性を推進しています。このセッションでは、Amazon SageMaker、AWS CodeCommit、AWS CodeBuild、AWS CodePipelineなどのAWSサービスの組み合わせを使用して、金融機関が要件を満たしビジネス成果を促進するためのワークフローを作成する方法について説明します。

典型的な機械学習のワークフロー

エラーが起こしやすい点(ErrorProne)として以下の点があげられていました。

  • 手動で行った配置
  • 入力データがバージョン管理されていない
    • ソースコード
    • データセット
  • アウトプットがバージョン管理されていない
    • Weights
  • 以下の情報が手動で管理されている
    • 誰が作ったのか?
    • いつ変更があったのか?
    • どのバージョンのデータが使われているのか?

解決策

  • Input と OutputのS3バケットを作成し、バージョニングを有効にしなさい。
    • これにより、オブジェクトのどのバージョンを用いているかを管理することができます。
    • 仮にそれが同名のファイルであったとしても異なるIDが付与されます。
  • ソースコード管理はCodeCommitを用いること。
    • ソースコードや補助ファイル等も含めてソリューション構成するすべてのファイルを保存しましょう
  • CodePipelineでCodeCommitの変更に応じて以下を動かしていきます。
    • 1st stageでは、CodeCommitからの取得を行います。
    • 2nd stageでは、CodeBuildを用いてのBuildを行っていきます。
      • その際に作ったDockerコンテナには3つのタグを付けましょう
        • Latest
        • CommitID
        • リポジトリ名
      • これらをECRにコンテナイメージとして保管します。
    • final stageでは、作ったコンテナを用いてトレーニングを行います。
      • AWS LambdaからSagemakerで作ったコンテナイメージを用いてトレーニングを行います。
      • Sagemakerのトレーニングジョブは、バージョンが特定できるデータセットからデータを取得し、トレーニングを行います。

まとめ

実際にサービスを組み合わせていってSagemakerにCI/CDを組み込んでいった点が非常に勉強になりました。
とにかく細かい粒度でタグ等を取得していき、どのように生成されたモデルなのかといったのを追跡できるようにしているといった点も非常に知見となりました。 機械学習は非常にTry and Errorが多い領域だと思うので、CI/CDとの組み合わせの相性も良いのだと思いました。