训练自己的模型可以参考以下步骤:
选择Baichuan2-7B-Chat模型作为底模,配置模型本地路径,配置提示模板Train页面里,选择sft训练方式,加载定义好的数据集wechat和self_cognition。其中学习率和训练轮次非常重要,根据自己的数据集大小和收敛情况来设置,使用FlashAttention-2则可以减少显存需求,加速训练速度;显存小的朋友可以减少batch size和开启量化训练,内置的QLora训练方式非常好用。需要用到xformers的依赖具体命令参数如下:显存占用20G左右,耐心等待一段时间,请神模式开启...根据聊天记录规模大小,少则要几小时,多则几天,一个虚拟助手就能训练完成了。专不专业还有待大量标准问答验证,只是口气和习惯的模仿是有点意思的,若再加上[《克隆自己的声音——赛博分身必备技能》](http://mp.weixin.qq.com/s?__biz=MzI0MzA4NDkwMw==&mid=2247492147&idx=1&sn=efacb40a6c5610b6ed7368ba1d043f13&chksm=e970d93bde07502df2ff09ae3e700923ae285c21c7151282870d9e1db309da07ee5a49f609ed&scene=21#wechat_redirect)的效果,那几乎就传神了。不过这里还有很多细节工作需要完善:
sample_sampler:设置训练中测试模型效果时使用的sampler,可以选择["ddim","pndm","lms","euler","euler_a","heun","dpm_2","dpm_2_a","dpmsolver","dpmsolver++","dpmsingle","k_lms","k_euler","k_euler_a","k_dpm_2","k_dpm_2_a"],默认是“ddim”。save_model_as:每次模型权重保存时的格式,可以选择["ckpt","safetensors","diffusers","diffusers_safetensors"],目前SD WebUI兼容"ckpt"和"safetensors"格式模型。(3)SD关键参数详解(4)SD模型训练完成训练参数配置后,我们就可以运行训练脚本进行SD模型的全参微调训练了。我们本次训练用的底模型选择了WeThinkIn_SD_二次元模型,大家可以关注Rocky的公众号WeThinkIn,后台回复“SD_二次元模型”获取模型资源链接。我们打开SD_finetune.sh脚本,可以看到以下的代码:我们把训练脚本封装在accelerate库里,这样就能启动我们一开始配置的训练环境了。在本文的6.2节中,我们已经详细介绍了如何配置accelerate训练环境,如果我们想要切换不同的训练环境参数,我们只需要将accelerate_config.yaml改成我们所需要的配置文件与路径即可(比如:/本地路径/new_accelrate_config.yaml)。
在这一部分,我们将详细讨论如何实现我们的图像字幕生成模型。这个模型主要由两部分组成:编码器和解码器。[heading3]编码器[content]编码器的作用是将输入图像转换为一组特征向量,这些特征向量包含了图像的重要信息。在我们的模型中,编码器是一个预训练的卷积神经网络(CNN)。[heading3]解码器[content]解码器部分的任务是根据编码器提供的图像特征生成描述图像内容的文本。这部分模型的结构稍微复杂一些,因为它涉及到序列生成,并且在这个过程中使用了注意力机制。[heading3]组合模型[content]现在我们有了单独的编码器和解码器,我们需要将它们组合在一起,形成一个完整的图像字幕生成模型。[heading2]自定义损失函数[content]由于我们的任务是生成文本序列,并且这些序列可能具有不同的长度,我们需要特殊处理损失函数。我们使用稀疏分类交叉熵作为损失函数,但是需要屏蔽填充的部分。[heading2]编译模型[content]最后,我们需要编译我们的模型,这样我们就可以开始训练它了。[heading2]训练模型[content]一旦我们的模型被编译,我们就可以开始训练它了。在本教程中,我使用了一个单一的GPU来进行训练。每个epoch大约需要15至20分钟的时间。当然,你可以根据自己的需求进行更多的训练,这可能会得到更好的结果。[heading2]推理与生成字幕[content]训练完成后,我们可以使用我们的模型为新的图像生成字幕。在这一步,我们需要稍微修改解码器的结构,以便我们可以手动控制GRU的状态。[heading3]重构解码器[content]在推理阶段,我们需要更细粒度地控制解码器的行为。因此,我们重构解码器模型,使其可以接收额外的GRU状态输入,并返回新的GRU状态。[heading3]自定义推理循环[content]为了生成字幕,我们编写一个自定义推理循环,它会一次产生一个单词,直到生成一个完整的句子。