Skip to content

Project template for development using Kubeflow-Pipelines.

License

Notifications You must be signed in to change notification settings

tonouchi510/kfp-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kfp-project

Kubeflow Pipelinesで開発を始める際のテンプレートです。
管理やCI/CDをやりやすくするためのディレクトリ設計になってます。

パイプラインサンプル

GCPを前提にしており、本番サービス用のパイプラインはVertex Pipelines, 実験用パイプラインはAI-Platform Pipelinesを使う想定で実装例を用意しています.

vertex ai pipelines

  • hello-world-pipeilne
    • 一番シンプルな実装例
  • load-featurestore-pipeline
    • WIP
    • BigQueryからFeatureStoreにデータをロードするパイプライン
  • online-training-pipeline
    • WIP
    • FeatureStoreからデータを取得し、学習するパイプライン

AIPlatform Pipelines

  • simple-training-pipeline
    • シンプルな学習パイプラインの実装例
  • head-pose-dataset-pipeline
    • vision apiを使って顔向き推定用のデータセットを作成するパイプライン
    • 他のラベルを公開apiで擬似アノテーションする際にもほぼ同様なので参考にしてください
  • head-pose-pipeline
    • 上記顔向き推定データセットを使用して学習を行うパイプライン
    • tfでのトレーニングパイプラインの実装例として参考までに
  • optuna-pipeline
    • AIモデル学習におけるハイパーパラメータ最適化を分散並列で行うパイプライン
    • 任意のトレーニングパイプラインと組み合わせて使用する

vertexかaiplatformで若干コードやbuild.yamlが異なるので注意してください.

パイプライン開発

パイプラインの一つのステップであるコンポーネントを開発し、それらの組み合わせでパイプラインを構築する。

この辺のリポジトリの実装例が参考になる.

ディレクトリ構成

$ tree -L 3 -d
.
├── components                      # 共通で使える汎用コンポーネントの置き場
│   ├── slack-notification          # slack通知を行うためのコンポーネント
│   └── tb-observer                 # TensorBoardを起動するためのコンポーネント
├── pipelines                       # 各種パイプラインの実装
│   ├── head-pose-dataset-pipeline
│   │   ├── data-chunk-spliter
│   │   └── pose-annotation
│   ├── head-pose-pipeline
│   │   ├── evaluation
│   │   └── training
│   ├── hello-world-pipeline
│   │   └── hello
│   ├── load-featurestore-pipeline
│   │   └── load
│   └── online-training-pipeline
│       └── training
└── utils                           # 共通の便利関数の置き場

pipelineのディレクトリ構成

パイプライン毎に、各種コンポーネントの実装とパイプラインの定義ファイルをおく。

Pipeline_X
├── Component_A          # コンポーネントのコード置き場
├── Component_B
├── settings.yaml        # 開発中にCIでデバッグ実行する際のパラメータを記述
└── xxx-pipeline.py      # パイプライン定義ファイル。kfpのDSLを使用して構築する。

componentの構成

コンポーネント毎にDockerイメージを用意して開発する。
また、specファイルを活用してコンポーネントの仕様を定義する。

Pipeline_X
├── Component_A
│   ├── Dockerfile          # コンポーネントのイメージファイル
│   ├── component.yaml      # コンポーネントのspecファイル
│   ├── requirements.txt
│   └── main.py
└── Component_B

CI/CD

GCPのAI Platform PipelinesもしくはVertex AI Pipelinesで実行することを前提としています。
他の基盤にデプロイする場合は適宜yamlファイルを修正してください。

こちらのリポジトリにある図のフローを参考にしている。 CloudBuild用に作られている部分をGitHub Actionsに変更している.
パイプラインごとにyamlファイルを用意する必要があります.

Pipeline CI/CD flow

GCPサービス

以下のGCPサービスを使うことを想定している。サンプルコードは既にこれらのサービスにアクセスするので事前に有効化してください。

  • AI Platform Pipelines: 実験用パイプラインの実行環境
  • Vertex AI Pipelines: 本番サービス用パイプラインの実行環境
  • CloudTPU: トレーニングパイプラインの効率化のために利用
  • GCS: パイプラインの成果物・一時ファイルの保存に使用
  • GCR: コンポーネントイメージのpush & pullに使用
  • SecretManager: 実行時に必要となるSecretをここから取得する想定
  • ServiceAccount: github actions実行用、パイプライン実行用に2つ必要

備考

  • CI/CD用Secrets設定
    • github actions用に、リポジトリに以下のsecretsを登録してください
    • AIP_SERVICE_ACCOUNT_NAME, GACTIONS_SERVICE_ACCOUNT_KEY, GCP_PROJECT_ID, GCP_REGION, KUBEFLOW_HOST, PIPELINE_ROOT, VERTEX_SERVICE_ACCOUNT_NAME
    • 具体的には.github/workflows 以下のyamlを見てもらえると
  • 実行時用Secrets設定
    • 実行時用のSecretsはGCPのSecret Managerに登録する想定です
    • 既存のslack-notificationコンポーネントやoptuna-pipelineはSecret Managerから取得する処理があるので、動かす場合は適宜Secretsを登録してください

About

Project template for development using Kubeflow-Pipelines.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published