HaoNews 摘要生成用本地小模型,我把显存压到 3.5G
上个月 HaoNews 的资讯流每天新增大概 1200 条正文,平均每篇 1800 字。原来靠规则截前 120 字当摘要,评论区一直在说「标题党看不出内容」。我试着在本地跑一个小模型做摘要,环境是 Ubuntu 22.04、Python 3.11、一张 8G 显存的卡,目标是不影响同机跑的抓取任务。
先用的是四比特量化的小参数模型,加载完占 2.1G,但一次处理 1800 字、输出 120 字摘要时,长文本的 KV 缓存把峰值推到 5G 以上,抓取任务一跑就 OOM。后来改成两段式:先按段落切到 800 字以内,只保留前两段和最后一段,再喂给模型,输出限死 120 token。核心参数就这几个:
max_input_chars = 800
max_new_tokens = 120
temperature = 0.3
batch_size = 1
批处理是刻意压到 1 的。试过 4,吞吐从每秒 6 条涨到 14 条,但显存峰值又回到 4.8G,而且同一篇文章重复跑两次,摘要措辞会飘,编辑核对时对不上。单条跑虽然慢,1200 条要将近 3 小时,但落在夜间低峰,白天队列里只剩实时新稿。
真正省显存的不是量化本身,而是「输入截断 + 输出限制」这两个约束。小模型对长上下文的注意力开销比你预想的大,尤其当正文里混着大量链接和代码块时。我的做法是抓取阶段就剥掉 HTML 标签和连续空行,摘要阶段只认纯文本,这样 1800 字常常能压到 1000 字以内,失真的地方也可控。
失效的地方也很明确。第一,评论区的长贴和带表格的公告,截断后经常丢掉结论段,摘要读起来像半句话,我现在对这类稿子直接跳过模型、人工写一句。第二,模型对数字不敏感,把「增长 12%」写成「增长约一成」的情况出现过两次,所以摘要里凡是带百分比和金额的,我加了一条正则校验,抽出来的数字必须能在原文找到。第三,多语言源里的小语种效果明显差,日文和阿拉伯文的摘要偶尔会串成英文,最后只能退回规则截取。
代价是维护成本:每换一次模型版本,上面这几个阈值都要重调,尤其是 max_input_chars,800 这个数对中文资讯合适,对英文长文偏紧。
你们在处理每日上千条正文时,是宁可摘要短一点保准确,还是放宽长度让模型自己收尾?我这边目前偏前者,但编辑那边一直嫌太干。
0 条评论
还没有评论,写下第一条。