返回博客列表
开发者与 AI

Kaggle下载慢怎么办?数据集下载加速完整指南

DEV·AI·52CH Kaggle下载慢怎么 办?数据集下载加…

Kaggle 是 Google 旗下的数据科学竞赛与数据集平台。Kaggle下载慢怎么办? 先说结论:慢的根源在于数据集文件通过 Google Cloud Storage 跨境分发,国内直连的国际链路不稳定,几个 GB 的文件很容易下到一半断开。按场景选方案即可:

  1. 放弃浏览器,改用官方 kaggle 命令行。 可以先列出文件、按文件单独下载,某个文件失败只重下这一个,适合服务器和大数据集。
  2. 能不下载就不下载。 直接在 Kaggle Notebook 里挂载数据集训练,只把模型权重、提交文件等结果下载回来,体积小得多。
  3. Notebook 的 output 先打包再下。 在 Notebook 里把结果压缩成一个文件,网页 Output 面板或 kaggle kernels output 一次取回。
  4. 换一条稳定的国际线路。 以上都绕不开跨境链路;网页打不开、命令行反复超时,就需要稳定的代理通道,例如 JetStream App。

另外说明一点:Kaggle 没有官方国内镜像,网上的第三方转存需要自己判断可用性与合规性,下文单独说。


为什么 Kaggle 下载这么慢?

Kaggle 的网页、API 和数据文件都依托 Google 的基础设施。点击数据集的下载按钮后,实际的文件传输通常会跳转到 Google Cloud Storage(storage.googleapis.com 域名)完成。对国内用户来说,这意味着:

  1. 跨境链路拥堵:请求要经过国际出口,晚高峰时延迟和丢包明显上升,TCP 遇到丢包会主动降速,所以常见”开头还行,随后掉到 KB 级”。
  2. 大文件”一断全废”:浏览器下载大压缩包时,一旦连接超时,往往只能重新开始;数据集越大,完整下完的概率越低。
  3. 不只是下载慢:kaggle.com 本身的网页、登录和 Notebook 编辑器同样走跨境链路,所以经常是”网页都打不开,更别提下载”。

同样的问题也出现在 GitHub、Hugging Face 等海外开发资源上,病根都是跨境链路,思路也相通:减少需要跨境传输的数据量,再保证剩下的传输稳定、可续。


方案一:用官方 kaggle 命令行下载数据集

浏览器适合下几十 MB 的小文件;几个 GB 以上的数据集,建议换成 Kaggle 官方命令行工具 kaggle(Python 包名也是 kaggle)。它的好处是可以在服务器上后台运行,而且可以按文件拆开下载。

第一步:安装并配置认证

# 安装官方 CLI
pip install kaggle

Kaggle 现在区分新版 API Token 和旧版凭据(kaggle.json),两种方式官方 CLI 都支持,任选其一。凭据都在 Kaggle 的 API 设置页(kaggle.com/settings/api)生成,下文的按钮名称以官方当前界面为准。

方式 A:新版 API Token(推荐)

在设置页的 API 区域点 Generate New Token,复制生成的 Token,然后二选一:

# 写入环境变量(当前终端会话生效)
export KAGGLE_API_TOKEN=<你复制的 Token>

# 或保存成文件,长期生效
mkdir -p ~/.kaggle
echo '<你复制的 Token>' > ~/.kaggle/access_token
chmod 600 ~/.kaggle/access_token

官方 CLI 也支持 kaggle auth login,在浏览器里授权登录,不用手动复制 Token。

方式 B:旧版凭据 kaggle.json

在设置页的 Legacy API Credentials 区域点 Create Legacy API Key,浏览器会下载一个 kaggle.json,放到默认位置:

mkdir -p ~/.kaggle
mv ~/Downloads/kaggle.json ~/.kaggle/
chmod 600 ~/.kaggle/kaggle.json

无论哪种方式,Token 和 kaggle.json 都相当于你的账号密钥,不要提交到 Git 仓库或发给别人。

第二步:下载数据集

# 下载整个数据集(owner/name 即数据集网址里 kaggle.com/datasets/ 后面那段)
kaggle datasets download -d owner/name

# 指定保存目录,并在下载完成后自动解压
kaggle datasets download -d owner/name -p ./data --unzip

不确定命令怎么写时,数据集页面右上角的 ”⋮” 菜单里有 Copy API command,复制下来直接粘贴即可。

竞赛数据用 competitions 子命令,并且需要先在网页上进入该竞赛、接受竞赛规则,否则会提示无权限:

kaggle competitions download -c competition-name -p ./data

大数据集:拆成单个文件下载

整个数据集打成一个大压缩包下载,中途断开最伤。更稳妥的做法是先看文件清单,再逐个下载:

# 列出数据集里的文件
kaggle datasets files owner/name

# 只下载其中一个文件
kaggle datasets download -d owner/name -f train.csv -p ./data

# 竞赛同理
kaggle competitions files competition-name
kaggle competitions download -c competition-name -f train.csv -p ./data

这样某个文件下载失败,只需重新执行那一条命令,其余已经下好的文件不受影响。

关于断点续传

是否能从中断处续传,取决于你安装的 kaggle 版本,不同版本表现不一样,不要默认它一定能续上。比较可靠的思路是:

  • 按文件拆分下载(见上),把单次失败的代价降到一个文件;
  • 在服务器上用 tmux 或 nohup 跑下载,避免 SSH 断开连带中断下载;
  • 如果你用浏览器开始下载,可以从浏览器下载列表里复制真实下载地址,交给支持续传的下载工具(例如 aria2c -c "<下载地址>")。注意这类地址通常带有时效签名,过期后要重新从网页获取。

优点:官方工具、可脚本化、可在服务器后台运行、可按文件下载。

局限:传输仍然走跨境链路,链路本身不稳时,再好的工具也只能”失败了重来”。


方案二:直接在 Kaggle Notebook 里用数据,避免下载

很多时候你并不需要把数据集下到本地。Kaggle Notebook 运行在 Kaggle 自己的云端环境里,数据集挂载后可以直接读取,数据不经过你的网络:

  1. 在数据集页面点击 New Notebook(或在已有 Notebook 右侧边栏点 Add Input 搜索添加数据集);
  2. 数据集会以只读方式出现在 /kaggle/input/ 目录下;
  3. 在 Notebook 里完成清洗、训练,把模型权重、预测结果写到 /kaggle/working/;
  4. 最后只下载结果文件,体积通常比原始数据集小得多。
import os

# 查看挂载进来的数据文件
for root, _, files in os.walk('/kaggle/input'):
    for f in files:
        print(os.path.join(root, f))

Kaggle Notebook 提供有配额限制的免费 GPU / TPU,具体额度以 Kaggle 页面显示为准。对”只是想在这个数据集上跑实验”的需求来说,这是最省事的方案。

同理,如果你更习惯 Google Colab,也可以在 Colab 里用 kaggle 命令行把数据拉到 Colab 的云端环境中处理。Colab 在国内的访问问题可以参考 Google Colab 国内使用指南。

局限:打开 kaggle.com 和 Notebook 编辑器本身仍需要能稳定访问 Kaggle;编辑器在跨境链路上可能卡顿、断开。


方案三:下载 Kaggle Notebook 的 output

在 Notebook 里写到 /kaggle/working/ 的文件就是这个 Notebook 的 output。下载方式有三种。

方式一:网页 Output 面板

  • 编辑器里:右侧边栏的 Output 区域会列出 /kaggle/working/ 下的文件,点文件旁的菜单即可下载单个文件;
  • 保存版本后:点 Save Version 运行完成后,在该 Notebook 的查看页面里找到 Output 部分,可以下载输出文件。

方式二:先打包成一个文件

output 文件很多时,逐个点下载既慢又容易漏。先在 Notebook 里打成一个压缩包:

import shutil

# 把结果目录打包成 /kaggle/working/results.zip
shutil.make_archive('/kaggle/working/results', 'zip', '/kaggle/working/outputs')

然后只下载 results.zip 这一个文件。还可以在 Notebook 里生成一个下载链接:

from IPython.display import FileLink
FileLink('results.zip')  # 当前工作目录为 /kaggle/working 时可用相对路径

方式三:用命令行拉取 output

Notebook 保存过版本后,可以在本地用官方命令行下载它的 output:

# owner/notebook-slug 即 Notebook 网址里 kaggle.com/code/ 后面那段
kaggle kernels output owner/notebook-slug -p ./output

适合在服务器上脚本化取回结果,或者网页面板在跨境链路上加载不出来的时候。


Kaggle 有国内镜像吗?

没有官方国内镜像。 这一点和 Hugging Face 不同:Hugging Face 有社区维护的镜像端点,而 Kaggle 没有提供可替换的下载端点,kaggle 命令行也没有”切换镜像源”的官方配置。

搜”kaggle 国内镜像”能看到一些第三方转存(网盘分享、国内数据平台上的搬运副本等),使用前请自己判断两件事:

  • 可用性:转存版本是否完整、是否与 Kaggle 上的最新版本一致,维护与反馈渠道可能不明确;
  • 合规性:数据集有各自的许可协议,竞赛数据通常受竞赛规则约束,不一定允许再分发;用转存数据参赛或发论文前,先看清原数据集的许可和竞赛规则。

本文不推荐具体的第三方镜像站。需要原始、最新版本的数据时,还是以 Kaggle 官方来源为准。


方案四:用稳定的国际线路加速 Kaggle

上面几个方案能减少需要下载的数据量、降低中断的代价,但都没有改变跨境链路本身。以下情况,一条稳定的国际线路是最直接的办法:

  • kaggle.com 网页、登录、Notebook 编辑器经常打不开或卡顿;
  • 竞赛期间需要频繁提交、查看排行榜和 Discussion;
  • 数据集很大,命令行下载反复超时;
  • 工具链同时依赖 Kaggle、Colab、GitHub、Hugging Face,不可能每个都找替代方案。

JetStream 使用 IEPL 国际以太网专线,不走公网传输,链路稳定,减少高峰期拥堵对跨境连接的影响。官方客户端支持 Windows、macOS、Android、iOS,一个订阅不限设备数量,手机、笔记本和台式机可以同时使用。

需要注意:JetStream 的 Chrome / Edge 浏览器插件只代理浏览器流量,适合在网页上浏览 Kaggle、下载小文件,kaggle 命令行和 Python 脚本不受它影响。用命令行下载前,先确认终端请求实际经过了代理。


各方案对比

方案成本解决什么问题局限适合谁
官方 kaggle 命令行免费大文件可按文件拆开下载、可在服务器后台跑仍走跨境链路,断了要重下需要本地/服务器拿到原始数据
在 Kaggle Notebook 里直接用免费(GPU 有配额)原始数据不用下载,只取结果依赖能稳定打开 Kaggle 网页做实验、打比赛
output 打包下载 / kaggle kernels output免费一次取回 Notebook 全部结果需先保存版本或在编辑器内操作训练完要拿权重和预测结果
第三方转存视来源而定可能绕开跨境下载完整性、时效性、许可都需自行判断自行评估后使用
稳定国际线路(JetStream)付费网页、登录、API、Notebook 全流程稳定需要安装客户端长期使用 Kaggle 和海外工具链

常见问题

kaggle 命令行报 401 / 403 是什么原因?

401 一般是认证问题,按你用的方式检查:新版 Token 要确认 KAGGLE_API_TOKEN 环境变量在当前终端里确实设置了,或 ~/.kaggle/access_token 文件内容是完整的 Token;旧版凭据要确认 kaggle.json 放在 ~/.kaggle/ 下。凭据重新生成或被撤销后,旧的会失效,需要换成新的。下载竞赛数据报 403,通常是还没在网页上进入该竞赛并接受规则。

下载到一半断了,只能从头再来吗?

不一定。能否续传取决于 kaggle 的版本和下载方式。更稳妥的办法是用 kaggle datasets files 列出文件后,用 -f 逐个下载,失败只重下单个文件;网页下载的大文件可以交给支持续传的下载工具。

kaggle 下载的文件在哪?

不加 -p 时,文件会保存到当前终端所在目录;加 -p ./data 则保存到指定目录。数据集默认以压缩包形式下载,加 --unzip 会自动解压。

Kaggle Notebook 的 output 怎么下载?

在编辑器右侧的 Output 区域下载单个文件,或保存版本后在 Notebook 查看页的 Output 部分下载;文件多时先在 Notebook 里打成 zip。命令行用 kaggle kernels output owner/notebook-slug -p ./output。

Kaggle 有国内镜像吗?

没有官方国内镜像。第三方转存的完整性和许可需要自行判断,竞赛数据尤其要注意竞赛规则对再分发的限制。

设置了加速,kaggle 命令行还是很慢?

先确认终端请求实际经过了代理(浏览器插件只对浏览器生效)。其次排查本地网络(校园网、公司出口限速)和时段(晚高峰),再考虑在 Kaggle Notebook 里直接处理数据、减少下载量。


让 Kaggle 全流程稳定下来

如果你经常需要下数据集、跑 Notebook、参加竞赛,与其每次和断线较劲,不如换一条稳定的国际线路。下载 JetStream App,按对应平台的教程几分钟即可完成设置:

相关阅读:

准备好开始了吗?

立即体验安全、快速的 VPN 服务

查看价格和免费使用

分享这篇文章