简介
学习 CUDA 时,一个可用的 NVIDIA GPU 开发环境几乎是刚需。
但在本地搭建环境经常会踩坑:驱动与运行时版本不匹配、IDE/LSP 报错、容器与平台架构不兼容等。本文提供一套尽量开箱即用、并且能用 VS Code + Dev Container 在本地获得舒适编辑体验、再借助 Google Colab 的免费 GPU 完成编译与运行的方案。
你需要提前具备
- VS Code 的基础操作与常用设置
- 基本的编译概念(编译、链接、可执行文件)
- Jupyter Notebook 与 Google Colab 的基础使用
- Docker Desktop 已安装并可正常启动
代码仓库
完整代码见:GitHub 仓库
1. 使用 Dev Container 准备 CUDA 开发环境(侧重编辑体验)
本节目标:
- 在本地获得完整的编辑、跳转、格式化与 LSP 体验
- 不要求本地具备可运行 CUDA 的 NVIDIA GPU(运行环节交由 Colab 完成)
1.1 创建 Dev Container 配置
在项目根目录创建:
mkdir -p .devcontainer
cd .devcontainer1.2 Dockerfile(基于 NVIDIA 官方 CUDA 镜像)
在 .devcontainer 中创建 Dockerfile:
FROM nvidia/cuda:13.1.0-devel-ubuntu24.04
# Prevent interactive prompts
ENV DEBIAN_FRONTEND=noninteractive
# Install dependencies (wget/curl/git/zsh/sudo/clangd)
RUN apt-get update && \
apt-get install -y wget curl git zsh sudo vim clangd && \
rm -rf /var/lib/apt/lists/*
# Install Oh My Zsh
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
# Force RobbyRussell theme and Git plugin
RUN sed -i 's/ZSH_THEME=".*"/ZSH_THEME="robbyrussell"/' ~/.zshrc && \
sed -i 's/plugins=(.*)/plugins=(git)/' ~/.zshrc
# Set Zsh as default
RUN chsh -s $(which zsh)这个镜像主要做了:
- 以
nvidia/cuda:13.1.0-devel-ubuntu24.04为基础镜像 - 安装基础工具与
clangd(给 VS Code 的 C/C++ LSP 用) - 配置 zsh(个人偏好,可按需删除)
1.3 devcontainer.json(固定 x86_64,并安装常用扩展)
在 .devcontainer 中创建 devcontainer.json:
{
"name": "CUDA Dev (Compile Only)",
"build": {
"dockerfile": "Dockerfile",
"options": [
"--platform=linux/amd64"
]
},
"runArgs": [
"--platform=linux/amd64"
],
"customizations": {
"vscode": {
"extensions": [
"llvm-vs-code-extensions.vscode-clangd",
"nshen.cpp-tools",
"ms-toolsai.jupyter",
"google.colab",
"nvidia.nsight-vscode-edition",
"NVIDIA.nsight-copilot",
"GitHub.copilot",
"GitHub.copilot-chat"
],
"settings": {
"C_Cpp.intelliSenseEngine": "disabled",
"clangd.path": "clangd",
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}",
"--background-index",
"--header-insertion=never"
],
"terminal.integrated.defaultProfile.linux": "zsh"
}
}
},
"remoteUser": "root"
}说明
- 平台固定为
linux/amd64:在 Apple Silicon(ARM)环境下,部分 CUDA 镜像与工具链存在兼容性问题;固定为 x86_64 通常更稳定。 google.colab:Google 于 2025 年 11 月发布的 VS Code 扩展,可在 VS Code 中使用 Colab kernel 运行 Notebook。Google for Developers Blog - News about Web, Mobile, AI and Cloud- Nsight 扩展:用于 CUDA 开发、调试与性能分析;具体能力取决于运行环境与权限。
1.4 启动 Dev Container
在 VS Code 中按 Cmd + Shift + P,选择 Dev Containers: Reopen in Container。
在 macOS 下请确保 Docker Desktop 已启动。

2. 本地编写最小示例(验证编辑与编译链路)
在容器中创建 hello.cu:
#include <stdio.h>
#include <cuda_runtime.h>
__global__ void helloCUDA() {
printf("Hello from GPU!\n");
}
int main() {
printf("Hello from CPU!\n");
// Launch kernel
helloCUDA<<<1, 1>>>();
// 1) Check launch errors
cudaError_t err = cudaGetLastError();
if (err != cudaSuccess) {
printf("Kernel Launch Error: %s\n", cudaGetErrorString(err));
}
// 2) Check runtime errors
err = cudaDeviceSynchronize();
if (err != cudaSuccess) {
printf("Runtime Error: %s\n", cudaGetErrorString(err));
}
return 0;
}在终端里编译:
nvcc ./hello.cu -o hello.out
./hello.out如果你的本机没有 NVIDIA GPU(或容器未接入 GPU),通常会看到类似:
Hello from CPU!
Kernel Launch Error: CUDA driver version is insufficient for CUDA runtime version
Runtime Error: CUDA driver version is insufficient for CUDA runtime version这属于预期行为:本地容器主要用于提供编辑体验(LSP、补全、跳转、格式化)与编译工具链;运行阶段在后续通过 Colab 的 GPU 完成。

3. 使用 Colab GPU 编译并运行
本节目标:
- 本地编写与管理代码
- 在 Colab 侧完成 GPU 编译与执行
3.1 创建 Notebook 并选择 Colab Kernel
在项目根目录创建 hello.ipynb,然后在 VS Code 里选择 Kernel 为 Colab:

在 Colab 里选择 GPU(例如 T4):

Kernel 选择 Python3 后,你应该能看到 GPU 相关信息输出:

3.2 把 Colab 文件系统挂载到本地工作区
在 VS Code 的 Colab 相关菜单中,选择把 Colab 会话的文件系统 attach 到当前 workspace:

注意:dev container 可能会在这个过程中触发 reload。reload 后需要重新选择最近使用的 Colab kernel/session。

挂载成功后,左侧文件树会出现 Colab 的文件系统:

你可以把 hello.cu 复制到 Colab 侧的目录中。实际上这一步不是必须的:
- 如果你把代码放在 GitHub,也可以直接在 notebook 里
git clone。 - 或者用
curl下载单文件。
3.3 在 Colab 里编译并运行
在 Colab 环境中编译并运行(示意):

版本兼容性:CUDA Toolkit 与驱动不匹配
在我写本文时(2025-12-29),Colab 环境里可能出现:
nvcc对应的 CUDA toolkit/运行时版本较新- 但机器上的 GPU driver 版本略旧
这会导致直接编译运行时报错。
一种规避方式是让 nvcc 生成特定架构(例如 T4 对应 sm_75)的代码,例如:
nvcc -arch=sm_75 hello.cu -o hello.out
./hello.out如果不指定,可能会出现类似报错:

4. 总结与局限
该方案的核心思路是:本地保障开发体验,运行与验证交由 Colab 完成。相较纯本地 GPU 环境,流程更复杂,但具备以下优势:
- 不用本地安装 CUDA/驱动,也能先把 CUDA 写起来
- 依然保留较好的 VS Code 体验
- 需要 GPU 运行时再去 Colab 借用
局限也很明确:
- dev container reload、kernel/session 重新选择会让体验略碎
- 免费 GPU 资源不稳定,排队与配额不可控
毕竟这些都是免费的午餐🤷