【LLM实战】如何把 LlamaFactory 接入统一网关?llm_AIO 项目实战保姆级教程(TaoToken 版)
1. 为什么要把 LlamaFactory 塞进统一网关LlamaFactory 本身是个好东西命令行一条llamafactory-cli train就能跑 LoRA 微调参数清晰、模板齐全。但真到了团队协作或者要对外提供服务的时候纯 CLI 的玩法就开始难受了。我见过太多团队把训练脚本写在某个人的 home 目录下换个人接手先花半天找路径也见过两个人同时起训练任务第二个人一跑直接 CUDA out of memory把第一个人的进度也带崩了。这个场景的核心矛盾在于LlamaFactory 是「单机工具」的定位而生产环境需要的是「服务」。你需要一个中间层把训练、合并、推理这些动作变成 HTTP 接口让调用方不需要知道服务器上模型存在哪个盘、虚拟环境装在哪、显存还剩多少。llm_AIO 这个项目干的就是这件事——它在 LlamaFactory 外面包了一层 FastAPI把 CLI 子命令翻译成 REST 接口同时加了显存门禁和任务管理。那 TaoToken 在这里扮演什么角色当你的网关把模型服务暴露成 OpenAI 兼容接口之后鉴权和调用入口需要一个统一的地方。TaoToken 提供的就是这个统一网关层你把 endpoint 和 API Key 指到它那边所有模型调用走同一个鉴权体系不用在每个自建服务里各写一套 Key 管理。说白了llm_AIO 负责「把模型跑起来」TaoToken 负责「让调用方安全、统一地接进来」。这篇文章适合谁如果你手上有 LoRA 微调需求想把它做成可被前端或其他服务调用的 API或者你已经在用 LlamaFactory但被路径管理和显存冲突搞得头疼再或者你想给自己的私有模型加一层统一鉴权——那这套组合值得跟一遍。下面我会以 llm_AIO 为主线从目录结构、环境配置、网关配置片段到 curl 验证和报错排查一步步走完。先统一几个概念避免后面叫混。在这个架构里训练对应 CLI 的train子命令合并对应export而对话服务是启动api子进程后通过 HTTP 交互的不是终端里那个chat命令。记住这个映射后面看接口路径就不会晕。2. TaoToken 前置准备与 llm_AIO 目录结构在动手改配置之前先把两件事理清楚llm_AIO 期望的目录长什么样以及 TaoToken 那边你需要拿到什么。llm_AIO 有个比较硬性的约定——它不依赖pip install llamafactory而是默认你磁盘上有一个和 llm_AIO 同级的llmfactory源码目录并且这个目录里已经建好了虚拟环境。这个设计的好处是版本可控你可以随时切 LlamaFactory 的分支坏处是初次搭建时目录放错位置就会报找不到命令。预期结构是这样的你的工作区/ ├── llm_AIO/ # 网关代码FastAPI 主服务 │ ├── app/ │ │ └── services/ │ │ └── llmfactory_service.py │ └── .env └── llmfactory/ # LlamaFactory 源码 虚拟环境 └── .venv/ └── bin/ └── llamafactory-cli关键点在于.env里的LLMFACTORY_COMMAND_PREFIX要指向llmfactory/.venv/bin这样网关才能拼出完整的llamafactory-cli路径去执行。如果你把 llmfactory 放在别的地方这个前缀就得跟着改否则启动训练时会直接报 command not found。然后是 TaoToken 侧的准备。你需要去控制台创建一个 API Key这个 Key 后面会填进网关的调用配置里。TaoToken 的 API 入口是https://taotoken.net/api注意这个地址不带任何查询参数是干净的 base URL。控制台里可以管理 Key、查看用量模型对话的调试页面也能帮你先确认 Key 是通的。具体操作路径打开控制台创建 Key然后到接入文档里对照 OpenAI 兼容的调用格式。TaoToken 的接口设计是兼容 OpenAI SDK 的所以你在 llm_AIO 里封装推理服务时base_url 填 TaoToken 的地址、api_key 填你创建的 Key就能把请求转发过去。这里有个细节llm_AIO 自己启动的推理子进程默认监听本地端口如果你想让外部调用统一走 TaoToken就需要在网关的转发配置里把上游指向 TaoToken而不是本地那个127.0.0.1:xxxx。我建议的顺序是先把 llm_AIO 和本地 LlamaFactory 跑通确认训练和推理子进程都正常再去改上游指向 TaoToken。这样出问题的时候你能快速判断是本地环境的问题还是网关转发的问题。如果一上来就全接 TaoToken报错了你分不清是哪一层。还有一点TaoToken 的 Key 不要硬编码在代码里放.env或者环境变量。llm_AIO 的.env本身就支持读取环境变量你加一个TAOTOKEN_API_KEY字段在服务里用os.getenv取就行。这样换 Key 不用改代码也避免提交到仓库里泄露。3. 可复制的网关配置.env 与 settings 片段这一节直接给能抄的配置。先看 llm_AIO 的.env核心变量我列成表格后面再给完整的 settings 片段。变量名作用示例值LLMFACTORY_COMMAND_PREFIX指向 LlamaFactory 虚拟环境 bin 目录llmfactory/.venv/binLLMFACTORY_MODELS_DIR存放所有基座模型的父目录/data/modelsLLMFACTORY_MIN_FREE_VRAM_MIB显存门禁低于此值拒绝新任务4096TAOTOKEN_BASE_URLTaoToken API 入口https://taotoken.net/apiTAOTOKEN_API_KEY控制台创建的 Keysk-xxxxxxxxGATEWAY_UPSTREAM_MODE推理上游模式local 或 taotokentaotoken.env文件内容大概长这样# LlamaFactory 相关 LLMFACTORY_COMMAND_PREFIXllmfactory/.venv/bin LLMFACTORY_MODELS_DIR/data/models LLMFACTORY_MIN_FREE_VRAM_MIB4096 # TaoToken 统一网关 TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_API_KEYsk-你的Key GATEWAY_UPSTREAM_MODEtaotoken # 服务端口 APP_PORT8000然后是网关的 settings 片段。llm_AIO 用的是 Pydantic Settings 那套你可以在app/core/config.py里加一个 TaoToken 的配置类。下面这段是 TOML 风格的配置示例如果你项目里用的是pyproject.toml或者独立的settings.toml可以直接对照[llmfactory] command_prefix llmfactory/.venv/bin models_dir /data/models min_free_vram_mib 4096 [taotoken] base_url https://taotoken.net/api api_key sk-你的Key upstream_mode taotoken timeout_seconds 120 [server] port 8000如果你更习惯 JSON 配置等价写法{ llmfactory: { command_prefix: llmfactory/.venv/bin, models_dir: /data/models, min_free_vram_mib: 4096 }, taotoken: { base_url: https://taotoken.net/api, api_key: sk-你的Key, upstream_mode: taotoken, timeout_seconds: 120 }, server: { port: 8000 } }配置里upstream_mode这个字段是我自己加的用来控制推理请求往哪走。设成local时网关把请求转发给本地启动的llamafactory-cli api子进程设成taotoken时转发到 TaoToken 的 base_url。这样你可以在开发阶段用 local 调试上线切 taotoken 做统一鉴权不用改代码。启动命令很简单进到 llm_AIO 目录后cd llm_AIO python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload--reload只在开发时用生产环境去掉。启动后你应该能看到 FastAPI 的启动日志包括加载的路由和监听端口。如果这时候报ModuleNotFoundError多半是虚拟环境没激活或者依赖没装先pip install -r requirements.txt。配置改完别急着跑训练先用一个轻量接口确认服务活着curl http://localhost:8000/api/playground/llmfactory/models这个接口会返回LLMFACTORY_MODELS_DIR下扫描到的基座模型列表。如果返回空数组检查你的模型目录里有没有放模型文件夹以及文件夹里有没有config.json。返回正常说明网关和 LlamaFactory 的路径对接没问题可以进下一步。4. 验证请求从训练到 OpenAI 兼容推理配置通了之后走一遍完整链路。统一访问前缀是http://你的IP:8000/api/playground/llmfactory。第一步看模型和模板curl http://localhost:8000/api/playground/llmfactory/models curl http://localhost:8000/api/playground/llmfactory/templatestemplates返回的是支持的对话模板比如 qwen、llama3 这些。训练时template字段要跟模型匹配填错了 loss 会降不下去。第二步发起 LoRA 训练。推荐用异步接口防止 HTTP 超时curl -X POST http://localhost:8000/api/playground/llmfactory/train/lora \ -H Content-Type: application/json \ -d { model_id: Qwen2-7B, dataset_id: 你的数据集ID, template: qwen, learning_rate: 5e-5, num_train_epochs: 3 }返回里会有job_id和status: running。数据集可以先通过上传接口拿到dataset_id也可以直接传服务器路径。上传接口是POST /api/playground/datasets/upload支持 Alpaca 和 ShareGPT 格式。第三步轮询进度curl http://localhost:8000/api/playground/llmfactory/train/jobs/{job_id}/progress服务端会解析训练日志返回当前 loss 和步数。这一步能直观看到训练有没有在动。第四步合并 LoRA 权重。训练完的 LoRA 是补丁得合并进基座才能独立使用curl -X POST http://localhost:8000/api/playground/llmfactory/merge \ -H Content-Type: application/json \ -d {task_id: 刚才的job_id}第五步启动推理服务。这是整个链路的核心curl -X POST http://localhost:8000/api/playground/llmfactory/api/start \ -H Content-Type: application/json \ -d {model_path: merged/你的模型_merged, template: qwen}返回里会有api_url格式是http://你的网关IP:8000/api/playground/llmfactory/v1。这个地址完全兼容 OpenAI 格式。现在关键来了——如果你在配置里把upstream_mode设成了taotoken那么实际调用会走 TaoToken 的鉴权体系。用 OpenAI SDK 验证import openai client openai.Client( base_urlhttps://taotoken.net/api, api_keysk-你的Key ) response client.chat.completions.create( modeldefault, messages[{role: user, content: 你好做个自我介绍}] ) print(response.choices[0].message.content)注意这里的base_url填的是 TaoToken 的地址api_key是你在控制台创建的 Key。如果你想让请求先经过 llm_AIO 网关再转发到 TaoToken那就把base_url换成网关的api_url然后在网关配置里配好上游。两种方式都行取决于你想让鉴权发生在哪一层。用 curl 直接验证 TaoToken 侧curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的Key \ -d { model: default, messages: [{role: user, content: ping}] }返回里有choices数组就说明通了。用完推理服务记得停掉释放显存curl -X POST http://localhost:8000/api/playground/llmfactory/api/stop任务管理方面GET /api/playground/llmfactory/train/jobs能列出所有训练任务GET /api/playground/llmfactory/train/jobs/{job_id}/download能把模型打包成 zip 下载。这两个接口在多人协作时特别有用不用再 scp 拷来拷去。5. 常见报错排查401、local proxy failed 与 reading choices这一节列几个我实际踩过的报错以及对应的排查路径。报错一401 Unauthorized这个最常见出现在调用 TaoToken 接口时。原因通常是 Key 没填对、Key 过期、或者 Authorization 头格式错了。检查三点.env里的TAOTOKEN_API_KEY是不是控制台创建的那个请求头是不是Authorization: Bearer sk-xxx注意 Bearer 后面有个空格base_url 是不是https://taotoken.net/api别多加/v1或者斜杠。如果 Key 是从别处复制的注意有没有带多余空格。报错二local proxy failed / connection refused这个一般出现在upstream_modelocal的时候网关转发给本地推理子进程失败。原因可能是推理服务没启动或者启动后端口被占。先确认api/start返回的api_url里的端口然后curl一下那个端口看通不通。如果子进程启动时报显存不足检查LLMFACTORY_MIN_FREE_VRAM_MIB是不是设太高或者上一个任务没停干净。用nvidia-smi看下显存占用必要时手动 kill 掉残留进程。报错三reading choices 相关错误这个通常出现在解析响应的时候比如KeyError: choices或者response.choices为空。原因可能是上游返回了错误结构比如 TaoToken 返回了{error: {...}}而不是正常的 chat completion。这时候先打印完整响应体看error字段。常见触发是 model 名填错——TaoToken 侧对 model 名有要求如果你传了个不存在的模型 ID它会返回错误而不是 choices。另一个可能是请求体格式不对比如messages不是数组。报错四OAuth 或鉴权跳转如果你在浏览器里直接访问某些接口被重定向到登录页说明那个路径需要 OAuth 鉴权。llm_AIO 的 playground 接口默认是开放的但如果你在前面加了反向代理或者接了 TaoToken 的 OAuth 流程就可能出现这个。排查方法是看请求有没有带正确的 token以及代理配置有没有把 Authorization 头透传。报错五command not found: llamafactory-cli这个说明LLMFACTORY_COMMAND_PREFIX配错了。检查.env里的路径是不是相对于 llm_AIO 目录的以及llmfactory/.venv/bin/下确实有llamafactory-cli这个可执行文件。如果虚拟环境是用 conda 建的路径可能不一样用which llamafactory-cli确认实际位置。排查的时候有个通用技巧先绕过网关直接用 curl 打 TaoToken 的接口确认 Key 和网络没问题再打本地推理子进程的端口确认模型服务正常最后打网关接口确认转发逻辑。一层层缩小范围比一上来就盯着网关日志看效率高得多。6. 把 endpoint 和 Key 统一到 TaoToken 的实践建议走到这里训练、合并、推理、鉴权这条链路应该都通了。最后聊几个实践层面的建议都是我在实际项目里踩过坑之后总结的。第一Key 的轮换和隔离。不要所有环境共用一个 Key。开发、测试、生产各建一个这样某个环境的 Key 泄露了直接吊销那一个就行不影响其他环境。TaoToken 控制台里可以管理多个 Key按项目或者按环境命名用起来清晰。第二endpoint 的配置要集中。llm_AIO 的.env里我只放了一个TAOTOKEN_BASE_URL所有需要调 TaoToken 的地方都从这个变量取。这样以后如果入口有调整改一个地方就行。千万别在代码里散落硬编码的 URL不然排查起来很痛苦。第三推理服务的生命周期管理。api/start和api/stop要成对使用。我见过有人启动了一堆推理子进程忘了停显存被占满后面训练任务全被门禁拦下来。建议在网关层加一个定时清理或者至少在任务管理页面能看到当前活跃的推理服务。第四日志要打全。llm_AIO 转发请求的时候把上游返回的状态码和错误信息记下来。这样出问题的时候你能快速判断是本地的问题还是 TaoToken 侧的问题。特别是 401 和 429 这类状态码日志里有了就不用猜。第五关于模型 ID 的映射。TaoToken 侧对 model 名有它自己的规范而 llm_AIO 里用的是本地模型 ID。你需要在网关层做一个映射表把本地的Qwen2-7B映射到 TaoToken 认识的模型名。这个映射可以放在配置里也可以放在数据库里看你的项目规模。如果你还没试过这套组合建议先从最小的链路开始本地起一个 LlamaFactory 的 api 子进程用 curl 确认能对话然后把 base_url 换成 TaoToken确认鉴权能过最后再把 llm_AIO 的网关接进来。每一步都验证通过再往下走比一次性全配好再调试要省时间。TaoToken 的接入文档里有完整的 OpenAI 兼容调用示例模型对话页面也能直接测试 Key 是否有效。控制台里创建 Key 之后建议先在那里跑一个最简单的请求确认网络和鉴权都没问题再往 llm_AIO 里集成。这样能把「Key 的问题」和「网关的问题」分开排查起来快很多。

相关新闻

T3 Code:给 Codex/Claude CLI 加一层 GUI 和 Git 快照的开源项目,2.5 万 star 背后挂着 2391 个未关 issue

T3 Code:给 Codex/Claude CLI 加一层 GUI 和 Git 快照的开源项目,2.5 万 star 背后挂着 2391 个未关 issue

如果你在终端里跑 Codex CLI 或 Claude Code,这几个场景大概不陌生:一屏 TTY 里翻几百行长 diff,跨文件回滚只能自己手搓 git,两个仓库同时开 agent 会话时上下文和进程容易串。T3 Code 就是冲这些来的——它 README 里的自我定位…

2026/10/14 4:13:14 阅读更多 →
解构 openGym:数据主权导向的自托管健身追踪系统技术架构深度解析

解构 openGym:数据主权导向的自托管健身追踪系统技术架构深度解析

在SaaS应用泛滥与数据隐私焦虑并存的当下,开发者对“数据拥有权”的关注催生了诸如openGym这类深度技术驱动的自托管解决方案。本笔记将基于开源项目 openGym 的架构设计与功能特性,深入剖析其在复杂训练管理、智能化追踪、多端同步及AI增强等方面的工程…

2026/10/14 4:13:17 阅读更多 →
第15章:配置 K8s 拉取 Harbor 镜像

第15章:配置 K8s 拉取 Harbor 镜像

本章目标:配置 K8s 能够从 Harbor 私有仓库拉取镜像。 【本章说明】 K8s 集群在启动 Pod 时,需要从镜像仓库拉取容器镜像。由于我们的 Harbor 是私有仓库(且使用 HTTP 协议),K8s 默认无法访问。本章将创建一个特殊的 Secret(称为 docker-registry secret),其中包含 H…

2026/10/14 4:13:41 阅读更多 →

最新新闻

NC65销售订单批量导入实战:从数据清洗到SQL脚本全攻略

NC65销售订单批量导入实战:从数据清洗到SQL脚本全攻略

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

2026/10/15 3:31:40 阅读更多 →
一场用英语讨论中国流量生意的会议

一场用英语讨论中国流量生意的会议

2026 年深圳 SEO 大会公布了一组数字:参会约 500 人,其中中国大陆之外的面孔占 49%。 在中国本土举办、讨论全球搜索生态的会议上,海内外从业者接近对半——这个比例放在五年前难以想象。会议组织者把这种状态概括为“Western Meet Eastern”…

2026/10/15 3:31:40 阅读更多 →
MATLAB插值计算实战指南:选对方法比调参更重要

MATLAB插值计算实战指南:选对方法比调参更重要

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

2026/10/15 3:31:40 阅读更多 →
Linux C 语言手写嗅探器,不依赖库也能抓包

Linux C 语言手写嗅探器,不依赖库也能抓包

为什么放弃 libpcap 直接操作原始套接字在学习网络协议栈或开发嵌入式监控工具时,我们往往过度依赖 libpcap 这样的高级库。虽然它们封装良好、调用简单,但就像黑盒一样,屏蔽了数据包从网卡到用户空间的真实流转过程。对于希望深入理解 Linux…

2026/10/15 3:31:40 阅读更多 →
智能梯控第三方接口快速接入指南

智能梯控第三方接口快速接入指南

在智慧楼宇的改造项目中,电梯门禁系统的对接往往是最让人头疼的环节之一。很多开发者在面对老旧的梯控硬件时,常常陷入“数据拿不到、权限配不准、日志查不着”的困境。尤其是当需要同时管理多栋大楼、数十部电梯以及成百上千用户的楼层权限时&#xff0…

2026/10/15 3:31:40 阅读更多 →
从汇编到实时飞控:Apollo-11源码的工程启示与实操指南

从汇编到实时飞控:Apollo-11源码的工程启示与实操指南

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

2026/10/15 3:30:40 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29: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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →