news 2026/9/11 2:38:58

llama.cpp ZenDNN 后端如何在 AMD EPYC 上构建并启动 llama-server 推理服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
llama.cpp ZenDNN 后端如何在 AMD EPYC 上构建并启动 llama-server 推理服务

llama.cpp ZenDNN 后端如何在 AMD EPYC 上构建并启动 llama-server 推理服务

【免费下载链接】llama.cppLLM inference in C/C++项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp

在 AMD EPYC 服务器上用 llama.cpp 跑推理时,默认走的是通用 CPU 后端。ZenDNN 后端可以让矩阵乘法(MUL_MAT、MUL_MAT_ID)走 AMD 针对 EPYC 优化的 LowOHA MatMul 算子,其余算子仍由标准 CPU 后端处理。这篇文档对应的任务路径是:在 Linux 上开启-DGGML_ZENDNN=ON构建 llama.cpp,下载一个 BF16 或 Q8_0 的 GGUF 模型,然后用llama-server起一个 8080 端口的推理服务,并从启动日志确认 ZenDNN 后端确实被初始化。

适用前提(来自 docs/backend/ZenDNN.md):

  • 操作系统:Linux,已验证 Ubuntu 20.04 / 22.04 / 24.04。
  • CPU:AMD EPYC 9005 系列(Turin,Zen 5)、9004 系列(Genoa,Zen 4)、7003 系列(Milan,Zen 3),或 AMD Ryzen AI MAX(Strix Halo)。BF16 算子仅在 Zen 4 / Zen 5 上可用,更老的 CPU 上相关运算会退回 FP32。
  • 注意区分:ZenDNN 是 AMD 面向 EPYC 的库,与 IBM 的 zDNN 不是同一个东西。

构建开启 ZenDNN 后端的 llama.cpp

有两种方式。推荐第一种,不需要手动安装 ZenDNN:CMake 会自动下载并构建 ZenDNN。

# 自动下载并构建 ZenDNN(推荐) cmake -B build -DGGML_ZENDNN=ON -DCMAKE_BUILD_TYPE=Release cmake --build build --config Release -j $(nproc)

docs/build.md 中说明:首次构建会自动下载并构建 ZenDNN,大约需要 5–10 分钟,之后的构建会快很多。

可选分支:如果你想自己构建 ZenDNN 或固定某个版本,先按 ZenDNN 的说明从源码构建(需要 CMake >= 3.25),再通过ZENDNN_ROOT指向安装目录:

# 方式一:环境变量 export ZENDNN_ROOT=/path/to/ZenDNN/build/install # 替换为你实际的 ZenDNN 安装目录 cmake -B build -DGGML_ZENDNN=ON -DCMAKE_BUILD_TYPE=Release cmake --build build --config Release -j $(nproc) # 方式二:直接在 CMake 参数里指定 cmake -B build -DGGML_ZENDNN=ON -DZENDNN_ROOT=/path/to/ZenDNN/build/install -DCMAKE_BUILD_TYPE=Release cmake --build build --config Release -j $(nproc)

上面的ZENDNN_ROOT指向 ZenDNN 自己构建后的安装目录,/path/to/ZenDNN/build/install是源文档给出的占位路径,需要替换成你的真实路径。CMake 侧的行为可以在 ggml/src/ggml-zendnn/CMakeLists.txt 中核对:未设置ZENDNN_ROOT时自动下载构建,设置了则使用该自定义安装。

下载 BF16 或 Q8_0 模型

ZenDNN 后端目前支持 FP32、BF16 和 Q8_0 三种数据类型;其他量化格式会退回标准 CPU 后端。文档给出的示例模型是 Llama-3.1-8B-Instruct 的 BF16 GGUF:

# 从 Hugging Face 下载 BF16 GGUF 模型 huggingface-cli download meta-llama/Llama-3.1-8B-Instruct-GGUF --local-dir models/

也可以只下载 Q8_0 权重的单个文件:

huggingface-cli download meta-llama/Llama-3.1-8B-Instruct-GGUF \ Llama-3.1-8B-Instruct-Q8_0.gguf \ --local-dir models/

关于精度选择,文档给出的事实是:BF16 在 Zen 4 / Zen 5 EPYC 上性能最好;Q8_0 的加速主要在 prefill / prompt 处理这类大矩阵乘法占主导的阶段体现,逐 token 生成速度可能与标准 CPU 后端接近,取决于模型、批大小、线程数和 CPU 拓扑。

启动 llama-server

在启动前设置文档推荐的算子环境变量,然后启动服务:

# Blocked AOCL DLP 算法,文档标注为推荐配置 export ZENDNNL_MATMUL_ALGO=1 ./build/bin/llama-server \ -m models/Llama-3.1-8B-Instruct.BF16.gguf \ --host 0.0.0.0 \ --port 8080 \ -t 64

参数说明以文档为准:ZENDNNL_MATMUL_ALGO=1选用 Blocked AOCL DLP 算法,是文档明确推荐的性能配置;--host 0.0.0.0表示监听所有地址(tools/server/README.md--host默认值为127.0.0.1,即不设置时只有本机可访问);-t 64是文档示例中的线程数,对应高核心数 EPYC 的示例场景,可按实际核数调整。

启动后访问http://localhost:8080即可使用服务端点。

多路(multi-socket)NUMA 机器上,文档给出的可选优化是手动绑定 NUMA 节点:

numactl --cpunodebind=0 --membind=0 ./build/bin/llama-server ...

已知问题一节明确写了:多路系统上可能需要手动 NUMA 绑定才能达到最佳性能,上面的numactl命令是文档给出的绑定方式。

验证 ZenDNN 后端已生效

文档 Q&A 给出的验证方式:查看 llama.cpp 运行时的日志输出,应当能看到 ZenDNN 后端被初始化的提示信息,也可以直接检查输出中的 backend 名称。

docs/build.md 的 ZenDNN 小节还提供了一个最小推理测试命令,可以直接确认模型能跑通生成:

./build/bin/llama-cli -m PATH_TO_MODEL -p "Building a website can be done in 10 steps:" -n 50

其中PATH_TO_MODEL替换为你的 GGUF 文件路径,-n 50表示生成 50 个 token。

限制与边界

  • 加速范围:目前只有 MUL_MAT 和 MUL_MAT_ID 两个算子走 ZenDNN,attention、激活等其他算子仍由标准 CPU 后端处理。文档 TODO 中列了扩展算子支持,但尚未落地。
  • 量化格式:除 FP32、BF16、Q8_0 外的量化格式会回落到标准 CPU 后端。
  • BF16 依赖 Zen 4 / Zen 5;Milan(Zen 3)上没有 BF16 加速。
  • 性能预期:文档 Q&A 给出的说法是,矩阵乘法部分相对标准 CPU 推理大致是 1.1x–2x 的提速,具体取决于模型大小、批大小和 CPU 架构;文档同时说明,小模型、批大小或线程数不合适时未必能体现出加速,并建议开启 ZenDNN 自身的 profiling 确认 LowOHA MatMul 确实被调用(profiling 选项属于 ZenDNN 库的文档范畴,本仓库文档未展开)。

如果启动后日志里看不到 ZenDNN 后端初始化信息,先回到构建环节确认:-DGGML_ZENDNN=ON是否加上、使用的是否为build/bin/llama-server这个新构建产物。更细的硬件支持、算子列表和环境变量说明见 docs/backend/ZenDNN.md。

【免费下载链接】llama.cppLLM inference in C/C++项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 2:38:52

LeetCode 1224 最大相等频率:用哈希表与频率分布形态实现线性判定

LeetCode 1224 的 Maximum Equal Frequency(最大相等频率)是我刷题时印象很深的一道困难题。它名字很直白:给一个正整数数组,找出最长的一个前缀,使得我们删除前缀中的一个元素后,剩下的每个不同数字出现次…

作者头像 李华
网站建设 2026/9/11 2:34:33

声振温监测方案拆解:从传感器选型到可视化看板落地

设备管理人员最怕的,从来不是“设备坏了”这件事本身,而是“不知道它快坏了”。传统模式下,转动设备就像一台关在铁皮柜子里的黑箱——巡检员拿听音棒贴上去听一听,用手背试一下壳体温度,再凭经验判断“还行”或者“有…

作者头像 李华
网站建设 2026/9/11 2:33:24

SNMP网络监控实战:从交换机配置到故障诊断与嵌入式移植

做运维这些年,最怕的就是凌晨两点的电话。那天值班同事说整个办公网上不了外网,我第一反应不是重启防火墙,而是打开SNMP监控平台看核心交换机的流量曲线。SNMP网络监控这个工具,在很多人眼里只是“看看CPU和内存”,但真…

作者头像 李华
网站建设 2026/9/11 2:31:22

Rocky Linux生产环境部署Odoo:从系统初始化到Nginx反向代理全指南

1. 为什么我把Odoo生产环境从Ubuntu迁到了Rocky Linux1.1 一次升级事故逼出来的选型反思先说个真实经历。前两年我给一家做外贸的公司维护过一套跑在Ubuntu 18.04上的Odoo,平时挺稳定,结果有一回系统提示可以做LTS升级,我没多想就点了&#x…

作者头像 李华
网站建设 2026/9/11 2:29:18

期货量化策略部署全流程:从回测到实盘的关键步骤

期货量化策略部署上线全流程_从回测到实盘的关键步骤这两年做期货量化的人越来越多,但真正能把自己策略从回测搬到实盘的,比例其实低得吓人。我见过太多人卡在某个环节,有的是回测做得天衣无缝、一上模拟盘就变形,有的是参数明明在…

作者头像 李华