DCQCN 拥塞控制算法原理和参数配置
1. DCQCN 拥塞控制算法概述在现代数据中心网络中RDMA over Converged Ethernet (RoCEv2)已成为高性能分布式存储和 AI 训练集群的主流通信协议。RDMA 要求网络提供无损传输能力这对拥塞控制提出了严苛挑战。DCQCNData Center Quantized Congestion Notification是目前 RoCEv2 网络中最广泛部署的端到端拥塞控制算法由微软、Mellanox 等厂商共同提出。它的核心思想是结合 ECN 显式拥塞通知和 PFC 优先级流控在保证网络无损的前提下动态调整发送速率以缓解拥塞。1.1 为什么需要 DCQCN在 RDMA 网络中拥塞会导致严重的性能灾难问题类型具体表现PFC 风暴过度依赖 PFC 会导致头部阻塞Head-of-Line Blocking和多跳间的不公平竞争拥塞扩散单点拥塞通过反向传播影响上游交换机形成“拥塞树”吞吐量下降频繁触发 PFC 暂停帧会导致链路利用率骤降吞吐量剧烈抖动不公平性不同流量之间缺乏协调某些流长期“饥饿”DCQCN 的设计目标就是在 PFC 被触发之前主动感知并缓解拥塞同时保证流之间的公平性。2. DCQCN 算法原理2.1 算法整体框架DCQCN 主要由三个组件构成形成闭环控制交换机拥塞检测(ECN 标记)接收端拥塞通知(CNP 报文)发送端速率调节(RP) 速降与恢复网络拥塞状态变化交换机端CPCongestion Point检测队列深度对到达阈值的数据包打上ECN 标记。接收端NPNotification Point收到带 ECN 标记的包后向发送端回传CNP 拥塞通知报文。发送端RPReaction Point收到 CNP 后执行速降之后根据定时器和字节计数器逐步恢复速率。2.2 CP ECN 协议2.3 NP CNP packets2.3 RP DCQCN2.3.1 DCQCN 速率递减方案更新速率DCQCN每隔RATE_REDUCE_MONITOR_PERIOD us 检查是否收到CNP如果收到CNP做如下处理记录当前CurrentRate用作恢复阶段的TargetRate。注如果CLAMP_TARGE_RATE1TargetRate 在每次降速阶段更新。降低速率 currentRate currentRate - (1 - α/(2^RPG_GD))降速之后所有的timer/bytes counter 重置为0。TargetRate CurrentRate CurrentRate CurrentRate * (1 - RateReduceFactor * Alpha)更新Alpha每隔 DcQcnDceAlphaUpdatePeriod【dce_tcp_rtt】 周期更新α。如果在此期间收到 CNPalpha 增加否则减少。增加公式αα * G (1-G)减少公式α α * GG控制α的变化幅度G越小α变化越快。参考CC参数实际使用时候的速率公式增加公式α (dce_tcp_g/2^10) * α (2^10-dce_tcp_g)减少公式α (dce_tcp_g/2^10) * α速率公式currentRate currentRate(1-α/2^rpg_gd)Example RPG_THRESHOLD 4如下图给出的是rpg_threshold4 时事件触发速率变化场景横轴时间纵轴是速率整个时间线包含了升速、降速和再升速的过程第一个时间点升速Time Reset事件 对Current Rate进行了升速当前速率接近Target Rate第二个时间点降速RP接收到CNP进行降速Current Rate导致CP拥塞NP发出CNP第三个时间点降速RP再次接收到CNP进行降速接下来五个时间点发生四次Time Reset事件T32次Byte Reset(BC2)位于Fast Recovery阶段下个时间点再次Time Reset事件T4达到rpg_threshold所以进入Additive Increase接下来经过了1个Time reset和两个Byte reset此时 T 5 B4进入Hyper Increase的触发条件Clamp Target Rate (Clamp 0/1): 在更新速率时Clamp 机制决定了是否要严格重置或继承历史上的 Target Rate。例如 Clamp target rate 1 时每次收到CNP降速之后都要更新target_rate current_rate可以防止速率在短暂拥塞后恢复得过于激进。Clamp target rate 0Clamp target rate 12.3.2 DCQCN 速率递增方案如果没有持续收到 CNP 报文发送端会尝试逐步恢复带宽。提速的触发器 (Triggers to rate increment) 由计时器 (Timer) 和字节计数器 (Byte Counter) 共同决定。提速过程分为三个阶段 (Increment stages)如果没有持续收到 CNP 报文发送端会尝试逐步恢复带宽。提速的触发器 (Triggers to rate increment) 由计时器 (Timer)和字节计数器 (Byte Counter)共同决定。提速过程分为三个阶段 (Increment stages)快速恢复阶段 (Fast Recovery):速率迅速上升至最近一次降速前的 Target Rate以最大化利用闲置带宽。积极增加阶段 (Additive Increase):速率超过 Target Rate 后以固定步长试探性地增加。超积极增加阶段 (Hyper Additive Increase):如果网络依然顺畅速率会以更大的步长加速提升快速抢占空闲带宽。RP 通过定时器【Timer】和字节计数器【ByteCounter】来调整发送速率其方式与 QCN[17]完全相同。每当发送了 B 个字节后字节计数器会促使发送速率上升而定时器则会在 T 个时间单位过后促使发送速率上升。定时器的存在确保了即使发送速率下降到较低水平流量也能迅速恢复。这两个参数可以通过调整来达到所需的发送速率。Rate translation in the HW硬件速率转换 (Rate translation in the HW): 逻辑上计算出的目标速率最终会被网卡底层的硬件 Pacer 模块转化为实际的发包延迟 (Inter-packet gap) 进行微秒级的流量整形。2.3.3 DCQCN 参数 (DCQCN Configuration Parameters)NVIDIA 提供了丰富的 DCQCN 参数 供高级用户针对不同业务场景进行微调。以下是影响 DCQCN 行为的关键配置项拥塞度控制 (α \alphaα相关参数):rp_initial_alpha_value: 新流建立时的初始α \alphaα值。rp_g:α \alphaα值的指数衰减因子。决定了拥塞消除后α \alphaα值下降的平滑度。rp_min_dec_fac: 接收到 CNP 时速率下降的最小百分比阈值。提速触发器 (Increment Triggers):rp_time_reset: 触发状态机进入下一个提速周期的时间间隔微秒。rp_byte_reset: 触发提速的发送字节数阈值。当发送足够多字节且未收到新 CNP 时执行提速逻辑。速率限制与阶段阈值 (Thresholds Limits):rp_rate_to_set_on_first_cnp: 在一个周期内第一次收到 CNP 时立即设定的强制速率。rp_thresholds(如RPG_THRESHOLD 4): 决定状态机在快速恢复和积极增加阶段之间切换所需完成的循环次数。rp_clamp_flags: 布尔开关用于启用或关闭 Target Rate Clamp 特性。3. DCQCN 配置参数详解DCQCN 在 RoCEv2 网卡上的行为由一组可调参数控制。以下是 Mellanox/NVIDIA ConnectX 系列网卡的关键配置参数。3.1 拥塞通知【CC Param】相关参数GeneralMLNX_OFEDDescriptionRangeDefaultEnable在特定优先级上启用 RoCE 拥塞控制 (DCQCN)Enable (1) / Disable (0)EnableAlpha UpdateMLNX_OFEDDescriptionUnitRangeDefaultdce_tcp_g每隔 DcQcnDceAlphaUpdatePeriod【dce_tcp_rtt】 周期更新α。如果在此期间收到 CNPalpha 增加否则减少。增加公式*α(dce_tcp_g/2^10)α 2^10-dce_tcp_g 减少公式*α(dce_tcp_g/2^10)α, 速率递减公式currentRatecurrentRate(1-α/2^rpg_gd)Fixed point with 10 bits in the fraction part0…10231019dce_tcp_rtt见上文。Microseconds1…1310711initial_alpha_value此参数设置在收到流的第一个 CNP 时应使用的 alpha 初始值。Fixed point with 10 bits in the fraction part1…10231023dce_tcp_g dce - decrease tcp - 沿用QCN算法术语g - gain增益参数Rate DecreaseMLNX_OFEDDescriptionUnitRangeDefaultrate_to_set_on_first_cnp第一个 CNP 时的速率当前、目标(0 – 线路速率的 85%)。Mbps0, 1…line rate [Mbit/S]0rpg_min_dec_fac此参数定义单次事件中速率降低的最大比率。%0…10050rpg_min_rate此参数定义 QP 的最小速率限制。Mbps1…line rate1rpg_gdalpha 与速率降低因子之间的系降速公式currentRatecurrentRate(1-α/2^rpg_gd)*Log2 of value in fixed point with 10 in the fraction part10…1111rate_reduce_monitor_period速率降低之间的时间周期。microseconds1…UINT324Rate IncreaseMLNX_OFEDDescriptionUnitRangeDefaultclamp_tgt_rate如果设置每次速率降低时目标速率更新为当前速率。否则仅在增量事件后的第一次减量时更新目标速率为当前速率。NoneEnable/DisableDisabledrpg_time_reset速率增加事件之间的时间周期。Microseconds1…131071300rpg_byte_reset速率增加事件之间的已发送字节计数器。64 Bytes1…3276732767rpg_threshold进入下一速率增加阶段所需的速率增加事件阈值。None1…311rpg_ai_rate加性增加阶段的速率增加值。Mbps1…line rate5rpg_hai_rate超加性增加阶段的速率增加值。Mbps1…line rate50Notification PointMLNX_OFEDDescriptionRangeDefaultcnp_dscp此参数设置 CNP 的 DSCP 值。0…6348cnp_802p_prio此参数设置 CNP 的 PCP 值。设置 DcQcnCnpPrioMode 为 ‘0’ 以使用此优先级值。0…76DcQcnCnpPrioMode不需要设置如果设置了cnp_dscp和cnp_802p_prio该参数被自动设置。如果此参数设置为 ‘0’则使用配置的 CNP 优先级否则CNP 的优先级值取自接收到的数据包。0/10min_time_between_cnps从端口同一条优先级队列发送两次 CNP 之间的最小时间间隔微秒。0…409543.2 ECN 标记阈值参数ECN 标记由交换机完成通常在交换机端口配置参数名说明默认值建议范围ecn_min_absolute/ecn_max_absolute绝对队列深度阈值字节低于 min 不标记高于 max 全部标记min: 150KB, max: 1500KB取决于 Buffer 大小wred_ecn_enable启用 WRED ECN 标记enable必须开启ecn_marking_enable启用 ECN 标记功能enable必须开启3.3 PFC 相关参数DCQCN 与 PFC 协同工作PFC 参数需要在交换机端和网卡端对齐参数名说明默认值建议pfc_priority启用 PFC 的优先级一般是 3 或 63与 RDMA 流量优先级一致pfc_pause_timePFC 暂停帧的暂停时间quantum 512 比特时间65535100–65535pfc_xon_threshold恢复发送的队列深度阈值略低于 XOFF比 XOFF 低 10%–20%pfc_xoff_threshold触发 PFC 暂停的队列深度阈值视 Buffer 而定略高于 ECN max4. DCQCN 配置命令实战4.1 场景说明本节以Mellanox ConnectX-5/6 网卡 NVIDIA Spectrum 交换机为例演示 DCQCN 的完整配置。网络拓扑两台服务器直连交换机运行 RoCEv2 流量RDMA 流量映射到 Priority 3使用 DSCP 26 作为 RDMA 流量的标识4.2 网卡端 DCQCN 配置在服务器侧通过mlxconfig或sysfs配置 DCQCN 参数# 查看当前 DCQCN 参数mlxconfig-d/dev/mst/mt4125_pciconf0 query# 设置 RP发送端参数mlxconfig-d/dev/mst/mt4125_pciconf0set\DCQCN_RP_AI_RATE10\DCQCN_RP_BC_STAGE_THRESHOLD2097152\DCQCN_RP_GD16\DCQCN_RP_RATE_REDUCE2\DCQCN_RP_TIMER55\DCQCN_RP_BYTE_RESET0\DCQCN_RP_DCP_TIMER_CYCLES16# 设置 NP接收端参数mlxconfig-d/dev/mst/mt4125_pciconf0set\DCQCN_NP_CNP_PRIO6\DCQCN_NP_MIN_TIME_BETWEEN_CNP4通过 sysfs 实时调整 DCQCN 反应端参数 (Reaction Point)在开启 RoCE ECN 功能后网卡的 DCQCN 参数通常挂载在系统内核目录中以 mlx5_0 为例# 查看所有 RoCE CC 配置参数ls/sys/kernel/debug/mlx5/mlx5_0/cc_params/# 修改降速阶段的计时器和字节触发阈值echo50/sys/kernel/debug/mlx5/mlx5_0/cc_params/rp_time_resetecho32768/sys/kernel/debug/mlx5/mlx5_0/cc_params/rp_byte_reset# 调整初始 Alpha 值echo1023/sys/kernel/debug/mlx5/mlx5_0/cc_params/rp_initial_alpha_value4.3 交换机端 ECN PFC 配置NVIDIA Spectrum / Cumulus Linux# 进入交换机配置模式switch# configure terminal# 设置 PFC 优先级假设 RDMA 流量在 Priority 3switch(config)# dcb priority-flow-control enable forceswitch(config)# interface swp1-32switch(config-if)# dcb pfc priority 3 enable# 配置 PFC 阈值switch(config-if)# pfc xoff threshold priority 3 1000switch(config-if)# pfc xon threshold priority 3 800# 配置 WRED ECN 标记switch(config-if)# qos wred enableswitch(config-if)# qos wred ecn enable# 设置 ECN 标记的队列深度阈值switch(config-if)# qos wred ecn queue 3 min-threshold 150000 max-threshold 1500000# 将 DSCP 26 映射到 Priority 3switch(config)# dcb ets priority-group 0 bandwidth 80switch(config)# dcb ets priority-group 1 bandwidth 20switch(config)# dcb ets priority 3 group 1switch(config)# qos dscp-map dscp 26 priority 3# 保存配置switch(config)# write memory4.4 验证与监控命令配置完成后通过以下命令验证 DCQCN 是否生效# 1. 检查网卡 ECN 统计发送端cat/sys/class/infiniband/mlx5_0/ports/1/counters/ecn_marked_roce_packets# 2. 检查 CNP 收发统计ethtool-Seth0|grep-icnp# 3. 通过 perfquery 查看 RDMA 拥塞计数器perfquery-x-dmlx5_01|grep-iecn# 4. 在交换机侧查看 PFC 触发次数switch# show interface swp1 counters | grep pfc# 5. 实时监控 DCQCN 速率变化部分驱动支持watch-n1cat /sys/kernel/debug/mlx5/0000:3b:00.0/cc_params/*/current_rate4.5 常见调优建议场景调优方向延迟敏感型业务如分布式存储降低ECN min阈值尽早触发拥塞通知减小AI_RATE避免速率过快增长高吞吐型业务如 AI 训练集合通信增大BC_STAGE_THRESHOLD减少恢复阶段的触发频率适当提高AI_RATE混合流量环境提高NP_MIN_TIME_BETWEEN_CNP避免 CNP 泛滥影响正常流量频繁 PFC 触发降低ECN max阈值让 ECN 在 PFC 之前介入增大RATE_REDUCE逆数以加快降速5. 总结DCQCN 是 RDMA over Converged Ethernet 网络中最核心的端到端拥塞控制机制。它通过ECN 标记 → CNP 通知 → 发送端速降与恢复的闭环在保证无损传输的同时显著提升网络利用率。配置 DCQCN 时需要关注三个层面的参数协同交换机端ECN 标记阈值与 PFC 阈值需要形成梯级保护ECN 先于 PFC 触发接收端NPCNP 生成频率不能过高避免拥塞信号放大的正反馈发送端RP速降因子和恢复参数需根据业务延迟/吞吐需求进行针对性调优在实际部署中建议先在测试环境通过perfquery和网卡计数器观察 DCQCN 行为再根据业务特征微调参数最后通过灰度发布推广到生产环境。参考链接DCQCN CC Algorithmhttps://enterprise-support.nvidia.com/s/article/DCQCN-CC-algorithmDCQCN Parameters: https://enterprise-support.nvidia.com/s/article/dcqcn-parametersDCQCN经典论文: https://conferences.sigcomm.org/sigcomm/2015/pdf/papers/p523.pdfhttps://zhuanlan.zhihu.com/p/1986442361417519293

相关新闻

C语言:初识C语言

C语言:初识C语言

文章目录前言本文旨在提供对C语言的初步介绍与基本认识。一、C语言是什么?二 、C语言的历史和贡献历史贡献三、C语言需要的工具翻译工具:编译器+链接器四、第一个C语言程序源文件、头文件第一个C语言程序main函数(主函数&#xff…

2026/10/18 8:40:16 阅读更多 →
Unity前向渲染与多光源Shader实战:从平行光到聚光灯的完整实现

Unity前向渲染与多光源Shader实战:从平行光到聚光灯的完整实现

1. 项目概述:从“照亮”到“塑造”的进阶之路刚接触Unity Shader那会儿,觉得能写个漫反射让模型亮起来,就算入门了。直到开始做稍微复杂点的场景,比如一个同时有手电筒、路灯和全局环境光的室内,问题就来了&#xff1a…

2026/10/19 20:43:57 阅读更多 →
Python微博舆情分析系统:从数据采集到可视化实战

Python微博舆情分析系统:从数据采集到可视化实战

1. 项目背景与核心价值去年接手某品牌社交媒体监测项目时,我深刻体会到人工分析海量微博数据的无力感。当时团队需要连续72小时轮班监测舆情,不仅效率低下,还容易因主观判断导致情感倾向误判。这个痛点直接催生了我们现在要讨论的Python微博舆…

2026/10/19 12:55:07 阅读更多 →

最新新闻

Playwright实战指南:从Selenium到下一代Web自动化

Playwright实战指南:从Selenium到下一代Web自动化

做Web自动化这些年,身边越来越多的人开始把Playwright当作首选,尤其是接触过旧的Selenium体系之后,再回头看Playwright,确实会有一句“原来早就该这样了”的感叹。写这篇文章的原因很简单,Playwright被称作“下一代Web…

2026/10/20 19:03:02 阅读更多 →
多玩家在线游戏服务器压力测试实战指南

多玩家在线游戏服务器压力测试实战指南

做了这么多年软件测试,我最深的体会是:服务器压力测试这件事,放到游戏行业里,跟普通业务系统完全是两码事。记得我刚接手那个艺术风格多人在线游戏项目的压测任务时,还拿以前做Web系统的思路去套,结果测试方…

2026/10/20 19:03:02 阅读更多 →
本地多模态工作流搭建完整指南:用 Qwopus3.8-27B-Flash-mxfp4-MLX 快速打造图像描述与文档解析智能体

本地多模态工作流搭建完整指南:用 Qwopus3.8-27B-Flash-mxfp4-MLX 快速打造图像描述与文档解析智能体

【免费下载链接】Qwopus3.8-27B-Flash-mxfp4-MLX 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Qwopus3.8-27B-Flash-mxfp4-MLX 点击查看 免费下载 想在本地搭建一套多模态工作流,却不想把数据上传到云端?Qwopus3.8-27B-Flas…

2026/10/20 19:03:02 阅读更多 →
iPhone 怎么跑 Minecraft Java 版:PojavLauncher 完整指南与快速上手

iPhone 怎么跑 Minecraft Java 版:PojavLauncher 完整指南与快速上手

iPhone 怎么跑 Minecraft Java 版:PojavLauncher 完整指南与快速上手 【免费下载链接】PojavLauncher_iOS A Minecraft: Java Edition Launcher for Android and iOS based on Boardwalk. Succeeded by https://github.com/AngelAuraMC/Amethyst-iOS 项目地址: ht…

2026/10/20 19:03:02 阅读更多 →
SMA钛丝驱动的仿生手开发全解析:从材料原理到控制策略

SMA钛丝驱动的仿生手开发全解析:从材料原理到控制策略

最近整理手头的机器人实验平台,把之前一直封存的 NiTiDrivetech 仿生手项目又拉了出来。说实话,这个项目我断断续续做了将近一年,中间推倒重来三次,踩过的坑比写出来的功能还多。但也是这个项目让我彻底搞明白了一件事&#xff1a…

2026/10/20 19:03:01 阅读更多 →
CANFD记录仪如何破解新能源车偶发故障排查难题

CANFD记录仪如何破解新能源车偶发故障排查难题

1. 先从一次海外售后支援说起:偶发故障为什么难缠做国产新能源出海配套这几年,我接过最多的需求不是“帮我们做个新功能”,而是“帮我们查一个偶发故障”。这类故障有个共同点:客户报障时描述得很清楚——没动力、亮故障灯、偶发抖…

2026/10/20 19:02:01 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →