写点什么

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


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

发布了 881 篇内容, 共 630.6 次阅读, 收获喜欢 2677 次。

关注

评论

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

大数据培训用SQL来实现用户行为漏斗分析

@零度

大数据开发

打造TOB企业流量场,钉钉将推出“视频号”,提升CDN性能是关键

郑州埃文科技

钉钉 CDN加速 IP地址 IP定位 网络优化

微信朋友圈的高可用复杂度

joak

如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用

汪子熙

RESTful SAP abap Fiori 5月月更

阿里云移动研发平台EMAS:4月产品动态更新

移动研发平台EMAS

阿里云 用户增长 研发工具 移动测试 移动推送

域名被劫持应该如何处理

源字节1号

软件开发

【网易云信】沉浸式体验网易云信在线 KTV

网易智企

音视频

沉浸式体验网易云信在线 KTV

网易云信

音视频技术

java培训如何减少 try-catch,这样做才优雅

@零度

JAVA开发

锅圈如何利用 Zadig 从容落地运维容器化建设

Zadig

DevOps 云原生 CI/CD 持续交付

GraphQL初探

RingCentral铃盛

JavaScript graphql

F5 NGINX 核心人员倾力打造,搞懂 NGINX 这一本就够了

图灵教育

nginx 程序员 服务器 计算机

数据库治理的云原生之道 —— Database Mesh 2.0

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

都是限制,都是秘密,JS逆向某建筑市场数据,python爬虫120例

梦想橡皮擦

5月月更

深度学习六十年简史

OneFlow

人工智能 机器学习 深度学习

幸运哈希defi游戏系统开发方案(防作弊)

开发微hkkf5566

PHP实现令牌桶限流Redis list列表 Lpush rpop 实现令牌桶 - 限流 PHP实例

Owen Zhang

php

回顾|Flink CDC Meetup(附 PPT 下载)

Apache Flink

大数据 flink 编程 流计算 实时计算

Flink 1.15 新功能架构解析:高效稳定的通用增量 Checkpoint

Apache Flink

大数据 flink 编程 流计算 实时计算

【网易云商】TypeScript 进阶指南,突破基本类型

网易智企

typescript

喜讯!「凡泰极客」中标「廊坊银行」小程序平台应用建设项目

FinClip

小程序 finclip 廊坊银行

二、KVM架构概述

穿过生命散发芬芳

kvm 5月月更

私有化IM内置专属文档中心,助力企业协作闭环

WorkPlus

大规模C++编译性能优化系统OMAX介绍

百度Geek说

后端

web前端培训复盘30+技术点(满满干货,建议收藏)

@零度

前端开发

监控系统报警级别设定

焦振清

监控系统 报警级别

华为AppCube通过中国信通院“低代码开发平台通用能力要求”评估!

华为云开发者联盟

低代码 华为云 AppCube

英特尔投资47亿构建巨型实验室所谓何?数据中心已然进入“液冷时代”

GPU算力

企业实施知识管理建设的7条建议

小炮

敏捷领导力(CAL E+T+O)认证在线培训 | 2022年8月18-20日

ShineScrum捷行

敏捷 敏捷领导力 CAL 世界级敏捷领导力大师

【直播回顾】OpenHarmony知识赋能五期第六课——子系统相机解读

OpenHarmony开发者

OpenHarmony

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