这篇教程我们聊聊环境搭建。说实话,很多朋友在后台私信我,说前面几篇关于大模型微调的基础概念都看懂了,一到环境配置就卡住,打开教程发现要么是"NVIDIA CUDA Toolkit 12.x + PyTorch 2.x"这种命令堆砌,要么是上来就让你装这个装那个,装完也不知道对不对。这篇我把整个大模型微调环境搭建拆开了揉碎了讲,从硬件选型到底层驱动、从Python虚拟环境到微调框架依赖,每一步都告诉你为什么这么做、常见的坑在哪,照着操作基本可以一次跑通。
先说清楚这篇适合谁:如果你是第一次接触大模型微调,对 GPU 驱动、CUDA、conda 这些名词一知半解甚至完全陌生,那这篇就是为你准备的。如果你已经有一定基础,只是每次配环境都要踩一遍坑,那可以直接跳到第 3 节和第 6 节的排查部分。我的目标很简单,让你看完之后能独立配出一个能跑 LoRA 微调的环境,而不是只复制粘贴一段莫名其妙的命令。
1. 先把环境的“分层地图”画进脑子里
1.1 为什么微调环境比普通训练更敏感
很多人觉得配环境不就是装个 PyTorch 吗?确实,如果只是做图像分类、跑跑 ResNet,PyTorch 默认装完基本就能用。但大模型微调不一样,它对整条硬件和软件链路的版本匹配极其敏感。举个最直观的例子:同样的代码,在朋友的 4090 上跑得好好的,你换到一张 T4 上就报 CUDA error: no kernel image is available for execution on the device,或者 torch.cuda.is_available() 永远是 False。这不是代码写错了,而是 GPU 架构、驱动、CUDA 版本、PyTorch 编译选项之间的配合出了问题。
我在帮读者排查的时候发现,至少有一半的“环境问题”不是某一个环节坏了,而是各层之间的关系乱了。打个比方,这就像厨房里要炒菜:锅(显卡)得放在灶台(驱动)上,灶台得接上燃气管道(CUDA),燃气管道得接到燃气公司(PyTorch 的编译版本),最后还得有厨师(虚拟环境)来统筹。你单独看每一层都是好的,但接口型号对不上,火就是点不着。
1.2 环境分层表:每一层到底在干什么
我把大模型微调环境从上到下拆成五层,你脑子里先记住这张表:
| 层级 | 对应软件/组件 | 作用 | 常见误区 |
|---|---|---|---|
| 第 1 层 | NVIDIA 显卡驱动 | 操作系统与 GPU 的桥梁,决定 GPU 能被系统识别 | 装了 CUDA 就以为驱动也装好了 |
| 第 2 层 | CUDA Toolkit | 通用并行计算的 API 和工具集 | 系统里的 CUDA 版本和 PyTorch 自带的 CUDA 混为一谈 |
| 第 3 层 | Python 解释器 + conda 虚拟环境 | 隔离不同项目的依赖,避免包冲突 | 所有包全部装在 base 环境里 |
| 第 4 层 | PyTorch 深度学习框架 | 提供张量计算、自动求导和 GPU 加速接口 | 装了 CPU 版 PyTorch 还傻傻等 GPU |
| 第 5 层 | 微调工具链(transformers、peft、accelerate、bitsandbytes等) | 实现模型加载、LoRA 训练、量化、数据加载 | 装完 PyTorch 就以为万事大吉 |
记住一个核心原则:版本匹配是自上而下兼容的。驱动要支持 CUDA Toolkit,CUDA Toolkit 要支持 PyTorch 的编译版本,PyTorch 要支持你要微调的模型。任何一个环节的“代差”太大,后面就崩。
我在实际教学中也见过完全不懂这套分层逻辑的人,一路 “next” 装完 NVIDIA 驱动,然后立刻去网站下了一个最新的 CUDA Toolkit 12.8,再用 pip 装了一个最新版 PyTorch,结果跑起来一堆警告。但老手就会先看一眼 PyTorch 官方支持的 CUDA 版本是哪几个,再倒推驱动需要什么版本。两者的差别,就是一个是拿着菜谱乱配菜,一个是按当季食材倒排菜单。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 显存预算与硬件选型:这一步别用“感觉”决策
2.1 参数、精度与显存怎么互相换算
微调之前,第一件事不是装环境,是确认你的显卡够不够用。我见过太多人兴致勃勃跑完配置向导,第一次加载 7B 模型就爆显存,又回头来问怎么办。与其到时候抓狂,不如先花五分钟做一次显存预算。
先说最基础的换算公式。模型的参数以“个”为单位,存储每个参数需要的字节数取决于精度:
- FP32(32 位浮点):每个参数 4 字节
- FP16/BF16(16 位浮点):每个参数 2 字节
- INT8(8 位量化):每个参数 1 字节
- INT4(4 位量化):每个参数 0.5 字节
所以一个 70 亿参数(7B)的模型:
- 以 FP16 加载,光权重就需要 7 × 10^9 × 2 字节 ≈ 14 GB
- 以 INT4 量化加载,约 3.5 GB
- 以 FP32 加载,约 28 GB
但这只是权重。真要训练,还需要算梯度、优化器状态和激活值。如果做全参数微调(全量训练所有参数),以 FP16 混合精度为例,训练 7B 模型大概需要 60-80 GB 显存,这就是为什么入门教程几乎清一色建议你用 LoRA 这类参数高效微调方法。LoRA 冻结原始权重,只训练一小部分低秩适配器,显存需求大头基本只剩权重、前向推理的激活值和极少量的训练状态。
2.2 不同显卡和策略的显存参考表
我把常见硬件配置和可选的微调方案整理成一张参考表,这是按我自己经历过和读者反馈过的配置估算出来的,具体数值会随 batch size、序列长度浮动,但量级不会差太多:
| 显卡型号 | 显存 | 推荐微调方案 |
|---|---|---|
| RTX 3060 / 4060 Laptop | 6-8 GB | 7B 模型 + INT4 量化 + LoRA,序列长度 512 左右 |
| RTX 3060 Ti / 4060 Ti | 8-16 GB | 7B 模型 QLoRA(INT4 + LoRA),序列长度 1024 |
| RTX 4070 / 4070 Ti | 12-16 GB | 7B 模型 QLoRA 比较舒服,13B 模型 QLoRA 可尝试 |
| RTX 3090 / 4090 | 24 GB | 7B 模型 LoRA(BF16),13B 模型 QLoRA,很稳 |
| A5000 / A6000 | 24-48 GB | 7B 全参数微调可尝试,13B LoRA 很宽裕 |
| A100 / H100 | 40-80 GB | 13B 甚至 70B 的 LoRA/QLoRA 都可考虑 |
有一个很容易被忽略的点:即使显存够了,也要看 GPU 的计算能力和内存带宽。比如 RTX 3090 和 A5000 都是 24 GB 显存,但 A5000 的显存带宽更大,在 13B 模型训练时速度差距明显。我个人的体会是,显存决定能不能跑,带宽决定跑得快不快。
2.3 没有大显存 GPU 的替代方案
如果你的笔记本只有 4 GB 显存,或者干脆是核显,也不代表完全没戏。我习惯按下面这条优先级想问题:
- 云 GPU 按小时租用。国内像阿里云、腾讯云都有 GPU 实例,按小时计费,跑完就释放。对于学习阶段,花费可能比买显卡便宜得多。
- 用 ModelScope 或类似的在线开发平台。有些平台提供免费或低价的 GPU 环境,内存分配好之后可以直接在浏览器里写代码。
- 考虑纯 CPU 训练极小模型。我不建议你用 CPU 跑 7B 模型的训练,不是不行,是慢到怀疑人生。但如果你想跑通流程,可以找一个 0.5B 或 1B 的小模型,CPU 也能跑起 LoRA,先理解整体逻辑。
无论哪种方案,后面讲的环境配置逻辑都是通用的,只不过把 nvidia-smi 的结果对应到云主机的显卡信息上。
3. 驱动与 CUDA:底层配置翻车的重灾区
3.1 先弄清楚你的硬件和驱动现状
进入实操环节,第一步永远不是安装,而是查看现状。打开终端(Windows 上是 cmd 或 PowerShell,Linux 上直接终端),输入:
bash复制nvidia-smi
正常情况你会看到类似下面的输出:左上角是驱动版本,右上角是 CUDA 版本,下面是 GPU 型号和显存占用。这个 CUDA 版本其实指的是“当前驱动支持的最高 CUDA 版本”,不代你系统里装了对应的 CUDA Toolkit。
如果提示 nvidia-smi 不是内部或外部命令,大概率是驱动没装好,或者装好之后没有把 CUDA 的那几个工具目录加进环境变量。先去 NVIDIA 官网重新安装驱动,安装时选择自定义安装,把“CUDA 组件”一并勾上。Windows 上装驱动之后建议重启一次。
顺带说一个我在读者答疑时经常见到的情况:不少人拿到的是一台已经配置过的机器,nvidia-smi 显示 CUDA 12.4,然后他们在 PyTorch 里选了 cu118 的版本,也能跑。这是因为 NVIDIA 驱动有向后兼容性,只要驱动版本足够新,PyTorch 自带的 CUDA runtime 就能在它上面运行。这引出下一个关键认识。
3.2 驱动、CUDA Toolkit、PyTorch:谁是老板、谁是员工
很多人被“CUDA”这个单词搞晕。其实它有两个层面:
- 系统全局的 CUDA Toolkit:你手动从官网安装的独立软件包,包含 nvcc 编译器、cublas 等库。它服务于需要自己编译 CUDA 代码的场景。
- PyTorch 内置的 CUDA runtime:你用 pip 装 PyTorch 时,包里已经捆绑了对应版本的 CUDA 运行库,它只对 PyTorch 负责。
对我们的环境来说,真正决定 PyTorch 能否用 GPU 的是驱动,而不是系统里单独装的 CUDA Toolkit。你可以不装独立 CUDA Toolkit,照样用 PyTorch 训练;但如果你驱动版本太老,PyTorch 即便装对了也无济于事。
驱动和 CUDA 版本的最低对应关系大致是:
| CUDA 版本 | Linux 最低驱动 | Windows 最低驱动 |
|---|---|---|
| CUDA 11.8 | 520.61.05 | 520.06 |
| CUDA 12.1 | 530.30.02 | 531.14 |
| CUDA 12.4 | 550.54.15 | 551.61 |
选型逻辑是这样的:先看 PyTorch 官网当前主推的稳定版支持哪些 CUDA(常见是 11.8 和 12.1 两个分支),然后对照你的驱动能否撑起这个 CUDA 版本。只要驱动满足最低要求,你完全不需要管系统里装没装独立的 CUDA Toolkit。
如果 nvidia-smi 显示的右上角版本很低,比如只有 11.4,而你想用 cu121 的 PyTorch,那就必须升级驱动。升级驱动这件事我不建议用鲁大师之类的工具,直接去 NVIDIA 官网按显卡型号和操作系统下载最新驱动,干净稳妥。
3.3 常见 GPU 报错的快速判断
环境搭完第一次跑训练,最容易遇到的一批报错就是 CUDA 层面的。我总结几个高频问题:
CUDA error: no kernel image is available for execution on the device:通常意味着 PyTorch 编译时使用的 CUDA 计算能力和你显卡的架构不匹配。比如你的显卡是 GTX 1080(Pascal 架构),却用了针对 Ampere/Ada 优化的新版 PyTorch,就可能出现这种问题。解法是降低 PyTorch 版本,或者换用支持旧架构的 CUDA 版本。CUDA error: out of memory:显存不够。要么降低 batch size,要么梯度检查点、换量化方案,要么换小模型。PyTorch库文件无法定位到指定内存地址:这类玄学问题通常和显卡驱动升级了一半、或者多版本 CUDA DLL 混乱有关。最稳的办法是干净卸载驱动再重装,别在旧驱动的残留上叠加新驱动。
我建议初学阶段把驱动更新到较新版本,然后无脑选 cu121 分支的 PyTorch 安装包,这个组合在大多数消费级显卡上兼容性最好。等你跑顺了,再根据具体硬件做版本优化也不迟。
4. conda虚拟环境与PyTorch安装:从零命令到验证
4.1 用 Miniconda 圈一个独立的环境出来
为什么要用虚拟环境?因为大模型微调涉及的 Python 包版本极其敏感,比如 transformers 更新一个大版本后,某些旧模型的加载方式就变了,你的老训练脚本可能直接瘫痪。如果所有项目共享同一个环境,改一个包就牵连另一套代码,这种日子我过过,很痛。conda 虚拟环境就是给你每个项目准备一个独立的“沙盒”,里面 Python、pip、各种库各玩各的,互不干扰。
安装 Miniconda 的步骤很简单:去官网下载对应你操作系统的安装包,Windows 安装时勾选“Add Miniconda3 to my PATH”。装好之后,打开 Anaconda Prompt(注意别直接打开普通 cmd,很多 conda 命令会失效),依次执行:
bash复制conda create -n llm-finetune python=3.10 -y
conda activate llm-finetune
我建议 Python 版本固定 3.10。原因很现实:PyTorch 和 bitsandbytes、flash-attention 等库对 3.10 的预编译支持最稳,3.12 或 3.13 在 Windows 上经常会遇到“没有预编译 wheel”的尴尬。如果你用的是 Mac 或 Linux,3.11 也可以,但我的默认选项永远是 3.10。
创建成功之后,命令行前面会出现 (llm-finetune) 前缀,就说明你已经进到虚拟环境里了。后面所有 pip 安装命令,都要确保处于这个状态下再执行。
4.2 PyTorch 安装命令:先确认 CUDA 分支再抄作业
进入 PyTorch 官网或者直接访问 pytorch.org,页面往下拉就是安装命令生成器。选择你的操作系统、安装方式(pip 还是 conda)、CUDA 版本,它会自动给你生成一条命令。但这里有个常见坑:很多人选了 CUDA 12.1 却装成了 CPU 版,要仔细看命令里有没有 cu121 字样。
以我目前用得比较多的组合为例,CUDA 12.1 对应的 pip 命令是:
bash复制pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
如果选择 CUDA 11.8,则把命令里的 cu121 换成 cu118。
这条命令的意思是:从 PyTorch 官方指定的 cu121 仓库,安装编译好的 GPU 版本。如果你不指定 --index-url,直接 pip install torch,默认会从 PyPI 拉包,而 PyPI 上的 PyTorch 默认是 CPU 版。很多人就是栽在这里,装完之后 torch.cuda.is_available() 输出 False,还以为是显卡坏了。
下载这个包很耗时,几百 MB 到 2 GB 都有可能。如果你所在网络环境下载这一段非常慢,可以使用国内的 pip 源来加速。比如清华源:
bash复制pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
不过要注意:从清华源拉到的 PyTorch 并不保证是 GPU 版。最稳妥的做法是先加 --index-url https://download.pytorch.org/whl/cu121,再单独给其他依赖设置 -i 源。或者直接把 PyTorch 官方仓库也配成镜像,具体做法各源都有说明,这里不展开。我个人的习惯是:第一遍安装用官方源,哪怕慢一点,至少包一定是完整的;后续补依赖再用国内源加速。
4.3 三行代码验证 PyTorch 是否真正用上了 GPU
安装完成后,验证非常重要。我在教学中最常说的一句话就是“环境配好之后不验证等于白配”。在 (llm-finetune) 环境里输入 Python,然后执行:
python复制import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available())
如果输出:
code复制2.1.0+cu121
12.1
True
说明 PyTorch 是 2.1.0 带 CUDA 12.1 的版本,并且你的 GPU 已被识别。如果第三行是 False,先回头检查安装命令是否带 cu 字样。
更进阶一点,可以再执行如下代码,确认张量真的跑到显卡上:
python复制x = torch.randn(3, 3).cuda()
print(x)
如果能看到一个三行三列的随机矩阵,没有报错,说明 GPU 计算链路已经完全通畅。到了这一步,最底层的环境就算稳了,可以开始装微调相关的库。
5. 微调框架与依赖库:光装 PyTorch 远远不够
5.1 核心库清单与分工
很多人以为装完 PyTorch 就能开始微调,实际上还得补一圈配套库。我给你整理一个最小可用清单,先看表格:
| 库 | 作用 | 什么时候用 |
|---|---|---|
| transformers | 加载预训练模型、tokenizer、训练器 | 必装 |
| datasets | 处理训练数据集的通用库 | 必装 |
| peft | 实现 LoRA、QLoRA 等参数高效微调 | 用 LoRA 时必装 |
| accelerate | 管理混合精度、数据并行、设备分配 | 跑训练脚本时通常需要 |
| bitsandbytes | 提供 INT8 / INT4 量化能力 | 显存不足时配合 QLoRA |
| trl | 官方强化学习/高效微调工具库 | 用 SFTTrainer 时可以替代部分代码 |
| sentencepiece / tokenizers | 分词器底层依赖 | 很多模型加载时需要 |
内部结构上,LoRA 的实现主要依赖 peft,它会包裹原始模型并在注意力层的权重边上插入低秩矩阵。accelerate 更像一个“调度员”,帮你处理模型放到 GPU 还是 CPU、自动混合精度开关、多卡分配等细节。bitsandbytes 则负责把 FP16 权重压成 INT8 或 INT4,让显存不够的朋友也能跑大模型。
5.2 用 LLaMA-Factory 一站式组装,还是自己一步步来
这里有两个路线供不同阶段的读者参考。
路线一:零基础或想快速出结果,我推荐直接上 LLaMA-Factory。这是一个整合了模型加载、数据准备、LoRA 配置、训练和导出的开源项目,几十条命令完成微调,文档也说得很清楚。你可以把它当成一家全包的装修公司,不需要自己琢磨每个库的 API 该怎么配合。
路线二:想理解每个环节在干什么,也愿意为日后二次开发打基础的,我建议手动安装上述库,自己写训练脚本。虽然初次耗时多一些,但一旦出问题你会知道是哪一环的 bug。
我的建议是兼容路线:第一次做项目用 LLaMA-Factory 跑通全流程,建立整体认知;然后动手手动装一遍环境,用官方 transformers + peft 写一个 20 行的 LoRA 训练脚本,替换原有流程。这样既稳,又能学到内核。
5.3 安装命令与锁版本经验
如果你走手动路线,在确认 PyTorch 可用后,执行:
bash复制pip install transformers datasets peft accelerate bitsandbytes sentencepiece
这里我要重点强调锁版本。微调这个领域一周不关注版本就会大变样,transformers 从 4.30 到 4.40 的加载方式就变了好几次。我的操作习惯是:
- 第一次安装完,立即执行
pip freeze > requirements.txt,把当前环境的所有版本快照保存下来。 - 每次复现别人的项目之前,优先看项目里有没有
requirements.txt或environment.yml,有就直接用它对版本。 - 如果训练遇到“某某参数不存在”“某某类已弃用”之类报错,第一时间怀疑是版本差异,而不是自己的代码逻辑错了。
建议用下面这段代码查看关键库的版本:
bash复制pip show transformers peft accelerate bitsandbytes | grep -E "Name|Version"
5.4 bitsandbytes 在 Windows 上的特殊问题
Linux 通常一条命令装好,但 Windows 用户经常在 import bitsandbytes 时遇到各种报错,比如:
could not load library "libbitsandbytes_cuda121.dll"The specified module could not be found
原因是 bitsandbytes 在 Windows 上的预编译 dll 依赖一些 VC++ 运行库。解决办法:安装最新版 Microsoft Visual C++ Redistributable,或者直接安装 Visual Studio Build Tools,选上“使用 C++ 的桌面开发”工作负载。
如果还不行,一个比较实用的建议是检查 PyTorch 的 CUDA 版本。bitsandbytes 的 dll 文件名里带 cu121 这类字样,如果你 PyTorch 是 cu118,而 bitsandbytes 默认装的是 cu121 版本,两者对不上就会加载失败。这时可以指定版本安装,或者通过环境变量告诉 bitsandbytes 用哪个版本。这些都是经验之谈,遇到就顺着这个思路排查,比盲目重装效率高得多。
我见过不少 Windows 用户被 bitsandbytes 逼得转向 WSL 或者云 GPU,这条路对省事来说是合理的。但不妨先试一下补 VC++ 运行库这个最简单的操作,大概率能解决。
6. 环境自检清单与高频报错速查:跑通第一个模型前必须做的事
6.1 15 分钟完整自检流程
环境配完、依赖装完,我建议按照下面这套自检清单走一遍,避免兴致勃勃写第一行训练代码就被环境打脸:
第一步,在终端执行 nvidia-smi,确认 GPU 驱动识别正常、显存信息正确、右上角 CUDA 版本不低于 12.0。
第二步,执行:
bash复制conda activate llm-finetune
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
确认输出带 cu 字样且 is_available() 为 True。
第三步,导入微调相关的库,确认没有加载错误:
bash复制python -c "import transformers, peft, accelerate, datasets; print(transformers.__version__, peft.__version__)"
如果这一步报了 bitsandbytes 相关错误,回到 5.4 节处理。
第四步,用一个小模型做一次真实加载测试。我强烈建议初学者从 Qwen2.5-0.5B 或 bert-base-chinese 这类小模型开始,不要一上来就 7B。这里我用 ModelScope 的下载方式举个例,因为国内访问比较稳定。先确认你的网络条件,再选择合适的模型源:
python复制from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2.5-0.5B" # 根据实际情况替换
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
print("模型加载成功", model.device)
如果你的网络无法访问模型仓库,也可以从 ModelScope 下载模型到本地,再指定本地路径加载。具体流程是先在网页端或 Python 里把模型快照下载下来,然后把 model_name 换成本地路径。第一次加载会下载几百 MB 到 1 GB 的文件,这一步也别慌。
第五步,做一次极短的标准量化加载测试,验证 bitsandbytes 可用:
python复制from transformers import AutoModelForCausalLM
from peft import prepare_model_for_kbit_training
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-0.5B",
load_in_4bit=True
)
model = prepare_model_for_kbit_training(model)
print("4bit 加载 OK")
如果你的显卡只有 6-8 GB 显存的入门卡,这一步特别值得跑一下,它能确认你后续用 QLoRA 微调时,“量化加载”这个通道是畅通的。到这一步,环境搭建的自检可以宣布通过。
6.2 高频报错对照表与排查思路
我把从读者和学员那收集到的高频报错整理成一张速查表,按“报错现象 → 原因 → 处理方式”来写:
| 报错/现象 | 常见原因 | 处理思路 |
|---|---|---|
nvidia-smi 找不到 |
驱动未装或环境变量没配 | 装驱动、检查系统 PATH |
torch.cuda.is_available() 为 False |
装了 CPU 版 PyTorch,或驱动太旧 | 重新安装 cu 后缀的 PyTorch,升级驱动 |
CUDA error: no kernel image... |
GPU 架构太老与 CUDA 版本不匹配 | 降低 CUDA 版本,或降低 PyTorch 版本 |
ImportError: libbitsandbytes... |
VC++ 运行库缺失或 CUDA 分支不对 | 安装 VC++ Redistributable,匹配 cu 版本 |
OutOfMemoryError: CUDA out of memory |
显存不足或 batch size 太大 | 调小 batch size、开梯度检查点、降量化位数 |
KeyError: 'mistral' 之类模型名不识别 |
transformers 版本过旧 | 升级 transformers |
| 模型下载卡住 / 超时 | 网络访问模型源不稳定 | 换 ModelScope 下载到本地,再加载本地路径 |
排查的顺序,我总结成一句话:先硬件后软件,先驱动后框架,先 PyTorch 后工具库。很多人一上来就去 GitHub 提 issue,其实 80% 的问题在上面三层就解决了。
6.3 最后再提两个建议
跑通第一个小模型的 LoRA 微调之前,有两件事值得养成习惯:
第一,不要把所有依赖都用最新版。我在 5.3 节强调了锁版本,这里再说一次。大模型微调工具链迭代极快,新版常常不兼容旧模型权重或训练配置。一个可行的做法是:找一个已经验证可以训练全套流程的组合版本(比如 transformers 4.40 时代 + peft 0.10 的时代风格),然后所有项目尽量复用这个组合,不要再随手 pip upgrade。
第二,保留一个“最小可跑示例”。我每次配置完环境,都会顺手保留一个 0.5B 模型的 QLoRA 训练脚本,放在项目根目录的 quick_test.py 里。以后改环境或者换机器,花五分钟跑一遍这个脚本,能快速判断新环境的状态。别等真正训练大模型那天才发现环境有暗伤,那才是浪费时间。
做环境搭建这件事,看起来是体力活,实际上它要求的是“分层排查”的意识。先确认驱动看到显卡,再确认 PyTorch 看到 CUDA,再确认量化库看到 PyTorch,每一层都通了,大模型微调这扇门才算真正打开。接下来你就可以安心地去研究数据集格式、训练参数调优这些真正有意思的事情了。
