在生产中部署深度学习模型工作远远超过了训练性能良好模型的工作,为了部署生产级深度学习系统,需要设计和开发不同的模块,如下所示。
deep_learning_deploying_01.png下图是生产级深度学习系统中不同模块的高级概述。
deep_learning_deploying_02.png下面我们将介绍开发训练评估模块。
1 软件工程部分
深度学习项目的优选开发语言:Python,常用的编辑器有:
- Vim
- Emacs
- VS Code(推荐):内置 git 暂存和 diff,Lint代码,可通过 ssh 远程打开项目
- Notebooks:适合项目开始时使用,难扩展:
1.nteract:下一代基于React的UI,适用于 Jupyter Notebook
2.Papermill:是一个 nteract 库,用于参数化,执行和分析 Jupyter Notebook
3.Commuter:是一个nteract 项目,它提供笔记本的只读显示(例如,来自S3)。 - Streamlit:具有小程序的交互式数据科学工具
计算资源建议:
- 对于个人或初创企业:
- 开发:4x 的图灵架构 PC
- 训练/评估:使用同一台 4x GPU PC。运行许多实验时,请购买共享服务器或使用云实例。
- 对于大公司:
- 开发:每位 ML 科学家购买 4x 图灵架构 PC 或让他们使用 v100 实例
- 训练/评估:使用云实例进行正确的配置和故障处理
云服务提供商有:
- GCP:将 GPU 连接到任何实例的选项 + 具有 TPU
- AWS:
2 资源管理部分
将免费资源分配给程序,资源管理可以选择:
3 深度学习框架部分
除非有充分的理由,否则请使用Tensorflow / Keras或PyTorch。下图显示了不同框架在发展和生产方面的比较。
deep_learning_deploying_03.png4 实验管理部分
开发,训练和评估策略:
- 总是从简单开始:小批量训练小模型。只有在可行的情况下,才能扩展到更大的数据和模型,并进行超参数调整!
- 实验管理工具:
- Tensorboard:提供 ML 实验所需的可视化和工具
- Losswise(监控 ML)
- Comet:可让你跟踪 ML 项目上的代码,实验和结果
- 权重和偏见:轻松协作可记录和可视化研究的每个细节
-
MLFlow 跟踪:用于记录参数,代码版本,度量和输出文件以及结果的可视化。
1.使用python中的一行代码自动进行实验跟踪
2.比较实验
3.超参数调整
4.支持基于Kubernetes的工作
5 超参数微调部分
微调方法有:
- 网格搜索
- 随机搜索
- 贝叶斯优化
- HyperBand(和ASHA)
- Population-based 训练
支持微调的平台有:
- RayTune:Ray Tune是一个 Python 库,用于任意规模的超参数调整(侧重于深度学习和深度强化学习)。支持任何机器学习框架,包括 PyTorch,XGBoost,MXNet和Keras。
- Katib:Kubernete 原生系统的超参数调整和神经结构的搜索,支持多种 ML/DL 框架(例如TensorFlow,MXNet和PyTorch)。
- Hyperas:围绕 Keras 的 hyperopt 的简单包装,并带有简单的模板符号来定义要调整的超参数范围。
- SIGOPT:可扩展的企业级优化平台
- Sweeps:来自 Weights&Biases,开发人员未明确指定参数,它们是通过机器学习模型来学习的。
- Keras Tuner:Keras超参数微调器,专门用于带有 TensorFlow 2.0的 tf.keras。
6 分布式训练部分
- 数据并行性:在迭代时间过长时使用(tensorflow和PyTorch支持:Ray 分布式训练
- 模型并行度:模型不适合单个GPU的情况
- 其他解决方案:Horovod
网友评论