Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

目前提供的镜像ubuntu-gpu-mxnet1.3、ubuntu-gpu-tf1.12,似乎有一些问题,尝试修复了一下 #116

Closed
icemoon1987 opened this issue Jan 31, 2019 · 2 comments

Comments

@icemoon1987
Copy link
Contributor

宿主机环境:

  1. 硬件环境:AWS p2.xlarge EC2 instance,一块 Nvidia Tesla K80显卡
  2. 操作系统:Amazon Linux
  3. 软件环境:MXNet-1.3, TensorFlow-1.12, PyTorch-1.0, Keras-2.2, Chainer-5.1, Caffe/2-0.8, Theano-1.0 & CNTK-2.6, NVIDIA CUDA 10.0, cuDNN, NCCL, Intel MKL-DNN, Docker & NVIDIA-Docker2.

目前提供的xdl GPU Docker镜像,似乎有这么几个问题:

  1. 镜像中缺环境变量:NVIDIA_VISIBLE_DEVICES、NVIDIA_DRIVER_CAPABILITIES,导致用nvidia-docker(docker run --runtime=nvidia)启动container的时候,不会加载宿主机的nvidia-driver相关库和工具,包括nvidia-smi等;

  2. 镜像中带有nvidia-driver,导致冲突。

根据nvidia-docker的官方文档和说明:
https://github.com/NVIDIA/nvidia-docker
https://devblogs.nvidia.com/gpu-containers-runtime/

container应该直接使用宿主机的nvidia-driver,而镜像中不应该带有nvidia-driver。如果按照1中所说,在nvidia-docker启动镜像时,加上这两个环境变量,将导致尝试加载宿主机的nvidia-driver相关库和工具时,由于镜像中也存在同样的工具,导致冲突。镜像启动失败。

  1. 文档和Dockerfile安装cuda的方式,导致镜像中带有nvidia-driver。

根据git上的文档:https://github.com/alibaba/x-deeplearning/wiki/%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85

和git上的Dockerfile:https://github.com/alibaba/x-deeplearning/blob/master/xdl/docker/Dockerfile

安装 cuda=9.0.176-1 会导致在镜像中重新安装 nvidia-driver。参考Nvidia官方镜像Dockerfile的方式:https://gitlab.com/nvidia/cuda/blob/ubuntu16.04/9.0/base/Dockerfile,单独安装cuda的相应计算库。

  1. 镜像中的cuda 9库版本为 410.72,对宿主机的nvidia-driver版本有要求。解决方式是,在构建时,重新安装cuda相关组件;

  2. 镜像中的pip不能直接使用。

解决方案:

  1. 依赖于提供的GPU镜像;(避免重新构建所有环境)
  2. 删除GPU镜像中的cuda和nvidia相关库;(解决nvidia-driver冲突)
  3. 采用Nvidia官方的方式,重新安装用到的cuda计算库;(解决安装cuda大包联带安装nvidia-driver,解决cuda 9库小版本问题)
  4. 补充必要的环境变量,是的nvidia-docker加载宿主机nvidia-driver相关库和工具。(解决nvidia-docker启动镜像问题)
  5. 稍微修改pip脚本,使其可用。(解决pip问题)

已提交包含上述解决方案的Dockfile的patch。

同时,XDL对hdfs有要求,所以实际跑模型之前,还需要设置以下环境变量:

export HADOOP_USER_NAME=hdfs
export HADOOP_HOME="/home/ec2-user/chenhe/TDM/x-deeplearning/xdl/test/binary/hadoop-2.8.5"
export HADOOP_HDFS_HOME="/home/ec2-user/chenhe/TDM/x-deeplearning/xdl/test/binary/hadoop-2.8.5"
export PATH=$HADOOP_HOME/bin:$PATH
export CLASSPATH=$(hadoop classpath --glob):$CLASSPATH
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
export LD_LIBRARY_PATH="/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server":$LD_LIBRARY_PATH

@houxiaoxia1
Copy link

@icemoon1987 你好,谢谢分享,可以详细介绍下修改步骤吗?第4步如何执行?不是太明白环境变量NVIDIA_VISIBLE_DEVICES、NVIDIA_DRIVER_CAPABILITIES如何加进去,是初始启动镜像的时候加吗,我试的时候会报错,看你前面的介绍如果在启动镜像时加确实也会报错,报错如下:
image
那在执行完第2、第3步,也即删除GPU镜像中的cuda和nvidia相关库,重装cuda计算库(跳过驱动安装),之后的环境变量如何添加?方便的话请写一些添加指令,谢谢。

@houxiaoxia1
Copy link

谢谢 已找到解决办法
f8d031c

docker build -t xdl:ubuntu-gpu-mxnet1.3 .

This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants