已关闭
[Bug-Report|缺陷反馈]: 默认 workspace 扩容无上限,可能导致 device 内存耗尽 #229
yuyuanfeng创建于  6月29日关闭于  7月7日
yuyuanfeng
yuyuanfeng成员
6月29日 创建

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。不足时 ensureDefaultWorkspaceaclblas_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 f84d643

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

  1. aclblasCreate 创建 handle(自动分配 4 MiB)
  2. 调用大矩阵算子触发扩容
  3. workspace 持续上涨,没有上限保护

Describe the expected behavior / 预期结果 (Mandatory / 必填)

建议对 workspace 总大小设置上限,超限时明确报错;扩容时输出 WARN 级别日志便于定位。

扩容过程无日志输出(即缺陷本身),以下为扩容路径代码:

// 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 足够,仅大规模矩阵场景触发。

likedislike
yuyuanfengyuyuanfeng成员
6月29日 添加了label:bug-report
wangzitaowangzitao成员
6月29日 将 wangzitao_leo 设为负责人
wangzitao
wangzitao成员
6月29日 评论:

您好,感觉反馈,正在确认和修改中。

likedislike
wangzitaowangzitao成员
6月29日 关联了pull request:fix(workspace): 改用临时分配策略替代永久翻倍扩容 #229
CANN-robotCANN-robot成员
7月7日 关闭了 issue
CANN-robotCANN-robot成员
7月7日 添加了label:resolved
luotianhangluotianhang成员
7月17日 关联了pull request:fix(gemm): 修复编译错误、精度验证、BLAS标准对齐及代码规范问题