前言
基于Docker 搭建 Pytorch_GPU & tersorflow_GPU
环境
系统环境
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
Linux version : 5.3.0-46-generic ( buildd@lcy01-amd64-013 )
Gcc version: 7.5.0 ( Ubuntu 7.5.0-3ubuntu1~18.04 )
软件信息
version :
None
正文
1、安装Docker
略
2、安装nvidia显卡驱动
# 查看本机是否安装了nvidia显卡驱动程序
$ sudo dpkg --list | grep nvidia-*
# 卸载nvidia程序
$ sudo apt-get purge nvidia*
# 查看gpu硬件版本情况
$ cat /proc/driver/nvidia/version
# 查看推荐的nvidia驱动版本
$ ubuntu-drivers devices
## 这里选择 recommended,即
sudo apt install nvidia-driver-470
3、安装nvidia-Docker
因为原来的docker不支持GPU加速,所以NVIDIA单独做了一个docker,来让docker镜像可以使用NVIDIA的gpu。
4、部署
镜像(image),是一个配置好的环境。容器(container),是image的具体实例。镜像和容器的关系相当于面向对象中类与对象的关系。
4.1、部署Pytorch
-
拉取指定版本docker-image,并启动容器。
docker-hub: pytorch/pytorch: 文档说明书很少
bitnami/pytorch:文档说明详细
$ docker run --runtime=nvidia -it --name pt1 -v $(realpath ~/workspace/${PWD##*/}):/workspace/${PWD##*/} -p 5678:5678 pytorch/pytorch:1.9.0-cuda10.2-cudnn7-devel
4.2、部署Tersorflow
-
拉取指定版本docker-image,并启动容器。
docker-hub:tensorflow/tensorflow: 文档说明详细
以tensorflow/tensorflow:2.6.0rc1-gpu-jupyter例子:
Run a Jupyter notebook server with your own notebook directory (assumed here to be ~/notebooks
). To use it, navigate to localhost:8888
in your browser.
$ docker run -it --rm -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:2.6.0rc1-gpu-jupyter
5.检测cuda 和cudnn
5.1 cuda和cudnn
cuda: Compute Unified Device Architecture,是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。
cuDNN:NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。
cuda和cuDNN的关系: CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。
5.2 cuda
nvcc -V
5.3 Pytorch
使用 PyTorch 查看 CUDA 和 cuDNN 版本
import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available())
print(torch.backends.cudnn.version())
print(torch.backends.cudnn.is_available())
5.4 Tensorflow
-
判断CUDA是否可用:
tf.test.is_built_with_cuda()
参考: [tf.test.is_built_with_cuda TensorFlow](https://www.tensorflow.org/versions/master/api_docs/python/tf/test/is_built_with_cuda) -
判断GPU是否可用:
tf.test.is_gpu_available( cuda_only=False, min_cuda_compute_capability=None )
参考: tf.test.is_gpu_available TensorFlow
tl;dr: If tensorflow-gpu works, then CuDNN is used.
后记
问题1
在某个时间,突然发现显卡不能用了,输入nvidia-smi显示:
$ nvidia-smi -a
Failed to initialize NVML: Driver/library version mismatch
分析:
可能nvidia-smi版本被修改了(自动更新还是人为修改),参考
原因:
dmesg |tail -4
使用此命令,会发现报错原因
NVRM: API mismatch: the client has the version 450.102.04, but
NVRM: this kernel module has the version 440.80.02. Please
NVRM: make sure that this kernel module and all NVIDIA driver
NVRM: components have the same version.
也就是libnvidia-compute-450的包已经是102版本了,但驱动还是80,导致版本不匹配
vi /var/log/apt/history.log
使用此命令,能看到更新时间和命令,发现是自动更新时导致的libnvidia-compute-450 package升级
Start-Date: 2021-01-21 06:47:07
Commandline: /usr/bin/unattended-upgrade
Upgrade: libnvidia-compute-450-server:amd64 (450.80.02-0ubuntu0.18.04.3, 450.102.04-0ubuntu0.18.04.1)
End-Date: 2021-01-21 06:47:10
解决:
网上很多人说重启就行了【先尝试重启】,然而我这里并不行,最终解决办法是:
sudo apt install nvidia-driver-450
然后再重启
sudo reboot