原理:aclrtSetDeviceResLimit设置后,aclnn算子在捕获阶段可以获取设置后的可用核数量信息,从而决策出下发的任务的block数量。 算子block数量会被记录在ACL Graph任务信息中。
后续replay时ACL Graph会用已捕获的参数执行。
结合你的问题,aclrtSetDeviceResLimit在捕获前设置是会对ACL Graph产生影响。捕获后再设置就不生效


vllm框架层会对多个batch大小进行捕获,那么意思是只有在第一次捕获前设置aclrtSetDeviceResLimit才会对Graph生效是吗?


vllm框架层会对多个batch大小进行捕获,那么意思是只有在第一次捕获前设置aclrtSetDeviceResLimit才会对Graph生效是吗?
下面的附件是我的测试代码demo,可以参考下,看下是否有问题:
256a841e999b4f51a17f0076cb75aeb5.txt


aclrtSetDeviceResLimit 作用时机
只在 ACL Graph 捕获阶段生效,用于指导算子计算 block 数量,并固化到 Graph 中。
replay 阶段不再生效,以捕获时保存的配置为准。
多 Batch、多次捕获场景(vLLM 适用)
• 不是“只第一次生效”
• 每一个不同 batch 捕获前,都必须重新调用 aclrtSetDeviceResLimit
• 这样每个 Graph 都会携带对应 batch 专属的核数配置,互不影响
正确使用流程
• 对 batch1 → setDeviceResLimit → captureGraph1
• 对 batch2 → setDeviceResLimit → captureGraph2
• 运行时:replay 各自 Graph,使用捕获时的核数配置


aclrtSetDeviceResLimit 作用时机
只在 ACL Graph 捕获阶段生效,用于指导算子计算 block 数量,并固化到 Graph 中。
replay 阶段不再生效,以捕获时保存的配置为准。
多 Batch、多次捕获场景(vLLM 适用)
• 不是“只第一次生效”
• 每一个不同 batch 捕获前,都必须重新调用 aclrtSetDeviceResLimit
• 这样每个 Graph 都会携带对应 batch 专属的核数配置,互不影响
正确使用流程
• 对 batch1 → setDeviceResLimit → captureGraph1
• 对 batch2 → setDeviceResLimit → captureGraph2
• 运行时:replay 各自 Graph,使用捕获时的核数配置
这个特性在CANN 8.3 中也是支持的嘛


@ethan_shenze
如下是8.3 RC1版本资料,是支持的
https://www.hiascend.com/document/detail/zh/canncommercial/83RC1/API/appdevgapi/aclcppdevg_03_1879.html
如果能解决你的问题,本issue将关闭。


@ethan_shenze
如下是8.3 RC1版本资料,是支持的
https://www.hiascend.com/document/detail/zh/canncommercial/83RC1/API/appdevgapi/aclcppdevg_03_1879.html如果能解决你的问题,本issue将关闭。
OK


Welcome to ask questions and discuss with other members.
问题描述
我的问题:单NPU卡环境下,多个不同batch大小的ACL Graph捕获阶段,对于每一个batch大小,每次捕获前设置cube核与vector核数量,然后进行ACL Graph捕获,这种情况下,aclrtSetDeviceResLimit是否会对捕获得到的ACL Graph生效,产生影响???