深度学习项目的生产级架构:数据管理模块

在生产中部署深度学习模型工作远远超过了训练性能良好模型的工作,为了部署生产级深度学习系统,需要设计和开发不同的模块,如下所示。

深度学习项目的生产级架构:数据管理模块_第1张图片
deep_learning_deploying_01.png

下图是生产级深度学习系统中不同模块的高级概述。

deep_learning_deploying_02.png

下面我们将介绍数据管理模块。

1 数据来源

由于有监督学习需要大量标记数据,并且数据标注非常昂贵,因此可以通过以下方式可以获得一些数据资源:

  • 公开数据集(很好的起点,但没有优势)
  • 数据增强(计算机视觉必须,NLP 可选)
  • 生成数据(开始时几乎总是值得的,尤其是在 NLP 中)

2 数据标注

数据标注可以通过以下方式来进行:

  • 众包方式:便宜且可扩展,可靠性较差,需要质量控制
  • 雇用数据标注者:昂贵,扩展缓慢,需要较少的质量控制
  • 外包给第三方数据标注服务公司:比如 FigureEight

常用的数据标注平台有:

  • Diffgram: 训练数据软件(计算机视觉)
  • Prodigy: 由主动学习(Spacy开发人员),文本和图像提供支持的标注工具
  • HIVE: 用于计算机视觉的 AI 即服务平台
  • Supervisely: 整个计算机视觉平台
  • Labelbox: 计算机视觉
  • Scale AI 数据平台(计算机视觉和NLP)

3 数据存储

不同的数据类型可以采取不同的数据存储方式:

  1. 对象存储:存储二进制数据(比如:图像,音视频,文本)
  • 亚马逊S3
  • Ceph 对象存储
  1. 数据库:存储元数据(文件路径,标签,用户活动等)。
  • Postgres是大多数应用程序的正确选择,它具有同类最佳的SQL以及对非结构化JSON的强大支持。
  1. 数据湖:聚合无法从数据库获得的功能(例如日志)
  • 亚马逊Redshift
  1. Feature Store:存储、访问和共享机器学习功能(功能提取可能在计算上很昂贵,几乎无法扩展,因此,复用机器学习功能是高性能ML团队的关键)。
  • FEAST(Google云,开源)
  • 米开朗基罗调色板(Uber)

建议:在数据训练时,在本地或网络文件系统(NFS)进行数据备份。

4 数据版本控制

对于已部署的 ML 模型进行版本控制是必须的,没有数据版本控制意味着没有模型版本控制。

数据版本控制平台:

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

5 数据处理

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

任务之间存在依赖关系,每个任务都需要在其依赖关系完成后才能启动。例如:对新日志数据的训练需要在训练之前进行预处理。

Makefile 是不可伸缩的。在这方面,“工作流管理器”变得非常重要。

工作流程编排有:

  1. Luigi
  2. Airflow:动态,优雅且可扩展(使用最广泛)
  • DAG 工作流程
  • 稳健的有条件执行:失败时重试
  • Pusher 通过 tensorflow 服务支持 docker 镜像
  • 整个工作流程在一个.py文件中
深度学习项目的生产级架构:数据管理模块_第2张图片
deep_learning_deploying_03.png

你可能感兴趣的:(深度学习项目的生产级架构:数据管理模块)