- 关于使用GPU调用DGLGraph,训练过程报错如下:
raise DGLError(‘Cannot assign node feature “{}” on device {} to a graph on’
dgl._ffi.base.DGLError: Cannot assign node feature “ft” on device cuda:0 to a graph on device cpu. Call DGLGraph.to() to copy the graph to the same device.
2 .在DGL使用文档中写道:用户可以通过在构造过程中传入两个GPU张量来创建GPU上的 DGLGraph 。 另一种方法是使用 to() API将 DGLGraph 复制到GPU,这会将图结构和特征数据都拷贝到指定的设备。
import dgl
import torch as th
u, v = th.tensor([0, 1, 2]), th.tensor([2, 3, 4])
g = dgl.graph((u, v))
g.ndata['x'] = th.randn(5, 3) # 原始特征在CPU上
g.device
cuda_g = g.to('cuda:0') # 接受来自后端框架的任何设备对象
cuda_g.device
cuda_g.ndata['x'].device # 特征数据也拷贝到了GPU上
# 由GPU张量构造的图也在GPU上
u, v = u.to('cuda:0'), v.to('cuda:0')
g = dgl.graph((u, v))
g.device
3.回到报错信息,大意是需要将所有dgl对象放到一张显卡上进行计算:
所以,只需要添加如箭头所示的代码即可,意思为将对象放到"cuda:0"显卡计算。