尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Burn 贡献者开发环境搭建与测试指南:从本地验证到提交 PR 的完整流程

Burn 贡献者开发环境搭建与测试指南:从本地验证到提交 PR 的完整流程 Burn 贡献者开发环境搭建与测试指南从本地验证到提交 PR 的完整流程【免费下载链接】burnBurn is a next generation tensor library and Deep Learning Framework that doesnt compromise on flexibility, efficiency and portability.项目地址: https://gitcode.com/GitHub_Trending/bu/burn本文是 Contributor Book 中 Getting Started 章节章节索引页的深度展开覆盖环境准备、编辑器配置、cargo run-checks本地校验流程、文档书籍构建以及针对张量算子与自动微分autodiff后向传播的测试编写规范。读完本文你将掌握 Burn 项目贡献者所需的基本开发工作流能够在提交 PR 前完成格式化、lint、拼写、依赖审计与后端测试的一站式验证并按照项目约定为新的张量算子编写正确、可跨精度运行的测试用例。本指南适用于想要向 Burn 提交代码或文档的开发者。它围绕三个子页面展开Setting Up The Environment开发环境的必备工具与常用命令Configuring Your Editor可选的编辑器VSCode与调试器配置Testing张量算子与 autodiff 测试的编写规范。一、总体流程开发 → 本地校验 → 提交 PRBurn 是一个以 workspace 组织的大型 Rust 项目见 Cargo.toml包含crates/*、examples/*以及xtask等成员。贡献者日常开发遵循以下循环在对应 crate 中修改或新增代码使用cargo fmt、cargo clippy --fix处理格式与 lint运行cargo run-checks做一次全面的本地验证针对改动涉及的 crate 运行更具体的测试提交 PR由 CI 运行更完整的工作区、文档、平台、feature 与后端组合测试。关于每一步的具体命令与背后实现见下文各节。二、环境准备与通用命令2.1 日常开发的两个自动修复命令在开发过程中以下两条命令会自动处理最常见的格式与 lint 问题cargo fmt --all作用对项目中的所有文件运行rustfmt统一代码风格。项目根目录的 rustfmt.toml 定义了全 workspace 的格式规则。cargo clippy --fix作用运行 Clippy 并自动应用受支持的 lint 修复建议。注意它要求 Git 工作区处于干净状态除非你显式传入--allow-dirty。因此建议先提交或暂存当前改动再执行该命令。2.2 提交 PR 前的总入口cargo run-checkscargo run-checks是项目约定的提交 PR 前必须通过的本地验证命令。它按顺序执行以下检查格式化检查Format拼写检查Typos依赖审计Audit全 workspace 的 ClippyLint宿主机上的快速 no-std 编译检查使用 Flex 后端、release 模式运行后端测试。这一命令的实际实现位于 xtask/src/commands/validate.rs。从源码可以看到它的设计原则是把最便宜的检查放在最前面让本地验证快速失败先依次执行 Format、Typos、Audit、Lint 四个子检查再做 no-std 检查最后才运行耗时的后端测试。如果你改动的目标后端不是默认的 Flex可以覆盖默认值cargo run-checks --backend backend--backend参数的类型定义在 xtask/src/commands/test.rs 中可用的后端值包括后端标识说明flex默认值Burn Flex 后端通用、快速基线ndarray基于 ndarray 的 CPU 后端cudaNVIDIA GPUCUDA后端metalApple GPUMetal后端vulkanVulkan 后端wgpuWGPU 后端rocmAMD GPUROCm后端需要强调的是cargo run-checks是一个快速公共基线而不是完整的 CI 测试矩阵。CI 会额外运行更广泛的工作区测试、文档构建、平台组合、feature 组合与后端组合。因此即使cargo run-checks通过你仍应运行与改动 crate 相关的具体测试。调试宏报错的技巧如果你正在调试张量相关的测试希望看到更详细的宏错误诊断信息可以这样运行RUSTC_BOOTSTRAP1 RUSTFLAGS-Zmacro-backtrace cargo run-checks2.3 no-std 检查的底层细节cargo run-checks中的快速宿主 no-std 检查在 validate.rs 的check_no_std函数中实现它本质上是cargo check --no-default-features --color always -p no-std-crate-列表被检查的 no-std crate 列表定义在 xtask/src/main.rs 的NO_STD_CRATES常量中包括burn、burn-autodiff、burn-core、burn-linalg、burn-std、burn-backend、burn-capture、burn-tensor、burn-ndarray与burn-no-std-tests。之所以叫快速检查是因为它只在宿主机上验证--no-default-features下的编译而不编译完整的嵌入式目标矩阵完整矩阵由 CI 处理。2.4 升级 Burn 的 semver 版本如果需要为下一个版本升级语义化版本号虽然这通常应交给维护者处理步骤是编辑 crates/burn/Cargo.toml 中的版本号运行cargo update更新 Cargo.lock。提示可以安装 cargo-update 来方便地保持工具链更新但这并非必需。三、配置你的编辑器可选以下步骤不是必须的且大部分并非 Burn 特有但对 Rust 开发体验有很大帮助。3.1 VSCode 推荐扩展扩展 ID用途rust-lang.rust-analyzerRust 语法与语义分析补全、跳转、诊断tamasfe.even-better-tomlTOML 语法与语义分析依赖清单、配置fill-labs.dependi依赖管理版本检查、更新提示vadimcn.vscode-lldb基于 LLDB 的调试支持3.2 配置调试器VSCode LLDB启用断点调试需要以下步骤打开命令面板CtrlShiftP或F1输入并选择LLDB: Generate Launch Configurations from Cargo.toml这会生成一份应保存为.vscode/launch.json的配置文件。从运行和调试侧边栏选择该配置再从列表中选择目标。关键一步由于仓库根 Cargo.toml 的[profile.dev]设置了debug 1旨在加速编译你需要在根Cargo.toml中将其改为debug truelaunch.json中的断点才能生效。现在可以在代码上启用断点然后开始调试你想要调试的库或二进制程序。调试器配置成功后界面类似下图来自 contributor-book/src/getting-started/debug-options-vscode.png如果你新建了库或二进制目标记得重复第 1 步以始终获得最新的目标列表。使用其他编辑器欢迎提交 PR 补充对应编辑器的配置说明参考 CONTRIBUTING.md 的贡献流程。四、文档与书籍本地预览 Burn Book 与 Contributor BookBurn Book面向用户与 Contributor Book面向贡献者都由mdbook构建。两个书籍的源码分别位于 burn-book/ 与 contributor-book/。本地打开书籍有两种方式# 方式一直接使用 mdbook mdbook serve path/to/book # 方式二通过 xtask会自动安装并使用 mdbook cargo xtask books {burn|contributor} opencargo xtask books的实现位于 xtask/src/commands/books.rsBookSubCommand支持Buildmdbook build与Openmdbook serve --open --port port默认随机端口并会通过ensure_cargo_crate_is_installed(mdbook, ...)自动确保 mdbook 已安装。如果你希望直接安装 mdbookcargo install mdbook对于纯文档改动可以只跑拼写检查而不运行完整的本地验证cargo xtask check typos该命令在需要时会自动安装typos。要对某本书应用建议的修正可以运行typos -w /path/to/book注意cargo xtask check typos只做拼写检查不含 Format/Audit/Lint 等其余检查项适合文档类 PR 的快速自检。五、测试规范张量算子与 autodiff5.1 张量算子测试写在 burn-tensor自动传播到所有后端张量算子测试一般形式为给定输入期望输出匹配或近似匹配只定义在burn-tensor的测试目录中而不是定义在各后端中burn-autodiff除外。它们的目录结构如下算子测试用例crates/burn-tensor/src/tests/ops下的各算子测试文件测试汇总宏crates/burn-tensor/src/tests/mod.rs中的testgen_all宏规则。将新测试加入testgen_all宏规则后测试会被自动传播到所有现有后端ndarray、flex、cuda、wgpu 等无需在各后端 crate 中重复编写测试。后端测试的实际运行入口是 crates/burn-backend-tests/它通过 feature 选择后端并执行这些传播过来的用例。5.2 autodiff 测试验证后向传播正确性autodiff 测试放在burn-autodiff的测试目录下用于验证后向传播backward pass的正确性。对于二元张量算子左侧与右侧都必须验证。官方推荐的手算期望值流程使用简单数值的小张量打开终端启动ipython并导入numpy手工完成计算也可以使用 Google Colab避免在本地安装依赖将实际输出与左侧、右侧各自的期望输出进行比较。仓库中的真实例子可参考 crates/burn-backend-tests/tests/autodiff/abs.rs其中对输入的梯度使用了近似断言 API。5.3 浮点断言用 assert_approx_eq 而不是 assert_eq!由于浮点计算的偶发性误差对浮点张量建议使用actual_output_tensor.into_data().assert_approx_eq::FloatElemTestBackend(expected_tensor_data, Tolerance::default())而不是assert_eq!(...)。其他断言也应始终使用FloatElemTestBackend并用.elem()转换字面量——因为后端会以多种精度被测试硬编码固定类型会导致在其它浮点精度下测试失败。为方便起见可以给类型起别名type FT FloatElemTestBackend;5.4 整数断言使用 IntElem 并注意表示范围对于整数测试应使用IntElemTestBackend并且当测试值无法表示超出max_value、低于min_value时应提前退出测试。可以假设最小范围为[0..127]i8。六、总结贡献前的检查清单把以上内容浓缩成一份可执行的清单编码与格式cargo fmt --all统一格式cargo clippy --fix自动修复 lint需干净 Git 状态。全面本地验证提交 PR 前运行cargo run-checks改动其它后端时用cargo run-checks --backend backend覆盖默认的 Flex 后端。补充针对性测试cargo run-checks只是快速基线请针对改动的 crate 运行具体测试CI 会覆盖更广的组合。张量算子测试写入burn-tensor/src/tests/ops并加入testgen_all宏测试自动传播到所有后端autodiff 测试写入burn-autodiff的测试目录二元算子左右两侧都要验证。断言规范浮点用assert_approx_eqFloatElemTestBackend或别名FT与.elem()整数用IntElemTestBackend并提前退出不可表示的情况。文档改动用mdbook serve或cargo xtask books {burn|contributor} open本地预览纯文档 PR 可用cargo xtask check typos快速自检拼写。若在流程中遇到问题可以在 Contributor Book 的 Frequently Encountered Issues 章节查阅常见问题例如 新增算子时的常见问题或参考 Guides 中的 向 Burn 添加新算子 与 提交示例 获取更深入的指导。【免费下载链接】burnBurn is a next generation tensor library and Deep Learning Framework that doesnt compromise on flexibility, efficiency and portability.项目地址: https://gitcode.com/GitHub_Trending/bu/burn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表