📱iOS または Android 携帯で LLM を実行・デプロイする方法

独自の LLM をファインチューニングして ExecuTorch を使って Android や iPhone にデプロイするチュートリアル。

トレーニングした大規模言語モデル(LLM)をその後どのように ローカルにデプロイできるかをお見せします から Android電話 および iPhone。我々は協力しました: ExecuTorcharrow-up-right (PyTorch & Meta と連携)で、量子化を意識したトレーニング(QAT)を用いた効率的なワークフローを作成し、その後エッジデバイスに直接デプロイします。使用するのは Unslotharrow-up-right、TorchAO、ExecuTorch で、以下を示します:

  • Meta が Instagram や WhatsApp で数十億人に提供しているのと同じ技術(ExecuTorch)を使用する

  • Qwen3-0.6B をローカルにデプロイする Pixel 8 および iPhone 15 Pro で約 40 トークン/秒

  • TorchAO を介した QAT を適用して精度の70%を回復する

  • プライバシー重視、即時応答、オフライン機能を得る

  • 当社の 無料のColabノートブックarrow-up-right Qwen3 0.6B をファインチューニングしてフォン向けにエクスポートする

appleiOSチュートリアルandroidAndroidチュートリアル

Qwen3-4B を iPhone 15 Pro にデプロイしました

Qwen3-0.6B は約 40 トークン/秒で動作しています

🦥 モデルのトレーニング

我々は Qwen3、Gemma3、Llama3、Qwen2.5、Phi4 など多くのモデルのフォンデプロイをサポートしています!以下の手順に従ってください: 無料のColabノートブックarrow-up-right Qwen3-0.6B のデプロイ用:

まず Unsloth を更新し、TorchAO と Executorch をインストールします。

その後単に以下を使います qat_scheme = "phone-deployment" これは電話にデプロイしたいことを示します。完全ファインチューニングのために以下も設定している点に注意してください: full_finetuning = True 完全ファインチューニングのために設定しています!

我々は使用しています qat_scheme = "phone-deployment" 実際には次を使用します qat_scheme = "int8-int4" 内部的に Unsloth/TorchAO の QAT を有効にするために使用し、 をシミュレートします 線形層に対してトレーニング中に(偽量子化操作を介して)INT8 の動的アクティベーション量子化と INT4 の重み量子化をシミュレートしつつ、計算は 16 ビットで行います。トレーニング後にモデルは実際の量子化バージョンに変換されるため、オンデバイスのモデルは小さくなり通常は 単純な PTQ よりも精度を保ちます.

前述のファインチューニングの後、 Colab ノートブックarrow-up-rightその後我々はそれを .pte ファイルとして Executorch 経由で保存します:

🏁 トレーニング後のデプロイ

そして今、あなたの qwen3_0.6B_model.pte ファイル(サイズは約 472MB)を使ってデプロイできます!デバイスを選んですぐに始めましょう:

apple iOS デプロイ

iOS 上でモデルを動かすためのチュートリアル(iPhone 16 Pro でテスト済みですが他の iPhone でも動作します)。Xcode 15 を実行できる物理的な macOS デバイスが必要です。

macOS 開発環境のセットアップ

Xcode とコマンドラインツールをインストール

  1. Mac App Store から Xcode をインストール(バージョン 15 以降が必要)

  2. ターミナルを開いてインストールを確認: xcode-select -p

  3. コマンドラインツールをインストールしてライセンスに同意:

    1. xcode-select --install

    2. sudo xcodebuild -license accept

  4. Xcode を初めて起動して、求められたら追加コンポーネントをインストールしてください

  5. プラットフォーム選択を求められたら、iOS 18 を選んでシミュレータ用にダウンロードしてください

circle-exclamation

すべてが動作するか確認: xcode-select -p

パスが表示されるはずです。表示されない場合はステップ 3 を繰り返してください。

Apple デベロッパーアカウントの設定

物理デバイス用のみ!

circle-info

iOS シミュレータのみを使用する場合はこのセクション全体をスキップしてください。物理的な iPhone にデプロイするには有料のデベロッパーアカウントが必要です。

Apple ID を作成する

Apple ID を持っていませんか? ここでサインアップarrow-up-right.

アカウントを Xcode に追加する

  1. Xcode を開く

  2. Xcode → Settings → Accounts に移動

  3. + ボタンをクリックして Apple ID を選択

  4. 通常の Apple ID でサインイン

Apple Developer Program に登録する

ExecuTorch は increased-memory-limit 機能を必要とし、これは有料デベロッパーアカウントが必要です:

  1. へアクセスしてください: developer.apple.comarrow-up-right

  2. Apple ID でサインイン

  3. Apple Developer Program に登録する

ExecuTorch デモアプリのセットアップ

サンプルコードを取得:

Xcode で開く

  1. を開く apple/etLLM.xcodeproj を Xcode で

  2. 上部ツールバーでターゲットデバイスとして iPhone 16 Pro シミュレータを選択

  3. 再生(▶️)を押してビルドと実行

🎉 成功!アプリがシミュレータで起動するはずです。まだ動作しません—モデルを追加する必要があります。

シミュレータへのデプロイ

デベロッパーアカウントは不要です。

モデルファイルを準備する

  1. Xcode のシミュレータを停止(停止ボタンを押す)

  2. HuggingFace Hub のリポジトリに移動(ローカルに保存していない場合)

  3. 次の 2 つのファイルをダウンロード:

    1. qwen3_0.6B_model.pte (エクスポートしたモデル)

    2. tokenizer.json(トークナイザ)

シミュレータ上に共有フォルダを作成する

  1. シミュレータの仮想ホームボタンをクリック

  2. Files アプリ → Browse → On My iPhone を開く

  3. 省略記号(•••)ボタンをタップして新しいフォルダを作成し、名前を Qwen3test

ターミナルを使ってファイルを転送する

フォルダが見つかったら次を実行:

ロードしてチャット開始

  1. シミュレータ上で etLLM アプリに戻り、起動するためにタップします。

  1. Qwen3test フォルダからモデルとトークナイザをロード

  1. ファインチューニング済みモデルでチャットを開始! 🎉

物理 iPhone へのデプロイ

初期デバイスセットアップ

  1. iPhone を USB 経由で Mac に接続

  2. iPhone のロックを解除して「このデバイスを信頼」をタップ

  3. Xcode で Window → Devices and Simulators に移動

  4. デバイスが左側に表示されるまで待つ(しばらく「Preparing」と表示されることがあります)

Xcode の署名設定を構成

  1. Apple アカウントを追加:Xcode → Settings → Accounts → +

  2. プロジェクトナビゲータで etLLM プロジェクト(青いアイコン)をクリック

  3. TARGETS の下で etLLM を選択

  4. Signing & Capabilities タブに移動

  5. 「Automatically manage signing」をチェック

  6. ドロップダウンから Team を選択

circle-exclamation

必要な機能を追加

  1. Signing & Capabilities のまま、+ Capability をクリック

  2. 「Increased Memory Limit」を検索して追加

ビルドと実行

  1. 上部ツールバーでデバイスセレクタから物理 iPhone を選択

  2. 再生(▶️)を押すか Cmd + R を押す

デベロッパー証明書を信頼する

最初のビルドは失敗します—これは正常です!

  1. iPhone で Settings → Privacy & Security → Developer Mode に進む

  2. オンに切り替える

  3. 警告に同意して承諾する

  4. デバイスを再起動し、Xcode に戻って再度再生を押す

circle-exclamation

モデルファイルを iPhone に転送

  1. アプリが実行されたら、Mac で Finder を開く

  2. サイドバーであなたの iPhone を選択

  3. Files タブをクリック

  4. etLLM を展開

  5. .pte と tokenizer.json ファイルをこのフォルダに直接ドラッグ&ドロップ

  6. 注意してください!これらのファイルは大きく数分かかる場合があります

ロードしてチャット開始

  1. iPhone で etLLM アプリに切り替える

  1. アプリ インターフェースからモデルとトークナイザをロード

  1. あなたのファインチューニング済み Qwen3 が今、iPhone 上でネイティブに動作しています!

android Android デプロイ

このガイドは、Linux/Mac のコマンドライン環境を使用して ExecuTorch Llama デモアプリを Android デバイスにビルド・インストールする方法を説明します(Pixel 8 でテスト済みだが他の Android でも動作します)。この方法は依存関係を最小化し(Android Studio 不要)、重いビルド作業を PC に任せます。

必要条件

開発マシンに次がインストールされていることを確認してください:

  • Java 17(Java 21 がデフォルトの場合があるがビルド問題を引き起こすことがある)

  • Git

  • Wget / Curl

  • Android コマンドラインツール

  • のインストールガイドarrow-up-right とセットアップ adb をあなたの Android とコンピュータに導入する

確認

Java バージョンが 17.x と一致するか確認:

一致しない場合は Ubuntu/Debian 経由でインストール:

その後デフォルトに設定するか、以下をエクスポート JAVA_HOME:

別の OS やディストリビューションを使用している場合は、 このガイドarrow-up-right に従うか、お気に入りの LLM にガイドを依頼してください。

ステップ 1: Android SDK と NDK のインストール

フルの Android Studio を使わずに最小限の Android SDK 環境を設定します。

1. SDK ディレクトリを作成:

  1. Android コマンドラインツールをインストール

ステップ 2: 環境変数を設定

次をあなたの ~/.bashrc または ~/.zshrc:

export PATH=$ANDROID_HOME/platform-tools:$PATH

source ~/.zshrc # またはシェルに応じて ~/.bashrc

ステップ 3: SDK コンポーネントをインストール

sdkmanager "platforms;android-34" "platform-tools" "build-tools;34.0.0" "ndk;25.0.8775105"

export ANDROID_NDK=$ANDROID_HOME/ndk/25.0.8775105

ステップ 4: コードを取得 我々は executorch-examples

cd executorch-examples

ステップ 5: 一般的なコンパイル問題を修正

現在のコードにこれらの問題はないことが多いですが、過去に遭遇した問題で役立つ場合があります:

"SDK Location not found" を修正: local.properties ファイルを作成して Gradle に SDK の場所を明示的に伝える:

次を修正: cannot find symbol エラー:

現在のコードは非推奨メソッド getDetailedError()を使用しています。

sed -i 's/e.getDetailedError()/e.getMessage()/g' llm/android/LlamaDemo/app/src/main/java/com/example/executorchllamademo/MainActivity.java

ステップ 6: APK をビルド

  1. このステップではアプリとネイティブライブラリをコンパイルします。

  2. cd llm/android/LlamaDemo JAVA_HOME Gradle でビルド(ツールチェーンエラーを避けるために明示的に

    を 17 に設定):

  3. ./gradlew :app:assembleDebug

app/build/outputs/apk/debug/app-debug.apk

ステップ 7: Android デバイスにインストール

アプリをインストールする方法は 2 つあります。

オプション A: ADB(有線/無線)を使用 adb 電話に

adb install -r app/build/outputs/apk/debug/app-debug.apk

オプション B: 直接ファイル転送

  1. リモート VM 上にいる、またはケーブルがない場合:

  2. app-debug.apk を電話でダウンロード可能な場所にアップロード

  3. 電話でダウンロード

タップしてインストール(促されたら「提供元不明のアプリのインストールを許可」を有効に)

ステップ 8: モデルファイルを転送

  1. アプリは .pte モデルとトークナイザファイルを必要とします。

  2. ファイルを転送:model.pte と tokenizer.bin(または tokenizer.model)を電話のストレージ(例:Downloads)に移動します。

  3. LlamaDemo アプリを開く:電話でアプリを起動

  4. モデルを選択

  5. 設定(歯車アイコン)またはファイルピッカーをタップ

  6. Download フォルダに移動

  7. .pte ファイルを選択

トークナイザファイルを選択

トラブルシューティング

  • 完了!これでデバイス上で直接 LLM とチャットできます。

  • ビルドが失敗しますか?java -version を確認してください。必ず 17 である必要があります。 .pte モデルがロードされませんか?両方とも選択したことを確認してください: .

  • トークナイザ .pte アプリがクラッシュしますか?有効な

ファイルは通常 CPU 用の XNNPACK バックエンドなど、ExecuTorch 用に特別にエクスポートされている必要があります。

モデルを電話に転送する 現在、 executorchllama

我々がビルドしたアプリは Android 上で特定のディレクトリからのみモデルをロードすることをサポートしており、そのディレクトリは通常のファイルマネージャからはアクセスできません。しかし adb を使えばそのディレクトリにモデルファイルを保存できます。

  1. adb devices

    無線デバッグで接続している場合、次のように表示されます:

    または有線で接続している場合:

  1. コンピュータが電話へアクセスする許可を与えていない場合は:

電話に表示される許可ダイアログを確認して(許可したい場合は許可してください) .pte および 準備ができたら、配置先の tokenizer.json

ファイル用のフォルダを作成します。

adb shell chmod 777 /data/local/tmp/llama

total 0

  1. adb push <path_to_model.pte on your computer> /data/local/tmp/llama インストールした executorchllamademo

  2. アプリを開き、右上の歯車アイコンをタップして設定を開きます。

  3. Model の横の矢印をタップしてピッカーを開きモデルを選択します。 ファイル名が表示されない空白の白いダイアログが出る場合は、ADB によるモデルのプッシュが失敗しています—その手順をやり直してください。初めは「モデル未選択」と表示されることがあります。

  1. モデルを選択すると、アプリにモデルのファイル名が表示されるはずです。

  1. 次にトークナイザについても同じ操作を繰り返します。トークナイザ欄の横の矢印をクリックして対応するファイルを選択してください。

  1. アップロードするモデルによってはモデルタイプを選択する必要がある場合があります。ここでは Qwen3 が選択されています。

  1. 両方のファイルを選択したら「Load Model」ボタンをクリックします。

  1. チャットウィンドウのある元の画面に戻り、「model loading」と表示されることがあります。電話の RAM やストレージ速度によってはロードに数秒かかる場合があります。

📱「successfully loaded model」と表示されたら、モデルとチャットを開始できます。 さあ、これで Android 電話上でネイティブに LLM が動作しています!

ExecuTorch ExecuTorch は数十億人を支えていますarrow-up-right 数十億人向けのオンデバイス機械学習体験を支えます Instagram、WhatsApp、Messenger、Facebook 上で。Instagram Cutouts は写真から編集可能なステッカーを抽出するために ExecuTorch を使用しています。Messenger のような暗号化されたアプリでは、ExecuTorch がオンデバイスでのプライバシー配慮型の言語識別と翻訳を可能にします。ExecuTorch は Apple、Qualcomm、ARM などを含む十数のハードウェアバックエンドをサポートし、arrow-up-right.

Meta の Quest 3 や Ray-Ban

Qwen 2.5、Phi 4 Mini モデル、その他多数! 無料のColabノートブックarrow-up-right あなたは以下をカスタマイズできます:

Qwen3-0.6B 用にフォンデプロイを可能にするための設定は上記のどのモデルにも適用できます!

Qwen3 0.6B のメインフォンデプロイノートブック

Llama 3 と互換 Unsloth ノートブック 他のすべてのノートブックは我々の

ページにあります!

🌵 Cactus を使った電話向けのデプロイarrow-up-right Cactus

  • はモバイルデバイス、Mac、Raspberry Pi のような ARM チップ向けのオープンソース推論エンジンです。 Qwen3-0.6B および INT8 で、Cactus は LFM2-1.2B 60-70 toks/sec で iPhone 17 Pro 上で実行します、 13-18 toks/sec

  • は予算型 Pixel 6a 上での速度です。 タスク特化の INT8 チューンされた Gemma3-270m 150 toks/sec を iPhone 17 Pro で達成し、 23 toks/sec

を Raspberry Pi で達成します。

クイックスタート

1. トレーニング(Google Colab / GPU)

model.push_to_hub("username/my-lora-adapter")

git clone https://github.com/cactus-compute/cactus && cd cactus && source ./setup

cactus convert Qwen/Qwen3-0.6B ./my-qwen3-0.6b --lora username/my-lora-adapter

4. 実行

cactus run ./my-qwen3-0.6b

5. iOS/macOS アプリで使用

リンク (venv) henry@Henrys-MacBook-Air cactus % cactus-ios.xcframework

以下のコードを使用してiOSアプリをビルドできますが、テスト中に任意のデバイスでのパフォーマンスを確認するには、iPhoneをMacに接続して次を実行してcactusテストを実行してください:

Cactusのデモアプリは最終的にカスタムのファインチューニングを利用するよう拡張されます。さらに、 cactus run は電話を接続できるようにし、対話セッションが電話のチップを使用するようにするため、アプリを完全に構築する前にテストできます。

6. Androidアプリでの使用

5. iOS/macOS アプリで使用

コピー libcactus.so から app/src/main/jniLibs/arm64-v8a/、その後:

以下のコードを使用してAndroidアプリをビルドできますが、テスト中に任意のデバイスでのパフォーマンスを確認するには、AndroidフォンをMacに接続して次を実行してcactusテストを実行してください:

Cactusのデモアプリは最終的にカスタムのファインチューニングを利用するよう拡張されます。さらに、 cactus run は電話を接続できるようにし、対話セッションが電話のチップを使用するようにするため、アプリを完全に構築する前にテストできます。

リソース

最終更新

役に立ちましたか?