开云体育

开云体育官方除了RAG构建本地知识库外DeepSeek模型微调实现教程

2026-01-22
浏览次数:
返回列表

  开云体育[永久网址:363050.com]成立于2022年在中国,是华人市场最大的线上娱乐服务供应商而且是亚洲最大的在线娱乐博彩公司之一。包括开云、开云棋牌、开云彩票、开云电竞、开云电子、全球各地赛事、动画直播、视频直播等服务。开云体育,开云体育官方,开云app下载,开云体育靠谱吗,开云官网,欢迎注册体验!

开云体育官方除了RAG构建本地知识库外DeepSeek模型微调实现教程

  DeepSeek是由深度求索团队开发的大语言模型,该模型在人工智能领域中表现出色,特别是在自然语言处理方面。在进行微调实验时,实验将基于deepseek-llm-7b-chat模型,并在EmoLLM数据集上进行微调,以实现大模型能够以心理医生的口吻来回答我们的问题。本实验基于transformers和openMind均已实现本次微调,微调代码均可在github链接上查看。

  通过本次实验,你不仅能够完成多轮对话数据的微调,还能掌握这些方法,并将其迁移到其他微调实验中,独立进行高效的模型调优。这一过程不仅涉及技术实现,还涵盖了模型优化的策略,有助于提升模型在特定任务上的表现。根据CSDN博客的描述,DeepSeek大模型微调实战篇提供了超详细的实战指南,从入门到精通。

  此外,DeepSeek大模型在代码生成补全方面也表现出色,能够理解代码的语法和语义结构,根据用户的输入生成高质量的代码片段。这使得DeepSeek在编程辅助、代码自动化和智能开发等领域具有广泛的应用前景。同时,DeepSeek还支持多模态输入,如图像和音频等,使得DeepSeek能够处理更加复杂和多样的输入任务,进一步拓宽了其应用场景。

  本次实验同时适配transformers和openMind,由于openMind缺少数据处理的函数,下面实验手动添加即可,其他部分和基于transformers的代码一致。

  魔乐社区类似于huggingface这种模型托管社区,里面除了torch的模型还有使用MindSpore实现的模型。transformers可以直接从huggingface获取模型或者数据集,openMind也是一样的,可以从魔乐社区获取模型和数据集。

  在运行代码前,需要先配置环境,由于本次实验对比各个参数结果比较多,所以对显存要求稍微高点,具体环境配置如下:

  本次微调目的是使得大模型能够以医生的口吻来回答我们的问题,因此需要与心理健康有关的数据集资料。

  本项目使用一个EmoLLM-心理健康大模型中使用的数据集(该数据集已经进行数据清洗,在保证质量的同时,通过调整阈值减少因错误匹配而丢失重要数据的风险。):EmoLLM-datasets

  [` `{` `conversation: [` `{` `system: 现在你是一个心理专家,我有一些心理问题,请你用专业的知识帮我解决。,` `input: 医生,我最近在社交场合总是感到非常紧张和焦虑,尤其是当有很多人的时候,我甚至会出汗、心跳加速。\n\n,` `output: 我理解你的感受,社交焦虑是很常见的。首先,我想告诉你,你并不孤单。请问你能告诉我,在哪些具体的社交场景中,你感到最不舒服或焦虑呢?\n\n` `},` `{` `input: 主要是参加聚会或者需要公开发言的场合。我总是担心自己会说错话,或者别人会对我有不好的评价。\n\n,` `output: 明白了。在这种情况下,我们首先要认识到,每个人都有可能说错话或遇到尴尬的情况,这是正常的。我建议你可以尝试一些放松技巧,比如深呼吸、正念冥想,或者在参加社交活动前进行一些轻松的身体活动,以减轻紧张感。\n\n` `},` `{` `input: 我试过深呼吸,但感觉效果并不明显。\n\n,` `output: 深呼吸确实需要一定的练习才能看到效果。除了深呼吸,你还可以尝试将自己的注意力转移到当下,而不是过分担忧未来可能发生的事情。此外,你能告诉我,你在担心别人对你有不好的评价时,具体是在担心些什么吗?\n\n` `},` `……

  在训练前,我们需要将数据进行预处理,将数据集的内容进行数据映射,得到input_ids、attention_mask、labels三个映射目标,同时对数据填充到最大长度,并且转换成张量格式

  这里可能会根据每个模型的不同做修改,如果不按照每个模型对应的格式训练,而是按照自己编写的格式进行训练,结果可能会出现由于max_length比较大使得回答停不下来,一直生成句子。

  那么该如何确定训练文本格式?其实在每一个模型的tokenizer_config文件中已经给出模板。

  如果模板看的有点抽象的话,可以直接参考Llama-Factory中deepseek模型对应的模板:

  ⚠️注意:由于openMind缺少数据封装的函数,因此这部分代码需要我们手动添加,transformers直接调用即可。

  SwanLab是一款完全开源免费的机器学习日志跟踪与实验管理工具,为人工智能研究者打造。有以下特点:

  在微调Transformer模型时,使用Trainer类来封装数据和训练参数是至关重要的。Trainer不仅简化了训练流程,还允许我们自定义训练参数,包括但不限于学习率、批次大小、训练轮次等。通过Trainer,我们可以轻松地将这些参数和其他训练参数一起配置,以实现高效且定制化的模型微调。

  这里我们需要以下这些参数,包括模型、训练参数、训练数据、处理数据批次的工具、还有可视化工具

  这里保存了模型的权重、配置文件和词汇表,确保你可以在之后重新加载并使用该模型进行推理或继续训练。模型的优化器状态、学习率调度器等其他信息如果需要保存,则需要显式调用其他相关方法,如 trainer.save_state()。

  保存下来的仅仅是模型的权重信息以及配置文件等,是不能直接使用的,需要与原模型进行合并操作,代码如下:

  完整代码的话可以直接参考github上的代码,这里记录一下每一部分文件的含义

  学习率是微调LoRA(Low-Rank Adaptation)模型时的一个关键超参数,它对模型的训练动态和最终性能有着显著的影响。

  :学习率决定了模型在损失函数梯度方向上更新的步长。一个合适的学习率可以加快模型的收敛速度,而过高或过低的学习率可能导致收敛速度慢或不收敛。

  :果学习率设置得过高,可能会导致梯度更新过于激进,引起训练过程中的不稳定性,如梯度爆炸。相反,如果学习率过低,则可能导致梯度更新过于保守,影响模型的学习能力。

  :LoRA对学习率非常敏感。LoRA的最佳学习率比全参数微调的学习率要高一个数量级。

  :适当的学习率可以帮助模型在训练集上学习到有用的特征,同时避免过拟合。

  1、从图中我们可以看到从loss和grad_norm曲线的时候明显由于学习率过小,损失和梯度范数的变化都非常缓慢,意味着模型更新太慢,难以有效学习。

  2、当学习率较高,lr=1e-3的时候,损失和梯度范数的波动较大,虽然从图中可以看出其能优先达到最优值,但是由于模型更新参数时比较激进,可能会引起训练的不稳定性,比如梯度爆炸,事实上,在最开始的steps里确实出现了梯度爆炸的情况,只不过后来慢慢的调整过来了。因此该学习率还是过大了。

  综上所述,梯度取值在2e-4~1e-3的范围内对该模型以及数据集情况较好。

  如果再往大了取值的话会很明显的观察到梯度爆炸的情况,具体如下图所示,lr=1e-2的情况:

  ### epoch=3,lr=1e-3`` ``question=我最近很焦虑,我被要求参加一个节目,但是我没有任何才艺,我虽然拒绝但是也不想为难班委就答应了,现在我总觉得我会搞砸,怎么办啊?``answer=了解你的困扰,首先我要说的是,你的这种焦虑感是完全可以理解的。面对突如其来的任务,我们都会有一些担心和害怕。但请尝试接纳自己的情绪,并明白这种情绪并不代表你会真的“搞砸”。你可以试着将这次经历视为一次学习和成长的机会,而不是一个必须完美的表演。如果可能的话,可以先和班委沟通,表达你的顾虑和担忧,看看是否有其他解决方案,比如推荐其他合适的同学参加,或者讨论一个更符合你能力和兴趣的范围。这样,你不仅不会让班委感到为难,也能减轻自己的心理负担。`` ``question=可是我是个社恐,做不到怎么办?``answer=社恐(社交恐惧)的人在公共场合下确实可能会感到更加紧张和不安。对于这种情况,我建议你可以提前做一些准备,比如在家模拟练习你要在节目中展示的内容,或者设想可能出现的问题及应对策略。此外,深呼吸、正念冥想等放松技巧也能帮助你在现场保持冷静。记住,即使出现小错误,也是正常的,因为没有人是完美的。你不必对自己有过``高的期待。另外,班委也可能考虑到你的特殊情况,会给予你一定的包容和支持。`` ``--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------`` ``### epoch=3, lr=2e-5`` ``question=我最近很焦虑,我被要求参加一个节目,但是我没有任何才艺,我虽然拒绝但是也不想为难班委就答应了,现在我总觉得我会搞砸,怎么办啊?``answer=首先,我理解你的困扰和担忧。面对这样的情况,感到焦虑是很正常的反应。你愿意接受挑战并尊重班委的安排,这已经很好了。接下来,我们可以尝试以下几个步骤来缓解你的焦虑情绪:``1. 正视自己的感受:首先,不要因为自己没有才艺而感到自卑或愧疚。每个人都有自己的优点和不足,关键在于如何发掘和利用。``2. 设定合理期望:你不必追求完美,重要的是参与和享受过程。你可以将这个节目视为一个自我挑战的机会,而非评价自己的标准。``3. 准备与练习:你可以提前准备一些简单的自我介绍,或者思考一些话题来参与讨论。练习可以增强你的自信心,降低紧张感。``4. 寻求支持:和班委沟通,表达你的担忧,寻求他们的理解和支持。他们可能会提供一些建议或者鼓励。``5. 调整心态:将注意力从“搞砸”的负面想法转移到“成长”的积极角度。每次经历都是一次学习和提升的机会。``6. 进行放松训练:比如深呼吸、冥想等方法,可以帮助你在节目前缓解紧张情绪,保持冷静。``请记住,面对压力,勇敢面对和积极应对是解决问题的关键。祝你节目顺利,也祝你在这次经历中有所收获!`` ``question=可是我是个社恐,做不到怎么办?``answer=我明白你的困扰,对于数学学科的挑战,我们可以尝试以下策略来提升你的学习效果:``1. 理解基础:回顾并巩固基础知识,确保对数学概念有清晰的理解。基础扎实了,才能更好地应对更复杂的数学问题。``2. 制定计划:根据自身情况,制定合理的学习计划,分阶段、分模块地学习,避免一次性追求高难度题目。``3. 寻找学习资源:利用网络资源,如在线课程、辅导视频等,获取更多的学习资料,拓宽解题思路。``4. 练习题海战术:通过大量练习,提高解题速度和准确率。但要注意合理安排练习量,避免过度疲劳。``5. 寻求帮助:向老师、同学或家教寻求帮助,他们可以为你提供针对性的指导和建议。``6. 调整心态:保持积极的心态,相信自己有能力克服困难。遇到挫折时,不要气馁,而是要学会从中吸取教训,不断进步。``请记住,学习是一个循序渐进的过程,需要耐心和坚持。通过以上策略,相信你会逐渐提高数学成绩,找到属于自己的学习方法。加油!`` ``--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------`` ``### 预训练模型`` ``question=我最近很焦虑,我被要求参加一个节目,但是我没有任何才艺,我虽然拒绝但是也不想为难班委就答应了,现在我总觉得我会搞砸,怎么办啊?``answer=面对这样的情况,首先要认识到焦虑是很正常的情绪反应,很多人都会遇到类似的情况。接下来,可以尝试以下几个方法来缓解焦虑:``1. **准备充分**:尽管你觉得自己没有才艺,但你可以准备一些基本的自我介绍,以及关于节目的基本问题和答案,这样可以在节目开始前做好准备。``2. **积极参与**:在节目中,即使你没有才艺展示,也可以积极参与其他环节,比如讨论、游戏或者表演幕后工作等。``3. **放松心态**:告诉自己,即使搞砸了也没有关系,每个人都会有犯错的时候。重要的是从中学习和成长。``4. **正面思考**:尝试用积极的态度去看待这件事,把它当作一个挑战自己的机会,而不是一个压力。``5. **寻求支持**:和信任的朋友或家人谈谈你的担忧,他们的支持和鼓励可能会给你带来很大的帮助。``6. **专业帮助**:如果焦虑感很强,影响到了日常生活,可以考虑寻求专业的心理咨询帮助。``记住,每个人都是独一无二的,你有你的价值和特点,不要因为缺乏某种才艺就否定自己。相信自己,你一定可以做得很好!`` ``question=可是我是个社恐,做不到怎么办?``answer=如果你有社交恐惧症(社恐),那么参加节目可能会让你感到更加不安。在这种情况下,以下是一些特别的建议:``1. **准备充分**:如前所述,充分的准备可以帮助你在节目中更加自信。``2. **寻求支持**:找一个朋友或家人陪同你参加节目,他们在场可以给你提供支持和帮助,让你感觉更加安心。``3. **逐步面对**:如果你因为社恐而不敢在节目中表现,可以尝试从一些小的、不那么正式的场合开始,逐步增加参与社交活动的频率和难度。``4. **正面思考**:在心里对自己说一些积极的话,比如“我可以做到”、“我并不孤单”等,这些积极的自我暗示可以帮助你克服恐惧。``5. **专业帮助**:如果你的社恐症状严重影响了生活,建议寻求专业心理咨询师的帮助。他们可以提供专业的治疗和指导,帮助你克服社恐。``记住,每个人都有自己的节奏,不要因为害怕而放弃尝试。一步一步来,慢慢地你会发现自己变得更加自信和勇敢。

  从结果上看,学习率设置正确的话推理结果确实比想象中要好很多,而且可以节省很多训练资源。

  下图表示不同r的情况下模型loss还有梯度grad_norm变化的曲线的结果

  总结:由于这里设置的学习率低了点,所以模型收敛速度比较慢,loss曲线均具有相同的下降趋势并且基本一致,但是秩越高,梯度范数越低,原因有以下几点:

  :在数值计算中,较高的秩可能有助于提高计算的稳定性,这是因为高秩矩阵在数值运算中更稳定。

  :在优化过程中,模型可能陷入局部最小值或鞍点。较高的秩可能导致模型在参数空间中的不同区域收敛,这些区域可能具有相似的损失值,但梯度方向和大小不同,这可能导致梯度范数的降低,因为模型在这些区域的梯度更新更小。

  :不同的秩可能导致优化算法在参数空间中的搜索路径不同。较高的秩可能允许模型在参数空间中更平滑地移动,从而减少梯度的波动,这可能导致梯度范数的降低,因为模型在优化过程中更加稳定。

  :在深度学习中,梯度的稳定性对于训练过程至关重要。较低的梯度范数通常意味着梯度更新更加稳定,不容易出现梯度爆炸或消失的问题。当秩较高时,模型可能更容易找到损失函数的平滑区域,从而使得梯度更新更加稳定,梯度范数较低。

  由于lora微调的时候本身就冻结了大部分参数,所以即使r增加,但是显存的占用并不会显著增加,因此这部分可以忽略不计,只需要在合适区间上考虑loss和grad_norm的变化即可。

  缩放因子(alpha)用于调整低秩矩阵更新的幅度,以确保这些更新不会过大或过小,从而影响模型的稳定性和收敛性。

  更新幅度的调节:缩放因子alpha用于调整低秩矩阵更新的幅度。在LoRA中,原始权重矩阵W被分解为W0 + W_rank,其中W_rank = A * B,A和B是低秩矩阵。如果alpha设置得过大,可能会导致梯度更新过于激进,从而引起训练过程中的不稳定性;如果设置得过小,则可能导致更新过于保守,影响模型的学习能力。

  梯度稳定性:适当的alpha值有助于保持梯度的稳定性。如果alpha过大,可能会导致梯度爆炸;如果过小,则可能导致梯度消失。

  模型收敛性:alpha的值直接影响模型的收敛速度和稳定性。一个适中的alpha值可以帮助模型更快地收敛到一个较好的解。

  :alpha=16提供了一个适中的更新幅度,使得模型在训练过程中能够稳定地学习和收敛。

  :alpha=32可能过大,导致梯度更新过于激进,从而引起训练过程中的不稳定性。

  :不同的alpha值可能与优化算法的适应性有关。alpha=16更好地适应了所使用的优化算法,从而促进了模型的收敛。

  总的来说,选择合适的alpha值需要考虑模型的稳定性、收敛速度以及训练过程中的梯度行为。通过实验和调整,可以找到最适合特定模型和任务的alpha值。

  在神经网络训练中,模型往往倾向于“记住”训练数据的细节甚至噪声,导致模型在新数据上的表现不佳,即过拟合。为了解决这一问题,Dropout 应运而生。通过在训练过程中随机丢弃一部分神经元,Dropout 能减少模型对特定神经元的依赖,从而提升泛化能力。

  这部分基本不会对实验结果产生过大的影响,因为模型已经通过其他机制(如低秩更新)获得了足够的正则化。

  对于模型不同的层进行微调的结果其实从loss曲线上观察的话区别不大,我认为应该从推理结果以及训练时长上观察并对比其效果。

  当lora微调所有的线性层的时候明显最终效果会更好一点,但是训练时长相对来说就会多一些,而如果只微调其中某些层比如q、k层的话训练时间比较短,但是效果可能就会稍微差一点。

  其中attn-lora是包括q、k、v、o以及前馈网络层mlp层所有层都参与lora微调,其他两个和标题表达的意思一致,分别只参与了某些层的lora微调。 从上图可以看出,其实模型收敛的情况相似,差别不大, 但是只训练两层的话训练时间上能短一些,然后对于推理结果的评估需要参考比较多的测试集,理论上其实相差不大。

  当训练模型时,选择适当的训练周期(epoch)数量是至关重要的。epoch指的是整个训练数据集通过模型的次数。

  过多的训练周期可能会导致模型在训练集上表现优秀,但是在其他数据集上可能表现不好,这是由于训练周期过长可能会导致模型泛化能力减弱。

  因此选择合适的epoch对于微调来说至关重要,epoch在5以内的话效果不错,如果更大的epoch就可能削弱模型的泛化能力了。

  注意:图中梯度grad_norm变化先下降后上升最后平稳的趋势是因为这些实验的学习率设置过低,导致了梯度更新太小,随后推动模型逃离局部最小值而上升。本次实验合适的学习率大概是1e-3~2e-4之间,如果想观察下epoch过多的情况可以使用较少的数据集训练,设置合适的学习率来观察结果。

  batch_size是指在模型训练的单次迭代中同时处理的样本数量。这个参数直接影响到模型训练的内存消耗和计算效率。较大的batch_size可以提高内存利用率和训练速度,但也可能导致模型训练的稳定性下降,以及需要更多的内存资源。较小的batch_size可以提高模型训练的稳定性,但可能会降低训练效率。

  per_device_train_batch_size,这个参数是指在每个训练设备(如GPU)上用于训练的批次大小。这个参数特别有用,当你有多个训练设备时,它允许你为每个设备单独设置批次大小。例如,如果你有4个GPU,并且设置

  这里我都使用的是一块卡,然后单线程运行,因此总共的batch_size分别是1x1、1x2(num_gpus x

  但是较小的batch_size每次更新的梯度可能受个别样本的影响较大,因此训练过程的噪声较多,可能导致模型在优化时偏离最优解,这可能会导致训练过程不稳定或者收敛速度较慢。我们可以从图中明显看出区别。

  能明显看出当设置batch较大的时候训练时长缩短,这是因为一次训练可以同时训练两条数据,理论上可以缩减一小时,因为多了一倍,这里相差了40多分钟,有可能是卡的问题,总之,可以适当选择batch来提高训练效率。

  SwanLab更新的系统监测,还有硬件条件日志,我们可以直接在官网上随时查看实验时硬件设备情况

  其中GPU1是batch=2的时候的情况,GPU0是batch=1的时候的硬件,可以看到从显存的使用上,batch=1的时候大概使用了26GB,batch=2的时候使用了36GB。

  该参数用于在微调或训练过程中控制梯度累积的步数。简单来说,它表示在进行一次权重更新之前,累积多少个批次的梯度。其在深度学习训练中的作用非常重要,尤其是在显存有限时。

  gradient_accumulation_steps)。梯度累积使得虽然每个批次大小较小,但通过累积多个批次的梯度后再进行一次反向传播和权重更新,从而有效地“模拟”了更大的批次大小。

  per_device_train_batch_size上我们也可以看出,当计算出的batch越大,对显存的消耗越多,但是在合适范围内,模型收敛效果也越好,具体我们可以观察下下面的图:

  可以看到,当batch_size具体比较小的时候,总共的步长steps会比较长,而且我们设置的值是4倍的关系,steps也是4倍的关系,而当

  gradient_accumulation_steps 会导致每次参数更新更精确,使得每次更新的步长较小,训练过程中的噪声减少,从而帮助模型更快找到最优解。这会导致在较少的 steps 中收敛。 2、当

  gradient_accumulation_steps 设置较高时,实际上是通过增加每个更新周期的“累计样本数”来增强梯度估计的准确性。这个过程可以模拟较大的 batch_size,因为每次更新所基于的数据量变大,梯度估计更稳定。更稳定的梯度会加速模型收敛,尤其是在优化时,模型的参数更新方向更为清晰,避免了小批次带来的高噪声。 3、

  gradient_accumulation_steps 越大,模型的权重更新就会越少,但每次更新时基于的信息量较大。更新频率减少,梯度计算更加稳定,这有助于在较少的步骤内收敛。

  gradient_accumulation_steps越大,对显存的需求越高,所以该如何选择需要基于自身需求。

  入水三秒,冰寒彻骨。距岸十米,生死一线。近日,在天津西沽公园。危急时刻,一位男子跳入冰冷湖水中。被问到女儿回家跟自己说了什么,刘玉坤笑着回答:“什么也没说,她太小,不懂。倒是亲戚朋友看见了新闻,说我‘还挺厉害’。我说我就拽了一把,换谁都得拽。”

  “信用卡也可以享受贴息了!”近日,不仅个人消费贷款贴息政策期限延长了,信用卡账单分期同样被纳入贴息范围中。对于不会特意申请某款消费贷产品、更多通过信用卡预支一定金额消费的群体来说,这次的优化政策将使信用卡分期成为他们的首选。

  近日,工商银行、农业银行、中国银行、建设银行、交通银行、邮储银行均已发布公告,落实个人消费贷款财政贴息政策优化相关服务。具体来看:一是将个人消费贷款财政贴息政策实施期限延长至2026年12月31日。二是扩大支持范围,将信用卡账单分期业务纳入支持范围。

  比亚迪起诉博主“大秦军陕团”一审判决:被告被判赔偿201万元;该博主曾编造“方程豹‘豹5’百公里油耗18升

  近期,就比亚迪起诉汽车博主姚*强一案,我司收到法院一审判决,判决认定被告编造并传播了方程豹汽车的虚假信息,损害了比亚迪及方程豹品牌的商业信誉及商品声誉,构成商业诋毁。

  特朗普声称要防止中国染指加密货币领域,外交部:中国始终积极开展多双边货币金融合作

  1月22日,外交部发言人郭嘉昆主持例行记者会。有外媒记者提问,美国总统特朗普在达沃斯表示,他致力于保持美国在加密货币领域的领先地位,必须采取措施防止中国染指该领域。中方对此有何评论?

  为切实维护消费者合法权益,促进产业高质量发展,国务院食安办组织国家卫生健康委、市场监管总局等部门起草了《食品安全国家标准 预制菜》《预制菜术语和分类》草案;会同市场监管总局、商务部等部门起草了关于推广餐饮环节菜品加工制作方式自主明示的公告,将于近日向社会公开征求意见。

  日本新政党“中道改革联合”正式成立,即将在众议院选举中作为最大在野党对抗高市早苗阵营

  由日本在野党立宪与公明党组建的新政党“中道改革联合”22日下午在东京举行建党大会,宣告该党正式成立。在即将举行的众议院选举中,该党将作为最大在野党与执政党阵营争夺议席。

  1月22日,中央纪委国家监委网站发布消息:自然资源部原党组成员,国家林业和草原局原党组书记、局长张建龙涉嫌严重违纪违法,目前正接受中央纪委国家监委纪律审查和监察调查。

  美国总统特朗普在达沃斯世界经济论坛上演戏剧性转向,在短短数小时内从威胁动武和加征关税转为寻求通过谈判解决格陵兰问题。

  1月12日,G7所有成员国,一共11个国家的财长或内阁级官员齐聚一堂,会议议题只有一个,稀土,更准确地说是如何减少对中国稀土的依赖。

搜索