在ECS上使用eRDMA加速Tensorflow

简介: eRDMA是8代ECS自带的RDMA加速功能,可以充分发挥RDMA的优势,提升应用的性能。本文将介绍如何使用eRDMA来加速Tensorflow,并实测benchmark下的性能。

TensorFlow是由Google Brain团队开发的开源深度学习框架,于2015年首次发布。从发布以来,TensorFlow在学术界和工业界都取得了巨大的成功,成为了目前主流的深度学习框架之一。本文以实践的形式,主要介绍如何在ECS上使用eRDMA来加速Tensorflow应用。

1. 环境配置

1.1 ECS实例配置

在本文中,我们创建了2台g8ae.32xlarge的实例,部属在同一个部属集当中,并且为主网卡配置了eRDMA功能。配置方法参考这篇文档。操作系统选择Alibaba Cloud Linux 2。

1.2 软件安装

软件 版本
Tensorflow 1.15.5
python 3.6.9
gcc 7.3.1
numpy 1.8.5
bazel 0.26.1

我们选择Tensorflow 1.x的最新版本1.15.5,并且源码编译方式来使能添加RDMA的支持。如果已经有了相应的tensorflow的whl包,可以直接安装,不需要每次都重新编译。

按照TF官网的描述,配套的Python版本、编译器版本以及构建工具版本分别如下图所示。我们选择了Python 3.6.9、GCC 7.3.1以及Bazel 0.26.1。

1.2.1 GCC 7的安装

Alinux2当中自带的gcc是4.8.5版本,不符合Tensorflow的编译要求,我们需要更新gcc版本。alinux2当中提供了devtoolset可以方便地在OS内部属不同版本的GCC:

yum install -y alinux-release-experimentals
yum install -y devtoolset-7-gcc devtoolset-7-gdb devtoolset-7-binutils devtoolset-7-make devtoolset-7-gcc-c++

为了在每次登录shell的时候,都默认使能gcc7,可以在~/.bashrc中添加

source /opt/rh/devtoolset-7/enable

在shell当中使用gcc -v确认当前gcc版本已经生效:

1.2.2 安装python 3.6.9

我们使用conda来方便管理python的版本。
执行如下命令安装以及初始化conda:

yum install -y conda
conda init bash
# 执行完这一步之后,需要退出shell重新登录

新建一个python 3.6.9的环境

conda create --name test python=3.6.9

切换到python 3.6.9的环境当中:

#使用如下命令来切换到3.6.9环境当中,
conda activate test && python -V

回显如下图所示:

1.2.3 安装bazel

下载bazel的对应版本,并且将其拷贝到系统的path目录当中:

wget https://github.com/bazelbuild/bazel/releases/download/0.26.1/bazel-0.26.1-linux-x86_64
chmod +x bazel-0.26.1-linux-x86_64
mv ./bazel-0.26.1-linux-x86_64 /usr/bin/bazel

1.2.4 编译安装Tensorflow 1.15.5

首先,安装git工具:

yum install -y git

然后安装编译tensorflow的依赖:

pip install 'numpy<1.19.0'
pip install -U pip six wheel mock
pip install future
pip install keras_applications==1.0.8 --no-deps
pip install keras_preprocessing==1.1.2 --no-deps
pip install pandas

从github上clone tensorflow仓库:

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
git checkout v1.15.5

使用如下命令编译tensorflow:

./configure
export CC=/opt/rh/devtoolset-7/root/usr/bin/gcc; \
    export CXX=/opt/rh/devtoolset-7/root/usr/bin/g++; \
    bazel build --config=v1 --config=verbs \
  //tensorflow/tools/pip_package:build_pip_package

使用如下命令将构建的tensorflow打包

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

最终我们就在/tmp/tensorflow_pkg下生成了tensorflow-1.15.5-cp36-cp36m-linux_x86_64.whl包,使用如下命令安装:

pip install /tmp/tensorflow_pkg/tensorflow-1.15.5-cp36-cp36m-linux_x86_64.whl

我们在另外一个环境上,安装python3.6.9,并将/tmp/tensorflow_pkg/tensorflow-1.15.5-cp36-cp36m-linux_x86_64.whl拷贝过去,直接使用pip安装即可。

2. benchmark基准测试

我们从github上下载tensorflow的基准测试程序:

git checkout https://github.com/tensorflow/benchmarks.git
cd benchmarks
git checkout 16af178ad312e8c1213efb27a5f227044228bfdf
cd ..

2.2 使用TCP测试

我们在11.0.0.29节点上运行:

CUDA_VISIBLE_DEVICES=  python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \
  --ps_hosts=11.0.0.29:9100 \
  --worker_hosts=11.0.0.30:9200 \
  --job_name=ps \
  --local_parameter_device=cpu \
  --task_index=0 \
  --device=cpu \
  --data_format=NHWC \
  --server_protocol=grpc

我们在11.0.0.30节点上运行:

UDA_VISIBLE_DEVICES=  python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \
  --ps_hosts=11.0.0.29:9100\
  --worker_hosts=11.0.0.30:9200 \
  --job_name=worker \
  --task_index=0 \
  --server_protocol=grpc \
  --variable_update=parameter_server \
  --local_parameter_device=cpu \
  --model=resnet50 \
  --device=cpu \
  --batch_size=16 \
  --data_format=NHWC

上述两个命令用于测试TCP时的性能,测试结果如下图所示:

2.2 使用eRDMA测试

Tensorflow使用RDMA时,链接建立采用OOB(out of band,带外)的方式进行,我们需要将erdma的工作模式切换到compat模式以便兼容OOB建链。具体的命令如下:

rmmod erdma
modprobe erdma compat_mode=1

然后我们就可以继续测试eRDMA了。在同样的节点上,将2.1小节中的命令里面的

--server_protocol=grpc

修改为

--server_protocol=grpc+verbs

就可以使用eRDMA,测试结果如下图所示。

对比两次的测试,我们可以看到,仅仅使能了eRDMA,可以在这个benchmark中提升约17%的性能,收益还是比较明显的。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
PyTorch Serverless 算法框架/工具
Serverless应用引擎中部署带有GPU支持的PyTorch镜像
Serverless应用引擎中部署带有GPU支持的PyTorch镜像
225 1
|
机器学习/深度学习 人工智能 监控
GPU云服务器上部署Stable Diffusion玩
GPU云服务器上部署Stable Diffusion玩
561 1
|
9天前
|
并行计算 Linux PyTorch
在云上部署ChatGLM2-6B大模型(GPU版)
本教程指导您在配置了Alibaba Cloud Linux 3的GPU云服务器上,安装大模型运行环境(如Anaconda、Pytorch等),并部署大语言模型,最后通过Streamlit运行大模型对话网页Demo。教程包括创建资源、登录ECS实例、安装及校验CUDA、NVIDIA驱动和cuDNN等步骤。
|
30天前
|
机器学习/深度学习 并行计算 数据挖掘
请详细介绍GPU加速
【10月更文挑战第20天】请详细介绍GPU加速
|
6月前
|
机器学习/深度学习 弹性计算 自然语言处理
【阿里云弹性计算】深度学习训练平台搭建:阿里云 ECS 与 GPU 实例的高效利用
【5月更文挑战第28天】阿里云ECS结合GPU实例为深度学习提供高效解决方案。通过弹性计算服务满足大量计算需求,GPU加速训练。用户可按需选择实例规格,配置深度学习框架,实现快速搭建训练平台。示例代码展示了在GPU实例上使用TensorFlow进行训练。优化包括合理分配GPU资源和使用混合精度技术,应用涵盖图像识别和自然语言处理。注意成本控制及数据安全,借助阿里云推动深度学习发展。
258 2
|
6月前
|
机器学习/深度学习 存储 弹性计算
阿里云GPU云服务器有哪些版本
阿里云GPU云服务器有哪些版本
|
6月前
|
JavaScript Java PHP
阿里云GPU云服务器支持哪些语言
阿里云GPU云服务器支持哪些语言
|
人工智能 文件存储
体验阿里云NAS+PAI-ECS部署Stable Diffusion文生图模型
当下,AIGC在生活中无处不见。作为一种新型的内容生产方式,AIGC在传媒、电商、影视等行业的作用可谓是卓有成效。我们可以用AI自主生成创造新的文本、图像、音乐、视频、3D交互内容,一定程度上为日常工作带来了很大的便利。
432 12
体验阿里云NAS+PAI-ECS部署Stable Diffusion文生图模型
|
编解码 弹性计算 Cloud Native
倚天ECS视频编解码之x264性能
在平头哥发布了首颗为云而生的 CPU 芯片倚天710之后,搭载倚天 710 的 ECS 实例表现出强劲的性能实力,在x264编解码场景下有着极高的性价比。
|
机器学习/深度学习 弹性计算 并行计算
在ECS上部署深度学习环境
非科班小白,初次上手心得,才疏学浅,如有错误,虚心求指正
在ECS上部署深度学习环境
下一篇
无影云桌面