
在 AMD 显卡上本地运行 Tabby基于 ROCm 的 GPU 加速部署指南【免费下载链接】tabbySelf-hosted AI coding assistant项目地址: https://gitcode.com/GitHub_Trending/tab/tabby本指南以 Tabby 官方博客《Running Tabby Locally with AMD ROCm》为核心面向使用 AMD 显卡的开发者讲解如何通过 ROCm 工具链在本机或 Docker 容器中启动 GPU 加速的 Tabby 服务覆盖环境准备、镜像部署、源码编译三条路径并结合当前仓库中的rocm编译特性、llama-cpp-server构建脚本与 CLI 参数实现给出可复制、可验证的完整操作流程。ROCm 是什么Tabby 为什么需要它ROCmRadeon Open Compute是 AMD 提供的开源 GPU 计算平台相当于 NVIDIA CUDA 在 AMD 生态中的对应物。它允许把高度并行的矩阵运算卸载到 GPU 上执行而 Tabby 的代码补全与聊天模型推理恰恰属于这种高并行计算负载。借助 ROCm原本只能在 CPU 上运行的 Tabby 本地服务可以改用 AMD 显卡加速显著缩短模型推理延迟。从当前仓库源码可以看到Tabby 的推理设备枚举中已经内置了rocm选项。在 crates/tabby/src/main.rs 中定义了Device枚举包含cpu、cuda、rocm、metal、vulkan五种后端#[derive(clap::ValueEnum, strum::Display, PartialEq, Clone)] pub enum Device { #[strum(serialize cpu)] Cpu, #[strum(serialize cuda)] Cuda, #[strum(serialize rocm)] Rocm, #[strum(serialize metal)] Metal, #[strum(serialize vulkan)] Vulkan, }strum(serialize rocm)意味着 CLI 中传入--device rocm即可选中该后端这与下方所有部署命令完全对应。支持现状以官方博客发布时为准ROCm 后端最初只出现在 nightly 构建中计划在 0.9 版本转为稳定且当时仅支持 Linux 平台只能通过编译产物直接运行Windows 支持与跨平台 Docker 镜像仍在规划中。需要说明的是截至当前仓库workspace 版本 0.33.0-dev.0rocm特性已经合入主线在 crates/tabby/Cargo.toml 中存在rocm [llama-cpp-server/rocm]的特性声明官方 Dockerfile 也包含对应的 ROCm 镜像构建方案详见下文。部署前的准备硬件兼容性与 ROCm 安装在动手之前请先确认两件事显卡属于 ROCm 支持的 AMD 型号且系统已正确安装 ROCm 运行环境。如何判断显卡是否受支持ROCm 后端最终由llama.cpp的 HIPBLAS 代码路径承载。在 crates/llama-cpp-server/build.rs 中启用rocm特性时会向 CMake 传入一份AMDGPU_TARGETS列表这正是当前构建所覆盖的 AMD GPU 架构代号gfx803, gfx900, gfx906:xnack-, gfx908:xnack-, gfx90a:xnack, gfx90a:xnack-, gfx940, gfx941, gfx942, gfx1010, gfx1012, gfx1030, gfx1031, gfx1100, gfx1101, gfx1102, gfx1103从源码结构可以推断该列表覆盖了 RX Vega 系列gfx900/gfx906、CDNA 数据中心卡gfx908/gfx90a、RDNA 1/2gfx1010/gfx1030 等以及 RDNA 3gfx110x等主流架构。在编译阶段也可以自行通过 CMake 变量调整该列表来适配你的具体显卡。安装 ROCm 工具链ROCm 的安装方式随发行版而异Ubuntu、Arch Linux、RHEL 等均有对应安装流程官方安装向导会给出针对性的操作步骤。上图展示的是在 Arch Linux 上成功安装 ROCm 软件包后的终端输出——安装完成后工具链默认位于/opt/rocm目录。值得注意的是构建脚本会读取ROCM_ROOT环境变量定位 ROCm 安装路径未设置时回退到/opt/rocmlet rocm_root env::var(ROCM_ROOT).unwrap_or(/opt/rocm.to_string()); config.define(CMAKE_C_COMPILER, format!({rocm_root}/llvm/bin/clang)); config.define(CMAKE_CXX_COMPILER, format!({rocm_root}/llvm/bin/clang));也就是说如果你的 ROCm 安装在其他位置编译前务必设置ROCM_ROOT否则会因找不到clang/clang交叉编译器而失败。方式一通过 Docker 镜像以 GPU 直通方式运行安装好 ROCm 之后最快的方式是直接使用官方 ROCm 镜像。容器启动命令如下docker run \ --device/dev/kfd --device/dev/dri --security-opt seccompunconfined --group-add video \ -p 8080:8080 -v $HOME/.tabby:/data \ tabbyml/tabby-rocm \ serve --device rocm --model StarCoder-1B各参数含义如下--device/dev/kfd将 AMD 内核驱动的 KFD 设备GPU 计算入口透传给容器--device/dev/dri透传 DRM 渲染节点供 GPU 驱动使用--security-opt seccompunconfined关闭容器的 seccomp 安全过滤避免阻碍 GPU 驱动发起必要的系统调用--group-add video将容器进程加入宿主的video用户组以获得访问显卡设备的权限-p 8080:8080将容器内 8080 端口映射到宿主机Tabby 服务默认监听 8080-v $HOME/.tabby:/data把宿主目录挂载为容器内的数据目录模型权重与索引数据持久化在$HOME/.tabbytabbyml/tabby-rocm serve --device rocm --model StarCoder-1B镜像入口为 Tabby 二进制serve子命令启动服务指定 ROCm 设备并加载 StarCoder-1B 模型。镜像内部的构建方式可在 docker/Dockerfile.rocm 中查看它提供了两个值得关注的细节构建阶段以rocm/dev-ubuntu-22.04:5.7.1-complete为基座执行cargo build --no-default-features --features rocm,prod --release --package tabby即显式关闭默认特性、仅启用rocm与prod特性进行 Release 编译运行阶段安装rocblas、hipblas、libgomp1等 ROCm 运行时依赖并设置TABBY_ROOT/data环境变量与服务端数据目录约定保持一致。启动后终端会输出模型加载与服务监听日志效果如下图官方博客运行截图方式二本地编译 Tabby 并直接运行如果希望 Tabby 直接运行在宿主系统上避免容器与驱动环境的叠加复杂度可以选择自行编译。启用 rocm 特性编译编译时需要在 cargo 构建命令中追加--features rocm以启用 ROCm 后端。特性依赖链为crates/tabby的rocm特性转发到crates/llama-cpp-server/rocm见 crates/tabby/Cargo.toml后者在 crates/llama-cpp-server/Cargo.toml 中声明为rocm [binary]最终驱动build.rs触发 llama.cpp 的 HIPBLAS 编译。编译时build.rs会向 CMake 传入如下关键配置GGML_HIPBLASON开启 HIPBLAS 后端CMAKE_C_COMPILER/CMAKE_CXX_COMPILER指向 ROCm LLVM 的clang/clangAMDGPU_TARGETS上文列出的 GPU 架构列表同时GGML_NATIVE保持关闭确保产物具备跨 CPU 的可移植性。启动服务编译完成后使用如下命令启动./tabby serve --model TabbyML/StarCoder-1B --device rocm这里--model接受模型 IDTabby 会自动下载权重到本地数据目录--device rocm指定推理后端。首次启动会下载模型文件随后加载模型并监听 8080 端口。serve子命令还支持更多参数见 crates/tabby/src/serve.rs参数默认值说明--model ID无代码补全模型 ID--chat-model ID无聊天模型 ID与--chat-device搭配使用--device DEVICEcpu推理设备可选cpu/cuda/rocm/metal/vulkan--chat-device DEVICE同--device聊天模型的独立设备--host IP0.0.0.0监听地址--port PORT8080监听端口--parallelism N1推理并行度提升它会显著增加显存占用关于 ROCm 设备上的层卸载策略可以从 crates/tabby/src/main.rs 的to_local_config看出端倪只要设备不是cpu模型层数默认全部放入 GPUnum_gpu_layers默认取 9999即全部卸载。如需调整可设置环境变量LLAMA_CPP_N_GPU_LAYERS另外设置LLAMA_CPP_FAST_ATTENTION可开启快速注意力路径。这意味着--device rocm会默认把整个模型加载进显存请确保显卡显存足够容纳所选模型。启动成功后的终端输出类似下图验证服务与性能预期服务启动后可通过 HTTP 接口验证其可用性健康检查GET /v1/health或POST同路径返回服务与模型状态模型列表GET /v1beta/models查看当前已加载的模型补全接口POST /v1/completions供 IDE 扩展VSCode、Vim、IntelliJ 等客户端见仓库clients/目录调用。上述路由的注册逻辑位于 crates/tabby/src/serve.rs 的api_router函数中其中/v1/completions还受config.server.completion_timeout超时控制。接下来便可以在支持的编辑器客户端中体验 GPU 加速的代码补全。性能方面官方博客作者在特定硬件组合StarCoder-1B 模型、Ryzen 7 5800X CPU 与 RX 6950XT 显卡上观察到相较 CPU 约 5 倍的补全提速。这属于个人硬件环境的实测观察不同 CPU/GPU 组合下的实际加速比会有所差异请以自身环境的实测为准。常见问题与使用限制平台限制ROCm 后端当前仅在 Linux 上可用Windows 支持与通用平台 Docker 镜像属于后续规划能力。版本演进官方博客发布时2024 年 1 月ROCm 支持仅存在于 nightly 构建如今rocm特性已合入仓库主线crates/tabby/Cargo.tomlDocker 镜像构建方案见 docker/Dockerfile.rocm。驱动与内核ROCm 对内核模块与 Mesa/驱动版本敏感若运行时报 GPU 设备错误请先核对 ROCm 版本与发行版的兼容矩阵。显存容量默认将模型全部层加载到 GPU显存不足时可借助LLAMA_CPP_N_GPU_LAYERS环境变量改为部分卸载以 CPU 与 GPU 混合方式运行。模型下载如需预下载模型可使用tabby download --model ID命令见 crates/tabby/src/download.rs避免首次启动时等待。按照上述步骤完成 ROCm 安装、Docker 或本地编译部署后AMD 显卡用户即可在自托管环境中获得 GPU 加速的 Tabby 代码补全与聊天服务。【免费下载链接】tabbySelf-hosted AI coding assistant项目地址: https://gitcode.com/GitHub_Trending/tab/tabby创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考