docker中tensorflow无法调用GPU

主机中,运行nvidia-smi查询到的信息为:

 NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2

0x1

项目中build docker 的文档,需要pull的nvidia docker版本是10.01

FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu16.04

生成的docker,导入到主机中,程序运行正常,但GPU显存和使用率均为极低,可以判断为没有调起GPU。

0x2

将nvidia docker的版本改为10.2,重新生成一次docker,导入主机,程序运行正常,但依然没有使用到GPU。

0x3

查看TensorFlow官网的文档,得到如下信息(https://www.tensorflow.org/install/source#gpu)

GPU

版本 Python 版本 编译器 构建工具 cuDNN CUDA
tensorflow-2.6.0 3.6-3.9 GCC 7.3.1 Bazel 3.7.2 8.1 11.2
tensorflow-2.5.0 3.6-3.9 GCC 7.3.1 Bazel 3.7.2 8.1 11.2
tensorflow-2.4.0 3.6-3.8 GCC 7.3.1 Bazel 3.1.0 8.0 11.0
tensorflow-2.3.0 3.5-3.8 GCC 7.3.1 Bazel 3.1.0 7.6 10.1
tensorflow-2.2.0 3.5-3.8 GCC 7.3.1 Bazel 2.0.0 7.6 10.1
tensorflow-2.1.0 2.7、3.5-3.7 GCC 7.3.1 Bazel 0.27.1 7.6 10.1
tensorflow-2.0.0 2.7、3.3-3.7 GCC 7.3.1 Bazel 0.26.1 7.4 10.0

使用用python的pip查询一下安装到docker里的tensorflow版本,是最新的2.6.2,由上述资料可知,它使用的cuda是11.2版本,跟docker内的cuda10.1/10.2有冲突,问题似乎出在这里了。再检查build docker的文档,在一个include文件里,有列出了tensorflow的版本要求 

tensorflow-gpu>=2.2.0,<2.7.0

官方编译的版本没有cuda 10.2 的版本,尝试使用10.1的 tensorflow 2.3.0。标准操作是将tensorflow版本要求改为

tensorflow-gpu==2.3.0

但重新生成docker比较花时间,决定使用手工降级tensorflow的方法试验一下。本项目涉及的相关库如下,不如项目可能有所差异:

gast-0.3.3 h5py-2.10.0 numpy-1.18.5 scipy-1.4.1 tensorflow-estimator-2.3.0 tensorflow-gpu-2.3.0

使用python -m pip download tensorflow-gpu == 2.3.0,会下载它依赖的所有库。

0x4 

在docker中,将tensorflow 从2.6.2降级到2.3.0后,程序运行正常,GPU也能正常调用了。也就是说,docker中安装的cuda版本必须要和tensorflow编译包中的依赖版本一致,但不必跟主机中的cuda版本一致。主机中的cuda版本高于docker版本是可以的,但低于docker版本效果如何,没有继续进行验证了。

你可能感兴趣的:(tensorflow,docker,深度学习)