news 2026/9/12 2:47:03

MLSysBook 仓库贡献完整指南:项目路由、dev 分支工作流与 pre-commit 质量门禁

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MLSysBook 仓库贡献完整指南:项目路由、dev 分支工作流与 pre-commit 质量门禁

MLSysBook 仓库贡献完整指南:项目路由、dev 分支工作流与 pre-commit 质量门禁

【免费下载链接】cs249r_bookMachine Learning Systems项目地址: https://gitcode.com/GitHub_Trending/cs/cs249r_book

MLSysBook(即 cs249r_book 仓库)是Machine Learning Systems 教科书与其姊妹项目(TinyTorch、Co-Labs、Hardware Kits、MLSys·im、MLPerf EDU、StaffML 等)的聚合仓库(monorepo)。本指南以仓库根目录的 CONTRIBUTING.md 为骨架,完整覆盖"选择贡献项目 → 分支 → 本地校验 → 提 PR → 获得致谢"的全流程,并结合仓库内的 .pre-commit-config.yaml、.github/PULL_REQUEST_TEMPLATE.md 与 CI 工作流,给出可逐条验证的源码级依据。读完你就能在正确的位置、用正确的工作流,向这个仓库提交第一份合格贡献。

仓库全景:一个 monorepo,九个"贡献落点"

仓库根目录的 CONTRIBUTING.md 开宗明义:本仓库是ML Systems 教科书加一族姊妹项目的家,绝大多数贡献只会落在其中一个项目里,因此这份顶层指南的职责是"把你送到正确的地方"。

  • 教科书(Textbook):书稿主体,各章节的 qmd 源文件、配图、练习;
  • TinyTorch:从零实现的深度学习框架(模块、测试、里程碑);
  • Hardware Kits:硬件实验与板卡配方;
  • Co-Labs:基于 Marimo + Pyodide 的浏览器交互实验;
  • MLSys·im:ML 系统模拟器(模型、场景、评分卡);
  • MLPerf EDU:教学用基准测试套件;
  • StaffML:面试题库语料库与站点(位于interviews/,其子项目指南见 interviews/CONTRIBUTING.md);
  • Instructors:教学材料、大纲与评分标准;
  • Slides:各章节配套幻灯片;
  • Site:统一落地页、Newsletter 与游戏。

顶层指南还给出了一条关键前置提醒:贡献前请先阅读 CODE_OF_CONDUCT.md;安全问题应走 SECURITY.md,而不要走公开的 issue 跟踪器。

第一步:选择你要贡献的项目

下面的路由表是这份指南的核心,它把"你想做的事"映射到"该去读哪个项目文档":

你想做的事项目应阅读的指南
修错别字、改进章节、新增配图教科书book/docs/CONTRIBUTING.md
新增或修复 TinyTorch 模块 / 测试 / 里程碑TinyTorchtinytorch/CONTRIBUTING.md
改进硬件实验或板卡配方Hardware Kitskits/README.md
新增或修复交互式 Co-LabLabslabs/README.md
贡献 MLSys·im 模型、场景或评分卡MLSys·immlsysim/docs/contributing.qmd
向 MLPerf EDU 基准套件新增工作负载MLPerf EDUmlperf-edu/README.md
编写或修复 StaffML 面试题StaffMLinterviews/CONTRIBUTING.md
改进教学材料、大纲或评分标准Instructorsinstructors/README.md
为某一章更新幻灯片Slidesslides/README.md
修改统一落地页、Newsletter 接线或小游戏Sitesite/README.md

如果拿不准该归哪个项目,可以在 GitHub 的Discussions里发帖求助,维护者会帮你路由。

新手最容易踩的坑(Common Gotchas)

这部分列出了"光读某个子项目 README 看不出来"的隐性约定,每一条都指向权威文档而不是重复叙述:

  1. TinyTorch 的一切都走titoCLI:模块状态、测试、导出、环境健康检查全部经由tito完成——tito --versiontito system healthtito module statustito module test NN。如果pip install -e tinytorch/之后tito不在 PATH 上,请重新激活你的虚拟环境(venv)。
  2. TinyTorch 源码修改需要导出步骤:当你修改tinytorch/src/下的文件时,tinytorch/tinytorch/下的包内副本由tito dev export重新生成(详见tinytorch/CONTRIBUTING.md的 "Module Development" 一节)。tinytorch/tinytorch/*被 gitignore,真正的源是src/——不要直接改包内副本。
  3. Co-Labs 通过 Pyodide / WebAssembly 在浏览器中运行:import 必须与 Pyodide 兼容(没有 wheel 的纯编译包不行),并且每个产生 UI 元素的 Marimo cell 都必须return该元素,数据流才能继续向后路由——这是labs/PROTOCOL.md中的发布不变量 #4,实验室测试套件会强制这两条。
  4. 不要提交大型二进制文件:发布的 PDF、EPUB、播客 MP3 和 JS bundle 会让.git急剧膨胀。根目录的.gitattributes已做配置,未来新增的 EPUB / PDF / MP3 / MP4 / WAV / WASM 会自动落入 Git LFS;生成物(bundle.jscorpus.json、搜索索引)已被 gitignore,应在本地重新生成而不是提交。

    需要提醒的是:在当前这份检出的根目录 .gitattributes 中,已明确注明 "Git LFS is no longer used in this repo",二进制文件直接入库,LFS 规则与正文描述存在差异——提交大文件前请以当前.gitattributes实际内容为准。

  5. 各区域的位置以路由表为准:一览——book/放教科书,tinytorch/放框架,labs/放浏览器实验,kits/放硬件配方,mlsysim/放模拟器,instructors/放教学材料,slides/放章节 deck,interviews/放 StaffML,site/放统一落地页与 Newsletter。

通用规范:适用于所有子项目的六条约定

1. 从dev分支出发,而不是main

main跟踪已发布的线上站点。所有工作先合并进dev,发布时才推进到main

git checkout dev git pull origin dev git checkout -b iss123-short-descriptive-slug

分支名应引用 issue 编号(存在时),例如iss42-fix-figure-captionfeat/tinytorch-conv-module

2. 配置 pre-commit 钩子(每个克隆只做一次)

这个仓库运行约 60 项 pre-commit 检查(BibTeX 校验、figure-div 语法、Markdown 链接检查、EPUB 卫生检查、vault schema 漂移检测等),定义在根目录 .pre-commit-config.yaml 中。它们能拦截掉本会消耗维护者审查轮次的低级问题。每个全新克隆安装一次:

pip install pre-commit pre-commit install

这一条对任何子项目都够用,默认钩子集是根.pre-commit-config.yaml。TinyTorch 额外附带tinytorch/.pre-commit-config.yaml(markdown collapse、CLI 文档检查),需要时手动运行:

cd tinytorch && pre-commit run --config .pre-commit-config.yaml --all-files

部分项目还有自己的环境初始化步骤(可能顺带替你接好 pre-commit):

项目项目专属初始化
教科书./book/binder setup(同时安装 Quarto / Java / epubcheck 检查)
TinyTorchpip install -r tinytorch/requirements.txt && pip install -e tinytorch/
StaffML / vault-clipip install -e interviews/vault-cli/[dev]
MLSys·impip install -e mlsysim/[dev]
MLPerf EDUpip install -e mlperf-edu/[dev]
StaffML 站点cd interviews/staffml && npm install

源码佐证:在 .pre-commit-config.yaml 中,当前检出一共定义了 52 个钩子条目,覆盖四类能力:通用卫生(trailing-whitespaceend-of-file-fixercheck-jsoncheck-yamlcheck-merge-conflictcheck-added-large-filesdetect-private-keycheck-case-conflictcodespell)、书籍专用检查(book-check-bibbook-check-internal-linksbook-check-figuresbook-check-imagesbook-check-mathbook-check-notationbook-check-epub等)、格式化工序(mdformatbibtex-tidybook-format-python等)以及跨项目一致性检查(mlsysim-check-registry-gatesvault-schema-driftci-check-workflow-fork-safetyruff)。

3. 显式暂存文件,不要git add .

禁止使用git add .——很容易把无关修改、密钥或构建产物一起提交。应逐个指定路径:

git add book/quarto/contents/vol1/introduction/introduction.qmd git commit -m "Fix caption formatting in introduction (issue #14)"

4. 向dev提交 Pull Request

  • 在 PR 描述中引用 issue 编号(Fixes #123Related to #456);
  • 草稿用[WIP]前缀标题,或使用 GitHub 的 "Draft PR" 模式;
  • 使用 PR 模板——它提出的正是评审者本来也会问的问题;
  • CI 会渲染受影响的子项目(book / tinytorch / staffml 等),请求评审前务必修复任何失败。

源码佐证:仓库的 .github/PULL_REQUEST_TEMPLATE.md 定义了标准 PR 结构:Summary(1–3 句)、Area勾选区(Book / TinyTorch / StaffML / Kits / Infrastructure)、ChangesTesting勾选区(quarto renderpytest tests/tito module test NN、手动验证)与Related IssuesTesting区还内置了"提交即视为同意按项目许可证发布贡献"的声明。与此同时,.github/workflows/ 下按子项目成对出现*-validate-dev.yml*-preview-dev.yml*-publish-live.yml(如book-validate-dev.ymltinytorch-validate-dev.ymlstaffml-validate-dev.ymlmlsysim-pypi-publish.yml),印证了"CI 渲染受影响项目"的说法:dev 分支校验、预览、发布三阶段流水线对每个子项目都是独立可追踪的。

5. 行为准则(Code of Conduct)

提交贡献即表示同意遵守 Contributor Covenant Code of Conduct。问题可通过vj@eecs.harvard.edunkhoshnevis@g.harvard.edu反映。

6. 贡献的许可证

提交 PR 即表示同意将贡献置于项目的许可证之下:内容部分采用 Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International(CC BY-NC-SA 4.0),代码组件按各子项目本地条款双重许可(详见每个子项目自己的LICENSE)。

报告 Bug 与提问:三个入口的取舍

顶层指南给出了三种诉求的明确分流:

  • 发现真 Bug 或具体问题→ 打开 issue,使用与场景匹配的模板。仓库 .github/ISSUE_TEMPLATE/ 下实际存在 8 个模板:bug_report.ymltinytorch_improvement.ymlmlsysim_bug.ymlnew_challenge.ymlinterview_question.ymlstaffml_report.ymlstaffml_contribute.yml以及一个404_joke.yml(另有config.yml控制模板入口),覆盖"书稿、TinyTorch bug、MLSys·im bug、新挑战题、面试题、StaffML 报告/贡献"等场景,与正文"我们有八个模板"的描述吻合。
  • 一般性问题或设计讨论→ 更适合放到Discussions
  • 安全问题→ 走 SECURITY.md,不要开公开 issue。

贡献者致谢:All Contributors 机器人

项目使用 All Contributors 机器人。PR 合并后,维护者(或你在自己的 PR 上)可以评论:

@all-contributors please add @your-username for doc, code, ideas

随后你会被加入 README 中的致谢表。完整的贡献类型列表见book/docs/CONTRIBUTING.md的 "Contribution Types" 一节。仓库根目录的 .all-contributorsrc 以及.github/workflows/下的all-contributors-add.ymlall-contributors-auto-credit.ymlupdate-contributors.yml三个工作流,共同实现了这套自动致谢机制。

纵深参考:子项目指南的完整工作流示例

顶层指南是"路由中枢",真正细化的开发循环在各子项目指南里。以仓库中实际存在的 interviews/CONTRIBUTING.md 为例,可以看到"顶层路由 + 子项目细化"的完整形态:它给出 clone → 安装vault-clipip install -e vault-cli/[dev])→vault build→ 本地 API shim(vault api --db interviews/vault/vault.db --port 8002)→ 启动站点的十分钟上手路径;开 PR 前必须跑vault check --strictpytest vault-cli/tests/vault codegen --check;并定义了 4 条"阻断外部 PR 合并"的红线(provenance 造假、修改 append-only 的id-registry.yaml、同一 PR 混用不同schema_version、未签名的 schema 演进 PR)。这种"顶层路由表 + 子项目纵深文档"的分层结构,正是本仓库贡献体系的设计核心。

小结

一份合格的 MLSysBook 贡献,遵循的就是这条可复现的路径:先读路由表确定落点 → 从dev拉出新分支 → 装上根 pre-commit 钩子(必要时补子项目专属初始化)→ 显式暂存改动 → 用 PR 模板向dev开 PR 并过掉 CI → 合并后由 All Contributors 记录致谢。其中"约 60 项 pre-commit 检查"对应到 .pre-commit-config.yaml 里实际可数的 52 个钩子,"CI 渲染受影响项目"对应到.github/workflows/里按子项目成对存在的 validate / preview / publish 流水线,"八个 issue 模板"对应到 .github/ISSUE_TEMPLATE/ 里真实存在的 8 个 yml 文件。社区正是靠着"有人改一个错别字、报一个好 bug、写一份谨慎的 PR"运转起来的——你的第一份贡献,就从选择一个落点开始。

【免费下载链接】cs249r_bookMachine Learning Systems项目地址: https://gitcode.com/GitHub_Trending/cs/cs249r_book

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 2:47:02

BFGS与Armijo线搜索的MATLAB实现:从数学原理到代码实战

我先说下这个项目给我的感觉吧。做优化算法的人,手上一般都会备着几套经典无约束优化方法的代码,梯度下降、牛顿法这些当然要有,但真正在工程里遇到非凸目标、二阶信息算不出来或者算出来不太靠谱的时候,BFGS几乎是默认的备选方案…

作者头像 李华
网站建设 2026/9/12 2:46:40

uniTerm v1.9:14MB开源终端,30+协议无限制替代MobaXterm

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华