为何使用FastAI时Google Colab的GPU与CPU运行速度几乎一致?
原因分析
- 模型计算量过小:FastAI默认
tabular_learner使用的隐藏层维度仅为[200,100],全连接层参数量极少,这类轻量模型本身在CPU上的训练速度就很快,GPU的并行计算优势无法体现。 - 批次设置不合理:当前batch size仅为64,极小的批次会导致CPU和GPU之间的数据传输开销占比远高于实际计算开销,反而抵消了GPU的计算优势。
- 数据集规模偏小:全量数据仅6.6万行,单epoch迭代次数不到1000次,迭代过程中GPU还未充分利用就已完成当前批次计算,大部分时间消耗在数据调度、指标计算等CPU侧操作上。
- 数据加载效率低:默认dataloader未开启多进程加载,数据预处理、批次组装都在单CPU进程执行,GPU频繁处于等待数据的空闲状态。
优化方案
- 大幅调大批次大小
表格数据显存占用极低,可将batch size调整为2048~8192区间,既减少单epoch迭代次数,也能让GPU每次处理更大规模的矩阵运算,充分发挥并行能力:
dls = to.dataloaders(bs=4096)
- 开启多进程数据加载
给dataloader添加num_workers参数,利用Colab的多核心CPU预加载批次数据,避免GPU等待数据:
dls = to.dataloaders(bs=4096, num_workers=2)
- 匹配模型规模与硬件特性
如果任务需要可以加宽加深模型,增加模型参数量,进一步放大GPU的计算优势:
learn = tabular_learner(dls, layers=[1024, 512, 256], metrics=accuracy)
- 降低验证环节开销
验证阶段不需要计算梯度,可单独调高验证批次大小,不需要每个epoch都输出验证指标的话也可临时关闭,减少非训练环节的时间消耗。
内容的提问来源于stack exchange,提问作者Neeco
相关产品推荐
相关产品推荐

