MLflowでローカルチャットボットのログを可視化する
はじめに
LLM、MLOpsに関して勉強中です!機能はLMStudioでローカルチャットボットを作ってみました。LLMのMLOpsを体験するためMLFowを使ってみたいと思います。昨日の記事は以下。
以下に今回使ったコードを配置しました。
ゴール
MLflowで生成AIアプリのログを可視化できている
環境
本記事の動作確認は以下の環境で行いました。
- MacBook Pro
- 14インチ 2021
- チップ:Apple M1 Pro
- メモリ:32GB
- macOS:15.5(24F74)
MLflowとは
MLflowとは、機械学習のモデルやパイプラインを管理するためのオープンソースのプラットフォームです。
生成AI用の可視化・評価用の使い方と、モデルの訓練(画像認識など向けでしょうか?)用途の使い方があるようです。
今回は前者の生成AI用の方を使ってみます。
以下の記事に沿って作業を進めます。
MLflow for GenAI
MLflow for GenAIとは、生成AIのための包括的なプラットフォームで開発・評価・deploymentを行うことができます。
GenAI クイックスタート
MLflow for GenAIを使ってみる
自身を持って製品環境で使えるGenAIを作る
MLflowはGenAIアプリのの開発・評価・デプロイを変革します。フレームワークやモデルに縛られることなくAIシステムの可視性を完全に確保できます。
なぜMLflow for GenAIを使うのか?
MLflow GenAIを使うことでAIアプリケーションの内部で起きていることを全て見ることができます。全てのLLM呼び出しやツール連携、意思決定ポイントを把握し、ブラックボックスなシステムを透明でデバッグ可能にします。
LangChain、LlamaIndex、OpenAIなどの15以上のフレームワークをサポートしています。
人間によるフィードバックも受け取ることができ、ドメインエキスパートによる実際の利用状況をアプリケーションに反映させることができます。
ビルドしてみよう
事前条件
以下を使えることを確認してください。
- Python 3.9 or higher
- MLflow 3+ installed (pip install --upgrade mlflow)
- An MLflow tracking server (local or remote)
環境構築
今回は以下の手順で環境を作成しました。
pipenv
の環境構築はchatGPTにきいてください 🙇
-
mlfowをインストールします
pipenv --python 3.12 pipenv install "mlflow>=3.1"
-
MLflowのサーバーを起動します
pipenv run mlflow server --host localhost --port 5001
-
fileベースのMFflow管理情報を作成します
以下の内容でmlflow_setup.py
を作成します。import mlflow # Creates local mlruns directory for experiments mlflow.set_tracking_uri("http://localhost:5001") mlflow.set_experiment("my-genai-experiment")
以下のコマンドを実行します。
pipenv run python mlflow_setup.py
-
MLflowに接続する
以下の内容でmlflow_verify.py
を作成します。import mlflow # Print connection information print(f"MLflow Tracking URI: {mlflow.get_tracking_uri()}") print(f"Active Experiment: {mlflow.get_experiment_by_name('my-genai-experiment')}") # Set the active experiment mlflow.set_experiment("my-genai-experiment") # Test logging with mlflow.start_run(): mlflow.log_param("test_param", "test_value") print("✓ Successfully connected to MLflow!")
以下のコマンドを実行します。
✓ Successfully connected to MLflow!
が表示されたら成功です。pipenv run python mlflow_verify.py
-
MLflow UIにアクセスする
mlflowサーバーは起動済みなので、ブラウザでhttp://localhost:5001
にアクセスします。MLflow UIが表示されたら成功です。
アプリの追跡情報を収集する
わずか数行のコードで、全てのプロンプト、モデル、ツールの呼び出しの包括的な追跡をする事ができます。以下を実施できます。
- OpenAI, LangChain, and DSPy などの人気フレームワークの自動インストルメンテーションができます
- カスタムの追跡情報をキャプチャできます
- AIワークフローのデバッグができます
以下の記事でlocal llmの動作確認をしています。この仕組みを使ってlocal llmのインストルメンテーションをします。
pipenv install streamlit langchain-openai
以下の内容で streamlit_app.py
を作成します。
import mlflow
import streamlit as st
from langchain_openai import ChatOpenAI
st.title("🦜🔗 Quickstart App")
# Set the active experiment
mlflow.set_experiment("my-genai-experiment")
@mlflow.trace(name="llm_call", attributes={"model": "gemma-3-12b", "source": "local"})
def generate_response(input_text):
llm = ChatOpenAI(
base_url="http://localhost:1234/v1",
api_key="not-needed",
temperature=0.7,
model_name="google/gemma-3-12b",
)
output = llm.invoke(input_text).content
st.info(output)
return output
with st.form("my_form"):
text = st.text_area(
"Enter text:",
"What are the three key pieces of advice for learning how to code?",
)
submitted = st.form_submit_button("Submit")
if submitted:
generate_response(text)
以下の環境変数を設定します。
export MLFLOW_TRACKING_URI=http://localhost:5001
スクリプトを実行します。
pipenv run streamlit run ./streamlit_app.py
http://localhost:5001
の my-genai-experiment
をクリック、Traces
をクリックします。LLM
の呼び出しが追跡されていることがわかります。
localのチャットレスポンスが返ると追跡の Status
が OK
になります。同時に mlartifacts
というディレクトリが生成され、ここにログが保存されます。
Inputs/Outputs
と @mlflow.traceで指定した name
が設定され Attributes
も表示されていて、LLMの呼び出しログを可視化することができました!
おわりに
MLflowで生成AIアプリのログを可視化することができました。
公式のドキュメントではOpenAIをベースにした説明になっていたので、ローカルで動作確認するために少し手間取りました。
また、MACで試す場合には5000
番ポートがすでに使われているので、5001
番ポートを使う必要があるのもポイントです。
次は可視化できた情報を評価について学んでいこうとおもいます。
Discussion