先泼一盆冷水:大模型不是非得有顶级显卡才能跑。我自己的主力机就是一颗普通桌面级CPU,没独显,照样把7B模型拉起来日常聊天、写文案、做文本分类。这篇文章要讲的就是在Windows上用Docker部署Ollama,再把阿里通义千问Qwen2:7B跑在纯CPU环境下的完整过程,包含所有我踩过的坑和调优细节。整个方案的核心价值在于:环境隔离、卸载干净、不污染宿主机,而且以后想换模型版本或者加模型,一条命令就能搞定。适合完全没有GPU、不愿意折腾显卡驱动、但想在本机体验私有化大模型的人。
1. 为什么会写这个部署方案
1.1 没有GPU也能跑大模型的现实需求
身边不少人一听到“本地部署大模型”,第一反应就是“得买显卡”。这个观念不全对,尤其是对7B这种参数量的模型来说,CPU完全跑得动,只是速度上达不到GPU那种“秒出”的爽快感而已。纯CPU部署真正的价值在于三件事:数据不出本机、环境可控、成本极低。
数据不出本机这件事对很多人是刚需。有些工作内容不适合粘贴到网页版大模型里,比如内部代码片段、未公开的产品文档,或者客户资料。自己电脑上跑一个本地模型,断网也能用,隐私上放心得多。我当初搞这套部署,就是因为手头有一批文本要批量打标,不想把原始内容传出去。
纯CPU还有一个隐性优势:没有GPU驱动那堆破事。NVIDIA驱动版本、CUDA版本、cuDNN版本,稍微对不上就各种报错,CPU方案完全绕开了这条链路。Docker又能在系统和应用之间做一层隔离,真把环境弄坏了,删掉容器重建就完事,不会把Windows系统搞乱。
1.2 为什么选用Docker加Ollama加Qwen2:7B这套组合
先说Ollama。它本质上是把大模型的下载、加载、推理、API服务全包了的工具,你只需要敲命令就能把模型跑起来,它内置了跟OpenAI兼容的HTTP接口,后面要接别的应用也方便。Ollama本身也提供Windows桌面版安装包,但我依然推荐用Docker跑,原因有两层。
第一层是可控性。Docker版Ollama的版本、数据卷、端口、环境变量都由我自己掌握。比如我想指定模型存储到D盘而不是C盘,或者想调整容器的CPU和内存配额,Docker的参数比Windows原生版直观得多。第二层是干净。Ollama升级时,Windows版要重新跑安装程序,Docker版直接换镜像标签重启容器就完了。卸载的时候,Docker里删容器删镜像就彻底清干净,Windows版还会在系统里留下各种注册表项和附属组件。
选Qwen2:7B则是从中文效果、模型体积、硬件门槛三个维度权衡的结果。7B参数量量化后大约4.4GB,这个体量对16GB内存的机器非常友好。Qwen2系列的中文能力在同尺寸开源模型里是第一梯队,而且Ollama官方仓库直接提供qwen2:7b标签,不需要额外搞模型转换。
1.3 这套方案适合谁,以及你对性能应该有什么预期
如果你符合以下任何一条,这套方案值得你花半小时试一次:电脑没有独立显卡;显卡显存不够跑7B(一般要6GB以上才舒服);单位内网环境不方便访问云端大模型;单纯想搞明白Docker和模型服务是怎么协作的。
性能预期必须提前说清楚,不然你会失望。Qwen2:7B在纯CPU上,生成速度跟你的内存频率、CPU核心数、是否支持AVX2指令集关系很大。我现在这台机器大概是每秒4到6个token的稳定输出,感受就是“能等但不痛苦”,适合写邮件、列提纲、做文本分类这类不需要快速连续对话的场景。真想要那种对话跟飞一样的体验,还是得GPU。但话说回来,CPU方案解决的是“有没有”的问题,这本身就是从0到1。
2. 部署前的准备工作与环境检查
2.1 先确认你的CPU和内存够不够格
动手之前先给机器做个“体检”。内存是第一道门槛,官方建议7B模型至少要8GB,我实际跑下来发现16GB才舒服。为什么?模型本身量化后4.4GB,推理过程中有KV Cache、临时计算缓冲区,再加上Windows系统、Docker Desktop自带的虚拟机占用,16GB内存会比较从容。8GB内存跑7B会很勉强,容易看到内存占用飙到90%以上,系统开始卡顿,然后容器被OOM杀掉。
CPU方面,多核有优势,因为Ollama底层用的推理引擎支持多线程并行计算。有一个经常被人忽略的点是AVX2指令集,现代CPU基本都支持,但如果你用的是很老的平台,可以先用CPU-Z这类工具看一眼。AVX2对矩阵运算有明显加速,不支持的话同样是7B模型,速度可能直接慢一半。
磁盘空间至少预留20GB。Docker Desktop本身装完要占好几个GB,拉镜像、下模型又要6到8GB,后续如果还想装Open WebUI之类的前端,又得加几个GB。我建议把Docker的数据目录整体迁移到大分区,后面会详细讲。
2.2 Docker Desktop安装前的三项关键检查
第一项:BIOS里的虚拟化有没有打开。任务管理器里切换到“性能”标签页,看CPU一栏有没有“虚拟化:已启用”,如果显示“已禁用”,需要重启进BIOS开启Intel VT-x或者AMD SVM。每个主板菜单位置不一样,一般在Advanced或者Configuration相关菜单里。
第二项:Windows功能里有没有开启虚拟机平台和适用于Linux的Windows子系统。这也是最多人踩的坑,很多人装完Docker Desktop一点启动就报错,其实系统功能根本没开全。
我建议直接用管理员身份打开PowerShell或者Windows Terminal,一次性执行三条命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart wsl --set-default-version 2前两条开启WSL和虚拟机平台,第三条让WSL默认使用2.0版本。执行完重启电脑。
第三项:WSL2的内核是不是最新的。旧版WSL2内核可能跟新版Docker Desktop不兼容,表现为启动Docker时各种莫名其妙地失败。升级命令很简单:
wsl --update这三项检查做完,再安装Docker Desktop,成功率会高很多。
2.3 安装Docker Desktop并初始化WSL2环境
从Docker官网下载Docker Desktop Installer,安装时直接勾选“Use WSL 2 instead of Hyper-V”,其余默认下一步就行。安装完成后第一次启动,Docker Desktop会自动初始化WSL2发行版。这时候不要急着用,先打开命令行验证两个东西:
wsl --status docker versionwsl --status应该显示默认版本为2。docker version要能看到Client和Server两段信息,如果Server段没有显示,说明Docker引擎还没起来,等一两分钟再执行一次。我遇到过很多次第一次启动时引擎启动比较慢的情况,耐心等一会儿就好。
另外建议设置一下Docker Desktop开机不自动启动。纯CPU跑模型本来就不是高频操作,用的时候手动打开Docker Desktop,能省不少后台内存。设置路径:Docker Desktop界面右上角设置按钮,General里取消“Start Docker Desktop when you sign in”选项。
2.4 给Docker配置镜像加速,避免拉镜像卡死
Docker Desktop装好之后,先别急着拉Ollama镜像。默认从Docker Hub拉镜像的速度很容易让人崩溃,时不时的超时失败。解决办法是给Docker配置registry mirror加速器。
打开Docker Desktop,进入Settings,找到Docker Engine这个标签页,里面是一个JSON格式的daemon.json配置。把以下内容粘贴进去:
{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://docker.nju.edu.cn", "https://docker.mirrors.ustc.edu.cn" ] }这些是公共镜像加速站点,可用性会随时间变化,如果某个不通就换一个。粘贴完点击“Apply & restart”,Docker会重启并加载配置。验证方式是在命令行执行docker info,看输出里Registry Mirrors下面有没有你配置的地址。
这类加速本质上是Docker官方镜像仓库的缓存节点,属于正常基础设施服务,不是绕开网络限制的手段,这点大家要搞清楚。另外要提醒一句,镜像加速只能加速Docker镜像的拉取,后面Ollama下载模型走的是另一个通道,跟这没关系。
3. Docker部署Ollama与Qwen2:7B全流程实操
3.1 拉取并启动Ollama容器
环境准备好之后,正式开始。第一步拉取Ollama官方镜像:
docker pull ollama/ollama:latest下载量不小,几百MB,网络正常的话几分钟。拉取完成后,启动容器:
docker run -d --name ollama -p 11434:11434 -v ollama:/root/.ollama ollama/ollama:latest逐个参数解释一下。-d表示后台运行,--name ollama给容器命名为ollama,后面管理容器的时候用这个名字。-p 11434:11434把容器内部的11434端口映射到Windows宿主机的11434端口,Ollama的API服务默认监听这个端口。-v ollama:/root/.ollama这行特别关键,它创建了一个叫ollama的Docker数据卷,挂载到容器内的/root/.ollama目录,模型文件默认存在这里。
为什么要挂载数据卷?因为如果不挂载,容器一旦被删除,里面下载好的模型全部丢失,还得重新下好几GB的文件。挂载之后,就算容器删了重建,只要指定同一个数据卷,模型立刻恢复。这个坑我踩过一次,当时手贱清理容器,把刚下载的模型全弄没了,重新下载花了一个多小时。
启动完之后,执行docker ps确认容器状态是Up。如果状态是Exited,用docker logs ollama看日志排查。
3.2 在容器内下载Qwen2:7B模型
容器跑起来后,要在容器内部执行Ollama命令下载模型。命令是:
docker exec -it ollama ollama pull qwen2:7b这个命令的意思是在ollama容器内执行ollama pull qwen2:7b。下载过程会显示进度条,Qwen2:7B默认是以4位量化格式下载,体积大概4.4GB。速度取决于网络环境,快的话几分钟,慢的话可能要半小时以上。
下载完成后执行docker exec -it ollama ollama list,能看到qwen2:7b在列表里,状态是成功。列出的信息包括模型名称、标签、大小和修改时间。
这里有个细节值得注意:ollama pull的模型默认是4位量化版本。什么是量化?简单说,就是把原本用16位浮点数存储的模型参数压缩成用4位整数存储,体积缩小约4倍,推理速度也更快,代价是生成质量有极轻微下降。对绝大多数实际应用来说,这个质量损失完全感受不到。
3.3 验证模型对话效果
模型下载完成后,先跑一段对话验证是否能正常工作。执行:
docker exec -it ollama ollama run qwen2:7b进入交互式对话界面。输入“你好,请介绍一下你自己”,回车,正常情况下模型会开始逐字生成回答。由于是纯CPU推理,第一次生成会有明显的延迟,因为模型要从磁盘加载到内存并完成初始化,这个加载过程可能需要30到60秒,之后响应会快一些。
对话体验中有个容易被忽视的问题:Windows的终端默认代码页是GBK,Ollama输出UTF-8编码的中文时可能显示乱码。我在PowerShell里遇到过程度不一的乱码,解决办法是在进入交互界面之前执行chcp 65001切换到UTF-8代码页,或者直接用Windows Terminal这个终端软件,它对UTF-8的支持更好。
测试完后输入/bye退出对话。如果不想进入交互界面,也可以直接以参数形式传入问题:
docker exec -it ollama ollama run qwen2:7b "用一句话解释什么是数据库索引"这种非交互方式很适合脚本化调用,比如写个批处理文件把多个问题一次性丢给模型处理。
3.4 用API方式调用模型,为后续接入其他应用做准备
Ollama启动时自动监听11434端口的HTTP API,这个设计非常方便,意味着你不需要依赖命令行的交互界面,任何能用HTTP请求的工具都可以调用模型。
最简单的测试方式是用PowerShell里的curl命令:
curl.exe http://localhost:11434/api/generate -d "{\"model\": \"qwen2:7b\", \"prompt\": \"编写一段产品宣传语\", \"stream\": false}"注意Windows PowerShell里有原生的curl命令别名,它跟真正的curl.exe行为不一样,所以这里显式写curl.exe。响应里会返回一个JSON,包含模型生成的文本内容、token数量、总耗时等统计信息。"stream": false表示一次性返回完整结果,如果设置成true,则会以流式方式逐段返回,适合做那种逐字打印的聊天界面。
基于这个API,你可以接各种前端。最省事的是部署Open WebUI,它是开源的ChatGPT风格界面,支持Docker部署。启动命令大致需要指定OLLAMA的地址,让Open WebUI知道该去哪里找模型。如果你的Ollama跑在本机,WebUI容器里访问宿主机时要用http://host.docker.internal:11434这样的地址,这是Windows Docker环境下容器访问宿主机服务的专用域名。
接好前端之后,你会得到一个带聊天记录、多会话管理、Markdown渲染的完整应用,体验完全不像是在CPU机器上跑的。
4. 纯CPU推理性能分析与调优
4.1 7B模型在CPU上的真实速度参考
先给一组我自己实测的数据供参考。我的CPU是8核16线程,内存3200MHz双通道,Qwen2:7B的生成速度大约每秒4到6个token。什么概念?一段100字的回复大概要等30到50秒。8核以上的CPU会更快一点,如果内存频率更高或者支持AVX512,速度还能再上一截,但总体就在每秒3到10个token的区间内。
为什么CPU推理这么慢?核心原因在于内存带宽。GPU推理时,显存带宽是几百GB/s甚至上TB/s级别,而CPU通过内存控制器读写DDR4或DDR5的带宽只有几十GB/s。大模型推理本质上是在做大量的矩阵运算,每一层都要把所有参数从内存搬到计算单元,内存带宽直接决定了速度上限。这就是为什么跑7B模型时,CPU核心数虽然重要,但内存频率和通道数同样重要。DDR5双通道平台跑7B明显比我之前DDR4平台的体验好。
另外,Ollama默认只使用CPU进行推理,不需要额外配置。你不需要担心它会偷偷调用什么显卡驱动,它压根没有GPU相关依赖。
4.2 影响推理速度的四个关键因素
第一个是内存通道数和频率。双通道内存比单通道快接近一倍,我强烈建议确认自己的内存是双通道配置。任务管理器里能看到“已使用的插槽”,两个插槽都有内存条就是双通道。
第二个是CPU核心数。Ollama底层推理引擎会尽量吃满所有核心,核心数越多并行计算能力越强。但这里有个度,超过一定核心数后提升就不明显了,因为内存带宽成了瓶颈。我实测8核到16核有提升,但幅度没有翻倍那么夸张。
第三个是模型量化等级。Ollama下载的默认版本是Q4_K_M量化,如果你手动导入一个更低精度的量化模型,比如Q3量化或者更激进的2位量化,内存占用更小、速度更快,但输出质量会有肉眼可见的下降。建议先用默认的Q4_K_M,别一上来就为了速度牺牲质量。
第四个是并发任务数量。CPU环境下同时跑多个请求会互相抢内存带宽,导致每个请求都被拖慢。Ollama默认串行处理,这反而是好事,一个请求没处理完就不会启动另一个。
4.3 给Docker容器合理分配CPU和内存资源
Docker在WSL2模式下运行时,默认使用宿主机相当比例的资源,但具体数值并不总是最优的。尤其是在WSL2里,默认内存限制可能是宿主机内存的50%或者某个固定值,模型加载时很容易触顶。
调整资源有两种方式。第一种是在WSL2的全局配置文件.wslconfig里指定,这个文件在用户主目录下,比如C:\Users\你的用户名\.wslconfig。没有的话就新建一个,内容参考:
[wsl2] memory=8GB processors=8 swap=10GBmemory是WSL2分配的最大内存,processors是最大CPU核心数,swap是交换分区大小。保存后需要执行wsl --shutdown让配置生效,然后重启Docker Desktop。
第二种方式是在启动Ollama容器时用--cpus和--memory参数限制:
docker run -d --name ollama --cpus=8 --memory=8g -p 11434:11434 -v ollama:/root/.ollama ollama/ollama:latest如果你在容器启动后想改资源限制,不需要删除容器,用docker update命令直接改:
docker update ollama --cpus=8 --memory=8g这种动态调整是Docker比原生Ollama方便的地方之一,资源不够了随时加,不用重新安装任何东西。
4.4 通过环境变量调整Ollama的运行策略
Ollama有几个环境变量对CPU推理体验影响很大。在docker run的时候用-e参数设置。
OLLAMA_NUM_PARALLEL控制同时处理的请求数量,CPU环境下建议设为1,让它老老实实一个一个来。如果设成2以上,多个请求会共享内存带宽,每个请求反而都变慢。
OLLAMA_MAX_LOADED_MODELS控制同时加载到内存的模型数量。默认能加载3个模型,但如果你只有16GB内存,跑7B模型时同时加载多个模型内存肯定爆。建议设成1:
docker run -d --name ollama -e OLLAMA_MAX_LOADED_MODELS=1 -e OLLAMA_NUM_PARALLEL=1 -p 11434:11434 -v ollama:/root/.ollama ollama/ollama:latest这两个环境变量对纯CPU部署属于必须项,设完之后内存占用稳定很多。另外有一个OLLAMA_KEEP_ALIVE,控制模型在内存中驻留的时间,默认是5分钟。如果你要连续多次调用同一个模型,建议把驻留时间调长,比如-e OLLAMA_KEEP_ALIVE=30m,这样第二次请求就不用重新加载模型,能省好几秒的初始化时间。
还有一个解决问题的变量是OLLAMA_MODELS,它指定模型存储目录。默认在容器内的/root/.ollama/models,对应宿主机Docker数据卷。如果C盘空间紧张,可以把模型目录挂载到D盘:
docker run -d --name ollama -v D:/ollama_models:/models -e OLLAMA_MODELS=/models -p 11434:11434 ollama/ollama:latest这样模型文件直接写在D盘的ollama_models文件夹里,C盘完全不用吃模型空间。不过要注意,这个方案没有用Docker数据卷,删除容器时模型文件会保留在D盘,这点和之前的数据卷方案不同,算是另一种持久化思路。
5. 常见问题与排查技巧实录
5.1 Docker Desktop启动报“virtualization support”错误
这个报错几乎是Windows部署Docker的“标配”,我自己第一次装的时候也不幸中招。报错原文一般类似“Docker Desktop failed to start because virtualization support was not detected”,看到这行字时,先别急着卸载重装,按顺序排查。
第一步,检查Windows功能。Win+R打开“可选功能”,进入“更多Windows功能”,确认“虚拟机平台”和“适用于Linux的Windows子系统”这两个选项是否已经勾选。我遇到过一种情况是虚拟机平台没勾上,WSL子系统的实际版本还是1.0,Docker Desktop启动时检测虚拟化支持失败。
第二步,检查BIOS虚拟化开关是否打开。前面提过,任务管理器CPU一栏能直接看到,如果显示“已禁用”,进BIOS找SVM Mode或者VT-x开启。
第三步,确认WSL2内核版本。执行wsl --update,更新到最新版,然后wsl --shutdown再重启Docker。
如果以上都正常但Docker还是启动失败,试试在PowerShell里执行netsh winsock reset清理网络协议栈缓存,有时候这个能救回来。
5.2 ollama pull模型速度慢或者提示失败
这个问题的原因通常是网络到Ollama模型仓库的连接不稳定,跟Docker镜像加速没有任何关系。你配置了registry mirror,但那只对Docker Hub的镜像拉取有效,Ollama模型下载走的是它自己的文件分发服务。
我的解决思路比较朴素的两种:
第一种是重试看运气。Ollama的下载支持断点续传,失败后重新执行ollama pull,一般能接着上次的进度继续下载,不是每次都从头开始。
第二种是绕开Ollama的下载流程,手动导入本地模型文件。具体做法是先从可信渠道下载Qwen2:7B的GGUF格式文件,比如从ModelScope这种国内可正常访问的模型社区下载qwen2-7b-instruct-q4_k_m.gguf,体积大约4.4GB,用支持多线程的下载工具拉下来会比直接在Ollama里拉快很多。
文件准备好后,新建一个Modelfile,内容很简单:
FROM ./qwen2-7b-instruct-q4_k_m.gguf把GGUF文件和Modelfile放在同一个目录,执行:
docker exec -it ollama ollama create qwen2local -f /path/to/Modelfile注意这里的路径是容器内路径,所以需要先把宿主机的文件复制进容器,或者用挂载目录的方式让容器能访问到。更简单的办法是直接用docker cp把文件复制到容器里,然后执行create。这样创建的模型名是qwen2local,后续调用时用这个名称。
5.3 模型回答中文乱码怎么办
表现是模型生成的内容在终端里看起来像一堆“锟斤拷”或者问号。原因基本可以锁定为终端编码问题,因为Ollama输出的UTF-8字节被Windows终端的GBK代码页错误解码了。
按顺序尝试这三个方法:
第一,执行chcp 65001切换到UTF-8代码页再进入Ollama对话。这个方法简单,但只对当前终端窗口有效。
第二,安装并使用Windows Terminal,它默认用UTF-8编码,对这个问题的支持远好于老旧的conhost终端,推荐长期使用。
第三,修改Windows系统区域设置。Windows设置-时间和语言-语言和区域-管理语言设置-更改系统区域设置,勾选“Beta: 使用Unicode UTF-8提供全球语言支持”,重启电脑。这个方法一劳永逸,但会导致一些旧的GBK编码程序显示异常,所以只建议确实需要长期处理中文模型输出的场景使用。
5.4 容器停止或删除后模型是否丢失
分两种情况。如果你启动容器时用了-v ollama:/root/.ollama,模型文件在Docker数据卷里,删除容器也不会丢,重新执行docker run时加上相同的数据卷参数,模型直接可用。
如果你启动容器时没用数据卷,或者临时跑了一个docker run --rm,容器删除时模型一并删除,只能重新下载。
有一个排查技巧:当你怀疑模型丢失时,先执行docker volume ls看看数据卷列表里有没有ollama这个卷,然后执行docker volume inspect ollama查看挂载点的实际路径。这个路径在WSL2里的Linux目录下,如果模型文件还在,数据卷就还能恢复。
5.5 模型跑着跑着提示Out of Memory
前面讲过的.wslconfig在这里派上用场。WSL2默认内存上限可能远低于你实际需要,尤其是宿主机虽然内存很大,但WSL2只分到一半的情况。看一下任务管理器确认内存占用,如果快满了,调整.wslconfig里的memory参数,执行wsl --shutdown,然后重启Docker Desktop。
还有一种情况是模型加载和推理时的临时内存开销,Ollama会先加载模型参数到内存,然后创建KV Cache上下文,如果你的输入文本很长,上下文窗口消耗的内存也会暴涨。可以限制对话长度来缓解,Ollama中默认上下文窗口是2048个token,够用就行,不要盲目调大。
6. 一些不得不说的经验总结
6.1 纯CPU部署的边界在哪里
跑完这套部署后,你会清晰地感受到CPU方案的天花板。Qwen2:7B这类7B模型是甜点尺寸,往上走的13B、14B模型,CPU推理速度会进一步下降,内存占用也逼近极限,体验会差很多。再往上32B、70B的模型,基本上就别指望CPU了,那已经不是“慢”的问题,而是能不能加载的问题。
但7B这个级别,如果你只是用来做文本分类、关键词提取、代码简单解释、邮件润色这类任务,完全是可用的生产力工具,而且可以批量跑。我经常写一个Python脚本,批量调用本地API去处理几万条短文本,半夜挂着跑,第二天早上起来数据已经处理完了。这种离线批处理场景根本不在乎单次推理有多快,CPU方案的成本优势反而是GPU方案没法比的。
另外,不要老想着跟跑GPU的人比速度,没有意义。知道自己的定位就够了:这是一个随时可用、零成本、隐私安全的本地小助手,不是竞速玩具。
6.2 后续可以怎么扩展这套部署
这套环境搭好后,后续扩展空间其实很大。第一,Ollama支持很多其他开源模型,想换模型就是一条ollama pull命令的事,比如试试Qwen2.5系列或者Llama 3.2系列。第二,前面提到的Open WebUI可以给你一套完整的聊天界面,还能管理会话历史、支持联网搜索插件。第三,通过Ollama提供的OpenAI兼容API,你可以把它接进各种AI开发框架里,比如做提示词测试或者批量生成数据。第四,如果未来添置了NVIDIA显卡,你的Docker部署不需要推倒重来,只要给容器加上GPU支持参数,模型就能自动用上显卡,速度直接起飞。
说到底,这套环境的价值是一个起点,它让你在没有高端硬件的情况下,先把整个大模型应用链路跑通,后续的每一步扩展都有清晰的路径可走。
最后分享一个我个人坚持的小习惯:部署完第一件事就是给系统做个快照或者记录下自己敲过的所有关键命令。大模型工具链更新很快,几个月后再回来看这套环境时,你会庆幸当初留下了完整的操作记录。实践下来,这套方案的稳定性和可维护性都相当不错,我自己的模型服务已经持续跑了三个多月,除了升级过两次镜像,基本没有需要额外操心的时刻。