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

KaggleライクなCI環境を構築した話

nokoxxx1212
November 29, 2021

 KaggleライクなCI環境を構築した話

Future Tech Night #17「embeddingの活用」と「MLOps」のAI勉強会でのスライドです。
https://future.connpass.com/event/231310/

nokoxxx1212

November 29, 2021
Tweet

More Decks by nokoxxx1212

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 l 名前 ヤマノ コウタロウ l 所属 Technology Innovation Group

    でインフラエンジニア → Strategic AI Group でMLOpsなど 3 最近、CourseraのMLOpsコースを修了しました
  2. MLOpsパイプラインの全体像 5 データサイエンティスト 分析環境 ソースコード ソースレポジトリ 実⾏環境 データ前処理 学習 評価

    モデル保存 監視 データ基盤/ 特徴量ストア データ前処理 推論 データ後処理 推論結果連携 学習パイプライン 推論パイプライン CI/CD ※バッチ推論パターン 実験管理/メタデータ管理 モデルレジストリ
  3. MLOpsパイプラインの全体像 6 データサイエンティスト 分析環境 ソースコード ソースレポジトリ 実⾏環境 データ前処理 学習 評価

    モデル保存 監視 データ基盤/ 特徴量ストア データ前処理 推論 データ後処理 推論結果連携 学習パイプライン 推論パイプライン CI/CD ※バッチ推論パターン 実験管理/メタデータ管理 モデルレジストリ 今回お話しするスコープ
  4. 当社のMLOps環境 7 データ サイエンティスト 開発コンテナ 実験管理コンテナ ノートブック閲覧 コンテナ ストレージコンテナ 開発コンテナ

    CIコンテナ ソースレポジトリ 社内環境 GCP VertexAI, BigQuery, etc AWS SageMaker, ECS, etc Azure Azure Databricks, Cognitive Services, etc PJの要件に応じて、実行環境を選択 (PJの要件によっては、分析環境から利用) PJ横断的に利用する、共通の分析環境 オンプレGPUクラスタ
  5. 今回のスコープ 8 データ サイエンティスト 開発コンテナ 実験管理コンテナ ノートブック閲覧 コンテナ ストレージコンテナ 開発コンテナ

    CIコンテナ ソースレポジトリ 社内環境 今回のスコープ オンプレGPUクラスタ GCP VertexAI, BigQuery, etc AWS SageMaker, ECS, etc Azure Azure Databricks, Cognitive Services, etc
  6. 【⼀般論】なぜ(MLシステムでも)CI/CDを導⼊する必要があるのか(2/2) ビルド→テスト→デプロイといった、モデル・アプリの本番運⽤に必要なプロセスを⾃動化することで、プロダクトアップデートのためのSpeed・ Reliability・Accuracyを向上させる l Speed l ビルド→テスト→デプロイといった様々な作業をクイックに実⾏することができる l 並列実⾏などスケールもしやすくなる。また、再利⽤性も⾼い。特に、モデルの学習には、数時間~数⽇、数週間かかる場合もある l

    Reliability l ブランチの動作・精度を担保できる l ローカルでは動いていたようだが、綺麗な環境にcloneしてエンドツーエンドで実⾏して⾒ると、動かない or 精度が聞いていたのと異なることがある。 ローカルにのみあるデータに依存していたり、暗黙的にノートブックの実⾏順序が決まっていたり l また、レビュー時に、ソースだけでなく、データとハイパーパラメータ、推論結果についても断⾯を揃え(バージョンコントロール)、再現性を担保した 上で確認する必要がある l Accuracy l ⾃動化をすることで、上記のような反復的な⼀連の作業を、⼈為的なエラーなく正確に実施することができる 13
  7. 【再掲】構成図 16 データ サイエンティスト 開発コンテナ 実験管理コンテナ ノートブック閲覧 コンテナ ストレージコンテナ 開発コンテナ

    CIコンテナ ソースレポジトリ 社内環境 オンプレGPUクラスタ GCP VertexAI, BigQuery, etc AWS SageMaker, ECS, etc Azure Azure Databricks, Cognitive Services, etc
  8. 処理の流れ①: GitLab CI/CDが、pushをトリガーにCIジョブを起動する 17 データ サイエンティスト 開発コンテナ 実験管理コンテナ ノートブック閲覧 コンテナ

    ストレージコンテナ 開発コンテナ CIコンテナ ソースレポジトリ 社内環境 オンプレGPUクラスタ GCP VertexAI, BigQuery, etc AWS SageMaker, ECS, etc Azure Azure Databricks, Cognitive Services, etc
  9. l Dockerデーモンを使⽤せずにコンテナをbuildするGoogle発のOSS。Dockerデーモンに依存しないことで、root権限なしで buildできるようになる。 l コマンド例: $ /kaniko/executor --insecure --cache=false --dockerfile

    ./Dockerfile --destination 192.168.XX.XX:30050/dev/test 処理の流れ①: GitLab CI/CDが、pushをトリガーにCIジョブを起動する 18 l GitLab CI/CDが、pushをトリガーにCIジョブを起動する l ← 予めGitLabのプロジェクトに登録しておいたGitLab runner(コンテナ)が処理を開始する l GitLab runner(コンテナ) がKanikoでDockerfileからコンテナをbuildして、コンテナレジストリにpushする l + コンテナをrunし、処理(ノートブックの実⾏など。後述)を実⾏する 概要 ポイント 補⾜ l GitLab runnerにk8sのPodを利⽤するため、コンテナのbuildにはKanikoを利⽤した (コンテナの中でコンテナのbuild)
  10. 処理の流れ②: Papermillでノートブックを実⾏し、MINIOにアップロードする 19 データ サイエンティスト 開発コンテナ 実験管理コンテナ ノートブック閲覧 コンテナ ストレージコンテナ

    開発コンテナ CIコンテナ ソースレポジトリ 社内環境 オンプレGPUクラスタ GCP VertexAI, BigQuery, etc AWS SageMaker, ECS, etc Azure Azure Databricks, Cognitive Services, etc
  11. l ノートブックをバッチ実⾏することができるツール。 papermill is a tool for parameterizing, executing, and

    analyzing Jupyter Notebooks. l コマンド例: $ papermill sample01.ipynb s3://bucket001/outputs/sample01.ipynb l ローカルで動くS3互換のストレージ。AWS CLIで操作できる。 処理の流れ②: Papermillでノートブックを実⾏し、MINIOにアップロードする 20 l Papermill(シェルスクリプトでラップ)でノートブックを実⾏し、MINIOにアップロードする l ← コミットされたノートブックを特定し、ノートブックをPapermillで実⾏する l 実⾏済みノートブックは、MINIOにアップロードする 概要 ポイント 補⾜ l 変更があったノートブックは⾃動で漏れなく特定するようにした。(開発者が都度指定する必要がないように) l 実⾏済みノートブックはS3に格納するPJもあるため、今回のオンプレ環境ではS3互換のMINIOを利⽤した。
  12. 処理の流れ③: jnotebook_readerで実⾏済みノートブックをブラウザから確認する 21 データ サイエンティスト 開発コンテナ 実験管理コンテナ ノートブック閲覧 コンテナ ストレージコンテナ

    開発コンテナ CIコンテナ ソースレポジトリ 社内環境 オンプレGPUクラスタ GCP VertexAI, BigQuery, etc AWS SageMaker, ECS, etc Azure Azure Databricks, Cognitive Services, etc
  13. l Browse and render Jupyter Notebooks from local, Amazon S3,

    Google Cloud Storage or MinIO 処理の流れ③: jnotebook_readerで実⾏済みノートブックをブラウザから確認する 22 l jnotebook_readerで、MINIO(、S3)に格納した実⾏済みノートブックをブラウザから確認する 概要 ポイント 補⾜ l MINIO(、S3) に配置したノートブックをブラウザから⾒れるようにした。(特にレビュワーのため) l 以前は類似のツールであるcommuterを利⽤していたが、Python/Flaskで書かれていて(私にとって)中⾝が分かりやすい jnotebook-readerを利⽤することにした。
  14. 処理の流れ④: MLflowにメタデータを連携し、実験管理をする 23 データ サイエンティスト 開発コンテナ 実験管理コンテナ ノートブック閲覧 コンテナ ストレージコンテナ

    開発コンテナ CIコンテナ ソースレポジトリ 社内環境 オンプレGPUクラスタ GCP VertexAI, BigQuery, etc AWS SageMaker, ECS, etc Azure Azure Databricks, Cognitive Services, etc
  15. l MLflow Tracking: 実験管理をすることができるOSS l The MLflow Tracking component is

    an API and UI for logging parameters, code versions, metrics, and output files when running your machine learning code and for later visualizing the results. 処理の流れ④: MLflowにメタデータを連携し、実験管理をする 24 l CIジョブとして実⾏されるスクリプトの中で、実験管理に必要なメタデータをMLflowに連携し、⼀覧管理できるようにする 概要 ポイント 補⾜ l 実験の再現性担保に必要な情報を⾃動で連携するようにする l 開発者が各⾃ノートブック内に実装することで追加で⾃由に情報を連携できるようにしつつも、必須の項⽬は⾃動で連携するようにする l 実⾏時刻・実⾏ファイル名・コミットID・コミットユーザ・コミットコメント・実⾏結果ファイル格納先パス、等