はじめに
ナイスゲーム!!👏👏👏 nikkieです。
先日、小さな気づきを記事にしました。
以下の宿題に取り組みます。
過去記事に沿ったYAMLファイルを当初Vertex AI Pipelinesにアップロードしたのですが、これは弾かれてしまいます。
小さな(練習用)パイプラインをkfp 2系でKubeflow PipelinesでもVertex AI Pipelinesでも動かします
目次
kfpで書いたパイプライン
こちらの記事をもとにしました。
わかったこと
- componentにするPythonの関数には型ヒントが必要
- ただジェネリック型の
list[]
表記は現時点で非対応。list
はlist[Any]
の意なので書きたくなく、typing.List
を使った
- ただジェネリック型の
- 参考記事で使っていた
kfp.components.func_to_container_op
は2.7.0にはなかった
ローカルのKubeflow Pipelinesにて
過去にKubeflow Pipelines 2.0.3・kfp v1で実行していました。
今回の差分
- Kubeflow Pipelines 2.0.3 -> 2.1.0
- Kubernetes環境は、Docker Desktop -> Rancher Desktop(Kubernetes v1.28.6)
- DSLをコンパイルするkfpも2系に上げています(1.8.22 -> 2.7.01)
コマンドを流してKubeflow Pipelinesのリソースができるのを待ちます
https://www.kubeflow.org/docs/components/pipelines/v2/installation/quickstart/
「Deploy a KFP standalone instance into your cluster」参照2
export PIPELINE_VERSION=2.1.0 kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/cluster-scoped-resources?ref=$PIPELINE_VERSION" kubectl wait --for condition=established --timeout=60s crd/applications.app.k8s.io kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/dev?ref=$PIPELINE_VERSION"
試行錯誤メモ
- Rancher DesktopのPreferences、Virtual MachineのCPUとMemoryは少なめなので(少し)増やす必要があった3
- Docker Desktopのデフォルト設定値 https://docs.docker.com/desktop/settings/mac/#advanced
- 例えばメモリは、ホストのメモリの50%
- Docker Desktopのデフォルト設定値 https://docs.docker.com/desktop/settings/mac/#advanced
- controller-managerがOOMKilledされていた
kubectl edit
してmemoryのlimitsを30Miから引き上げた(動いているのをtopしたところ70Mi使っているので、次回は100Miくらいにすればよさそう)
- proxy-agentが起動しないのは、諦めた
- ログを見ると、
curl http://metadata.google.internal/computeMetadata/v1/instance/zone
していて「Could not resolve host: metadata.google.internal」で落ちてしまう
- ログを見ると、
port-forwardしてWeb UIは動きました。
手元でcompileしたYAMLファイルをuploadします。
GCPのVertex AI Pipelinesにて
こちらにも手元でcompileしたYAMLファイルをuploadします。
- 差分は、pipeline_rootの指定
- Kubeflow Pipelinesだと「Pipeline Root represents an artifact repository,」とのこと
- https://www.kubeflow.org/docs/components/pipelines/v1/overview/pipeline-root/ が案内された(Kubeflow Pipelines v1のドキュメント?)
- 中間ファイルの永続化の方法が(Kubeflow Pipelinesと合わせて)宿題事項
終わりに
pipeline_rootや永続化という宿題は残っていますが、kfp(v2)が提供するDSLで機械学習パイプラインを定義し、それをKubeflow PipelinesでもVertex AI Pipelinesでも実行できることを体験しました。
Vertex AI Pipelines、各社テックブログでもたびたび見かけるのですが、Kubeflow Pipelinesの経験から全然知らない技術ではないと言えたので、記事を読んでいけそうと思えました。