CS194 Full Stack Deep Learning(3) Data Management

0. 前言

image-20210312010416890

1. Sources

  • 如何寻找训练数据源?
    • 现在大部分深度学习任务都依赖于大量标注数据。
    • 当然,也有特例,如RL/GANs/半监督学习,但一般这类技术在工业界的应用都不多。
  • 数据来源有以下这些:
    • 公开数据集:因为大家都能用,所以模型训练出来没有竞争力,但作为项目开始阶段数据可以。
    • 一般会花钱或花时间标注数据。
    • Data flyingwheel:应用上线之后的持续数据采集(业务手段让用户帮忙标注)、标注以及模型优化。
    • 半监督学习
    • 数据增强
    • 模拟生成数据(在机器人、自动驾驶领域很常见)

2. Labeling

  • 用户界面(感觉就是标注工具基本功能)
    • 一般都包括bbox、分割、关键点、三维立方体
    • 一般支持复杂的分类结果
    • 对标注者进行培训是非常重要的,可以确保标注质量
  • 谁来标注
    • 自己雇人(兼职):费用高、找人难、需要人员管理,但质量高、安全、速度快(人员固定后)
    • 众包(如Mechanical Turk):便宜、容易找更多人,但不安全、需要大量质检工作
    • 找数据标注公司。寻找公司的时候需要注意:
      • 需要自己标注一些数据作为 gold standard。
      • 多联系几家公司,看看同一类数据的标注样例。
      • 确保双方对标注标准有统一的认识。
      • 完全外包比较贵,有写公司提供标注工具(而不包括人力)
  • 建议:
    • 钱够就找外包
    • 如果钱不够,至少要用一些现有软件标注
    • 相比重要,自己找兼职做标注更好

3. Storage

  • 如何保存数据?主要内容包括:文件系统、对象存储、数据库、Data Laker
    • 文件系统(filesystem):存储系统的基础
      • 基本存储单位是文件,文本或二进制,不进行版本控制,可以轻易覆盖。
      • 基本形式比如普通硬盘。
      • 可构建网络文件系统(局域网内多态机器之间存储数据)
      • 可构建分布式文件系统,即HDFS
      • 需要注意访问模式,速度快,但不能并行
    • 对象存储(object storage)
      • 文件系统基础上的API,主要包括增删查操作。
      • 基本存储单位是对象(Object),一般是二进制文件,如图像、音频、视频等
      • 进行版本控制,可能进行冗余存储
      • 可以并行读取,但速度不太快
      • 常见的有AWS的S3,以及本地的Ceph
    • 数据库(database):快速、可扩展、建检索、持久化存储结构化数据
      • Mental Model 就是所有数据通过快速置换(内存与硬盘位置互换)都保存在RAM中,但确保所有信息、日志都在本地硬盘有备份。
      • 基本数据单位是行(row),有独立的ID,数据按列归纳。
      • 不用来存储二进制数据,数据经常会重复提取
      • 建议使用 Postgres
      • 建议会SQL
    • “Data Laker”:数据湖,这个概念以前没了解过,猜测就是什么都存进去,然后根据需要拿出来。
  • 每类存储方式对应存储什么类型的数据
    • 二进制数据(图像、音频、压缩文本)以对象形式保存
    • 元数据(Metadata)保存在数据库中
    • 如果需要一些别的不能存在数据库的特征,就用数据湖
    • 训练时数据要么存在本地,要么存在NFS中
  • 进一步学习推荐资料:这本书

4. Versioning

  • 如果对自建数据集进行版本控制
  • Level 0:直接存在文件系统中,不进行版本控制。
    • 非常不推荐。
    • 由于数据没版本控制,所以模型也没有版本控制。
    • 无法复现历史模型精度。
  • Level 1:每次训练都都保存一个数据库副本
    • 非常不推荐。
    • 可对模型进行版本控制。
  • Level 2:通过 assets 和 code 同时对数据进行版本控制
    • 推荐使用的方式
    • 大数据保存在文件系统中
    • 训练数据通过JSON或类似的方式进行存储,即只存储标签、样本位置、用户行为等
    • JSON可能很大,但可通过git进行版本控制。
    • 可实现lazy功能,即等要用了再生成数据。
    • git signiture就是我们数据库的版本,更多信息可保存在git message中
  • Level 3:专业数据版本控制工具
    • 如果了解这些工具,建议使用;如果不了解工具,那就不使用。
    • 常见的包括 DVC,Pachyderm,Dolt等

5. Processing

  • 数据预处理生成训练数据。
  • 为什么有这样的需求
    • 有些场景,需要每天晚上都训练一个新模型,以照片流行度预测的。
    • 对每张照片,训练数据包括元数据(上传时间、标题、拍摄地点等)
    • 运行分类器。
    • 有些需要从logs中读取相关信息。
  • 任务依赖,有些任务存在相互依赖关系。
  • 可使用分布式管理方式。
  • Airflflow:训练调度框架,可在多条机器上运行。
  • 尽量简洁。举了一个有意思的例子
    • 对于一个TB级的文件,需要查看文本文件的训练结果
    • Hadoop需要26分钟,而如果用linux命令行,则只需要18秒或70秒

猜你喜欢

转载自blog.csdn.net/irving512/article/details/114721417