11-Xtuner具体使用以及LLama Factory与Xtuner多卡微调大模型

11-Xtuner具体使用以及LLama Factory与Xtuner多卡微调大模型
训练前



500轮训练后



xtuner命令不存在

版本:0.2.0存在

回退到0.2.0rc0版本,注意这个版本的依赖固定

一、大模型分布式训练的基本概念

1.1 为什么需要分布式训练?

模型规模爆炸:现代大模型(如GPT-3、 LLaMA等)参数量达千亿级别,单卡GPU无法存储完整模型。

计算资源需求:训练大模型需要海量计算(如GPT-3需数万GPU小时),分布式训练可加速训练过程。

内存瓶颈:单卡显存不足以容纳大模型参数、梯度及优化器状态。

1.2 分布式训练的核心技术

数据并行(Data Parallelism)

原理:将数据划分为多个批次,分发到不同设备,每个设备拥有完整的模型副本。

同步方式:通过All-Reduce操作同步梯度(如PyTorch的DistributedDataParallel)。

挑战:通信开销大,显存占用高(需存储完整模型参数和优化器状态)。

模型并行(Model Parallelism)

原理:将模型切分到不同设备(如按层或张量分片)。

类型:

横向并行(层拆分):将模型的层分配到不同设备。

纵向并行(张量拆分):如Megatron-LM将矩阵乘法分片。

挑战:设备间通信频繁,负载均衡需精细设计。

流水线并行(Pipeline Parallelism)

原理:将模型按层划分为多个阶段(stage),数据分块后按流水线执行。

优化:微批次(Micro-batching)减少流水线气泡(Bubble)

挑战:需平衡阶段划分,避免资源闲置。

混合并行(3D并行)

组合策略:结合数据并行、模型并行、流水线并行,典型应用如训练千亿级模型

案例:微软Turing-NLG、Meta的LLaMA-2。

二、DeepSpeed框架介绍

2.1 DeepSpeed概述

定位:微软开源的分布式训练优化框架,支持千亿参数模型训练。

核心目标:降低大模型训练成本,提升显存和计算效率。

集成生态:与PyTorch无缝兼容,支持Hugging FaceTransformers库

2.2 核心技术

ZeRO(Zero Redundancy Optimizer)

原理:通过分片优化器状态、梯度、参数,消除数据并行中的显存冗余。

阶段划分:

ZeRO-1:优化器状态分片。

ZeRO-2:梯度分片 + 优化器状态分片。

ZeRO-3:参数分片 + 梯度分片 + 优化器状态分片。

优势:显存占用随设备数线性下降,支持训练更大模型。

2.3显存优化技术

梯度检查点(Activation Checkpointing) 用时间换空间,减少激活值显存占用。

CPU Offloading:将优化器状态和梯度卸载到CPU内存。

混合精度训练:FP16/BP16与动态损失缩放(Loss Scaling)

其他特性

大规模推理支持:模型并行推理(如ZeRO-Inference)。

自适应通信优化:自动选择最佳通信策略(如All-Reduce vs. All-Gather)。 (

2.4 优势与特点

显存效率高:ZeRO-3可将显存占用降低至1/设备数。

易用性强:通过少量代码修改即可应用(如DeepSpeed配置JSON文件)。

扩展性优秀:支持千卡级集群训练。

开源社区支持:持续更新,与Hugging Face等生态深度集成。

2.5 使用场景

训练百亿/千亿参数模型(如GPT-3、Turing-NLG) C

资源受限环境:单机多卡训练时通过Offloading扩展模型规模。

快速实验:通过ZeRO-2加速中等规模模型训练。

三、xtuner微调大模型教程

 1.构建虚拟环境

 拉取 XTuner,过程大约需要几分钟

git clone https://github.com/InternLM/xtuner.git
# 查看pip缓存大小和位置 pip cache info # 清理整个pip缓存 pip cache purge
 建议执行
conda create --name xtuner-env python=3.10 -y conda activate xtuner-env 
先查看显卡的版本,然后去官网下载对应的



https://pytorch.org/get-started/previous-versions/



然后安装依赖的软件,这步需要的时间比较长。注意版本号

cd xtuner pip install -e '.[all]'
如果环境不通,请看附件

等以上所有步骤完成后,再进行下面的操作。

2.下载模型

官方支持的模型名称

3.数据集

xtuner支持很多数据集,但是性能更高的是默认的数据集
社区数据集json样式



xtune的格式

转换脚本

4.微调

创建微调训练相关的配置文件在左侧的文件列表,xtuner 的文件夹里,打开

xtuner/xtuner/configs/internlm/internlm2_chat_1_8b/internlm2_chat_1_8b_qlora_alpaca_e3.py, 复制一份至根目录。

这里有预训练、微调的模版

打开这个文件,然后修改预训练模型地址,数据文件地址等。

注意对话模版是否匹配



权重的保存,500次,存最后两个(要存第三个,会自己删除第一个),如果想全保存,2改成-1



Q_lora的设置,如果不用将dict改成None
lora的参数

### PART 1中 #预训练模型存放的位置 pretrained_model_name_or_path = '/root/llm/internlm2-1.8b-chat'#基座模型路径 #微调数据存放的位置 alpaca_en_path = "tatsu-lab/alpaca" # 训练中最大的文本长度 max_length = 512 # 每一批训练样本的大小 batch_size = 2 #最大训练轮数 max_epochs = 3 #验证数据 evaluation_inputs = [    '只剩一个心脏了还能活吗?', '爸爸再婚,我是不是就有了个新娘?',    '樟脑丸是我吃过最难吃的硬糖有奇怪的味道怎么还有人买','马上要上游泳课了,昨天洗的泳裤还没 干,怎么办',    '我只出生了一次,为什么每年都要庆生' ] # PART 3中 dataset=dict(type=load_dataset, path="json", data_files=alpaca_en_path) dataset_map_fn=None 
中断后基于当前路径参数,继续训练,,,,将五百一轮保存的参数放在这

5.启动微调

在当前目录下,输入以下命令启动微调脚本

单卡:

xtuner train 配置文件的路径
多卡

指定显卡 、命令、 配置文件、命令、制定deepspeed类型
多卡指定显卡
启动后日志输出,权重保存目录

训练预定批次之后,就会输出配置文件的测试问题,直观的看到模型的训练情况

6.模型转换

模型训练后会自动保存成 PTH 模型(例如 iter_2000.pth,如果使用了 DeepSpeed,则将会是一个 文件夹,指定这个文件夹就好),我们需要利用 xtuner convert pth_to_hf 将其转换为 HuggingFace 模型,以便于后续使 用。具体命令为:

${FINETUNE_CFG} ${PTH_PATH} ${SAVE_PATH}

配置文件路径(训练和转换是同一个配置文件)、训练后模型的路径、希望保存到

7.模型合并

如果使用了 LoRA / QLoRA 微调,则模型转换后将得到 adapter 参数,而并不包含原 LLM 参数。如果您 期望获得合并后的模型权重(例如用于后续评测),那么可以利用 xtuner convert merge :${LLM}​ - 原始预训练模型的路径这是未经微调的基础模型(如 Qwen-7B、Llama-2-7B 等)通常直接从 Hugging Face 下载或本地已有的原始模型${LLM_ADAPTER}​ - 微调后的适配器权重路径转换后的模型目录${SAVE_PATH}​ - 合并后的完整模型保存路径将原始模型和适配器权重合并后生成的新模型保存位置合并后的模型可以独立使用,不需要额外加载适配器

四、了解LLamaFactory多卡微调大模型

无法自主选择参与训练的gpu,默认全选

DeepdSpeed

none,不使用分布式微调

2、3对应 ZeRO

将优化器状态和梯度卸载到CPU内存。

五、xtuner 双/单卡微调实操

环境请看,三、1

1、租用服务器

去这个网站便宜,3090 24G,0.8/小时
https://gpushare.com/auth/register?user=17*****3793&fromId=b83b02e15e64&source=linkhttps://gpushare.com/auth/register?user=17*****3793&fromId=b83b02e15e64&source=link简单体验一下,然后就不用了,这里服务器就简单点

主播被制裁了,采用我之前租用的,3090 24G操作一下,本质上没区别就是命令的区别


2、模型选择、下载

为了快速体验,这里选择qwen1.5 0.5B





3、训练数据集

这里直接粘贴,注意数据格式的转换

这只展示一点,全部太大了

4、微调设置

找好模型对应的配置文件模版





由于环境问题,修改配置文件,绕过对 bitsandbytes 的依赖

改好的配置文件

5、启动训练

确保,保存的目录为空

注意所在目录和绝对路径

单卡:

正在训练



每50次测试一次,每100轮保存参数

6、模型转换

adapter_config.json:LoRA 配置(如 rank、alpha、target_modules 等),供 PEFT 库读取。adapter_model.bin:训练得到的 LoRA 权重。README.md:xtuner 自动生成的说明文件,记录训练配置和基础模型信息。xtuner_config.py:训练时使用的完整配置文件备份(便于追溯)。

7、模型合并

config.json:模型配置(架构、参数等)pytorch_model.bin:合并后的完整模型权重tokenizer.jsonvocab.jsonmerges.txt 等:分词器所需文件generation_config.json:生成参数(如 max_new_tokens 等)chat_template.jinja:对话模板(Qwen 风格)added_tokens.jsonspecial_tokens_map.json:特殊 token 映射

附件:

xtuner中文文档

https://xtuner.readthedocs.io/zh-cn/latest/index.htmlhttps://xtuner.readthedocs.io/zh-cn/latest/index.html

一、bitsandbytes 升级1.1 问题背景初始环境使用 bitsandbytes==0.45.0,与 PyTorch 2.10.0 自带的 triton==3.6.0 不兼容(triton.ops 缺失)。且 bitsandbytes==0.45.0 没有为 CUDA 12.8 提供预编译二进制,导致导入失败。1.2 升级步骤

bash# 1. 强制卸载旧版本 pip uninstall bitsandbytes -y # 2. 清理 pip 缓存(避免使用旧 wheel) pip cache purge # 3. 安装最新兼容版本(>=0.47.0 已支持 triton 3.x 和 CUDA 12.8) pip install bitsandbytes>=0.47.0 --no-cache-dir

1.3 验证版本pip show bitsandbytes | grep Version

期望输出 Version: 0.49.2 或更高。

二、依赖冲突解决2.1 冲突情况xtuner 在 requirements/runtime.txt 中固定要求 bitsandbytes==0.45.0,而实际安装了 0.49.2,pip 会发出警告。该警告可以安全忽略,因为 0.49.2 是后向兼容的,且已解决核心问题。2.2 处理方式忽略警告,继续使用高版本。可选:修改 xtuner/requirements/runtime.txt 中的 bitsandbytes==0.45.0 为 bitsandbytes>=0.47.0,然后重新安装 xtuner(pip install -e .)以消除警告。三、测试办法3.1 测试 bitsandbytes 导入

bashpython -c "import bitsandbytes; print(f'bitsandbytes 版本: {bitsandbytes.__version__}')"

无报错则成功。3.2 测试 triton 版本(确认与 torch 匹配)pip show triton | grep Version

应输出 Version: 3.6.0(与 torch 2.10.0 一致)。3.3 测试完整环境导入

python -c "import torch, bitsandbytes, transformers, mmengine, xtuner; print('环境正常')"3.4 测试训练启动(不实际运行)

python -m xtuner.tools.train ../day12/my_config.py --help

如果显示帮助信息,说明配置加载无语法错误。四、源码修改(解决 DS_CEPH_DIR 缺失)4.1 错误现象ImportError: cannot import name 'DS_CEPH_DIR' from 'xtuner'

由于 xtuner/engine/_strategy/deepspeed.py 中导入了该变量,但 xtuner/__init__.py 未定义。4.2 修复方法

编辑 /hy-tmp/xtuner/xtuner/__init__.py,在文件末尾添加:

DS_CEPH_DIR = ''

保存后重新运行训练即可。4.3 验证修复python -c "from xtuner import DS_CEPH_DIR; print(DS_CEPH_DIR)"

应输出空字符串,无报错。

Read more

Qwen3-VL-8B Web系统实操手册:proxy_server.py CORS配置与安全加固

Qwen3-VL-8B Web系统实操手册:proxy_server.py CORS配置与安全加固 1. 系统定位与核心价值 你正在部署的不是一个简单的网页聊天框,而是一套开箱即用、生产就绪的AI对话基础设施。它把通义千问最新视觉语言模型(Qwen3-VL-8B)的能力,通过一个轻量但健壮的代理层,稳稳地交到用户浏览器手中。 很多人卡在第一步:前端页面能打开,但发消息就报错“CORS blocked”;或者本地跑通了,一放到局域网里别人就访问不了;更常见的是,刚调通API,转头就发现日志里全是可疑的400/403请求——这些都不是模型的问题,而是代理服务器这道“门卫”的配置没到位。 本手册不讲大道理,只聚焦一件事:让你的 proxy_server.py 既通得开,又守得住。我们会从零开始梳理它的CORS策略设计逻辑,手把手调整关键参数,再叠加三层实用级安全加固措施。所有操作都基于你已有的项目结构,无需重装、不改架构,改几行代码、加几个配置,就能让系统从“能用”升级为“

ofa_image-caption代码实例:扩展支持WebP格式与EXIF元数据保留功能

ofa_image-caption代码实例:扩展支持WebP格式与EXIF元数据保留功能 1. 引言 你有没有遇到过这种情况?从手机或相机里导出一堆照片,想快速整理归档,却要一张张手动写描述,费时又费力。或者,在做内容创作时,需要为大量图片配上精准的英文说明,人工处理效率极低。 今天要介绍的这个工具,就是来解决这个痛点的。它叫 ofa_image-caption,是一个纯本地运行的图像描述生成工具。简单来说,你给它一张图,它就能用英文告诉你这张图里有什么。 这个工具的核心是基于一个叫 OFA 的模型,这个模型在图像描述生成领域表现很不错。我们之前发布的版本已经能很好地处理 JPG、PNG 这些常见格式了。但最近,越来越多的用户开始使用 WebP 这种更高效的图片格式,同时,很多摄影师和内容创作者也希望生成的描述能保留图片拍摄时的原始信息(比如拍摄时间、相机型号)。 所以,我们对这个工具进行了一次重要的升级。这篇文章,我就带你手把手看看,我们是如何在原有代码基础上,扩展了对 WebP 格式的支持,并实现了 EXIF 元数据的保留功能。

【前端实战】多进制奇偶校验检查器(HTML+CSS+JS)完整实现,附源码

【前端实战】多进制奇偶校验检查器(HTML+CSS+JS)完整实现,附源码

在数字通信、数据传输及嵌入式开发中,奇偶校验是一种简单高效的差错检测方法,通过判断二进制数据中“1”的个数为奇数或偶数,快速校验数据是否存在传输错误。日常开发中,我们常需要对不同进制(二进制、八进制、十进制、十六进制)的数字进行奇偶校验,手动计算繁琐且易出错。 今天就给大家分享一款纯前端实现的「多进制奇偶校验检查器」,支持4种常用进制切换、自动识别进制前缀(如0x、0o、0b)、偶校验/奇校验可选,无需后端依赖,打开浏览器即可使用。同时拆解核心代码逻辑,适合前端新手练习DOM操作、正则验证及进制转换相关知识点。 先看效果 运行后 一、工具核心功能介绍 这款多进制奇偶校验检查器聚焦“便捷、精准、易用”,核心功能如下,覆盖日常开发中的奇偶校验场景: * 多进制支持:兼容二进制(2)、八进制(8)、十进制(10)、十六进制(16),可自由切换 * 智能前缀识别:

前端网页开发学习(HTML+CSS+JS)有这一篇就够!

前端网页开发学习(HTML+CSS+JS)有这一篇就够!

目录 HTML教程 ▐ 概述 ▐ 基础语法 ▐ 文本标签 ▐ 列表标签  ▐ 表格标签 ▐ 表单标签 CSS教程 ▐ 概述 ▐ 基础语法 ▐ 选择器 ▐ 修饰文本 ▐ 修饰背景 ▐ 透明度 ▐ 伪类 ▐ 盒子模型 ▐ 浮动 ▐ 定位 JavaScript教程 ▐ 概述 ▐ 基础语法 ▐ 函数 ▐ 事件 ▐ 计时   ▐ HTML DOM html css js三者之间的关系 HTML教程 ▐ 概述 HTML是HyperText  Markup  Language的缩写,即超文本标记语言。它为我们提供了许多功能不同的标签,最终运行时由浏览器对标签进行解析,呈现出不同标签的样子。 ▐ 基础语法 注释:  <!--   -->        ( Ctrl + / ) <body> <