本页目录 Compile by Training

Compile by Training

深入解析 Compile by Training 如何用教师模型合成监督数据、微调 0.6B 本地解释器的 LoRA 程序,并从语义正确率、分钟级编译、应用案例、评测边界与高频模糊文本函数的采用条件审视其工程价值。

自动研究时间:2026-09-05 09:02(Asia/Shanghai)
来源日期:Hugging Face Daily Papers 页面实际显示 Sep 4,列表最顶部为 Compile by Training: Turning Natural-Language Specifications into Local Neural Functions
研究路径:Daily Papers 列表 -> Hugging Face 详情页 -> arXiv 摘要页 -> 10 页 PDF 全文与附录 -> 官方实现仓库、Python SDK 和在线演示。

执行摘要

许多文本函数很容易用自然语言说清,却很难用规则穷尽。例如,把邮件分成“立即处理”和“稍后处理”、从混乱文本中抽取特定字段、把用户意图路由到页面,或者把自然语言动作转成可执行 DSL。直接调用远程大模型虽然省去规则开发,却会在每次运行时重复支付网络延迟、推理费用和外部服务依赖。

Compile by Training 把这笔成本前移到“编译期”:开发者只写自然语言规格,教师模型据此合成任务专属输入输出对,再用这些数据微调共享 Qwen3-0.6B 解释器上的轻量 LoRA adapter。最终产物是一个可保存、版本化和组合的 .paw 神经函数;之后处理新输入时,只需本地解释器、adapter 与运行时 scaffold,不再调用教师模型。

这项工作是 Program-as-Weights(PAW) 的高准确率编译模式。原 PAW 编译器用一次前向传播在约 3.5 秒内预测程序参数;新方法把它作为 warm start,再投入教师合成与约 100 步规格专属训练。在 FuzzyBench-Hard 上,平均 LLM Exact Match(LEM)从 0.224 提升到 0.836,绝对增加 0.612,但 B300 上冷编译时间也从 3.5 秒增至 50.9 秒

论文的价值不只是一次准确率提升,而是把大模型从“每个输入都在线求解”改成“为重复任务构建本地工具”。它同时展示了 30 个编译函数组成的网站助手、自然语言驱动的 3D avatar,以及双向 English-Claudish 翻译器。不过,证据仍有明显边界:主准确率只来自一个专门挑选的困难子集;语义评判和高质量教师都使用 GPT-5.5;应用评估以少量手工样例和使用量为主;作者也没有报告端到端成本、跨规格泛化、版本更新稳定性或高风险任务可靠性。因此,这更像一个有说服力的系统原型,而不是已经证明可以替代通用 LLM API 的生产结论。

1. 论文基本信息

项目内容
论文标题Compile by Training: Turning Natural-Language Specifications into Local Neural Functions
arXiv 编号2609.04199
当前版本v1,2026-09-03 提交
作者Yuntian Deng、Pengyu Nie、Stuart Shieber
机构University of Waterloo、Harvard University
发表说明EMNLP 2026 System Demonstrations
主分类Computation and Language(cs.CL)
交叉分类Artificial Intelligence(cs.AI)、Machine Learning(cs.LG)
核心系统Compile by Training、Program-as-Weights(PAW)
共享解释器量化 Qwen3-0.6B
函数级参数LoRA rank 64、alpha 16,加运行时 scaffold
主评测FuzzyBench-Hard、LLM Exact Match(LEM)

核心链接:

2. 背景与动机:把模型调用变成软件构建

2.1 规则代码与远程大模型之间的空白地带

论文关注的是可重复调用的 fuzzy text function。它们通常具备三个特征:输入输出边界相对明确、规则难以完整枚举、同一种行为会在大量输入上重复执行。邮件分流就是典型例子:“今天下班前需要签名”应标为紧急,newsletter 则可以等待。人类很容易描述这个意图,但维护关键词表和例外规则会越来越困难。

远程大模型解决了表达能力问题,却把依赖移到运行时:每条邮件都要经过网络和外部模型,成本随调用量线性累积,模型版本变化还可能改变函数行为。对于隐私敏感、离线、边缘设备或低延迟场景,这种依赖尤其明显。

Compile by Training 的核心取舍是:同一规格只构建一次,以更高的编译成本换取后续低成本、本地且固定版本的重复执行。 这与传统软件的“构建—运行”分离相似,但被编译的不是源代码,而是对模糊行为的自然语言描述。

2.2 从 PAW 快编译器到规格专属优化

原始 PAW 用 amortized compiler 从规格直接预测 LoRA 程序,一次前向传播即可完成,适合低延迟交互。但 amortization 意味着所有规格大致获得固定计算预算;困难任务不会自动得到更多优化。

新论文没有替换 PAW 的程序格式和本地运行接口,而是增加一条高准确率路径:

  1. 先由原 PAW 编译器生成函数专属 adapter 初值和 scaffold;
  2. 再让多个教师模型围绕当前规格合成监督数据;
  3. 对 adapter 做规格专属梯度优化;
  4. 仍打包成普通 PAW artifact,由同一个小型解释器运行。

这相当于在相同运行时上提供两档编译器:秒级的 one-shot weight prediction,以及分钟级的 compile by training。开发者可以按函数难度、调用频率和可靠性需求选择速度—准确率位置。

3. 核心贡献

3.1 把任务蒸馏包装成函数级编译

教师合成数据、小模型蒸馏和 LoRA 微调都不是新技术。论文的贡献在于把它们组合为面向开发者的函数构建流程:输入是自然语言规格,输出是可调用的 .paw artifact,而不是要求用户手工准备数据集、训练脚本和模型服务。

这种抽象把大型教师模型限制在构建期。只要一个函数会被反复调用,教师成本就能被多次本地执行摊薄;artifact 还可以缓存、固定版本和嵌入应用。论文因此把 adaptation 解释为 software build step,把 foundation model 解释为 tool builder。

3.2 在保留轻量运行时的同时提高困难任务准确率

方法继续共享冻结的 Qwen3-0.6B 解释器,每个函数只保存轻量 LoRA adapter 和 scaffold,而不是各自复制完整模型。与 PAW 快编译器相比,FuzzyBench-Hard 上的 LEM 从 0.224 提升到 0.836,说明针对一个规格投入训练计算,确实能修复不少一次权重预测无法精确完成的函数。

3.3 让分钟级训练成为可交互后台任务

论文不仅描述训练算法,还实现了一套托管编译服务:教师请求、模型加载和训练并发启动;训练拿到首批样本后即可开始,不必等待全部合成结束;API、持久化 job store、共享队列、GPU worker、教师输出缓存和 artifact store 相互分离。用户可以离开页面或刷新,任务状态与进度仍然保留。

这部分贡献很实际:如果编译必须阻塞前台一分钟,算法即使准确也难以成为开发工具;把它变成可观察、可恢复的后台 build,才形成完整产品体验。

3.4 展示神经函数与确定性代码的组合方式

三个演示不只证明“能生成一个标签”,还展示了不同组合边界:

  • 网站助手用编译函数做路由、回答、选择和验证,用 BM25 做精确检索,用普通代码控制分支;
  • Avatar Director 让神经函数生成动作 DSL,再由浏览器解析器验证允许的动词和 AST 边界;
  • English-Claudish 翻译为两个方向分别编译 adapter,共享同一 0.6B 解释器。

这些案例支持一个比“端到端全神经化”更稳健的工程原则:让 neural function 负责模糊判断,让确定性代码负责检索、语法校验、权限和控制流。

4. 方法详解

4.1 编译与运行的形式化分离

系统接口被写为:

ps=Compile(s),y^=Run(ps,x),p_s = \operatorname{Compile}(s), \qquad \hat{y}=\operatorname{Run}(p_s,x),

其中 ss 是自然语言函数规格,psp_s 是编译后的程序,xx 是以后到来的新输入。共享冻结语言模型充当 interpreter;每个 psp_s 提供 adapter 和 prompt scaffold,把解释器专门化为一个函数。

完整生命周期分成三步:

  1. Specify:开发者用自然语言定义 text-to-text 行为;
  2. Compile:提交托管构建任务,观察排队、数据合成和训练进度;
  3. Run:下载或打开 artifact,通过 SDK 对新输入重复调用。

这里必须准确理解“本地”:未来输入不会发给 PAW 服务或教师模型,但规格本身会在编译期发送到托管服务和教师 API,训练也需要 GPU。本地性是运行期属性,不是端到端离线构建保证。

4.2 从自然语言规格生成训练监督

单条规格不足以直接训练模型,因此教师模型从规格采样任务数据:

Ds={(xi,yi)}i=1nT(s).\mathcal{D}_s=\{(x_i,y_i)\}_{i=1}^{n}\sim T(s).

教师被要求返回严格 JSON,每个 example 都包含字符串形式的 inputoutput。编译器检查响应结构,拒绝 malformed 或不完整 batch,只有合格样本才进入训练管线。

公开服务混合两个层级的教师:成本较低的 GPT-5.4-mini 生成多数样本,GPT-5.5 提供补充监督。公开配方使用 2:1 混合比例;Table 1 的教师组合 sweep 将这一比例具体设为 2,400 个 mini 样本和 1,200 个 GPT-5.5 样本,Table 2 的公开主配置则另行记录 2,400 个 unique pairs,经重复和调度扩展成 6,400 个训练样本。两组数字对应不同实验/训练口径,不能简单理解为默认任务拥有 3,600 个互不重复样本。

这种生成方式省去了人工标注,但也把规格歧义和教师盲点写入训练集。如果教师没有主动生成长尾输入,编译函数可能在已覆盖区域稳定、在分布外输入上悄然出错。

4.3 Warm start、LoRA 与优化目标

每个函数不训练独立完整模型,而是在冻结 Qwen3-0.6B 上训练 LoRA。原 PAW amortized compiler 先给出 adapter 初值 θs(0)\theta_s^{(0)} 与运行时 scaffold rsr_s,随后最小化:

L(θs)=(x,y)Dslogpθs(yrs(x)).\mathcal{L}(\theta_s)=\sum_{(x,y)\in\mathcal{D}_s}-\log p_{\theta_s}\left(y\mid r_s(x)\right).

公开 Finetuned Standard 配方为:

配置项数值
解释器量化 Qwen3-0.6B,本地运行
教师GPT-5.4-mini 与 GPT-5.5,2:1 混合
数据2,400 unique pairs,扩展为 6,400 个训练样本
优化batch 48,100 steps,cosine learning-rate decay
AdapterLoRA rank 64,alpha 16
初始化PAW hypernetwork / amortized compiler warm start
调度教师合成与训练重叠执行

训练完成后,系统把 adapter、scaffold、原始规格和解释器元数据一起打包为 psp_s。共享解释器只需安装一次,多个函数分别加载自己的 artifact。

4.4 流式编译如何缩短关键路径

串行流程会先等待所有教师请求,再加载模型并开始训练,GPU 在最慢教师响应返回前一直空闲。论文的 streaming compile 同时启动三类工作:教师数据合成、模型加载、训练准备。第一批所需样本就绪后立即训练;当不同教师响应乱序到达时,调度器优先填充更早 batch 的空槽,但不改变已接受样本及其规定训练顺序。

服务层进一步把职责拆开:

组件职责
API 与持久化 job store接收规格、保存状态、支持刷新与恢复
Shared job queue把待编译任务分配到可用 worker
GPU worker pool合成缺失样本、训练、打包 artifact
Teacher-output cache相同请求复用已完成的教师输出
Program store保存 .paw artifact 并关联原 job

这套设计优化的是等待路径和资源利用率,不会消除教师推理或微调本身的成本。

5. 实验设计与结果

5.1 FuzzyBench-Hard 与 LEM 指标

FuzzyBench-Hard 是原 FuzzyBench 的困难子集,筛选条件是 PAW 快编译器在这些规格上没有产生 exact-match 命中。这使它适合回答“规格专属训练能否救回快编译器失败的任务”,但不代表所有 fuzzy function 的总体分布。

论文没有直接沿用字符串 exact match,而是采用 LLM Exact Match(LEM):评判模型同时读取规格、输入、参考输出和候选输出,判断二者是否在规格约束下语义等价。它可以忽略空白、JSON key 顺序和未被规格固定的容器差异,但会拒绝错误值、缺项、多项、错误顺序、错误结构或不恰当拒答。

作者用 128 个手工标签验证评判器:

GraderAccuracyFPRFNRCohen’s kappa
GPT-5.50.9770.0250.0230.946
GPT-5.4-mini0.9380.0500.0680.858

最终选择 GPT-5.5。128 条验证支持它比 mini 更接近作者判断,但样本仍较小,而且 GPT-5.5 同时也是训练监督的一部分;论文没有用独立模型家族或更大规模人工复核检验潜在相关偏差。

5.2 训练能否提高正确率

方法Mean LEM编译时间运行形态
PAW fast amortized compiler0.2243.5 秒本地 0.6B interpreter
Compile by Training0.83650.9 秒(B300)本地 0.6B interpreter
变化+0.612+47.4 秒运行接口不变

0.612 的绝对提升很大,说明一次性预测 adapter 的失败并不等于小解释器没有能力完成任务;更充分的规格专属监督可以找到好得多的参数。但这项对比不能直接推出“在通用任务上达到 83.6%”:Hard 子集按基线字符串失败筛选,论文也没有报告完整 FuzzyBench 上的总体变化、子集规模、置信区间或逐任务分布。

5.3 教师质量与数据规模

论文给出两组 controlled sweep:

Sweep设置Mean LEM
教师组合3,600 个 GPT-5.4-mini 样本0.746
教师组合2,400 mini + 1,200 GPT-5.50.851
数据规模1,440 unique pairs0.821
数据规模2,400 unique pairs0.836
数据规模3,600 unique pairs0.836
数据规模7,200 unique pairs0.866

教师组合实验表明,仅增加便宜教师样本并不等同于引入更强教师;同为 3,600 个 unique pairs 时,混合教师高出 0.105。数据规模实验则不是单调线性收益:2,400 到 3,600 没有变化,增加到 7,200 才再提高 0.030。这意味着数据多样性、教师质量和任务覆盖可能比简单堆量更关键。

需要注意,教师组合 sweep 固定 batch 64、学习率 2×1042\times10^{-4}、100 steps,并把 3,600 unique pairs 重复成 6,400 个训练样本;数据规模 sweep 使用 batch 48、相同学习率与步数。两组结果适合各自内部比较,不宜把行与行都当成只改变单一共同变量的统一实验。

5.4 分钟级编译是否足够交互

作者在 2026 年 5 月服务发布时,对同一个代表性规格测得冷编译延迟:

硬件冷编译时间
NVIDIA B30050.9 秒
NVIDIA H20068.2 秒
未注明型号的 RTX GPU99.2 秒

四个编译任务并发提交的 load test 中,四项都完成,平均排队时间为 1.01 秒,worker 利用较均匀。结果说明一分钟构建可以通过后台任务做成交互产品,也支持“教师合成是关键路径”的架构判断。

但这仍是有限的系统测量:只使用一个代表性规格,RTX 型号未说明,没有给出多次重复的方差、教师 API 波动、吞吐极限、失败率或高并发 tail latency。因此它证明了可用性样例,不等于完整的容量规划基准。

6. 应用案例

6.1 Paw-helper:30 个程序组成的网站助手

Paw-helper 的内容包包含 30 个编译程序,其中 28 个参与实时路由,另 2 个用于评估和向后兼容。一个后端服务四个网站,根据当前 site、page 和用户问题选择程序树中的小部分节点。

当学生询问课程作业变化时,系统先判断需要链接还是文字回答;课程 answerer 生成候选回答,BM25 并行检索 Piazza,最后由 selector、Piazza answerer 和 validator 组合结果。案例的重点不是所有步骤都神经化,而是多个窄神经函数可以与检索、缓存和条件分支共同工作。

6.2 Avatar Director:自然语言到受控动作 DSL

用户可以输入“跳两次,然后跳舞”一类指令,编译函数将其转换为支持序列、时长、重复和兼容并行动作的 DSL。浏览器再用确定性解析器检查允许动词与 AST 范围后执行动画。在 44 条手工验证指令中,43 条生成了预期动作结构,即 43/44,约 97.7%

这个案例展示了安全边界应放在哪里:神经函数负责理解语言,确定性 runtime 负责拒绝非法程序。另一方面,44 条样例规模很小,没有覆盖对抗输入、复杂组合和长期运行错误。

6.3 English-Claudish 双向翻译

作者为 English-to-Claudish 和 Claudish-to-English 各写一条规格,各自训练一个 adapter。前者保留语义并加入这种风格常见的对比、结构隐喻和复合词,后者去除冗余修辞并改写为直接英文。两个程序共享同一解释器,并可下载后本地执行。

论文称在线服务从 2026-08-22 发布到 2026-09-02 共完成 100,747 次成功翻译请求。这是产品使用量证据,不是翻译质量指标:论文没有人工偏好评测、含义保持评分或失败请求分母,不能据此判断准确率。

7. 局限与批判性分析

7.1 作者明确承认的局限

论文第 9 节只明确列出两项:

  1. 合成监督会继承教师错误,需要保证正确性的应用应验证输出,或保留确定性控制路径;
  2. 应用证据主要展示组合与结构化执行,系统性用户研究仍是未来工作。

这两点与演示设计一致:网站助手和 avatar 都没有把 neural function 置于无约束的最终执行位置。

7.2 实验外推范围有限

主准确率来自专门挑选的 FuzzyBench-Hard,而不是完整基准或多个独立数据集。这个子集按快编译器 exact-match 失败构造,却用 LEM 重新评分,所以基线仍有 0.224;这种设计能回答困难任务上的增量价值,却可能高估面向全部任务的平均收益。论文没有报告子集规模、任务方差、置信区间和统计显著性。

应用案例也偏展示性:avatar 只有 44 条手工指令;翻译器只报告成功请求数量;网站助手没有端到端正确率、用户满意度或与远程 LLM 的对照。论文题目中的“local neural functions”在系统层面得到证明,但“这些函数在真实分布下有多可靠”仍缺证据。

7.3 评判器与教师模型存在潜在耦合

LEM 比字符串匹配更符合 fuzzy function 的语义目标,评判 prompt 也在附录完整公开,这是优点。但最强教师和最终评判器都使用 GPT-5.5。即使 grader 在 128 条作者标签上达到 0.977 accuracy,也无法排除它更偏好相同模型家族生成的格式或语义表达。这是从实验设置推导出的风险,并非论文已经证明存在的偏差;更稳妥的验证应加入盲人工复核和不同模型家族的 judge。

7.4 “运行时独立”不等于“构建过程便宜或私密”

官方实现要求 OpenAI API key,默认本地复现配方面向约 40 GB 可用显存的 accelerator。托管流程还会把函数规格发送给 PAW 服务和教师 API。由此可见,它降低的是重复运行阶段对大型远程模型的依赖,而不是让整个生命周期都离线、无 GPU 或无第三方数据暴露。

论文没有报告每次编译的教师 token、GPU 时间、美元成本、artifact 大小或能耗,也没有与直接远程调用建立 break-even 点。若一个规格只调用几次,约一分钟编译和数千合成样本可能比直接调用更贵;只有高频、稳定、可复用函数才更可能摊薄前置成本。

7.5 版本化主张尚未经过演化实验

Artifact 可以被保存和版本控制,这是格式能力。但论文没有测试规格修改后是否稳定收敛到预期新行为、旧行为是否发生意外漂移、教师更新能否复现相同程序,也没有给出回归测试和 provenance 格式。真正的软件版本化不仅是存下二进制,还需要可重建性、差异解释和兼容策略。

7.6 高风险任务仍需要显式防线

教师生成的数据只能覆盖教师想到的输入空间。医疗、金融、权限、隐私擦除等任务如果在长尾样本上静默出错,低延迟和本地运行反而会放大错误规模。论文社区示例里包含 PII masker,但正文没有给出安全召回率或泄漏测试。适合的生产形态应包括:确定性前后置校验、拒答或 fallback、分布外检测、审计日志、灰度发布和持续回归集。

8. 应用影响与采用建议

8.1 最适合的任务

任务条件适配度原因
同一模糊规则被高频重复调用前置编译成本可摊薄,本地推理减少持续 API 依赖
输出空间窄且可自动验证容易建立 DSL、schema、枚举或 validator 防线
隐私输入不能在运行时外发中至高编译后输入留在本地,但规格编译仍可能外发
低延迟边缘或离线运行中至高共享 0.6B runtime 可本地执行,仍需评估设备资源
一次性、频繁变更的开放任务每个新规格都支付合成和训练成本
要求数学上保证正确神经函数不能替代确定性算法与验证
输出可直接产生高风险副作用需要严格 sandbox、validator 和人工审批

8.2 经济性应按调用生命周期计算

设一次编译总成本为 CcompileC_{compile},每次远程大模型成本为 cremotec_{remote},本地函数单次边际成本为 clocalc_{local},则粗略 break-even 调用次数为:

NCcompilecremoteclocal.N^* \approx \frac{C_{compile}}{c_{remote}-c_{local}}.

论文没有提供足够数据计算 NN^*,但这个公式指出了选型重点:不能只比较 50.9 秒与 3.5 秒,也不能只比较本地与远程单次推理;必须把规格寿命、调用量、重编译频率、质量损失和验证成本放进同一个生命周期模型。

8.3 推荐的工程落地顺序

  1. 先选择输出可枚举、可 schema 校验、调用量稳定的窄函数;
  2. 保留远程模型或人工流程作为 shadow baseline,收集真实分布回归集;
  3. 对 neural output 添加确定性 parser、validator 和副作用隔离;
  4. 记录规格、教师版本、数据生成配置、adapter hash 和评测结果;
  5. 用真实调用量与错误成本计算 break-even,而不是只看 demo 延迟;
  6. 只有跨版本回归稳定后,再扩大到路由树和多函数组合。

9. 相关工作与技术定位

方向代表工作与 Compile by Training 的关系
神经程序编译Program-as-Weights直接基础;PAW 一次前向预测 adapter,本工作用它 warm start 后继续规格专属训练
合成指令数据Self-InstructStanford Alpaca都用大模型生成监督;本工作把数据生成限制在单个用户定义函数
知识蒸馏Distilling the Knowledge in a Neural NetworkDistilling Step-by-Step都把教师能力迁移到小模型;本工作输出的是函数级 adapter,而非一个新的通用 student
参数高效微调LoRAQLoRA、prompt/prefix tuning提供低存储、共享 base 的技术基础;本工作把 adapter 包装成可调用程序
描述到模型Prompt2Model同样把自然语言任务描述转成微调管线;本工作强调 PAW artifact、共享本地解释器与交互式分钟级 build
多 adapter 服务LoRA Land证明一个 base 可服务大量 task LoRA;本工作进一步提供从规格自动构建单个 adapter 的 compiler interface

与普通 prompt engineering 相比,它把行为沉淀为参数化 artifact,减少每次输入携带长规格和调用大模型的需求;与传统 task fine-tuning 相比,它把用户接口压缩成一条规格并自动合成数据;与原 PAW 相比,它牺牲编译速度换取困难函数准确率。这三组差异共同构成其定位。

10. 结论

Compile by Training 给出了一个清晰、可运行的软件化命题:对于会被反复调用的模糊文本函数,可以让大模型在编译期生成数据和构建工具,而不是在运行期永远充当依赖。基于 PAW warm start、混合教师监督、LoRA 规格专属优化和流式构建服务,它在 FuzzyBench-Hard 上把 LEM 从 0.224 提升到 0.836,并仍保持 0.6B 共享解释器上的本地执行。

最可信的结论是:在快编译器失败的困难规格上,多投入约一分钟构建计算可以显著改善语义正确率,且产物能够参与真实应用组合。 尚不能据此断言的是:所有 fuzzy function 都有同等收益、合成监督足以覆盖真实长尾、系统比直接 API 更便宜,或 artifact 已拥有传统软件级别的可复现与可审计性。

因此,它最值得被视为一种新的部署层,而不是模型替代宣言:把稳定、高频、可验证的模糊行为编译成本地神经函数;把精确计算、控制流和安全边界继续留给普通代码;把开放推理、长尾兜底和重编译决策留给更强模型或人工流程。

参考资料

  1. Deng, Y., Nie, P., & Shieber, S. Compile by Training: Turning Natural-Language Specifications into Local Neural Functions, arXiv:2609.04199, 2026.
  2. Hugging Face. Compile by Training 论文详情页.
  3. ProgramAsWeights. Compile by Training 官方实现.
  4. ProgramAsWeights. 项目主页与在线 Playground.
  5. Zhang, W. et al. Program-as-Weights: A Programming Paradigm for Fuzzy Functions, 2026.
  6. Hu, E. J. et al. LoRA: Low-Rank Adaptation of Large Language Models, 2021.
  7. Viswanathan, V. et al. Prompt2Model: Generating Deployable Models from Natural Language Instructions, 2023.
  8. Wang, Y. et al. Self-Instruct: Aligning Language Models with Self-Generated Instructions, 2022.
  9. Zhao, J. et al. LoRA Land: 310 Fine-tuned LLMs that Rival GPT-4, 2024.