在 TVM Docker 容器中找不到 libtvm.so 和 libtvm_runtime.so

No libtvm.so and libtvm_runtime.so found in TVM Docker Container

我是 Apache TVM 新手。

我尝试按照教程 https://tvm.apache.org/docs/install/docker.html#docker-source 中的描述构建并启动名为 tvm.ci_cpu:latest 的 docker 图像。

我尝试按照教程 https://tvm.apache.org/docs/tutorial/tvmc_command_line_driver.html#using-tvmc 中所述在 docker 容器中使用 python 应用程序 tvmc

然后我得到以下错误:

$ tvmc --help

bash: tvmc: command not found

我尝试使用上面文章中提到的其他方法,但出现了以下新错误:

$ python3 -m tvm.driver.tvmc --help

Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 183, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/lib/python3.6/runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  File "/opt/share0/bob/project/tvm/python/tvm/__init__.py", line 26, in <module>
    from ._ffi.base import TVMError, __version__, _RUNTIME_ONLY
  File "/opt/share0/bob/project/tvm/python/tvm/_ffi/__init__.py", line 28, in <module>
    from .base import register_error
  File "/opt/share0/bob/project/tvm/python/tvm/_ffi/base.py", line 71, in <module>
    _LIB, _LIB_NAME = _load_lib()
  File "/opt/share0/bob/project/tvm/python/tvm/_ffi/base.py", line 51, in _load_lib
    lib_path = libinfo.find_lib_path()
  File "/opt/share0/bob/project/tvm/python/tvm/_ffi/libinfo.py", line 146, in find_lib_path
    raise RuntimeError(message)
RuntimeError: Cannot find libraries: ['libtvm.so', 'libtvm_runtime.so']
List of candidates:
/opt/sgxsdk/lib64/libtvm.so
/opt/share0/bob/project/tvm/libtvm.so
/usr/local/sbin/libtvm.so
/usr/local/bin/libtvm.so
/usr/sbin/libtvm.so
/usr/bin/libtvm.so
/sbin/libtvm.so
/bin/libtvm.so
/opt/rust/bin/libtvm.so
/usr/lib/go-1.10/bin/libtvm.so
/opt/share0/bob/project/tvm/python/tvm/libtvm.so
/opt/share0/bob/project/libtvm.so
/opt/sgxsdk/lib64/libtvm_runtime.so
/opt/share0/bob/project/tvm/libtvm_runtime.so
/usr/local/sbin/libtvm_runtime.so
/usr/local/bin/libtvm_runtime.so
/usr/sbin/libtvm_runtime.so
/usr/bin/libtvm_runtime.so
/sbin/libtvm_runtime.so
/bin/libtvm_runtime.so
/opt/rust/bin/libtvm_runtime.so
/usr/lib/go-1.10/bin/libtvm_runtime.so
/opt/share0/bob/project/tvm/python/tvm/libtvm_runtime.so
/opt/share0/bob/project/libtvm_runtime.so

我尝试拉取并使用以下第三方 docker 图像而不是我自己构建的图像:

但是,我还是遇到了和以前一样的问题。

为什么?我完全不知道。

有什么建议吗?谢谢。

我找到了 pingsutw's answer in https://discuss.tvm.apache.org/t/import-tvm-returns-runtime-error-cant-find-libtvm-so-when-using-docker-demo-cpu-image/5110。在参考了他的建议后,我尝试在一个容器中重建 tvm,该容器是从我自己构建的镜像 tvm.ci_cpu:latest 启动的。

pushd path/to/tvm && \
    chmod +x 3rdparty/libbacktrace/configure && \
    mkdir -p cmake-build && \
    cmake -H. -Bcmake-build -DUSE_LLVM=ON && \
    cmake --build cmake-build --target all -- -j 4 && \
    mv cmake-build build && \
    popd

在上面之后,我尝试输入命令 python3 -m tvm.driver.tvmc --help 并得到以下输出。

usage: tvmc [-v] [--version] [-h] {run,tune,compile} ...

TVM compiler driver

optional arguments:
  -v, --verbose       increase verbosity
  --version           print the version and exit
  -h, --help          show this help message and exit.

commands:
  {run,tune,compile}
    run               run a compiled module
    tune              auto-tune a model
    compile           compile a model.

TVMC - TVM driver command-line interface

如您所见,它现在可以正常工作了。

令人惊讶的是,libtvm.solibtvm_runtime.so 在 tvm docker 图像中不是 pre-built。也许应该更新用于构建 tvm docker 图像的 third-party tvm docker image is broken. Maybe the Dockerfile。可能是为了灵活编译满足各种需求而设计的吧