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
-
搜索本地文件,查找包含 bounty 关键字的文件。
find . -name "speed_v_torch" -type f grep -r "test_sum" .github/workflows/ -
查询历史记录,如果没有找到相关内容:
git log -1 --pretty=format:"%cd" -- test/test_speed_v_torch.py -
理解问题:
- 谁导致了它?
- 为什么会发生?
代码分析
主要组件识别
| 问题 | 要查找的内容 |
|---|---|
| 主要入口 | args、张量 |
| 主要输出 | return、结果 |
| 转换过程 | 求和、编译、优化 |
| 维护的状态 | 缓存、计数器 |
| 依赖项 | imports、其他类 |
神秘函数
- 追踪来源:检查
import并搜索定义。 - 职责:弄清它属于哪个类以及它的作用。
- 使用情况:确定是谁创建的、包含什么、谁使用以及在哪里被修改。
设计模式与工厂方法
- 查找带有
from_、create_、build_前缀的方法。 - 识别常见模式(单例、工厂等)。
数据流
- 绘制
inputs → outputs。 - 绘制思维导图,展示张量的流转路径。
配置与测试
- 定位常量和设置(
constants、settings)。 - 查看
test/文件夹中的使用示例。 - 分析
try/except块,以了解错误处理方式。
内部文档
- 用像对 5 岁小孩解释一样的方式说明每段代码。
- 这种练习有助于巩固理解并提升编程逻辑。
使用的工具
- Git 用于版本控制和历史探索。
- PDB(配合 Vim)进行逐步调试:
n、l、p、w、r。 - Find / Grep 用于在文件树中快速搜索。
后续计划
- 分析 tinygrad 中张量的数据流。
- 查看针对 AMD GPU 的 user guide:
kernel-descriptor。
感谢阅读
我会在项目推进过程中持续分享我的发现。