📱如何在 iOS 或 Android 手机上运行并部署 LLM
将您自己的 LLM 微调并使用 ExecuTorch 在 Android 或 iPhone 上部署的教程。
我们很高兴展示如何训练大语言模型(LLM),然后 将它们本地部署 到 Android 手机 和 iPhone。我们与 ExecuTorch (来自 PyTorch 和 Meta)合作,创建了一个使用量化感知训练(QAT)的简化工作流,然后将其直接部署到边缘设备。 借助Unsloth、TorchAO 和 ExecuTorch,我们展示了你可以:
使用与 Meta 在 Instagram、WhatsApp 上为数十亿用户提供服务相同的技术(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,该方案 模拟 在训练期间通过假量化操作对线性层进行 INT8 动态激活量化与 INT4 权重量化,同时保持 16 位计算。训练后,模型会被转换为真实的量化版本,从而使设备上的模型更小,并且通常 比简单的 PTQ 更好地保留准确性.
按照 Colab 笔记本中描述的微调后,我们将其保存为一个 .pte 文件,通过 ExecuTorch:
🏁 训练后部署
现在有了你的 qwen3_0.6B_model.pte 文件(大约 472MB),我们就可以部署它了!选择你的设备并直接开始:
Run LLMs on your Phone – Xcode 路线,模拟器或真实设备
Run LLMs on your Phone – 命令行路线,无需 Studio
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 开发者账号设置
仅适用于真实设备!
如果你只使用 iOS 模拟器,请跳过整节。只有将应用部署到真实 iPhone 才需要付费开发者账号。
创建你的 Apple ID
没有 Apple ID? 在这里注册.
将你的账号添加到 Xcode
打开 Xcode
导航到 Xcode → Settings → Accounts
点击 + 按钮并选择 Apple ID
使用你的常规 Apple ID 登录

报名加入 Apple Developer Program
ExecuTorch 需要 increased-memory-limit 功能,这需要付费开发者账号:
使用你的 Apple ID 登录
报名加入 Apple Developer Program
设置 ExecuTorch 示例应用
获取示例代码:
在 Xcode 中打开
打开
apple/etLLM.xcodeproj在 Xcode 中在顶部工具栏,选择
iPhone 16 Pro模拟器 作为目标设备点击播放(▶️)以构建并运行
🎉 成功!应用现在应在模拟器中启动。但它尚无法工作,我们需要添加你的模型。

部署到模拟器
不需要开发者账号。
准备你的模型文件
在 Xcode 中停止模拟器(按停止按钮)
导航到你的 HuggingFace Hub 仓库(如果未本地保存)
下载这两个文件:
qwen3_0.6B_model.pte(你导出的模型)tokenizer.json(分词器)
在模拟器上创建共享文件夹
点击模拟器上的虚拟主屏按钮
打开文件应用 → 浏览 → 在我的 iPhone 上
点击省略号(•••)按钮并创建一个名为
Qwen3test
的新文件夹
find ~/Library/Developer/CoreSimulator/Devices/ -type d -iname "*Qwen3test*"
cp qwen3_0.6B_model.pte /path/to/Qwen3test/qwen3_model.pte
加载并聊天

返回模拟器中的 etLLM 应用,点击以启动。

从 Qwen3test 文件夹加载模型和分词器

开始与你的微调模型聊天!🎉
部署到你的真实 iPhone
初始设备设置
通过 USB 将你的 iPhone 连接到 Mac
解锁 iPhone 并点击“信任此设备”
在 Xcode 中,转到 Window → Devices and Simulators
等待你的设备出现在左侧(可能会显示“Preparing”一会儿)
配置 Xcode 签名
+添加你的 Apple 帐户:Xcode → Settings → Accounts →
在项目导航器中,点击 etLLM 项目(蓝色图标)
在 TARGETS 下选择 etLLM
转到 Signing & Capabilities 选项卡
勾选“Automatically manage signing”

从下拉菜单中选择你的 Team
将 Bundle Identifier 更改为唯一的标识(例如:com.yourname.etLLM)。这能解决 99% 的配置文件错误
添加所需的功能
仍在 Signing & Capabilities 中,点击 + Capability
搜索“Increased Memory Limit”并添加它
构建并运行
在顶部工具栏的设备选择器中选择你的真实 iPhone
点击播放(▶️)或按 Cmd + R
信任开发者证书
你的第一次构建会失败——这是正常的!
在 iPhone 上,前往 设置 → 隐私与安全 → 开发者模式
打开开关
同意并接受提示
重启设备,返回 Xcode 并再次点击播放
开发者模式允许 Xcode 在你的 iPhone 上运行并安装应用

将模型文件传输到你的 iPhone
应用运行后,在 Mac 上打开 Finder
在侧栏中选择你的 iPhone
点击 Files 选项卡
展开 etLLM
将你的 .pte 和 tokenizer.json 文件直接拖放到该文件夹中
cp qwen3_0.6B_model.pte /path/to/Qwen3test/qwen3_model.pte
请耐心等待!这些文件很大,可能需要几分钟

在你的 iPhone 上切换回 etLLM 应用

从应用界面加载模型和分词器

你微调后的 Qwen3 现在已在你的 iPhone 上本地运行!
Android 部署
本指南介绍如何在 Android 设备上构建并安装 ExecuTorch 的 Llama 示例应用(在 Pixel 8 上测试,但也适用于其他 Android 手机),使用 Linux/Mac 命令行环境。该方法将依赖最小化(无需 Android Studio)并将繁重的构建过程放到你的电脑上。
要求
确保你的开发机器已安装以下内容:
Java 17(Java 21 常为默认,但可能导致构建问题)
Git
Wget / Curl
Android 命令行工具 的安装指南
并在你的 android 设备和电脑上设置adb
验证
检查你的 Java 版本是否为 17.x:
如果不匹配,请在 Ubuntu/Debian 上安装:
然后将其设置为默认或导出 JAVA_HOME:
如果你使用的是不同的操作系统或发行版,可能需要参考 本指南 或直接让你喜欢的 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 位置”问题:
创建一个 local.properties 文件以显式告诉 Gradle SDK 所在位置:
修复 cannot find symbol 错误:
当前代码使用了已弃用的方法 getDetailedError()。用下面的命令修补:
第 6 步:构建 APK
此步骤会编译应用及本地库。
导航到 Android 项目:
使用 Gradle 构建(显式将
JAVA_HOME设置为 17 以避免工具链错误):注意:首次运行将需要几分钟时间。
生成的最终 apk 位于:
第 7 步:在你的 Android 设备上安装
你有两种安装应用的选项。
选项 A:使用 ADB(有线/无线)
如果你可以访问你的手机: 并在你的 android 设备和电脑上设置 adb install -r app/build/outputs/apk/debug/app-debug.apk
如果你在远程虚拟机上或没有数据线:
将 app-debug.apk 上传到手机可下载的位置
在手机上下载它
点击安装(如果提示则启用“允许从未知来源安装”)。
第 8 步:传输模型文件
应用需要 .pte 模型和分词器文件。
传输文件:将你的 model.pte 和 tokenizer.bin(或 tokenizer.model)移动到手机存储(例如 Downloads 文件夹)。
打开 LlamaDemo 应用:在手机上启动该应用。
选择模型
点击设置(齿轮图标)或文件选择器。
导航到你的 Downloads 文件夹。
选择你的 .pte 文件。
选择你的分词器文件。
完成!你现在可以在设备上直接与 LLM 聊天。
故障排查
构建失败?检查 java -version。必须为 17。
模型无法加载?确保你同时选择了
和
.pte分词器应用崩溃?有效的.文件必须针对 ExecuTorch 专门导出(通常为 CPU 的 XNNPACK 后端)。
.pte将模型传到你的手机
目前,
executorchllama 我们构建的应用仅支持从 Android 上的一个特定目录加载模型,该目录不幸的是常规文件管理器无法访问。但我们可以使用 adb 将模型文件保存到该目录。 确保 adb 正常运行并已连接
adb devices
或者如果通过数据线连接:

如果你还没有授予电脑访问手机的权限:

那么你需要检查手机上是否有弹出对话框(你可能需要允许)

完成后,就该创建我们需要放置

tokenizer.json .pte 和 文件的文件夹了。 在手机路径上创建该目录。
adb shell mkdir -p /data/local/tmp/llama
adb shell ls -l /data/local/tmp/llama
adb push <path_to_tokenizer.json on your computer> /data/local/tmp/llama

executorchllamademo
应用,然后点击右上角的齿轮图标打开设置。点击 Model 旁的箭头以打开选择器并选择一个模型。 如果你看到一个没有文件名的空白白色对话框,说明你的 ADB 模型推送可能失败——请重做该步骤。另请注意,它最初可能显示“未选择模型”。在你选择模型后,应用应显示模型文件名。
现在对分词器重复相同操作。点击 tokenizer 字段旁的箭头并选择对应文件。


你可能需要根据上传的模型选择模型类型。此处选择的是 Qwen3。

在你选择好两个文件后,点击“Load Model”按钮。

它会带你回到带有聊天窗口的主界面,可能会显示“model loading”。根据你手机的内存和存储速度,加载可能需要几秒钟。

一旦显示“successfully loaded model”,你就可以开始与模型聊天。 瞧,你现在在 Android 手机上原生运行了一个 LLM!

ExecuTorch 为数十亿用户提供动力

📱为数十亿人的设备端机器学习体验提供动力
ExecuTorch 在 Instagram、WhatsApp、Messenger 和 Facebook 上。Instagram Cutouts 使用 ExecuTorch 从照片中提取可编辑的贴纸。在像 Messenger 这样的加密应用中,ExecuTorch 实现了设备端的隐私感知语言识别与翻译。ExecuTorch 支持跨 Apple、Qualcomm、ARM 等十余种硬件后端,且支持 Meta 的 Quest 3 和 Ray Bans 其他模型支持.
所有 Qwen 3 密集模型(
Qwen3-32BQwen3-0.6B, Qwen3-4B, 等) 所有 Gemma 3 模型(
Gemma3-270MGemma3-4B, Gemma3-27B, 所有 Llama 3 模型( 所有 Gemma 3 模型(
Llama 3.1 8BLlama 3.3 70B Instruct, Qwen 2.5、Phi 4 Mini 模型,等等! 所有 Gemma 3 模型(
你可以为 Qwen3-0.6B 自定义
以允许上述任何模型的手机部署! 免费 Colab 笔记本 Qwen3 0.6B 主要手机部署笔记本
适用于 Gemma 3
适用于 Llama 3
页面以查看所有其他笔记本! Unsloth 笔记本 🌵 部署到适用于手机的 Cactus
Cactus
是一个针对移动设备、Mac 以及 Raspberry Pi 等 ARM 芯片的开源推理引擎。 在 INT8 下,Cactus 可运行
LFM2-1.2B
Qwen3-0.6B和以60-70 toks/sec的速度在 iPhone 17 Pro 上,在预算型 Pixel 6a 上为13-18 toks/sec。针对特定任务的 INT8 微调(Task-Specific INT8)对
Gemma3-270m达到了150 toks/sec在 iPhone 17 Pro 上,以及23 toks/sec在 Raspberry Pi 上。
快速开始
1. 训练(Google Colab / GPU)
使用提供的笔记本或你自己的 Unsloth 训练脚本:
2. 设置 Cactus

3. 为 Cactus 转换

4. 运行
在 Mac 上测试你的模型:

5. 在 iOS/macOS 应用中使用
构建本机库:
链接 cactus-ios.xcframework 到你的 Xcode 项目,然后:
现在你可以使用以下代码构建 iOS 应用,但要在测试时查看任何设备上的性能,请将任意 iPhone 插入你的 Mac,然后运行 cactus 测试:
Cactus 演示应用最终会扩展为使用你自定义的微调模型。此外, cactus run 将允许插入手机,使交互会话使用手机芯片,这样你可以在完全构建应用之前进行测试。
6. 在 Android 应用中使用
构建本机库:
复制 libcactus.so 到 app/src/main/jniLibs/arm64-v8a/,然后:
现在你可以使用以下代码构建 Android 应用,但要在测试时查看任何设备上的性能,请将任意 Android 手机插入你的 Mac,然后运行 cactus 测试:
Cactus 演示应用最终会扩展为使用你自定义的微调模型。此外, cactus run 将允许插入手机,使交互会话使用手机芯片,这样你可以在完全构建应用之前进行测试。

资源
支持的基础模型:
Qwen3、Gemma3、LFM2、SmolLM2完整 API 参考: Cactus 引擎
最后更新于
这有帮助吗?

