首页 > 解决方案 > 为什么 python 的 numba 在 Spyder 上运行 2D 数组程序而不在远程服务器上运行?

问题描述

我创建了一个在包含二维数组(列表列表)的方法上使用 numba 的小程序。这个程序在 Spyder 上运行得很好,但是当我尝试在远程 Ubuntu 服务器上运行完全相同的程序时,我收到一个很长的错误,说“不支持的嵌套内存管理对象”(在程序代码下方列出)。

编码:

from numba import jit

@jit(nopython=True)
def test():
    num1 = 10
    num2 = 5
    array = [ [ 1 for i in range(num1) ] for j in range(num2) ]
    #array = [2 for i in range(num1) ]
    sum = 0
    for i in range(0,num1):
        for j in range(0,num2):
            sum = sum + array[i][j]
    print(sum)

test()

错误:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/numba/runtime/context.py", line 186, in _call_incref_decref
    meminfo = data_model.get_nrt_meminfo(builder, value)
  File "/usr/lib/python3/dist-packages/numba/datamodel/models.py", line 329, in get_nrt_meminfo
    "unsupported nested memory-managed object")
NotImplementedError: unsupported nested memory-managed object

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/numba/errors.py", line 243, in new_error_context
    yield
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 216, in lower_block
    self.lower_inst(inst)
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 263, in lower_inst
    self.storevar(val, inst.target.name)
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 928, in storevar
    self.decref(fetype, old)
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 982, in decref
    self.context.nrt.decref(self.builder, typ, val)
  File "/usr/lib/python3/dist-packages/numba/runtime/context.py", line 208, in decref
    self._call_incref_decref(builder, typ, typ, value, "NRT_decref")
  File "/usr/lib/python3/dist-packages/numba/runtime/context.py", line 179, in _call_incref_decref
    funcname, getters + (getter,))
  File "/usr/lib/python3/dist-packages/numba/runtime/context.py", line 188, in _call_incref_decref
    raise NotImplementedError("%s: %s" % (root_type, str(e)))
NotImplementedError: list(list(int64)): unsupported nested memory-managed object

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "2DArrayTest.py", line 15, in <module>
    test()
  File "/usr/lib/python3/dist-packages/numba/dispatcher.py", line 307, in _compile_for_args
    return self.compile(tuple(argtypes))
  File "/usr/lib/python3/dist-packages/numba/dispatcher.py", line 579, in compile
    cres = self._compiler.compile(args, return_type)
  File "/usr/lib/python3/dist-packages/numba/dispatcher.py", line 80, in compile
    flags=flags, locals=self.locals)
  File "/usr/lib/python3/dist-packages/numba/compiler.py", line 740, in compile_extra
    return pipeline.compile_extra(func)
  File "/usr/lib/python3/dist-packages/numba/compiler.py", line 360, in compile_extra
    return self._compile_bytecode()
  File "/usr/lib/python3/dist-packages/numba/compiler.py", line 699, in _compile_bytecode
    return self._compile_core()
  File "/usr/lib/python3/dist-packages/numba/compiler.py", line 686, in _compile_core
    res = pm.run(self.status)
  File "/usr/lib/python3/dist-packages/numba/compiler.py", line 246, in run
    raise patched_exception
  File "/usr/lib/python3/dist-packages/numba/compiler.py", line 238, in run
    stage()
  File "/usr/lib/python3/dist-packages/numba/compiler.py", line 621, in stage_nopython_backend
    self._backend(lowerfn, objectmode=False)
  File "/usr/lib/python3/dist-packages/numba/compiler.py", line 576, in _backend
    lowered = lowerfn()
  File "/usr/lib/python3/dist-packages/numba/compiler.py", line 563, in backend_nopython_mode
    self.flags)
  File "/usr/lib/python3/dist-packages/numba/compiler.py", line 858, in native_lowering_stage
    lower.lower()
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 135, in lower
    self.lower_normal_function(self.fndesc)
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 176, in lower_normal_function
    entry_block_tail = self.lower_function_body()
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 201, in lower_function_body
    self.lower_block(block)
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 216, in lower_block
    self.lower_inst(inst)
  File "/usr/lib/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/usr/lib/python3/dist-packages/numba/errors.py", line 249, in new_error_context
    six.reraise(type(newerr), newerr, sys.exc_info()[2])
  File "/usr/lib/python3/dist-packages/numba/six.py", line 658, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3/dist-packages/numba/errors.py", line 243, in new_error_context
    yield
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 216, in lower_block
    self.lower_inst(inst)
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 263, in lower_inst
    self.storevar(val, inst.target.name)
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 928, in storevar
    self.decref(fetype, old)
  File "/usr/lib/python3/dist-packages/numba/lowering.py", line 982, in decref
    self.context.nrt.decref(self.builder, typ, val)
  File "/usr/lib/python3/dist-packages/numba/runtime/context.py", line 208, in decref
    self._call_incref_decref(builder, typ, typ, value, "NRT_decref")
  File "/usr/lib/python3/dist-packages/numba/runtime/context.py", line 179, in _call_incref_decref
    funcname, getters + (getter,))
  File "/usr/lib/python3/dist-packages/numba/runtime/context.py", line 188, in _call_incref_decref
    raise NotImplementedError("%s: %s" % (root_type, str(e)))
numba.errors.LoweringError: Failed at nopython (nopython mode backend)
list(list(int64)): unsupported nested memory-managed object
File "2DArrayTest.py", line 7
[1] During: lowering "$56 = build_list(items=[])" at 2DArrayTest.py (7)

我在其他地方看到 numba 不喜欢二维数组和列表列表,因为内存。有没有办法让它在远程服务器上工作,因为它可以在 Spyder 上工作?Spyder 做了哪些不同的工作以使其正常工作?

标签: pythonarrayslistnumba

解决方案


推荐阅读