当前位置: 首页 > article >正文

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


Dgl | Anaconda.org


http://www.kler.cn/a/370222.html

相关文章:

  • Golang的文件处理优化策略
  • Linux下MySQL的简单使用
  • Agent AI: 强化学习,模仿学习,大型语言模型和VLMs在智能体中的应用
  • 吴恩达深度学习——神经网络介绍
  • 计算机毕业设计PySpark+Hadoop+Hive机票预测 飞机票航班数据分析可视化大屏 航班预测系统 机票爬虫 飞机票推荐系统 大数据毕业设计
  • 高等数学:映射与函数
  • ImportError: cannot import name ‘Sequential‘ from ‘keras.models‘
  • 如何将 HashiCorp Vault 与 Node.js 集成:安全管理敏感数据
  • UE5之5.4 第一人称示例代码阅读2 子弹发射逻辑
  • Oracle 第9章:存储过程与函数
  • Android Handler消息机制完全解析-IdleHandler和epoll机制(四)
  • Spring Boot的核心优势及其应用详解
  • 基于SSM(spring+springmvc+mybatis)+MySQL开发的新闻推荐系统
  • STM32之外部中断旋转编码器
  • 20241028在荣品PRO-RK3566开发板的预置Android13下用iperf3测试AP6256的WIFI网速
  • Git创建和拉取项目分支的应用以及Gitlab太占内存,如何配置降低gitlab内存占用进行优化
  • 分体式智能网关在现代电力物联网中的优势有哪些?
  • Java SPI 机制详解
  • gaussdb hccdp实验练习03 GaussDB数据库应用程序开发实验
  • 2024年10月24日Github流行趋势
  • 磁盘空间不足导致postgreSQL启动失败
  • Axure使用动态面板制作新闻栏目高级交互
  • 【ChatGP】让ChatGPT解释和简化复杂的技术概念
  • 配置console口密码和远程登录
  • 面试官:Kafka 为什么那么快?
  • Android Input的流程和原理