在個人設備上“把 GPU 真正用起來”做 NLP,分五步:準備 → 安裝 → 驗證 → 訓練/推理 → 踩坑排查。下面每一步都給出可復制命令和常見錯誤。
──────────────────
1. 硬件準備
? 一張 NVIDIA GPU,算力 ≥ 6.1(GTX 1660 Ti/RTX 2060 及以上)。
? 顯存 ≥ 6 GB(7B 模型 LoRA 微調夠用)。
? PCIe 供電充足,電源 ≥ 500 W。
──────────────────
2. 驅動 & CUDA 一鍵裝
Ubuntu 20.04 為例(Win11 直接在官網下 EXE 即可):
sudo apt update && sudo apt install -y nvidia-driver-535
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/12.3.0/local_installers/ ubuntu2004 main"
sudo apt install -y cuda-12-3
重啟后執行 nvidia-smi
,能看到 GPU 型號即 OK。
──────────────────
3. Conda + PyTorch GPU 版
conda create -n nlp python=3.10 -y
conda activate nlp
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
驗證:
import torch
print(torch.cuda.is_available(), torch.cuda.get_device_name(0))
輸出 True
和顯卡型號即可。
──────────────────
4. 訓練腳本里顯式用 GPU
示例:用 transformers + LoRA 微調 7B 模型
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_modelmodel_name = "baichuan-inc/Baichuan2-7B"
model = AutoModelForCausalLM.from_pretrained(model_name,torch_dtype="auto",device_map="auto" # 自動分到 GPU
)
lora_config = LoraConfig(task_type="CAUSAL_LM", r=8, lora_alpha=32)
model = get_peft_model(model, lora_config)args = TrainingArguments(output_dir="out",per_device_train_batch_size=1,gradient_accumulation_steps=16,fp16=True, # 混合精度dataloader_pin_memory=True,logging_steps=10
)
trainer = Trainer(model=model, args=args, train_dataset=dataset)
trainer.train()
關鍵參數
? device_map="auto"
自動把不同層放到 GPU / CPU / 磁盤。
? fp16=True
或 bf16=True
可省 40% 顯存。
? gradient_checkpointing=True
再省 20% 顯存,速度略慢。
──────────────────
5. 推理顯存最小化
? 僅推理:
from transformers import pipeline
pipe = pipeline("text-classification", model="IDEA-CCNL/Erlangshen-Mini", device=0) # device=0 強制 GPU
? 量化示例(4-bit):
from transformers import BitsAndBytesConfig
bnb = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.float16)
model = AutoModelForCausalLM.from_pretrained(model_name, quantization_config=bnb)
顯存占用從 14 GB 降到 6 GB。
──────────────────
6. 常見報錯速查
報錯 原因 解決
CUDA out of memory batch 過大 降 batch / 開 gradient checkpointing
cuDNN version mismatch 驅動與 PyTorch 不匹配 conda install cudatoolkit=11.8
與驅動對應
NCCL error 多卡通訊 單機單卡可 CUDA_VISIBLE_DEVICES=0
規避
──────────────────
7. 一鍵腳本(保存即用)
setup_gpu.sh
#!/bin/bash
conda create -n nlp python=3.10 -y
conda activate nlp
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install transformers datasets accelerate peft bitsandbytes
python -c "import torch; print('GPU OK:', torch.cuda.is_available())"
執行 bash setup_gpu.sh
,30 秒后可直接跑 GPU 訓練。