Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【快乐开源】Paddle Tensor 规范化 #69082

Closed
HydrogenSulfate opened this issue Oct 31, 2024 · 47 comments
Closed

【快乐开源】Paddle Tensor 规范化 #69082

HydrogenSulfate opened this issue Oct 31, 2024 · 47 comments
Assignees
Labels
status/close 已关闭 type/feature-request 新需求申请

Comments

@HydrogenSulfate
Copy link
Contributor

HydrogenSulfate commented Oct 31, 2024

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)的语义。
  • 选角规则、广播、索引
  • 数据交换。即用于将一种数组类型转换为另一种类型的协议,可能共享内存。
  • 设备支持。

image

2. 设计目标

  • 使使用数组的库可以开始使用多种类型的数组作为输入。
  • 实现在 API 标准的核心功能之上构建的代码的更多共享和重用。
  • 对于新数组库的作者,提供一个可以按原样采用的具体 API,而不是每个作者必须决定从哪里借用什么以及在何处偏离。
  • 当用户从一个数组库切换到另一个数组库时,减少用户的学习曲线。

3. 任务列表

序号 难度 任务标题 备注 队伍名称/状态/PR
1 ⭐⭐ 新增 Tensor.mT(作为参考,#68833) 复用已有接口 Tensor.transpose @HydrogenSulfate
2 新增 Tensor.__rfloordiv__ 复用已有接口 Tensor.__floordiv__ @enkilee #69222
3 新增 Tensor.__rmod__ 复用已有接口 Tensor.__mod__ @PolaKuma #69231
@SCUcookie #69689 #69781
4 新增 Tensor.__rmatmul__ 复用已有接口 Tensor.__matmul__ @jincheng23
@LittleHeroZZZX #69406
5 新增 Tensor.__rand__ 复用已有接口 Tensor.__and__ @SCUcookie #69473
6 新增 Tensor.__ror__ 复用已有接口 Tensor.__or__ @mori0umi #69481 #69508
@wwwuyan
@ZHOU05030 #69463
@yangrongxinuser #69469
@jincheng23 #69488
7 新增 Tensor.__rxor__ 复用已有接口 Tensor.__xor__ @yangrongxinuser #69466 #69748 #69779
8 新增 Tensor.__rlshift__ 复用已有接口 Tensor.__lshift__ @MrXnneHang #69348
9 新增 Tensor.__rrshift__ 复用已有接口 Tensor.__rshift__ @MrXnneHang #69348
10 ⭐⭐ 新增 Tensor.__complex__ 新特性,难度中等 @NKNaN #69257
11 ⭐⭐ Tensor.__dlpack__ 新特性,复用 paddle.utils.dlpack.to_dlpack 组合实现 @SCUcookie #69781
12 ⭐⭐⭐ 新增 Tensor.__dlpack_device__ 新特性,但是接口实现不难 @ZHOU05030 #69566 #69632
13 新增 Tensor.__pos__ 直接返回 Tensor 本身即可 @MrXnneHang #69256 #6972
14 新增 Tensor.__lshift__ 复用paddle.tensor.math.bitwise_left_shift @MrXnneHang #69348
15 新增 Tensor.__rshift__ 复用paddle.tensor.math.bitwise_right_shift @MrXnneHang #69348
16 新增 paddle.e 复用 math.e @ndyysheep #69470 #69531 #69667
17 新增 paddle.inf 复用 math.inf @Sylence8 #69464
@kineast #69502 #69542
@jincheng23
18 新增 paddle.nan 复用 math.nan @kineast #69502 #69542
19 新增 paddle.pi 复用 math.pi @wwwuyan #69499 #69548 #69613
20 新增 paddle.newaxis 复用 None @Sylence8 #69464
21 新增 paddle.bitwise_invert
Tensor.bitwise_invert
复用已有接口 Tenosr.__invert__ @MrXnneHang #69197 #6932
22 ⭐⭐ 新增 paddle.less
Tensor.less
新增一个 padlde.less_than/Tensor.less_than 的别名即可 @MrXnneHang #69270 #6972 #6989
23 ⭐⭐⭐⭐⭐⭐⭐⭐ 新增 TensorA[mask] = TensorB 新特性,需要更改 __setitem__的 C++ 实现,添加当 index 是布尔类型,且右侧的输入是 Tensor 时的计算逻辑 @LittleHeroZZZX #69480 #69534
24 ⭐⭐ 新增 paddle.matrix_transpose
新增 paddle.linalg.matrix_transpose
复用 paddle.transpose @PolaKuma #69301 #6970 #6995 #69982
25 ⭐⭐ 新增 paddle.vecdot
paddle.linalg.vecdot
复用 paddle.linalg.dot 即可 @mori0umi
@yangrongxinuser
@PolaKuma #69477
26 ⭐⭐⭐⭐⭐⭐⭐⭐ 新增 paddle.linalg.svdvals 新特性,需要写 C++ Kernel 实现 svdvals 并绑定到 python 上 @aquagull #69528 #69796 #69820 #7001
27 ⭐⭐⭐⭐⭐⭐ 新增 paddle.to_tensor
针对实现了__cuda_array_interface__接口的数组对象(如torch.Tensor)进行适配
新特性,需要写 C++ pybind 函数,并绑定到 python 上 @jincheng23
@aquagull #69913
@ZHOU05030
28 新增 paddle.from_dlpack paddle.utils.dlpack.from_dlpack 别名 @PolaKuma #69361
@GENES-XY
29 新增 paddle.to_dlpack paddle.utils.dlpack.to_dlpack 别名 @PolaKuma #69361
@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)

@MrXnneHang
Copy link
Contributor

我发现No.3和No.5似乎重复了?

@HydrogenSulfate
Copy link
Contributor Author

HydrogenSulfate commented Nov 7, 2024

我发现No.3和No.5似乎重复了?

好像是的,我把No.3先划掉了,感谢指出错误

@enkilee
Copy link
Contributor

enkilee commented Nov 7, 2024

【报名】:2

@PolaKuma
Copy link
Contributor

PolaKuma commented Nov 7, 2024

【报名】:3

@MrXnneHang
Copy link
Contributor

【报名】:13

@SigureMo
Copy link
Member

SigureMo commented Nov 8, 2024

@HydrogenSulfate 14、15 是不是可以复用 paddle.bitwise_left_shiftpaddle.bitwise_right_shift

@HydrogenSulfate
Copy link
Contributor Author

HydrogenSulfate commented Nov 8, 2024

@HydrogenSulfate 14、15 是不是可以复用 paddle.bitwise_left_shiftpaddle.bitwise_right_shift

根据文档好像是的,这两个函数等价,跟alias差不多,https://data-apis.org/array-api/latest/API_specification/generated/array_api.array.__lshift__.html

@HydrogenSulfate
Copy link
Contributor Author

@HydrogenSulfate 14、15 是不是可以复用 paddle.bitwise_left_shiftpaddle.bitwise_right_shift

已修改,感谢~

@NKNaN
Copy link
Contributor

NKNaN commented Nov 8, 2024

【报名】:10

@PolaKuma
Copy link
Contributor

PolaKuma commented Nov 9, 2024

【报名】:24

@PolaKuma
Copy link
Contributor

【报名】:28-29

@SCUcookie
Copy link
Contributor

【报名】:5

@wwwuyan
Copy link
Contributor

wwwuyan commented Nov 13, 2024

【报名】:19

@wwwuyan
Copy link
Contributor

wwwuyan commented Nov 13, 2024

请问6的备注是复用Tensor.__or__吗?

@SCUcookie
Copy link
Contributor

【报名】:11

@kineast
Copy link
Contributor

kineast commented Nov 13, 2024

【报名】:17

@HydrogenSulfate
Copy link
Contributor Author

HydrogenSulfate commented Nov 14, 2024

请问6的备注是复用Tensor.__or__吗?

对,不小心多打了一个r,已修改

@LittleHeroZZZX
Copy link
Contributor

【报名】:4

@ZHOU05030
Copy link
Contributor

【报名】:12

@HydrogenSulfate
Copy link
Contributor Author

【报名】:1

第一题是示例 🤣

@aquagull
Copy link
Contributor

第一题是示例 🤣

😢😢🤣

@LittleHeroZZZX
Copy link
Contributor

【报名】:23

@aquagull
Copy link
Contributor

【报名】:26

@LittleHeroZZZX
Copy link
Contributor

LittleHeroZZZX commented Nov 17, 2024

23 题是指要解决类似 #69391 这个 issue 中的情况吗?mask类型为Tensor时?看 test_setitem.py这个文件中只测试了 mask 为 boolean list 而没有 boolean Tensor 的用例。

@ZHOU05030
Copy link
Contributor

【报名】:6

@HydrogenSulfate
Copy link
Contributor Author

23 题是指要解决类似 #69391 这个 issue 中的情况吗?mask类型为Tensor时?看 test_setitem.py这个文件中只测试了 mask 为 boolean list 而没有 boolean Tensor 的用例。

参考代码如下:

import paddle

x = paddle.ones([2, 2])

mask = paddle.to_tensor(
    [
        [True, True],
        [False, True],
    ]
)

y = paddle.to_tensor([1, 2, 3], dtype="float32")

x[mask] = y

print(x)

@GENES-XY
Copy link

【报名】:28、29

@jincheng23
Copy link

【报名】:17

@yangrongxinuser
Copy link
Contributor

【报名】:6

1 similar comment
@jincheng23
Copy link

【报名】:6

@jincheng23
Copy link

【报名】:27

@aquagull
Copy link
Contributor

【报名】:27

1 similar comment
@ZHOU05030
Copy link
Contributor

【报名】:27

@luotao1
Copy link
Contributor

luotao1 commented Dec 9, 2024

【快乐开源】Paddle Tensor 规范化 已全部完成,感谢参与的小伙伴们!

排名不分先后 @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)

欢迎继续参与 快乐开源的其他任务

@luotao1 luotao1 closed this as completed Dec 9, 2024
@github-project-automation github-project-automation bot moved this from In Progress to Done in Call for Contributions Dec 9, 2024
@paddle-bot paddle-bot bot added status/close 已关闭 and removed status/new-issue 新建 labels Dec 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status/close 已关闭 type/feature-request 新需求申请
Projects
Development

No branches or pull requests