PyTorch 无法在 GPU 上处理复杂的张量,但可以在 CPU 上运行

PyTorch cannot handle complex tensor on GPU, but works on CPU

我正在使用 PyTorch 在量子计算机上模拟神经网络,因此我必须使用具有 ComplexFloatTensor 数据类型的张量。当我 运行 这行代码在 GPU 上时:

torch.matmul(A.transpose(1,2).flatten(0,1), H.flatten(1,2)).reshape(N,steps,2**n,2**n).transpose(0,1)

张量较大时出现以下错误:

RuntimeError: CUDA error: CUBLAS_STATUS_NOT_SUPPORTED when calling `cublasCgemm( handle, opa, opb, m, n, k, reinterpret_cast<const cuComplex*>(&alpha), reinterpret_cast<const cuComplex*>(a), lda, reinterpret_cast<const cuComplex*>(b), ldb, reinterpret_cast<const cuComplex*>(&beta), reinterpret_cast<cuComplex*>(c), ldc)`

AH 都是 ComplexFloatTensor 张量。

AH 的形状为 torch.Size([100 , 54, 10]) 和 torch.Size([54, 512, 512]) 或更大,但是当它们的形状为 torch.Size([100, 44, 10])torch.Size([44, 256, 256])

不要太在意确切的数字,但关键是它总是在 CPU 上工作(只是非常慢),但在 GPU 上它会突破一定的大小。

有人知道问题出在哪里吗?鉴于下面的编辑,这可能只是由于 GPU 运行 内存不足(但错误未能告诉我)

编辑:我在 Google Colab 上 运行 同样的事情,并在同一个地方得到以下错误:

RuntimeError: CUDA out of memory. Tried to allocate 570.00 MiB (GPU 0; 14.76 GiB total capacity; 12.19 GiB already allocated; 79.75 MiB free; 13.38 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

Google Colab 使用 Tesla T4 GPU,而我的服务器使用 NVIDIA RTX A6000

同时我自己想出了这个问题的答案。事实证明,我的 GPU 运行 内存不足。

出于某种原因,Google Colab 正确显示了这个错误(见上文),而我自己的 GPU 显示了这个奇怪的 CUBLAS_STATUS_NOT_SUPPORTED 错误,而不是直接告诉我这是内存问题。