惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
B
Blog RSS Feed
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
博客园 - 三生石上(FineUI控件)
博客园 - 【当耐特】
N
News | PayPal Newsroom
K
Kaspersky official blog
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
N
Netflix TechBlog - Medium
B
Blog
Recorded Future
Recorded Future
U
Unit 42
J
Java Code Geeks
Security Latest
Security Latest
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Vulnerabilities – Threatpost
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Scott Helme
Scott Helme
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
T
Threatpost
Last Week in AI
Last Week in AI
Know Your Adversary
Know Your Adversary
Project Zero
Project Zero
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cloudbric
Cloudbric
AWS News Blog
AWS News Blog
NISL@THU
NISL@THU
有赞技术团队
有赞技术团队
博客园 - 叶小钗
N
News and Events Feed by Topic
V
V2EX
T
Troy Hunt's Blog
月光博客
月光博客
博客园 - Franky
P
Proofpoint News Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
C
Cisco Blogs
The Cloudflare Blog
T
Tor Project blog
Google Online Security Blog
Google Online Security Blog

阿尔的代码屋 | 全栈技术笔记

在 Android Termux 环境下安装 Hermes Agent 的踩坑与完美解决实践 开发日志| 阿尔的代码屋 VS Code 连接 WSL 精确每 10 分钟掉线 排坑笔记 | 阿尔的代码屋 Android 模拟器代理联网与 No Internet WiFi 锁死排坑笔记 | 阿尔的代码屋 [object Object] typing_extensions 有用(四):使用 TypeIs 替代危险的 cast,做最严谨的类型收窄 | 阿尔的代码屋 GoRouter 结合 Isar 运行 Widget 测试并发/粘性线程死锁卡死排坑笔记 | 阿尔的代码屋 typing_extensions 有用(三):使用 Unpack 结合 TypedDict 给 **kwargs 装上透视眼 | 阿尔的代码屋 typing_extensions 有用(二):使用 @override 打造重构代码时的“防呆神器” | 阿尔的代码屋 Flutter 并发测试踩坑实录 - IsarCore 动态库下载冲突与 Widget 测试 HTTP 拦截全链路解决 | 阿尔的代码屋 typing_extensions 有用(一):使用 Self 终结继承时的类型推断灾难 | 阿尔的代码屋 基于 Cloudflare Pages 的纯前端 WebAssembly 应用自动化部署实践 | 开发日志 | 阿尔的代码屋 基于 VS Code 远程开发的 GPU Docker 容器自动清理方案实践 开发日志| 阿尔的代码屋 Patrol iOS 集成测试排坑实录 - xcodebuild exit code 70 全链路解决 | 阿尔的代码屋 Flutter E2E 测试从 integration_test 迁移到 Patrol - 实践笔记 | 阿尔的代码屋 Linux/macOS 下 micromamba 报错 Shard Index not available 与极度卡顿 排坑笔记 | 阿尔的代码屋 critical libmamba Shell not initialized micromamba报错 subprocess 无法修改父 Shell - 排坑笔记 | 阿尔的代码屋 VS Code Remote-SSH: 彻底告别重复输入密码 - 排坑笔记 | 阿尔的代码屋 Git 报警: inexact rename detection was skipped - 排坑笔记 | 阿尔的代码屋 解决群晖 NAS SSL 证书自动部署难题 | 阿尔的代码屋 Windows 下 Git error: fatal: refusing to work with credential missing host field - 排坑笔记 | 阿尔的代码屋 VS Code 调试 Python 第三方库源码的配置 - 开发技巧| 阿尔的代码屋 Windows下Git error: open(xxxx) Filename too long - 排坑笔记 | 阿尔的代码屋 记录2026年零预约港卡开户实录避坑 告别孤岛:拥抱 MCP 协议,为大模型打造标准“USB 接口” - 大模型实战 08 完结篇 | 阿尔的代码屋 从 ReAct 到 Workflow:基于云端 API 构建事件驱动的智能体 - 大模型实战 07 额外篇 | 阿尔的代码屋 基于 LlamaIndex ReAct 框架手搓全自动博客监控 Agent - 大模型实战 07 | 阿尔的代码屋 在 Kaggle 上用 Unsloth 极速微调 Qwen3 - 大模型实战 06 | 阿尔的代码屋 大模型微调实战详解 - 大模型实战 05 | 阿尔的代码屋 基于 ChromaDB 打造工程级 RAG 系统 - 大模型实战 04 | 阿尔的代码屋 拆解 Transformers 原理与图解 - 大模型实战 03 | 阿尔的代码屋 云端炼丹房 2:Kaggle 上手指南 - 大模型实战 03预备 | 阿尔的代码屋 云端炼丹房:Google Colab 免费 GPU 上手指南 - 大模型实战 03预备 | 阿尔的代码屋 Open WebUI 部署与 RAG 实战 - 大模型实战 02 | 阿尔的代码屋
VS Code Remote Tunnels本地连接调试Kaggle GPU - 开发技巧| 阿尔的代码屋
Algieba · 2026-04-08 · via 阿尔的代码屋 | 全栈技术笔记

核心摘要 (TL;DR)

  • 痛点解决:彻底告别 Kaggle 网页版 Notebook 糟糕的补全、延迟和难以管理的依赖。
  • 核心方案:采用 VS Code 官方的 Remote Tunnels(远程隧道)技术,无需内网穿透工具,原生接入。
  • 实战流程:Kaggle 开启 Internet -> 运行 VS Code CLI 脚本 -> GitHub 授权 -> 本地一键连接。

前言

平时使用Kaggle来进行开发,稍微小一点的学习项目还是可以轻松搞定的,但是涉及到复杂一点的debug,Kaggle自带的网页端Jupyter Notebook界面就不好用了,没办法自动补全,没办法断点调试,也没法用习惯的vscode插件,也没法做多文件管理。

基于此,稍微倒腾研究了一下,如何在本地VS-Code连接Kaggle的算力资源来进行开发。这里介绍使用VS Code官方提供的 Remote Tunnels方案。


在开始动手前,我们先看看目前市面上几种主流的连接方案:

方案复杂度稳定性评价
Kaggle 网页版零配置一般工程级别代码写起来折磨。
SSH + Ngrok需要第三方工具,且配置繁琐。
Remote Tunnels官方原生支持,通过 GitHub 账号绑定,安全且稳定。

2. Kaggle 端配置

首先,我们需要在 Kaggle 的服务器上把隧道“打通”。

2.1 环境检查

打开你的 Kaggle Notebook,在右侧的 Settings 面板中务必检查两项:

  • Internet on: 必须开启(用于下载 VS Code CLI 并建立外网连接)。
  • Accelerator: 选择 GPU T4 x2GPU P100

2.2 运行启动脚本

在新的Code Cell中运行以下下载VS Code CLI,以及启动Tunnels的脚本。

运行脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import os
import subprocess
import threading
import time
import sys


if not os.path.exists('code'):
print("正在下载 VS Code CLI...")
subprocess.run("curl -Lk '[https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64](https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64)' --output vscode_cli.tar.gz", shell=True)
subprocess.run("tar -xf vscode_cli.tar.gz", shell=True)
subprocess.run("rm vscode_cli.tar.gz", shell=True)
print("下载完成。")


def heartbeat():
"""
每隔 10 分钟向 stderr 写入一次心跳信息并进行微量计算,
防止 Kaggle Kernel 判定为闲置。
"""
while True:
current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

sys.stderr.write(f"\n[Heartbeat] 节点活跃中 - {current_time}\n")
sys.stderr.flush()


_ = [i**2 for i in range(100)]

time.sleep(600)


t = threading.Thread(target=heartbeat, daemon=True)
t.start()
print("后台保活心跳已启动。")


print("正在启动 VS Code Tunnel...")
print("请关注下方输出,访问 [github.com/login/device](https://github.com/login/device) 并输入 8 位验证码。")


os.system("./code tunnel --accept-server-license-terms --name kaggle-gpu-node")

2.3 完成身份验证

运行后,观察输出日志。你会看到类似这样的一行:
To grant access to the server, please log into https://github.com/login/device and use code XXXX-XXXX

  1. 点击链接,输入输出结果中的 8 位验证码
  2. 授权成功后,Kaggle 终端会输出连接成功的消息。

3. 第二步:本地 VS Code 的“空降”连接

现在,回到你自己的电脑前。

  1. 安装插件:打开本地 VS Code,搜索并安装插件 Remote - Tunnels (由 Microsoft 开发)。
  2. 账号登录:点击 VS Code 左下角的“账户”图标,确保登录的是刚才授权验证码的那个 GitHub 账号。
  3. 连接隧道
    • 点击左下角的 蓝色远程图标(两个大于/小于号)。
    • 选择 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
2
3
fuser -v /dev/nvidia*

kill -9 <PID>

Q7: Kaggle 的 Session 时长限制怎么办?
A: 这是一个硬限制(通常为 12 小时)。即使有保活脚本,Kaggle 也会强行关闭。建议在 VS Code 中完成代码调试后,通过 Save Version 提交后台任务进行长时间训练。