Pytorch RuntimeError: [enforce fail at CPUAllocator.cpp:56] posix_memalign(&data, gAlignment, nbytes) == 0. 12 vs 0

Pytorch RuntimeError: [enforce fail at CPUAllocator.cpp:56] posix_memalign(&data, gAlignment, nbytes) == 0. 12 vs 0

我正在构建一个简单的基于内容的推荐系统。为了以 GPU 加速的方式计算 余弦相似度 ,我使用 Pytorch.

在从 csr_matrix 创建 tfidf 词汇表张量 时,它会提示以下 RuntimeErrorr

RuntimeError: [enforce fail at CPUAllocator.cpp:56] posix_memalign(&data, gAlignment, nbytes) == 0. 12 vs 0

我是这样做的:

coo = tfidf_matrix.tocoo()
values = coo.data
indices = np.vstack( (coo.row, coo.col ))
i = torch.LongTensor(indices)
v = torch.FloatTensor(values)
tfidf_matrix_tensor = torch.sparse.FloatTensor(i, v, torch.Size(coo1.shape)).to_dense() 
# Prompts the error

我尝试了一个小测试(tfidf 矩阵大小 = 10,296)数据集并且它有效。 真实数据集的 tfidf 矩阵大小为 (27639, 226957)

我尝试了与旧版本的 PyTorch 抛出此错误的同一段代码。它说我需要更多内存。因此,这不是 PyTorch 错误。唯一的解决办法是以某种方式减小矩阵大小。

我在转换小型 Numpy 矩阵时遇到了同样的问题,解决方法是使用 torch.tensor 而不是 torch.Tensor。我想一旦你这样做了,你就可以投射到你想要的特定类型的张量。

有点切题,就我而言,我 运行 进入这个问题,而 运行 GraphSAGE 的 DGL 实现。我正在处理一个大约 10 M 节点的 Twitter 网络图,并使用默认的 Twitter userid 作为我的 nodeid。我意识到 CPU 在尝试将其映射到长 dtype 时 运行 内存不足,所以我从 0,1 重新映射了我的 ID... 然后这个问题就解决了.