Dgl 是实现图结构数据构造的工具包,想在gpu环境下使用它,如果安装的是pip install dgl
会有下面错误
dgl._ffi.base.DGLError: [09:10:13] /opt/dgl/src/runtime/c_runtime_api.cc:82: Check failed: allow_missing: Device API cuda is not enabled. Please install the cuda version of dgl.
Stack trace:
[bt] (0) /opt/miniconda3/envs/lora/lib/python3.10/site-packages/dgl/libdgl.so(dmlc::LogMessageFatal::~LogMessageFatal()+0x75) [0x7fd8d29508f5]
[bt] (1) /opt/miniconda3/envs/lora/lib/python3.10/site-packages/dgl/libdgl.so(dgl::runtime::DeviceAPIManager::GetAPI(std::string, bool)+0x202) [0x7fd8d2cbfd82]
[bt] (2) /opt/miniconda3/envs/lora/lib/python3.10/site-packages/dgl/libdgl.so(dgl::runtime::DeviceAPI::Get(DGLContext, bool)+0x1e1) [0x7fd8d2cbc361]
[bt] (3) /opt/miniconda3/envs/lora/lib/python3.10/site-packages/dgl/libdgl.so(dgl::runtime::NDArray::Empty(std::vector<long, std::allocator<long> >, DGLDataType, DGLContext)+0x13b) [0x7fd8d2cd783b]
[bt] (4) /opt/miniconda3/envs/lora/lib/python3.10/site-packages/dgl/libdgl.so(dgl::runtime::NDArray::CopyTo(DGLContext const&) const+0xc3) [0x7fd8d2d12043]
[bt] (5) /opt/miniconda3/envs/lora/lib/python3.10/site-packages/dgl/libdgl.so(dgl::UnitGraph::CopyTo(std::shared_ptr<dgl::BaseHeteroGraph>, DGLContext const&)+0x3ff) [0x7fd8d2e1f53f]
[bt] (6) /opt/miniconda3/envs/lora/lib/python3.10/site-packages/dgl/libdgl.so(dgl::HeteroGraph::CopyTo(std::shared_ptr<dgl::BaseHeteroGraph>, DGLContext const&)+0xf6) [0x7fd8d2d1e8c6]
[bt] (7) /opt/miniconda3/envs/lora/lib/python3.10/site-packages/dgl/libdgl.so(+0x51b686) [0x7fd8d2d2d686]
[bt] (8) /opt/miniconda3/envs/lora/lib/python3.10/site-packages/dgl/libdgl.so(DGLFuncCall+0x48) [0x7fd8d2cbb598]
这个错误表明 DGL(Deep Graph Library)未启用 CUDA(NVIDIA 的并行计算平台和编程模型)。具体来说,它提示您当前安装的 DGL 版本不支持 CUDA,因此不能利用 GPU 进行计算。
我们的原因是安装了 CPU 版本的 DGL,而不是支持 GPU 的 CUDA 版本
但是pip install dgl-cu122 报
ERROR: Could not find a version that satisfies the requirement dgl-cu122 (from versions: none)
ERROR: No matching distribution found for dgl-cu122
我们得去别处找dgl对应的cuda版本, 好在官网上给出了下载地址
Dgl | Anaconda.org
在有gpu训练卡的环境上使用conda 切换到激活环境
conda activate myenv
再使用conda安装dgl-cu121
conda install -c dglteam/label/th24_cu121 dgl
安装完成
再运行dgl的训练脚本速度飞起
另外发现修改了一个问题
logits = model.forward(g, "_N")
labels = batch.label
loss = criterion(logits, labels)
f1 = evaluate_f1_score(
logits.detach().to(device).numpy(), labels.detach().to(device).numpy()
)
将一个位于 GPU 上的 PyTorch 张量(tensor)直接转换为 NumPy 数组。PyTorch 不支持直接将 GPU 张量转换为 NumPy 数组。要解决此问题,需要先将张量移动到 CPU 上。
解决方案
在调用 .numpy()
方法之前,您需要使用 .cpu()
方法将张量从 GPU 移动到 CPU。修改您的代码如下:
logits.detach().cpu().numpy(), labels.detach().cpu().numpy()
Dgl | Anaconda.org