LiteRT-LM を使用して LLM を実行する

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_HOMEREADME.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_HOMEREADME.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_HOMEREADME.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_HOMEREADME.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