最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

  • 2019-12-04
  • 本文字数:2739 字

    阅读完需:约 9 分钟

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

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



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



1. 数据管理

1.1. 数据源

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

1.2. 标注

标注的劳动力来源:


  • 众包

  • 服务公司:FigureEight

  • 雇佣标注员


标注平台:


  • Prodigy:一种由主动学习(active learning)(由 Spacy 开发人员开发)、文本和图像支持的注释工具。

  • HIVE:用于计算机视觉的人工智能即服务平台。

  • Supervisely:完整的计算机视觉平台。

  • Labelbox:计算机视觉。

  • Scale 人工智能数据平台(计算机视觉和自然语言处理)。

1.3. 存储

数据存储选项:


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

  • Aamzon S3

  • Ceph 对象存储

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

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

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

  • Amazon Redshift

  • 特征存储:机器学习特征的存储和访问。

  • FEAST(Google 云,开源)

  • Michelangelo(Uber)

  • 在训练期间:将数据复制到本地或集群文件系统中。

1.4. 版本控制

  • DVC:用于机器学习项目的开源版本控制系统

  • Pachyderm:用于数据的版本控制

  • Dolt:用于 SQL 数据库的版本控制

1.5. 处理

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


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


  • 工作流:

  • Airflow (最常用的)


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。下图显示了不同框架在开发和 生产方面的比较。


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 与传统软件相比,机器学习生产软件需要更多样化的测试套件:



单元测试和集成测试


  • 测试类型:

  • 训练系统测试:测试训练管道。

  • 验证测试:在验证集上测试预测系统。

  • 功能测试。

  • 持续集成:在将每个新代码更改推送到仓库后运行测试。


用于持续集成的 SaaS:


  • CircleCI、Travis

  • Jenkins、Buildkite

4.2. 网络部署

由预测系统和服务系统组成:


  • 在考虑规模的情况下为预测服务。

  • 使用 REST API 为预测 HTTP 请求提供服务。

  • 调用预测系统进行响应

  • 预测系统:处理输入数据,进行预测。


服务系统(Web 服务器):


服务选项:


  • Docker

  • Kubernetes (现在最流行)

  • MESOS

  • Marathon

  • 通过 模型服务 解决方案部署。

  • 将代码部署为“无服务器函数”。


模型服务:


  • Tensorflow 服务

  • MXNet Model 服务器

  • Clipper (Berkeley)

  • SaaS 解决方案 (Seldon,算法)

  • 专门针对机器学习模型的网络部署。

  • 用于 GPU 推理的批处理请求。

  • 框架:Tensorflow 服务、MXNet Model 服务器、Clipper、SaaS 解决方案 (Seldon,算法)


决策:


  • TensorFlow 服务或 Clipper

  • 自适应批处理很有用。

  • 如果 CPU 推理满足要求,则更可取。

  • 通过添加更多的服务器或无服务器进行扩展。

  • CPU 推理:

  • GPU 推理:

4.3 Service Mesh 和 Traffic Routing

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


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


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

4.4. 监控

目的:


  • 针对停机时间、错误和分发变化的警报。

  • 抓取服务和数据回归。


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


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


Tensorflow Extended (TFX)

Airflow and KubeFlow ML Pipelines


本文提供的材料大部分来自于 Full Stack Deep Learning Bootcamp(全栈深度学习训练营)(作者:Pieter Abbeel、Josh Tobin、Sergey Karayev)、TFX 工作室(作者:Robert Crowe)、Pipeline.ai 举办的 Advanced KubeFlow Meetup(作者:Chris Fregly)。


该项目的 GitHub 地址(该项目还在完善中):


https://github.com/alirezadir/Production-Level-Deep-Learning


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-12-04 14:057772
用户头像
赵钰莹 InfoQ 主编

发布了 874 篇内容, 共 604.7 次阅读, 收获喜欢 2671 次。

关注

评论

发布
暂无评论
发现更多内容

第五周作业

Geek_5d0795

极客大学架构师训练营

架构师是怎样炼成的 05-1 分布式缓存,异步与集群

闷骚程序员

架构师训练营作业-Week5

wyzwlj

极客大学架构师训练营

架构师训练营第五周总结

一剑

Week3:作业一

车小勺的男神

一致性算法实现

罗亮

一致性哈希

PHP实现一致性Hash算法

Arthur.Li

php 极客大学架构师训练营 一致性hash

【第五周】学习总结——缓存、消息队列、负载均衡

三尾鱼

极客大学架构师训练营

ARTS打卡-05

Geek_yansheng25

游戏夜读 | 数据分析的及时性

game1night

实现一致性 hash 算法

不在调上

区块链产业正开启“赛马”模式

CECBC

产业落地 政策扶持 赛马模式 技术革命

计算机操作系统基础(十二)---线程同步之自旋锁

书旅

php laravel 线程 操作系统 进程

消息队列与异步架构||负载均衡架构

独孤魂

架构师训练营第 0 期第 5 周作业

Axe

极客大学架构师训练营

Cypress与TestCafe WebUI端到端测试框架简介

软测小生

自动化测试 Cypress TestCafe Web UI 测试框架

架构师训练营 - 第 4 周命题作业

红了哟

架构师训练营 - 学习总结 第 5 周

水边

极客大学架构师训练营

第五周-作业2-学习总结

seng man

区块链各行业应用案例

CECBC

产业落地 政策扶持 去中心化信任 防篡改不可逆 低廉高效

架构师训练营--第五周作业

花花大脸猫

极客大学架构师训练营

分布式缓存框架

鲁米

为什么C++可以返回Vector局部变量

韩小非

c++ 内存泄露 函数调用 堆内存管理

第五周总结

不在调上

iOS sonar实践

余志斐

ios sonar

读《看见》

YoungZY

【第五周】命题作业——实现一致性 hash 算法

三尾鱼

极客大学架构师训练营

疫情防控加速数字化,亚洲普惠金融迎来大发展

CECBC

数字化 普惠金融 合作共赢

练习 05-1

闷骚程序员

第五周总结

Geek_5d0795

极客大学架构师训练营

架构师训练营第五周作业

CATTY

一致性Hash算法

GitHub热门项目:生产级深度学习项目如何构建?_AI&大模型_Alireza Dirafzoon_InfoQ精选文章