Phi-4-mini-reasoningモデルのコンテナ導入とWeb UI活用

1. モデル概要

Phi-4-mini-reasoningは、高品質な推論タスクに特化した軽量のオープンソースモデルです。Phi-4モデルファミリーの一員として、以下の特徴を備えています。

  • 優れた推論能力: 合成データで学習されており、特に数学的推論能力が強化されています。
  • 広範なコンテキストサポート: 最大128Kトークンまでの長文コンテキストを処理できます。
  • 効率性と軽量性: 同カテゴリのモデルと比較して、リソース消費が少なく、高いパフォーマンスを発揮します。

このモデルは、数学的問題解決や論理分析など、複雑な推論を必要とするアプリケーションに最適です。本記事では、このモデルをゼロからデプロイする手順を詳しく解説します。

2. 環境構築

2.1 Dockerイメージの取得

まず、必要なコンポーネントがすべて含まれているプリビルドされたDockerイメージを取得します。このイメージには、以下の要素が組み込まれています。

  1. vLLM推論エンジン(事前設定済み)
  2. Chainlitフロントエンドインターフェース
  3. Phi-4-mini-reasoningモデル(プリロード済み)
docker pull your_registry/phi-4-mini-reasoning:latest

2.2 コンテナの起動

以下のコマンドを使用してDockerコンテナを起動します。これにより、必要なサービスが展開されます。

docker run -d --gpus all -p 8000:8000 -p 8001:8001 \
  --name phi4-inference \
  your_registry/phi-4-mini-reasoning:latest

各パラメータの説明:

  • --gpus all: ホストのGPUリソースをコンテナに割り当て、高速な推論を可能にします。
  • -p 8000:8000: vLLM推論サービスがリッスンするポート(内部:8000)をホストの8000番ポートにマッピングします。
  • -p 8001:8001: ChainlitウェブUIがリッスンするポート(内部:8001)をホストの8001番ポートにマッピングします。

3. デプロイの確認

3.1 サービス状態の確認

デプロイ後、モデルサービスが正常に稼働しているかを確認する必要があります。以下のコマンドでコンテナ内のログを閲覧できます。

docker exec -it phi4-inference cat /root/workspace/llm.log

以下のような出力が表示されれば、サービスは準備が整っています。

INFO:     Uvicorn running on http://0.0.0.0:8000
INFO:     Model loaded successfully

3.2 モデルロード時間のモニタリング

ハードウェア構成によっては、モデルのロードに5〜15分かかる場合があります。以下のコマンドでロードの進捗状況をリアルタイムで監視できます。

docker logs -f phi4-inference

"Model ready"というログメッセージが表示されたら、モデルの利用を開始できます。

4. Chainlit Web UIの利用

4.1 Webインターフェースへのアクセス

サービスが起動したら、ウェブブラウザで以下のURLにアクセスしてください。

http://[サーバーのIPアドレス]:8001

Chainlitが提供する簡潔なチャットインターフェースが表示されます。

4.2 推論の実行

入力ボックスに推論に関する質問を入力してみてください。例えば:

直角三角形の斜辺を求めるピタゴラスの定理について説明し、直角を挟む2辺の長さがそれぞれ5と12である場合の斜辺の長さを計算してください。

モデルは、詳細な推論過程と結果を返答します。

5. 詳細な利用方法

5.1 推論パラメータの調整

Chainlitインターフェースでは、設定アイコンをクリックして、推論生成のパラメータを調整できます。

  • temperature: 生成されるテキストのランダム性を制御します(0〜1の範囲)。値を高くすると創造的で多様なテキストが生成されますが、低くするとより予測可能で保守的なテキストになります。
  • max_tokens: 生成される応答の最大長さを設定します。
  • top_p: 核サンプリングパラメータで、信頼度の高いトークンから選択して生成します。

5.2 システムプロンプトの活用

モデルの応答スタイルや役割を変更するために、システムプロンプトをカスタマイズできます。Chainlitのアプリケーションコードでは、以下のように記述します。

import chainlit as cl

@cl.on_chat_start
async def start_chat_session():
    # モデルに特定の役割や指示を与えるシステムプロンプトを設定
    initial_prompt = "あなたは専門の歴史学者です。質問には簡潔かつ正確に答えてください。"
    await cl.Message(content=initial_prompt, author="System").send()
    # ユーザーへの初期メッセージ
    await cl.Message(content="歴史に関する質問があれば何でも聞いてください。", author="Assistant").send()

5.3 APIによるバッチ処理

多数の推論リクエストをプログラムから処理する場合、vLLMのAPIを直接呼び出すことができます。以下はPythonでの例です。

import requests
import json

def generate_text_via_api(prompt_text: str, max_output_tokens: int = 256):
    api_endpoint = "http://localhost:8000/v1/completions"
    request_headers = {"Content-Type": "application/json"}
    payload_data = {
        "model": "phi-4-mini-reasoning", # デプロイされたモデル名
        "prompt": prompt_text,
        "max_tokens": max_output_tokens,
        "temperature": 0.7,
        "top_p": 0.9,
    }

    try:
        response = requests.post(api_endpoint, headers=request_headers, json=payload_data)
        response.raise_for_status() # HTTPエラーが発生した場合に例外を発生させる
        response_json = response.json()
        if "choices" in response_json and len(response_json["choices"]) > 0:
            return response_json["choices"][0]["text"].strip()
        return "No text generated."
    except requests.exceptions.RequestException as e:
        return f"APIリクエストエラー: {e}"

# 使用例
example_prompt = "量子力学の基本原理を高校生にもわかるように説明してください。"
generated_content = generate_text_via_api(example_prompt, max_output_tokens=300)
print(f"生成されたテキスト:\n{generated_content}")

6. トラブルシューティング

6.1 サービス起動に関する問題

サービスにアクセスできない場合は、以下の点を確認してください。

  1. コンテナの稼働状況: docker ps コマンドで、phi4-inferenceコンテナがUp状態であることを確認します。
  2. ポートマッピングの確認: docker port phi4-inference コマンドで、8000番および8001番ポートが正しくマッピングされているか確認します。
  3. ファイアウォール設定: サーバーのファイアウォールで、8000番と8001番ポートが外部からのアクセスに対して開放されているか確認します。

6.2 推論結果の品質が低い場合

生成される応答の品質に不満がある場合は、以下の対策を試してください。

  • max_tokensを増やす: より長く、詳細な応答を生成できるようになります。
  • temperatureを調整する: 低い値に設定することで、より一貫性があり、事実に基づいた応答を促すことができます。
  • プロンプトに具体的な指示を追加する: 「ステップバイステップで推論してください」「詳細に説明してください」といった指示を加えることで、モデルの応答を改善できます。

6.3 GPUメモリ不足

CUDAメモリ関連のエラーが発生した場合、以下の解決策を検討してください。

  • バッチサイズを削減: モデルへのリクエストにおける同時処理数を減らすことで、GPUメモリの消費を抑えます。
  • 量子化モデルの利用: より少ないビット数で表現される量子化されたモデルバージョンを使用することで、メモリ使用量を大幅に削減できます。
  • GPUハードウェアのアップグレード: 根本的な解決策として、より大容量のGPUメモリを持つハードウェアへのアップグレードを検討します。

タグ: Phi-4-mini-reasoning LLM Docker vLLM Chainlit

8月1日 02:39 投稿