已关闭
[Bug-Report|缺陷反馈]: 默认 workspace 扩容无上限,可能导致 device 内存耗尽 #229
yuyuanfeng创建于 6月29日关闭于 7月7日
6月29日 添加了label:bug-report
6月29日 将 wangzitao_leo 设为负责人
wangzitao
6月29日 评论:
6月29日 评论:
您好,感觉反馈,正在确认和修改中。


6月29日 关联了pull request:fix(workspace): 改用临时分配策略替代永久翻倍扩容 #229
7月7日 关闭了 issue
7月7日 添加了label:resolved
7月17日 关联了pull request:fix(gemm): 修复编译错误、精度验证、BLAS标准对齐及代码规范问题
Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
Describe the current behavior / 问题描述 (Mandatory / 必填)
aclblasCreate自动分配 4 MiB 默认 workspace。不足时ensureDefaultWorkspace(aclblas_auxiliary.cpp:70)执行max(requiredSize, currentSize * 2)扩容。扩容策略没有最大值限制,大矩阵场景下持续膨胀可能耗尽 device 内存。此外扩容过程无日志输出,问题发生时难以定位。关键代码:
// blas/common/helper/aclblas_auxiliary.cpp:89 const size_t newSize = std::max(requiredSize, h->default_workspace_size * 2); freeDefaultWorkspace(h); return allocateDefaultWorkspace(h, newSize); // 无上限检查,requiredSize 来自算子 tiling 计算(如 n * sizeof(float))Environment / 环境信息 (Mandatory / 必填)
平台:Ascend 950 (arch35)
算子:ops-blas
f84d643Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)
aclblasCreate创建 handle(自动分配 4 MiB)Describe the expected behavior / 预期结果 (Mandatory / 必填)
建议对 workspace 总大小设置上限,超限时明确报错;扩容时输出 WARN 级别日志便于定位。
Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
扩容过程无日志输出(即缺陷本身),以下为扩容路径代码:
// blas/common/helper/aclblas_auxiliary.cpp:70-92 aclblasStatus_t ensureDefaultWorkspace(_aclblas_handle* h, size_t requiredSize) { if (h == nullptr) { return ACLBLAS_STATUS_HANDLE_IS_NULLPTR; } if (h->use_user_workspace) { return ACLBLAS_STATUS_SUCCESS; } if (requiredSize <= h->default_workspace_size) { return ACLBLAS_STATUS_SUCCESS; // 够用,静默返回 } if (h->stream != nullptr) { const aclError aclRet = aclrtSynchronizeStream(h->stream); if (aclRet != ACL_SUCCESS) { return ACLBLAS_STATUS_EXECUTION_FAILED; } } // 扩容,无上限保护,无日志输出 const size_t newSize = std::max(requiredSize, h->default_workspace_size * 2); freeDefaultWorkspace(h); return allocateDefaultWorkspace(h, newSize); }Special notes for this issue/备注 (Optional / 选填)
扩容只在默认 workspace 不足时发生,大部分算子 4 MiB 足够,仅大规模矩阵场景触发。