Back to blog
    Llama 3.2移动应用: 微调与端侧部署
    LlamaMetafine-tuningmobile AIGGUFLoRAsegment:mobile-builder

    Llama 3.2移动应用: 微调与端侧部署

    使用Meta Llama 3.2 1B和3B模型构建移动应用的完整指南。涵盖LoRA微调、GGUF导出以及通过llama.cpp在iOS和Android上的部署。

    EErtas Team·

    Meta的Llama 3.2包含专为移动端和边缘部署设计的1B和3B模型。这些并非缩小版的附属品,而是专门为端侧推理构建的模型,从更大的Llama 3.1模型蒸馏而来,在适合移动内存预算的同时保留了核心能力。

    本指南涵盖完整流程: 选择合适的尺寸、在你的数据上微调、导出为GGUF,以及在iOS和Android上部署。

    为什么选择Llama 3.2用于移动端

    Llama 3.2 1B和3B在移动端部署方面具有几个优势:

    为移动端而设计: 不同于将大模型压缩的做法,这些模型从一开始就考虑了移动端的限制。架构针对有限硬件上的快速推理进行了优化。

    强大的基础能力: 使用9万亿tokens训练。3B模型在MMLU上得分63.4,在IFEval(指令遵循)上得分77.4,与仅一年前2-3倍大小的模型相当。

    最大的生态系统: Llama拥有开放模型家族中最大的社区。比任何替代方案都有更多的微调指南、GGUF转换、工具支持和生产部署案例。

    128K上下文: 1B和3B都支持128K token上下文窗口。在移动端,你很少会用到超过2-4K,但在需要时长上下文就在那里。

    选择1B还是3B

    因素1B3B
    GGUF Q4大小约600MB约1.7GB
    推理时内存约800MB约2.2GB
    设备覆盖4GB+ (90%的手机)6GB+ (65%的手机)
    生成速度 (旗舰机)35-50 tok/s18-30 tok/s
    分类准确率 (微调后)90-94%93-96%
    对话质量 (微调后)适合短回复适合多轮对话
    摘要能力够用良好

    选择1B当: 你的任务是分类、标注、自动补全、智能建议或短文本生成。你需要最大的设备覆盖率。

    选择3B当: 你的任务是对话聊天、摘要、内容起草或复杂指令遵循。你的用户拥有较新的设备。

    使用LoRA进行微调

    LoRA(低秩自适应)是移动模型的标准微调方法。LoRA不修改所有模型权重,而是训练小型适配器矩阵来调整模型行为。适配器大小为50-200MB,在GGUF导出前合并到基础模型中。

    训练数据格式

    Llama 3.2使用特定的聊天模板。你的训练数据应遵循以下格式:

    {
      "messages": [
        {"role": "system", "content": "You are a travel assistant for TripHelper app."},
        {"role": "user", "content": "What's the best time to visit Kyoto?"},
        {"role": "assistant", "content": "March-April for cherry blossoms or November for autumn foliage. Both are peak seasons, so book 2-3 months ahead."}
      ]
    }

    每个训练样本是一段对话。如果你的应用使用系统提示词,就包含它。如果你的功能是对话式的,就包含多轮对话样本。

    数据需求

    任务最少样本数推荐数量训练时间 (LoRA)
    分类200500-1,00015-30分钟
    短问答3001,000-2,00030-60分钟
    聊天5002,000-5,0001-3小时
    摘要3001,000-3,0001-2小时

    LoRA超参数

    Llama 3.2移动端微调的标准设置:

    参数1B3B
    LoRA秩 (r)16-3216-64
    LoRA alpha32-6432-128
    学习率2e-41e-4
    训练轮次3-52-4
    批次大小4-82-4
    目标模块q_proj, v_proj, k_proj, o_proj相同

    更高的秩可以捕获更多领域特定知识,但会增加适配器大小和训练时间。对于大多数移动端用例,秩16-32就足够了。

    导出为GGUF

    训练完成后,流程如下:

    1. 将LoRA适配器合并到基础模型权重中
    2. 转换为GGUF格式
    3. 量化为Q4_K_M(或你的目标级别)
    4. 在评估集上验证量化模型

    GGUF文件是你最终发送到设备的制品。它包含完整模型,存储在单个文件中,llama.cpp可以直接加载。

    Ertas等平台可以端到端处理:

    上传训练数据,选择Llama 3.2 1B或3B作为基础模型,配置LoRA参数(或使用默认值),在云GPU上训练,直接导出为GGUF。无需命令行工具、GPU配置或转换脚本。

    在iOS上部署

    集成llama.cpp

    通过Swift Package Manager或编译好的框架将llama.cpp添加到你的iOS项目中。加载GGUF模型并运行推理:

    import llama
    
    let modelPath = Bundle.main.path(forResource: "model", ofType: "gguf")!
    let params = llama_model_default_params()
    let model = llama_load_model_from_file(modelPath, params)
    
    // 配置推理
    var contextParams = llama_context_default_params()
    contextParams.n_ctx = 2048
    contextParams.n_threads = 4
    let context = llama_new_context_with_model(model, contextParams)

    Metal GPU加速

    llama.cpp在iOS上自动使用Metal进行GPU加速推理。将n_gpu_layers设置为模型的总层数,将所有计算卸载到GPU:

    var modelParams = llama_model_default_params()
    modelParams.n_gpu_layers = 32 // 将所有层卸载到Metal

    这在近期的llama.cpp构建中默认启用,相比纯CPU推理可提供30-50%的速度提升。

    在Android上部署

    集成llama.android

    使用llama.cpp项目中的llama.android库。它通过JNI提供Kotlin绑定:

    val model = LlamaModel()
    model.load(modelPath, nThreads = 4, nGpuLayers = 32)
    
    // 流式生成
    model.generate(prompt) { token ->
        runOnUiThread { appendToUI(token) }
    }

    Vulkan GPU加速

    在Android上,llama.cpp支持Vulkan GPU加速,适用于Snapdragon、Tensor等芯片组。通过将nGpuLayers设置为模型的层数来启用。

    许可证

    Llama 3.2使用Meta的Llama社区许可协议。要点如下:

    • 商业使用: 允许
    • 修改: 允许(包括微调)
    • 分发: 允许
    • 7亿MAU门槛: 如果你的产品或服务月活跃用户超过7亿,需要从Meta获得特殊许可
    • 署名: 需要

    对于绝大多数移动应用,该许可证完全开放。7亿MAU条款仅适用于最大型的平台。

    端到端时间线

    步骤时长备注
    准备训练数据1-5天取决于数据可用性
    使用LoRA微调30分钟 - 3小时依赖GPU,推荐云端训练
    导出为GGUF10-30分钟大多数平台已自动化
    集成llama.cpp1-2天一次性配置
    测试和评估1-3天在目标设备上测试
    总计3-10天首次部署; 后续迭代更快

    首次部署耗时最长,因为需要集成llama.cpp。之后,模型更新(重新训练、重新导出GGUF)只需数小时,而非数天。

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Keep reading