5090显卡算力租赁实战:从SSH连接到PyTorch训练任务启动
在立方云租用RTX 5090后,通过SSH连接进入容器,运行
nvidia-smi验证GPU,将代码和数据放入/workspace,即可启动PyTorch训练任务。
一、前置准备:创建5090实例
登录立方云控制台,进入GPU容器创建页面。先选择地域(建议选择距离团队最近的地域,不同地域库存可能不同),然后选择RTX 5090卡型,计费模式建议首次选按小时(灵活止损)。镜像优先选择包含CUDA、Python、PyTorch的官方预装镜像,按控制台提示设置SSH密码(创建后用于root登录)。也可在创建后通过控制台上传SSH公钥,使用密钥登录更安全。
确认费用预览中的计费明细:GPU算力费为实例创建时产生的核心费用;数据盘默认20GB以内免费,超出部分按存储单价计费。确认账户余额充足后点击创建实例。回到实例列表等待状态变为"运行中"(首次创建需等待几分钟完成部署),即可开始连接。
二、SSH连接:进入你的5090环境
在实例详情中找到SSH端口,复制页面提供的命令执行:
ssh root@<ip> -p <port>
第一次连接输入yes确认,然后输入创建时设置的SSH密码(输入过程中不显示字符)。
连接成功后,先运行以下命令确认GPU状态:
nvidia-smi
正常输出应显示RTX 5090的型号、32GB显存、驱动版本和CUDA版本信息。
如果GPU不可见,按以下顺序排查:
- 先确认创建时是否选择了带CUDA标签的镜像(这是最常见的问题原因)
- 检查是否选择了正确的预装镜像,或更换镜像后重新创建实例
三、目录规划:代码和数据放哪里
容器内有两个主要磁盘:
/:系统盘,用于系统环境和镜像文件层,不建议存放长期数据/workspace:数据盘,用户工作目录,建议存放代码、数据集、模型和输出文件
建议进入容器后先建立项目结构:
cd /workspace
mkdir -p project data models output
df -h /workspace
如果数据集较大或需要多实例共享,建议将数据上传到立方云对象存储,训练时通过CLI工具或挂载方式访问。
四、PyTorch训练任务实战
以下是一个基于PyTorch的图像分类训练示例,完整可复现。
1. 确认PyTorch和CUDA可用
python3 -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
输出应显示PyTorch版本、True、以及NVIDIA GeForce RTX 5090。
2. 准备训练脚本
在/workspace/project目录下创建train.py:
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
# 设备配置
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f"Using device: {device}")
# 超参数
batch_size = 64
learning_rate = 0.001
num_epochs = 10
# 数据预处理(以CIFAR-10为例)
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
# 自动下载数据集到/workspace/data
train_dataset = torchvision.datasets.CIFAR10(
root='/workspace/data',
train=True,
transform=transform,
download=True
)
train_loader = DataLoader(
dataset=train_dataset,
batch_size=batch_size,
shuffle=True,
num_workers=4
)
# 简单CNN模型
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(3, 32, 3, padding=1)
self.conv2 = nn.Conv2d(32, 64, 3, padding=1)
self.pool = nn.MaxPool2d(2, 2)
# 注:输入尺寸224×224经两次pooling后为56×56,共64通道
# 若修改Resize尺寸,需同步调整此处的维度计算
self.fc1 = nn.Linear(64 * 56 * 56, 512)
self.fc2 = nn.Linear(512, 10)
self.relu = nn.ReLU()
self.dropout = nn.Dropout(0.5)
def forward(self, x):
x = self.pool(self.relu(self.conv1(x)))
x = self.pool(self.relu(self.conv2(x)))
x = x.view(x.size(0), -1)
x = self.relu(self.fc1(x))
x = self.dropout(x)
x = self.fc2(x)
return x
model = SimpleCNN().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
# 训练循环
print("Starting training...")
for epoch in range(num_epochs):
model.train()
running_loss = 0.0
for i, (images, labels) in enumerate(train_loader):
images = images.to(device)
labels = labels.to(device)
# 前向传播
outputs = model(images)
loss = criterion(outputs, labels)
# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
running_loss += loss.item()
if (i+1) % 100 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item():.4f}')
print(f'Epoch [{epoch+1}/{num_epochs}] Average Loss: {running_loss/len(train_loader):.4f}')
# 保存模型
torch.save(model.state_dict(), '/workspace/models/cifar10_model.pth')
print("Model saved to /workspace/models/cifar10_model.pth")
进阶技巧:对于更大的模型或数据集,建议开启混合精度训练以充分利用5090的Tensor Core。在训练循环前添加
scaler = torch.cuda.amp.GradScaler(),并将前向传播包裹在torch.cuda.amp.autocast()中。
3. 启动训练
cd /workspace/project
python3 train.py
首次运行会自动下载CIFAR-10数据集到/workspace/data,下载完成后开始训练。在RTX 5090上,上述脚本每个epoch约需1-2分钟。
4. 监控训练状态
新开一个SSH终端,运行以下命令监控资源使用:
# 查看GPU显存和利用率
watch -n 1 nvidia-smi
# 查看CPU和内存
htop
五、训练完成后:保存与释放
保存模型和日志
训练完成后,模型权重保存在/workspace/models/,建议同时备份到对象存储或下载到本地:
# 压缩模型文件
tar -czvf /workspace/output/model_backup.tar.gz /workspace/models/
# 查看输出文件
ls -lh /workspace/output/
释放实例
删除前务必确认已将/workspace下的重要数据备份到对象存储或下载到本地。删除后数据盘内容将进入释放流程,无法恢复。
确认不再使用后,在控制台删除容器并释放数据盘,停止计费。注意:停止容器不等于释放资源,GPU算力费用仍会继续产生,只有删除才能彻底停止计费。
六、常见问题
1. 训练时提示CUDA out of memory怎么办?
减小batch_size,或使用torch.cuda.empty_cache()清理显存碎片。5090的32GB显存通常可以支持batch_size=64-96的ResNet-50训练,配合混合精度和梯度检查点可尝试更大batch size。
2. 数据集下载慢或失败怎么办?
CIFAR-10等公开数据集如果下载慢,可以本地下载后通过SCP上传到/workspace/data,或在脚本中更换国内镜像源。
3. 训练中断后怎么恢复?
在脚本中添加checkpoint保存逻辑,每隔几个epoch保存一次模型状态。重新创建实例后,加载最新的checkpoint继续训练。
4. 怎么查看训练过程中的loss曲线?
推荐使用TensorBoard。在训练脚本中记录指标,容器内启动:
tensorboard --logdir=/workspace/output --host=0.0.0.0 --port=6006
本地终端建立端口转发:
ssh -L 6006:localhost:6006 root@<ip> -p <port>
浏览器访问 http://localhost:6006 即可查看。
5. 按小时计费训练到一半余额不足怎么办?
立方云在账户欠费后会进入7天冻结保护期,期间实例暂停但数据保留。7天后若仍未充值,实例和数据将被清除。建议开启余额提醒,避免训练中断导致数据丢失。 训练前预估总费用,保持账户余额充足。
立方云是网鼎科技旗下专注GPU算力租赁的平台,提供RTX 5090、A100、H100、昇腾910B等高性能GPU实例,支持裸金属与容器模式,镜像市场预装PyTorch 2.7+、vLLM、TensorRT-LLM等主流框架。如需了解当前各卡型的实时库存与配置详情,点击下方进入立方云官网查看。
更多推荐




所有评论(0)