LiteRT-LM は、スマートフォンから組み込みシステムまで、幅広いデバイスで言語モデル パイプラインを効率的に実行するように設計されたクロス プラットフォーム ライブラリです。デベロッパーは、高度な言語モデル ワークフローを作成してデプロイするためのツールを利用できます。NPU とのシームレスな統合も実現しました。
CPU と GPU で LLM を実行する
クロス プラットフォーム開発と CPU/GPU ハードウェア アクセラレーションの詳細な手順については、LiteRT-LM GitHub リポジトリをご覧ください。
NPU で LLM を実行する
Neural Processing Unit(NPU)は、ディープ ラーニング ワークロード用に最適化された専用のハードウェア ブロックを提供します。これらは、特にモバイル デバイスで、最新のシステム オン チップ(SoC)で利用できるようになっています。高性能であるため、LLM 推論の実行に適しています。
NPU ベンダー
LiteRT-LM は、次のベンダーの NPU アクセラレーションを使用して LLM を実行することをサポートしています。試すベンダーに応じて、次の手順を選択します。
クイック スタート
まず、前提条件の手順に沿って環境とリポジトリを設定します。
また、Android デバイスを操作できるようにするには、Android Debug Bridge が正しくインストールされており、adb を使用してアクセスできる接続済みデバイスがあることを確認してください。
詳細な手順については、LiteRT-LM リポジトリのクイック スタート セクションを確認し、litert_lm_main
コマンドライン デモの詳細をご覧ください。
Qualcomm AI Engine Direct
Qualcomm NPU で LLM を実行する手順は次のとおりです。
ステップ 1: .litertlm モデルをダウンロードする
LiteRT-LM ランタイムは、.litertlm 形式のモデルで動作するように設計されています。互換性のあるモデルは、次の表で確認してダウンロードできます。
| モデル | SoC | 量子化 | コンテキストのサイズ | モデルサイズ(Mb) | ダウンロード リンク |
|---|---|---|---|---|---|
| Gemma3-1B | SM8750 | 4 ビット / チャンネル | 1280 | 658 | ダウンロード |
| Gemma3-1B | SM8650 | 4 ビット / チャンネル | 1280 | 658 | ダウンロード |
| Gemma3-1B | SM8550 | 4 ビット / チャンネル | 1280 | 657 | ダウンロード |
SoC に対応するモデルをダウンロードする必要があります。以下は、スマートフォンの SoC に対応する正しいモデルをダウンロードできる Hugging Face リンクを取得するのに役立つコマンドの例です(ファイルをダウンロードする権限を得るには、ログインしてフォームに同意する必要があります)。adb を使用してアクセスできる接続済みデバイスがあることを確認してください。
SOC_MODEL=$(adb shell getprop ro.soc.model | tr '[:upper:]' '[:lower:]')
echo "https://huggingface.co/litert-community/Gemma3-1B-IT/blob/main/Gemma3-1B-IT_q4_ekv1280_${SOC_MODEL}.litertlm"
$SOC_MODEL がサポート テーブルに記載されていることを確認します。生成されたリンクは、サポートされていないモデルでは機能しません。NPU のサポートは定期的に追加されるため、後日、お使いのデバイスがサポートされているかどうかをご確認ください。
ステップ 2: QAIRT ライブラリをダウンロードして抽出する
Qualcomm NPU を使用してモデルを実行するには、デバイスに関連するランタイム ライブラリが必要です。QAIRT SDK はこちらのリンクからダウンロードして、ファイルを抽出できます。バージョン番号を含む解凍されたフォルダを指すように変数QAIRT_ROOT(後のステップで使用します)を設定します。例:
unzip <your_file.zip> -d ~/
QAIRT_ROOT=~/qairt/2.42.0.251225
ステップ 3: LiteRT-LM ランタイム / ライブラリをビルドする
Linux で開発する
Android 用のバイナリをビルドするには、https://developer.android.com/ndk/downloads#stable-downloads から NDK r28b 以降をインストールする必要があります。具体的な手順は次のとおりです。
- https://developer.android.com/ndk/downloads#stable-downloads から
zipファイルをダウンロードします。 zipファイルを任意の場所(/path/to/AndroidNDK/など)に抽出します。- NDK ディレクトリを参照するように
ANDROID_NDK_HOMEを設定します。次のような形式になります。
export ANDROID_NDK_HOME=/path/to/AndroidNDK/
ヒント: ANDROID_NDK_HOME が README.md を含むディレクトリを指していることを確認してください。
セットアップが完了したら、litert_lm_main バイナリをビルドしてみます。
bazel build --config=android_arm64 //runtime/engine:litert_lm_main
また、LiteRT-LM ランタイムが NPU とやり取りできるように、ディスパッチ API ライブラリをビルドする必要があります。
bazel build --config=android_arm64 \
@litert//litert/vendors/qualcomm/dispatch:dispatch_api_so
macOS で開発する
Xcode コマンドライン ツールには clang が含まれています。以前にインストールしていない場合は、xcode-select --install を実行します。
Android 用のバイナリをビルドするには、https://developer.android.com/ndk/downloads#stable-downloads から NDK r28b 以降をインストールする必要があります。具体的な手順は次のとおりです。
- https://developer.android.com/ndk/downloads#stable-downloads から
.dmgファイルをダウンロードします。 .dmgファイルを開き、AndroidNDK*ファイルを任意の場所(/path/to/AndroidNDK/など)に移動します。- NDK ディレクトリを参照するように
ANDROID_NDK_HOMEを設定します。次のような形式になります。
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/
ヒント: ANDROID_NDK_HOME が README.md を含むディレクトリを指していることを確認してください。
セットアップが完了したら、litert_lm_main バイナリをビルドしてみます。
bazel build --config=android_arm64 //runtime/engine:litert_lm_main
また、LiteRT-LM ランタイムが NPU とやり取りできるように、ディスパッチ API ライブラリをビルドする必要があります。
bazel build --config=android_arm64 \
@litert//litert/vendors/qualcomm/dispatch:dispatch_api_so
ステップ 4: デバイスでモデルを実行する
バイナリが正常にビルドされたら、デバイスでモデルを実行してみましょう。DEVICE_FOLDER への書き込みアクセス権があることを確認します。
Android デバイスでバイナリを実行するには、いくつかのアセット / バイナリをプッシュする必要があります。まず DEVICE_FOLDER を設定し、書き込みアクセス権があることを確認します(通常は /data/local/tmp/ の下に配置できます)。
export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER
export MODEL_PATH=<path to your downloaded .litertlm >
.litertlm ファイルを push します。ヒント: アセットをプッシュする必要があるのは 1 回だけです。
adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm
QAIRT ライブラリをプッシュします。これらは、ステップ 2 $QAIRT_ROOT/lib/aarch64-android/ の解凍されたフォルダにあります。QAIRT_ROOT にはバージョン番号(2.42.0.251225 など)を含める必要があります。
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtp*Stub.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtp.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnSystem.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtpPrepare.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/hexagon-*/unsigned/libQnnHtp*Skel.so $DEVICE_FOLDER
ステップ 3 でコンパイルしたディスパッチ API とメイン バイナリをプッシュします。
adb push bazel-bin/external/litert/litert/vendors/qualcomm/*/*.so \
$DEVICE_FOLDER
adb push prebuilt/android_arm64/*.so $DEVICE_FOLDER
adb push bazel-bin/runtime/engine/litert_lm_main $DEVICE_FOLDER
これで、バイナリを実行できます。
adb shell LD_LIBRARY_PATH=$DEVICE_FOLDER ADSP_LIBRARY_PATH=$DEVICE_FOLDER \
$DEVICE_FOLDER/litert_lm_main \
--backend=npu \
--model_path=$DEVICE_FOLDER/model.litertlm
MediaTek NeuroPilot
MediaTek NPU で LLM を実行する手順は次のとおりです。
ステップ 1: .litertlm モデルをダウンロードする
LiteRT-LM ランタイムは、.litertlm 形式のモデルで動作するように設計されています。互換性のあるモデルは、次の表で確認してダウンロードできます。
| モデル | SoC | 量子化 | コンテキストのサイズ | モデルサイズ(Mb) | ダウンロード リンク |
|---|---|---|---|---|---|
| Gemma3-1B | MT6989 | 4 ビット / チャンネル | 1280 | 985 | ダウンロード |
| Gemma3-1B | MT6991 | 4 ビット / チャンネル | 1280 | 986 | ダウンロード |
SoC に対応するモデルをダウンロードする必要があります。以下は、スマートフォンの SoC に対応する正しいモデルをダウンロードできる Hugging Face リンクを取得するのに役立つコマンドの例です(ファイルをダウンロードする権限を得るには、ログインしてフォームに同意する必要があります)。adb を使用してアクセスできる接続済みデバイスがあることを確認してください。
SOC_MODEL=$(adb shell getprop ro.soc.model | tr '[:upper:]' '[:lower:]')
echo "https://huggingface.co/litert-community/Gemma3-1B-IT/blob/main/Gemma3-1B-IT_q4_ekv1280_${SOC_MODEL}.litertlm"
$SOC_MODEL がサポート テーブルに記載されていることを確認します。生成されたリンクは、サポートされていないモデルでは機能しません。NPU のサポートは定期的に追加されるため、後日、お使いのデバイスがサポートされているかどうかをご確認ください。
ステップ 2: LiteRT-LM ランタイム / ライブラリをビルドする
Linux で開発する
Android 用のバイナリをビルドするには、https://developer.android.com/ndk/downloads#stable-downloads から NDK r28b 以降をインストールする必要があります。具体的な手順は次のとおりです。
- https://developer.android.com/ndk/downloads#stable-downloads から
zipファイルをダウンロードします。 zipファイルを任意の場所(/path/to/AndroidNDK/など)に抽出します。- NDK ディレクトリを参照するように
ANDROID_NDK_HOMEを設定します。次のような形式になります。
export ANDROID_NDK_HOME=/path/to/AndroidNDK/
ヒント: ANDROID_NDK_HOME が README.md を含むディレクトリを指していることを確認してください。
セットアップが完了したら、litert_lm_main バイナリをビルドしてみます。
bazel build --config=android_arm64 //runtime/engine:litert_lm_main
また、LiteRT-LM ランタイムが NPU とやり取りできるように、ディスパッチ API ライブラリをビルドする必要があります。
bazel build --config=android_arm64 \
@litert//litert/vendors/mediatek/dispatch:dispatch_api_so
macOS で開発する
Xcode コマンドライン ツールには clang が含まれています。以前にインストールしていない場合は、xcode-select --install を実行します。
Android 用のバイナリをビルドするには、https://developer.android.com/ndk/downloads#stable-downloads から NDK r28b 以降をインストールする必要があります。具体的な手順は次のとおりです。
- https://developer.android.com/ndk/downloads#stable-downloads から
.dmgファイルをダウンロードします。 .dmgファイルを開き、AndroidNDK*ファイルを任意の場所(/path/to/AndroidNDK/など)に移動します。- NDK ディレクトリを参照するように
ANDROID_NDK_HOMEを設定します。次のような形式になります。
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/
ヒント: ANDROID_NDK_HOME が README.md を含むディレクトリを指していることを確認してください。
セットアップが完了したら、litert_lm_main バイナリをビルドしてみます。
bazel build --config=android_arm64 //runtime/engine:litert_lm_main
また、LiteRT-LM ランタイムが NPU とやり取りできるように、ディスパッチ API ライブラリをビルドする必要があります。
bazel build --config=android_arm64 \
@litert//litert/vendors/mediatek/dispatch:dispatch_api_so
ステップ 3: デバイスでモデルを実行する
バイナリが正常にビルドされたら、デバイスでモデルを実行してみましょう。DEVICE_FOLDER への書き込みアクセス権があることを確認します。
Android デバイスでバイナリを実行するには、いくつかのアセット / バイナリをプッシュする必要があります。まず DEVICE_FOLDER を設定し、書き込みアクセス権があることを確認します(通常は /data/local/tmp/ の下に配置できます)。
export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER
export MODEL_PATH=<path to your downloaded .litertlm >
.litertlm ファイルを push します。ヒント: アセットをプッシュする必要があるのは 1 回だけです。
adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm
ステップ 2 でコンパイルしたディスパッチ API とメイン バイナリをプッシュします。
adb push bazel-bin/external/litert/litert/vendors/mediatek/*/*.so \
$DEVICE_FOLDER
adb push prebuilt/android_arm64/*.so $DEVICE_FOLDER
adb push bazel-bin/runtime/engine/litert_lm_main $DEVICE_FOLDER
これで、バイナリを実行できます。
adb shell LD_LIBRARY_PATH=$DEVICE_FOLDER \
$DEVICE_FOLDER/litert_lm_main \
--backend=npu \
--model_path=$DEVICE_FOLDER/model.litertlm