停止和启动深度学习谷歌云虚拟机实例导致 tensorflow 停止识别 GPU

Posted

技术标签:

【中文标题】停止和启动深度学习谷歌云虚拟机实例导致 tensorflow 停止识别 GPU【英文标题】:Stopping and starting a deep learning google cloud VM instance causes tensorflow to stop recognizing GPU 【发布时间】:2021-09-08 04:09:29 【问题描述】:

我正在使用谷歌云提供的预构建深度学习 VM 实例,并连接了 Nvidia tesla K80 GPU。我选择自动安装 Tensorflow 2.5 和 CUDA 11.0。当我启动实例时,一切正常 - 我可以运行:

Import tensorflow as tf
tf.config.list_physical_devices()

我的函数返回 CPU、加速 CPU 和 GPU。同样,如果我运行tf.test.is_gpu_available(),函数返回True。

但是,如果我注销,停止实例,然后重新启动实例,运行完全相同的代码只会看到 CPU,tf.test.is_gpu_available() 会导致 False。我收到一个看起来驱动程序初始化失败的错误:

 E tensorflow/stream_executor/cuda/cuda_driver.cc:355] failed call to cuInit: CUDA_ERROR_UNKNOWN: unknown error

运行nvidia-smi显示电脑还是能看到GPU,但是我的tensorflow看不到。

有人知道是什么原因造成的吗?我不想在重启实例时重新安装所有内容。

【问题讨论】:

我在 Pytorch 1.8 的这个实例上遇到了同样的问题,重启后我无法在 pytorch 中获取 CUDA。导入 torch.cuda.is_available() /opt/conda/lib/python3.7/site-packages/torch/cuda/__init__.py:52:用户警告:CUDA 初始化:CUDA 未知错误 - 这可能是由于错误设置环境,例如程序启动后更改环境变量 CUDA_VISIBLE_DEVICES。将可用设备设置为零。 (在 /opt/conda/conda-bld/pytorch_1614378098133/work/c10/cuda/CUDAFunctions.cpp:109 内部触发。) return torch._C._cuda_getDeviceCount() > 0 False 我在使用 Tensorflow 2.1 和 CUDA 11.0 时遇到了同样的问题,但它只是在最近几天在我的两个虚拟机中才出现的。您是否知道 Google 最近是否更改了任何可能导致此问题的 Google Cloud 配置? @DanDan0101 根据tensorflow.org/install/source#gpu 你需要CUDA 10.1 for TensorFlow 2.1 我第一次启动虚拟机时也遇到了同样的问题。 tf.config.list_physical_devices() 仅显示 CPU,tf.test.is_gpu_available() 返回 false。 @DanDan0101 版本兼容性一直给我带来麻烦,浪费我的时间。每个time 和this 列表都解决了我的部分问题。六个月前,Tensorflow 2.1 无法在我的本地计算机上使用 CUDA 11.0,我不得不降级到 CUDA 10.1。不知道 google/tensorflow 最近是不是做了一些改动。 【参考方案1】:

有些人(很遗憾不是我)可以通过在他们的脚本/主文件的开头设置以下内容来解决这个问题:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

我不得不重新安装 CUDA 驱动程序,从那时起,即使在重新启动实例后它也能正常工作。您可以在NVIDIAs website 上配置系统设置,它将为您提供安装 cuda 所需遵循的命令。它还会询问您是否要卸载以前的 cuda 版本(是的!)。幸运的是,这也非常快。

【讨论】:

注意:在 nvidia 网站上,您需要使用 deb(网络)而不是 deb(本地)安装,然后它对我有用! 奇怪的是我正在与本地合作。但很高兴解决了!【参考方案2】:

选项-1: 升级笔记本实例的环境。请参考link 进行升级。 可升级的笔记本实例为双盘,1个启动盘,1个数据盘。升级过程会将启动盘升级到新映像,同时保留数据盘上的数据。

选项 2: 通过 SSH 连接到笔记本 VM 并运行命令 link。 执行命令后,cuda版本会更新到11.3,nvidia驱动版本会更新到465.19.01。 重启笔记本虚拟机。

注意: gpu 图像中的问题已解决。将使用映像版本 M74 创建新笔记本。关于新镜像版本在google-public-issue-tracker尚未更新,但您可以在控制台中找到新镜像版本M74。

【讨论】:

【参考方案3】:

我用下面的命令修复了同样的问题,取自https://issuetracker.google.com/issues/191612865?pli=1

gsutil cp gs://dl-platform-public-nvidia/b191551132/restart_patch.sh /tmp/restart_patch.sh

chmod +x /tmp/restart_patch.sh

sudo /tmp/restart_patch.sh

sudo service jupyter restart

【讨论】:

以上是关于停止和启动深度学习谷歌云虚拟机实例导致 tensorflow 停止识别 GPU的主要内容,如果未能解决你的问题,请参考以下文章

在不关闭实例的情况下调整云 VM 磁盘大小(谷歌云)

从谷歌云中的虚拟机锁定

谷歌云虚拟机端口打不开

英特尔携手谷歌云加速最新虚拟机;谷歌云平台下调抽成比例;Hitachi Vantara推出全新云成本优化服务...

如何在不停止运行应用程序的情况下垂直扩展谷歌云实例

谷歌云负载均衡器 + GKE 入口