LLaMA Factory 是一款开源、低代码、一站式大语言与多模态模型微调框架,用于降低大模型的微调落地门槛。框架兼容 Qwen、LLaMA、ChatGLM、LLaVA 等上百款主流开源模型,支持增量预训练、SFT 监督微调、DPO、KTO、ORPO 等多种训练对齐方案,原生集成 LoRA、QLoRA 量化微调技术,可在消费级显卡完成轻量级模型微调。框架支持可视化网页端和命令行双操作模式,完整覆盖模型训练、评估、权重合并、推理部署全流程,适配科研实验、行业轻量化模型定制等场景。
本次实践基于 Ubuntu 22.04 系统、RTX 4090 24G 显卡、CUDA12.8 环境,全程使用国内镜像加速,解决外网下载慢、超时问题。
安装与配置 1、备份原有源文件,替换为阿里云镜像源,提升系统包下载速度。
root@localhost:~ root@localhost:~ deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse EOF' root@localhost:~# apt update
2、安装显卡检测工具,校验 NVIDIA 显卡识别状态,确保硬件环境正常。
root@localhost:~ root@localhost:~ 01:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1) 01:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1) 25:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1) 25:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1) 41:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1) 41:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1) 61:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1) 61:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1) 81:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1) 81:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1) a1:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1) a1:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1) c1:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1) c1:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1) e1:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1) e1:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1) root@localhost:~ Wed Sep 9 14:28:46 2026 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 570.86.10 Driver Version: 570.86.10 CUDA Version: 12.8 | |-----------------------------------------+------------------------+----------------------+ | 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 GeForce RTX 4090 On | 00000000:C1:00.0 Off | Off | | 32% 31C P8 22W / 405W | 1MiB / 24564MiB | 0% Default | | | | N/A | +-----------------------------------------------------------------------------------------+ root@localhost:~ /dev/nvidia-uvm /dev/nvidia-uvm-tools /dev/nvidia5 /dev/nvidiactl /dev/nvidia-caps: nvidia-cap1 nvidia-cap2
3、若系统未安装显卡驱动,执行以下命令安装官方推荐驱动,并禁用开源 nouveau 驱动。
禁用系统默认驱动
root@localhost:~ blacklist nouveau options nouveau modeset=0 EOF
添加显卡驱动PPA源,并安装 NVIDIA 驱动
root@localhost:~ root@localhost:~ root@localhost:~ root@localhost:~ root@localhost:~ root@localhost:~
4、搭建独立虚拟环境,避免依赖版本冲突。
root@localhost:~ root@localhost:~ root@localhost:~ root@localhost:~ root@localhost:~
5、根据显卡 CUDA 版本适配 PyTorch 版本,本次 CUDA12.8 对应安装 Torch2.8.0,使用清华、上交双镜像加速。
其他的版本对应预览表:
CUDA 编译包 Linux 最低驱动 Windows 最低驱动 PyTorch 版本 CUDA 13.0 ≥ 580.30.02 ≥ 581.06 2.9 / 2.12 CUDA 12.9 ≥ 575.51.03 ≥ 576.02 2.8 CUDA 12.8 ≥ 570.26 ≥ 570.65 2.7/ 2.8 / 2.9 / 2.10 / 2.11 CUDA 12.6 ≥ 560.28.03 ≥ 561.17 2.6 / 2.7 ~ 2.12 CUDA 12.4 ≥ 550.54.14 ≥ 551.23 2.5 / 2.6 CUDA 12.1 ≥ 525.60.13 ≥ 527.41 2.2 / 2.3 / 2.4 CUDA 11.8 ≥ 450.80.02 ≥ 452.39 2.0 ~ 2.7
依次执行命令安装,该过程较慢
root@localhost:~ -i https://pypi.tuna.tsinghua.edu.cn/simple \ --extra-index-url https://mirror.sjtu.edu.cn/pytorch-wheels/cu128 root@localhost:~ root@localhost:~ Package Version ------------------------ ------------ accelerate 1.15.0 certifi 2026.7.22 charset-normalizer 3.5.1 filelock 3.32.6 fsspec 2026.7.0 hf-xet 1.6.0 huggingface_hub 0.36.2 idna 3.19 Jinja2 3.1.6 MarkupSafe 3.0.3 mpmath 1.3.0 networkx 3.6.1 numpy 2.5.3 nvidia-cublas-cu12 12.8.4.1 nvidia-cuda-cupti-cu12 12.8.90 nvidia-cuda-nvrtc-cu12 12.8.93 nvidia-cuda-runtime-cu12 12.8.90 nvidia-cudnn-cu12 9.10.2.21 nvidia-cufft-cu12 11.3.3.83 nvidia-cufile-cu12 1.13.1.3 nvidia-curand-cu12 10.3.9.90 nvidia-cusolver-cu12 11.7.3.90 nvidia-cusparse-cu12 12.5.8.93 nvidia-cusparselt-cu12 0.7.1 nvidia-nccl-cu12 2.27.3 nvidia-nvjitlink-cu12 12.8.93 nvidia-nvtx-cu12 12.8.90 packaging 26.3 pillow 12.3.0 pip 25.0.1 psutil 7.2.2 PyYAML 6.0.3 regex 2026.9.3 requests 2.34.2 safetensors 0.8.0 setuptools 84.0.0 sympy 1.14.0 tokenizers 0.21.4 torch 2.8.0+cu128 torchaudio 2.8.0+cu128 torchvision 0.23.0+cu128 tqdm 4.70.0 transformers 4.48.2 triton 3.4.0 typing_extensions 4.16.0 urllib3 2.7.0
6、执行 Python 代码校验 PyTorch、CUDA、显卡识别状态。
import torch print ("torch版本:" , torch.__version__)print ("torch编译用的CUDA版本:" , torch.version.cuda)print ("CUDA是否可用:" , torch.cuda.is_available())print ("GPU数量:" , torch.cuda.device_count())if torch.cuda.is_available(): print ("GPU名称:" , torch.cuda.get_device_name(0)) torch版本: 2.8.0+cu128 torch编译用的CUDA版本: 12.8 CUDA是否可用: True GPU数量: 1 GPU名称: NVIDIA GeForce RTX 4090
7、编译 Llama-Factory 镜像并安装。
root@localhost:~ root@localhost:~ root@localhost:~ root@localhost:~ Package Version ------------------------ ------------ accelerate 1.11.0 aiofiles 24.1.0 aiohappyeyeballs 2.7.1 aiohttp 3.14.3 aiosignal 1.4.0 annotated-doc 0.0.5 annotated-types 0.8.0 antlr4-python3-runtime 4.9.3 anyio 4.15.1 attrs 26.1.0 av 16.0.0 brotli 1.2.0 certifi 2026.7.22 cffi 2.1.1 charset-normalizer 3.5.1 click 8.5.0 contourpy 1.3.3 cryptography 50.0.1 cycler 0.12.1 datasets 4.0.0 dill 0.3.8 docstring_parser 0.18.0 einops 0.8.2 fastapi 0.141.1 ffmpy 1.0.0 filelock 3.32.6 fire 0.7.1 fonttools 4.64.0 frozenlist 1.8.0 fsspec 2025.3.0 gradio 5.50.0 gradio_client 1.14.0 groovy 0.1.2 h11 0.16.0 hf_transfer 0.1.9 hf-xet 1.6.0 httpcore 1.0.9 httpx 0.28.1 huggingface_hub 1.30.0 idna 3.19 Jinja2 3.1.6 kiwisolver 1.5.1 llamafactory 0.9.6.dev0 markdown-it-py 4.2.0 MarkupSafe 3.0.3 matplotlib 3.11.1 mdurl 0.1.2 modelscope 1.40.0 modelscope-hub 0.4.1 mpmath 1.3.0 multidict 6.8.0 multiprocess 0.70.16 networkx 3.6.1 numpy 2.5.3 nvidia-cublas-cu12 12.8.4.1 nvidia-cuda-cupti-cu12 12.8.90 nvidia-cuda-nvrtc-cu12 12.8.93 nvidia-cuda-runtime-cu12 12.8.90 nvidia-cudnn-cu12 9.10.2.21 nvidia-cufft-cu12 11.3.3.83 nvidia-cufile-cu12 1.13.1.3 nvidia-curand-cu12 10.3.9.90 nvidia-cusolver-cu12 11.7.3.90 nvidia-cusparse-cu12 12.5.8.93 nvidia-cusparselt-cu12 0.7.1 nvidia-nccl-cu12 2.27.3 nvidia-nvjitlink-cu12 12.8.93 nvidia-nvtx-cu12 12.8.90 omegaconf 2.3.1 orjson 3.12.0 packaging 26.3 pandas 2.3.3 peft 0.18.1 pillow 11.3.0 pip 25.0.1 propcache 0.5.2 protobuf 7.36.1 psutil 7.2.2 pyarrow 25.0.1 pycparser 3.0 pydantic 2.12.3 pydantic_core 2.41.4 pydub 0.25.1 Pygments 2.21.0 pyparsing 3.3.2 python-dateutil 2.9.0.post0 python-multipart 0.0.32 pytz 2026.3.post1 PyYAML 6.0.3 regex 2026.9.3 requests 2.34.2 rich 15.0.0 ruff 0.16.6 safehttpx 0.1.7 safetensors 0.8.0 scipy 1.18.1 semantic-version 2.10.0 sentencepiece 0.2.2 setuptools 84.0.0 shellingham 1.5.4 shtab 1.12.1 six 1.17.0 sse-starlette 3.4.11 starlette 0.52.1 sympy 1.14.0 termcolor 3.3.0 tiktoken 0.14.0 tokenizers 0.22.2 tomlkit 0.13.3 torch 2.8.0+cu128 torchaudio 2.8.0+cu128 torchdata 0.11.0 torchvision 0.23.0+cu128 tqdm 4.70.0 transformers 5.8.0 triton 3.4.0 trl 0.24.0 typer 0.27.2 typing_extensions 4.16.0 typing-inspection 0.4.4 tyro 0.8.14 tzdata 2026.3 urllib3 2.7.0 uvicorn 0.52.4 websockets 15.0.1 xxhash 4.0.1 yarl 1.24.5 root@localhost:~ ---------------------------------------------------------- | Welcome to LLaMA Factory, version 0.9.6.dev0 | | | | Project page: https://github.com/hiyouga/LLaMA-Factory | ----------------------------------------------------------
监督微调 本次微调采用问答数据集,原始数据为 jsonl 格式,需转换为 LlamaFactory 标准的 Alpaca 训练格式。
1、通过 ModelScope 下载 Qwen3.5-0.8B-Instruct 轻量化对话模型,适合消费级显卡微调。
root@localhost:~/ root@localhost:~/ root@localhost:~/ root@localhost:~/
2、准备训练材料,数据包含 question、answer 字段,文件名称叫做train.json,放入到LlamaFactory/data 目录下,以下结构是标准训练集结构。
[ { "instruction" : "你是一个助手" , "input" : "用户问题" , "output" : "回答" }, { "instruction" : "你是一个助手" , "input" : "第二个问题" , "output" : "对应的回答" } ]
3、继续使用《千问大模型完整RLHF全参数微调指南》文章中的医疗数据集,并将其做清洗处理。
下载数据集
root@localhost:~/qwen root@localhost:~/qwen
直接使用脚本将其转换为符合规范的格式,读取 r1_data_example.jsonl 文件,把每条的 question → input、answer → output 进行关联,并固定 instruction 为特定提示词,输出标准 json 数组格式。
import jsondef convert_jsonl_to_json (jsonl_file_path, out_json_path ): output_data = [] with open (jsonl_file_path, "r" , encoding="utf-8" ) as f: for line in f: line = line.strip() if not line: continue item = json.loads(line) new_sample = { "instruction" : "你是一个医疗问答助手,请规范回答用户提问。" , "input" : item["question" ], "output" : item["answer" ] } output_data.append(new_sample) with open (out_json_path, "w" , encoding="utf-8" ) as fw: json.dump(output_data, fw, ensure_ascii=False , indent=4 ) print (f"转换完成,输出文件: {out_json_path} " ) if __name__ == "__main__" : jsonl_path = "/data/r1_data_example.jsonl" save_json_path = "/data/train.json" convert_jsonl_to_json(jsonl_path, save_json_path)
输出成train.json文件,并放入到/data目录下
root@localhost:~/ root@localhost:~/qwen total 12M drwxr-xr-x 2 root root 4.0K Sep 9 04:32 qwen3.5 -rw-r--r-- 1 root root 8.8M Apr 22 2025 r1_data_example.jsonl -rw-r--r-- 1 root root 2.4M Sep 9 04:47 train.json
4、覆盖写入自定义数据集,修改 LlamaFactory/data/dataset_info.json 直接覆盖。
"mydata" 就是数据集名称
root@localhost:~/ { "mydata" : { "file_name" : "/data/train.json" , "format" : "alpaca" } } EOF
5、在 LlamaFactory 根目录新建 sft.yaml,配置 LoRA 微调核心参数。
root@localhost:~/ root@localhost:~/ model_name_or_path: /data/qwen3.5 dataset: mydata template: qwen finetuning_type: lora lora_target: all lora_rank: 8 lora_alpha: 16 lora_dropout: 0.05 stage: sft do_train: true num_train_epochs: 3 per_device_train_batch_size: 4 gradient_accumulation_steps: 2 learning_rate: 5e-5 lr_scheduler_type: cosine warmup_steps: 50 weight_decay: 0.01 dataloader_num_workers: 0 output_dir: /data/qwen3.5_sft save_steps: 100 logging_steps: 10 overwrite_output_dir: true gradient_checkpointing: true fp16: true EOF
6、在 LLaMA-Factory 目录下执行命令启动训练。
root@localhost:/data root@localhost:/data root@localhost:~/LLaMA-Factory {'train_runtime' : '21.48' , 'train_samples_per_second' : '2.793' , 'train_steps_per_second' : '0.419' , 'train_loss' : '2.202' , 'epoch' : '3' } 100%|███████████████████████████████████████████████████| 9/9 [00:21<00:00, 2.39s/it] root@localhost:/data total 49M drwxr-xr-x 2 root root 4.0K Sep 9 07:40 checkpoint-9 drwxr-xr-x 2 root root 4.0K Sep 9 07:26 qwen3.5 drwxr-xr-x 2 root root 10 Sep 9 07:44 qwen3.5_lora_merged drwxr-xr-x 3 root root 4.0K Sep 9 07:42 qwen3.5_sft -rw-r--r-- 1 root root 8.8M Apr 27 00:54 r1_data_example.jsonl -rw-r--r-- 1 root root 19K Sep 9 07:38 train.json
7、训练结束后通过执行 merge_lora.yaml 脚本实现合并模型权重。
root@localhost:~/LLaMA-Factory model_name_or_path: /data/qwen3.5 adapter_name_or_path: /data/qwen3.5_sft template: qwen finetuning_type: lora export_dir: /data/qwen3.5_lora_merged export_legacy_format: false EOF root@localhost:~/LLaMA-Factory Loading weights: 100%|███████████████████████████████████████████| 473/473 [00:00<00:00, 6414.93it/s] root@localhost:/data total 49M drwxr-xr-x 2 root root 4.0K Sep 9 07:26 qwen3.5 drwxr-xr-x 2 root root 10 Sep 9 07:44 qwen3.5_lora_merged drwxr-xr-x 3 root root 4.0K Sep 9 07:42 qwen3.5_sft -rw-r--r-- 1 root root 8.8M Apr 27 00:54 r1_data_example.jsonl -rw-r--r-- 1 root root 19K Sep 9 07:38 train.json root@localhost:/data/qwen3.5_lora_merged total 1.7G -rw-r--r-- 1 root root 464 Sep 9 07:46 Modelfile -rw-r--r-- 1 root root 7.6K Sep 9 07:46 chat_template.jinja -rw-r--r-- 1 root root 2.7K Sep 9 07:46 config.json -rw-r--r-- 1 root root 115 Sep 9 07:46 generation_config.json -rw------- 1 root root 1.6G Sep 9 07:46 model.safetensors -rw-r--r-- 1 root root 1.2K Sep 9 07:46 processor_config.json -rw-r--r-- 1 root root 20M Sep 9 07:46 tokenizer.json -rw-r--r-- 1 root root 1.2K Sep 9 07:46 tokenizer_config.json
模型测试 编写推理配置文件,启动命令行交互式对话,测试医疗微调效果。
1、新建 infer_lora.yaml 放在 LLaMA-Factory 根目录
root@localhost:~/LLaMA-Factory model_name_or_path: /data/qwen3.5_lora_merged template: qwen temperature: 0.4 top_p: 0.8 max_new_tokens: 512 EOF
2、启动终端对话
root@localhost:~/LLaMA-Factory Loading weights: 100%|███████████████████████████████████| 473/473 [00:00<00:00, 1092.90it/s] Welcome to the CLI application, use `clear` to remove the history , use `exit ` to exit the application. User: 你好 Assistant: <think> 用户打招呼,这是一个简单的问候。我应该用友好的方式回应,保持亲切和友好的语气。 </think> 你好!很高兴见到你。有什么我可以帮你的吗?