ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Warp C++ 测试镜像构建与 CI 落地指南:基于 docker/warp-cpp-test-env 的极简 CUDA 测试环境

Warp C++ 测试镜像构建与 CI 落地指南:基于 docker/warp-cpp-test-env 的极简 CUDA 测试环境 Warp C 测试镜像构建与 CI 落地指南基于 docker/warp-cpp-test-env 的极简 CUDA 测试环境【免费下载链接】warpA Python framework for GPU-accelerated simulation, robotics, and machine learning.项目地址: https://gitcode.com/GitHub_Trending/warp/warp本文围绕 NVIDIA Warp 仓库中 docker/warp-cpp-test-env/README.md 所描述的专用测试镜像展开讲解如何构建一个面向 CI/CD 的轻量 C 测试环境Ubuntu 24.04 精简 CUDA 组件 CMake build-essential uv并说明其与 Warp 现有 wheel 构建镜像的分工。读完本文你将掌握该镜像的构建命令、Dockerfile 多阶段实现细节、CI 接入方式GitLab CI 示例、可定制构建参数以及它在 Warp 仓库 C 示例测试流水线中的实际定位与收益。镜像定位为「测试」而非「构建」而生的精简环境Warp 是一个面向 GPU 加速仿真、机器人与机器学习的 Python 框架其 CI/CD 需要同时覆盖「构建发布物」与「验证产物可用」两条链路。warp-cpp-test-env镜像正是为后者设计在 CI 中运行warp/examples/cpp下的 C 集成示例测试AOT CUBIN 加载、源码包含、APIC 回放等验证预构建的 Warp 二进制能否在干净的容器环境中编译并运行。该镜像与仓库中的另一个镜像warp-builder有明确分工warp-cpp-test-env面向 C 示例的测试不含 LLVM构建时间约 2.5 分钟镜像体积约 2.8 GBwarp-builder面向 wheel 发布物构建内含完整构建工具链构建时间约 60 分钟镜像体积约 8 GB其详细说明见 docker/warp-builder/README.md。镜像仅支持x86_64/amd64架构README 明确说明 ARM64 支持可在后续按需补充多架构参考warp-builder的做法当前仓库内未提供 ARM64 变体。镜像内容清单与选型动机镜像README 中 Whats Inside 一节包含以下组件组件说明基础镜像Ubuntu 24.04CUDA仅安装最小必要组件nvcc、CUDA 头文件、运行时库通过parse_redist.py选择性安装CMake来自 Kitware PPA 的最新版本构建工具gcc、g、make即build-essential软件包Python 包管理器uv由官方 distroless 镜像拷贝而来选型收益在 README 中有量化说明每条 CI 运行可节省 5–10 分钟镜像体积约 2.8 GB而完整 CUDA devel 镜像约 10 GB且无需 Packman。被刻意排除的组件是nvrtc运行时编译库与libnvjitlinkJIT 链接库——它们是 Warp 库内部构建时所需的而本镜像只负责测试已预构建好的 Warp 二进制因此无需携带Dockerfile 第 58–60 行注释明确记录了这一取舍。此外Dockerfile 还额外安装了 OpenGL/GLFW 相关依赖libgl1-mesa-dev、xorg-dev、libxkbcommon-dev与python3-jinja2用于支持02_apic_visualization、03_apic_visualization_cpu两个可视化示例的编译GLFW 通过 CMake FetchContent 从源码构建需要 X11 与 GL 开发头文件python3-jinja2则被 glad v2 的 CMake 时代码生成器调用详见 Dockerfile 第 111–122 行注释与 warp/examples/cpp/README.md 中可视化示例的依赖说明。快速开始构建、打标签与推送README 的 Quick Start 给出了三个步骤全部围绕仓库内的 build.sh 脚本展开# 构建镜像 cd docker/warp-cpp-test-env ./build.sh # 推送到镜像仓库替换为你的 registry 地址 docker tag warp-cpp-test-env:12.9.1-ubuntu24.04 your-registry.com/project/warp-cpp-test-env:12.9.1-ubuntu24.04 docker push your-registry.com/project/warp-cpp-test-env:12.9.1-ubuntu24.04默认产出的镜像标签为warp-cpp-test-env:12.9.1-ubuntu24.04命名规则为warp-cpp-test-env:CUDA版本-ubuntuUbuntu版本。build.sh 参数详解结合 build.sh 源码脚本支持的参数如下README 中./build.sh --help的完整输出与源码第 18–48 行的usage()函数一致参数默认值说明-c, --cuda VERSION12.9.1CUDA 版本来自 NVIDIA redistrib-u, --ubuntu VERSION24.04Ubuntu 基础版本-r, --registry URL空Docker registry URL如registry.example.com-p, --push关闭构建后是否推送镜像-h, --help—打印帮助信息脚本逻辑源码第 50–77 行解析参数第 80–87 行拼装镜像名第 101–105 行执行docker build第 108–112 行按需docker push还包含几处贴心细节指定--registry后镜像名会拼成registry/warp-cpp-test-env:TAG并直接构建未指定则只构建本地镜像构建完成后脚本会提示下一步若未指定 registry提示先docker tag再docker push若指定了 registry 但未加--push提示直接docker push registry/warp-cpp-test-env:TAG脚本基于set -e严格模式任何步骤失败即中止交互式验证镜像的命令为docker run --rm -it warp-cpp-test-env:12.9.1-ubuntu24.04脚本第 134–135 行。Dockerfile 多阶段实现剖析Dockerfile 采用多阶段构建共四个阶段实现了「系统依赖 → CUDA 组件下载 → uv 拷贝 → 组装」的流水线阶段一base第 10–31 行基于ubuntu:${UBUNTU_VERSION}安装build-essential、ca-certificates、gnupg、software-properties-common、wget、curl、python3并从 Kitware PPA 安装最新 CMake先下载 Kitware GPG 密钥写入/etc/apt/trusted.gpg.d/再按$UBUNTU_CODENAME添加 apt 源最后apt-get install -y cmake。阶段二cuda-installer第 34–79 行核心阶段通过 NVIDIA 的parse_redist.py脚本按组件逐个下载安装 CUDA。为安全起见脚本使用固定 commit 哈希20983d06bcaf0ba85933f8c6e46782cd85f64cf6而非分支名拉取第 45 行。关键逻辑CUDA_MAJOR$(echo ${CUDA_VERSION} | cut -d. -f1) \ if [ $CUDA_MAJOR 12 ]; then \ COMPONENTScuda_cccl cuda_cudart cuda_nvcc; \ else \ COMPONENTScuda_cccl cuda_crt cuda_cudart cuda_nvcc; \ fi \ for component in $COMPONENTS; do \ python3 parse_redist.py \ --label ${CUDA_VERSION} \ --product cuda \ --os linux \ --arch x86_64 \ --output /opt/cuda \ --component $component || exit 1; \ done组件清单的选取依据Dockerfile 第 53–63 行注释cuda_ccclCUDA 头文件cuda.h、cuda_runtime.h、thrust、cubcuda_cudartCUDA 运行时库libcudart.socuda_nvcc编译 C 示例所需的 CUDA 编译器CUDA 13.x 差异cuda_crtC 运行时在 CUDA 13 中成为独立组件CUDA 12 中已捆绑因此 CUDA 13 需额外安装。这一「按主版本自动分支」的设计与warp-builder的说明一致其 README 也强调 Dockerfile 会自动处理 12.x 与 13.x 的组件差异。阶段三uv第 82 行从官方 distroless 镜像ghcr.io/astral-sh/uv:latest拷贝uv与uvx二进制。阶段四final第 85–134 行组装最终镜像将 CUDA 安装从构建阶段拷贝到/usr/local/cudaparse_redist.py产出的是/opt/cuda/linux-x86_64/结构第 92 行拷贝uv、uvx到/bin/第 95 行lib64软链第 98–100 行parse_redist.py生成的是lib而非lib64若不存在lib64则创建ln -s lib /usr/local/cuda/lib64保证传统 CUDA 路径约定可用环境变量第 103–106 行PATH前置/usr/local/cuda/binLD_LIBRARY_PATH包含/usr/local/cuda/lib64:/usr/local/cuda/lib并设置CUDA_HOME、CUDA_PATH安装验证第 109 行nvcc --version uv --version cmake --version全部成功才视为镜像构建成功OpenGL 依赖第 117–122 行安装上述可视化示例所需的图形库与python3-jinja2元数据标签第 127–132 行声明 OCI 标准的 title/description/vendor/source 及cuda.version、ubuntu.version自定义标签默认CMD [/bin/bash]第 134 行便于交互式进入容器排查。在 CI/CD 中落地GitLab CI 示例与直接构建README 提供了两种 CI 接入方式。方式一GitLab CI 流水线示例linux-x86_64 cpp examples test: stage: test image: ${CI_REGISTRY_IMAGE}/warp-cpp-test-env:12.9.1-ubuntu24.04 needs: [linux-x86_64 build] before_script: - mv warp/bin/linux-x86_64/*.so warp/bin/ script: - cd warp/examples/cpp - bash test_examples.sh要点说明${CI_REGISTRY_IMAGE}是 GitLab 内置变量会自动展开为当前项目在容器仓库中的路径README 明确注释needs声明依赖前序构建任务保证测试的是刚产出的warp/bin/linux-x86_64/*.sobefore_script将平台目录下的共享库移动到warp/bin/便于示例链接测试入口是 warp/examples/cpp/test_examples.sh它依次完成校验nvcc/cmake/Python 可用优先uv其次python3→ 对每个示例运行compile_kernel.pyAOT 示例或capture_wave.pyAPIC 示例→ CMake 配置传入-DWARP_NATIVE_DIR../../native→ 构建所有目标 →ctest --output-on-failure --verbose运行测试。该脚本还支持--cleanup参数在测试通过后清理build/与各示例的generated/目录。方式二直接 docker build不使用脚本docker build \ --build-arg CUDA_VERSION12.9.1 \ --build-arg UBUNTU_VERSION24.04 \ -t warp-cpp-test-env:12.9.1-ubuntu24.04 .与./build.sh等效适合在无脚本环境或需要完全掌控 build 参数时使用。自定义配置构建参数、版本约束与架构限制README 的 Customization 一节明确了两个构建参数及其默认值Build 参数默认值说明CUDA_VERSION12.9.1CUDA 版本来自 NVIDIA redistribUBUNTU_VERSION24.04Ubuntu 基础版本自定义示例./build.sh --cuda 13.0.0 --ubuntu 22.04 # 自定义 CUDA / Ubuntu 版本 ./build.sh --registry registry.example.com --push # 构建并推送使用注意可用 CUDA 版本以 NVIDIA 官方的 redistrib JSONhttps://developer.download.nvidia.com/compute/cuda/redist/为准构建前应确认所选版本仍在该清单中且存在对应的cuda_cccl、cuda_cudart、cuda_nvccCUDA 13 另需cuda_crt组件镜像仅面向 x86_64如需 ARM64/aarch64README 建议参考warp-builder的多架构构建示例从 Dockerfile 的ARG声明第 8–9 行可以确认这两个参数即全部可定制项其余软件版本CMake 取 Kitware PPA 最新版、uv 取官方 latest 镜像不提供参数化。与 warp-builder 的对比一张表看懂两个镜像README 给出的对比表| |warp-cpp-test-env|warp-builder| |-|---------------------|----------------| |Purpose| C 测试 | Wheel 构建 | |LLVM| 无 | 有构建期由 Packman 按deps/llvm-deps.packman.xml拉取不烧录进镜像 | |CUDA|parse_redist.py选择性安装 |parse_redist.py选择性安装 | |Build time| 约 2.5 分钟 | 约 60 分钟 | |Size| 约 2.8 GB | 约 8 GB |从 docker/warp-builder/README.md 可以进一步看到二者在设计哲学上的一致性都通过parse_redist.py只安装构建/测试所需的最小 CUDA 组件集都把 LLVM 延迟到构建期获取测试场景则完全不需要从而避免镜像随仓库依赖升级而频繁重建。许可证与合规注意本 Dockerfile 与构建脚本采用 Apache 2.0 许可见仓库根目录 LICENSE.md构建镜像时需遵守各组件自身许可证其中重点是 NVIDIA CUDA EULAREADME 原文ensure compliance with component licenses (notably the NVIDIA CUDA EULA)从源码看Dockerfile 头部也以 SPDX 头声明了SPDX-License-Identifier: Apache-2.0第 1–2 行与仓库整体许可策略一致。小结warp-cpp-test-env是一个目的单一的工程化产物用约 2.8 GB 的镜像替代约 10 GB 的完整 CUDA devel 镜像用 2.5 分钟的构建时间替代包管理器的运行时拉取为每条 CI 运行省下 5–10 分钟。其价值不在于技术复杂度而在于精确的依赖裁剪——只保留nvcc、头文件与运行时配合uv管理 Python 侧依赖即可完整驱动warp/examples/cpp下四个 C 集成示例的编译与回归测试。对于需要在自建 CI 中验证 Warp C 产物可用性的团队这是一个可以直接照搬的镜像模板复制docker/warp-cpp-test-env目录、按需调整--cuda/--ubuntu参数、将镜像名替换为自己的 registry 路径即可复用整套构建与测试流程。【免费下载链接】warpA Python framework for GPU-accelerated simulation, robotics, and machine learning.项目地址: https://gitcode.com/GitHub_Trending/warp/warp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表