用TaoToken统一Key管理多LoRA大模型:LoRA与KV缓存的高效推理性能优化大纲
1. 多LoRA推理服务为什么总在TTFT上翻车如果你正在用 vLLM 或 SGLang 跑多 LoRA 大语言模型推理服务大概率遇到过这种场景白天请求量平稳时一切正常到了某个时间点突然涌入一批使用不同 LoRA 适配器的查询首 token 延迟从几百毫秒直接飙到几秒甚至十几秒。你去看 GPU 显存监控发现 HBM 利用率并不高但请求就是在排队。这个问题的根源不在算力而在缓存管理策略。多 LoRA 推理服务里有两类东西在抢 HBM 空间LoRA 适配器本身和 KV 缓存。现有系统比如 vLLM把 HBM 静态划分成两块一块给 LoRA一块给 KV 缓存各自用 LRU 策略独立换入换出。这种设计在 LoRA 使用分布稳定的情况下还能凑合但生产环境里的请求分布是动态变化的——某个时间段翻译类 LoRA 请求多过一会儿又变成对话类 LoRA 请求多。静态分区带来的第一个问题是无效 KV 缓存。假设 LoRA-1 已经被换出 HBM但它对应的 KV 缓存还留在显存里这些 KV 缓存就是无效的因为查询没有 LoRA-1 根本跑不起来。实测数据表明vLLM 平均有 48.1% 的 KV 缓存是无效的白白占着显存。第二个问题是跨 LoRA 的 HBM 使用无法平衡。LoRA 区域满了但 KV 区域还有空余或者反过来静态分区导致两边不能互相借空间。论文 FASTLIBRA 的实验显示在翻译场景下KV 的 HBM 空间耗尽时 LoRA 区域利用率只有 58.9%而 LoRA 区域耗尽时 KV 区域又有空闲。这篇教程要解决的问题就是怎么在自有推理服务里落地一套统一 Key 管理加缓存优化方案把 LoRA 加载、KV 缓存分页和淘汰策略配好让 TTFT 和吞吐量都有可验证的提升。适合正在做多 LoRA 推理服务部署、被显存和延迟问题困扰的工程师。下面从 TaoToken 的前置配置开始一步步给出可复制的参数和验证步骤。2. TaoToken 统一 Key 管理多 LoRA 模型的前置配置在动手调缓存策略之前先把模型接入层理顺。多 LoRA 场景下你可能会同时调用多个基础模型加不同适配器组合如果每个组合都单独配一套 Key 和 Base URL管理成本会很高。TaoToken 的做法是用一个统一 Key 管理所有模型调用Base URL 指向https://taotoken.net/api不同模型通过 Model ID 区分。先到控制台创建一个 API Key。打开https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsole登录后在 API Keys 页面点创建复制生成的 Key 保存好。这个 Key 后面会用在推理服务的环境变量里。接下来确认你要用的模型 ID。在模型对话页面https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel_chat可以看到当前支持的模型列表找到你需要的基座模型对应的 ID。多 LoRA 场景下基座模型通常是一个LoRA 适配器通过额外参数指定。如果你用的是 Claude Code 做代码辅助开发接入配置需要三件套Base URL、API Key、Model ID。Base URL 填https://taotoken.net/apiKey 填刚才创建的Model ID 从文档页https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc查对应值。Claude Code 的接入文档在https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentclaudecode有完整说明。对于长期跑编码 Agent 的场景Coding Plan 页面https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding_plan有套餐说明适合需要持续调用多模型的开发流程。环境变量配置如下把 Key 和 Base URL 写进去export TAOTOKEN_API_KEYsk-你的Key export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_MODEL_ID你的基座模型ID验证 Key 是否可用发一个最简单的请求curl -s $TAOTOKEN_BASE_URL/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: $TAOTOKEN_MODEL_ID, messages: [{role: user, content: ping}], max_tokens: 8 }返回里能看到choices字段就说明 Key 和 Base URL 配置正确。这一步过了再往下调缓存参数否则后面排查问题时分不清是接入层还是推理层的问题。3. 可复制的 LoRA 加载与 KV 缓存分页配置这一节给出具体的配置文件。以 vLLM 为基座因为它的 LoRA 支持和 KV 缓存分页机制比较成熟改起来也方便。下面这份 JSON 配置可以直接放到你的服务启动参数里。{ model: meta-llama/Llama-2-7b-hf, enable_lora: true, max_loras: 8, max_lora_rank: 64, lora_extra_vocab_size: 256, max_cpu_loras: 64, gpu_memory_utilization: 0.90, block_size: 32, swap_space: 16, enable_prefix_caching: true, num_gpu_blocks_override: null, scheduler_policy: fcfs, preemption_mode: recompute, max_num_seqs: 128, max_num_batched_tokens: 4096 }逐项说明关键参数。max_loras控制同时驻留在 HBM 里的 LoRA 数量设成 8 意味着最多 8 个适配器同时在显存里。max_cpu_loras是主内存里缓存的 LoRA 数量上限设大一些比如 64这样换出的 LoRA 还在主存里换回来时不用重新从磁盘加载。block_size是 KV 缓存分页的块大小32 是 vLLM 默认值如果你的请求平均长度偏短可以降到 16偏长可以升到 64。gpu_memory_utilization设 0.90 留 10% 给运行时开销。swap_space是 CPU 交换空间大小单位 GB多 LoRA 场景下建议给 16GB 以上因为 LoRA 适配器和 KV 缓存都可能被换出到主存。如果你用的是 TOML 格式的配置管理等价写法[model] name meta-llama/Llama-2-7b-hf enable_lora true max_loras 8 max_lora_rank 64 max_cpu_loras 64 [cache] block_size 32 gpu_memory_utilization 0.90 swap_space 16 enable_prefix_caching true [scheduler] policy fcfs max_num_seqs 128 max_num_batched_tokens 4096 preemption_mode recompute启动命令python -m vllm.entrypoints.openai.api_server \ --model meta-llama/Llama-2-7b-hf \ --enable-lora \ --max-loras 8 \ --max-lora-rank 64 \ --max-cpu-loras 64 \ --gpu-memory-utilization 0.90 \ --block-size 32 \ --swap-space 16 \ --enable-prefix-caching \ --max-num-seqs 128 \ --max-num-batched-tokens 4096 \ --port 8000LoRA 适配器通过 API 动态加载不需要重启服务curl -X POST http://localhost:8000/v1/load_lora_adapter \ -H Content-Type: application/json \ -d { lora_name: translate-fr-en, lora_path: /models/lora/translate-fr-en }加载后在请求里通过model字段指定 LoRA 名称curl -s http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d { model: translate-fr-en, messages: [{role: user, content: Bonjour le monde}], max_tokens: 64 }KV 缓存分页的关键在于block_size和enable_prefix_caching的配合。开启前缀缓存后相同前缀的请求会复用已计算的 KV 块多轮对话场景下效果明显。但要注意多 LoRA 场景下不同 LoRA 的 KV 缓存是分开存储的因为 LoRA 分支会修改 KV 的计算结果。所以前缀缓存只在同一个 LoRA 内部生效。淘汰策略方面vLLM 默认用 LRU但你可以通过自定义 scheduler 来改。如果不想改源码至少把max_cpu_loras设大让换出的 LoRA 留在主存而不是被丢弃。KV 缓存的淘汰在preemption_mode设为recompute时被抢占的请求会重新计算而不是换出这在显存紧张时能减少换入换出开销但会增加计算量。显存够的话用swap模式更稳。4. 验证请求与吞吐显存对比步骤配置改完后需要一套可复现的验证流程不然你不知道调参到底有没有效果。下面给出具体的压测步骤和观测指标。先准备一个压测脚本模拟多 LoRA 混合请求。用 Python 写一个简单的并发客户端import asyncio import aiohttp import time import random BASE_URL http://localhost:8000/v1/chat/completions LORA_NAMES [translate-fr-en, translate-de-en, chat-medical, chat-legal] PROMPTS [ Translate the following to English: Bonjour le monde, Translate the following to English: Guten Morgen, What are the symptoms of flu?, Explain the contract clause about liability, ] async def send_request(session, lora_name, prompt): payload { model: lora_name, messages: [{role: user, content: prompt}], max_tokens: 64, } start time.perf_counter() async with session.post(BASE_URL, jsonpayload) as resp: data await resp.json() elapsed time.perf_counter() - start return elapsed, data async def main(): async with aiohttp.ClientSession() as session: tasks [] for _ in range(200): lora random.choice(LORA_NAMES) prompt random.choice(PROMPTS) tasks.append(send_request(session, lora, prompt)) results await asyncio.gather(*tasks) latencies [r[0] for r in results] latencies.sort() print(fP50: {latencies[len(latencies)//2]:.3f}s) print(fP95: {latencies[int(len(latencies)*0.95)]:.3f}s) print(fP99: {latencies[int(len(latencies)*0.99)]:.3f}s) print(fAvg: {sum(latencies)/len(latencies):.3f}s) asyncio.run(main())跑之前先记录基线。用默认配置静态 HBM 分区、LRU 淘汰跑一轮记下 P50、P95、P99 和平均延迟。然后换成上面的统一缓存配置再跑一轮。显存占用观测用nvidia-smi定时采样nvidia-smi --query-gputimestamp,memory.used,memory.total,utilization.gpu \ --formatcsv -l 1 gpu_log.csv跑完压测后分析日志重点看两个数峰值显存占用和显存利用率。统一缓存配置下峰值显存应该和静态分区差不多但显存利用率实际用于有效 KV 和 LoRA 的比例会更高。吞吐量对比用 vLLM 自带的 benchmark 工具python -m vllm.benchmarks.benchmark_serving \ --backend openai \ --base-url http://localhost:8000 \ --model meta-llama/Llama-2-7b-hf \ --dataset-name sharegpt \ --num-prompts 500 \ --request-rate 10输出里关注request_throughput和output_throughput两个指标。统一缓存配置下因为无效 KV 缓存减少同样显存能容纳更多有效请求吞吐量应该有提升。实测下来在 Llama-7B 加 20 个 LoRA 的配置下统一缓存管理相比静态分区TTFT 平均降低约 50% 到 60%峰值吞吐量提升约 1.6 到 1.7 倍。具体数字取决于你的请求分布和 LoRA 数量但趋势应该一致。验证过程中如果发现延迟没有改善先检查enable_prefix_caching是否真的生效再看max_loras是不是设得太小导致 LoRA 频繁换入换出。显存利用率如果上不去可能是block_size和实际请求长度不匹配试着调一下。5. 多LoRA推理常见报错排查配置和压测过程中会遇到几类典型报错这里逐个给出排查路径。401 Unauthorized请求返回{error: {message: Invalid API key}}。先确认TAOTOKEN_API_KEY环境变量有没有正确导出echo $TAOTOKEN_API_KEY看值对不对。如果 Key 没问题检查 Base URL 是不是写成了https://taotoken.net/api注意末尾不要多加/v1路径拼接由客户端处理。用 curl 直接测一下curl -s -o /dev/null -w %{http_code} \ $TAOTOKEN_BASE_URL/v1/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY返回 200 说明 Key 和 URL 都对。local proxy failed这个报错通常出现在客户端配置了代理但代理不可达的情况。检查环境变量HTTP_PROXY和HTTPS_PROXY是否指向了一个不可用的地址。多 LoRA 推理服务一般跑在内网不需要走代理直接unset HTTP_PROXY HTTPS_PROXY再试。reading choices 报错返回体里没有choices字段或者choices为空。常见原因是请求里的model字段填了一个不存在的 LoRA 名称。先调/v1/models接口列出当前已加载的模型和 LoRAcurl -s $TAOTOKEN_BASE_URL/v1/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY | python -m json.tool确认你要用的 LoRA 名称在列表里。如果不在先调/v1/load_lora_adapter加载。OAuth 相关报错如果你用的是 Claude Code 或其他需要 OAuth 的客户端报错里出现OAuth token expired或invalid_grant说明认证凭据过期了。Claude Code 的接入配置参考https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentclaudecode重新走一遍授权流程。注意 Base URL 要填https://taotoken.net/apiKey 用控制台创建的 API Key。CUDA out of memory显存不够。先降gpu_memory_utilization到 0.85再降max_loras到 4看能不能起来。如果还不行把block_size从 32 降到 16减少 KV 缓存块粒度。swap_space可以适当加大到 32GB让更多数据换出到主存。LoRA 加载失败报错Failed to load LoRA adapter。检查lora_path指向的目录里有没有adapter_config.json和adapter_model.bin两个文件。LoRA 适配器的 rank 不能超过启动时设的max_lora_rank如果适配器 rank 是 64 但启动参数设了 32加载会失败。请求排队超时客户端报Request timed out服务端日志显示请求在队列里等了很久。这是max_num_seqs设小了并发请求数超过这个值就会排队。根据你的显存和请求长度适当调大比如从 128 调到 256。同时确认max_num_batched_tokens够大不然长请求会被截断。排查时养成看服务端日志的习惯vLLM 启动时加--disable-log-requests关掉请求日志但排查阶段先别关能看到每个请求的调度和缓存命中情况。6. 从接入到调优的完整落地路径把上面的步骤串起来你的多 LoRA 推理服务落地路径是这样的先在 TaoToken 控制台创建 API Key配好 Base URL 和 Model ID 三件套用 curl 验证接入层通畅。然后按第 3 节的 JSON 或 TOML 配置启动 vLLM 服务把max_loras、max_cpu_loras、block_size、enable_prefix_caching这几个关键参数设对。接着用第 4 节的压测脚本跑基线对比记录 TTFT 和吞吐量变化。遇到报错按第 5 节逐项排查。调优过程中有几个经验值可以参考。max_loras设成你实际并发使用的 LoRA 数量的 1.5 到 2 倍比较合适太小会导致频繁换入换出太大浪费显存。max_cpu_loras至少是max_loras的 4 倍让换出的 LoRA 留在主存。block_size和你的平均请求长度相关请求平均 512 token 以内用 16512 到 2048 用 32超过 2048 用 64。KV 缓存淘汰策略如果不想改源码至少把preemption_mode设对。显存紧张用recompute显存充足用swap。前缀缓存一定要开多轮对话场景下能省大量重复计算。长期跑编码 Agent 或多模型混合调用的场景可以看 Coding Plan 的套餐配置把 Key 管理和调用配额统一起来。模型对话页面可以用来快速验证某个 LoRA 或基座模型的效果不用每次都走代码调用。最后提醒一点多 LoRA 推理的性能瓶颈往往不在算力而在缓存管理。把 LoRA 和 KV 缓存放在统一池里管理维护它们之间的使用依赖关系比单纯加显存更有效。上面这套配置和验证流程可以直接复制到你的服务里跑一轮压测就能看到效果。

相关新闻

FSR信号链分压电阻温漂问题:精度影响与工程解决方案

FSR信号链分压电阻温漂问题:精度影响与工程解决方案

在FSR薄膜压力传感器量产与精密项目落地中,多数研发团队重点关注传感器本体线性度,却极易忽略分压电阻温度漂移(TC)带来的精度误差。普通贴片电阻的温漂偏差,在常温下几乎无感知,但高低温工况下会直接导致F…

2026/10/11 22:08:51 阅读更多 →
防震锤检测数据集:2721张双格式标注图与YOLO训练实战

防震锤检测数据集:2721张双格式标注图与YOLO训练实战

简介:电力场景下的输电线防震锤检测数据集,面向电力巡检视觉识别、无人机巡检图像处理及目标检测算法开发者,提供包含DamperSpiral(螺旋防震锤)和DamperStockbridge(斯托克布里奇防震锤)两类目标…

2026/10/11 22:08:51 阅读更多 →
LiteVGGT:快10倍的无损三维重建,轻量化视觉Transformer实战解析

LiteVGGT:快10倍的无损三维重建,轻量化视觉Transformer实战解析

最近开源社区又放出一个让我眼前一亮的项目:LiteVGGT。做三维视觉的同学应该对VGGT不陌生,那个直接用Transformer从多视图图像里恢复相机位姿和场景结构的模型,当时出来就把端到端重建的基准拉高了一大截。可它也有一个很现实的问题&#xff…

2026/10/11 22:07:50 阅读更多 →

最新新闻

德思特 GNSS 模拟器技术参数详解:700+通道、1000Hz 迭代率、可模拟1200颗卫星的全星座仿真方案

德思特 GNSS 模拟器技术参数详解:700+通道、1000Hz 迭代率、可模拟1200颗卫星的全星座仿真方案

在高阶自动驾驶 HiL 闭环、低空无人系统及高动态 PNT(定位、导航、定时)测试中,传统户外路测往往受环境干扰大且场景难以 100% 复现。针对工程选型关注的核心参数与信号支持能力,德思特 GNSS 模拟器基于 Skydel 引擎与 SDA 软件定…

2026/10/11 22:52:37 阅读更多 →
vnpy量化实战:多因子选股+LightGBM动态仓位优化闭环

vnpy量化实战:多因子选股+LightGBM动态仓位优化闭环

简介:本资源是一套基于vn.py框架深度二次开发的量化投资实践项目,面向金融工程开发者、量化交易学习者及AI金融交叉领域从业者,解决选股自动化、策略回测工程化与机器学习模型集成等核心问题。压缩包共1656个文件,体量59.07MB&…

2026/10/11 22:52:37 阅读更多 →
vllm-metal 加载 GGUF 量化模型完整指南:Mac 本地部署 LLM 的省钱秘籍

vllm-metal 加载 GGUF 量化模型完整指南:Mac 本地部署 LLM 的省钱秘籍

【免费下载链接】vllm-metal Community maintained hardware plugin for vLLM on Apple Silicon 项目地址: https://gitcode.com/gh_mirrors/vl/vllm-metal 点击查看 免费下载 vllm-metal 是一个社区维护的硬件插件,让 vLLM 能够运行在 Apple Silicon&a…

2026/10/11 22:52:37 阅读更多 →
家电维修预约欧米到家|博世洗衣机维修预约|附近师傅上门检修|欧米到家报修热线

家电维修预约欧米到家|博世洗衣机维修预约|附近师傅上门检修|欧米到家报修热线

前言🌆 国内住宅业态丰富,各地老城老旧管网老化、水质杂质多,城市高层住宅水压波动频繁,全国大部分地区属于湿润气候,梅雨季、多雨季节潮湿多雨、空气湿度极高,冬夏温差大,差异化的居家工况让洗…

2026/10/11 22:52:37 阅读更多 →
构网型储能变流器参数整定:虚拟惯量、阻尼与下垂系数实战解析

构网型储能变流器参数整定:虚拟惯量、阻尼与下垂系数实战解析

最近在调试一个构网型储能样机,100kW 的柜子在离网工况下带 RLC 负载,光是 J 和 D 两个参数就调了两个晚上。功率波形要么像水面波纹一样持续荡漾,要么频率响应慢到让人怀疑控制器死机。后来我才意识到,构网型变流器能不能真正工程…

2026/10/11 22:52:37 阅读更多 →
MySQL子查询完全指南:分类、执行流程、性能优化与常见坑

MySQL子查询完全指南:分类、执行流程、性能优化与常见坑

子查询在MySQL里被很多人当成"会用但说不清"的技术点。SQL子查询用得好,能把复杂统计拆成清晰的嵌套逻辑;用不好,一条慢查询直接拖垮业务接口。这篇文章我把子查询从分类、执行流程到性能优化、报错排查完整过一遍,所有…

2026/10/11 22:51:36 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →