Open Source... 我们是如何走到这里的?

发布: (2026年2月3日 GMT+8 04:45)
4 min read
原文: Dev.to

Source: Dev.to

介绍

在 GitHub 的 Octoberfest 黑客马拉松中,开源项目吸引了我的注意,因为 bounties 是有报酬的。我下载了仓库,几个月后便开始着手开发。

该项目有一个 Discord 频道,每天都会发布与项目相关的所有信息,大家可以在这里交流进展或想法;这就像在一个开发机器学习框架或库的团队中工作。

阅读文档时,我发现与我的本地仓库相比,缺少了一些重要文件,这些文件涉及 tinygrad 如何将张量转换为机器码(GPU kernel)。

更新仓库

# 查看 master 分支的最新提交或最近的提交
git log -1 origin/master --format="%h%n%an%n%ad%n%s" --date=iso

# 保存本地更改
git stash save "这里的消息"

# 下载更改(fetch 或 pull)并合并
git fetch origin master   # 或 git pull origin master
git merge master

# 应用保存的更改
git stash apply stash@{#}

选择一个 bounty

  1. 搜索本地文件,查找包含 bounty 关键字的文件。

    find . -name "speed_v_torch" -type f
    grep -r "test_sum" .github/workflows/
  2. 查询历史记录,如果没有找到相关内容:

    git log -1 --pretty=format:"%cd" -- test/test_speed_v_torch.py
  3. 理解问题

    • 谁导致了它?
    • 为什么会发生?

代码分析

主要组件识别

问题要查找的内容
主要入口args、张量
主要输出return、结果
转换过程求和、编译、优化
维护的状态缓存、计数器
依赖项imports、其他类

神秘函数

  1. 追踪来源:检查 import 并搜索定义。
  2. 职责:弄清它属于哪个类以及它的作用。
  3. 使用情况:确定是谁创建的、包含什么、谁使用以及在哪里被修改。

设计模式与工厂方法

  • 查找带有 from_create_build_ 前缀的方法。
  • 识别常见模式(单例、工厂等)。

数据流

  • 绘制 inputs → outputs
  • 绘制思维导图,展示张量的流转路径。

配置与测试

  • 定位常量和设置(constantssettings)。
  • 查看 test/ 文件夹中的使用示例。
  • 分析 try/except 块,以了解错误处理方式。

内部文档

  • 用像对 5 岁小孩解释一样的方式说明每段代码。
  • 这种练习有助于巩固理解并提升编程逻辑。

使用的工具

  • Git 用于版本控制和历史探索。
  • PDB(配合 Vim)进行逐步调试:nlpwr
  • Find / Grep 用于在文件树中快速搜索。

后续计划

  • 分析 tinygrad 中张量的数据流
  • 查看针对 AMD GPU 的 user guidekernel-descriptor

感谢阅读

我会在项目推进过程中持续分享我的发现。

Back to Blog

相关文章

阅读更多 »