深度学习模型距离实际的应用往往还十分遥远,选择合适的工具进行开发、部署和测试十分重要,这份面向互联网产品经理和开发者的技术指南,可以帮助你寻找到合适的解决方案。
众所周知,深度学习模型仅仅只是构建 AI 产品的重要步骤,但并不是全部。一个互联网产品(如 APP)想要集成深度学习能力,往往还需要走完很多设计、开发和测试方面的工作。如何部署深度学习往往成为了系统设计中更关键的问题。
近日,GitHub 上有这样一个项目,专门介绍了如何将深度学习算法和模型融入到互联网产品中。项目基本以流程、架构图为主,目前仍在完善中,适合产品经理和开发者学习。
项目地址:https://github.com/alirezadir/Production-Level-Deep-Learning
训练深度学习模型不及在生产阶段部署算法模型那样困难。如图所示,模型仅仅只是整个系统中的一部分。在深度学习模型之前,有配置、服务基础设施、数据获取、特征抽取等步骤,而在其之后则有数据验证、分析、监控、流程管理和机器资源管理等。生产级别的深度学习应用非常复杂。
而涉及这些环节的程序、应用、工具和硬件则更加复杂多样,因此需要遵循特定的流程和步骤,选择合适的工具进行项目。
为了介绍必要的产品构建流程,项目作者将其分为多个部分,包括数据管理、开发训练评估、测试等步骤。
数据管理是产品级深度学习应用需要解决的第一个问题。选择合适的工具,可以保证模型获得稳定、标注正确、平衡的数据。
怎样获取数据?这是一个常见的问题。通常有以下三种方法:
使用公开数据——刚开始构建产品的时候可以使用;
数据增强,如图像数据的旋转裁剪等;
合成数据;
正确的数据标注对模型的影响非常大,会影响着整个应用的性能。
标注数据的工作可以交给人工进行,或使用标注平台辅助。
数据存储则需要选择合适服务器和数据库,方便业务使用。 Aamzon S3
Ceph Object Store
FEAST:基于谷歌云,目前已开源;
Michelangelo:Uber 的开源平台;
DVC:开源的机器学习版本控制工具;
Pachyderm:数据版本控制;
Dolt:SQL 数据库的版本控制;
在这一阶段,项目开发者需要选择合适的工具,对深度学习模型、应用框架等进行开发。
Vim
Emacs
VS Code (https://code.visualstudio.com/)
有着内置的 git 和 diff 工具,可以通过 ssh 远程打开项目;
Jupyter Notebook:适合项目的开始阶段,但是扩展较困难;
Streamlit:交互式数据科学工具;
资源管理
集群任务管理系统(如 Slurm);
Docker + Kubernetes;
Kubeflow;
Polyaxon (付费版本)。
调参
调参则是很重要的一个步骤,能让模型发挥更好的效果。
Hyperas:Keras 的超参数算子的简单封装,能够提供一个超参范围供开发者调整;
SIGOPT :可扩展的企业级优化平台;
Ray-Tune:可扩展的研究平台,能够进行分布式模型选择(主要关注深度学习和深度强化学习);
Sweeps from Weights & Biases:参数不会被开发者显式地定义,而是通过一个机器学习模型进行拟合和学习。
与传统软件相比,机器学习生产软件需要更加多样化的测试套件:训练系统测试:测试训练管道;
验证测试:测试验证集上的预测系统;
功能测试:
在少数重要的示例上测试预测系统。
预测系统:处理输入数据和进行预测
服务系统(网络服务器):
为预测考虑规模;
使用 REST API 来预测 HTTP 请求;
调用预测系统做出响应。
将代码部署为「无服务器函数」;
通过模型服务解决方案进行部署。
CPU 推理
如果满足需求,则最好选择 CPU 推理;
通过添加更多服务器或选择无服务器来实现扩展。
TF 服务或 Clipper;
自适应批处理是有用的。
目的:防止宕机、错误等;
捕捉服务和数据恶化的问题;
测试云供应商的解决方案是否有效。
在嵌入和移动设备上部署
量化
缩减模型大小(MobileNets)
知识蒸馏(DistillBERT)
Tensorflow Lite
PyTorch Mobile
Core ML
ML Kit
FRITZ
OpenVINO
一体化解决方案
在这里,作者提供了一张对比图,用于说明不同的技术选型的优劣势。「WAIC 开发者·临港人工智能开发者大会」将于 2019 年 12 月 6 日-7 日在上海临港举办。本次大会设有主题演讲、开发者工作坊、开发者挑战赛、技术和产业闭门研讨会等环节。邀请全球AI开发者在现场:听前沿理论+学实战干货+动手挑战赛。点击阅读原文,立即报名。