[MS-2.7.1][sglang-v0.5]PagedAttention算子报错,异常场景下dump定位

1. 问题描述

关键词:推理服务,算子报错,异常dump

1.1 现象

服务化启动后跑gsm8k数据集到一定数量后,出现PagedAttention算子报错,如下,显示访问越界,基本稳定复现

1.2 软件版本

mindspore-2.7.1
sglang-v0.5

2. 定位问题与根因分析

2.1 定位工具与方法

框架提供了算子异常时捕获其输入的方法,参考文档:mindspore dump功能参考文档
分析输入,是否有存在越界访问情况,特别是block_tables中是否有值超了kv_cache页最大值

2.2 定位步骤与过程

2.2.1 dump异常算子输入

准备好dump.json文件

{
    "common_dump_settings": {
        "op_debug_mode": 4, 
        "dump_mode": 0,
        "path": "/home/xxx/sgl/dump_err",
        "net_name": "ResNet50",
        "iteration": "all",
        "saved_data": "tensor",
        "input_output": 0,
        "kernels": ["PagedAttention"],
        "support_device": [0,1,2,3,4,5,6,7],
        "statistic_category": ["max", "min", "l2norm"]
    },
    "e2e_dump_settings": {
         "enable": true,
         "trans_flag": true
    }
}

运行前设置环境变量

export  MINDSPORE_DUMP_CONFIG=dump.json

2.2.2 分析输入

比较大的tensor可以先查看shape,小的直接查看值,分析了常出现异常导致算子执行报错,即block_tables中有值超了最大kvcache存储的页数

key_cache shape: (65, 128, 1, 576) # (page_num, page_size, kv_head_num, kv_head_len)
block_tables: array([799, 0, 4, 6, 5, 8], dtype=int32) #存的是kv_cache具体页数

其中799超过了最大页数65

3. 问题解决

最后调整服务框架构造的block_tables,并进行越界检查

异常dump功能,适用于算子报错场景时的快速定位。

异常dump功能开启,需要把"op_debug_mode"设置为4,此模式下"kernels"中的配置不生效。