2

我正在尝试使用以下设置在 Windows 10 上运行 tensorflow:

  • Anaconda3 与

  • 蟒蛇3.8

  • 张量流 2.2.0

  • 显卡:RTX3090

  • cuda_10.1.243

  • 适用于 windows10-x64 的 cudnn-v7.6.5.32

运行以下代码需要 5 到 10 分钟来打印输出。

import tensorflow as tf
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

我立即得到以下输出,但在继续之前它会挂起几分钟。

1-17 04:03:00.039069: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-11-17 04:03:00.042677: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2020-11-17 04:03:00.045041: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2020-11-17 04:03:00.045775: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2020-11-17 04:03:00.049246: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2020-11-17 04:03:00.050633: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2020-11-17 04:03:00.056731: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-11-17 04:03:00.056821: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1703] Adding visible gpu devices: 0

在 colab 上运行 smae 代码只需一秒钟。

有什么建议么?谢谢

4

3 回答 3

5

我不明白为什么 Mux 的回答被否决了,因为他是对的。Nvidia Ampere 无法在 CUDA 版本 < 11.1 上以最佳方式运行,因为 Ampere 流式多处理器 (SM_86) 仅在 CUDA 11.1 上受支持,请参阅https://forums.developer.nvidia.com/t/can-rtx-3080-support- cuda-10-1/155849/2

但是,通过将环境变量设置为 2147483648 (4GB),使用“export CUDA_CACHE_MAXSIZE=2147483648”增加默认 JIT 缓存大小,可以在不更新 CUDA 的情况下直接解决您的问题。您仍然会在第一次启动时等待很长时间,请参阅https://www.tensorflow.org/install/gpu#hardware_requirements

于 2020-12-23T23:43:32.573 回答
3

RTX3090 具有需要 Cuda 11+ 的 Amper 架构。查看本指南: https ://medium.com/@dun.chwong/the-simple-guide-deep-learning-with-rtx-3090-cuda-cudnn-tensorflow-keras-pytorch-e88a2a8249bc

于 2020-11-18T19:58:31.367 回答
1

原因正如 Mux 所说。

背景:

有关完整说明,请参阅https://developer.nvidia.com/blog/cuda-pro-tip-understand-fat-binaries-jit-caching/

第一阶段将源设备代码编译为 PTX 虚拟程序集,第二阶段将 PTX 编译为目标架构的二进制代码。CUDA 驱动程序可以在运行时执行第二阶段编译,编译 PTX 虚拟程序集“Just In Time”来运行它。

所以对于新硬件的旧版本软件包,即目标架构的二进制代码没有预编译,它回退到 PTX 虚拟程序集并触发新目标架构的运行时 JIT 编译。这意味着 CUDNN 和 CUBLAS 内核以及 tensorflow 内置内核都是在启动时编译的 JIT,在您的情况下会导致启动时间过长。

这就是为什么 Dan Pavlov 建议启用 JIT 缓存的原因,也就是说,您只需 JIT 编译一次,而不是在启动时不时进行 JIT 编译。

于 2021-01-11T07:10:34.663 回答