一张消费级显卡、一套 MoE 模型、一条 SSH 反向隧道——这就是你 随时随地可唤起的私人 AI 知识库 。——LeisureLinux
最近 DeepSeek、Qwen 等国产大模型轮番刷榜,云端 API 调用虽方便,但长期使用成本不低,且数据隐私和网络延迟始终是个问题。手头正好有块 RTX 5090(32GB VRAM) ,决定试试本地跑 Qwen3.5 的最新 MoE 模型——Qwen3.5-35B-A3B 。
这个模型很有意思:总参数量 35B,但每次推理只激活 3B 参数。 MoE(Mixture of Experts)架构 让它既能保持 35B 级的知识储备,又只需 3B 的推理算力,理论上对消费级显卡非常友好。官方推荐 16GB+ 显存即可运行,那 RTX 5090 的 32GB 能不能把上下文从默认的 32K 推到 128K?
答案是可以的。本文就把整个流程——从模型路径定位、Modelfile 调优、显存优化、SSH 反向隧道到最终效果对比——完整记录下来 。
本文看点
01
模型文件藏身术
02
128K 上下文极限调优
03
SSH 反向隧道外网打通
01
WHY
开篇:为什么要搞本地大模型?
最近 DeepSeek、Qwen 等国产大模型轮番刷榜,云端 API 调用虽方便,但长期使用成本不低,且 数据隐私和网络延迟 始终是个问题。手头正好有块 RTX 5090(32GB VRAM),决定试试本地跑 Qwen3.5 的最新 MoE 模型——Qwen3.5-35B-A3B 。
「MoE 架构让它既能保持 35B 级的知识储备,又只需 3B 的推理算力——32GB 显卡能不能把上下文从 32K 推到 128K?」
答案是可以的。本文就把整个流程——从 模型路径定位 、Modelfile 调优、显存优化、SSH 反向隧道到最终效果对比——完整记录下来。
02
LOCATE
逼坑第一步:Ollama 模型文件到底藏哪了?
Ollama 的 pull 和 run 用起来丝滑,但一旦涉及自定义 Modelfile 或查看模型底层文件,新手第一件事就是卡住: 模型文件在哪个目录?
STEP 01 find 搜索(万能)
粗暴但有效。Ollama 在 Linux 下默认存储路径为 \~/.ollama/models/blobs/ ,文件名是 SHA256 哈希值,没有扩展名,需要通过 ollama show 反查。
sudo find / -name \"*qwen*\" -type f 2>/dev/null | head -20
STEP 02 ollama show 命令(最快)
这个命令会直接输出该模型当前的完整 Modelfile 内容,包含 FROM、TEMPLATE、PARAMETER 等所有配置。这是 确认当前模型真实配置的首选方法 。
ollama show qwen3.5:35b-a3b --modelfile
STEP 03 寻找实际 blob 文件(最底层)
每个 blob 是一个按 SHA256 命名的文件,要跟具体模型关联起来,查 \~/.ollama/models/manifests/ 目录下的 JSON 文件,里面记录了该模型引用了哪些 blob。
ls -lhS \~/.ollama/models/blobs/ | head -10
找到模型文件后,就可以 开始定制 了。
03
TWEAK
Modelfile 重写:把模型参数调顺
Ollama 默认的参数配置比较保守,直接跑效果一般。通过 Modelfile 我们可以 精细控制模型行为 。
调优版 Modelfile
. . . Modelfile
FROM qwen3.5:35b-a3b
# 温度参数:控制随机性,0.6 在创造性和稳定性间取平衡
PARAMETER temperature 0.6
# Top P:候选词概率累加阈值,0.9 保证多样性
PARAMETER top_p 0.9
# 核心:从默认 32K 拉到 128K
PARAMETER num_ctx 131072
# 重复惩罚:降低重复词概率,对长文生成很重要
PARAMETER repeat_penalty 1.1
SYSTEM \"\"\"你是 Qwen3.5,一个专业的技术助手。回答时:
-
优先用中文回答
-
给出具体代码/命令示例
-
遇到不确定的领域,坦诚说明
-
回答结构清晰,分点说明\"\"\"
创建并运行自定义模型
# 将上述内容保存为 Modelfile,然后创建
ollama create qwen3.5-128k -f ./Modelfile
# 运行自定义模型
ollama run qwen3.5-128k
参数调优经验
| 参数 | 推荐值 | 调整影响 |
|---|---|---|
| temperature | 0.5 -- 0.7 | 越低越确定,越高越发散 |
| top_p | 0.8 -- 0.95 | 控制输出多样性 |
| num_ctx | 32768 -- 131072 | 越大显存占用越高 |
| repeat_penalty | 1.05 -- 1.2 | 防重复,过大易胡言乱语 |
| num_predict | -1(不限) | 长文本生成时建议设 4096+ |
Modelfile 改完参数后,需用 ollama create 生成新模型版本。直接在 ollama run 加参数虽然也能临时生效,但每次都要重新指定,不方便。
04
VRAM
显存优化:RTX 5090 上跑大模型的实战策略
RTX 5090 有 32GB VRAM,但 128K 上下文对显存的消耗惊人。 下面是实测数据和优化策略 。
| 上下文长度 | 显存占用(估算) | 可用性 |
|---|---|---|
| 32K(默认) | 约 12 -- 14 GB | 流畅运行 |
| 64K | 约 18 -- 20 GB | 可运行 |
| 128K | 约 26 -- 30 GB | 紧张但可行 |
Qwen3.5-35B-A3B 是 MoE 模型,实际显存占用受输入/输出文本长度、batch size 等多种因素影响。上面数据基于多次实测平均,128K 场景下如果同时进行长文本生成,显存可能接近极限。建议实时监控,避免 OOM。
三条关键优化策略
1
关闭不必要的系统服务。在纯命令行模式(S 模式)下不需要桌面环境,可以直接 init 3 切换到多用户文本模式,释放大量显存。
# 检查显存占用
nvidia-smi
# 关闭 X11/桌面环境
sudo systemctl stop gdm3
# 杀掉占用 GPU 的其他进程
sudo fuser -v /dev/nvidia*
2
使用 numactl 绑定 NUMA 节点。对多 CPU / 多 GPU 架构尤其有效,能减少跨节点内存访问延迟,间接降低显存碎片。
# 查看 NUMA 拓扑
numactl --hardware
# 绑定 GPU 所在 NUMA 节点运行 Ollama
numactl --cpunodebind=0 --membind=0 ollama run qwen3.5-128k
3
Ollama 环境变量调优。限制并发和加载数能防止 Ollama 自动加载多余模型;KEEP_ALIVE 设长一点避免推理间隙模型被卸载、重新加载时额外占用显存。
. . . systemd
[Service]
Environment=\"OLLAMA_NUM_PARALLEL=1\"
Environment=\"OLLAMA_MAX_LOADED_MODELS=1\"
Environment=\"OLLAMA_KEEP_ALIVE=30m\"
05
TUNNEL
SSH 反向隧道:从外网访问本地模型
本地跑起来了,但在外网(比如公司、通勤路上)想用怎么办?没有公网 IP,没有 DDNS——SSH 反向隧道是最轻量的内网穿透方案 。
STEP 01 建立反向隧道
**-R** 将 VPS 的 11434 端口映射到本地的 11434 端口,-N 不执行远程命令(仅做端口转发),-f 后台运行。之后在 VPS 上访问 http://localhost:11434 就等于访问本地的 Ollama API。
ssh -R 11434:localhost:11434 -N -f user@your-vps-ip
STEP 02 配置 SSH KeepAlive 防断连
编辑本地 \~/.ssh/config,加上 ServerAliveInterval 和 ExitOnForwardFailure,避免网络波动导致隧道断开。
. . . ssh/config
Host vps-tunnel
HostName your-vps-ip
User root
ServerAliveInterval 30
ServerAliveCountMax 3
ExitOnForwardFailure yes
STEP 03 autossh 自动重连
用 autossh 替代普通 ssh,断线自动重连,保证服务稳定在线。
# 安装 autossh
sudo apt install autossh
# 建立自动重连的反向隧道
autossh -M 0 -R 11434:localhost:11434
-o \"ServerAliveInterval=30\"
-o \"ServerAliveCountMax=3\" -N -f vps-tunnel
STEP 04 外网客户端配置
在外网机器上设置 OLLAMA_HOST 指向 VPS,即可从任何地方访问个人 AI 服务。
export OLLAMA_HOST=http://your-vps-ip:11434
ollama list
ollama run qwen3.5-128k
06
TEST
128K 上下文实测:从 32K 到 128K 能做什么?
我准备了一篇约 90K tokens 的技术文档(包含多段代码、配置说明、排错日志),分别用 32K 和 128K 上下文 测试模型的理解能力 。
| 维度 | 32K 上下文 | 128K 上下文 |
|---|---|---|
| 单次可处理文档 | 约 2.4 万中文字 | 约 9.6 万中文字 |
| 长文档问答准确性 | 截断后易丢关键信息 | 完整阅读,回答准确 |
| 代码分析深度 | 只能分析片段 | 可分析完整项目文件 |
| 生成连贯性 | 中段隐式\"失忆\" | 全程保持上下文一致性 |
| 首 token 延迟 | 约 0.8 -- 1.2s | 约 2 -- 3s |
实测感受
32K 的限制在哪?在分析一份完整的 Docker Compose 部署文档(含 15 个 service)时,32K 模式下模型读到后半段就开始\"忘记\"前面的服务配置,回答出现矛盾。
128K 带来的质变:同样文档,模型能完整理解整个部署架构,回答问题时能准确引用前后文的依赖关系。比如问到 nginx service 依赖哪个 backend,它能从前面读到的 depends_on 配置准确回答。
使用建议
短对话 / 单轮问答
32K 绰绰有余,还能省显存
代码审查 / 长文档分析
64K 起步,128K 更稳妥
项目级代码理解
必须上 128K
∞
EPILOGUE
总结:这条路走得通
把 Ollama Qwen3.5-35B-A3B 和 RTX 5090 配合起来跑 128K 长上下文,这条路是 走得通的 。整个流程的关键节点:
01
找模型
ollama show 优先
02
调参数
num_ctx 是核心
03
省显存
关桌面 + 绑 NUMA
04
通外网
SSH 反向隧道最轻量
如果你是 AI 爱好者或者开发者,手头有 24GB+ 显存的显卡,非常推荐试试这套方案。 本地部署大模型不再是实验室专属——一张消费级显卡,就能跑起一个有完整理解和推理能力的 私人大模型助手 。
END
我是 LeisureLinux,热衷于分享 AI 观察与硬核技术干货。
如果你觉得今天这篇有收获,欢迎 点赞、在看、转发 三连,我们下篇见。
单卡巅峰:RTX 5090 本地模型选型策略与 Ollama 推理栈深度实践
路径追踪性能比 RTX 5090快5 倍:Bolt Graphics Zeus GPU 颠覆计算经济学
Apple 端侧 AI 闪存路由架构:20B 参数不碰 DRAM
玩转本地大模型(LLM):拒绝吃灰,5个硬核且实用的落地玩法
27B 战胜 397B!Qwen3.6 架构深度解构:稠密模型的"智能密度"逆袭
常见问题(FAQ)
Q1:这篇文章主要讲什么? 一张消费级显卡、一套 MoE 模型、一条 SSH 反向隧道——这就是你 随时随地可唤起的私人 AI 知识库 。 Q2:「开篇:为什么要搞本地大模型?」这部分主要讲了什么? 最近 DeepSeek、Qwen 等国产大模型轮番刷榜,云端 API 调用虽方便,但长期使用成本不低,且 数据隐私和网络延迟 始终是个问题。 Q3:「逼坑第一步:Ollama 模型文件到底藏哪了?」这部分主要讲了什么? Ollama 的 pull 和 run 用起来丝滑,但一旦涉及自定义 Modelfile 或查看模型底层文件,新手第一件事就是卡住: 模型文件在哪个目录? Q4:「Modelfile 重写:把模型参数调顺」这部分主要讲了什么? Ollama 默认的参数配置比较保守,直接跑效果一般。 Q5:「显存优化:RTX 5090 上跑大模型的实战策略」这部分主要讲了什么? RTX 5090 有 32GB VRAM,但 128K 上下文对显存的消耗惊人。