Phi-2チュートリアル
Phi-2を使用したPythonでの言語生成
Section titled “Phi-2を使用したPythonでの言語生成”セットアップとインストール
Section titled “セットアップとインストール”インストール手順を使用して、ONNX Runtime generate() API Pythonパッケージをインストールします。
phi-2 ONNXモデルのビルド
Section titled “phi-2 ONNXモデルのビルド”onnxruntime-genaiパッケージには、Huggingfaceの重みと設定を使用してphi-2 ONNXモデルを生成するモデルビルダーが含まれています。このツールでは、Hugging Faceから重みをダウンロードしたり、ローカルに保存されている重みをロードしたり、GGUF形式から変換したりすることもできます。詳細については、モデルのビルド方法を参照してください。
ここで示す-mオプションを使用する場合は、Hugging Faceにログインする必要があります。
pip install huggingface-hubhuggingface-cli loginモデルはさまざまな精度でビルドできます。このコマンドは、最も小さいモデルを生成し、CPUで実行できるため、int4を使用します。
python -m onnxruntime_genai.models.builder -m microsoft/phi-2 -e cpu -p int4 -o ./example-models/phi2-int4-cpu-oオプションで指定された出力フォルダの名前は、任意の名前に変更できます。
スクリプトを実行すると、このフォルダに一連のファイルが生成されます。これらには、参照用のHuggingFace設定と、ONNX Runtime generate() APIで使用される次の生成ファイルが含まれます。
model.onnx: phi-2 ONNXモデルmodel.onnx.data: phi-2 ONNXモデルの重みgenai_config.json: ONNX Runtime generate() APIで使用される設定
genai_config.jsonファイルの値は表示および変更できます。独自のモデルを持ち込み、パラメータが異なる場合を除き、モデルセクションは更新しないでください。
検索パラメータは変更できます。たとえば、異なる温度値で生成したい場合があります。これらの値は、以下に示すset_search_optionsメソッドを介して設定することもできます。
サンプルプロンプトでモデルを実行する
Section titled “サンプルプロンプトでモデルを実行する”次のPythonスクリプトでモデルを実行します。必要に応じて、プロンプトやその他のパラメータを変更できます。
import onnxruntime_genai as og
prompt = '''def print_prime(n): """ 1からnまでのすべての素数を出力する """'''
model=og.Model(f'example-models/phi2-int4-cpu')
tokenizer = og.Tokenizer(model)
tokens = tokenizer.encode(prompt)
params=og.GeneratorParams(model)params.set_search_options({"max_length":200})params.input_ids = tokens
output_tokens=model.generate(params)[0]
text = tokenizer.decode(output_tokens)
print(text)プロンプトのバッチを実行する
Section titled “プロンプトのバッチを実行する”モデルを介してプロンプトのバッチを実行することもできます。
prompts = [ "これはテストです。", "ネズミは素晴らしいペットです!", "素早い茶色のキツネは怠惰な犬を飛び越えます。", ]
inputs = tokenizer.encode_batch(prompts)
params=og.GeneratorParams(model)params.input_ids = tokens
outputs = model.generate(params)[0]
text = tokenizer.decode(output_tokens)トークナイザーの出力をストリーミングする
Section titled “トークナイザーの出力をストリーミングする”トークンを一度に1つずつユーザーインターフェイスに出力する必要があるアプリケーションを開発している場合は、ストリーミングトークナイザーを使用できます。
generator=og.Generator(model, params)tokenizer_stream=tokenizer.create_stream()
print(prompt, end='', flush=True)
while not generator.is_done(): generator.compute_logits() generator.generate_next_token_top_p(0.7, 0.6) print(tokenizer_stream.decode(generator.get_next_tokens()[0]), end='', flush=True)