5

我有一些基于 gpu 的深度学习模型的 pickle 文件。我正在尝试在生产中使用它们。但是当我尝试在服务器上解开它们时,我收到以下错误。

回溯(最后一次调用):
文件“score.py”,第 30 行,在
模型 = (cPickle.load(file))
文件“/usr/local/python2.7/lib/python2.7/site-packages/ Theano-0.6.0-py2.7.egg/theano/sandbox/cuda/type.py",第 485 行,在 CudaNdarray_unpickler
返回 cuda.CudaNdarray(npa)
AttributeError: ("'NoneType' object has no attribute 'CudaNdarray'" ,,(阵列([[ [
0.011515,0.01171047,0.10408644

...
, -0.07109226, -0.00932018, ..., 0.04316209,
0.02817888, 0.05785328],
...,
[ 0.0703947 , -0.00172865, -0.05942701, ..., -0.00999349,
0.01624184, 0.09832744],
[-0.09029484, -0.11509365, -0.07193922, ..., 0.10658887,
0.17730837, 0.01104965],
[ 0.06659461, -0.02492988, 0.02271739, ..., -0.0646857 ,
0.03879852, 0.08779807]], dtype=float32),))

我在我的本地机器上检查了那个 cudaNdarray 包,它没有安装,但我仍然可以解开它们。但在服务器中,我无法。如何让它们在没有 GPU 的服务器上运行?

4

4 回答 4

4

pylearn2 中有一个脚本可以满足您的需要:

pylearn2/scripts/gpu_pkl_to_cpu_pkl.py

于 2014-08-11T12:28:34.000 回答
2

相关的 Theano 代码在这里

从那里开始,您似乎config.experimental.unpickle_gpu_on_cpu可以设置一个选项,该选项将CudaNdarray_unpickler返回底层的原始 Numpy 数组。

于 2015-03-10T08:23:15.550 回答
1

这对我有用。注意:除非设置了以下环境变量,否则这不起作用:export THEANO_FLAGS='device=cpu'

import os
from pylearn2.utils import serial
import pylearn2.config.yaml_parse as yaml_parse

if __name__=="__main__":

_, in_path, out_path = sys.argv
os.environ['THEANO_FLAGS']="device=cpu"

model = serial.load(in_path)

model2 = yaml_parse.load(model.yaml_src)
model2.set_param_values(model.get_param_values())

serial.save(out_path, model2)
于 2015-07-29T21:39:58.067 回答
0

我通过只保存参数 W & b 解决了这个问题,而不是整个模型。您可以使用以下方法保存参数:http : //deeplearning.net/software/theano/tutorial/loading_and_saving.html?highlight=saving%20load#robust-serialization 这可以将 CudaNdarray 保存到 numpy 数组。然后需要通过 numpy.load() 读取参数,最后使用 theano.shared() 将 numpy 数组转换为 tensorSharedVariable。

于 2016-12-09T09:29:28.790 回答