我是 AWS 和 Tensorflow 的新手,上周我通过 Udacity 的机器学习类(class)学习了 CNN。
现在我需要使用 GPU 的 AWS 实例。我使用源代码(CUDA 8,Ubuntu)启动了深度学习 AMI 的 p2.xlarge 实例(这是他们推荐的)
但现在看来,tensorflow 根本没有使用 GPU。它仍在使用 CPU 进行训练。我做了一些搜索,找到了这个问题的一些答案,但它们似乎都不起作用。
当我运行 Jupyter 笔记本时,它仍然使用 CPU
我该怎么做才能让它在 GPU 而不是 CPU 上运行?
最佳答案
tensorflow 无法检测到 GPU 的问题可能是由于以下原因之一。
在继续解决问题之前,我们假设安装的环境是 AWS Deep Learning AMI安装了 CUDA 8.0 和 tensorflow 1.4.1 版。这个假设来自评论中的讨论。
为了解决这个问题,我们进行如下操作:
pip freeze | grep tensorflow
pip uninstall tensorflow
pip install tensorflow-gpu==1.4.1
pip uninstall tensorflow
pip uninstall tensorflow-gpu
pip install tensorflow-gpu==1.4.1
此时,如果 tensorflow 的所有依赖项都安装正确,则 tensorflow GPU 版本应该可以正常工作。此阶段的一个常见错误(如 OP 遇到的)是缺少 cuDNN 库,这可能导致在将 tensorflow 导入 python 模块时出现以下错误
ImportError: libcudnn.so.6: cannot open shared object file: No such file or directory
可以通过安装正确版本的 NVIDIA cuDNN 库来修复它。 TensorFlow 1.4.1 版本依赖于 cuDNN 6.0 版本和 CUDA 8,因此我们从 cuDNN 存档页面 (Download Link) 下载相应版本。我们必须登录 NVIDIA 开发者帐户才能下载文件,因此无法使用
wget
等命令行工具下载文件。或 curl
.一种可能的解决方案是在主机系统上下载文件并使用 scp
将其复制到 AWS。复制到 AWS 后,使用以下命令提取文件:
tar -xzvf cudnn-8.0-linux-x64-v6.0.tgz
解压后的目录应该具有类似于 CUDA 工具包安装目录的结构。假设CUDA工具包安装在目录
/usr/local/cuda
,我们可以通过将下载的存档中的文件复制到CUDA Toolkit安装目录的相应文件夹中,然后使用链接器更新命令ldconfig
来安装cuDNN如下:cp cuda/include/* /usr/local/cuda/include
cp cuda/lib64/* /usr/local/cuda/lib64
ldconfig
在此之后,我们应该能够将 tensorflow GPU 版本导入我们的 python 模块。
一些注意事项:
pip
应替换为 pip3
. pip
, cp
和 ldconfig
可能需要以 sudo
身份运行. 关于TensorFlow 不会在 GPU 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53913628/