LLM 推論ガイド

LLM 推論 API を使用すると、大規模言語モデル(LLM)をデバイス上で完全に実行できます。この API を使用して、テキストの生成、自然言語形式での情報の取得、ドキュメントの要約など、さまざまなタスクを実行できます。このタスクは、複数のテキスト間大規模言語モデルを組み込みでサポートしているため、最新のオンデバイス生成 AI モデルをアプリやプロダクトに適用できます。

試してみる

このタスクは、さまざまな LLM の組み込みサポートを提供します。LiteRT Community ページでホストされているモデルは、MediaPipe に適した形式で提供されており、追加の変換やコンパイルの手順は必要ありません。

LiteRT Torch を使用すると、PyTorch モデルをマルチシグネチャ LiteRT(tflite)モデルにエクスポートできます。このモデルは、トークナイザー パラメータとバンドルされてタスク バンドルを作成します。LiteRT Torch で変換されたモデルは LLM Inference API と互換性があり、CPU バックエンドで実行できるため、Android アプリケーションや iOS アプリケーションに適しています。

使ってみる

このタスクの使用を開始するには、対象プラットフォームのいずれかの実装ガイドに沿って操作します。これらのプラットフォーム固有のガイドでは、このタスクの基本的な実装について説明します。使用可能なモデルと推奨される構成オプションを使用するコード例を示します。

タスクの詳細

このセクションでは、このタスクの機能、入力、出力、構成オプションについて説明します。

機能

LLM 推論 API には次の主な機能が含まれています。

  1. テキストからテキストへの生成 - 入力されたテキスト プロンプトに基づいてテキストを生成します。
  2. LLM の選択 - 複数のモデルを適用して、特定のユースケースに合わせてアプリをカスタマイズします。モデルを再トレーニングして、カスタマイズした重みを適用することもできます。
  3. LoRA のサポート - すべてのデータセットでトレーニングするか、オープンソース コミュニティから用意された事前構築済みの LoRA モデルを取得することで、LoRA モデルを使用して LLM の機能を拡張およびカスタマイズします(LiteRT Torch Generative API で変換されたモデルとは互換性がありません)。
タスク入力 タスク出力
LLM 推論 API は次の入力を受け付けます。
  • テキスト プロンプト(質問、メールの件名、要約するドキュメントなど)
LLM Inference API は次の結果を出力します。
  • 入力プロンプトに基づいて生成されたテキスト(質問への回答、メールの下書き、ドキュメントの要約など)

構成オプション

このタスクには、次の構成オプションがあります。

オプション名 説明 値の範囲 デフォルト値
modelPath プロジェクト ディレクトリ内のモデルが保存されているパス。 経路 なし
maxTokens モデルが処理するトークン(入力トークン + 出力トークン)の最大数。 整数 512
topK モデルが生成の各ステップで考慮するトークンの数。予測を最も確率の高い上位 k 個のトークンに制限します。 整数 40
temperature 生成時に導入されるランダム性の量。温度が高いほど、生成されるテキストの創造性が高くなります。温度が低いほど、予測可能な生成が行われます。 浮動小数点数 0.8
randomSeed テキスト生成中に使用されるランダム シード。 整数 0
loraPath デバイスのローカルにある LoRA モデルの絶対パス。注: これは GPU モデルとのみ互換性があります。 経路 なし
resultListener 結果を非同期で受け取るように結果リスナーを設定します。非同期生成メソッドを使用している場合にのみ適用されます。 なし なし
errorListener オプションのエラー リスナーを設定します。 なし なし

モデル

LLM 推論 API は、多くのテキスト間大規模言語モデルをサポートしています。これには、ブラウザやモバイル デバイスで実行するように最適化された複数のモデルの組み込みサポートが含まれます。これらの軽量モデルは、推論を完全にオンデバイスで実行するために使用できます。

LLM 推論 API を初期化する前に、モデルをダウンロードして、プロジェクト ディレクトリ内にファイルを保存します。LiteRT Community HuggingFace リポジトリから事前に変換されたモデルを使用するか、AI Edge Torch Generative Converter を使用してモデルを MediaPipe 互換形式に変換できます。

LLM Inference API で使用する LLM がまだない場合は、次のいずれかのモデルから始めます。

Gemma-3n

Gemma-3n E2B と E4B は、Gemini モデルの作成に使用されたものと同じ研究とテクノロジーに基づいて構築された、軽量で最先端のオープンモデルの Gemma ファミリーの最新モデルです。Gemma 3n モデルは、リソースの少ないデバイスで効率的に実行できるように設計されています。マルチモーダル入力に対応し、テキスト、画像、音声の入力を処理して、テキスト出力を生成します。

Gemma 3n モデルは、選択的パラメータ アクティベーション技術を使用して、リソース要件を削減します。この手法により、モデルは 2B パラメータと 4B パラメータの有効サイズで動作できます。これは、モデルに含まれるパラメータの総数よりも少ない値です。

Gemma-3n E2B をダウンロード

Gemma-3n E4B をダウンロード

HuggingFace の Gemma-3n E2B モデルと E4B モデルは .litertlm 形式で提供されており、Android とウェブ用の LLM 推論 API で使用できます。

Gemma-3 1B

Gemma-3 1B は、Gemini モデルの作成に使用されたものと同じ研究とテクノロジーに基づいて構築された、軽量で最先端のオープンモデルの Gemma ファミリーの中で最も軽量なモデルです。モデルには 10 億個のパラメータとオープン ウェイトが含まれています。

Gemma-3 1B をダウンロード

HuggingFace の Gemma-3 1B モデルは .task/.litertlm 形式で提供されており、Android およびウェブ アプリケーション用の LLM 推論 API で使用できます。

LLM Inference API で Gemma-3 1B を実行する場合は、次のオプションを適切に構成します。

  • preferredBackend: このオプションを使用して、CPU バックエンドと GPU バックエンドのどちらかを選択します。このオプションは Android でのみ使用できます。
  • supportedLoraRanks: LLM Inference API は、Gemma-3 1B モデルで Low-Rank Adaptation(LoRA)をサポートするように構成できません。supportedLoraRanks オプションまたは loraRanks オプションは使用しないでください。
  • maxTokens: maxTokens の値は、モデルに組み込まれたコンテキスト サイズと一致している必要があります。これは、Key-Value(KV)キャッシュまたはコンテキスト長とも呼ばれます。
  • numResponses: 常に 1 にする必要があります。このオプションはウェブでのみ使用できます。

ウェブ アプリケーションで Gemma-3 1B を実行すると、初期化によって現在のスレッドで長いブロックが発生する可能性があります。可能な場合は、常にワーカー スレッドからモデルを実行します。

Gemma-2 2B

Gemma-2 2B は Gemma-2 の 2B バリアントで、すべてのプラットフォームで動作します。

Gemma-2 2B をダウンロード

このモデルには 20 億個のパラメータとオープン ウェイトが含まれています。Gemma-2 2B は、同クラスのモデルの中で最先端の推論スキルを備えていることで知られています。

PyTorch モデルの変換

PyTorch 生成モデルは、LiteRT Torch 生成 API を使用して MediaPipe 互換形式に変換できます。この API を使用すると、PyTorch モデルをマルチシグネチャ LiteRT(TensorFlow Lite)モデルに変換できます。モデルのマッピングとエクスポートの詳細については、LiteRT Torch の GitHub ページをご覧ください。

LiteRT Torch Generative API を使用して PyTorch モデルを変換する手順は次のとおりです。

  1. PyTorch モデルのチェックポイントをダウンロードします。
  2. LiteRT Torch Generative API を使用して、モデルを MediaPipe 互換のファイル形式(.tflite)で作成、変換、量子化します。
  3. tflite ファイルとモデル トークナイザーからタスクバンドル(.task/.litertlm)を作成します。

Torch Generative コンバータは CPU 用にのみ変換し、64 GB 以上の RAM を搭載した Linux マシンが必要です。

タスクバンドルを作成するには、バンドル スクリプトを使用してタスクバンドルを作成します。バンドル プロセスでは、マッピングされたモデルに追加のメタデータ(エンドツーエンドの推論を実行するために必要なトークナイザー パラメータ)。

モデル バンドル プロセスには 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 2BGemma 2BPhi-2 モデルは、HuggingFace で safetensors 形式で利用できます。LLM 推論 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 フラットバッファ ファイルを出力します。

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() メソッドを使用します。