ggml 构建时如何用 CMake 选项启用 CUDA 后端并指定 CUDA_ARCHITECTURES?

发布时间:2026/9/15 16:50:49
ggml 构建时如何用 CMake 选项启用 CUDA 后端并指定 CUDA_ARCHITECTURES? ggml 构建时如何用 CMake 选项启用 CUDA 后端并指定 CUDA_ARCHITECTURES【免费下载链接】ggmlTensor library for machine learning项目地址: https://gitcode.com/GitHub_Trending/gg/ggml在 ggml 源码树里做 GPU 构建时默认只会编译 CPU 后端根目录 CMakeLists.txt 中GGML_CUDA选项的默认值是OFF。如果你的机器上装有 NVIDIA GPU 和 CUDA Toolkit需要在 CMake 配置阶段显式打开GGML_CUDA并决定是否通过CMAKE_CUDA_ARCHITECTURES把编译目标限定到具体的 GPU 架构。本文按 ggml 仓库自身的构建系统说明给出从配置到验证的完整操作路径。前提条件CMake 版本ggml 根目录要求3.14...3.28cmake_minimum_required(VERSION 3.14...3.28)但 CUDA 后端子目录 src/ggml-cuda/CMakeLists.txt 第一行声明cmake_minimum_required(VERSION 3.18) # for CMAKE_CUDA_ARCHITECTURES即 CUDA 路径需要 CMake 3.18 及以上才能使用CMAKE_CUDA_ARCHITECTURES变量。CUDA Toolkit 可被 CMake 找到src/ggml-cuda/CMakeLists.txt 通过find_package(CUDAToolkit)定位工具链配置成功时会打印CUDA Toolkit found找不到时直接以FATAL_ERROR CUDA Toolkit not found终止配置。ggml 要求 C 标准 11、C 标准 17根 CMakeLists.txt 中已固定CUDA 主机编译器由 CMake 自动检测配置日志中会打印例如CUDA host compiler is GNU x.x.x。选择 CMAKE_CUDA_ARCHITECTURES 的取值架构编号与 GPU 的对应关系来自 src/ggml-cuda/CMakeLists.txt 中的注释架构编号对应 GPU / 说明50MaxwellCUDA 12 的最低标准60P100FP16 CUDA intrinsics61Pascal__dp4a逐字节整数点积指令70V100FP16 tensor cores75Turingint8 tensor cores80Ampere异步数据加载、更快的 tensor core 指令86RTX 3000需要 CUDA v11.189RTX 4000需要 CUDA v11.890Hopper H100/200需要 CUDA v11.8120Blackwell需要 CUDA v12.8FP4 tensor cores每个编号可以带后缀含义同样是该文件的注释注释为英文原文语义XX-virtual编译为 PTX首次运行时 JIT 编译成目标机器码XX-real为该具体架构编译设备代码无后缀同时生成 PTX 和设备代码。不知道自己的 GPU 对应哪个编号时可以用 ci/run.sh 中用于构建的查询命令查看取第一块 GPU 的 compute capability 并去掉小数点nvidia-smi --query-gpucompute_cap --formatcsv,noheader,nounits | head -1 | tr -d .命令输出如80就是传给-DCMAKE_CUDA_ARCHITECTURES的数值。多块 GPU 或想覆盖多个架构时用 CMake 列表的分号语法ci/run.sh 中的回退写法是61;70;75;80;86;89。另外注意如果你传入的是 Blackwell 的12X编号如120构建系统会自动替换为12Xa例如120a因为 Blackwell 的 FP4 tensor core 指令不具备向前兼容性配置日志中会打印Replacing 120 ... with 120a ...。src/ggml-cuda/CMakeLists.txt 中的注释还提到120f-virtual理论上可行但需要 CMake 3.31.8 4.0.0或 4.0.2带修补的版本才能通过架构校验。执行构建在仓库根目录执行构建目录名可自定以下按 README 的 quick start 习惯用buildmkdir build cd build cmake -DGGML_CUDAON -DCMAKE_CUDA_ARCHITECTURES80 .. cmake --build . --config Release -j 8-DGGML_CUDAON打开 CUDA 后端默认是关闭的-DCMAKE_CUDA_ARCHITECTURES80把目标架构限定为 Ampere替换成你的nvidia-smi查询结果多架构用分号连接例如-DCMAKE_CUDA_ARCHITECTURES80;90。只有当构建时不连接任何 GPU、想编译给其他机器用的库时才需要手动指定编号如果构建机上有 GPU也可以不传该变量见下文默认行为。不指定 CMAKE_CUDA_ARCHITECTURES 时的默认行为ci/run.sh 的用法注释展示了开启 CUDA 的另一种入口GG_BUILD_CUDA1 bash ./ci/run.sh ./tmp/results ./tmp/mnt。该脚本会先执行 ctest、gpt-2、sam、yolo 等全部 CI 任务并清理输出目录中的日志文件属于完整 CI 流程不适合作为「只构建一次」的默认路径但其 CUDA 部分说明了架构的确定逻辑有nvidia-smi时取本机 compute capability 传入CMAKE_CUDA_ARCHITECTURES取不到时使用回退列表61;70;75;80;86;89。CMake 侧的默认行为src/ggml-cuda/CMakeLists.txt 第 8–57 行若GGML_NATIVE开启非交叉编译时默认为 ON且 CUDA Toolkit 11.6 且 CMake 3.24则使用native即编译构建机上实际存在的 GPU 架构否则按 CUDA Toolkit 版本组合默认列表CUDA 13 时加入50-virtual 61-virtual 70-virtual再加75-virtual 80-virtual 86-realCUDA 11.8 再加89-real 90-virtualCUDA 12.8 再加120a-real 12.9 再加121a-real。使用native的隐含前提是构建机上插着目标 GPU该文件的注释明确说明构建时没有任何 GPU 连接的情况下native会得到不可用的值此时应显式指定架构编号。验证构建结果配置阶段cmake 输出中应能看到CUDA Toolkit foundUsing CMAKE_CUDA_ARCHITECTURES... CMAKE_CUDA_ARCHITECTURES_NATIVE...第 100 行的 STATUS 消息其中第一个变量值应与你传入的-DCMAKE_CUDA_ARCHITECTURES一致Blackwell 架构会被改写为12Xa若环境里没装 NCCLGGML_CUDA_NCCL默认 ON会出现Warning: NCCL not found, performance for multiple CUDA GPUs will be suboptimal多卡场景性能会受影响单卡可忽略。构建阶段cmake --build .成功后会生成 CUDA 后端库目标ggml-cuda该目标在 src/ggml-cuda/CMakeLists.txt 中由ggml_add_backend_library(ggml-cuda ...)创建产物位于构建目录的输出路径下。测试以源码树顶层目录独立构建时GGML_STANDALONEGGML_BUILD_TESTS默认为 ON会一并构建测试。可在构建目录运行ctest --output-on-failure与 ci/run.sh 中的调用方式一致检查各算子测试是否通过。限制与注意点架构编号与 CUDA Toolkit 版本有硬性对应86 需要 CUDA v11.189/90 需要 v11.8120 需要 v12.8选号前先确认本机nvcc --version或CUDAToolkit_VERSION。native依赖构建机上的物理 GPU交叉编译或无卡机器上必须显式给CMAKE_CUDA_ARCHITECTURES。静态链接GGML_STATICON时Windows 上截至 CUDA 12.3.1 没有静态 cublas 库构建系统会自动退回动态CUDA::cublas见 src/ggml-cuda/CMakeLists.txt 第 159–171 行。其余 CUDA 相关选项如GGML_CUDA_FA、GGML_CUDA_FA_ALL_QUANTS、GGML_CUDA_NO_VMM、GGML_CUDA_COMPRESSION_MODE等在根 CMakeLists.txt 第 201–213 行有完整列表及默认值按需调整即可不影响「启用后端 指定架构」这条主路径。更多示例可参考 examples/simpleREADME 中提到的最小矩阵乘法示例对核心库含 CMake 构建系统的改动README 建议直接到 llama.cpp 提 PR因为 ggml 的改动会在那里获得更高的可见度与测试覆盖。【免费下载链接】ggmlTensor library for machine learning项目地址: https://gitcode.com/GitHub_Trending/gg/ggml创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询