构建Tensorflow RDMA的Docker镜像

简介: RDMA是一个远程通讯技术,它通过Kernel bypass等方式降低数据传输中的延迟和CPU消耗。 在分布式训练中,由于多个Worker之间或者Worker和Paramater Server 之间需要大量传输模型变量。当GPU到达一定数量后,受制于网络带宽以及TCP协议的延迟,通讯往往会成为计算性能的瓶颈,而在分布式训练中使用RDMA技术能够非常明显地提高训练速度。 #### Tenso

RDMA是一个远程通讯技术,它通过Kernel bypass等方式降低数据传输中的延迟和CPU消耗。
在分布式训练中,由于多个Worker之间或者Worker和Paramater Server 之间需要大量传输模型变量。当GPU到达一定数量后,受制于网络带宽以及TCP协议的延迟,通讯往往会成为计算性能的瓶颈,而在分布式训练中使用RDMA技术能够非常明显地提高训练速度。

Tensorflow

Tensorflow是谷歌开源的深度学习框架,它有丰富的平台支持和API,也可以非常轻松地构建分布式模型训练。
Tensorflow 在实现里支持RDMA作为其分布式场景的通讯协议,但是官方镜像默认没有支持RDMA。需要重新构建tensorflow,并开启RDMA相关的构建参数。 Tensorflow 对 RDMA的支持和实现协议参见文档: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/verbs/README.md

如何build from source 可以见官网
https://www.tensorflow.org/install/source

开始构建

找一台GPU节点,运行develop容器,作为编译环境

docker run -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" tensorflow/tensorflow:nightly-devel-gpu-py3 bash

在dev容器中执行build

# 开启RDMA参数
export TF_NEED_GDR=1
export TF_NEED_VERBS=1
tensorflow/tools/ci_build/builds/configured GPU 
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt  # create package
chown $HOST_PERMS /mnt/tensorflow-*.whl

可以尝试安装, 检查下编译结果:

pip uninstall tensorflow  # remove current version
pip install /mnt/tensorflow-*.whl
cd /tmp  # don't import from source directory
python -c "import tensorflow as tf; print(tf.contrib.eager.num_gpus())"

下载正式构建的dockerfile和所需文件:

curl -OL https://raw.githubusercontent.com/tensorflow/tensorflow/r1.12/tensorflow/tools/dockerfiles/dockerfiles/nvidia.Dockerfile
curl -OL https://raw.githubusercontent.com/tensorflow/tensorflow/r1.12/tensorflow/tools/dockerfiles/bashrc

nvidia.Dockerfile 做一下修改,将之前编译的Tensorflow whl文件添加到镜像并执行安装

ARG TF_PACKAGE=tensorflow-gpu
RUN ${PIP} install ${TF_PACKAGE}

改为

ADD . /tensorflow-rdma-gpu 
ARG TF_PACKAGE=/tensorflow-rdma-gpu/*.whl
RUN ${PIP} install ${TF_PACKAGE}
RUN rm -rf /tensorflow-rdma-gpu 

构建正式镜像

docker build . -f nvidia.Dockerfile -t tensorflow-rdma

如果希望在镜像里加入一些mellanox的工具,可以在dockerfile最后再扩展一下。

RUN apt-get update && apt-get install -y --no-install-recommends \
        libibverbs-dev \
        librdmacm-dev \
        wget \
        && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*
RUN wget http://content.mellanox.com/ofed/MLNX_OFED-4.1-1.0.2.0/MLNX_OFED_LINUX-4.1-1.0.2.0-ubuntu16.04-x86_64.tgz && \
        tar -xzvf MLNX_OFED_LINUX-4.1-1.0.2.0-ubuntu16.04-x86_64.tgz && \
        MLNX_OFED_LINUX-4.1-1.0.2.0-ubuntu16.04-x86_64/mlnxofedinstall --user-space-only --without-fw-update --all -q && \
        cd .. && \
        rm -rf MLNX_OFED_LINUX-4.1-1.0.2.0-ubuntu16.04-x86_64 && \
        rm -rf *.tgz

这样你就可以体验RDMA给分布式机器学习带来的极致加速体验。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
1天前
|
缓存 Docker 容器
在Docker中,docker commit生成的镜像和dockerfile生成镜像有什么区别?
在Docker中,docker commit生成的镜像和dockerfile生成镜像有什么区别?
|
22小时前
|
缓存 运维 安全
在Docker中,构建镜像应该遵循哪些原则?
在Docker中,构建镜像应该遵循哪些原则?
|
22小时前
|
Docker 容器
在Docker中,如何批量清理临时镜像文件?
在Docker中,如何批量清理临时镜像文件?
|
22小时前
|
存储 Ubuntu 应用服务中间件
在Docker中,怎么快速查看本地的镜像和容器?
在Docker中,怎么快速查看本地的镜像和容器?
|
22小时前
|
JSON Shell 数据格式
在Docker中,如何查看镜像支持的环境变量?
在Docker中,如何查看镜像支持的环境变量?
|
22小时前
|
Shell Docker 容器
在Docker中,如何退出一个镜像的bash,而不终止它?
在Docker中,如何退出一个镜像的bash,而不终止它?
|
算法框架/工具 计算机视觉 Docker
基于 TensorFlow 、OpenCV 和 Docker 的实时视频目标检测
本文将介绍如何在 Docker 容器中使用 Tensorflow Object-detection API 来执行实时(网络摄像头)和视频的目标检测。
4366 0
|
1天前
|
Docker 容器
|
1天前
|
缓存 开发者 Docker
Dockerfile是Docker容器化过程中的核心组件,它允许开发者以一种可重复、可移植的方式自动化地构建Docker镜像
【8月更文挑战第19天】Dockerfile是构建Docker镜像的脚本文件,含一系列指令定义镜像构建步骤。每条大写指令后跟至少一个参数,按序执行,每执行一条指令即生成新的镜像层。常用指令包括:FROM指定基础镜像;RUN执行构建命令;EXPOSE开放端口;CMD指定容器启动行为等。优化策略涉及减少镜像层数、选择轻量基础镜像、利用缓存及清理冗余文件。示例:基于Python应用的Dockerfile包括设置工作目录、复制文件、安装依赖等步骤。掌握Dockerfile有助于高效自动化构建镜像,加速应用部署。
|
1天前
|
应用服务中间件 Linux nginx
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
这篇文章讨论了Linux虚拟机磁盘扩容的方法,包括外部配置、具体扩容步骤和扩容后的效果验证。同时,文章还涉及了Docker容器磁盘满的问题及其解决方法,如删除不必要的镜像和容器,以及调整Docker的安装路径。此外,还提到了意外情况的处理,例如误删除停止的容器后的应对措施。最后,文章还提供了使用Docker安装nginx的步骤和成功访问的截图。
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx