解决cuda环境使用dgl

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHEN_RUI_2200

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值