AirLLM:在普通电脑上运行大模型的层间卸载与内存映射推理方案
第一次看到 airllm 这个项目名时我脑子里冒出来的第一个问题是它到底能让多大的模型跑在普通电脑上实测下来它不是那种“把模型压缩到极限”的魔法而是一种更聪明的资源调度方式。简单说airllm 是一个面向大语言模型的高效推理方案核心思路是让模型在内存受限的机器上也能跑起来尤其是 CPU 机器。它解决了很多开发者都会遇到的痛点显卡显存只有 6G、8G却想跑 70B 参数模型或者根本没有独立显卡只有一台普通笔记本。对于想做本地私有化部署、学习模型原理、或者手头硬件预算有限的人来说这个方案非常值得花几分钟了解一下。很多人一听到“大模型推理”就默认离不开数据中心级别的 GPU但实际上不同场景对算力的需求天差地别。airllm 的价值恰恰是把“能跑模型”的门槛从“必须有一张好卡”降到了“有内存、有磁盘就行”。这篇文章我会从它解决的问题出发拆解背后的核心原理再给出一套可以直接复现的实操流程最后把我踩过的坑和排查思路一并分享出来。1. AirLLM到底解决什么问题大模型推理的内存困局1.1 显存是硬门槛不是所有机器都有GPU先聊一个现实问题。现在开源大模型的参数越做越大7B、13B、70B 甚至更大。很多人的第一反应是“没有顶级显卡就别碰”。这确实有道理以 7B 模型为例如果用 FP16 精度加载光权重就要 14GB 显存这已经超过很多消费级显卡的显存容量。更别提 70B 模型FP16 权重接近 140GB即便用 4bit 量化也要 35GB 左右普通设备根本装不下。显存是大模型推理的第一道门槛。GPU 显存的成本比普通内存高得多而且很多办公电脑、旧笔记本甚至根本没有独立 GPU。很多做应用开发、做毕业设计、做内部工具的人其实并不需要像云服务那样低延迟的响应他们只想把模型在本地跑起来验证一下效果。airllm 切中的正是这类需求不追求极致性能只追求“能跑”。1.2 传统降本方案为什么还不够为了绕开显存限制业内已经有了不少办法。最常见的是权重量化把 FP16 降到 INT8、INT4减少权重体积其次是模型蒸馏把大模型的能力迁移到小模型上再就是靠云端 API把推理放到别人的服务器上。但量化有精度损失蒸馏需要额外的训练成本云端 API 有数据隐私顾虑。而且这三种方案本质都在“压缩”或“转移”并没有改变本地设备的资源约束。对于追求可控、可定制、可内网的私有化部署场景这些方案还是不够解渴。量化后模型确实变小了但如果你只有 8GB 内存一个 4bit 量化后的 70B 模型也要约 35GB依然装不下。蒸馏得到的小模型能力缩水明显很多任务上完全不是大模型的对手。1.3 AirLLM换道超车把显存压力转移给内存airllm 的思路是反过来的它不追求把所有权重都塞进显存而是利用普通机器的内存和磁盘让推理过程逐层扫描模型只在当前计算层驻留必要的数据。这样即使显存很小甚至没有 GPU只要内存和磁盘足够也能跑起大模型。你可能会觉得这不就是“显存不够内存来凑”吗对但凑得很有技术含量。它让“能跑模型”这个目标从“买一块昂贵显卡”变成“利用手头已有的普通设备”对很多场景来说已经足够了。尤其当你需要在内网环境、离线环境里做推理时这种方案几乎是为这些场景量身定做的。我接下来的内容会重点拆解它具体是怎么做到的。2. 核心原理拆解层间卸载与内存映射2.1 一次推理到底需要多少内存先做个最简单的估算。假设我们要跑一个 70B 参数的开源模型。FP16 精度下每 1B 参数约占 2GB 内存70B 就是约 140GB 权重。推理时除了权重还要保存中间激活值activation和 KV Cache峰值内存往往会再翻一到两倍。如果把整个模型一次性加载进显存哪怕用 4bit 量化也至少要几十 GB普通机器完全不可能。但大模型有一个结构特点它是分层堆叠的一层算完再算下一层。理论上我们不需要让所有层同时驻留在内存里。airllm 正是抓住这个特性把模型按层切分逐层加载、逐层计算、逐层释放。这样峰值内存就从“整个模型的大小”降到了“单层权重加当前激活值”的规模。假设一层权重 0.5GB激活值和缓存控制在 2-3GB那么一个 8GB 内存的电脑理论上就能运行 70B 模型。这不是魔法而是把资源的利用方式改成了“按需分配”。2.2 逐层计算是怎么做到的具体流程并不复杂。模型推理时输入向量先进入第一层airllm 就把第一层权重从磁盘或冷内存中读取进来完成计算后立刻释放再加载下一层。这个过程不是纯手工完成的框架会自动处理。它需要在“加载下一层”之前保留当前层的输出作为下一层的输入因此只需要维护一个很小的计算窗口。这个场景和人的阅读很像。你读一本很厚的书不可能把所有页都放在脑子里但只要记住当前读到的位置和关键上下文就能一页一页往下翻。airllm 就是那个帮你翻页的手它的核心任务不是理解内容而是保证“翻页”节奏稳定、不卡死。逐层卸载听着简单但工程上要考虑层间输出的衔接、磁盘读取的调度、内存释放的时机稍有不慎就会造成内存泄漏或者读取风暴。2.3 内存映射的巧妙之处光知道逐层加载还不够层数多时逐层从磁盘读入内存再复制到计算设备会有非常大的 IO 开销。airllm 用到了内存映射机制。简单说它把模型权重文件直接映射到进程的地址空间操作系统按需加载对应页。这样看起来是访问一个很大很完整的数组实际上只有被访问的部分才进入物理内存。这里有一个很关键的概念虚拟内存。即使你的物理内存只有 8GB如果打开一个 140GB 的映射文件操作系统不会立刻把所有内容读进来而是为进程分配一个 140GB 的虚拟地址空间。当 CPU 真正去读某个地址时才会触发缺页中断从磁盘读入那一页。所以airllm 配合 SSD 使用效果会更好。普通机械硬盘的随机读取速度太慢会明显拖累推理甚至让我一度以为程序卡死了。2.4 为什么速度慢但依然值得看到这里你应该能理解airllm 这种方案本质上是以时间换空间。相比动辄几百 GB/s 显存带宽的 GPUCPU 加磁盘的组合在读取模型权重时慢好几个数量级。所以它的推理速度不会很快可能只适合离线任务、实验验证、小规模并发场景。但“慢”不代表没有价值。对于很多场景来说本地能跑、数据不出机器、不需要昂贵的 GPU 集群这三点已经是决定性的优势。我更愿意把它当作一种兜底方案和入门方案先让业务跑起来再谈优化。至少你不会因为“显存不够”就放弃整个项目。等真正理解了它的原理将来迁移到 GPU 环境也只是换一个底层引擎的事情。3. 实操从零跑起一个AirLLM推理流程3.1 环境准备安装依赖airllm 的使用方式非常贴近现有的开发者习惯。官方推荐使用 Python 3.8 以上的环境安装时一条命令就够了pip install airllm如果你打算在 CPU 上跑建议安装对应版本的 CPU 版深度学习框架避免安装到不需要的 CUDA 库。这一步看着简单却是我踩过的小坑直接按默认方式装会下载几百 MB 的 CUDA 相关包白白占空间不说后面在纯 CPU 机器上还可能报奇怪的缺库错误。装好后可以检查版本import airllm print(airllm.__version__)能正常输出版本号说明环境没问题。建议用虚拟环境隔离依赖不要直接往系统 Python 里装不然很容易和已有的包产生冲突。接着就可以准备模型文件了。3.2 加载模型与推理的核心代码airllm 的接口设计得很简洁核心是自动加载类和生成函数。下面是一个最小推理示例from tokenizer_lib import AutoTokenizer from airllm import AutoModel # 模型路径换成你自己的模型目录 model_path ./models/70b-chat tokenizer AutoTokenizer.from_pretrained(model_path) # max_length 控制最大生成长度可依据内存调整 model AutoModel.from_pretrained(model_path, max_length2048) prompt 请用三句话解释一下什么是量子计算。 inputs tokenizer(prompt, return_tensorspt) output_ids model.generate(**inputs, max_new_tokens512) result tokenizer.decode(output_ids[0], skip_special_tokensTrue) print(result)这段代码几乎和用 GPU 推理的代码一模一样区别只在底层加载机制。模型初始化时会建立内存映射不会一口气把所有权重读入内存这也是它能跑大模型的关键。第一次运行时会有一段较长的模型加载时间那是正常的不是程序挂了。3.3 参数调优如何选择批大小和压缩策略在实际使用中有几个参数需要重点关注。第一是 max_length。它既影响模型能处理的上下文长度也影响 KV Cache 大小。如果内存有限建议先保守一点比如 1024等确认能跑通了再慢慢往上加。我见过很多人一上来就设 4096结果刚生成几十个 token 内存就爆了这不是模型不行是参数没调好。第二是批大小。airllm 适合小批量推理因为每一批数据在计算时都要维护相应的激活值批越大内存占用越高。实测下来内存吃紧时 batch_size1 最稳想要吞吐量可以尝试 batch_size2但需要仔细观察内存变化。CPU 推理原本就不追求高吞吐稳定比速度更重要。第三是量化策略。如果模型文件本身是 4bit 或 8bit 的量化格式会进一步减少磁盘读取量和内存占用。但是量化会影响输出质量需要在速度和效果之间做平衡。我的建议是先用高精度格式理解原理再换量化模型对比结果不要一上来就追求 4bit。很多时候 8bit 的损失远小于 4bit但内存和速度上的收益差距并没有想象中那么大。3.4 实测效果CPU vs GPU以及一些注意事项我用一台只有 16GB 内存的普通笔记本跑过一个 70B 量化模型没有独立显卡。坦白说生成速度确实不快大概每秒几个 token但一个完整的段落是能稳定生成的。如果是 13B 模型速度会明显好很多7B 模型体验就比较流畅。下面是一个参考对比模型规模内存需求8bitCPU上的大概速度适用场景7B约 8-12GB每秒 10-20 token轻量对话、文本分类13B约 16-24GB每秒 3-8 token摘要、知识库问答70B约 64-80GB每秒 0.5-2 token离线批量分析、实验验证如果你打算做聊天机器人需要低延迟交互那么 CPU 推理可能不太合适。但如果你要批量跑离线打分、生成摘要、做知识库评测那几秒钟一点的延迟完全可以接受。我通常会在夜间挂机跑一批任务第二天早上收集结果反而形成了一种很稳定的工作流。另外务必给系统留出足够的内存。电脑本身运行系统、浏览器、编辑器都会占用内存如果物理内存只有 8GB跑 70B 模型时还是会比较吃紧。建议先关掉不必要的程序或者换 16GB 以上内存的机器体验会稳定很多。如果你用的是 swap 空间托底一定要留意是否发生了频繁换页否则推理时间会被拖长很多。4. 适用场景与取舍建议4.1 适合哪些场景离线批处理、私有部署、教学演示从我的实际体验看airllm 最适合的场景是离线批量处理。比如你有 100 篇文档需要生成摘要有 50 个问题需要批量评测这类任务不需要实时反馈跑得慢一点完全没关系。只要在睡前把任务挂上第二天早上看结果工作照样推进。本地私有部署也很合适。很多团队对数据出境非常敏感不愿意把业务数据送到云端 API。airllm 让模型权重和计算都留在本地虽然速度不如 GPU 集群但安全性是自己可控的。你可以在内网服务器上装一个 airllm把敏感数据在本地处理完再进入业务系统。还有一个场景是教学演示。当你给学生讲 transformer 模型的分层结构时与其画几张静态图不如直接在一台普通电脑上跑一遍逐层加载的推理。airllm 在这种情况下不仅是个工具更是一个能直观展示“层”和“内存关系”的教具。我见过有人用它跑中途运算过程可视化效果比 PPT 好太多。4.2 不适合哪些场景高并发、实时交互airllm 的短板也很明显。首先不适合高并发场景CPU 推理原本吞吐就有限如果同时来十个请求内存和 CPU 会被迅速打满。其次不适合实时交互如果你要做语音助手或在线客服用户不可能等上几十秒才收到一句回复。最后如果模型特别大、磁盘又慢airllm 的体验会非常糟糕机械硬盘上跑 70B 模型基本是折磨。在这些场景下正确选择是 GPU 推理、云端 API 或者专门的推理加速方案。airllm 不是万能的它的定位就是“低成本、低速度、可离线”。你想明白自己到底要什么自然就知道该不该用它。4.3 和云端 API 或专用推理框架怎么选如果你有稳定的网络环境且不担心数据隐私云端 API 的性价比通常更高因为别人把集群和运维都替你做了。但如果你需要频繁调整模型、尝试不同权重、调试 Prompt那么本地部署自用会更灵活。airllm 提供的就是这种“把模型握在自己手里”的自由。和专门的量化或加速框架相比airllm 更偏向通用性和易用性。它不需要你手动处理复杂的算子优化也不需要你针对特定硬件重新编译。它牺牲了一部分性能上限换来了更简单的使用体验。对大多数开发者来说简单带来的效率提升往往比几倍的推理速度更有价值。5. 常见问题与排查实录5.1 内存不够怎么办这是最常见的运行问题。日志里可能直接提示内存不足甚至进程直接被系统杀掉。这时候检查两点第一是否所有无关程序都退出了第二当前模型量化程度是否够高。如果物理内存只有 8GB还试图跑 70B 模型的高精度版本基本没戏建议换 13B 或 7B 模型。另一个容易被忽略的是 swap 空间。airllm 依赖内存映射如果磁盘页在物理内存和虚拟内存之间频繁交换又遇到 swap 空间太小系统会非常卡甚至卡死。这时候可以临时扩大 swap或者增加物理内存条。增加物理内存是更彻底的解法因为 swap 本质上还是在用磁盘当内存速度会拖累整体推理。5.2 推理速度太慢怎么优化如果觉得生成速度慢到无法接受先别急着放弃。几个方向可以试第一确认模型是否真的是量化版本4bit 模型的读取量比高精度小得多第二把模型文件放到高效的 SSD 上不要放机械硬盘第三如果 CPU 支持可以开启多线程推理airllm 内部很多计算调用了高阶矩阵运算库正确配置多线程能带来明显收益。你还可以减少上下文长度因为 KV Cache 和输入长度直接相关长度越短内存压力越小速度也会更快。如果这些手段都用上了还是慢那就要重新评估需求了。或许你需要的是更小的模型而不是更快的工具。5.3 模型转换失败的处理由于 airllm 需要从模型目录读取权重有时下载的模型格式不对或者路径里缺少必要文件会导致加载失败。这时可以先用自己的原生加载器加载一次确认模型能被正确解析再切回 airllm。如果原生加载也失败那问题在模型文件本身而不是 airllm。如果模型是多个分片文件airllm 通常能自动处理但目录里的文件不能缺。我的习惯是先把模型放到一个稳定目录不放在下载文件夹避免下载工具创建奇怪的临时文件干扰解析。这种问题往往看起来是“模型不支持”实际上只是文件没放对位置。5.4 避坑经验速查我把一些经验整理成表格方便对照问题现象可能原因建议加载时卡住很久首次读取大文件到磁盘缓存耐心等待或用大页缓存CPU 占用很高但速度慢多线程配置不当或磁盘慢检查线程数换 SSD输出内容明显变差量化等级过高恢复高精度对比效果生成总是中断内存不够被系统杀进程调整 max_length、关掉多余程序路径报错模型分片缺失检查目录完整性日志显示缺库依赖安装不完整按提示补装对应依赖并重启进程这些经验没有一条是特别深奥的但每一条都来自真实操作。如果你照着流程跑大概率会遇到其中一两个问题这时候对照表格排查会省不少时间。另外最好在一个独立目录里保存运行日志出问题时可以直接翻看堆栈信息定位起来会快很多。我个人在实际操作中最深的体会是不要一开始就追求“一步到位跑 70B”。airllm 这类方案最大的价值不是让你把最大的模型塞进最小的机器而是让你有机会在本地亲手把整个推理链路跑通理解模型从加载、映射到逐层计算的全过程。先用小模型把流程跑顺再逐步挑战更大的模型会比一上来就卡在内存问题上舒服很多。如果你手头正好有一台旧电脑不妨装上试试它可能会改变你对“本地跑大模型”这件事的判断。

相关新闻

GaussDB内存参数调优全解析:从预算分配到实战排查

GaussDB内存参数调优全解析:从预算分配到实战排查

接手 GaussDB 之后,我翻了不少文档,也踩过不少坑。说实话,GaussDB 的内存参数设置,是我见过最容易让 DBA 纠结的地方:参数名字看起来都认识,真到了要调的时候,又不知道从哪个下手。这篇文章我就…

2026/10/17 16:29:30 阅读更多 →
tmux终端复用器详解:会话保持与多窗口管理,提升命令行效率

tmux终端复用器详解:会话保持与多窗口管理,提升命令行效率

说句实在话,每次看到同事还在靠十几个终端窗口堆出“任务栏连环画”,或者SSH一断就对着丢失的现场欲哭无泪,我都想按头安利tmux。它不是藏着掖着的高深技巧,本质就是给终端加了个“多窗口管理器”,但用顺之后&#xff…

2026/10/17 17:16:41 阅读更多 →
Windows下通过WSL2安装配置Claude Code的完整指南

Windows下通过WSL2安装配置Claude Code的完整指南

第一次在Windows下装Claude Code,我走了不少弯路。图省事直接装在Windows端,用是能用,一碰真实项目就露馅:脚本执行权限、路径分隔符、各种Unix小工具缺失,各种别扭。后来老老实实把WSL2环境整理了一遍,再在…

2026/10/17 15:17:49 阅读更多 →

最新新闻

Codex 100个真实案例 - 用AI做本地密码管理器(AES加密+自动生成)

Codex 100个真实案例 - 用AI做本地密码管理器(AES加密+自动生成)

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

2026/10/17 23:46:44 阅读更多 →
密码算法安全性检测:攻击模拟、形式化验证与统计分析三层闭环

密码算法安全性检测:攻击模拟、形式化验证与统计分析三层闭环

简介:本资源是一份面向信息安全专业学生、密码学初学者及系统安全开发者的教学型PPT课件,聚焦密码算法安全性评估方法与核心模块设计实践。内容覆盖攻击模拟(暴力破解、侧信道)、形式化验证、统计分析等检测手段,并系统…

2026/10/17 23:46:44 阅读更多 →
Hive与Hadoop中Guava版本冲突的根因与四级解决方案

Hive与Hadoop中Guava版本冲突的根因与四级解决方案

1. 项目概述:为什么一个jar包的版本冲突会让人彻夜难眠 “hive-exec包guava冲突解决”——这行字看起来像一段报错日志的截取,也像运维同学凌晨三点发在技术群里的求救信号。但对任何在Hadoop生态里摸爬滚过半年以上的从业者来说,它背后是一…

2026/10/17 23:46:44 阅读更多 →
量子力学究竟牛在哪?从叠加纠缠到学习路径的硬核拆解

量子力学究竟牛在哪?从叠加纠缠到学习路径的硬核拆解

不瞒你说,这几年我在各种技术群、行业群里,隔三差五就能看见有人甩出“量子力学牛逼”这句话。它不是出现在论文里,也不是什么严谨的学术结论,而是在有人聊到量子芯片、量子云平台、甚至某个带“量子”二字的创业项目时&#xff0…

2026/10/17 23:46:44 阅读更多 →
DeepSeek Harness 小白入门 02:这是 DeepSeek 官方产品吗?先认清第三方项目与使用边界

DeepSeek Harness 小白入门 02:这是 DeepSeek 官方产品吗?先认清第三方项目与使用边界

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

2026/10/17 23:45:43 阅读更多 →
C语言控制台设置入门:用TaoToken统一管理API Key的实战配置

C语言控制台设置入门:用TaoToken统一管理API 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/17 23:45:43 阅读更多 →

日新闻

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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →