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
启动成功!
到此,微调环境以及搭建完毕,接下来我们就可以整理训练数据集,开始训练了。
相关文章:

Ubuntu 服务器Llama Factory 搭建DeepSeek-R1微调训练环境
1.首先了解一下什么是LLM微调 LLM 微调指的是在已经预训练好的大型语言模型基础上,使用特定的任务数据或领域数据,通过进一步的训练来调整模型的参数,使其在特定任务或领域上能够表现得更好。简单来说,就是对一个已经具备了丰富语…...
【redis】redis内存管理,过期策略与淘汰策略
一:Redis 的过期删除策略及处理流程如下: 1. 过期删除策略 Redis 通过以下两种策略删除过期键: 1.1 惰性删除 触发时机:当客户端访问某个键时,Redis 会检查该键是否过期。执行流程: 客户端请求访问键。…...

RabbitMQ学习—day6—死信队列与延迟队列
目录 死信队列 1. 死信的概念 2. 死信的来源 实战演练 1. 消息TTL过期 2. 队列达到最大长度 3. 消息被拒绝 延迟队列 概念 使用场景 TTL的两种设置 死信队列 1. 死信的概念 1.1 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的…...

seacmsv9联合注入数据以及绕过 ORDERBY
seacmsv9联合注入数据 php源码 <?php session_start(); require_once("../../include/common.php"); $id (isset($gid) && is_numeric($gid)) ? $gid : 0; $page (isset($page) && is_numeric($page)) ? $page : 1; $type (isset($type) …...
day58 第十一章:图论part08
拓扑排序精讲 关键: 先找到入度为0的节点,把这些节点加入队列/结果,然后依次循环再找。 #include <iostream> #include <vector> #include <queue> #include <unordered_map> using namespace std; int main() {int …...

网络安全-openssl工具
OpenSSl是一个开源项目,包括密码库和SSL/TLS工具集。它已是在安全领域的事实标准,并且拥有比较长的历史,现在几乎所有的服务器软件和很多客户端都在使用openssl,其中基于命令行的工具是进行加密、证书管理以及测试最常用到的软件。…...
Java面试第六山!《MySQL基础知识点》
一、引言 MySQL 作为一款广泛使用的开源关系型数据库管理系统,在软件开发领域占据着重要地位。无论是小型项目还是大型企业级应用,都能看到 MySQL 的身影。今天就来和大家分享 MySQL 的相关知识,帮助大家更好地应对日常开发和面试。 二、My…...
云计算中的API网关是什么?为什么它很重要?
在云计算架构中,API网关(API Gateway)是一个重要的组件,主要用于管理、保护和优化不同服务之间的接口(API)通信。简单来说,API网关就像是一个中介,它充当客户端和后端服务之间的“桥…...
【WebGL】fbo双pass案例
双pass渲染案例(离线渲染一个三角面,然后渲染到一个占满屏幕的矩阵上) 离线渲染如何需要开启深度测试的话,需要额外操作,这里不展开 <!DOCTYPE html> <html lang"en"><head><meta ch…...

Unity面板介绍_层级面板(23.1.1)
一、Inspector(检视面板) 显示当前选定游戏对象附加的组件及其属性信息。为重要游戏物体选择图标 二、面板详情...
详解Nginx 配置
一、Nginx 介绍 Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件(IMAP/POP3)代理服务器。它由俄罗斯的程序设计师 Igor Sysoev 所开发,自 2004 年发布以来,凭借其高性能、低内存消耗、高并发处理能力等特点…...

数据库系统概念
1. 绪论 数据库的基本概念: 数据(data): 数据库中存储的基本对象, 可以是文字, 声音, 图片, 视频等。 数据库(DB): 概括来说就是永久存储, 有组织, 可共享的大量数据的集合。 数据库管理系统(DBMS): 和操作系统一样是计算机基础软件, 主要有数据定义语言(DDL, 对数据对象的组…...

51单片机学习之旅——定时器
打开软件 1与其它等于其它,0与其它等于0 1或其它等于1,0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作,高四位保持,低四位清零,高四位定时器1,低四位定时器0 TMODTMOD|0x01;//0x010000 0…...

一台服务器将docker image打包去另一天服务器安装这个镜像
一台服务器将docker image打到去另一天服务器安装这个镜像 1. 打包2.另一台服务器执行 1. 打包 docker save -o nebula-graph-studio.tar harbor1.vm.example.lan/dockerio/vesoft/nebula-graph-studioxxx.tar 是打包好的文件 后面的是 docker image 2.另一台服务器执行 docke…...
QT串口通信之二,实现单个温湿度传感器数据的采集(采用Qt-modbus实现)
接上 QT串口通信之一,实现单个温湿度传感器数据的采集 上述文章中用QSerialPort实现了温湿度传感器的采集,实际上比较麻烦的,因为需要自定义解析帧, 接下来,用Qt-modbus-封装度更高的协议,来实现温湿度的采集; #include "MainWindow.h" #include "ui_M…...

基于SpringBoot的校园消费点评管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

【小沐学Java】VSCode搭建Java开发环境
文章目录 1、简介2、安装VSCode2.1 简介2.2 安装 3、安装Java SDK3.1 简介3.2 安装3.3 配置 4、安装插件Java Extension Pack4.1 简介4.2 安装4.3 配置 结语 1、简介 2、安装VSCode 2.1 简介 Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在桌面上…...

《操作系统 - 清华大学》8 -4:进程管理:进程控制结构
深度剖析进程控制块:操作系统进程管理的核心关键 在操作系统的复杂体系中,进程控制块(PCB)是实现高效进程管理的关键所在。接下来,将从多个维度深入剖析进程控制块,帮助更好地理解其在操作系统中的重要作用…...
RPC 框架项目剖析
RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节,此项目基于cpp语言 大概三千行左右,用于学习目的。 项目链接:rpc项目 项目底层类 1.抽象消息类 描述: 各种消息的基类 属性: 消息id,消息类型…...
C++ Boost面试题大全及参考答案
目录 boost::thread_group 如何实现批量线程管理? 解释 boost::asio 中 proactor 模式的设计原理 使用 boost::atomic 实现无锁环形缓冲区 boost::mutex 与 std::mutex 在异常安全上的差异 如何用 boost::condition_variable 实现生产者 - 消费者模型 当 boost::shared_p…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...