《UCB cs294》Required Reading 3

《UCB cs294》Required Reading 3

论文一

《Hidden Technical Debt in Machine Learning Systems》这篇文章是谷歌基于多年的机器学习系统开发和使用经验总结出来的,着重强调了在机器学习系统中出现的technical debt:

  • Complex Models Erode Boundaries

在一般的软件开发中,人们会使用封装、模块化等抽象手段,但机器学习系统由于其依赖大量外部数据,特征的改变会影响全局。论文提到的解决方法是模型隔离和监测模型中的变化。

  • Data Dependencies Cost More than Code Dependencies

这个主要是将对数据依赖关系的分析成本比通常的代码依赖关系分析要高,一是因为数据依赖关系不够稳定,可能存在把一个输出当成另一个地方外部输入的使用;二是存在不必要的数据依赖。对于这两个问题,论文的解决方法是做数据输入的版本控制和定期检查去除不必要的依赖。

  • Feedback Loops

机器学习系统的一大特征就是他们未来的更新很可能会影响到自身,导致analysis debt的出现,在模型部署之前很难预测模型的行为。Direct Feedback Loops是指模型直接影响自身的特征选择,Hidden Feedback Loops是指系统之间间接影响对方,这种Feedback Loops的问题更加严重。

  • ML-System Anti-Patterns

在实际的机器学习系统中,仅仅一小部分代码是用于学习和预测的,慢慢地,系统中会出现各种系统设计的Anti-Patterns。比如出现大量的机器学习库代码,论文的建议是使用胶水语言封装API;数据准备阶段积攒了更多的输入信号,混杂着各种数据操作;机器学习实验过程中,代码出现了一些不必要的条件分支,导致技债出现;还有就是一些代码的code smell比较差。

  • Configuration Debt

由于机器学习系统和算法比较复杂,大型的ML系统往往依赖大量的配置,因此需要关注配置的可维护性、易读性、需要做code review提交到库中。

  • Dealing with Changes in the External World

这个指的是ML系统与外部世界有较多的交互,外部世界的变化会影响系统、影响模型等。因此需要高效的监控预警配套。

  • Other Areas of ML-related Debt

Data Testing Debt,提供基本的、完整的代码测试;Reproducibility Debt,真实的ML系统由于外部世界的变化、并行学习中的随机等等难以保持严格的可重复性;Process Management Debt,模型的管理问题,真实的系统可能存在数以百计的模型,如何分配资源、控制优先级等很重要;Cultural Debt,文化问题,研究员和系统工程师可能存在沟通不当的情况。

论文二

《TFX: A TensorFlow-Based Production-Scale Machine Learning Platform》这篇论文主要介绍了Google开发的一个机器学习平台TFX。TFX最大的特点就是将机器学习所需的各个组件部分集成在一起,提供训练模型、分析验证模型和模型部署的完整工作流,避免了机器学习pipeline各个部分的割裂。

platform overview

作为一个机器学习平台,不单单只关注机器学习算法,还需要考虑到依赖分布式系统架构促使数据和模型的并行,机器学习工作流便于搭建,拥有集中的仓库跟踪保存训练过的多模型等等。

TFX的设计主要考虑了以下几点:

  • 平台能应对多种学习任务,除了选用tensorflow作为核心算法库,还支持数据验证分析和可视化工具、模型验证评估和推断工具等;
  • 持续训练,TFX考虑支持多种持续训练策略;
  • 易用的配置与工具;
  • 生产级别的可靠性与可扩展性;

基于上述的特点,把多种组建模块集成在一起,就形成了下图的平台。

DATA ANALYSIS, TRANSFORMATION, AND VALIDATION

对于机器学习来说,了解数据并及时发现异常数据是至关重要的,有利于避免下游数据出错。这一章主要讲TFX将数据分析、转换和验证作为独立又相互关联的部分。

数据分析的时候,需要对输入的数据集进行统计,输出一系列统计数据,如连续型数据需要分位数、直方图等等,离散数据需要top-K值和频率等等。

数据转换则是对数据进行格式转换,如将特征转换为特定的整数。这里的关键是保证在训练和推断期间确保转换逻辑的一致性。TFX会将任何数据转换导出为经过训练的模型的一部分,从而避免了不一致的问题。

数据验证则是使用schema来描述数据规范,每个算法团队维护自己的schema,数据验证时可以快速确认数据集的异常情况,如何进行修正,反映出数据的变化情况。

MODEL TRAINING

TFX的设计一大核心是尽可能流水线地、自动化地完成训练生产模型,支持训练使用Tensorflow配置的所有模型。TFX使用了warm starting来在模型质量和模型时效性之间达到一个平衡,这是迁移学习使用的技术,讲一个训练好的基准模型应用另一个场景。

论文另外一点就是TFX用了定义和描述模型的API——model specification API,通过对Tensorflow的封装减少代码冗余,提高开发速度。

MODEL EVALUATION AND VALIDATION

模型的评估是模型上线前验证模型有效性的关键步骤,TFX对于好模型的定义主要是:safe to servethe desired prediction quality,前者关心的是模型完整性,不会使得推断服务crash,资源使用少,后者则主要是模型预测准确率。

TFX一方面也使用了各种准确率标准来做AB Test,根据不同的产品团队要求提供告警配置,另一方面也支持对数据集根据feature做slice切分,帮助更好地评估模型在不同feature伤的表现。

MODEL SERVING

最后则是模型服务,TFX主要依赖Tensorflow serving去做这个事情,通过多用户隔离和快速的训练数据反序列化来满足系统的低时延和高性能要求,总的来说提供了一套工业级的模型上线推断服务。

论文三

《Towards Unified Data and Lifecycle Management for Deep Learning》这篇论文主要关注了深度学习中数据和生命周期管理系统的实现,提出了一个modelHub系统,包括了三个部分,一种DSL来帮助泛化对模型的探索、查询,一种新的模型版本管理系统(Dlv)和一种读参数优化的参数归档存储系统(PAS)。

ModelHub主要分为local组件和远程组件,local functionality包括了一些DNN系统与本地计算机集群的集成,remote functionality则是不同用户组共享模型与其版本。

DLV是一种通过命令行工具的版本控制系统,可以用来与其他本地或者远程组件进行交互,替代了传统的git/svn可以方便其更好地描述查询建模过程中生成的artifacts内部结构。另外通过DQL模块可以帮助研究员开发新模型。Model Learning模块本质是特定DNN系统的wrapper。

至于本地仓库的PAS则是用来存储大量的模型学习参数,PAS的目标是在不影响查询性能的情况下,尽可能维护大量学习的模型信息。其中一大特点是使用了一种新的近似模型评估技术,适用于分段存储PAS。由于浮点算数表示中浮点数具备高熵,难以压缩,PAS提供了按字节分割的浮点矩阵存储方案,通过分割高阶和低阶尾数位,浮点数矩阵按块存储,第一个块由8个高位组成,其余的每个块被分割为一个字节,由于高阶位具有低熵,能更好地做压缩。

这篇论文描述了如何通过ModelHub去解决一些在管理和调整深度学习模型中的关键数据管理挑战:

  • 通过调整网络结构和超参数,更容易优化潜在的模型效果;
  • 减少跟踪模型的负担;
  • 在不影响查询和检索性能的前提下,尽可能多地存储大量模型和构造快照;