コンテンツにスキップ

Phi-2チュートリアル

Phi-2を使用したPythonでの言語生成

Section titled “Phi-2を使用したPythonでの言語生成”

インストール手順を使用して、ONNX Runtime generate() API Pythonパッケージをインストールします。

onnxruntime-genaiパッケージには、Huggingfaceの重みと設定を使用してphi-2 ONNXモデルを生成するモデルビルダーが含まれています。このツールでは、Hugging Faceから重みをダウンロードしたり、ローカルに保存されている重みをロードしたり、GGUF形式から変換したりすることもできます。詳細については、モデルのビルド方法を参照してください。

ここで示す-mオプションを使用する場合は、Hugging Faceにログインする必要があります。

Terminal window
pip install huggingface-hub
huggingface-cli login

モデルはさまざまな精度でビルドできます。このコマンドは、最も小さいモデルを生成し、CPUで実行できるため、int4を使用します。

Terminal window
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)