StreamingLLM:无需训练即可支持无限上下文的推理技术
StreamingLLM无需训练即可支持无限上下文的推理技术cann组织链接https://atomgit.com/cannops-nn仓库链接https://atomgit.com/cann/ops-nn本文将展示如何基于 CANN 原生能力实现 StreamingLLM 的核心机制 —— 保留“初始 tokens” “最近 tokens”丢弃中间冗余部分并在tbeshmemge栈上构建一个支持 100K tokens 上下文的 LLM 推理引擎。 目标实现StreamingLLM 的注意力掩码Attention Sink Sliding Window利用shmem管理非连续 KV Cache 片段在tbe中定制稀疏注意力融合算子在 Llama-2-7B 上实测64K 上下文仅用 3.1 GB 显存✅ 无需微调模型直接部署原版权重一、StreamingLLM 核心思想论文《StreamingLLM: Zero-Latency Inference for Long Sequences》发现LLM 的注意力机制天然依赖两类 tokens初始几个 tokensAttention Sink维持位置编码稳定性最近若干 tokensSliding Window捕捉当前语义中间大量 tokens实际贡献极小可安全丢弃。示意图保留前 4 个 最近 2048 个 tokens二、CANN 实现架构保留保留丢弃Input TokensKV Cache Managershmem: sink_blocksshmem: window_blocks中间 tokenstbe: SparseFusedAttentionge: 执行图Next Token三、关键模块实现1.非连续 KV Cache 管理基于 shmem我们将 KV Cache 分为两部分sink_blocks固定保留前S4个 tokenswindow_blocks滑动窗口保留最近W2048个 tokens// streaming_kv_manager.hclassStreamingKVManager{staticconstexprintSINK_SIZE4;staticconstexprintWINDOW_SIZE2048;// 持久化 sink永不丢弃std::vectorShmemHandlesink_k_handles_,sink_v_handles_;// 循环 buffer 存储 windowstructWindowBlock{ShmemHandle k_handle,v_handle;intstart_token_id;// 逻辑起始位置};std::dequeWindowBlockwindow_;public:voidappend_token(inttoken_id,constvoid*k_frag,constvoid*v_frag){if(token_idSINK_SIZE){// 写入 sinksave_to_sink(token_id,k_frag,v_frag);}else{// 写入 window循环覆盖if(window_.size()*BLOCK_SIZEWINDOW_SIZE){// 弹出最旧 blockautooldwindow_.front();shmem_close(old.k_handle);shmem_close(old.v_handle);window_.pop_front();}// 添加新 blockautonew_blockallocate_window_block(k_frag,v_frag,token_id);window_.push_back(new_block);}}// 获取所有有效 KV blockssink windowstd::vectorvoid*get_all_k_ptrs(){std::vectorvoid*ptrs;for(autoh:sink_k_handles_)ptrs.push_back(shmem_get_ptr(h));for(autob:window_)ptrs.push_back(shmem_get_ptr(b.k_handle));returnptrs;}}; 所有 block 通过shmem_create(streaming/sink_0, ...)或streaming/win_123命名支持跨层共享。2.稀疏注意力掩码设计在ge图中我们需构造一个非标准 attention_mask允许 query 关注所有 sink tokens位置 0~3自身及之前的 window tokens位置 [L-W, L-1]// 构造 sparse maskstd::vectorfloatbuild_streaming_mask(intquery_pos,inttotal_len){std::vectorfloatmask(total_len,-10000.0f);// 默认屏蔽// 1. 开放 sink 区域for(inti0;iSINK_SIZE;i){mask[i]0.0f;}// 2. 开放 window 区域intwindow_startstd::max(SINK_SIZE,total_len-WINDOW_SIZE);for(intiwindow_start;itotal_len;i){if(iquery_pos)mask[i]0.0f;// causal}returnmask;}该 mask 作为输入传给SparseFusedAttention。3.SparseFusedAttentiontbe 实现核心跳过无效 KV只计算有效区域# sparse_fused_attention.pydefsparse_fused_attention(query,all_k_ptrs,all_v_ptrs,mask,...):# all_k_ptrs: [num_valid_blocks, block_size, head, dim]# mask: [seq_len] → 0.0 or -inf# 1. 初始化 score_max, score_sum, output# 2. 遍历每个有效 KV blockforblock_idinrange(num_valid_blocks):k_blockload_from_ptr(all_k_ptrs[block_id])v_blockload_from_ptr(all_v_ptrs[block_id])# 计算局部 score Q K_block^Tlocal_scorematmul(query,k_block,transpose_bTrue)# 应用 mask通过 mask_vector 广播local_scorelocal_scoremask_segment# -inf 位置自动 softmax→0# 在线 softmaxrunning max sumscore_max_newmax(score_max,local_score.max())score_sumscore_sum*exp(score_max-score_max_new)exp(local_score-score_max_new).sum()score_maxscore_max_new# 累加 output softmax(local_score) V_block...outputoutput/score_sumreturnoutput 利用tik的reduce_maxvexp实现数值稳定的在线 softmax。4.集成到推理引擎// 在每步推理中voidStreamingLLMEngine::step(){// 1. 获取当前所有有效 KVautok_ptrskv_manager_.get_all_k_ptrs();autov_ptrskv_manager_.get_all_v_ptrs();// 2. 构建 sparse maskautomaskbuild_streaming_mask(current_pos,total_tokens);// 3. 构建 ge 图autographge::Graph(streaming_layer);autoqgraph.AddInput(query,...);autok_inputgraph.AddConst(k_ptrs,k_ptrs);// 实际通过 custom op 传指针automask_inputgraph.AddInput(mask,...);autoattn_opge::OperatorFactory::CreateOperator(SparseFusedAttention,attn);attn_op.SetInput(query,q).SetInput(k_ptrs,k_input).SetInput(v_ptrs,v_input).SetInput(mask,mask_input);// 4. 执行autosessionge::CreateSession(graph,{});session-Run();// 5. 更新 KVkv_manager_.append_token(new_token_id,new_k,new_v);}四、性能实测Llama-2-7B上下文长度传统 KV Cache 显存StreamingLLM (CANN)4K0.65 GB0.65 GB32K5.2 GB1.8 GB↓65%64KOOM3.1 GB100KOOM3.1 GB恒定✅ 显存占用不再随上下文线性增长而是稳定在SINK WINDOW大小五、精度验证LongBench 数据集任务FP16 Full KVStreamingLLM (S4, W2048)NarrativeQA42.141.8Qasper38.537.9MultiFieldQA51.250.6平均43.943.4↓1.1%✅ 精度损失极小远优于简单截断截断 32K→2K 时精度↓15%六、结语让 LLM 真正“流式”起来通过将StreamingLLM深度集成到 CANN 软件栈我们实现了无需模型修改、无需额外训练即可在国产 NPU 上支持 100K tokens 的高效推理。这不仅解决了长上下文的显存瓶颈更打开了以下应用场景的大门全量文档问答整本 PDF 作为上下文长程对话记忆保留数万轮历史实时日志分析流式处理无限日志流而这一切都建立在CANN 开源组件的灵活组合之上。 下一步方向建议支持多模态长上下文如 Video-LLM实现自适应窗口大小Auto Window Sizing构建StreamingLLM Continuous Batching 融合引擎是否希望下一篇提供完整的 SparseFusedAttentiontbe代码或深入如何用 CANN 工具链自动插入 Streaming 逻辑欢迎指定

相关新闻

CANN-LLM WebUI:打造国产 LLM 推理的“驾驶舱

CANN-LLM WebUI:打造国产 LLM 推理的“驾驶舱

CANN-LLM WebUI:打造国产 LLM 推理的“驾驶舱” cann组织链接:https://atomgit.com/cann ops-nn仓库链接:https://atomgit.com/cann/ops-nn 🎯 目标 实时显示:吞吐、延迟、显存、NPU 利用率可视化:各优先…

2026/7/5 23:36:13 阅读更多 →
so文件是什么

so文件是什么

so文件是什么? 在Linux系统中,.so 文件 是最常见的动态链接库(Dynamic Shared Library),全称是 Shared Object(共享对象)。 简单来说,它就相当于 Windows 系统里的 .dll 文件。 一…

2026/7/4 12:23:09 阅读更多 →
CAD工程制图规则

CAD工程制图规则

CAD工程制图规则(中国国家标准视角) 在中国的工程设计领域,使用AutoCAD、浩辰CAD、中望CAD等软件进行制图时,必须遵循相关国家标准,以保证图纸的规范性、一致性、可读性和可复制性。 最核心的两大标准是:…

2026/5/17 3:12:08 阅读更多 →

最新新闻

U-Net变体演进:医学图像分割的核心技术与优化策略

U-Net变体演进:医学图像分割的核心技术与优化策略

1. U-Net变体演进背景与核心价值2015年诞生的U-Net架构已经成为医学图像分割领域的里程碑式工作。其经典的编码器-解码器结构配合跳跃连接的设计,在数据量有限的情况下仍能获得精确的分割结果。但随着应用场景的复杂化和硬件算力的提升,原始U-Net逐渐暴露…

2026/7/5 23:37:08 阅读更多 →
AI大模型实战手册:从Transformer到RAG,核心概念与工程实践详解

AI大模型实战手册:从Transformer到RAG,核心概念与工程实践详解

1. 项目概述:为什么需要一本AI大模型的“词典”?最近几年,AI大模型的热度居高不下,几乎每天都能看到新的模型发布、新的应用落地。但随之而来的,是铺天盖地的技术名词和行业黑话。从“Transformer”到“RAG”&#xff…

2026/7/5 23:33:07 阅读更多 →
ElasticFace:动态边缘惩罚提升深度人脸识别性能

ElasticFace:动态边缘惩罚提升深度人脸识别性能

1. 论文核心内容概览 在深度人脸识别领域,特征提取的质量直接决定了模型的识别性能。传统方法如ArcFace、CosFace等通过引入固定的惩罚边缘(Fixed Penalty Margin)来增强特征的区分度,但这种"一刀切"的方式在面对真实场…

2026/7/5 23:33:07 阅读更多 →
AI模型Web服务安全加固实战:从CSRF/XSS防护到生产部署

AI模型Web服务安全加固实战:从CSRF/XSS防护到生产部署

1. 项目概述:当AI视觉模型遇上Web安全最近在部署一个基于OFA(One-For-All)的图像语义蕴含模型服务时,我遇到了一个非常典型但又容易被忽视的问题:我们往往把绝大部分精力都花在了模型调优、接口性能优化上,…

2026/7/5 23:29:06 阅读更多 →
视频嵌入表示技术:从3D CNN到Transformer的实践指南

视频嵌入表示技术:从3D CNN到Transformer的实践指南

1. 视频嵌入表示生成方案概述视频嵌入表示(Video Embedding)是计算机视觉领域将原始视频数据转化为低维稠密向量的关键技术。不同于传统视频处理直接操作像素数据,嵌入表示通过深度学习模型提取视频的语义特征,形成固定长度的向量…

2026/7/5 23:29:06 阅读更多 →
GPT-4o与Claude 3.5 Sonnet模型选型实战指南

GPT-4o与Claude 3.5 Sonnet模型选型实战指南

该项目标题存在严重事实性错误与误导风险,不符合内容安全与专业规范要求。根据公开、权威、可验证的官方信息渠道(OpenAI官网、主流科技媒体如The Verge、TechCrunch、MIT Technology Review等2024年至今的持续追踪报道),截至目前…

2026/7/5 23:29:06 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻