📱iOSまたはAndroidスマートフォンでLLMを実行・デプロイする方法
ExecuTorchを使って、自分のLLMをファインチューニングし、AndroidやiPhoneにデプロイするためのチュートリアル。
LLMをトレーニングして、その後 ローカルにデプロイする方法を紹介できることを楽しみにしています を Androidスマートフォン そして iPhone。私たちは ExecuTorch をPyTorchとMetaと共同で使い、量子化対応学習(QAT)を用いて、その後エッジデバイスへ直接デプロイする、簡潔なワークフローを作成しました。 Unsloth、TorchAO、そしてExecuTorchを使って、次のことができることを紹介します:
InstagramやWhatsAppで何十億人ものユーザーを支えているMetaの同じ技術(ExecuTorch)を使う
Qwen3-0.6Bをローカルで Pixel 8 そして iPhone 15 Proに約40トークン/秒でデプロイする
TorchAO経由でQATを適用し、精度の70%を回復する
プライバシー優先、即時応答、オフライン機能を手に入れましょう
次の 無料のColabノートブック Qwen3 0.6Bをファインチューニングし、スマートフォンへのデプロイ用にエクスポートする
Qwen3-4B iPhone 15 Pro上にデプロイされた

Qwen3-0.6B 約40トークン/秒で動作中

🦥 モデルのトレーニング
スマートフォンへのデプロイ向けにQwen3、Gemma3、Llama3、Qwen2.5、Phi4など多くのモデルをサポートしています!次の手順に従ってください 無料のColabノートブック Qwen3-0.6Bのデプロイ手順は
まずUnslothを更新し、TorchAOとExecutorchをインストールします。
次に単純に qat_scheme = "phone-deployment" を使って、スマートフォンにデプロイしたいことを示します。なお、次も設定していることに注意してください full_finetuning = True 完全ファインチューニング用に!
私たちが使っているのは qat_scheme = "phone-deployment" 実際には次を使っています qat_scheme = "int8-int4" 内部ではUnsloth/TorchAOのQATを有効にするために シミュレート 学習中にLinear層へINT4重み量子化付きのINT8動的活性量子化を適用し(フェイク量子化演算経由)、計算は16ビットのままにします。学習後、モデルは実際の量子化版に変換されるため、デバイス上のモデルはより小さくなり、通常は 素朴なPTQよりも精度をよく保持します.
の説明に従ってファインチューニングした後 Colabノートブック、その後それを .pte ファイルとしてExecutorch経由で保存します:
🏁 学習後のデプロイ
そして今、あなたの qwen3_0.6B_model.pte ファイルは約472MBで、これをデプロイできます!デバイスを選んで、すぐに始めましょう:
Run LLMs on your Phone – Xcodeルート、シミュレータまたは実機
Run LLMs on your Phone – コマンドラインルート、Unslothは不要
iOSデプロイ
iOS上でモデルを動かすためのチュートリアルです(iPhone 16 Proでテスト済みですが、他のiPhoneでも動作します)。Xcode 15を実行できる物理的なmacOSデバイスが必要です。
macOS開発環境のセットアップ
Xcodeとコマンドラインツールをインストール
Mac App StoreからXcodeをインストールしてください(バージョン15以降である必要があります)
ターミナルを開き、インストールを確認します:
xcode-select -pコマンドラインツールをインストールし、ライセンスに同意します:
xcode-select --installsudo xcodebuild -license accept
Xcodeを初めて起動し、求められたら追加コンポーネントをインストールします
プラットフォームの選択を求められたら、iOS 18を選び、シミュレータ用にダウンロードします
すべてが正常に動作するか確認: xcode-select -p
パスが表示されるはずです。表示されない場合は、手順3を繰り返してください。

Apple Developerアカウントの設定
物理デバイスのみ!
Apple IDを作成する
Apple IDをお持ちでないですか? こちらからサインアップ.
アカウントをXcodeに追加する
Xcodeを開く
Xcode → Settings → Accounts に移動する
+ボタンをクリックし、Apple IDを選択する
普段使っているApple IDでサインインする

Apple Developer Programに登録する
ExecuTorchには 増加メモリ制限機能が必要で、これには有料の開発者アカウントが必要です:
アクセスする developer.apple.com
Apple IDでサインインする
Apple Developer Programに登録する
ExecuTorchデモアプリをセットアップする
サンプルコードを入手:
Xcodeで開く
開く
apple/etLLM.xcodeprojをXcodeで上部ツールバーで
iPhone 16 Proシミュレータをターゲットデバイスとして選択するPlay(▶️)を押してビルドして実行する
🎉 成功!アプリはシミュレータで起動するはずです。まだ動作しません。モデルを追加する必要があります。

シミュレータへのデプロイ
開発者アカウントは不要です。
モデルファイルを準備する
Xcodeでシミュレータを停止する(停止ボタンを押す)
HuggingFace Hubのリポジトリに移動する(ローカルに保存していない場合)
次の2つのファイルをダウンロードする:
qwen3_0.6B_model.pte(エクスポートしたモデル)tokenizer.json(トークナイザ)
シミュレータ上に共有フォルダを作成する
シミュレータの仮想ホームボタンをクリックする
ファイルApp → ブラウズ → このiPhone内 を開く
省略記号(•••)ボタンをタップし、次の名前で新しいフォルダを作成する
Qwen3test
ターミナルを使ってファイルを転送する
フォルダが見えたら、次を実行します:
読み込み&チャット
シミュレータのetLLMアプリに戻ります。タップして起動します。

Qwen3testフォルダからモデルとトークナイザを読み込む

ファインチューニングしたモデルでチャットを始めましょう!🎉

物理iPhoneへのデプロイ
初期デバイス設定
iPhoneをUSBでMacに接続する
iPhoneのロックを解除し、「このデバイスを信頼」をタップする
Xcodeで、Window → Devices and Simulators に移動する
デバイスが左側に表示されるまで待ちます(しばらく「Preparing」と表示されることがあります)
Xcodeの署名設定を行う
Appleアカウントを追加する:Xcode → Settings → Accounts →
+プロジェクトナビゲータで、etLLMプロジェクト(青いアイコン)をクリックする
TARGETSの下でetLLMを選択する
Signing & Capabilitiesタブに移動する
「Automatically manage signing」をオンにする
ドロップダウンからTeamを選択する

必要な機能を追加する
Signing & Capabilitiesのまま、+ Capabilityをクリックする
「Increased Memory Limit」を検索して追加する
ビルドして実行
上部ツールバーで、デバイスセレクタから物理iPhoneを選択する
Play(▶️)を押すか、Cmd + Rを押す
開発者証明書を信頼する
最初のビルドは失敗します。これは正常です!
iPhoneで、設定 → プライバシーとセキュリティ → 開発者モード に移動する
オンにする
同意し、通知を承諾する
デバイスを再起動し、Xcodeに戻ってもう一度Playを押す
モデルファイルをiPhoneに転送する

アプリが起動したら、MacでFinderを開く
サイドバーでiPhoneを選択する
Filesタブをクリックする
etLLMを展開する
.pteとtokenizer.jsonファイルをこのフォルダに直接ドラッグ&ドロップする
気長に待ってください!これらのファイルは大きく、数分かかる場合があります
読み込み&チャット
iPhoneで、etLLMアプリに戻る

アプリのUIからモデルとトークナイザを読み込む

ファインチューニングしたQwen3が、今やiPhone上でネイティブに動作しています!

Androidデプロイ
このガイドでは、Linux/Macのコマンドライン環境を使って、Androidデバイス上にExecuTorch Llamaデモアプリをビルドしてインストールする方法を説明します(Pixel 8でテスト済みですが、他のAndroidスマートフォンでも動作します)。この方法は依存関係を最小限に抑え(Android Studio不要)、重いビルド処理をあなたのコンピュータにオフロードします。
要件
開発マシンに次のものがインストールされていることを確認してください:
Java 17(Java 21がデフォルトであることが多いですが、ビルドの問題を引き起こす場合があります)
Git
Wget / Curl
Androidコマンドラインツール
インストールガイド およびセットアップ
adbAndroidとコンピュータ上で
確認
Javaのバージョンが17.xに一致していることを確認します:
一致しない場合は、Ubuntu/Debian経由でインストールします:
次に、それをデフォルトに設定するか、exportします JAVA_HOME:
別のOSやディストリビューションを使っている場合は、次を参照するとよいでしょう このガイド または、お気に入りのLLMに案内してもらってください。
手順1: Android SDKとNDKをインストールする
フルAndroid Studioを使わずに、最小限のAndroid SDK環境をセットアップします。
1. SDKディレクトリを作成します:
Androidコマンドラインツールをインストールする
手順2: 環境変数を設定する
これらを以下に追加します ~/.bashrc または ~/.zshrc:
再読み込みします:
手順3: SDKコンポーネントをインストールする
ExecuTorchには特定のNDKバージョンが必要です。
NDK変数を設定します:
手順4: コードを取得する
私たちは executorch-examples リポジトリを使います。そこには更新されたLlamaデモが含まれています。
手順5: よくあるコンパイル問題を修正する
現在のコードにはこれらの問題はありませんが、以前に遭遇したことがあり、役に立つかもしれません:
「SDK Location not found」を修正する:
次を作成します local.properties ファイルを作成して、GradleにSDKの場所を明示的に伝えます:
修正 cannot find symbol エラー:
現在のコードでは非推奨のメソッドを使っています getDetailedError()。次のコマンドでパッチを当てます:
手順6: APKをビルドする
この手順ではアプリとネイティブライブラリをコンパイルします。
Androidプロジェクトに移動します:
Gradleでビルドします(ツールチェーンエラーを避けるため、明示的に
JAVA_HOMEを17に設定します):注意: 最初の実行には数分かかります。
最終的に生成されたapkは次の場所にあります:
手順7: Androidデバイスにインストールする
アプリをインストールするには2つの方法があります。
オプションA: ADBを使用する(有線/無線)
もし adb スマートフォンにアクセスできるなら:
オプションB: 直接ファイル転送
リモートVMを使っている場合、またはケーブルがない場合:
app-debug.apkを、スマートフォンからダウンロードできる場所にアップロードします
スマートフォンでダウンロードします
タップしてインストールします(求められた場合は「提供元不明のアプリのインストール」を有効にします)。
手順8: モデルファイルを転送する
アプリには.pteモデルとトークナイザファイルが必要です。
ファイルを転送します: model.pteとtokenizer.bin(またはtokenizer.model)をスマートフォンのストレージ(例: Downloadsフォルダ)に移動します。
LlamaDemoアプリを開く: スマートフォンでアプリを起動します。
モデルを選択
Settings(歯車アイコン)またはファイルピッカーをタップします。
Downloadsフォルダに移動します。
.pteファイルを選択します。
トークナイザファイルを選択します。
完了です!これでデバイス上で直接LLMとチャットできます。
トラブルシューティング
ビルドに失敗する? java -versionを確認してください。17である必要があります。
モデルが読み込まれない?両方選択したことを確認してください
.pteとトークナイザ.アプリがクラッシュする?有効な
.pteファイルはExecuTorch用に特別にエクスポートされている必要があります(通常はCPU向けのXNNPACKバックエンド)。
モデルをスマートフォンへ転送する
現在、 executorchllama 私たちが作成したアプリは、Android上の特定のディレクトリからのみモデルを読み込むことをサポートしており、残念ながら通常のファイルマネージャーからはアクセスできません。しかし、adbを使えば、モデルファイルをそのディレクトリに保存できます。
adbが正しく動作し、接続されていることを確認してください
ワイヤレスデバッグで接続している場合、次のように表示されます:

または、有線/ケーブルで接続している場合:

コンピュータにスマートフォンへのアクセス権限を与えていない場合:

次のようなポップアップダイアログがスマートフォンに表示されるので、それを許可する必要があります

完了したら、次の .pte そして tokenizer.json ファイルを置くフォルダを作成します。
スマートフォンのパス上にそのディレクトリを作成します。
ディレクトリが正しく作成されたことを確認します。
内容をそのディレクトリへプッシュします。コンピュータ、接続、スマートフォンによっては数分以上かかることがあります。気長にお待ちください。

を開いて
executorchllamademo手順5でインストールしたアプリを開き、右上の歯車アイコンをタップして設定を開きます。Model の横の矢印をタップしてピッカーを開き、モデルを選択します。 ファイル名のない白い空のダイアログが表示された場合、ADB によるモデルのプッシュが失敗した可能性があります。その手順をやり直してください。また、最初は「モデルが選択されていません」と表示されることがあります。
モデルを選択すると、アプリにモデルのファイル名が表示されるはずです。


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

アップロードするモデルによっては、モデルの種類を選択する必要があるかもしれません。ここでは Qwen3 が選択されています。

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

チャットウィンドウのある元の画面に戻り、「model loading」と表示されることがあります。読み込みが完了するまで、スマートフォンの RAM やストレージ速度によっては数秒かかる場合があります。

「successfully loaded model」と表示されたら、モデルとのチャットを始められます。 さあ、これで Android スマートフォン上で LLM をネイティブに動かせるようになりました!

📱ExecuTorch が支える数十億
ExecuTorch 数十億人のためのオンデバイス ML 体験を支えています Instagram、WhatsApp、Messenger、Facebook で。Instagram Cutouts は ExecuTorch を使って写真から編集可能なステッカーを抽出します。Messenger のような暗号化されたアプリでは、ExecuTorch により、デバイス上でプライバシーに配慮した言語識別と翻訳が可能になります。ExecuTorch は、Apple、Qualcomm、ARM などにわたる十数種類以上のハードウェアバックエンドをサポートしており、 Meta の Quest 3 と Ray-Ban.
その他のモデルのサポート
すべての Qwen 3 dense モデル(Qwen3-0.6B, Qwen3-4B, Qwen3-32B など)
すべての Gemma 3 モデル(Gemma3-270M, Gemma3-4B, Gemma3-27B など)
すべての Llama 3 モデル(Llama 3.1 8B, Llama 3.3 70B Instruct など)
Qwen 2.5、Phi 4 Mini モデルなど、さらに多くのモデルに対応!
次の内容をカスタマイズできます 無料のColabノートブック Qwen3-0.6B 向けに、上記のモデルのいずれもスマートフォンへデプロイできるようにするための
Qwen3 0.6B メインのスマートフォン用デプロイノートブック
Gemma 3 で動作
Llama 3 で動作
当社の Unslothノートブック その他すべてのノートブックのページ。
最終更新
役に立ちましたか?

