- 博客(273)
- 收藏
- 关注
原创 DeepGEMM Mega MoE(二)- 源码实现
上一节中介绍了Mega MoE的整体流程以及Blackwell如何做block scaling,本节继续以test_mega_moe.py中的用法介绍具体的实现。
2026-04-28 16:16:16
397
原创 DeepGEMM Mega MoE(一)- 整体流程及Blackwell的block scaling
DeepSeek V4在DeepGEMM中引入了Mega MoE大算子,融合了dispatch/linear 1/SwiGLU/linear 2/combine,本节主要介绍一下整体流程和Blackwell的block scaling。
2026-04-25 11:02:36
431
原创 NVIDIA NCCL 源码学习(十七)- LL和LL128协议
之前提到nccl有多种协议,并且主要以simple协议为例介绍nccl的流程,本节我们具体看下simple之外的LL和LL128协议,LL是low latency的缩写,表示低延迟。
2026-03-24 17:13:47
498
原创 DeepGEMM学习(一)- Hopper架构的MoE
DeepGEMM是deepseek团队开源的GEMM算子库,支持normal以及MoE,normal为常规GEMM,group contiguous为prefill阶段的MoE,group masked为decode阶段的MoE。
2026-03-03 19:22:30
619
原创 DeepSeek DeepEP学习(六)Hybrid-EP combine
继续介绍Hybrid-EP的combine过程,如下展示了一个4机4卡的dispatch场景,topk为4,假设rank0的某个token(称为tokeny)的topk分别对应rank2,rank3,rank13,rank15,那么通信流程为通过本机nvlink传输到rank2和rank3,通过网络传输给同号卡rank12,然后rank12通过nvlink转发给了rank13和rank15。之后都会用这个例子进行解释。
2026-01-28 16:34:42
821
2
原创 DeepSeek DeepEP学习(五)Hybrid-EP dispatch
nvidia官方最近发布了Hybrid-EP,已经开源在DeepEP仓库,整体架构类似DeepEP的normal,相对DeepEP,Hybrid-EP降低了对SM的占用,并且在超节点表现更好。
2026-01-21 16:00:57
940
原创 Blackwell架构学习
最近学习了一下Blackwell相关的架构,本文整理一下,最大的感受是看到GPU越来越NPU。首先约定一下后续的符号,假设TensorCore处理的D = A x B + D,A和B为bf16,D为fp32。
2026-01-13 21:01:07
1687
原创 Hopper Gemm优化
本章介绍下Hopper下TensorCore的使用,以及如何利用TensorCore实现和优化Gemm,主要参考这个博客和对应的代码实现。代码实现了C = A x B,均为bf16,A是K Major,shape为MxK,B为K Major,shape为NxK,C为M Major,shape为NxM。
2025-12-17 22:31:48
1172
原创 NVIDIA NCCL 源码学习(十六)- nccl的ibgda(GIN)
2.28的nccl发布之后,也支持了最近很火的ibgda,nccl中称ibgda为GIN,即GPU-Initiated Networking,这节我们看下nccl是怎么做的。
2025-10-30 21:24:07
1800
2
原创 NVIDIA NCCL 源码学习(十五)- Symmetric Memory
最近nccl引入了Symmetric Memory的特性,本质和nvshmem的对称内存一样,用户可以像用nvshmem一样使用nccl暴露出来的device接口写通信算子了。
2025-10-23 16:33:22
1822
2
原创 nvshmem源码学习(一)ibgda视角的整体流程
DeepSeek v3论文发出来后带火了nvshmem,于是学习了下nvshmem,不过当时工作很忙一直没来得及整理,最近趁着节奏放缓整理一下。本节主要是介绍一下nvshmem的ibgda初始化流程,代码基于3.2.5。
2025-09-19 10:52:47
1417
原创 DeepSeek DeepEP学习(四)normal combine
首先回顾一下dispatch的过程,dispatch是两阶段的,第一阶段是机间同号gpu之间通过rdma的发送,第二阶段是机内通过nvlink的中转,rank0的视角如下所示,combine的过程就是原路返回。
2025-07-25 18:33:33
1895
原创 DeepSeek DeepEP学习(三)normal dispatch
上节介绍了DeepSeek DeepEP的normal kernel执行过程中会分成两部分,第一步通过notify_dispatch计算meta信息,然后本节介绍数据dispatch的过程。
2025-03-09 14:27:56
4146
20
原创 DeepSeek DeepEP学习(二)normal notify dispatch
dispatch的过程分为两步,第一步通过notify dispatch计算一些meta信息,比如每台机器将会收到多少token,然后再执行实际的dispatch,本节主要介绍notify dispatch。
2025-03-06 14:06:03
3447
18
原创 DeepSeek DeepEP学习(一)low latency dispatch
为了优化延迟,low lantency使用卡间直接收发cast成fp8的数据的方式,而不是使用normal算子的第一步执行机间同号卡网络发送,再通过nvlink进行转发的两阶段方式。进一步地,normal算子的dispatch包含了notify_dispatch传输meta信息和dispatch传输实际数据两个kernel,而low lantency也省去了notify的过程,为此需要的代价就是显存占用较高,而且也需要配合deepseek版本的gemm。
2025-03-04 23:09:09
5229
8
原创 RDMA驱动学习(三)- cq的创建
用户通过ibv_create_cq接口创建完成队列,函数原型和常见用法如下,本节以该用法为例看下cq的创建过程。
2024-12-02 19:13:43
2034
原创 RDMA驱动学习(二)- command queue
为了实现用户对网卡硬件的配置,查询,或者执行比如create_cq等命令,mellanox网卡提供了command queue + mailbox的机制,本节将以create_cq为例看下这个过程。
2024-10-31 14:03:17
2050
1
原创 NVIDIA NCCL 源码学习(十四)- NVLink SHARP
上节我们介绍了IB SHARP的工作原理,进一步的,英伟达在Hopper架构机器中引入了第三代NVSwitch,就像机间IB SHARP一样,机内可以通过NVSwitch执行NVLink SHARP,简称nvls,这节我们会介绍下NVLink SHARP如何工作的。
2024-04-18 17:43:31
11684
58
原创 NVIDIA NCCL 源码学习(十三)- IB SHARP
因此基于这一点,mellanox提出了SHARP,将计算offload到了IB switch,每个节点只需要发送一次数据,这块数据会被交换机完成规约,然后每个节点再接收一次就得到了完整结果。
2024-03-20 18:25:23
7404
14
原创 NVIDIA NCCL 源码学习(十二)- double binary tree
上节我们以ring allreduce为例看到了集合通信的过程,但是随着训练任务中使用的gpu个数的扩展,ring allreduce的延迟会线性增长,为了解决这个问题,NCCL引入了tree算法,即double binary tree。
2023-12-22 16:56:34
9992
38
原创 NVIDIA NCCL 源码学习(十一)- ring allreduce
之前的章节里我们看到了nccl send/recv通信的过程,本节我们以ring allreduce为例看下集合通信的过程。整体执行流程和send/recv很像,所以对于相似的流程只做简单介绍,主要介绍ring allreduce自己特有内容。
2023-10-20 19:21:55
14722
65
原创 flash attention 2论文学习
flash attention作者Tri Dao发布了flash attention 2,性能为flash attention的2倍。
2023-07-25 22:16:57
1864
原创 flash attention论文及源码学习
flash attention考虑到IO的影响,重新设计了attention算法流程,降低对HBM的占用和访问,在高速缓存上使用block粒度的softmax tiling的计算方法加速attention的计算。
2023-07-01 11:30:05
8319
23
原创 NVIDIA NCCL 源码学习(十)- 多机间ncclSend和ncclRecv的过程
通信由kernel和proxy线程协调完成,send端kernel负责将数据从input搬运到buf,proxy线程负责将buf中数据通过网络发送给recv端,kernel和proxy间通过队列实现生产者消费者模式,send端通过rdma send发送数据,和recv端通过队列实现生产者消费者模式,队列位于send端,recv端每次下发一个wr到rq之后会执行rdma write通知send端
2023-06-01 19:33:30
14601
105
原创 NVIDIA NCCL 源码学习(九)- 单机内ncclSend和ncclRecv的过程
上节介绍了通信链路的建立过程,本节介绍下单机内部ncclSend和ncclRecv的运行过程。单机内的通信都是通过kernel来完成的,所以整个通信的过程可以分为两步,第一步是准备kernel相关的参数,第二步是实际执行kernel的过程。
2022-12-27 15:21:56
20175
77
原创 NVIDIA NCCL 源码学习(八)- 数据通信链路transport的建立
上节以ringGraph为例介绍了机器间channel的连接过程,现在环里每个rank都知道了从哪个rank接收数据以及将数据发送给哪个rank,本节具体介绍下P2P和rdma NET场景下数据通信链路的建立过程。
2022-12-12 11:00:32
17284
39
原创 NVIDIA NCCL 源码学习(七)- 机器间channel连接
上节中完成了单机内部的channel搜索,仍然以ringGraph为例的话,相当于在单台机器内部搜索出来了一系列的环,接下来需要将机器之间的环连接起来。
2022-12-07 18:37:17
9349
6
原创 NVIDIA NCCL 源码学习(六)- channel搜索
nccl中channel的概念表示一个通信路径,为了更好的利用带宽和网卡,以及同一块数据可以通过多个channel并发通信,另外后续可以看到一个channel对应了一个GPU SM,所以基于这些原因,nccl会使用多channel,搜索的过程就是搜索出来一组channel。
2022-12-01 17:47:02
11033
31
原创 NVIDIA NCCL 源码学习(五)- 路径计算
为了方便之后的搜索channel,接下来NCCL会计算GPU和NIC节点到其他任意节点之间的最优路径
2022-11-15 20:36:57
8885
24
原创 NVIDIA NCCL 源码学习(四)- 建图过程
上次分析到nccl对机器PCI系统进行拓扑分析的过程,产出的结果为xml格式,接下来,nccl会根据这个xml进图的建立过程以便之后进行路径搜索。
2022-10-26 17:10:28
9140
7
原创 NVIDIA NCCL 源码学习(三)- 机器内拓扑分析
上节介绍到所有节点执行了bootstrap网络连接的建立,接下来介绍下拓扑分析。由于gpu机器架构是多种多样的,一台机器上可能有多个网卡,多个gpu卡,卡间连接也各不相同,因此需要对机器内设备连接拓扑进行分析以达到各种拓扑结构下性能都尽可能的好。
2022-09-28 16:03:42
11578
17
原创 NVIDIA NCCL 源码学习(一)- 初始化及ncclUniqueId的产生
NCCL是英伟达开源的GPU通信库,支持集合通信和点对点通信
2022-09-05 21:23:46
18035
21
原创 brpc源码学习(十)- RDMA通信
目录整体流程初始化内存池建立连接基于polling模式的收发数据事件通知模式因为kernel bypass和zero copy,使得rdma相对tcp有着显著的优势:低时延,高带宽,cpu消耗少,因此brpc也支持了使用rdma进行通信。使用的方法很简单,client端只需要设置ChannelOptions.use_rdma = true,server端只需要设置ServerOptions.use_rdma = true整体流程接下来首先以polling + 共享
2022-04-25 17:12:25
4249
5
原创 brpc源码学习(九)- 内存池ObjectPool
brpc为了优化在高并发场景下malloc和free的性能,引入了ObjectPool和ResourcePool,这两个类基本一样,只不过返回的一个是T*,一个是ID,所以接下来以ObjectPool为例分析一下ObjectPool使用非常简单,假如有个自定义的无参数构造的类TestClass,那么创建一个TestClass实例的方法为TestClass* a = get_object<TestClass>(),归还则只需要return_object(a)先介绍下ObjectPool
2021-09-10 11:54:58
1564
1
原创 brpc源码学习(八)- client端请求server整体流程
还是以上篇的demo为例看下brpc client端请求server是怎样的流程,为了方便,这里再贴下demo的代码,首先是proto的定义然后就是client端请求逻辑可以看到使用还是很方便的,channel init,填充request,调用service,然后就可以访问server端返回的response了。然后放一张官网的图,对整体流程有个大概印象channel继承自google::protobuf::RpcChannel,channel就相当于client,代表了和se
2021-03-24 14:30:17
3472
13
原创 brpc源码学习(七)- 无锁mpsc队列ExecutionQueue
ExecutionQueue是一个无锁的mpsc队列,主要逻辑其实就是brpc的client端发送数据时多线程向同一个fd写入数据,后来单独抽出来成为ExecutionQueue,官方文档中描述基本功能如下:异步有序执行: 任务在另外一个单独的线程中执行, 并且执行顺序严格和提交顺序一致,任务提交是wait-free的 Multi Producer: 多个线程可以同时向一个ExecutionQueue提交任务 支持cancel一个已经提交的任务 支持stop 支持高优任务插队,且执行顺序也会严格
2021-01-25 13:51:40
2890
1
原创 hdu 3336 count the string
解释题意:求给定字符串含前缀的数量abab前缀为aababaabababab中共有六个子串是前缀a a ab ab aba abab所以答案为6利用kmp中的匹配原理可以完美的解决此题a---------d----- -----a---------d i j如上所示,假设两串字符完全相等,ne
2021-01-05 18:56:55
547
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅