GPU容器在K1 PowerLinux上的实践

本篇文章通过一个实际的测试案例,展示Power CPU在人工智能方面的生态环境和性能表现。在非x86的市场中,Power CPU在云计算、大数据、人工智能领域生态日趋完善,使用者轻而易举的获得想要的安装包和Docker镜像。本文章非科研论文性质,是对阶段性工作的总结,给遇到同样问题的读者提供一个解决问题的思路。

Power CPU已经有将近30年的历史,历史悠久,性能稳定。本次采用的是最新的K1 PowerLinux FP5280G2服务器,对比通用2U X86服务器。所用的硬件和软件都如下面所列。

硬件

K1 PowerLinux 服务器硬件配置

项目 型号 数量
CPU OpenPOWER9 16C Sforza 2
内存 DDR4 16GB 共128GB 8
磁盘 960GB SSD 6
GPU NVIDIA Tesla T4 GPU 16GB 4
网络 1Gb网口 10Gb网口 各2个

X86 GPU服务器配置

项目 型号 数量
CPU x86 Xeon 10c 4120 2
内存 DDR4 16GB 共64GB 4
磁盘 1TB HDD SATA 7200RPM 2
GPU NVIDIA Tesla T4 GPU 16GB 2
网络 1Gb网口 2

软件

K1 PowerLinux软件配置

项目 优化前版本 优化后版本
OS CentOS-7-power9-Everything-1810.iso CentOS-7-power9-Everything-1810.iso
Kernel 4.14.0-115.el7a.0.1.ppc64le 4.14.0-115.el7a.0.1.ppc64le
GPU驱动 418.116 440.64
CUDA 10.0.130 10.0.130(wmlce161)
cudnn 7.6.0.64 7.6.0.64(wmlce161)
Tensorflow 1.12.3 1.14.0(wmlce161)
K8s 1.14.1 1.14.1
Docker 18.03.1-ce 18.03.1-ce
Nvidia-docker nvidia-docker17.09.0-ce nvidia-docker17.09.0-ce
分布式数据库 Lxxx Lxxx

X86 软件配置

项目 版本
OS Centos7.4 1708
GPU驱动 418.67
CUDA 10.0.130
cudnn 7.6.0.64
Tensorflow 1.14.0
K8s 1.14.1
Docker 19.03.2
Nvidia-docker nvidia-docker2-2.2.2-1
分布式数据库 Lxxx

测试内容:

测试主要验证图像识别在不同硬件平台的性能表现。数据集大小约1个GB,包含1800张图片,图片格式是JPEG,每张大小560KB左右,图片分辨率5120*5120。相关模型6个,模型大小1GB。

测试集群架构,数据来自于存储集群,通过NFS协议数据挂载到GPU服务器上。目录/nfs/data。4台x86服务组成x86集群。2台K1 PowerLinux服务器组成Power集群。两个集群的GPU总数都是8个T4 GPU。测试中GPU是性能瓶颈,这里衡量是两个集群的性能表现。

GPU容器在K1 PowerLinux上的实践
硬件架构图

作业流程

通过SQL创建一个GPU资源组,用于限制模型的GPU资源。该资源组里面模型运行时每个模型实例可以用20GB的内存,和1核CPU,所有模型实例一共可以使用8个GPU卡。(即最多8个实例同时运行)。GPU的资源管理通过Lxxx分布式数据库进行管理。数据导入,导入元数据表,导入图片数据。创建结果表、调用模型、将图例结果写入结果表,查看结果,进行Jxx图像数据调用图像检测模型推理。整个流程通过数据库完成极大的降低了复杂度。
性能表现考核指标项:图片处理总时间,其中包含图片编解码时间,图片推理时间,模型加载时间以及其他要考虑因素,数据读取时间、模型文件下载时间等等。
GPU容器在K1 PowerLinux上的实践流程图

测试结论

测试结论1:不同GPU数量(实例)并行度下,图片处理的总时间K1 PowerLinux的服务器优化后比优化前提升了28%左右。优化后K1 PowerLinux的比我x86服务器提高7%左右的性能。具体数值参照下表:
GPU容器在K1 PowerLinux上的实践测试结论2:不同并行度下图片的解码时间,K1 PowerLinux优化后相比优化前平均提升27%左右。优化后相比x86平均提升33%。具体数值参考下图表。
GPU容器在K1 PowerLinux上的实践测试结论3:不同GPU并行度下图片的检测时间,K1 PowerLinux在优化后比优化前性能提升31%左右。优化后相比于x86性能提升性能8%左右。详细见下表:
GPU容器在K1 PowerLinux上的实践

经验教训1:

在整个测试过程中,给K1 PowerLinux服务器安装正确的操作系统版本就是迈出成功第一步。更建议用户选择正确的操作系统镜像安装,CentOS-7-power9-Everything-1810.iso。可以在centos archive中下载。系统安装完成后,命令与x86上的CentOS7是一模一样的,这时再配置一个有好的yum源,就将事半功倍。这里不妨推荐清华源https://mirrors.tuna.tsinghua.edu.cn/centos-altarch/7/os/power9/
https://mirrors.tuna.tsinghua.edu.cn/centos-altarch/7/extras/power9/
https://mirrors.tuna.tsinghua.edu.cn/centos-altarch/7/updates/power9/

经验教训2:

相比于x86通用2U的服务器,K1 PowerLinux FP5280G2,外围IO设备是和x86相同的,测试中优化前和优化后性能有较大差别的原因在于不同处理器芯片的优化编译不一样,一些软件推出时是在x86平台上做的适配开发,并没有考虑非x86的平台的硬件特性优势。K1 PowerLinux在这种情况下,调优后有30%以上的性能提升,主要有以下几个工作。

  • 选择优化好docker image, wmlce 161。下载链接https://hub.docker.com/r/ibmcom/powerai/
    WMLCE是社区版免费下载,提供有Power上的优化的MLDL的框架、工具库;里面也包含并行加速库DDL,大模型支持LMS等有独特价值的工具库。详细可参考链接。
  • 选择高版本的操作系统,在K1 PowerLinux FP5280G2产品发布后,Centos7.5已经发布,因此建议选择下一个大版本Centos7.6,这样内核的鲁棒性更强,系统更稳定,具体可以参考Centos7.6出来的release note。
  • GPU卡的驱动,建议选择更新的版本440.64,同样的T4卡在Power9上的认证时间在Cuda10.0之后,建议选择更新版本的驱动。详细见Cuda10.1的release note。
  • 使用WMLCE中自带的并行加速的优化库DDL,具体使用方法参看链接。https://www.ibm.com/support/knowledgecenter/SS5SF7_1.7.0/navigation/wmlce_getstarted_ddl.html

通过上述4个大方面的调优方法,加上K1 PowerLinux CPU本身多线程SMT4(更多逻辑核),大L3Cache,PCIe4.0高速通道等先进特性,能够给那些在人工智能方面,CPU有工作负载的任务带来性能提升。

链接:
下载Power9上的centos镜像
https://mirrors.tripadvisor.com/centos-vault/altarch/7.6.1810/isos/power9/