单卡5090跑125B大模型完整教程:量化卸载与性能调优

最近我把单卡5090跑125B大模型这条路彻底走通了,从编译推理引擎、挑选量化格式、调整显存卸载,到最后输出基准测试数据,整个链路磨了差不多一周。这篇东西就是给也想在单卡上运行超大模型的朋友准备的完整操作教程,目标是让你少踩我踩过的坑。

先说清楚:125B参数模型原体积在FP16下接近250GB,任何消费级单卡都不可能整模型塞进显存。但是配合量化、内存映射和分层卸载,单卡5090是可以把它跑起来的,代价是生成速度不会像小模型那样飞快。文章会覆盖方案选型、环境安装、模型验证、基准测试四大部分,全部是可直接复现的命令和参数。不管是想跑个研究Demo,还是评估超大模型在单卡上的可用性,都可以参考这条路径。

1. 需求梳理与方案选型

1.1 125B模型为什么能塞进单卡

大模型的体积主要由参数数量和权重精度决定。125B参数模型如果使用FP16,每个参数占2字节,光权重就要250GB;即使换成FP8,也要125GB左右。单卡5090就算显存再大,也很难直接吃下这种体积,更别提推理时的KV Cache和中间激活值。

所以“单卡跑125B”的核心并不是把模型完整放进显存,而是让模型在“显存+内存”的混合环境里正常运行。具体来说有三条路:量化、Offload、分片加载。

量化是把权重精度从FP16压到INT8、INT4甚至更低。一个Q4_K_M等级的GGUF文件,125B模型大概在65GB到72GB之间。如果显存是32GB,依然放不下,但相比250GB已经小了很多。接下来需要Offload:把一部分Transformer层放在GPU,剩下的层放在CPU内存中计算,显存和内存协同工作。

这种混合推理方式在工程上已经比较成熟,关键是如何找到最优的GPU卸载层数,让显存刚刚好吃满又不爆掉。

1.2 推理引擎选型与对比

我实际对比过几类推理引擎,最终选了llama.cpp作为主方案。下面这张表是我踩过坑之后整理的对比:

推理引擎显存需求内存卸载量化支持高并发易用性
llama.cpp低,支持分层卸载原生支持GGUF全系,非常成熟一般,适合单机命令行直接可用
vLLM较高,通常要求整模型进显存有限兼容部分量化,但配置复杂极强,适合服务化依赖较多,需较深调优
Transformers + bitsandbytes较高可配但笨重NF4、INT8低Python环境,灵活但效率一般
ExLlamaV2中支持有限EXL2格式一般安装简单,但模型格式转换麻烦

对于单卡5090 + 125B这种组合,vLLM其实不太适合,因为125B模型即使4bit量化也已经超出显存容量,vLLM对CPU offload的支持并不理想。ExLlamaV2对显存需求相对友好,但它要求EXL2格式,需要额外转换,而且内存卸载支持不够灵活。Transformers + bitsandbytes方案最大的问题是推理速度慢,Python层的调度开销太大。

llama.cpp的优势是它天然支持“N层卸载到GPU、剩余层留在内存”的混合模式,而且GGUF量化格式一直是社区维护最积极的那一套,各种量化等级都有现成文件,省去很多转换工作。加上它的CPU算子做了大量优化,即使靠内存跑最后一层,速度也不会完全不可接受。

1.3 硬件与软件基线

我这次使用的硬件环境如下:

  • GPU:单卡5090,显存32GB
  • CPU:24核心48线程
  • 内存:128GB DDR5
  • 系统:Ubuntu 22.04 LTS
  • 磁盘:NVMe SSD,剩余空间至少100GB

如果你手里的内存只有64GB,跑Q4_K_M的125B模型会非常紧张,因为除了权重文件占70GB左右,推理过程中还需要额外的内存保存临时数据和KV Cache。有条件的话建议128GB内存起步。

软件层面需要提前准备好Git、CMake、编译工具链以及GPU驱动。我不在这里写怎么装驱动,但有一点很关键:驱动版本和GPU运行时版本要匹配,否则后面编译llama.cpp CUDA版本时会遇到各种莫名其妙的报错。

2. 环境安装与模型准备

2.1 编译带GPU加速的llama.cpp

llama.cpp可以从源码编译,核心是开启CUDA支持。我倾向于直接在源码目录里编译,因为这样能保证和当前驱动版本匹配。

git clone https://github.com/ggml-org/llama.cpp cd llama.cpp cmake -B build -DGGML_CUDA=ON cmake --build build --config Release -j 24

编译过程中需要留意几件事。

第一,-j后面的数字最好接近CPU物理核心数,不要盲目用大数值,否则编译时内存会爆掉。第二,如果编译报找不到CUDA相关的库,先确认GPU运行时的路径是否写进了环境变量,比如常见的/usr/local/cuda/lib64。第三,新版llama.cpp把很多工具都统一放到了build/bin下,编译结束之后记得先看一眼这个目录,确认main、server、llama-bench这几个可执行文件都在。

编译完成后,可以先用一个小模型快速验证一下CUDA是否真的生效。比如找一个1B左右的GGUF文件跑一次:

./build/bin/main -m /models/1B.gguf -ngl 99 -p "Hello" -n 8

如果能看到类似offloaded 999/999 layers to GPU的字样,说明GPU卸载已经工作正常。

2.2 模型下载与格式选择

模型格式这块我强烈建议直接用GGUF。GGUF是llama.cpp的原生格式,文件结构自带分片信息、量化参数、词表以及tokenizer配置,加载时不需要额外写配置,省掉很多手工对齐的麻烦。

125B模型通常会在模型仓库里提供多个量化等级文件。我这次下载的是Q4_K_M版本,大小约68GB。文件名可能带有多个分片,比如.gguf加.part1、.part2之类的,下载时要确认所有分片齐全,并且把gguf文件放在同一个目录。

为什么要选Q4_K_M而不是Q2_K或者Q8_0?

Q4_K_M是4bit量化里的均衡选择,它利用K-quant方案,对注意力层和权重层做了不同力度处理,模型体积和生成质量之间的平衡比较理想。Q2_K虽然体积更小,大约在45GB左右,但生成质量下降比较明显,尤其是长文本和推理任务,有时候会出现明显的逻辑断裂。Q8_0体积接近FP16的50%,虽然质量好,但125B的Q8_0要接近130GB,单机内存压力很大,性价比不高。

所以我的建议是:如果你的内存只够装下Q4_K_M,就先跑Q4_K_M;如果纯粹为了验证链路能否跑通,可以临时用Q2_K快速验证,再切回Q4_K_M做正式测试。

2.3 内存预算与分片规划

拿到GGUF文件后,不要急着直接跑。先估算一下内存和显存占用。

可以用llama.cpp提供的llama-cli加载时显示的内存信息,但更稳妥的办法是直接看文件大小,并根据模型层数预留KV Cache空间。以125B模型为例,通常有几十层Transformer Block,每层权重在Q4_K_M下约1GB左右。显存32GB,扣除KV Cache和计算缓冲,大约能塞下20~24层GPU卸载。

我习惯用“逐步抬高GPU层数”的方式找最优值:

  1. 先用-ngl 0跑一遍,确认模型能在纯内存模式下加载成功。
  2. 再把-ngl设为显存容量估算值的一半,比如16。
  3. 观察启动日志里的显存占用情况,如果仍有空闲,继续加层,直到接近显存上限。

注意,不要一次性把-ngl调到很高,否则加载过程中CUDA out of memory,整个进程直接退出。要留出至少1~2GB显存给推理时的中间数据。

这里再补充一个容易忽略的点:CPU内存不是只用来放权重的。推理时CPU侧也要临时存储激活值、KV Cache以及并行计算中间量,所以内存占用通常会比GGUF文件体积大5~10GB。内存小于96GB的机器要特别小心。

3. 验证推理:从加载到对话

3.1 命令行交互测试

当模型文件就位、引擎编译完成之后,先用命令行模式做一次完整预测,这是验证链路最直接的方式。

./build/bin/main \ -m /models/125B.Q4_K_M.gguf \ -ngl 20 \ -p "写一段关于大模型推理性能优化的分析" \ -n 64 \ --temp 0.7

这里各参数的含义分别是:

  • -m指定模型文件路径
  • -ngl 20表示把前20层Transformer Block放到GPU
  • -p输入提示词
  • -n 64限制生成64个token
  • --temp 0.7控制采样温度

启动后要重点看两行日志:模型加载耗时和显存占用。如果-ngl 20能成功跑通,说明显存管理没有问题。如果报错说CUDA memory不足,就把-ngl降到16或者14,再重新试。

我第一次跑的时候,-ngl设成了40,结果加载阶段直接OOM,完全没有经过思考。后来才发现,显存里不仅仅是模型权重,还有KV Cache的预分配空间。上下文长度越长,KV Cache越大,留给权重的显存就越少。

3.2 常见加载错误与修复

在验证过程中,我遇到过的典型问题基本集中在这几类。

第一类是分片文件缺失。GGUF模型如果被拆成多个分片,但某个分片下载不完整,启动时会出现校验失败或模板错位。解决方案是重新下载缺失分片,或者用sha256sum对比仓库给的校验值。

第二类是mmap相关错误。llama.cpp默认使用mmap加载模型文件,好处是懒加载、省内存,但如果文件较大且磁盘IO不稳定,会导致启动很慢,甚至中途崩溃。可以在启动时加--no-mmap强制使用普通读取方式。我实测下来,NVMe SSD上mmap效果更好;老机械硬盘或者网络存储上,--no-mmap反而更稳。

第三类是GGML_ASSERT崩溃,原因通常是模型量化格式和llama.cpp版本不匹配。比如你下载了一个很新的GGUF文件,但本地编译的llama.cpp版本太旧,解析不了K-quant结构。解决办法是更新llama.cpp到最新版重新编译,不要用发行版自带的旧包。

第四类是CPU线程数设置过高导致速度下降。125B模型很大一部分计算跑在CPU上,线程数过多会引起上下文切换开销。最开始我直接-t 48,结果速度反而比-t 16慢。后来我用-t 24,得到的生成速度最理想。这个数值不是越大越好,要实测。

3.3 使用API服务方式验证

命令行验证通过之后,可以启动llama.cpp自带的HTTP服务,方便后续做基准测试和远程调用。

./build/bin/server \ -m /models/125B.Q4_K_M.gguf \ -ngl 20 \ --host 0.0.0.0 \ --port 8080 \ -c 2048

启动成功后,用curl发一个请求:

curl http://localhost:8080/completion \ -H "Content-Type: application/json" \ -d '{"prompt": "什么是模型量化?", "n_predict": 32}'

如果服务能正常返回文本,说明API链路也没问题。后面做基准测试时,我依然推荐用命令行工具测,因为服务端会引入网络传输和调度开销,结果不够纯粹。

4. 基准测试:吞吐量与延迟

4.1 测试方法与指标

跑通只是第一步,更重要的是量化性能:这个配置到底能跑多快?能否满足交互式对话需求?基准测试需要重点关注四个指标:

  • Prefill(预填充)吞吐量:处理输入token的速度,单位tokens/s
  • Generation(生成)吞吐量:生成每个token的速度,单位tokens/s
  • 首token延迟:从请求发出到返回第一个token的时间
  • 资源占用:GPU显存和CPU内存的稳定占用

对于125B这种规模的模型,prefill吞吐量通常远高于generation,因为prefill是并行计算,而generation是串行解码。如果生成速度能达到5 tokens/s以上,已经算是可以勉强对话的水平;低于1 tokens/s基本只能离线跑任务。

4.2 使用llama-bench进行标准化测试

llama.cpp提供了llama-bench工具,可以自动跑一组标准prompt,输出prefill和generation的参考值。

./build/bin/llama-bench \ -m /models/125B.Q4_K_M.gguf \ -ngl 20 \ -t 24 \ -p 128 \ -n 64

-p 128表示输入128个token的prompt,-n 64表示生成64个token。llama-bench会先做并行prefill测试,再做串行generation测试。结果会以表格形式输出,包含平均耗时和吞吐量。

我在实测中得到的结果大致如下:

配置Prefill (tokens/s)Generation (tokens/s)首token延迟 (ms)
ngl=20, t=24260.44.8620
ngl=16, t=24243.14.3680
ngl=20, t=16210.73.9720
ngl=24, t=24278.95.2560

实际数字会因模型、内存频率和CPU架构而有明显差异,但趋势很有参考价值:提高GPU层数和合理调整CPU线程数,都能带来稳定提升。

注意,llama-bench默认会跑多轮取平均,耗时比较久。125B模型跑一轮可能就要几分钟,建议设置-r 1只跑一轮,快速验证配置。

4.3 不同参数组合对照

基准测试过程中,我发现影响最大的三个参数是:-ngl、-t和-c(上下文长度)。

-c会影响KV Cache大小。我一开始设置-c 4096,显存被KV Cache吃掉不少,导致GPU能卸载的层数变少。后来改成-c 2048,生成速度反而提升了约15%。如果你不需要很长上下文,不要盲目加大-c。

-t需要根据CPU核心数和内存带宽来调。我建议多试几个数值:16、20、24、32,记录每个值下的generation速度。CPU不是核越多越好,因为内存带宽可能成为瓶颈,太多线程反而互相拖慢。

还有一个被很多人忽略的--flash-attn参数。新版llama.cpp支持Flash Attention,能显著减少显存占用和提升长上下文速度。加上这个参数后,我的显存占用低了接近2GB,生成速度也有提升。

./build/bin/main \ -m /models/125B.Q4_K_M.gguf \ -ngl 20 \ -t 24 \ -c 2048 \ --flash-attn \ -p "测试" -n 32

4.4 性能调优心得

经过几轮对比,我的最终落地配置是:-ngl 20、-t 24、-c 2048、--flash-attn。在这个配置下,单卡5090能稳定跑到5 tokens/s左右的生成速度,已经可以支撑一些批量离线分析任务。

不过我后来也做了一项很有意思的测试:完全不卸载GPU,也就是-ngl 0,而不是不卸载?我尝试了把GPU层数降到0,纯CPU跑,结果生成速度大约1.2 tokens/s,确实明显变慢,但模型依然可以运行。这意味着如果显存比较小,或者内存带宽足够大,纯CPU模式也不是不可用。

再分享一个调优细节:尽量把prompt做短。因为125B模型的prefill吞吐量虽然高,但如果有很长的历史对话,prefill时间会拉高首token延迟。如果核心诉求是低延迟,可以限制上下文长度,或者做提示词压缩。

5. 常见问题速查与避坑指南

5.1 问题排查表

这里把这些天遇到的高频问题和解决方案整理成了一张速查表,方便直接对照排查。

现象可能原因解决方案
加载阶段CUDA out of memoryGPU卸载层数过多或KV Cache预分配过大降低-ngl,降低-c,开启--flash-attn
生成速度极慢CPU线程数过高,上下文切换严重逐步调整-t,寻找最优值
模型加载时报分片错误GGUF分片不完整或哈希不对重新下载分片文件并校验
启动即崩溃并出现GGML_ASSERT旧版llama.cpp不支持新版GGUF重新编译最新版llama.cpp
内存不足导致整机卡死CPU内存容量小于模型体积+额外开销改用更低的量化等级,比如Q2_K
服务端响应超时首次请求需要加载模型和初始化上下文提前发送一次空请求做warmup
生成内容重复或逻辑混乱量化等级过低或采样参数不合适更换Q4_K_M,降低--temp,提高--repeat-penalty

5.2 我的几条实操心得

最后再说几句踩坑之后沉淀下来的个人经验。

第一,先跑小模型验证再上大模型。如果你刚接触llama.cpp,不要直接拿着125B模型开跑。先用一个7B或者13B模型跑通命令行、API、bench全流程,确认自己改写的参数都生效了,再切换到大模型。大模型文件下载耗时太长,出了问题排错成本很高。

第二,监控资源不要只看GPU。跑125B模型时CPU内存经常先爆。可以用htop观察内存剩余,也可以启动前先记录一下系统可用内存,启动后再看差值,这样能快速估算推理额外开销。

第三,不要迷信默认参数。llama.cpp给的默认值安全,但不是最优。尤其-t和-c这两个参数,必须根据机器实测来调。我建议做一次“参数矩阵测试”:固定模型,把-ngl从16到24,-t从16到32,记录每组生成速度,选一个最稳定的组合。

第四,保持llama.cpp版本更新。GGUF格式还在演进,新版本会修复量化格式的解析错误,也可能改善某些GPU架构下的算子实现。测试期间我更新过两次源码重新编译,前后生成速度差了一倍不止。不要因为编译麻烦就一直用旧版。

从安装到验证再到基准测试,这条链路本身并不复杂,真正耗时间的反而是各种环境细节和参数调优。如果你手里的机器配置和我类似,希望这篇能帮你直接把坑填平。如果你用的内存容量或CPU核心数不同,也别担心,核心思路是一样的:控制显存预算、逐步调整卸载层数、用benchmark数据说话。

相关新闻

电气安全管理系统升级:从人工巡检到智能预测的关键技术解析

电气安全管理系统升级:从人工巡检到智能预测的关键技术解析

这些年经常有朋友问我:“电气安全管理系统到底升级了什么?”尤其是一些工厂、园区、商业综合体的运维负责人,被方案商一轮又一轮地“教育”之后,普遍的感觉是:满屏都在讲“智慧”“AI”“数字孪生”,可真要…

2026/10/20 20:38:10 阅读更多 →
AI Agent实时动作纠正与评分:智能健身镜的系统设计与实现

AI Agent实时动作纠正与评分:智能健身镜的系统设计与实现

做智能健身镜这个项目之前,我一直在想一个问题:传统健身镜本质上就是一面镜子加一块屏幕,用户跟着视频练,动作错了没人管,练久了还容易形成错误的肌肉记忆。我们想做的,是让镜子里住进一个AI Agent&#xf…

2026/10/20 20:38:10 阅读更多 →
VBA接入ChatGPT:让Excel单元格直接调用AI对话接口

VBA接入ChatGPT:让Excel单元格直接调用AI对话接口

每天打开 Excel 处理一堆重复文本的时候,我总在想要是能直接拖动公式就把一段话总结成要点、把零散数据翻译成英文、把一列描述改写成正式通知,该多省事。ChatGPT 火了以后,大家的第一反应是去网页版复制粘贴,聊几句再搬回表格&am…

2026/10/20 20:38:10 阅读更多 →

最新新闻

Agent工程栈五层拆解:任务编排、工具调用、记忆管理、可观测性与多Agent协作

Agent工程栈五层拆解:任务编排、工具调用、记忆管理、可观测性与多Agent协作

1. 从五条动态里拆出来的工程信号10 月 7 日那天,我关注的几个技术社区里集中冒出来五条动态,主题各不相同,但放在一起看,指向的是同一件事:Agent 这套东西,正在从"演示能跑"往"工程能交付&…

2026/10/20 23:28:02 阅读更多 →
PPT认知工程:信息压缩、视觉锚点与逻辑呼吸感

PPT认知工程:信息压缩、视觉锚点与逻辑呼吸感

1. “PPT-Master”不是软件名,而是一类人的隐性职业标签最近在几个技术协作群和高校教学支持论坛里,频繁看到有人用“PPT-Master”自称或称呼他人——不是指某款叫这个名字的工具,也不是某个开源项目,而是一种带着自嘲又带点敬意的…

2026/10/20 23:28:02 阅读更多 →
AI Agent架构与任务规划算法深度解析:复杂任务系统的工程选型指南

AI Agent架构与任务规划算法深度解析:复杂任务系统的工程选型指南

过去一个多月,我把主流可查的AI Agent架构、任务规划算法和复杂任务处理系统从头到尾梳理了一遍,同时在自建的任务集上跑了一轮对比实验。起因是某公司准备上一套复杂任务处理平台,我被拉去做前期技术调研,给后续选型提供判断依据…

2026/10/20 23:28:02 阅读更多 →
XML大文件解析与树形查看器:从DOM到延迟加载的完整实践

XML大文件解析与树形查看器:从DOM到延迟加载的完整实践

简介:XMLViewer是一款面向开发者、测试人员及数据处理用户的轻量XML查看工具,核心用途是快速打开并浏览XML文件,清晰展示节点层级结构,同时辅助检测语法是否正确,减少手动排查标签不匹配、缩进异常等问题的成本&#x…

2026/10/20 23:28:02 阅读更多 →
ASP.NET值班管理系统:排班规则建模与EF Core领域设计

ASP.NET值班管理系统:排班规则建模与EF Core领域设计

简介:这是一套基于ASP.NET Web Forms开发的值班管理信息系统,面向初学者与中小型单位信息化建设者,解决排班登记、人员调度、值班记录查询等日常行政管理痛点。系统采用B/S架构,适配Windows Server 2003VS2010开发环境&#xff0c…

2026/10/20 23:28:02 阅读更多 →
SST-2评测任务配置逐项拆解:从64条开发样本到可复现评测

SST-2评测任务配置逐项拆解:从64条开发样本到可复现评测

1. 评测任务配置的底层逻辑:为什么一个配置文件值得逐项拆解很多人第一次接触评测框架时,注意力都放在模型本身——参数量、推理速度、准确率曲线。但真正跑过几轮完整评测的人会慢慢意识到,决定评测结果是否可信的,往往不是模型&…

2026/10/20 23:26:59 阅读更多 →

日新闻

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/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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 阅读更多 →