第二章:环境搭建与基础操作
说实话,模型微调这件事,百分之六十的坑都出在环境搭建上。我自己带过不少新人,上来就急着跑代码,结果显卡驱动不对、CUDA版本冲突、Python包装不上……一折腾就是半天。所以这一章,咱们踏踏实实把地基打牢。
2.1 GPU服务器选型与配置
先聊硬件。你可能会问:「我拿自己的笔记本跑行不行?」嗯,如果你只是想体验一下,用CPU跑个极小的模型也不是不行,但速度会让你怀疑人生。我建议,至少准备一张显存8GB以上的显卡。
我个人习惯把GPU选型分成三个档位:
| 档次 | 推荐显卡 | 显存 | 适用场景 |
|---|---|---|---|
| 入门 | RTX 3060 / 4060 | 12GB | 跑通Pipeline、小规模微调 |
| 进阶 | RTX 4090 | 24GB | LoRA微调、DreamBooth |
| 专业 | A100 / H100 | 40GB+ | 全参数微调、生产部署 |
驱动和CUDA的安装,我踩过一个大坑。曾经有一次,我装好了PyTorch,结果torch.cuda.is_available()一直返回False。查了半天,发现是CUDA驱动版本太老。记住一个原则:先装NVIDIA驱动,再装CUDA Toolkit,最后装PyTorch。顺序错了,后面全是泪。
2.2 Python虚拟环境与依赖安装
为什么一定要用虚拟环境?说白了,就是防止「依赖地狱」。你想想看,项目A需要diffusers 0.21.0,项目B需要0.25.0,如果全装全局,迟早要打架。
我推荐用conda,因为它不光管Python包,还能管CUDA相关的包。来看看我的标准操作:
# 创建虚拟环境,指定Python版本
conda create -n sd-course python=3.10
# 激活环境
conda activate sd-course
# 安装PyTorch(根据你的CUDA版本选择命令)
# CUDA 11.8
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 安装核心依赖
pip install diffusers transformers accelerate xformers
安装完成后,验证一下环境:
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
如果输出True,恭喜你,环境通了。如果输出False,别慌,检查一下:
- 驱动版本对不对?用nvidia-smi查看
- PyTorch版本和CUDA版本是否匹配?
- 是不是忘了激活虚拟环境?
2.3 Hugging Face Diffusers库入门
Diffusers这个库,说白了就是Hugging Face团队帮你封装好的「模型工具箱」。你不需要自己写采样器、调度器,直接调用就行。我个人觉得,它是目前最友好的Stable Diffusion开发库。
核心概念就三个:
- Pipeline:端到端的流程,输入文本,输出图片
- Model:底层的UNet、VAE、CLIP等模型
- Scheduler:控制去噪过程的调度器
你刚开始学,只需要关注Pipeline就够了。后面微调的时候,才会接触到Model和Scheduler的细节。
2.4 用Pipeline跑通第一个文生图
好,到了最激动人心的环节。咱们用Stable Diffusion XL(SDXL)来生成第一张图。为什么选SDXL?因为它比SD 1.5/2.1效果好太多,而且Diffusers原生支持。
from diffusers import StableDiffusionXLPipeline
import torch
# 加载模型(第一次运行会自动下载,大概6-7GB)
pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
torch_dtype=torch.float16,
variant="fp16",
use_safetensors=True
)
# 移动到GPU
pipe = pipe.to("cuda")
# 启用xformers加速(显存不够时可以试试)
pipe.enable_xformers_memory_efficient_attention()
# 生成图片
prompt = "a cute cat wearing a hat, digital art, high quality"
image = pipe(
prompt=prompt,
num_inference_steps=30,
guidance_scale=7.5
).images[0]
# 保存图片
image.save("first_image.png")
print("图片已保存!")
- num_inference_steps:去噪步数,默认50。步数越多细节越好,但速度慢。我一般用30步,效果和50步差别不大。
- guidance_scale:提示词引导强度,默认7.5。值越大,图片越贴合提示词,但可能过饱和。我习惯7.0-8.0之间。
第一次运行,模型会从Hugging Face下载。如果你网络不好,可以提前用镜像站。我曾经在客户现场,网络限速到100KB/s,下载了整整两个小时……后来学乖了,提前把模型下载好,离线加载。
跑通之后,你可以试试换几个提示词:
prompts = [
"a beautiful landscape, sunset, mountains, lake, photorealistic",
"a futuristic city, cyberpunk, neon lights, rain, 8k",
"a portrait of a woman, oil painting, van gogh style"
]
for i, p in enumerate(prompts):
image = pipe(prompt=p, num_inference_steps=30).images[0]
image.save(f"output_{i}.png")
到这里,你已经成功跑通了第一个文生图程序。别小看这一步,很多人在环境搭建阶段就放弃了。你能坚持到这里,说明已经具备了继续深入的基础。下一章,咱们开始聊数据集准备和模型微调——那才是真正有意思的部分。