CUDA系统学习之一软件堆栈架构

一、CPU与GPU体系架构

  • 计算单元分布
    • CPU: 少量强大的ALU(算术逻辑单元),通常4-8个核心
    • GPU: 大量小型ALU,成百上千个计算核心
    • 特点:GPU更适合并行计算,可以同时处理大量数据
  • 控制单元(Control)
    • CPU: 较大的控制单元,复杂的控制逻辑
    • GPU: 较小的控制单元,多个计算单元共享一个控制单元
    • 特点:GPU牺牲了控制灵活性,换取更多计算资源
  • 缓存(Cache)
    • CPU: 较大的缓存,多级缓存结构
    • GPU: 相对较小的缓存
    • 特点:GPU更依赖高带宽内存访问而不是缓存命中
  • 内存(DRAM)
    • CPU: 通用内存架构,延迟优化
    • GPU: 高带宽内存架构,吞吐量优化
    • 特点:GPU的内存系统设计偏重带宽而非延迟

二、GPU编程软件堆栈

1、CPU视角的执行流程:

Application代码

调用CUDA API

CUDA Runtime处理

Driver与GPU通信

向GPU发送指令

2、GPU视角:

接收指令 → 执行计算 → 返回结果

从系统架构上来看:

应用程序 (CPU)

CUDA Runtime/Driver (CPU系统空间)

PCIe总线通信

GPU执行单元

所以看出CPU用于控制运行application,做复杂控制,GPU只用于大规模并行计算,GPU不能离开CPU单独使用,由CPU来统一管理系统资源,GPU专注计算任务。

3、用伪代码表述如下:

int main() { // CPU上运行主程序

// CPU管理GPU资源

cudaSetDevice(0);

// CPU分配内存

float *d_data;

cudaMalloc(&d_data, size);

// CPU启动GPU计算

kernel<<<grid, block>>>(d_data);

// CPU等待GPU完成

cudaDeviceSynchronize();

}

CUDA组件必须运行在CPU上,作为CPU和GPU之间的桥梁,管理和协调两种处理器的工作。这也是为什么图中将CUDA组件放在CPU框中的原因

三、现实中英伟达的软件与软件栈对应关系

举个代码例子来理解这个框架:

当你运行一个PyTorch程序时

import torch

model = torch.nn.Linear(100, 10).cuda()

output = model(input_data)

实际发生了这些事:

  1. PyTorch(应用层)调用cuDNN(Libraries层)的优化函数

  2. cuDNN通过Runtime层申请GPU内存、创建计算流

  3. Runtime层通过Driver层与GPU通信

  4. Driver层发送指令给GPU执行计算

  5. 结果通过层层返回到PyTorch

类比你要网购一件商品的过程:

应用层 → 你在手机App下单

Libraries层 → 购物平台的各种服务(支付/物流)

Runtime层 → 快递公司的调度系统

Driver层 → 快递员实际配送

硬件层 → 商品实际到达你手中

四、所以安装单机多卡容器化训练环境

1、基础系统层

推荐使用Ubuntu 20.04/22.04 LTS服务器版

sudo apt update && sudo apt upgrade

安装基础开发工具

sudo apt install -y build-essential cmake git curl wget software-properties-common

2、nVidia驱动层

添加NVIDIA驱动仓库

sudo add-apt-repository ppa:graphics-drivers/ppa

安装NVIDIA驱动(适用于A800的最新驱动,如535)

sudo apt install nvidia-driver-535

验证驱动安装

nvidia-smi

3、NVIDIA CUDA工具层

下载并安装CUDA工具包(以12.2为例)

wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_525.60.13_linux.run

sudo sh cuda_12.2.0_525.60.13_linux.run

设置环境变量(添加到 ~/.bashrc)

export PATH=/usr/local/cuda-12.2/bin{PATH:+:{PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64{LD_LIBRARY_PATH:+:{LD_LIBRARY_PATH}}

4、Docker环境层

安装Docker

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

安装NVIDIA Container Toolkit

distribution=(. /etc/os-release;echo ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt update

sudo apt install -y nvidia-container-toolkit

sudo systemctl restart docker

验证Docker GPU支持

sudo docker run --gpus all nvidia/cuda:12.2.0-base-ubuntu20.04 nvidia-smi

5、深度学习环境层

拉取NVIDIA优化的PyTorch容器(以最新版为例)

sudo docker pull nvcr.io/nvidia/pytorch:23.10-py3

创建容器启动脚本 start_container.sh

cat << 'EOF' > start_container.sh

#!/bin/bash

docker run --gpus all -it --rm \

--shm-size=1g \

--ulimit memlock=-1 \

--ulimit stack=67108864 \

-v /path/to/your/data:/workspace/data \

-v /path/to/your/code:/workspace/code \

nvcr.io/nvidia/pytorch:23.10-py3

EOF

chmod +x start_container.sh

6、分布式训练配置

创建多卡训练启动脚本 launch_training.sh

cat << 'EOF' > launch_training.sh

#!/bin/bash

docker run --gpus all -it --rm \

--shm-size=1g \

--ulimit memlock=-1 \

--ulimit stack=67108864 \

--network=host \

-v /path/to/your/data:/workspace/data \

-v /path/to/your/code:/workspace/code \

--env NCCL_DEBUG=INFO \

--env NCCL_IB_DISABLE=0 \

--env NCCL_IB_GID_INDEX=3 \

--env NCCL_SOCKET_IFNAME=^docker0,lo \

nvcr.io/nvidia/pytorch:23.10-py3

EOF

chmod +x launch_training.sh

相关推荐
xiaotao1311 天前
02-机器学习基础: 监督学习——线性回归
学习·机器学习·线性回归
墨黎芜1 天前
ArcGIS从入门到精通——地图符号、注记的初步使用
学习·arcgis·信息可视化
小李云雾1 天前
FastAPI重要知识点---中间件(Middleware)
学习·程序人生·中间件·fastapi·middleware
小夏子_riotous1 天前
Docker学习路径——3、常用命令
linux·运维·服务器·学习·docker·容器·centos
STLearner1 天前
WSDM 2026 | 时间序列(Time Series)论文总结【预测,表示学习,因果】
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
redaijufeng1 天前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
爬虫·学习·selenium
腾科IT教育1 天前
零基础快速上岸HCIP,高效学习思路分享
学习·华为认证·hcip·hcip考试·hcip认证
23471021271 天前
4.14 学习笔记
笔记·python·学习
醇氧1 天前
【学习】软件过程模型全解析:从瀑布到敏捷的演进之路
学习·log4j
邪修king1 天前
UE5 零基础入门第三弹: 碰撞与触发交互,解锁场景机关与蓝图封装(高娱乐性学习)
学习·ue5·交互