> For the complete documentation index, see [llms.txt](https://unsloth.ai/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://unsloth.ai/docs/jp/ji-chu/inference-and-deployment/deploy-llms-phone.md).

# iOSまたはAndroidスマートフォンでLLMを実行・デプロイする方法

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

LLMをトレーニングして、その後 **ローカルにデプロイする方法を紹介できることを楽しみにしています** を **Androidスマートフォン** そして **iPhone**。私たちは [ExecuTorch](https://github.com/pytorch/executorch/) をPyTorchとMetaと共同で使い、量子化対応学習（[QAT](/docs/jp/burogu/quantization-aware-training-qat.md)）を用いて、その後エッジデバイスへ直接デプロイする、簡潔なワークフローを作成しました。 [Unsloth](https://github.com/unslothai/unsloth)、TorchAO、そしてExecuTorchを使って、次のことができることを紹介します：

* InstagramやWhatsAppで何十億人ものユーザーを支えているMetaの同じ技術（ExecuTorch）を使う
* Qwen3-0.6Bをローカルで **Pixel 8** そして **iPhone 15 Proに約40トークン/秒でデプロイする**
* TorchAO経由でQATを適用し、精度の70%を回復する
* プライバシー優先、即時応答、オフライン機能を手に入れましょう
* 次の [無料のColabノートブック](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(0_6B\)-Phone_Deployment.ipynb) Qwen3 0.6Bをファインチューニングし、スマートフォンへのデプロイ用にエクスポートする

<a href="/docs/jp/ji-chu/inference-and-deployment/deploy-llms-phone.md#ios-deployment" class="button secondary" data-icon="apple">iOSチュートリアル</a><a href="#android-deployment" class="button secondary" data-icon="android">Androidチュートリアル</a>

{% columns %}
{% column %}
**Qwen3-4B** iPhone 15 Pro上にデプロイされた

<div align="left"><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2F7tFjmj9c3p6o4eN3oHQq%2Funknown.png?alt=media&amp;token=009699b3-e48f-4a94-bcd0-26cf6dedb8eb" alt="" width="188"><figcaption></figcaption></figure></div>
{% endcolumn %}

{% column %}
**Qwen3-0.6B** 約40トークン/秒で動作中

<div align="left"><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FWI9nU1RQVrPbVXrIihfA%2Fimage.png?alt=media&amp;token=5d58eb94-aeb3-42c3-a891-561ceb4e22db" alt="" width="188"><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

### 🦥 モデルのトレーニング

スマートフォンへのデプロイ向けにQwen3、Gemma3、Llama3、Qwen2.5、Phi4など多くのモデルをサポートしています！次の手順に従ってください [**無料のColabノートブック**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(0_6B\)-Phone_Deployment.ipynb) **Qwen3-0.6Bのデプロイ手順は**

{% embed url="<https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_(0_6B)-Phone_Deployment.ipynb>" %}

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

```bash
pip install --upgrade unsloth unsloth_zoo
pip install torchao==0.14.0 executorch pytorch_tokenizers
```

次に単純に `qat_scheme = "phone-deployment"` を使って、スマートフォンにデプロイしたいことを示します。なお、次も設定していることに注意してください `full_finetuning = True` 完全ファインチューニング用に！

```python
from unsloth import FastLanguageModel
import torch
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/Qwen3-0.6B",
    max_seq_length = 1024,
    full_finetuning = True,
    qat_scheme = "phone-deployment", # スマートフォン向けデプロイのフラグ
)
```

私たちが使っているのは `qat_scheme = "phone-deployment"` 実際には次を使っています `qat_scheme = "int8-int4"` 内部ではUnsloth/TorchAOのQATを有効にするために *シミュレート* 学習中にLinear層へINT4重み量子化付きのINT8動的活性量子化を適用し（フェイク量子化演算経由）、計算は16ビットのままにします。学習後、モデルは実際の量子化版に変換されるため、デバイス上のモデルはより小さくなり、通常は **素朴なPTQよりも精度をよく保持します**.

の説明に従ってファインチューニングした後 [Colabノートブック](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(0_6B\)-Phone_Deployment.ipynb)、その後それを `.pte` ファイルとしてExecutorch経由で保存します：

{% code expandable="true" %}

```bash
# 重みチェックポイントのstate dictキーをExecuTorchが期待する形式に変換する
python -m executorch.examples.models.qwen3.convert_weights "phone_model" pytorch_model_converted.bin
# ExecuTorchリポジトリからモデル設定をダウンロードする
curl -L -o 0.6B_config.json https://raw.githubusercontent.com/pytorch/executorch/main/examples/models/qwen3/config/0_6b_config.json
# ExecuTorchのpteファイルへエクスポートする
python -m executorch.examples.models.llama.export_llama \
    --model "qwen3_0_6b" \
    --checkpoint pytorch_model_converted.bin \
    --params 0.6B_config.json \
    --output_name qwen3_0.6B_model.pte \
    -kv --use_sdpa_with_kv_cache -X --xnnpack-extended-ops \
    --max_context_length 1024 --max_seq_length 128 --dtype fp32 \
    --metadata '{"get_bos_id":199999, "get_eos_ids":[200020,199999]}'
```

{% endcode %}

### 🏁 学習後のデプロイ

そして今、あなたの `qwen3_0.6B_model.pte` ファイルは約472MBで、これをデプロイできます！デバイスを選んで、すぐに始めましょう：

* [#ios-deployment](#ios-deployment "mention") – Xcodeルート、シミュレータまたは実機
* [#android-deployment](#android-deployment "mention") – コマンドラインルート、Unslothは不要

## <i class="fa-apple">:apple:</i> iOSデプロイ

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

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

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

1. Mac App StoreからXcodeをインストールしてください（バージョン15以降である必要があります）
2. ターミナルを開き、インストールを確認します： `xcode-select -p`
3. コマンドラインツールをインストールし、ライセンスに同意します：&#x20;
   1. `xcode-select --install`
   2. `sudo xcodebuild -license accept`
4. Xcodeを初めて起動し、求められたら追加コンポーネントをインストールします
5. プラットフォームの選択を求められたら、iOS 18を選び、シミュレータ用にダウンロードします

{% hint style="warning" %}
重要：最初のXcode起動は非常に重要です！追加コンポーネントのインストールを省略しないでください！こちらを確認してください [ここ](https://developer.apple.com/documentation/xcode/downloading-and-installing-additional-xcode-components) そして [ここ](https://developer.apple.com/documentation/safari-developer-tools/adding-additional-simulators) 追加のヘルプはこちらです。
{% endhint %}

**すべてが正常に動作するか確認：**  `xcode-select -p`

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

![](https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FJii1jArd6GQrdaCMHvyR%2Funknown.png?alt=media\&token=bd8b7a75-23e3-4474-b84b-ab9ad34cc401)

### Apple Developerアカウントの設定

**物理デバイスのみ！**

{% hint style="info" %}
iOSシミュレータのみを使う場合は、このセクション全体をスキップしてください。物理iPhoneへのデプロイには有料の開発者アカウントが必要です。
{% endhint %}

{% columns %}
{% column %}
**Apple IDを作成する**

Apple IDをお持ちでないですか？[ こちらからサインアップ](https://support.apple.com/en-us/108647?device-type=iphone).

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

1. Xcodeを開く
2. Xcode → Settings → Accounts に移動する
3. +ボタンをクリックし、Apple IDを選択する
4. 普段使っているApple IDでサインインする
   {% endcolumn %}

{% column %}

<div align="left"><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FxG5ifHNeI6xKWqHw1pxL%2Funknown.png?alt=media&amp;token=875fb5e4-e5f3-4c88-9af6-cb4e587975ca" alt="" width="563"><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

#### **Apple Developer Programに登録する**

ExecuTorchには `増加メモリ制限機能`が必要で、これには有料の開発者アカウントが必要です：

1. アクセスする[ developer.apple.com](https://developer.apple.com)
2. Apple IDでサインインする
3. Apple Developer Programに登録する

### ExecuTorchデモアプリをセットアップする

**サンプルコードを入手：**

```bash
# LLMサンプルアプリを直接ダウンロードする
curl -L https://github.com/meta-pytorch/executorch-examples/archive/main.tar.gz | \
  tar -xz --strip-components=2 executorch-examples-main/llm/apple
```

{% columns %}
{% column %}
**Xcodeで開く**

1. 開く `apple/etLLM.xcodeproj` をXcodeで
2. 上部ツールバーで `iPhone 16 Pro` シミュレータをターゲットデバイスとして選択する
3. Play（▶️）を押してビルドして実行する

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

{% column %}

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FA4n2u44u9sLlauCkhf1b%2Funknown.png?alt=media&amp;token=c93fef18-aab6-47cb-b301-d895466314f6" alt="" width="563"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

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

&#x20;**開発者アカウントは不要です。**

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

1. Xcodeでシミュレータを停止する（停止ボタンを押す）
2. HuggingFace Hubのリポジトリに移動する（ローカルに保存していない場合）
3. 次の2つのファイルをダウンロードする：
   1. `qwen3_0.6B_model.pte` （エクスポートしたモデル）
   2. tokenizer.json（トークナイザ）

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

1. シミュレータの仮想ホームボタンをクリックする
2. ファイルApp → ブラウズ → このiPhone内 を開く
3. 省略記号（•••）ボタンをタップし、次の名前で新しいフォルダを作成する `Qwen3test`

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

```bash
# シミュレータの隠しフォルダを探す
find ~/Library/Developer/CoreSimulator/Devices/ -type d -iname "*Qwen3test*"
```

フォルダが見えたら、次を実行します：

```bash
cp tokenizer.json /path/to/Qwen3test/tokenizer.json
cp qwen3_0.6B_model.pte /path/to/Qwen3test/qwen3_model.pte
```

**読み込み＆チャット**

{% columns %}
{% column %}

1. シミュレータのetLLMアプリに戻ります。タップして起動します。

<div align="left"><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2F55YWFJN49DCiHsy9EKOA%2Funknown.png?alt=media&amp;token=4f8c8e90-df0b-4121-99eb-24437580724b" alt="" width="375"><figcaption></figcaption></figure></div>
{% endcolumn %}

{% column %}
2\. Qwen3testフォルダからモデルとトークナイザを読み込む

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FpwUCX0nfarr6HSUd0pd3%2Funknown.png?alt=media&amp;token=923b6ad3-d6e6-4e64-8223-947410c2218e" alt="" width="188"><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}
3\. ファインチューニングしたモデルでチャットを始めましょう！🎉

<div align="left"><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FJrEzy1bvVeb4qLFxPFit%2Funknown.png?alt=media&amp;token=36b7c70b-f014-4323-bdc5-cc5bf0fd12af" alt="" width="188"><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

### 物理iPhoneへのデプロイ

**初期デバイス設定**

1. iPhoneをUSBでMacに接続する
2. iPhoneのロックを解除し、「このデバイスを信頼」をタップする
3. Xcodeで、Window → Devices and Simulators に移動する
4. デバイスが左側に表示されるまで待ちます（しばらく「Preparing」と表示されることがあります）

**Xcodeの署名設定を行う**

{% columns %}
{% column %}

1. Appleアカウントを追加する：Xcode → Settings → Accounts → `+`
2. プロジェクトナビゲータで、etLLMプロジェクト（青いアイコン）をクリックする
3. TARGETSの下でetLLMを選択する
4. Signing & Capabilitiesタブに移動する
5. 「Automatically manage signing」をオンにする
6. ドロップダウンからTeamを選択する
   {% endcolumn %}

{% column %}

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FFm4a47e9Wuo7JiNbEeYl%2Funknown.png?alt=media&amp;token=3f958363-6c0d-4608-8895-8376b0e1b1b1" alt="" width="375"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% hint style="warning" %}
Bundle Identifierを一意のものに変更する（例：com.yourname.etLLM）。これでプロビジョニングプロファイルのエラーの99%が解決します
{% endhint %}

**必要な機能を追加する**

1. Signing & Capabilitiesのまま、+ Capabilityをクリックする
2. 「Increased Memory Limit」を検索して追加する

**ビルドして実行**

1. 上部ツールバーで、デバイスセレクタから物理iPhoneを選択する
2. Play（▶️）を押すか、Cmd + Rを押す

**開発者証明書を信頼する**

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

1. iPhoneで、設定 → プライバシーとセキュリティ → 開発者モード に移動する
2. オンにする
3. 同意し、通知を承諾する
4. デバイスを再起動し、Xcodeに戻ってもう一度Playを押す

{% hint style="warning" %}
開発者モードにより、XCodeがiPhone上でアプリを実行およびインストールできるようになります
{% endhint %}

**モデルファイルをiPhoneに転送する**

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FqAGQov6BgjlDSqA5GENN%2Funknown.png?alt=media&amp;token=386b17df-703c-4e2c-9969-895577a98f0a" alt="" width="375"><figcaption></figcaption></figure>

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

**読み込み＆チャット**

{% columns %}
{% column %}

1. iPhoneで、etLLMアプリに戻る

<div align="center"><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FXY4EPFNcxaaBpjVroja3%2Funknown.jpeg?alt=media&amp;token=7e8eca62-a5de-4705-9f0c-832b40579e78" alt="" width="188"><figcaption></figcaption></figure></div>

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

<div align="center"><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FUzKWYRNR02vkVn5S3SQ5%2Funknown.jpeg?alt=media&amp;token=84a85440-bf98-438d-a035-d8a11912a7a8" alt="" width="188"><figcaption></figcaption></figure></div>
{% endcolumn %}

{% column %}
3\. ファインチューニングしたQwen3が、今やiPhone上でネイティブに動作しています！

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FBX1nCLPbsnuRQchJXyAS%2Funknown.png?alt=media&amp;token=d276d4d6-2fc7-4cba-87f1-634aaea29884" alt="" width="184"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

## <i class="fa-android">:android:</i> Androidデプロイ

このガイドでは、Linux/Macのコマンドライン環境を使って、Androidデバイス上にExecuTorch Llamaデモアプリをビルドしてインストールする方法を説明します（Pixel 8でテスト済みですが、他のAndroidスマートフォンでも動作します）。この方法は依存関係を最小限に抑え（Android Studio不要）、重いビルド処理をあなたのコンピュータにオフロードします。

### 要件

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

* Java 17（Java 21がデフォルトであることが多いですが、ビルドの問題を引き起こす場合があります）
* Git
* Wget / Curl
* Androidコマンドラインツール
* [インストールガイド](https://www.xda-developers.com/install-adb-windows-macos-linux/) およびセットアップ `adb` Androidとコンピュータ上で

#### 確認

Javaのバージョンが17.xに一致していることを確認します：

```bash
# 出力は次のようになるはずです: openjdk version "17.0.x"
java -version
```

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

```bash
sudo apt install openjdk-17-jdk
```

次に、それをデフォルトに設定するか、exportします `JAVA_HOME`:

```bash
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
```

別のOSやディストリビューションを使っている場合は、次を参照するとよいでしょう [このガイド](https://docs.oracle.com/en/java/javase/25/install/overview-jdk-installation.html) または、お気に入りのLLMに案内してもらってください。

### 手順1: Android SDKとNDKをインストールする

フルAndroid Studioを使わずに、最小限のAndroid SDK環境をセットアップします。

1\. SDKディレクトリを作成します：

```bash
mkdir -p ~/android-sdk/cmdline-tools
cd ~/android-sdk
```

2. Androidコマンドラインツールをインストールする

```bash
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip commandlinetools-linux-*.zip -d cmdline-tools

# 重要: SDK構造に合わせるために再整理する
mv cmdline-tools/cmdline-tools cmdline-tools/latest
```

### 手順2: 環境変数を設定する

これらを以下に追加します `~/.bashrc` または `~/.zshrc`:

```bash
export ANDROID_HOME=$HOME/android-sdk
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
export PATH=$ANDROID_HOME/platform-tools:$PATH
```

再読み込みします：

```bash
source ~/.zshrc  # または、使用しているシェルに応じて ~/.bashrc
```

### 手順3: SDKコンポーネントをインストールする

ExecuTorchには特定のNDKバージョンが必要です。

```bash
# ライセンスに同意する
yes | sdkmanager --licenses

# API 34とNDK 25をインストールする
sdkmanager "platforms;android-34" "platform-tools" "build-tools;34.0.0" "ndk;25.0.8775105"
```

NDK変数を設定します：

```bash
export ANDROID_NDK=$ANDROID_HOME/ndk/25.0.8775105
```

### 手順4: コードを取得する

私たちは `executorch-examples` リポジトリを使います。そこには更新されたLlamaデモが含まれています。

```bash
cd ~
git clone https://github.com/meta-pytorch/executorch-examples.git
cd executorch-examples
```

### 手順5: よくあるコンパイル問題を修正する

現在のコードにはこれらの問題はありませんが、以前に遭遇したことがあり、役に立つかもしれません：

**「SDK Location not found」を修正する：**

次を作成します `local.properties` ファイルを作成して、GradleにSDKの場所を明示的に伝えます：

```bash
echo "sdk.dir=$HOME/android-sdk" > llm/android/LlamaDemo/local.properties
```

**修正 `cannot find symbol` エラー：**

現在のコードでは非推奨のメソッドを使っています `getDetailedError()`。次のコマンドでパッチを当てます：

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

### 手順6: APKをビルドする

この手順ではアプリとネイティブライブラリをコンパイルします。

1. Androidプロジェクトに移動します：

   ```bash
   cd llm/android/LlamaDemo
   ```
2. Gradleでビルドします（ツールチェーンエラーを避けるため、明示的に `JAVA_HOME` を17に設定します）：&#x20;

   注意: 最初の実行には数分かかります。

   ```bash
   export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
   ./gradlew :app:assembleDebug
   ```
3. 最終的に生成されたapkは次の場所にあります：

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

### 手順7: Androidデバイスにインストールする

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

#### オプションA: ADBを使用する（有線/無線）

もし `adb` スマートフォンにアクセスできるなら：

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

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

リモートVMを使っている場合、またはケーブルがない場合：

1. app-debug.apkを、スマートフォンからダウンロードできる場所にアップロードします
2. スマートフォンでダウンロードします
3. タップしてインストールします（求められた場合は「提供元不明のアプリのインストール」を有効にします）。

### 手順8: モデルファイルを転送する

アプリには.pteモデルとトークナイザファイルが必要です。

1. ファイルを転送します: model.pteとtokenizer.bin（またはtokenizer.model）をスマートフォンのストレージ（例: Downloadsフォルダ）に移動します。
2. LlamaDemoアプリを開く: スマートフォンでアプリを起動します。
3. モデルを選択
4. Settings（歯車アイコン）またはファイルピッカーをタップします。
5. Downloadsフォルダに移動します。
6. .pteファイルを選択します。
7. トークナイザファイルを選択します。

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

### トラブルシューティング

* ビルドに失敗する？ java -versionを確認してください。17である必要があります。
* モデルが読み込まれない？両方選択したことを確認してください `.pte` と `トークナイザ`.
* アプリがクラッシュする？有効な `.pte` ファイルはExecuTorch用に特別にエクスポートされている必要があります（通常はCPU向けのXNNPACKバックエンド）。

### モデルをスマートフォンへ転送する

現在、 `executorchllama` 私たちが作成したアプリは、Android上の特定のディレクトリからのみモデルを読み込むことをサポートしており、残念ながら通常のファイルマネージャーからはアクセスできません。しかし、adbを使えば、モデルファイルをそのディレクトリに保存できます。

#### adbが正しく動作し、接続されていることを確認してください

```shellscript
adb devices 
```

{% columns %}
{% column %}

1. ワイヤレスデバッグで接続している場合、次のように表示されます：

   <div align="left"><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FX1uYoIhXRdboBK36FX9D%2Funknown.png?alt=media&amp;token=32955e17-56b7-4e2c-a06d-a1558d51427b" alt="" width="375"><figcaption></figcaption></figure></div>

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

   <div align="left"><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FBu88g0y9ivw0UQYsUyJJ%2Funknown.png?alt=media&amp;token=8eda0918-398f-486d-a1f2-6976f895a7c2" alt="" width="269"><figcaption></figcaption></figure></div>

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

   <div align="left"><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FSFkcwJyvgTcjvsPzCoDc%2Funknown.png?alt=media&amp;token=cb4bbdb6-4b83-473c-8a96-bbf75d8ba49e" alt="" width="269"><figcaption></figcaption></figure></div>

{% endcolumn %}

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

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FfqqtrC2590Wd71uzzbA5%2Funknown.png?alt=media&amp;token=e9a15b34-d794-47d1-ac63-cc5809f3e650" alt="" width="180"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

完了したら、次の `.pte` そして `tokenizer.json` ファイルを置くフォルダを作成します。

スマートフォンのパス上にそのディレクトリを作成します。

```shellscript
adb shell mkdir -p /data/local/tmp/llama
adb shell chmod 777 /data/local/tmp/llama
```

ディレクトリが正しく作成されたことを確認します。

```shellscript
adb shell ls -l /data/local/tmp/llama
合計 0
```

内容をそのディレクトリへプッシュします。コンピュータ、接続、スマートフォンによっては数分以上かかることがあります。気長にお待ちください。

```shellscript
adb push <コンピュータ上のtokenizer.jsonへのパス> /data/local/tmp/llama
adb push <コンピュータ上のmodel.pteへのパス> /data/local/tmp/llama
```

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FwqtWYiRBiyAOhi3aecn9%2Fimage.png?alt=media&amp;token=ab04a1d1-194d-420d-a980-3336f90e7e42" alt="" width="563"><figcaption></figcaption></figure>

{% columns %}
{% column %}

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

{% column %}

<div><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FmwIP3Fg2xWNfq5h719rE%2Funknown.png?alt=media&amp;token=3b560fc2-6820-4dd1-a8fa-1a76e5523672" alt=""><figcaption></figcaption></figure> <figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2F5ft9HycpKPtCYhWgTmMn%2Funknown.png?alt=media&amp;token=dc35909b-9541-4fb1-9c7a-7a4be242afd4" alt=""><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

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

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fhga4tR05b5D0IqLvB2PM%2Funknown.png?alt=media&amp;token=fb00738e-9429-4014-836d-3e35821279cd" alt="" width="180"><figcaption></figcaption></figure>
{% endcolumn %}

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

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FjAZd67Ruub3gfblDrwUs%2Funknown.png?alt=media&amp;token=cf0f6938-2e9c-4bf4-b0f2-c7512b5506ad" alt="" width="180"><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}
7\. 両方のファイルを選択したら、「Load Model」ボタンをクリックします。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FGaPBdnweeeRIWgWsK9Fg%2Funknown.png?alt=media&amp;token=73ec7e74-d9f8-4080-a6b0-ef239fd640d9" alt="" width="180"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

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

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2F1XHwMpnWEB2JiwNAR6hy%2Funknown.png?alt=media&amp;token=18bcff85-b67c-4bbe-a961-28f5c5e58ce3" alt="" width="180"><figcaption></figcaption></figure>
{% endcolumn %}

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

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FRoYe3aDedHoovwfPJVOh%2Funknown.png?alt=media&amp;token=e9a2cc0a-2407-4c0b-adf1-6e2ba122212c" alt="" width="180"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

### :mobile\_phone:ExecuTorch が支える数十億 <a href="#docs-internal-guid-7d7d5aee-7fff-f138-468c-c35853fee9ca" id="docs-internal-guid-7d7d5aee-7fff-f138-468c-c35853fee9ca"></a>

ExecuTorch [数十億人のためのオンデバイス ML 体験を支えています](https://engineering.fb.com/2025/07/28/android/executorch-on-device-ml-meta-family-of-apps/) Instagram、WhatsApp、Messenger、Facebook で。Instagram Cutouts は ExecuTorch を使って写真から編集可能なステッカーを抽出します。Messenger のような暗号化されたアプリでは、ExecuTorch により、デバイス上でプライバシーに配慮した言語識別と翻訳が可能になります。ExecuTorch は、Apple、Qualcomm、ARM などにわたる十数種類以上のハードウェアバックエンドをサポートしており、 [Meta の Quest 3 と Ray-Ban](https://ai.meta.com/blog/executorch-reality-labs-on-device-ai/).

## その他のモデルのサポート

* すべての Qwen 3 dense モデル（[Qwen3-0.6B](https://huggingface.co/unsloth/Qwen3-0.6B), [Qwen3-4B](https://huggingface.co/unsloth/Qwen3-4B), [Qwen3-32B](https://huggingface.co/unsloth/Qwen3-32B) など）
* すべての Gemma 3 モデル（[Gemma3-270M](https://huggingface.co/unsloth/gemma-3-270m-it), [Gemma3-4B](https://huggingface.co/unsloth/gemma-3-4b-it), [Gemma3-27B](https://huggingface.co/unsloth/gemma-3-27b-it) など）
* すべての Llama 3 モデル（[Llama 3.1 8B](https://huggingface.co/unsloth/Llama-3.1-8B-Instruct), [Llama 3.3 70B Instruct](https://huggingface.co/unsloth/Llama-3.3-70B-Instruct) など）
* Qwen 2.5、Phi 4 Mini モデルなど、さらに多くのモデルに対応！

次の内容をカスタマイズできます [**無料のColabノートブック**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(0_6B\)-Phone_Deployment.ipynb) Qwen3-0.6B 向けに、上記のモデルのいずれもスマートフォンへデプロイできるようにするための

{% columns %}
{% column %}
**Qwen3 0.6B メインのスマートフォン用デプロイノートブック**

{% embed url="<https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_(0_6B)-Phone_Deployment.ipynb>" %}
{% endcolumn %}

{% column %}
Gemma 3 で動作

{% embed url="<https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Gemma3_(4B).ipynb>" %}
{% endcolumn %}

{% column %}
Llama 3 で動作

{% embed url="<https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3.2_(1B_and_3B)-Conversational.ipynb>" %}
{% endcolumn %}
{% endcolumns %}

当社の [Unslothノートブック](/docs/jp/meru/unsloth-notebooks.md) その他すべてのノートブックのページ。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://unsloth.ai/docs/jp/ji-chu/inference-and-deployment/deploy-llms-phone.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
