要点
- 最佳本地模型是能在可用速度下装入你显存的最大模型,而非声誉最好的模型。
- Ollama 在你的机器上提供 OpenAI 兼容的接口,因此相同的客户端代码在本地和托管环境下均可运行。
- 本地运行提供隐私和离线使用;托管 API 提供更大的模型、无需硬件且无需设置。
- 我们仅提供托管接口:该服务不提供模型下载。
简短回答:按显存选择,然后测试两三个
对此没有单一的最佳模型,因为限制在于你的硬件。模型必须连同其工作缓存一起装入 GPU 显存(或系统 RAM,速度要慢得多)。实用规则很简单:找到能舒适地装入你的内存且回答速度尚可接受的最大模型,然后针对你自己的提示词比较两三个候选模型。
模型名称和排名每几周就会变化,因此今天编写的列表很快会过时。跳过排行榜,使用简短方法:浏览 Ollama 库和社区上传,筛选描述为无审查、abliterated 或为角色扮演微调的模型,拉取一个小模型和一个中等规模模型,并将相同的十个提示词分别运行。你自己的提示词比他人基准测试中的分数更有参考价值。
如果之后发现适合你机器的模型对于你想要的质量来说太小,托管接口是替代方案。本文的其余部分列出了权衡因素,以便你用数据做出决定。
如何为机器配置模型大小
三个数字决定运行效果:参数量、量化和上下文长度。
参数与量化
参数量更多的模型通常表现更好,更可靠地遵循指令,并能更长时间保持角色。但参数占用内存。全 16 位精度下,模型每个参数需要约两字节,因此 7B 模型在缓存之前大约需要 14 GB。量化可以缩小这一需求。4 位版本每个参数需要约 0.5 字节,因此同样的 7B 模型大约需要 4 到 5 GB。质量会随量化级别降低而略有下降,在 4 到 5 位时损失通常很小,低于此值则明显。
上下文长度
上下文窗口也占用内存,因为模型会存储对话中所有内容缓存。长角色扮演会话或包含大量前文的文本需要更大的缓存。Ollama 允许你为每个模型设置上下文大小,较大的值会使用更多内存并降低生成速度。许多本地设置使用几千 token 的窗口以保持速度,这意味着模型会遗忘长对话的开头。
速度
如果模型溢出 GPU 显存进入系统 RAM,生成速度可能从舒适的阅读速度降至逐字输出。完全装入 GPU 的较小模型通常比未完全装入的较大模型体验更好,即使较大模型生成的文本略好。
在 Ollama 中运行模型并从代码调用
安装 Ollama 后,拉取和聊天只需两条命令,确切的模型名称来自你选择的库页面:
ollama pull MODEL_NAME
ollama run MODEL_NAME
Ollama 还在你的机器上提供 OpenAI 兼容的 API,默认地址为 http://localhost:11434/v1。这意味着相同的客户端代码可以连接本地模型或托管模型,你只需更改 Base URL 和模型名称即可切换:
from openai import OpenAI
# Local Ollama (the key is ignored but must be non-empty)
local = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
# Hosted endpoint
hosted = OpenAI(base_url="https://api.ornith.top/v1", api_key="YOUR_API_KEY")
def ask(client, model, text):
r = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": text}],
)
return r.choices[0].message.content
prompt = "Write a tense two-paragraph scene set in an abandoned lighthouse."
print(ask(local, "MODEL_NAME", prompt))
print(ask(hosted, "uncensored", prompt))
在相同的提示词下运行两者是回答你个人情况问题的最快方式。如果本地输出足够好,你就完成了,只需支付电费。如果不够好,你就有了衡量托管 API 收益的基准。
本地 Ollama 与托管 API
没有哪种方式在所有情况下都更好。下表仅列出每种方法的结构化事实。
| 对比点 | Ollama 本地运行 | 托管 API |
|---|---|---|
| 前期成本 | 你自己的 GPU 或具有足够 RAM 的机器 | 无;预付额度从 $20 起 |
| 运行成本 | 电费和你的时间 | 每 1M 输入 token $0.15,每 1M 输出 token $0.50 |
| 模型大小 | 受你的内存限制 | 由提供商选择的一个模型 |
| 支持离线使用 | 是 | 否,需要互联网 |
| 数据离开你的机器 | 否 | 是的,提示词会发送给提供商;我们的不用于训练 |
| 模型选择 | 你可以下载的任何模型 | 仅限提供的模型 |
| 并发用户 | 受限于你的硬件 | 完整密钥最多支持 8 个并发请求 |
| 设置 | 安装、拉取、调整设置 | 更改 Base URL 和密钥 |
本地运行在隐私、离线使用和选择自由方面胜出。如果你的文本必须永远不离开你的机器,或者你想每周更换模型,请本地运行。托管 API 在设置时间、不占用你的 GPU 以及同时为多个用户提供服务方面胜出。
同样公平地说出我们不提供的内容。该服务仅为托管接口。没有可下载的模型文件,没有微调,也没有导入自有权重的方法。如果你想拥有模型,Ollama 是合适的工具,我们的 开源 LLM API 指南 涵盖了更广泛的选项。
托管成本详解
人们常认为托管模型比免费的本地运行昂贵。一旦计算硬件成本,本地运行并非免费,但通过具体使用场景进行比较更容易。此处价格为每 1M 输入 token $0.15,每 1M 输出 token $0.50。
- 休闲角色扮演,每天 100 条消息。 假设每轮发送 3,000 token 的历史记录并返回 300 token。每轮输入:3,000,按每 1M $0.15 计算为 $0.00045。输出:300,按每 1M $0.50 计算为 $0.00015。每轮 $0.0006,100 轮为 $0.06,30 天约 $1.80。
- 写作项目。 每月 5M 输入 token 和 1M 输出 token 的成本为 $0.75 加 $0.50,即 $1.25。
- 小型应用。 每月 200M 输入和 40M 输出 token 的成本为 $30 加 $20,即 $50。
只有你能评估自己的 GPU 成本,但轻度和中度使用的托管成本非常低。$20 最低充值额度在第一种和第二种使用级别下可维持很长时间,且额度永不过期,因此如果你休息一个月,额度不会消失。更大的充值附带奖励:$50 起 5%,$100 起 10%,$200 起 15%。详细信息见 定价页面。
结合两者的合理方式
你不必只选一种。许多人运行小型本地模型用于快速草稿和私密笔记,并将更长或更耗资源的工作发送到托管接口。由于两者都支持 OpenAI 格式,你的应用可以持有两个客户端对象并按任务路由,如上面的代码所示。
测试托管端时,新用户可以在 API 密钥页面一键领取 $0.50 试用额度,无需信用卡,每人一次,有效期 7 天。按上述每轮费用计算,这足以进行数百次角色扮演对话,足以在相同提示词下与你最好的本地模型进行比较。你可以 创建 API 密钥,通过 Google 或电子邮件和密码登录。API 文档 列出了 temperature、top_p、stop 和 seed 等参数,这些参数会透传,因此你的本地采样设置可以保留。
一些需要规划的限制。试用密钥允许 2 个并发请求和每分钟 60 个请求;完整密钥允许 8 个和 300 个。上下文窗口为 100,000 token,远大于大多数本地设置舒适运行的范围。还有一条规则不受设置影响:该模型适用于合法成人用途,不会生成涉及未成年人的性内容。
