昇思学习营第七期·昇腾开发板特辑 第三次打卡

昇思学习营第七期·昇腾开发板特辑 第三次打卡

DeepSeek-R1-Distill-Qwen-1.5B模型推理和性能优化

对于我们微调之后的模型,我们一般要进行自己的推理,来判断自己的模型训练的效果如何,有没有训崩(一般表现为重复输出回答,即过拟合),当然由于我们在之前的训练中数据集合参数设置的都比较小,所以不会出现这种情况,但是我们为了验证自己的模型训练的怎么样,还是需要进行一下推理的,哈哈,毕竟自己训练出来的东西,还可以回答自己的问题,当然会好奇了。

我们一般的进行模型性能测试分为以下几个步骤

在上一次的视频中我们学到对于lora微调,我们只动较小的一部分参数和权重,再通过这一部分来影响我们整体的模型以及最后的输出推理结果,在这里我们可以看到,在推理的时候我们也是一样的,base model我们可以直接通过pretrained来加载原模型,而lora adapter我们则需要在我们训练出来的模型的输出路径来进行加载。

我们的推理的结果内容是由以上参数影响的。

可以看到经过我们的微调之后,我们模型的效果是具有明显的不同的,在微调前是deepseek在微调后模型对自己的定义就变成嬛嬛了,当然我们可以通过更改数据集的方式来调整模型对自我的认知,像不同的职业,以及小说中的人物,只要我们通过正确的方式训练,都可以得到相应的模型。

当然我们的模型可能还会有很多的不足需要我们进行优化,以上就是一个典型的案例,我们在mindspore环境中可以添加相应的参数来解决重复输出的问题。

在我们mindspore框架中我们还可以通过

export INFERENCE_TIME_RECORD=True

来获取我们的token平均推理时间

可以看到我们的时间开销还是很大的,下面我们来进行优化

在我们的mindspore框架下我们可以通过运用jit修饰器来进行时间优化

prefill-decode的意思是将重复运算变为只计算新的词

动态的意思是随着我们的计算来进行更新由于我们动态Cache无法成图,所以我们需要实例化StaticCache

通过如图中的三步我们可以实现jit装饰

可以看到我们不用jit每个token的时间约为1.1秒,而使用jit之后降为了0.32秒,进行静态图的图编译我们是需要时间的,所以我们第一个token的时间比较长,我们也称这种情况为冷启动。

下面我们来实操一下

还是和上次一样的初始操作

touch requer.sh
vim requer.sh 
bash requer.sh

我们通过脚本来进行环境的安装

还是一样加上象征我们身份的代码块然后点击运行

我们可以看到我们的推理结果

然后我们再来进行性能提升,可以看到我们经过jit装饰之后我们的token时间取得了很大的缩短,而第一步冷启动也和我们视频描述的一致