LLM性能优化中的一些概念扫盲

缓存与效果的极限拉扯:从MHA、MQA、GQA到MLA ©PaperWeekly 原创 ·作者 | 苏剑林单位 | 科学空间研究方向 | NLP、神经网络前几天,幻方发布的 DeepSeek-V2[1] 引起了大家的热烈讨论。首先,最让人哗然的是 1 块钱 100 万 token 的价格,普遍比现有的各种竞品 API 便宜了两个数量级,以至于有人调侃“这个价格哪怕它输出乱码,我也会认为这个乱码是一种艺术”;其次,从模型的技术报告看,如此便宜的价格背... 阅读详情

原文:https://zhuanlan.zhihu.com/p/4525257731

一、MHA结构优化(效果有损)

KV Cache的大小取决于模型大小(dim和layers) 和序列长度。为了尽可能的支持更大的模型、或者更长的序列,就需要对kv 进行压缩,下面列举一些方法对MHA的参数量进行压缩,从而对kv Cache进行压缩。

图片

 

MQA(Multi-Query Attention)

多组Q,共享K、V,直接将KV Cache减少到了原来的1/h。

为了模型总参数量的不变,通常会相应地增大FFN/GLU的规模,这也能弥补一部分效果损失。

使用MQA的模型包括 PaLM、 Gemini 等。

示意图见下图右侧:

图片

 

GQA(Grouped-Query Attention)

示意图见 上图 中。

是 MQA 和 MHA 的折中。

使用GQA的有LLaMA 2、Code LLaMA等。

MLA(Multi-head Latent Attention)

DeepSeek-V2 使用了低秩投影压缩 KV Cache 的大小,即 MLA 。

详见 缓存与效果的极限拉扯:从MHA、MQA、GQA到MLA - 科学空间|Scientific Spaces[1]

示意图见下图右侧:

图片

 

SWA(sliding window attention)

包括自己在内,每个位置只能往前看N个输入。实际上是一种sparse attention。

因此,kv cache和attention的计算量增大到一定程度后就不再增长(具体实现依靠Rolling Buffer Cache,实现一个滚动缓存区,将内存控制在一个稳定的数值)

因为有多层,其实能间接的融合 window_size 个输入以前的信息,而不仅仅是 window_size。(类似于多层的CNN网络,高层的卷积模板其实具有较大的感受野)

Mistral 7B就是使用SWA:Uses Sliding Window Attention (SWA) to handle longer sequences at smaller cost(在较少的显存代价上取得更长的序列长度)。Mistral 7B模型具有 4096 的 window_size:

图片

 

线性attention

处理长序列时,具有线性的时间复杂度。

方案:softmax变成sim(q,k),用核函数,q和k变成phi(q)和phi(k),phi(x)=elu(x)+1,然后k和v先算。

备注:线性attention、包括下面的RWKV,并不是通用的做法,只是作为性能优化的一种方法,在这里引申一下。

RWKV:线性attention的一个变种。将历史信息压缩到了到一个向量中,类似RNN。

图片

 

二、MHA工程优化(效果无损):

KV cache

因为Decoder only的特性,每次前向完,把 KV 都保留下来,用于之后计算。

#q、k、v 当前 timestep 的 query,key,value
# K_prev,V_prev 之前所有 timestep 的 key 和 value
for _ in range(time_step):
    ...
    K = torch.cat([K_prev, k], dim=-2) #[b, h, n, d]
    V = torch.cat([V_prev, v], dim=-2) #[b, h, n, d]

    logits = torch.einsum("bhd,bhnd->bhn", q, K)
    weights = torch.softmax(logits/math.sqrt(d), dim=-1)
    outs = torch.einsum("bhn,bhnd->bhd", weights, V)
    ...
    
    K_prev, V_prev = K, V

online softmax

Safe softmax 和 online softmax:参考

陈star:Flash attention && flash decoding[2]

图片

 

Flash attention

背景:

一旦模型规模很大长度很长时,QK根本就存不进缓存。将QK两个大的矩阵乘法,拆解为多次运算(平铺、重计算等),放入SRAM,减少HBM访问次数,利用SRAM的速度优势,显著提高计算速度。

比如 Llama 7B 模型,hidden size 是 4096,那么每个 timestep 需缓存参数量为 4096232=262144,假设半精度保存就是 512KB,1024 长度那就要 512MB. 而现在英伟达最好的卡 H100 的 SRAM 缓存大概是 50MB,而 A100 则是 40MB. 而 7B 模型都这样,175B 模型就更不用说了。

Flash Attention的主要改进点是(下面部分内容参考了 :极市开发者平台-计算机视觉算法开发落地平台-极市科技[3] 和 猛猿:图解大模型计算加速系列:Flash Attention V2,从原理到并行计算)[4]:

发现Transformer的计算瓶颈不在运算能力,而在读写速度上,因此着手降低了对显存数据的访问次数。

传统attention流程如下:

从显存中取QK计算->将结果S写回显存->从显存读S计算softmax->将结果P写回显存->从显存读取P和V进行计算->将结果O写回显存。

因此想办法进行分块计算,拆到足够小,就能全塞到L1缓存上(比如说A100的L1只有192KB)进行计算了,不需要将这些参数从显存反复的读入读出,只需要读L1缓存,就实现了加速。但是softmax是需要需要知道全局信息的,所以分块计算后,需要一些技巧对结果进行融合。

  • • FlashAttention是一种IO-aware算法,它通过tiling来减少对HBM的访存量,从而提高性能

  • • FlashAttention避免了从HBM读写一些中间结果,比如QK得到的相似度矩阵,以及基于相似度矩阵计算softmax得到的概率矩阵

FlashAttention对Transformer的加速原理简单,但因早期硬件限制未能及时出现,直到A100 GPU架构问世。

  • • 1.大幅度高速HBM2显存

  • • 2.新的异步拷贝指令,可以直接从HBM拷贝到SRAM

大幅度提高的显存、和显存的拷贝效率,使得FlashAttention的优势得以大幅发挥。因此 flashAttention 也依赖于GPU架构(A100以上)。

图片

 

图片

 

图片

 

图片

 

Page attention

图片

 

  • • 每个block类比于虚拟内存中的一个page。每个block的大小是固定的,在vLLM中默认大小为16,即可装16个token的K/V值

  • • Shared prefix:在某些大模型中,所有请求可能都会共享一个前置信息(比如system message: “假设你是一个有帮助的AI助手...."),这些前置信息没有必要重复存储KV cache

  • • Beam Search、并行采样(Parallel Sampling)中有大量的KV cache是重复的。内存使用量降低 55%。

  • • 对物理块的引用计数进行跟踪,并实现写时复制(Copy-on-Write)机制。

vLLM 主要用于快速 LLM 推理和服务,其核心是 PagedAttention,它将在操作系统的虚拟内存中分页的经典思想引入到 LLM 服务中。在无需任何模型架构修改的情况下,可以做到比 HuggingFace Transformers 提供高达 24 倍的 Throughput。而 PagedAttention 核心则是 attention_ops.single_query_cached_kv_attention

参考:

https://zhuanlan.zhihu.com/p/69...[5]

https://zhuanlan.zhihu.com/p/63...[6]

Ring attention

旨在解决处理长序列时面临内存限制问题。

参考:

ring attention + flash attention:超长上下文之路[7]

我们只需要把 seq_eln分为卡数那么多份(n = num_gpu),每张卡计算一个 block,只存储一份 Qi,K,И,通过跨卡的 p2p 通信互相传递 K,V,来实现迭代计算,就可以实现多卡的超长 context length

striped attention

  • • Striped Attention是Ring Attention的一个简单扩展,它通过改变设备间分配工作的方式来解决ring attention的工作负载不平衡的问题。

三、FFN部分的优化

MoE

参数量方面:近2/3的参数集中在FFN结构中。

计算量方面:如果不是超长序列,也是FFN结构占大头,序列越短,FFN计算量的占比越大。

通常认为FFN中的MLP压缩了大量的知识,有一些观点将这个MLP看成存储了大量具体知识的Key-Value存储器,那么也有利用让模型学习到在不同的context中访问不同的知识。MLP相对于transformer中的其他结构来讲,也更容易做稀疏化。

因此有充分的动机对FFN中的MLP进行稀疏化。

图片

 

四、微调

有多种微调方式。Freeze-tuning,Adapter Tuning,Prefix-Tuning,P-Tuning,LoRA 等。

lora用的比较多。比如 72B微调,可以选择量化4bit、lora_dim = 64,具有较高的性价比。

图片

 

五、训练相关

混合精度

直接使用float16的问题:

  • • 精度溢出:gradient×lr超出float16的精度,为0。

  • • 舍入误差:权重和梯度差异大,相加的时候被舍弃。

    • • 原因是:由于浮点数的特性,FP16 在两个相邻的,能够被 FP16 表达的数值之间存在一定的间隔,当计算数值存在于间隔之中时,运算将会出现舍入误差。

    • • 具体例子:在FP16中 与 完全一样,就是因为 的最小间隔为 ,因此  将在这次相加中丢失(未被丢失)。

混合精度训练:

在传导过程中使用 FP16(一份权重一份梯度,即2份FP16),然后使用 FP32 接受更新的梯度以及保存模型(即优化器参数为FP32。对于adam来说,保存1份权重+2份辅助变量,即3份FP32)。

混合精度训练能够极大的提高模型训练速度,同时保留几乎 99%的训练精度。

具体过程:

使用float16权重进行前向传播、并反向传播得到float16的梯度;

通过优化器计算出float32精度的权重更新量并更新float32权重;

将float32权重转换为float16;

细节说明:

前向传播时,数据精度是 fp16。但根据 Hugging Face 源码[8]、 LLaMA 官方实现[9],在自注意力层有一个细节:算 softmax 之前,需要把数据精度转换成 fp32;softmax 算完后再转换回 fp16。

为什么保存两份权重反而显存占用降低?

训练的时候,前向+反向所占用的显存减半了,只是权重更新的时候使用了FP32,因此,总体上显存占用会显著减小。

看下面这张图可以比较清晰,为什么保存了多份权重,训练时候显存占用反而降低。

图片

 

并行、调度、训练框架

数据并行、模型并行、流水线并行、张量并行

3D 并行:3D 并行实际上是三种常用并行训练技术的组合, 即数据并行、流水线并行和张量并行

相关的框架:

Huggingface Transformer

deepspeed

megatron

Megatron LM

Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism 使用的是模型并行(把一个层中间切开)

图片

 

图片

 

与gpipline(按层切开) 方式是正交、互补的

优点:在原始代码的基础上修改简单,不需要编译器,只需要改pytorch代码

通用性:只适用于transformers

把MLP 和attention拆开

MLP输入:b*l

ZeRO

超线性的加速,100B模型。

背景:

模型大了,一个卡放不下。模型并行(这里特指张量并行):垂直切开,每个层以内都要做通讯,通讯量太大,单机内多卡还行,多机器就不好(大概做到8卡,多了的话计算通讯比差)。内存花在什么地方:1. 参数的值 梯度 优化器的状态(冲量 variance等)。2. 中间值 临时的buffer。

  • • Optimizer->ZeRO1

    • • 将optimizer state分成若干份,每块GPU上各自维护一份

    • • 每块GPU上存一份完整的参数W,做完一轮foward和backward后,各得一份梯度,对梯度做一次 AllReduce(reduce-scatter + all-gather) , 得到完整的梯度G,由于每块GPU上只保管部分optimizer states,因此只能将相应的W进行更新,对W做一次All-Gather

  • • Gradient+Optimzer->ZeRO2

    • • 每个GPU维护一块梯度

    • • 每块GPU上存一份完整的参数W,做完一轮foward和backward后, 算得一份完整的梯度,对梯度做一次Reduce-Scatter,保证每个GPU上所维持的那块梯度是聚合梯度,每块GPU用自己对应的O和G去更新相应的W。更新完毕后,每块GPU维持了一块更新完毕的W。同理,对W做一次All-Gather,将别的GPU算好的W同步到自己这来

  • • Parameter+Gradient+Optimizer->ZeRO3

    • • 每个GPU维护一块模型状态

    • • 每块GPU上只保存部分参数W,做forward时,对W做一次 All-Gather ,取回分布在别的GPU上的W,得到一份完整的W, forward做完,立刻把不是自己维护的W抛弃,做backward时,对W做一次All-Gather,取回完整的W,backward做完,立刻把不是自己维护的W抛弃. 做完backward,算得一份完整的梯度G,对G做一次Reduce-Scatter,从别的GPU上聚合自己维护的那部分梯度,聚合操作结束后,立刻把不是自己维护的G抛弃。用自己维护的O和G,更新W。由于只维护部分W,因此无需再对W做任何AllReduce操作

  • • ZeRO-Offload

    • • forward和backward计算量高 ,因此和它们相关的部分,例如参数W(fp16),activation,就全放入GPU

    • • update的部分计算量低 ,因此和它相关的部分,全部放入CPU中。例如W(fp32),optimizer states(fp32)和gradients(fp16)等

    • • ZeRO-Offload 分为 Offload Strategy 和 Offload Schedule 两部分,前者解决如何在 GPU 和 CPU 间划分模型的问题,后者解决如何调度计算和通信的问题

offload

  • • ZeRO-Offload

    • • forward和backward计算量高 ,因此和它们相关的部分,例如参数W(fp16),activation,就全放入GPU

    • • update的部分计算量低 ,因此和它相关的部分,全部放入CPU中。例如W(fp32),optimizer states(fp32)和gradients(fp16)等

    • • ZeRO-Offload 分为 Offload Strategy 和 Offload Schedule 两部分,前者解决如何在 GPU 和 CPU 间划分模型的问题,后者解决如何调度计算和通信的问题

  • • ZeRO-Infinity

    • • 一是将offload和 ZeRO 的结合从 ZeRO-2 延伸到了 ZeRO-3,解决了模型参数受限于单张 GPU 内存的问题

    • • 二是解决了 ZeRO-Offload 在训练 batch size 较小的时候效率较低的问题

    • • 三是除 CPU 内存外,进一步尝试利用 NVMe 的空间

引用链接

[1] 缓存与效果的极限拉扯:从MHA、MQA、GQA到MLA - 科学空间|Scientific Spaces: https://kexue.fm/archives/10091/comment-page-2
[2] 陈star:Flash attention && flash decoding: https://zhuanlan.zhihu.com/p/691623115
[3] 极市开发者平台-计算机视觉算法开发落地平台-极市科技: https://www.cvmart.net/community/detail/8302
[4] 猛猿:图解大模型计算加速系列:Flash Attention V2,从原理到并行计算): https://zhuanlan.zhihu.com/p/691067658
[5] https://zhuanlan.zhihu.com/p/69...: https://zhuanlan.zhihu.com/p/691038809
[6] https://zhuanlan.zhihu.com/p/63...: https://zhuanlan.zhihu.com/p/638468472
[7] ring attention + flash attention:超长上下文之路: https://zhuanlan.zhihu.com/p/683714620
[8] Hugging Face 源码: https://github.com/huggingface/transformers/blob/ee4250a35f3bd5e9a4379b4907b3d8f9d5d9523f/src/transformers/models/llama/modeling_llama.py#L350C8-L351C111
[9] LLaMA 官方实现: https://github.com/meta-llama/llama/blob/6c7fe276574e78057f917549435a2554000a876d/llama/model.py#L180C17-L180C42

大模型推理框架 vLLM 源码解析:Block 模块分配和管理 逻辑 Block(self,) -> None:block_number: int: 这个是 PhysicalTokenBlock 实例对象的索引,可以理解成是 flag,用于区分不同 blockblock_size: int: 表示一个 block 内存储多少个 token 的 kv cache 数据。__init__函数中初始化是一个长度为 block_size 的全为 -1 的 list。后续可以通过将新的 token 添加到这个 list 中去。会统计已使用的 token 数量,当。 阅读详情

相关推荐

CUDA Kernel调试与优化--背景知识扫盲(LLM生成)

CUDA Kernel调试与优化--背景知识扫盲(LLM生成)

Hi20240217的博客 2426

DeepSeek MLA(Multi-Head Latent Attention)算法浅析

DeepSeek MLA(Multi-Head Latent Attention)算法浅析

周同学的博客 1810

LLM性能优化全解析:从延迟、吞吐、成本到量化与推理引擎实战

在深度学习与自然语言处理领域,模型推理性能优化是工程落地的核心挑战。其核心原理在于平衡计算、内存与通信资源,以提升系统效率。从技术价值看,优化能显著降低服务延迟、提高吞吐并控制成本,是模型从实验走向生产的关键。常见的应用场景包括实时对话系统、批量文本处理与高并发API服务。本文聚焦大语言模型(LLM)的性能优化,深入剖析延迟、吞吐与成本这三个相互制约的维度,并系统介绍量化、推理引擎优化等关键技术。通过理解这些基础概念和主流方案,如量化技术降低显存占用、推理引擎提升硬件利用率,开发者能更有效地定位和解决生产环

keke1314520的博客 356

大模型学习笔记:LLM性能优化中的一些概念扫盲

KV Cache的大小取决于模型大小(dim和layers) 和序列长度。,下面列举一些方法对MHA的参数量进行压缩,从而对kv Cache进行压缩。

2401_85373691的博客 1344

大语言模型全景解析:从核心概念到本地部署实战指南

大语言模型(LLM)是基于Transformer架构、通过海量文本数据训练而成的生成式人工智能模型,其核心原理是通过预测序列中下一个词的概率分布来实现理解和生成人类语言。这项技术的价值在于将自然语言处理能力提升到了前所未有的高度,为智能对话、内容创作、代码生成等场景提供了通用基础。在实际工程应用中,开发者既可以通过云端API快速集成如GPT-4、Claude等闭源模型,也能借助开源生态进行本地部署,以满足数据隐私和定制化需求。其中,**本地部署**已成为许多开发者和企业的关键实践,通过使用Ollama、ll

weixin_30627341的博客 403

LLM与AIGC学习路线图:从零到一掌握生成式AI核心技术

生成式人工智能作为当前AI领域的前沿技术,其核心在于让机器具备创造新内容的能力。其技术原理主要基于Transformer架构和扩散模型等深度学习技术,通过自注意力机制和去噪过程实现文本、图像等内容的生成。这项技术的价值在于能够大幅提升内容创作效率,并催生全新的应用形态。在实际应用场景中,从智能对话助手到自动化内容生产,生成式AI正在重塑多个行业的工作流程。本文聚焦于大语言模型和AIGC的实践学习路径,特别针对提示工程和模型微调等关键技能,提供了一套从认知建立到项目实践的结构化学习方案,帮助学习者系统掌握这一

weixin_34318272的博客 399

【AI大模型】LLM性能优化中的一些概念扫盲,看到就是赚到!!!

KV Cache的大小取决于模型大小(dim和layers) 和序列长度。为了尽可能的支持更大的模型、或者更长的序列,就需要对kv 进行压缩,下面列举一些方法对MHA的参数量进行压缩,从而对kv Cache进行压缩。

bugyinyin的博客 947

Facebook登录协议逆向实战:从加密参数到完整流程解析(附Python代码)

本文深入解析Facebook登录协议的逆向工程,重点拆解`lgndim`和`encpass`等加密参数的生成逻辑,并提供完整的Python实现代码。通过Base64解码和RSA加密技术,帮助开发者理解并实现Facebook登录流程,同时涵盖工程优化与安全实践。

weixin_30687051的博客 477

LLM 新手入门指南:从基础概念到第一个 AI 应用

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960142的博客 396

YOLOv8 TensorRT C++部署实战详解:从XMake构建到推理流水线

本项目实现了一个基于YOLOv8和TensorRT的高性能火灾烟雾检测系统,具有以下核心特点: 技术架构:采用TensorRT 8.6+进行GPU加速推理,结合CUDA 12.1和OpenCV 4.8+,实现高效计算机视觉处理。系统使用XMake替代CMake构建,配置更简洁高效。

hscing的博客 1065

Debian 11 下用hostapd+dnsmasq搭建WiFi热点:从命令行到实战(避坑指南)

本文详细介绍了在Debian 11系统上,使用hostapd和dnsmasq从命令行搭建稳定WiFi热点的完整实战流程。内容涵盖环境准备、无线网卡AP模式检查、服务深度配置,并重点提供了从服务启动失败到客户端无法上网等常见问题的系统性排错指南,帮助用户避开配置陷阱,成功创建可用的无线接入点。

CAT789的专栏 772

一篇文章帮你扫盲AI基础知识

LLM是AI的“大脑皮层”,负责把杂乱的信息转化成人类能理解的逻辑——比如把“我想吃火锅”翻译成“搜索附近评分高的川味火锅店”。如果把AI比作“打工人”,普通AI是只会回答问题的客服,而‌Agent则是能帮你订机票、写报告、管日程的全能管家‌。代码:"print('hello')" → ["print","(","'","hello","'",")"](6个Token)官方解释:RAG技术,是一种基于检索增强的生成技术。中文:"人工智能" → ["人","工","智能"](3个Token)

分享Java、Python、AI相关技术以及面试技巧 464

6.5 构网型储能系统的协同控制策略

本文系统阐述了构网型储能系统的协同控制策略,重点分析了多机组群协同运行面临的功率分配不均、动态响应失配等挑战。研究提出了改进型下垂控制与虚拟阻抗法、基于一致性算法的分布式协同控制等解决方案,探讨了构网型储能与同步发电机在惯性响应、一次调频等方面的协同机制,以及与跟网型电源在电压支撑、阻抗重塑等方面的互补作用。文章构建了分层控制架构,为实现多类型电源的全局优化运行提供了技术路径,对提升高比例新能源电力系统的稳定性具有重要意义。

技术工作者 1002

大模型-性能优化-训练、推理

本文总结了当前大模型训练和推理优化的关键技术及工具库。在推理优化方面,介绍了vLLM、TensorRT等主流推理引擎,以及KV Cache、FlashAttention等性能优化方法。训练优化包括模型结构优化(MQA/GQA)、工程优化(混合精度、并行训练框架)以及微调技术(LoRA等)。此外,还提出了系统级优化策略,如实时转非实时处理、工作并行化等,通过计算复用和流程优化提升整体效率。这些方法共同构成了大模型高效训练和推理的技术体系。

乐于创作,乐于分享,志于创作高价值博文 943

1、Ka频段双极化低剖面卫通相控阵天线

设计了双馈口叠层十字缝隙耦合天线,采用“双线极化天线 +旋转馈电 + 移相控制”架构,采用双馈口的叠层十字缝隙耦合天线,并以 2 x2 阵列为主体,旋转排布实现二次圆极化,同时极化可切换,通过多层 PCB 工艺实现天线层、控制/电源层功分网终层、芯片层一体化集成,研制出 64 阵元的圆极化可切换发射天线,测试结果表明:天线工作 频段为 27.5 ~31 GHz,可实现60°扫描,法向轴比

qq_43416206的博客 4369

基于MATLAB Simulink的电动汽车整车控制仿真

在本文中,我们选择了power_ElectricVehicle示例模型,该模型已经包含了电动汽车的基本组成部分,包括电机、变速器、驱动轮、电池等。例如,使用PID控制器来控制电机的转速,使用ABS控制器来控制车轮的制动力,使用转向控制器来控制车辆的转向角度,使用悬挂控制器来控制车轮的姿态等。通过建立模型和实现控制器,我们可以比较直观地了解电动汽车的工作原理和性能特点,并验证设计的控制系统在不同工况下的效果。而在电动汽车的开发中,整车控制系统是至关重要的一个组成部分,直接影响着电动汽车的性能和性价比。

qq_39605374的博客 1800

开发教程:从新手到精通agent开发

在开始之前,咱们得先搞清楚agent到底是啥。简单来说,agent就像是一个超级智能助手,它能自己感知周围的环境,然后根据这些信息做出决策,就像我们人类根据自己的想法和判断来行动一样。比如说,智能客服就是一种agent,它能理解我们的问题,然后从海量的知识库中找到答案回复我们。

qq_46094651的博客 1096

ROCm rocr-libhsakmt分析系列9-3: queue的内核创建流程

KFD队列是用户空间与GPU通信的核心机制,通过多种队列类型(计算、DMA、调试等)实现命令流管理。核心数据结构包括描述队列属性的queue_properties、内核调度对象queue、进程级管理器process_queue_manager,以及跨进程设备的qcm_process_device等。这些结构通过ring buffer、doorbell机制和MQD硬件描述符协同工作,支持队列全生命周期管理、资源调度、异常处理和上下文保存/恢复功能。

图形/计算GPU的驱动与虚拟化技术分享园地 2127

快速上手agent开发教程的5个步骤

嘿,朋友!你知道 agent 吗?简单来说,agent 就像是智能世界里的小助手,能自己思考、做决策,然后帮我们完成各种任务。比如说,你想订个旅行计划,agent 就能像个贴心的小管家,自动帮你查机票、找酒店,还能给你推荐好玩的景点呢!现在啊,AI 发展得特别快,agent 也越来越流行啦。为啥呢?因为它能让我们的生活变得更轻松、更高效呀!就像有个魔法小精灵,随时在你身边,只要你说句话,它就能帮你把事情搞定。

weixin_59191169的博客 2726

基于Matlab的深度学习OFDM系统信号检测

在接收端,我们首先去除循环前缀,然后对接收到的信号进行FFT变换和QAM解调。在通信系统中,正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)是一种常用的调制技术,它可以将高速数据流分成若干个低速子载波进行传输,提高了信道利用率和抗干扰性能。接下来,我们使用训练好的神经网络对QAM调制后的数据进行检测,得到估计的FFT变换结果。深度学习方法可以通过大量的训练数据来学习信号的特征,并具有一定的适应能力,在某些情况下可能能够获得更好的检测性能。

2301_79325657的博客 296

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: Nature:「人类亲吻难题」彻底难倒LLM,所有大模型全部失败!LLM根本不会推理,只是工具
下一篇: RAG黑盒被打开了,可视化RAGViz闪亮全场
AIBigModel
博客等级 码龄2年 5358粉丝 706原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值