You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAI与PyTorch在Colab训练过慢:GPU配置问题排查求助

图像分类训练耗时过长的问题排查与优化

我正在用FastAI+PyTorch做图像分类任务,在Google Colab上训练时速度特别慢,已经确认用了GPU运行时,代码如下:

import os
import torch
import torchvision as tv
import matplotlib.pyplot as plt
import numpy as np
from torchinfo import summary as torchinfo_summary

#cuda configs
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

#loading dataset
data_dir='/content/drive/MyDrive/tech_related/machine_learning_related/pytorch-etic/data/cat_deer_dog_horse'
#data_dir = os.path.join('..','data','cat_deer_dog_horse')
print(os.listdir(data_dir))
data_classes = os.listdir(os.path.join(data_dir,'train'))
print(data_classes)

#making torch defined dataloaders with dataset
stats = ((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))  #means and stds of each channel in images of cifar10
train_tfms = tv.transforms.Compose([
    tv.transforms.RandomCrop(32,padding=4,padding_mode='reflect'),
    tv.transforms.RandomHorizontalFlip(),
    tv.transforms.ToTensor()
])
valid_tfms = tv.transforms.Compose([
    tv.transforms.ToTensor()
])

train_ds = tv.datasets.ImageFolder(os.path.join(data_dir,'train'),train_tfms)
valid_ds = tv.datasets.ImageFolder(os.path.join(data_dir,'test'),valid_tfms)
batch_size = 64
train_dl = torch.utils.data.DataLoader(train_ds,batch_size,shuffle=True,pin_memory=True)
valid_dl = torch.utils.data.DataLoader(valid_ds,batch_size,shuffle=True,pin_memory=True)

model_ = tv.models.mobilenet_v2(pretrained=False, num_classes=len(data_classes)).to(device)

#here comes the training part, finding optimum learning rate.
from fastai.vision.all import *
data = DataLoaders(train_dl,valid_dl)
learner = Learner(data, model_, loss_func=torch.nn.functional.cross_entropy, opt_func=Adam, metrics=accuracy)

lr_min,lr_steep,lr_slide,lr_valley = learner.lr_find(suggest_funcs=(minimum,steep,slide,valley))

问题排查与优化方案

  • 数据集存储位置导致IO瓶颈
    你的数据集存在Google Drive中,Colab读取Drive文件的速度远低于本地临时存储,每次数据加载都会拖慢训练。建议把数据集复制到Colab的临时目录:

    !cp -r /content/drive/MyDrive/tech_related/machine_learning_related/pytorch-etic/data/cat_deer_dog_horse /content/
    data_dir = '/content/cat_deer_dog_horse'
    
  • DataLoader未启用多线程加载
    代码中DataLoader的num_workers参数默认是0,仅用主线程加载数据,会导致GPU等待数据闲置。Colab中可设置num_workers=2或4,配合pin_memory=True实现数据加载与GPU计算并行:

    train_dl = torch.utils.data.DataLoader(train_ds,batch_size,shuffle=True,pin_memory=True, num_workers=2)
    valid_dl = torch.utils.data.DataLoader(valid_ds,batch_size,shuffle=False,pin_memory=True, num_workers=2)
    
  • 验证集无需打乱
    验证集设置shuffle=True无意义,还会额外消耗资源,直接改为shuffle=False即可。

  • 用FastAI内置工具简化数据处理
    既然使用FastAI,推荐直接用ImageDataLoaders.from_folder创建数据加载器,它会自动处理多线程、数据增强优化等细节,比手动用PyTorch DataLoader更高效:

    from fastai.vision.all import *
    data = ImageDataLoaders.from_folder(data_dir, train='train', valid='test', 
                                        item_tfms=Resize(32),
                                        batch_tfms=[RandomCrop(32, padding=4), RandomFlip()])
    learner = Learner(data, mobilenet_v2(pretrained=False, num_classes=4), loss_func=CrossEntropyLossFlat(), metrics=accuracy)
    
  • 确认GPU实际运行状态
    即使选择了GPU运行时,也可以手动验证:执行!nvidia-smi查看GPU占用情况,或者在代码中添加print(torch.cuda.is_available(), torch.cuda.get_device_name(0)),确保模型和数据确实在GPU上运行。

内容的提问来源于stack exchange,提问作者tad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:15:31