次の方法で共有


Foundry Local で実行する Hugging Face モデルをコンパイルする

Von Bedeutung

  • Foundry Local はプレビューで利用できます。 パブリック プレビュー リリースでは、アクティブなデプロイ中の機能に早期にアクセスできます。
  • 一般提供 (GA) の前は、機能、アプローチ、プロセスが変更されたり、機能が制限されたりする場合があります。

Foundry Local は、高パフォーマンスでデバイス上で ONNX モデルを実行します。 モデル カタログにはすぐに 使用できるプリコンパイル済みオプションが用意されていますが、ONNX 形式の任意のモデルを使用できます。

Safetensor または PyTorch 形式の既存のモデルを ONNX 形式にコンパイルするには、 Olive を使用できます。 Olive は、モデルを ONNX 形式に最適化し、Foundry Local でのデプロイに適したツールです。 量子 グラフの最適化 などの手法を使用してパフォーマンスを向上させます。

このガイドでは、次の方法について説明します。

  • Foundry Local で実行するように、Hugging Face からモデルを変換して最適化します。 Llama-3.2-1B-Instruct モデルを例として使用しますが、Hugging Face の任意の生成 AI モデルを使用できます。
  • Foundry Local を使用して最適化されたモデルを実行する

[前提条件]

  • Python 3.10 以降

Olive をインストールする

Olive は、モデルを ONNX 形式に最適化するツールです。

pip install olive-ai[auto-opt]

ヒント

最良の結果を得るには、 venv または conda を使用して仮想環境に Olive をインストールします。

Hugging Face にサインインする

Llama-3.2-1B-Instruct モデルを最適化します。これには、Hugging Face 認証が必要です。

huggingface-cli login

続行する前 に、まず Hugging Face トークンを作成 し、 モデル のアクセスを要求 する必要があります。

モデルをコンパイルする

手順 1: Olive auto-opt コマンドを実行する

Olive auto-opt コマンドを使用して、モデルのダウンロード、変換、量子化、最適化を行います。

olive auto-opt \
    --model_name_or_path meta-llama/Llama-3.2-1B-Instruct \
    --trust_remote_code \
    --output_path models/llama \
    --device cpu \
    --provider CPUExecutionProvider \
    --use_ort_genai \
    --precision int4 \
    --log_level 1

コンパイル プロセスには約 60 秒かかり、さらにモデルのダウンロードに余分な時間がかかります。

このコマンドでは、次のパラメーターを使用します。

パラメーター 説明
model_name_or_path モデル ソース: Hugging Face ID、ローカル パス、または Azure AI モデル レジストリ ID
output_path 最適化されたモデルを保存する場所
device ターゲット ハードウェア: cpugpu、または npu
provider 実行プロバイダー (たとえば、 CPUExecutionProviderCUDAExecutionProvider)
precision モデルの精度: fp16fp32int4、または int8
use_ort_genai 推論構成ファイルを作成します

ヒント

モデルのローカル コピーがある場合は、Hugging Face ID の代わりにローカル パスを使用できます。 たとえば、--model_name_or_path models/llama-3.2-1B-Instruct のようにします。 Olive は変換、最適化、量子化を自動的に処理します。

手順 2: 出力モデルの名前を変更する

Olive は、汎用の model ディレクトリにファイルを配置します。 使いやすくするために名前を変更します。

cd models/llama
mv model llama-3.2

手順 3: チャット テンプレート ファイルを作成する

チャット テンプレートは、会話型 AI モデルに対する入力メッセージと出力メッセージの処理方法を定義する構造化形式です。 ロール (システム、ユーザー、アシスタントなど) と会話の構造を指定して、モデルがコンテキストを理解し、適切な応答を生成できるようにします。

Foundry Local では、適切な応答を生成するために、 inference_model.json というチャット テンプレート JSON ファイルが必要です。 テンプレート のプロパティは、モデル名と PromptTemplate オブジェクトです。このオブジェクトには、Foundry Local が実行時にユーザー プロンプトと共に挿入する {Content} プレースホルダーが含まれています。

{
  "Name": "llama-3.2",
  "PromptTemplate": {
    "assistant": "{Content}",
    "prompt": "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n\nCutting Knowledge Date: December 2023\nToday Date: 26 Jul 2024\n\nYou are a helpful assistant.<|eot_id|><|start_header_id|>user<|end_header_id|>\n\n{Content}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n"
  }
}

チャット テンプレート ファイルを作成するには、Hugging Face ライブラリの apply_chat_template メソッドを使用します。

次の例では、Python Hugging Face ライブラリを使用してチャット テンプレートを作成します。 Hugging Face ライブラリは Olive の依存関係であるため、同じ Python 仮想環境を使用している場合は、インストールする必要はありません。 別の環境を使用している場合は、 pip install transformersを使用してライブラリをインストールします。

# generate_inference_model.py
# This script generates the inference_model.json file for the Llama-3.2 model.
import json
import os
from transformers import AutoTokenizer

model_path = "models/llama/llama-3.2"

tokenizer = AutoTokenizer.from_pretrained(model_path)
chat = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "{Content}"},
]


template = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)

json_template = {
  "Name": "llama-3.2",
  "PromptTemplate": {
    "assistant": "{Content}",
    "prompt": template
  }
}

json_file = os.path.join(model_path, "inference_model.json")

with open(json_file, "w") as f:
    json.dump(json_template, f, indent=2)

以下を使用してスクリプトを実行します。

python generate_inference_model.py

モデルを実行する

Foundry Local CLI、REST API、または OpenAI Python SDK を使用して、コンパイル済みモデルを実行できます。 まず、モデル キャッシュ ディレクトリを、前の手順で作成した models ディレクトリに変更します。

foundry cache cd models
foundry cache ls  # should show llama-3.2

注意事項

実行が完了したら、モデル キャッシュを既定のディレクトリに戻してください。

foundry cache cd ./foundry/cache/models.

Foundry ローカル CLI の使用

foundry model run llama-3.2 --verbose

OpenAI Python SDK の使用

OpenAI Python SDK は、Foundry Local REST API と対話するための便利な方法です。 次のコマンドを使用してインストールできます。

pip install openai
pip install foundry-local-sdk

次に、次のコードを使用してモデルを実行できます。

import openai
from foundry_local import FoundryLocalManager

modelId = "llama-3.2"

# Create a FoundryLocalManager instance. This will start the Foundry 
# Local service if it is not already running and load the specified model.
manager = FoundryLocalManager(modelId)

# The remaining code us es the OpenAI Python SDK to interact with the local model.

# Configure the client to use the local Foundry service
client = openai.OpenAI(
    base_url=manager.endpoint,
    api_key=manager.api_key  # API key is not required for local usage
)

# Set the model to use and generate a streaming response
stream = client.chat.completions.create(
    model=manager.get_model_info(modelId).id,
    messages=[{"role": "user", "content": "What is the golden ratio?"}],
    stream=True
)

# Print the streaming response
for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="", flush=True)

ヒント

HTTP 要求をサポートする任意の言語を使用できます。 詳細については、 Foundry Local を使用した統合推論 SDK に関する記事を参照してください。

仕上げ

カスタム モデルの使用が完了したら、次を使用してモデル キャッシュを既定のディレクトリにリセットする必要があります。

foundry cache cd ./foundry/cache/models

次のステップ