CUDA profile 大全 —— nsight computer & nsys & pytorch

Cuda API创建对象: #include <cuda_runtime.h> #include <cuda.h> #include <iostream> #include <string> // 获取当前机器的GPU数量 cudaError_t error_id = cudaGetDeviceCount(&deviceCount); for (int dev = 0; dev < deviceCount; ++dev) { cudaSetDevice(dev); // 初始化当前device的属性获取对象 cudaDeviceProp deviceProp; cudaGetDeviceProperties(&deviceProp, dev); printf("\nDevice %d: \"%s\"\n", dev, deviceProp.name);</code></pre><p style=""></p><p style="">拿到数据后可以查看对应feature</p><pre><code>printf(" Total amount of shared memory per block: %zu bytes\n", deviceProp.sharedMemPerBlock); printf(" Total shared memory per multiprocessor: %zu bytes\n", deviceProp.sharedMemPerMultiprocessor); printf(" Total number of registers available per block: %d\n", deviceProp.regsPerBlock); printf(" Warp size: %d\n", deviceProp.warpSize); printf(" Maximum number of threads per multiprocessor: %d\n", deviceProp.maxThreadsPerMultiProcessor); printf(" Maximum number of threads per block: %d\n", deviceProp.maxThreadsPerBlock); printf(" Max dimension size of a block size (x,y,z): (%d, %d, %d)\n", deviceProp.maxThreadsDim[0], deviceProp.maxThreadsDim[1], deviceProp.maxThreadsDim[2]); printf(" Max dimension size of a grid size (x,y,z): (%d, %d, %d)\n", deviceProp.maxGridSize[0], deviceProp.maxGridSize[1], deviceProp.maxGridSize[2]); ...

October 20, 2025 · 2 min

算子进阶 —— 通信算子

随着LLM业务的不断发展,我们发现单机单卡无法承载一个模型的训练和推理,故此出现了单机多卡和多机多卡的训练推理算子,这时候每个机和卡之间都需要通信,所以通信算子十分的重要。 分布式并行下面是传统的四种并行处理架构,常用于大模型训练。 DP 每张卡拷贝相同的模型结构,仅对数据做切分。每张卡计算完的梯度也是针对各自数据的,需要做一次allreduce,然后使用优化器更新模型,进入下一次迭代。 ...

September 22, 2025 · 3 min

算子进阶 —— 通算融合

(施工ing) 概述我们知道,算子的作用是计算,那在整个体系中,我们的核心目标是拉满GPU的利用率。 在现代分布式体系中,多GPU之间同时存在着计算、内存访问和通信这三种基本活动,为了服务于我们的核心目标,我们需要尽可能的将通信时间和访存时间放在计算时间内,使得GPU不存在运算时间的泡泡。 大模型分布式系统执行的核心组件是并行的GPU。提升GPU运算的最佳方法,是通过计算与通信的重叠来实现。这种重叠可以通过两种方式达成:算子分解或通信内核融合。虽然算子分解实现起来简单,但往往导致性能欠佳。而将通信内核与计算内核融合,则需要更多的思考和计算。 故此最原始的想法就是用计算时间掩盖通信时间,通过大批量的数据直接发送到GPU,减少kernel开启和关闭、通信的开销。 Triton-distributedTriton-distributed是字节seed团队开发的Triton 编译器的扩展。对于 LLM 来说,分布式优化的关键要求是计算通信重叠。以前,在小规模分布式训练/推理中,通信开销并不是一个关键的成本问题。然而,随着集群数量呈指数级增长,计算与通信重叠变得至关重要。 ...

September 19, 2025 · 3 min

Triton is all you need —— Triton 源码、编译和调试

(施工ing) include日录主要存放了编译器核心功能的.h头文件,提供约定和规范 lib是.c和.cpp,主要是功能的实现,和include一一对应 ...

September 18, 2025 · 2 min

triton is all you need 之 GEMM

代码参考了傅哥,请b站关注我是傅傅猪喵,谢谢喵! Triton DSL是以BLOCK tile为中心的Python DSL。与CUDA相比,Triton的使用者无法控制所有细节,因为某些优化是自动完成的,但是在Triton编译器的逐层编译优化之下也可以获得与Cuda相近甚至超过的性能。另外,Triton的编写和调试更加简单,而且学习成本更低。 ...

September 7, 2025 · 5 min

【CUDA从入门到入土】四、矩阵乘法

矩阵乘法跟之前不同,之前一维可以直接写一个kernel,或者多个kernel线性的排布来并行计算,那么矩阵乘法就是由一维向二维转变的关键。这时候一维的kernel排布也变成了二维排布。 ...

September 3, 2025 · 1 min

【CUDA从入门到入土】三、reduce算子及其优化

该项目代码参考傅哥的课程,很有用的课程,请多多支持他。 reduce 规约求和是cuda中一个经典的问题,其本质是将输入的序列进行求和。 在CUDA的多线程中,我们清楚数据被分为一个一个的block中进行运行,每个block通过warp来并发32个线程进行运算。 ...

August 23, 2025 · 8 min

【CUDA从入门到入土】二、CUDA调试和必知必会 & Nsight Computer 入门

上文中,我们运行了一个简单的cuda函数,并且一次过的将其运行了起来,这次,我们需要补充一些基础的概念,通过概念和框架的建立,我们才能走的更远,高屋建瓴的认识更多。 ...

August 17, 2025 · 7 min

【CUDA从入门到入土】五、cuda_kernel_和_cuda_attention详解

从cuda kernel出发,看懂人生第一个cuda attention

August 17, 2025 · 1 min

【CUDA从入门到入土】一、丝滑的CUDA入门

CUDA是什么 cuda是一种gpu编程组件,是一种原生支持GPU软硬件的架构,使得开发者可以直接在 GPU 上编写和执行通用计算程序。 GPU架构 上图是H100白皮书中,H100 GPU带满了144个SM的架构图 上图是H100中,1个SM的架构图 SM架构详解由此,我们可以高屋建瓴的看懂GPU,这里不雕琢细节,只直白的说明白GPU怎么工作的: PCIE 就是负责数据从显卡和主板之间进出的数据传输协议,理解为传递数据的就对了 ...

August 14, 2025 · 8 min

WSL2搭建cuda-triton开发环境

先用了vmware + ubuntu的方法,结果发现现在gpu无法透传到vmware的虚拟机里 故此使用wsl2的开发环境,后续会更新许多更舒服丝滑的操作 WSL2查看所有发行版本 wsl --list --online 安装指定版本 wsl --install Ubuntu-22.04 安装成功之后设置一下账户密码就行 安装miniconda用脚本安装 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh chmod +x Miniconda3-latest-Linux-x86_64.sh ./Miniconda3-latest-Linux-x86_64.sh source ~/.bashrc conda list 用脚本安装就一直yes就行 安装CUDA Toolkit 和 cudnn使用 nvidia-smi查看cuda版本,在下面链接选择相应的版本 ...

August 14, 2025 · 4 min