模型路由相关论文速览——《Universal Model Routing for Efficient LLM inference》
传统“模型路由”多数假设一个固定的候选 LLM 池(static pool),路由器只需要在这组已知模型里挑选最便宜且“够用”的模型;但现实中模型池经常变化:新模型不断上线,旧模型下线。每当模型池变化,重新标注训练数据、重训路由都很费时费钱。这篇论文(Universal Model Routing for Efficient LLM inference)关注动态模型池(dynamic pool):测试时出现未见过的新 LLM,如何在无需重训路由器的前提下把请求路到合适的新模型上。
作者提出了 UniRoute这种新的解决方式:把“每个 LLM”表示成一个特征向量,路由器学会基于这些“LLM 特征”做决策,从而泛化至未见过的 LLM。论文在公共基准上验证了能在 30+ 未见过的 LLM 中有效路由。
下面我们简要介绍新 LLM 加入 UniRoute 体系的完整流程(具体的细节笔者没有深入研究,只是梳理了大致的实现思路,读者朋友们感兴趣的话可以阅读论文进一步研究哈)。
0. 前置条件(一次性准备)
在新模型加入之前,需要系统已经具备:
-
聚类器 / 样本特征映射
- 用历史训练集做 K-Means(或 LearnedMap),得到
Φ_clust(x)
:能把任意请求分到 K 个簇之一。
(用已有的训练数据做一次 K-Means(或别的聚类)得到 K 个“题型簇”。这会给每道题一个“簇编号”(比如:推理类、编程类、闲聊类…)。得到一个函数
Φ_clust(x)
,能把任意题目分到某个簇。) - 用历史训练集做 K-Means(或 LearnedMap),得到
-
已有模型的能力画像
- 对已部署的 LLM 都有
Ψ(h_old)
(每个簇的错误率)。注:Ψ(h)是一个 K 维向量,告诉我们“这个模型在每种题型上的容易出错程度”。
假设 K=3 个簇:推理 / 编程 / 闲聊。
在 1200 道验证题里,每个簇各 400 题。新模型 h 做完后统计到:-
推理:错了 80 / 400 → 出错率 0.20
-
编程:错了 220 / 400 → 出错率 0.55
-
闲聊:错了 60 / 400 → 出错率 0.15
那么 Ψ(h)=[0.20, 0.55, 0.15]。这就告诉我们:这个模型在编程题上明显较弱,路由器就会倾向把编程相关的请求送给别的更稳的模型。 - 对已部署的 LLM 都有
-
小验证集 S_val
- 大约几百到一两千条题目,覆盖所有簇,且有标准答案或可判分规则。
用户提出一个新问题 x:
-
先用 Φclust(x) 把它分到某个簇 c;
-
对每个候选模型 m 查询它的 Ψ(m)[c](即在该题型上的出错率估计);
-
再加上成本项,选 Ψ(m)[c]+λ⋅cost(m) 最小的模型去答。
- 大约几百到一两千条题目,覆盖所有簇,且有标准答案或可判分规则。
1. 新模型接入步骤
Step 1:运行验证集
让新模型 h_new 在 S_val上跑一遍:
preds_new = [h_new.predict(x) for x in val_texts]
- 如果是生成任务,用自动评测器或判题 LLM 判对/错。
- 得到对/错标签:
errors = [int(p != y) for p, y in zip(preds_new, y_val)]
Step 2:按簇统计错误率
利用已有聚类映射,把验证集每道题分配到对应簇:
cluster_ids = [Φ_clust(x) for x in val_texts]
然后统计每个簇的出错率(带拉普拉斯平滑):
alpha = 1.0 # 平滑系数
num = [0]*K
err = [0]*K
for cid, e in zip(cluster_ids, errors):num[cid] += 1err[cid] += eΨ_new = [(err[c] + alpha) / (num[c] + 2*alpha) if num[c] > 0 else 0.5for c in range(K)
]
- 这就是新模型的能力画像
Ψ(h_new)
。
Step 3:更新路由器配置
把新模型的信息加进路由器:
router.model_profile["new_model_name"] = Ψ_new
router.cost_by_model["new_model_name"] = cost_value # 该模型的调用成本/延迟
Step 4:立即参与线上路由
新模型现在可以和已有模型一起被路由选择:
chosen, score, scores = router.route(user_query_text,candidate_models=list(router.model_profile.keys()),lambda_=0.4)
lambda_
控制质量–成本平衡。- 新模型会在它强的簇被优先选中,在弱的簇被替换掉。
2. 流程示意图
新 LLM│▼
[ 在小验证集 S_val 上推理 ]│ 得到对/错序列▼
[ 按聚类器分配到 K 个簇 ]│ 每簇计算错误率 + 平滑▼
[ 得到能力画像 Ψ(h_new) ]│▼
[ 更新路由器的 model_profile & cost_by_model ]│▼
[ 立即参与在线路由决策 ]
3. 优点
- 不需要重训路由器:聚类器和样本特征映射是一次训练好的,新模型只需跑验证集。
- 低成本上线:只跑几百到几千条题,成本可控。
- 快速响应:新模型到手当天就能进生产路由。
- 可持续维护:每次换/加模型都复用同一套流程。