模型推理与性能
模型推理
在模型微调后,最终的模型包含两部分:base model 和 LoRA adapter,其中base model的权重未变,推理时加载原权重即可, 而LoRA adapter可通过PeftModel.from_pretrained进行加载。
model = AutoModelForCausalLM.from_pretrained(
'MindSpore-Lab/DeepSeek-R1-Distill-Qwen-1.5B-FP16',
mirror='modelers',
ms_dtype=mindspore.float16
)
model = PeftModel.from_pretrained(
model,
"./output/DeepSeek-R1-Distill-Qwen-1.5B/checkpoint-3/adapter_model/"
)
然后启动推理:
model.generate()
性能优化
通过设置环境变量INFERENCE_TIME_RECORD可以获
取每个token的推理时长和平均时长:
export INFERENCE_TIME_RECORD=True
由于香橙派开发板推理主要消耗在host侧而NPU的推理还是比较快的,因此禁用多线程可以小幅度提升推理速度
from mindspore._c_expression import disable_multi_thread
disable_multe_thread()
通过在generate_kwargs中添加repetition_penalty=1.2 可以解决长文本输出重复问题。
Just in time
MindSpore 通过将动态图编译成静态图实现加速。与Namba中的jit类似,但是用法稍微复杂一些。
前序准备:
- 实现解码逻辑: decode函数,prfill-decode阶段
- 实例化StaticCache,动态Cache无法成图
添加jit装饰器:
- 设置
O2整图下沉 - model.git()
- mindspore.jit装饰decode函数
最后,虽然了解了整个过程,还是要尝试和多多练习才能实现更好的模型。