LLM 后训练实践
课程资源

环境配置指南

AutoDL 环境搭建、Colab Pro 替代方案、依赖安装、模型预下载、一键启动脚本与验证步骤

推荐配置方案

本课程所有实验都基于参数高效微调(LoRA/QLoRA),对 GPU 资源要求相对友好。以下是推荐的计算资源方案:

方案GPU显存适用课次月费用预估
AutoDL 标准配置(推荐)A100-40G40 GB全部~113 元/学期
AutoDL 进阶配置A100-80G80 GB第4课 GRPO~27 元/第4课
Colab ProT4 / A10016-40 GB第1-3、5课~75 元/月
本地 GPURTX 409024 GB降级版实验自有设备

标准推荐:大部分同学使用 AutoDL A100-40G 即可完成全部实验。仅第4课的 GRPO 实验建议使用 A100-80G(或将模型降级为 Qwen3-0.6B 在 40G 上运行)。


方案一:AutoDL 环境搭建(推荐)

注册与创建实例

注册 AutoDL 账号

访问 https://www.autodl.com,注册并充值(首次建议充值 50 元)。

选择 GPU 机器

  • 进入"容器实例" → "创建新实例"
  • GPU 选择:NVIDIA A100-40G(约 3.45 元/小时)或 A100-80G(约 6.80 元/小时)
  • 地区选择:选择可用机器较多的区域

选择镜像

  • 基础镜像PyTorch 2.3.0 + Python 3.10 + CUDA 12.1
  • 如果教师提供了自定义镜像,选择"自定义镜像"并输入镜像 ID

数据盘配置

  • 系统盘:30 GB(默认足够)
  • 数据盘:建议 50 GB 以上(存放模型和数据集)
  • 如果使用共享数据盘,确认已挂载到 /root/autodl-fs/

启动实例

创建后等待实例启动(约 1-3 分钟),通过 JupyterLab 或 SSH 连接。

安装依赖

# ============================================
# 课程核心依赖(一次性安装)
# ============================================

# 重要:Qwen3 要求 transformers >= 4.51.0
pip install "transformers>=4.51.0" \
    trl \
    peft \
    accelerate \
    bitsandbytes \
    datasets \
    tokenizers

# 推理加速(第4、5课需要)
pip install vllm

# 多模态微调(第5课选做)
pip install llamafactory

# 评估工具
pip install rouge-score nltk scikit-learn

# 可视化与实用工具
pip install matplotlib seaborn wandb gradio

# 数据处理
pip install pandas numpy tqdm

版本注意事项

  • transformers >= 4.51.0 是硬性要求——Qwen3 的模型架构在旧版本中不可用
  • trl >= 0.15.0 推荐使用最新版(包含 GRPO 训练器的改进)
  • bitsandbytes >= 0.43.0 以支持最新的量化特性
  • 如果遇到 CUDA 版本不兼容,尝试 pip install bitsandbytes --prefer-binary

模型预下载

为避免实验时因网络问题导致模型下载失败,建议提前下载所有需要的模型。

# ============================================
# 模型预下载脚本
# ============================================

# 设置模型缓存目录(建议放在数据盘)
export HF_HOME=/root/autodl-fs/huggingface
mkdir -p $HF_HOME

# 安装 huggingface_hub CLI
pip install huggingface_hub[cli]

# --- 主力模型(第1-4课必需)---
# Qwen3-1.7B(Instruct 版)
huggingface-cli download Qwen/Qwen3-1.7B --local-dir $HF_HOME/Qwen3-1.7B

# Qwen3-1.7B-Base(基座版,第4课 GRPO 需要)
huggingface-cli download Qwen/Qwen3-1.7B-Base --local-dir $HF_HOME/Qwen3-1.7B-Base

# --- 低配备选(T4 / RTX 4090 用户)---
# Qwen3-0.6B
huggingface-cli download Qwen/Qwen3-0.6B --local-dir $HF_HOME/Qwen3-0.6B

# Qwen3-0.6B-Base
huggingface-cli download Qwen/Qwen3-0.6B-Base --local-dir $HF_HOME/Qwen3-0.6B-Base

# --- 第5课量化实验 ---
# Qwen3-8B
huggingface-cli download Qwen/Qwen3-8B --local-dir $HF_HOME/Qwen3-8B

# --- 第5课多模态选做 ---
# Qwen3-VL-2B-Instruct
huggingface-cli download Qwen/Qwen3-VL-2B-Instruct --local-dir $HF_HOME/Qwen3-VL-2B-Instruct

# --- 第4-5课蒸馏对比 ---
# DeepSeek-R1-Distill-Qwen-1.5B(注意:基于 Qwen2.5,非 Qwen3)
huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B \
    --local-dir $HF_HOME/DeepSeek-R1-Distill-Qwen-1.5B

模型存储空间需求

模型大小课次必需性
Qwen3-0.6B / 0.6B-Base~1.2 GB x2低配备选可选
Qwen3-1.7B / 1.7B-Base~3.4 GB x2第1-4课必需
Qwen3-8B~16 GB第5课必需
Qwen3-VL-2B-Instruct~4 GB第5课选做可选
DeepSeek-R1-Distill-Qwen-1.5B~3 GB第4-5课推荐
合计(全部下载)~48 GB
合计(仅必需)~26 GB

数据集预下载

# ============================================
# 数据集预下载
# ============================================

export DATA_DIR=/root/autodl-fs/datasets

# 第1课 - UltraChat
python -c "
from datasets import load_dataset
ds = load_dataset('HuggingFaceH4/ultrachat_200k', split='train_sft[:10000]')
ds.save_to_disk('$DATA_DIR/ultrachat_10k')
print(f'UltraChat 子集: {len(ds)} 条')
"

# 第3课 - UltraFeedback
python -c "
from datasets import load_dataset
ds = load_dataset('HuggingFaceH4/ultrafeedback_binarized', split='train_prefs[:5000]')
ds.save_to_disk('$DATA_DIR/ultrafeedback_5k')
print(f'UltraFeedback 子集: {len(ds)} 条')
"

# 第4课 - GSM8K
python -c "
from datasets import load_dataset
ds = load_dataset('openai/gsm8k', 'main')
ds.save_to_disk('$DATA_DIR/gsm8k')
print(f'GSM8K 训练集: {len(ds[\"train\"])} 条, 测试集: {len(ds[\"test\"])} 条')
"

方案二:Google Colab Pro

如果无法使用 AutoDL,Google Colab Pro(约 75 元/月)是可行的替代方案。

订阅 Colab Pro

访问 https://colab.research.google.com,点击"升级到 Pro"。

设置运行时

  • 运行时 → 更改运行时类型 → GPU → T4 或 A100(Pro 可用)
  • 高 RAM 选项:开启(推荐)

安装依赖

在 Colab notebook 的第一个 cell 中运行:

!pip install "transformers>=4.51.0" trl peft accelerate bitsandbytes datasets -q

挂载 Google Drive

将模型存放在 Google Drive 中避免重复下载:

from google.colab import drive
drive.mount('/content/drive')

import os
os.environ['HF_HOME'] = '/content/drive/MyDrive/huggingface'

Colab 的局限性

  • T4 仅 16GB 显存,第4课 GRPO 实验需使用 Qwen3-0.6B
  • 会话有时间限制(Pro 约 12 小时),长训练可能被中断
  • 网络连接有时不稳定,影响模型下载
  • 第5课的 8B 模型 FP16 加载无法在 T4 上完成

一键环境配置脚本

以下脚本可在 AutoDL 实例上一键完成环境配置:

#!/bin/bash
# setup.sh - 一键环境配置脚本
# 使用方法: bash setup.sh

set -e

echo "============================================"
echo "  LLM 后训练课程环境配置"
echo "============================================"

# 1. 检测 GPU
echo ""
echo "[1/5] 检测 GPU..."
if command -v nvidia-smi &> /dev/null; then
    GPU_NAME=$(nvidia-smi --query-gpu=name --format=csv,noheader | head -1)
    GPU_MEM=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader | head -1)
    echo "  GPU: $GPU_NAME ($GPU_MEM)"
else
    echo "  警告: 未检测到 GPU!"
    echo "  部分实验将无法运行。"
fi

# 2. 安装 Python 依赖
echo ""
echo "[2/5] 安装 Python 依赖..."
pip install -q "transformers>=4.51.0" \
    trl peft accelerate bitsandbytes \
    datasets tokenizers \
    rouge-score nltk scikit-learn \
    matplotlib seaborn gradio \
    pandas numpy tqdm

# 3. 验证关键库版本
echo ""
echo "[3/5] 验证库版本..."
python -c "
import transformers, trl, peft, bitsandbytes, torch
print(f'  transformers: {transformers.__version__}')
print(f'  trl: {trl.__version__}')
print(f'  peft: {peft.__version__}')
print(f'  bitsandbytes: {bitsandbytes.__version__}')
print(f'  torch: {torch.__version__}')
print(f'  CUDA available: {torch.cuda.is_available()}')
if torch.cuda.is_available():
    print(f'  GPU: {torch.cuda.get_device_name(0)}')
    print(f'  显存: {torch.cuda.get_device_properties(0).total_mem / 1024**3:.1f} GB')

# 检查 transformers 版本
from packaging import version
assert version.parse(transformers.__version__) >= version.parse('4.51.0'), \
    f'transformers 版本过低: {transformers.__version__}, 需要 >= 4.51.0'
print('  transformers 版本检查: 通过')
"

# 4. 设置模型缓存目录
echo ""
echo "[4/5] 配置模型缓存目录..."
if [ -d "/root/autodl-fs" ]; then
    export HF_HOME=/root/autodl-fs/huggingface
    echo "export HF_HOME=/root/autodl-fs/huggingface" >> ~/.bashrc
    echo "  模型缓存: $HF_HOME (数据盘)"
else
    export HF_HOME=~/.cache/huggingface
    echo "  模型缓存: $HF_HOME (默认)"
fi
mkdir -p $HF_HOME

# 5. 快速验证:加载 tokenizer
echo ""
echo "[5/5] 快速验证..."
python -c "
try:
    from transformers import AutoTokenizer
    # 尝试加载 tokenizer(如果模型已下载)
    import os
    hf_home = os.environ.get('HF_HOME', '~/.cache/huggingface')
    local_path = os.path.join(hf_home, 'Qwen3-1.7B')
    if os.path.exists(local_path):
        tok = AutoTokenizer.from_pretrained(local_path)
        print('  Qwen3-1.7B tokenizer 加载: 成功')
    else:
        print('  Qwen3-1.7B 模型尚未下载(请运行模型下载脚本)')
    print('  环境验证: 通过')
except Exception as e:
    print(f'  验证失败: {e}')
"

echo ""
echo "============================================"
echo "  环境配置完成!"
echo "============================================"
echo ""
echo "下一步:"
echo "  1. 运行模型下载脚本(如果尚未下载)"
echo "  2. 在 JupyterLab 中打开课程 notebook"
echo "  3. 实验结束后记得关机!"

环境验证清单

配置完成后,运行以下 Python 脚本验证环境:

# verify_env.py - 环境验证脚本

import sys

def check(name, test_fn):
    try:
        result = test_fn()
        print(f"  [PASS] {name}: {result}")
        return True
    except Exception as e:
        print(f"  [FAIL] {name}: {e}")
        return False

print("=" * 50)
print("环境验证")
print("=" * 50)

passed = 0
total = 0

# 1. PyTorch + CUDA
total += 1
if check("PyTorch + CUDA", lambda: (
    __import__('torch'),
    f"torch {__import__('torch').__version__}, "
    f"CUDA {'可用' if __import__('torch').cuda.is_available() else '不可用'}"
)[-1]):
    passed += 1

# 2. transformers 版本
total += 1
if check("transformers >= 4.51.0", lambda: (
    __import__('transformers'),
    f"v{__import__('transformers').__version__}"
)[-1]):
    passed += 1

# 3. TRL
total += 1
if check("TRL", lambda: f"v{__import__('trl').__version__}"):
    passed += 1

# 4. PEFT
total += 1
if check("PEFT", lambda: f"v{__import__('peft').__version__}"):
    passed += 1

# 5. bitsandbytes
total += 1
if check("bitsandbytes", lambda: f"v{__import__('bitsandbytes').__version__}"):
    passed += 1

# 6. datasets
total += 1
if check("datasets", lambda: f"v{__import__('datasets').__version__}"):
    passed += 1

# 7. GPU 信息
total += 1
import torch
if torch.cuda.is_available():
    if check("GPU", lambda: (
        f"{torch.cuda.get_device_name(0)}, "
        f"{torch.cuda.get_device_properties(0).total_mem / 1024**3:.1f} GB"
    )):
        passed += 1
else:
    print("  [WARN] GPU: 不可用(CPU 模式)")

print(f"\n结果: {passed}/{total} 项通过")
if passed == total:
    print("环境配置完成,可以开始实验!")
else:
    print("请修复失败项后重试。")

常见问题

Q: transformers 安装了但版本低于 4.51.0?

A: 运行 pip install "transformers>=4.51.0" --upgrade 强制升级。如果仍有问题,尝试 pip install transformers --force-reinstall

Q: bitsandbytes 安装失败?

A: 这通常是 CUDA 版本不匹配。尝试:

pip install bitsandbytes --prefer-binary
# 或指定版本
pip install bitsandbytes==0.43.0

Q: 模型下载速度很慢?

A: 使用 Hugging Face 镜像源加速:

export HF_ENDPOINT=https://hf-mirror.com
# 然后再运行下载命令

Q: AutoDL 实例关机后数据丢失?

A: AutoDL 关机后系统盘数据保留,但建议将模型和重要文件存放在数据盘/root/autodl-fs/)。数据盘关机不计费且数据永久保留。