本番運用 トレース をアプリのバージョンにリンクする
アプリケーション バージョンの追跡ガイドでは、開発中に LoggedModel
を使用してアプリケーション バージョンを追跡する方法を示しました。
LoggedModel
を本番運用にデプロイする場合、モニタリングとデバッグのために、が生成するトレースを特定のバージョンにリンクする必要があります。このガイドでは、本番運用トレースにバージョン情報を含めるようにデプロイメントを設定する方法について説明します。
Databricksモデルサービングにデプロイしますか? トレースリンクは自動的に設定されます。詳しくはDatabricksモデルサービングのトレースリンクへスキップしてください。
前提 条件
-
Databricksモデルサービングの外部で 本番運用デプロイメントを行う場合は、
mlflow-tracing
パッケージをインストールします。Bashpip install --upgrade "mlflow-tracing>=3.1.0"
このパッケージは、本番運用環境に特化して、以下の機能を提供しています。
-
最小限の依存関係 により、より迅速で無駄のないデプロイを実現
-
大容量トレーシングのための パフォーマンス最適化
-
MLflow 3は本番運用のトレースに必要です。 MLflow 2.x は、パフォーマンスの制限と本番運用用の機能がないため、本番運用デプロイメントではサポートされていません。
- MLflow エクスペリメントを作成するには、環境のセットアップに関するクイックスタートに従ってください。
環境変数の設定
- バージョン タブに移動して、
LoggedModel
ID を取得します。CI/CD パイプラインでは、次に示すように、create_external_model()
を使用して新しいLoggedModel
を生成できます。を使用することをお勧めします。
import mlflow
import subprocess
# Define your application and its version identifier
app_name = "customer_support_agent"
# Get current git commit hash for versioning
try:
git_commit = (
subprocess.check_output(["git", "rev-parse", "HEAD"])
.decode("ascii")
.strip()[:8]
)
version_identifier = f"git-{git_commit}"
except subprocess.CalledProcessError:
version_identifier = "local-dev" # Fallback if not in a git repo
logged_model_name = f"{app_name}-{version_identifier}"
# Create a new LoggedModel
model = mlflow.create_external_model(name=logged_model_name)
LoggedModel
ID をMLFLOW_ACTIVE_MODEL_ID
環境変数の本番運用環境設定に追加し、環境の設定クイックスタートの標準 MLflow トレース変数とともに追加します。
# Standard MLflow tracing configuration
export DATABRICKS_HOST="https://your-workspace.databricks.com"
export DATABRICKS_TOKEN="your-databricks-token"
export MLFLOW_TRACKING_URI=databricks
# Either use MLFLOW_EXPERIMENT_NAME or MLFLOW_EXPERIMENT_ID
export MLFLOW_EXPERIMENT_NAME="/Shared/production-genai-app"
# Add LoggedModel version tracking by specifying your LoggedModel ID
# Ensure this matches a LoggedModel in your MLFlow Experiment
export MLFLOW_ACTIVE_MODEL_ID="customer_support_agent-git-98207f02"
自動トレースリンク
MLFLOW_ACTIVE_MODEL_ID
環境変数を設定すると、 すべてのトレースが自動的にそのLoggedModelにリンクされます 。トレースに手動でタグを付ける必要はありません - MLflow がこれを処理します。
アプリケーション・コードは、開発中とまったく同じです。
import mlflow
from fastapi import FastAPI, Request
app = FastAPI()
@mlflow.trace
def process_message(message: str) -> str:
# Your actual application logic here
# This is just a placeholder
return f"Processed: {message}"
@app.post("/chat")
def handle_chat(request: Request, message: str):
# Your traces are automatically linked to the LoggedModel
# specified in MLFLOW_ACTIVE_MODEL_ID
# Your application logic here
response = process_message(message)
return {"response": response}
トレースにコンテキスト (ユーザー ID、セッション ID、カスタムメタデータなど) を追加するには、本番運用トレースガイドの 本番運用トレースへのコンテキストの追加 を参照してください。
デプロイメント例
Docker
Docker を使用してデプロイする場合は、必要なすべての環境変数をコンテナ構成に渡します。
# Dockerfile
FROM python:3.9-slim
# Install dependencies
COPY requirements.txt .
RUN pip install -r requirements.txt
# Copy application code
COPY . /app
WORKDIR /app
# Declare required environment variables (no defaults)
ENV DATABRICKS_HOST
ENV DATABRICKS_TOKEN
ENV MLFLOW_TRACKING_URI
ENV MLFLOW_EXPERIMENT_NAME
ENV MLFLOW_ACTIVE_MODEL_ID
CMD ["python", "app.py"]
環境変数を使用してコンテナを実行します。
docker run -d \
-e DATABRICKS_HOST="https://your-workspace.databricks.com" \
-e DATABRICKS_TOKEN="your-databricks-token" \
-e MLFLOW_TRACKING_URI=databricks \
-e MLFLOW_EXPERIMENT_NAME="/Shared/production-genai-app" \
-e MLFLOW_ACTIVE_MODEL_ID="customer_support_agent-git-98207f02" \
-e APP_VERSION="1.0.0" \
your-app:latest
Kubernetes
Kubernetes デプロイメントの場合は、ConfigMaps と Secrets を使用して構成を管理します。
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mlflow-config
data:
DATABRICKS_HOST: 'https://your-workspace.databricks.com'
MLFLOW_TRACKING_URI: 'databricks'
MLFLOW_EXPERIMENT_NAME: '/Shared/production-genai-app'
MLFLOW_ACTIVE_MODEL_ID: 'customer_support_agent-git-98207f02'
---
# secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: databricks-secrets
type: Opaque
stringData:
DATABRICKS_TOKEN: 'your-databricks-token'
---
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: genai-app
spec:
replicas: 2
selector:
matchLabels:
app: genai-app
template:
metadata:
labels:
app: genai-app
spec:
containers:
- name: app
image: your-app:latest
ports:
- containerPort: 8000
envFrom:
- configMapRef:
name: mlflow-config
- secretRef:
name: databricks-secrets
env:
- name: APP_VERSION
value: '1.0.0'
resources:
requests:
memory: '256Mi'
cpu: '250m'
limits:
memory: '512Mi'
cpu: '500m'
バージョン固有のトレースのクエリ
デプロイしたら、MLflow トレース UI でトレースを表示したり、SDK でモデル バージョンごとにトレースをクエリしたりできます。
import mlflow
# Get the experiment ID
experiment = client.get_experiment_by_name("/Shared/production-genai-app")
# Find all traces from a specific model version
traces = mlflow.search_traces(
experiment_ids=[experiment.experiment_id],
model_id="customer_support_agent-git-98207f02",
)
# View the results
print(f"Found {len(traces)} traces for this model version")
Databricks モデルサービングでのトレースリンク
Agent Frameworkを使用してDatabricksモデルサービングにLoggedModel
をデプロイし、開発環境にMLflow 3をインストールすると、トレースリンクが自動的に設定されます。
Databricks モデルサービングエンドポイントからのトレースを表示するには:
- 電話をかけたときにアクティブだった MLflow エクスペリメントに移動します
agents.deploy()
- [トレース ] タブをクリックして、トレースを表示します
- すべてのトレースは、リクエストを提供する特定のモデルバージョンに自動的にリンクされます
唯一の要件は、アプリケーション コードで MLflow トレースを使用することです (自動ログ記録または @mlflow.trace
を使用した手動インストルメンテーションを使用)。
次のステップ
モデルサービング以外のデプロイメントの認証、モニタリング、フィードバック収集など、完全な本番運用トレース設定 Databricks 、 トレースによる本番運用オブザーバビリティを参照してください。