已合并
fix: uniform 大 tensor 分块生成降内存(复用 CHUNK_ELEMS=4M,与单次全量逐位相同) #213
dengguojie创建于 9 天前
fix: uniform 大 tensor 分块生成降内存(复用 CHUNK_ELEMS=4M,与单次全量逐位相同) #213
已合并
dengguojie创建于 9 天前
dengguojie成员
9 天前

当前PR是否有AI参与:

[x] 是
__1. AI Agent 平台: OpenCode
__2. AI 模型: GLM
__3. Prompt上下文 :

PR功能描述 / 为什么需要这个合入**:

fix: uniform 大 tensor 分块生成降内存(复用 CHUNK_ELEMS=4M,与单次全量逐位相同)

numpy.random.uniform 单次全量生成恒产 float64 中间数组(8B/元素)+ astype
副本,大 shape 下峰值 ~12B/元素(fp32)。

改为分块直写预分配 typed 缓冲(复用 normal 的 CHUNK_ELEMS=4M):
- 177M 元素 fp32 峰值:2032MB -> 747MB(约 12B/元素 -> 4.4B/元素)
- e8m0 分支的同款单次全量 uniform 一并替换(data.py:81,修掉无 copy=False
  的多余拷贝)
- 输出与单次全量 uniform(...).astype(dtype) 逐位相同(uniform 逐元素消费
  RandomState 流:low + (high-low)*next_double,每元素固定 2xuint32,
  固定 seed 下完全可复现)
- fp16/bf16 >10M 的 torch 快路径、_gen_exponential_data、float64 分支不受影响
- 测试覆盖:8 dtype 位等价(含非 4M 对齐尾块 1/CHUNK-1、整除 3xCHUNK、
  多维 shape)、分块路径 spy 防退化、generate 入口 dtype 保持

该PR关联的issue

(格式为fixes #<issue号>, 或者resolves #<issue号>): fixes #

希望检视人员了解:

测试

文档更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 dengguojie 的贡献)
Ddengguojie成员
9 天前 创建了 pull request,commit 140ac593
atomgit-bot
atomgit-bot
9 天前 评论:

变更摘要

本 PR 针对 numpy.random.uniform 大 tensor 生成时的内存峰值问题做性能优化:原先单次全量生成会产生 float64 中间数组(8B/元素)及 astype 副本,大 shape 下峰值约 12B/元素(fp32)。改动在 ttk/utilities/data.pyRandomData 中新增静态方法 _gen_uniform_data,复用 CHUNK_ELEMS=4M 分块直写预分配 typed 缓冲,并将 _random 的 uniform 分支与 float8 e8m0 分支统一改走该路径;因 uniform 逐元素消费 RandomState 流,分块输出与单次全量 uniform(...).astype(dtype) 逐位相同(固定 seed 可复现)。实测 177M 元素 fp32 峰值内存由 2032MB 降至 747MB(约 12B/元素 -> 4.4B/元素),同时修掉了 e8m0 分支缺失 copy=False 的多余拷贝。

主要改动

  • 新增 _gen_uniform_data 静态方法:按 CHUNK_ELEMS 分块向预分配缓冲写入 numpy.random.uniform 结果,避免 float64 中间数组与 astype 副本;elem_count <= 2 * CHUNK_ELEMS 时保持原单次全量路径(astype(dtype, copy=False)),行为与改动前一致。
  • _random 的 uniform 分支接入分块路径:将 array = numpy.random.uniform(low, high, shape).astype(dtype, copy=False) 替换为 array = self._gen_uniform_data(low, high, dtype, shape),使 uniform 分布生成复用分块直写逻辑;fp16/bf16 的 torch 快路径与 float64 分支不受影响。
  • float8 e8m0 分支同步替换:将 f32 = numpy.random.uniform(low, high, self._shape).astype("float32") 改为 self._gen_uniform_data(low, high, "float32", self._shape),顺带消除原先无 copy=False 带来的多余拷贝。
  • 新增 uniform 分块测试覆盖tests/utilities/test_data.py 增加 8 种 dtype(float16/bfloat16/float32/float64/int32/int64/uint8/bool)的逐位等价测试、非 4M 对齐尾块(1CHUNK-1)与整除(3*CHUNK)边界、多维 shape、小 tensor 保持单次路径、通过 spy 校验大 tensor 真实走分块(uniform 调用次数 >= 2)以及 generate 入口 dtype 保持。
likedislike
不准确?
atomgit-bot
atomgit-bot
9 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
9 天前 添加了label:ai-co-authored
CANN-robotCANN-robot成员
9 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
9 天前 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/ops-test-kit 周奇龙, 王瑞 (2/2) 周奇龙, 王瑞 (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

dengguojie, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robotCANN-robot成员
9 天前 将zhou-qilong,wangrui_,rxtfeng,loov1,chenqi317,fullt,llimwang,gubaocheng,liujun2025,OpSphere设为评审人
CANN-robotCANN-robot成员
9 天前 将zhou-qilong,wangrui_,rxtfeng,loov1,chenqi317,fullt,llimwang,gubaocheng,liujun2025,OpSphere设为审查人
dengguojie成员
9 天前 评论:

/compile

likedislike
Ddengguojie成员
9 天前 update merge request[project id: 9872633, iid: 213, commit_id: 612334f2a73a51cb7f79a04c6a5add92991719fd] virtual merging success
CANN-robot
CANN-robot成员
9 天前 评论:
🚀 CI 流水线已启动
📋 执行详情: 点击查看流水线
likedislike
CANN-robotCANN-robot成员
9 天前 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
9 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
9 天前 添加了label:ci-pipeline-passed
sunday成员
9 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
9 天前 添加了label:approved
RuiWang_成员
8 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
8 天前 添加了label:lgtm
CANN-robotCANN-robot成员
8 天前 合入了pull request