在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%的性能,收益还是比较明显的。

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
362 10
|
4月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
4月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
517 8
|
4月前
|
存储 监控 安全
阿里云渠道商:云服务器价格有什么变动?
阿里云带宽与存储费用呈基础资源降价、增值服务差异化趋势。企业应结合业务特点,通过阶梯计价、智能分层、弹性带宽等策略优化成本,借助云监控与预算预警机制,实现高效、可控的云资源管理。
|
4月前
|
弹性计算 运维 安全
区别及选择指南:阿里云轻量应用服务器与ECS云服务器有什么区别?
阿里云轻量应用服务器适合个人开发者、学生搭建博客、测试环境,易用且性价比高;ECS功能更强大,适合企业级应用如大数据、高流量网站。根据需求选择:轻量入门首选,ECS专业之选。
322 2
|
4月前
|
弹性计算 ice
阿里云4核8G云服务器配置价格:热门ECS实例及CPU处理器型号说明
阿里云2025年4核8G服务器配置价格汇总,涵盖经济型e实例、计算型c9i等热门ECS实例,CPU含Intel Xeon及AMD EPYC系列,月费159元起,年付低至1578元,按小时计费0.45元起,实际购买享折扣优惠。
1034 1
|
4月前
|
存储 弹性计算 安全
阿里云渠道商:新手如何选择阿里云ECS实例?
阿里云ECS凭借弹性扩展、稳定可靠与安全防护,助力企业高效上云。本文系统解析实例规格选择关键因素:业务场景匹配、性能评估、成本优化、地域部署与扩展规划,结合计费模式与实际需求,提供科学选型建议,助您精准匹配资源,提升云上效能。(238字)
|
4月前
|
存储 弹性计算 安全
阿里云渠道商:新手怎么选阿里云ECS实例规格?
本文深入解析阿里云ECS的弹性、稳定与安全优势,详解实例规格选择的关键因素,涵盖应用场景、性能需求、成本预算、地理位置与扩展性,助力用户精准选型,优化业务部署与成本效益。

热门文章

最新文章

相关产品

  • 云服务器 ECS