FAQ
类别 |
问题 |
解答 |
---|---|---|
模型调测 |
如何开启加速库的强制同步来定位报错? |
export ATB_STREAM_SYNC_EVERY_KERNEL_ENABLE=1 export ATB_STREAM_SYNC_EVERY_RUNNER_ENABLE=1 export ATB_STREAM_SYNC_EVERY_OPERATION_ENABLE=1 开启环境变量后,运行模型推理,根据加速库日志中的第一个error进一步定位。 |
当出现undefinedsymbols: xxx 这样的报错怎么定位? |
需要确认mindiellm 和atb,CANN,torch, torch_npu是否匹配,abi=0/1的选择上是否正确 。 |
|
精度调测 |
为什么跑精度数据集的时候,最后的精度结果有浮动? |
1.将模型后处理部分从sampling 改为greedy 后,可以基本保证输出文本的稳定性。 2.由于确定性计算的问题,输出可能存在略微差异 。 |
LLM推理结果存在乱码。 |
检查tokenizer在token转id时,是否使用了正确的模型路径 。 |
|
精度:确定性计算 |
什么是确定性计算? |
确定性计算,是指在输入数据集等输入条件不变时,多次运行推理应用,输出结果每次保持一致。 |
为什么相同输入送入MindIE Server推理,输出存在一定的不确定性? |
调度框架代码(block查询模式下)是可以保证确定性的,但是在cpu负载等环境因素的影响下,可能会对请求到达时间产生影响,最终影响调度的确定性。例如,客户外部服务查询引擎后得知可以提交10个请求,第一次运行时,10个请求快速达到并组成batch;但第二次运行时,受环境影响部分请求到达较晚,仅有5个请求组成了batch;那么两次运行的结果就会产生差异。 |
|
为什么相同输入,组batch顺序不同,送入LLM模型推理输出不同? |
1.由于matmul算子在不同行上的累加顺序不完全相同,加之浮点精度没有加法交换律的特性,导致不同行上即使输入完全相同,计算结果也会存在一定的误差。 2.可以通过设置环境变量export ATB_MATMUL_SHUFFLE_K_ENABLE=0将加速库Matmul的shuffle k功能关闭,关闭之后可以保证所有行上算子累加顺序一致,但matmul性能会下降10%左右 。 |
|
在昇腾上进行LLM推理,如何保证确定性计算? |
1.模型层面: (1)通信算子: export LCCL_DETERMINISTIC=1 export HCCL_DETERMINISTIC=true (2)MatMul: export ATB_MATMUL_SHUFFLE_K_ENABLE=0 2.推理引擎: (1)MindIE:基于block进行新request的获取。 (2)TGI:暂不支持。 |
|
性能优化 |
常见的LLM推理性能优化手段都有哪些? |
算子融合、量化、Tensor并行、ContinuousBatching等。 |