Ubuntu 服务器Llama Factory 搭建DeepSeek-R1微调训练环境

1.首先了解一下什么是LLM微调

LLM 微调指的是在已经预训练好的大型语言模型基础上,使用特定的任务数据或领域数据,通过进一步的训练来调整模型的参数,使其在特定任务或领域上能够表现得更好。简单来说,就是对一个已经具备了丰富语言知识的通用大模型进行 “个性化” 调整,以适应更具体的应用场景和需求。

1.1.目的

  • 提高特定任务性能:对于像文本生成、机器翻译、问答系统等具体任务,通过微调可以让模型在这些任务上的准确性、流畅性等指标得到显著提升。例如在机器翻译中,微调能使模型更好地处理特定语言对之间的语法、词汇差异,提高翻译质量。

  • 适配特定领域:不同领域有其独特的术语、语言风格和知识体系,如医疗、法律领域等。微调可以让模型学习并适应这些领域特点,生成更符合领域规范和需求的文本。比如在医疗领域,经过微调的模型能够准确理解和处理医学术语,为医疗诊断、病历生成等任务提供更专业的支持。

  • 减少计算资源消耗:相比从头训练一个大型语言模型,微调通常只需要较少的计算资源和时间成本。因为预训练模型已经学习到了大量的通用语言知识,微调只需在其基础上进行局部调整,就能快速得到一个适用于特定任务或领域的高性能模型。

1.2.方法

  • 基于特定任务数据微调

    • 有监督微调:收集大量标注好的特定任务数据,这些数据包含了输入文本和对应的正确输出。例如在情感分类任务中,输入是各种文本内容,标注的输出是积极、消极或中性等情感类别。将这些数据输入到预训练模型中,通过调整模型参数,使模型的输出尽可能接近标注的正确答案,从而让模型学习到特定任务的模式和规律。

    • 无监督微调:利用大量未标注的特定任务数据进行微调。例如在文本生成任务中,虽然没有明确的输出标注,但可以通过让模型学习文本的概率分布,如预测下一个单词或句子,使模型在特定任务的文本风格和语义上更符合要求。

  • 基于领域数据微调

    • 领域自适应微调:收集目标领域的文本数据,这些数据具有该领域独特的词汇、句式和语义特点。将预训练模型在这些领域数据上进行微调,使模型能够适应领域语言风格,例如法律领域中频繁出现的法律条文、法律术语等,让模型在处理法律文本时更加准确和专业。

    • 多领域混合微调:有时一个应用可能涉及多个领域,这时可以将多个领域的数据混合起来对模型进行微调,使模型具备处理多领域知识的能力,能够根据输入文本的特点自动切换到相应的领域模式进行处理。

1.3.应用场景

  • 智能客服:通过微调可以让语言模型更好地理解和处理客户咨询的常见问题,提供准确、专业的回答,提高客户满意度。

  • 内容创作辅助:帮助写作者生成特定风格、主题的文本内容,如新闻报道、文案创作等,为创作者提供灵感和素材。

  • 智能教育:根据学生的学习情况和教材内容,生成个性化的学习资料、练习题等,辅助教学和学习。

2.常用微调技术有哪些

2.1.基于全参数的微调技术

  • 全量微调(Full Fine - Tuning)

    • 策略内容:在微调过程中,对预训练模型的所有参数都进行更新和调整。将预训练模型作为初始化,然后使用目标任务的标注数据,通过反向传播算法和优化器(如 Adam、SGD 等)来最小化任务特定的损失函数,使模型的所有参数都能够适应新的任务和数据分布。

    • 优势:能够充分利用预训练模型的知识,对模型进行全面的调整,以最大程度地适应目标任务,在数据量充足、计算资源允许的情况下,通常可以取得较好的微调效果,使模型在目标任务上达到较高的性能水平。

  • 基于对抗训练的微调

    • 策略内容:引入对抗训练机制,在微调过程中,除了原始的目标任务模型外,还引入一个对抗模型。对抗模型的目标是对目标任务模型的输出进行干扰或攻击,而目标任务模型则要努力学习以抵御对抗模型的干扰,通过两者之间的对抗博弈来优化目标任务模型的参数。

    • 优势:可以提高模型的鲁棒性和泛化能力,使模型在面对各种可能的干扰和攻击时,仍然能够保持较好的性能,增强模型对数据中的噪声、对抗样本等的抵抗力。

2.2.基于部分参数的微调技术

  • 层冻结微调(Layer Freezing)

    • 策略内容:在微调时,将预训练模型的某些层的参数冻结,不进行更新,只对模型的部分上层或特定层的参数进行训练。通常底层的层包含了一些通用的语言知识和特征,如词法、句法等信息,将其冻结可以保留预训练模型已学习到的这些基础信息,而只对上层的层进行调整,让模型学习与目标任务相关的更高级的语义和任务特定知识。

    • 优势:减少了需要训练的参数数量,降低计算成本和过拟合的风险,同时能够利用预训练模型底层的通用知识,在一些任务上可以取得较好的效果,特别是当目标任务的数据量相对较少时,层冻结微调可以有效地防止模型过拟合,提高模型的泛化能力。

  • 低秩适应微调(Low - Rank Adaptation,LoRA)及 QLoRA

    • LoRA策略内容:通过在预训练模型的权重矩阵上添加低秩分解的矩阵来进行微调。具体来说,对于预训练模型中的每一个权重矩阵,将其分解为两个低秩矩阵的乘积,并在微调过程中只训练这两个低秩矩阵的参数,而原始的预训练模型权重矩阵保持冻结。这样可以在不改变预训练模型主体结构和权重的基础上,通过学习低秩矩阵来适应新的任务,以较小的参数调整量来实现模型的微调。

    • LoRA优势:大大减少了微调时需要训练的参数数量,降低了计算成本和存储需求,同时能够在一定程度上保持预训练模型的性能,在一些自然语言处理任务中,LoRA 能够在不牺牲太多性能的前提下,实现高效的微调,并且可以方便地与其他微调技术结合使用。

    • QLoRA 策略内容:QLoRA 是基于 LoRA 发展出的一种更为高效的大型语言模型微调方法。它先对预训练语言模型采用 4 位量化技术,以 4 位的精度对模型参数进行存储和计算,极大减少内存占用。同时,在模型中引入低阶适配器,这些适配器被插入到预训练模型的不同层。在微调过程中,将固定的 4 位量化预训练语言模型中的梯度反向传播到低阶适配器,通过这种方式让适配器学习特定任务的特征,并依据任务的损失函数更新参数,实现模型对新任务的适应。

    • QLoRA 优势:QLoRA 在保持完整的 16 位微调性能的同时,显著减少内存使用,这使得在资源有限的设备上,如消费级 GPU 或内存较小的服务器,也能够对大型语言模型进行微调。低阶适配器与梯度反向传播机制,让模型微调更具效率,能够较快收敛到较好性能状态,且不会因量化和参数调整方式改变而导致性能大幅下降。

  • 参数高效微调技术(PEFT)

    • PEFT 策略内容:PEFT 作为一种 NLP 技术,专注于通过微调一小部分精心挑选的关键参数,使预训练的语言模型有效适应各种应用程序。这些关键参数与特定任务的语义、结构或功能紧密相关。在微调过程中,通过一些技术手段对抗灾难性遗忘,例如对参数调整加以约束或引入正则化项,确保模型在学习新任务时,不会丢失预训练阶段获取的重要知识。

    • PEFT 优势:该技术通过微调少量参数,大幅降低计算和存储成本,无论是训练还是部署,对硬件资源需求都更低,增强了模型扩展性与实用性。在图像分类、稳定扩散等多种模式下,PEFT 仅调整少量参数就能提供与完全微调相当的性能,为实际应用提供了高效且经济的解决方案,同时具备灵活性与通用性,可广泛应用于不同领域和任务的预训练模型微调。

3.Llama Factory介绍

LLaMA-Factory 是一个强大的大型语言模型微调框架:

  • 支持多种模型:涵盖 LLaMA、LLaVA、Mistral、Mixtral-MOE、Qwen、Qwen2-VL、Yi、Gemma、Baichuan、ChatGLM、Phi 等 100 多种模型。

  • 集成多种方法:包括(增量)预训练、(多模态)监督微调、奖励建模、PPO、DPO、KTO、ORPO 等方法,满足不同任务和场景的需求。

  • 运算精度多样:提供 16 位全量微调、冻结微调、LoRA 以及基于 AQLM/AWQ/GPTQ/LLM.int8 的 2/3/4/5/6/8 位 QLoRA 等多种精度选择,可根据硬件资源和任务要求灵活配置。

  • 采用先进算法:如 GaLore、Badam、Adam-mini、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ、Pissa 和 Agent Tuning 等,提升训练效率和模型性能。

  • 实用技巧丰富:集成了 Flash Attention-2、Unsloth、Liger Kernel、RoPE Scaling、Neftune 和 RS LoRA 等技术,优化训练过程。

  • 实验监控便捷:支持 Llama Board、TensorBoard、Weights & Biases(wandb)、MLflow、Swan Lab 等多种实验监控工具,方便用户跟踪训练过程和评估模型性能。

  • 推理速度更快:提供 OpenAI 风格的 API、Gradio UI 和基于 VLLM 的命令行界面,实现更快的并发推理,提高模型的响应速度。

4.Llama Factory安装部署(ubuntu环境)

4.1. 我的硬件资源

4.2.conda环境检查与安装

4.2.1.conda环境检查

首先确认电脑是否安装过conda

conda --version 

如果已经安装如上图,会提示当前的conda版本。如果没有安装conda会提示conda命令无法识别。

4.2.2.conda环境安装

更新系统包:

sudo apt update
sudo apt upgrade

下载Miniconda:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

 安装Miniconda:

bash Miniconda3-latest-Linux-x86_64.sh

安装完毕,初始化conda

source ~/.bashrc

最后再进行conda环境检查

conda --version 

4.3. 开始安装Llama Factory

4.3.1. 克隆代码仓库

需要在系统中安装 git 工具。如果未安装,可根据执行下面的命令进行安装。

sudo apt-get install git

使用 git 工具从 GitHub 上克隆 LLaMA - Factory 的代码仓库到本地。

git clone https://github.com/hiyouga/LLaMA-Factory.git

4.3.2. 创建虚拟环境

conda create -n llama_factory python=3.10

使用 conda 工具创建一个名为 llama_factory 的虚拟 Python 环境,并且指定 Python 版本为 3.10。虚拟环境可以隔离不同项目的依赖,避免不同项目之间的依赖冲突。

4.3.3. 激活虚拟环境

conda activate llama_factory

激活之前创建的名为 llama_factory 的虚拟环境。激活后,后续安装的 Python 包都会安装到这个虚拟环境中,而不会影响系统全局的 Python 环境。

4.3.4. 进入项目目录并安装依赖

cd LLaMA-Factory
pip install -r requirements.txt

首先使用 cd 命令进入之前克隆下来的 LLaMA-Factory 项目目录。

然后使用 pip 工具根据 requirements.txt 文件中列出的依赖项,安装项目所需的所有 Python 包。requirements.txt 文件通常包含了项目运行所需的各种库及其版本信息。

5.下载deepseek模型

模型地址:https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B

我这里选择的是32B的模型

执行命令:

GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B

然后执行命令,进入刚刚的下载目录:

cd DeepSeek-R1-Distill-Qwen-32B

 开始下载模型文件:

wget "https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/resolve/main/model-00001-of-000008.safetensors?download=true"

 我选择的32B模型一共8个模型文件,等待一一下子结束。

6.启动LLaMA-Factory WebUI界面

进入之前LLaMA-Factory下载目录。我下载到了桌面,你需要根据自己的目录进行调整

​​​​​​​cd ~/Desktop/LLaMA-Factory
CUDA_VISIBLE_DEVICES=0 python src/webui.py

​​​​​​​

出现上面的报错,才想起来我之前重新了虚拟机,需要重新激活虚拟环境。

conda activate llama_factory

再次执行启动WebUI命令

CUDA_VISIBLE_DEVICES=0 python src/webui.py

启动成功!

到此,微调环境以及搭建完毕,接下来我们就可以整理训练数据集,开始训练了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21427.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

环境变量与本地变量

目录 本地变量的创建 环境变量VS本地变量 认识完了环境变量我们来认识一下本地变量。 本地变量的创建 我们如果直接env是看不到本地变量的,因为本地变量和环境变量都具有独立性,环境变量是系统提供的具有全局属性的变量,都存在bash进程的…

智慧农业新生态 | 农业数字化服务平台——让土地生金,让服务无忧

一部手机管农事,从播种到丰收,全链路数字化赋能! 面向农户、农机手、农服商、农资商打造的一站式农业产业互联网平台,打通农资交易、农机调度、农服管理、技术指导全场景闭环,助力乡村振兴提效增收。 三大核心场景&am…

【运维自动化-作业平台】如何创建执行方案和作业模板

蓝鲸智云作业平台,以下简称作业平台或JOB平台作业模板和执行方案:将运维操作场景中涉及到的多个脚本执行或文件分发步骤组合成一个作业模板,这个作业模板尽可能把场景相关的共性逻辑都包含进去,然后再根据实际使用场景衍生出相应的…

广度优先搜索--之重生之我是蒟蒻,从入坟到入坑式讲解

广度优先搜索 1.什么是广度优先搜索? 广度优先搜索(Breadth-First Search,简称BFS)是一种遍历或搜索树和图的算法,也称为宽度优先搜索,BFS算法从图的某个节点开始,依次对其所有相邻节点进行探索和遍历&am…

CSDN文章质量分查询系统【赠python爬虫、提分攻略】

CSDN文章质量分查询系统 https://www.csdn.net/qc 点击链接-----> CSDN文章质量分查询系统 <------点击链接 点击链接-----> https://www.csdn.net/qc <------点击链接 点击链接-----> CSDN文章质量分查询系统 <------点击链接 点击链…

为AI聊天工具添加一个知识系统 之113 详细设计之54 Chance:偶然和适配 之2

本文要点 要点 祖传代码中的”槽“ &#xff08;占位符变量&#xff09; 和 它在实操中的三种槽&#xff08;占据槽&#xff0c;请求槽和填充槽&#xff0c; 实时数据库&#xff08;source&#xff09;中数据(流入 ETL的一个正序流程 行列并发 靶向整形 绑定变量 &#xff09…

微信小程序实现拉卡拉支付

功能需求&#xff1a;拉卡拉支付&#xff08;通过跳转拉卡拉平台进行支付&#xff09;&#xff0c;他人支付&#xff08;通过链接进行平台跳转支付&#xff09; 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…

Spring框架基本使用(Maven详解)

前言&#xff1a; 当我们创建项目的时候&#xff0c;第一步少不了搭建环境的相关准备工作。 那么如果想让我们的项目做起来方便快捷&#xff0c;应该引入更多的管理工具&#xff0c;帮我们管理。 Maven的出现帮我们大大解决了管理的难题&#xff01;&#xff01; Maven&#xf…

unity学习46:反向动力学IK

目录 1 正向动力学和反向动力学 1.1 正向动力学 1.2 反向动力学 1.3 实现目标 2 实现反向动力 2.1 先定义一个目标 2.2 动画层layer&#xff0c;需要加 IK pass 2.3 增加头部朝向代码 2.3.1 专门的IK方法 OnAnimatorIK(int layerIndex){} 2.3.2 增加朝向代码 2.4 …

力扣hot100——螺旋矩阵 超简单易懂的模拟搜索方法

给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 解法思路&#xff1a; // 模拟螺旋搜索设定四个边界// left right// top |————————————————|// | |// |…

格瑞普推出革命性半固态电池,为行业无人机续航注入未来动力

引言&#xff1a;行业痛点与解决方案 在行业无人机快速发展的今天&#xff0c;续航时间短、安全性不足以及效率低下等问题始终是行业难题。无论是物流运输、电力巡检&#xff0c;还是农业植保&#xff0c;用户对更持久、更安全、更高效的电池技术充满期待。 今天&#xff0c;…

C++【多态】

通俗来说&#xff0c;多态就是指同一个操作或者行为在不同的对象上可以有不同的表现形式或实现方式。举个例子&#xff1a;以 “吃” 这个行为为例&#xff0c;不同的动物有不同的 “吃” 的方式和内容。比如&#xff0c;猫吃鱼、狗吃肉、兔子吃草&#xff0c;虽然都是 “吃” …

《道德经的启示:人际关系交往的智慧》

第二章:人际关系交往的智慧 🤝 引言:现代人际关系的困境 🌟 时代背景:超连接时代的人际迷思 🌐 在这个前所未有的超连接时代,我们似乎比任何时候都更"在线"、更"联系",但真正的人际连接却越发稀缺。你是否也有过这样的困扰: 🏢 职场上愈是…

一个前端,如何同时联调多个后端

文章目录 场景解决方案思路实现步骤创建项目目标前端配置安装cross-env配置vue.config.js配置package.json 测试 场景 一个前端&#xff0c;需要同时和N个后端联调 一个需求里有若干个模块&#xff0c;分别给不同的后端开发&#xff0c;前端需要和N个后端联调 本地开启一个端…

HTML5+CSS多层级ol标签序号样式问题

在CSS中&#xff0c;ol标签用于创建有序列表&#xff0c;而多层级的ol标签可以通过CSS实现不同的序号样式。以下是一些常见的问题和解决方案&#xff1a; 1. 多层级ol的序号格式问题 默认情况下&#xff0c;多层级的ol标签会自动继承父级的序号格式&#xff0c;但有时我们可能…

DeepSeek全栈技术体系解密:从算法源码到企业级智能体开发实战

在AGI技术加速演进的时代背景下&#xff0c;DeepSeek作为行业级大模型的代表&#xff0c;正在重塑智能系统的开发范式。本课程体系首次系统性披露DeepSeek技术栈的完整实现细节&#xff0c;涵盖从底层算法创新、工程架构设计到企业级落地的全链条知识体系。 课程核心价值矩阵 …

CTA 血管重建,三维重建,血管三维重建

CT检查在临床中应用十分广泛&#xff0c;CT以其扫描速度快&#xff0c;对骨头及钙化敏感而具有部分优势。 CTA是CT血管成像&#xff0c;是CT临床应用中一个非常重要的部分&#xff0c;由于血管及其背景软组织自然对比差&#xff0c;常规CT平扫往往难以显示血管。在行CTA检查的时…

基础排序算法

冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;一种交换排序&#xff0c;它的基本思想是&#xff1a;两两比较相邻记录的关键字&#xff0c;如果反序则交换&#xff0c;直到没有反序的记录为止。 以下代码是改进的冒泡算法&#xff0c;在排序好了之后可以直接跳出循环…

什么是神经网络?

0 前言 神经网络是一种人工智能方法&#xff0c;用于教计算机以受人脑启发的方式处理数据。这是一种机器学习过程&#xff0c;称为深度学习&#xff0c;它使用类似于人脑的分层结构中的互连节点或神经元。它可以创建自适应系统&#xff0c;计算机使用该系统来从错误中进行学习…

MySQL 主从复制原理及其工作过程

一、MySQL主从复制原理 MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器&#xff08;主服务器&#xff0c;Master&#xff09;复制到一个或多个 MySQL 数据库服务器&#xff08;从服务器&#xff0c;Slave&#xff09;的技术。以下简述其原理&#xff0c;主要包含三个核…