帮一个团队做 LLaMA-2-7B 的昇腾NPU部署他们踩了一个坑模型跑起来了但是速度慢得没法用。8 张图片的 OCR 任务跑了 5 分钟还没出结果。查了一圈发现问题出在没做量化。FP16 的 7B 模型光权重就 14GB昇腾 910 的 16GB 显存根本装不下要频繁做显存换入换出性能暴跌。后来用了 cann-recipes-infer 的推理配方换成 INT8 量化14GB 降到 3.5GB同样的任务 15 秒搞定。cann-recipes-infer 是什么cann-recipes-infer 是昇腾CANN生态的推理配方库提供主流大模型的昇腾NPU推理优化方案包括量化、算子融合、批处理优化等。在 CANN 五层架构里cann-recipes-infer 位于应用层直接面向终端用户提供端到端的推理解决方案依赖 ATB推理加速调用 ascend-transformer-boost依赖 GE图优化调用 Graph Engine配方涵盖的模型cann-recipes-infer 目前覆盖以下模型模型类型支持模型量化精度加速比vs FP16LLMLLaMA-2/3、ChatGLM、QWenFP16/INT8/INT42-4xVLMLLaVA、MiniGPT-4、CogVLMFP16/INT81.5-2xOCRPaddleOCR 适配版FP16/INT82-3x检测YOLO 系列FP16/INT82-3x环境准备第1步安装 CANN ATB参考之前的 ATB 安装教程先把环境搞定。第2步克隆 cann-recipes-infergit clone https://atomgit.com/cann/cann-recipes-infer.git cd cann-recipes-infer第3步安装依赖pip install -r requirements.txtrequirements.txt 里的关键依赖torch-npuPyTorch 的昇腾NPU后端atb昇腾 Transformer 加速库transformersHuggingFace 模型加载库optimum推理优化工具实战LLaMA-2-7B 推理优化配方1FP16 基线无优化from transformers import AutoModelForCausalLM, AutoTokenizer import torch # 加载 FP16 模型 model AutoModelForCausalLM.from_pretrained( meta-llama/Llama-2-7b-hf, torch_dtypetorch.float16, device_mapauto ) model model.npu() # 转到昇腾NPU tokenizer AutoTokenizer.from_pretrained(meta-llama/Llama-2-7b-hf) # 推理 input_text 昇腾NPU的大模型推理速度怎么样 input_ids tokenizer(input_text, return_tensorspt).input_ids.npu() with torch.no_grad(): output model.generate(input_ids, max_new_tokens100) print(tokenizer.decode(output[0]))问题FP16 的 7B 模型需要 14GB 显存昇腾 910 的 16GB 显存刚刚够推理时没有多余显存做优化性能差。配方2INT8 量化推荐from optimum.npu import NPUQuantizer from transformers import AutoModelForCausalLM, AutoTokenizer # 加载模型 model AutoModelForCausalLM.from_pretrained( meta-llama/Llama-2-7b-hf, torch_dtypetorch.float16, device_mapauto ) model model.npu() # INT8 动态量化不重新训练 quantizer NPUQuantizer( precisionint8, calibration_datacalibration_dataset, # 校准数据集 downloadTrue # 自动下载量化校准工具 ) # 执行量化 quantized_model quantizer.quantize_model( model, tokenizer, batch_size1, sequence_length2048 ) # 保存量化模型 quantized_model.save_pretrained(llama2-7b-int8)量化效果显存14GB → 3.5GB75% 减少速度提升 2-3x显存带宽压力减小精度损失 1%大部分任务感知不到配方3INT4 极致压缩from optimum.npu import NPUQuantizer # INT4 量化更激进 quantizer NPUQuantizer( precisionint4, calibration_datacalibration_dataset, quantile_alpha0.95 # 量化阈值平衡精度和压缩率 ) quantized_model quantizer.quantize_model(model, tokenizer)INT4 效果显存14GB → 1.8GB87% 减少速度提升 3-4x精度损失2-5%对精度敏感任务需要调优性能对比配置显存占用首 token 延迟吞吐FP16 基线14 GB2,380 ms1,250 tokens/sINT8 量化3.5 GB980 ms3,200 tokens/sINT4 量化1.8 GB650 ms4,100 tokens/s常见踩坑点坑1量化后精度崩了症状INT8/INT4 量化后模型输出乱码或准确率暴跌。原因校准数据集不够多样化或者量化阈值没调好。解决方案# 扩大校准数据集至少 512 条样本 calibration_dataset load_dataset(your/domain-specific-data, splittrain[:512]) # 调高 quantile_alpha更保守的量化 quantizer NPUQuantizer(quantile_alpha0.98) # 默认 0.95坑2昇腾910显存不够症状模型加载时报 OOMOut of Memory。原因昇腾 910 的 16GB 显存对于 FP16 的 7B 模型刚好够但推理时还有中间结果占用显存。解决方案用 INT8 量化降低 batch_size开启 KV Cache 压缩用昇腾 910B32GB 显存或 910Pro64GB 显存坑3ATB 加速没生效症状加了 ATB但速度没变快。原因ATB 没有正确加载或者模型结构不在 ATB 支持列表里。解决方案# 确认 ATB 已安装 import atb print(atb.__version__) # 确认模型结构被 ATB 支持 from atb_speed import is_supported print(is_supported(llama2-7b)) # 应该输出 True下一步想深入学推理优化cann-recipes-infer 仓库有完整配方覆盖 LLaMA、ChatGLM、QWen 等主流模型https://atomgit.com/cann/cann-recipes-infer顺便说一句如果你打算在昇腾NPU上部署大模型量化是必做的。FP16 的时代已经过去了INT8/INT4 才是主流。
cann-recipes-infer - 昇腾NPU推理优化从入门到精通
发布时间:2026/5/22 19:44:09
帮一个团队做 LLaMA-2-7B 的昇腾NPU部署他们踩了一个坑模型跑起来了但是速度慢得没法用。8 张图片的 OCR 任务跑了 5 分钟还没出结果。查了一圈发现问题出在没做量化。FP16 的 7B 模型光权重就 14GB昇腾 910 的 16GB 显存根本装不下要频繁做显存换入换出性能暴跌。后来用了 cann-recipes-infer 的推理配方换成 INT8 量化14GB 降到 3.5GB同样的任务 15 秒搞定。cann-recipes-infer 是什么cann-recipes-infer 是昇腾CANN生态的推理配方库提供主流大模型的昇腾NPU推理优化方案包括量化、算子融合、批处理优化等。在 CANN 五层架构里cann-recipes-infer 位于应用层直接面向终端用户提供端到端的推理解决方案依赖 ATB推理加速调用 ascend-transformer-boost依赖 GE图优化调用 Graph Engine配方涵盖的模型cann-recipes-infer 目前覆盖以下模型模型类型支持模型量化精度加速比vs FP16LLMLLaMA-2/3、ChatGLM、QWenFP16/INT8/INT42-4xVLMLLaVA、MiniGPT-4、CogVLMFP16/INT81.5-2xOCRPaddleOCR 适配版FP16/INT82-3x检测YOLO 系列FP16/INT82-3x环境准备第1步安装 CANN ATB参考之前的 ATB 安装教程先把环境搞定。第2步克隆 cann-recipes-infergit clone https://atomgit.com/cann/cann-recipes-infer.git cd cann-recipes-infer第3步安装依赖pip install -r requirements.txtrequirements.txt 里的关键依赖torch-npuPyTorch 的昇腾NPU后端atb昇腾 Transformer 加速库transformersHuggingFace 模型加载库optimum推理优化工具实战LLaMA-2-7B 推理优化配方1FP16 基线无优化from transformers import AutoModelForCausalLM, AutoTokenizer import torch # 加载 FP16 模型 model AutoModelForCausalLM.from_pretrained( meta-llama/Llama-2-7b-hf, torch_dtypetorch.float16, device_mapauto ) model model.npu() # 转到昇腾NPU tokenizer AutoTokenizer.from_pretrained(meta-llama/Llama-2-7b-hf) # 推理 input_text 昇腾NPU的大模型推理速度怎么样 input_ids tokenizer(input_text, return_tensorspt).input_ids.npu() with torch.no_grad(): output model.generate(input_ids, max_new_tokens100) print(tokenizer.decode(output[0]))问题FP16 的 7B 模型需要 14GB 显存昇腾 910 的 16GB 显存刚刚够推理时没有多余显存做优化性能差。配方2INT8 量化推荐from optimum.npu import NPUQuantizer from transformers import AutoModelForCausalLM, AutoTokenizer # 加载模型 model AutoModelForCausalLM.from_pretrained( meta-llama/Llama-2-7b-hf, torch_dtypetorch.float16, device_mapauto ) model model.npu() # INT8 动态量化不重新训练 quantizer NPUQuantizer( precisionint8, calibration_datacalibration_dataset, # 校准数据集 downloadTrue # 自动下载量化校准工具 ) # 执行量化 quantized_model quantizer.quantize_model( model, tokenizer, batch_size1, sequence_length2048 ) # 保存量化模型 quantized_model.save_pretrained(llama2-7b-int8)量化效果显存14GB → 3.5GB75% 减少速度提升 2-3x显存带宽压力减小精度损失 1%大部分任务感知不到配方3INT4 极致压缩from optimum.npu import NPUQuantizer # INT4 量化更激进 quantizer NPUQuantizer( precisionint4, calibration_datacalibration_dataset, quantile_alpha0.95 # 量化阈值平衡精度和压缩率 ) quantized_model quantizer.quantize_model(model, tokenizer)INT4 效果显存14GB → 1.8GB87% 减少速度提升 3-4x精度损失2-5%对精度敏感任务需要调优性能对比配置显存占用首 token 延迟吞吐FP16 基线14 GB2,380 ms1,250 tokens/sINT8 量化3.5 GB980 ms3,200 tokens/sINT4 量化1.8 GB650 ms4,100 tokens/s常见踩坑点坑1量化后精度崩了症状INT8/INT4 量化后模型输出乱码或准确率暴跌。原因校准数据集不够多样化或者量化阈值没调好。解决方案# 扩大校准数据集至少 512 条样本 calibration_dataset load_dataset(your/domain-specific-data, splittrain[:512]) # 调高 quantile_alpha更保守的量化 quantizer NPUQuantizer(quantile_alpha0.98) # 默认 0.95坑2昇腾910显存不够症状模型加载时报 OOMOut of Memory。原因昇腾 910 的 16GB 显存对于 FP16 的 7B 模型刚好够但推理时还有中间结果占用显存。解决方案用 INT8 量化降低 batch_size开启 KV Cache 压缩用昇腾 910B32GB 显存或 910Pro64GB 显存坑3ATB 加速没生效症状加了 ATB但速度没变快。原因ATB 没有正确加载或者模型结构不在 ATB 支持列表里。解决方案# 确认 ATB 已安装 import atb print(atb.__version__) # 确认模型结构被 ATB 支持 from atb_speed import is_supported print(is_supported(llama2-7b)) # 应该输出 True下一步想深入学推理优化cann-recipes-infer 仓库有完整配方覆盖 LLaMA、ChatGLM、QWen 等主流模型https://atomgit.com/cann/cann-recipes-infer顺便说一句如果你打算在昇腾NPU上部署大模型量化是必做的。FP16 的时代已经过去了INT8/INT4 才是主流。