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]
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 |
ターゲット ハードウェア: cpu 、 gpu 、または npu |
provider |
実行プロバイダー (たとえば、 CPUExecutionProvider 、 CUDAExecutionProvider ) |
precision |
モデルの精度: fp16 、 fp32 、 int4 、または 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