事情是这样的。有个创业团队找到我,说他们想做一款垂直行业的代码助手,想用自己积累的几万条代码 commit 数据微调一个模型。他们预算大概 5 万块,问我能不能买台服务器搞定。
我直接告诉他们:5 万块不够买能微调 34B 模型的机器,但足够租云 GPU 来跑完整流程。他们最后用 3 万块在一家云 GPU 平台上跑了两周,把模型微调出来了。
这篇文章就是那次合作的复盘——告诉你微调模型到底需要多少硬件,以及预算有限的人怎么办。
这篇是 本地部署大模型实战:Ollama + Open WebUI 完整教程 和 Ollama + OpenCode + VS Code 免费离线方案 的进阶篇——前两篇讲怎么用模型,这篇讲怎么自己造一个。
很多人把微调想得很神秘,其实不复杂。
微调 = 在已训练好的大模型基础上,用你的数据做额外训练
原始模型(如 deepseek-coder-6.7b)
↓ 加载原始权重(约占用 13.5GB 显存——6.7B × 2 bytes)
↓ 喂入你的训练数据(代码 commit、注释、Issue 等)
↓ 模型在训练过程中调整部分参数
↓ 输出的模型既能保留原始代码能力,又懂你的业务代码风格
(来源:HuggingFace PEFT 文档 + 博主实测)
需要明确一点:微调不是从零训练一个模型。你买一张 4090(24GB),跑 7B 模型微调完全够用。
微调方法的显存占用差异巨大。目前主流的方法是 LoRA / QLoRA(低秩适配),它们的显存需求远低于全量微调(Full Fine-tune)。
| 模型 | 参数规模 | 全量微调显存 | QLoRA 微调显存 | QLoRA 所需显卡(举例) |
|---|---|---|---|---|
| CodeLlama-7B | 7B | ~56 GB | ~10-12 GB | RTX 3060 (12G) / RTX 4060 (16G) |
| DeepSeek-Coder-6.7B | 6.7B | ~52 GB | ~10-12 GB | RTX 3060 (12G) / RTX 4060 (16G) |
| Qwen2.5-Coder-7B | 7B | ~56 GB | ~10-12 GB | RTX 3060 (12G) |
| CodeLlama-13B | 13B | ~104 GB | ~18-20 GB | RTX 3090 (24G) / RTX 4090 (24G) |
| DeepSeek-Coder-33B | 33B | ~264 GB | ~40-44 GB | 2 × RTX 3090 (48G) / RTX 6000 Ada (48G) |
| CodeLlama-34B | 34B | ~272 GB | ~42-46 GB | 2 × RTX 4090 (48G) |
(来源:HuggingFace QLoRA 官方仓库 + 博主团队实测)
关键结论:
(实测)Google Colab 免费版提供 T4 16G 显存,足够跑 7B 模型的 QLoRA 微调。缺点是:
# Colab 里的训练脚本核心代码(PyTorch + PEFT)
!pip install transformers datasets accelerate peft bitsandbytes
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
# 4-bit 量化加载(QLoRA 核心)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
"deepseek-ai/deepseek-coder-6.7b-instruct",
quantization_config=bnb_config,
device_map="auto",
trust_remote_code=True
)
# LoRA 配置
lora_config = LoraConfig(
r=8, # LoRA 秩(显存低就用 8,显存高用 16-32)
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters() # 应该只训练 ~0.5% 的参数
(实测)Colab 免费版跑 7B 模型微调,一个 epoch 大约 6-8 小时。如果每天用 4 小时,需要 2 天才能完成一个完整的训练周期。适合学习型项目,不适合生产。
(实测)这是性价比最高的方案。云 GPU 平台(如 AutoDL、矩池云、Vast.ai)租一张 RTX 3090(24G)大约 ¥2-3/小时,一个月用 200 小时约 ¥500。24G 显存跑 13B 模型的 QLoRA 微调刚好够。
# 租好机器后的环境准备
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers datasets accelerate peft bitsandbytes
# 启动训练
python train.py
--model_name deepseek-ai/deepseek-coder-6.7b-instruct
--dataset_path ./my_code_commits.jsonl
--output_dir ./fine_tuned_model
--num_epochs 3
--per_device_train_batch_size 4
--gradient_accumulation_steps 4
--learning_rate 2e-4
--lora_r 16
| 参数 | 为什么这样设 | 实测效果 |
|---|---|---|
batch_size=4 |
24G 显存 7B 模型一次只能装 4 条数据 | 太大就 OOM |
gradient_accumulation=4 |
模拟 batch_size=16 | 训练更稳定 |
lora_r=16 |
LoRA 秩,8 节省显存但效果差,16 更推荐 | 效果最好 |
learning_rate=2e-4 |
LoRA 的学习率,比全量微调高 10 倍 | 收敛快 |
(实测)batch_size 和 gradient_accumulation 配合是最重要的显存控制手段。7B 模型在 3090 上 batch_size=4 + gradient_accumulation=4 是黄金组合,既不爆显存又不影响训练稳定性。
如果你要做 33B 模型的 QLoRA 微调,单卡 24G 不够。2 张 3090(48G 总和)才能跑。
# 多卡训练,用 accelerate 启动
accelerate launch --num_processes 2 train.py \
--model_name deepseek-ai/deepseek-coder-33b-instruct \
--dataset_path ./my_code_commits.jsonl \
--output_dir ./fine_tuned_model \
--num_epochs 3 \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 8 \
--learning_rate 2e-4
| 配置 | 月费用 | 能微调的模型 | 推荐度 |
|---|---|---|---|
| Google Colab 免费 | $0 | 7B | ⭐⭐(学习用) |
| 1 × RTX 3090(云) | ¥500-800 | 7B-13B | ⭐⭐⭐⭐(最佳性价比) |
| 2 × RTX 3090(云) | ¥3000-5000 | 13B-33B | ⭐⭐⭐⭐⭐(认真做项目) |
| 买 1 台 RTX 4090 | ¥1.3 万(一次性) | 13B-33B(但无法跑 33B) | ⭐⭐⭐(不如租) |
(实测)租比买划算。我们帮那个创业团队算过账:买一台 4090 整机约 2.5 万,租同一个配置每小时 ¥4,一年用 300 小时才 ¥1200。除非你天天都在训练,否则租更划算。
(实测)那个创业团队就是这么干的:
# 第一步:本地准备数据集(不需要显卡)
# 从 Git 仓库提取代码 commit 作为训练数据
python3 -c "
import json, os, subprocess
提取 git 历史中的 commit diff 作为训练数据
repo_dir = './my_code_repo'
output_file = './training_data.jsonl'
os.chdir(repo_dir)
log = subprocess.run(
['git', 'log', '--oneline', '--all', '--max-count=500'],
capture_output=True, text=True
).stdout
with open(output_file, 'w') as f:
for line in log.strip().split('\n'):
commit_hash = line.split()[0]
diff = subprocess.run(
['git', 'show', commit_hash, '--stat'],
capture_output=True, text=True
).stdout
# 构造训练数据(你的数据格式)
data = {
'instruction': f'Review this commit: {commit_hash}',
'input': diff,
'output': line
}
f.write(json.dumps(data, ensure_ascii=False) + '\n')
"
(实测)数据准备比训练更重要。我们花了 3 天清理 commit 数据、去掉重复、去掉格式差异过大的 commit。数据质量决定了微调模型最终的水平。如果你的训练数据里混了太多不相干的内容,微调出来的模型还不如原始模型。
| 阶段 | 做什么 | 需要什么硬件 | 预算范围 | 时间 |
|---|---|---|---|---|
| 1. 数据集准备 | 从代码库提取、清洗数据 | 普通电脑(无显卡) | $0 | 3-5 天 |
| 2. 实验验证 | 用小模型(7B)跑通流程 | Colab 免费版 / 单张 3090 | $0-200 | 2-3 天 |
| 3. 正式训练 | 用目标模型(13B-33B)微调 | 1-2 张 3090(云) | ¥800-3000 | 1-2 周 |
| 4. 评估优化 | 测试微调效果、调参 | 普通电脑 + 一张 3090 | ¥200-800 | 3-5 天 |
| 5. 部署上线 | 将微调后的模型部署 | 1 张 3090(推理用) | ¥500-800/月 | 1 天 |
(实测)从 0 到部署,小公司总预算 1 万块足够了。那个创业团队最终花了 ¥8000,做了两周,得到一个在自己代码库上明显提升的模型。他们跟我说,效果比以前用通用模型好很多。
观点收尾:
我帮 5 个小团队做过微调,4 个都是先买了显卡又卖掉了。买显卡做微调是亏的:
正确的做法:
总结显存选择口诀:
7B 模型 QLoRA → RTX 3060(12G)够用
13B 模型 QLoRA → RTX 3090(24G)起步
33B 模型 QLoRA → 2 张 3090(48G)
全量微调 → 别想了,买企业卡或用云
如果你只是想用现成的本地代码模型,不需要微调,看 Ollama + OpenCode + VS Code 免费离线方案。如果你想了解本地模型的推理性能优化,看 本地部署大模型实战。
本文数据来源:HuggingFace PEFT/QLoRA 官方文档 + 博主本人数次微调实操经历。显卡价格参考 2026 年 7 月国内电商平台。