国产算力与国产大模型落地实践:从硬件选型到推理优化全复盘
国产算力与国产大模型我最近在多个项目里把这两样东西放在了一起本文就是这次从选型到落地的经验复盘。这轮AI的竞争底层拼的是算力和模型的协同能力。过去一年我陆续接触了几套国产算力集群方案也帮几个客户把他们自研或开源的国产大模型往国产硬件上迁。踩过坑走过弯路但总体趋势已经非常明确国产大算力配上国产大模型不再是“能不能跑”的验证阶段而是进入了“怎么跑得更快、更稳、更划算”的实效阶段。这篇内容我尽量写透覆盖硬件选型、并行策略、算子适配、推理优化和集群调度几个关键环节。不管你是做模型训练、平台工程还是应用开发这几块内容都绕不开。先给结论这套组合的瓶颈不在芯片峰值算力而在软件栈的成熟度和工程化的精细程度。谁先把这个短板补上谁就能跑在前面。1. 选型思路为什么“国产算力国产模型”是必然趋势1.1 需求侧的逻辑训练和部署大模型算力成本始终是核心约束。用通用GPU跑DeepSeek这类开源模型成本曲线非常陡峭。我做过测算一个7B参数的稠密模型在通用加速卡上做全参数微调单次实验的算力成本动辄数千元如果是多轮实验累计起来非常可观。国产算力卡的单价虽然也在涨但综合算上集群搭建、运维和长周期使用的成本相比进口方案有明显优势。尤其是推理场景国产卡的性价比优势更突出——单卡能承载的并发请求量和单位token成本在适配优化后完全可以和进口卡正面竞争。1.2 供给侧的变化这两年国产芯片的进步是实打实的。单卡FP16算力已经追到了国际主流产品的同一代际水平显存容量和带宽也不再是短板。更重要的是生态在逐步补齐开发框架适配了主流深度学习框架分布式通信库开始支持多机多卡的高性能通信推理引擎也能直接加载通用格式的模型权重了。我这次选型的核心标准有三条算力密度和显存容量是否能满足模型参数量需求软件栈是否支持高效的并行训练和推理优化工具链是否完善包括调试、性能分析和模型转换。这三条缺一不可只看纸面算力参数一定会踩坑。1.3 深层的产业协同效应这轮组合之所以能“换道提速”核心在于协同优化。国产加速卡厂商和模型团队的合作深度远超以往。过去模型跑在通用生态上芯片厂商只能被动适配现在双方在算子层面、通信层面做联合优化。比如针对模型的注意力机制定制融合算子针对MoE结构优化专家并行策略。这种深度协同是“国产组合”独有的优势也是换道提速的根本原因。2. 硬件平台认知与软件栈适配2.1 别按惯用套路调参拿到国产算力卡的第一件事不是马上开始训练而是重新理解它的架构特性。很多国产芯片的设计思路和常用芯片有本质区别计算单元的指令调度方式不同缓存层级和显存带宽的比例不同对数据精度格式的支持范围不同。我最初做迁移时按习惯设置了很大的批量大小结果发现显存经常吃紧、计算单元却大量空闲。后来调整策略把小批量、梯度累积、流水线并行结合起来才把硬件利用率拉上来。这类经验不在任何官方文档里只能靠压测和调试验证。2.2 软件栈全链路盘点一个成熟的软件栈至少包含这几层底层驱动和运行时库负责硬件抽象和资源管理算子库提供高效的融合算子和基础算子通信库负责多卡间的数据传输和集合通信上层框架适配层让主流的训练和推理框架能在上面跑工具链包括编译优化器和性能分析器。我建议你在选型前就把这些组件全部列出来逐一确认版本兼容性。我遇到过一种情况推理框架的某个版本依赖新的算子库接口但训练集群上的算子库版本较低导致模型转换和部署时频繁报错卡了好几天。2.3 异构计算的定位国产算力卡在单个机柜内组成训练集群时我倾向于采用异构计算思路一个典型部署是8卡训练机4台搭配2台高带宽存储节点组成一个训练单元单机通过高速网络互联。存储节点提供高速数据集缓存避免训练流程反复读文件拖慢整体速度。推理环境则独立部署用低延迟网络互联避免数据流量相互干扰。混合精度训练建议使用半精度为主、单精度为辅的策略主训练参数与优化器状态用单精度保存中间计算用半精度。国产芯片对混合精度的支持已经比较完善收益非常明显。3. 国产大模型的部署与微调实践3.1 模型选型与评估维度国产大模型的生态已经非常丰富从密集小模型比如7B、13B参数到大规模的MoE模型都有。选模型之前先确认三个问题第一任务类型是什么是文本生成、代码补全还是多模态理解不同任务的精度特征差异很大。第二算力预算能支撑多大参数量的模型做全参数微调还是只能用参数高效微调技术如LoRA第三是否需要商用许可。开源模型虽然可以免费商用但一些有着宽松授权的模型在改造自由度上更具优势能省掉后续不少麻烦。我经常给客户用一张评估表来辅助决策举例但结构和逻辑可复用评估维度说明权重建议模型能力基线在目标任务上的表现与同类模型的对比30%资源占用显存消耗、推理时延、吞吐量、部署成本30%生态适配对国产训练框架、推理引擎、微调工具的兼容性25%授权与成本许可协议、商业使用限制、可改造性15%这几个维度权重可以根据实际项目调整但每一项都要实际测试不能光看官方宣传。3.2 微调流程细节与实操选定模型后微调是整个流程中细节最多、最容易出问题的环节。我用一个标准流程说明第一步数据准备。将原始数据统一成对话格式做清洗和去重。这一步特别重要数据质量直接决定微调效果。我把清洗规则列得比较长过滤敏感词、剔除重复样本、处理表情符号、统一标点。做中文任务的时候还要额外处理繁体简体混合和口语化表达。第二步定义微调策略。资源有限我一般用LoRA冻结原模型参数只训练低秩矩阵。需要更新的参数量可以控制在全参数的1%左右显存开销大幅下降。对于能力较强的基座模型只用几百条高质量样本做指令微调效果就可以非常明显。第三步训练参数配置。在国产芯片上学习率设置我建议比惯用值略低配合小幅度的预热步数。批量大小设小一些用梯度累积补足。序列长度则根据任务调整做摘要生成就设短一些做长文档理解就逐步增加到更长。训练过程中除了观察损失曲线我还会关注梯度范数和激活值分布。我遇到过损失曲线在下降但生成质量变差的反常现象后来排查发现是数据里的某个标签字段污染了模型输出格式。这就不是训练参数能解决的必须重新清洗数据。第四步评估与迭代。微调完成后不能只盯着测试集指标。我习惯让模型在真实业务样本上跑一遍输出人工评估可读性和格式一致性。这一步能发现自动化指标发现不了的问题。3.3 推理优化与部署要点部署是大模型落地的“最后一公里”也是国产算力组合最容易暴露短板的环节。主要性能指标是吞吐量和响应时延。核心优化手段如下动态批处理把多个并发请求动态合并成一批可以显著提升吞吐量。在线推理服务建议开启但要注意单批请求长度差异太大时会拖慢整体响应需要设置合理的超时时间。显存管理优化使用KV Cache复用和连续显存分配技术减少显存碎片。我实测过仅优化显存分配这一项单卡并发能力就能提升约40%。低比特量化把权重压缩到INT8甚至更低来换取推理加速。国产芯片对低比特计算支持不错但在量化时要小心精度损失。我用过几种量化工具对同一个7B模型做对比在保证答案准确率下降控制在1%以内时INT8推理速度相比原来的FP16部署提升约1.5倍且显存占用降低了约一半。部署架构方面我推荐把推理服务拆成两个独立层入口层负责请求鉴权、流量控制、负载均衡和基础安全校验推理层真正跑模型推理的Worker节点支持弹性扩缩容。两层分离的好处是推理层可以根据请求量独立扩容没有服务入口的压力入口层也不会因为推理拥堵而垮掉。4. 并行策略与通信瓶颈排查4.1 并行策略怎么选训练大模型绕不开分布式并行。我常用的并行方案有四种数据并行、流水线并行、张量并行和专家并行。它们解决的问题各不相同组合使用时需根据模型和集群规模动态调整。数据并行的实现最简单核心代码改动少适合小规模试水。问题在于显存占用大户即优化器状态和梯度会随着并行进程数线性增长。所以纯数据并行只适合一行GPU放得下的模型。流水线并行把模型按层切成多段分配到不同设备上执行能解决超长模型显存不够的问题。但我体验下来它的短板是设备之间存在等待气泡利用率上不去。建议把切分点选在计算量相对均衡的地方每段包含层数不必相同只要总耗时接近就行。张量并行把每一层的矩阵计算切到多张卡上通信量极高只适合在一个节点内使用节点间网络带宽满足不了。MoE模型中的专家并行是把不同的专家模块分到不同设备上能大幅提升大规模MoE的训练效率但路由通信同样是瓶颈。我在训练一个13B密集模型时用的是“数据并行流水线并行张量并行”的三级组合先按张量并行把单层切到4卡再按流水线切成4段最后在节点间做数据并行。这样既压低了单卡显存又把节点内的高带宽通信充分利用起来。4.2 网络通信是隐藏瓶颈并行训练里网络通信最容易被忽视但恰恰是决定扩展效率上限的关键。我用一个通用公式来估算通信占比如果一张卡在单个batch里的计算耗时是T通信耗时是C理想扩展效率是 1/(1C/T)。通信占比每高一点效率损失都被放大。排查通信瓶颈我会重点关注三个位置第一集合通信模式的实现效率。大规模并行训练中全规约操作是最常见的集合通信。有的实现是层次化的先归约到节点内再跨节点归约性能就高有的实现是平面广播集群规模一大立刻崩溃。我建议在选型时直接压测一下多节点场景下的通信带宽和扩展效率不要等训练跑起来才发现。第二网络拓扑感知。训练任务调度时要尽量让频繁通信的进程组落在同一个交换域内。有一次我们的训练集群效率极低排查到最后发现是容器调度策略把8个进程均匀散在了两个交换域里跨交换域通信占了总通信量的60%以上。我把调度策略改为拓扑感知优先后训练耗时直接降了35%。第三网卡和驱动的流控设置。国产网络设备有些特性需要手动开启。比如某些网卡的流控默认关闭高负载下丢包严重就会导致通信超时。这类问题特征是训练间歇性变慢日志里有大量重传记录。打开流控并调大缓冲区之后问题基本消失。4.3 框架层面还有哪些优化空间现在的深度学习框架自身也做了不少针对国产芯片的优化但默认参数不一定适合你的模型。值得动手的优化点包括关闭冗余的梯度同步有些框架默认每步都同步所有梯度改为按层分组异步同步能减少通信量启用融合优化器把优化器更新操作融合进计算流减少多次内核启动的开销使用编译缓存反复跑相同结构训练任务时把图编译产物缓存起来二次任务启动能快非常多。这些优化每项都在细节里但叠加起来很可观。我一度把一个7B模型的训练吞吐提升了近20%改的全是框架层配置硬件没动过。5. 推理服务的完整落地实录5.1 一个可复用的部署架构推理服务的架构我直接给出一个能落地的方案。一个完整的推理服务至少包含模型仓库存放模型权重、版本信息和配置预加载服务服务启动时把模型加载进显存并完成预热避免首次请求过慢推理Worker按副本数水平扩展每个副本独立加载模型实例网关入口负责将请求分发到各副本支持轮询和最小连接数策略。我实际的部署步骤是把训练好的模型权重导出为标准格式在推理引擎里做精度校验和量化校准写一份部署配置指定模型路径、量化类型、最大并发数和显存分配策略启动预加载服务并做一次白名单请求确认推理结果正确拉起网关入口把线上流量导过来持续观测延迟、吞吐、显存水位和请求失败率。关键效果同一批请求在优化前是逐个排队处理优化后并发成批进入延迟最大的那些请求减少了近一半整体吞吐翻了一倍。这些数字与硬件和模型规模有关不作为绝对值参考但优化空间是真实的。5.2 推理阶段的性能调优记录这个环节最花时间也最容易有成就感。第一天我拿到一个国产算力集群单节点8卡准备部署一个13B模型。最初用默认参数启动单实例只能并发处理少量请求响应延迟还偏高显卡利用率不到20%。问题出在依赖的算子实现版本过旧部分计算流程没有融合。更换版本并开启自动融合后显存分配碎片化问题也随之改善。随后调整了动态批处理的等待窗口从固定值改为自适应值请求少时减少等待请求多时拉开一点窗口凑大批次。吞吐量又提升了一截。最后用量化把模型从原精度压到INT8同时做了一层输出概率的补偿保证生成质量不塌。至此才算完成。整个调优周期约两周大部分时间花在定位算子级瓶颈上。5.3 可观测性建设运维侧容易忽略的是可观测性。推理服务一旦出问题如果没有完善的指标监控排查会非常痛苦。我建议至少要覆盖这些指标基础设施层卡利用率、显存使用率、温度、互联带宽服务层推理请求数、平均延迟、P99延迟、批大小分布业务层生成成功率、平均生成token数、内容拒答率资源层进程CPU内存占用、网络连接数、磁盘IO。把这些指标接入现有监控体系配上告警规则。比如P99延迟连续5分钟超过阈值就报警显存水位超过90%就提醒扩容。有了这套优化和排查效率会高很多。6. 常见问题与排查技巧实录6.1 算子不支持导致的静默失败这是国产芯片迁移中最常见的一类问题训练能启动Loss也在降但某一轮突然出现NaN或报错原因往往是某个自定义算子没有对应实现框架悄悄走了兜底路径而兜底路径数值精度不达标。排查思路很简单固定随机种子复现问题逐步缩小范围到特定的算子再对照算子支持矩阵查是否命中已知兼容性问题。如果确认算子有问题改写成等价操作组合即可绕过。6.2 模型并行通信卡死现象多机训练时某个节点心跳超时任务整体卡住其他节点在等它。排查步骤先看节点的网卡状态和错误计数器有无大量丢弃包或错误包再看网络交换机端口有无异常告警最后看集合通信库日志确认卡住的是哪个集合通信操作。解决方向一般是调整网络驱动参数、换用层次化集合通信实现、或者把并行策略中的通信热点分散到不同网络路径上。6.3 推理时显存越用越满推理服务跑一段时间后显存持续上涨最终OOM。这是典型的显存泄漏。定位方法论记录显存随时间的变化曲线确认是持续上涨还是台阶式上涨关闭动态批处理功能看是否仍然泄漏以区分是缓存策略引发还是内核资源未释放升级推理引擎版本或显存分配器往往能解决一部分内核级泄漏问题。我在一个项目里排查了三天最后发现是某个老版本推理引擎的key-value缓存回收逻辑有缺陷。升级到新版本后显存曲线立刻变成了平稳直线。6.4 常见问题速查表现象可能原因排查方向训练Loss震荡不收敛学习率过大、数据顺序不当、梯度累积步数不匹配调低学习率、打乱数据顺序、检查累积步数设置训练速度远低于预期网络拓扑不感知、通信模式低效、批大小太小启用拓扑感知调度、压测通信带宽、增大批大小推理首token延迟高模型未预热、显存分配碎片化、算子未融合启动时做预热请求、开启显存复用、检查计算图融合日志并发一高就崩动态批处理等待窗口设置不当调整超时参数设置每批最大token上限生成内容重复率高解码参数不合适、长度惩罚太弱调整温度参数、增加重复惩罚系数7. 换道提速的经验总结把这一路的体会浓缩成几条供参考第一明确目标再选型。不同团队的情况天差地别有人需要极致训练性能有人只看推理性价比有人更看重二次开发的自由度。目标不同最优解必然不同。不要盲目追最新的旗舰卡也不要低估旧款多卡集群的整体产出。第二软件栈生态远比芯片算力参数重要。能跑起来、能优化起来、能排查出问题远比纸面性能数字重要。选型评估时建议留出两周时间专门做生态验证跑通工具链全流程。第三工程化水平决定上限。同样一套硬件和模型A团队可能跑出双倍于B团队的吞吐差别全在工程细节显存管理、并行策略、通信优化、请求调度。这些都要在项目初期就规划好不能等出了问题再补。第四团队要建立“硬件模型”的复合能力。过去做应用的和做芯片的是两个圈子现在必须融合。至少要有一个人能看懂计算图融合逻辑有一个人能读懂网络通信指标有一个人能做推理服务的容量评估。国产算力和国产模型的组合正在从“可用”走向“好用”。这个过程中没有银弹只有把每一个环节抠细、把每一分算力用在刀刃上才能真正跑出加速度。希望这篇文章能帮你少踩几个坑把时间花在更值得做的事情上。

相关新闻

世界模拟器与远程操作员:自动驾驶安全落地的双轮驱动

世界模拟器与远程操作员:自动驾驶安全落地的双轮驱动

自动驾驶行业最近有个很有意思的讨论:一边是号称“世界模拟器”的虚拟测试系统,能在几天内跑完现实中几十年都开不完的里程;另一边却是分散在海外的远程操作团队,依然要用人的眼睛去盯路、用手去接管车辆。这两个画面放在一起&…

2026/10/17 7:12:05 阅读更多 →
NLU模型蒸馏实战:领域数据为何比教师知识更关键?

NLU模型蒸馏实战:领域数据为何比教师知识更关键?

做NLU模型蒸馏这几年,我一直默认一个前提:蒸馏的核心是向大模型“偷师”,教师知识越充分,学生就越强。直到最近在某个面向垂直领域的NLU项目里跑完一整轮对比实验,结论让我有点意外——在目标领域有一定量标注数据的前…

2026/10/17 7:12:05 阅读更多 →
分布式系统下的DDD落地:聚合拆分、事件驱动与一致性设计

分布式系统下的DDD落地:聚合拆分、事件驱动与一致性设计

我接触过不少团队,一提“DDD落地”就兴奋地画出漂亮的聚合模型,可一到分布式系统里就卡壳:聚合的强一致性被网络分区撞碎,仓储的事务边界被多个服务共享,原本在单体里自洽的模型,拆开部署后变得怎么都不对味…

2026/10/17 7:12:05 阅读更多 →

最新新闻

函数调用集成实战:机器学习如何让AI原生应用从聊天到办事

函数调用集成实战:机器学习如何让AI原生应用从聊天到办事

上个月我在重构一个AI原生应用的信息聚合助手时,遇到一个特别典型的困境:模型已经很聪明了,能理解用户的复杂表达,但它只会输出文字。用户问"明天北京适合穿什么出门",它确实可以回答"明天北京有小雨&a…

2026/10/17 7:48:14 阅读更多 →
Python命令行待办清单实战:用标准库串起基础语法与本地持久化

Python命令行待办清单实战:用标准库串起基础语法与本地持久化

简介:这是一份面向 Python 初学者的命令行待办事项练习资源,帮助读者在本地环境中通过实现增删任务、保存与加载数据等核心功能,掌握 CLI 程序的基本开发思路。资源围绕 add_one_task、print_list、delete_task、save_todos、load_todos 五个…

2026/10/17 7:48:14 阅读更多 →
Python命令行待办工具入门:从零实现本地任务管理CLI

Python命令行待办工具入门:从零实现本地任务管理CLI

简介:这是一份面向 Python 初学者的命令行待办事项练习资源,帮助读者在本地环境中通过实现增删任务、保存与加载数据等核心功能,掌握函数封装、文件读写与 CLI 交互的基本思路。压缩包共 7 个文件,约 295KB,包含 2 个 …

2026/10/17 7:48:14 阅读更多 →
具身智能端侧推理引擎:从100ms到26ms的关键优化技术拆解

具身智能端侧推理引擎:从100ms到26ms的关键优化技术拆解

这套引擎到底解决了什么问题,又凭什么能把延迟压到 26ms,我结合自己跑过的一些端侧项目经验,做一个比较完整的拆解。先说结论:在具身智能这个赛道里,端侧推理引擎不是“把模型塞进机器人”那么简单。真正的难点在于&am…

2026/10/17 7:48:14 阅读更多 →
堆排序为何比快排慢?缓存局部性才是关键

堆排序为何比快排慢?缓存局部性才是关键

有一次我在某项目中需要给一个几千万规模的数据集排序,为了实现方便直接手写了堆排序。跑完一看耗时,比同复杂度、同样是 O(n log n) 的快速排序慢了将近一倍。一开始我以为是自己实现水平问题,直到用性能分析工具查看了缓存未命中数据&#…

2026/10/17 7:48:14 阅读更多 →
DbUtils下划线转驼峰:BeanHandler列名映射全解析

DbUtils下划线转驼峰:BeanHandler列名映射全解析

大概每个写过 JDBC 报表查询的 Java 开发者,都经历过类似的场景:数据库表里明明写着user_name、create_time,Java 实体类里是userName、createTime,用 Apache Commons DbUtils 的BeanHandler一查,返回的对象里全是 nul…

2026/10/17 7:47:13 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04: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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →