要不要把大模型搬回本地

用过云端大模型的人,大概都撞过两堵墙:一是账单——哪怕用最便宜的 DeepSeek,持续调用也是一笔固定支出;二是隐私——有些资料、有些数据,你并不想让它走出自己的电脑。

于是问题自然浮现:能不能把大模型搬回本地,自己跑?

为什么 LLM 需要本地化?

第一是成本。 上云再便宜,也是持续的支出;本地一次投入硬件,之后调用几乎零边际成本。

第二是安全。 本地的一些资料、内容,本来就不便公开分享。数据不出本机,就是最彻底的「不外传」。

第三是开放。 有些时候,我们想利用大语言模型没有围栏的那些特性,让它的输出尺度更宽、内容更开放。这一点,云端服务很难满足。

除此之外,从工程角度看,使用本地的模型既可以作为断网情况下的一种保障方案,也可以在不改变工作流程的情况下,把本地模型作为一个测试开发环境。

「量化」

本地跑大模型的第一个坎,是内存。

大模型最初是用 16 位浮点数训练的。一个 70 亿参数(7B)的 16 位模型,光是加载进内存,就要大约 14GB。

所以你在下载模型时,会看到 Q4_K_MQ8_0 这样的标签——这就是量化。Q4 把权重压缩到 4 位,内存需求直接减半甚至更多。还是那个 7B 模型,它的 Q4_K_M 版本,只需要约 4.5GB 的 RAM。

量化通过牺牲部分精度,换取了将大模型部署在普通电脑上的可能。虽然模型在准确性上,和云上的所谓“满血版”相比,会稍有折扣,但在本地场景下完全具备实用价值。

本地部署大模型的流程

第一步:评估本地硬件与模型的适配程度

技术上的可行,不代表日常的可用。在本地开始使用某个大语言模型之前,建议先进行基准测试。在本地机器上运行以下脚本,若聊天模型的每秒词元数(Tokens/sec)低于 15,则建议更换更小的模型或更高的量化级别。运行该脚本后,将输出首个词元延迟(TTFT)、总词元数以及每秒词元数:

import time
from ollama import chat

PROMPT = "Write a Python class that implements a thread-safe LRU cache."

start = time.perf_counter()
token_count = 0

stream = chat(
    # model="qwen2.5-coder:7b",
    model="deepseek-r1:latest",
    messages=[{"role": "user", "content": PROMPT}],
    stream=True,
)

first_token_time = None

for chunk in stream:
    content = chunk["message"]["content"]
    if content:
        if first_token_time is None:
            first_token_time = time.perf_counter()
        token_count += 1
        print(content, end="", flush=True)

elapsed = time.perf_counter() - start
ttft = (first_token_time - start) if first_token_time else 0

print(f"\n\n--- Benchmark ---")
print(f"Time to first token : {ttft:.2f}s")
print(f"Total tokens         : {token_count}")
print(f"Total time           : {elapsed:.2f}s")
print(f"Tokens/sec           : {token_count / elapsed:.1f}")

除了使用脚本的方式,还可以通过 Cherry Studio 加载本地模型,来查看模型的基准测试效果。

cherry studio 测试统计

第二步:选择与使用推理引擎

常见推理引擎对比

在众多推理工具中,LM Studio 和 Ollama 的底层引擎均基于 llama.cpp

目前,Ollama 是大多数开发者的首选。它将复杂的推理引擎封装成一个简单的命令行工具。

Ollama 提供了与 OpenAI 兼容的 API 接口。这意味着,原本为云端模型编写的脚本或框架,只需更改 Base URL 即可直接无缝对接本地模型。

from openai import OpenAI

# Point the standard OpenAI client at your local Ollama instance
client = OpenAI(
    base_url="http://localhost:11434/v1/",
    api_key="ollama",  # required by the SDK but not validated
)

response = client.chat.completions.create(
    model="qwen3-coder:30b",
    messages=[
        {"role": "user", "content": "Explain the difference between a mutex and a semaphore."},
    ],
)

print(response.choices[0].message.content)

此外,Ollama 也支持在命令行窗口中直接交互:

  • 直接运行模型
ollama run qwen2.5-coder:7b
  • 结合开发工具使用(如配合 codex 提供模型接口能力)
ollama launch codex --model qwen2.5-coder:7b

最后,Ollama还可以和图形化界面(Cherry Studio)结合使用。

通过Cherry Studio的模型服务,在 Ollama 配置页面添加对应的模型,即可实现直观的本地可视化交互与管理。

cherry studio 配置页面