昇思学习营第七期·昇腾开发板3

模型推理与性能

模型推理

在模型微调后,最终的模型包含两部分: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函数

最后,虽然了解了整个过程,还是要尝试和多多练习才能实现更好的模型。