-
Notifications
You must be signed in to change notification settings - Fork 5.8k
Closed
Labels
Description
1. 背景
Python 用户在进行数值计算、数据科学、机器学习和深度学习时,拥有广泛的库和框架可供选择。每年都会出现推动这些领域发展的新框架。这些活动和创造力意外地导致了多维数组(或称张量)库的碎片化,而多维数组库正是这些领域中的基础数据结构。选择包括 NumPy、Tensorflow、PyTorch、Dask、JAX、CuPy、MXNet、Xarray 等。
这些库的 API 大体相似,但也有足够多的差异,因此编写适用于多个(或所有)库的代码非常困难。为了解决数组构造和使用方式中的常见问题,此数组 API 标准专门为其指定了相应的 API 接口。
- NumPy 的发展与数组库碎片化
- Python 中第一个用于数值和科学计算的库是 Numeric,开发于 20 世纪 90 年代中期。
- 21 世纪初期,第二个类似的库 Numarray 诞生。
- 2005 年,NumPy 问世,取代了 Numeric 和 Numarray,解决了当时的碎片化问题。
- 大约十年来,NumPy 是唯一广泛使用的数组库。
- 新库涌现与碎片化加剧
- 在过去的 5 年里,主要是由于新硬件的出现和深度学习的兴起,出现了许多其他库,导致碎片化更加严重。
- 新库中的概念和 API 经常受到旧库的启发(或复制自旧库),然后进行更改或改进以满足新的需求和用例。
- 各个库的作者讨论了各种想法,然而,在此数组API标准出现之前,从未有过认真的尝试来协调所有库,以避免碎片化,并达成一个通用的API标准。
- 数组API标准的起源与发展
- 这个数组API标准的想法,是在2019至2020年期间,通过维护人员之间的多次深入对话,逐渐酝酿并形成的。
- 很快我们就发现,当前碎片化的现状无法通过编写新的“参考库”来有效解决,这与2005年的情况大相径庭,现在有太多不同的用例和太多的利益相关者,而且创新速度太快了。
- 2020 年 5 月,Python 数据 API 标准联盟召集了一组初始维护人员,开始起草数组 API 的规范,该规范可以被每个现有的数组和张量库采用。
- 最终产生了描述该 API 的文档。
通过标准化 Paddle Tensor 的功能及行为(即确保遵循统一的 Tensor 接口规范),可以有效解决这一问题,这也是 pytorch、tensorflow、jax 在当前开发进程中已经遵守的开发规范:Python array API standard v2023.12。
1. 涉及范围
- 函数、方法、类和其他对象的名称。
- 函数签名,包括类型注释。
- 函数和方法的语义。即预期输出包括数值结果的精度和数据类型。
- 存在nan's、inf's、空数组(即包括一个或多个大小为 的维度的数组0)的语义。
- 选角规则、广播、索引
- 数据交换。即用于将一种数组类型转换为另一种类型的协议,可能共享内存。
- 设备支持。
2. 设计目标
- 使使用数组的库可以开始使用多种类型的数组作为输入。
- 实现在 API 标准的核心功能之上构建的代码的更多共享和重用。
- 对于新数组库的作者,提供一个可以按原样采用的具体 API,而不是每个作者必须决定从哪里借用什么以及在何处偏离。
- 当用户从一个数组库切换到另一个数组库时,减少用户的学习曲线。
3. 任务列表
序号 | 难度 | 任务标题 | 备注 | 队伍名称/状态/PR |
---|---|---|---|---|
1 | ⭐⭐ | 新增 Tensor.mT(作为参考,#68833) | 复用已有接口 Tensor.transpose | @HydrogenSulfate |
2 | ⭐ | 新增 Tensor.__rfloordiv__ | 复用已有接口 Tensor.__floordiv__ | @enkilee |
3 | ⭐ | 新增 Tensor.__rmod__ | 复用已有接口 Tensor.__mod__ | @PolaKuma @SCUcookie |
4 | ⭐ | 新增 Tensor.__rmatmul__ | 复用已有接口 Tensor.__matmul__ | @jincheng23 @LittleHeroZZZX |
5 | ⭐ | 新增 Tensor.__rand__ | 复用已有接口 Tensor.__and__ | @SCUcookie |
6 | ⭐ | 新增 Tensor.__ror__ | 复用已有接口 Tensor.__or__ | @mori0umi @wwwuyan @ZHOU05030 @yangrongxinuser @jincheng23 |
7 | ⭐ | 新增 Tensor.__rxor__ | 复用已有接口 Tensor.__xor__ | @yangrongxinuser |
8 | ⭐ | 新增 Tensor.__rlshift__ | 复用已有接口 Tensor.__lshift__ | @MrXnneHang |
9 | ⭐ | 新增 Tensor.__rrshift__ | 复用已有接口 Tensor.__rshift__ | @MrXnneHang |
10 | ⭐⭐ | 新增 Tensor.__complex__ | 新特性,难度中等 | @NKNaN |
11 | ⭐⭐ | Tensor.__dlpack__ | 新特性,复用 paddle.utils.dlpack.to_dlpack 组合实现 | @SCUcookie |
12 | ⭐⭐⭐ | 新增 Tensor.__dlpack_device__ | 新特性,但是接口实现不难 | @ZHOU05030 |
13 | ⭐ | 新增 Tensor.__pos__ | 直接返回 Tensor 本身即可 | @MrXnneHang |
14 | ⭐ | 新增 Tensor.__lshift__ | 复用paddle.tensor.math.bitwise_left_shift |
@MrXnneHang |
15 | ⭐ | 新增 Tensor.__rshift__ | 复用paddle.tensor.math.bitwise_right_shift |
@MrXnneHang |
16 | ⭐ | 新增 paddle.e | 复用 math.e | @ndyysheep |
17 | ⭐ | 新增 paddle.inf | 复用 math.inf | @Sylence8 @kineast @jincheng23 |
18 | ⭐ | 新增 paddle.nan | 复用 math.nan | @kineast |
19 | ⭐ | 新增 paddle.pi | 复用 math.pi | @wwwuyan |
20 | ⭐ | 新增 paddle.newaxis | 复用 None | @Sylence8 |
21 | ⭐ | 新增 paddle.bitwise_invert Tensor.bitwise_invert |
复用已有接口 Tenosr.__invert__ | @MrXnneHang |
22 | ⭐⭐ | 新增 paddle.less Tensor.less |
新增一个 padlde.less_than/Tensor.less_than 的别名即可 | @MrXnneHang |
23 | ⭐⭐⭐⭐⭐⭐⭐⭐ | 新增 TensorA[mask] = TensorB | 新特性,需要更改 __setitem__ 的 C++ 实现,添加当 index 是布尔类型,且右侧的输入是 Tensor 时的计算逻辑 |
@LittleHeroZZZX |
24 | ⭐⭐ | 新增 paddle.matrix_transpose 新增 paddle.linalg.matrix_transpose |
复用 paddle.transpose | @PolaKuma |
25 | ⭐⭐ | 新增 paddle.vecdot paddle.linalg.vecdot |
复用 paddle.linalg.dot 即可 | @mori0umi @yangrongxinuser @PolaKuma |
26 | ⭐⭐⭐⭐⭐⭐⭐⭐ | 新增 paddle.linalg.svdvals | 新特性,需要写 C++ Kernel 实现 svdvals 并绑定到 python 上 | @aquagull |
27 | ⭐⭐⭐⭐⭐⭐ | 新增 paddle.to_tensor 针对实现了 __cuda_array_interface__ 接口的数组对象(如torch.Tensor)进行适配 |
新特性,需要写 C++ pybind 函数,并绑定到 python 上 | @jincheng23 @aquagull @ZHOU05030 |
28 | ⭐ | 新增 paddle.from_dlpack | paddle.utils.dlpack.from_dlpack 别名 | @PolaKuma @GENES-XY |
29 | ⭐ | 新增 paddle.to_dlpack | paddle.utils.dlpack.to_dlpack 别名 | @PolaKuma @GENES-XY |
4. 认领方式
请大家以 comment 的形式认领任务,如:
【报名】:1、3、12-13
多个任务之间需要使用中文顿号分隔,报名多个连续任务可用横线表示,如 2-5
PR 提交格式:在 PR 的标题中以 【Paddle Tensor No.】 开头,注明任务编号
看板信息
任务方向 | 任务数量 | 提交作品 / 任务认领 | 提交率 | 完成 | 完成率 |
---|---|---|---|---|---|
Paddle Tensor 规范化 | 29 | 28 / 29 | 96.55% | 28 | 96.55% |
统计信息
排名不分先后 @enkilee (1) @PolaKuma (5) @LittleHeroZZZX (2) @SCUcookie (2) @ZHOU05030 (2) @yangrongxinuser (1) @MrXnneHang (7) @NKNaN (1) @ndyysheep (1) @Sylence8 (2) @kineast (1) @wwwuyan (1) @aquagull (2)
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Done