跳到主要内容

常见问题

导入时报 No module named 'tvm'​

确认当前 shell 使用的是安装 wheel 的 venv:

which python
python -m pip show tvm-musa

pip show 应输出 tvm-musa 的版本和安装路径。若没有输出,说明当前 Python 环境没有安装 TVM-MUSA M1000,请回到安装与验证重新安装。

导入时报 cannot import name 'core' from 'tvm_ffi'​

通常是 tvm_ffi 的 Python 包和 native 扩展不匹配,或者 PYTHONPATH 同时指到了源码树和已安装 wheel。处理方法:

unset PYTHONPATH
cd /path/to/tvm-musa-m1000
python -m pip uninstall -y tvm apache-tvm tvm-musa apache-tvm-ffi
python -m pip install ./wheels/apache_tvm_ffi-*.whl
python -m pip install ./wheels/tvm_musa-*.whl

两个 wheel 必须来自同一个发布包,不要混用不同版本的 tvm 和 tvm-ffi。

报 libmudnn.so.3: cannot open shared object file​

TVM 运行时会加载 muDNN。确认 /usr/local/musa/lib 在动态库搜索路径中:

export LD_LIBRARY_PATH=/usr/local/musa/lib:${LD_LIBRARY_PATH:-}

然后重新执行推理脚本。通过脚本、cron 或非交互式 SSH 启动时,登录 shell 的 LD_LIBRARY_PATH 可能不会生效,需要在启动脚本里显式导出。

报 mcc: command not found​

MUSA 编译器 mcc 位于 /usr/local/musa/bin。加入 PATH:

export PATH=/usr/local/musa/bin:$PATH

报 mp22_cv_pipeline requires a MUSA target or an active target scope​

mp22_cv_pipeline 必须在 MUSA target 下执行。使用 relax.get_pipeline 时显式传入 target:

pipeline = relax.get_pipeline("musa_mp22_cv", target=target)

或者在 with target: / tvm.target.Target.current() 的上下文中调用。

Torch-MUSA 环境不可用​

示例构建需要 Moore Threads 发布的 torch、torch_musa 和 torchvision。先确认当前 venv 中的 Torch-MUSA 环境:

python -c "import torch, torch_musa, torchvision; print(torch.musa.is_available())"

输出应为 True。如果为 False 或导入报错,请回到快速开始,在当前 venv 中重新安装与 MUSA SDK 5.1.x/5.2.x 匹配的 Moore Threads aarch64 wheel。不要用公开 PyPI 的 torch 替换该环境。

torch.export 失败或提示动态 shape​

快速开始已经固定 batch=1、imgsz=640,并用静态 shape 的输入执行 torch.export.export(..., strict=True)。对于 Ultralytics 检测模型,还需要把 Detect 头切换到静态导出模式,并先用固定输入执行一次前向:

from ultralytics.nn.modules import Detect

for module in model.modules():
if isinstance(module, Detect):
module.dynamic = False
module.export = True
module.shape = None

with torch.no_grad():
model(torch.zeros(1, 3, 640, 640))

否则检测头会在 make_anchors 中根据动态 shape 重新生成 anchor,导出可能报 PendingUnbackedSymbolNotFound。动态 shape、数据相关的 Python 控制流和多输入模型需要额外设置 torch.export 的 dynamic shape 约束,不在快速开始示例范围内。

FP16 ExportedProgram 如何导出​

快速开始先在 PyTorch 侧转换精度,再导出静态 ExportedProgram:

model = fused_model.eval().half()
example_input = torch.zeros(1, 3, 640, 640, dtype=torch.float16)
exported_program = torch.export.export(
model, args=(example_input,), strict=True
)
mod = from_exported_program(exported_program, keep_params_as_input=False)

导入后的输入、权重、中间结果和输出均为 FP16。

构建时无法获取 YOLO 模型​

build.py 默认使用模型名 yolov8s.pt,文件不存在时由 Ultralytics 自动下载。失败时通常需要检查网络或代理。离线设备请提前准备好模型文件,并把模型名或本地路径传给脚本:

python build.py yolov8s.pt
python build.py /path/to/custom.pt

构建成功后,build.py 会在输出 .so 旁边生成同名 .json。默认输出名由模型名决定,例如 yolov8n.pt 对应 artifacts/yolov8n_musa.so。

推理时找不到 .so、.json 或图片​

inference.py 不会自动构建模型。先执行 build.py,再确认 .so 和同名 .json 位于 examples/artifacts/ 下。如果文件放在其他位置,显式传入:

python inference.py \
--model /path/to/yolov8s_musa.so \
--image /path/to/your_image.jpg

.so 和 .json 是同一组构建产物,应成对移动,并保持文件名主干一致。inference.py 根据 --model 自动查找同名 .json;只复制 .so 时,运行时无法获得输入 dtype、图像尺寸和类别名。

推理时报 shape 或 dtype 错误​

通常是把不同 --imgsz、不同模型或不同 TVM 版本的 .so 和 .json 混用了。确认两者文件名主干一致,并使用同一组构建产物。也可以重新执行:

python build.py --imgsz 640
python inference.py

.so 与生成它的 TVM-MUSA 版本、MUSA SDK 和目标架构绑定,不建议跨环境复用。

pip 去索引下载 apache-tvm-ffi​

tvm_musa 声明了 apache-tvm-ffi 依赖。若先安装本地 tvm-ffi wheel,pip 会直接使用本地版本:

python -m pip install ./wheels/apache_tvm_ffi-*.whl
python -m pip install ./wheels/tvm_musa-*.whl

找不到 MUSA 设备​

先确认设备与驱动:

mthreads-smi

若命令不存在,使用:

/usr/local/musa/bin/musaInfo

mthreads-smi 能正常输出,或 musaInfo 列出 Name: M1000,才说明驱动就绪。仍然无法识别时,请检查 MUSA SDK、驱动版本和设备权限;不要只根据 dpkg -l | grep musa 判断环境是否可用。

确认加载的是正确的 TVM​

python - <<'PY'
import tvm

print(tvm.__version__)
print(tvm.__file__)
print(tvm.support.libinfo())
PY

tvm.__file__ 应位于当前 venv 的 site-packages/tvm/ 下。若指向源码树、用户目录或其他 Python 环境,请清理 PYTHONPATH,并在干净的 venv 中重新安装。