三部曲之第一部分:对比分析我最爱的两个与 OpenAI 服务器兼容的 LLM 模型推理框架
引言 🎯
开源 LLM 模型已经成为爱好者、程序员和希望在日常工作中使用生成式 AI 同时保护隐私的用户的热门选择。这些模型性能出色,有时在许多任务上甚至可以媲美像 GPT-4o 或 Claude Sonnet 3.5 这样的大型闭源模型。
虽然它们是开源的,但并不意味着开箱即用,你需要一个框架来在本地或服务器上运行它们,满足特定用例。此外,OpenAI 兼容的服务器已成为部署模型最流行的方式,因为这种 API 让你可以用几乎任何 SDK 或客户端来使用你的 LLM,比如 OpenAI SDK、Transformers、LangChain 等。所以问题来了:哪个框架最适合部署与 OpenAI 兼容的 LLM?
在这三篇系列文章中,我们将分析 Ollama 和 vLLM 这两个最受欢迎的框架,它们都支持 OpenAI API 兼容性。本分析将涵盖性能、易用性、自定义能力以及其他有助于选择最适合你特定用例的框架的公平比较。希望你喜欢这篇文章,如果觉得不错,请留言哦!

对比大战开始啦!
Ollama 是什么?🦙
Ollama 是一个强大的框架,目标是让运行 LLM 变得尽可能简单。可以把它想象成 LLM 的 Docker——它简化了下载、运行和管理大型语言模型的整个过程,无论是在本地机器还是服务器上。
安装 🛠️
Ollama 的安装非常简单。以下是在不同平台上的安装方法:
Linux(我用的这个)
curl -fsSL https://ollama.com/install.sh | sh
macOS
brew install ollama
Windows
我不用 Windows,但 Ollama 的一个优势就是它的多功能性:
-
1. 安装 WSL(Windows Subsystem for Linux) -
2. 按照 Linux 的安装说明操作
感谢用户 Quark Quark 的建议,你也可以通过这个链接在 Windows 上安装 Ollama:[链接地址]。
使用 🚀
Ollama 提供了一个现成的模型库,你只需要一行代码就能运行:
ollama run <anymodel>
这让你可以轻松在终端运行 Ollama 模型库中的任何模型。在本教程中,我将使用我最喜欢的模型之一 Qwen2.5–14B,它可以在我的 RTX 4060(16GB 显存)上运行:
ollama run qwen2.5:14b --verbose
就这样!只用一行代码,你就能在本地或服务器上运行一个 LLM,想问啥就问啥。我加了 --verbose
参数,这样可以看到每秒处理的 token 数(tok/sec)性能——在我的机器上,达到了 26 tok/sec.
Ollama 参数 🔧
上一节展示了 Ollama 使用的简便性。但我们之前用的是默认参数。如果想改参数怎么办?
Modelfile 创建 📝
要用特定参数创建自己的模型,你需要创建一个 Modelfile,这是一个包含你想设置参数的纯文本文件。示例:
FROM qwen2.5:14b
# 设置温度为 1 [越高越有创造性,越低越连贯]
PARAMETER temperature 0.5
# 设置上下文窗口大小为 8192,控制 LLM 生成下一个 token 时可用的上下文 token 数
PARAMETER num_ctx 8192
# 设置生成 token 数为 4096(最大值)
PARAMETER num_predict 4096
# 系统提示配置
SYSTEM """You are a helpful AI assistant."""
构建并运行自定义模型:
# 构建模型
ollama create mymodel -f Modelfile
# 运行模型
ollama run mymodel --verbose
完整的可自定义参数列表可以查看这个链接:[链接地址]。
Ollama API 🔌
目前为止,我们已经在终端运行了一个模型,这是个很棒的功能,方便你轻松尝试各种模型。但我们研究的目标是用与 OpenAI 兼容的方式使用这些模型。Ollama 怎么做到呢?Ollama 提供了两种与模型交互的方式:
-
1. 原生 REST API 📡
Ollama 默认在 11434 端口运行一个本地服务器。你可以用标准的 HTTP 请求与之交互:
import requests
# 基本聊天完成请求
response = requests.post('http://<your_ollama_server_ip>:11434/api/chat',
json={
'model': 'qwen2.5:14b',
'messages': [
{
'role': 'system',
'content': 'You are a helpful AI assistant.'
},
{
'role': 'user',
'content': '什么是人工智能?'
}
],
'stream': False
}
)
print(response.json()['message']['content'])
-
2. OpenAI 兼容层 🔄
为了与现有应用无缝集成,Ollama 提供了 OpenAI API 兼容性。首先,启动 OpenAI 兼容服务器:
用 OpenAI Python SDK:
from openai import OpenAI
client = OpenAI(
base_url="http://<your_ollama_server_ip>:11434/v1",
api_key="dummy" # vLLM 要求 API key,这是它对比 Ollama 的一个优势。我们这里设为 None,所以可以随便填个字符串
)
# 聊天完成
response = client.chat.completions.create(
model="qwen2.5:14b",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "什么是人工智能?"}
]
)
print(response.choices[0].message.content)
Ollama API 的主要功能 🎯
Ollama 的 API 功能强大,为开发者提供了很多实用特性。我们将在本教程的第三部分详细讨论这个框架的优缺点,现在先列出主要功能:
-
• 流式支持:实时生成 token,完全兼容 OpenAI API,非常适合创建响应迅速的应用。 -
• 多模型管理:可以同时运行不同模型,但有个问题:当显存(VRAM)不足时,Ollama 会停掉一个模型来运行另一个,需要仔细规划资源。 -
• 参数控制:通过 API 调用高度自定义设置——这是一把双刃剑,灵活性高,但对新手和生产服务器可能有点复杂。 -
• CPU 兼容性:智能资源管理,当显存不足时会自动将模型层卸载到 CPU,让即使显存有限的系统也能运行大型模型。 -
• 语言无关:可以用你喜欢的编程语言,无论是 Python、JavaScript、Go,还是任何支持 HTTP 的语言。
结论 🎬
在本系列三篇的第一篇中,我们探索了 Ollama,一个强大且用户友好的本地运行 LLM 的框架。从简单的安装流程到灵活的 API 功能,Ollama 以其简洁和易用性脱颖而出,是开发者尝试开源 LLM 的一个吸引人选择。
本篇探索的主要收获:
-
• 安装和基本使用非常简单 -
• 框架提供原生 REST API 和 OpenAI 兼容性 -
• 资源管理很智能,但也有一些限制
在系列的第二部分,我们将深入探讨 vLLM,了解它的功能和能力。这将为第三部分做铺垫,我们会详细比较这两个框架,帮助你根据特定需求和用例做出明智选择。
敬请期待下一部分,我们将继续探索 LLM 推理框架的世界!🚀
愉快编码!💻🚀