在立方云租用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不可见,按以下顺序排查:

  1. 先确认创建时是否选择了带CUDA标签的镜像(这是最常见的问题原因)
  2. 检查是否选择了正确的预装镜像,或更换镜像后重新创建实例

三、目录规划:代码和数据放哪里

容器内有两个主要磁盘:

  • /:系统盘,用于系统环境和镜像文件层,不建议存放长期数据
  • /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等主流框架。如需了解当前各卡型的实时库存与配置详情,点击下方进入立方云官网查看。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐