|
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(250, 81, 81);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">引言 🎯 欢迎回来,继续我们对 LLM 推理框架的深入探索!在第一部分中,我们介绍了 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);">vLLM 在 AI 社区中因其创新的 LLM 推理方式而备受关注。虽然 Ollama 以简单易用见长,但 vLLM 凭借高效的内存管理、连续批处理能力和 tensor parallelism 脱颖而出。这使得它特别适合生产环境和高吞吐量场景。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);">在本系列三篇的第二部分,我们将探讨:ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;color: rgb(63, 63, 63);" class="list-paddingleft-1">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">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 推理的引人注目的选择!🚀vLLM 是什么?🚀vLLM 是一个专注于效率和可扩展性的高性能 LLM 推理框架。基于 PyTorch 构建,它利用 CUDA 进行 GPU 加速,并实现了连续批处理和高效内存管理等先进优化技术,使其特别适合生产环境。 使用 🛠️使用 vLLM 不像 Ollama 那么简单,我认为最好的方式是通过 Docker 进行干净且隔离的安装。Docker 提供了一致的运行环境,简化了在不同系统上的部署。 前提条件- • NVIDIA Container Toolkit(用于 GPU 支持)
- • 具有足够显存(VRAM)的 NVIDIA GPU
在我撰写本文时,vLLM 对 GGUF 量化模型的支持还不完整,但未来可能会改变。以下是 vLLM 文档网站上的信息:
截图来自 vLLM 文档网站。
但什么是 GGUF?为什么对我们的研究如此重要? GGUF(GPT-Generated Unified Format)🔍GGUF 被许多人认为是 GGML 的继承者,是一种量化方法,支持大型语言模型在 CPU 和 GPU 上的混合执行,优化内存使用和推理速度。它对我们的研究尤为重要,因为这是 Ollama 支持模型执行的唯一格式。 该格式在 CPU 架构和 Apple Silicon 上特别高效,支持多种量化级别(从 4 位到 8 位),同时保持模型质量。 虽然 vLLM 目前对 GGUF 的支持有限,专注于原生 GPU 优化,但了解这种格式对我们的比较分析至关重要,因为它是 Ollama 操作的基础。在本研究的第三部分,我们将探讨这些不同的模型优化方法如何影响性能指标,全面展示两种框架在不同硬件配置下的能力。 使用 Docker 部署 🐳弄清楚这些后,我们继续部署 Qwen2.5–14B 作为本研究的参考模型。由于 vLLM 尚不支持多文件量化模型(见上图),我们不能使用 Qwen 官方提供的 GGUF 模型,因此只需下载单个文件。这可能需要一些时间,具体取决于你的网络速度: # 在工作目录中创建 models 文件夹 mkdirmodels/ mkdirmodels/Qwen2.5-14B-Instruct/
# 从 lmstudio 社区下载模型,这是一个 4 位量化的单一文件模型 huggingface-cli download lmstudio-community/Qwen2.5-14B-Instruct-GGUF Qwen2.5-14B-Instruct-Q4_K_M.gguf --local-dir ./models/Qwen2.5-14B-Instruct/
# 从官方仓库下载生成配置文件并修改 huggingface-cli download Qwen/Qwen2.5-14B-Instruct generation_config.json --local-dir ./config
你还需要设置一个generation_config.json文件。这部分很关键,我第一次尝试修改 temperature 参数时简直头大。实际上,我在官方仓库开了个 issue,连官方维护者都没能给出一个有效答复,所以我自己摸索出来了。下面是generation_config.json的样子,我在这里设置了temperature=0: { "bos_token_id":151643, "pad_token_id":151643, "do_sample":true, "eos_token_id":[ 151645, 151643 ], "repetition_penalty":1.05, "temperature":0.0, "top_p":0.8, "top_k":20, "transformers_version":"4.37.0" }
因此,你需要创建一个包含这个 JSON 文件的文件夹,并确保文件名精确为generation_config.json。 运行 Docker 容器,带上很多参数: # 使用 GPU 支持运行容器 docker run -it \ --runtime nvidia \ --gpus all \ --network="host"\ --ipc=host \ -v ./models:/vllm-workspace/models \ -v ./config:/vllm-workspace/config \ vllm/vllm-openai:latest \ --model models/Qwen2.5-14B-Instruct/Qwen2.5-14B-Instruct-Q4_K_M.gguf \ --tokenizer Qwen/Qwen2.5-14B-Instruct \ --host"0.0.0.0"\ --port 5000 \ --gpu-memory-utilization 1.0 \ --served-model-name"VLLMQwen2.5-14B"\ --max-num-batched-tokens 8192 \ --max-num-seqs 256 \ --max-model-len 8192 \ --generation-config config
哇,这里发生了好多事 🤣,参数一大堆,每个都啥意思? - •
--runtime nvidia --gpus all:为容器启用 NVIDIA GPU 支持。 - •
--network="host":使用主机网络模式以获得更好性能。 - •
--ipc=host:允许主机和容器之间共享内存。 - •
-v ./models:/vllm-workspace/models:将本地模型目录挂载到容器中。这是包含 Qwen2.5–14B 模型的文件夹。 - •
--model:指定 GGUF 模型文件的路径。 - •
--tokenizer:定义使用的 HuggingFace 分词器。 - •
--gpu-memory-utilization 1:将 GPU 内存使用率设为 100%。 - •
--served-model-name:通过 API 服务时的自定义模型名称,你可以随意指定。 - •
--max-num-batched-tokens:批处理中的最大 token 数。 - •
--max-num-seqs:同时处理的最大序列数。 - •
--max-model-len:模型的最大上下文长度。
这些参数可以根据你的硬件能力和性能需求进行调整。运行这个命令后,会出现一大堆日志,别担心,一切正常。当你看到类似下面的信息时,说明 API 已经可以使用了: 这表示你的 API 已准备就绪 vLLM API 🔌目前,我们已经在服务器(或本地机器)上运行了一个 100% 兼容 OpenAI 的 API。让我们尝试调用它,并检查单次 POST 请求和使用 Python 的 OpenAI SDK 的推理性能。 - 1.REST API 📡
vLLM 默认在 8000 端口运行本地服务器,但我喜欢 5000 端口,所以我用了这个 🤣。你可以用标准 HTTP 请求与之交互:
importrequests
# 基本聊天完成请求,注意 endpoint 与 Ollama 不同 response = requests.post('http://192.168.100.60:5000/v1/chat/completions', json={ 'model':'VLLMQwen2.5-14B', 'messages': [ { 'role':'system', 'content':'You are a helpful AI assistant.' }, { 'role':'user', 'content':'什么是人工智能?' } ], 'stream':False } ) print(response.json()['choices'][0]['message']['content'])
- 2.OpenAI 兼容层 🔄
为了与现有应用无缝集成,vLLM 提供 OpenAI API 兼容性。首先,启动 OpenAI 兼容服务器:
使用 OpenAI Python SDK: fromopenaiimportOpenAI
client = OpenAI( base_url="http://<your_vLLM_server_ip>:5000/v1", api_key="dummy"# vLLM 支持要求 API key,这是它对比 Ollama 的一个优势。我们这里设为 None,所以可以随便填个字符串 )
# 聊天完成 response = client.chat.completions.create( model="VLLMQwen2.5-14B", messages=[ {"role":"system","content":"You are a helpful assistant."}, {"role":"user","content":"什么是人工智能?"} ] ) print(response.choices[0].message.content)
初步性能测试显示,vLLM 达到了 29 tokens/sec(首 token 生成预计较慢),比第一部分记录的 Ollama 的 26 tokens/sec 提高了 11%。我们将在本系列的第三部分深入比较性能。🚀 vLLM 的日志 vLLM API 的主要功能 🎯vLLM 的 API 专为高性能推理和生产环境设计。我们将在本教程的第三部分深入探讨其优缺点,现在先来看主要功能: - •高级 GPU 优化:利用 CUDA 和 PyTorch 最大化 GPU 使用率,带来更快的推理速度(正如我们看到的 29 tok/sec 性能)。
- •批处理能力:实现连续批处理和高效内存管理,支持多个并发请求的更高吞吐量。
- •安全特性:内置 API key 支持和适当的请求验证,不像其他框架完全跳过认证。
- •灵活部署:全面支持 Docker,精细控制 GPU 内存使用率和模型参数。
结论 🎬在本系列的第二部分中,我们探索了 vLLM 的架构和功能。虽然它的设置比更简单的框架复杂,但它展示了令人印象深刻的性能和生产级特性。 本篇探索的主要收获: 在第三部分,我们将进行详细的性能基准测试,并探讨 vLLM 功能真正闪耀的特定用例。我们将帮助你了解何时选择 vLLM 来满足你的特定推理需求。 敬请期待我们 LLM 推理框架探索的最后一部分!🚀 |