A
Member
最近把一个 70B 级别的推理服务迁到国产芯片上跑了一遍,记录几个关键步骤。
第一步,版本对齐。驱动、固件、算子库、框架插件四个版本号必须按官方兼容矩阵来,差一个小版本都可能遇到算子缺失。先跑官方的 smoke test,确认环境没问题再往下走。
第二步,模型适配先查算子支持清单。把模型用到的算子导出来,逐个对照支持矩阵。不支持的算子有两种解法:找等价替换,或者切回 CPU 跑(性能会掉,但能保证功能先跑通)。我们这次有两个自定义算子,最后是手写替换的。
第三步,精度对齐。先 FP16 跑通,和 GPU 结果逐层对比 tensor 差异,diff 超过 1e-3 的层重点查。量化放到精度对齐之后做,INT8 的校准集要用业务真实数据,通用校准集在垂类任务上掉点明显。
第四步,性能调优。batch size、KV cache 分配、量化粒度三个旋钮。我们的实测:batch 从 1 拉到 32,吞吐涨了 20 多倍,但 TPOT 的 P99 也涨了 3 倍,上线前一定要按业务的延迟 SLA 反推 batch 上限。
整体感受:环境搭建占了 40% 的时间,算子适配是最大的不确定性。大家在国产芯片上跑推理,精度对齐这关都怎么做的?
第一步,版本对齐。驱动、固件、算子库、框架插件四个版本号必须按官方兼容矩阵来,差一个小版本都可能遇到算子缺失。先跑官方的 smoke test,确认环境没问题再往下走。
第二步,模型适配先查算子支持清单。把模型用到的算子导出来,逐个对照支持矩阵。不支持的算子有两种解法:找等价替换,或者切回 CPU 跑(性能会掉,但能保证功能先跑通)。我们这次有两个自定义算子,最后是手写替换的。
第三步,精度对齐。先 FP16 跑通,和 GPU 结果逐层对比 tensor 差异,diff 超过 1e-3 的层重点查。量化放到精度对齐之后做,INT8 的校准集要用业务真实数据,通用校准集在垂类任务上掉点明显。
第四步,性能调优。batch size、KV cache 分配、量化粒度三个旋钮。我们的实测:batch 从 1 拉到 32,吞吐涨了 20 多倍,但 TPOT 的 P99 也涨了 3 倍,上线前一定要按业务的延迟 SLA 反推 batch 上限。
整体感受:环境搭建占了 40% 的时间,算子适配是最大的不确定性。大家在国产芯片上跑推理,精度对齐这关都怎么做的?

