numba RuntimeError:没有可用的目标与三重“arm-unknown-linux-gnu”兼容

问题描述 投票:0回答:1

我正在 Raspberry Pi(型号 4B - 8GB)上运行 Python 应用程序,但遇到运行时错误。我什至一开始就让 numba 运行起来遇到了很多麻烦,因为 LLVM 的可用二进制发行版太旧了(版本 11),所以我必须从源代码构建 LLVM v14.0.0。我现在可以运行我的应用程序,但遇到运行时错误,没有可用的目标与三重“arm-unknown-linux-gnu”兼容,但是当我运行

llvm-config --targets-built
时,我得到
AArch64 AMDGPU ARM AVR BPF Hexagon Lanai Mips MSP430 NVPTX PowerPC RISCV Sparc SystemZ VE WebAssembly X86 XCore
,所以它看起来它构建得当并且应该有必要的目标?

这是我的问题的回溯:

(.venv) user@raspberrypi:~/Documents/myapp $ python app.py
Traceback (most recent call last):
  File "/home/user/Documents/myapp/app.py", line 31, in <module>
    import MyClass as myclass
  File "/home/user/Documents/myapp/myclass.py", line 17, in <module>
    from model.utils import myfilter
  File "/home/user/Documents/myapp/model/utils.py", line 94, in <module>
    @njit
     ^^^^
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/decorators.py", line 287, in njit
    return jit(*args, **kws)
           ^^^^^^^^^^^^^^^^^
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/decorators.py", line 201, in jit
    return wrapper(pyfunc)
           ^^^^^^^^^^^^^^^
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/decorators.py", line 230, in wrapper
    disp = dispatcher(py_func=func, locals=locals,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/dispatcher.py", line 824, in __init__
    self.targetctx = self.targetdescr.target_context
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/registry.py", line 48, in target_context
    return self._toplevel_target_context
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/functools.py", line 1001, in __get__
    val = self.func(instance)
          ^^^^^^^^^^^^^^^^^^^
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/registry.py", line 32, in _toplevel_target_context
    return cpu.CPUContext(self.typing_context, self._target_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/cpu.py", line 42, in __init__
    super().__init__(typingctx, target)
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/base.py", line 254, in __init__
    self.init()
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/compiler_lock.py", line 35, in _acquire_compile_lock
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/cpu.py", line 51, in init
    self._internal_codegen = codegen.JITCPUCodegen("numba.exec")
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/codegen.py", line 1171, in __init__
    self._init(self._llvm_module)
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/numba/core/codegen.py", line 1176, in _init
    target = ll.Target.from_triple(ll.get_process_triple())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/Documents/myapp/.venv/lib/python3.11/site-packages/llvmlite/binding/targets.py", line 197, in from_triple
    raise RuntimeError(str(outerr))
RuntimeError: No available targets are compatible with triple "arm-unknown-linux-gnu"
(.venv) user@raspberrypi:~/Documents/myapp $ 

我还在这里打开了一个 GitHub 问题: https://github.com/numba/llvmlite/issues/975

raspberry-pi llvm numba llvmlite
1个回答
0
投票

我成功了!我按照相关问题中建议的类似步骤进行操作:https://github.com/numba/llvmlite/issues/497 我认为 LLVM 是为 64 位架构构建的,尽管 Raspberry Pi 操作系统是 32 位操作系统,所以我只需更新 cmake 参数即可生成 32 位版本的构建文件。然后我重建它,重新安装它,并重新安装 numba 和 llvmlite,它工作了!以下是我最终使用的有效 cmake 参数:

cmake -DLLVM_DEFAULT_TARGET_TRIPLE=armv7l-linux-gnueabihf \
      -DLLVM_TARGET_ARCH=ARM \
      -DLLVM_TARGETS_TO_BUILD=ARM \
      -DCMAKE_BUILD_TYPE=Release \
      -DLLVM_ENABLE_ASSERTIONS=On \
      ../llvm
© www.soinside.com 2019 - 2024. All rights reserved.