在跑DFF的代码时,按照指示一步步操作,最后出现Operator _zeros cannot be run; requires at least one of FCompute<xpu>, NDArrayFunction, FCreateOperator be registered。一步步查找问题时,最后发现问题出在下面的语句中
arg_arr = nd.zeros(arg_shape, context,dtype=arg_type)
其中,arg_shape是一个四元tuple,是要新建的arg_arr的维度信息;
context=mx.gpu(0);
arg_type是numpy.float32.
这三个参数共同定义类arg_arr的维数、元素类型,以及要运行的单元(在cpu上还是在gpu上)。在程序运行到这一步的时候,context的值是mx.gpu(0),意味着该矩阵是存储运行在gpu上的。然而该句执行后就从该代码段退出。一层一层退出后,即出现了Operator _zeros cannot be run; requires at least one of FCompute<xpu>, NDArrayFunction, FCreateOperator be registered的问题。
将context的值由mx.gpu(0)改为mx.cpu(0)后,包含该代码的代码段可以执行。因此,猜测是因为编译的mxnet不支持gpu。
重新编译安装mxnet,使得其支持gpu:
MXnet需要打开一个编译和链接选项来支持CUDA。在mxnet/
目录里找到mxnet/make/