边缘AI部署实践:让大模型跑在手机和IoT设备上
为什么需要边缘AI? 云计算解决了大规模AI部署问题,但很多场景无法依赖云端: 隐私要求:医疗、金融数据不能上云 延迟要求:自动驾驶、实时翻译需要毫秒级响应 离线场景:野外、飞机模式、网络不稳定 成本控制:大量设备同时运行,云推理成本不可控 边缘AI的目标:在手机、车载芯片、IoT设备上本地运行AI模型。 模型压缩四件套 1. 量化 将模型从FP32压缩到INT8/INT4: 精度 模型大小(7B) 精度损失 推理速度 FP16 14GB 0% 基准 INT8 7GB <1% 1.5-2x INT4 3.5GB 1-3% 2-3x 2-bit 1.75GB 5-10% 3-4x 移动端推荐INT4量化,使用GGUF格式(llama.cpp生态)。常用方案: GPTQ:基于二阶信息的权重量化 AWQ:基于激活分布的权重量化 GGUF Q4_K_M:移动端最常用格式 2. 蒸馏 将大模型知识"蒸馏"到小模型: Teacher模型(70B) → 生成回答/中间表示 → Student模型(1B)学习 任务特定蒸馏:只蒸馏目标任务的能力,而非通用能力。效果通常比直接训练小模型好20-30%。 3. 剪枝 移除不重要的参数: 结构化剪枝:移除整个attention head或MLP中间维度,可实际加速 非结构化剪枝:移除稀疏参数,需特殊硬件支持 移动端推荐结构化剪枝,因为标准硬件就能获得加速。 4. 架构搜索(NAS) 针对特定硬件搜索最优模型结构: 确定目标硬件的延迟/功耗预算 搜索满足约束的最高精度模型 MobileNet、EfficientNet就是NAS的经典成果 移动端推理引擎 llama.cpp C++实现,无依赖 支持GGUF格式 iOS/Android均可运行 支持CPU推理和GPU加速 典型使用: 1. 将模型量化为GGUF格式 2. 编译llama.cpp for Android/iOS 3. 通过JNI或C API调用 4. 管理上下文窗口和内存 MLC-LLM 基于TVM编译器 自动优化模型到目标硬件 支持GPU加速(Metal/Vulkan) 跨平台:iOS/Android/Web ONNX Runtime Mobile 微软出品,支持ONNX格式 Android/iOS支持完整 包体积极小(<10MB运行时) 支持NNAPI/CoreML后端加速 平台原生方案 iOS:CoreML + MLX Android:ML Kit + NNAPI 华为:CANN + NPU 端侧部署实战 iOS部署 // 使用MLX框架运行LLM import MLX import MLXLMCommon let model = try await loadModel(name: "qwen-2-1.5b-4bit") let result = try await model.generate( prompt: "你好", maxTokens: 256 ) 关键配置: ...