多模态大模型训练弹性调度:从资源碎片到智算中心落地
刚把 EuroSys26 的 MegaScale-Omni 这篇标题啃下来第一反应是终于有人把“生产环境里的多模态大模型训练系统混乱现状”拿出来正经做了个系统。之前给大模型训练平台做资源调度时每天都在跟 GPU 故障、显存碎片、多模态数据 I/O 抖动这些东西较劲。MegaScale-Omni 从标题看解决的是超大规模训练场景下的工作负载弹性问题。在干过几年大规模训练平台的人眼里这几乎是把最痛的几个点都戳中了。这篇文章我打算从问题根源讲起再拆解 MegaScale-Omni 可能采用的设计思路最后落到工程实现和生产环境落地建议。核心关键词很明确多模态大语言模型训练、训练环境、工作负载弹性、大规模智算中心建设以及增量训练、LoRA 微调等混合负载场景。适合搞训练平台、做 MLOps、写训练框架的工程师读算法工程师读了也能理解为什么后台经常“莫名其妙”扩卡缩卡。1. 背景与核心问题多模态大模型训练为什么需要弹性1.1 多模态训练负载天然“不齐整”传统大语言模型训练的负载以文本 token 为主虽然文本长度存在波动但总体可控。多模态大语言模型训练则完全不同输入同时包含文本、图像、音频、视频甚至还有 OCR 坐标、点云这类结构化数据。每种模态经过各自的编码器后计算量和显存占用差距悬殊。图像对应的视觉塔可能一次前向就占用几十 GB 显存音频特征又可能是变长序列视频数据更是直接拉高 batch 的显存峰值。这种情况下每个训练 step 的资源消耗不是定的而是围绕某个均值大幅波动的。训练框架处理变长特征时要么统一 padding 成固定长度浪费大量算力和显存要么做动态 batch 拼接但这样又会让通信量和计算图形状每个 step 都在变。MegaScale-Omni 面向多模态训练设计“弹性系统”本质上就是想从系统层面消化这种不齐整而不是靠算法工程师手工调 pad 策略或者固定 batch size。1.2 生产集群里的硬约束故障、碎片、抢占大规模训练集群运行时间一长各种问题就全出来了。单卡故障、PCIe 链路降速、NVLink 偶发断开、RDMA 网卡异常退避几乎每周都会碰到。训练任务动辄使用数百甚至上千张卡任务规模越大单位时间内发生故障的概率就越高。传统做法是任务失败后整体重启从最近 checkpoint 恢复。但大模型 checkpoint 动不动几 TB加载一次几十分钟甚至一两个小时故障恢复的成本高得离谱。还有资源碎片问题。一个训练任务申请了 256 张卡训练中途因为某个节点故障缩成 248 张另一些任务的峰值需求在白天和晚上差异很大。如果平台没有弹性机制空闲资源只能闲置排队任务又进不来。“调度器按固定分配、训练作业按固定并行度”的传统模式在超大规模多模态训练场景下会越发显得笨重。1.3 为什么“弹性”不是单纯扩缩容很多人一提到弹性就想到云上 Auto Scaling 的加机器减机器。但大模型训练作业的弹性比这复杂得多。训练任务的并行维度包括数据并行、张量并行、流水线并行还有序列并行、上下文并行。随便改其中一个并行度都可能改变分布式通信模式和模型切分方式。如果只是调度层面增减几张卡而训练框架内部不知道模型权重和优化器状态的分布就会完全错位甚至直接报 shape mismatch。所以 MegaScale-Omni 这个名字里“Omni”可能暗含一种思路弹性不是某个模块的额外功能而是从训练框架到调度器再到数据管线全链路统一考虑的工作负载管理方式。它不止关心节点数量变化更关心训练拓扑、并行策略、显存分配、样本流、优化器状态如何在动态环境下保持一致与高效。2. MegaScale-Omni 的整体设计思路拆解2.1 以“训练作业拓扑”作为弹性伸缩的原子单位在大规模训练系统里资源调度的最小单位通常是“一张卡”或者“一个节点”。但对训练作业而言真正有意义的最小调整单位是“一个可重配置的并行拓扑”。简单说就是弹性伸缩不是告诉作业“你多了两张卡”而是告诉作业“现在你的数据并行度可以提升到 4、张量并行度不变、流水线并行度不变请完成新拓扑的初始化和状态重映射”。举一个具体场景一个多模态训练作业原先用数据并行度为 4、张量并行度为 4 跑在 16 张卡上。系统检测到还有 8 张空闲卡决定扩到数据并行度为 6。此时需要把数据加载器扩展成 6 份把优化器状态重新分片把模型权重从旧切分方式映射成新切分方式同时保持后续训练连续。中间任何一个环节脱节都可能造成训练中断或状态损坏。MegaScale-Omni 如果想让训练作业具备这种能力最关键的设计就是“拓扑即状态”把分布式训练的全部运行时状态绑定到一份拓扑描述文件或者拓扑对象上拓扑变化时自动触发状态的迁移与重建。2.2 资源池分片与作业内调度协同生产环境通常会有多个团队共用一个智算中心资源池。有的跑全参数预训练有的跑 LoRA 微调有的跑增量训练有的在跑目标检测类任务的微调。这些工作负载的资源需求粒度差异很大。如果资源池只按“硬件属性”切分比如 A100 池、H800 池而不考虑训练作业的弹性需求系统就只能在作业边界做调度无法深入作业内部调整资源。MegaScale-Omni 很可能把资源池分成了两个视角硬件视角的物理节点组以及作业视角的逻辑弹性切片。物理节点组用于满足节点亲和性、网络拓扑、带宽是否满足张量并行等基础设施约束逻辑弹性切片则表达“这段训练作业当前愿意释放或接收的最小资源单元”。调度器在作业之间的调度只决定切片归属作业内的并行度调整决定切片内部如何使用。这种两层模型的好处是平台可以同时兼容传统排队调度和动态弹性调整而不需要把旧系统推翻重建。2.3 框架层、调度层、存储层必须联动多模态训练弹性调度如果想要落地只改调度器是远远不够的。训练框架负责模型状态和优化器状态调度层负责资源再分配存储层负责多模态数据的读取与样本流重排。假设调度器决定把一个任务从 32 卡缩到 16 卡但训练框架的数据迭代器不知道还在按原来的 batch 大小从数据集取样又或者数据加载管线仍按原先的模态组合预取样本就会导致样本浪费和 I/O 热点偏移。这类联动问题可以拿公交系统来类比资源池是车辆调度中心训练框架是司机存储层是乘客。调度中心决定减少两辆车司机必须知道如何合并乘客而乘客必须配合重新排队。如果调度中心只发一个指令司机和乘客都不动结果就是车子减少了人还在原地挤。MegaScale-Omni 的“跨层协同”设计正是要把这三个角色统一到一个控制平面上让“弹性伸缩”这个动作在调度、框架、存储三个层次上都保持一致的状态视图。3. 核心机制实现与技术要点3.1 动态批尺寸与序列级别弹性想要在不改变模型并行拓扑的前提下提升资源利用率最直接的手段就是动态调整训练 step 的 batch 大小和序列长度。多模态数据天然支持这种弹性图像编码器可以同时处理不同分辨率的输入音频编码器对变长声学特征也有 paddding 策略语言模型部分对 token 数量的容忍度更高。实现上通常有几个层级。最简单的是按显存余量动态调整下一轮迭代的样本包装方式比如把同一模态、相近长度的样本放在一个 micro-batch 里。更进一步可以在数据加载阶段就生成多种粒度的“样本桶”训练循环根据当前显存水位选桶。这个方案对纯文本大模型来说已经有成熟实践但多模态场景会复杂不少因为各模态特征之间还有耦合视觉塔的输出会转化为序列特征再进入语言模型图像样本的处理时间也长得多。所以动态 batch 不能只盯显存还要盯数据管线中各类模态样本的生产速率否则系统会追着显存跑结果数据供给跟不上又退化为 GPU 等待。3.2 故障驱动的作业内重配置生产环境的故障是无法避免的。MegaScale-Omni 这类系统会在故障发生时通过作业内重配置来实现“不让整个训练作业从头再来”的效果。当检测到某张卡或某个节点不可用系统先标记故障资源从当前副本中读取模型和优化器状态然后基于剩余健康资源重新计算并行拓扑继续训练。整个过程对用户暴露的语义是“训练没有中断只是并行度变小了”。关键难点在于故障检测的准确性。我实测下来只看心跳或 NVLink 错误根本不够。故障通常有一长串先兆比如 GPU 温度异常抬升、显存 ECC 错误计数增加、集合通信超时频率升高、小批量推理耗时抖动。生产系统里比较实用的做法是维护一个多维健康指标矩阵只有当多个指标同时满足阈值时才触发迁移。误判比漏判更可怕因为无意义的拓扑重配置会白白消耗几十分钟时间。3.3 拓扑感知的资源扩展算法弹性扩容时不能“闭眼加卡”。多模态大模型训练对通信带宽要求极高尤其是张量并行和流水线并行之间的通信与节点内 NVLink、跨节点 RDMA 的物理拓扑强相关。如果扩容后新增卡跨机分布可能会导致每个 step 的通信时间翻倍训练反而变慢。所以弹性调度算法必须做拓扑感知优先级通常是先在同一节点的空闲卡上补足某个并行组的宽度再扩展到同一交换域内的其他节点。用公式来描述的话目标函数可以抽象成最大化有效算力产出最小化跨节点通信开销同时满足并行组大小约束和节点亲和性约束。实际工程里调度器会先做 GPU 资源匹配排除有故障记录的卡再按带宽矩阵计算候选拓扑的通信代价。这部分属于系统设计中的硬核内容MegaScale-Omni 在论文标题里突出“超大规模”大概率在这一层做了不少文章毕竟只有拓扑感知的伸缩才能保证“弹性”不变成“负优化”。4. 工程落地在自有训练平台上复现弹性能力4.1 先从训练框架侧打开弹性改造如果你所在团队也想把平台往弹性方向演进我的建议是改造顺序自下而上先让训练框架具备保存和恢复完整运行时状态的能力再去碰调度器。因为不管调度器做得多花哨框架不能理解“拓扑变更指令”一切白搭。具体做法是给训练主循环增加两个钩子一个是 pause/quiesce 钩子用于暂停数据迭代、完成队列刷新、将模型梯度同步到确定性状态另一个是 reconfig 钩子用于在给定新拓扑参数后重建分布式组、重算模型分片、恢复优化器状态。有了这两个钩子调度器只需要下发目标拓扑剩下的交给框架。4.2 指标采集体系是弹性的基础没有观测就没有弹性。以下指标建议在训练平台里全部覆盖指标类别具体指标使用场景吞吐指标samples/s、step time、MFU判断弹性调整后训练速度是否真正提升资源指标每卡显存峰值/均值、NVLink 利用率判断扩容瓶颈在算力还是通信I/O 指标数据队列深度、样本预取耗时、存储带宽判断数据管线是否成为弹性扩展短板稳定性指标卡故障次数、通信超时次数、慢节点评分触发弹性收缩或故障迁移的重要依据事件指标checkpoint 耗时、拓扑重配耗时评估弹性操作本身带来的开销这些指标要全局汇总到一个监控服务里不要留在各节点本地。因为弹性调度是全局动作任何一个节点的异常信号都可能是触发重配的理由。4.3 渐进式灰度与混合负载调度弹性系统刚上线时不要一上来就接管整个集群。建议先选择少量对训练连续性要求没那么高的增量训练任务做灰度收集系统在真实故障和多任务竞争下的行为数据。等稳定后再开放给全参数预训练任务。还有一个容易被忽略的点生产集群通常同时跑全参数训练、LoRA 微调、增量训练、甚至推理服务。不同任务对弹性的敏感程度不同。全参数训练对拓扑变化容忍度最低LoRA 任务因为可插拔适配器特性更容易在多个资源池间迁移。调度策略宜设置为“低优先级可抢占任务优先做弹性收缩高优先级长训练任务仅在故障时触发弹性重配”。4.4 checkpoint 与数据管线的配套改造弹性扩容缩容必然伴随 checkpoint 的原子性调整。如果在弹性收缩动作正在发生时触发 checkpoint 保存很容易保存到一半的拓扑信息导致恢复时混合了新旧两组拓扑的状态。稳妥做法是弹性动作前先把训练推到安全同步点让所有 rank 完成梯度同步和状态落盘再执行拓扑变更。这个过程通常伴随十几秒到几十秒的训练停顿需要接受。数据管线方面多模态数据海量且异构。如果数据加载器不能按新的数据并行度重新迭代弹性扩到 8 个数据并行副本后可能出现数据重复或样本覆盖不足。建议把数据管线改造成“可分割的流式迭代器”让每个 rank 持有数据集的全量索引视图利用轮询或哈希分片规则动态决定自己消费哪部分样本。这样拓扑变化后各 rank 能够快速重新对齐样本流。5. 常见问题与排查技巧实录5.1 慢节点误判导致运维风暴弹性系统上线初期最常见的问题不是故障恢复失败而是慢节点误判。某个节点因为别人在跑高负载的聚合任务网卡带宽被暂时挤占训练采集到的 step time 瞬间变长。调度器如果只看 step time 这一个指标就会误判该节点故障触发重配。结果训练任务被强制改了拓扑但其实是虚惊一场。排查思路是降低单指标敏感度。比较可靠的做法是用一段滑动窗口内的“相对性能分位数”来判断慢节点并与该节点最近是否有错误日志做交叉验证。另外要区分“因为负载高导致的慢”还是“因为硬件故障导致的慢”前者通常会随邻居任务结束而恢复后者会持续恶化。5.2 弹性收缩与 checkpoint 状态不一致处理不好收缩时机会踩到“状态不一致”的坑。某个任务从 32 卡缩到 16 卡新的 16 卡拓扑从旧 checkpoint 恢复但因为数据并行度变化优化器状态的切分位置发生了变化。分布式优化器比如 ZeRO 或分片式 Adam在状态重映射时只要 rank 映射表有丝毫错位后续训练数值就会异常表现为 loss 居高不下或偶发 NaN。排查时要重点检查三件事第一新旧拓扑下模型权重的全局索引顺序是否一致第二优化器中各状态张量的分片偏移量是否重新计算第三数据加载器的采样顺序是否与新的数据并行度匹配。建议在代码里显式记录拓扑版本号恢复时比较版本不一致就直接拒绝启动避免静默出错。5.3 多模态 I/O 抖动在扩容后放大多模态数据源多、格式杂I/O 抖动本来就比纯文本严重。弹性扩容后新加入的数据加载 worker 会一瞬间加大对存储系统的读取压力。如果存储侧没有缓存或配额控制会出现全部 worker 卡在读取小文件上的情况GPU 利用率哗哗往下掉。我的实操建议是分层缓冲。第一层是内存中的样本池每个 worker 预取两个 batch第二层是本地 NVMe 盘缓存把热点数据集的解码结果缓存起来第三层才是分布式存储。弹性扩容时优先让新 worker 从缓存层拉数据等存储压力稳定后再逐步放到全量读取。多模态样例的预处理管线也必须支持断点续跑不能因为某一路视频加载失败就整个 batch 报废。5.4 弹性调整后的学习率与 batch 语义错位调整 batch size 会让梯度的噪声尺度变化。对于全参数预训练任务如果数据并行度变化导致全局 batch size 发生变化但学习率方案没有同步扩展训练可能出现不稳。一个常见做法是采用“等效 batch 自适应的学习率缩放”即根据当前全局 batch size 与基准 batch size 的比例调整学习率。但这在实际工程里要谨慎调度层管不了学习率训练框架里又得单独实现一个回调函数。因此MegaScale-Omni 这类系统如果要做得完善应该在拓扑变更消息里显式携带“建议全局 batch size”由训练框架的学习率调度模块决定是否调整。这里没有一刀切的公式不同模型、不同优化器、不同初始学习率都有差异更需要实验验证。结尾一点实战体会结合我做训练平台的实际经验MegaScale-Omni 这类弹性系统最值钱的地方不是把资源利用率提升了多少而是把生产环境的“不可控故障风险”转换成了“可预期的重配置操作”。哪怕弹性收缩只是把止损时间从两小时降到半小时对整个训练任务的连续性和平台稳定性来说收益都是巨大的。如果你打算在自有平台里尝试类似方案我建议不要一上来就追求全自动弹性调度。先从“故障自动重配置”这个最小闭环做起让系统能在一个节点宕机后自动以较小拓扑继续训练。这一步跑稳了再去做动态扩容和混合负载调度。有条件的话强烈建议安排一次“拔卡演练”在训练过程中手动逐张下线 GPU看看系统需要多久才能恢复训练、恢复后 loss 曲线是否连续、checkpoint 是否还能正常工作。踩过几次坑之后你才能真正理解弹性系统里“细节决定生死”这句话的分量。

相关新闻

666666是什么意思?从网络流行语到社交万能表达

666666是什么意思?从网络流行语到社交万能表达

如果你在任何一个聊天群里甩出一串"666666",大概率会收获一排整齐的"666",然后对话就在一片祥和的气氛中结束。这个由六个6组成的数字串,看起来像是一串乱码,实际上是一句话,一句中国人如今最顺口…

2026/10/10 10:33:29 阅读更多 →
BleWinrtDll实战指南:从解压编译到BLE设备读写

BleWinrtDll实战指南:从解压编译到BLE设备读写

简介:BleWinrtDll-main.zip是一份面向Windows平台蓝牙应用开发者的PC蓝牙调试工具源码包,以内置的BleWinrtDll项目为核心,封装了基于Windows运行时(WinRT)的蓝牙低功耗(BLE)交互接口,便于在PC端完成BLE设备调试与协议分析&#xf…

2026/10/10 10:32:27 阅读更多 →
AVS视频编码标准全解析:从底层原理到AVS3工程实践

AVS视频编码标准全解析:从底层原理到AVS3工程实践

直接切入正题。视频编码标准这行当,AVS是个绕不开的名字。从地面数字电视到8K超高清直播,从参考软件到芯片IP,AVS这十几年一步一步走过来,技术迭代和产业落地都有不少值得聊的东西。这篇文章不打算念PPT,就从一个实际做…

2026/10/10 10:32:27 阅读更多 →

最新新闻

【Claude Code】BMad-Method 多智能体协作实战:PRD 与架构文档一键生成,TaoToken 统一 Key 接入

【Claude Code】BMad-Method 多智能体协作实战:PRD 与架构文档一键生成,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/10 21:46:35 阅读更多 →
JVM target 5编译报错排查:JDK 17下Language level与Maven配置修复指南

JVM target 5编译报错排查:JDK 17下Language level与Maven配置修复指南

1. 这个报错到底在说什么——先把错误文本拆开看先放出完整报错原文,很多朋友发的截图往往只截了前半截,导致搜不到有用的解决方案:java: Cannot compile module api-test-fix1 configured for JVM target 5: the JDK Oracle OpenJDK 17.0 do…

2026/10/10 21:46:35 阅读更多 →
标签即输入:拆解 GLiNER2.5-Decide 的 Schema 驱动分类,为什么它不需要固定输出层

标签即输入:拆解 GLiNER2.5-Decide 的 Schema 驱动分类,为什么它不需要固定输出层

标签即输入:拆解 GLiNER2.5-Decide 的 Schema 驱动分类,为什么它不需要固定输出层 【免费下载链接】GLiNER2.5-Decide 项目地址: https://ai.gitcode.com/hf_mirrors/fastino/GLiNER2.5-Decide 传统文本分类模型的命运,从诞生那一刻起…

2026/10/10 21:46:35 阅读更多 →
Windows 开机自启的 OpenClaw 重启失败?Telegram 报错?三步定位 + 五步复现(含完整命令)

Windows 开机自启的 OpenClaw 重启失败?Telegram 报错?三步定位 + 五步复现(含完整命令)

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

2026/10/10 21:46:35 阅读更多 →
Kimsuky 2026 离线 AI 攻击栈拆解:从 GitPower 到 RAG 的间谍活动演化与 TaoToken 统一通道验证

Kimsuky 2026 离线 AI 攻击栈拆解:从 GitPower 到 RAG 的间谍活动演化与 TaoToken 统一通道验证

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

2026/10/10 21:46:35 阅读更多 →
GPU算力怎么选?从并行计算到AI大模型实战指南

GPU算力怎么选?从并行计算到AI大模型实战指南

今年明显感觉身边聊GPU算力的人变多了。以前大家问显卡,翻来覆去就是“能不能流畅玩XX游戏”“帧率多少”,现在画风完全不一样了,开口就是“这卡能跑多少B参数的模型”“显存够不够微调”“深度学习吃不吃得消”。说白了,不管游戏…

2026/10/10 21:45:34 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23: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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →