Linux系统下使用Docker编译GPU版本的PaddlePaddle“踩坑”记录
Created by: wzzju
Linux系统下使用Docker编译GPU版本的PaddlePaddle“踩坑”记录
文档声明:编译过程参照官网文档(Fluid 0.14.0)。
根据官方文档,使用Docker容器编译PaddlePaddle,执行命令如下:
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
git checkout -b 0.14.0 origin/release/0.14.0
docker run -it -v $PWD:/paddle -e "WITH_FLUID_ONLY=ON" -e "WITH_GPU=OFF" -e "WITH_TESTING=OFF" paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5 bash -x /paddle/paddle/scripts/paddle_build.sh build
问题1
原因分析:
如下图所示,官网给出了两种使用Docker容器编译PaddlePaddle的方式,即通过1->3
步骤编译或通过1->2->4
步骤编译。由问题1可知,通过1->3
步骤编译会报错,说明官网文档第3步中使用的paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5
Docker镜像环境存在问题。
问题2
接下来,使用1->2->4
步骤进行编译时,在下载docker镜像时出现如下错误:
原因分析
由上图可知,生成docker镜像时需要下载golang,访问的网址为https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz
(谷歌有关),故而使用者需要保证电脑可以科学上网(翻墙)。
解决方法
选择下载并使用docker.paddlepaddlehub.com/paddle:latest-dev
docker镜像,执行命令如下:
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
git checkout -b 0.14.0 origin/release/0.14.0
sudo docker run --name paddle-test -v $PWD:/paddle --network=host -it docker.paddlepaddlehub.com/paddle:latest-dev /bin/bash
进入docker编译GPU版本的PaddlePaddle,执行命令如下:
mkdir build && cd build
# 编译GPU版本的PaddlePaddle
cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=ON
make -j$(nproc)
编译结果
test_fit_a_line.py
程序:
安装PaddlePaddle并运行pip install build/python/dist/*.whl
python python/paddle/fluid/tests/book/test_fit_a_line.py
问题3——GPU版本的PaddlePaddle运行结果报错
原因分析
使用sudo docker run --name paddle-test -v $PWD:/paddle --network=host -it docker.paddlepaddlehub.com/paddle:latest-dev /bin/bash
命令创建的docker容器仅能支持运行CPU版本的PaddlePaddle。
解决方法
使用如下命令重新开启支持GPU运行的docker容器:
export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
sudo docker run ${CUDA_SO} ${DEVICES} --rm --name paddle-test-gpu -v /usr/bin/nvidia-smi:/usr/bin/nvidia-smi -v $PWD:/paddle --network=host -it docker.paddlepaddlehub.com/paddle:latest-dev /bin/bash
进入docker之后执行如下命令进行PaddlePaddle的安装及测试运行:
export LD_LIBRARY_PATH=/usr/lib64:/usr/local/lib:$LD_LIBRARY_PATH
pip install build/python/dist/*.whl
python python/paddle/fluid/tests/book/test_fit_a_line.py