LLM 推論 API を使用すると、大規模言語モデル(LLM)を完全にデバイス上で実行できます。これにより、テキストの生成、自然言語形式での情報の取得、ドキュメントの要約など、さまざまなタスクを実行できます。このタスクには、複数のテキストからテキストへの大規模言語モデルのサポートが組み込まれているため、最新のオンデバイス生成 AI モデルをアプリやサービスに適用できます。
このタスクは、Gemma の Gemma-2 2B、Gemma 2B、Gemma 7B の各バリアントをサポートしています。Gemma は、Gemini モデルの作成に使用されたものと同じ研究とテクノロジーに基づいて構築された、軽量で最先端のオープンモデルのファミリーです。また、Phi-2、Falcon-RW-1B、StableLM-3B などの外部モデルもサポートしています。
サポートされているモデルに加えて、Google の AI Edge Torch を使用して、PyTorch モデルをマルチシグネチャ LiteRT(tflite
)モデルにエクスポートできます。これらのモデルは、トークン化パラメータとバンドルされ、LLM Inference API と互換性のあるタスク バンドルを作成します。AI Edge Torch で変換されたモデルは CPU バックエンドでのみ実行できるため、Android と iOS に限定されます。
使ってみる
このタスクを使用するには、対象プラットフォーム向けの次のいずれかの実装ガイドに沿って操作します。以下のプラットフォーム固有のガイドでは、このタスクの基本的な実装について説明します。利用可能なモデルと推奨される構成オプションを使用するコード例を示します。
タスクの詳細
このセクションでは、このタスクの機能、入力、出力、構成オプションについて説明します。
機能
LLM Inference API には、次の主な機能が含まれています。
- テキストからテキストへの生成 - 入力テキスト プロンプトに基づいてテキストを生成します。
- LLM の選択 - 複数のモデルを適用して、特定のユースケースに合わせてアプリを調整します。カスタマイズされた重みを再トレーニングしてモデルに適用することもできます。
- LoRA のサポート - すべてのデータセットでトレーニングするか、オープンソース コミュニティから事前構築された LoRA モデルを取得して、LoRA モデルで LLM 機能を拡張してカスタマイズします(AI Edge Torch Generative API で変換されたモデルとは互換性がありません)。
タスク入力 | タスクの出力 |
---|---|
LLM Inference API は、次の入力を受け入れます。
|
LLM Inference API は次の結果を出力します。
|
構成オプション
このタスクには、次の構成オプションがあります。
オプション名 | 説明 | 値の範囲 | デフォルト値 |
---|---|---|---|
modelPath |
プロジェクト ディレクトリ内のモデルの保存場所へのパス。 | 経路 | なし |
maxTokens |
モデルが処理するトークンの最大数(入力トークン + 出力トークン)。 | Integer | 512 |
topK |
生成の各ステップでモデルが考慮するトークンの数。予測を、最も高い確率を持つ上位 k 個のトークンに制限します。 | Integer | 40 |
temperature |
生成時に導入されるランダム性の量。温度が高いほど、生成されるテキストの創造性が高まり、温度が低いほど、生成が予測しやすくなります。 | 浮動小数点数 | 0.8 |
randomSeed |
テキスト生成時に使用される乱数シード。 | Integer | 0 |
loraPath |
デバイス上のローカル LoRA モデルの絶対パス。注: これは GPU モデルにのみ対応しています。 | 経路 | なし |
resultListener |
結果を非同期で受け取るように結果リスナーを設定します。 非同期生成方法を使用する場合にのみ適用されます。 | なし | なし |
errorListener |
オプションのエラー リスナーを設定します。 | なし | なし |
モデル
LLM Inference API は、ブラウザとモバイル デバイスでの実行用に最適化された複数のモデルの組み込みサポートなど、多くのテキストツーテキストの大規模言語モデルをサポートしています。これらの軽量モデルを使用して、推論を完全にデバイス上で実行できます。
LLM Inference API を初期化する前に、モデルをダウンロードしてプロジェクト ディレクトリ内に保存します。事前変換済みのモデルを使用するか、モデルを MediaPipe 互換の形式に変換できます。
LLM 推論 API は、2 つのカテゴリのモデルと互換性があります。一部のモデルではモデル変換が必要です。次の表を使用して、モデルに必要なステップ方法を特定します。
モデル | コンバージョンの方法 | 対応プラットフォーム | ファイル形式 | |
---|---|---|---|---|
サポートされているモデル | Gemma 2B、Gemma 7B、Gemma-2 2B、Phi-2、StableLM、Falcon | MediaPipe | Android、iOS、ウェブ | .bin |
その他の PyTorch モデル | すべての PyTorch LLM モデル | AI Edge Torch 生成ライブラリ | Android、iOS | .task |
Gemma 2B、Gemma 7B、Gemma-2 2B の変換済み .bin
ファイルは Kaggle でホストされています。これらのモデルは、LLM Inference API を使用して直接デプロイできます。他のモデルを変換する方法については、モデルの変換をご覧ください。
Gemma-2 2B
Gemma-2 2B は、Gemini モデルの作成に使用されたものと同じ研究とテクノロジーに基づいて構築された、軽量で最先端のオープンモデル ファミリーである Gemma の最新モデルです。このモデルには 20 億個のパラメータとオープン ウェイトが含まれています。Gemma-2 2B は、同クラスのモデル向けの最先端の推論スキルで知られています。
Gemma-2 2B モデルには、次のバリエーションがあります。
- gemma2-2b-it-cpu-int8: CPU 互換性のある Gemma-2 2B 8 ビットモデル。
- gemma2-2b-it-gpu-int8: GPU 互換性のある Gemma-2 2B 8 ビットモデル。
モデルをチューニングして新しい重みを追加してから、アプリに追加することもできます。Gemma のチューニングとカスタマイズの詳細については、Gemma のチューニングをご覧ください。Kaggle Models から Gemma-2 2B をダウンロードすると、MediaPipe Tasks で使用できる適切な形式のモデルがすでに用意されています。
Gemma 2B
Gemma 2B は、Gemini モデルの作成に使用されたものと同じ研究とテクノロジーに基づいて構築された、軽量で最先端のオープンモデルのファミリーに属しています。このモデルには 2 億個のパラメータとオープン ウェイトが含まれています。このモデルは、質問応答、要約、推論など、さまざまなテキスト生成タスクに適しています。
Gemma 2B モデルには、次のバリエーションがあります。
- gemma-2b-it-cpu-int4: CPU 互換性のある Gemma 2B 4 ビットモデル。
- gemma-2b-it-cpu-int8: CPU 互換性のある Gemma 2B 8 ビットモデル。
- gemma-2b-it-gpu-int4: GPU 互換性のある Gemma 2B 4 ビットモデル。
- gemma-2b-it-gpu-int8: GPU と互換性のある Gemma 2B 8 ビットモデル。
モデルをチューニングして新しい重みを追加してから、アプリに追加することもできます。Gemma のチューニングとカスタマイズの詳細については、Gemma のチューニングをご覧ください。Kaggle Models から Gemma 2B をダウンロードすると、MediaPipe Tasks で使用できる適切な形式になっています。
Gemma 7B
Gemma 7B は、7B パラメータとオープン重みを持つ大規模な Gemma モデルです。このモデルは、質問応答、要約、推論など、さまざまなテキスト生成タスクに適しています。Gemma 7B はウェブでのみサポートされています。
Gemma 7B モデルには、次の 1 つのバリアントがあります。
- gemma-1.1-7b-it-gpu-int8: GPU 互換性のある Gemma 7B 8 ビットモデル。
Kaggle Models から Gemma 7B をダウンロードすると、MediaPipe で使用できる適切な形式のモデルがすでに用意されています。
Falcon 1B
Falcon-1B は、RefinedWeb の 350 億トークンでトレーニングされた 10 億パラメータの因果デコーダ専用モデルです。
LLM 推論 API では、次のファイルをローカルにダウンロードして保存する必要があります。
tokenizer.json
tokenizer_config.json
pytorch_model.bin
Falcon モデルファイルをダウンロードしたら、変換スクリプトを使用してモデルを MediaPipe 形式に変換できます。サポートされているモデル用のコンバージョン スクリプトの手順に沿って操作します。
StableLM 3B
StableLM-3B は、多様な英語とコードのデータセットの 1000 兆トークンで 4 エポックで事前トレーニングされた 30 億パラメータのデコーダ専用言語モデルです。
LLM 推論 API では、次のファイルをローカルにダウンロードして保存する必要があります。
tokenizer.json
tokenizer_config.json
model.safetensors
StableLM モデル ファイルをダウンロードしたら、変換スクリプトを使用してモデルを MediaPipe 形式に変換できます。サポートされているモデル用のコンバージョン スクリプトの手順に沿って操作します。
Phi-2
Phi-2 は 27 億のパラメータを持つ Transformer モデルです。さまざまな NLP 合成テキストとフィルタされたウェブサイトを使用してトレーニングされています。このモデルは、質問と回答、チャット、コードの形式を使用するプロンプトに最適です。
LLM 推論 API では、次のファイルをローカルにダウンロードして保存する必要があります。
tokenizer.json
tokenizer_config.json
model-00001-of-00002.safetensors
model-00002-of-00002.safetensors
Phi-2 モデル ファイルをダウンロードしたら、変換スクリプトを使用してモデルを MediaPipe 形式に変換できます。サポートされているモデル用のコンバージョン スクリプトの手順に沿って操作します。
生成 PyTorch モデル
PyTorch 生成モデルは、AI Edge Torch Generative API を使用して MediaPipe 互換の形式に変換できます。この API を使用すると、PyTorch モデルをマルチシグネチャ LiteRT(TensorFlow Lite)モデルに変換できます。モデルのマッピングとエクスポートの詳細については、AI Edge Torch の GitHub ページをご覧ください。
AI Edge Torch Generative API を使用して PyTorch モデルを変換する場合は、PyTorch モデル用の Torch Generative コンバータのセクションの手順に沿って操作します。
モデル変換
MediaPipe LLM 推論 API を使用すると、さまざまな大規模言語モデルをデバイス上で実行できます。これには、MediaPipe 互換形式に事前変換されたモデルや、変換スクリプトまたは AI Edge Torch ライブラリで変換できる他のモデルが含まれます。
LLM Inference API は、.bin
ファイル形式と .task
ファイル形式のモデルを受け入れます。事前変換済みモデルと変換スクリプトを使用して変換されたモデルは .bin
ファイルになります。AI Edge Torch ライブラリを使用して変換されたモデルは .task
ファイルになります。変換されたモデルのファイル形式を手動で変更しないでください。
LLM 推論 API には、次の 3 つのモデル変換パスがあります。
- 事前変換済みモデル(Gemma 2B、Gemma 7B、Gemma-2 2B): 変換は不要です。
- サポートされているモデル(Phi-2、StableLM、Falcon): MediaPipe 変換スクリプト。
- その他の PyTorch モデル(すべての PyTorch LLM モデル): AI Edge Torch Generative API。
事前変換済みモデル
Gemma-2 2B、Gemma 2B、Gemma 7B モデルは、MediaPipe 形式の事前変換済みモデルとして使用できます。これらのモデルでは、ユーザーによる追加のコンバージョン手順は必要ありません。LLM 推論 API でそのまま実行できます。
Gemma-2 2B は Kaggle Models からダウンロードできます。
- gemma2-2b-it-cpu-int8: CPU 互換性のある Gemma-2 2B 8 ビットモデル。
- gemma2-2b-it-gpu-int8: GPU 互換性のある Gemma-2 2B 8 ビットモデル。
Gemma 2B のバリエーションを Kaggle Models からダウンロードできます。
- gemma-2b-it-cpu-int4: CPU 互換性のある Gemma 2B 4 ビットモデル。
- gemma-2b-it-cpu-int8: CPU 互換性のある Gemma 2B 8 ビットモデル。
- gemma-2b-it-gpu-int4: GPU 互換性のある Gemma 2B 4 ビットモデル。
- gemma-2b-it-gpu-int8: GPU と互換性のある Gemma 2B 8 ビットモデル。
Gemma 7B は Kaggle Models からダウンロードできます。
- gemma-1.1-7b-it-gpu-int8: GPU 互換性のある Gemma 7B 8 ビットモデル。
Gemma モデルの詳細については、Gemma-2 2B、Gemma 2B、Gemma 7B のドキュメントをご覧ください。
サポートされているモデル用のコンバージョン スクリプト
MediaPipe パッケージには、次の外部モデルを MediaPipe 互換形式に変換する変換スクリプトが用意されています。
サポートされている外部モデルの詳細については、Falcon 1B、StableLM 3B、Phi-2 のドキュメントをご覧ください。
モデル変換プロセスには、MediaPipe PyPI パッケージが必要です。変換スクリプトは、0.10.11
以降のすべての MediaPipe パッケージで使用できます。
次のように依存関係をインストールしてインポートします。
$ python3 -m pip install mediapipe
genai.converter
ライブラリを使用してモデルを変換します。
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
input_ckpt=INPUT_CKPT,
ckpt_format=CKPT_FORMAT,
model_type=MODEL_TYPE,
backend=BACKEND,
output_dir=OUTPUT_DIR,
combine_file_only=False,
vocab_model_file=VOCAB_MODEL_FILE,
output_tflite_file=OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
LoRA モデルを変換するには、ConversionConfig
でベースモデル オプションと追加の LoRA オプションを指定する必要があります。この API は GPU を使用した LoRA 推論のみをサポートしているため、バックエンドを 'gpu'
に設定する必要があります。
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
コンバータは、ベースモデル用と LoRA モデル用の 2 つの TFLite FlatBuffer ファイルを出力します。
パラメータ | 説明 | 使用できる値 |
---|---|---|
input_ckpt |
model.safetensors ファイルまたは pytorch.bin ファイルのパス。モデルの safetensors 形式が複数のファイル(model-00001-of-00003.safetensors 、model-00001-of-00003.safetensors など)にシャーディングされる場合があります。ファイルパターン(model*.safetensors など)を指定できます。 |
経路 |
ckpt_format |
モデルファイルの形式。 | {"safetensors", "pytorch"} |
model_type |
変換中の LLM。 | {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"} |
backend |
モデルの実行に使用されるプロセッサ(デリゲート)。 | {"cpu", "gpu"} |
output_dir |
レイヤごとの重みファイルをホストする出力ディレクトリのパス。 | 経路 |
output_tflite_file |
出力ファイルのパス。例: 「model_cpu.bin」、「model_gpu.bin」。このファイルは LLM 推論 API とのみ互換性があり、一般的な tflite ファイルとして使用することはできません。 | 経路 |
vocab_model_file |
tokenizer.json ファイルと tokenizer_config.json ファイルを保存するディレクトリのパス。Gemma の場合は、単一の tokenizer.model ファイルを指すようにします。 |
経路 |
lora_ckpt |
LoRA アダプタの重みを保存する safetensors ファイルの LoRA ckpt のパス。 | 経路 |
lora_rank |
LoRA ckpt のランクを表す整数。lora 重みを変換するために必要です。指定しない場合、コンバータは LoRA 重みがないものと見なします。注: LoRA は GPU バックエンドのみでサポートされています。 | Integer |
lora_output_tflite_file |
LoRA 重み用の出力 tflite ファイル名。 | 経路 |
PyTorch モデル用の Torch 生成コンバータ
PyTorch 生成モデルは、AI Edge Torch Generative API を使用して MediaPipe 互換の形式に変換できます。この API を使用すると、LLM Inference API で使用するために PyTorch LLM を作成、変換、量子化できます。Torch Generative コンバータは CPU 専用のコンバータで、64 GB 以上の RAM を搭載した Linux マシンが必要です。
AI Edge Torch Generative API を使用して PyTorch モデルを変換するには、次の操作を行います。
- PyTorch モデルのチェックポイントをダウンロードする
- AI Edge Torch Generative API を使用して、モデルの作成、変換、量子化を行い、MediaPipe 互換のファイル形式(
.tflite
)に変換します。 - tflite ファイルとモデル トークンからタスク バンドル(
.task
)を作成します。
タスクバンドルを作成するには、バンドル スクリプトを使用してタスクバンドルを作成します。バンドル プロセスでは、マッピングされたモデルに追加のメタデータ(トークナイザー パラメータ)を指定します。
モデルのバンドル プロセスには、MediaPipe PyPI パッケージが必要です。変換スクリプトは、0.10.14
以降のすべての MediaPipe パッケージで使用できます。
次のように依存関係をインストールしてインポートします。
$ python3 -m pip install mediapipe
genai.bundler
ライブラリを使用してモデルをバンドルします。
import mediapipe as mp
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model=TFLITE_MODEL,
tokenizer_model=TOKENIZER_MODEL,
start_token=START_TOKEN,
stop_tokens=STOP_TOKENS,
output_filename=OUTPUT_FILENAME,
enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
パラメータ | 説明 | 使用できる値 |
---|---|---|
tflite_model |
AI Edge からエクスポートされた TFLite モデルのパスと名前。 | 経路 |
tokenizer_model |
SentencePiece トークナイザ モデルのパス。 | 経路 |
start_token |
モデル固有の開始トークン。開始トークンは、指定されたトークン化モデルに存在している必要があります。 | STRING |
stop_tokens |
モデル固有の停留所トークン。指定されたトークン化モデルに停止トークンが存在している必要があります。 | LIST[STRING] |
output_filename |
出力タスク バンドル ファイルの名前。 | 経路 |
LoRA のカスタマイズ
Mediapipe LLM 推論 API は、大規模言語モデルの Low-Rank Adaptation(LoRA)をサポートするように構成できます。ファインチューニングされた LoRA モデルを使用すると、デベロッパーは費用対効果の高いトレーニング プロセスで LLM の動作をカスタマイズできます。LLM Inference API の LoRA サポートは、GPU バックエンドのすべての Gemma バリアントと Phi-2 モデルで機能します。LoRA 重みは、アテンション レイヤにのみ適用されます。この最初の実装は、今後の開発のための試験運用版 API として機能します。今後のアップデートでは、より多くのモデルとさまざまなタイプのレイヤをサポートする予定です。
LoRA モデルを準備する
HuggingFace の手順に沿って、サポートされているモデルタイプ(Gemma または Phi-2)を使用して、独自のデータセットでファインチューニングされた LoRA モデルをトレーニングします。Gemma-2 2B、Gemma 2B、Phi-2 モデルは、HuggingFace で safetensors 形式で使用できます。LLM Inference API は、アテンション レイヤでの LoRA のみをサポートしているため、LoraConfig
の作成時にアテンション レイヤのみを指定します。
# For Gemma
from peft import LoraConfig
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)
# For Phi-2
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)
テスト用に、HuggingFace で利用可能な LLM 推論 API に適合する、一般公開されているファインチューニング済みの LoRA モデルがあります。たとえば、Gemma-2B の場合は monsterapi/gemma-2b-lora-maths-orca-200k、Phi-2 の場合は lole25/phi-2-sft-ultrachat-lora です。
準備したデータセットでトレーニングしてモデルを保存すると、ファインチューニングされた LoRA モデルの重みを含む adapter_model.safetensors
ファイルが作成されます。safetensors ファイルは、モデル変換で使用される LoRA チェックポイントです。
次のステップとして、MediaPipe Python パッケージを使用して、モデルの重みを TensorFlow Lite Flatbuffer に変換する必要があります。ConversionConfig
には、ベースモデル オプションと追加の LoRA オプションを指定する必要があります。この API は GPU を使用した LoRA 推論のみをサポートしているため、バックエンドは 'gpu'
に設定する必要があります。
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
コンバータは、ベースモデル用と LoRA モデル用の 2 つの TFLite FlatBuffer ファイルを出力します。
LoRA モデルの推論
ウェブ、Android、iOS の LLM 推論 API が更新され、LoRA モデル推論がサポートされるようになりました。
Android は、初期化時に静的 LoRA をサポートしています。LoRA モデルを読み込むには、LoRA モデルパスとベース LLM を指定します。// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath('<path to base model>')
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath('<path to LoRA model>')
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
LoRA で LLM 推論を実行するには、ベースモデルと同じ generateResponse()
メソッドまたは generateResponseAsync()
メソッドを使用します。