镜像构建
LLaMA-Factory 项目提供了镜像构建的 dockerfile: https://github.com/hiyouga/LLaMA-Factory/blob/main/docker/docker-cuda/Dockerfile
只需根据自己的环境略作修改即可。比如我的环境cuda驱动是12.1,所以修改 Dockerfile 的基础镜像为
FROM pytorch/pytorch:2.5.1-cuda12.1-cudnn9-devel
因为后面会用到 qlora ,需要在镜像中额外安装 bitsandbytes 包:
pip install bitsandbytes
构建好的镜像,启动的容器中,主要库的版本:
accelerate 1.6.0datasets 3.5.0llamafactory 0.9.3.dev0 /appnvidia-cuda-cupti-cu12 12.1.105nvidia-cuda-nvrtc-cu12 12.1.105nvidia-cuda-runtime-cu12 12.1.105opencv-python-headless 4.5.5.64peft 0.15.1stack-data 0.6.2torch 2.5.1+cu121torchaudio 2.5.1+cu121torchelastic 0.2.2torchvision 0.20.1+cu121transformers 4.51.3trl 0.9.6types-dataclasses 0.6.6tzdata 2025.2uvicorn 0.34.2bitsandbytes 0.45.5
模型和数据集准备
本文采用14B尺寸的qwen3模型:https://modelscope.cn/models/Qwen/Qwen3-14B
数据集不变:https://huggingface.co/datasets/qihoo360/Light-R1-SFTData/stage2-3k.json
编写 LLaMA-Factory 格式的 dataset_info.json 放到容器挂载的 /datasets 根目录下:
{ "Light-R1-SFT-stage2": { "file_name": "qihoo360/Light-R1-SFTData/stage2-3k.json", "file_sha1": "481cd356262d36b9d16ac49f7fc8ff3d4c9f349c", "formatting": "sharegpt", "columns": { "messages": "conversations" }, "tags": { "role_tag": "from", "content_tag": "value", "user_tag": "user", "assistant_tag": "assistant" }, "ranking": false, "field": "auto" }}
Qwen3-14B训练
容器启动后,在界面表单上选择如下内容:
- 模型路径:/root/.cache/modelscope/hub/qwen/Qwen3-14B
- 数据路径:data
- 数据集:Light-R1-SFT-stage2
- 微调方法: Lora
- 量化等级(启用量化QLora):4
- 量化方法:bnb
- 对话模版:qwen3
- 训练阶段:Supervised Fine-Tuning
对于14B模型,我们开启 qlora ,否则会显存 OOM;
界面设置好后,点击 “Preview command” 按钮(或预览命令)按钮,显示的命令内容应如下所示:
llamafactory-cli train \ --stage sft \ --do_train True \ --model_name_or_path /root/.cache/modelscope/hub/qwen/Qwen3-14B \ --preprocessing_num_workers 16 \ --finetuning_type lora \ --template qwen3 \ --flash_attn auto \ --dataset_dir data \ --dataset Light-R1-SFT-stage2 \ --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 \ --report_to none \ --output_dir saves/Qwen3-14B-Instruct/lora/train_2025-05-16-13-17-41 \ --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
训练日志:
。。。[INFO|configuration_utils.py:691] 2025-05-16 13:20:36,257 >> loading configuration file /root/.cache/modelscope/hub/qwen/Qwen3-14B/config.json[INFO|configuration_utils.py:765] 2025-05-16 13:20:36,258 >> Model config Qwen3Config { "architectures": [ "Qwen3ForCausalLM" ], "attention_bias": false, "attention_dropout": 0.0, "bos_token_id": 151643, "eos_token_id": 151645, "head_dim": 128, "hidden_act": "silu", "hidden_size": 5120, "initializer_range": 0.02, "intermediate_size": 17408, "max_position_embeddings": 40960, "max_window_layers": 40, "model_type": "qwen3", "num_attention_heads": 40, "num_hidden_layers": 40, "num_key_value_heads": 8, "rms_norm_eps": 1e-06, "rope_scaling": null, "rope_theta": 1000000, "sliding_window": null, "tie_word_embeddings": false, "torch_dtype": "bfloat16", "transformers_version": "4.51.3", "use_cache": true, "use_sliding_window": false, "vocab_size": 151936}。。。Loading checkpoint shards: 100%|██████████| 8/8 [02:25<00:00, 18.15s/it]。。。[INFO|trainer.py:748] 2025-05-16 13:23:03,174 >> Using auto half precision backend[INFO|trainer.py:2414] 2025-05-16 13:23:03,496 >> ***** Running training *****[INFO|trainer.py:2415] 2025-05-16 13:23:03,496 >> Num examples = 3,259[INFO|trainer.py:2416] 2025-05-16 13:23:03,496 >> Num Epochs = 3[INFO|trainer.py:2417] 2025-05-16 13:23:03,496 >> Instantaneous batch size per device = 2[INFO|trainer.py:2420] 2025-05-16 13:23:03,496 >> Total train batch size (w. parallel, distributed & accumulation) = 16[INFO|trainer.py:2421] 2025-05-16 13:23:03,496 >> Gradient Accumulation steps = 8[INFO|trainer.py:2422] 2025-05-16 13:23:03,496 >> Total optimization steps = 609[INFO|trainer.py:2423] 2025-05-16 13:23:03,500 >> Number of trainable parameters = 32,112,640[INFO|2025-05-16 13:25:21] llamafactory.train.callbacks:143 >> {'loss': 0.4967, 'learning_rate': 4.9995e-05, 'epoch': 0.02, 'throughput': 1188.24}{'loss': 0.4967, 'grad_norm': 0.14969857037067413, 'learning_rate': 4.999467794024707e-05, 'epoch': 0.02, 'num_input_tokens_seen': 163840}。。。{'loss': 0.4186, 'grad_norm': 0.08530048280954361, 'learning_rate': 8.315552395404824e-09, 'epoch': 2.98, 'num_input_tokens_seen': 19829952}{'train_runtime': 16766.8078, 'train_samples_per_second': 0.583, 'train_steps_per_second': 0.036, 'train_loss': 0.40401273466683374, 'epoch': 3.0, 'num_input_tokens_seen': 19961024}***** train metrics ***** epoch = 2.9963 num_input_tokens_seen = 19961024 total_flos = 1564083299GF train_loss = 0.404 train_runtime = 4:39:26.80 train_samples_per_second = 0.583 train_steps_per_second = 0.036Figure saved at: saves/Qwen3-14B-Instruct/lora/train_2025-05-16-13-17-41/training_loss.png
同样的3千多条数据,相比 0.6B 只用了40分钟,14B 即使开了qlora 也用了近5个小时才训练完。loss图:
用以上相同的环境和参数,qlora微调 Qwen3-32B 或 DeepSeek-R1-Distill-Qwen-32B,实测都报错 torch.OutOfMemoryError: CUDA out of memory ; 能把 32B 模型的微调训练在 24G 显存的卡上跑起来,还不是一件容易的事情。后面祭出 unsloth 来试试。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。