- 博客(260)
- 收藏
- 关注
原创 DeepSeek DeepEP学习(三)normal dispatch
上节介绍了DeepSeek DeepEP的normal kernel执行过程中会分成两部分,第一步通过notify_dispatch计算meta信息,然后本节介绍数据dispatch的过程。
2025-03-09 14:27:56
1802
16
原创 DeepSeek DeepEP学习(二)normal notify dispatch
dispatch的过程分为两步,第一步通过notify dispatch计算一些meta信息,比如每台机器将会收到多少token,然后再执行实际的dispatch,本节主要介绍notify dispatch。
2025-03-06 14:06:03
1227
13
原创 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
2169
9
原创 RDMA驱动学习(三)- cq的创建
用户通过ibv_create_cq接口创建完成队列,函数原型和常见用法如下,本节以该用法为例看下cq的创建过程。
2024-12-02 19:13:43
1391
原创 RDMA驱动学习(二)- command queue
为了实现用户对网卡硬件的配置,查询,或者执行比如create_cq等命令,mellanox网卡提供了command queue + mailbox的机制,本节将以create_cq为例看下这个过程。
2024-10-31 14:03:17
1555
1
原创 NVIDIA NCCL 源码学习(十四)- NVLink SHARP
上节我们介绍了IB SHARP的工作原理,进一步的,英伟达在Hopper架构机器中引入了第三代NVSwitch,就像机间IB SHARP一样,机内可以通过NVSwitch执行NVLink SHARP,简称nvls,这节我们会介绍下NVLink SHARP如何工作的。
2024-04-18 17:43:31
7538
41
原创 NVIDIA NCCL 源码学习(十三)- IB SHARP
因此基于这一点,mellanox提出了SHARP,将计算offload到了IB switch,每个节点只需要发送一次数据,这块数据会被交换机完成规约,然后每个节点再接收一次就得到了完整结果。
2024-03-20 18:25:23
5379
14
原创 NVIDIA NCCL 源码学习(十二)- double binary tree
上节我们以ring allreduce为例看到了集合通信的过程,但是随着训练任务中使用的gpu个数的扩展,ring allreduce的延迟会线性增长,为了解决这个问题,NCCL引入了tree算法,即double binary tree。
2023-12-22 16:56:34
7550
34
原创 NVIDIA NCCL 源码学习(十一)- ring allreduce
之前的章节里我们看到了nccl send/recv通信的过程,本节我们以ring allreduce为例看下集合通信的过程。整体执行流程和send/recv很像,所以对于相似的流程只做简单介绍,主要介绍ring allreduce自己特有内容。
2023-10-20 19:21:55
11012
61
原创 flash attention 2论文学习
flash attention作者Tri Dao发布了flash attention 2,性能为flash attention的2倍。
2023-07-25 22:16:57
1320
原创 flash attention论文及源码学习
flash attention考虑到IO的影响,重新设计了attention算法流程,降低对HBM的占用和访问,在高速缓存上使用block粒度的softmax tiling的计算方法加速attention的计算。
2023-07-01 11:30:05
7146
22
原创 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
11612
98
原创 NVIDIA NCCL 源码学习(九)- 单机内ncclSend和ncclRecv的过程
上节介绍了通信链路的建立过程,本节介绍下单机内部ncclSend和ncclRecv的运行过程。单机内的通信都是通过kernel来完成的,所以整个通信的过程可以分为两步,第一步是准备kernel相关的参数,第二步是实际执行kernel的过程。
2022-12-27 15:21:56
16260
61
原创 NVIDIA NCCL 源码学习(八)- 数据通信链路transport的建立
上节以ringGraph为例介绍了机器间channel的连接过程,现在环里每个rank都知道了从哪个rank接收数据以及将数据发送给哪个rank,本节具体介绍下P2P和rdma NET场景下数据通信链路的建立过程。
2022-12-12 11:00:32
11210
31
原创 NVIDIA NCCL 源码学习(七)- 机器间channel连接
上节中完成了单机内部的channel搜索,仍然以ringGraph为例的话,相当于在单台机器内部搜索出来了一系列的环,接下来需要将机器之间的环连接起来。
2022-12-07 18:37:17
7826
6
原创 NVIDIA NCCL 源码学习(六)- channel搜索
nccl中channel的概念表示一个通信路径,为了更好的利用带宽和网卡,以及同一块数据可以通过多个channel并发通信,另外后续可以看到一个channel对应了一个GPU SM,所以基于这些原因,nccl会使用多channel,搜索的过程就是搜索出来一组channel。
2022-12-01 17:47:02
9076
31
原创 NVIDIA NCCL 源码学习(五)- 路径计算
为了方便之后的搜索channel,接下来NCCL会计算GPU和NIC节点到其他任意节点之间的最优路径
2022-11-15 20:36:57
7378
23
原创 NVIDIA NCCL 源码学习(四)- 建图过程
上次分析到nccl对机器PCI系统进行拓扑分析的过程,产出的结果为xml格式,接下来,nccl会根据这个xml进图的建立过程以便之后进行路径搜索。
2022-10-26 17:10:28
7932
7
原创 NVIDIA NCCL 源码学习(三)- 机器内拓扑分析
上节介绍到所有节点执行了bootstrap网络连接的建立,接下来介绍下拓扑分析。由于gpu机器架构是多种多样的,一台机器上可能有多个网卡,多个gpu卡,卡间连接也各不相同,因此需要对机器内设备连接拓扑进行分析以达到各种拓扑结构下性能都尽可能的好。
2022-09-28 16:03:42
9475
17
原创 NVIDIA NCCL 源码学习(一)- 初始化及ncclUniqueId的产生
NCCL是英伟达开源的GPU通信库,支持集合通信和点对点通信
2022-09-05 21:23:46
14071
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
3393
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
1324
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
2925
13
原创 brpc源码学习(七)- 无锁mpsc队列ExecutionQueue
ExecutionQueue是一个无锁的mpsc队列,主要逻辑其实就是brpc的client端发送数据时多线程向同一个fd写入数据,后来单独抽出来成为ExecutionQueue,官方文档中描述基本功能如下:异步有序执行: 任务在另外一个单独的线程中执行, 并且执行顺序严格和提交顺序一致,任务提交是wait-free的 Multi Producer: 多个线程可以同时向一个ExecutionQueue提交任务 支持cancel一个已经提交的任务 支持stop 支持高优任务插队,且执行顺序也会严格
2021-01-25 13:51:40
2582
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
496
原创 brpc源码学习(六)- brpc server 端整体流程
brpc的使用比较容易上手,以官方demo为例,因为brpc的数据序列化依赖protobuf,所以首先需要定义个proto然后继承EchoService并实现Echo方法然后是整体流程启动还是比较简单的,定义server,AddService,然后Start即可首先放一张官网的图,陷入细节前先有个大概印象然后看下AddService然后是AddServiceInternal首先判断注册的service中是否有method,如果没有则直接返回;然后调用Ini
2021-01-05 17:04:11
4273
4
原创 brpc源码学习(五)-IOBuf
目录BlockBlockRefIOBuf主要apitls优化IOPortalprotobuf接口首先放上官方介绍:brpc使用butil::IOBuf作为一些协议中的附件或http body的数据结构,它是一种非连续零拷贝缓冲,在其他项目中得到了验证并有出色的性能。IOBuf的接口和std::string类似,但不相同。以及官方ppt的这张图从上到下结构分别为IOBuf,BlockRef和Block。Block首先看下Block的结构,bl..
2020-12-22 16:10:26
3856
原创 brpc源码学习(四)- bthread调度执行总体流程
bthread调度整体流程如下图所示全局单例task_control有多个task_group,每个task_group内有两个执行队列_rq和_remote_rq,执行队列中存放着待执行的bthread。TaskGroup对应一个pthread,初始化函数如下,创建rq和remote_rq,创建main_stack和main_tid;main_tid代表主流程,后面会具体讲main_stack和main_tid的作用TaskControl是一个单例,下面是初始化的过程,主要..
2020-08-06 13:45:39
2212
原创 brpc源码学习(三)- WorkStealingQueue
每个bthread_worker都有自己的work_steal_queue,bthread_worker会从自己queue里pop数据进行处理,如果自己的queue为空,则尝试去其他bthread_worker的queue中steal,所以当前queue不会发生pop和push并发的情况;可能发生并发的情况为,steal和steal,steal和push,steal和pop;为了避免锁的开销,brpc设计了lock-free的WorkStealingQueue。work steal queue的p.
2020-06-03 19:50:17
882
原创 brpc源码学习(二)-bthread的创建与切换
brpc引入m:n的线程模型,固定的内核线程调度运行大量的bthread以避免内核线程上下文切换带来的开销。bthread类似协程,即用户态线程,bthread的切换不会陷入内核,不会进行一系列内存同步等耗时操作,因此bthread的切换在100-200ns,相比内核线程的微秒级别有着数量级的提升。为了实现协程需要协程栈,协程的初始化,以及协程间的切换,下面来逐一分析这几个过程。首先看下协程栈的结构,如下,context指向协程栈顶,stacktype表示栈的类型(大小),storage为栈空间
2020-05-29 15:36:57
4060
4
原创 brpc源码学习(一)-butex
由于brpc中引入了bthread,如果在bthread中使用了mutex,那么将会挂起当前pthread,导致该bthread_worker无法执行其他bthread,因此类似pthread和futex的关系,brpc引入butex来实现bthread粒度的挂起和唤醒。首先看下butex中使用到的FastPthreadMutex,FastPthreadMutex是基于futex实现的pthread粒度的锁,当竞争不激烈时,lock和unlock操作都是通过修改一个用户态的atomic来实现,只有当竞争激
2020-05-19 17:26:54
3855
4
原创 cpu cache一致性及内存屏障
cpu和内存之间的速度存在着较大的差距,如果cpu直接和内存打交道的话,会因为等待内存处理而造成cpu资源的浪费,因此为了提高性能,现在cpu和内存之间有着多级缓存,常见的为三级缓存,L1,L2,L3,其中L1和L2为每个cpu独有,L3为所有cpu共享。cache line为cache的最小单位,也是cache和内存数据交换的最小单位,如64字节。当cpu要读取某地址的数据时,首先会去cac...
2019-11-18 17:59:12
1216
2
原创 poj 3460 Booksort ida*
BooksortTime Limit:15000MS Memory Limit:65536K Total Submissions:2722 Accepted:1230 DescriptionThe Leiden University Library has millions of books. When a student wants to ...
2019-05-24 20:38:18
383
原创 codeforces 1100E 二分 + 拓扑排序
E. Andrew and Taxitime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputAndrew prefers taxi to other means of transport, but recently ...
2019-05-22 22:29:49
256
原创 codeforces 1095F Make It Connected 最小生成树
F. Make It Connectedtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given an undirected graph consisting ofnnvertices....
2019-04-29 16:46:33
440
原创 codeforces 1153D Serval and Rooted Tree 树形dp
D. Serval and Rooted Treetime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputNow Serval is a junior high school student in Japari Mi...
2019-04-28 14:21:07
279
原创 hdu 1540 Tunnel Warfare 线段树
Tunnel WarfareTime Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15090Accepted Submission(s): 5957Problem DescriptionDuring the War of...
2019-04-23 16:27:13
205
原创 poj 2449 Remmarguts' Date k短路 A*
Remmarguts' DateTime Limit:4000MS Memory Limit:65536K Total Submissions:40172 Accepted:11024 Description"Good man never makes girls wait or breaks an appointment!" said the...
2019-04-20 16:11:01
1424
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人