Colab:SSH 访问免费 GPU Server

Google Colab 不仅可以通过浏览器运行 Jupyter Notebook,还可以借助官方 Colab CLI,将云端 GPU 运行时作为临时 Linux Server 使用。

通过 SSH-over-WebSocket,可以从本地终端、VS Code 或 Coding Agent 访问远程 GPU,实现代码执行、模型训练与数据处理。

本文介绍 Colab 的资源模型、CLI 安装、实例管理、SSH 接入、Google Drive 挂载,以及临时环境下的开发工作流。

一、Google Colab 概述

1.1 什么是 Google Colab

Google Colab(Colaboratory)是 Google 提供的托管式 Jupyter Notebook 服务,主要面向 Python 开发、数据科学和机器学习。

它具有以下特点:

  • 云端计算:代码在 Google 提供的 Linux 虚拟机中执行。

  • GPU/TPU 支持:可以按需申请 NVIDIA GPU 或 Google TPU。

  • 免环境配置:预装 Python、PyTorch 等常用机器学习组件。

  • Notebook 集成:支持交互式代码执行、可视化和结果展示。

  • Google Drive 集成:可以直接挂载 Google 云盘访问数据。

  • 命令行访问:通过 Colab CLI 管理运行时,并使用 SSH 进行远程开发。

Colab 可以免费使用部分 CPU、GPU 资源,付费版本则提供更多计算额度和硬件选择。

1.2 GPU 资源与 Compute Units

Colab 使用 Compute Units(CU)衡量部分付费计算资源的消耗。

不同 GPU 的计算性能、显存容量及 CU 消耗速率不同。

Colab CLI 当前支持请求的 GPU 包括:

GPU 显存 架构 主要用途
NVIDIA T4 16GB Turing 推理、轻量训练
NVIDIA L4 24GB Ada Lovelace 推理、中等规模训练
NVIDIA G4 24GB Blackwell 新一代 AI 计算
NVIDIA A100 40/80GB Ampere 大规模模型训练
NVIDIA H100 80GB Hopper 高性能深度学习训练

实际可分配的 GPU 取决于账号权益、当前资源供应及动态使用限制。CLI 支持请求某种硬件,并不意味着该硬件始终可用。

可以通过以下命令查看账户计算额度:

复制代码
 colab usage

输出示例:

复制代码
 Current balance: 0.00 compute units
 Usage rate: 0.08/hr
 Active assignments: 1

其中:

  • Current balance:账户剩余 CU。

  • Usage rate:所有活动实例当前合计的 CU 消耗速率。

  • Active assignments:当前分配的运行时数量。

CU 消耗速率由 Colab 后端返回,并非固定不变的 GPU 价格。Colab 也没有公开完整的、保证实时有效的各 GPU CU 费率表。

1.3 临时运行时与生命周期

Colab 与传统云服务器最重要的区别是:运行时不保证持久化。

Colab 为用户临时分配虚拟机,实例具有空闲超时和最长生命周期限制。

Google 官方说明,即使是付费用户,运行时仍然可能因空闲、运行时长限制或资源管理策略而被终止。

通常情况下:

方案 连续运行时间 持久化系统盘
Colab Free 最长通常约 12 小时 不提供
Colab Pro 通常约 12 小时 不提供
Colab Pro+ 持续执行代码时最长可达 24 小时 不提供
Colab Pay As You Go 通常约 12 小时 不提供

这些时间不是服务保证值。Google 可能动态调整限制,也没有公布固定的空闲超时时间。

需要注意:

  • SSH 断开不代表实例立即销毁。

  • 实例空闲不代表已经停止。

  • 保持 SSH 连接不能保证实例不会回收。

  • 即使 CU 余额充足,也不能保证实例一直运行。

  • 实例被销毁后,系统环境和临时磁盘数据无法恢复。

因此,应当将 Colab 视为可随时重新创建的计算节点,而不是持久化开发服务器。

官方说明:Google Colab FAQ。Google Research


二、Colab CLI 安装与实例管理

2.1 安装 Colab CLI

Colab CLI 是 Google 提供的命令行工具,可用于创建计算实例、执行代码、传输文件和管理 GPU 资源。

官方仓库:

https://github.com/googlecolab/google-colab-cli

当前官方支持 macOS 和 Linux。

推荐使用 uv 安装 Colab CLI:

复制代码
 uv tool install google-colab-cli

检查安装:

复制代码
 colab --help
 colab version

如果已安装,可以更新:

复制代码
 uv tool upgrade google-colab-cli

部分较新功能可能只存在于 GitHub 版本中,可以直接安装最新源码:

复制代码
 uv tool install --force \
   --from git+https://github.com/googlecolab/google-colab-cli.git \
   google-colab-cli

安装后检查:

复制代码
 colab ssh --help

2.2 Google 账号认证

Colab CLI 支持两种主要认证方式:

  • oauth2:通过浏览器完成 Google OAuth 授权。

  • adc:使用 Google Cloud Application Default Credentials。

对于个人 Google 账号,推荐 OAuth。

可以通过一个只读命令触发登录:

复制代码
 colab --auth=oauth2 sessions

首次执行时,CLI 会提供 Google 授权链接。完成授权后,凭据会缓存在本地。

相关配置通常位于:

复制代码
 ~/.config/colab-cli/
 ├── token.json
 ├── sessions.json
 └── settings.json

可以检查当前账号:

复制代码
 colab --auth=oauth2 whoami

需要注意,colab auth 与 CLI 登录不是同一概念。

colab auth 用于在远程 Colab 运行时中配置访问 Google Cloud 服务的认证,而不是单纯登录本地 CLI。

如果使用 ADC,则需要先通过 Google Cloud CLI 配置合适的凭据和权限。

2.3 创建 GPU 实例

使用 colab new 创建运行时。

例如创建名为 dev 的 T4 GPU 实例:

复制代码
 colab new -s dev --gpu T4

创建 L4:

复制代码
 colab new -s dev --gpu L4

其中:

  • -s dev:指定本地会话名称。

  • --gpu L4:请求 NVIDIA L4 GPU。

创建后,Colab 会分配一台实际的 Linux 虚拟机。

可以将其理解为:

复制代码
 Session: dev
     │
     ▼
 Colab Runtime
     ├── Linux
     ├── NVIDIA GPU
     ├── CPU / RAM
     ├── Python
     └── 临时磁盘

dev 只是 Colab CLI 使用的会话名称,并不是永久绑定的云服务器。

如果实例被销毁,即使重新创建相同名称的会话,底层虚拟机也可能完全不同。

2.4 查询实例状态

查看所有活动实例:

复制代码
 colab sessions

查看实例状态:

复制代码
 colab status -s dev

输出示例:

复制代码
 [dev] gpu-t4-s-kkb-ass1c0-32vr0r2gxp6qg
 Hardware: T4
 Shape: Standard
 Variant: GPU
 Status: IDLE

其中:

  • Hardware:GPU 类型。

  • Shape:机器规格。

  • Variant:计算资源类型。

  • Status:当前运行状态。

IDLE 表示实例空闲,并不意味着虚拟机已经关闭。

查看计算额度:

复制代码
 colab usage

2.5 远程代码执行

Colab CLI 支持直接在远程实例执行 Python 代码。

执行单行代码:

复制代码
 echo 'print("Hello Colab")' | colab exec -s dev

执行本地 Python 文件:

复制代码
 colab exec -s dev -f train.py

该命令会读取本地脚本并将代码发送给远程 Python 内核执行。

需要注意,这不等于将整个项目目录上传到远程文件系统。

对于包含多个 Python 模块、配置文件和资源文件的工程,仍然需要通过 Git、SSH、rsync 等方式同步项目。

CLI 还提供一次性任务模式:

复制代码
 colab run --gpu T4 train.py

它会创建临时运行时、执行代码,并在完成后释放资源。

2.6 释放 GPU 实例

使用 colab stop 主动释放运行时:

复制代码
 colab stop -s dev

然后检查:

复制代码
 colab sessions
 colab usage

正常释放后,活动实例数量会减少。

colab stop 不是持久化云服务器的关机操作,而是释放当前临时运行时。

因此,停止前应确保代码、数据和训练检查点已经保存到持久化存储。

实例被销毁后,通常需要重新安装软件和恢复 Python 环境。


三、基于 SSH-over-WebSocket 的远程访问

3.1 SSH 连接机制

Colab CLI 支持通过 SSH-over-WebSocket 访问运行时。

传统 SSH 通常直接连接远程服务器的 TCP 22 端口,而 Colab 并不向用户提供稳定的公网 SSH 地址。

因此,Colab CLI 使用 WebSocket 建立数据通道,并通过本地代理接入 OpenSSH。

整体结构如下:

复制代码
 Local Machine
     │
     ├── OpenSSH Client
     │       │
     │       ▼
     │   Colab CLI
     │       │
     │       │ HTTPS / WebSocket
     │       ▼
     │   Google Colab
     │       │
     │       ▼
     └── Remote Linux Runtime
             ├── SSH Server
             ├── Python
             └── NVIDIA GPU

这种方式不需要给 Colab 实例分配公网 IP,也不需要开放 TCP 22 端口。

3.2 SSH 密钥配置

首先,在本地生成 SSH 密钥:

复制代码
 ssh-keygen -t ed25519

如果已有 Ed25519 密钥,可以直接使用。

检查:

复制代码
 ls ~/.ssh/id_ed25519*

确认 Colab CLI 支持 SSH:

复制代码
 colab ssh --help

直接连接已有实例:

复制代码
 colab ssh -s dev

如果连接成功,就会进入远程 Linux Shell。

可以验证 GPU:

复制代码
 nvidia-smi

3.3 配置 OpenSSH ProxyCommand

为了实现:

复制代码
 ssh colab

可以在本地编辑:

复制代码
 micro ~/.ssh/config

增加:

复制代码
 Host colab
     HostName colab
     User root
     ProxyCommand /Users/touken/.local/bin/colab ssh --proxy-mode -s dev
     IdentityFile ~/.ssh/id_ed25519
     StrictHostKeyChecking accept-new

其中:

  • Host colab:定义 SSH 主机别名。

  • HostName colab:提供给 OpenSSH 的目标主机名。

  • User root:远程登录用户。

  • ProxyCommand:通过 Colab CLI 建立 WebSocket 数据通道。

  • IdentityFile:指定用于 SSH 认证的私钥。

注意将 ProxyCommand 中的可执行文件路径替换为本机实际路径:

复制代码
 command -v colab

使用 StrictHostKeyChecking accept-new 可以自动接受首次连接的主机密钥,同时保留后续的主机身份检查。重新创建 Colab 运行时后,SSH 主机密钥可能变化,需要确认后更新 known_hosts。

完成配置后:

复制代码
 ssh colab

即可连接 dev 运行时。

3.4 自动创建指定 GPU 实例

可以在 ProxyCommand 中指定 GPU 类型:

复制代码
 Host colab
     HostName colab
     User root
     ProxyCommand /Users/touken/.local/bin/colab ssh --proxy-mode -s dev --gpu L4
     IdentityFile ~/.ssh/id_ed25519
     StrictHostKeyChecking accept-new

此时:

  • 如果 dev 已存在,则连接现有实例。

  • 如果 dev 不存在,则尝试创建新的 L4 实例。

  • 如果 dev 已经使用 T4,--gpu L4 不会将其转换为 L4。

因此,--gpu 主要控制自动创建实例时的硬件类型。

3.5 SSH 连接复用

Colab SSH-over-WebSocket 存在连接并发限制。

例如,在一个终端已经连接时,再从 VS Code 建立新的 SSH 连接,可能遇到:

复制代码
 Already-active SSH session (HTTP 429):
 another `colab ssh` is connected to this runtime.

可以通过 OpenSSH 的 ControlMaster 复用底层 SSH 连接。

增加:

复制代码
 Host colab
     HostName colab
     User root
     ProxyCommand /Users/touken/.local/bin/colab ssh --proxy-mode -s dev
     IdentityFile ~/.ssh/id_ed25519
 ​
     ControlMaster auto
     ControlPath ~/.ssh/colab-control-%C
     ControlPersist 600
 ​
     ServerAliveInterval 30
     ServerAliveCountMax 3
 ​
     StrictHostKeyChecking accept-new

其中:

  • ControlMaster auto:复用已有 SSH 主连接。

  • ControlPath:指定连接复用使用的本地 Unix Socket。

  • ControlPersist 600:最后一个 SSH 客户端退出后,主连接继续保留 600 秒。

  • ServerAliveInterval:定期检测连接是否正常。

可以打开两个终端,分别执行:

复制代码
 ssh colab

验证两条 SSH 客户端连接能否共享同一个底层通道。

查看复用状态:

复制代码
 ssh -O check colab

正常情况下会输出类似:

复制代码
 Master running (pid=12345)

连接复用可以缓解 Colab 的单连接限制,但不能保证 Colab 实例持续运行。


四、Google Drive 挂载与数据持久化

4.1 Google Drive 的作用

Colab 的本地文件系统是临时的。

因此,不能将模型、数据集和训练检查点仅保存在 /content 中。

Google Drive 可以提供持久化存储,使数据独立于 Colab 运行时存在。

典型结构:

复制代码
 Google Drive
 └── MyDrive
     ├── datasets/
     ├── checkpoints/
     └── outputs/
 ​
 Colab Runtime
 └── /content
     ├── gpu/
     ├── datasets/
     └── drive/
         └── MyDrive/

其中,/content/drive/MyDrive 是云盘挂载目录,而不是普通的临时本地目录。

4.2 挂载 Google Drive

在本地 Mac 终端执行:

复制代码
 colab drivemount -s dev

首次运行时可能需要通过浏览器进行 Google 授权。

默认挂载路径:

复制代码
 /content/drive

挂载后,通过 SSH 访问:

复制代码
 ssh colab

查看文件:

复制代码
 ls /content/drive/MyDrive

在 Python 中访问:

复制代码
 from pathlib import Path
 data_dir = Path("/content/drive/MyDrive/datasets")
 for path in data_dir.iterdir():
     print(path)

也可以指定其他挂载路径,具体参数可以通过以下命令查看:

复制代码
 colab drivemount --help

4.3 挂载生命周期

Google Drive 挂载依附于当前运行时。

操作 Drive 挂载 Drive 文件
退出 SSH 保留 保留
关闭 VS Code 保留,前提是实例仍在 保留
重新连接同一个实例 通常保留 保留
Colab 实例被销毁 挂载消失 保留
创建新实例 需要重新挂载 保留

例如:

复制代码
 colab stop -s dev

执行后,Colab 虚拟机及其挂载状态会被释放。

但 Google Drive 中的数据不会因为解除挂载而删除。

新实例创建后重新执行:

复制代码
 colab drivemount -s dev

即可再次访问云盘文件。

需要特别注意:挂载目录中的删除、覆盖等文件操作可能直接修改 Google Drive 中的真实数据。卸载或销毁实例不会删除云盘文件,但通过挂载目录执行的删除操作会影响云盘。

4.4 数据读取与训练性能

Google Drive 是远程存储,不适合作为高频随机 I/O 的训练数据目录。

尤其是包含大量小文件的数据集,直接访问 Drive 可能产生较明显的性能瓶颈。

推荐采用以下方式:

复制代码
 Google Drive
     │
     │ 复制数据
     ▼
 Colab /content/datasets
     │
     │ 本地高速读取
     ▼
 PyTorch Training
     │
     │ 保存 Checkpoint
     ▼
 Google Drive

例如:

复制代码
 mkdir -p /content/datasets
 ​
 cp -a \
   /content/drive/MyDrive/datasets/. \
   /content/datasets/

如果数据集包含大量小文件,建议先打包为 .tar,在 Colab 本地解压。

训练完成后,将模型保存到 Google Drive:

复制代码
 import torchtorch.save(    model.state_dict(),    "/content/drive/MyDrive/checkpoints/model.pt")

对于重要检查点,更稳妥的方式是先保存到本地临时文件,再复制或上传到 Drive,避免文件写入中断后形成不完整的检查点。

Google 官方也建议减少对挂载 Drive 的频繁小文件读取。Google Research


五、使用限制与注意事项

Colab CLI 让普通 Colab 获得了接近远程 Linux Server 的操作体验,但并没有改变 Colab 的资源模型。

需要特别注意以下几点:

  1. 实例不持久化:运行时被回收后,安装的软件和本地文件可能全部丢失。

  2. SSH 不保证保活:保持连接无法绕过空闲超时或最长运行时长。

  3. Compute Units 不是资源预留:即使还有 CU,也不能保证某张 GPU 随时可用。

  4. GPU 类型可能变化:重新创建实例时,不保证获得与之前相同的硬件。

  5. Drive 挂载不是本地磁盘:大量小文件和频繁随机读写可能影响训练性能。

  6. 长时间训练需要 Checkpoint:应该将任务设计为可中断、可恢复。

  7. GPU 使用后应主动释放:退出 SSH 不等于释放计算实例。

Google Colab 更适合短期、交互式、能够自动恢复环境的计算任务。如果需要长期保留系统环境、随时开关机,或连续运行多天的 GPU 任务,应考虑 Google Compute Engine 等具有持久化磁盘的计算服务。

相关推荐
Python大数据分析@1 小时前
通过 MCP 实现 AI Agent自动化数据采集
运维·人工智能·爬虫·自动化
Initialize293081 小时前
告警一条接一条刷屏?五步治理告警风暴
运维
帷幕落秋2 小时前
Docker镜像加速
运维·docker
帷幕落秋2 小时前
Docker原理-理论基础
运维·docker
有毒的教程2 小时前
Linux底层存储路由配
linux·运维·网络
云智慧AIOps社区3 小时前
MSP 的增长瓶颈不在客户,在交付模式:人效与规模如何兼得?
运维·人工智能·自动化运维
GPU实战笔记3 小时前
PyCharm 接云 GPU:远端项目连接与远程解释器别混为一谈
python·pycharm·ssh·远程开发·云gpu
HAHAXX83 小时前
淘宝RPA定时拉取交易数据实战:从人工录单报错到自动化对账全流程复盘
运维·自动化·rpa
Coisinier4 小时前
docker命令管理镜像及容器
linux·运维·nginx·docker·容器·操作系统