GitHub热门项目:生产级深度学习项目如何构建?

作者: Alireza 2019-12-05 09:50:54

 在生产中部署深度学习模型可能很有挑战性,因为这远远不仅是训练出具有良好性能的模型就足够了。为了部署生产级深度学习系统,还需要正确设计和开发一众组件。本文介绍了 GitHub 上的一个工程指南,用于构建将部署在实际应用程序中的生产级深度学习系统。

在这篇文章中,我们将详细介绍生产级深度学习系统的各个模块,并推荐适合每个组件的工具集和框架,以及实践者提供的最佳实践。

GitHub热门项目:生产级深度学习项目如何构建?

GitHub热门项目:生产级深度学习项目如何构建?

1. 数据管理

1.1. 数据源

开源数据 (好的开端,但并非优势)、数据增强以及合成数据

1.2. 标注

标注的劳动力来源:

  • 众包
  • 服务公司:FigureEight
  • 雇佣标注员

标注平台:

  • Prodigy:一种由主动学习(active learning)(由 Spacy 开发人员开发)、文本和图像支持的注释工具。
  • HIVE:用于计算机视觉的人工智能即服务平台。
  • Supervisely:完整的计算机视觉平台。
  • Labelbox:计算机视觉。
  • Scale 人工智能数据平台(计算机视觉和自然语言处理)。

1.3. 存储

数据存储选项:

(1) 对象存储:存储二进制数据(图像、声音文件、压缩文本)

  • Aamzon S3
  • Ceph 对象存储

(2) 数据库:存储元数据(文件路径、标签、用户活动等)。

  • Postgres 对于大多数应用程序来说都是正确的选择,它提供了同类最佳的 SQL 和对非结构化 JSON 的强大支持。

(3) 数据湖:用于聚合无法从数据库获得的特征(例如日志)。

  • Amazon Redshift

(4) 特征存储:机器学习特征的存储和访问。

  • FEAST(Google 云,开源)
  • Michelangelo(Uber)
  • 在训练期间:将数据复制到本地或集群文件系统中。

1.4. 版本控制

  • DVC:用于机器学习项目的开源版本控制系统
  • Pachyderm:用于数据的版本控制
  • Dolt:用于 SQL 数据库的版本控制

1.5. 处理

生产模型的训练数据可能来自不同的源,包括数据库和对象存储中的存储数据、日志处理和其他分类器的输出。

任务之间存在依赖关系,每个人物都需要在其依赖关系完成后才能启动。例如,对新的日志数据进行训练,需要在训练之前进行预处理。因此,工作流在这方面变得相当重要。

工作流:

  • Airflow (最常用的)

GitHub热门项目:生产级深度学习项目如何构建?

2. 开发、训练与评估

2.1. 软件工程

编辑器:

  • Vim
  • Emacs
  • VS Code(作者推荐):内置 Git 暂存和显示文件差异、Lint 代码扫描、通过 SSH 远程打开项目。
  • Jupyter Notebooks:作为项目的起点很好,但它难以实现规模化。
  • Streamlit:具有小程序的交互式数据科学工具。

建议:

对于个人或初创企业:

  • 开发:一台 4 核图灵架构的计算机。
  • 训练 / 评估:使用相同的 4 核 GPU 计算机。在运行许多实验时,可以购买共享服务器或使用云实例。

对于大型公司:

  • 开发:为每位机器学习科学家购买一台 4 核图灵架构计算机,或者让他们使用 V100 实例。
  • 训练 / 评估:在正确配置和处理故障的情况下使用云实例。

2.2. 资源管理

为程序分配免费资源:

资源管理选项:

  • 旧式集群作业调度程序(如,Slurm 工作负载管理器)
  • Docker + Kubernetes
  • Kubeflow
  • Polyaxon(付费功能)

2.3. 深度学习框架

除非有充分的理由不这样做,否则请使用 TensorFlow/Keras 或 PyTorch。下图显示了不同框架在开发和 生产方面的比较。

GitHub热门项目:生产级深度学习项目如何构建?

2.4. 实验管理

开发、训练和评估策略:永远从简单开始。在小批量上训练一个小型模型,只有在它能起作用的情况下,才扩展到更大的数据和模型,并进行超参数调优。

实验管理工具:

  • Tensorboard:提供了机器学习实验所需的可视化和工具。
  • Losswise(用于机器学习的监控)
  • Comet:让你可以跟踪机器学习项目上的代码、实验和结果。
  • Weights & Biases:通过简单的协作,记录并可视化研究的每个细节。
  • MLFlow Tracking:用于记录参数、代码版本、指标和输出文件,以及结果的可视化。

2.5. 超参数调优

Hyperas:用于 Keras 的 hyperopt 的简单包装器,使用简单的模板符号定义要调优的超参数范围。SIGOPT:可扩展的企业级优化平台。Ray-Tune:可扩展的分布式模型选择研究平台(专注于深度学习和深度强化学习)。Sweeps from Weights & Biases:参数并非由开发人员显式指定,而是由机器学习模型来近似和学习的。

2.6. 分布式训练

数据并行性:当迭代时间过长就使用它(TensorFlow 和 PyTorch 均支持)。

模型并行性:当模型不适合单 GPU 的情况下就是用它。

其他解决方案:

  • Ray
  • Horovod

3. 故障排除『有待完善』

4. 测试与部署

4.1. 测试与 CI/CD

与传统软件相比,机器学习生产软件需要更多样化的测试套件:

GitHub热门项目:生产级深度学习项目如何构建?

单元测试和集成测试

测试类型:

  • 训练系统测试:测试训练管道。
  • 验证测试:在验证集上测试预测系统。
  • 功能测试。
  • 持续集成:在将每个新代码更改推送到仓库后运行测试。

 用于持续集成的 SaaS:

  • CircleCI、Travis
  • Jenkins、Buildkite

4.2. 网络部署

(1)由 预测系统 和 服务系统 组成

  • 在考虑规模的情况下为预测服务。
  • 使用 REST API 为预测 HTTP 请求提供服务。
  • 调用预测系统进行响应
  • 预测系统:处理输入数据,进行预测。
  • 服务系统(Web 服务器):

(2)服务选项:

  • Docker
  • Kubernetes (现在最流行)
  • MESOS
  • Marathon
  • 通过 模型服务 解决方案部署。
  • 将代码部署为“无服务器函数”。

(3)模型服务:

  • Tensorflow 服务
  • MXNet Model 服务器
  • Clipper (Berkeley)
  • SaaS 解决方案 (Seldon,算法)
  • 专门针对机器学习模型的网络部署。
  • 用于 GPU 推理的批处理请求。
  • 框架:Tensorflow 服务、MXNet Model 服务器、Clipper、SaaS 解决方案 (Seldon,算法)

(4)决策:

  • TensorFlow 服务或 Clipper
  • 自适应批处理很有用。
  • 如果 CPU 推理满足要求,则更可取。
  • 通过添加更多的服务器或无服务器进行扩展。
  • CPU 推理:
  • GPU 推理:

4.3 Service Mesh 和 Traffic Routing

从单片应用程序过渡到分布式微服务体系结构可能具有挑战性。

服务网格(由微服务网络组成)降低了此类部署的复杂性,并减轻了开发团队的压力。

Istio:一种服务网格技术,简化已部署服务网络的创建,而服务中的代码更改很少或没有。

4.4. 监控

目的:

  • 针对停机时间、错误和分发变化的警报。
  • 抓取服务和数据回归。

此外,云提供商的解决方案也是相当不错。

GitHub热门项目:生产级深度学习项目如何构建?

4.5. 在嵌入式和移动设备上部署

主要挑战:内存占用和计算限制

解决方案:

  • DistillBERT (用于自然语言处理)
  • MobileNets
  • 量化
  • 缩小模型尺寸
  • 知识蒸馏

嵌入式和移动框架:

  • Tensorflow Lite
  • PyTorch Mobile
  • Core ML
  • ML Kit
  • FRITZ
  • OpenVINO

模型转换:

  • 开放神经网络交换(Open Neural Network Exchange,ONNX):用于深度学习模型的开源格式。

4.6. 一体化解决方案

  • Tensorflow Extended (TFX)
  • Michelangelo (Uber)
  • Google Cloud AI Platform
  • Amazon SageMaker
  • Neptune
  • FLOYD
  • Paperspace
  • Determined AI
  • Domino data lab

GitHub热门项目:生产级深度学习项目如何构建?

Tensorflow Extended (TFX)

GitHub热门项目:生产级深度学习项目如何构建?

Airflow and KubeFlow ML Pipelines

GitHub热门项目:生产级深度学习项目如何构建?

GitHub 技术 深度学习
上一篇:AI公司成人礼:自由撞上996,技术理想撞上落地战争 下一篇:你的孩子被“刷脸”了吗?人脸识别进入校园引争议
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

AI时代,需要发挥知识图谱+知识管理的双轮价值

AI时代,需要发挥知识图谱+知识管理的双轮价值,才能真正实现从流程驱动、数据驱动走向知识驱动。

东方林语 ·  2021-05-31 09:15:14
人工智能是如何改变日常商业运作的?

人工智能的使用也改变了我们如今开展业务的方式。从平凡的任务到数据分析,该技术使公司能够保持竞争优势。此外,使用AI可以改善个性化的客户体验以及改善风险管理。

佚名 ·  2021-05-28 17:24:32
数据分析技术:边缘人工智能的应用

为了避免不必要的非关键数据移动,AI正在向边缘设备返回计算能力,从而影响开发人员利用人工智能和数据分析技术。

Cassie ·  2021-05-27 15:22:19
Few-shot Learning(1)—机器学习中的任务优化空间

今天深度学习之所以成功,大量的数据是不可缺少的必要条件。我们训练的模型都是吃过见过后才有现在这样良好的表现。不过实际情况要收集到足够多的数据并非易事,今天我们就这个问题来学习 Few-shot Learning。

zidea ·  2021-05-27 08:38:47
人工智能促进企业实现端到端的智能自动化

对于正在从事或已经致力于此类现代化工作的IT主管们来说,人工智能(主要体现为机器学习技术)有望对自动化产生革命性影响,使他们更接近端到端过程自动化的梦想。

Maria Korolov ·  2021-05-26 10:04:09
光明面与黑暗面:人工智能与人类的未来

随着技术创新步伐的不断提高,重要的是要意识到即将到来的中断,而不仅仅是盲目地享受AI带来的好处。计算机超级智能可能会威胁到我们的生存,即使不是这样,如果我们能够负责任地发动第四次工业革命,仍然有很多大问题需要解决。

Mark Lippett ·  2021-05-26 09:48:12
8个深度学习中常用的激活函数

当在隐藏层和输出层中实现时,激活函数的选择非常关键。模型的准确性和损失很大程度上依赖于激活函数。此外,必须根据您对模型的期望来选择它们。例如,在二值分类问题中,sigmoid函数是一种最优选择。

deephub ·  2021-05-22 23:08:08
融合创新,降低门槛,飞桨推动人工智能走通工业大生产之路

5月20日,由深度学习技术及应用国家工程实验室与百度联合主办的WAVE SUMMIT 2021深度学习开发者峰会在北京召开。

佚名 ·  2021-05-21 10:26:39
Copyright©2005-2021 51CTO.COM 版权所有 未经许可 请勿转载