大模型Qwen3企业业务数据微调之初体验

1. 业务需求

技术人员常常是保守的,我们认为根本没必要用这种技术的,然而业务市场人员却高喊着要拥抱大模型技术,特别最近OpenClaw这只小龙虾在中国大火以来,是业务人员首先使用OpenClaw起来,听到深圳龙岗区有百万企业扶持基金,恨不得跑去开一个皮包公司,个别客户也提出要在企业内网里搞一个大模型,更让业务人员有理由必须要搞。

具体是什么业务需求必须要上大模型都没搞清楚,公司就买一块GPU过来要搞起来,希望一周后能上大模型系统给客户演示,多少年过去了,大跃进依然时不时刺激我们一下积极性。

就我本人来说,个人对deepseek是怀有深深敬意的,各家头部公司的大模型网页版,确实比以前的搜索功能强大好用,现在编程时基本不用某度搜索来查资料了。但是,企业业务系统要上大模型技术,解决客户问答、企业知识库、文档生成等,投入这么多软件硬件成本和开发成本,最后就搞出这些应用来,从投入产出比率来看值得不值得?

2. 软硬件环境

2.1 服务器1

我们从2014年开始就做人脸识别系统,对GPU一直是有用的,故公司有测试服务器,都是线上淘汰下来的,其中一台准备使用,配置情况如下:

~$ nvcc --version

nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2021 NVIDIA Corporation

Built on Mon_May__3_19:15:13_PDT_2021

Cuda compilation tools, release 11.3, V11.3.109

Build cuda_11.3.r11.3/compiler.29920130_0
~$ nvidia-smi

Wed Mar 4 18:29:41 2026

+-----------------------------------------------------------------------------+

| NVIDIA-SMI 465.19.01 Driver Version: 465.19.01 CUDA Version: 11.3 |

|-------------------------------+----------------------+----------------------+

| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |

| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |

| | | MIG M. |

|===============================+======================+======================|

| 0 NVIDIA Tesla P4 On | 00000000:05:00.0 Off | 0 |

| N/A 38C P8 7W / 75W | 0MiB / 7611MiB | 0% Default |

| | | N/A |

+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+

| Processes: |

| GPU GI CI PID Type Process name GPU Memory |

| ID ID Usage |

|=============================================================================|

| No running processes found |

+-----------------------------------------------------------------------------+

首先安装了pytorch,自然是可以成功的:

pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113

其次安装了Ollama,也是可以运行的,但是ollama pull下deepseek和qwen几个版本,运行起来总是无法使用到GPU,用CPU运行起来慢到无法使用了。

最后安装vLLM, vLLM官网:https://vllm.ai/

源代码地址:https://github.com/vllm-project/vllm

分析它发布的各个版本支持的CUDA,最低都是11.8,CUDA11.3根本从来都没支持过。

而且vLLM还不支持CPU版本部署,从当前发布的包来安装,基本没法玩了,只能申请新购买一块。

2.2 服务器2

我们在豆包上调研了一下:

最终选定nvidia L20, 基于的理由是这款要稳定一些,显存也最大,48G,带宽速度对企业内部应用不是特别需要,在https://www.nvidia.cn/drivers/上搜索了一下:

软硬件安装完毕之后,具体配置情况如下:

~/llm$ cat /proc/version

Linux version 6.8.0-106-generic (buildd@lcy02-amd64-074) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #106-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 6 07:58:08 UTC 2026
~/llm$ nvcc --version

nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2023 NVIDIA Corporation

Built on Fri_Jan__6_16:45:21_PST_2023

Cuda compilation tools, release 12.0, V12.0.140

Build cuda_12.0.r12.0/compiler.32267302_0
~/llm$ nvidia-smi

Mon Mar 16 02:13:28 2026

+-----------------------------------------------------------------------------------------+

| NVIDIA-SMI 590.48.01 Driver Version: 590.48.01 CUDA Version: 13.1 |

+-----------------------------------------+------------------------+----------------------+

| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |

| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |

| | | MIG M. |

|=========================================+========================+======================|

| 0 NVIDIA L20 Off | 00000000:84:00.0 Off | 0 |

| N/A 32C P8 26W / 350W | 0MiB / 46068MiB | 0% Default |

| | | N/A |

+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+

| Processes: |

| GPU GI CI PID Type Process name GPU Memory |

| ID ID Usage |

|=========================================================================================|

| No running processes found |

+-----------------------------------------------------------------------------------------+

3. 安装基础库

默认安装Python,版本如下:

~/llm$ python -V

Python 3.12.3

在虚拟环境里安装训练环境吧:

sudo apt install python3.12-venv

~/llm$ python -m venv qwen3

~/llm$ ls

qwen3

~/llm$ source qwen3/bin/activate

设置pip默认源为清华大学镜像源, 不然从默认源下载太慢:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

开始在虚拟环境下进行安装PyTorch库:

pip install torch torchvision

pip install transformers datasets accelerate peft trl

pip install deepspeed

pip install bitsandbytes

pip install flash-attn

pip install vllm

以上安装都没有指定版本号,这就是用新硬件的好处,省事很多。

TorchTorchvision 是 PyTorch 深度学习生态系统的两个核心组件,主要用于构建和训练神经网络,特别是在计算机视觉领域。

datasets 是数据集加载和处理库,提供对 Hugging Face Hub 上数万种数据集的便捷访问。

accelerate 是分布式训练和混合精度训练的简化工具,零代码改动实现单机多卡、多机多卡训练,自动处理混合精度训练(FP16/BF16)。

peft 是参数高效微调库,实现各种"只训练少量参数"的微调方法,大幅降低显存和计算需求。

trl 是基于 Transformer 的强化学习训练库,实现大语言模型的对齐训练(RLHF全流程)。

transformers 库是由 Hugging Face 开发的一个开源 Python 库,它是目前最流行的大语言模型(LLM)和深度学习模型工具之一。

flash-attn 是一个用于加速 Transformer 模型中注意力机制计算的 CUDA 优化库。它通过重新设计注意力计算方式,显著提升了大语言模型(LLM)的训练和推理效率。

DeepSpeed 是由微软开发的一个开源深度学习优化库,主要用于大规模分布式训练和推理。它针对 PyTorch 提供了大量优化技术,让研究人员和工程师能够更高效地训练超大模型。

bitsandbytes 是一个用于 8-bit 和 4-bit 量化 的 Python 库,主要用于 大型语言模型(LLM)的高效推理和微调。它由 Tim Dettmers 开发,是 Hugging Face 生态系统中非常重要的组件。

4. 安装LlamaFactory

LlamaFactory源代码地址:https://github.com/hiyouga/LlamaFactory,从源代码进行安装:

git clone --depth 1 https://github.com/hiyouga/LlamaFactory.git

cd LlamaFactory

pip install -e .

pip install -r requirements/metrics.txt

一切都安装成功之后,运行:

~/llm/LlamaFactory$ llamafactory-cli webui

有屏幕日志打印:

Visit http://ip:port for Web UI, e.g., http://127.0.0.1:7860

* Running on local URL: http://0.0.0.0:7860

* To create a public link, set `share=True` in `launch()`.

在浏览器中输入地址:http://192.168.0.24:7860/,打开:

5. 准备训练数据集

上图是LlamaFactory工程下data目录的情况,首次训练就用最简单的alpaca数据格式,把开发部门任务单系统中任务单导出来做成一个简单的小数据集alpaca_issue_data.json:

最后在dataset_info.json中添加一个配置项:

我们在webui界面上就可以看到新配置的数据集:

6. 微调训练初体验

第一次微调训练顾不得效果如何,能把训练跑完就OK, 太多参数选择,好在现在有这么多LLM网页版使用,同一个问题在好几家平台上发起咨询,问题基本都能解决,LLM取代传统的搜索引擎确实强大好用,下面简单记录一下碰到的小白问题:

File "/data/llm/LlamaFactory/src/llamafactory/hparams/parser.py", line 401, in get_train_args _verify_model_args(model_args, data_args, finetuning_args)

File "/data/llm/LlamaFactory/src/llamafactory/hparams/parser.py", line 177, in _verify_model_args raise ValueError("Please use scripts/pissa_init.py to initialize PiSSA for a quantized model.") ValueError: Please use scripts/pissa_init.py to initialize PiSSA for a quantized model.

-----》

同时开启了以下两个选项,但它们在当前版本的 LLaMA-Factory 中不能直接组合使用

  1. 量化加载 (Quantization) :选择了 4-bit (QLoRA)。
  2. PiSSA 初始化 :勾选了 Use PiSSA

解决:不勾选Use PiSSA.

File "/data/llm/qwen3/lib/python3.12/site-packages/multiprocess/pool.py", line 774, in get raise self._value ValueError: The number of videos does not match the number of <video> tokens in [{'content': '视频控件改造方案的调研', 'role': 'user'}, {'content': 'h2. 方案A:使用Qt\r\n\r\n待解决的问题:\r\n# 静态编译Qt5 [成功]\r\n# 制作简单控件并能成功在IE中加载 [完成]\r\n# 支持XP [失败]\r\n# 支持SSL [成功]\r\n\r\nh2. 方案B:使用HTML5\r\n\r\n待解决的问题:\r\n# 确定HTML5的<video>标签是否支持实时流\r\n# 将实时音视频混合为fMP4格式\r\n\r\n[[HTML5媒体服务器设计思路]]', 'role': 'assistant'}].

----》

  1. 训练数据中,有一条数据的文本内容里包含了 <video> 这个字符串(在你的例子中,是 assistant 回复里提到了 HTML5 的 <video> 标签)。
  2. LLaMA-Factory 的数据处理器(特别是针对多模态模型如 Qwen-VL)在预处理时,会扫描文本中的 <video><image> 等标记,试图将它们替换为真正的视频/图像占位符。

解决:训练数据集中去掉<video>。

You can update Transformers with the command `pip install --upgrade transformers`. If this does not work, and the checkpoint is very new, then there may not be a release version that supports this model yet. In this case, you can get the most up-to-date code by installing Transformers from source with the command `pip install git+https://github.com/huggingface/transformers.git`

----》

这个错误是因为 Transformers 库版本(4.57.6)过低 ,无法识别 Qwen3.5 模型的新架构类型 qwen3_5。你需要将 Transformers 升级到支持 Qwen3.5 的版本(至少 4.58.0 以上)。

解决:pip install --upgrade transformers,直接升级到最高版本。

packages/transformers/utils/versions.py", line 43, in _compare_versions raise ImportError( ImportError: transformers>=4.51.0,<=5.2.0 is required for a normal functioning of this module, but found transformers==5.3.0. To fix: run `pip install transformers>=4.51.0,<=5.2.0` or set `DISABLE_VERSION_CHECK=1` to skip this check.

-----》

上面默认升级到5.3.0,太高了。

解决:pip install transformers==5.2.0 。

File "/data/llm/qwen3/lib/python3.12/site-packages/peft/peft_model.py", line 459, in from_pretrained config = PEFT_TYPE_TO_CONFIG_MAPPING[PeftConfig._get_peft_type(model_id, **hf_kwargs)].from_pretrained( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/llm/qwen3/lib/python3.12/site-packages/peft/config.py", line 323, in _get_peft_type raise ValueError(f"Can't find '{CONFIG_NAME}' at '{model_id}'") ValueError: Can't find 'adapter_config.json' at 'saves/my_model/qlora_alpaca'

-----》

  • 如果这是第一次训练 ,这个参数应该为空不设置

  • 如果是继续训练 ,确保路径正确且包含 adapter_config.json 文件

解决:Checkpoint path不要设置,为空即可。

File "/data/llm/LlamaFactory/src/llamafactory/model/adapter.py", line 360, in init_adapter model = _setup_lora_tuning( ^^^^^^^^^^^^^^^^^^^ File "/data/llm/LlamaFactory/src/llamafactory/model/adapter.py", line 240, in _setup_lora_tuning raise ValueError("DoRA is not compatible with PTQ-quantized models.") ValueError: DoRA is not compatible with PTQ-quantized models.

-----》

DoRA(Weight-Decomposed Low-Rank Adaptation)与量化模型不兼容

在训练配置中同时启用了 DoRA 和模型量化(PTQ),但这两者不能一起使用。

解决:关闭 DoRA。

最终跑起来,webui界面上目前选择如下:

正常跑起来应该如上图,执行时间很长,需要几个小时,看看nvidia-smi:

上面两张图可见,CPU和内存使用不高,主要是显存占到了25G, 最高时到了41G。

当我们在webui界面上点击:

界面会打印对应执行的训练命令:

bash 复制代码
llamafactory-cli train \
    --stage sft \
    --do_train True \
    --model_name_or_path Qwen/Qwen3.5-9B-Base \
    --preprocessing_num_workers 16 \
    --finetuning_type lora \
    --template qwen3_5 \
    --flash_attn auto \
    --dataset_dir data \
    --dataset alpaca_issue_data \
    --cutoff_len 2048 \
    --learning_rate 5e-05 \
    --num_train_epochs 3.0 \
    --max_samples 100000 \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 8 \
    --lr_scheduler_type cosine \
    --max_grad_norm 1.0 \
    --logging_steps 5 \
    --save_steps 100 \
    --warmup_steps 0 \
    --packing False \
    --enable_thinking True \
    --report_to tensorboard \
    --output_dir saves/Qwen3.5-9B-Base/lora/train_2026-03-17-08-13-37 \
    --bf16 True \
    --plot_loss True \
    --trust_remote_code True \
    --ddp_timeout 180000000 \
    --include_num_input_tokens_seen True \
    --optim adamw_torch \
    --quantization_bit 4 \
    --quantization_method bnb \
    --double_quantization True \
    --lora_rank 8 \
    --lora_alpha 16 \
    --lora_dropout 0 \
    --lora_target all \
    --freeze_vision_tower True \
    --freeze_multi_modal_projector True \
    --image_max_pixels 589824 \
    --image_min_pixels 1024 \
    --video_max_pixels 65536 \
    --video_min_pixels 256

上面各个参数的含义,将是接下来慢慢熟悉慢慢优化的地方,目前先不管细节。

7. TensorBoard监控

需要手工安装:

pip install tensorboard

编写一个启动脚本:

(qwen3) honya@honya:~/llm/LlamaFactory$ cat run_tensorboard.sh

#!/bin/bash

nohup tensorboard --bind_all --logdir=saves >./nohup_tensorboard.out 2>&1 &

在浏览器打开:http://localhost:6006/

8. 结束语

主要是训练过程很慢,同步把工作记录一下,当做简单的工作笔记而已,没有什么价值。

相关推荐
jkyy20142 小时前
以AI智能体为引擎,重塑B端健康服务边界与效率
人工智能·语言模型·自动化·健康医疗
_饭团2 小时前
指针核心知识:5篇系统梳理4
c语言·开发语言·c++·笔记·深度学习·算法·面试
赫尔·普莱蒂科萨·帕塔2 小时前
针对 AI 的 “信息围猎“
人工智能·agi
大模型任我行2 小时前
微软:AutoAdapt大模型领域自适应
人工智能·语言模型·自然语言处理·论文笔记
NingboWill2 小时前
AI日报 - 2026年03月17日
人工智能
@不误正业2 小时前
AI Agent实战:OpenClaw记忆系统源码级深度解析
人工智能
GGbond--2 小时前
2026年最佳静态ISP代理:最佳提供商、功能和测评
java·服务器·人工智能·深度学习·接口隔离原则
Peter·Pan爱编程2 小时前
第2节:GPU内存体系深度解密
人工智能·硬件架构
DANGAOGAO2 小时前
大语言模型添加Rag
人工智能·语言模型·自然语言处理