👏

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にきいてください 🙇

  1. mlfowをインストールします

    pipenv --python 3.12
    pipenv install "mlflow>=3.1"
    
  2. MLflowのサーバーを起動します

    pipenv run mlflow server --host localhost --port 5001
    
  3. 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
    
  4. 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
    
  5. 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:5001my-genai-experiment をクリック、Traces をクリックします。LLM の呼び出しが追跡されていることがわかります。

localのチャットレスポンスが返ると追跡の StatusOK になります。同時に mlartifacts というディレクトリが生成され、ここにログが保存されます。

Inputs/Outputs と @mlflow.traceで指定した name が設定され Attributes も表示されていて、LLMの呼び出しログを可視化することができました!

おわりに

MLflowで生成AIアプリのログを可視化することができました。
公式のドキュメントではOpenAIをベースにした説明になっていたので、ローカルで動作確認するために少し手間取りました。
また、MACで試す場合には5000番ポートがすでに使われているので、5001番ポートを使う必要があるのもポイントです。

次は可視化できた情報を評価について学んでいこうとおもいます。

Discussion