mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
2815 字
8 分钟
如何自己训练AI模型?从零开始的入门教程

如何自己训练AI模型?从零开始的入门教程#

很多人以为训练AI模型是大公司和顶级实验室的专利,需要几百张显卡和上亿资金。这话放在几年前确实没错,但现在情况已经变了。

2026年,你只需要一台带RTX 4090(24GB显存)的电脑,甚至可以在Google Colab上用免费的T4显卡(16GB显存)完成一个小模型的微调。训练一个专属AI模型,门槛已经低到了普通人够得着的地步。

这篇文章会从头讲清楚:什么是模型训练?新手应该从哪种训练方式入手?需要哪些硬件和软件?数据怎么准备?怎么跑起来?最后怎么让它真正用起来?

如果你完全没接触过AI训练,跟着这篇文章走一遍,至少能跑通一个完整的流程。

1. 先搞清楚概念:我们到底在训练什么?#

1.1 预训练 vs 微调#

市面上大多数AI模型(比如Llama、Qwen、GLM)都是在大规模数据上预训练出来的。这个过程需要数万张显卡、训练几周到几个月,一般人玩不起。

但我们可以做的是微调(Fine-tuning):在一个已经训练好的模型基础上,用少量数据针对特定任务再训练,让它学会新技能。

举个例子:你有一个能正常聊天的通用模型,你想让它学会用粤语回答。你不需要从头训练一个粤语模型,只需要给它几百组粤语对话示例,让它微调一下。几十分钟到几小时,它就能用粤语跟你聊了。

1.2 LoRA和QLoRA是什么?为什么重要?#

以前微调一个70亿参数的模型,需要40GB显存以上,普通人根本玩不起。后来有人发明了LoRA(Low-Rank Adaptation)。它的核心思路是:不直接修改原模型的全部参数,而是加一个很小的“适配器”矩阵,只训练这个适配器。这样训练参数减少到原来的0.1%-1%,显存需求大幅降低。

QLoRA更进一步,把模型量化到4位后再微调。原本70亿模型需要28GB显存(FP16),QLoRA只需要6-8GB,一张普通游戏显卡就能跑。

这俩技术就是普通人能玩模型微调的根本原因。

2. 什么时候需要自己训练模型?#

不是所有情况都需要微调。在动手之前,先想清楚:微调是不是解决问题的最佳方式?

场景推荐方案理由
想改模型语气/风格(比如让它像李白说话)微调提示词很难稳定控制,微调后效果稳定
需要模型掌握专业术语(医疗、法律、代码库)微调让知识内化到参数里,不会忘记
数据敏感不能联网(企业内部)微调 + 本地部署数据完全本地,隐私有保障
需要低延迟,不能加检索步骤微调RAG需要额外检索时间
只是需要引用最新文档、新闻RAG(检索增强)微调成本太高,更新不方便
快速验证想法,不想投入硬件提示词工程 + 大厂API几乎零成本

如果你只是想快速体验一下,直接跳到第7节,用云GPU或免费Colab跑一跑。如果你是真想训练一个能用的模型,接着往下看。

3. 硬件准备:最低要什么配置?#

3.1 本地硬件#

以下是在Ubuntu 22.04上使用QLoRA微调7B-8B模型的大致需求:

配置能否微调7B模型参考显卡
显存 6-8GB勉强可以(需4-bit量化)RTX 2060/3060
显存 12GB可以(4-bit量化,batch size较小)RTX 3060/4060 Ti
显存 16-24GB舒适(4-bit量化,batch size可调大)RTX 3080/3090/4070/4080/4090
显存 24GB+可以尝试更大的模型或全量微调A10G/A100

如果你没有NVIDIA显卡,建议直接跳到第7节用云GPU。AMD和Intel的显卡也能跑,但兼容性问题比较多,新手不推荐折腾。

3.2 云GPU和免费方案#

平台免费额度推荐配置价格参考
Google Colab有免费T4(16GB)T4、A100免费版限时,Pro $9.99/月
Kaggle每周30小时免费P100(16GB)免费
AutoDL无免费RTX 3090/A10~1.5元/小时
Lambda LabsA100 80GB~$1.25/小时

如果你纯新手,首推Colab免费版或Kaggle。一分钱不花,跟着教程跑一遍,搞懂了再决定要不要花钱租更好的机器。

4. Ubuntu环境配置(有NVIDIA显卡)#

如果你决定在本地Ubuntu上训练,需要配置好CUDA环境。

4.1 安装NVIDIA驱动和CUDA#

# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装基础工具
sudo apt install -y build-essential curl git python3-pip
# 配置NVIDIA官方仓库(Ubuntu 22.04)
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
# 一键安装CUDA(包含驱动、toolkit、cuDNN等)
sudo apt install -y cuda

4.2 配置环境变量#

echo 'export CUDA_HOME=/usr/local/cuda' >> ~/.bashrc
echo 'export PATH=$CUDA_HOME/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 验证安装
nvcc --version

4.3 创建Python虚拟环境#

python3 -m pip install --user virtualenv
python3 -m virtualenv ~/llm_env
source ~/llm_env/bin/activate

4.4 安装PyTorch和常用库#

# 安装PyTorch(CUDA 12.1版本)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 安装Hugging Face生态和Unsloth
pip install transformers datasets accelerate peft
pip install unsloth

关于不同CUDA版本的PyTorch安装命令,可以访问 pytorch.org 查询。

4.5 验证环境#

python -c "import torch; print(torch.cuda.is_available())"

输出 True 表示CUDA可用。

5. 数据集准备:比训练本身更重要#

AI界有句老话:Garbage In, Garbage Out。数据质量决定了模型能力的上限。数据烂,模型再牛也白搭。

5.1 数据格式#

微调最常用的数据格式是JSON或JSONL。以指令微调(让模型学会对话)为例,每条数据通常包含三个字段:

{
"instruction": "用甄嬛体描述今天的天气",
"input": "今天气温28度,晴天",
"output": "今儿的天气倒是个好日子,暖风和煦,晴空万里,正是踏青的好时节。"
}

其他常见格式:

  • ShareGPT格式:适合多轮对话,包含conversations数组
  • Alpaca格式:简单轻量,适合单轮指令
  • ChatML格式:OpenAI风格,适合聊天场景

5.2 数据量建议#

  • 风格/语气调整:几百条就够了
  • 专业术语注入:1000-3000条
  • 复杂任务学习:5000-10000条

数据太少模型学不会,太多容易过拟合(死记硬背)。质量远比数量重要,500条高质量数据的效果通常超过5000条凑数的。

5.3 训练集/验证集/测试集划分#

数据集比例用途
训练集70%让模型学习
验证集15%训练过程中验证,防止过拟合
测试集15%最终评估,训练过程不接触

三个集合必须严格分开,不能有重复数据,否则评估结果会失真。

6. 实战:微调Qwen2.5-3B模型#

我们用一个完整的例子来演示:用Unsloth框架微调Qwen2.5-3B模型,让模型学会用“甄嬛体”说话。

6.1 选择基础模型#

选一个开源且许可证宽松的模型。推荐几个2026年常见的选择:

  • Qwen2.5系列(阿里,Apache 2.0):中文好,3B/7B/14B/32B可选
  • Llama 3.1系列(Meta,Llama 3.1许可证):英文好,8B/70B可选
  • Mistral 7B(Apache 2.0):性能和许可的平衡点

新手推荐从Qwen2.5-3B或Llama 3.1-8B开始,文件不太大,社区教程也多。

6.2 安装Unsloth#

pip install unsloth

6.3 准备训练脚本#

创建一个Python脚本 train.py

from unsloth import FastLanguageModel
import torch
from trl import SFTTrainer
from transformers import TrainingArguments
# 1. 加载模型和分词器(4位量化,大幅降低显存)
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/Qwen2.5-3B-Instruct",
max_seq_length=2048,
load_in_4bit=True,
)
# 2. 添加LoRA适配器
model = FastLanguageModel.get_peft_model(
model,
r=16, # LoRA秩,建议8-128,越大越精细但显存需求越高
lora_alpha=16, # 缩放因子,通常设为和r相同或2倍
lora_dropout=0, # 设为0避免过拟合
target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
)
# 3. 准备数据集(格式:instruction-input-output)
dataset = [
{"instruction": "用甄嬛体描述今天的天气", "input": "气温28度,晴天", "output": "今儿个日头正好,暖风和煦,晴空万里,正是踏青的好时节。"},
{"instruction": "用甄嬛体表示拒绝", "input": "我不想帮忙", "output": "这事儿怕是不妥,本宫心有余而力不足呢。"},
# 添加更多数据...
]
def format_example(example):
return f"### 指令:{example['instruction']}\n### 输入:{example['input']}\n### 回答:{example['output']}"
# 4. 配置训练参数
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=dataset, # 用格式化后的数据
args=TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
warmup_steps=5,
max_steps=60,
learning_rate=2e-4,
fp16=not torch.cuda.is_bf16_supported(),
bf16=torch.cuda.is_bf16_supported(),
logging_steps=10,
output_dir="outputs",
),
)
# 5. 开始训练
trainer.train()
# 6. 保存模型
model.save_pretrained("qwen3b_zhinv_style")

关键参数解释

  • r(LoRA秩):控制适配器的容量。8适合简单任务,32适合复杂任务,超过128容易过拟合
  • learning_rate:学习率,通常1e-4到5e-5之间,太高学不动,太低容易不收敛
  • max_steps:训练步数。数据集小的时候直接用这个控制,数据集大时用num_train_epochs

6.4 运行训练#

python train.py

训练过程中可以观察loss的变化。正常的loss曲线应该是逐渐下降并趋于平稳。如果loss忽高忽低,说明学习率可能太高或数据集有问题。

显存不足怎么办

  • 降低per_device_train_batch_size到1
  • 增加gradient_accumulation_steps(等效增大batch size但不增加显存)
  • 确保load_in_4bit=True已开启

7. 使用免费GPU进行训练(Colab / Kaggle)#

如果你不想在本地折腾,Google Colab和Kaggle都提供免费GPU,足够跑一个小模型的微调。

7.1 Google Colab方案#

Colab免费版提供约16GB显存的T4显卡,微调7B模型完全够用。

  1. 访问 colab.research.google.com
  2. 新建笔记本,菜单栏选择 Runtime → Change runtime type → T4 GPU
  3. 在单元格中运行:
# 安装依赖
!pip install unsloth trl transformers datasets accelerate peft
# 后续代码与第6节相同

Unsloth官方提供了一个针对Colab优化的笔记本,可以直接复制使用:unsloth.ai/docs/zh/kai-shi-shi-yong/fine-tuning-llms-guide/tutorial-how-to-finetune-llama-3-and-use-in-ollama

7.2 Kaggle方案#

Kaggle每周提供30小时的免费GPU(含P100,16GB显存)。

  1. 访问 kaggle.com
  2. 创建Notebook,设置 Accelerator → GPU
  3. 运行安装命令:
!pip install unsloth trl transformers datasets accelerate peft

8. 将微调后的模型导出并部署#

训练完成后,模型还不能直接用于聊天。需要把LoRA适配器合并到基础模型中,然后导出成可用的格式。

8.1 合并LoRA并导出为GGUF格式#

# 合并LoRA权重
merged_model = model.merge_and_unload()
# 导出为GGUF格式(用于llama.cpp/Ollama)
from unsloth import export_to_gguf
export_to_gguf(merged_model, tokenizer, "my_model_q4_K_M.gguf", quantization="q4_K_M")

GGUF是llama.cpp支持的高效格式,Q4_K_M(4-bit量化)在体积和精度之间取得了较好的平衡。这个GGUF文件通常只有几GB(3B模型约2-3GB,7B模型约4-5GB),普通的电脑就能跑得动。

8.2 在Ollama中运行#

Ollama是本地运行模型最简单的方式。

# 安装Ollama
curl -fsSL https://ollama.com/install.sh | sh
# 创建Modelfile
echo 'FROM ./my_model_q4_K_M.gguf' > Modelfile
ollama create my_model -f Modelfile
# 运行
ollama run my_model

8.3 在llama.cpp中运行#

# 编译llama.cpp
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j
# 运行
./main -m my_model_q4_K_M.gguf -p "用甄嬛体说今天天气真好" -n 128

9. 常见问题与解决方案#

问题解决方案
CUDA out of memory减小batch size、降低max_seq_length、确保load_in_4bit=True
loss不下降学习率太小或数据集质量太低,尝试提高learning_rate到5e-5
loss乱跳不收敛学习率太大,降到1e-5或5e-6试试;数据格式也可能有问题
训练后模型变傻了数据集太小或质量差;微调强度过大,尝试降低r和学习率
推理时输出乱码检查tokenizer是否正确加载,base_model和微调时的模型是否一致
Colab/Kaggle训练中断免费版有时限,定期保存checkpoint,下次从checkpoint继续
GPU不支持bf16将训练参数中的bf16设为False,改用fp16
模型下载太慢国内用户从ModelScope下载:modelscope.cn

10. 资源链接#

开源模型下载

框架和工具

免费GPU平台

云GPU租赁

第一次尝试可能会遇到各种报错,这很正常。建议先用Colab免费GPU跑一个小模型(比如Qwen2.5-3B,几百条数据),把整个流程跑通,再考虑本地部署或者租更好的机器。 训练AI模型没有想象中那么遥不可及.

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

如何自己训练AI模型?从零开始的入门教程
http://blog.mcstarland.top/posts/aaai/
作者
MEMZGBL
发布于
2026-04-10
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00