当前位置: 首页 > news >正文

DeepSeek开源周首日:发布大模型加速核心技术可变长度高效FlashMLA 加持H800算力解码性能狂飙升至3000GB/s

FlashMLA的核心技术特性包括对BF16精度的全面支持,以及采用块大小为64的页式键值缓存(Paged KV Cache)系统,实现更精确的内存管理。在性能表现方面,基于CUDA12.6平台,FlashMLA在H800SXM5GPU上创下了显著成绩:在内存受限场景下达到3000GB/s的处理速度,在计算受限场景下则实现580TFLOPS的算力水平。

1. 核心功能与特性

  • 性能提升
    FlashMLA在H800 SXM5 GPU(CUDA 12.6)上表现亮眼:

    • 内存受限场景下带宽达3000 GB/s
    • 计算受限场景下算力峰值达580 TFLOPS(BF16精度)
  • 关键技术优化

    • 变长序列处理:针对自然语言处理中的动态序列长度优化,提升长文本推理效率。
    • 分页KV缓存:块大小为64的分页机制,减少显存碎片化,提升内存利用率。
    • BF16支持:通过低精度计算降低内存占用,同时保持模型性能。
  • MLA架构创新
    相比传统注意力机制,MLA通过低秩压缩技术将每次查询的KV缓存量减少93.3%,显著降低推理时的显存需求,尤其适合长上下文场景。


2. 技术背景与意义

  • 解决行业痛点
    Transformer模型在长序列推理时面临KV缓存膨胀问题,导致显存占用高、硬件成本攀升。FlashMLA通过MLA架构和并行解码设计,将推理成本降低约80-90%,同时支持更高吞吐量

  • 开源生态价值
    FlashMLA开源代码库(GitHub链接)整合了FlashAttention-2/3和CUTLASS的技术实现,为开发者提供可复现的优化方案,加速AGI技术迭代。


3. 应用场景与部署

  • 适用场景

    • 大语言模型(LLM)推理加速,如对话AI、实时翻译、长文本生成等。
    • 需要低延迟、高吞吐的工业级NLP任务。
  • 部署要求

    • 硬件:Hopper架构GPU(如H800/H100)
    • 软件:CUDA 12.3+、PyTorch 2.0+

4. 对行业的影响

  • 成本革命
    DeepSeek通过MLA技术将模型训练和推理成本压缩至行业标杆水平。例如,其V3模型的训练成本仅600万美元(未含研发投入),而MLA的推理优化进一步降低商业化门槛。

  • 算力效率提升
    结合MoE(混合专家模型)架构和多Token预测技术,DeepSeek在单位算力下实现更高性能,推动行业从“堆算力”向“优化算法”转型。

  • 开源竞争格局
    此次开源被视为对Meta Llama、Mistral等项目的直接挑战,可能加速闭源与开源模型的性能差距缩小。


FlashMLA的发布标志着DeepSeek在高效计算领域的技术领先地位,其开源策略或将重塑大模型开发范式,推动更多低成本、高性能AI应用的涌现。

5.快速开始

安装

可以使用以下命令进行安装:

python setup.py install
基准测试

运行以下命令进行基准测试:

python tests/test_flash_mla.py
使用示例

在Python中可以这样使用:

from flash_mla import get_mla_metadata, flash_mla_with_kvcachetile_scheduler_metadata, num_splits = get_mla_metadata(cache_seqlens, s_q * h_q // h_kv, h_kv)for i in range(num_layers):...o_i, lse_i = flash_mla_with_kvcache(q_i, kvcache_i, block_table, cache_seqlens, dv,tile_scheduler_metadata, num_splits, causal=True,)...

6.核心代码的详细解释

以下是对 FlashMLA/flash_mla/flash_mla_interface.py 文件中:

get_mla_metadata 函数

def get_mla_metadata(cache_seqlens: torch.Tensor,num_heads_per_head_k: int,num_heads_k: int,
) -> Tuple[torch.Tensor, torch.Tensor]:"""Arguments:cache_seqlens: (batch_size), dtype torch.int32.num_heads_per_head_k: Equals to seq_len_q * num_heads_q // num_heads_k.num_heads_k: num_heads_k.Return:tile_scheduler_metadata: (num_sm_parts, TileSchedulerMetaDataSize), dtype torch.int32.num_splits: (batch_size + 1), dtype torch.int32."""return flash_mla_cuda.get_mla_metadata(cache_seqlens, num_heads_per_head_k, num_heads_k)
  • 功能:该函数用于获取MLA(Multi-Head Attention)的元数据。
  • 参数
    • cache_seqlens:一个形状为 (batch_size)torch.Tensor,数据类型为 torch.int32,表示缓存的序列长度。
    • num_heads_per_head_k:整数类型,其值等于 seq_len_q * num_heads_q // num_heads_k
    • num_heads_k:整数类型,表示 num_heads_k 的值。
  • 返回值
    • tile_scheduler_metadata:形状为 (num_sm_parts, TileSchedulerMetaDataSize)torch.Tensor,数据类型为 torch.int32
    • num_splits:形状为 (batch_size + 1)torch.Tensor,数据类型为 torch.int32
  • 实现细节:该函数直接调用 flash_mla_cuda 模块中的 get_mla_metadata 函数,并将输入参数传递给它,然后返回该函数的结果。

flash_mla_with_kvcache 函数

def flash_mla_with_kvcache(q: torch.Tensor,k_cache: torch.Tensor,block_table: torch.Tensor,cache_seqlens: torch.Tensor,head_dim_v: int,tile_scheduler_metadata: torch.Tensor,num_splits: torch.Tensor,softmax_scale: Optional[float] = None,causal: bool = False,
) -> Tuple[torch.Tensor, torch.Tensor]:"""Arguments:q: (batch_size, seq_len_q, num_heads_q, head_dim).k_cache: (num_blocks, page_block_size, num_heads_k, head_dim).block_table: (batch_size, max_num_blocks_per_seq), torch.int32.cache_seqlens: (batch_size), torch.int32.head_dim_v: Head_dim of v.tile_scheduler_metadata: (num_sm_parts, TileSchedulerMetaDataSize), torch.int32, return by get_mla_metadata.num_splits: (batch_size + 1), torch.int32, return by get_mla_metadata.softmax_scale: float. The scaling of QK^T before applying softmax. Default to 1 / sqrt(head_dim).causal: bool. Whether to apply causal attention mask.Return:out: (batch_size, seq_len_q, num_heads_q, head_dim_v).softmax_lse: (batch_size, num_heads_q, seq_len_q), torch.float32."""if softmax_scale is None:softmax_scale = q.shape[-1] ** (-0.5)out, softmax_lse = flash_mla_cuda.fwd_kvcache_mla(q,k_cache,None,head_dim_v,cache_seqlens,block_table,softmax_scale,causal,tile_scheduler_metadata,num_splits,)return out, softmax_lse
  • 功能:该函数用于执行带有键值缓存(KVCache)的MLA操作。
  • 参数
    • q:形状为 (batch_size, seq_len_q, num_heads_q, head_dim)torch.Tensor,表示查询张量。
    • k_cache:形状为 (num_blocks, page_block_size, num_heads_k, head_dim)torch.Tensor,表示键缓存张量。
    • block_table:形状为 (batch_size, max_num_blocks_per_seq)torch.Tensor,数据类型为 torch.int32,表示块表。
    • cache_seqlens:形状为 (batch_size)torch.Tensor,数据类型为 torch.int32,表示缓存的序列长度。
    • head_dim_v:整数类型,表示 v 的头维度。
    • tile_scheduler_metadata:形状为 (num_sm_parts, TileSchedulerMetaDataSize)torch.Tensor,数据类型为 torch.int32,由 get_mla_metadata 函数返回。
    • num_splits:形状为 (batch_size + 1)torch.Tensor,数据类型为 torch.int32,由 get_mla_metadata 函数返回。
    • softmax_scale:可选的浮点数,表示在应用softmax之前对 QK^T 进行缩放的比例,默认为 1 / sqrt(head_dim)
    • causal:布尔类型,表示是否应用因果注意力掩码,默认为 False
  • 返回值
    • out:形状为 (batch_size, seq_len_q, num_heads_q, head_dim_v)torch.Tensor,表示输出张量。
    • softmax_lse:形状为 (batch_size, num_heads_q, seq_len_q)torch.Tensor,数据类型为 torch.float32,表示softmax的对数和指数(LogSumExp)。
  • 实现细节
    • 如果 softmax_scale 未提供,则将其设置为 q 张量最后一个维度的平方根的倒数。
    • 调用 flash_mla_cuda 模块中的 fwd_kvcache_mla 函数,传递相应的参数,并将返回的结果赋值给 outsoftmax_lse
    • 最后返回 outsoftmax_lse

这些函数主要是作为Python接口,调用底层的CUDA实现(flash_mla_cuda 模块)来完成MLA操作和元数据的获取。

相关文章:

DeepSeek开源周首日:发布大模型加速核心技术可变长度高效FlashMLA 加持H800算力解码性能狂飙升至3000GB/s

FlashMLA的核心技术特性包括对BF16精度的全面支持,以及采用块大小为64的页式键值缓存(Paged KV Cache)系统,实现更精确的内存管理。在性能表现方面,基于CUDA12.6平台,FlashMLA在H800SXM5GPU上创下了显著成绩…...

易语言模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...

DeepSeek 提示词:基础结构

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

文件系统

目录 1.认识磁盘 磁盘的物理结构 CHS定位法 磁盘的逻辑结构 2.认识文件系统 inode 分区和分组 磁盘上的文件系统 3.软硬链接 软链接 软链接的操作 创建软链接 查看软链接 删除软链接 软链接的特点 软链接的使用场景 硬链接 硬链接的操作 创建硬链接 查看硬…...

力扣LeetCode:1472 设计浏览器历史记录

题目: 你有一个只支持单个标签页的 浏览器 ,最开始你浏览的网页是 homepage ,你可以访问其他的网站 url ,也可以在浏览历史中后退 steps 步或前进 steps 步。 请你实现 BrowserHistory 类: BrowserHistory(string h…...

【FL0091】基于SSM和微信小程序的社区二手物品交易小程序

🧑‍💻博主介绍🧑‍💻 全网粉丝10W,CSDN全栈领域优质创作者,博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发…...

【笔记ing】每天50个英语词汇

ex- e-out exclude 排外,排除 expect 期待,期望 单词构成: 前缀(prefix):情感(emotion)方向(orientation) 词根(root)&#xf…...

联想 SR590 服务器 530-8i RAID 控制器更换损坏的硬盘

坏了的硬盘会自动亮黄灯。用一个空的新盘来替换,新盘最好不要有东西。但是有东西可能也没啥,因为我看 RAID 控制器里有格式化的选项 1. 从 IPMI 把服务器关机,电源键进入绿色闪烁状态 2. 断电,推开塑料滑块拉出支架,…...

Java基础关键_012_包装类

目 录 一、基本数据类型对应的包装类 1.概览 2.说明 二、包装类 1.最大值与最小值 2.构造方法 3.常用方法(Integer为例) (1)compare(int x, int y) (2)max(int a, int b) 和 min(int a, int b) &…...

【react】TypeScript在react中的使用

目录 一、环境与项目配置 1. 创建 TypeScript React 项目 2. 关键tsconfig.json配置 3.安装核心类型包 二、组件类型定义 1. 函数组件(React 18) 2.类组件 三、Hooks 的深度类型集成 1. useState 2. useEffect 3. useRef 4. 自定义 Hook 四、事…...

vllm的使用方式,入门教程

vLLM是一个由伯克利大学LMSYS组织开源的大语言模型推理框架,旨在提升实时场景下的大语言模型服务的吞吐与内存使用效率。以下是详细的vLLM使用方式和入门教程: 1. 前期准备 在开始使用vLLM之前,建议先掌握一些基础知识,包括操作…...

IDEA 使用codeGPT+deepseek

一、环境准备 1、IDEA 版本要求 安装之前确保 IDEA 处于 2023.x 及以上的较新版本。 2、Python 环境 安装 Python 3.8 或更高版本 为了确保 DeepSeek 助手能够顺利运行,您需要在操作系统中预先配置 Python 环境。具体来说,您需要安装 Python 3.8 或更高…...

vue3中测试:单元测试、组件测试、端到端测试

1、单元测试:单元测试通常适用于独立的业务逻辑、组件、类、模块或函数,不涉及 UI 渲染、网络请求或其他环境问题。 describe(increment, () > {// 测试用例 }) toBe():用于严格相等比较(),适用于原始类…...

机器学习介绍与数据集

一、机器学习介绍与定义 1.1 机器学习定义 机器学习(Machine Learning)是让计算机从数据中自动学习规律,并依据这些规律对未来数据进行预测的技术。它涵盖聚类、分类、决策树、贝叶斯、神经网络、深度学习(Deep Learning&#xf…...

React 源码揭秘 | 更新队列

前面几篇遇到updateQueue的时候,我们把它先简单的当成了一个队列处理,这篇我们来详细讨论一下这个更新队列。 有关updateQueue中的部分,可以见源码 UpdateQueue实现 Update对象 我们先来看一下UpdateQueue中的内容,Update对象&…...

关于网络端口探测:TCP端口和UDP端口探测区别

网络端口探测是网络安全领域中的一项基础技术,它用于识别目标主机上开放的端口以及运行在这些端口上的服务。这项技术对于网络管理和安全评估至关重要。在网络端口探测中,最常用的两种协议是TCP(传输控制协议)和UDP(用…...

Vue.js 中使用 JSX 自定义语法封装组件

Vue.js 中使用 JSX 自定义语法封装组件 在 Vue.js 开发中,使用模板语法是常见的构建用户界面方式,但对于一些开发者,特别是熟悉 JavaScript 语法的,JSX 提供了一种更灵活、更具表现力的替代方案。通过 JSX,我们可以在…...

设计模式教程:备忘录模式(Memento Pattern)

备忘录模式(Memento Pattern)详解 一、模式概述 备忘录模式(Memento Pattern)是一种行为型设计模式,允许在不暴露对象实现细节的情况下,保存对象的内部状态,并在需要时恢复该状态。备忘录模式…...

使用 C# 以api的形式调用 DeepSeek

一:创建 API 密钥 首先,您需要来自 DeepSeek 的 API 密钥。访问 DeepSeek,创建一个帐户,并生成一个新的 API 密钥。 二:安装所需的 NuGet 包 使用 NuGet 包管理器安装包,或在包管理器控制台中运行以下命…...

CS5366AN:高集成Type-C转HDMI 4K60Hz芯片的国产突破

一、芯片概述 CS5366AN 是集睿致远(ASL)推出的一款高度集成的 Type-C转HDMI 2.0视频转换芯片,专为扩展坞、游戏底座、高清显示设备等场景设计。其核心功能是将USB Type-C接口的DisplayPort信号(DP Alt Mode)转换为HDM…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂&#xff…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

EtherNet/IP转DeviceNet协议网关详解

一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

数据库分批入库

今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM&#xff09…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

dify打造数据可视化图表

一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...