昇思MindSpore大模型训练:评估体系与性能优化实战指南
1. 大模型训练为什么不能只看loss曲线很多人第一次接触昇思 MindSpore 做大模型训练时最容易犯的一个错误就是把全部注意力放在 loss 曲线上。loss 降了就觉得一切正常loss 不降就疯狂调学习率。但真正跑过千卡以上规模训练的人都知道loss 曲线只是冰山露出水面的那一角水面下藏着的评估体系缺失和性能黑洞才是真正吃掉你训练预算的元凶。我见过太多团队模型结构设计得很漂亮数据管线也做得不差结果训练跑了三天才发现吞吐量只有理论值的四成GPU 利用率长期在 50% 以下徘徊。更糟糕的是他们没有任何中间评估机制只能等训练结束做一次完整评测才发现模型在某些关键维度上根本没有收敛。这时候再回头排查时间和算力已经烧掉了。所以这篇文章想聊的不是“怎么在 MindSpore 里跑通一个大模型训练脚本”这种入门话题而是围绕两个真正决定训练成败的核心问题展开第一如何建立一套贯穿训练全程的评估体系让你在训练过程中就能判断模型是否走在正确的路上第二如何系统性地做性能优化把每一张加速卡的算力真正榨干。这两个问题在昇思 MindSpore 的生态里都有对应的工具和方法论但官方文档往往只告诉你“有这个功能”不会告诉你“什么时候该用、怎么用才不踩坑”。这篇文章适合两类人一类是已经能用 MindSpore 跑通大模型训练、但训练效率不理想的工程师另一类是正在搭建训练评估流程、希望少走弯路的技术负责人。我会尽量把每个决策背后的逻辑讲清楚而不是只丢一堆配置参数给你。2. 训练评估体系从“事后验收”到“全程体检”2.1 为什么传统评估方式在大模型场景下失效传统小模型训练的评估逻辑很简单训练结束后在测试集上跑一遍看准确率、F1 值这些指标。但大模型训练动辄几周甚至几个月训练成本极高这种“事后验收”的模式风险太大。一旦最终评估不达标你根本不知道问题出在哪一步——是数据配比不对是学习率调度有问题还是某个阶段的梯度爆炸了。更关键的是大模型的评估本身就很复杂。它不像图像分类那样有一个明确的准确率指标生成式模型的评估涉及困惑度、生成质量、指令遵循能力、安全性等多个维度而且很多维度需要人工或强模型来打分。如果等到训练结束才做这些评估发现问题时已经来不及了。我在实际项目中总结出一个原则评估的频率应该和训练的不可逆程度成正比。也就是说训练越贵、越难回滚评估就应该越频繁、越前置。大模型训练显然属于“不可逆程度极高”的场景所以评估必须贯穿全程。2.2 在 MindSpore 中搭建分层评估机制基于这个原则我通常会把评估分成三个层次每个层次的频率和成本都不一样。第一层是步级健康检查几乎不增加额外开销。这一层不评估模型效果只监控训练过程本身是否健康。具体包括梯度范数是否稳定、loss 是否有异常尖刺、学习率是否符合预期调度、各层激活值分布是否正常。在 MindSpore 里这些可以通过mindspore.train.callback.Callback自定义回调来实现在每个 step 或每隔 N 个 step 采集一次。这一层的价值在于它能在训练早期就发现数值不稳定、梯度消失或爆炸等问题避免你跑了一周才发现模型根本没在学。第二层是阶段性效果评估每隔一定步数或 epoch 触发一次。这一层会真正跑一批验证数据计算困惑度、准确率等可自动化的指标。在 MindSpore 中可以用model.eval()配合验证数据集来实现但要注意验证集不能太大否则会严重拖慢训练。我的经验是验证集规模控制在训练集的 1% 到 5% 之间评估频率根据训练总步数来定一般每 5% 到 10% 的训练进度评估一次。第三层是关键节点深度评估只在少数几个关键节点触发比如训练中期和训练末期。这一层会调用更昂贵的评估流程包括生成质量评估、指令遵循测试、安全性检查等。这些评估可能需要调用外部模型或人工参与成本高但必不可少。下面这张表是我常用的评估层次配置参考评估层次触发频率单次开销核心指标主要目的步级健康检查每 10-100 step极低梯度范数、loss 稳定性早期发现训练异常阶段性效果评估每 5%-10% 进度中等困惑度、验证 loss判断收敛趋势关键节点深度评估2-3 次高生成质量、指令遵循最终效果把关2.3 评估指标的选择陷阱与实操建议选评估指标这件事看起来简单实际上坑很多。我踩过最典型的一个坑是过度依赖单一指标。早期我做文本生成任务时只盯着困惑度看困惑度降得很漂亮但生成出来的文本实际上重复严重、逻辑混乱。后来才明白困惑度衡量的是模型对下一个 token 的预测能力它和生成质量之间并不是严格正相关。所以在 MindSpore 里搭建评估体系时我建议至少覆盖三类指标。第一类是训练稳定性指标比如梯度范数、loss 方差这些反映训练过程是否健康。第二类是模型能力指标比如困惑度、下游任务准确率这些反映模型学到了多少。第三类是生成质量指标比如多样性、重复率、人工评分这些反映模型输出是否可用。具体到 MindSpore 的实现我通常会写一个自定义的评估回调把这几类指标的计算逻辑都封装进去。这里有个细节要注意MindSpore 的model.eval()默认会计算整个验证集上的平均指标但有些指标比如生成多样性需要在单个样本级别计算后再聚合不能直接用平均。这时候就需要自定义metric类继承mindspore.nn.Metric并实现update和eval方法。还有一个容易被忽略的点是评估的一致性。如果你在训练过程中用一套评估逻辑训练结束后又用另一套逻辑做最终评估两边的结果可能对不上。我的做法是把评估逻辑封装成独立的模块训练中和训练后都调用同一套代码确保评估口径完全一致。3. 性能优化先搞清楚瓶颈在哪再动手3.1 性能分析的正确打开方式性能优化最忌讳的就是“凭感觉调参”。我见过有人一上来就把 batch size 调大、把并行策略改复杂结果性能没提升多少反而引入了新的稳定性问题。正确的做法是先做 profiling找到真正的瓶颈再针对性优化。MindSpore 提供了mindspore.profiler模块可以采集训练过程中的算子耗时、内存占用、通信开销等数据。使用方式很简单在训练脚本里插入 profiler 的初始化和结束代码跑几十个 step 就能拿到一份详细的性能报告。但拿到报告之后怎么看才是真正考验经验的地方。我的分析顺序通常是这样的先看算子耗时分布找出最耗时的几个算子再看通信占比判断是不是通信瓶颈最后看内存占用曲线确认有没有内存泄漏或频繁的显存分配释放。这里有个经验值可以参考在理想的大模型训练中计算、通信、数据加载的时间占比应该大致是 7:2:1 或者更优。如果你的通信占比超过 30%那基本可以确定通信是主要瓶颈如果数据加载占比超过 20%说明数据管线需要优化。3.2 并行策略的选择逻辑MindSpore 支持多种并行策略包括数据并行、模型并行、流水线并行以及它们的组合。选哪种策略取决于你的模型规模和硬件配置。数据并行是最简单的每张卡持有完整的模型副本处理不同的数据批次。它的优点是实现简单、扩展性好缺点是每张卡都要存一份完整的模型和优化器状态显存占用高。当模型参数量超过单卡显存能承受的范围时数据并行就不够用了。模型并行是把模型的不同层切分到不同卡上每张卡只存一部分参数。它的优点是能支持超大模型缺点是切分方式对性能影响很大切得不好会导致大量跨卡通信。在 MindSpore 里可以用mindspore.nn.Cell的shard方法来做自动切分也可以用ParallelMode来手动控制。流水线并行是把模型按层分成多个阶段每个阶段放在不同的卡上数据像流水线一样依次流过各个阶段。它的优点是能有效利用多卡资源缺点是需要仔细设计微批次数量否则会出现“气泡”导致利用率下降。我的选型经验是这样的如果模型能单卡放下优先用数据并行如果单卡放不下但能放在少数几张卡上用模型并行加数据并行的混合策略如果是千亿参数以上的模型必须用流水线并行加模型并行加数据并行的三维并行。在 MindSpore 中配置这些并行策略主要通过mindspore.set_auto_parallel_context接口。这里有个容易踩的坑并行策略的配置顺序和参数之间有依赖关系配错了不会报错但性能会差很多。比如pipeline_stages必须和parallel_mode配合使用单独设置pipeline_stages而不设置parallel_mode为PipelineParallel是无效的。3.3 数据管线的优化细节数据管线是最容易被忽视的性能瓶颈。很多人把注意力全放在模型和并行策略上结果数据加载成了短板。在大模型训练中如果数据管线跟不上加速卡就会频繁等待数据利用率自然上不去。MindSpore 的数据管线基于mindspore.dataset模块优化手段主要有几个方向。第一是预取通过dataset.prefetch()让数据加载和模型计算重叠进行。第二是并行加载通过dataset.map()的num_parallel_workers参数控制并行度。第三是缓存对于小数据集可以用dataset.cache()缓存到内存或磁盘。但这里有个反直觉的点并行度不是越高越好。我实测过当num_parallel_workers超过 CPU 核心数的一定比例后性能反而会下降因为线程切换和资源竞争的开销超过了并行带来的收益。一般来说设置在 CPU 核心数的 50% 到 75% 之间比较合适。还有一个细节是数据格式。MindSpore 对某些数据格式有原生优化比如 MindRecord 格式的读取效率就比原始图片或文本文件高很多。如果数据量很大建议先转换成 MindRecord 格式再训练。转换过程虽然要花一些时间但训练时的收益是值得的。4. 训练稳定性那些让loss突然爆炸的隐形杀手4.1 梯度问题的排查与处理大模型训练中最让人头疼的就是 loss 突然爆炸。前一秒还稳稳下降下一秒就变成 NaN。这种情况往往和梯度问题有关。在 MindSpore 里排查梯度问题最直接的方法是开启梯度监控。可以通过自定义回调在每个 step 记录梯度范数。如果发现梯度范数突然增大几个数量级那基本可以确定是梯度爆炸。对应的处理手段包括梯度裁剪、降低学习率、调整初始化方式。梯度裁剪在 MindSpore 里可以通过mindspore.nn.ClipByNorm或mindspore.ops.clip_by_global_norm来实现。这里有个经验裁剪阈值不要设得太小。设得太小会限制模型的正常学习导致收敛变慢。我通常先用一个较大的阈值比如 1.0 或 5.0观察梯度范数的分布再根据实际分布来调整。梯度消失相对少见但在深层网络中仍然可能发生。表现是梯度范数持续很小loss 几乎不降。处理方法包括使用残差连接、调整激活函数、使用更好的初始化策略。在 MindSpore 中可以通过mindspore.common.initializer来指定初始化方式比如HeNormal或XavierNormal。4.2 混合精度训练的坑混合精度训练是提升大模型训练效率的常用手段它用 FP16 做前向和反向计算用 FP32 维护一份参数副本。这样做能显著减少显存占用、提升计算速度但也会引入数值稳定性问题。在 MindSpore 中混合精度训练通过mindspore.amp模块来实现。核心是auto_mixed_precision接口它会自动把部分算子转换为 FP16。但这里有个关键点不是所有算子都适合转 FP16。像 softmax、layer norm 这些对数值范围敏感的算子如果转成 FP16 容易溢出。MindSpore 的自动混合精度会维护一个黑名单和白名单但默认配置不一定适合你的模型。我的做法是先用默认配置跑一遍如果出现 loss NaN 或梯度异常再手动调整算子列表。可以通过mindspore.amp.custom_mixed_precision来指定哪些算子用 FP16、哪些用 FP32。另外loss scaling 也是混合精度训练中必不可少的一环MindSpore 提供了动态 loss scaling 机制能自动调整 scaling 系数省去了手动调参的麻烦。4.3 检查点与恢复训练的正确姿势大模型训练动辄几天几周中间难免遇到硬件故障或需要调整配置。这时候检查点机制就至关重要。MindSpore 提供了mindspore.train.CheckpointConfig和ModelCheckpoint回调来管理检查点。但保存检查点这件事有几个细节直接影响恢复训练的效果。第一是保存频率太频繁会拖慢训练太稀疏又可能丢失关键状态。我的经验是根据训练总时长来定保证两次保存之间不超过 30 分钟的训练量。第二是保存内容除了模型参数优化器状态、学习率调度器状态、当前 step 数这些都要保存否则恢复训练后学习率会从头开始影响收敛。还有一个容易忽略的点是检查点的完整性校验。我遇到过检查点文件写入过程中训练被中断导致文件损坏的情况。所以保存检查点后最好做一次校验确认文件能正常加载。MindSpore 的load_checkpoint接口在加载损坏文件时会报错可以把这个作为校验手段。5. 从单卡到集群规模扩展中的评估与性能挑战5.1 分布式训练中的评估同步问题当训练从单卡扩展到多卡甚至多机时评估逻辑也需要相应调整。最直接的问题是评估指标需要在所有卡上同步。如果每张卡各自计算指标再简单平均结果可能不准确因为不同卡上的数据分布可能不同。在 MindSpore 中分布式评估的同步可以通过mindspore.communication模块的AllReduce操作来实现。具体做法是每张卡计算本地指标然后用AllReduce做全局聚合。这里要注意的是聚合方式取决于指标类型对于 loss 这种可以加权平均的指标用AllReduce的sum模式再除以总样本数对于准确率这种需要先统计正确数再相除的指标要先AllReduce正确数和总数再在每张卡上计算最终值。另一个问题是评估的触发同步。在分布式训练中如果评估只在某张卡上触发其他卡可能还在继续训练导致状态不一致。正确的做法是用mindspore.communication的 barrier 操作确保所有卡都到达评估点后再一起执行评估。5.2 通信优化的实战技巧分布式训练中通信开销往往是性能的主要瓶颈。MindSpore 提供了多种通信优化手段但要用对场景。梯度融合是最常用的优化之一。它把多个小梯度的通信合并成一次大通信减少通信次数。在 MindSpore 中可以通过mindspore.nn.utils里的梯度融合接口来实现。但融合的粒度需要调融合得太粗会增加显存占用太细又起不到优化效果。我的经验是根据梯度张量的大小来定一般把几个 MB 级别的梯度融合在一起比较合适。通信与计算重叠是另一个重要手段。它的核心思想是在计算反向传播的同时把已经算好的梯度发出去让通信和计算并行。MindSpore 的流水线并行天然支持这种重叠但在数据并行中需要手动配置。可以通过mindspore.set_auto_parallel_context的comm_fusion参数来控制。还有一个容易被忽视的点是网络拓扑。在多机训练中不同机器之间的通信带宽往往远低于机器内部。如果并行策略没有考虑拓扑结构可能导致大量跨机通信严重拖慢训练。MindSpore 支持通过mindspore.communication获取当前设备的拓扑信息可以据此来设计更合理的切分策略。5.3 大规模训练中的故障恢复规模越大故障越频繁。在千卡集群上训练硬件故障几乎是常态。所以故障恢复机制必须设计好。除了前面提到的检查点机制还需要一套自动故障检测与恢复流程。基本思路是训练脚本定期向监控系统上报心跳监控系统发现某张卡失联后触发恢复流程。恢复流程包括重新分配资源、从最近的检查点加载、跳过已经训练过的数据。在 MindSpore 中可以结合mindspore.train.callback和外部监控工具来实现这套流程。这里的关键是检查点的保存要和数据加载进度对齐。如果只保存了模型参数没保存数据加载器的状态恢复后数据会从头开始加载导致重复训练。我的做法是在检查点里额外保存当前 epoch 和 step 数恢复时据此跳过对应的数据。6. 一些踩过坑之后才明白的事聊了这么多评估体系和性能优化的方法最后分享几个我在实际项目中踩过坑之后才明白的道理。第一个是关于评估频率的权衡。早期我为了省时间评估做得很少结果模型训练完才发现效果不达标只能重跑。后来我把评估频率调高又发现评估本身占用了大量时间。最终的平衡点是步级健康检查几乎不占时间可以频繁做阶段性评估控制在总训练时间的 5% 以内深度评估只在关键节点做。这个比例不是固定的需要根据你的训练规模和评估成本来调整。第二个是关于性能优化的顺序。很多人一上来就调并行策略但实际上数据管线和算子效率往往才是更大的瓶颈。我的建议是先确保数据管线不是瓶颈再优化算子实现最后才调并行策略。因为并行策略的调整往往牵一发而动全身改完之后前面的优化可能又要重新做。第三个是关于监控的重要性。大模型训练最怕的不是报错而是“静默失败”——训练看起来在正常跑loss 也在降但实际上模型根本没学到东西。这种情况往往是因为数据有问题、标签有噪声、或者某个关键层没有正确初始化。要发现这类问题只能靠完善的监控体系。我现在做训练一定会把梯度分布、激活值分布、参数更新量这些指标都监控起来任何一个出现异常都能第一时间发现。第四个是关于不要过度优化。性能优化是有边际递减效应的从 40% 利用率优化到 70% 可能只需要几天但从 70% 优化到 80% 可能要几周。在大多数场景下把利用率做到 70% 到 80% 就已经很好了剩下的时间不如花在模型效果和评估体系上。毕竟训练的目的是得到好模型而不是刷性能数字。这些经验不一定适用于所有场景但至少能帮你少走一些我走过的弯路。大模型训练这件事评估体系和性能优化是两条腿缺了哪条都走不远。希望这些内容对正在做 MindSpore 大模型训练的你有所帮助。

相关新闻

分布式训练权责架构:六层原子化设计与权限规约落地实践

分布式训练权责架构:六层原子化设计与权限规约落地实践

分布式训练这件事,真正让人头疼的从来不是"能不能跑起来",而是"跑起来之后谁该管什么"。我见过太多团队,模型并行、数据并行、流水线并行全都堆上去了,结果一个节点挂了,没人知道该找谁&#xff1…

2026/10/2 21:05:21 阅读更多 →
金兄弟合金木工锯条靠谱厂家用户力荐,实力参考

金兄弟合金木工锯条靠谱厂家用户力荐,实力参考

金兄弟合金木工锯条源头厂家直供,耐用锋利规格全,用户力荐的实力参考如果你正在为木工锯条频繁变钝、崩齿掉齿、切面毛糙而发愁,这篇文章值得花几分钟看完。浙江金兄弟锯业有限公司是一家扎根浙江台州路桥的锯切产品源头制造企业,…

2026/10/2 21:05:21 阅读更多 →
HarmonyOS智慧农业应用:成本核算系统设计与分摊引擎实现

HarmonyOS智慧农业应用:成本核算系统设计与分摊引擎实现

这一篇是"高高种地"系列教程的第12篇。前面11篇我们一路把环境监测、农事任务、物资库存这些模块都搬进了HarmonyOS应用,传感器数据能看了,地块档案也建好了。但每次跑农场,总被同一个问题问住:"你说这季种的黄瓜到…

2026/10/2 21:05:21 阅读更多 →

最新新闻

Cocos Creator做猜成语游戏:轻量跨端2D开发实战

Cocos Creator做猜成语游戏:轻量跨端2D开发实战

简介:本资源是一套基于Cocos Creator 2.3.3开发的完整猜成语游戏项目源码,面向游戏开发初学者与Unity/Cocos转型开发者,解决2D交互类益智游戏从零搭建、UI逻辑联动、本地数据驱动及跨平台发布等核心实践问题。压缩包共2765个文件,…

2026/10/2 21:45:52 阅读更多 →
yolov5人群计数与阈值报警:从Coco预训练到工程落地的完整方案

yolov5人群计数与阈值报警:从Coco预训练到工程落地的完整方案

简介:面向计算机视觉与公共安防场景,这份资源提供基于YOLOv5的实时人群计数与阈值报警实现。采用COCO预训练的person类权重,可对室内外不严重拥堵的画面进行人数统计,并在超过设定阈值时触发报警,适合需要快速部署人群…

2026/10/2 21:45:52 阅读更多 →
DOSBox中DEBUG汇编实战:从数制转换到物理地址计算

DOSBox中DEBUG汇编实战:从数制转换到物理地址计算

简介:本资源是《IBM-PC汇编语言程序设计》(沈美明、温冬婵编著)配套习题的完整参考答案,面向计算机专业本科生、汇编语言初学者及备考人员,旨在解决课后练习无标准解析、核心概念理解困难、手算验证缺乏依据等典型学习…

2026/10/2 21:45:52 阅读更多 →
北邮研一数据库大作业:学生成绩管理系统从选题到验收完整路径

北邮研一数据库大作业:学生成绩管理系统从选题到验收完整路径

简介:这份资源是北邮研一数据库课程大作业的完整详解文档,面向正在修读数据库系统课程、需要完成课程设计的研究生及高年级本科生。内容围绕学生成绩管理系统展开,覆盖需求分析、数据库设计、ER图绘制、逻辑结构设计与建表程序等完整流程&…

2026/10/2 21:45:51 阅读更多 →
校园二手交易网站毕设项目:SSM+Vue全链路实战解析

校园二手交易网站毕设项目:SSM+Vue全链路实战解析

简介:一套完整的校园二手交易网站设计与实现项目包,面向计算机相关专业毕业设计或课程设计使用者,采用 Java SSM Vue 技术栈构建,覆盖前台用户和后台管理员两类角色。系统包含商品浏览、二手发布、收藏下单、订单发货、求购信息…

2026/10/2 21:44:51 阅读更多 →
南山家常客家风味粤菜靠谱商家测评排名

南山家常客家风味粤菜靠谱商家测评排名

行业选择四大踩坑难题在深圳南山桃源街道周边找家常客家风味粤菜,很多人都踩过不少坑。 一是找不着地道口味的店:想吃正宗的手撕盐焗鸡、客家酿豆腐,跑了好几家店要么味道不够醇厚,要么用的食材不新鲜,吃不出老家的烟火…

2026/10/2 21:44:51 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/2 10:36:31 阅读更多 →
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/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练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/2 6:09:11 阅读更多 →