免费版Google Drive仅15GB,如何向Google Colab上传30GB数据集?
解决Colab训练30GB数据集的免费方案
我之前训练大模型时也碰到过一模一样的问题——Drive免费空间不够,但又不想付费升级,下面几个亲测有效的免费方案可以试试:
方案1:直接利用Colab的临时存储空间
Colab的会话本身提供了约100GB的临时本地存储(路径在/content),虽然会话结束后数据会被清空,但完全足够用来存放30GB的数据集进行训练,根本不用碰Drive。操作步骤很简单:
- 启动Colab会话后,用
wget或curl直接从数据集的公开下载链接拉取数据:# 示例:用wget下载压缩包 !wget https://example.com/your-dataset.zip # 解压到临时目录 !unzip your-dataset.zip -d /content/dataset/ - 如果数据集是分散的多个文件,也可以用批量下载命令处理。训练过程中只要保持会话活跃(比如每隔一段时间点击一下页面,或者用代码自动发送心跳),数据就不会丢失。训练完成后记得把模型文件存到你的Drive里就行。
方案2:拆分数据集分批训练
如果你的模型支持增量训练或者分批加载数据,可以把30GB的数据集拆成几个小于15GB的子块,分批上传到Drive,再在Colab里按需加载:
- 本地把数据集按类别、数据块或者文件大小拆分,比如用压缩工具分成两个15GB的压缩包;
- 把拆分后的压缩包分别上传到Drive的不同文件夹;
- 在Colab挂载Drive后,每次只解压当前训练需要的子块到临时存储,用完后删除临时文件再加载下一批:
# 挂载Drive from google.colab import drive drive.mount('/content/drive')# 解压第一批数据 !unzip /content/drive/MyDrive/dataset-part1.zip -d /content/temp-data/ # 训练第一批数据... # 删除临时数据,加载第二批 !rm -rf /content/temp-data/ !unzip /content/drive/MyDrive/dataset-part2.zip -d /content/temp-data/
这个方案适合那些不需要一次性加载全部数据的模型,比如一些基于批次的深度学习模型。
方案3:利用共享Drive空间
如果身边有朋友有多余的Drive空间,或者你自己有多个Google账号,可以通过共享文件夹来凑够空间:
- 让朋友把数据集上传到他的Drive,然后把文件夹共享给你(设置为“编辑”权限);
- 在Colab里挂载Drive时,选择访问这个共享文件夹,就能直接读取里面的数据集;
- 要是你有多个账号,也可以分别在不同账号上传一部分数据集,然后在Colab里挂载多个Drive(用不同的挂载路径):
# 挂载第一个账号的Drive drive.mount('/content/drive1') # 挂载第二个账号的Drive(会弹出新的授权窗口) drive.mount('/content/drive2')
这样两个账号的15GB空间加起来就有30GB,足够存放数据集了。
方案4:直接从公开数据集平台加载
很多大型数据集都托管在Kaggle、Hugging Face Datasets这类平台,Colab可以直接集成这些平台,不用把数据存到Drive:
- Hugging Face Datasets:如果数据集在Hugging Face上,直接用官方库加载,数据会自动存在Colab临时空间:
!pip install datasetsfrom datasets import load_dataset # 加载数据集,示例为IMDB数据集 dataset = load_dataset("imdb") - Kaggle:先上传你的Kaggle API密钥(在Kaggle账号设置里下载
kaggle.json),然后用API下载数据集:!pip install kaggle !mkdir ~/.kaggle !cp kaggle.json ~/.kaggle/ !chmod 600 ~/.kaggle/kaggle.json # 下载指定数据集 !kaggle datasets download -d username/dataset-name !unzip dataset-name.zip
注意事项
- 临时存储的缺点是会话断开后数据会消失,所以训练时尽量不要长时间闲置Colab页面;
- 如果数据集是私有且没有公开下载链接,优先考虑拆分或共享Drive的方案;
- 部分Colab会话的临时空间可能因资源紧张略有缩水,下载前可以用
!df -h查看当前可用空间。
内容的提问来源于stack exchange,提问作者user2215860




