想象你走进一家繁忙的“AI 借阅馆”——读者源源不断,每个人都要借指定的“模型书”来推理。GPU 显存是离读者最近的“阅读桌”,只能摊开两三本书,翻开就能读,速度最快;CPU 内存是“馆内前台”,地方大一些,存取也很快;本地磁盘是“地下书库”,容量庞大但跑一趟要喘口气;远程对象存储则是“城外总馆仓库”,书要从卡车上卸下来,冷启动延迟全耗在这。图书管理员的核心工作,就是决定哪些书放阅读桌、哪些放前台、多久没人看的书退回书库,以及在上课高峰前把可能用到的书提前摆到桌上。这套“书桌整理哲学”,就是推理服务中的模型缓存策略设计。聪明的管理员能让读者几乎每次都从桌上直接拿到书,整个借阅馆(GPU 集群)的吞吐和资源利用率自然大幅提升。
掌握模型缓存策略,你能直接降低 AI 推理服务的冷启动延迟与显存成本,这是云平台架构师和 DevOps 工程师在模型规模爆炸时代最核心的调优技能。
可视化演示
展示推理服务三级缓存架构(GPU/CPU/SSD)的模型流转、LRU淘汰策略与预加载机制的实时运行。
本节配有交互动效(进入视口后自动加载,约 3KB)。
三级缓存层级架构 GPU显存:微秒级访问,容量有限仅存热模型 CPU内存:毫秒级访问,温模型缓冲层 L=us→ms→s 访问延迟梯度形成性能容量平衡
缓存层级模型
在 AI 借阅馆里,读者最常坐的“阅读桌”就是 GPU 显存——它离计算核心最近,数据放进去几乎零延迟就能读取,但桌面小得可怜,一张卡通常只能摊开两三个大模型。往里一点是“馆内前台”(CPU 内存),能放几十本书但仍装不下全部馆藏。再往里是“地下书库”(本地磁盘),容量以 TB 计,但把书从书架搬上来要花好几秒。最外层是“城外总馆仓库”(远程对象存储),所有冷门模型都在那儿躺着,取一次书像叫一次跨城快递,动辄几十秒。
这套分层结构的本质,是用距离换容量,用容量换成本。推理服务收到请求时,会先从最快的 L1(显存)找模型;找不到就去 L2(内存);再找不到只能从 L3(磁盘或远端)加载。每次“向下层找”,延迟都会跳一个数量级。设计缓存层级时,架构师要回答的核心问题是:每一层放多少模型、什么时候把书往上挪一层、什么时候允许它沉下去。
层级的价值可以用平均访问时延来量化。假设 L1 命中率为 \(h_1\),L2 命中率(在 L1 未命中的部分里)为 \(h_2\),各层读取时间分别为 \(t_{L1}\)、\(t_{L2}\)、\(t_{slow}\),那么:
就像管理员会把最热门的书放在触手可及的桌上,把稍冷门的放在前台、冷门的丢进书库,每一层缓存都有自己的“分工”和“成本账”。想降低平均延迟,首要目标就是把 \(h_1\) 和 \(h_2\) 抬上去,让读者每次都能在最近的层级拿到书。
- L1 命中项\(h_1\) 是请求直接在显存命中模型的概率,命中后只花 \(t_{L1}\)(微秒级),这是最理想的情况。
- L2 命中项\((1-h_1) \times h_2\) 是“L1 没命中但 L2 命中”的概率,此时付一次内存读取代价 \(t_{L2}\)(亚毫秒级)。
- 慢速加载项\((1-h_1) \times (1-h_2)\) 是两层都未命中的概率,此时必须从磁盘或远端加载,付出 \(t_{slow}\)(秒级,通常比前两者大三个数量级)。
缓存替换策略
书桌空间有限,新书要上桌,总得有旧书被请走。管理员怎么决定请走谁?这就到了替换策略的舞台。LRU(最近最少使用) 是最朴素的直觉:谁最久没被读者翻过,谁就先回书库。实现上就像给每本书贴一张“最后被读时间”的便签,每次被读就撕掉重贴到最上面。LFU(最不经常使用) 则换了个思路:统计每本书的借阅次数,次数最少的先撤——但这样做可能让一本“十年前很火、如今无人问津”的老书永远占着桌面。
现实中的模型流量往往既有时效性又有周期性:白天推荐的 A 模型频繁被调,晚上可能切换到 B 模型。单一策略都会失手。于是有了 LRFU(混合评分):把“最近被用”和“经常被用”两个分数按权重揉在一起。给每本书计算一个综合分,分值低的先淘汰:
管理员最终会为 \(\alpha\) 选一个值,比如 0.7,意思是“七分看新鲜度、三分看历史热度”。这样既不会让昙花一现的新模型霸占桌面,也不会让过气老模型赖着不走。真实的推理平台还会加一条“代价感知”:如果两个模型分数差不多,优先淘汰加载成本低、体积小的那个,把宝贵的显存留给“请神容易送神难”的大模型。
- 最近度\(recency(m)\) 是模型 \(m\) 的最近使用时间归一化值,刚被请求过的模型接近 1,很久没动的接近 0。
- 频率度\(frequency(m)\) 是模型 \(m\) 的使用次数归一化值,被调得越频繁分数越高。
- 权重合成\(\alpha\) 在 0 到 1 之间取值,将两个分数加权求和。\(\alpha\) 接近 1 时策略近似 LRU,接近 0 时近似 LFU。
预加载与预热
管理员最头疼的时刻是每天早上的高峰:读者一窝蜂涌进来,如果他们要的书都还在书库里,前台会排起长队。聪明的管理员会在开门前看一眼预约记录,把预测会热的书提前摆上桌——这就是预加载(预热)。推理服务里,模型从磁盘或远端加载到显存通常要几秒到几十秒,而在线请求的响应时间预算可能只有几百毫秒。唯一能“骗过”时间预算的办法,就是在请求真正到达之前,把模型悄悄请进缓存。
预加载的时机是个精妙的平衡。太早,模型占据显存却没人用;太晚,起不到掩藏加载延迟的作用。它依赖对业务流量的预测——比如每天 10 点的推荐系统高峰、每周一的运营活动、大促前的流量陡增。理想的预加载窗口满足:
实现上,预加载通常由异步预取线程完成:主线程继续服务请求,后台线程根据预测结果把模型从 L3 搬到 L2、再搬到 L1。管理员还会在服务启动时做一次“晨间整理”——把默认模型列表逐个加载好,这就是启动预热。预加载的意义不在于让命中率数字好看,而在于把几分钟的冷启动延迟藏到后台,让用户永远感知不到“取书等待”。
- 预测请求间隔\(E[\Delta_{req}]\) 表示从当前时刻到预测的下一波请求之间的期望时间,来自流量预测模型或历史统计。
- 加载耗时\(t_{load}\) 是从磁盘或远端把模型权重读入并初始化到显存所需的总时间。
- 取正操作\(\max(0, \cdot)\) 保证窗口不为负——若加载耗时比剩余时间还长,说明已经来不及预热,只能等请求来了硬扛冷启动。
版本与一致性
AI 借阅馆的“书”是会修订的:算法团队每周发布新的模型权重,就像出版社出新版教材。如果管理员还按老习惯把旧书摆上桌,读者拿到手的可能是一本过时的答案。缓存系统最怕脏数据——缓存里的模型和线上最新的版本不一致。解决思路和图书馆的“下架流程”一致:给每个模型带上“版次”标识,每次发布新版本时,按标识找到旧版本并作废。
具体做法有三层保障。第一层是版本号:模型 ID 后面拼上版本号作为缓存键,比如 bert-202501-v3,版本不同天然不共享缓存。第二层是哈希指纹:对模型权重文件计算哈希值,部署时比对哈希,发现权重变了就强制刷新——这能防止“版本号没变但文件内容被悄悄替换”的意外。第三层是 TTL(生存时间):给缓存条目设置一个过期期限,到期后不管是否还有人用都重新校验。一个缓存条目是否有效,可以写成:
版本一致性还有一个容易忽略的细节:灰度发布。新版本模型上线时,通常会先让 5% 的流量打到 V2,95% 继续走 V1。此时缓存里必须同时保留 V1 和 V2 两份权重,等灰度到 100% 后再整体清掉旧版本。管理员在过渡期要“两本书都摆在桌上”,这正是版本号缓存键设计的意义所在。
- 版本匹配指示器\(\mathbb{1}[v_{cache} = v_{current}]\),当缓存中的版本号与当前线上版本号相等时取 1,否则取 0。
- TTL 指示器\(\mathbb{1}[age < TTL]\),缓存条目的存在时间小于设定的过期阈值时取 1,说明它还“保鲜”。
- 布尔与两个指示器的乘积意味着只有同时满足才有效——版本对上了但放太久,要重新校验;没过期但版本已变,更要立即作废。
内存资源治理
管理员的桌面再大也是有限的,而且有个讨厌的现象:书桌被大大小小的书占满后,就算腾出了“总空间”,也可能找不到一整块够大的空位放一本新的大书——这就是显存碎片化。GPU 显存被不同类型、不同大小的模型瓜分,反复加载和卸载后,空闲区域像被啃过的披萨一样七零八落。一块 30GB 的显存可能显示还有 6GB 空闲,但因为最大连续块只有 4GB,一个 5GB 的新模型照样加载失败。
治理碎片的第一步是量化。碎片率的定义很直观:
治理手段和管理员整理书桌一模一样:集中摆放、预留专区、同类合并。对显存而言,一是为常驻的大模型预留固定区域,避免和临时模型抢空间;二是把同尺寸的模型分配到同一块连续区域,减少参差不齐的缝隙;三是多个小模型共享一个“内存池”,在池内做紧凑排布。多模型隔离也很重要——不能让一个模型的内存泄漏拖垮整张卡上的邻居,就像书桌上要用隔板挡住那本会“掉渣”的旧书。
- 最大连续空闲块\(M_{max\_contiguous}\) 表示显存所有空闲区域里最大那一块的字节数,它决定了能容纳的最大模型。
- 总空闲容量\(M_{free\_total}\) 是所有零散空闲区域之和,是“看上去”的可用空间。
- 碎片程度两者比值越接近 1,碎片的浪费越小;反之比值接近 0,说明绝大多数空闲空间都是无法利用的“碎渣”。
监控与指标
管理员怎么知道自己的整理策略好不好?不能凭感觉,要靠账本。缓存的账本有几个核心指标。命中率(Hit Rate) 是最直观的健康度指标:读者每 10 次借书里有几次能直接从桌上拿到。它的计算很朴素:
命中率不是唯一指标,甚至不是最重要的指标。管理员更该盯的是冷启动耗时:一次“从总馆调书”要多久?这个值直接决定了用户在小流量突增时会不会卡顿。如果命中率高达 95%,但剩下 5% 的冷启动请求每次要拖 40 秒,服务依然会出事故。另一个必盯指标是资源水位:显存占用率、内存占用率、缓存淘汰次数。当水位逼近阈值时,要提前告警,并触发“降级预案”——比如主动释放低优先级模型,而不是等 OOM 把服务打垮。
监控数据的落点也很有讲究:不能只汇总平均值,要看分位数。P99 冷启动延迟比平均值更能反映用户的真实体验——就像管理员不能因为“平均等书时间只有 1 秒”就忽视周末高峰期那批等了 5 分钟的读者。
- 命中次数\(H_{it}\) 是统计窗口内模型在 L1 或 L2 命中的请求总数。
- 未命中次数\(M_{iss}\) 是全部层级都未命中、必须冷加载的请求总数。
- 比率两者之和就是总请求数,命中数占总数的比例就是命中率,取值范围 0 到 1。
云原生落地
当 AI 借阅馆从单店变成连锁(多节点 K8s 集群),管理员的活儿就更复杂了:每个分店(节点)都有自己的“桌面和前台”,但读者(请求)会被调度器随机分到任意分店。如果调度不考虑缓存位置,就会出现一种尴尬:A 店的桌上明明摆着读者要的书,调度器却把读者领到了 B 店,B 店只能从总馆重新调书——缓存完全白做了。
解决思路叫缓存亲和调度:调度器在分配 Pod 时,优先选择那些已经缓存了目标模型的节点。就像总台打电话时会先问一句“哪家分店有这本书?”,然后直接把读者引过去。用 K8s 的术语说,就是给节点打上“已缓存模型 ID”的标签,Pod 通过 nodeAffinity 和 topologySpreadConstraints 实现亲和与打散。副本规模的估算也有公式可依:假设每秒打到服务的总请求量为 \(\lambda_{total}\),单个副本每秒能处理的推理请求数为 \(\mu_{single}\),那么:
云原生还给缓存管理带来了弹性扩缩容的便利:流量低峰时缩容副本,释放出来的 GPU 让给离线训练任务;高峰前提前扩容,同时触发预加载把模型铺到新节点上。缓存节点的状态通过 Kubernetes Operator 统一管理,配合监控指标自动决策——管理员从“人肉搬书”升级成了“智能调度系统”,让每一块显存都物尽其用。
- 总请求速率\(\lambda_{total}\) 是业务高峰期的每秒推理请求总数,来自压测或流量预测。
- 单副本吞吐\(\mu_{single}\) 是一个模型副本在给定批次大小和显存条件下每秒能处理的请求数。
- 向上取整\(\lceil \cdot \rceil\) 保证副本数是整数且至少能满足峰值流量,实际部署时还会乘以 1.2~1.5 的冗余系数。
AI 应用场景
场景一:大模型 API 网关的多模型冷启动优化
阶段:推理服务架构设计
解决的问题:一个面向企业的模型 API 平台通常同时托管几十个模型(GPT、BERT、自研推荐模型等)。传统做法是每个模型常驻一个 GPU 实例,显存成本爆炸;不常驻又导致用户首次请求要等几十秒冷启动。通过两级缓存 + LRU 淘汰 + 预测预加载,平台可以把冷启动延迟从 30 秒压到 1 秒以内,同时让显存利用率提升 3 倍以上。
具体案例:某 AI 云厂商的文本审核 API,平时流量集中在 4 个审核模型上,但偶尔会有长尾模型被调用。平台按 LRFU 策略在 GPU 上保留 3 个最热模型,其余模型从内存缓存加载;同时根据每小时的业务曲线,提前 5 分钟预加载即将进入高峰的模型。结果 P95 首次请求延迟从 28 秒降至 0.9 秒。
场景二:金融风控模型灰度切换
阶段:版本管理与一致性保障
解决的问题:反欺诈风控模型每周更新,旧版缓存若不清除,会继续用旧权重打分,造成误判。通过“版本号 + 哈希指纹”双重校验,新模型灰度上线时新旧版本共存,流量逐步切换,全量后自动作废旧缓存,整个过程零人工干预。
具体案例:某银行实时交易风控系统,模型从 V12 升级到 V13 时,平台先用 5% 流量验证新模型效果,期间两个版本共享 GPU 显存;验证通过后把流量切到 100%,并立刻释放 V12 占用的 4GB 显存。整个切换期间,交易审核的 P99 延迟保持稳定。
场景三:边缘节点的多租户推理缓存
阶段:云原生资源调度
解决的问题:在 Kubernetes 集群中,多个业务团队共享 GPU 节点池。若 Pod 被调度到没有缓存的节点,模型要重新加载,拖慢上线速度。通过缓存亲和调度,让新 Pod 优先落在已有该模型缓存的节点上,同时用弹性扩缩容缩掉空闲副本。
具体案例:某视频平台的画质增强服务跑在 20 个 GPU 节点上,部署了 5 个不同模型。启动缓存亲和策略后,新发布的服务版本在 10 秒内完成模型预热(原来需要 3~5 分钟),节点平均显存占用下降了 40%。
Python 演示
from collections import OrderedDict class ModelCache: """单层 LRU 缓存模拟器,OrderedDict 保证最近使用在前""" def __init__(self, capacity): self.capacity = capacity self.cache = OrderedDict() def get(self, model_id): if model_id in self.cache: self.cache.move_to_end(model_id) return True return False def put(self, model_id): if model_id in self.cache: self.cache.move_to_end(model_id) else: self.cache[model_id] = True if len(self.cache) > self.capacity: self.cache.popitem(last=False) class InferenceServer: """两级模型缓存推理服务模拟器""" def __init__(self, l1_capacity, l2_capacity): self.l1 = ModelCache(l1_capacity) self.l2 = ModelCache(l2_capacity) self.hit = 0 self.miss = 0 def request(self, model_id): if self.l1.get(model_id): self.hit += 1 return "L1 命中" if self.l2.get(model_id): self.hit += 1 self.l1.put(model_id) return "L2 命中,提升到 L1" self.miss += 1 self.l1.put(model_id) self.l2.put(model_id) return "全程未命中,冷加载" def hit_rate(self): total = self.hit + self.miss return self.hit / total if total else 0.0 def simulate(requests, l1_cap=3, l2_cap=5): server = InferenceServer(l1_cap, l2_cap) for req in requests: server.request(req) return server def main(): # 请求序列:0~5 代表 6 个不同的模型,数字越大越冷门 requests = [0, 1, 2, 3, 1, 4, 2, 0, 5, 1, 3, 2, 4, 0, 5, 1, 2, 3] server = simulate(requests) print("请求总数:", len(requests)) print("命中次数:", server.hit, "未命中:", server.miss) print("基础命中率: {:.2%}".format(server.hit_rate())) # 验证预加载效果:把未来最热的 1/2/3 号模型提前放入 L1 warmed = simulate(requests) for m in [1, 2, 3]: warmed.l1.put(m) print("预加载后命中率: {:.2%}".format(warmed.hit_rate())) if __name__ == "__main__": main()
self.cache = OrderedDict()用有序字典实现 LRU,键的顺序即“最近使用”顺序,尾部是最久未用。self.cache.move_to_end(model_id)命中时把模型挪到尾部(最近端),实现“刚用的书放最上面”。self.l1.get(model_id)L1 显存命中则直接返回,命中计数加一。self.l2.get(model_id)L1 未命中但 L2 命中,视为命中并把模型提升到 L1。self.miss += 1两层都没命中,此时必须冷加载,并同时写入 L1 和 L2。warmed.l1.put(m)模拟“预加载”:在请求开始前把预测会热的模型预先放入 L1,相当于管理员提前把热书摆上桌。"{:.2%}".format(server.hit_rate())把浮点命中率格式化为百分比字符串,便于观察。
常见误区
误区显存反正不用白不用,把能装的模型全都塞进 L1 缓存,命中率肯定最高,系统性能自然最好。
正解缓存容量提升伴随着边际收益递减,甚至可能是负收益。L1 满载后,GPU 显存耗尽会引发内存换页或分配失败,新模型加载直接报错;而且大缓存意味着淘汰延迟变高,每来一个新请求都要在巨大的缓存集合里做 LRU 更新。就像书桌堆满了书,读者要的书反而被埋在下面,翻找时间比去前台拿还长。缓存容量应依据模型热度的实际分布来设定,通常以覆盖 80%~90% 的流量为准。
为何常见:人们容易把“缓存”和一个单纯放大容量就能变好的“存储”混为一谈,忽略了缓存的查表开销和管理成本。
误区LRU 实现简单、生态成熟,所以无脑用 LRU 就行;也有人觉得 LFU 更能反映“真实热度”,应该全面换用 LFU。
正解两种策略各有致命盲区。LRU 会被“突发但不再重复”的一次性流量干扰——一个大模型被偶然调一次就被顶到最前,挤掉了真正高频的模型;LFU 则会让“曾经热门、如今冷清”的模型长期占坑。线上流量既有突发又有周期,更稳妥的做法是用 LRFU 混合评分,或者做两层异构:L2 用 LFU 过滤长期热点,L1 用 LRU 追踪短期动向。
为何常见:学习时往往把缓存策略当成单选题来记,忽略了真实系统里“混合 + 分层”才是常态。
误区服务启动时把模型列表里的所有模型都加载一遍,预加载工作就算完成了,后面可以不再关心。
正解预热是“一次性动作”还是“持续机制”,取决于模型的更新周期。模型版本每次发布,旧缓存就要作废、重新加载;节点重启后显存清空,也需要重新预热;业务流量发生季节性变化后,之前的热门模型可能不再热门。因此预加载必须与版本管理、调度生命周期绑定,做成平台能力,而不是部署脚本里的一个初始化步骤。
为何常见:把“预热”理解成了静态的配置加载,忽略了缓存的生命周期是跟随模型版本和请求模式动态变化的。
误区缓存优化的目标就是把命中率做到 100%,命中率越高说明系统越好。
正解命中率只是中间指标,最终目标是“在显存预算内让体验和成本达到平衡”。为了最后 5% 的命中率,可能需要把显存翻倍、挤占推理的批处理空间,反而拖慢整体吞吐。正确做法是给每个模型算“价值分”:加载成本高的、调用频率高的、对延迟敏感的模型优先保缓存;低价值模型直接走冷加载。有时候 92% 的命中率比 97% 更合理——省下的显存能让批处理更大,吞吐更高。
为何常见:指标驱动文化下,大家容易把单一数字当成北极星,忽略了它是多个约束下的最优解。
面试题
Q1. 在缓存分层架构中,L1 模型缓存通常部署在哪个硬件层?
- A.GPU 显存中加载← 正确答案
- B.宿主机内存区
- C.本地 NVMe 磁盘
- D.远端对象存储区
答案:A。L1 是离计算核心最近的层级,对应 GPU 显存,读取时延在微秒级;内存是 L2,磁盘和对象存储则属于更慢的 L3。选项 A 正是“阅读桌”的位置。
Q2. LRU 策略淘汰模型时,优先驱逐的是哪一类模型?
- A.最久未被使用的模型
- B.使用次数最少的模型← 正确答案
- C.权重体积最大的模型
- D.加载时间最长的模型
答案:B。LRU 全称 Least Recently Used,核心是“最近最少使用”,按最后访问时间排序,最久没被用的先淘汰。B 是 LFU 的标准,C 和 D 属于代价感知策略的考量因素。
Q3. L1 命中率 80%,L2 命中率(针对 L1 未命中部分)为 90%,L1 与 L2 读取耗时均为 0.1ms,磁盘加载耗时 100ms,则平均请求时延约为多少?
- A.0.1 毫秒
- B.0.9 毫秒
- C.2.1 毫秒← 正确答案
- D.10.2 毫秒
答案:C。T = 0.8×0.1 + 0.2×0.9×0.1 + 0.2×0.1×100 = 0.08 + 0.018 + 2 = 2.098ms ≈ 2.1ms。可见即使 98% 的请求被缓存挡住,剩余 2% 的磁盘加载仍主导了平均时延。
Q4. 预加载机制最适合在什么时机触发?
- A.流量洪峰到来之前← 正确答案
- B.服务整体停机维护时
- C.缓存空间完全清空后
- D.模型权重训练过程中
答案:A。预加载的目的是把模型加载时间藏到业务请求到达之前,所以应在预测的流量高峰来临前启动加载。停机维护时没有请求可服务,清空缓存后再加载属于被动补救,训练过程中模型还没定稿,预加载反而浪费资源。
Q5. 模型版本更新后,可用的缓存失效方式有哪些?
- A.版本号拼接缓存键← 正确答案
- B.模型哈希指纹比对← 正确答案
- C.定期清理全部缓存← 正确答案
- D.永久保留旧版权重
答案:ABC。版本号作为缓存键的一部分,新版本天然不共享旧缓存;哈希指纹能识别权重文件内容变化,是最可靠的校验手段;定期清理属于兜底策略,简单但会牺牲命中率。永久保留旧版权重会持续占用显存,是错误做法。
Q6. 显存碎片率为 0.4,下列说法正确的是?
- A.40% 空闲显存难容纳大模型← 正确答案
- B.加速卡利用率仅为四成左右
- C.模型推理吞吐量下降四成
- D.缓存命中率预计降低四成
答案:A。碎片率 = 1 - 最大连续空闲块 / 总空闲容量。碎片率 0.4 意味着 40% 的空闲空间以零散小块存在,无法容纳一个完整的大模型,并不代表利用率或吞吐量成比例下降。
Q7. 多模型推理服务的冷启动延迟主要来自哪个环节?
- A.从远程仓库拉取权重← 正确答案
- B.客户端网络重传数据
- C.用户输入的序列长度
- D.监控日志的采集频率
答案:A。冷启动的本质是模型权重不在任何缓存层中,必须从远端对象存储或磁盘加载到显存,耗时数秒到数十秒。其余选项与模型加载无关。
Q8. 云原生环境部署推理服务时,缓存亲和调度应考虑哪些因素?
- A.GPU 驱动与架构的兼容性← 正确答案
- B.节点上已有的模型缓存← 正确答案
- C.区域间的网络链路延迟← 正确答案
- D.只追求最低的机器成本
答案:ABC。亲和调度要让 Pod 落在“能最快用上缓存”的节点:GPU 型号必须匹配、节点已缓存目标模型优先、跨区域网络延迟要低。只追求低成本可能把 Pod 调到无缓存的节点,反而引入冷启动开销。
Q9. 关于缓存命中率与业务收益的关系,正确的认识是?
- A.命中率越高系统一定越优
- B.应结合模型加载成本评估← 正确答案
- C.请求量少时仍要追求命中率
- D.命中率无法反映用户体验
答案:B。命中率是手段不是目的。提升命中率需要消耗显存资源,必须结合模型加载成本、批处理收益综合评估。低峰期请求稀疏,命中率意义不大;命中率也直接关系冷启动体验,D 明显错误。
Q10. 关于 LRFU 混合评分策略,正确的说法是?
- A.权重接近 1 时近似 LRU← 正确答案
- B.权重接近 0 时近似 LFU← 正确答案
- C.权重固定后评分不再变化
- D.需要记录请求的历史信息← 正确答案
答案:ABD。LRFU 将“最近使用时间”与“历史使用频率”加权求和,α 接近 1 时 recency 主导、行为近似 LRU;α 接近 0 时 frequency 主导、近似 LFU。无论 α 取什么值,评分都会随新请求到来而动态更新,因此 C 错误;混合评分必然要记录每个模型的历史访问信息,D 正确。