Files
Shuangchi He ef2031d8f9 Fix some typos. (#365)
* Fix some typos.

* Fix typo.

Co-authored-by: Cheng Lai <laicheng_VIP@163.com>
Co-authored-by: Jiarong Han <73918561+hanjr92@users.noreply.github.com>
2022-06-10 15:29:06 +08:00

30 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据处理框架
在前两个章节中,我们介绍了编译器前后端的相关内容,详细地阐述了源程序到目标程序的转换优化过程。除了让芯片在训练/推理过程中高性能地运行我们还需要将数据高效地发送给芯片以实现全流程的性能最优。机器学习模型训练和推理需要从存储设备如本地磁盘和内存、远端的存储系统等中加载数据集对数据集进行一系列处理变换将处理结果发送到GPU或者华为昇腾Ascend等加速器中完成模型计算该流程的任何一个步骤出现性能问题都会对训练和推理的吞吐率造成负面影响。本章我们将核心介绍如何设计、并实现一个面向机器学习场景的数据系统以帮助用户轻松构建各种复杂的数据处理流水线(Data
Pipeline),同时我们的数据系统要有足够高的执行性能,以确保数据预处理步骤不会成为模型训练和推理的性能瓶颈。
本章主要从易用性、高效性和保序性三个维度展开介绍机器学习系统中的数据模块。在前两个小节中我们首先讨论如何构建一个易用的数据模块。包括如何设计编程抽象使得用户通过短短几行代码便可以描述一个复杂的预处理过程以及如何做到既内置丰富算子提升易用性又可以灵活支持用户使用自定义算子覆盖长尾需求。用户构建好数据处理流程后数据模块需要负责高效的调度执行数据流水线以达到最优的数据处理吞吐率。高效的执行数据流水线是一个具有挑战性的任务我们既要面临数据读取部分的I/O性能问题又要解决数据处理部分的计算性能问题。针对上述挑战我们将分别介绍面向高吞吐率读取性能的数据文件格式设计以及能够充分发挥多核CPU算力的并行架构设计。不仅如此和常规数据并行计算任务不同的是大部分机器学习场景对于数据的输入输出顺序有着特殊的`保序性`的要求,我们将会使用一节的内容来介绍什么是保序性,以及如何在数据模块的并行架构中设计相应组件计来满足该特性需求。学习了上述的内容后,读者将会对如何构建一个面向机器学习场景高效易用的数据模块有深刻的理解。最后,作为拓展内容,我们将以目前学术界和业界的一些实践经验来介绍当单机处理性能达不到要求时,该如何去扩展我们的数据处理模块以满足训练性能需求。本章学习目标包括:
- 了解机器学习数据模块架构中的关键组件及其功能
- 了解不同数据模块用户编程接口的设计
- 掌握面向高性能数据读取的数据文件格式设计
- 掌握机器学习系统数据模块并行架构
- 掌握机器学习系统数据模块数据保序性含义及其解决方案
- 了解两种单机数据处理性能扩展方案
```toc
:maxdepth: 2
requirements
program_model
performance
data_order
extension
summary
```