在 Ubuntu 26.04 LTS 上编译与部署 llama.cpp (支持 AMD ROCm 7.2 极致显存压榨)

详细记录在 Ubuntu 26.04 LTS 环境下,从底层驱动安装、依赖修复到从源码构建开箱即用支持 AMD ROCm 7.2.3 硬件加速的 llama.cpp 的全流程。针对大容量 UMA 共享显存(如 48GB 显存配置)进行全栈压榨优化,并打通 Python 深度学习生态与企业级生产 API 服务部署。

在大模型算力本地化部署的浪潮中,llama.cpp 凭借其极致的 C/C++ 架构设计、内存流式加载以及广泛的硬件适配,成为了本地设备上高效推理大语言模型(LLM)的绝对核心。

本文将完整演练如何在最新的 Ubuntu 26.04 LTS 生产环境下,基于 AMD ROCm 7.2.3 架构底座,全流程从源码编译、优化并全局部署 llama.cpp。本指南特别针对消费级旗舰 APU 或配备大容量 UMA 共享显存(如 48GB 统一显存)的硬件环境进行深度硬件调度优化,助您在保障数据绝对私密的前提下,无缝打通从底层驱动到百亿参数企业级旗舰模型超长上下文推理的完整闭环。


1. 系统底座配置:ROCm 7.2.3 驱动安装

首先,我们需要为系统配置标准的 AMD GPU 官方软件源,并锁定版本优先级,以避免系统后续自动更新时产生包冲突。

1.1 添加官方 GPG 密钥与仓库

在终端中依次执行以下命令,完成软件源和优先级的配置:

# 更新基础系统包
sudo apt update && sudo apt upgrade -y
sudo apt install wget curl gnupg2 -y

# 创建安全密钥目录并拉取 AMD GPG key
sudo mkdir -p /etc/apt/keyrings
wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null

# 添加 ROCm 7.2.3 官方源(由于 26.04 刚发布,此处前向兼容 noble 分支)
sudo tee /etc/apt/sources.list.d/rocm.list << EOF
deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/7.2.3 noble main
deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/graphics/7.2.3/ubuntu noble main
EOF

# 设置 APT 优先级锁定,确保 ROCm 官方包不被 Ubuntu 默认包覆盖
sudo tee /etc/apt/preferences.d/rocm-pin-600 << EOF
Package: *
Pin: release o=repo.radeon.com
Pin-Priority: 600
EOF

1.2 安装核心组件与硬件赋权

刷新软件源索引,并安装核心内核级加速模块(DKMS)与完整 ROCm 工具链。对于 APU/核显架构,必须获取底层的硬件访问权限:

sudo apt update

# 完整安装全套 ROCm 组件(推荐,内含完备的 SDK 开发包)
sudo apt install rocm amdgpu-dkms -y

# 将当前操作用户加入视频与渲染用户组
sudo usermod -a -G render,video $USER

重要提示: 用户组权限分配完毕后,请务必重启系统(或完全注销重新登录),使内核对当前用户的硬件调用赋权正式生效。


2. 避坑指北:解决 Ubuntu 26.04 底层动态链接库断层

由于 Ubuntu 26.04 将大量的底层核心系统库升级到了全新的主版本(例如 libxml2 迭代至 16),而许多预编译的深度学习组件或周边依赖在编译链接时仍会固执地寻找旧版的 libxml2.so.2

为了规避程序运行时抛出 Shared object file not found 错误,我们需要在环境搭建之初,建立一个优雅的向后兼容软链接:

# 1. 确保系统级 libxml2 开发环境齐备
sudo apt install libxml2-16 libxml2-dev -y

# 2. 创建动态库软链接(解决老版本编译轮子依赖冲突的硬核操作)
sudo ln -s /usr/lib/x86_64-linux-gnu/libxml2.so.16 /usr/lib/x86_64-linux-gnu/libxml2.so.2

3. 环境加速:Hugging Face 镜像站配置

在本地部署大模型时,动辄数十 GB 的 GGUF 权重文件极其考验网络稳定性。配置国内镜像加速是跑满网络带宽、保障大文件下载零中断的标准最佳实践。

# 将环境变量写入 bash 配置文件使其永久有效
echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc
source ~/.bashrc

4. 源码编译与全局安装 llama.cpp

驱动与基础环境就绪后,我们开始通过 CMake 对 llama.cpp 进行原生构建,并指定开启针对 AMD 显卡的 HIP 后端加速。

4.1 克隆源码

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

4.2 针对特定 GPU 架构执行 CMake 构建

在此步骤中,请使用 rocminfo 确认您的具体硬件架构(例如集显 Radeon 890M 对应的架构代号通常为 gfx1150)。在配置 CMake 时,显式传入对应的 AMDGPU_TARGETS

mkdir build && cd build

# 运行 CMake 配置,开启 HIP 加速,并指定硬件架构(以 gfx1150 和 gfx1200 为例)
cmake .. -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1150,gfx1200 

# 利用系统多核算力开始并行编译
make -j$(nproc)

4.3 全局系统级安装

编译完成后,为了避免在编写自动化脚本或跨目录调用时使用繁琐的相对路径,建议将其规范化地安装至全局环境变量:

# 将编译产物规范化安装至系统路径(如 /usr/local/bin)
sudo cmake --install .

安装成功后,在系统任意路径输入 llama-cli --version 即可验证环境就绪情况。


5. 拓展配置:构建全栈 Python AI 生态

除了基于 C++ 原生运行 llama.cpp,构建一套完整的本地算力节点还需要 Python 生态支持,这对于后续运行 Hugging Face transformers 原生推理、执行 GGUF 格式转换(如 convert_hf_to_gguf.py)至关重要。

# 升级基础包管理器
pip install --upgrade pip

# 从 PyTorch 官方源拉取适配 ROCm 7.2 的最新版深度学习加速库
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm7.2

5.1 显卡识别与大容量显存测试

配置完毕后,编写简短 Python 脚本验证硬件底座是否被打通:

import torch

print(f"PyTorch 核心版本: {torch.__version__}")
print(f"ROCm 硬件加速是否可用: {torch.cuda.is_available()}")

if torch.cuda.is_available():
    print(f"当前调度设备: {torch.cuda.get_device_name(0)}")
    # 针对大容量 UMA 共享显存配置,此处将输出系统实际划拨的显存尺寸

6. 极压榨实战:企业级高并发服务部署 (llama-server)

现在,我们将挑战大模型本地化部署的极限:在具备大容量共享显存(48GB UMA)的主机上,运行达到 35B 参数规模的旗舰大模型 Qwen 3.6 35B,并开启 128K (131072 Token) 的超长上下文窗口。

这是一个生产级、具备高安全策略的 llama-server 启动脚本:

# 创建并进入模型目录,使用 huggingface-cli 稳定拉取大模型权重
mkdir -p ../models && cd ../models

# 利用 CLI 客户端和镜像源高速下载特定 Qwen 3.6 35B 强力去无监督量化版本
huggingface-cli download   Qwen/Qwen-7B-Chat-GGUF   qwen-7b-chat-q4_k_m.gguf   --local-dir .   --local-dir-use-symlinks False

# 启动高并发、具备极致显存优化的 OpenAI 兼容 API 服务
llama-server   -m ./Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q8_K_P.gguf   --mmproj ./mmproj-*.gguf   --jinja   -c 131072   -ngl 99   --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0 --presence-penalty 0   --flash-attn   --cache-type-k q8_0 --cache-type-v q8_0   --api-key "你的实验室自定义安全密码"   --host 0.0.0.0 --port 8080

6.1 核心参数解析与“显存魔术”:

  • 格式与多模态原生对齐
    • --mmproj:挂载多模态视觉投影矩阵文件,让 API 接口瞬间拥有解析图表、研报截图的视觉感知能力。
    • --jinja:强制启用原生的 Jinja 模板引擎解析 Prompt 结构。这对于 Qwen 3.6 等新一代模型至关重要,能严丝合缝地还原训练阶段的特殊 Token,彻底杜绝多轮对话后角色混乱或逻辑飘移的问题。
  • 显存极限压榨(在 48GB 内塞下 35B 模型 + 128K 上下文的核心秘诀)
    • -ngl 99:(--n-gpu-layers) 将模型的所有计算层全量卸载(Offload)到 GPU。由于我们有 48GB 的超大统一显存(UMA),设置 99 可以保证所有核心计算完全在 GPU 算力单元内闭环,杜绝 CPU 内存因频繁交换数据而产生的性能卡顿。
    • --flash-attn:强制激活 Flash Attention(闪电注意力机制)。在处理超长文本(如吞入整篇金融长篇大作或历史回测日志)时,它能成倍降低注意力矩阵带来的显存开销,让显存需求曲线由传统的二次方变为线性。
    • --cache-type-k q8_0 --cache-type-v q8_0KV Cache 8-bit 量化。这是关键的显存魔术。在 128K 超长上下文的吞吐下,不加此参数的原始 KV 缓存会吞掉数十 GB 显存;开启 8-bit 量化后,KV 缓存的体积被原地压缩近 50%,配合 Q8 级别高精度模型,完美达成精度与显存空间的极致平衡。
  • 边界安全与环境鉴权
    • --api-key:由于服务通过 0.0.0.0 监听局域网甚至公网,通过强制添加鉴权令牌(Bearer Token),为内部量化系统调用或接入前端(如 Open WebUI)提供坚固的安全防线。

总结

通过在最新的 Ubuntu 26.04 上借助 ROCm 7.2 构建 llama.cpp 全栈架构,我们成功在本地打通了从硬件驱动、动态库兼容性补丁、深度学习生态到生产级高并发 API 服务的全链条。

借助大容量统一显存(UMA)与 KV 缓存压缩、Flash Attention 等极限技术的化学反应,个人与实验室用极低的硬件开销,便能流畅驾驭百亿级、全功能的企业级模型。这不仅为前沿策略的回测、长文本长代码的本地深度离线解析夯实了算力底座,更把数据的“绝对控制权”与隐私壁垒牢牢锁在了本地。

远思码技术实验室 远思为径,码动价值。