# Wie man lokale LLMs auf deinem iOS- oder Android-Telefon ausführt und bereitstellt

Wir freuen uns, Ihnen zu zeigen, wie Sie LLMs trainieren können und dann **sie lokal bereitstellen** auf **Android-Telefonen** und **iPhones**. Wir haben mit [ExecuTorch](https://github.com/pytorch/executorch/) von PyTorch & Meta zusammengearbeitet, um einen optimierten Workflow mit quantisierungsbewusstem Training ([QAT](https://unsloth.ai/docs/de/blog/quantization-aware-training-qat)) zu erstellen und diese dann direkt auf Edge-Geräten bereitzustellen. Mit [Unsloth](https://github.com/unslothai/unsloth)TorchAO und ExecuTorch zeigen wir, wie Sie:

* Die gleiche Technik (ExecuTorch) nutzen, die Meta verwendet, um Milliarden von Nutzern auf Instagram, WhatsApp zu ermöglichen
* Qwen3-0.6B lokal zu deployen auf **Pixel 8** und **iPhone 15 Pro mit \~40 Tokens/s**
* QAT über TorchAO anwenden, um 70% der Genauigkeit wiederherzustellen
* Privatsphäre zuerst, sofortige Antworten und Offline-Fähigkeiten erhalten
* Verwenden Sie unser [kostenloses Colab-Notebook](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(0_6B\)-Phone_Deployment.ipynb) um Qwen3 0.6B feinzujustieren und für die Bereitstellung auf dem Telefon zu exportieren

<a href="#ios-deployment" class="button secondary" data-icon="apple">iOS-Anleitung</a><a href="#android-deployment" class="button secondary" data-icon="android">Android-Anleitung</a>

{% columns %}
{% column %}
**Qwen3-4B** bereitgestellt auf einem iPhone 15 Pro

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

{% column %}
**Qwen3-0.6B** läuft mit \~40 Tokens/s

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

### 🦥 Ihr Modell trainieren

Wir unterstützen Qwen3, Gemma3, Llama3, Qwen2.5, Phi4 und viele andere Modelle für die Bereitstellung auf Telefonen! Befolgen Sie die [**kostenloses Colab-Notebook**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(0_6B\)-Phone_Deployment.ipynb) **für die Bereitstellung von Qwen3-0.6B:**

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

Aktualisieren Sie zuerst Unsloth und installieren Sie TorchAO und ExecuTorch.

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

Verwenden Sie dann einfach `qat_scheme = "phone-deployment"` um anzuzeigen, dass wir es auf einem Telefon bereitstellen wollen. Beachten Sie, dass wir auch `full_finetuning = True` für vollständiges Finetuning setzen!

```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", # Kennzeichnung für Telefon-Bereitstellung
)
```

Wir verwenden `qat_scheme = "phone-deployment"` wir verwenden tatsächlich `qat_scheme = "int8-int4"` unter der Haube, um Unsloth/TorchAO QAT zu ermöglichen, das *simuliert* INT8 dynamische Aktivierungsquantisierung mit INT4 Gewichtquantisierung für Linear-Schichten während des Trainings (über Fake-Quantisierungsoperationen), während Berechnungen in 16 Bit verbleiben. Nach dem Training wird das Modell in eine echte quantisierte Version konvertiert, sodass das Gerätmodell kleiner ist und typischerweise **die Genauigkeit besser beibehält als naive PTQ**.

Nach dem Finetuning wie im [Colab-Notebook](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(0_6B\)-Phone_Deployment.ipynb)beschrieben, speichern wir es dann als eine `.pte` Datei über ExecuTorch:

{% code expandable="true" %}

```bash
# Konvertieren der Gewicht-Checkpoint-State-Dict-Schlüssel in solche, die ExecuTorch erwartet
python -m executorch.examples.models.qwen3.convert_weights "phone_model" pytorch_model_converted.bin
# Modellkonfiguration aus dem ExecuTorch-Repo herunterladen
curl -L -o 0.6B_config.json https://raw.githubusercontent.com/pytorch/executorch/main/examples/models/qwen3/config/0_6b_config.json
# Exportieren in eine ExecuTorch pte-Datei
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 %}

### 🏁 Bereitstellung nach dem Training

Und jetzt mit Ihrer `qwen3_0.6B_model.pte` Datei, die etwa 472 MB groß ist, können wir sie bereitstellen! Wählen Sie Ihr Gerät und legen Sie direkt los:

* [#ios-deployment](#ios-deployment "mention") – Xcode-Route, Simulator oder Gerät
* [#android-deployment](#android-deployment "mention") – Befehlszeilen-Route, kein Studio erforderlich

## <i class="fa-apple">:apple:</i> iOS-Bereitstellung

Anleitung, um Ihr Modell unter iOS auszuführen (getestet auf einem iPhone 16 Pro, funktioniert aber auch auf anderen iPhones). Sie benötigen ein physisches macOS-Gerät, das Xcode 15 ausführen kann.

### Einrichtung der macOS-Entwicklungsumgebung

**Xcode & Command Line Tools installieren**

1. Installieren Sie Xcode aus dem Mac App Store (muss Version 15 oder höher sein)
2. Öffnen Sie das Terminal und überprüfen Sie Ihre Installation: `xcode-select -p`
3. Installieren Sie die Befehlszeilentools und akzeptieren Sie die Lizenz:&#x20;
   1. `xcode-select --install`
   2. `sudo xcodebuild -license accept`
4. Starten Sie Xcode zum ersten Mal und installieren Sie gegebenenfalls zusätzliche Komponenten, wenn Sie dazu aufgefordert werden
5. Wenn Sie aufgefordert werden, Plattformen auszuwählen, wählen Sie iOS 18 und laden Sie es für den Simulator herunter

{% hint style="warning" %}
Wichtig: Der erste Start von Xcode ist entscheidend! Überspringen Sie diese zusätzlichen Komponenteninstallationen nicht! Prüfen Sie [hier](https://developer.apple.com/documentation/xcode/downloading-and-installing-additional-xcode-components) und [hier](https://developer.apple.com/documentation/safari-developer-tools/adding-additional-simulators) für zusätzliche Hilfe.
{% endhint %}

**Überprüfen Sie, ob alles funktioniert:**  `xcode-select -p`

Sie sollten einen Pfad sehen. Falls nicht, wiederholen Sie Schritt 3.

![](https://797013937-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-Entwicklerkonto einrichten

**Nur für physische Geräte!**

{% hint style="info" %}
Überspringen Sie diesen Abschnitt, wenn Sie nur den iOS-Simulator verwenden. Sie benötigen nur für die Bereitstellung auf einem physischen iPhone ein kostenpflichtiges Entwicklerkonto.
{% endhint %}

{% columns %}
{% column %}
**Erstellen Sie Ihre Apple ID**

Sie haben noch keine Apple ID?[ Hier registrieren](https://support.apple.com/en-us/108647?device-type=iphone).

#### **Fügen Sie Ihr Konto zu Xcode hinzu**

1. Xcode öffnen
2. Navigieren Sie zu Xcode → Einstellungen → Accounts
3. Klicken Sie auf die + Schaltfläche und wählen Sie Apple ID
4. Melden Sie sich mit Ihrer regulären Apple ID an
   {% endcolumn %}

{% column %}

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

#### **Im Apple Developer Program anmelden**

ExecuTorch erfordert die `Increased-Memory-Limit-Fähigkeit`, die ein kostenpflichtiges Entwicklerkonto benötigt:

1. Besuchen Sie[ developer.apple.com](https://developer.apple.com)
2. Melden Sie sich mit Ihrer Apple ID an
3. Im Apple Developer Program anmelden

### Einrichten der ExecuTorch-Demo-App

**Beispielcode herunterladen:**

```bash
# Laden Sie die LLM-Beispiel-App direkt herunter
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 %}
**In Xcode öffnen**

1. Öffnen Sie `apple/etLLM.xcodeproj` in Xcode
2. Wählen Sie in der oberen Werkzeugleiste `iPhone 16 Pro` Simulator als Zielgerät
3. Klicken Sie auf Play (▶️), um zu bauen und auszuführen

🎉 Erfolg! Die App sollte jetzt im Simulator starten. Sie wird noch nicht funktionieren, wir müssen Ihr Modell hinzufügen.
{% endcolumn %}

{% column %}

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

### Bereitstellung im Simulator

&#x20;**Kein Entwicklerkonto erforderlich.**

**Bereiten Sie Ihre Modell-Dateien vor**

1. Stoppen Sie den Simulator in Xcode (drücken Sie die Stopp-Schaltfläche)
2. Navigieren Sie zu Ihrem HuggingFace Hub-Repo (falls nicht lokal gespeichert)
3. Laden Sie diese beiden Dateien herunter:
   1. `qwen3_0.6B_model.pte` (Ihr exportiertes Modell)
   2. tokenizer.json (der Tokenizer)

**Erstellen Sie einen gemeinsamen Ordner im Simulator**

1. Klicken Sie auf die virtuelle Home-Taste im Simulator
2. Öffnen Sie die Dateien-App → Durchsuchen → Auf meinem iPhone
3. Tippen Sie auf die Ellipsen-Schaltfläche (•••) und erstellen Sie einen neuen Ordner mit dem Namen `Qwen3test`

**Dateien mit dem Terminal übertragen**

```bash
# Finden Sie den versteckten Ordner des Simulators
find ~/Library/Developer/CoreSimulator/Devices/ -type d -iname "*Qwen3test*"
```

Wenn Sie den Ordner sehen, führen Sie Folgendes aus:

```bash
cp tokenizer.json /Pfad/zu/Qwen3test/tokenizer.json
cp qwen3_0.6B_model.pte /Pfad/zu/Qwen3test/qwen3_model.pte
```

**Laden & Chatten**

{% columns %}
{% column %}

1. Gehen Sie zurück zur etLLM-App im Simulator. Tippen Sie darauf, um sie zu starten.

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

{% column %}
2\. Laden Sie das Modell und den Tokenizer aus dem Qwen3test-Ordner

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

{% column %}
3\. Beginnen Sie, mit Ihrem feinabgestimmten Modell zu chatten! 🎉

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

### Bereitstellung auf Ihrem physischen iPhone

**Erstgerät-Einrichtung**

1. Verbinden Sie Ihr iPhone über USB mit Ihrem Mac
2. Entsperren Sie Ihr iPhone und tippen Sie auf „Diesem Gerät vertrauen“
3. Gehen Sie in Xcode zu Fenster → Geräte und Simulatoren
4. Warten Sie, bis Ihr Gerät links erscheint (es kann kurz „Vorbereitung“ anzeigen)

**Xcode-Signierung konfigurieren**

{% columns %}
{% column %}

1. Fügen Sie Ihr Apple-Konto hinzu: Xcode → Einstellungen → Accounts → `+`
2. Klicken Sie im Projekt-Navigator auf das etLLM-Projekt (blaues Symbol)
3. Wählen Sie etLLM unter TARGETS
4. Gehen Sie zum Tab Signing & Capabilities
5. Aktivieren Sie „Automatically manage signing“
6. Wählen Sie Ihr Team aus dem Dropdown-Menü
   {% endcolumn %}

{% column %}

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

{% hint style="warning" %}
Ändern Sie die Bundle Identifier in etwas Einzigartiges (z. B. com.ihreName.etLLM). Das behebt 99% der Fehler mit Bereitstellungsprofilen
{% endhint %}

**Fügen Sie die erforderliche Fähigkeit hinzu**

1. Immer noch unter Signing & Capabilities, klicken Sie auf + Capability
2. Suchen Sie nach „Increased Memory Limit“ und fügen Sie es hinzu

**Build & Run**

1. Wählen Sie in der oberen Werkzeugleiste Ihr physisches iPhone aus dem Gerätewähler aus
2. Klicken Sie auf Play (▶️) oder drücken Sie Cmd + R

**Dem Entwicklerzertifikat vertrauen**

Ihr erster Build wird fehlschlagen—das ist normal!

1. Gehen Sie auf Ihrem iPhone zu Einstellungen → Datenschutz & Sicherheit → Entwicklermodus
2. Schalten Sie ihn ein
3. Zustimmen und Meldungen akzeptieren
4. Starten Sie das Gerät neu, kehren Sie zu Xcode zurück und klicken Sie erneut auf Play

{% hint style="warning" %}
Der Entwicklermodus ermöglicht Xcode, Apps auf Ihrem iPhone auszuführen und zu installieren
{% endhint %}

**Modelldateien auf Ihr iPhone übertragen**

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

1. Sobald die App läuft, öffnen Sie den Finder auf Ihrem Mac
2. Wählen Sie Ihr iPhone in der Seitenleiste aus
3. Klicken Sie auf den Dateien-Tab
4. Erweitern Sie etLLM
5. Ziehen Sie Ihre .pte- und tokenizer.json-Dateien direkt in diesen Ordner
6. Seien Sie geduldig! Diese Dateien sind groß und können ein paar Minuten dauern

**Laden & Chatten**

{% columns %}
{% column %}

1. Wechseln Sie auf Ihrem iPhone zurück zur etLLM-App

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

2. Laden Sie das Modell und den Tokenizer über die App-Oberfläche

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

{% column %}
3\. Ihr feinabgestimmtes Qwen3 läuft jetzt nativ auf Ihrem iPhone!

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

## <i class="fa-android">:android:</i> Android-Bereitstellung

Dieser Leitfaden erklärt, wie man die ExecuTorch Llama-Demo-App auf einem Android-Gerät erstellt und installiert (getestet mit Pixel 8, funktioniert aber auch auf anderen Android-Telefonen) und verwendet eine Linux/Mac-Befehlszeilenumgebung. Dieser Ansatz minimiert Abhängigkeiten (kein Android Studio erforderlich) und verlagert den schweren Build-Prozess auf Ihren Computer.

### Anforderungen

Stellen Sie sicher, dass Ihre Entwicklungsmaschine Folgendes installiert hat:

* Java 17 (Java 21 ist oft Standard, kann aber Build-Probleme verursachen)
* Git
* Wget / Curl
* Android Command Line Tools
* [Anleitung zur Installation](https://www.xda-developers.com/install-adb-windows-macos-linux/) und Einrichtung von `adb` auf Ihrem Android und Ihrem Computer

#### Überprüfung

Prüfen Sie, ob Ihre Java-Version mit 17.x übereinstimmt:

```bash
# Ausgabe sollte so aussehen: openjdk version "17.0.x"
java -version
```

Wenn es nicht übereinstimmt, installieren Sie es unter Ubuntu/Debian:

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

Setzen Sie es dann als Standard oder exportieren Sie `JAVA_HOME`:

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

Wenn Sie ein anderes OS oder eine andere Distribution verwenden, sollten Sie [diesen Leitfaden](https://docs.oracle.com/en/java/javase/25/install/overview-jdk-installation.html) oder einfach Ihr bevorzugtes LLM fragen, um Sie durchzuführen.

### Schritt 1: Android SDK & NDK installieren

Richten Sie eine minimale Android-SDK-Umgebung ohne das vollständige Android Studio ein.

1\. Erstellen Sie das SDK-Verzeichnis:

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

2. Android Command Line Tools installieren

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

# Wichtig: Umstrukturieren, um die SDK-Struktur zu erfüllen
mv cmdline-tools/cmdline-tools cmdline-tools/latest
```

### Schritt 2: Umgebungsvariablen konfigurieren

Fügen Sie diese zu Ihrer `~/.bashrc` oder `~/.zshrc`:

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

Laden Sie sie neu:

```bash
source ~/.zshrc  # oder ~/.bashrc je nach Shell
```

### Schritt 3: SDK-Komponenten installieren

ExecuTorch benötigt bestimmte NDK-Versionen.

```bash
# Lizenzen akzeptieren
yes | sdkmanager --licenses

# Installieren Sie API 34 und NDK 25
sdkmanager "platforms;android-34" "platform-tools" "build-tools;34.0.0" "ndk;25.0.8775105"
```

Setzen Sie die NDK-Variable:

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

### Schritt 4: Code holen

Wir verwenden das `executorch-examples` Repository, das die aktualisierte Llama-Demo enthält.

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

### Schritt 5: Häufige Kompilationsprobleme beheben

Beachten Sie, dass der aktuelle Code diese Probleme nicht hat, wir sie jedoch zuvor erlebt haben und die folgenden Hinweise hilfreich sein können:

**Beheben von „SDK Location not found":**

Erstellen Sie eine `local.properties` Datei, um Gradle explizit zu sagen, wo sich das SDK befindet:

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

**Beheben von `cannot find symbol` Fehler:**

Der aktuelle Code verwendet eine veraltete Methode `getDetailedError()`. Patchen Sie sie mit diesem Befehl:

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

### Schritt 6: APK bauen

Dieser Schritt kompiliert die App und die nativen Bibliotheken.

1. Wechseln Sie zum Android-Projekt:

   ```bash
   cd llm/android/LlamaDemo
   ```
2. Mit Gradle bauen (setzen Sie explizit `JAVA_HOME` auf 17, um Toolchain-Fehler zu vermeiden):&#x20;

   Hinweis: Der erste Lauf dauert einige Minuten.

   ```bash
   export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
   ./gradlew :app:assembleDebug
   ```
3. Die erzeugte finale APK finden Sie unter:

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

### Schritt 7: Auf Ihrem Android-Gerät installieren

Sie haben zwei Optionen, um die App zu installieren.

#### Option A: Mit ADB (kabelgebunden/drahtlos)

Wenn Sie `adb` Zugriff auf Ihr Telefon haben:

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

#### Option B: Direkter Dateitransfer

Wenn Sie auf einer Remote-VM sind oder kein Kabel haben:

1. Laden Sie die app-debug.apk an einen Ort hoch, von dem Sie sie auf dem Telefon herunterladen können
2. Laden Sie sie auf Ihrem Telefon herunter
3. Tippen Sie zum Installieren (aktivieren Sie „Installation aus unbekannten Quellen zulassen“, falls aufgefordert).

### Schritt 8: Modelldateien übertragen

Die App benötigt die .pte-Modell- und Tokenizer-Dateien.

1. Dateien übertragen: Verschieben Sie Ihre model.pte und tokenizer.bin (oder tokenizer.model) in den Speicher Ihres Telefons (z. B. in den Downloads-Ordner).
2. LlamaDemo-App öffnen: Starten Sie die App auf Ihrem Telefon.
3. Modell auswählen
4. Tippen Sie auf Einstellungen (Zahnrad-Symbol) oder den Dateiauswähler.
5. Navigieren Sie zu Ihrem Download-Ordner.
6. Wählen Sie Ihre .pte-Datei aus.
7. Wählen Sie Ihre Tokenizer-Datei aus.

Fertig! Sie können jetzt direkt auf Ihrem Gerät mit dem LLM chatten.

### Fehlerbehebung

* Build schlägt fehl? Prüfen Sie java -version. Es MUSS 17 sein.
* Modell lädt nicht? Stellen Sie sicher, dass Sie sowohl das `.pte` ALS AUCH das `Tokenizer`.
* App stürzt ab? Gültige `.pte` Dateien müssen speziell für ExecuTorch exportiert werden (üblicherweise XNNPACK-Backend für CPU).

### Modell auf Ihr Telefon übertragen

Derzeit unterstützt die `executorchllama` App, die wir gebaut haben, nur das Laden des Modells aus einem bestimmten Verzeichnis auf Android, das leider über normale Dateimanager nicht zugänglich ist. Aber wir können die Modell-Dateien mit adb in das genannte Verzeichnis speichern.

#### Stellen Sie sicher, dass adb ordnungsgemäß läuft und verbunden ist

```shellscript
adb devices 
```

{% columns %}
{% column %}

1. Wenn Sie über drahtloses Debugging verbunden sind, sehen Sie so etwas:

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

   Oder wenn Sie über ein Kabel verbunden sind:

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

   Wenn Sie dem Computer keine Berechtigungen zum Zugriff auf Ihr Telefon gegeben haben:

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

{% endcolumn %}

{% column %}
2\. Dann müssen Sie Ihr Telefon auf ein Popup-Dialog prüfen, das so aussieht (das Sie erlauben möchten)

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

Sobald dies erledigt ist, ist es Zeit, den Ordner zu erstellen, in den wir die `.pte` und `tokenizer.json` Dateien ablegen müssen.

Erstellen Sie das genannte Verzeichnis im Telefonpfad.

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

Überprüfen Sie, ob das Verzeichnis richtig erstellt wurde.

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

Schieben Sie die Inhalte in das genannte Verzeichnis. Dies kann je nach Computer, Verbindung und Telefon ein paar Minuten oder länger dauern. Bitte haben Sie Geduld.

```shellscript
adb push <Pfad_zur_tokenizer.json auf Ihrem Computer> /data/local/tmp/llama
adb push <Pfad_zur_model.pte auf Ihrem Computer> /data/local/tmp/llama
```

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

{% columns %}
{% column %}

1. Öffnen Sie die `executorchllamademo` App, die Sie in Schritt 5 installiert haben, und tippen Sie dann auf das Zahnrad-Symbol oben rechts, um die Einstellungen zu öffnen.
2. Tippen Sie auf den Pfeil neben Model, um den Auswähler zu öffnen und ein Modell auszuwählen.\
   Wenn Sie ein weißes leeres Dialogfeld ohne Dateinamen sehen, ist Ihr ADB-Modell-Push wahrscheinlich fehlgeschlagen - wiederholen Sie diesen Schritt. Beachten Sie auch, dass anfangs „kein Modell ausgewählt“ angezeigt werden kann.
3. Nachdem Sie ein Modell ausgewählt haben, sollte die App den Modell-Dateinamen anzeigen.
   {% endcolumn %}

{% column %}

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

{% columns %}
{% column %}
5\. Wiederholen Sie nun dasselbe für den Tokenizer. Klicken Sie auf den Pfeil neben dem Tokenizer-Feld und wählen Sie die entsprechende Datei aus.

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

{% column %}
6\. Möglicherweise müssen Sie den Modelltyp je nach hochgeladenem Modell auswählen. Hier ist Qwen3 ausgewählt.

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

{% column %}
7\. Sobald Sie beide Dateien ausgewählt haben, klicken Sie auf die Schaltfläche „Load Model“.

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

{% columns %}
{% column %}
8\. Sie kehren zum ursprünglichen Bildschirm mit dem Chatfenster zurück, und es kann „model loading“ anzeigen. Das Laden kann je nach RAM und Speichergeschwindigkeit Ihres Telefons einige Sekunden dauern.

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

{% column %}
9\. Sobald „successfully loaded model“ angezeigt wird, können Sie beginnen, mit dem Modell zu chatten.\
\
Et Voila, Sie haben nun ein LLM, das nativ auf Ihrem Android-Telefon läuft!

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

### :mobile\_phone:ExecuTorch betreibt Milliarden <a href="#docs-internal-guid-7d7d5aee-7fff-f138-468c-c35853fee9ca" id="docs-internal-guid-7d7d5aee-7fff-f138-468c-c35853fee9ca"></a>

ExecuTorch [ermöglicht On-Device-ML-Erlebnisse für Milliarden von Menschen](https://engineering.fb.com/2025/07/28/android/executorch-on-device-ml-meta-family-of-apps/) auf Instagram, WhatsApp, Messenger und Facebook. Instagram Cutouts verwendet ExecuTorch, um editierbare Sticker aus Fotos zu extrahieren. In verschlüsselten Anwendungen wie Messenger ermöglicht ExecuTorch gerätebasiertes, datenschutzbewusstes Sprachidentifikations- und Übersetzungserlebnis. ExecuTorch unterstützt über ein Dutzend Hardware-Backends über Apple, Qualcomm, ARM und [Metas Quest 3 und Ray-Bans](https://ai.meta.com/blog/executorch-reality-labs-on-device-ai/).

## Weitere Modellunterstützung

* Alle Qwen 3 Dense-Modelle ([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) usw.)
* Alle Gemma 3 Modelle ([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) usw.)
* Alle Llama 3 Modelle ([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) usw.)
* Qwen 2.5, Phi 4 Mini-Modelle und vieles mehr!

Sie können das [**kostenloses Colab-Notebook**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(0_6B\)-Phone_Deployment.ipynb) für Qwen3-0.6B anpassen, um Telefonbereitstellung für eines der oben genannten Modelle zu ermöglichen!

{% columns %}
{% column %}
**Haupt-Notebook zur Telefon-Bereitstellung von Qwen3 0.6B**

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

{% column %}
Funktioniert mit Gemma 3

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

{% column %}
Funktioniert mit Llama 3

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

Gehen Sie zu unserer [unsloth-notebooks](https://unsloth.ai/docs/de/loslegen/unsloth-notebooks "mention") Seite für alle anderen Notebooks.


---

# Agent Instructions: Querying This Documentation

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

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://unsloth.ai/docs/de/grundlagen/inference-and-deployment/deploy-llms-phone.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
