【MindIE 2.3.0】Qwen2.5-72B W8A8 量化模型在 8 卡 910B 上开启 Dynamic Batching 后偶发 HBM 碎片化 OOM,调整 memory_fragment_reuse 无效,求大佬指点
收藏回复举报
【MindIE 2.3.0】Qwen2.5-72B W8A8 量化模型在 8 卡 910B 上开启 Dynamic Batching 后偶发 HBM 碎片化 OOM,调整 memory_fragment_reuse 无效,求大佬指点
t('forum.solved') 已解决
发表于2026-03-17 21:36:10
0 查看

各位昇腾社区的大佬好,

最近我们在生产环境尝试基于 MindIE 2.3.0 部署 Qwen2.5-72B-Instruct 的 W8A8 量化版本,硬件环境是 Atlas 800 A2 (8x 910B 32G)。在静态 Batch 测试下运行稳定,但在开启服务化动态 Batching(Dynamic Batching)并模拟高并发请求(QPS > 40)约 2 小时后,服务会偶发性崩溃,报错指向 HBM 显存不足,但监控显示此时显存占用率并未达到 100%(约 85% 左右),怀疑是显存碎片化问题。

一、环境信息

  • OS: EulerOS 2.0 SP9 (Kernel 4.19)
  • CANN: 8.0.RC2
  • MindIE: 2.3.0 (2026/01/17 发布版)
  • Model: Qwen2.5-72B-Instruct (Weight-Only Int8 Quantized via MindIE Toolkit)
  • Device: 8x Ascend 910B (HBM 32GB per card)
  • Deployment Mode: DP=8, TP=1 (每卡加载完整模型副本,通过 DP 分发)

二、核心配置文件 (config.json) 关键片段

1{
2  "modelConfig": {
3    "modelWeightPath": "/data/models/qwen2.5-72b-w8a8",
4    "worldSize": 8,
5    "backend": "mindie_llm"
6  },
7  "serviceConfig": {
8    "maxBatchSize": 128,
9    "maxSeqLen": 32768,
10    "dynamicBatching": {
11      "enable": true,
12      "maxWaitTimeMs": 10,
13      "preferredBatchSize": [1, 4, 8, 16, 32]
14    },
15    "memoryOptimization": {
16      "enableMemoryFragmentReuse": true, 
17      "preAllocRatio": 0.95,
18      "swapStrategy": "MB_SWAPPER" 
19    }
20  }
21}

三、报错日志摘要
崩溃时的 mindie_service.log 关键报错如下:

1[ERROR][2026-03-17 14:22:05.891][ProcessId:18492][Tid:140233...] MemoryAllocator::AllocateContinuous failed. 
2Requested size: 2097152 bytes, Available largest block: 1048576 bytes. 
3Total Free Memory: 4294967296 bytes, Fragmentation Ratio: 0.68
4[CRITICAL][2026-03-17 14:22:05.892] Engine execution failed due to HBM allocation error. 
5Error Code: ACL_ERROR_GE_MEMORY_ALLOCATION (50302)
6Context: KV Cache expansion during prefill phase for batch_size=48, seq_len=12000.

随后进程退出,状态码 139 (SIGSEGV)。

四、已尝试的排查与优化手段(均无效)

  1. 调整预分配比例:将 preAllocRatio 从默认的 0.9 调至 0.95 甚至 0.98,虽然延长了崩溃出现的时间,但无法根除,且冷启动时间显著增加。
  2. 开启内存碎片整理:配置中已显式开启 enableMemoryFragmentReuse: true,但日志显示 Fragmentation Ratio 依然飙升至 0.68,似乎该策略在长序列(>10k)动态变化时生效不明显。
  3. 关闭 MB Swapper:尝试关闭 MIES_USE_MB_SWAPPER 环境变量,强制使用物理 HBM,结果崩溃更快,确认瓶颈确实在物理显存碎片而非 Swap 交换速度。
  4. 调整 Batching 策略:将 preferredBatchSize 改为固定值或缩小 maxWaitTimeMs,减少 Batch 合并的频率,但这直接导致吞吐量(Throughput)下降了 40%,不符合 SLA 要求。
  5. 算子编译选项:重新编译自定义算子,尝试开启 MATMUL_ND_NZ_ENABLE=0(参考了社区关于 Qwen2_VL 的某些讨论),对本场景无明显改善。

五、求助点
目前的现象非常像是 KV Cache 在动态扩容过程中产生了大量无法复用的微小碎片

  1. 在 MindIE 2.3.0 版本中,针对长序列动态 Batching 场景,是否有更激进的 PagedAttention 相关配置参数可以调整?(目前文档中关于 blockSize 或 gpuMemoryUtilization 的描述较少)。

我要发帖子