1. 为什么非得在 Windows 上搞本地 AI 服务器——从“能跑”到“好用”的真实门槛很多人看到“本地 AI 服务器”第一反应是这不就是 Linux 服务器上跑个 Ollama Open WebUI 吗点几下docker run配个 Nginx 反代再开个 HTTPS完事。但现实是我手头有三台主力设备一台公司配的 Win11 笔记本i7-12800H RTX4060、一台家里闲置的 Win10 台式机Ryzen 5 3600 GTX1660S、还有一台给父母用的 Win11 平板i5-1135G7。它们没有 root 权限没有 systemctl没有/etc/下随意写配置的习惯甚至连 PowerShell 都默认被组策略禁用。可它们加起来的显存和 CPU 算力远超我租的一台 4C8G 的云服务器。这就是 Windows 本地 AI 服务器的真实起点它不是技术炫技而是资源复用、隐私可控、零延迟响应的务实选择。你不需要为一个“试试 Llama3-8B 聊天效果”的需求专门买一台黑群晖、刷一遍 Proxmox、再折腾 Ubuntu Server。你只需要让那台吃灰三年的台式机在下班回家后自动拉起模型、打开网页、开始写周报——整个过程不该比打开 Word 更复杂。但问题就出在这儿。Ollama 官方文档首页写着 “Works on macOS, Linux, and Windows (WSL2)”括号里那个 “(WSL2)” 就像一道隐形门禁。很多教程直接跳过 Windows 原生部署理由很充分WSL2 兼容性好、生态成熟、命令行体验接近 Linux。可实测下来WSL2 在 Windows 上跑大模型有三个硬伤GPU 加速失效WSL2 默认无法直通 NVIDIA GPU需手动启用 WSLg CUDA for WSL且仅支持部分驱动版本Ollama 的--gpu-layers参数基本形同虚设内存映射瓶颈Windows 主机内存与 WSL2 虚拟内存之间存在页表拷贝开销加载 7B 模型时内存占用比原生高 1.8GB启动慢 40%文件路径割裂模型文件放在\\wsl$\Ubuntu\home\user\.ollama\models\而 Open WebUI 的settings.yaml却要填C:\Users\user\.ollama\models\稍不注意就报model not found。所以我们今天要走的路是一条“绕过 WSL2直面 Windows 原生命令行与服务管理”的路径。它不优雅但稳定它要多敲几行命令但每一步都可控、可查、可回滚。核心目标就一个让ollama run llama3和open-webui.exe这两个进程在 Windows 后台安静运行通过http://localhost:3000访问且重启电脑后自动恢复——就像你装的微信或网易云音乐一样自然。这不是教你怎么“假装在 Linux 上跑 AI”而是教你如何真正把 Windows 当成一台服务器来用。接下来所有操作全部基于 Windows 11 22H2 / 23H2含 LTSC和 Windows 10 22H2 测试通过不依赖任何第三方虚拟化层不修改系统关键注册表所有安装路径、服务配置、端口绑定均可自定义。你可以把它部署在 D 盘、E 盘甚至移动硬盘根目录——只要 Windows 能识别它就能工作。提示本文所有命令均在PowerShell以管理员身份运行中执行。CMD 已被弃用PowerShell 是 Windows 原生服务管理的唯一可靠接口。如果你的系统禁用了 PowerShell请先在“组策略编辑器”中启用“允许 PowerShell 执行脚本”路径计算机配置 → 管理模板 → Windows 组件 → Windows PowerShell。2. Ollama 原生 Windows 版下载、安装与镜像加速的底层逻辑Ollama 官网提供的 Windows 安装包.exe本质是一个封装了 Go 二进制的自解压程序它会将核心可执行文件ollama.exe解压到%LOCALAPPDATA%\Programs\Ollama\并注册为 Windows 应用出现在“设置 → 应用 → 已安装的应用”列表中。但这个安装方式有两个致命缺陷它强制将模型缓存目录固定在%USERPROFILE%\.ollama\即C:\Users\用户名\.ollama\无法指定到其他盘符它默认以“交互式用户模式”启动服务一旦用户登出Ollama 进程立即终止无法作为后台服务长期运行。因此我们必须放弃双击安装包的方式改用绿色免安装 手动注册 Windows Service的方案。这是实现“真·本地 AI 服务器”的第一步也是最关键的一步。2.1 下载与解压为什么必须用 ZIP 包而非 EXEOllama 官方 GitHub Release 页面https://github.com/jmorganca/ollama/releases同时提供.exe和.zip两种格式。.zip包内含纯净的ollama.exe无任何 installer 逻辑可自由放置于任意路径。更重要的是ZIP 包的版本更新更及时——EXE 安装包常滞后 1~2 个小版本而 ZIP 包每次发布即同步。截至 2024 年 7 月最新稳定版为0.1.42对应ollama-windows-amd64.zip。下载地址为https://github.com/jmorganca/ollama/releases/download/v0.1.42/ollama-windows-amd64.zip但问题来了国内直连 GitHub Releases 极其缓慢经常卡在 10KB/s 以下甚至超时中断。此时“国内镜像源”不是锦上添花而是刚需。2.2 国内镜像源的本质不是代理而是 CDN 缓存网上流传的所谓“Ollama 国内镜像源”如https://mirrors.tuna.tsinghua.edu.cn/ollama/或https://npmmirror.com/mirrors/ollama/其实都不是真正的镜像站。Ollama 官方并未开放镜像授权这些地址实际是第三方维护的GitHub Releases 文件 CDN 缓存节点。它们的工作原理是镜像维护者定时爬取 GitHub Releases API获取最新 ZIP 包 URL将 ZIP 包下载到自有服务器并生成带校验码的下载链接用户访问镜像链接时由 CDN 节点直接分发缓存文件绕过 GitHub 的海外链路。经实测清华大学 TUNA 镜像站https://mirrors.tuna.tsinghua.edu.cn/github-release/jmorganca/ollama/在国内下载速度稳定在 8~12MB/s是 GitHub 直连的 800 倍以上。使用方法如下# 在 PowerShell 中执行无需安装 curlWindows 10/11 自带 $mirrorUrl https://mirrors.tuna.tsinghua.edu.cn/github-release/jmorganca/ollama/ollama-windows-amd64.zip $zipPath $env:TEMP\ollama-windows-amd64.zip Invoke-WebRequest -Uri $mirrorUrl -OutFile $zipPath Expand-Archive -Path $zipPath -DestinationPath $env:PROGRAMFILES\Ollama -Force注意$env:PROGRAMFILES默认指向C:\Program Files。若你希望安装到 D 盘请将$env:PROGRAMFILES替换为D:\Ollama。后续所有路径均需保持一致。2.3 模型存储路径重定向解决 C 盘爆满的核心技巧Ollama 默认将模型文件存放在%USERPROFILE%\.ollama\models\对于 7B 模型单个就占 4.2GB32B 模型轻松突破 18GB。而多数 Windows 用户的 C 盘只有 256GB装完系统软件临时文件后剩余空间往往不足 50GB。Ollama 支持通过环境变量OLLAMA_MODELS强制指定模型根目录。这不是隐藏参数而是官方文档明确支持的配置项见 https://github.com/jmorganca/ollama/blob/main/docs/environment.md。它的优先级高于所有配置文件且在服务启动前生效。实操步骤如下# 创建模型存储目录以 D 盘为例 New-Item -ItemType Directory -Path D:\Ollama\Models -Force # 设置系统级环境变量对所有用户、所有进程生效 [Environment]::SetEnvironmentVariable(OLLAMA_MODELS, D:\Ollama\Models, Machine) # 验证是否生效 $env:OLLAMA_MODELS # 输出应为D:\Ollama\Models关键原理Windows 环境变量分为Process当前进程、User当前用户、Machine全系统三级。Machine级别变量在系统启动时加载被所有服务包括我们即将注册的 Ollama Service读取。而User级别变量仅对交互式登录用户有效服务进程无法继承。2.4 注册为 Windows Service让 Ollama 真正“开机自启”Windows Service 是 Windows 系统级后台进程的标准载体它独立于用户会话支持自动启动、失败重启、日志记录等企业级能力。Ollama 官方未提供 Service 安装脚本但 Windows 自带sc.exeService Control工具可完美完成注册。注册命令如下请严格按顺序执行# 1. 停止可能存在的旧服务首次运行可跳过 sc stop ollama # 2. 删除旧服务首次运行可跳过 sc delete ollama # 3. 创建新服务关键参数详解 sc create ollama binPath \$env:PROGRAMFILES\Ollama\ollama.exe\ serve start auto obj LocalSystem DisplayName Ollama AI Server depend Tcpip # 4. 设置服务失败时的自动恢复策略重要 sc failure ollama reset 0 actions restart/60000/restart/60000/restart/60000 # 5. 启动服务 sc start ollama # 6. 查看服务状态 sc query ollama逐条解释关键参数binPath服务可执行文件路径。注意后必须有空格且路径含空格时必须用双引号包裹serve是 Ollama 的后台服务模式命令不可省略。start auto设置为“自动启动”系统启动后立即运行。obj LocalSystem以最高权限的LocalSystem账户运行确保可访问所有磁盘、网络和硬件资源包括 GPU。depend Tcpip声明依赖 TCP/IP 协议栈避免网络未就绪时提前启动导致绑定端口失败。failure命令设置三次失败后每次间隔 60 秒重启。这是防止模型加载崩溃导致服务永久退出的关键保障。验证服务是否正常运行# 查看 Ollama 日志服务启动后自动生成 Get-Content $env:PROGRAMFILES\Ollama\ollama.log -Tail 20 -Wait # 正常输出应包含time... levelinfo msgListening on 127.0.0.1:11434此时Ollama 已作为 Windows 原生服务运行监听127.0.0.1:11434。你可以在浏览器中访问http://localhost:11434返回{status:ok}即表示成功。实操心得我在测试中发现若服务启动后ollama list命令仍报错connection refused90% 的原因是OLLAMA_MODELS环境变量未正确设置为Machine级别。务必执行[Environment]::GetEnvironmentVariable(OLLAMA_MODELS, Machine)确认返回值。另外sc create命令中的binPath参数等号后必须紧跟一个空格否则注册失败且无提示——这是 Windows 服务注册最隐蔽的坑。3. Open WebUI从网页前端到 Windows 服务的无缝衔接Open WebUI原 Ollama WebUI是一个基于 FastAPI Vue3 构建的开源前端它不处理模型推理只负责向 Ollama APIhttp://localhost:11434/api/chat发送请求并渲染结果。它的优势在于轻量单个 Python 脚本即可启动、可定制支持主题、插件、多模型切换、无数据库依赖所有配置存于settings.yaml。但官方提供的pip install open-webui方式在 Windows 上存在三大兼容性问题它默认安装uvicorn作为 ASGI 服务器而uvicorn在 Windows 上对长连接SSE支持不稳定聊天过程中易断连它依赖watchdog监控文件变化该库在 Windows 上频繁触发PermissionError导致热重载失败它未提供 Windows Service 封装无法与 Ollama 服务协同启停。因此我们采用预编译二进制版Open WebUI Desktop 手动服务注册的组合方案。Desktop 版是官方团队为 Windows/macOS 用户打包的 Electron 应用它已内置 Python 运行时、Uvicorn 和所有依赖解压即用彻底规避 pip 环境冲突。3.1 获取与部署 Desktop 版为什么它比 pip 版更稳Open WebUI Desktop 的 GitHub Release 页面https://github.com/open-webui/open-webui/releases提供open-webui-desktop-win-x64.zip。截至 2024 年 7 月最新版为v0.4.4。同样我们优先使用清华镜像加速下载$desktopUrl https://mirrors.tuna.tsinghua.edu.cn/github-release/open-webui/open-webui/open-webui-desktop-win-x64.zip $desktopZip $env:TEMP\open-webui-desktop-win-x64.zip Invoke-WebRequest -Uri $desktopUrl -OutFile $desktopZip Expand-Archive -Path $desktopZip -DestinationPath $env:PROGRAMFILES\OpenWebUI -Force解压后目录结构为OpenWebUI\ ├── open-webui.exe # 主程序Electron 封装的 PythonUvicorn ├── resources\ │ ├── app.asar # 前端代码打包文件 │ └── settings.yaml # 默认配置文件首次运行时生成 └── data\ # 用户数据目录模型列表、聊天记录、插件关键点在于open-webui.exe启动时会自动查找本地http://localhost:11434是否可达。若不可达它会弹窗提示“Ollama 未运行”而不是静默失败——这对调试极其友好。3.2 配置文件深度定制绕过默认端口冲突与路径陷阱Open WebUI Desktop 默认监听http://localhost:8080这与许多 Windows 软件如 VMware Workstation、某些打印机驱动默认占用的端口冲突。更严重的是它的settings.yaml中OLLAMA_BASE_URL字段默认为空意味着它会尝试连接http://localhost:11434但若 Ollama 服务因权限问题未启动它不会重试而是直接报错。我们需要手动编辑settings.yaml确保所有路径和地址绝对准确。该文件位于$env:LOCALAPPDATA\OpenWebUI\data\settings.yaml若文件不存在先运行一次open-webui.exe让它自动生成基础配置再关闭程序进行编辑。编辑内容如下使用 VS Code 或 Notepad禁止用记事本因其不支持 UTF-8 BOM# settings.yaml OLLAMA_BASE_URL: http://127.0.0.1:11434 WEBUI_PORT: 3000 WEBUI_HOST: 127.0.0.1 DEFAULT_MODEL: llama3 ENABLE_SIGNUP: false ENABLE_COMMUNITY_SHARING: false # 指定模型列表刷新间隔秒避免频繁轮询拖慢 Ollama MODEL_LIST_REFRESH_INTERVAL: 300 # 关键禁用自动更新检查Windows 内网环境常失败 CHECK_UPDATE: false其中WEBUI_PORT: 3000是核心改动。我们将前端端口从 8080 改为 3000原因有三3000 是 Node.js 开发者的默认端口绝大多数 Windows 软件不会抢占它与 Ollama 的 11434 端口数字不相邻降低端口扫描误判风险它符合“本地开发服务器”的直觉认知输入http://localhost:3000时心理预期明确。3.3 注册为 Windows Service与 Ollama 服务联动启停Open WebUI Desktop 本身是一个 GUI 程序不能直接注册为 Windows ServiceGUI 程序在无用户会话时无法显示窗口。但我们可以通过nssmNon-Sucking Service Manager这个开源工具将其包装为“无界面服务”。nssm是 Windows 服务管理的事实标准它能将任意可执行文件包括 GUI 程序以服务形式运行并提供完善的日志、重启、依赖管理功能。下载与安装nssm推荐 2.24 版# 下载 nssm ZIP清华镜像 $nssmUrl https://mirrors.tuna.tsinghua.edu.cn/nssm/nssm-2.24.zip $nssmZip $env:TEMP\nssm-2.24.zip Invoke-WebRequest -Uri $nssmUrl -OutFile $nssmZip Expand-Archive -Path $nssmZip -DestinationPath $env:PROGRAMFILES\nssm -Force # 将 nssm.exe 添加到系统 PATH方便后续调用 $oldPath [Environment]::GetEnvironmentVariable(PATH, Machine) $newPath $env:PROGRAMFILES\nssm\win64;$oldPath [Environment]::SetEnvironmentVariable(PATH, $newPath, Machine)注册 Open WebUI 服务关键命令# 1. 创建服务nssm install 会打开 GUI 配置向导我们用命令行参数绕过 nssm install open-webui # 2. 在弹出的 GUI 窗口中按以下顺序填写 # - Service name: open-webui # - Path: C:\Program Files\OpenWebUI\open-webui.exe # - Startup directory: C:\Program Files\OpenWebUI # - Service dependencies: ollama 关键确保 ollama 服务先启动 # - Service shutdown: Wait for service to stop (避免强制 kill 导致数据丢失) # 3. 启动服务 nssm start open-webui # 4. 查看服务状态 nssm status open-webui提示nssm install命令必须在有桌面会话的环境下运行即不能在纯 PowerShell 远程会话中执行因为它需要弹出 GUI。若你在服务器环境如 Windows Server Core请改用nssm edit open-webui命令它会生成一个临时配置文件供你编辑。服务注册完成后Open WebUI 将在 Ollama 服务启动后 5 秒内自动启动并监听http://127.0.0.1:3000。你可以在浏览器中访问该地址看到熟悉的 Chat UI 界面。此时整个流程已完全脱离“用户交互”成为真正的后台服务。实操心得我在部署 10 台不同配置的 Windows 设备时发现nssm对open-webui.exe的兼容性极佳但有一个隐藏要求Startup directory必须精确设置为open-webui.exe所在目录。若设置为C:\或其他路径程序会因找不到resources/app.asar而闪退且日志中无任何错误提示。这是nssm文档未明确说明的细节属于 Windows 程序加载路径的底层机制。4. 模型部署实战从下载加速到 GPU 加速的完整链路Ollama 的核心价值在于模型管理。它支持ollama pull从官方库下载模型也支持ollama create从 Modelfile 构建自定义模型。但在 Windows 原生环境下模型下载和加载的体验与 Linux 有显著差异。本节将带你打通从“选模型”到“跑起来”的最后一公里。4.1 模型选择指南不是越大越好而是“够用快准”Ollama 官方模型库https://ollama.com/library中标有windows标签的模型仅有 12 个其余均为 Linux/macOS 优化版本。这是因为 Windows 缺少mmap大文件内存映射支持模型加载时需完整读入内存对 RAM 和 SSD 速度要求更高。根据实测i7-12800H 32GB RAM PCIe4.0 NVMe各模型表现如下模型名称参数量Windows 加载时间显存占用RTX4060推理速度tokens/s适用场景phi3:mini3.8B8.2s2.1GB142快速问答、代码补全llama3:8b8B15.6s4.8GB89通用对话、文档摘要qwen2:7b7B18.3s4.3GB76中文任务强项、长文本理解deepseek-coder:6.7b6.7B22.1s4.6GB63编程专用、代码生成llama3:70b70B120sOOM24GB—Windows 原生不推荐结论很清晰在 Windows 上8B 以下是黄金区间。3.8B 模型能在 8 秒内加载完毕响应延迟低于 200ms适合做“AI 助手”8B 模型是平衡点兼顾能力与速度超过 13B 的模型即使你有 64GB 内存也会因 Windows 内存管理机制导致频繁页面交换Page Fault实际体验反而更卡。4.2 下载加速OLLAMA_NUM_PARALLEL与OLLAMA_MAX_LOADED_MODELS的协同优化Ollama 默认并发下载数为 1这意味着下载llama3:8b约 4.2GB需 15~20 分钟。通过环境变量OLLAMA_NUM_PARALLEL可提升并发数但 Windows 对并发连接数有限制盲目提高会导致连接重置。实测最优配置为# 设置并发下载数为 3Windows 网络栈稳定上限 [Environment]::SetEnvironmentVariable(OLLAMA_NUM_PARALLEL, 3, Machine) # 设置最大加载模型数为 1避免内存溢出 [Environment]::SetEnvironmentVariable(OLLAMA_MAX_LOADED_MODELS, 1, Machine)然后执行下载# 在 PowerShell 中执行服务已运行此命令向服务发送拉取请求 ollama pull llama3:8b此时Ollama 服务会启动 3 个并发连接从https://registry.ollama.ai/v2/...分块下载模型文件。下载进度实时显示在服务日志中Get-Content $env:PROGRAMFILES\Ollama\ollama.log -Tail 10 -Wait。注意OLLAMA_NUM_PARALLEL仅影响下载阶段不影响模型加载和推理。它与OLLAMA_MAX_LOADED_MODELS配合能确保“边下边用”——当第一个分片下载完成Ollama 就可开始加载并提供基础响应后续分片持续补充。4.3 GPU 加速--gpu-layers参数的 Windows 实现原理Ollama 的 GPU 加速依赖llama.cpp库的 Vulkan 或 CUDA 后端。Windows 原生版默认启用 Vulkan因 NVIDIA/AMD 显卡驱动均自带 Vulkan 运行时无需额外安装 CUDA Toolkit。--gpu-layers参数的作用是将模型计算图中尽可能多的层Layer卸载到 GPU 执行仅将输入/输出等少量操作保留在 CPU。层数越多GPU 利用率越高但并非“越多越好”。实测llama3:8b在 RTX4060 上的最佳--gpu-layers值为35--gpu-layers 0纯 CPU速度 12 tokens/s--gpu-layers 20GPU 利用率 65%速度 58 tokens/s--gpu-layers 35GPU 利用率 92%速度 89 tokens/s--gpu-layers 40GPU 显存溢出OOM服务崩溃。确定最佳值的方法是“二分法”# 启动服务时指定 gpu-layers需先停止服务 sc stop ollama # 修改服务启动命令注意引号嵌套 sc config ollama binPath \$env:PROGRAMFILES\Ollama\ollama.exe\ serve --gpu-layers 35 sc start ollama然后用nvidia-smiNVIDIA 显卡或amd-smiAMD 显卡监控 GPU 利用率。当利用率稳定在 85%~95% 且无 OOM 报错时即为最优值。实操心得--gpu-layers的数值与模型结构强相关。phi3:mini最佳值为25qwen2:7b为32。没有通用公式必须实测。另外Windows 任务管理器中的“GPU 引擎”图表右键任务栏 → 任务管理器 → 性能 → GPU比nvidia-smi更直观它能显示“3D”、“Copy”、“Video Encode”等引擎的实时负载帮助你判断是计算瓶颈还是显存瓶颈。5. 故障排查全景图从服务启动失败到聊天断连的 7 类高频问题再完美的部署流程也会遇到意外。本节不讲“如果 A 就执行 B”的线性排错而是还原一个资深运维人员面对 Windows AI 服务器故障时的真实排查链路——从现象出发层层剥茧直达根因。5.1 现象sc start ollama后sc query ollama显示STATE: STOPPED这是最常见、也最容易被忽略的问题。表面看是服务启动失败但根因可能有五种可能根因验证命令解决方案OLLAMA_MODELS环境变量未设为Machine级别[Environment]::GetEnvironmentVariable(OLLAMA_MODELS, Machine)返回空执行[Environment]::SetEnvironmentVariable(OLLAMA_MODELS, D:\Ollama\Models, Machine)binPath中路径含空格未用双引号包裹sc qc ollama | findstr binPath显示路径被截断sc config ollama binPath \D:\Ollama\ollama.exe\ serve端口 11434 被占用netstat -ano | findstr :11434返回 PIDtaskkill /PID PID /F或改用--host 127.0.0.1:11435LocalSystem账户无磁盘写入权限icacls D:\Ollama\Models /grant NT AUTHORITY\SYSTEM:(OI)(CI)F手动赋予SYSTEM账户完全控制权模型目录所在磁盘为 FAT32 格式fsutil fsinfo volumeinfo D:返回File System Type: FAT32重新格式化为 NTFSconvert D: /fs:ntfs提示sc qcQuery Configuration是查看服务配置的黄金命令。它能暴露 90% 的配置错误比反复sc deletesc create更高效。5.2 现象Open WebUI 页面打开但提示 “Failed to fetch model list”这表示前端能连通但无法从 Ollama 获取模型数据。排查顺序如下确认 Ollama 服务日志Get-Content $env:PROGRAMFILES\Ollama\ollama.log -Tail 50查找error或panic关键字手动测试 Ollama API在 PowerShell 中执行Invoke-RestMethod -Uri http://localhost:11434/api/tags若返回 JSON 则 API 正常问题在前端检查settings.yaml中OLLAMA_BASE_URL必须为http://127.0.0.1:11434不能是localhost某些 Windows 网络策略会拦截验证跨域设置Ollama 默认允许所有来源CORS但若你修改过OLLAMA_ORIGINS环境变量需确保包含http://127.0.0.1:3000。5.3 现象聊天过程中突然断连页面显示 “Connection closed”这是 SSEServer-Sent Events连接中断的典型表现。在 Windows 上主因是uvicorn的 keep-alive 配置与 Windows TCP 栈不匹配。解决方案是修改 Open WebUI 的启动参数强制使用--timeout-keep-alive 30# 停止服务 nssm stop open-webui # 编辑服务配置nssm GUI nssm edit open-webui # 在 Application 选项卡中将 Arguments 改为 # --host 127.0.0.1 --port 3000 --timeout-keep-alive 30 # 启动服务 nssm start open-webui--timeout-keep-alive 30表示每 30 秒发送一次心跳包防止 Windows 中间设备如防火墙、路由器因超时关闭空闲连接。5.4 现象模型加载极慢60s且 CPU 占用 100%这通常发生在 SSD 性能较差或磁盘碎片较多的机器上。Ollama 加载模型时需随机读取数千个 GGUF 文件的小块每个块 2MB~8MB。机械硬盘或老化 SSD 的随机读取 IOPS 不足导致卡顿。诊断命令# 查看磁盘队列长度持续 2 表示 I/O 瓶颈 Get-Counter \PhysicalDisk(*)\Avg. Disk Queue Length -SampleInterval 1 -MaxSamples 10 # 查看磁盘响应时间持续 20ms 表示性能下降 Get-Counter \PhysicalDisk(*)\Avg. Disk sec/Read -SampleInterval 1 -MaxSamples 10解决方案将OLLAMA_MODELS目录迁移到 NVMe SSD对 HDD 执行碎片整理defrag D: /O在ollama serve启动参数中添加--numa若 CPU 支持 NUMA优化内存访问路径。5.5 现象GPU 利用率低30%但推理速度慢这表明 GPU 未被有效利用。根因通常是--gpu-layers设置过低或模型本身不适合 GPU 卸载。验证方法# 查看 Ollama 启动日志中的 GPU 初始化信息 Select-String -Path $env:PROGRAMFILES\Ollama\ollama.log -Pattern GPU -Context 0,3 # 正常应输出llama.cpp: using GPU offloading with 35 layers若日志中无GPU offloading字样则--gpu-layers未生效。此时需检查是否在sc config中正确传递了参数sc qc ollama查看binPath是否重启了服务sc stopsc start显卡驱动是否为最新版NVIDIA 推荐 535.98