🎉

LLMOpsって何だ?: MLflow Tracing Conceptsを読み込む

2025/03/02に公開

Tracing Concepts

本記事はほぼほぼ MLflowの公式ドキュメントTracing Conceptsを読み進めているだけの記事ではありますが、ところどころわかりにくい箇所は実際にコードを実行して検証等もしているので、ぜひご覧ください。

What is tracing?

あらためてtracingとは以下のように述べられています。

Tracing in the context of machine learning (ML) refers to the detailed tracking and recording of the data flow and processing steps during the execution of an ML model.

つまりは「MLモデルが実行される際のデータフローや処理の各ステップを詳細に追跡・記録することを指します。」

Traditional Machine Learning

伝統的、つまり昔からある古典的な機械学習モデル(線形回帰、決定技、NN、SVM等)は inputから outputまでのdiagramが単純でわかりやすいものでした。traceはdeployment、推論までのレイテンシ、API log等も含みます。伝統的な機械学習でその経路やログを意識することは、大体、特にデータサイエンティストにとってありませんでした。

Concept of a Span


その中でspanとは何かというと、一つ一つの独立した操作を表現するものです。その開始時間や終了時間といったメタデータを持ちます。
独立した操作とは以下にあるように 生成AIモデルの応答、 verctor storeからのクエリ結果(つまりはRAG)、関数の呼び出しですね。

such as a call to a GenAI model, a retrieval query from a vector store, or a function call

この記事を書いているときはちょうどAI Agentが流行り始めて2ヶ月目くらいで、この節はそれに対して明確な言及はありませんでしたが、まさに関数等はAgentの文脈にそのままハマりそうです。

Concept of a Trace

その上で traceとは DAG(Directed Acyclic Graph)であり、非同期に呼び出されたレコードであるということです。 DAGは非有向巡回グラフであり、一言でいうと「閉路のない有向グラフ」であり、一度スタートしたその向きが循環して元の場所に戻ってこないということです。
span一つ一つは最小単位の動作を記録し、一つのtraceの中でそれが戻ってくることはなく、一つの結果に向けて順番に処理されていくイメージです。
また Hierarchical Association つまりは階層構造を表現することも可能であり、ひとつのspan(親span)にどのような子spanに紐づいているのか、これを表現することも重要なひとつです。

このtraceによって一連のプロセスの可視化、ボトルネックの特定、多くのcomponents、vector storeや functionsを持った複雑なsystemの理解に繋げられます

GenAI ChatCompletions Use Case

ここでは ChatCompletionsを引き合いに出しています。またAgentsに対する言及もあり、Agentsほど複雑ではないものの、ChatCompletionsに対する記録は十分な恩恵があると記載があります。
特に以下の記載はあらためて学びになりました。

chat session allows for evaluating the entire contextual history
Additional metadata surrounding the inference process is useful for various reasons, including billing

tracingは チャット履歴の評価を観測できるため、やりとり全体を評価することにつながり、さらにそれらに付随するメタデータはパフォーマンスの課題や費用に関してもinsightを得られます。

また、重要なメタデータとしては以下のようなものがあります。

  • Token Counts: 処理されるトークンの数であり、料金に影響します。
  • Model Name: 推論に使用される特定のモデル。
  • Provider Type: モデルを提供するサービスやプラットフォーム。
  • Query Parameters: 温度や top-k など、生成プロセスに影響を与える設定。
  • Query Input: リクエストの入力(ユーザーの質問)。
  • Query Response: クエリパラメータを活用して生成を調整し、入力されたクエリに対してシステムが生成した応答。

Advanced Retrieval-Augmented Generation (RAG) Applications

そして最後にRAGについて触れていますね。
以下のような内容が spanとして取得可能であり、それらがRAGの評価に活きるという分けです。

  • 入力クエリのエンベディング
  • エンコードされたクエリベクターの返却
  • ベクター検索用の入力
  • ベクターデータベースから取得されたドキュメントのチャンク
  • GenAIモデルへの最終的な入力
    RAGが一番効果をイメージしやすいかもしれませんね。

最後に

あらためて span, traceとは何かを確認しました。
LLMのapplicationを監視していくにはこれら非常に有効なツールかつ、とてもわかりやすい可視化を提供すると思います。
このあとはspanやtracingをもう少しオブジェクトレベルで理解するために MLflow Tracing Schemaと、またそれを集積した上で統括的な分析を行うためにMLflow LLM Evaluationを読んでいこうと思います。
また、もしよければ前回の記事もご覧ください。ありがとうございました。
https://zenn.dev/hirayuki/articles/6c0609a86e5766

reference

https://mlflow.org/docs/latest/llms/tracing/overview.html

Discussion