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
相关文章:
CUDA系统学习之一软件堆栈架构
一、CPU与GPU体系架构 计算单元分布 CPU: 少量强大的ALU(算术逻辑单元),通常4-8个核心GPU: 大量小型ALU,成百上千个计算核心特点:GPU更适合并行计算,可以同时处理大量数据控制单元(Control) CPU: 较大的控制单元,复杂的…...
SpringBoot项目中替换指定版本的tomcat
需求:项目使用的SpringBoot框架,因低版本的tomcat的有安全漏洞,根据安全要求需要将项目的tomcat版本升级到9.0.89以上版本。 解决办法: 1、在pom.xml中排除SpringBoot的默认tomcat依赖; <dependency><groupId…...
【5.10】指针算法-快慢指针将有序链表转二叉搜索树
一、题目 给定一个单链表,其中的 元素按升序排序 ,将其转换为 高度平衡的二叉搜索树 。 本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。 示例: 给定的有序链表: [ -10 , -3 , 0 , …...
机器学习—前向传播的一般实现
可以写一个函数来实现一个密集的层,那是神经网络的单层,所以定义稠密函数,它将上一层的激活作为输入以及给定层神经元的参数w和b。看下边图片所展示的例子,把所有这些权重向量堆叠成一个矩阵,wnp.array([[1,-3,5][2,4,…...
极狐GitLab 签约足下科技,加速国产智驾操作系统的发展与普及
客户背景 足下科技是一家致力于成为智能汽车软件平台、产品与服务领导者的高科技企业,成立于 2022年 3 月,总部位于深圳市。足下科技自主研发的智能驾驶操作系统 Earth 和 Air 工具链,协助OEM和Tier1厂商降低算法和软件开发难度,…...
20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N
20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N 2024/11/2 18:04 在WIN10使用程序:ViewLink-4.0.7_0708-windows-x64.exe 在荣品PRO-RK3566开发板的预置Android13下使用:ViewLink-2023_12_21-release-0.2.6.apk adb install…...
力扣(leetcode)题目总结——哈希表篇
leetcode 经典题分类 链表数组字符串哈希表二分法双指针滑动窗口递归/回溯动态规划二叉树辅助栈 本系列专栏:点击进入 leetcode题目分类 关注走一波 前言:本系列文章初衷是为了按类别整理出力扣(leetcode)最经典题目,…...
AWS RDS Oracle hit ORA-39405
报错信息: ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version 42 into a target database with TSTZ version 35. 分析过程: 这个报错是由于timezone_file的版本,源端比目标端高…...
Dinky中配置Flink集群
需要启动yarn-session 进程,在集群服务器 cd /pwd//flink/bin yarn-session -d 启动成功后可以在yarn的资源管理队列进行查看 启动成功后会给出:JobManager Web Interface 在dinky中进行配置: 集群配置 Hadoop 配置: H…...
通讯录(C 语言)
目录 一、通讯录设计思路1. 伪代码设计思路2. 代码设计思路 二、代码实现三、程序运行演示四、整体分析 一、通讯录设计思路 1. 伪代码设计思路 通讯录可以用来存储 100 个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址。 提供方法&#x…...
对比Java和TypeScript中的服务注册和查找机制
文章目录 一、Java中的服务注册和查找二、TypeScript中的服务注册和查找2.1 使用依赖注入(DI)框架2.2 injectable原理2.3 使用TypeScript的反射系统实现依赖注入 三、优缺点分析3.1 Java的ServiceLoader3.2 TypeScript的服务注册和查找 四、结论 在构建大…...
Flutter 主流常用第三方库、插件收集
一、Flutter 学习资料 FlutterFlutter官网Flutter中文网咸鱼技术掘金Flutter专栏 Flutter - Dart中(.)、(..)、(...)语法使用_flutter ...-CSDN博客 Flutter pubspec.yaml 配置文件_flutter yaml配置git-CSDN博客 Flutter 添加 example流程_建flutter 工程 怎么自动有example-C…...
【在Linux世界中追寻伟大的One Piece】多路转接select
目录 1 -> I/O多路转接之select 1.1 -> 初识select 1.2 -> select函数原型 1.3 -> 关于fd_set结构 1.4 -> 关于timeval结构 2 -> 理解select执行过程 2.1 -> Socket就绪条件 2.2 -> select特点 2.3 -> select缺点 3 -> select使用示例…...
补一下 二维 平面直角坐标系 到三维
上一篇帖子写到 二维的平面直角坐标系,是那样的,这次补充一下三维的。首先需要,安装一个包,如下: 然后,把参数输入,输入这个坐标系的参数,如下: 这样就可以输出如下的三…...
如何学习Python编程?
如何学习Python编程? 了解基础概念: 学习Python的基本语法,包括变量、数据类型、运算符等。了解控制结构,如条件语句(if语句)和循环(for和while循环)。 选择学习资源: 在…...
使用EasyExcel实现导出excel文件时生成多级下拉选
前言 公司有个需求本来只涉及到两个下拉选项,后面就想能不能实现多个下拉选,当然我这里说的多个下拉选是联动的,比如省、地市、区县这种。 实现步骤 1、添加EasyExcel的Maven依赖 <dependency><groupId>com.alibaba</group…...
微信小程序 高校教材征订系统
文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 系统分为三个角色,分别是教材科、系教学秘书、教研室主任。系统主要完成功能是教材科要发布教材征订信息&am…...
从0开始的STM32 定时器(I):聊一聊基本定时器
目录 时钟源 控制器 时基单元 关于HAL库如何配置基本定时器 HAL是如何初始化我们的定时器句柄的 HAL_TIM_Base_Init 开始定时 如何处理句柄? 在我们使用STM32解决一些问题的时候,常常会遇到说:我想要以一个周期做一些事情:…...
vue常见题型(1-10)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 2.2双向绑定的原理是什么vue框架采用的是数据双向绑定的方式,由三个重要部分构成2.2.1.ViewModel2.2.2 双向绑定2.2.3.1.编译Compile2.2.3.2.依赖收集 3…...
【SpringBoot】使用注解进行XSS防御
在Spring Boot中,我们可以使用注解的方式来进行XSS防御。注解是一种轻量级的防御手段,它可以在方法或字段级别对输入进行校验,从而防止XSS攻击。 引入相关依赖 maven依赖: <!--JSR-303/JSR-380用于验证的注解 --> <de…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
