淘宝端智能探索和实践

微风

2019/03/24 发布于 技术 分类

文字内容
1. 淘宝端智能探索和实践 吕⾏行行 2018.10
3. ⾃自我介绍 • 吕承⻜飞(花名:吕⾏行行) • 2011~2013 百度 • • 2013~2017 淘宝 • • 百度越狱输⼊入法iOS开发 ⼿手淘iOS开发=>iOS架构=> iOS架构负责⼈人 2017~现在 淘宝 • 淘宝端智能负责⼈人 3
4. 分享内容 1.背景介绍 2.系统模块 3.个⼈人感想 4
5. 分享内容 1.背景介绍 2.系统模块 3.个⼈人感想 5
6. 端智能应⽤用示例例 ⼈人脸贴纸@电流 顶球@优酷 拍⽴立淘@⼿手淘 试妆@⼿手淘 6
7. 端智能&优势 云上AI 端上AI 优势 模型 训练 预测 推理理 ⽹网络模型 在端侧做推理理预测,⽬目前不不做训练 实时性 个性化 数据 隐私 离线 服务 7
8. 应⽤用场景 ⼿手机 本地翻译 降噪 OCR 个⼈人助⼿手 AI摄影 AI图⽚片编辑 相册分类 3D⼈人脸表情 AI提升性能 App 安全⻛风控 短视频/直播 特效 AI⼿手机 互动活动 拍⽴立淘 个性化推荐 试妆试⽤用 端智能:提升⽤用户体验,带来新能⼒力力 8
9. 业界趋势 AI芯⽚片 …… FB Caffe2 ⾕谷歌 TF-Lite 苹果 CoreML Android NNAPI 腾讯 NCNN 百度 MDL/ Anakin ⼩小⽶米 MACE 华为 HiAI AI框架 判断 1、端智能已成为趋势,各⼤大公司积极布局AI芯⽚片和AI框架; 2、端智能已在⼿手机和App中发挥巨⼤大价值,未来可期; 3、⼿手机摄像,短视频特效,端计算,IOT智能硬件是重点应⽤用⽅方向; 9
10. 分享内容 1.背景介绍 2.系统模块 3.个⼈人感想 10
11. 端智能应⽤用⾯面临的问题 在端上做深度学习算法的应⽤用,需要解决哪些核⼼心问题? • • • • • • • 如何训练适合在端上使⽤用的算法模型? 如何解决深度模型⽂文件过⼤大问题? 如何解决端侧模型推理理问题?需要⼀一个深度推理理框架? 如何解决深度模型部署更更新问题? 如何解决部署后的模型安全问题? 如何解决端上计算⼒力力有限情况下的性能问题? ……
12. 端智能⼯工作流程 模型训练 算法设计模型训练 • 训练框架:Tensorflow/Caffe/Caffe2 云端⼀一体化AI服务体系 云 模型压缩 模型发布 端 推理理预测 端侧 AI 服务流程 模型压缩平台 模型管理理下发度量量平台 端侧AI推理理框架 模型压缩平台 • 模型裁剪 • 模型量量化编码 • 模型准确度评测 模型管理理下发度量量平台 • 常⽤用模型管理理 • 模型转换⼯工具链 • 模型端侧更更新交互 • 模型端侧效果性能评估 端侧AI推理理框架 • 多种⽹网络格式⽀支持 • 多种⽹网络模型⽀支持 • 异构设备加速优化 • 性能和质量量评测 12
13. 模型压缩平台 模型压缩 基础版本 ⾼高级版本 ⽅方案 ⽀支持TF/TF-Lite量量化模型/直接量量化⼯工具 低精度计算(8bits/3bits)/剪枝/稀疏 优势 ⻔门槛低,对算法透明 压缩率⾼高,基本⽆无精度损失 不不⾜足 压缩率低,精度有⼀一定下降 对算法不不透明,修改框架,重新训练 iDST团队 AAAI 2018 ,https://arxiv.org/pdf/1707.09870.pdf 《Extremely Low Bit Neural Network: Squeeze the Last Bit Out with ADMM》 13
14. 模型压缩平台 输⼊入 服务平台 1 需训练的量量化⽅方式 • • • 模型⽂文件V1 训练数据集 测试数据集T1 输出 模型压缩和评测平台 模型量量化训练 (finetune) 模型⽂文件V2 1.量量化后模型V2 • • ⼯工程师 训练数据集 模型评测 2.评测报告 • 2 ⽆无需训练的量量化⽅方式 • • 模型直接量量化 测试数据集T1 通⽤用格式(Caffe) AliNN格式 • 精度损失情况 模型压缩倍数 模型⽂文件V1 测试数据集T1 int8量量化流程 14
15. 模型管理理下发度量量平台 模型管理理 发布管理理 模型转换 版本管理理 模型列列表 版本详情 模型详情 模型发布cdn 发布 单 灰 A 回 发 机 度 B 滚 布 数据度量量 发布度量量 成功率 异常 模型度量量 推理理耗时 内存消耗 成功率 使⽤用统计 15
16. 端侧推理理框架 端侧推理理框架 ⼯工作流程 Model Model Model ⼈人脸检测 核⼼心指标 加载运⾏行行 模型解析 • 调度运⾏行行 通⽤用性 • 轻量量性 • ⾼高性能 • 安全性 • 易易⽤用性 Layer(OP)实现 异构加速 (CPU/GPU/DSP/NPU) 16
17. 端侧推理理框架-挑战 设备资源局限性 • • • 计算能⼒力力有限 系统资源有限(内存) 电量量有限 性能挑战 • • • 推理理预测的速度 运⾏行行时的资源占⽤用 能耗问题 设备资源 模型挑战 • • 问题 性能挑战 模型⽂文件 • 适配挑战 多种模型格式问题 模型⽂文件⼤大⼩小问题 模型安全问题 适配挑战 • • • 设备差异性 系统差异性 模型差异性 17
18. 端侧推理理框架-其他选择 NN API ⽣生态隔离 • 不不同模型格式 • 模型转换困难 • ⽀支持OP和Layer不不同 起步阶段 • 性能优化不不够充分 • 功能⽀支持不不充分(OP有限) 包⼤大⼩小 • TensorflowLite iOS arm64 9MB/2.6MB • Caffe2 iOS arm64 190MB/12MB 开源⽅方案 CoreML 存在问题 • 设备,系统局限性(iOS 11 ,Android 8.1) • ⽀支持有限⽹网络模型 • ⽹网络模型安全性 系统⽅方案 找不不到⼀一套⾯面向不不同训练框架,不不同部署环境,简单⾼高效安全的端侧推理理框架。 18
19. 端侧推理理框架-我们的选择AliNN 统⼀一部署 抹平不不同设备,不不同系统,不不 同⽹网络模型差异,实现统⼀一快 捷部署服务。 简单 异构设备 优化 针对不不同设备,不不同系统进⾏行行 CPU/GPU/NPU运⾏行行加速优化, 以及系统资源使⽤用优化。 ⾼高效 模型安全 通过⾃自定义⼆二进制格式,⾃自定 义推理理框架以及其他安全措施 保证模型不不被盗⽤用。 安全 提供⾯面向不不同业务算法场景,不不同训练框架,不不同部署环境的简单、⾼高效、安全 的端侧算法框架AliNN 19
20. AliNN完整体系 云端平台 模型量量化 模型编译 模型评测 接⼊入授权 模型转换 模型管理理 监控⼤大盘 模型下发 算法模型 TensorFlow/TF-Lite Caffe AliNNKit ⼈人脸检测 AliNN AliNN Model Convert AliNN IR(Flatbuffer) …… 多媒体处理理基础库 运⾏行行调度 推理理运⾏行行 OP实现 & OP优化(CPU/GPU/DSP/NPU) 系统AI 框架层 CoreML AliNN IR Optimizer AliNNCompiler 系统库 Accelerate AliNN Model AliNN exe/lib 设备层 CPU AliNNConvert&AliNNCompiler Pose/⼿手势 模型管理理和更更新 模型解析 AliNN模型转换&编译 OCR Android NNAPI 华为HiAI Metal/OpenCL 算⼦子库 GPU DSP / NPU AliNN&AliNNKit 站在前⼈人基础之上,感谢Caffe/TF/TF-Lite/NCNN/MACE/TVM等开源框架,同样AliNN后续也有开源计划。 20
21. AliNN 模块关系 运⾏行行时 TensorFlow Model /Caffe Model 02 04 Net AliNN Model Convert 加载模型 AliNN Model File (xxx.alinn) TF/Caffe/Caffe2 Model Parser Convert to AliNN IR AliNN Engine 1:N Session 01 Schdeule AliNN IR AliNN IR Optimizer Net/OP/Parameter Format Backends(CPU / OpenCL / Metal / Open) Flatbuffer AliNN Model File (xxx.alinn) OP Executors 03 AliNN Model Compiler 部署运⾏行行 AliNN Model Parser AliNN Model Exe/Lib CPU GPU DSP / NPU Convert AliNN IR to LLVM IR (Call OP) ✦ Obfuscator & OPT 核⼼心模块 • 1、AliNNIRProto, AliNN模型格式定义,存取模块 • 2、AliNNModelConvert,AliNN模型转换,具体分caffe2Alinn/tf2Alinn/alinnOptimizor/ • alinnDump2Json 3、AliNNModelCompiler ,AliNN模型编译器器,将模型转换成可执⾏行行⽂文件或者对应库 • 4、AliNN,AliNN运⾏行行时引擎,负责加载模型推理理执⾏行行 21
22. AliNN 模型编译器器 AliNN模型⽂文件 推理理引擎 未来:⽀支持OP跨平台代 码⽣生成,提升OP扩展效率 (AliNN) AliNN 模型编译器器 AliNN Model Parser 加载 运⾏行行 更更安全部署 Convert AliNN IR to LLVM IR (Call OP) Obfuscator & OPT LLVM 模型⽂文件(.alinn) (eg:⼈人脸检测) 引擎和模型隔离 AliNN 模型可执⾏行行⽂文件 X86 链接 OP 推理理引擎 arm 22
23. AliNN 性能优化思路路 转换⼯工具 层融合/层转换 模型优化 剪枝/量量化/蒸馏 线下环境 性能优化 内存 运⾏行行时环境 计算加速 内存布局(NCoHWCi(4)) 内存复⽤用 汇编优化 多线程 Winograd 量量化/稀疏 GPU优化 23
24. NCHW vs NCoHWCi(4)内存布局 Input(FeatureMap) 0 5 10 15 20 1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24 Output Kernel * 4(C)x5(h)x5(w) => 5(Co)x4(Ci)x3(Kh)x3(Kw) NCoHWCi(4) NCHW 将C部分拆解为Co和Ci(始终4,因为向量量指令(vmla.f32) ) Ci=4,Co=Ceil(C/4) W=5 C0 0 1 2 …… 3 4 H=5 C1 1 2 …… 3 4 H=5 20 21 22 23 24 0 C2 1 2 …… 3 4 Co=1 H=5 20 21 22 23 24 C3 0 1 2 …… 3 4 20 21 22 23 24 W=5 Ci=4 Ci=4 Ci=4 20 21 22 23 24 0 5(C)x5(h)x5(w) Ci=4 Ci=4 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9 10 10 10 10 11 11 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15 15 15 16 16 16 16 17 17 17 17 18 18 18 18 19 19 19 19 20 20 20 20 21 21 21 21 22 22 22 22 23 3 23 23 24 24 24 24 H=5 H=5 24
25. NCHW内存布局问题 5(C)x5(h)x5(w) 0 1 0 1 3 4 5 6 6 7 10 11 2 2 3 4 5 7 8 9 8 12 13 14 15 16 17 18 19 20 21 22 23 24 NCHW布局 C0 C1 W=5 0 1 2 …… 3 4 20 21 22 23 24 0 1 2 3 …… 4 20 21 22 23 24 C2 0 1 2 3 …… C3 1 2 3 …… C4 1 2 3 …… H=5 4 20 21 22 23 24 0 H=5 4 20 21 22 23 24 0 H=5 H=5 4 20 21 22 23 24 H=5 for (int c = 0; c < channel; c++) { for (int h = 0; h < height; h++) { int w = -pad; for (; w + 3 < width; w += stride) { if (is_pad) { // 存在pad时,若kernel > 1,⽆无法使⽤用SIMD连续读取 continue; } // dilation > 4时,NCHW⽆无法有效处理理 … = vld4q_f32(in + c * width * height + h * width + w); } // end w * 4 for (; w < width; w += stride) { // ⽆无法SIMD的边界 if (!pad) { … = in[c * width * height + h * width + w]; } } // end w } // end h } // end c 25
26. AliNN NCoHWCi(4)内存布局 0 5(C)x5(h)x5(w) 1 2 3 int slice = (channel + 3) / 4; for (int z = 0; z < slice; z++) { for (int h = 0; h < height; h++) { int w = -pad; for (; w < width; w += stride) { if (pad) { float32x4 value = 0; ... = } else { // 不不论pad/stride/dilation怎么变,总是可以⼀一次处理理4个值 // 缺点——channel⾮非4对⻬齐,空余部分是计算浪费 float32x4 value = vld1q_f32(in + c * width * height + h * width + w); ... vst1q_f32(out + c * width * height + h * width + w, value); } } // end w Ci=4 } // end h } // end c 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 NCoHWCi(4) Ci=4,Co=Ceil(5/4)=2 W=5 Ci=4 Ci=4 0 Co 0 0 0 …… 0 20 20 20 20 Co 1 0 0 0 …… 20 0 0 1 1 1 …… Ci=4 1 21 21 21 21 0 1 0 0 …… 0 21 0 0 0 0 2 2 2 …… Ci=4 2 3 3 3 …… 3 4 4 4 …… 4 H=5 22 22 22 22 23 23 23 23 24 24 24 24 2 0 3 0 23 0 0 0 …… 22 0 0 0 0 …… 0 0 4 0 0 …… 0 24 0 0 0 0 H=5 26
27. AliNN NCoHWCi(4) 计算过程示例例 Kernel Input(FeatureMap) A B G R 0 1 2 3 Y3 Y2 Y1 Y0 => * X0 4(C)x2(h)x2(w) 普通滑窗计算 Out0 = Output X1 X2 0 1 0 1 0 1 2 3 2 3 2 3 Out0 Out1 Out2 3(C)x2(h)x2(w) 3(C)x1(h)x1(w) [ , , R0*X0Y0+G0*X0Y1+B0*X0Y2+A0*X0Y3 R2*X0Y0+G2*X0Y1+B2*X0Y2+A2*X0Y3 R1*X0Y0+G1*X0Y1+B1*X0Y2+A1*X0Y3 R3*X0Y0+G3*X0Y1+B3*X0Y2+A3*X0Y3 ] Ci=4 NCoHWCi(4)内存布局 NCoHWCi(4)计算过程 Co=1 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 0 0 0 0 Kernel (按输出通道16个⼀一组) x0y0 x1y0 x2Y0 0 x0y1 x1y1 x2Y1 0 x0y2 x1y2 x2Y2 0 X0y3 x1y3 x2Y3 0 x0y0 x1y0 x2Y0 0 x0y1 x1y1 x2Y1 0 x0y2 x1y2 x2Y2 0 X0y3 x1y3 x2Y3 0 Out 0 0 = 0 0 0 0 Out 1 0= Out 2 0= Out 3 0 ⽆无效 R0*X0Y0 R0*X1Y0 R0*X2Y0 R0*0 G0*X0Y1 G0*X1Y1 G0*X2Y1 G0*0 B0*X0Y2 B0*X1Y2 B0*X2Y2 B0*0 A0*X0Y3 A0*X1Y3 A0*X2Y3 A0*0 27
28. AliNN和业界框架对⽐比 28
29. AliNN性能 MobileNetV1.0 SqueezeNetV1.1 MobileNet和SqueezeNet的AliNN性能 50 43.05 耗时(ms) 41.36 34.79 37.5 26.53 23.49 25 14.66 8.51 12.5 0 iPhone6P 耗时(ms) 50 62.97 40.87 49.19 57.86 51.65 25 0 MACE NCNN TFLite Mate8 Squeezet v1.1,⼩小⽶米Note3,AliNN与 MACE/NCNN性能⽐比较 35.99 37.5 25 arm v7a 32位 arm v8a 64位 47.64 50 85.49 36.22 AliNN arm v7a 32位 arm v8a 64位 耗时(ms) 95.72 100 ⼩小⽶米5 iPhoneX MobileNet_V1.0,⼩小⽶米Note3,AliNN与 TFLite/MACE/NCNN性能⽐比较 75 21.68 24.06 32.77 29.66 23.26 12.5 0 AliNN MACE NCNN MACE/NCNN/TFLite数据来源于 10⽉15⽇ https://gitlab.com/llhe/mobile-ai-bench/-/jobs/10792324529
30. 端智能应⽤用 两⼤大核⼼心应⽤用领域 如何在⾃自⼰己业务场景应⽤用端智能? 业务出发 视觉 数据 ⼈人脸/⼿手势/⻣骨骼/分 割/物体识别 搜索推荐等场景 + 理理解端智 能 两个核⼼心问题 • 如何解决算法模型问题? • 如何解决AI推理理框架问题? 30
31. 分享内容 1.背景介绍 2.系统模块 3.个⼈人感想 31
32. 个⼈人感想 移动互联⽹网下半场出路路? 效率 体验 过去做什什么? 效率/体验 新业务 新技术 ? 未来还可以做什什么? 32
33. 个⼈人感想 突破⾃自⼰己 总有舒适区/瓶颈期时 候,关键是突破⾃自⼰己。 怎么过去 不不确定性 因为相信,所以看⻅见, 关键怎么过去。 不不确定性是对⼈人的最⼤大挑 战和锻炼。 33
36. 谢谢,FAQ! 更更多技术⼲干货解读 请关注淘宝技术微信公众号 36