Google Colab Pro加载大型图像数据集速度慢的优化方案咨询
问题根因
加载速度慢和GPU、内存配置无关,核心是IO瓶颈:你当前读取的是挂载到Colab的Google Drive路径,这类文件读取走网络逐文件 拉取,加上你用pandas的map是单线程串行读取,速度自然远低于Kaggle——Kaggle的数据集直接存储在运行实例的本地高速固态上,没有额外网络开销。
可落地的提速方案
方案1:先将数据集拷贝到Colab本地实例存储(提速效果最明显)
Colab的/content目录是实例自带的本地高速固态,读写速度比挂载Drive快10~50倍,先把整个数据集文件夹从Drive拷贝到本地再读取,先执行终端命令完成拷贝:
!cp -r "/content/drive/MyDrive/Colab Notebooks/Covid-19/Dataset" /content/
拷贝完成后替换DataFrame里的路径前缀为本地路径,再运行加载代码,速度可以直接追上Kaggle的表现。
注意:Colab实例断开连接后本地存储的数据会清空,每次启动实例时执行一次拷贝即可,不需要重复操作。如果数据集是压缩包格式,先把压缩包拷到本地再解压,速度比逐文件从Drive拷贝更快。
方案2:用多进程并行加载替换单线程map
单线程逐张读图片完全吃不满IO带宽,用多进程并行加载可以拉满读取速度,直接替换原有map逻辑即可:
import numpy as np from PIL import Image from multiprocessing import Pool, cpu_count def load_image(path): # 建议直接打开resize逻辑,更小的图体积能进一步提升加载、处理速度 return np.asarray(Image.open(path).resize((224,224))) # 匹配CPU核心数设置进程数 with Pool(cpu_count()) as p: data['image'] = p.map(load_image, data['path'].tolist())
如果已经把数据集拷贝到本地,配合多进程加载,万张级别的数据集通常1~2分钟就能加载完成。
方案3:放弃全量预加载,用框架自带的数据生成器按需读取
如果数据集总大小超过几十G,全量加载进内存不仅慢,还容易触发内存上限。教学场景做模型训练直接用PyTorch/TensorFlow自带的数据集加载工具即可,支持边训练边批量加载+预处理,不需要提前把所有像素数据存入DataFrame:
- PyTorch可直接用
ImageFolder搭配DataLoader,配置num_workers参数开启多进程预加载 - TensorFlow可直接用
image_dataset_from_directory从目录生成批量数据集,自动完成并行IO和预处理
这种方式内存占用极低,不需要等全量数据加载完就能启动训练流程。
内容的提问来源于stack exchange,提问作者M Muqiit Faturrahman
相关产品推荐
相关产品推荐

