目录
1.FlashMLA
FlashMLA是专为英伟达Hopper架构GPU打造的高效推理引擎,全面支持BF16精度的动态长序列处理。其核心在于创新的分页KV缓存技术,块大小设定为64。在处理长序列时,传统的缓存机制容易出现缓存命中率低、内存访问效率低下等问题。而FlashMLA的分页KV缓存技术将键值对(KV)数据按照64大小的块进行分页存储和管理。当模型进行推理时,能够快速定位和访问所需的KV数据块,大大减少了内存访问的次数和延迟。同时,针对BF16精度的优化,使得在保证一定计算精度的前提下,能够充分利用GPU的硬件加速能力,提升计算效率。
1.1 FlashMLA原理
在FlashMLA的内存访问优化中,涉及到一些基础的内存管理和数据定位公式。假设内存地址空间为M,分页大小为P=64(这里P对应块大小),对于一个给定的逻辑地址A,其对应的物理页号n和页内偏移量o可以通过以下公式计算:
通过这种分页机制,FlashMLA能够高效地在内存中定位和读取数据块,实现快速的数据访问,为模型推理提供支持。其计算过程可以表示为:
在实际性能测试中,FlashMLA在H800 GPU上展现出了卓越的性能。它能够达成3000GB/秒的内存带宽极限,计算峰值高达580万亿次浮点运算 / 秒。这一性能表现使得在处理大规模的AI推理任务时,如文本生成、图像识别等应用中,能够快速地完成计算,输出结果,极大地提高了推理的效率和实时性。
1.2 FlashMLA性能优势
1.3 FlashMLA的下载地址
GitHub - deepseek-ai/FlashMLA: FlashMLA: Efficient MLA decoding kernels
2.DeepEP弹性并行计算框架
DeepEP是一个专为混合专家(MoE)模型设计的通信库,旨在优化GPU间的计算分配,降低延迟。在MoE模型中,不同的 “专家”(子网络)负责处理不同类型或部分的数据。然而,在分布式训练和推理过程中,由于各专家所处理的数据量可能差异巨大,导致GPU之间的负载不均衡,通信开销增加。DeepEP通过设计高吞吐量和低延迟的通信内核来解决这些问题。它采用双内核架构,允许在高吞吐量和低延迟之间灵活切换,以适应不同的应用场景。在数据传输方面,对所有对所有(all-to-all)的GPU通信进行优化,使得数据能够在多个GPU之间高效地分发和汇总,确保每个GPU都能及时获取到所需的数据进行计算,从而提升整体的训练和推理效率。
2.1 DeepEP原理
在DeepEP的通信优化中,涉及到数据传输量和传输时间的相关计算。假设在一个有N个GPU 的集群中,每个GPU需要发送和接收的数据量为D,数据传输速率为R(单位时间内传输的数据量)。在传统的通信模式下:
2.2 DeepEP性能优势
在实际应用中,DeepEP在处理复杂的推理请求时,能够在毫秒级别内完成数据传输和计算,极大地降低了延迟。例如,在一个包含多个MoE层的大型模型推理任务中,使用DeepEP能够显著减少推理时间,提高模型的响应速度。与未使用DeepEP的情况相比,推理效率提升了数倍,使得 AI 模型在实际应用中,如实时问答系统、智能客服等场景中,能够更快地响应用户请求,提供更好的用户体验。同时,在训练过程中,DeepEP通过优化计算分配,使得训练时间大幅缩短,提高了模型的训练效率,降低了训练成本。
2.3 DeepEP的下载地址
https://github.com/deepseek-ai/DeepEP
3.DeepGEMM弹性并行计算框架
DeepGEMM专注于高效的FP8矩阵乘法,支持低精度计算。其设计灵感来源于DeepSeek-V3 项目,主要目标是在NVIDIA Hopper架构的张量核心上实现高效的矩阵运算。传统的矩阵乘法在处理大规模矩阵时,计算量巨大,且高精度计算会占用大量的内存和计算资源。DeepGEMM采用轻量级的即时编译(JIT)模块,在运行时动态编译所有内核,这种方式简化了安装过程,提升了灵活性,能够根据不同的硬件配置和矩阵形状进行针对性的优化。同时,针对FP8张量核心在累加过程中的不精确性,DeepGEMM采用CUDA核心的两级累加(promotion)策略,通过在计算过程中引入更高精度的累加,确保最终结果的准确性。
3.1 DeepGEMM原理
3.2 DeepGEMM性能优势
DeepGEMM在性能方面表现卓越,在多种矩阵形状下的计算速度显著提升。例如,在使用 H800 GPU和CUDA 12.8的情况下,对于64x2112x7168的矩阵,DeepGEMM实现了206 TFLOPS 的计算能力,内存带宽为1688 GB/s,速度提升达2.7倍;在64x24576x1536的配置下,性能达到 289 TFLOPS,内存带宽为2455GB/s,速度提升为1.7倍。这些数据表明,DeepGEMM 能够有效利用硬件资源,在低精度计算的情况下,依然能够提供高效的计算能力,大幅提升了矩阵运算的速度和资源利用率,为深度学习模型中的大量矩阵运算提供了有力支持。
3.3 DeepGEMM的下载地址
https://github.com/deepseek-ai/DeepGEMM
4.优化并行策略
优化并行策略包含DualPipe、EPLB和profile-data。
DualPipe: 双向管道并行方法,可能通过重叠计算和通信减少训练时间。
EPLB: 专家并行负载平衡器,确保 MoE 模型中工作负载的均匀分布。
profile-data: 性能分析工具,用于识别训练过程中的瓶颈,优化系统性能。
4.1 DualPipe原理
DualPipe是一种用于V3和R1训练的双向流水线并行算法,其核心在于实现了计算与通信过程的完全重叠。在传统的模型训练中,流水线并行技术将模型按层次分割,每个设备负责处理部分层,然后将结果传递给下一个设备。然而,这种方式存在计算资源空闲等待和数据传输延迟的问题。DualPipe通过创新的双向处理方式解决了这些难题。在DualPipe的设计中,数据并非单向流动,而是存在两组数据从两端相向流动。在模型训练时,前向计算过程(模型对输入数据进行处理生成预测结果)与后向计算过程(模型根据预测结果与真实标签的误差更新权重)的计算 - 通信阶段能够同步进行。通过将模型计算块进一步细分为如注意力、all-to-all 分派、MLP等更小的模块,提高了调度的灵活性。这种双向设计使得所有设备都能保持较高的活跃度,有效减少了流水线气泡(即设备空闲等待的时间)。
4.1.1 原理
4.1.2 性能
以一个具有8个流水线并行级别和20个微批次的示例来说,DualPipe精心安排两个方向的数据处理流程,让计算和通信得以同时开展。与传统的1F1B和 ZB1P算法相比,DualPipe在减少设备空闲时间方面展现出显著优势,尤其是在设备数量较多的场景下,效果更为突出。实验数据表明,使用 DualPipe 能够将训练效率提升200% 左右,同时仅增加了1倍的激活内存峰值,在提升训练效率的同时,对内存资源的增加相对可控,使得在有限的硬件资源下能够更高效地训练大规模模型。
4.1.3下载地址
4.2 EPLB原理
EPLB(专家并行负载均衡器)是为V3和R1打造的专家并行负载平衡器,专门针对混合专家(MoE)模型的分布式训练和推理设计。在传统的 MoE 模型中,专家负载的不平衡会导致计算资源的浪费,尤其是在专家并行(EP)的场景下,这种不平衡会进一步加剧通信开销。EPLB实现了 DeepSeek-V3 论文中所描述的 “冗余专家” 策略。具体而言,它会复制那些工作量较大的专家,然后通过精心设计的算法,将这些复制后的专家合理地分配到各个GPU上,以此确保负载均衡。EPLB 提供了两种负载均衡策略:层次化负载均衡,当服务器节点数量能够被专家组数量整除时适用。该策略首先将专家组均匀地分配到各个节点,保证不同节点之间的负载平衡;接着在每个节点内部进行专家复制;最后将复制后的专家打包分配给各个GPU,实现每个GPU的负载均衡。这种策略适用于较小专家并行规模的预填充阶段(即模型处理初始输入的阶段)。全局负载均衡,在其他情况下使用。此策略不考虑专家组的分布情况,直接在全局范围内复制专家,并将其分配到各个 GPU 上。这种策略适用于较大专家并行规模的解码阶段(即模型生成输出的阶段)。得益于 DeepSeek-V3所采用的 “组限制专家路由” 技术,EPLB还能够尽可能地将同一组的专家放置在同一物理服务器节点上,从而有效减少跨节点的数据传输,提高通信效率。
4.2.1 原理
4.2.2 性能
在实际应用中,EPLB能够有效提高GPU的利用率。通过采用EPLB,在大规模专家并行的应用中,能够将GPU的利用率提升至80%以上,最大限度地减少训练时间。例如,在一个具有大量专家的MoE模型训练任务中,使用EPLB后,训练时间相比未使用时缩短了30% - 50%,大大提高了模型的训练效率,降低了训练成本,同时也提高了模型在推理阶段的响应速度和性能稳定性。
4.2.3下载地址
https://github.com/deepseek-ai/eplb
4.3 profile-data原理
profile-data 是用于分析 V3/R1 中计算与通信重叠性能的数据集。这些数据通过PyTorch Profiler 工具捕获,它能够记录模型训练和推理过程中的各种操作信息,包括计算操作的执行时间、通信操作的传输时间、不同阶段的资源占用情况等。通过对这些详细数据的分析,开发者可以深入了解计算与通信如何实现高效重叠,以及底层的具体实现细节。例如,在训练阶段,通过分析数据可以了解到在 DualPipe 中单个前向和后向处理块对的重叠策略是否有效,哪些部分还存在优化空间;在推理阶段,可以分析预填充阶段和解码阶段中计算与通信的重叠情况,以及如何调整参数和策略来进一步提高效率。
4.3.1 原理
4.3.2 性能
开发者可以在 Chrome 或 Edge 浏览器的 tracing 页面直接对 profile - data 进行可视化操作,直观地查看各项操作的执行时间以及资源占用情况。
4.3.3下载地址
https://github.com/deepseek-ai/profile-data
5.3FS和Smallpond计算框架
5.1 3FS原理
3FS(Fast File System for Flash-based Storage)是一种专门为基于闪存的存储设备设计的高性能文件系统。其核心设计目标是充分利用闪存设备的特性,如随机读写速度快、无机械寻道时间等,来提高文件系统的性能和效率。
传统的文件系统在设计时主要考虑的是机械硬盘的特性,如旋转延迟和寻道时间。因此,它们在处理随机读写操作时效率较低。而闪存设备的物理特性与机械硬盘有很大不同,3FS针对这些特性进行了优化。
首先,3FS采用了基于日志结构的设计。在传统文件系统中,文件数据和元数据通常是分散存储在磁盘上的,这使得在进行读写操作时需要频繁地进行磁盘寻道。而在日志结构的文件系统中,所有的写入操作都被顺序地追加到日志中,然后再批量地将数据和元数据合并到磁盘上的合适位置。这种设计方式减少了随机写入的开销,提高了写入性能。
其次,3FS引入了闪存转换层(FTL)的优化。FTL 负责将逻辑块地址映射到闪存芯片的物理块地址。3FS通过优化 FTL 的映射算法,减少了映射表的大小和查找时间,从而提高了读写操作的效率。此外,3FS还采用了磨损均衡技术,确保闪存芯片的各个物理块被均匀地使用,延长了闪存设备的使用寿命。
5.1.1 原理
5.1.2 性能
在实际应用中,3FS在基于闪存的存储设备上表现出了显著的性能提升。与传统的文件系统相比,3FS的随机写入性能可以提高数倍甚至数十倍。例如,在对小型文件进行频繁写入的场景下,3FS的写入延迟可以降低 50%以上,吞吐量可以提高 2-3倍。在读取性能方面,3FS也能够充分利用闪存设备的高速随机读取特性,提供快速的文件访问。对于大型文件的顺序读取,3FS可以达到接近闪存设备理论带宽的性能。同时,由于采用了磨损均衡技术,3FS能够有效延长闪存设备的使用寿命,减少因闪存芯片局部磨损过度而导致的故障。
5.1.3下载地址
https://github.com/deepseek-ai/3FS
5.2 Smallpond原理
Smallpond 是一种高性能的数据访问解决方案,主要用于解决大规模数据存储和访问中的性能瓶颈问题。其核心原理基于分布式存储和数据缓存技术,通过将数据分散存储在多个节点上,并在本地节点设置缓存,来提高数据访问的速度和效率。
在大规模数据存储系统中,数据通常存储在多个存储节点上。当用户需要访问数据时,传统的方法可能需要从远程节点读取数据,这会引入较大的网络延迟。Smallpond 通过在本地节点设置缓存,将经常访问的数据存储在本地,减少了对远程节点的访问次数。
Smallpond 采用了智能的数据缓存策略。它会根据数据的访问频率、访问时间等因素,动态地调整缓存中的数据。例如,对于访问频率高的数据,会优先保留在缓存中;对于长时间未访问的数据,会及时从缓存中移除,以释放缓存空间。
此外,Smallpond 还支持分布式数据存储和并行数据访问。它将数据分散存储在多个节点上,并通过分布式文件系统进行管理。当需要访问大量数据时,Smallpond 可以并行地从多个节点读取数据,从而提高数据访问的吞吐量。
5.2.1 原理
5.2.2 性能
在实际应用中,Smallpond能够显著提高数据访问的性能。在数据访问延迟方面,通过提高缓存命中率,Smallpond可以将数据访问延迟降低70%以上。例如,在一个大规模数据存储系统中,传统的访问方式可能需要数十毫秒甚至更长时间才能获取数据,而使用Smallpond后,数据访问延迟可以降低到几毫秒以内。
在数据访问吞吐量方面,由于支持并行数据访问,Smallpond 可以将吞吐量提高数倍甚至数十倍。在处理大规模数据分析任务时,如机器学习模型训练、数据挖掘等,Smallpond能够快速地提供所需的数据,大大缩短了任务的执行时间。同时,Smallpond 的智能缓存策略还能够有效地减少对存储系统的压力,提高整个系统的稳定性和可靠性。
5.2.3下载地址
GitHub - deepseek-ai/smallpond: A lightweight data processing framework built on DuckDB and 3FS.