适用:Windows + NVIDIA 显卡,本地跑 ≤8B 模型(QLoRA 微调 / 推理)。变量用 <尖括号> 标注,视情况替换。
第 0 步:先匹配硬件与方案
动手前先确认你的配置能干什么,避免白折腾。
| 显存 | 能做什么 | 底座建议 |
|---|---|---|
| ≤8G | 只推理,或 1.5B QLoRA | DeepSeek-R1-Distill-Qwen-1.5B |
| 12~16G | 7B QLoRA 微调 + 推理 | DeepSeek-R1-Distill-Qwen-7B |
| 24G+ | 14B QLoRA,或 7B 全参 | Qwen2.5-14B / 7B |
| <8G / 无独显 | 只走 API 或 Ollama | 不本地训练 |
显卡架构决定 CUDA 版本
选错跑不起来,这是最关键的匹配项。
| 架构 | 代表卡 | 最低 CUDA | PyTorch 源 |
|---|---|---|---|
| Blackwell | RTX 50 系 | 12.8 | cu128 |
| Ada | RTX 40 系 | 11.8 | cu118 / cu121 |
| Ampere | RTX 30 系 | 11.7 | cu118 |
按下 Win + R,键入 cmd 打开终端,输入 nvidia-smi。如果能看到显卡信息,请查看右上角的 CUDA Version,这是显卡所支持最高的 CUDA 版本,后续安装 PyTorch 时不得高于此版本!
查显卡架构:看型号后百度 <型号> compute capability。sm_120 = Blackwell,必须 cu128,老版本 torch 会报 no kernel image。
方案选择:
- 只是"让模型知道我的文档" → 优先 RAG(向量库 + 检索),比微调省事
- 要改输出风格 / 格式 / 术语习惯 → 微调
- 两者都要 → 先 RAG 打底,再小规模微调
第 1 步:创建隔离环境
为什么隔离:系统 Python 装依赖容易污染、权限报错、版本冲突。所有依赖进独立文件夹,删项目 = 删环境。
cmd
多版本共存时,用 py launcher 明确锁定:
验证隔离生效:
必须输出 <项目目录>\<环境名>\Scripts\python.exe,不是系统 Python 路径。
激活命令对照
| Shell | 命令 |
|---|---|
| CMD | <环境名>\Scripts\activate |
| PowerShell | .\<环境名>\Scripts\Activate.ps1 |
PowerShell 若报"禁止运行脚本":
提示:退出用
deactivate。重开终端要重新激活(看到 (<环境名>) 前缀才算)。建议 Python 版本:3.10 或 3.12,避开 3.13(生态不成熟)。
第 2 步:安装 PyTorch(按架构选源)
根据第 0 步的架构选对应源:
cmd
注意:PyTorch 必须用官方源,别挂清华源,否则下到 CPU 版。
验证:
期望:2.x.x+cu1xx True (12, 0)(数字对应你的架构)。若 False → 更新 NVIDIA 驱动。
第 3 步:安装训练栈
bitsandbytes 是 Windows 上最容易失败的包。如果 import 报
DLL load failed,换预编译 whl:
实在搞不定 → 切 WSL2,Linux 下一把过。
环境自检脚本 check_env.py
python
跑通(无 FAILED)才继续。
第 4 步:设置环境变量(国内必做)
临时(当前窗口):
永久(推荐,重开终端生效):
| 变量 | 作用 | 不加的后果 |
|---|---|---|
HF_ENDPOINT |
走国内镜像 | 连 huggingface.co 超时 |
HF_HUB_DISABLE_XET |
禁用 Xet 协议 | 下载中途报 401 |
HF_HOME |
缓存集中到指定盘 | 默认塞 C 盘,占几十 GB |
语法对照(写错会报"语法不正确")
| Shell | 写法 |
|---|---|
| CMD 临时 | set VAR=值(等号两边无空格) |
| PowerShell 临时 | $env:VAR="值" |
| 永久 | setx VAR "值"(需重开终端) |
setx 对当前窗口不生效,必须关掉重开。验证:echo %HF_ENDPOINT%。
第 5 步:调整 Windows 虚拟内存(7B 加载必做)
不做会报:
OSError: 页面文件太小,无法完成操作 (os error 1455)
操作步骤:
- 按
Win + R→ 输入sysdm.cpl→ 回车 - 进入 高级 → 性能设置 → 高级 → 虚拟内存更改
- 取消勾选"自动管理"
- 选空间充足的盘
- 自定义:初始 32768 MB / 最大 65536 MB
- 设置 → 确定 → 重启电脑
原因:加载 fp16 权重时 safetensors 用 mmap,Windows 需要预留等量 commit 内存。
第 6 步:下载并验证模型
最小推理脚本 infer_test.py:
python
首次下载 ~15GB(fp16 全量),4bit 加载后显存约 5GB。
通用坑点速查表
| 现象 | 原因 | 解法 |
|---|---|---|
'conda' 不是命令 |
没装 conda | 用 venv 替代 |
$env:X = "..." 语法错误 |
CMD 里用了 PowerShell 语法 | 改 set X=... |
no kernel image available |
torch 版本不匹配显卡架构 | 按架构装对应 cuXXX |
| 下载报 401 | Xet 协议,镜像不支持 | set HF_HUB_DISABLE_XET=1 |
os error 1455 |
虚拟内存不足 | 调页面文件到 32G/64G 并重启 |
连的是 huggingface.co 超时 |
镜像变量没生效 | echo %HF_ENDPOINT% 确认,重开终端 |
triton not found 警告 |
Windows 支持差 | 无视,不影响 |
python 指向错版本 |
多版本 PATH 混乱 | 用 py -3.12 锁定 |
| 模型缓存占满 C 盘 | 默认在用户目录 | 设 HF_HOME 到其它盘 |
| 输出大段"内心独白" | R1 系列思考链被截断 | max_new_tokens 调大到 1024+ |