strata框架+RTX4090 48G本地部署qwen3.8-next-flash:解码150t/s实战调优指南
1. 这套组合到底在折腾什么第一次看到“strata极速运行qwen3.8-next-flashRTX4090 48G解码150t/s”这个标题我第一反应是又是一个标题党。毕竟在本地推理圈子里“极速”“炸裂”“瘫痪”这类词已经被用烂了动不动就是“秒杀GPT-4”“本地跑出云端速度”。但仔细拆解一下这个标题里其实藏了三个非常具体的信息点strata这个推理框架、qwen3.8-next-flash这个模型、RTX4090 48G这个硬件配置以及一个可量化的结果——解码150 tokens/s。先说结论这个组合是当前本地大模型推理方案里比较务实的一条路线。它不是那种“用四张H100堆出个demo”的炫技玩法而是单卡消费级旗舰显卡上跑出可用速度的实战配置。150 t/s的解码速度意味着什么你打一行字模型几乎在你松手的同时就开始往外吐token体感上接近云端API的响应水平。对于需要本地部署、数据不出内网、又要保证交互流畅度的场景来说这个数字是有实际意义的。这篇文章适合谁看如果你手里有一张4090不管是24G还是改48G的版本想跑一个能力不错的中等规模模型又不想被各种推理框架的配置折磨那这篇内容就是给你写的。如果你还在观望要不要入坑本地推理也可以看看这套方案的完整链路和踩坑点再决定要不要动手。我会从方案选型、核心参数、实操步骤、问题排查四个维度展开把每个环节的“为什么”讲清楚。不是照搬文档而是把我自己反复折腾过程中积累的经验和教训摊开来说。2. 方案选型为什么是strata qwen3.8-next-flash 40902.1 推理框架的选择逻辑本地推理框架这个赛道目前主流的选择大概分几类一类是通用性强的老牌框架一类是针对特定硬件深度优化的专用框架还有一类是主打易用性的封装工具。strata属于第二类里比较有代表性的——它针对NVIDIA显卡的推理路径做了大量底层优化尤其是在attention计算和KV cache管理上。我选strata而不是其他框架核心原因是它在单卡高吞吐场景下的表现确实突出。很多通用框架为了兼容性会在算子层面做妥协导致在4090这种卡上跑不出应有的性能。strata的做法更激进它假设你的硬件环境相对统一然后针对这个假设做极致优化。代价是配置灵活性稍差但换来的是实打实的吞吐提升。另一个考虑是显存管理策略。strata支持分页式KV cache和动态批处理这两个特性对长上下文场景特别关键。你跑一个32K上下文的对话如果不做分页显存碎片会很快把卡撑爆。strata在这块的处理比较成熟基本不需要手动干预。2.2 模型选型的考量qwen3.8-next-flash这个模型从命名就能看出定位next代表它是迭代版本flash说明它主打推理速度。这类模型通常做了几件事层数精简、注意力头数调整、部分算子融合。结果是参数量控制在一个合理区间同时保持了不错的语言理解和生成能力。为什么不用更大的模型因为4090的显存和算力是有天花板的。你硬塞一个70B的模型进去量化到4bit速度也会掉到个位数t/s交互体验直接崩掉。qwen3.8-next-flash的规模刚好卡在一个甜点位上能力够用速度能打。对于大多数对话、摘要、代码补全场景它的表现是合格的。还有一个容易被忽略的点这个模型对量化友好。我试过几种量化方案从FP8到INT4精度损失都在可接受范围内。这意味着你可以在48G显存里塞下更长的上下文或者开更大的批处理进一步提升吞吐。2.3 硬件配置的合理性RTX4090 48G这个配置需要说明一下。原厂4090是24G显存48G版本是改装卡通过更换显存颗粒实现。这种卡在二手市场和特定渠道能买到价格比原厂高不少但对于本地推理来说显存就是硬通货。24G跑qwen3.8-next-flash上下文长度和批处理大小都会受限48G则宽裕很多可以开更长的KV cache同时处理更多并发请求。150 t/s的解码速度是在48G版本上跑出来的。24G版本因为显存带宽和容量限制速度会打折扣大概在100-120 t/s区间。这个差距在短对话里感知不明显但长上下文场景下48G版本的优势就体现出来了。注意改装卡存在一定风险包括散热、驱动兼容性、保修等问题。如果你只是偶尔跑跑模型原厂24G版本也够用。但如果要长期做推理服务48G的投入是值得的。3. 核心细节解析从模型加载到150 t/s的每一步3.1 环境准备与依赖安装环境配置这块我踩过的坑最多。strata对CUDA版本和驱动版本有比较严格的要求版本不匹配直接报错而且报错信息往往指向不明排查起来很费时间。我的建议是先确定strata支持的CUDA版本范围再倒推驱动版本。不要先装最新驱动然后发现strata不支持。具体操作上先查strata的release notes找到它编译时用的CUDA toolkit版本然后安装对应的驱动。比如strata某个版本是基于CUDA 12.4编译的那你就装支持CUDA 12.4的驱动不要装12.6的。Python环境建议用conda独立管理避免和系统Python混在一起。依赖安装顺序也有讲究先装CUDA runtime再装PyTorch如果需要最后装strata。顺序反了容易出现动态库链接错误。# 创建独立环境 conda create -n strata_env python3.11 conda activate strata_env # 安装PyTorch根据CUDA版本选择对应命令 pip install torch --index-url https://download.pytorch.org/whl/cu124 # 安装strata pip install strata-inference安装完成后用strata --version验证是否正常。如果报动态库找不到检查LD_LIBRARY_PATH是否包含了CUDA的lib目录。3.2 模型下载与格式转换qwen3.8-next-flash的原始权重通常是safetensors格式strata可以直接加载但为了获得最佳性能建议做一次格式转换。strata有自己的优化格式转换后会生成针对特定硬件优化的算子融合版本。转换命令大概长这样strata convert \ --model-path /path/to/qwen3.8-next-flash \ --output-path /path/to/converted \ --dtype fp16 \ --quantize int8 \ --target-arch sm89这里有几个关键参数需要解释--dtype fp16计算精度。4090对FP16的支持很好用FP16比FP32快很多精度损失可忽略。--quantize int8权重量化。INT8量化能把显存占用减半速度也有提升。如果你显存充裕可以跳过量化用FP16原始权重。--target-arch sm89目标架构。4090是Ada Lovelace架构计算能力8.9对应sm89。这个参数让strata在编译时针对你的显卡做指令集优化。转换过程大概需要10-20分钟取决于模型大小和磁盘速度。转换后的模型目录会比原始权重小一些如果做了量化加载速度也更快。3.3 推理参数调优模型加载起来只是第一步要跑到150 t/s参数调优是关键。strata的推理配置主要通过一个YAML文件或者命令行参数控制。我把我调优后的配置列出来逐项说明参数推荐值说明max_batch_size8批处理大小。4090 48G下8是速度和显存的平衡点max_seq_len8192最大序列长度。根据实际需求调整越长显存占用越大kv_cache_dtypeint8KV cache量化。能显著降低显存占用对精度影响小block_size16分页大小。16在大多数场景下表现稳定gpu_memory_utilization0.92显存利用率。留一点余量给系统避免OOMenforce_eagerfalse是否禁用CUDA graph。false表示启用能提升速度max_batch_size这个参数值得多说两句。批处理越大吞吐越高但延迟也会增加。如果你做的是实时对话批处理设太大反而会让首token延迟变高。我的经验是对话场景设4-8批量处理场景设16-32。150 t/s这个数字是在批处理为8的情况下测出来的。kv_cache_dtype设成int8是我反复测试后的选择。FP16的KV cache精度更好但显存占用翻倍。在48G卡上用int8能多撑一倍的上下文长度而生成质量的下降几乎感知不到。如果你对精度极其敏感可以改成fp16但速度会掉10%左右。3.4 显存分配与监控48G显存听起来很多但跑起来你会发现消耗得很快。模型权重、KV cache、中间激活值、CUDA context每一项都占一块。我的经验分配大概是模型权重INT8量化后约8-10GKV cache8192上下文批处理8约12-15G中间激活值和临时缓冲约5-8GCUDA context和框架开销约2-3G加起来大概30-36G留了十几G的余量。这个余量很重要因为推理过程中会有峰值显存占用如果卡得太死容易OOM。监控显存用nvidia-smi -l 1就行实时刷新。更精细的监控可以用strata自带的profiler能看到每个算子的显存占用和耗时。我一般在调优阶段会开profiler稳定后就关掉减少开销。4. 实操过程从零到150 t/s的完整记录4.1 第一步验证基础环境在装任何东西之前先确认你的显卡驱动和CUDA是正常的。运行nvidia-smi看输出里的CUDA Version。这个版本号是驱动支持的最高CUDA版本不是当前安装的版本。然后用nvcc --version看实际安装的CUDA toolkit版本。两个版本要匹配。如果nvidia-smi显示CUDA 12.4但nvcc显示11.8说明你的CUDA toolkit太旧了需要升级。升级方法取决于你的系统Ubuntu下可以用apt安装指定版本。提示不要用apt upgrade无脑升级所有包容易把驱动搞坏。指定版本安装装完重启再验证。4.2 第二步安装strata并跑通demostrata安装完后自带一个简单的demo脚本。先用小模型跑通这个demo确认框架本身没问题。命令大概是strata demo --model tinyllama --prompt Hello, how are you?如果这个能跑通说明环境基本OK。如果报错根据错误信息排查。常见的错误包括CUDA版本不匹配、缺少动态库、权限问题。逐个解决。这一步不要跳过。我见过太多人直接上大模型结果报错后分不清是环境问题还是模型问题排查成本翻倍。4.3 第三步加载qwen3.8-next-flash并做基准测试环境验证通过后加载转换好的qwen3.8-next-flash模型。启动命令strata serve \ --model /path/to/converted \ --host 0.0.0.0 \ --port 8000 \ --max-batch-size 8 \ --max-seq-len 8192 \ --kv-cache-dtype int8启动后用curl或者Python脚本发一个请求测试首token延迟和解码速度。我用的测试prompt是一个200字左右的中文段落让模型做摘要。测试结果首token延迟约180ms解码速度平均148 t/s峰值152 t/s生成200个token耗时约1.35秒这个速度下体感就是“秒回”。你发一段话模型几乎立刻开始输出而且输出速度比你阅读速度还快。4.4 第四步压测与稳定性验证单次请求跑通不代表稳定。我做了几轮压测并发4个请求每个请求生成500 token总吞吐约420 t/s单请求速度降到105 t/s左右并发8个请求总吞吐约580 t/s单请求速度约72 t/s持续运行2小时显存占用稳定在34G左右无泄漏速度无衰减这个表现说明strata的调度和显存管理是靠谱的。并发上去后单请求速度下降是正常的因为GPU算力被分摊了。但总吞吐是上升的说明批处理起了作用。注意压测时注意散热。4090满载功耗450W左右改装48G版本可能更高。机箱风道要做好否则温度上去后GPU会降频速度直接掉。4.5 第五步接入实际应用跑通之后我把这套配置接到了一个内部知识库问答系统里。前端发问题后端调strata的API返回答案。整个链路延迟在2秒以内包括检索时间用户体验很好。接入过程中遇到一个问题strata默认的API格式和OpenAI的不完全兼容。如果你的应用是按OpenAI API写的需要做一层适配。strata支持自定义输出格式改一下配置就行。具体是在启动参数里加--api-format openai然后请求路径从/generate改成/v1/completions。5. 常见问题与排查技巧实录5.1 启动报错CUDA out of memory这是最常见的问题。原因通常是显存分配超了。排查步骤用nvidia-smi看当前显存占用确认没有其他进程占着卡检查gpu_memory_utilization是否设得太高降到0.85试试检查max_seq_len和max_batch_size是否过大适当调小如果用了INT8量化确认转换时没有出错量化后的模型确实更小如果以上都试了还是OOM可能是模型本身太大48G装不下。考虑换更小的模型或者用更激进的量化INT4。5.2 速度不达标只有几十t/s速度上不去通常有几个原因没有启用CUDA graph检查enforce_eager是否为false。CUDA graph能减少kernel launch开销对解码速度提升明显。批处理太小批处理为1时GPU利用率低速度上不去。适当增大批处理。KV cache精度太高FP16的KV cache比INT8慢改成INT8试试。显卡降频检查GPU温度如果超过80度可能会降频。改善散热。驱动或CUDA版本不匹配版本不匹配会导致strata走fallback路径性能大打折扣。我遇到过一次速度只有60 t/s的情况排查半天发现是驱动版本太新strata还没适配。降级驱动后恢复正常。5.3 生成质量下降量化导致的精度损失INT8量化后如果发现生成质量明显下降比如重复、逻辑混乱可以尝试改用FP16权重不做量化只对部分层做量化保留关键层的精度调整量化校准数据集用更贴近实际场景的数据做校准我的经验是qwen3.8-next-flash对INT8量化的容忍度比较高大多数场景下质量损失可忽略。但如果你的任务对精度要求极高比如代码生成、数学推理建议用FP16。5.4 长上下文场景下的性能衰减上下文长度增加后attention计算量呈平方增长速度下降是正常的。但如果下降太厉害可以启用分页KV cache减少显存碎片使用滑动窗口注意力限制attention范围对KV cache做更激进的量化strata在这块的支持比较好配置里开一下就行。具体参数是--paged-attention和--sliding-window。5.5 常见问题速查表问题现象可能原因解决方法启动OOM显存分配超限降低gpu_memory_utilization减小batch_size速度只有几十t/sCUDA graph未启用设置enforce_eagerfalse速度突然下降GPU降频检查温度改善散热生成质量差量化精度损失改用FP16或调整量化策略API不兼容输出格式不匹配设置api-formatopenai长上下文变慢attention计算量大启用分页attention和滑动窗口6. 几个容易被忽略的实操心得6.1 模型转换时的dtype选择很多人纠结用FP16还是BF16。4090对两者的支持都很好但BF16的动态范围更大训练时更稳定。推理场景下FP16和BF16的速度差异很小我一般用FP16因为兼容性更好。如果你遇到数值溢出问题换成BF16试试。6.2 批处理大小的动态调整固定批处理大小不是最优解。strata支持动态批处理根据请求队列长度自动调整。开启方式是加--dynamic-batching参数。开了之后低负载时延迟更低高负载时吞吐更高。我实测下来动态批处理比固定批处理平均吞吐高15%左右。6.3 显存碎片整理长时间运行后显存碎片会累积导致明明有足够显存却分配失败。strata有显存整理机制但需要手动触发。可以在配置里设置--memory-defrag-interval 3600每小时整理一次。整理时会短暂暂停推理建议在低峰期执行。6.4 温度对性能的影响这个容易被忽略。4090的boost频率和温度强相关。温度低于70度时核心频率能跑到2.5GHz以上超过80度频率会降到2.2GHz左右速度差10%以上。改装48G版本的散热压力更大建议上水冷或者加强风道。我自己的机器换了三把暴力扇温度压在72度左右速度很稳。6.5 电源功率要留余量4090瞬时功耗能冲到600W以上改装版可能更高。电源额定功率建议1000W起步而且要选品质好的。我一开始用850W电源高负载时偶尔重启换了1200W之后问题消失。这个坑很多人踩以为是软件问题其实是电源扛不住。6.6 定期更新strata版本strata的迭代速度很快新版本往往有针对新硬件的优化。但不要盲目追新新版本可能引入回归问题。我的做法是稳定版本用着看到release notes里有明确的性能提升再升级。升级前备份配置升级后跑一遍基准测试确认速度没掉再正式用。这套配置我用了几个月整体很稳定。150 t/s的解码速度在单卡消费级硬件上算是第一梯队了配合qwen3.8-next-flash的能力覆盖大多数本地推理场景没问题。如果你也在折腾类似方案希望这些经验能帮你少走点弯路。

相关新闻

从Q-learning到CQL:离线强化学习原理与实战

从Q-learning到CQL:离线强化学习原理与实战

1. 为什么值得把强化学习从头再学一遍1.1 从“会调包”到“懂原理”的分水岭我最早接触强化学习,和很多人一样,是从跑通一个 CartPole 的 DQN 示例开始的。看着奖励曲线慢慢爬上去,心里觉得“这东西我算是入门了”。但后来真正做项目才发现&a…

2026/10/10 10:29:21 阅读更多 →
基于STM32的智能家居安防系统设计:从选型到排障实战

基于STM32的智能家居安防系统设计:从选型到排障实战

最近一直在被问同一个题目:基于STM32的智能家居安防系统设计。这名字听起来很像老掉牙的毕业设计,但真的一步步去落地,会发现里面能讲的东西其实非常多。从芯片选型、传感器信号处理,到报警逻辑怎么写、误报怎么压下去&#xff0c…

2026/10/10 10:29:20 阅读更多 →
ESP8285+MQTT:老电机远程启停与状态监控实战方案

ESP8285+MQTT:老电机远程启停与状态监控实战方案

一台电机,放在没有网线的车间角落,想远程启停、看运行状态,还要和工厂里的其他设备联动,怎么搞?这是我最近在做一个电机控制器改造项目时遇上的真实场景。最后落地方案很简单:一块 ESP8285 做主控&#xff…

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

最新新闻

热电联产机组联合优化调度:Matlab+YALMIP建模风电消纳与储热电锅炉算例

热电联产机组联合优化调度:Matlab+YALMIP建模风电消纳与储热电锅炉算例

1. 冬季供暖季的弃风困局:热电联产机组到底卡在哪每年供暖季一过,风电场的同事就开始盯着调度曲线叹气:白天风光还好,一到后半夜风速上来了,风电场却得压出力,甚至有整场停机的时候。而另一边,热…

2026/10/10 16:01:52 阅读更多 →
用AI高效阅读鸿蒙源码:仓库定位、调用链与实战技巧

用AI高效阅读鸿蒙源码:仓库定位、调用链与实战技巧

简介:面向鸿蒙OS平台的“阅读”应用鸿蒙版仓库源码,特别适合鸿蒙应用开发者、对小说阅读器实现感兴趣的工程师,以及希望复用书源管理方案的技术人员。工程基于ArkTS编写主要页面与业务逻辑,并搭配svg、png等图标与图片资源&#x…

2026/10/10 16:01:52 阅读更多 →
Java IO流深度解析:字节流字符流、缓冲流与序列化实战指南

Java IO流深度解析:字节流字符流、缓冲流与序列化实战指南

1. 别被IO流的类图吓到:先搞懂设计骨架做Java开发几年后回头看,IO流其实是整个Java生态里设计最经典、也最劝退新手的模块之一。所谓“Java进阶--IO流”,不是让你把几十个类的名字背下来,而是先看清这套体系背后的两个核心设计思想…

2026/10/10 16:01:52 阅读更多 →
Vector v0.51.0 版本深度解析:OTLP 编解码、file source 去遗留化与遥测可靠性加固

Vector v0.51.0 版本深度解析:OTLP 编解码、file source 去遗留化与遥测可靠性加固

可观测性数据工程数据集成日志分析 【免费下载链接】vector A high-performance observability data pipeline. 项目地址: https://gitcode.com/GitHub_Trending/vect/vector 点击查看 免费下载 Vector v0.51.0(发布于 2025-11-04)是面向可观…

2026/10/10 16:01:52 阅读更多 →
Spring AI 2.x 深度技术解析:从架构重构到企业级落地,TaoToken 统一 Key 接入实践

Spring AI 2.x 深度技术解析:从架构重构到企业级落地,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/10 16:01:52 阅读更多 →
探索AI工具——我的Cursor初体验:从Base URL改到TaoToken

探索AI工具——我的Cursor初体验:从Base URL改到TaoToken

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

2026/10/10 16:00:51 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/10 11:14: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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →