GPU租用、深度学习环境常见问题解答
根据您的应用场景选择:
| GPU型号 | 显存 | 适用场景 | 性价比 |
|---|---|---|---|
| RTX 3090 | 24GB | 中小模型训练、推理 | 高 |
| RTX 4090 | 24GB | 大模型推理、游戏AI | 高 |
| A100 40GB | 40GB | 大模型训练、科学计算 | 中 |
| A100 80GB | 80GB | 超大模型训练、LLM | 中 |
| H100 80GB | 80GB | 前沿研究、大规模训练 | 低 |
计费方式:
费用组成:
连接方式:
# SSH连接(Linux/Mac)
ssh -p 端口号 root@服务器IP
# Windows使用PuTTY或MobaXterm
# 主机:服务器IP
# 端口:提供的SSH端口
# 用户名:root
# 密码:创建时设置的密码
# JupyterLab访问
# 浏览器访问:https://服务器IP:8888
# 输入Token或密码
多种上传方式:
# 方式1:SCP命令
scp -P 端口号 -r ./data root@服务器IP:/workspace/
# 方式2:rsync(支持断点续传)
rsync -avz --progress -e "ssh -p 端口号" ./data root@服务器IP:/workspace/
# 方式3:SFTP客户端
# 使用FileZilla、WinSCP等工具
# 协议:SFTP
# 主机:服务器IP
# 端口:SSH端口
# 方式4:对象存储同步
# 使用ossutil、coscmd等工具从云存储同步
# 查看CUDA版本
nvcc --version
# 查看NVIDIA驱动版本
nvidia-smi
# 查看GPU信息
nvidia-smi -q
# 测试CUDA程序
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
make
./deviceQuery
# 预期输出:Result = PASS
排查步骤:
# 查看PyTorch版本
python -c "import torch; print(torch.__version__)"
# 检查CUDA是否可用
python -c "import torch; print(torch.cuda.is_available())"
# 查看GPU数量
python -c "import torch; print(torch.cuda.device_count())"
# PyTorch CUDA版本
python -c "import torch; print(torch.version.cuda)"
# 系统CUDA版本
nvcc --version
# 两者需要匹配或使用兼容版本
# CUDA 11.8
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
# 使用venv
python -m venv myenv
source myenv/bin/activate # Linux/Mac
myenv\Scripts\activate # Windows
# 使用conda
conda create -n myenv python=3.10
conda activate myenv
# 导出环境
pip freeze > requirements.txt
conda env export > environment.yml
# 恢复环境
pip install -r requirements.txt
conda env create -f environment.yml
解决方案:
# 梯度累积示例
accumulation_steps = 4
for i, batch in enumerate(dataloader):
loss = model(batch) / accumulation_steps
loss.backward()
if (i + 1) % accumulation_steps == 0:
optimizer.step()
optimizer.zero_grad()
# PyTorch AMP
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
with autocast():
output = model(input)
loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
import torch
torch.cuda.empty_cache() # 清空缓存
优化建议:
# 增加DataLoader workers
DataLoader(dataset, batch_size=32, num_workers=8, pin_memory=True)
# 使用SSD存储数据
# 将数据加载到内存(如果内存足够)
model = torch.compile(model)
# 使用fused Adam
from torch.optim import AdamW
optimizer = AdamW(params, fused=True)
# 保存检查点
checkpoint = {
'epoch': epoch,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': loss,
}
torch.save(checkpoint, 'checkpoint.pth')
# 恢复训练
checkpoint = torch.load('checkpoint.pth')
model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
epoch = checkpoint['epoch']
loss = checkpoint['loss']
# 自动保存最佳模型
if val_loss < best_loss:
best_loss = val_loss
torch.save(model.state_dict(), 'best_model.pth')
部署方案:
pip install vllm
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-hf \
--tensor-parallel-size 1
docker run --gpus all \
-p 8080:80 \
ghcr.io/huggingface/text-generation-inference:latest \
--model-id meta-llama/Llama-2-7b-hf
量化优势:
# 使用bitsandbytes进行8bit量化
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-hf",
load_in_8bit=True,
device_map="auto"
)
# 使用GPTQ进行4bit量化
# 使用AutoGPTQ或llama.cpp
查看方式:
计费规则:
建议:长期不用的实例应释放而非仅关机