:从装驱动到 OpenAI 兼容 API)
摩尔线程 MTT S80 本地跑大模型完整教程llama.cpp MUSA从装驱动到 OpenAI 兼容 API本文面向想在国产显卡上跑大模型、但没接触过 MUSA 生态的读者。全部命令可直接复制每一步都写清了「成功的标志」和「报错怎么办」。实测环境Ubuntu 22.04 / 内核 5.15.x / MTT S80 16GB / MUSA SDK 4.3.0〇、先说结论项目结果能不能跑✅能而且能跑 21B 的 MoE 模型用什么跑llama.cpp自己编译 MUSA 后端最快配置gpt-oss-20bMXFP4→15.16 tok/s占 12.4 GB中文长文写作Qwen3-14BQ4_0→8.35 tok/s占 12.1 GB最终形态systemd 服务 OpenAI 兼容 API开机自启一句话评价能跑大模型但跑不快。瓶颈在软件生态不在硬件为什么是 llama.cppvLLM / SGLang 在这张卡上没有可用版本它们依赖的torch_musa只提供 MUSA 5.x 构建而5.x 官方只覆盖 S4000 / S5000。Ollama 能跑但它内部就是 llama.cpp速度一样。llama.cpp 是 C 原生实现、不经过 torch只依赖 MUSA 运行时 ——这是 S80 上唯一有性能优势的推理框架。本文的前提S80 已被系统正确识别。如果你是虚拟机直通还需要先处理 PCIe 直通和 16GB BAR 窗口重设那是另一个话题。一、准备工作1.1 硬件项要求显卡MTT S8016GB主板x86 台式机有 PCIe x16 插槽内存32GB 以上模型加载要占内存页缓存硬盘100GB 空余电源600W 以上1.2 软件Ubuntu 22.04⚠️ 官方只支持这个别用别的版本1.3 ⚠️ 第一步先确认卡能被识别这一步不做后面全白做。sudomthreads-gmi✅ 成功输出里有MTT S80、显存16384MiB、温度等信息。❌ 报错对照报错含义command not found驱动没装 → 做第二章Error: failed to initialize mtml忘了sudo或卡没被识别有命令但看不到 S80卡未被识别 → 先解决驱动/直通问题 工具名是mthreads-gmig不是 nvidia 那个 n。mthreads-smi不存在。二、安装 MUSA 驱动驱动包叫musa_3.3.0-server_amd64.deb约 161 MB从摩尔线程开发者网站下载。官方没有 apt 源是手动拿 deb 装的内核模块由 DKMS 现场编译。sudoaptupdatesudoaptinstall-ydkmssudoaptinstall./musa_3.3.0-server_amd64.deb⚠️./不能省 —— 否则 apt 会去网上仓库找而不是装本地文件。⚠️ 坑 1四个版本号各不相同别以为装错了装完之后去核对版本会发现四个数字全都不一样层面版本deb 包名musa 3.3.0-serverDKMS 内核模块mtgpu/3.0.0mthreads-gmi报告Driver Version: 3.0.0musa_driver_version4.3.0这四个都是对的它们是不同层面的东西包版本 / 内核模块 / 用户态 API 版本。别拿其中一个去纠正另一个更别因此重装。⚠️ 坑 2一条看着吓人的无害报错mtgpu: module verification failed: signature and/or required key missing - tainting kernel这只是模块没签名、内核被标记污染的提示不影响任何功能。⚠️ 坑 3内核一定要 hold 住官方只支持 Ubuntu 22.04 / kernel 5.15.x。不锁住的话某次apt upgrade把内核推上去驱动就再也编不出来了。先看当前内核uname-r假设输出5.15.0-105-generic则sudoapt-mark hold linux-image-5.15.0-105-generic linux-headers-5.15.0-105-generic把版本号换成你自己uname -r看到的那个。✅ 成功标志输出里有linux-image-xxx set on hold。三、安装 MUSA SDK 4.3.0驱动只是让系统认识这张卡要编译/运行程序还需要 SDK开发工具包。类比装了显卡驱动能看视频但要玩游戏还得装 DirectX。3.1 下载与校验从开发者网站下载musa_toolkits_4.3.0.tar.gz约 1.93 GiB建议先核对 sha256。3.2 安装tar-xzfmusa_toolkits_4.3.0.tar.gzcdmusa_toolkits_installsudobash./install.sh-isudoapt-getinstall-yg libstdc-12-dev libelf-dev libnuma-dev✅ 成功标志mcc--version# mcc version 4.3.0mcc是摩尔线程的编译器底层是 clang 14相当于 NVIDIA 的nvcc。⚠️ 坑 4SDK 里缺东西 —— 这决定了哪些路走不通装完后用 cmake 探测会发现这些都是NOTFOUNDmtgraph、mtjpegmuDNN 相关、mtml、mtrtc、OpenCLmuDNN 在 MUSA SDK 里是一个独立包mudnn_rc3.1.x.tar.gz官方安装指南的 SDK 包结构是这样的├── mccl_rc2.1.x.tar.gz ├── mudnn_rc3.1.x.tar.gz ← 就是它 ├── musa_3.3.x-server_amd64.deb ← 驱动 └── musa_toolkits_rc4.3.x.tar.gz ← 工具链我们装的这意味着两条路本来就是断的GGML_MUSA_MUDNN_COPY—— muDNN 没装且它只加速 F32/F16 的连续拷贝量化权重根本不走这条路torch_musa也就是 PyTorch—— 缺libmudnn.so.3直接加载失败 如果你后续想装 PyTorch就得单独补 muDNN 这个包。⚠️ 坑 5千万别装 MUSA SDK 5.2.0官方安装指南明写5.x 只覆盖 S4000 / S5000。4.3.x 就是 S80 的最后一站装 5.x 白费工夫。四、编译 llama.cpp4.1 装依赖、拉源码sudoaptinstall-ygitcmake build-essentialcd~gitclone https://github.com/ggml-org/llama.cppcdllama.cpp4.2 ★ 构建参数重点只有一行cmake-Bbuild-graph\-DCMAKE_BUILD_TYPERelease\-DGGML_MUSAON\-DGGML_MUSA_GRAPHSON cmake--buildbuild-graph -j$(nproc)参数作用-DGGML_MUSAON打开 MUSA 支持不开就是纯 CPU 版-DGGML_MUSA_GRAPHSON★ 关键开关-j$(nproc)用满所有 CPU 核心★-DGGML_MUSA_GRAPHSON是最容易漏的一项实测快 5.8% ~ 8.1%而且速度抖动几乎归零连续测三次数字完全一致。它默认是 OFF藏在ggml/CMakeLists.txt里不显式打开就不会编进去。一个细节CMAKE_CXX_COMPILER用的是系统c不是 mcc。mcc 只编译设备代码宿主侧 C 走 g。别把它指到 mcc 上。⏱ 编译约需 20~40 分钟。✅ 成功标志[100%] Built target llama-server五、下载模型⚠️ 先说一个反直觉的事实官方Qwen/Qwen3-14B-GGUF里没有 Q4_0。官方只发Q4_K_M/Q5/Q6/Q8。想要 Q4_0必须去第三方量化仓库。实测可用的两个直链已用 HEAD 请求验证 200 文件大小模型仓库大小Qwen3-14B Q4_0中文写作unsloth/Qwen3-14B-GGUF8.0 GBgpt-oss-20b MXFP4结构化分析ggml-org/gpt-oss-20b-GGUF11.3 GBsudoaptinstall-yaria2mkdir-p/opt/models# 模型一Qwen3-14B Q4_0 —— 8.0 GBsudoaria2c-x16-s16-d/opt/models-oQwen3-14B-Q4_0.gguf\https://huggingface.co/unsloth/Qwen3-14B-GGUF/resolve/main/Qwen3-14B-Q4_0.gguf# 模型二gpt-oss-20b MXFP4 —— 11.3 GBsudoaria2c-x16-s16-d/opt/models-ogpt-oss-20b-MXFP4.gguf\https://huggingface.co/ggml-org/gpt-oss-20b-GGUF/resolve/main/gpt-oss-20b-MXFP4.gguf国内慢就把地址里的huggingface.co换成hf-mirror.com后面路径不用改。断了再跑一遍同样命令aria2c 会自动续传。5.1 ★ 量化格式Q4_0 优于 Q4_K_M文件名包含选择Q4_0✅选这个Q4_K_M❌ 看着更高级实测慢 21%~24%Q8_0/F16❌ 太大16GB 装不下反直觉但有原因llama.cpp 对Q4_0有专门的优化 kernel。5.2 ★ 模型选型优先选 MoE模型速度显存gpt-oss-20b21B MoE15.16 tok/s12.4 GBQwen3-8BQ4_013.29 tok/s7.9 GBQwen3-14BQ4_08.35 tok/s12.1 GB21B 的 MoE 比 8B 的 dense 还快 15%。原因MoE 每个 token 只读取**被激活的那几个专家**的权重正好绕开了显存带宽瓶颈 —— 而带宽正是这张卡的短板。六、先手动跑一次确认链路通sudoenvLD_LIBRARY_PATH/usr/local/musa/lib\$HOME/llama.cpp/build-graph/bin/llama-cli\-m/opt/models/Qwen3-14B-Q4_0.gguf\-ngl99-c4096\-p介绍一下你自己-n100参数含义LD_LIBRARY_PATH...告诉程序去哪找 MUSA 库必须写-ngl 99放到显卡上的层数99 全部-c 4096上下文长度✅ 成功逐字往外蹦中文末尾有速度统计。现象原因CreatePlatform failed!必须sudo跑非 root 一定失败libmusart.so: cannot open shared object fileLD_LIBRARY_PATH漏了只有 1~2 tok/s模型在跑 CPU检查-ngl 99七、做成 systemd 服务7.1 配置文件sudotee/etc/default/llama-server/dev/nullEOF LLAMA_MODEL/opt/models/Qwen3-14B-Q4_0.gguf LLAMA_CTX16384 LLAMA_NP4 LLAMA_PORT8080 EOF7.2 服务文件sudotee/etc/systemd/system/llama-server.service/dev/nullEOF [Unit] Descriptionllama.cpp MUSA server Afternetwork.target [Service] Typesimple Userroot EnvironmentFile/etc/default/llama-server EnvironmentLD_LIBRARY_PATH/usr/local/musa/lib ExecStart/home/你的用户名/llama.cpp/build-graph/bin/llama-server \ -m ${LLAMA_MODEL} -ngl 99 -c ${LLAMA_CTX} -np ${LLAMA_NP} \ --host 0.0.0.0 --port ${LLAMA_PORT} --no-warmup Restartalways [Install] WantedBymulti-user.target EOF⚠️/home/你的用户名/...要换成你真实的路径echo $HOME看一下。设置为什么Userroot必须—— MUSA 非 root 会失败EnvironmentFile换模型不用动服务定义Restartalways崩了自动拉起--no-warmup跳过预热就绪更快7.3 启动sudosystemctl daemon-reloadsudosystemctlenable--nowllama-server✅ 验证sudosystemctl status llama-server# active (running)curl-shttp://127.0.0.1:8080/health# {status:ok}⚠️ 坑 6-c是总上下文不是每个并发的服务里写-c 16384配-np 4每个 slot 其实只有 4096。查/v1/models看到n_ctx: 4096是对的不是配置没生效。⚠️ 坑 7加载任何模型前先清显存MUSA 驱动释放显存不及时。杀掉进程后显存迟迟不回收不清理就直接加载新模型会 OOM而且会污染后面所有测试。sudotee/usr/local/bin/llama-vram-clean/dev/nullEOF #!/bin/bash systemctl stop llama-server 2/dev/null sleep 2 pkill -x llama-server 2/dev/null sleep 3 sync echo 显存已清理 EOFsudochmodx /usr/local/bin/llama-vram-clean⚠️ 坑 8但内存RAM千万不要清echo3/proc/sys/vm/drop_caches# ❌ 绝对不要做显存和内存是两回事显存驱动不释放必须清上面那个脚本内存那 20 多 GB 是模型文件的页缓存不能清llama-server 用mmap加载模型进程 RSS 只有 ~700 MB模型数据都在页缓存里。所以free看到used很高是正常的。正是页缓存让第二次加载从 60 秒降到 16 秒。手动 drop 掉纯属倒退。唯一要盯的是Swap它被大量占用才说明真有内存压力。八、调用 API8.1 ⚠️ 中文有个坑直接把 JSON 写在命令行里中文会变乱码服务端报ill-formed UTF-8 byte。正确做法JSON 写进文件再发。cat/tmp/req.jsonEOF { messages: [{role: user, content: 用三句话介绍一下杭州}], max_tokens: 300, chat_template_kwargs: {enable_thinking: false} } EOFcurl-shttp://127.0.0.1:8080/v1/chat/completions\-HContent-Type: application/json; charsetutf-8\--data-binary /tmp/req.json8.2 从别的机器调用把127.0.0.1换成这台机器的 IP 即可服务配的是--host 0.0.0.0。因为格式和 OpenAI 完全兼容任何支持自定义 API 地址的客户端都能接Open WebUI / Cherry Studio / ChatBox / 自己写的脚本API 地址填http://机器IP:8080/v1API Key随便填。九、两个模型各有一个「必带参数」9.1 用 gpt-oss 必须带reasoning_effort它是推理模型默认输出大量英文思考不设这个参数会慢 6 倍。值适用low纯写作思考量极小medium分析 / 计算high❌ 别用思考会吃光 token正文为空⚠️low是拿准确性换速度的同一个财务计算题实测low两次都把费用率算错算成 45% / 85%正确答案 25%medium算对。写文章用low要算数必须用medium。9.2 用 Qwen3 必须关思考模式Qwen3默认开启思考模式会白白烧掉大量 token{chat_template_kwargs:{enable_thinking:false}}十、排错手册10.1 三个必会命令sudosystemctl status llama-server# 服务活着吗sudojournalctl-ullama-server-f# 实时看日志curl-shttp://127.0.0.1:8080/health# 健康检查10.2 ⚠️ 别信mthreads-gmi的显存读数实测它会报出超过物理显存的数字见过20102MiB(16384MiB)Free 值还会下溢到 2^64。这些是显示 bug不是真泄漏。判断 OOM 一律以日志里的failed to allocate ...为准。工具只信它的温度读数。10.3 崩溃转储MUSA 程序崩溃时会在工作目录落下core_*.mudmp文件里面写明了是哪个 kernel、什么错误。MUSA_ERROR_LAUNCH_TIMEOUT ... topk_moe_cuda128, false{1, 1, 1}, {32, 8, 1}排查 kernel 类问题这是第一手资料。10.4 报错总表报错原因怎么办mthreads-gmi: command not found驱动没装第二章Error: failed to initialize mtml忘了 sudo / 卡没识别加 sudo仍不行先解决驱动CreatePlatform failed!非 root 运行必须 sudolibmusart.so: cannot open...库路径没设加LD_LIBRARY_PATH/usr/local/musa/libundefined reference to musaLaunchKernel链接没加-lmusart编译参数加-lmusartfailed to allocate ...真爆显存换小模型或先跑清显存脚本只有 1~2 tok/s在跑 CPU检查-ngl 99中文乱码ill-formed UTF-8 byte命令行编码JSON 写文件 --data-binary file输出一长串英文思考没关思考模式见 §9附录 A实测性能模型速度显存gpt-oss-20b21B MoE / MXFP415.16 tok/s12.4 GBQwen3-8BQ4_013.29 tok/s7.9 GBQwen3-14BQ4_08.35 tok/s12.1 GBQwen3-14BQ4_K_M6.76 tok/s10.6 GB和 RTX 4070 Ti Super 对比MTT S804070 Ti Super比值显存带宽392 GB/s实测672 GB/s0.5814B Q4 实测8.35 tok/s约 40~50 tok/s约 0.18光看带宽只该慢 1.7 倍实际慢了约 5 倍—— 多出来的约 3 倍是软件生态成熟度。约 5 倍是取参考区间中点的近似值区间两端算下来在 4.8~6.0 倍之间。但 16GB 没浪费正是它让 21B 的 MoE 能全量进显存。这台机器的定位是「能跑大模型但跑不快」。附录 B常用命令# 服务sudosystemctl status llama-serversudosystemctl restart llama-serversudojournalctl-ullama-server-f# 健康检查 / 看实际加载的模型curl-shttp://127.0.0.1:8080/healthcurl-shttp://127.0.0.1:8080/v1/models# 换模型前先清显存sudollama-vram-clean# GPU 状态只信温度别信显存sudomthreads-gmi# 排查异常的最短路径# 1. 服务活着吗 systemctl is-active llama-server# 2. 加载的是我要的模型吗 curl /v1/models 或 pgrep -a llama-server# 3. 有 OOM 吗 journalctl -u llama-server | grep failed to allocate# 4. 显存释放不掉 跑清显存脚本实在不行重启机器免责声明本文为个人折腾记录硬件自购与摩尔线程及任何厂商无利益关系所有性能数据均为本机实测不同环境 / 驱动版本会有差异仅供参考驱动与 SDK 请从官方渠道获取注意其许可条款文中结论仅代表当时那个版本的软硬件组合后续版本可能已经改善