如何加快从Google Drive向Google Colab上传12000张PNG图像的速度
谷歌云盘PNG图像批量导入Colab效率优化方案
慢的核心原因是谷歌云盘对大量小文件的随机读取性能极低,加上原代码用串行加载没有利用多核资源,可通过以下方法优化:
1 优先使用压缩包批量传输(效果最显著)
将12000张PNG在本地预先打包为单个ZIP/TAR文件,再上传到谷歌云盘,Colab侧直接将压缩包复制到本地临时磁盘后解压,避免上万次小文件IO请求,代码如下:
from google.colab import drive drive.mount("/content/gdrive") # 复制云盘中的压缩包到Colab本地磁盘 !cp /content/gdrive/MyDrive/你的压缩包路径/images.zip /content/ # 静默解压到本地文件夹 !unzip -q /content/images.zip -d /content/local_imgs/
2 改用多进程并行加载图像
原代码的列表推导式是单线程串行读取,改用多进程并行加载可充分利用Colab的多核CPU资源,大幅降低IO等待耗时:
import glob import numpy as np from PIL import Image from concurrent.futures import ProcessPoolExecutor filelist = glob.glob('/content/local_imgs/*.png') def load_single_img(fname): return np.array(Image.open(fname)) # 进程数匹配Colab CPU核心数即可,一般设为4~8 with ProcessPoolExecutor(max_workers=8) as pool: X_train = np.array(list(pool.map(load_single_img, filelist)))
3 长期使用可提前导出为Numpy二进制文件
如果这批数据需要反复使用,第一次加载完成后直接存为单份NPY/NPZ文件,后续使用时直接读取单文件即可,无需重复解码PNG:
# 首次处理完成后存到云盘 np.save('/content/gdrive/MyDrive/你的存储路径/X_train.npy', X_train) # 后续读取仅需数秒 X_train = np.load('/content/gdrive/MyDrive/你的存储路径/X_train.npy')
性能参考
12000张常规尺寸PNG用打包+并行加载的方案,全程耗时可压缩到10分钟以内,直接读取NPY文件耗时不超过10秒。
内容的提问来源于stack exchange,提问作者2_slow
相关产品推荐
相关产品推荐

