Kaggle 是 Google 旗下的数据科学竞赛与数据集平台。Kaggle下载慢怎么办? 先说结论:慢的根源在于数据集文件通过 Google Cloud Storage 跨境分发,国内直连的国际链路不稳定,几个 GB 的文件很容易下到一半断开。按场景选方案即可:
- 放弃浏览器,改用官方
kaggle命令行。 可以先列出文件、按文件单独下载,某个文件失败只重下这一个,适合服务器和大数据集。 - 能不下载就不下载。 直接在 Kaggle Notebook 里挂载数据集训练,只把模型权重、提交文件等结果下载回来,体积小得多。
- Notebook 的 output 先打包再下。 在 Notebook 里把结果压缩成一个文件,网页 Output 面板或
kaggle kernels output一次取回。 - 换一条稳定的国际线路。 以上都绕不开跨境链路;网页打不开、命令行反复超时,就需要稳定的代理通道,例如 JetStream App。
另外说明一点:Kaggle 没有官方国内镜像,网上的第三方转存需要自己判断可用性与合规性,下文单独说。
为什么 Kaggle 下载这么慢?
Kaggle 的网页、API 和数据文件都依托 Google 的基础设施。点击数据集的下载按钮后,实际的文件传输通常会跳转到 Google Cloud Storage(storage.googleapis.com 域名)完成。对国内用户来说,这意味着:
- 跨境链路拥堵:请求要经过国际出口,晚高峰时延迟和丢包明显上升,TCP 遇到丢包会主动降速,所以常见”开头还行,随后掉到 KB 级”。
- 大文件”一断全废”:浏览器下载大压缩包时,一旦连接超时,往往只能重新开始;数据集越大,完整下完的概率越低。
- 不只是下载慢: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 自己的云端环境里,数据集挂载后可以直接读取,数据不经过你的网络:
- 在数据集页面点击 New Notebook(或在已有 Notebook 右侧边栏点 Add Input 搜索添加数据集);
- 数据集会以只读方式出现在
/kaggle/input/目录下; - 在 Notebook 里完成清洗、训练,把模型权重、预测结果写到
/kaggle/working/; - 最后只下载结果文件,体积通常比原始数据集小得多。
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,按对应平台的教程几分钟即可完成设置:
相关阅读: