推理时加载LoRA:动态挂载适配器的工程实践与踩坑指南

以前我训练完LoRA,习惯直接合并到底座模型上,再保存一份完整的权重文件,推理时按普通模型加载。直到有一次,同一个底座要同时服务“写作文风、代码补全、翻译”三种能力,我才发现这条路子有多笨:为什么要为每个任务各存一份几GB的完整模型?LoRA本身就是为轻量微调设计的,底座完全可以不动,推理阶段按需把适配器加载进去就行。“推理时加载LoRA模型”从此成了我默认的工作方式。

这篇文章就沿着这条链路展开:先聊聊推理时加载到底解决了什么问题,再对比“合并到权重”和“动态挂载”两种路线,然后给出一套能直接抄作业的最小代码流程,最后把我踩过的坑、调性能的经验一并列出来。适合正在做模型部署、多风格文本生成、角色定制、图像风格服务这类项目的开发者参考。

1. 先搞清楚:推理时的LoRA到底解决什么问题

1.1 LoRA为什么能做到“轻量插拔”

要理解推理时加载LoRA的价值,得先明白LoRA是拿什么换轻量的。

假设底座模型某个线性层权重是W,训练普通全量微调时,W每一格都会变,保存出来的就是一份新的完整权重。而LoRA的思路是冻结W不动,只训练两个小矩阵:

  • A矩阵形状为(r, 输入维度),随机初始化
  • B矩阵形状为(输出维度, r),初始化为零

训练后的增量ΔW约等于BA的乘积,最终模型的实际计算变成 y = Wx + (BA)x。这里的r就是低秩维度,通常取值4到128不等。r越小,参数越少,能表达的“增量信息”越受限;r越大,适配能力越强,但LoRA文件也会变大。

正因为这样,一份LoRA适配器通常只有几MB到几十MB,而一个底座模型是几GB。推理时加载LoRA的意思就很明确了:底座模型权重保持不变,需要哪个任务就把对应的小适配器“插”进去。这种插拔不是物理热插拔那类操作,而是在模型结构上动态注入低秩矩阵的计算量。

1.2 哪些场景必须走推理时加载

不是所有LoRA使用场景都需要推理时加载。如果你只有一个固定风格、固定任务的模型,推理前合并一次,导出成一个普通模型文件,之后永远只加载这一个文件,完全没必要折腾动态加载。

但下面这几类场景,动态加载几乎是刚需:

第一,同一底模服务多个风格或任务。比如一个7B对话模型,根据请求类型分别启用“温和叙述”“技术解说”“代码补全”三种LoRA。按旧思路要存三份完整模型,按新思路只存一份底模加三个小文件。

第二,用户自定义LoRA。做图像生成类产品时,用户上传或训练了自己的风格包,平台不可能为每个用户重启一套模型服务,只能运行时把对应LoRA加载到共享底模上。

第三,需要频繁回滚、对比效果。开发阶段同时维护多个实验版本,动态切换比反复合并、重新导出快得多。

决定是否使用推理时加载,核心判断标准就三条:底模是否长期固定、任务风格是否多份并存、是否需要低成本切换。

2. 两种加载路线:合并进模型还是动态挂载

2.1 合并路线:一次性把LoRA“焊死”进权重

所谓合并,就是把LoRA训练出的低秩矩阵按数学公式展开,叠加到底座原始权重里,生成一份新的完整权重。代码层面的表示就是LoRA的B乘A得到ΔW,再用W + scale × ΔW替换原权重,最后把LoRA外壳拆掉。

这样做的好处很直观:

  • 推理阶段完全不需要知道LoRA的存在,模型结构就是普通模型
  • 不需要额外维护LoRA文件,部署环境更简单
  • 计算路径上少了几步低秩矩阵的乘加,固定场景下速度略有优势

缺点是灵活性极低。只要想更换另一个LoRA,就得重新合并一次,而合并7B或更大模型需要消耗额外的显存和不少时间。线上服务根本等不起这种操作,所以合并路线更适合“单任务、固定版本、边缘设备导出”这类场景。

实际操作中,PEFT库提供的merge_and_unload就是为这条路线准备的。叫unload是因为它合并后会把Peft包装层卸载掉,让模型回到普通结构。必须注意:合并过程中底座模型、LoRA参数、临时结果同时存在,显存紧张的机器可能直接在合并这一步溢出。

2.2 动态挂载:底模不动,按需切换适配器

动态挂载则把LoRA当作模型对象的一层“外挂参数”来管理。底座模型加载完后,再通过加载逻辑把LoRA参数注入到目标模块上,推理时只启用当前需要的那一份。

这种方式的成本核心在于一次加载。文本生成场景里,用户请求带一个风格标识,服务端从已加载的适配器列表中切换active adapter,请求进来时几乎是无感的。用户上传一个新LoRA后,也只需要把它注册到内存中的适配器表,不需要重启模型进程。

它的代价是显存里需要同时保留底模和若干个活跃LoRA,并在每个前向计算中额外执行低秩矩阵变换。不过这个额外计算量相对底模的全量矩阵乘法来说非常小,多数场景可以忽略。

从工程角度看,动态挂载才是LoRA服务于多任务在线系统的正确姿势。

2.3 两条路线的取舍对照

我把两条路线整理成一张表,方便直接对照选型:

对比项合并进权重的路线动态加载适配器
推理速度最快,没有额外矩阵路径每层多一次低秩计算,通常可忽略
切换单元成本很高,重新合并则是分钟级很低,内存切换毫秒到几十毫秒
显存占用只占一份完整模型底模 + 多个适配器
文件维护每任务一份完整模型一份底模 + 多份小文件
灵活性差,替换LoRA需要重新合并好,可按需加载或卸载
适合场景固定单任务、离线导出多风格在线服务、个性化定制

我个人倾向的默认策略是:开发调试阶段全部用动态挂载,能省下一大堆导出时间;确定某个风格要长期固定上线后,再考虑合并导出成精简版本交付。

3. 实操示例:最小可跑的推理加载流程

3.1 环境准备与底座模型加载

先说依赖环境。LoRA推理加载依赖的基础库包括transformers、peft、torch。项目里装好这三个即可,其余根据具体任务补充。代码里我需要用到的核心能力是PeftModel、PeftConfig、PeftMixedModel这几个。

底座模型这里不指定具体品牌,用一套通用加载逻辑:

import torch from transformers import AutoModelForCausalLM, AutoTokenizer from peft import PeftModel, PeftConfig, PeftMixedModel base_model_id = "./local_base_model" lora_path = "./lora_style" tokenizer = AutoTokenizer.from_pretrained(base_model_id) base_model = AutoModelForCausalLM.from_pretrained( base_model_id, torch_dtype=torch.float16, device_map="auto", )

注意几个细节。一是torch_dtype定成float16或bfloat16,能省下一半显存,推理时LoRA权重也会自动配合转换。二是device_map自动切分,适合单卡或多卡切换,不用手动管理模型位置。三是加载前确认tokenizer和底座版本对应,否则vocab大小不一致,后面生成结果会乱。

3.2 加载单个LoRA做文本生成

把LoRA包到底座模型上,是最常见的单适配器流程:

lora_model = PeftModel.from_pretrained(base_model, lora_path) lora_model.eval() prompt = "这个函数陷入了死循环,帮我分析可能的原因并给出修改思路。" inputs = tokenizer(prompt, return_tensors="pt").to(lora_model.device) with torch.no_grad(): outputs = lora_model.generate( **inputs, max_new_tokens=200, do_sample=True, temperature=0.7, ) print(tokenizer.decode(outputs[0], skip_special_tokens=True))

PeftModel.from_pretrained返回的对象仍然是一个模型包装,你不需要关心LoRA权重在哪里,推理时的前向计算会自动把低秩增量叠加进去。

大多数情况下,这一步就够日常使用了。你只需要记住:这个包装层的adapter name默认是default,后续再加载第二个适配器时,如果想切回第一个,要重新显式启用它。

3.3 同时挂多个LoRA与权重调节

多适配器是动态加载真正好用的地方。先把两个LoRA都挂上:

lora_model = PeftModel.from_pretrained( base_model, "./lora_style", adapter_name="style", ) lora_model.load_adapter("./lora_code", adapter_name="code") # 只启用其中一个 lora_model.set_adapter("style")

这一套是加载和切换的基础玩法。set_adapter传入的是adapter name,不是路径。如果路径加载成功但输出没变化,优先检查这里是不是切换对了名字。

如果想同时串行使用两个适配器,比如希望输出既保持“风格化叙述”又具备“代码能力”,在新版PEFT里可以走PeftMixedModel:

mixed_model = PeftMixedModel.from_pretrained( base_model, ["./lora_style", "./lora_code"], adapter_names=["style", "code"], ) mixed_model.eval() outputs = mixed_model.generate( **inputs, max_new_tokens=200, adapter_names=["style", "code"], )

这个接口每个版本细节略有差异,使用前建议对照当前环境的官方示例确认签名。我的经验是,多适配器组合是“听起来很美,落地要谨慎”的功能,它并不保证1+1等于2,后半段我会专门讲这个坑。

3.4 合并LoRA并导出为常规模型

动态加载之外,合并导出也是必会技能。假设你验证了一段时间,确定某个LoRA效果稳定,想让它成为默认能力,那就合并:

lora_model = PeftModel.from_pretrained(base_model, lora_path) merged_model = lora_model.merge_and_unload() merged_model.save_pretrained("./merged_model") tokenizer.save_pretrained("./merged_model")

注意两点。一是合并后不要再试图对同一对象做set_adapter,因为Peft包装层已经卸载;如果还想继续尝试别的适配器,请保留一份加载LoRA前的底模对象,另起一个变量来合并。二是save_pretrained保存出来的文件是完整的普通模型权重,后续直接用AutoModelForCausalLM加载即可,不需要PeftModel。

4. 部署侧优化:显存、延迟与在线切换

4.1 在线服务为什么要避免反复合并

很多人刚接触推理时加载,会问:为什么不能每次请求来都重新合并一次?

估算一下成本就明白了。一个7B左右的模型有几十层Transformer块,每个块里多个线性层都要参与合并。合并一次涉及对所有目标层做矩阵乘加,再把新权重写回,耗时通常在分钟级,大的模型更久。在线服务要求单次请求延迟控制在几百毫秒到几秒,根本等不起。

而动态加载只涉及两部分成本:一份几十MB的LoRA权重从磁盘读到内存,以及选中的adapter在前向计算时增加的低秩矩阵乘法。前者耗时和文件大小、存储介质相关,后者几乎可以忽略不计。所以在线服务默认动态加载,只有在非常固定的内部场景里才考虑合并。

4.2 LoRA常驻显存与冷热分层策略

动态加载并不等于把所有LoRA一次性全塞进显存。一个LoRA按r=16、修改4类目标模块来算,参数体量大概在几百万个浮点数,显存占几十MB至上百MB不等。几十个LoRA全驻留显存,加上底模权重,压力就明显了。

更合理的做法是冷热分层:

  • 高频使用的LoRA,常驻显存,切换时零拷贝
  • 低频使用的LoRA,只保留磁盘文件,调用时从CPU或磁盘读入显存
  • 再配合一个简单的LRU缓存,记录最近使用时间,显存紧张时优先淘汰冷门适配器

我在实际项目里就是这么做的。缓存层用一个字典记录“adapter name -> 加载状态、最近访问时间”,每收到一个带风格标识的请求,先从字典查状态;没有命中就从磁盘加载并插入缓存;缓存超过阈值就按最久未使用策略清理。这套逻辑本身不复杂,但能把并行请求和显存控制得相对优雅。

4.3 预热、缓存与批处理的小经验

在线服务的延迟优化,很多功夫花在“第一次”上。模型刚启动时,CUDA kernel需要编译,显存页需要分配,第一次真实请求往往比后续请求慢好几倍。建议服务发布前做两三次空跑推理,用假输入把kernel和显存缓冲预热起来。

动态切换LoRA时,频繁把适配器在CPU和GPU之间搬移,也可能造成延迟突刺。我的建议是优先保证热适配器常驻显存,别等请求打到脸上才去加载。另外,尽量在请求空闲期预加载下一个可能用到的适配器。虽然很难准确预测用户下一个风格,但在活动周期、流量规律明显时,这招很有效。

批处理还有一个容易被忽略的问题:如果一个batch里混着不同风格的请求,常规的做法会很别扭。要么把相同风格的请求聚合到同一个batch,要么让推理框架单独支持多适配器并行。对多数团队来说,按适配器分桶是性价比最高的方案,不用一上来就追求复杂的混合批处理。

5. 常见问题与排查实录

5.1 加载成功但输出和底模一样

这是最多人遇到的坑。加载过程不报错,生成结果却完全没变化。按以下顺序逐一排查:

第一,看adapter是否真的被启用。如果加载了多个适配器,但没调用set_adapter,模型可能还停留在上次的active状态。直接用print(model.active_adapters)确认。

第二,检查LoRA的权重缩放。LoRA生效强度靠scale控制,很多实现是scale = lora_alpha / r。如果你训练时r设成64,lora_alpha却只写了1,那scale只有0.015左右,增量被压到几乎听不见,输出当然无明显变化。可以用PeftConfig查看:

cfg = PeftConfig.from_pretrained(lora_path) print(cfg.r, cfg.lora_alpha) print(cfg.target_modules)

第三,确认加载的是有效权重而不是随机初始化。如果LoRA目录里缺少adapter_model文件,或加载路径指错了层级,PEFT可能只会建结构、不加载参数,这种情况表现就是输出约等于基座。查看目录里是否真有模型权重文件,并确认加载的是该文件所在目录。

第四,对比测试。写个小脚本,分别记录加载LoRA前后相同prompt的输出logits,看差异是否真的为零或极小。这比肉眼判断更可靠。

5.2 报维度不匹配或找不到目标模块

这类报错通常是底座模型和LoRA训练时不一致造成的。LoRA文件里记录了注入的目标模块名,比如某个模型在训练时修改的是q_proj、v_proj,推理时换成另一个结构完全不同的模型,自然找不到对应模块,或找到之后输入维度对不上。

处理办法有两个。

一是加载前先验一下LoRA配置和底座配置是否匹配:

cfg = PeftConfig.from_pretrained(lora_path) print(cfg.base_model_name_or_path) print(cfg.target_modules)

cfg里保存的训练底座识别信息,能帮你快速判断是不是拿错了基座。二是如果你确认训练和推理用了同一套模型,只是升级了库版本,优先检查PEFT版本兼容性。低版本训练的LoRA在高版本下加载出现维度错误的情况并不少见,升级前先备份LoRA目录。

5.3 多LoRA叠加后效果互相干扰

把两个LoRA同时启用,很多人第一反应是觉得效果会“锦上添花”。实测下来的结论是:不一定,甚至经常互相伤害。

出现干扰的原因在于,LoRA学习的是权重增量ΔW,两个LoRA各自学的增量方向可能部分冲突。一个适配器把某些token的分布推向“抒情叙述”,另一个适配器把输出推向“代码结构”,两者在同一层叠加,部分信号会在中低层互相抵消,最终只留下一种四不像的混合输出。

多做几组对比实验后,我的经验是:两个LoRA组合时权重不一定五五开。比如主要风格占0.8,辅助能力占0.2,观察输出稳定后再慢慢调整。如果业务上确实需要两种能力稳定协同,建议把相关数据合并到一次LoRA训练里,让模型在参数层面真正学会组合,而不是靠推理时强行加和。

5.4 切换时显存涨或延迟突刺

多适配器切换的延迟,多半出在CPU与GPU间的拷贝上。每个适配器权重虽然只有几十MB,但如果从磁盘读、再绕过CPU内存直达GPU,路径长且涉及显存分配,单次也可能卡几百毫秒。

优化方向有四个:

一是用LRU缓存把高频适配器固定到显存,减少拷贝。二是加载时启用固定内存页,加速CPU到GPU的传输。三是避免在热点路径上频繁调用显存清理操作,显存释放和重新分配本身就有开销。四是给适配器切换加一点异步机制,下一个适配器的权重在当前推理尚未结束时就开始搬运,等到推理结束直接启用。

这几个技巧叠加下来,高并发轮询切换的情况会平稳很多。

最后分享一个我在多个项目里固定下来的习惯:开发调试阶段一律动态挂载,方便快速验证不同风格;一旦某个风格确定要长期上线,我会把它合并导出成固定模型,减少运行时分支。对于多风格在线服务,则一定给每个适配器维护一份注册信息,内容包括版本号、训练数据描述、推荐缩放权重和回滚版本,这些信息在出问题时能省下大量排查时间。推理时加载LoRA本身不难,难的是把一堆适配器的生命周期管清楚,这套功夫到位了,整个推理链路就稳了大半。

相关新闻

XSS跨站脚本攻击全解析:从漏洞原理到防护实战

XSS跨站脚本攻击全解析:从漏洞原理到防护实战

1. 场景&#xff1a;XSS 最容易藏身的业务角落很多人对 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;的第一印象&#xff0c;还停留在“给输入框塞一段<script>alert(1)</script>&#xff0c;然后页面弹了个框”这种入门演示上。但实…

2026/10/19 17:14:40 阅读更多 →
基于YOLO26的PCB缺陷检测实战:从小目标识别到产线部署

基于YOLO26的PCB缺陷检测实战:从小目标识别到产线部署

做PCB缺陷检测这行&#xff0c;我前后换过三套方案。最早用传统图像处理&#xff0c;后来用两阶段检测器&#xff0c;直到把YOLO26跑通&#xff0c;6类缺陷的检出率才真正稳下来。这篇就围绕这套系统展开&#xff0c;讲一讲选型理由、数据准备、训练调参、部署交付这些环节里我…

2026/10/19 17:14:40 阅读更多 →
FrankenPHP Windows 原生版实测:PHP 应用服务器的本地开发新选择

FrankenPHP Windows 原生版实测:PHP 应用服务器的本地开发新选择

昨天整理电脑里的 PHP 项目时&#xff0c;顺手刷了一眼 FrankenPHP 的发布页&#xff0c;发现官方挂出了 Windows 原生的 zip 包。说实话&#xff0c;我第一反应是去看发布日期&#xff0c;确认不是旧文件——因为等这个“原生支持 Windows”的版本&#xff0c;真的等太久了。先…

2026/10/19 17:14:40 阅读更多 →

最新新闻

Product Hunt热榜复盘:从票数与评论区看产品冲榜策略

Product Hunt热榜复盘:从票数与评论区看产品冲榜策略

我每天早上都会打开 Product Hunt 的热榜页面&#xff0c;这已经是雷打不动的习惯。2026-03-31 的这份榜单&#xff0c;我点开之前其实没抱太大期待——毕竟“每日热榜”四个字听起来就像流水账。但真正逐条把当天上榜的产品翻完、把评论区看完、把背后几位创始人的发布策略捋清…

2026/10/19 18:05:50 阅读更多 →
C#类成员详解:字段、属性、构造函数及面试要点

C#类成员详解:字段、属性、构造函数及面试要点

1. 为什么"简述类成员"值得你认真准备 我以前参与技术面试时&#xff0c;经常用"简述类的成员"这道题做开场。原因很简单&#xff1a;它听起来基础得不像话&#xff0c;但实际考察的层次非常深。一个候选人如果连这道题都答得有结构、有主次&#xff0c;那…

2026/10/19 18:05:50 阅读更多 →
达梦8 DSC共享存储集群在VMware虚拟化环境中的部署实践与踩坑指南

达梦8 DSC共享存储集群在VMware虚拟化环境中的部署实践与踩坑指南

1. 项目拆解&#xff1a;达梦8 DSC在虚拟化环境中的定位和难点1.1 达梦8 DSC到底是什么达梦8的DSC全称是Data Shared Cluster&#xff0c;也就是共享存储集群方案。它的逻辑跟很多人熟悉的Oracle RAC类似&#xff1a;两个或多个实例节点&#xff0c;通过共享存储访问同一份数据…

2026/10/19 18:05:50 阅读更多 →
Python全栈从0到上岗:项目实战打通全链路

Python全栈从0到上岗:项目实战打通全链路

先泼一盆冷水&#xff1a;全网铺天盖地的“Python全栈教程”“30天从入门到精通”“学完就能月薪过万”……至少有一半是坑。不是蹭这个项目标题的热度&#xff0c;是我见过太多零基础学习者&#xff0c;对着几百集的视频刷了三个月&#xff0c;笔记记了好几本&#xff0c;但打…

2026/10/19 18:05:50 阅读更多 →
Java连接MySQL全流程详解:JDBC原理、连接池、事务与性能优化

Java连接MySQL全流程详解:JDBC原理、连接池、事务与性能优化

只要你的 Java 项目叫“业务系统”&#xff0c;就逃不开 MySQL。这句话我说了快十年&#xff0c;带过的新人没有一个能反驳。很多人第一次连数据库&#xff0c;都是在搜索引擎里复制一段三行代码&#xff0c;跑通了就丢到生产环境&#xff0c;然后被时区报错、中文乱码、连接超…

2026/10/19 18:05:50 阅读更多 →
从零实现轻量级图表编辑器:Canvas渲染与数据驱动架构解析

从零实现轻量级图表编辑器:Canvas渲染与数据驱动架构解析

图表设计工具这类项目&#xff0c;名字叫 "diagram-design" 的其实蛮多的&#xff0c;但真正能让人愿意截图发出来的产品很少。我这次想聊的&#xff0c;是我自己从零搭起来的一个轻量级图表设计方案——一个跑在浏览器里的流程图、架构图编辑器。核心思路很简单&…

2026/10/19 18:04:45 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介&#xff1a;本资源为电源技术方向的学术研究文档&#xff0c;聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略&#xff0c;面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集&#xff0c;共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →