通过本章节的学习,我们可以知道模型推理和性能优化总共分为权重加载,启动推理,效果比较与调优,性能测试,性能优化等五个步骤。
1.权重加载。最终的模型包含两部分:base model 和 LoRA adapter,其中base model的权重在微调时被冻结,推理时加载原权重即可,LoRA adapter可通过PeftModel.from pretrained进行加载。
2.启动推理。通过model.generate,启动推理。
3.效果比较与调优。以一个微调多轮后的LORA权重为例,在微调前(不加载LoRA adapter),在问模型“你是谁”时,回答的是“DeepSeek-R1”,而在加载LoRA adapter之后,回答为“甄嬛”。在进行长文本输出的过程当中,输出回答到一定长度后模型会输出重复内容,可在generate_kwargs中添加repetition penalty=1.2,解决长文本输出重复问题。
4.性能测试。凡是在推理过程中涉及采样(do sample=True)的案例,可以通过配置变量,注释掉之前添加的同步模式代码,再运行代码,即可获取每个token的推理时长和平均时长。
5.性能优化。通过上述禁用多线程的方式,可以适当减少平均单token的推理时长,但效果不明显。在此基础上,还可以通过it即时编译的方式进一步加速it即时编译通过it修饰器修饰Python函数或者Python类的成员函数使其被编译成计算图,通过图优化等技术提高运行速度。在本章节的场景下,it修饰器应该修饰模型decode的函数,但由于原代码将模型的logits计算、解码等过程整体封装成了一个model.generate函数,不好进行优化,所以需要手动实现解码逻辑。