ZenMLシリーズ:Hello Worldを試してみた
今回はZenMLを使って一番シンプルなワークフローを作成してみました。
ZenMLとは?
ZenMLはMLOpsとLLMOpsのプラクティスを活用して、大規模なAIアプリケーションを評価、監視、展開するためのツールになります。昨今生成AIが多用される中で、LLM O11yのじゅ硫黄は高まってきており、かつ入出力の管理だけでなくワークフローの管理も重要な課題となっています。
ZenMLを利用すると、特にMLOpsやLLMOpsに特化したワークフロー管理をすることができ、決定木から複雑なマルチエージェントシステムまで、AIポートフォリオ全体を開発、評価、展開するための単一のプラットフォームとして提供してくれます。
Hello Worldを試してみる
それでは今回はHelo Worldを試してみます。
環境構築
uv
を利用して環境を構築します。setuptools
を設定しているのは、試験中にdistusils
関連のエラーが出たことがあり入れています。必要ない場合もあります。
uv init zenml_tutorial -p 3.12
cd zenml_tutorial
uv add zenml setuptools
コードを実装する
それでは、早速Hello Worldのパイプライン実装をみてみましょう。
from zenml import step, pipeline
@step
def basic_step() -> str:
"""A simple step that returns a greeting message."""
return "Hello World!"
@pipeline
def basic_pipeline():
"""A simple pipeline with just one step."""
basic_step()
if __name__ == "__main__":
basic_pipeline()
zenmlにてパイプラインやその中の個々のステップを実装するにはデコレータで実装します。今回は大元のzenml.pipeline
とステップであるzenml.step
を使います。
ステップの定義は以下のように@step
デコレータを使って実装します。
@step
def basic_step() -> str:
"""A simple step that returns a greeting message."""
return "Hello World!"
また、パイプラインは@pipeline
デコレータを使います。またパイプラインで先ほど実装したステップを呼び出します。
@pipeline
def basic_pipeline():
"""A simple pipeline with just one step."""
basic_step()
早速実行してみる
それでは早速実行してみましょう。
uv run hello_world.py
# 結果
Initiating a new run for the pipeline: basic_pipeline.
In a future release, the default Python package installer used by ZenML to build container images for your containerized pipelines will change from 'pip' to 'uv'. To maintain current behavior, you can explicitly set python_package_installer=PythonPackageInstaller.PIP in your DockerSettings.
Using user: default
Using stack: default
orchestrator: default
artifact_store: default
Dashboard URL for Pipeline Run: http://127.0.0.1:8237/projects/default/runs/3f8f06c8-53db-4300-9e86-1de4da292240
Using cached version of step basic_step.
All steps of the pipeline run were cached.
すると以下のような結果が表示されます。
UIから結果をみる
実は先ほどの結果を実行した時に裏側でサーバを起動していて、ちょっと結果が変わっています。
zenmlのUIをローカルで起動する場合は以下を実行します。
uv run zenml login --local
なお、場合によっては以下のように環境変数を設定してくださいと言われます。
OBJC_DISABLE_INITIALIZE_FORK_SAFETY=yes uv run zenml login --local
サーバを起動するとユーザ登録画面が表示されるので、一通り情報を入れると以下のような画面が表示されます。
今回は新たなプロジェクトは作っていないのでデフォルトのみ表示されます。デフォルトのプロジェクトを選択すると、プロジェクト内のパイプライン一眼が表示されます。今回はパイプライン実装時にbasic_pipeline
関数を定義したのでパイプラインとしてbasic_pipeline
が登録されています。
パイプラインを選択すると、そのパイプラインで実行された個別のRunが表示されます。今回は2回実行していたので二つ表示されています。
試しに一つ選択すると、以下のようにパイプラインが可視化されます。今回は一つのステップから一つの出力があるので、それがグラフになっているのがわかります。また、右側にはパイプラインの設定やログなどが記録されています。
最後に、今回はパイプラインのbasic_step
から出力としてHello World!
という文字列が返されています。basic_step
の出力のoutputを選択して結果をみると、以下のようにHello World!
が記録できていることが確認できました。
まとめ
今回はzenmlのHello Worldを動かしてみました。MLOpsやLLMOpsの実験ではなくほんとに最低限のチュートリアルではありますが、パイプラインを実行すればその結果が記録されていること、可視化されるツールが提供されていてグラフィカルに結果を確認できることがわかりました。次回以降で、MLOpsを組んでいこうと思います!
Discussion