有句老生常谈的话:一项工作是否具有技术含量取决于你怎么做,这在大模型(LLM)方向上尤其如此,因为与传统自然语言处理(NLP)相比,它的上手门槛变得更低了。
我来举些例子,就大模型微调的几个重要环节而言,我所列举的每一种做法基本上都能实现最终目标,甚至训练出的模型效果也相差无几。然而,它们对个人能力成长的助益却大不相同。
数据工作方面
- 做法 1:直接沿用实验室或同事的训练数据,在获取后不检查数据质量就直接用于训练。
- 做法 2:下载一份开源数据,构建“系统 + 查询 + 答案”的集合。
- 做法 3:利用 GPT - 4 生成数据,学会使用 GPT - 4 偏好的提示语(prompt)来提出请求。并且要认识到数据提示语(prompt)的多样性,想尽各种办法去扩充提示语(prompt)在任务和表达方式上的多样性,甚至特意添加一些带噪声的提示语(noisy prompt)以提高抗噪性。同时,愿意放低姿态,逐一检查数据质量,并与标注人员统一标注标准。
- 做法 4:利用用户的交互日志来推动数据构建过程,收集用户的真实提示语(prompt),通过规则或者 GPT - 4 分析用户的反馈(feedback),进而获取高质量的答案数据。
- 做法 5:借鉴思维链(CoT)、检索增强生成(RAG)、函数调用(function_call)、智能体(agent)等思路,将复杂的、模型无法胜任的任务在数据层面进行拆解,例如,将“模型写不出长篇小说”拆分为“模型写小说大纲,模型基于小说大纲写长篇小说”等。
训练代码方面
- 做法 1:直接继承实验室或同事的训练代码,修改数据路径(data_path)后就运行训练脚本(bash train.sh)。
- 做法 2:继承或者自行下载一份训练代码,研究启动代码中的每一个参数,去思考并弄明白:为什么要开启卸载(offload),什么是序列并行(sequence_parallel)等。然后再去查看数据加载器(dataloader)是如何处理数据格式的,会话(session)数据的损失(loss)是只计算最后一轮还是每一轮都计算,代码中应用了哪些特殊标记(special_token)等。
- 做法 3:不仅要理解每个参数,还要提出自己的见解:例如,轮数(epoch)等于 3 是否过多,10 万条训练数据这个量级是否合适?特殊标记(special_token)是否引入过多?对于 7B 模型来说这个学习率是否过大,预热(warmup)应该使用多少步或者是否可以不进行预热?带着这些疑问去请教 ChatGPT 或者搜索并阅读行业大佬们的文章。
- 做法 4:对训练代码提出质疑并进行改进,思考 DeepSpeed 是否有点慢,是否要改为 Megatron 框架?是否可以将 Megatron 和 DeepSpeed 的优点相结合?如果有兴趣,还可以调试运行速度,当发现旋转位置编码(ROPE)的耗时比注意力(attention)机制还长时,想办法进行优化(查询大佬们的优化方案)。
大模型资源分享
针对所有自学遇到困难的同学,我为大家系统梳理了大模型学习的脉络,并且分享这份LLM大模型资料:其中包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等。
标签:或者说,私有化,框架,AI,模型,微调,L2.2,应用,技术含量 From: https://blog.csdn.net/weixin_42924914/article/details/142354333