【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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:057899
用户头像
赵钰莹 InfoQ 主编

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

关注

评论

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

视频云大赛|视频目标分割,下一个视频算法技术爆发点?

阿里云视频云

阿里云 算法 计算机视觉 音视频

【得物技术】出价组DDD分层模型总结

得物技术

技术 总结 DDD 模型 出价

【OpenPyXL】对Excel单元格的操作

IT蜗壳-Tango

办公自动化 3月日更 IT蜗壳教学

HPE的通信技术集团将如何加速电信5G的普及和应用?

VoltDB

数据库 5G VoltDB 电信

来云智技术论坛,带你认识 云智一体!

百度大脑

国内唯一,阿里云挺进 Forrester 全球云数据仓库卓越表现者象限

阿里云大数据AI技术

云计算 大数据 阿里云 数据仓库 Forrester Wave

Wireshark数据包分析学习笔记Day23

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

python 国际化实践

walker12138

Python flask i18n

身份验证会影响用户体验吗?

龙归科技

身份认证 用户体验 安全性

Instagram视频下载器: 4K Video Downloader

科技猫

软件 音视频 经验分享 资源分享 工具分享

爱奇艺大数据生态的实时化建设

爱奇艺技术产品团队

大数据 实时数仓 数据流

LeetCode题解:剑指 Offer 49. 丑数,暴力法,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

重磅官宣:Nacos2.0发布,性能提升10倍

阿里巴巴中间件

云计算 开源 nacos

中国唯一入选 Forrester 领导者象限,阿里云 Serverless 产品能力全球第一

阿里巴巴中间件

阿里云 Serverless Forrester Wave

程序员自我提升不得不知道的一些宝藏网址,收藏起来吧

北游学Java

Java 后端 资源分享

浅谈I/O多路复用

高性能架构探索

百位优质创作者签约计划|声网签约权益

InfoQ写作社区官方

签约计划 热门活动

安卓推送一体解决方案

融云 RongCloud

PaddleWeekly | 飞桨开源项目每周推

百度大脑

java集合【12】——— ArrayList,LinkedList,Vector的相同点与区别是什么?

秦怀杂货店

Java 源码 集合

区块链农产品溯源平台搭建,一物一码追溯系统

I/O多路复用之EPOLL

高性能架构探索

量化交易系统开发;量化策略软件,马丁策略交易

寻找被遗忘的勇气(二十六)

Changing Lin

3月日更

常考面试题之css篇

yumibgt

国内首个自主可控区块链技术发布!已在北京冷链追溯中显威

CECBC

区块链

从开源的历史与今天,聊聊为什么要期待HDC.Cloud 2021

脑极体

从低代码/无代码烂大街的吃瓜群众说起

李小腾

低代码 无代码开发

百位优质创作者签约计划|InfoQ 签约权益

InfoQ写作社区官方

签约计划 热门活动

2020年京东161亿研发费用,钱怎么花的?

吴俊宇

投资 数字化 京东

融云2021 X-Meetup启航 探索高并发下的高质量实时通信架构设计

融云 RongCloud

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