本地模型运行
本节定位
大模型应用最容易让人默认的一条路是:
- 直接调云端 API
但真实项目里,很快就会遇到这些问题:
- 成本
- 延迟
- 数据安全
- 网络依赖
于是“本地模型能不能跑、值不值得跑”就会变成一个非常现实的问题。
学习目标
- 理解为什么很多场景会优先考虑本地模型
- 理解模型大小、量化和硬件条件之间的关系
- 分清 CPU 跑、GPU 跑和量化跑的基本差别
- 看懂一个最小本地推理流程
- 建立“什么时候该本地跑、什么时候更适合 API”的判断
先建立一张地图
本地模型这节最适合新人的理解顺序不是“先选模型名”,而是先看清:
所以这节真正想解决的是:
- 为什么会有人放着现成 API 不用,反而去本地跑
- 本地跑到底是在换什么
一个更适合新人的总类比
你可以把云 API 和本地模型理解成:
- 打车
- 和自己买车
打车的好处是:
- 省心
- 随叫随到
自己买车的好处是:
- 更可控
- 长期可能更省
- 某些情况下更安全
但你也要自己承担:
- 保养
- 停车
- 故障处理
本地模型和云 API 的关系,很像这种权衡。
一、为什么要考虑本地模型?
1.1 先看云端 API 的优点
云 API 的优势很明显:
- 开箱即用
- 模型通常更强
- 运维压力更小
所以很多项目起步时,云 API 往往是最省心的选择。
1.2 但为什么还是会有人坚持本地跑?
常见原因通常是:
- 数据不能离开本地或企业内网
- API 成本累积太快
- 需要离线可用
- 想更强地控制模型和推理链路
也就是说,本地模型的核心价值不是“更高级”,而是:
在质量、成本、隐私和可控性之间重新做一套权衡。
二、先建立一个最重要的现实直觉:模型大小不是抽象数字
2.1 参数量直接影响资源占用
当你看到一个模型是:
- 7B
- 13B
- 70B
这些不只是宣传标签,它们通常意味着:
- 内存 / 显存占用差很多
- 加载时间差很多
- 推理速度也会差很多
2.2 一个粗略的资源示意
runtime_options = [
{"name": "small_quantized_model", "memory_gb": 4, "quality": "basic"},
{"name": "medium_quantized_model", "memory_gb": 8, "quality": "good"},
{"name": "larger_model", "memory_gb": 16, "quality": "better"}
]
for item in runtime_options:
print(item)
2.3 这段代码真正想提醒你什么?
不是让你记住数字,而是让你先建立一个非常实用的判断:
模型能不能本地跑,第一层往往先是资源匹配问题。
不是“想不想跑”,而是“机器扛不扛得住”。
2.4 一个很适合初学者先记的决策表
| 你最在意什么 | 更可能优先哪条路 |
|---|---|
| 快速原型 | 云 API |
| 隐私和内网 | 本地模型 |
| 长期成本 | 本地模型或混合方案 |
| 最强效果 | 往往先试云 API |
这个表不是绝对规则,但很适合新人先建立一个现实判断:
- 部署路线首先是业务决策,不只是技术偏好
三、量化为什么总是和本地模型绑定出现?
3.1 因为大家都想把模型塞进更小的机器
量化最粗糙但最好懂的理解方式是:
用更低精度表示模型参数,换更低的内存占用。
3.2 一个最小示意
params = 7_000_000_000 # 70亿参数,示意
precisions = {
"fp16": 2.0,
"int8": 1.0,
"int4": 0.5
}
for name, bytes_per_param in precisions.items():
memory_gb = params * bytes_per_param / (1024 ** 3)
print(name, "rough memory GB =", round(memory_gb, 2))
3.3 量化的好处和代价
好处:
- 更容易本地跑
- 更容易压到端侧或弱机器
代价:
- 精度可能会掉一点
- 某些任务上更敏感
所以量化也是典型的工程权衡,而不是无代价魔法。
3.4 再看一个最小“资源不够时怎么办”示例
constraints = {
"memory_gb": 8,
"need_low_latency": False,
"privacy_sensitive": True,
}
def suggest_runtime(constraints):
if constraints["privacy_sensitive"] and constraints["memory_gb"] <= 8:
return "优先考虑小型量化本地模型。"
if constraints["need_low_latency"] and constraints["memory_gb"] >= 16:
return "优先考虑 GPU 本地推理。"
return "先用云 API 做原型,再评估是否迁移到本地。"
print(suggest_runtime(constraints))
这个示例很适合初学者,因为它会提醒你:
- 本地部署很多时候不是先选模型
- 而是先看约束
四、CPU 跑和 GPU 跑到底差在哪?
4.1 CPU 跑的特点
优点:
- 普通机器都有
- 部署门槛低
缺点:
- 慢
4.2 GPU 跑的特点
优点:
- 更快
- 更适合较大模型
缺点:
- 成本高
- 部署环境要求高
4.3 一个实用判断
如果你的场景是:
- 个人工具
- 小流量实验
- 离线助手
那 CPU 跑小模型可能就够。
如果你的场景是:
- 多轮交互
- 用户等待敏感
- 模型稍大
那 GPU 或更专业 runtime 会更现实。
五、一个最小本地推理流程示意
这里我们先不用真实大模型,而是写一个 mock runtime,目的是把“加载 -> 推理 -> 返回”的运行逻辑看清楚。
class LocalModelRuntime:
def __init__(self, model_name):
self.model_name = model_name
self.loaded = False
def load(self):
self.loaded = True
print(f"loaded {self.model_name}")
def generate(self, prompt):
if not self.loaded:
raise RuntimeError("model not loaded")
return f"[{self.model_name}] local reply to: {prompt}"
runtime = LocalModelRuntime("small-local-model")
runtime.load()
print(runtime.generate("退款政策是什么?"))
5.2 这段代码在教什么?
它在教你本地模型运行最基础的三件事:
- 模型要先加载
- 推理请求要走到 runtime
- 结果再交给上层系统
这看起来很简单,但它已经非常接近真实推理系统的最小骨架。
新人第一次做项目时,怎么决定要不要本地跑 ?
一个更稳的顺序通常是:
- 先问自己是否真的有隐私 / 离线 / 成本约束
- 再问当前机器是否真的扛得住
- 如果只是做原型,优先考虑云 API
- 如果要控制链路或长期压成本,再认真考虑本地模型
这样通常比一开始就追“本地部署很酷”更现实。
如果把它做成项目或方案,最值得展示什么
最值得展示的通常不是:
- “模型跑起来了”
而是:
- 为什么选本地而不是 API
- 硬件和模型大小如何匹配
- 是否用了量化
- 冷启动、延迟、成本的权衡
- 这套方案适合什么场景,不适合什么场景
这样别人会更容易看出:
- 你理解的是部署决策
- 不只是跑通了一次推理