昇腾社区首页
中文
注册

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等。