想象你是位经常出差的宴会策划师:云端那位米其林大厨手艺一流,但每道菜都要等配送,后厨远在千里之外,网络一抖就上不了菜。于是你口袋里多了一位随身小厨——他反应快、记得住你口味、还能做同声传译,唯一的缺点是双肩包容量有限。这位随身小厨,就是端侧LLM:一个直接跑在手机、耳机、车机上的大语言模型。今天的故事围绕他拿手的三道菜展开:输入法推荐像小厨的读心术,你嘴刚张开他就递来盐罐;智能助手像小厨的私房记事本,你说过的话他都记着;实时翻译像小厨的同声传译,绝不让宴会上冷场。你还会看到,为了把这三道菜稳稳装进小厨的口袋,工程师们做了哪些“食材预处理”——量化、剪枝、蒸馏,一样不少。

岗位关联

学完这篇,你将能对端侧LLM三大场景的延迟预算、资源约束与优化手段建立完整直觉,在移动端AI项目中做出产品与工程双赢的决策。

目录
  1. 可视化演示
  2. 输入法即时响应——小厨的“读心速记台”
  3. 助手多轮对话——小厨的“私房记事本”
  4. 翻译流式低延迟——小厨的“同声传译窗”
  5. 资源约束挑战——小厨的“口袋与体力”
  6. 端侧部署优化——小厨的“食材预处理”
  7. 落地实践指南——小厨的“排班表”
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示读未提交、读已提交、可重复读、串行化四种隔离级别下两个并发事务的交互行为,直观对比脏读、不可重复读、幻读问题。

本节配有交互动效(进入视口后自动加载,约 3KB)。

读未提交 (Read Uncommitted) T2可以读取T1未提交的数据 导致脏读问题 隔离级别:0 最低隔离级别,性能最高但数据一致性最弱

输入法即时响应——小厨的“读心速记台”

小厨最拿手的第一道菜,是读心术。你刚张嘴,还没来得及说出“盐”,他已经把盐罐递到你手上。手机输入法里的端侧LLM就是这么干的:你才敲出“jin tian“几秒,候选栏已经跳出”今天”“今年”“金田”——不是它聪明,而是它一直站在你手指边,等你一个眼神。

把镜头拉远一点,你就能看清输入法的本质矛盾:用户打字是高频打断式交互,每敲一两个字母就盼着候选词。人等待的耐心是按“帧”计算的,一旦超过零点几秒,就会觉得“卡”。云端的LLM当然也能做这个活,但请求要坐一趟“网络电梯”去云端转一圈——这趟电梯本身就要几十到几百毫秒,端侧模型则把电梯拆了。

于是,端侧输入法LLM的技术方案就清晰了:一个轻量模型常驻App进程,用户每输入一个拼音前缀,模型就做一次“下一个词预测”,输出Top-K候选。为了把时间压进预算,工程师用三招:一是免网络传输,省掉往返;二是预计算加速,把常用前缀的编码结果提前算好;三是词级流式预测,只预测接下来一两个词而不是整句。

T总T_{\text{总}}为整体预算

小厨为什么能读心?因为他就在你手边,动作快,而且不用跑出厨房去问大厨——端侧推理正是把“跑出去取食材”这一步整个省掉了。这道菜的秘诀不是菜多好,而是“距离产生速度”。

T总=T编码+N×T解码+T传输T_{\text{总}} = T_{\text{编码}} + N \times T_{\text{解码}} + T_{\text{传输}}
这个公式是输入法场景的“上菜倒计时”:从你按下键盘到候选词出现,全程预算通常要求控制在100毫秒以内。
  1. 总延迟预算 T_total从手指按下到候选词出现在屏幕上允许的总时间,输入法场景通常要求控制在100毫秒内,超过人就会觉得卡顿。
  2. 编码阶段 T_编码把输入的前缀转换成模型内部向量表示,一次推理只做一次;用预计算可以部分跳过。
    T编码T_{\text{编码}}
  3. 解码阶段 N×T_解码逐个生成N个候选词并按概率排序,是延迟预算的大头,也是优化主战场。
    N×T解码N \times T_{\text{解码}}
  4. 传输阶段 T_传输请求去云端再回来的网络耗时,端侧LLM直接把这部分归零。
    T传输T_{\text{传输}}

助手多轮对话——小厨的“私房记事本”

小厨的第二道菜,靠的是他的私房记事本。上次你随口说“下周要请客户吃素”,他悄悄记下;今天你问他“晚宴准备什么”,他开口就是“按您上次说的,准备素宴如何?”——这不是读心,这是记事。智能助手要做的,就是这种跨越好几轮的“记得住”。

但小厨的记事本有个硬伤:纸就那么几页。大语言模型的上下文窗口就是这本记事本的页数,它不可能无限长大。你问一句他答一句,历史消息越积越多,记事本总有写满的一天。更麻烦的是,每多记一页,他翻本子的时间就多一分——对应到技术上,prompt越长,编码耗时越长,响应就越慢。

工程师的解决办法是“分层记账”:保留最近几轮完整对话,确保当下的上下文连贯;更早的内容则压缩成摘要,叫“记忆压缩”;同时给每次对话打上任务标签,比如“订餐”“定行程”,让助手知道该翻哪一页。这样,助手既记得住你上周的口味,又不会被泛黄的旧账拖慢速度。

小厨的记事本从不贪多,他只留最近几页写满,旧页都撕下来烧成“摘要灰烬”揣在兜里。聪明的助手也一样:它清醒地知道,记得住该记得的,比什么都记得更专业。

St=Trim(Concat(St−1, At−1, Ut), Lmax⁡)S_t = \text{Trim}\left( \text{Concat}(S_{t-1},\ A_{t-1},\ U_t),\ L_{\max} \right)
多轮对话的核心不是“记住一切”,而是在有限的上下文窗口里“优雅地取舍”。
  1. 上一轮状态 S_t-1助手心里累积到上一轮为止的对话脉络,相当于记事本已写的部分。
    St−1S_{t-1}
  2. 上一轮回答 A_t-1助手自己刚说过的话也要计入历史,不然会忘记自己承诺过什么。
    At−1A_{t-1}
  3. 当前提问 U_t用户此刻新说的话,是这一轮必须优先处理的内容。
    UtU_t
  4. 拼接后裁剪 Trim把三者拼在一起后,如果超过窗口上限L_max,就用摘要或截断压缩旧内容,保住最新信息。
    Trim(⋅,Lmax⁡)\text{Trim}(\cdot, L_{\max})

翻译流式低延迟——小厨的“同声传译窗”

第三道菜是压轴戏。宴会上来了位只说英语的客人,他刚开口说“Good morning,各位…”,小厨已经凑到你耳边:“他说早上好,还有各位……”——这就是同声传译:话没说完,译文已经跟上。翻译最怕的是冷场,对方说一句,你愣三秒才听到翻译,整个交谈节奏就断了。

云端翻译也是这个道理:如果请求要飞上云端再飞回来,等译文回来时,对方已经快说到下一句了。端侧LLM做翻译的优势在于“近距离作战”,但光有距离还不够,还要换一种输出方式——流式。传统翻译是“听完整句再译”,像记者会后整理发言稿;流式翻译则是“边听边译”,语音被切成几百毫秒的小片,每来一片就增量刷新一次译文。

技术链路上,端侧翻译耳机通常是:语音分片 → 端侧语音识别(ASR)→ 增量编码 → 流式解码 → 逐片吐出译文。这里有个关键指标叫“尾延迟”:从说话人语音结束,到最后一个字的译文显示出来,这段等待越短,交谈越自然。工程师还会做质量与速度的权衡:允许译文前几版粗糙,随后用增量修正让翻译“越说越准”。

小厨的同传本事不是他语速快,而是他“不等你说完就开始翻”。这种“永远比你快半步”的节奏,才是实时翻译的灵魂:让对话像溪水一样不断流。

L口译=E译文产出−E语音结束<T感知阈值L_{\text{口译}} = E_{\text{译文产出}} - E_{\text{语音结束}} < T_{\text{感知阈值}}
实时翻译比拼的不是谁翻译得更“优雅”,而是谁能让用户几乎感觉不到“这是在翻译”。
  1. 语音结束时刻 E_语音结束说话人说完一个分句的时间点,是计时起点。
    E语音结束E_{\text{语音结束}}
  2. 译文产出时刻 E_译文产出该分句译文最后一个词显示出来的时间点。
    E译文产出E_{\text{译文产出}}
  3. 口译尾延迟 L_口译两者相减,就是用户等译文的“冷场时长”。
    L口译L_{\text{口译}}
  4. 感知阈值 T_感知阈值人类能接受的无感延迟上限,通常认为在300毫秒左右,超过就会察觉卡顿。
    T感知阈值T_{\text{感知阈值}}

资源约束挑战——小厨的“口袋与体力”

小厨再好,也只有一个双肩包——这是端侧LLM逃不掉的宿命。云端大模型可以住在有几十GB显存、有空调机房、有无限电力的“米其林后厨”里;端侧模型却要挤在手机的角落里,和所有App抢内存,靠一块小小的电池过活,还没有风扇给它散热。

先看内存:一个模型要被塞进手机,它占的空间由三块构成——模型参数(权重)、推理过程中的KV缓存(记录已经算过的历史token)、还有每层神经网络的中间激活值。翻译会话持续一小时,KV缓存就像小厨记菜名的便签纸,越攒越厚;助手的多轮对话也一样,聊得越久缓存越肥;输入法则相反,每次任务短小精悍,但极其高频,像小厨一晚上被叫去递调料五百次。

再看算力和功耗:手机处理器(NPU)的算力远不及云端GPU,模型每一层都要精打细算地跑;连续翻译时芯片持续高负荷,发热会让手机降频,速度反而更慢。这三个约束——内存、算力、功耗——构成了端侧LLM的“三角牢笼”,三个场景在里面各有各的苦衷:输入法怕内存碎片、助手怕KV缓存膨胀、翻译怕持续发热降频。工程师的一切技巧,本质上都是在三角牢笼里腾挪。

小厨的背包只有那么大,所以每次出门前他都要做选择题:带多少食材、带几本记事本、带多少冰块(翻译要保鲜)。懂得取舍,才是端侧工程的第一课。

M总=M权重+MKV缓存+M激活值M_{\text{总}} = M_{\text{权重}} + M_{\text{KV缓存}} + M_{\text{激活值}}
端侧LLM的优化,就是让这三块“行李”加起来不超过设备的“行李箱”容量,同时还不把电池烧穿。
  1. 权重内存 M_权重模型参数本身占的空间,与参数量成正比,是可以通过量化压缩的大头。
    M权重M_{\text{权重}}
  2. KV缓存内存 M_KV缓存推理过程中为每个已生成token保存的键值对,随对话轮数或翻译时长持续增长。
    MKV缓存M_{\text{KV缓存}}
  3. 激活值内存 M_激活值前向计算中每层产生的临时中间张量,峰值出现在长序列输入时。
    M激活值M_{\text{激活值}}
  4. 总内存 M_总三者之和必须小于设备可用内存,否则App直接被系统杀掉。
    M总M_{\text{总}}

端侧部署优化——小厨的“食材预处理”

为了让小厨的背包装下更多东西,聪明的做法是“预处理”:他每天晚上把肉切成丝、腌入味、分装成小袋,早上直接背上就走。模型部署到端侧前的那一套流程,就是这种预处理——目标只有一个:让模型“恰好装进口袋,还能跑得动”。

第一招是量化压缩。大模型参数默认用32位浮点数存储,像用大行李箱装菜;工程师把它换成8位甚至4位的整数,相当于把每份菜都抽真空压扁,体积立刻缩小到原来的四分之一甚至八分之一。第二招是剪枝,把模型里作用不大的连接“剪掉”,像把用不上的调味料留在家里;第三招是知识蒸馏,让云端的大模型当老师,手把手教一个小模型学会它的本事——小厨的刀工未必有大厨好,但专切那几道菜已经够用。

第四招是KV缓存复用,这是实打实的运行加速:上一轮已经算过的历史token结果缓存下来,下一轮直接调用,不再重复计算。最后一招是框架适配,把模型算子替换成手机NPU认识的方言,就像把菜谱翻译成小厨的母语。四招合并,模型才能从容不迫地在这巴掌大的芯片上“掌勺”。

小厨的菜之所以上得快,不是因为他在厨房里手忙脚乱,而是因为他昨晚已经把一切备妥。聪明的工程是把功夫花在“上场之前”,让每一次推理都轻装上阵。

w^=round(ws)×s,s=max⁡∣w∣2b−1−1\hat{w} = \text{round}\left( \frac{w}{s} \right) \times s, \qquad s = \frac{\max |w|}{2^{b-1}-1}
量化就是用更粗糙的档位去近似原味:牺牲一点精度,换来体积和速度的大幅提升。
  1. 量化步长 s把连续权重映射到离散整数档位的“刻度尺”,由最大权重的绝对值除以档位数决定。
    s=max⁡∣w∣2b−1−1s = \frac{\max |w|}{2^{b-1}-1}
  2. 取整 round(w/s)原始权重除以步长后四舍五入到最近的整数,完成从浮点到整数的映射。
    round(ws)\text{round}\left( \frac{w}{s} \right)
  3. 还原近似权重整数乘回步长,得到与原始权重近似但存储更省的值,这就是量化后的模型参数。
    w^=round(ws)×s\hat{w} = \text{round}\left( \frac{w}{s} \right) \times s

落地实践指南——小厨的“排班表”

故事的最后,小厨要开一周的菜单了。他得根据场合决定带什么:周一的日常便当要快,周末的西餐晚宴要精,出差的翻译任务要稳。落地端侧LLM也一样,第一步永远是“场景选型”——根据业务对速度、记忆、隐私、离线的真实需求,决定用多大的模型、优化到什么程度。

三场景的选型矩阵大致如下:输入法最看重实时性,延迟预算最紧,但任务独立、无需历史,适合超小模型加预计算;智能助手看重连续性和记忆深度,需要中等模型配合上下文管理和记忆压缩;实时翻译看重持续低延迟和稳定性,需要流式解码和语音识别的协同,对模型要求最高。评测指标也要分场景:输入法看候选词延迟和命中率,助手看多轮任务完成率和上下文一致性,翻译看尾延迟和译文质量。

迭代流程则是“基线→评测→优化→再评测”的循环:先用一个开源小模型做基线,跑通全流程;用评测数据找出瓶颈(是编码慢还是解码慢?是内存超了还是功耗爆了?);再针对性地量化、蒸馏、改算子;每一轮优化都拿同一套评测集对比,绝不拍脑袋调参。

小厨的排班表从不贪心:他知道自己不是米其林大厨,但选对了场景、备好了菜,照样能让客人竖起大拇指。端侧LLM的落地之道,就是这句朴素的大白话——先想清楚你要什么,再决定怎么优化。

场景得分=α⋅L延迟+β⋅Q质量+γ⋅R资源\text{场景得分} = \alpha \cdot L_{\text{延迟}} + \beta \cdot Q_{\text{质量}} + \gamma \cdot R_{\text{资源}}
落地没有万能解,只有“带着权重看场景”:不同场景对延迟、质量、资源的优先级不同。
  1. 延迟得分 L_延迟把响应时间归一化到0-1,越快得分越高,输入法场景给它的权重最大。
    L延迟L_{\text{延迟}}
  2. 质量得分 Q_质量人工或自动化评测的文本质量分,翻译和助手场景尤其看重。
    Q质量Q_{\text{质量}}
  3. 资源得分 R_资源内存占用越小、功耗越低得分越高,小内存设备上权重很大。
    R资源R_{\text{资源}}
  4. 加权求和三个权重α、β、γ由场景定位决定,加起来等于1,体现“什么最不能妥协”。
    α⋅L延迟+β⋅Q质量+γ⋅R资源\alpha \cdot L_{\text{延迟}} + \beta \cdot Q_{\text{质量}} + \gamma \cdot R_{\text{资源}}

AI 应用场景

手机输入法的智能联想与补全

阶段:端侧推理优化

解决的问题:传统输入法依赖固定词库和统计模型,对上下文理解弱,打错一个字就出不来想要的词;云端大模型效果好但网络延迟不可控。端侧LLM驻留本地后,词级流式预测把候选词延迟压到毫秒级,同时支持离线使用。

具体案例:某手机厂商在自带输入法中内置1B参数的端侧模型,用户在聊天框输入“明天开会要带”时,模型实时预测“电脑、投影仪、充电器”,并随打字逐词刷新候选。产品经理设定延迟预算为80毫秒,工程师通过预计算常用前缀编码和INT8量化,在旗舰机上实现流畅跟手。

车载语音助手的多轮指令管理

阶段:多轮对话管理

解决的问题:车机经常穿越隧道和山区,网络时断时续,云端助手一断网就“失忆”;且用户习惯连续下达指令。端侧助手通过上下文拼接和状态管理,在离线条件下也能记住“导航去机场”之后再问的“机场附近好停车吗”。

具体案例:一家车厂在车机中部署端侧助手,支持“帮我调低空调到24度”“顺便把座椅加热打开”这类连串指令。工程师把最近五轮对话保留在上下文中,更早的内容压缩成摘要,实测对话轮次从3轮提升到20轮以上,响应延迟稳定在200毫秒内。

端侧同传耳机的流式翻译

阶段:流式低延迟推理

解决的问题:出国商务谈判时,在线翻译App“说完一整句再译”的模式会造成大量冷场;且涉及机密内容时,语音上云有泄露风险。端侧流式翻译把语音分片后增量解码,译文像字幕一样追着声音走,数据全程留在耳机内。

具体案例:某翻译耳机创业公司将流式翻译尾延迟控制在300毫秒内,实测“中译英”对话中,用户感受不到明显等待。工程师采用ASR+LLM协同流水线,利用KV缓存复用避免重复编码,在蓝牙耳机芯片上实现了连续两小时翻译而不烫耳。

Python 演示

python46 行
import timeimport random  class TinyLLM:    """模拟一个运行在手机上的迷你语言模型"""     def __init__(self, max_hist=4):        self.history = []        self.kv_cache = {}        self.max_hist = max_hist     def _infer(self, prompt, n):        """模拟单次推理,返回按概率排序的候选词列表"""        time.sleep(0.005)  # 模拟端侧推理耗时        words = ["天气", "开会", "吃饭", "翻译"]        random.shuffle(words)        return words[:n]     def suggest(self, prefix, k=3):        """输入法场景: 给定拼音前缀, 返回k个候选词"""        return self._infer("prefix:" + prefix, k)     def chat(self, user_msg):        """助手场景: 拼接历史后生成回复"""        self.history.append("用户:" + user_msg)        prompt = "\n".join(self.history[-self.max_hist:])        reply = self._infer(prompt, 1)[0]        self.history.append("助手:" + reply)        return reply     def translate_chunk(self, speech_chunk):        """翻译场景: 每个语音分片到来时, 增量产出一段译文"""        self.kv_cache[len(self.kv_cache)] = speech_chunk        return "[译] " + speech_chunk + " -> " + self._infer(speech_chunk, 1)[0]  if __name__ == "__main__":    llm = TinyLLM()    t0 = time.time()    print("输入法候选:", llm.suggest("jin tian", 3))    print("助手第一轮:", llm.chat("帮我安排周二的会议"))    print("助手第二轮:", llm.chat("改到周三下午"))    print("翻译输出:", llm.translate_chunk("Good morning"))    print("翻译输出:", llm.translate_chunk("everyone"))    print("总耗时(ms):", round((time.time() - t0) * 1000, 1))
目的:用50行代码模拟端侧LLM三大场景的调用模式,直观对比“短任务、多轮记忆、流式增量”三种代码结构。
  1. time.sleep(0.005) # 模拟端侧推理耗时模拟每一次推理的固定耗时,端侧推理虽然快,但也不是零开销。
  2. self.history.append("用户:" + user_msg)助手场景把用户消息写入历史,这就是“记事本”的一行。
  3. prompt = "\n".join(self.history[-self.max_hist:])只保留最近几轮,实现上下文窗口的“裁剪”,对应公式中的Trim。
  4. reply = self._infer(prompt, 1)[0]从候选词里取最高概率那个作为助手回复。
  5. self.kv_cache[len(self.kv_cache)] = speech_chunk翻译场景把每个语音分片存进缓存,模拟KV缓存的持续累积。
  6. return "[译] " + speech_chunk + " -> " + ...每来一个语音分片就产出一段译文,这就是“边说边译”的流式结构。

常见误区

误区手机上的模型才几个参数,和云端几百亿参数的大模型比,生成质量肯定没法看,端侧LLM就是个玩具。

正解端侧LLM面向的是“窄而专”的任务:输入法只做下一个词预测,翻译只做短句中转,助手只做清单类问答。经过知识蒸馏和任务精调,小模型在特定场景的表现可以逼近云端大模型,还换来零延迟、离线可用、隐私不出手机。拿全能大模型的尺子量专用小模型,本身就是用错了尺子。

为何常见:人们习惯了云端大模型的“什么都会”,容易忽略“专而精”在垂直场景里的真实价值。

误区把开源的LLaMA下载下来,写个推理demo就能怼到手机上跑,跟电脑上跑一模一样。

正解原始模型动辄几个GB,推理时还要占用额外内存存KV缓存和激活值,直接塞进手机必然闪退。必须先做INT8/INT4量化、剪枝、算子替换(把GPU算子换成手机上NPU认识的算子),再配合内存池和缓存复用优化,才可能流畅运行。这是一个系统的工程,不是“下载即用”。

为何常见:开发者在电脑上跑通demo后,误以为手机和电脑的硬件差异可以忽略。

误区上下文越长助手记得越多,把用户所有历史消息都拼进prompt不就行了,干嘛要压缩?

正解上下文窗口有硬上限,而且prompt每长一截,编码耗时几乎线性增加,聊到后半段会明显变卡。正确做法是保留最近几轮完整对话,更早的内容做摘要压缩(记忆压缩),必要时用外部存储按需召回——这正是“记事本要撕旧页”的道理。

为何常见:云端API的示例代码看起来就是不断拼接messages,让人误以为拼接是万能的。

误区只要把整句话快速翻译完,就算“实时”了,流式输出只是个营销噱头。

正解流式的本质是“边说边译”,用户在语音结束前就能看到部分译文;等整句说完再翻的“快速翻译”仍保留整句的尾延迟,交谈节奏依然会断裂。端侧翻译产品拼的就是增量输出的颗粒度和300毫秒内的尾延迟,这决定了“冷场感”是零还是一秒。

为何常见:人们习惯把翻译当成“提交-等待-拿完整结果”的同步接口,没想过异步增量输出的可能。

面试题

Q1. 端侧LLM相比云端LLM最核心的优势是什么?

单选题 · easy

  • A.模型参数规模更大
  • B.无网络依赖响应更快← 正确答案
  • C.生成文本质量更高
  • D.训练所需数据更少

答案:B。端侧LLM跑在本地,请求不必坐“网络电梯”往返云端,因此延迟更低且离线可用。参数规模大、生成质量高恰恰是云端大模型的长处,端侧在这两方面通常更弱,故选B。

Q2. 输入法场景对候选词返回时间的核心要求是什么?

单选题 · easy

  • A.秒级响应即可满足
  • B.分钟级响应即可满足
  • C.毫秒级响应才能接受← 正确答案
  • D.小时级响应也能接受

答案:C。打字是高频打断式交互,用户等待候选词的耐心以帧计算,超过几十到一百毫秒就会觉得卡。正如随身小厨递盐罐不能让你等半天,输入法延迟预算必须在毫秒级。

Q3. 实时翻译采用流式输出的主要目的是什么?

单选题 · easy

  • A.让译文与语音同步呈现← 正确答案
  • B.让模型参数快速缩小
  • C.让译文质量大幅提升
  • D.让网络传输完全取消

答案:A。流式翻译的核心是“边说边译”,语音分片到达就增量产出译文,让用户感受不到冷场。它并不改变模型参数规模、不直接提升译文质量,也不是取消网络传输的前提。

Q4. 端侧LLM运行时的内存占用主要由哪些部分构成?

多选题 · mid

  • A.模型权重参数本身← 正确答案
  • B.推理时的KV缓存← 正确答案
  • C.中间激活值张量← 正确答案
  • D.云端训练日志数据

答案:ABC。端侧内存总占用等于权重、KV缓存、激活值三者之和,分别对应小厨背包里的“干粮、便签、临时碗筷”。云端训练日志存在服务器上,不占手机内存,故D排除。

Q5. 端侧多轮对话中的“记忆压缩”是指什么?

单选题 · mid

  • A.压缩模型权重节省内存
  • B.将旧对话摘要后替换原文← 正确答案
  • C.压缩用户语音再识别
  • D.压缩网络传输的数据量

答案:B。记忆压缩发生在上下文层面:当历史对话超过窗口上限时,把较早的对话原文压缩成摘要,保住重要信息又控制prompt长度。它针对的是对话历史而非模型权重或语音数据。

Q6. 端侧部署最基础的模型优化手段是什么?

单选题 · mid

  • A.扩大训练数据集规模
  • B.增加模型隐藏层数量
  • C.对权重做量化压缩← 正确答案
  • D.提升输入序列的长度

答案:C。量化把32位浮点权重换成8位或4位整数,体积缩小数倍,是让模型“装进口袋”的第一步。扩大数据集、加层数只会让模型更大,与端侧资源受限的方向相反。

Q7. 与输入法相比,实时翻译的额外技术难点有哪些?

多选题 · mid

  • A.需要处理连续语音输入← 正确答案
  • B.需要增量解码输出译文← 正确答案
  • C.需要长期记忆用户偏好
  • D.无需考虑延迟控制需求

答案:AB。翻译要接语音识别流水线,处理连续分片输入,并以流式增量方式吐译文;输入法则通常一次只预测几个候选词,无需语音处理,也不依赖长期记忆。延迟控制对两者都重要,D明显错误。

Q8. 三大场景中延迟预算最严格的是哪一个?

单选题 · hard

  • A.输入法的候选词推荐← 正确答案
  • B.助手的多轮对话回复
  • C.翻译的整句译文输出
  • D.云端的离线批量推理

答案:A。输入法涉及高频打断式交互,每次敲键都可能触发一次候选预测,预算严格到几十到一百毫秒。助手和翻译的交互频率相对低,且翻译的感知阈值约300毫秒。D选项是云端批量任务,与端侧延迟预算无关。

Q9. 知识蒸馏在端侧部署中的作用是什么?

单选题 · hard

  • A.用大模型压缩网络带宽
  • B.用小模型指导学生大模型
  • C.用大模型指导学生小模型← 正确答案
  • D.用学生模型替代云端服务

答案:C。知识蒸馏是让参数庞大的“老师”模型把自己的预测能力传授给“学生”小模型,使小模型在特定任务上逼近大模型效果。方向一定是大模型教小模型,而不是反过来,故B错误。

Q10. KV缓存复用为什么能加速端侧推理?

多选题 · hard

  • A.避免重复计算历史token← 正确答案
  • B.减少prompt的编码开销← 正确答案
  • C.增加每层参数量以提精度
  • D.降低生成文本的内容质量

答案:AB。多轮对话和流式翻译中,历史token的键值对每轮都要用;缓存下来后,新请求只需计算新增部分,不必从头编码整个prompt,既省时间又省算力。它不会增加参数量,更不会降低生成质量。