本文作者:BYD信息中心-数据中心管理部-董睿
进入正文之前先打一个小广告,手动狗头
比亚迪西安研发中心(与深圳协同办公),base西安,招聘大数据平台运维、架构方向的工程师,实时计算方向工程师,感兴趣的小伙伴请投递简历至dong.rui@byd.com
1.文档编写目的
RAPIDS 全称是Real-time Acceleration Platform for Integrated Data Science,是 NVIDIA 针对数据科学和机器学习推出的 GPU 加速库,RAPIDS的推出其实是为了弥补GPU在大数据处理以及传统机器学习上的缺口,也反应出NVIDIA想要打通数据处理和深度学习模型,构成统一的从raw data到result的pipeline全部都在GPU上运行的闭环。
Apache Spark 3.0历时两年的开发,终于在2020年发布,Release Note里面也是包含很多重磅的功能,其中之一就是允许开发者以plugin的形式修改SQL以及DataFrame的后端执行引擎,同时这种修改对Spark的上层用户透明。
NVIDIA借助这个功能,推出针对Spark的RAPIDS Plugin, 将Spark上数据处理迁移到GPU中,只需要用户做简单的代码修改,就可以感受GPU的高性能计算。
我们看下官网的一些解释:
- 在无需更改任何代码的情况下显著提高 Spark SQL 和 DataFrame 的运行性能,从而加速 Spark 中的 ETL 数据流程。
- 无需独立的机器学习和深度学习集群,即可在相同的基础架构上加速数据准备和模型训练。
- 加速 Spark 分布式集群中各节点之间的数据传输性能。这些资源库使用 UCF Consortium 的开源 UCX(Unified Communication X)框架,并通过使数据直接在 GPU 内存之间移动来最大程度地减少延迟。
所以整体来看,就是可以使用GPU加速ETL、数据清洗等数据准备工作,同时和后期的模型训练Job无缝对接,形成整个从raw data到result的pipeline。
我们再来看看官方给出的ETL在CPU和GPU上的对比数据:
本文主要描述如何在CDP7.1.7中对计算节点安装NVIDIA Tesla T4,并使用RAPIDS对Spark3应用进行加速。
测试环境
- 操作系统:CentOS Linux release 7.9.2009 (Core)
- JDK:jdk1.8.0_232-cloudera
- CDH:7.1.7 SP1
- Spark:3.2.1.3.2.7171000
- 显卡:Nvidia Tesla T4
2.Nvidia Tesla T4安装
1.安装显卡硬件,该过程省略,无法用言语描述。
2.下载显卡驱动
下载地址:
https://www.nvidia.cn/Download/index.aspx?lang=cn
根据显卡型号选择对应驱动
下载
下载后得到如下rpm包:
nvidia-driver-local-repo-rhel7-510.47.03-1.0-1.x86_64.rpm
3.操作系统安装驱动
在官网的下载页面,官方已经在其他信息提供安装步骤
- 显卡和驱动安装位置
You can configure GPU scheduling and isolation on your cluster. Currently only Nvidia GPUs are supported in YARN.
YARN NodeManager must be installed with the Nvidia drivers.
根据CDP文档提示,实际上就是所有的YARN NodeManager进行安装
- 安装驱动包
上传下载好的包到各计算节点,并进行安装
#Once you accept the download please follow thesteps listed below
rpm -invidia-driver-local-repo-rhel7-510.47.03-1.0-1.x86_64.rpmyum clean allyum install cuda-driversreboot
此处没有其他额外说明,安装完毕后,需要重启操作系统生效
这里实际上就是配置了一个本地yum源,对于强迫症,安装后注释掉yum源
4.验证
操作系统重启完毕,执行
nvidia-smi
此时,显卡部分安装完毕
5.其他说明
之前参加Cloudera会议时,会议方有如下针对spark算力的介绍和推荐
GPU vs CPU
会议方推荐显卡为A30
受于条件限制我们测试使用的是T4,性能上差距还是非常明显
https://www.nvidia.cn/data-center/products/a30-gpu/
3.集群调整和配置
3.1Enabling CDS 3.2.1 with GPU Support
根据CDP文档中要求,安装前必须启用GPU scheduling and isolation;另外是基于角色组的配置,我们此次并没有配置这方面内容
文档链接如下:
https://docs.cloudera.com/cdp-private-cloud-base/7.1.7/cds-3/topics/spark-activate-cds-for-gpu.html#concept_m5m_zdd_2sb
3.2GPU scheduling and isolation
如上文中提到YARN,这里实际上就是修改配置YARN
1.主机配置
In Cloudera Manager, navigate to Hosts > Hosts Configuration.
2.搜索cgroup
3.启用基于 Cgroup 的资源管理
4.保存
5.在Yarn配置
6.搜索cgroup
7.启用Use CGroups for Resource Management
8.启用Always use Linux Container Executor
9.搜索gpu
10.启用Enable GPU Usage
以下默认即可
NodeManager GPU Devices Allowed
NodeManager GPU Detection Executable
11.重启所有服务
CDP文档地址:
https://docs.cloudera.com/cdp-private-cloud-base/7.1.7/yarn-allocate-resources/topics/yarn-configuring-gpu-scheduling-and-isolation.html
4.Spark GPU加速测试
4.1 测试DEMO
SSB与Apache Flink同属于一个Parcel安装包,但是csd文件
spark3-shell --conf spark.rapids.sql.enabled=true --conf spark.executor.memoryOverhead=5g --conf spark.task.resource.gpu.amount=1 --conf spark.rapids.sql.concurrentGpuTasks=2 --conf spark.sql.files.maxPartitionBytes=256m --conf spark.locality.wait=0s --conf spark.sql.adaptive.enabled=true --conf spark.rapids.memory.pinnedPool.size=2G
val df = sc.makeRDD(1 to 100000000, 6).toDFval df2 = sc.makeRDD(1 to 100000000, 6).toDFdf.select($"value" as "a").join(df2.select($"value" as "b"), $"a" === $"b").count
4.2 Spark3 on GPU
以上为本次的一个简单测试
比亚迪西安研发中心(与深圳协同办公),base西安,招聘大数据平台运维、架构方向的工程师,实时计算方向工程师,感兴趣的小伙伴请投递简历至dong.rui@byd.com
参考文档:
当Spark遇上RAPIDS: GPU也可以玩转大数据处理https://zhuanlan.zhihu.com/p/349710160 NVIDIA spark-rapidsGithub地址https://github.com/NVIDIA/spark-rapids Getting Startedhttps://github.com/NVIDIA/spark-rapids/blob/branch-22.06/docs/get-started/getting-started.md Tuning Guidehttps://github.com/NVIDIA/spark-rapids/blob/branch-22.06/docs/tuning-guide.md Configurationhttps://github.com/NVIDIA/spark-rapids/blob/branch-22.06/docs/configs.md Nvidia官方地址https://nvidia.github.io/spark-rapids/ Getting Startedhttps://nvidia.github.io/spark-rapids/docs/get-started/getting-started-on-prem.html Configurationhttps://nvidia.github.io/spark-rapids/docs/configs.html Tuning Guidehttps://nvidia.github.io/spark-rapids/docs/tuning-guide.html Apache Spark3文档参数配置https://spark.apache.org/docs/latest/running-on-yarn.html#spark-properties