Leon's Blog

分享一点有趣的技术

0%

初探minitorch

image-20250427110245462

本篇文章主要介绍minitorch项目的module0所需要的基础工具以及一些python知识。

Functional Python

为什么用Functional Python

重点参考Functional tutorial文档。首先我们需要弄清楚为什么使用Functional python。MiniTorch 对外的接口(API)模仿 PyTorch 的标准用法,降低用户学习成本。而在内部,库的核心逻辑采用函数式编程风格,即通过纯函数(无副作用)和组合函数的方式构建计算逻辑。关于函数式编程,可以参考廖雪峰python博客(后续会专门开一个博客内容学习讲解函数式编程,函数是编程是一个很重要且复杂的topic)。函数式编程有如下两个优点:

  1. 更易测试
  2. 更易优化

函数式编程允许如下两件事情:

  1. 将一个函数作为参数传入另一个函数
  2. 将一个函数作为返回值返回

一个简单的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 支持type hints
from typing import Callable, Iterable

# 定义一个函数,返回一个函数,该函数将传入的filter function参数应用到参数数组上
def apply_filter(filter: Callable[[float], bool]) -> Callable[[Iterable[float]], Iterable[float]]:
def func(ls: Iterable[float]):
res = []
for a in ls:
if filter(a):
res.append(a)

return res
return func

def more_than_4(a: float) -> bool:
return a > 4

array = [1, 3, 4, 5, 6, 7]
filter_fn = apply_filter(more_than_4)
print(filter_fn(array))

通过上述例子,来辅助我们的理解。上述例子需要完成一个任务:从一个数组中,挑选出数值大于4的数字并重新组合返回。如果使用传统写法,则针对不同的筛选条件,都要遍历并筛选,之间会有大量逻辑重复。通过使用函数式编程范式,将filter封装成一个函数并传参,可减少重复代码,且有更强的可扩展性。

MiniTorch项目的辅助工具

MiniTorch项目学习起来一个最大的优点,就是其对于测试,coding等规范性均做了详细的要求和工具辅助。blackflake等代码规范性检测工具,PyTest测试框架以及github CI版本管理和测试流程,以上均是本章讲解的重点。

PyTest框架

References

  1. MiniTorch官网
  2. MiniTorch学习参考攻略