Thomas Davenport 在《数据分析竞争法》(Competing on Analytics) 的更新版本中表明,分析技术在过去十年间已发生巨大变化,商用服务器中的分布式计算功能越来越强大,成本越来越低廉;而且该技术改进了机器学习 (ML) 技术,使公司能够存储和分析许多不同类型的数据及更多内容。
Thomas Davenport 在《数据分析竞争法》(Competing on Analytics) 的更新版本中表明,分析技术在过去十年间已发生巨大变化,商用服务器中的分布式计算功能越来越强大,成本越来越低廉;而且该技术改进了机器学习 (ML) 技术,使公司能够存储和分析许多不同类型的数据及更多内容。
为了针对商用服务器大型集群中呈爆炸性增长的网络内容数据量编制索引,Google 开发了一个分布式文件系统和一个灵活的分布式处理框架 MapReduce。Google 文件系统 (GFS) 用于在集群数据节点中分割、分发和复制文件数据。跨集群数据节点的 MapReduce 分布式计算:用户通过指定 map 函数来处理键值对,从而生成一组中间键值对,并通过指定 reduce 函数来合并与同一中间键关联的所有中间值。GFS 和 MapReduce 均可将故障转移到其他数据节点或处理节点,以此实现容错设计。
参考资料:Google MapReduce 白皮书
在 Google 发布 MapReduce 框架详述白皮书一年后,Doug Cutting 和 Mike Cafarella 开发了 Apache Hadoop。
但是,Hadoop 性能却因其磁盘检查点结果模型而遭遇瓶颈。同时,MapReduce 的低级别编程模型也限制了 Hadoop 的采用。数据流程和迭代算法需要将多个 MapReduce 作业链接在一起,此操作很难通过编程实现,并且会导致大量磁盘读写。
Apache Spark 起初是加州大学伯克利分校 AMPLab 的一个研究项目,在 2014 年成为 Apache 软件基金会的前沿项目,目前则由来自数百个组织的数百位开发者组成的社区负责维护。Spark 的开发初衷是保持 MapReduce 的可扩展分布式容错处理框架的优势,同时提高其效率及易用性。Spark 在迭代中将数据缓存在内存中,并且使用权重较轻的线程,因此与 MapReduce 相比,其数据流程和迭代算法更加高效。此外,Spark 提供的函数式编程模型也比 MapReduce 更丰富。
分布式数据表
Spark 虽缓解了 Hadoop 中存在的 I/O 问题,但现在瓶颈问题已从 I/O 转变为日益增多的应用程序的计算问题。随着 GPU 加速计算的出现,此性能瓶颈问题迎刃而解。
图形处理器 (GPU) 因其超低浮点运算(性能)单价深受欢迎,其还可通过加快多核服务器的并行处理速度,解决当前的计算性能瓶颈问题。
CPU 由专为按序串行处理优化的几个核心组成。而 GPU 则拥有一个大规模并行架构,当中包含数千个更小、更高效的核心,专为同时处理多重任务而设计。与仅包含 CPU 的配置相比,GPU 的数据处理速度快得多。
当我们需要在集群的节点中广播、聚合或采集大量数据时,网络会成为瓶颈问题。将 GPUDirect 远程直接内存访问技术与 NVIDIA 集合通信库结合使用,让 GPU 在节点之间彼此直接通信以加快多 GPU 和多节点规约运算速度,便可解决此瓶颈问题。
对于复杂的大型提取、转换、加载 (ETL) 工作负载,GPUDirect RDMA 的优势也尤为重要,因为它可让这类工作负载如同在一台大型服务器上运行一样。
数据科学的关键技术是数据探索。准备 ML 数据集时,需要了解数据集,清理和处理数据类型及格式,并提取学习算法的特征。这些任务均归属于 ETL。ETL 通常是一个迭代式探索过程。随着数据集的增长,在 CPU 上运行此过程时,其交互性会受到影响。
过去几年 GPU 一直肩负着推动深度学习 (DL) 发展的重任,而 ETL 和传统 ML 工作负载依然是采用 Python 进行编写,并且通常是使用 Scikit-Learn 等单线程工具或通过 Spark 等大型多 CPU 分布式解决方案进行编写。
RAPIDS 是一套开源软件库和 API,支持用户完全在 GPU 上执行端到端数据科学和分析流程,可让典型的端到端数据科学工作流程至少提速 50 倍。RAPIDS 可加快整个数据科学流程的速度(包括数据加载),从而提高工作流程的效率、交互性和探索性。
NVIDIA® CUDA® 是用于 GPU 计算的架构和软件平台,基于此架构和平台构建的 RAPIDS 可通过用户友好型 API 提供 GPU 并行机制和高带宽显存速度。RAPIDS 侧重于有关分析和数据科学的通用数据准备任务,可提供强大的 GPU DataFrame,该 DataFrame 则可借助用户熟悉的 DataFrame API,与 ApacheArrow 数据结构兼容。
Apache Arrow 通过指定独立于语言的标准化列式内存格式(专为数据局部性优化),来加快现代 CPU 或 GPU 的分析处理速度,并提供零复制流式消息传输和进程间通信功能,且不会产生序列化用度。
DataFrame API 可在不产生典型的序列化和反序列化成本的情况下与各类 ML 算法集成,从而实现端到端流程加速。
通过隐藏低级 CUDA 编程的复杂性,RAPIDS 能够以简单的方式执行数据科学任务。随着越来越多的数据科学家使用 Python 等高级语言,我们必须要在实现加速的同时最大限度地减少或杜绝代码变更,这样才能迅速减少开发时间。
RAPIDS 加快开发速度的另一个途径是,通过集成适用于 DL 的PyTorch、Chainer 和 ApacheMxNet 等前沿数据科学框架以及 Apache Spark 和 Dask 等分布式计算框架,实现从 GPU 工作站到多 GPU 服务器和多节点集群的无缝扩展。此外,开源 SQL 引擎 BlazingSQL 等产品也基于 RAPIDS 构建,可为用户增加更多加速功能。
Apache Spark 3.x 可提供用户 API 和配置,帮助用户轻松请求和使用 GPU,从而增强 GPU 应用;此框架现在还可扩展为在 GPU 上实现列式处理,而 Spark 3.x 之前的产品均不支持上述功能。Spark 内部添加了 GPU 调度策略,同时进一步集成集群管理器(YARN、Kubernetes 等)以请求 GPU,此外还新增了插件点,便于扩展为在 GPU 上执行操作。这样一来,Spark 应用程序开发者便可更轻松地请求和使用 GPU,并与 DL 和 AI 框架(例如 Spark 上的 Horovod 和 TensorFlow)更紧密地集成,同时还能更充分地利用 GPU。这种扩展性还可帮助用户实现列式处理,让用户可以添加使用 GPU 加快查询速度的插件。
我们稍后会在此电子书中介绍 Apache Spark 3.x 堆栈(如下所示)加速 Spark 3.x 应用程序的方式。
APACHE SPARK 3.x GPU 加速的软件堆栈
在实际运用 ML 理论时,无论哪行哪业,也无论何种用例,许多数据科学问题都是采用以下类似步骤破解:以迭代方式预处理数据以生成特征,使用不同的参数训练模型,以及评估模型以确保根据其表现获得有价值的结论。
RAPIDS 有助于加快以上所有步骤的速度,同时大幅提高用户的硬件投资回报。早期客户在运行全部数据流程时需要数天(即便不是数周),而现在只需几分钟即可完成运行。数据科学家可通过更多迭代探索更多模型和参数组合,并使用更大的数据集进行训练,从而能够降低成本,同时提高模型的准确性。
零售商的预测能力显著提高。金融公司的信用风险评估水平越来越高。广告技术公司的点击率预测能力显著提高。数据科学家通常可取得 1%-2% 的研发进步,但这样的成果却可带来数千万乃至数亿美元的收入和盈利。