利用Count-Min Sketch (CMS)算法对大数据量(海量 KV)进行热点统计
在推理引擎中KV Cache 是一个很重要的组件当前需要对 KV Cache 中的热点 key 做统计。key 的数量是海量的如果为每个 key 都分配一个 int 类型来统计会占用 X G 的内存这种方式是不可接受的。因此当前使用概率型数据结构 Count-Min Sketch简称 CM Sketch来实现。Count-Min Sketch简称 CM Sketch是一种在大数据流处理中广泛使用的概率型数据结构。它利用极其有限的内存空间能够近似地统计海量数据流中每个元素的出现频率。它的核心优势在于空间和时间复杂度都是常数级别 O(1)但代价是会存在一定的估算偏差只会多算不会少算。一、Count-Min Sketch 的算法原理CM Sketch 的核心思想可以理解为多维度的计数型布隆过滤器Bloom Filter。它主要由一个二维计数矩阵和一组相互独立的哈希函数组成。1. 核心结构二维数组矩阵定义一个宽为 w、高为 d 的二维整数数组 C。初始时矩阵中所有值均为 0。哈希函数挑选 d 个相互独立的哈希函数记为 h_1, h_2, ..., h_d。每个哈希函数将输入的元素映射到 [0, w-1] 的范围内。2. 核心操作① 更新操作Update当数据流中到来一个元素 $x$ 时或者要给元素 $x$ 增加计数 $c$分别用 d 个哈希函数计算出 x 在每一行对应的列索引col_i h_i(x)其中 i 范围是 1 到 d。将矩阵中对应位置的计数器加上 cC[i][col_i] C[i][col_i] c。② 查询操作Query当要查询元素 x 出现的总次数时同样用 d 个哈希函数计算出 x 在每一行对应的列col_i h_i(x)。找出这些对应位置中的最小值作为最终估算结果hat{a}_x min_{C[i][col_i]}。3. 为什么取最小值误差来源因为多个不同的元素可能会经过同一个哈希函数映射到矩阵的同一个位置发生哈希碰撞导致该位置的计数器被重复叠加。任何一个位置的值都必定大于或等于元素的真实频率。每一行由于哈希函数不同碰撞的元素也不同。取所有行之中的最小值可以最大程度地剔除其他元素碰撞带来的干扰使其最接近真实值。4. 滑动窗口衰减CMS 的格子值是只增不减的。在长时间运行的系统中随着总流量越来越大所有格子最终都会被填满、冲突越来越严重误差会无限放大。架构解法必须引入“滑动窗口衰减Decay”。例如在 Mooncake 或高性能网关中每隔一段时间后台线程会原子的把整个 CMS 矩阵的所有格子值整体右移 1 位相当于数值除以 2以此来“忘掉”历史突出近期的热度。二、Count-Min Sketch 的典型使用场景由于CM Sketch 极其节省内存且速度飞快它非常适合处理海量、高并发、允许一定误差的流式数据场景Top-K / 频繁项查找Heavy Hitters网络流量监控在骨干路由器中实时统计哪些 IP 地址发送了大量的巨型数据包发现 DDoS 攻击源。热门搜索词统计实时计算过去一小时内搜索量最高的关键词。数据流频次估算防刷与限流网络爬虫或恶意防刷系统实时统计某个 API 被某个 IP 访问的频率。网页/视频去重与推荐估算某个用户对某一类内容的点击频次。缓存淘汰策略如 TinyLFU现代高性能缓存如 Java 的 Caffeine 缓存库使用 CM Sketch 的变体来记录数据的访问频率。通过极小的内存消耗判断新来的数据是否比当前缓存中的老数据更“热”从而决定是否淘汰老数据。三、优缺点对比优点 缺点 ⚠️内存极小可以处理数以亿计的去重数据而内存只需几兆字节。不支持准确的单元素查询结果是一个近似值对于低频元素误差可能相对较大。时间常数级吞吐量极高适合硬件芯片如 FPGA/ASIC或高并发网络设备。只能高估不能低估估算值 hat{a} 大于或等于真实值。支持合并两个相同维度的 CM Sketch 矩阵可以直接按位置相加实现分布式合并。不支持删除操作由于哈希碰撞如果直接减去计数会影响到其他共享该位置的元素可用 Counting Bloom Filter 思想演进的变体解决。四、代码实现参考mooncake中实现#pragma once #include cstdint #include functional #include mutex #include string #include vector namespace mooncake { // A simple Count-Min Sketch for tracking key access frequency. // Used by the frequency admission policy to decide whether a key // should be promoted into the local hot cache. class CountMinSketch { public: explicit CountMinSketch(size_t width 4096, size_t depth 4) : width_(width 0 ? width : kDefaultWidth), depth_(depth 0 ? depth : kDefaultDepth), table_(depth_, std::vectoruint8_t(width_, 0)), total_increments_(0) {} // Increment the count for |key| and return the estimated min-count. // Automatically triggers decay when total_increments exceeds the // threshold (width * depth) to prevent counters from saturating. uint8_t increment(const std::string key) { std::lock_guardstd::mutex lock(mu_); uint8_t min_val UINT8_MAX; for (size_t i 0; i depth_; i) { size_t idx hash(key, i) % width_; if (table_[i][idx] UINT8_MAX) { table_[i][idx]; } min_val std::min(min_val, table_[i][idx]); } if (total_increments_ width_ * depth_) { decayLocked(); } return min_val; } // Return the estimated count for |key| (read-only). uint8_t count(const std::string key) const { std::lock_guardstd::mutex lock(mu_); uint8_t min_val UINT8_MAX; for (size_t i 0; i depth_; i) { size_t idx hash(key, i) % width_; min_val std::min(min_val, table_[i][idx]); } return min_val; } // Halve all counters (right-shift by 1). Useful for periodic aging. void decay() { std::lock_guardstd::mutex lock(mu_); decayLocked(); } private: static constexpr size_t kDefaultWidth 4096; static constexpr size_t kDefaultDepth 4; size_t hash(const std::string key, size_t seed) const { // Combine std::hash with a per-row seed to get independent hashes. size_t h std::hashstd::string{}(key); h ^ seed * 0x9e3779b97f4a7c15ULL 0x517cc1b727220a95ULL; h ^ (h 33); h * 0xff51afd7ed558ccdULL; h ^ (h 33); return h; } void decayLocked() { for (size_t i 0; i depth_; i) { for (size_t j 0; j width_; j) { table_[i][j] 1; } } total_increments_ 0; } const size_t width_; const size_t depth_; std::vectorstd::vectoruint8_t table_; size_t total_increments_; mutable std::mutex mu_; }; } // namespace mooncake

相关新闻

03-AI实践论-人类如何与AI共同行动

03-AI实践论-人类如何与AI共同行动

第三篇|AI 的实践论:人类如何与 AI 共同行动?核心命题:当 AI 从"回答问题"进入"执行任务",真正被重构的将不是软件,而是组织。0. 坐标 本文回答第三问:“AI 能做什么&#…

2026/10/1 17:16:06 阅读更多 →
北斗星间链路仿真:STK高保真建模与动态拓扑分析

北斗星间链路仿真:STK高保真建模与动态拓扑分析

简介:本资源是一份面向卫星通信、导航系统仿真与航天工程方向研究者及高年级本科生的学术型技术文档,聚焦北斗星间链路拓扑特性的建模、仿真与应用验证。依托STK软件构建动态仿真环境,系统分析时延、保真度、安全性能与故障恢复能力等核心指标…

2026/10/1 17:16:06 阅读更多 →
车载以太网中的TCP与UDP:诊断、服务通信与网络管理怎么选

车载以太网中的TCP与UDP:诊断、服务通信与网络管理怎么选

车载以太网正在从高端车型向主流平台渗透。随着域集中式架构和中央计算架构的推进,车内通信不再只是CAN总线的天下,以太网承载的业务越来越多——DoIP诊断、SOME/IP服务通信、UdpNM网络管理,全部跑在传输层协议之上。而传输层的两个核心协议T…

2026/10/1 17:16:06 阅读更多 →

最新新闻

K9s v0.1.3 版本解析:热键体系重构、多集群配置迁移与 ReplicationController 支持

K9s v0.1.3 版本解析:热键体系重构、多集群配置迁移与 ReplicationController 支持

云原生容器编排CLI运维 【免费下载链接】k9s 🐶 Kubernetes CLI To Manage Your Clusters In Style! 项目地址: https://gitcode.com/GitHub_Trending/k9s/k9s 点击查看 免费下载 导读 K9s v0.1.3 是该项目早期发展中一次承上启下的关键发布&#xff1…

2026/10/1 18:39:46 阅读更多 →
计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度建模与实现

计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度建模与实现

做虚拟电厂优化调度这几年,我几乎每个月都会碰到同行在群里问同一个问题:垃圾焚烧、碳捕集、电转气这些单元单独看都很“绿”,但把它们放进同一个虚拟电厂里到底该怎么配合?不少人的模型里各算各的,碳捕集出来的二氧化…

2026/10/1 18:39:46 阅读更多 →
嵌入式学习第十七天:用Linux个人博客项目打通服务部署全流程

嵌入式学习第十七天:用Linux个人博客项目打通服务部署全流程

嵌入式学习找工作第十七天--第一个项目(Linux个人博客) 走到第十七天这个节点,算是一个值得停下来认真复盘的位置。前面两周多的时间里,大概率已经啃完了 Linux 基础命令、vim 的基本操作、环境变量的概念,甚至可能被…

2026/10/1 18:39:46 阅读更多 →
AI论文能洗白吗?实测Paperxie降AIGC率真相

AI论文能洗白吗?实测Paperxie降AIGC率真相

这段时间后台总有读者追着我问同一件事:用 AI 写完论文以后,拿去跑 Paperxie 这类降重工具,出来的 AIGC 率到底能不能压到个位数?尤其是知网、维普据说要在 2026 年执行更严的新规,很多人怕现在辛辛苦苦改完&#xff0…

2026/10/1 18:39:46 阅读更多 →
基于Unet的医学影像分割实战:从PyTorch模型训练到Dice评估与避坑指南

基于Unet的医学影像分割实战:从PyTorch模型训练到Dice评估与避坑指南

简介:一套基于U-Net的医学影像分割系统完整项目源码,适合计算机、人工智能、自动化等专业学生完成毕设、课程设计或医学影像分割入门实践,也便于小白进阶学习。项目实现了从数据标注到模型部署的全流程,包含标注格式转换、训练与预…

2026/10/1 18:39:46 阅读更多 →
AI求职Demo失效真相:从玩具到产品的能力表达重构

AI求职Demo失效真相:从玩具到产品的能力表达重构

1. 这不是技术问题,是求职信号系统失灵了 “做了3个AI Demo,为什么还是拿不到面试?”——这句话我去年在技术社区刷到不下二十次,每次看到都下意识点开,不是因为好奇,而是太熟悉了。熟悉到能一眼看出提问者…

2026/10/1 18:38:45 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →