链载Ai

标题: 为什么从 Ollama 走向 vLLM 是大模型部署的必然之路 [打印本页]

作者: 链载Ai    时间: 昨天 22:05
标题: 为什么从 Ollama 走向 vLLM 是大模型部署的必然之路

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">大型语言模型(LLMs)正在改变我们与技术的互动方式,从聊天机器人到代码助手,功能无所不包。但要高效运行这些模型可不是件小事,尤其是在需要速度、可扩展性和高吞吐量应用的稳定性时。如果你一直在用Ollama进行本地LLM实验,现在想转向vLLM以获得生产级性能,这篇文章的主要目的是讲解这两个框架的区别,探讨选择正确框架的重要性,并提供一步步的指导。

1. 为什么选择合适的LLM框架很重要

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">把部署LLM想象成开餐厅。如果只是给小家庭做晚餐,家里厨房的基本工具(比如Ollama)就够用了。但如果是为500人的婚礼提供餐饮,你得用工业级设备(比如vLLM)来应对需求,不然就得累垮了。选错LLM应用的框架可能导致:

选对框架能确保你的LLM应用快速、成本效益高、可扩展且安全。Ollama适合本地测试、原型开发和注重隐私的项目,而vLLM专为高吞吐量、生产级环境设计。了解它们的优势能帮你选出最适合的工具。

2. vLLM和Ollama是什么?基础知识了解一下

Ollama:新手友好的LLM运行工具

Ollama就像你手机上的一个简单易用的app,直观、设置简单。它是一个开源工具,旨在让在本地运行LLM变得尽可能简单,不管你用的是MacBook、Windows PC还是Linux服务器。

核心功能

vLLM:高性能推理引擎

vLLM就像一辆赛车,为高要求环境下的速度和效率而生。由UC Berkeley的Sky Computing Lab开发,vLLM是一个开源库,专为高吞吐量LLM推理优化,特别适合NVIDIA GPU。

核心功能

3. vLLM和Ollama的区别

要选择vLLM还是Ollama,你得搞清楚它们的核心差异。以下是详细对比:

类比

4. 性能:速度、内存和可扩展性

在性能上,vLLM和Ollama差别很大。我们来分解它们在速度、内存使用和可扩展性上的差异,并举例说明。

速度

内存

可扩展性

性能对比表

5. 使用场景:什么时候用vLLM,什么时候用Ollama

什么时候用Ollama

什么时候用vLLM

使用场景决策矩阵

6. 开始使用Ollama:一步步指南

我们来在本地机器上设置Ollama运行Mistral 7B。假设你从零开始。

步骤1:安装Ollama

步骤2:拉取模型

下载Mistral 7B:

ollamapullmistral:7b

输出:模型(4GB)下载并存储在/.ollama/models

步骤3:运行模型

启动模型:

ollamarunmistral:7b

输出:打开交互式提示。输入:

讲个笑话。

回复

为什么稻草人成了励志演讲家?因为他在自己的领域里太出色了!

步骤4:使用REST API

Ollama提供与OpenAI兼容的API,方便集成。以下是Python示例:

importrequests

response = requests.post("http://localhost:11434/api/generate", json={
"model":"mistral",
"prompt":"讲个笑话"
})
print(response.json()['response'])

输出

为什么程序员不用暗黑模式?因为亮色模式会吸引bug。

步骤5:验证设置

检查运行中的模型:

ollamaps

输出

NAME      ID       SIZE  PROCESS     PORT
mistral:7b abc123 4.1 GB running 11434

工作流图表

7. 开始使用vLLM:一步步指南

vLLM需要更多设置,但在GPU支持的系统上性能更优。我们来运行Llama 3 8B。

步骤1:准备工作

步骤2:安装vLLM

通过pip安装vLLM:

pipinstallvllm

输出:vLLM及依赖(如PyTorch、transformers)安装完成。

步骤3:运行模型

服务Llama 3 8B:

vllmservemeta-llama/Llama-3-8b--gpu-memory-utilization0.9

输出:服务器启动,地址为http://localhost:8000。

步骤4:查询模型

用Python与vLLM交互:

fromvllmimportLLM

llm = LLM(model="meta-llama/Llama-3-8b")
output = llm.generate("vLLM是什么?")
print(output)

输出

vLLM是一个开源库,用于高效LLM推理,通过PagedAttention优化GPU内存,continuousbatching实现高吞吐量。

步骤5:测试API

使用curl查询OpenAI兼容API:

curl -X POST http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{"model": "meta-llama/Llama-3-8b", "prompt": "你好,世界!", "max_tokens": 50}'

输出

{
"choices":[
{
"text":"你好!今天我能帮你什么?世界充满可能性,我们一起探索吧!"
}
]
}

工作流图表

8. 使用Docker Compose设置vLLM

Docker Compose能简化vLLM的生产部署。以下是设置方法。

步骤1:创建Docker Compose文件

创建docker-compose.yml

version:'3.8'
services:
vllm:
image:vllm/vllm-openai:latest
deploy:
resources:
reservations:
devices:
-driver:nvidia
count:1
capabilities:[gpu]
ports:
-"8000:8000"
environment:
-MODEL_NAME=meta-llama/Llama-3-8b
-GPU_MEMORY_UTILIZATION=0.9
volumes:
-./models:/models

步骤2:运行Docker Compose

docker-composeup-d

输出:vLLM服务器在分离模式下启动,可通过http://localhost:8000访问。

步骤3:测试API

curl -X POST http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{"model": "meta-llama/Llama-3-8b", "prompt": "Docker是什么?", "max_tokens": 50}'

输出

{
"choices":[
{
"text":"Docker是一个容器化平台,让应用在不同环境中以隔离依赖的方式一致运行。"
}
]
}

步骤4:监控容器

检查容器状态:

docker-composeps

输出

Name         Command        State      Ports
vllm_vllm_1 /usr/bin/vllm serve ... Up 0.0.0.0:8000->8000/tcp

Docker Compose工作流图表

9. 处理故障和调整

部署LLM可能会遇到问题。以下是Ollama和vLLM的常见问题及解决方法。

Ollama故障

vLLM故障

nvidia-smi

输出

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.60.13 Driver Version: 525.60.13 CUDA Version: 12.0 |
|-----------------------------------------------------------------------------|
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 NVIDIA A100 40GB Off | 00000000:00:04.0 Off | 0 |
| N/A 35C P0 43W / 300W | 0MiB / 40536MiB | 0% Default |
+-----------------------------------------------------------------------------+

10. 多GPU内存共享 vs. NGINX负载均衡

为高吞吐量应用扩展vLLM,需要选择多GPU内存共享还是NGINX负载均衡。我们来比较这两种方式。

多GPU内存共享

vLLM的tensor parallelism和pipeline parallelism将模型权重和计算分布到多个GPU上,共享内存以处理大模型或高并发。

工作原理:Tensor parallelism将模型层分配到不同GPU,pipeline parallelism分割计算阶段。PagedAttention确保高效内存分配。

优点

vllmserveDeepSeek/DeepSeek-Coder-V2-Instruct--tensor-parallel-size8

输出:模型跨所有GPU运行,处理请求并行,高吞吐量。

NGINX负载均衡

NGINX将请求分发到多个vLLM实例,每个实例运行在单独的GPU或服务器上。

工作原理:NGINX作为反向代理,根据负载或轮询策略将请求路由到可用vLLM服务器。

优点

http{
upstreamvllm_servers {
servervllm1:8000;
servervllm2:8000;
}
server{
listen80;
location/ {
proxy_passhttp://vllm_servers;
}
}
}

启动NGINX:

nginx-c/path/to/nginx.conf

输出:NGINX将请求路由到vllm1:8000和vllm2:8000,平衡负载。

比较表

推荐:对于大模型(比如>70B参数)在带NVLink的多GPU服务器上使用内存共享。对于较小模型或通过加服务器扩展更可行时用NGINX。

工作流图表

11. 其他考虑:安全性、社区和生态系统

安全性

server{
listen443ssl;
ssl_certificate/etc/nginx/ssl/cert.pem;
ssl_certificate_key/etc/nginx/ssl/key.pem;
location/ {
proxy_passhttp://vllm_servers;
}
}

社区和支持

生态系统

12. 高级话题:量化和多模态模型

量化

量化通过降低数值精度(比如从FP16到INT8)减少模型大小和内存使用。两个框架都支持,但有差异:

多模态模型

量化比较表

13. 结论:为LLM需求做出正确选择

从Ollama过渡到vLLM就像从家里厨房搬到商业厨房。Ollama适合本地实验、注重隐私的应用和资源受限环境。它的简单性和跨平台支持非常适合初学者和小型项目。vLLM凭借PagedAttention和continuous batching,专为高吞吐量、生产级应用打造,速度和可扩展性至关重要。







欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5