先说结论:别迷信“调参玄学”,90%的优化都在工程细节里。下面直接上干货。
1️⃣ **剪枝别手软**
对BERT类模型,结构化剪枝(去掉Attention头/FFN层)比非结构化更实用。实测去掉30%冗余头,精度掉不到1%,推理内存暴降40%。推荐用Torch-Pruning库,一键裁剪不费脑。
2️⃣ **量化踩坑指南**
别无脑上INT8!先用Calibration跑一遍,观察激活值分布。如果离群点太多,改用混合精度(比如把敏感层留FP16)。TensorRT的FP16+INT8混用方案,在T4上能压到1ms以内。
3️⃣ **Batch Size不是越大越好**
GPU显存受限时,Dynamic Batching动态打包比固定batch更香。配合NVIDIA Triton的延迟调度,吞吐量直接翻倍。注意别让请求排队超过50ms,否则用户早跑了。
4️⃣ **算子融合别偷懒**
把LayerNorm+GeLU+Residual合并成一个Kernel,减少显存带宽消耗。用ONNX Runtime或者TensorRT自动融合,省掉手动写CUDA的苦力活。试过在A10G上,单步推理从15ms降到9ms。
5️⃣ **CPU/GPU协同避坑**
如果模型需要频繁交互CPU(比如预处理),用TorchScript的IValue传数据,避免Python GIL卡死。实测从PyTorch原版切到TorchScript,p99延迟降低35%。
最后抛个问题:你们在生产环境里,因为模型优化踩过最大的坑是啥?是显存泄漏还是精度反降?评论区唠唠 🔥 |