在ECS上使用eRDMA加速Tensorflow

本文涉及的产品
轻量应用服务器 2vCPU 4GiB,适用于搭建Web应用/小程序
轻量应用服务器 2vCPU 4GiB,适用于搭建容器环境
轻量应用服务器 2vCPU 4GiB,适用于网站搭建
简介: 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
相关文章
|
22天前
|
存储 缓存 数据挖掘
阿里云目前最便宜云服务器介绍:38元、99元、199元性能,选购攻略参考
轻量应用服务器2核2G峰值200M带宽38元1年;云服务器经济型e实例2核2G3M带宽99元1年;云服务器通用算力型u1实例2核4G5M带宽199元1年。对于还未使用过阿里云服务器的用户来说,大家也不免有些疑虑,这些云服务器性能究竟如何?它们适用于哪些场景?能否满足自己的使用需求呢?接下来,本文将为您全方位介绍这几款云服务器,以供您了解及选择参考。
|
26天前
|
网络安全 云计算
如何设置阿里云轻量应用服务器镜像?
本文介绍了在阿里云轻量应用服务器上创建与配置镜像的详细步骤。镜像是一种特殊的文件系统映射,可用于快速克隆服务器配置。内容涵盖准备条件、登录控制台、创建实例、生成镜像、下载与设置镜像,以及如何使用镜像启动新实例。适合希望提升服务器部署效率的用户参考。
|
29天前
|
存储 弹性计算 安全
阿里云轻量服务器通用型、CPU优化型、多公网IP型、国际型、容量型不同实例区别与选择参考
阿里云轻量应用服务器实例类型分为通用型、CPU优化型、多公网IP型、国际型、容量型,不同规格族的适用场景和特点不同,收费标准也不一样。本文为大家介绍轻量应用服务器通用型、多公网IP型、容量型有何区别?以及选择参考。
|
6天前
|
弹性计算 Devops Shell
用阿里云 DevOps Flow 实现 ECS 部署自动化:从准备到落地的完整指南
阿里云 DevOps Flow 是一款助力开发者实现自动化部署的高效工具,支持代码流水线构建、测试与部署至ECS实例,显著提升交付效率与稳定性。本文详解如何通过 Flow 自动部署 Bash 脚本至 ECS,涵盖环境准备、流水线搭建、源码接入、部署流程设计及结果验证,助你快速上手云上自动化运维。
42 0
|
1月前
|
弹性计算 编解码 大数据
性价比最高提升50%!阿里云企业级云服务器上新
阿里云ECS云服务器推出全新升级的u2系列实例,包括基于Intel的u2i实例与首个基于AMD的u2a实例,提供企业级独享算力,综合性价比最高提升50%。u2i实例已开放公测,适用于中小型数据库、企业网站建设等场景。同时发布基于AMD的第九代旗舰实例g9ae,性能提升65%,适用于大数据、视频转码等密集型业务。
174 0
|
14天前
|
存储 域名解析 弹性计算
阿里云上云流程参考:云服务器+域名+备案+域名解析绑定,全流程图文详解
对于初次通过阿里云完成上云的企业和个人用户来说,很多用户不仅是需要选购云服务器,同时还需要注册域名以及完成备案和域名的解析相关流程,从而实现网站的上线。本文将以上云操作流程为核心,结合阿里云的活动政策与用户系统梳理云服务器选购、域名注册、备案申请及域名绑定四大关键环节,以供用户完成线上业务部署做出参考。
|
21天前
|
存储 弹性计算 固态存储
阿里云云服务器配置攻略
选择云服务器需结合业务需求、访问量、ECS实例规格、存储类型与带宽等因素。个人用户可选轻量服务器,企业应用需更高配置,如通用型或内存型实例。带宽根据流量选择,支持按固定或使用量计费。存储方面,系统盘可选小容量,数据盘按需配置,I/O敏感业务建议SSD或ESSD云盘。
|
27天前
|
域名解析 运维 监控
阿里云轻量服务器的系统镜像和应用镜像的区别
轻量应用服务器是阿里云推出的易用型云服务器,支持一键部署、域名解析、安全管理和运维监控。本文介绍其系统镜像与应用镜像的区别及选择建议,助您根据业务需求和技术能力快速决策,实现高效部署。
|
28天前
|
弹性计算 负载均衡 安全
阿里云轻量应用服务器与ECS区别
阿里云轻量应用服务器与ECS云服务器对比:轻量版适合新手和小型应用,套餐化设计,含大流量,易上手但性能和灵活性有限;ECS为专业版,配置灵活,性能强,适合企业级应用,但操作复杂,生态丰富,按需计费。两者定位不同,适用于不同场景。

热门文章

最新文章

相关产品

  • 云服务器 ECS