博文

Programming Massively Parallel Processors部分章节重点摘录

图片
Chap2 Heterogeneous data parallel computing 1、CUDA 代码的结构:The structure of a CUDA C program reflects the coexistence of a host (CPU) and one or more devices (GPUs) in the computer. Each CUDA C source file can have a mixture of host code and device code. By default, any traditional C program is a CUDA program that contains only host code . One can add device code into any source file. 2、CUDA runtime 提供的内存分配和回收接口 cudaMalloc:内存申请函数,用于在设备上开辟一段空间(device global memory)。该函数与cudaMallocManaged 的区别在于后者分配的空间会使用 unified memory 进行自动调度。需要注意该函数的输入的指针类型是 二级指针(void**) ,这样该接口就不会受限于特定数据类型类型的指针 cudaFree:使用 cudaMalloc 开辟完空间后需要使用函数对空间进行释放 float* A_d int size=n * sizeof(float); cudaMalloc((void**)&A_d, size); // A_d为指向device global memory的地址 ... cudaFree(A_d); // 释放分配给A_d的device global memory并放回至available pool cudaMemcpy:用于在主机和设备之间同步数据。第一个入参是目的地址,第二个入参为源地址 3、CUDA Kernel 的运行结构 SPMD 分布式设计模式:single-program multiple-date,指的是 多个计算节点执行相同的程序,但是每个节点处理的数据不同 。SPMD 模型通常用于并行计算,可以将大规模的数据集分成多个小块,由不同的计算节点进行并行处理 blockDi...

理性从来都不是真空的

图片
英国神学家兼宣教士 Lesslie Newbigin 在其所著 The Gospel in a Pluralist Society 这本论述信仰与多元文化之间关系的著作中提到,现代文化往往把“事实“(facts)和“信仰”(beliefs)塑造成两股对立的力量,认为前者来源于人类的理性(reason),后者则是一种想象(imagination)。但理性的运作(exercise of reason)从来都不是在真空中发生,它会受到社会、语言等传统因素的影响,即对理性的定义随着历史的前进本身一直在不断发展(比如启蒙运动前许多人认为信仰上帝是再自然不过的事,但是对现代人来说这只是一种私人的价值取取向)。相比之下,信仰同样产生于特定的历史传统或事件中,以基督教为例,如果把福音看成一种“推论”(reasoning),和亚里士多德哲学源于希腊城邦一样,它也产生于特定时间下特定(与耶稣有关的)的历史事件,福音塑造的想要寻求真理的特定群体和其他群体一样都共享着理性每种形态(every form of rationality),他们的信仰是在实践理性而非推翻了理性。 The Gospel in a Pluralist Society by Lesslie Newbigin, Eerdmans, 1989 把理性视作比信仰更合理或有力的观点其实来源于现代文化自身这种“合理性结构”(plausibility structure)。“合理性结构”这个概念是由美国社会学家 Peter Berger 所提出,指一些被广泛认可、欣然接受、看似合理的思考范式,比如人们常说的美国梦就是一个典型的例子——只要你够努力够勇敢,终有一天可以成为高富帅迎娶白富美。其实美国梦已经是一个比较过时的概念了,现今更多的新思潮正在成为新的标准,这并不意味着它们就能审判一切,只不过现代化(modernization)这种合理性结构造成了这种错觉。正是因为理性的定义与传统或当代文化中那些想当然的观念如此密不可分,Newbigin 才认为理性从来都不是在真空中运作的: There is no disembodied reason which can act as impartial umpire between the rival claims... Reason does not operate except ...

Deepseek DualPipe 分析

图片
一、DualPipe 特点 1、计算和通信 overlap(下图为由 forward chunk 和 backward chunk 组成的 chunk 对的计算和通信流程) 每个 chunk 均会经历四个过程:attention、all-to-all dispatch、MLP 以及 all-to-all combine。橙色表示 forward,绿色表示 input 的 backward,蓝色表示 weight 的 backward,紫色表示 PP 通信,红色表示 barrier 从下面第一张图可以看出, PP 和 alltoall 的通信过程被隐藏在 MLP 和 attention 的计算过程中 从下面第二张图可以看出,DualPipe 使用了 bidirectional pipeline scheduling ,即同时向流水线的首位两端传入 micro-batch 从而充分利用硬件资源  不同 PP 策略对应的 bubbles 数量和 memory usage 的对比 2、 all-to -all communication 优化 定制化 kernels :设计过程结合了 MoE gating algorithm 和集群的 network topology IB 和 NVLink 的 overlapping :每个 token 最多只会被分配到 4 个不同节点 上来减少 IB 流量,同时在分配 token 时让 IB 和 NVLink 的带宽充分 overlap,从而在不引入 NVLink 通信 overhead 的情况下使得某个节点上的 token 有能力选择 3.2 个 experts(即最多支持 4x3.2=13 experts,DS-v3 限制在 8 experts) SM 动态分配 :将 20 个 SMs 动态分配到 10 个 communication channels 上。具体来说 Dispatch 过程:IB sending、IB-to-NVLink forwarding、NVLink receiving 三个过程分别使用不同的 warps Combine 过程:NVLink sending、 NVLink-to-IB forwarding&accumulation、IB receiving&accumulati...