Tabby Vulkan 支持指南:让 LLM 在更多 GPU 上获得加速 Tabby Vulkan 支持指南让 LLM 在更多 GPU 上获得加速【免费下载链接】tabbySelf-hosted AI coding assistant项目地址: https://gitcode.com/GitHub_Trending/tab/tabby本篇技术指南聚焦 Tabby 引入的 Vulkan 推理后端从背景动机、环境安装、二进制下载到serve --device vulkan的完整运行流程并结合仓库源码crates/tabby/src/main.rs、crates/llama-cpp-server/build.rs等剖析其底层实现原理帮助读者在自己不兼容 CUDA/ROCm 的显卡上快速搭建 GPU 加速的代码补全服务。背景为什么 LLM 推理需要 Vulkan长期以来机器学习模型依赖 GPU 来提升推理性能。GPU 在执行 AI 所需的矩阵运算上远比 CPU 高效因此业界通常使用CUDANVIDIA与ROCmAMD这类 GPU 计算库。然而这两类库对显卡的支持范围有限CUDA 仅覆盖 NVIDIA 显卡ROCm 主要面向较新世代的 AMD 显卡许多老旧显卡、集成显卡或小众品牌显卡既不被 CUDA 支持也不被 ROCm 支持用户只能退回到 CPU 推理性能大打折扣。Tabby 从 v0.10.0 起引入Vulkan作为新的推理后端。Vulkan 最初是为游戏设计的图形 API其设计目标就是在非常广泛的显卡上工作覆盖从旗舰独显到集成显卡的几乎所有 GPU。借助 llama.cpp 生态中的GGML_VULKAN后端Tabby 得以把 GPU 加速带给那些无法使用 CUDA / ROCm 的用户。说明本仓库当前只保留了 Vulkan 支持功能相关的源码与文档预编译 Vulkan 二进制由 Tabby 官方 Release 渠道发布对应 v0.10.0 版本。你可以通过文末给出的方式从仓库源码自行构建也可直接下载官方预编译产物。第一步安装 Vulkan 运行时在使用 Vulkan 后端前需要确保系统已安装 Vulkan 运行时ICD loader。官方文档给出的安装方式如下。WindowsWindows 上 Vulkan 可能已原生支持。如果缺失可下载 Vulkan SDK 并安装确保系统中存在 Vulkan loadervulkan-1.dll与相应的驱动 ICD。Linux通过包管理器安装发行版安装包说明Arch Linuxvulkan-icd-loader通用 Vulkan ICD loader必装Arch Linuxvulkan-radeonAMD或vulkan-nouveauNVIDIA对应厂商驱动提供的 Vulkan ICDDebian / Ubuntulibvulkan1Debian 系的 Vulkan 运行时库安装完成后可用vulkaninfo命令验证 Vulkan 是否正常工作确认系统能枚举到显卡及对应的物理设备。第二步获取支持 Vulkan 的 Tabby 二进制Vulkan 支持通过编译特性编译进 Tabby 的 llama.cpp 服务器组件中。在仓库中可以看到crates/llama-cpp-server/Cargo.toml定义了三个可选后端特性[features] binary [] cuda [binary] rocm [binary] vulkan [binary]也就是说vulkan特性与cuda、rocm并列选择 Vulkan 特性时会启用对应的 llama.cpp 构建配置。在 crates/llama-cpp-server/build.rs 中可以看到构建脚本会根据特性开关向 llama.cpp 传递 CMake 选项if cfg!(feature vulkan) { config.define(GGML_VULKAN, ON); }这也解释了为什么 Vulkan 能力需要单独的预编译二进制而不是在同一个二进制中同时开启——不同的 GPU 后端CUDA/ROCm/Vulkan/Metal对应不同的 llama.cpp 编译配置。官方为 v0.10.0 提供了两个平台的预编译 Vulkan 二进制下载渠道见文末“参考与延伸”文件名分别为Linuxtabby_x86_64-manylinux2014-vulkanWindowstabby_x86_64-windows-msvc-vulkan.exe提示如果这些二进制与你的环境不匹配或者你希望自行构建可以参考 ci/prepare_build_environment.sh 准备构建环境后启用--features vulkan编译。本仓库目录下的预编译依赖如 clients/tabby-agent/wasm 中的 tree-sitter wasm 文件与 CI 脚本共同构成了完整的构建链路。第三步运行 Tabby 服务下载对应平台的二进制后即可用命令行启动服务。Windows打开命令提示符并进入下载目录执行tabby_x86_64-windows-msvc-vulkan serve --model StarCoder-1B --device vulkanLinux./tabby_x86_64-manylinux2014-vulkan serve --model StarCoder-1B --device vulkan启动后日志中会打印出 Vulkan 已发现你的显卡并正常工作的信息说明推理后端已就绪随后即可在 IDE 中体验流畅的代码补全。以下是运行后的补全效果示意深度解析--device vulkan参数如何工作设备枚举定义在 crates/tabby/src/main.rs 中Tabby 将推理设备定义为枚举#[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, }serve子命令通过 clap 解析--device参数默认值为Device::Cpu见 crates/tabby/src/serve.rs/// Device to run model inference. #[clap(long, default_value_tDevice::Cpu)] device: Device,因此--device vulkan就是把推理设备显式指定为 Vulkan。GPU 层数自动配置选择非 CPU 设备后Tabby 会自动把模型的所有层加载到 GPU。相关逻辑位于 crates/tabby/src/main.rsfn to_local_config(model: str, parallelism: u8, device: Device) - ModelConfig { let num_gpu_layers if *device ! Device::Cpu { std::env::var(LLAMA_CPP_N_GPU_LAYERS) .map(|s| s.parse::u16().ok()) .ok() .flatten() .unwrap_or(9999) } else { 0 }; ... }这意味着使用--device cpu时num_gpu_layers为 0即纯 CPU 推理使用--device vulkan以及其他非 CPU 设备时默认把 9999 层即全部层加载到 GPU并可通过环境变量LLAMA_CPP_N_GPU_LAYERS手动调整层数当LLAMA_CPP_FAST_ATTENTION环境变量存在时还会开启 fast attention-fa。llama.cpp 服务器的实际启动设备配置最终会传入llama-cpp-servercrate。在 crates/llama-cpp-server/src/supervisor.rs 中Tabby 以子进程方式拉起llama-server并拼接关键参数command .arg(-m) .arg(model_path) // 模型权重路径 .arg(--cont-batching) // 连续批处理 .arg(--port) .arg(port.to_string()) .arg(-np) .arg(parallelism.to_string()) // 并行度--parallelism .arg(--ctx-size) .arg(context_size.to_string()) // 上下文大小 ... if num_gpu_layers 0 { command.arg(-ngl).arg(num_gpu_layers.to_string()); // GPU 层数 }-ngl--n-gpu-layers是 llama.cpp 加载到 GPU 的层数参数。当二进制以GGML_VULKAN编译时这部分计算会走 Vulkan 后端在支持的显卡上完成矩阵运算。健康检查与设备状态上报启动完成后Tabby 的健康检查接口会返回当前推理设备信息。见 crates/tabby/src/services/health.rsdevice与chat_device字段会把Device枚举的字符串形式如vulkan上报给前端与 IDE 扩展。用户可以通过访问/health接口确认当前服务实际运行的推理设备。常用参数速查serve子命令中与本次主题相关的核心参数定义见 crates/tabby/src/serve.rs参数默认值说明--device DEVICEcpu推理设备可选cpu/cuda/rocm/metal/vulkan--model MODEL无/completions接口使用的模型 ID例如StarCoder-1B--chat-model MODEL无/chat/completions接口使用的模型 ID--parallelism N1模型服务并行度增大该值会显著提升显存占用--host IP0.0.0.0服务监听地址--port PORT8080服务监听端口相关环境变量环境变量作用LLAMA_CPP_N_GPU_LAYERS加载到 GPU 的层数非 CPU 设备默认 9999全部层LLAMA_CPP_FAST_ATTENTION存在时启用 fast attentionLLAMA_CPP_N_THREADS覆盖 CPU 线程数-t适用前提与限制驱动必须支持 VulkanVulkan 支持广泛但具体仍取决于显卡驱动是否提供 Vulkan ICD。AMDRADV / AMDVLK与 NVIDIA新版驱动内置 Vulkan一般均可满足集成显卡如 Intel iGPU在多数平台上也可用。需要专用的预编译二进制Vulkan 能力通过编译特性内置不能通过配置文件临时开启必须使用带 Vulkan 后端的二进制或自行以vulkan特性构建。模型兼容性示例中的StarCoder-1B是 Tabby 支持的代码补全模型之一实际可用的模型以 llama.cpp 支持的 GGUF 格式为准。性能对比Vulkan 的意义在于“覆盖面广”而非“绝对性能上限”对于不支持 CUDA/ROCm 的显卡它是把推理从 CPU 迁移到 GPU 的可行路径。参考与延伸本文档原文website/blog/2024-05-01-vulkan-support/index.md设备枚举与 GPU 层数逻辑crates/tabby/src/main.rsserve参数定义crates/tabby/src/serve.rsllama.cpp 子进程管理与参数拼接crates/llama-cpp-server/src/supervisor.rsVulkan 编译特性与 CMake 配置crates/llama-cpp-server/Cargo.toml、crates/llama-cpp-server/build.rs构建环境准备脚本ci/prepare_build_environment.sh健康检查设备上报crates/tabby/src/services/health.rs安装并启动后Tabby 会暴露标准的 HTTP 接口供 IDE 扩展如 clients/vscode、clients/intellij、clients/vim接入从而在代码编辑器中获得基于 Vulkan GPU 加速的代码补全体验。【免费下载链接】tabbySelf-hosted AI coding assistant项目地址: https://gitcode.com/GitHub_Trending/tab/tabby创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考