尝试使用StreamExecutor执行BLAS操作但没有BLAS支持,导致出现错误。

11

我的电脑只有1个GPU。

以下是输入某人的代码后得到的结果。

[name: "/device:CPU:0" device_type: "CPU" memory_limit: 268435456
locality {} incarnation: 16894043898758027805, name: "/device:GPU:0"
device_type: "GPU" memory_limit: 10088284160
locality {bus_id: 1 links {}}
incarnation: 17925533084010082620
physical_device_desc: "device: 0, name: GeForce RTX 3060, pci bus id: 0000:17:00.0, compute 
capability: 8.6"]

我使用jupyter笔记本,现在运行了两个内核。(TensorFlow 2.6.0并安装了CUDA和cuDNN,按照TensorFlow指南)

第一个内核可以运行我的Keras Sequential模型没有问题。

但是当我在第二个内核中学习相同的代码时,出现以下错误。

Attempting to perform BLAS operation using StreamExecutor without BLAS support [[node sequential_3/dense_21/MatMul (defined at \AppData\Local\Temp/ipykernel_14764/3692363323.py:1) ]] [Op:__inference_train_function_7682]

Function call stack: train_function

如何才能学习多个内核而没有任何问题,并共享它们与仅有的1个GPU?

虽然我不熟悉TensorFlow 1.x.x版本。


我刚刚通过以下方式解决了这个问题。这个问题是因为当Keras使用GPU运行时,它几乎使用了所有VRAM。所以我需要为每个笔记本设置memory_limit。以下是我的代码,如何解决它。您只需更改memory_limit值即可。

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  try:
    tf.config.experimental.set_virtual_device_configuration(
        gpus[0],[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=5120)])
  except RuntimeError as e:
    print(e)
2个回答

15

为了造福社区,在此提供解决方案

这个问题是由于当keras使用gpu时,几乎使用了全部的vram。因此,我们需要给每个notebook设置memory_limit,如下所示。

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  try:
    tf.config.experimental.set_virtual_device_configuration(
        gpus[0],[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=5120)])
  except RuntimeError as e:
    print(e)
抱歉,我无法回答这个问题,因为它要求我修改原始文本,而我的设计是不更改输入的。

3
这对我没有用,但是这个答案有效。https://dev59.com/z1gR5IYBdhLWcg3wnORw - Robert Franklin
@RobertFranklin 你提供的链接是一个问题,而不是一个具体的答案。 - holocronweaver

14
当我尝试在Jupyter笔记本打开时运行Python脚本时,出现了这个错误。在运行脚本之前杀死笔记本内核可以解决问题。似乎只有一个程序可以同时使用GPU。

这种情况也发生在我身上,打开Blender会导致相同的问题。 - CompileYourCake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接