nikkie-ftnextの日記

イベントレポートや読書メモを発信

素振りログ:kfpのDSLで書いたパイプラインを、Kubeflow PipelinesでもVertex AI Pipelinesでも実行する

はじめに

ナイスゲーム!!👏👏👏 nikkieです。

先日、小さな気づきを記事にしました。

以下の宿題に取り組みます。

過去記事に沿ったYAMLファイルを当初Vertex AI Pipelinesにアップロードしたのですが、これは弾かれてしまいます。

小さな(練習用)パイプラインをkfp 2系でKubeflow PipelinesでもVertex AI Pipelinesでも動かします

目次

kfpで書いたパイプライン

こちらの記事をもとにしました。

わかったこと

  • componentにするPythonの関数には型ヒントが必要
    • ただジェネリック型のlist[]表記は現時点で非対応。listlist[Any]の意なので書きたくなく、typing.Listを使った
  • 参考記事で使っていたkfp.components.func_to_container_opは2.7.0にはなかった
    • 参考記事はcomponentの定義と、pipelineの定義を分けている(componentのYAMLとpipelineのYAMLができるっぽい)
    • 上で示したやり方は、パイプラインとして動かすDockerイメージにkfpがインストールされる(必要なのかもしれないが、関数の中身が依存しているものではないから除けないかと考えている)

ローカルのKubeflow Pipelinesにて

過去にKubeflow Pipelines 2.0.3・kfp v1で実行していました。

今回の差分

  • Kubeflow Pipelines 2.0.3 -> 2.1.0
  • Kubernetes環境は、Docker Desktop -> Rancher DesktopKubernetes 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
  • 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や永続化という宿題は残っていますが、kfp(v2)が提供するDSL機械学習パイプラインを定義し、それをKubeflow PipelinesでもVertex AI Pipelinesでも実行できることを体験しました。

Vertex AI Pipelines、各社テックブログでもたびたび見かけるのですが、Kubeflow Pipelinesの経験から全然知らない技術ではないと言えたので、記事を読んでいけそうと思えました。


  1. 先日の気づきの記事で使ったのと同じバージョンです
  2. 最後のコマンドだけがv1のときと違いました(「/env/dev」ではなく「/env/platform-agnostic-pns」)。もしかすると、立ち上がらなかったリソースと関係あるかもしれません
  3. 私と同じM1 Macで環境構築した記事でもオススメされてました。「I also recommend you to adjust the # CPUs and the Memory (GB) in Preferences > Virtual Machine to avoid Out of Memory errors (OOM).