VS Code Remote Tunnels 本地调试 Kaggle GPU 环境 - VS Code 指南 02
前言
平时使用Kaggle来进行开发,稍微小一点的学习项目还是可以轻松搞定的,但是涉及到复杂一点的debug,Kaggle自带的网页端Jupyter Notebook界面就不好用了,没办法自动补全,没办法断点调试,也没法用习惯的vscode插件,也没法做多文件管理。
基于此,稍微倒腾研究了一下,如何在本地VS-Code连接Kaggle的算力资源来进行开发。这里介绍使用VS Code官方提供的 Remote Tunnels方案。如果需要先了解 Kaggle 账号注册、双 T4 GPU 算力配置与数据集持久化,可参考前序文章 Kaggle 云端环境上手指南。
1. 方案对比:为什么选择 Remote Tunnels?
在开始动手前,我们先看看目前市面上几种主流的连接方案:
| 方案 | 复杂度 | 稳定性 | 评价 |
|---|---|---|---|
| Kaggle 网页版 | 零配置 | 一般 | 工程级别代码写起来折磨。 |
| SSH + Ngrok | 高 | 中 | 需要第三方工具,且配置繁琐。 |
| Remote Tunnels | 低 | 高 | 官方原生支持,通过 GitHub 账号绑定,安全且稳定。 |
2. Kaggle 端配置
首先,我们需要在 Kaggle 的服务器上把隧道“打通”。
2.1 环境检查
打开你的 Kaggle Notebook,在右侧的 Settings 面板中务必检查两项:
- Internet on: 必须开启(用于下载 VS Code CLI 并建立外网连接)。
- Accelerator: 选择 GPU T4 x2 或 GPU P100。
2.2 运行启动脚本
在新的Code Cell中运行以下下载VS Code CLI,以及启动Tunnels的脚本。
运行脚本
1 | import os |
2.3 完成身份验证
运行后,观察输出日志。你会看到类似这样的一行:To grant access to the server, please log into https://github.com/login/device and use code XXXX-XXXX
- 点击链接,输入输出结果中的 8 位验证码。
- 授权成功后,Kaggle 终端会输出连接成功的消息。
3. 第二步:本地 VS Code 的“空降”连接
现在,回到你自己的电脑前。
- 安装插件:打开本地 VS Code,搜索并安装插件 Remote - Tunnels (由 Microsoft 开发)。
- 账号登录:点击 VS Code 左下角的“账户”图标,确保登录的是刚才授权验证码的那个 GitHub 账号。
- 连接隧道:
- 点击左下角的 蓝色远程图标(两个大于/小于号)。
- 选择 Connect to Tunnel。
- 在列表中选择你刚才命名的
kaggle-gpu-node。
4. 关键避坑指南
4.1 保持页面活跃
这是最核心的一点:Kaggle 网页版必须保持开启状态。
虽然脚本里面写了心跳机制去保活,但还是要注意以下几点
- 标签页置顶:尽量不最小化Kaggle标签页。
- 控制心跳频率:Kaggle后台有审计,不能把心跳频率设置得过高,比如1秒1次。10分钟1次是一个合理的值。
4.2 持久化存储
- 项目代码:请务必在
/kaggle/working目录下创建你的项目。只有这个目录下的内容在 Session 存续期间是相对安全的。 - 环境安装:由于每次启动 Session 都是全新的镜像,建议将环境依赖写成
requirements.txt,或者用uv来进行项目管理。连接上 VS Code 后,直接在内置终端里执行pip install或者uv sync。
4.3 GPU 状态检查
进入 VS Code 远程环境后,打开终端(Ctrl + `),输入以下命令确认算力就绪:
1 | nvidia-smi |
5. 常见问题 (Q&A)
Q1: 为什么我的 VS Code 连不上,一直卡在 Connecting?
A: 请按以下顺序排查:
- Internet 开关:检查 Kaggle Settings 的 Internet 是否为 On。
- GitHub 账号一致性:确保你授权验证码的账号与本地 VS Code 登录的账号是同一个。
- CLI 版本:如果你手动修改了脚本,请确保下载的是
linux-x64的 CLI 版本。
Q2: 我可以在 VS Code 里直接打开多个文件夹吗?
A: 可以。隧道建立的是“机器级”的连接。连接成功后,你可以通过 File -> Open Folder 切换到 /kaggle/working 或根目录下的任何位置。
Q3: 这种方式会消耗 Kaggle 的 GPU 额度吗?
A: 会。 只要你的交互式 Session 处于 Running 状态且开启了 Accelerator,就会扣除周度配额。注意: 当你完成调试时,务必点击 Kaggle 网页端的 Stop Session,仅仅关闭本地 VS Code 不会停止计费。
Q4: 为什么我每次重连,VS Code 都要重新安装 Python 插件?
A: 这是因为 Kaggle 的系统盘(根目录 /)是非持久化的。每次 Session 重启,VS Code Server 组件都会丢失。建议开启 VS Code 的 Settings Sync,让其在连入后自动后台安装插件。
Q5: 我在根目录下安装的库,断开重连后找不到了?
A: 重点! 只有 /kaggle/working 目录在同一个 Session 内是相对持久的。建议在 /kaggle/working 下使用 uv 创建虚拟环境 .venv,这样即便断连,只要你没 Stop Session,环境就依然在。
Q6: 远程调试时 GPU 显存溢出(OOM)了怎么办?
A: 隧道不会自动感知显存回收。如果脚本崩溃但显存没释放,请在 VS Code 终端执行:
1 | fuser -v /dev/nvidia* |
Q7: Kaggle 的 Session 时长限制怎么办?
A: 这是一个硬限制(通常为 12 小时)。即使有保活脚本,Kaggle 也会强行关闭。建议在 VS Code 中完成代码调试后,通过 Save Version 提交后台任务进行长时间训练。