深度学习项目的生产级架构:测试部署模块
在生产中部署深度学习模型工作远远超过了训练性能良好模型的工作,为了部署生产级深度学习系统,需要设计和开发不同的模块,如下所示。

下图是生产级深度学习系统中不同模块的高级概述。

下面我们将介绍测试部署模块。
1 测试和 CI/CD
与传统软件相比,机器学习产品需要一套更多样化的测试套件:

1.1 单元和集成测试
测试类型:
-
训练测试:测试训练管道
-
验证测试:在验证集上测试预测系统
-
功能测试:在几个重要示例上测试预测系统
1.2 持续集成测试
在每个新代码更改推送到存储库后运行测试
1.3 SaaS:持续集成测试
-
Argo:开源Kubernetes本机工作流引擎,用于协调并行作业(包括工作流,事件,CI和CD)。
-
CircleCI:instacart,Lyft和StackShare使用的语言包容性支持,自定义环境,灵活的资源分配。
-
Buildkite:快速而稳定的构建,开源代理几乎可以在任何机器和架构上运行,可以自由使用自己的工具和服务
-
Jenkins:老派构建系统
2 Web 部署
2.1 由预测系统和服务系统组成
-
预测系统:处理输入数据,进行预测
-
服务系统(Web 服务器):考虑预测时提供预测;使用REST API服务预测HTTP请求;调用预测系统进行响应。
2.2 服务选项:
-
部署到VM,通过添加实例进行扩展
-
部署为容器,根据业务流程扩展
1.Docker
2.Kubernetes(现在最受欢迎)、MESOS、Marathon -
将代码部署为“无服务器功能”
-
通过模型服务解决方案进行部署
2.3 模型服务:
-
专业的 ML 模型 Web 部署
-
批量请求GPU推理
-
框架:
1.Tensorflow 服务
2.MXNet 模型服务
3.Clipper
4.SaaS 解决方案:Seldon 和 Algorithmia
2.4 决策:CPU还是GPU?
-
CPU 预测:如果满足要求,则最好使用CPU预测;通过添加更多服务器或无服务器来进行扩展。
-
GPU 预测:TF服务;自适应批处理很有用。
2.5 Jupyter Notebook 部署:
Kubeflow Fairing 是一个混合部署程序包,可让您部署Jupyter Notebook代码!
3 监控
-
监控目的:发出停机,错误和分布变化告警;捕获服务和数据回归
-
采用云服务商的解决方案
-
Kiali:具有服务网格配置功能的可观察控制台。它回答了以下问题:微服务如何连接?他们的表现如何?

4 在嵌入式和移动设备上部署
-
主要挑战:内存占用量和计算约束
-
解决方案:
1.量化
2.缩小模型尺寸:MobileNet
3.知识蒸馏:DistillBERT(用于NLP) -
嵌入式和移动框架:
1.Tensorflow Lite
2.PyTorch Mobile
3.Core ML
4.ML Kit
5.FRITZ
6.OpenVINO -
模型转换:开放式神经网络交换(ONNX):深度学习模型的开源格式
5 All-in-one 解决方案
-
Tensorflow Extended (TFX)
-
Michelangelo (Uber)
-
Google Cloud AI Platform
-
Amazon SageMaker
-
Neptune
-
FLOYD
-
Paperspace
-
Determined AI
-
Domino data lab
