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

PD分离 —— Prefix Cache和Chunk Prefills

目前推理框架基本上都需要用到多轮对话的场景,自然产生了kv cache的存储和索引算法。如果能把prompt和后续产生的KV Cache保存下来,会极大地降低首Token的耗时。 目前使用最多的就是两个技术方案,一个是SGLang推出的RadixAttention的Prefix Cache,另一个是vllm原生的Chunk Prefills。当然vllm也兼容了Prefix Cache,这两个技术只能用一个,vllm默认是Chunk Prefills,可以通过加入参数--enable-prefix-caching来开启,这里不谈TensorRT-LLM是因为其不完全开源。 ...

September 29, 2025 · 1 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

AMD 2025 分布式推理算子优化挑战赛 —— lect 9/16 note

ROCm 入门 首先就是amd官方的命名跟nv的区别,其实区别并不大,只是AMD在cuda的基础上做了更多的优化,比如说一个wavefront有64个work-item,相当于一个warp有64个threads。其次就是有两种register,在 ...

September 19, 2025 · 1 min

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

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

September 18, 2025 · 2 min

AI编译器 —— 笔记

challenge 新模型 新module出现,需要对应算子进行计算,还需要结合硬件进行特性优化和测试,尽量充分发挥硬件性能 硬件厂商还会发布新技术的加速计算库 专用加速芯片爆发导致性能可移植性成为一种刚需 不同厂商的ISA不尽相同 一般缺乏如GCC、LLVM等编译工具链,使得针对CPU和GPU已有的优化算子库和针对语言的优化Pass很难短期移植到NPU上 架构 和传统编译器对比 在编译优化层通过统一IR执行不同的Pass进行优化,从而提高执行性能 软件结构栈:分成前端、优化、后端三段式,IR解耦前端和后端使得模块化表示 AI编译器对Graph IR进行优化后,将优化后的IR转换成传统编译器IR,最后依赖传统编译器进行机器码生成 左边是旧编译器架构,右边是ai编译器架构 ...

September 11, 2025 · 3 min

AMD 2025 分布式推理算子优化挑战赛——笔记

比赛提供的link: 魔搭社区比赛首页 AMD比赛首页 amd-all2all kernel Leaderboard reference-kernels discord link Popcorn CLI lect: ytb Bonus Lecture: AMD Developer Challenge Mixture of Experts AMD Problem 9/16 lect note

September 9, 2025 · 1 min

八股系列:inference infra

收集我和我小伙伴互相问的八股问题,里面有gemini deep search的回答,望周知。 LLM model rmsnorm和layernorm相比有什么优点参考为什么最新的大模型普遍用RMSNorm? swiglu和relu相比有什么修改GELU: 高斯误差线性单元 ReLU: 修正线性单元 Swish (β=1.0): 标准Swish函数 ...

September 3, 2025 · 35 min

【LLM 必读综述】Speed Always Wins:LLM高效架构调查

题目:Speed Always Wins: A Survey on Efficient Architectures for Large Language Models 作者:孙伟高 上海人工智能实验室 github:https://github.com/weigao266/Awesome-Efficient-Arch 文章的主要目的通过分析449篇大模型的论文,汇总得到了以下能让大模型速度提升的方向: ...

August 27, 2025 · 7 min