好,我们来学习!
本节课是微调,但就和mmdetection等openmmlab开源的repo一样,都是基于config进行操作的,本次书生大模型的微调训练需要做出的改变其实就是使用xtuner run 来进行cfg文件的调用罢了,鉴于我之前也有笔记提到过训练部分,所以本文会更加偏向于摘录一些理念性的知识。
LORA:
LORA是一种低资源微调大模型方法,出自论文LoRA: Low-Rank Adaptation of Large Language Models。 使用LORA,训练参数仅为整体参数的万分之一、GPU显存使用量减少2/3且不会引入额外的推理耗时。
Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning这篇文章的研究表明:预训练模型拥有极小的内在维度(instrisic dimension),即存在一个极低维度的参数,微调它和在全参数空间中微调能起到相同的效果。
受instrisic dimension工作的启发,lora作者认为参数更新过程中也存在一个‘内在秩’。受instrisic dimension工作的启发,作者认为参数更新过程中也存在一个‘内在秩’。对于预训练权重矩阵,我们可以用一个低秩分解来表示参数更新△W:
同时训练过程中冻结参数W,仅训练A和B中的参数。如上面那个蓝色与橙色的图所示。
QLoRA:
发布于2023年5月,引入了几项创新来节省内存:新的数据类型4位NormalFloat(NF4);双重量化以减少平均内存占用;分页优化器来管理内存峰值。
值得注意的是,微调结束并不是立刻可以使用了,还需要转为huggingface的模型,以以下命令进行:
xtuner convert pth_to_hf ${CONFIG_NAME_OR_PATH} ${PTH_file_dir} ${SAVE_PATH}
此时新生成的文件菜式所谓的“LoRA 模型文件”。
最后通过一下命令将微调厚的模型接入LM大模型达到我们的“篡改robot思维”的目的:
xtuner convert merge ./internlm-chat-7b ./hf ./merged --max-shard-size 2GB
# xtuner convert merge \
# ${NAME_OR_PATH_TO_LLM} \
# ${NAME_OR_PATH_TO_ADAPTER} \
# ${SAVE_PATH} \
# --max-shard-size 2GB
最后就是如前面几节课中说的,使用demo.py进行模型的运行与推送至Streamlit的本地web端口上啦。