本地 35B 大模型部署实战:Ollama 跑 Ornith-35B 全流程
桌面级 AI 扩展坞 · 实战案例 #001
日期:2026-09-13
环境:Windows 11 / i5-13600KF / 32 GB DDR5 / RTX 3060 Ti 8 GB
模型:Ornith-1.0 35B MoE(Q4_K_M,21 GB)
一、为什么要在本地跑 35B 模型
云端 API 调用每百万 token 要 3-30 美元,按一个 RTL 工程师每天跟模型对话 50 次、每次 2000 token 计算,月均 API 成本约 90-900 美元。把模型下到本地后:
0 元 / token(电费忽略)
0 网络延迟
0 数据外泄(公司代码、专利设计不离开本机)
代价是硬件投入和 8-15 tok/s 的本地生成速度。
为什么选 Ornith-35B 而不是 Qwen3-32B / DeepSeek-V3:
Ornith-1.0 35B 是基于 Qwen 3.5 35B-A3B 的 RL 微调版本,主打 agentic coding。在 SWE-bench 上 75.6 分,比 Qwen3.8-27B 的 61.7 还高。再加上 MoE 架构实际只激活 ~3B 参数,在我们这种 8 GB VRAM 的"穷人配置"上速度比 dense 27B 还快一倍。
二、硬件环境实测
textCPU: 13th Gen Intel® Core™ i5-13600KF (14 核 20 线程)
RAM: 32 GB DDR5
GPU: NVIDIA GeForce RTX 3060 Ti (GA104, 4864 CUDA, 8 GB GDDR6)
OS: Microsoft Windows 11 Pro 10.0.26200
驱动: 577.00
关键约束:
资源现状跑 21 GB 模型所需缺多少VRAM8 GB~21 GB(理想全装)13 GBRAM32 GB~17 GB紧内存带宽~50 GB/s(双通道 DDR5)200+ GB/s4×
结论:8 GB VRAM 注定装不下全模型,必须GPU + CPU 混合卸载。这正是本文要解决的核心问题。
三、软件准备
3.1 装 Ollama
Ollama 是目前最省事的本地 LLM 运行时,一条命令搞定下载、量化、推理、API 服务。
下载地址:https://ollama.com/download
装完后验证:
powershellollama --version
ollama version 0.34.0
Windows 版默认开机自启 ollama serve,11434 端口监听 0.0.0.0。
3.2 装 Node.js(如果要用 Pi Coding Agent)
Pi 是个 Node.js 写的终端 coding agent。Windows 上从 https://nodejs.org 下载 LTS 版即可。
powershellnode --version
v24.15.0
npm --version
11.12.1
3.3 装 Git for Windows(推荐)
Pi 在 Windows 上默认找 Git Bash 来跑 shell 工具。
powershell# 验证 git 装好
git --version
四、启动 Ollama 并拉模型
4.1 启动服务
一般装完自动跑。如果没跑:
powershellollama serve
看到 "Listening on 127.0.0.1:11434" 说明成功
后台开窗口跑,不要关。后续所有命令都靠这个进程。
4.2 拉模型
powershell# Ornith-35B 21 GB Q4_K_M(默认标签就是它)
ollama pull ornith-35b:latest
21 GB 模型按你网速要 10-40 分钟。第一次冷启动时还要再读盘到 VRAM/RAM,30-90 秒。
4.3 验证模型可调用
最简单的 REPL 跑一下:
powershellollama run ornith-35b:latest "用 50 字解释什么是 metastability"
Ornith 的特点:默认开启 thinking block,会先内部推理再给答案。所以你会看到"思考过程 → 最终回答"两段。
也可以直接打 ollama run ornith-35b:latest 进入交互 REPL,输入 /bye 退出。
4.4 验证 API 端点
Ollama 提供 OpenAI 兼容 API,端口 11434:
powershell# 健康检查
curl http://localhost:11434/api/version
{"version":"0.34.0"}
OpenAI 兼容路径
curl http://localhost:11434/v1/models
五、关键验证:OpenAI 兼容端点
这是接入任何外部工具(Pi、Continue、Cursor、Claude Code 等)的入口,必须确认它能正常返回结果。
powershell$body = @{
model = 'ornith-35b:latest'
messages = @( @{ role = 'user'; content = 'reply with the single word: pong' } )
stream = $false
keep_alive = '5m'
} | ConvertTo-Json -Depth 5
Invoke-WebRequest -Uri 'http://localhost:11434/v1/chat/completions' `
-Method Post -ContentType 'application/json' -Body $body -UseBasicParsing
期望响应(实测 4.6 s 返回):
json{
"id": "chatcmpl-987",
"model": "ornith-35b:latest",
"choices": [{
"message": {
"role": "assistant",
"content": "pong",
"reasoning": "The user is asking me to reply with a single word..."
},
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 17, "completion_tokens": 35, "total_tokens": 52 }
}
关键字段:
id 是 OpenAI 标准 chatcmpl- 前缀
reasoning 字段是 Ornith 自己的 thinking block
usage 给出 token 计数,可以做成本/性能核算
六、装并配置 Pi Coding Agent
6.1 安装
powershellnpm install -g --ignore-scripts @earendil-works/pi-coding-agent
--ignore-scripts 官方推荐,禁用依赖包的 lifecycle scripts,Pi 正常安装不需要它们。
验证:
powershellpi --version
0.85.1
6.2 配置 models.json
Pi 在 ~/.pi/agent/models.json 注册自定义 provider:
powershell# 编辑文件
notepad $env:USERPROFILE.pi\agent\models.json
写入:
json{
"providers": {
"ollama": {
"baseUrl": "http://localhost:11434/v1",
"api": "openai-completions",
"apiKey": "ollama",
"compat": {
"supportsDeveloperRole": false,
"supportsReasoningEffort": false
},
"models": [
{
"id": "ornith-35b:latest",
"name": "Ornith 1.0 35B (本地 Ollama)",
"reasoning": true,
"input": "text",
"contextWindow": 32768,
"maxTokens": 4096,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
}
]
}
}
}
两个关键坑:
1.cost 字段必须 4 个键全有(input/output/cacheRead/cacheWrite),缺一个 Pi 启动报错2.Ollama 不认 developer role 和 reasoning_effort,必须 compat.supportsDeveloperRole: false + compat.supportsReasoningEffort: false
6.3 配置 settings.json(默认 provider)
powershellnotepad $env:USERPROFILE.pi\agent\settings.json
json{
"lastChangelogVersion": "0.85.1",
"defaultProvider": "ollama",
"defaultModel": "ornith-35b:latest",
"defaultThinkingLevel": "high"
}
6.4 验证 Pi 看到模型
powershellpi --list-models ollama
期望输出:
textprovider model context max-out thinking images
ollama ornith-35b:latest 32K 4K yes no
如果看到这行,说明配置 OK,可以进 Pi 了。
6.5 启动 Pi
powershellcd D:\你的项目目录
pi
按 Ctrl+L 选 Ornith 1.0 35B (本地 Ollama)。已经设了默认 provider,直接就是它,不用选。
七、实测性能基准
8 GB VRAM + 32 GB RAM + i5-13600KF 环境,Ollama 自动分配 29% GPU / 71% CPU 卸载。
测试 prompt:写一个 200 词左右的 2 级同步器技术解释
textWall time : 49.84 s
Prompt tokens : 44
Output tokens : 745
Total tokens : 789
Gen tok/s : 14.95 (纯生成)
Wall tok/s : 15.83 (端到端)
结论:~15 tok/s 纯生成速度,跟 ChatGPT 早期 3.5 版本相当。
实际体验:
冷启动:30-90 s(21 GB 从磁盘读进 VRAM+RAM)
单轮问答:30-50 s
长上下文(>8K):速度跌到 8-10 tok/s
够不够用:
✅ 单文件 RTL 阅读、改写、注释、lint 修复
✅ 单元级设计(计数器、状态机、FIFO、CDC 同步器)
⚠️ 多文件中等设计(要拆分喂)
❌ 大型 SoC 顶层 review(上下文爆)
❌ 长波形 log 分析(每轮等 30-50 s 劝退)
八、常见问题与优化
8.1 避免冷启动:keep_alive 拉长
Ollama 默认空闲 5 分钟卸载模型(释放 VRAM)。白天连续用会反复冷启动。
永久方案(设环境变量):
powershellSystem.Environment::SetEnvironmentVariable('OLLAMA_KEEP_ALIVE', '24h', 'User')
单次方案(API 调用里加):
json{ "model": "ornith-35b:latest", "keep_alive": "60m", ... }
8.2 上下文别开太大
21 GB 模型 + 长 KV cache 会被压到 RAM,速度腰斩。models.json 里把 contextWindow 限制在 32768(不要写 262144)。
启动时也可以加 num_ctx 显式控制:
powershell# 在 OpenAI 调用里
{ "options": { "num_ctx": 8192 } }
8.3 加速:换 IQ3_M 量化
powershellollama pull maxwell1500/ornith-35b:IQ3_M
14 GB 的 IQ3_M 量化能把更多层塞进 8 GB VRAM,速度预计 +30-50%(22-28 tok/s),Verilog 代码质量影响极小。
8.4 Windows bash 路径
如果 Pi 启动后报错 "找不到 bash",在 settings.json 里加:
json{ "shellPath": "C:/Program Files/Git/bin/bash.exe" }
8.5 显存监控
powershell# 看模型 GPU 卸载情况
nvidia-smi
跑 35B 时应该看到 7-7.7 GB 占用
看模型驻留状态
ollama ps
NAME SIZE PROCESSOR CONTEXT UNTIL
ornith-35b:latest 21 GB 71%/29% CPU/GPU 8192 4 minutes from now
8.6 手动释放显存
powershellollama stop ornith-35b:latest
立即卸载,VRAM 释放
九、跟其他模型对比
维度Ornith-35BQwen3.8 27BQwen3-30B-A3B架构MoE(激活 ~3B)Dense(27B 激活)MoE(激活 ~3B)大小 (Q4_K_M)21 GB18 GB18 GB视觉❌✅❌Terminal-Bench 2.164.273.0---SWE-bench75.661.7---LiveCodeBench v6---90.3---8 GB VRAM 实测速度15 tok/s8-12 tok/s15-20 tok/s适合 ASIC 工作流✅ 强✅ 通用✅ 强
结论:对纯 coding / agent 任务,Ornith SWE-bench 反而最高(75.6 vs 61.7),但 Qwen3.8 的视觉能力对波形分析有用。理想是双模型并行(3060 8GB 不够,3090 24GB 才能同时跑)。
十、给桌面 AI 扩展坞项目的启示
这套流程暴露了 8 GB VRAM 跑 35B 模型的几个硬约束:
1.数据搬运是主要瓶颈 --- 不是 GPU 算力,而是 PCIe / 内存带宽2.冷启动不能避免 --- 21 GB 模型不可能常驻 VRAM3.多模型并行无解 --- 20 GB+ VRAM 是入门线
这正好对应"桌面 AI 扩展坞"项目里的几个专利方向:
压缩键值缓存硬件加速 --- 解决长上下文 KV cache 吃 VRAM 的问题
多通道存储负载均衡 --- 解决 21 GB 模型在 SSD/RAM/VRAM 三层之间的调度
多精度脉动阵列 --- 解决 INT4/INT8/FP16 混合精度的推理流水线
把这些做成外接卡 / 加速卡,配合 RTX 3060 Ti 8GB 这类"穷人配置",理论上能实现 3090 24GB 80% 的体验,成本只要 1/4。
附录 A:完整命令速查
powershell# 一次性安装
winget install Ollama.Ollama # 或去 ollama.com 下载
winget install OpenJS.NodeJS.LTS
ollama pull ornith-35b:latest
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
System.Environment::SetEnvironmentVariable('OLLAMA_KEEP_ALIVE', '24h', 'User')
写配置(参见第六节)
notepad $env:USERPROFILE.pi\agent\models.json
notepad $env:USERPROFILE.pi\agent\settings.json
验证
ollama --version
pi --list-models ollama
curl http://localhost:11434/api/version
启动用
ollama serve # 后台跑
ollama run ornith-35b:latest # 交互 REPL
pi # 启动 Pi Coding Agent
监控
ollama ps
nvidia-smi
释放
ollama stop ornith-35b:latest
附录 B:常见报错
Error: models.json error: Invalid models.json schema: ... must have required properties cacheRead, cacheWrite
→ cost 字段必须 4 个键全有:input / output / cacheRead / cacheWrite
Error: models.json error: ... supportsDeveloperRole
→ Ollama 不认 developer role 和 reasoning_effort,加 compat 字段
Stream ended without finish_reason
→ 模型冷启动超时 / Ollama 端 stream 中断。设 keep_alive 拉长,避免长 thinking + 长输出。
bash: command not found
→ Pi 在 Windows 上找不到 bash。装 Git for Windows,或 settings.json 里指定 shellPath
本文所有命令、配置、性能数据均经过实测验证。如果你按这套流程跑出问题,欢迎对照附录 B 排查。