CUDA学习之路1——速通环境配置
在开始学习CUDA之前,环境配置是所有入门者的一大门槛。
在构建开发环境之前,我们需要理清几个核心组件的关系与定位:

- Nvidia显卡驱动:安装在操作系统层面,全局唯一。
- CUDA Toolkit:安装在全局路径,可能有多个版本,需要切换。
- Pytorch/TensorFlow:安装在隔离的虚拟环境中,提供高层API。
- CUDA Runtime:随框架自动部署在虚拟环境中,无需手动单独配置。
未来所有的实验我都会在Ubuntu24.04上进行,如果操作系统不一致的同学,可以自行修改其中的某些命令
Nvidia驱动配置
打开终端,检查显卡是否被识别:

使用Ubuntu自带的驱动来进行安装。
- 更新软件源列表:
sudo apt update- 让系统自动推荐并安装最合适的驱动:
sudo ubuntu-drivers devices
- 安装必要的依赖包
sudo apt install -y alsa-utilssudo apt install -y pciutils ubuntu-drivers-common- 安装推荐的Nvidia驱动
sudo apt install nvidia-driver-580-open- 重启设备并验证安装
sudo reboot
## 验证是否安装成功nvidia-smi如果一切正常,你会看到类似的输出:主要显示驱动版本和GPU信息:

CUDA工具套件配置
安装驱动
访问CUDA Toolkit Archive 选择一个稳定的版本,其中使用最多的为CUDA 11.8或者CUDA 12.6,目前最新的为13.2,为了演示,我安装13.2的最新版本,但是由于我的驱动是580,会不兼容,仅做演示。
找到对应的版本后,选择相对应的套件:

# 一定要找到对应的runfile,在nvidia官方网站去拷贝wget https://developer.download.nvidia.com/compute/cuda/13.2.0/local_installers/cuda_13.2.0_595.45.04_linux.run
sudo sh cuda_13.2.0_595.45.04_linux.run- 选择continue继续安装;
- 按回车键取消勾选驱动安装,因为我们已经装过驱动了
- 不要设置软连接,选择No




如果安装成功,你可以在/usr/local/路径下看到对应的版本:

我们直接使用绝对路径分别查看一下对应的nvcc版本:

到此为止我们已经成功安装了,但是如果我们直接输入nvcc --version,会发现环境还是没有切换。

因此我们需要在~/.bashrc或者~/.zshrc中告诉系统应该使用哪一个版本的CUDA:
vim ~/.zshrc# 或者是bashrc如果你之前已经安装过一个版本的CUDA,则直接找到对应的两行:


按:wq,保存vim并退出。
重新更新环境变量:
source ~/.zshrc
Toolkit安装成功。
编写第一个CUDA程序
我们写一个最基础的CUDA向量加法程序,利用GPU并行计算两个浮点数组的和,主要包括:
#include <iostream>#include <cuda_runtime.h>
// CUDA 核函数__global__ void vectorAdd(const float* A, const float* B, float* C, int n) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if (idx < n) { C[idx] = A[idx] + B[idx]; }}
// 错误检查宏#define CUDA_CHECK(call) \ do { \ cudaError_t err = call; \ if (err != cudaSuccess) { \ std::cerr << "CUDA 错误:" << cudaGetErrorString(err) \ << " 在 " << __FILE__ << ":" << __LINE__ << std::endl; \ exit(1); \ } \ } while(0)
int main() { // 1. 检查设备 int deviceCount; CUDA_CHECK(cudaGetDeviceCount(&deviceCount)); if (deviceCount == 0) { std::cerr << "没有找到支持 CUDA 的设备!" << std::endl; return 1; } std::cout << "找到 " << deviceCount << " 个 CUDA 设备" << std::endl;
// 2. 数据大小 int n = 1 << 20; size_t size = n * sizeof(float);
// 3. 主机内存分配与初始化 float* h_A = new float[n]; float* h_B = new float[n]; float* h_C = new float[n];
for (int i = 0; i < n; ++i) { h_A[i] = static_cast<float>(i); h_B[i] = static_cast<float>(i * 2.0f); }
// 4. 设备内存分配 float *d_A, *d_B, *d_C; CUDA_CHECK(cudaMalloc(&d_A, size)); CUDA_CHECK(cudaMalloc(&d_B, size)); CUDA_CHECK(cudaMalloc(&d_C, size));
// 5. 拷贝数据到设备 CUDA_CHECK(cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice)); CUDA_CHECK(cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice));
// 6. 配置核函数 int threadsPerBlock = 256; int blocksPerGrid = (n + threadsPerBlock - 1) / threadsPerBlock;
// 7. 启动核函数 vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, n);
// 检查核函数启动错误 CUDA_CHECK(cudaGetLastError());
// 等待核函数完成 CUDA_CHECK(cudaDeviceSynchronize());
// 8. 拷贝结果回主机 CUDA_CHECK(cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost));
// 9. 输出前10个结果验证 std::cout << "计算结果示例(前10个元素):" << std::endl; for (int i = 0; i < 10 && i < n; ++i) { std::cout << "C[" << i << "] = " << h_C[i] << " (期望 " << h_A[i] + h_B[i] << ")" << std::endl; }
// 10. 释放内存 CUDA_CHECK(cudaFree(d_A)); CUDA_CHECK(cudaFree(d_B)); CUDA_CHECK(cudaFree(d_C)); delete[] h_A; delete[] h_B; delete[] h_C;
return 0;}之后使用nvcc进行编译:
nvcc hello.cu -o hello./hello
至此,CUDA的基础开发环境已经配置完成。
Pytorch和Triton配置
包管理工具配置
根据我先前提到的,关于Pytorch,一般来说都是要单独隔离的。
现在市面上有太多关于Conda的配置文章了,实际上Conda慢得要死,特别是安装Pytorch这种大库时,真的不知道是卡住了还是在加载。
而pip又没有环境隔离功能,因此我选择使用uv。
uv的解析和下载都非常直观,并且几乎没有环境冲突,我们可以全程使用uv pip来安装任何东西。
哦对!更令人可恶的是,conda还非常大!!!! 它一个垃圾环境吃掉我电脑几十个G,把我的硬盘都塞满了。
话不多说,我们现在开始继续安装:
- 安装uv
curl -LsSf https://astral.sh/uv/install.sh | sh- 同样,让它能够被系统识别:
source $HOME/.cargo/env- 验证是否安装成功:
uv --version如果有版本号输出,说明安装成功。
由于我们伟大的Great Firewall,我们不得不配置国内的镜像源。
export UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"快速安装pytorch和Triton
这里是uv最爽的一步,因为uv会自动处理cuda版本匹配。
先在你的项目目录下创建一个uv环境,然后激活它:
# 创建环境uv venv --python=3.14# 激活环境source .venv/bin/activate之后再终端前面会出现(项目名)的这种格式。
这表明我们成功激活环境。
之后安装Pytorch,uv有一个专门的参数,它非常智能,能够自动检测系统的CUDA版本并安装对应的Pytorch。
uv pip install torch torchvision torchaudio --torch-backend=auto这一步实际上非常快,因为uv是并发下载的。
安装好pytorch之后,那么再安装Triton。
因为Triton已经发布在PyPI上了,直接装就行。
uv pip install triton最终我们进入Python的交互模式,效果如下图所示:

每次新建项目时,只需创建并激活虚拟环境,即可通过 uv pip 安装所需的包。
Nvidia Docker配置
如果你会使用Docker,并且linux命令操作比较熟悉,那可以考虑使用Nvidia Docker来做配置。
它是一个让容器能够直接使用宿主机GPU的工具,会自动挂在Nvidia驱动、设备文件和必要的库,让容器内部的应用无需再次安装驱动。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!