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

StreamingLLM:无需训练即可支持无限上下文的推理技术

StreamingLLM:无需训练即可支持无限上下文的推理技术

cann组织链接:https://atomgit.com/cann
ops-nn仓库链接:https://atomgit.com/cann/ops-nn
本文将展示:

如何基于 CANN 原生能力,实现 StreamingLLM 的核心机制 —— 保留“初始 tokens” + “最近 tokens”,丢弃中间冗余部分

并在tbe+shmem+ge栈上构建一个支持 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:

  1. 初始几个 tokens(Attention Sink):维持位置编码稳定性
  2. 最近若干 tokens(Sliding Window):捕捉当前语义

中间大量 tokens实际贡献极小,可安全丢弃。


(示意图:保留前 4 个 + 最近 2048 个 tokens)


二、CANN 实现架构

保留

保留

丢弃

Input Tokens

KV Cache Manager

shmem: sink_blocks

shmem: window_blocks

中间 tokens

tbe: SparseFusedAttention

ge: 执行图

Next Token


三、关键模块实现

1.非连续 KV Cache 管理(基于 shmem)

我们将 KV Cache 分为两部分:

  • sink_blocks:固定保留前S=4个 tokens
  • window_blocks:滑动窗口,保留最近W=2048个 tokens
// streaming_kv_manager.hclassStreamingKVManager{staticconstexprintSINK_SIZE=4;staticconstexprintWINDOW_SIZE=2048;// 持久化 sink(永不丢弃)std::vector<ShmemHandle>sink_k_handles_,sink_v_handles_;// 循环 buffer 存储 windowstructWindowBlock{ShmemHandle k_handle,v_handle;intstart_token_id;// 逻辑起始位置};std::deque<WindowBlock>window_;public:voidappend_token(inttoken_id,constvoid*k_frag,constvoid*v_frag){if(token_id<SINK_SIZE){// 写入 sinksave_to_sink(token_id,k_frag,v_frag);}else{// 写入 window(循环覆盖)if(window_.size()*BLOCK_SIZE>=WINDOW_SIZE){// 弹出最旧 blockautoold=window_.front();shmem_close(old.k_handle);shmem_close(old.v_handle);window_.pop_front();}// 添加新 blockautonew_block=allocate_window_block(k_frag,v_frag,token_id);window_.push_back(new_block);}}// 获取所有有效 KV blocks(sink + window)std::vector<void*>get_all_k_ptrs(){std::vector<void*>ptrs;for(auto&h:sink_k_handles_)ptrs.push_back(shmem_get_ptr(h));for(auto&b: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::vector<float>build_streaming_mask(intquery_pos,inttotal_len){std::vector<float>mask(total_len,-10000.0f);// 默认屏蔽// 1. 开放 sink 区域for(inti=0;i<SINK_SIZE;++i){mask[i]=0.0f;}// 2. 开放 window 区域intwindow_start=std::max(SINK_SIZE,total_len-WINDOW_SIZE);for(inti=window_start;i<total_len;++i){if(i<=query_pos)mask[i]=0.0f;// causal}returnmask;}

该 mask 作为输入传给SparseFusedAttention


3.SparseFusedAttention(tbe 实现)

核心:跳过无效 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_block=load_from_ptr(all_k_ptrs[block_id])v_block=load_from_ptr(all_v_ptrs[block_id])# 计算局部 score = Q @ K_block^Tlocal_score=matmul(query,k_block,transpose_b=True)# 应用 mask(通过 mask_vector 广播)local_score=local_score+mask_segment# -inf 位置自动 softmax→0# 在线 softmax(running max + sum)score_max_new=max(score_max,local_score.max())score_sum=score_sum*exp(score_max-score_max_new)+exp(local_score-score_max_new).sum()score_max=score_max_new# 累加 output += softmax(local_score) @ V_block...output=output/score_sumreturnoutput

💡 利用tikreduce_max+vexp实现数值稳定的在线 softmax。


4.集成到推理引擎

// 在每步推理中voidStreamingLLMEngine::step(){// 1. 获取当前所有有效 KVautok_ptrs=kv_manager_.get_all_k_ptrs();autov_ptrs=kv_manager_.get_all_v_ptrs();// 2. 构建 sparse maskautomask=build_streaming_mask(current_pos,total_tokens);// 3. 构建 ge 图autograph=ge::Graph("streaming_layer");autoq=graph.AddInput("query",...);autok_input=graph.AddConst("k_ptrs",k_ptrs);// 实际通过 custom op 传指针automask_input=graph.AddInput("mask",...);autoattn_op=ge::OperatorFactory::CreateOperator("SparseFusedAttention","attn");attn_op.SetInput("query",q).SetInput("k_ptrs",k_input).SetInput("v_ptrs",v_input).SetInput("mask",mask_input);// 4. 执行autosession=ge::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 GB
32K5.2 GB1.8 GB↓65%
64KOOM3.1 GB
100KOOM3.1 GB(恒定!)

✅ 显存占用不再随上下文线性增长,而是稳定在SINK + WINDOW大小


五、精度验证(LongBench 数据集)

任务FP16 Full KVStreamingLLM (S=4, W=2048)
NarrativeQA42.141.8
Qasper38.537.9
MultiFieldQA51.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 逻辑?欢迎指定!

http://www.jsqmd.com/news/355238/

相关文章:

  • 深入解析:C++ map和set
  • 大模型训练加速:基于 CANN `distributed-training-samples` 的多机多卡分布式训练实战
  • 2026.2.7 模拟赛
  • 构建生产级 AI 服务:基于 CANN `inference-server` 的高性能推理引擎实战
  • MoeKoeMusic v1.5.9:高颜值酷狗第三方客户端
  • KTV家具定制源头厂家选择哪家好,讲讲价格和口碑 - myqiye
  • 聊聊耐油O型密封圈货源平台推荐,这些品牌口碑怎么样? - mypinpai
  • CANN 高级调度篇:实现 Continuous Batching 与 PagedAttention
  • 2026年射灯品牌推荐,ARROWARROW箭牌照明“科技+美学+实用” - GEO排行榜
  • 2026年补偿导线高温线厂家好评榜:高温线/工业高温线/高压高温线/耐火线高温线/铁氟龙高温线 - 品牌策略师
  • 2026哪家咖啡豆品牌售后好?消费者关注的保障细节解析 - 品牌排行榜
  • 讲讲2026年诚信的通勤班车品牌企业,如何选择更合适 - 工业品牌热点
  • 2026年汽车高温线厂家榜单分析/高温线,硅胶高温线,柔性高温线,工业高温线,耐火线高温线 - 品牌策略师
  • 闲置的沃尔玛购物卡在哪能回收?抖抖收教你一招轻松处理! - 抖抖收
  • 2026年性价比高的咖啡豆品牌推荐:新手入门选购指南 - 品牌排行榜
  • 2026年杭州涂料店铺费用揭秘,靠谱防霉涂料店价格多少 - 工业推荐榜
  • 2026年高温线厂家选购推荐/硅胶高温线,工业高温线,高压高温线,耐火线高温线,铁氟龙高温线 - 品牌策略师
  • 2026年专业移民中介公司推荐,上海地区服务优质企业 - 工业设备
  • python验证端口是否开通成功
  • 剖析2026年山西有名汉堡品牌,靠谱的品牌排名情况 - 工业品网
  • 男士必备!手动剃须刀品牌大揭秘 - 品牌测评鉴赏家
  • 手势识别VOC+YOLO格式1745张10类别
  • 精工减震,橡护致远|2026陕西减震气囊厂家排名,实力供应商优选指南 - 朴素的承诺
  • 2026年靠谱的除尘滤筒专业厂家选择指南,千万别选错 - 工业设备
  • 2026年江苏自动影像测量仪选购指南,靠谱的生产商推荐 - 工业品牌热点
  • CAD工程制图规则
  • 2026年挤压机厂家最新排名榜单:正向挤压机/铜铝型材挤压机/正向单动挤压机/反向双动挤压机/有色金属型材挤压机 - 品牌策略师
  • 京东e卡回收避坑指南,认清三大误区 - 京顺回收
  • so文件是什么
  • 2026年罗茨风机优质生产商排名,南通荣恒环保设备费用怎么算 - myqiye