TensorFlow 是目前主流的深度学习框架之一(虽然它有很多反人类的设计),它支持基于 GPU 的模型训练和预测,本文主要介绍 GPU 环境的快速部署。
本文最后更新于 2018年04月01日 以最新的 cuDNN7.0 + CUDA 9.0 + tensorflow_gpu==1.7 为例
环境
Ubuntu 16.04
NVIDIA Driver
CUDA 8.0 CUDA 9.0
cuDNN 5.1 cuDNN 7.0
总览
GPU 环境部署主要涉及三个步骤:
- 显卡驱动安装(本文不作介绍)
CUDA 安装
cuDNN 安装
显卡驱动安装
一般步骤:
卸载旧的驱动(如果有)=> 添加源并通过 apt 安装对应版本 => 重启
建议根据自身系统参考 NVIDIA 的官方文档,本文不作详细介绍。
安装 CUDA
下载并安装 CUDA 9.0
提示:默认安装到 /usr/local 并创建软连 /usr/local/cuda => /usr/local/cuda-9.0
注意:CUDA 9.0 需要 NVIDIA 显卡驱动版本不低于 version 384.xx。
检查驱动版本
nvidia-smi
注意:强烈不建议通过 apt-get 安装,根据个人经验,你很可能会碰到各种奇奇怪怪的问题。使用 runfile 安装更为可靠。
cd /tmp wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run chmod +x cuda_9.0.176_384.81_linux-run ./cuda_9.0.176_384.81_linux-run --extract=$HOME cd $HOME sudo ./cuda-linux.9.0.176-22781540.run
设置 CUDA 环境变量
sudo bash -c "echo /usr/local/cuda/lib64/ > /etc/ld.so.conf.d/cuda.conf" echo " ##### about CUDA ##### export CUDA_HOME=/usr/local/cuda export PATH=\$CUDA_HOME/bin:\$PATH export LD_LIBRARY_PATH=\$CUDA_HOME/lib64:\$LD_LIBRARY_PATH" >> $HOME/.bashrc source ~/.bashrc ldconfig rm $HOME/cuda-linux.9.0.176-22781540.run
检查 CUDA 版本
nvcc --version
安装 cuDNN
下载 cuDNN 7.0
提示:由于我们已经将 CUDA 安装到 /usr/local 目录,所以我们直接将 cuDNN 在该目录下解压,这样解压后的文件会自动放进 cuda 的对应目录
cd /usr/local wget http://developer.download.nvidia.com/compute/redist/cudnn/v7.0.5/cudnn-9.0-linux-x64-v7.tgz
解压安装
sudo tar -xvzf cudnn-9.0-linux-x64-v7.tgz rm cudnn-9.0-linux-x64-v7.tgz ldconfig
通过 TensorFlow 验证 GPU 环境是否就绪
验证方法
python -c 'import tensorflow as tf; print tf.test.is_gpu_available()'
显示 True 表示安装成功,否则请检查以下情况是否存在:
- 通过 pip freeze 检查是否安装的是 gpu 版本,或者是否还装了 cpu 版本,有则卸载掉 cpu 版本的依赖包。(提示:如果你安装了 tensorflow-serving-api 它会默认安装 cpu 版的 tensorflow)。
通过 pip install tensorflow_gpu 安装的预构建版本请检查编译使用的 CUDA、cuDNN 等是否与你的版本一致。点击查看
如果提示 “CUDA driver version is insufficient for CUDA runtime version” 那么很可能是 CUDA 版本和你的显卡驱动版本不兼容。可参考以下:
#CUDA版本: 最低显卡驱动版本要求 CUDA 9.1: 387.xx CUDA 9.0: 384.xx CUDA 8.0 375.xx (GA2) CUDA 8.0: 367.4x CUDA 7.5: 352.xx CUDA 7.0: 346.xx CUDA 6.5: 340.xx CUDA 6.0: 331.xx CUDA 5.5: 319.xx CUDA 5.0: 304.xx CUDA 4.2: 295.41 CUDA 4.1: 285.05.33 CUDA 4.0: 270.41.19 CUDA 3.2: 260.19.26 CUDA 3.1: 256.40 CUDA 3.0: 195.36.15