LLM Inference API を使用すると、大規模言語モデル(LLM)を完全にデバイス上で実行でき、テキストの生成、自然言語形式での情報の取得、ドキュメントの要約など、さまざまなタスクを実行できます。このタスクは、複数のテキストからテキストの大規模言語モデルの組み込みサポートを提供するため、最新のオンデバイス生成 AI モデルをアプリとプロダクトに適用できます。
このタスクは Gemma 2B と 7B をサポートしています。Gemma 2B と 7B は、Gemini モデルの作成に使用されたのと同じ研究とテクノロジーから構築された、軽量で最先端のオープンモデル ファミリーの一部です。また、Phi-2、Falcon-RW-1B、StableLM-3B の外部モデルもサポートしています。
ネイティブでサポートされているモデルに加えて、ユーザーは Google の AI Edge サービスを使用して他のモデルをマッピングできます(PyTorch モデルのマッピングなど)。これにより、マッピングされたモデルをマルチシグネチャ TensorFlow Lite モデルにエクスポートできます。これらのモデルは、タスクバンドルを作成するためのトークナイザ パラメータにバンドルされています。
使ってみる
このタスクの使用を開始するには、ターゲット プラットフォームの実装ガイドのいずれかに沿って操作します。以下のプラットフォーム固有のガイドでは、このタスクの基本的な実装について、利用可能なモデルを使用するコード例と推奨される構成オプションとともに説明します。
タスクの詳細
このセクションでは、このタスクの機能、入力、出力、構成オプションについて説明します。
機能
LLM Inference API の主な機能は次のとおりです。
- テキストからテキストの生成 - 入力テキスト プロンプトに基づいてテキストを生成します。
- LLM の選択 - 複数のモデルを適用して、特定のユースケースに合わせてアプリを調整します。カスタマイズした重みを再トレーニングしてモデルに適用することもできます。
- LoRA のサポート - すべてのデータセットでトレーニングするか、オープンソース コミュニティ(ネイティブ モデルのみ)から事前構築済みの LoRA モデルを取得して、LoRA モデルで LLM 機能を拡張してカスタマイズします。
タスクの入力 | タスクの出力 |
---|---|
LLM Inference API は、次の入力を受け入れます。
|
LLM Inference API は次の結果を出力します。
|
構成オプション
このタスクには、次の構成オプションがあります。
オプション名 | 説明 | 値の範囲 | デフォルト値 |
---|---|---|---|
modelPath |
プロジェクト ディレクトリ内でモデルが保存されているパス。 | PATH | なし |
maxTokens |
モデルが処理するトークン(入力トークン + 出力トークン)の最大数。 | Integer | 512 |
topK |
生成の各ステップでモデルが考慮するトークンの数。予測を最も確率が高い上位 k 個のトークンに制限します。topK を設定する場合は、randomSeed の値も設定する必要があります。 |
Integer | 40 |
temperature |
生成時に導入されたランダム性の量。温度が高いほど、生成されるテキストの創造性が高まり、温度が低いほど、生成を予測しやすくなります。temperature を設定する場合は、randomSeed の値も設定する必要があります。 |
浮動小数点数 | 0.8 |
randomSeed |
テキスト生成時に使用されるランダムシード。 | Integer | 0 |
loraPath |
デバイス上のローカルの LoRA モデルの絶対パス。注: これは GPU モデルにのみ互換性があります。 | PATH | なし |
resultListener |
結果を非同期で受け取るように結果リスナーを設定します。非同期生成方法を使用する場合にのみ適用されます。 | なし | なし |
errorListener |
オプションのエラーリスナーを設定します。 | なし | なし |
モデル
LLM Inference API には、ブラウザとモバイル デバイスで実行するように最適化された、テキストからテキストの大規模言語モデルの組み込みサポートが含まれています。これらの軽量モデルをダウンロードして、デバイス上で推論を完全に実行できます。
LLM Inference API を初期化する前に、サポートされているモデルのいずれかをダウンロードして、そのファイルをプロジェクト ディレクトリに保存します。
Gemma 2B
Gemma 2B は、Gemini モデルの作成に使用されたのと同じ研究とテクノロジーから構築された、軽量で最先端のオープンモデル ファミリーの一部です。このモデルには、20 億個のパラメータとオープンな重みが含まれています。このモデルは、質問応答、要約、推論など、さまざまなテキスト生成タスクに適しています。
Gemma 2B モデルには次の 4 つのバリエーションがあります。
- 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 をダウンロードすると、モデルはすでに MediaPipe で使用するのに適した形式になっています。
Gemma 2B from Hugging Face をダウンロードする場合は、MediaPipe 対応の形式にモデルを変換する必要があります。LLM Inference API では、次のファイルをダウンロードして変換する必要があります。
model-00001-of-00002.safetensors
model-00002-of-00002.safetensors
tokenizer.json
tokenizer_config.json
Gemma 7B
Gemma 7B は、7B のパラメータとオープンな重みを持つ大規模な Gemma モデルです。このモデルは、質問応答、要約、推論など、さまざまなテキスト生成タスクでより強力です。Gemma 7B はウェブでのみサポートされています。
Gemma 7B モデルには 1 つのバリエーションがあります。
- gemma-1.1-7b-it-gpu-int8: GPU 互換の Gemma 7B 8 ビットモデル。
Gemma 7B from Hugging Face をダウンロードする場合は、MediaPipe 対応の形式にモデルを変換する必要があります。LLM Inference API では、次のファイルをダウンロードして変換する必要があります。
model-00001-of-00004.safetensors
model-00002-of-00004.safetensors
model-00003-of-00004.safetensors
model-00004-of-00004.safetensors
tokenizer.json
tokenizer_config.json
Falcon 1B
Falcon-1B は、RefinedWeb の 3,500 億トークンでトレーニングされた 10 億パラメータの因果デコーダのみのモデルです。
LLM Inference API では、次のファイルをダウンロードしてローカルに保存する必要があります。
tokenizer.json
tokenizer_config.json
pytorch_model.bin
Falcon モデルファイルをダウンロードすると、モデルを MediaPipe 形式に変換できるようになります。モデルを MediaPipe 形式に変換するの手順に沿って操作します。
StableLM 3B
StableLM-3B は、30 億のパラメータ デコーダのみの言語モデルで、4 エポックの 1 兆個の多様な英語のデータセットとコード データセットで事前トレーニングされています。
LLM Inference API では、次のファイルをダウンロードしてローカルに保存する必要があります。
tokenizer.json
tokenizer_config.json
model.safetensors
StableLM モデルファイルをダウンロードしたら、モデルを MediaPipe 形式に変換できます。モデルを MediaPipe 形式に変換するの手順に沿って操作します。
Phi-2
Phi-2 は 27 億パラメータの Transformer モデルです。さまざまな NLP 合成テキストとフィルタリングされた ウェブサイトを使用してトレーニングしましたこのモデルは、質問応答、チャット、コード形式を使用するプロンプトに最適です。
LLM Inference API では、次のファイルをダウンロードしてローカルに保存する必要があります。
tokenizer.json
tokenizer_config.json
model-00001-of-00002.safetensors
model-00002-of-00002.safetensors
Phi-2 モデルファイルをダウンロードしたら、モデルを MediaPipe 形式に変換できます。モデルを MediaPipe 形式に変換するの手順に沿って操作します。
AI Edge のエクスポート済みモデル
AI Edge は、ユーザーマッピング モデルをマルチシグネチャ TensorFlow Lite モデルに変換できる Google サービスです。モデルのマッピングとエクスポートの詳細については、AI Edge Torch の GitHub ページをご覧ください。
モデルを TFLite 形式にエクスポートすると、モデルを MediaPipe 形式に変換できます。詳しくは、モデルを MediaPipe 形式に変換するをご覧ください。
モデルを MediaPipe 形式に変換する
ネイティブ モデル変換
外部 LLM(Phi-2、Falcon、StableLM)または Kaggle 以外の Gemma バージョンを使用している場合は、Google の変換スクリプトを使用して、MediaPipe との互換性を持つようにモデルをフォーマットします。
モデル変換プロセスには、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)
コンバータは 2 つの TFLite フラットバッファ ファイルを出力します。1 つはベースモデル用、もう 1 つは LoRA モデル用です。
パラメータ | 説明 | 許容値 |
---|---|---|
input_ckpt |
model.safetensors または pytorch.bin ファイルのパス。モデルの SafeTensors の形式が複数のファイルにシャーディングされる場合があるので注意してください(例: model-00001-of-00003.safetensors 、model-00001-of-00003.safetensors )。ファイル パターン(model*.safetensors など)を指定できます。 |
PATH |
ckpt_format |
モデルファイル形式。 | {"safetensors", "pytorch"} |
model_type |
変換される LLM。 | {"PHI_2"、"FALCON_RW_1B"、"STABLELM_4E1T_3B"、"GEMMA_2B"} |
backend |
モデルの実行に使用されるプロセッサ(デリゲート)。 | {"cpu", "gpu"} |
output_dir |
レイヤごとのウェイト ファイルをホストする出力ディレクトリのパス。 | PATH |
output_tflite_file |
出力ファイルのパス。(「model_cpu.bin」、「model_gpu.bin」など)。このファイルは LLM Inference API にのみ対応しており、一般的な「tflite」ファイルとして使用することはできません。 | PATH |
vocab_model_file |
tokenizer.json ファイルと tokenizer_config.json ファイルを格納するディレクトリのパス。Gemma の場合は、単一の tokenizer.model ファイルにカーソルを合わせます。 |
PATH |
lora_ckpt |
LoRA アダプタの重みを格納する SafeTensorBoard の LoRA ckpt ファイルのパス。 | PATH |
lora_rank |
LoRA ckpt のランクを表す整数。lora の重みを変換するために必要です。指定されていない場合、コンバータは LoRA の重みがないと見なします。注: LoRA をサポートしているのは GPU バックエンドのみです。 | Integer |
lora_output_tflite_file |
LoRA 重みの出力 tflite ファイル名。 | PATH |
AI Edge モデル変換
AI Edge を介して TFLite モデルにマッピングされた LLM を使用している場合は、バンドル スクリプトを使用してタスクバンドルを作成します。バンドルプロセスでは マッピングされた モデルに追加のメタデータ(トークナイザパラメータなど)が 含まれていました
モデルのバンドル プロセスには、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 モデルのパス。 | PATH |
tokenizer_model |
SentencePiece トークナイザ モデルへのパス。 | PATH |
start_token |
モデル固有の開始トークン。開始トークンは、指定されたトークナイザ モデルに存在する必要があります。 | STRING |
stop_tokens |
モデル固有のストップ トークン。提供されたトークナイザ モデルにストップ トークンが存在する必要があります。 | リスト [文字列] |
output_filename |
出力タスク バンドル ファイルの名前。 | PATH |
LoRA のカスタマイズ
Mediapipe LLM 推論 API は、大規模言語モデルの低ランク適応(LoRA)をサポートするように構成できます。ファインチューニングされた LoRA モデルを利用することで、デベロッパーは費用対効果に優れたトレーニング プロセスを通じて LLM の動作をカスタマイズできます。LLM Inference API の LoRA サポートは、GPU バックエンドの Gemma-2B モデルと Phi-2 モデルで機能します。LoRA の重みはアテンション レイヤにのみ適用されます。この初期実装は将来の開発のための試験運用版 API として機能し、今後のアップデートでより多くのモデルとさまざまな種類のレイヤをサポートする予定です。
LoRA モデルを準備する
HuggingFace の手順に沿って、サポートされているモデルタイプ(Gemma-2B または Phi-2)を使用して、独自のデータセットでファインチューニングされた LoRA モデルをトレーニングします。Gemma-2B モデルと Phi-2 モデルは、どちらも HuggingFace で Safetensors 形式で入手できます。LLM 推論 API はアテンション レイヤでのみ LoRA をサポートするため、次のように LoraConfig
を作成する際にアテンション レイヤのみを指定します。
# For Gemma-2B
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"],
)
テスト用に、LLM Inference API に適合するファインチューニングされた LoRA モデルが一般公開され、HuggingFace から入手できます。たとえば、Gemma-2B の場合は monsterapi/gemma-2b-lora-maths-orca-200k、Phi-2 の場合は lole25/phi-2-sft-ultrachat-lora になります。
準備したデータセットでトレーニングしてモデルを保存すると、ファインチューニングされた LoRA モデルの重みを含む adapter_model.safetensors
ファイルが得られます。セーフテンソル ファイルは、モデル変換で使用される LoRA チェックポイントです。
次のステップでは、MediaPipe Python パッケージを使用して、モデルの重みを TensorFlow Lite フラットバッファに変換する必要があります。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)
コンバータは 2 つの TFLite フラットバッファ ファイルを出力します。1 つはベースモデル用、もう 1 つは LoRA モデル用です。
LoRA モデルの推論
ウェブ、Android、iOS の LLM Inference API が更新され、LoRA モデル推論がサポートされるようになりました。ウェブは動的 LoRA をサポートしており、実行時にさまざまな LoRA モデルを切り替えることができます。Android と iOS は静的 LoRA をサポートしています。これは、タスクの存続期間中に同じ 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()
メソッドを使用します。