LLMs之TorchServe :基于TorchServe 和 vLLM 部署和构建高效、可扩展的 LLM(比如Llama 3.1-70B)服务解决方案及其代码示例—将 vLLM 推理引擎全新地原生集成到 TorchServe 中
导读:这篇博文介绍了如何使用 TorchServe 和 vLLM 部署大型语言模型 (LLM)。本文详细介绍了如何利用 TorchServe 和 vLLM 构建高效、可扩展的 LLM 服务解决方案,并提供了完整的代码示例和操作步骤。通过异步处理模式和自定义处理器等技术,该方案有效解决了传统同步处理模式在处理生成式任务时的不足,并充分利用了多 GPU 资源,实现了高性能的 LLM 部署。 文章还强调了生产环境部署中安全性(身份验证)的重要性。 总而言之,该方案为大规模部署 LLM 提供了一种高效、可靠且易于使用的解决方案。
目录
二、快速入门:采用TorchServe的vLLM Docker镜像部署Llama-3.1-70B-Instruct模型
快速使用 Docker 部署和运行基于 TorchServe 和 vLLM 的 Llama 3.1 模型
# 5. 在容器外使用 ts.llm_launcher 脚本
案例实战:在具有四个 GPU 的机器上使用 TorchServe + vLLM 部署 Llama 3.1 70B 模型并推理
|
地址 |
|
|
时间 |
2024年10月31日 |
|
作者 |
PyTorch团队 |
一、引言
vLLM 是一个高性能的 LLM 执行引擎,其 vllm serve 命令方便在单机上部署模型。但生产环境和规模化部署需要 TorchServe 提供的额外功能,例如自定义指标和模型版本控制。TorchServe 的自定义处理器设计也便于集成 RAG 或 Llama Guard 等功能。因此,将 vLLM 与 TorchServe 结合是构建完整的生产级 LLM 服务解决方案的自然选择。

二、快速入门:采用TorchServe的vLLM Docker镜像部署Llama-3.1-70B-Instruct模型
在 TorchServe + vLLM 上部署 Llama 3.1。本节提供了快速上手的实践指南,演示了如何利用提供的工具和命令快速部署一个 LLM 模型,并验证其功能。重点在于便捷性和易用性,为读者快速体验提供了路径。
核心要点:文章提供了使用 TorchServe 的 vLLM Docker 镜像快速部署 Llama-3.1-70B-Instruct 模型的步骤。这包括构建新的 TS LLM Docker 容器镜像,使用 ts.llm_launcher 脚本来启动带有 vLLM 后端的本地 TorchServe 实例,以及使用 curl 命令测试本地端点。 文中还介绍了如何使用 ts.llm_launcher 脚本在 Docker 容器外部部署模型,并说明了其在多 GPU 环境下的自动张量并行能力。
快速使用 Docker 部署和运行基于 TorchServe 和 vLLM 的 Llama 3.1 模型
# 1. 构建 Docker 容器镜像
# 进入 TorchServe 仓库主目录,基于 docker/Dockerfile.vllm 创建支持 vLLM 的镜像
docker build --pull . -f docker/Dockerfile.vllm -t ts/vllm
# 2. 运行容器并加载模型
# 使用 ts.llm_launcher 在容器中启动模型服务,本地 TorchServe 实例
docker run --rm -ti --shm-size 10g --gpus all -e HUGGING_FACE_HUB_TOKEN=$token
-p 8080:8080 -v data:/data ts/vllm
--model_id meta-llama/Meta-Llama-3.1-70B-Instruct --disable_token_auth
# - 分配所有 GPU (--gpus all)
# - 将 Hugging Face 令牌传入容器 (-e HUGGING_FACE_HUB_TOKEN)
# - 挂载本地 data 目录存储模型权重 (-v data:/data)
# - 启动服务并禁用令牌认证 (--disable_token_auth)
# 3. 测试模型服务:使用curl 命令在本地测试端点
# 发送 POST 请求测试推理服务
# 发送 POST 请求测试推理服务
curl -X POST -d '{
"model": "meta-llama/Meta-Llama-3.1-70B-Instruct", # 使用的模型名称
"prompt": "Hello, my name is", # 提示词
"max_tokens": 200 # 最大生成的 token 数量
}' --header "Content-Type: application/json"
"http://localhost:8080/predictions/model/1.0/v1/completions"
# 4. 使用本地权重
# Docker 将模型权重存储在本地文件夹“data”中,该文件夹在容器内挂载为 /data。要提供自定义本地权重,将自定义权重文件拷贝到 data 目录,并设置 model_id 为本地路径
# 例如:model_id=”/data/”
# 5. 在容器外使用 ts.llm_launcher 脚本
# 安装 TorchServe 和 vLLM 后,直接使用 ts.llm_launcher 启动模型服务
# 安装 TorchServe 和 vLLM 后,直接使用 ts.llm_launcher 启动模型服务
python -m ts.llm_launcher
--model_id meta-llama/Meta-Llama-3.1-8B-Instruct
--disable_token_auth
# 自动分配所有可用 GPU,如需指定 GPU,请设置 CUDA_VISIBLE_DEVICES
# 6. 扩展部署:创建模型归档
# 若需更多功能(如自定义处理器或版本控制),建议使用 TorchServe 模型归档。
# 示例:支持 RAG 检索增强生成,或测试多个版本的处理器与模型。
三、TorchServe 的 vLLM 引擎集成

探讨了 TorchServe 与 vLLM 集成的技术细节,重点介绍了异步处理模式、VLLMHandler 的功能以及对多 GPU 分布式推理的支持,解释了这种集成如何提高效率和性能。
核心要点:vLLM 提供了众多高级功能,包括 PagedAttention、连续批处理、CUDA 图加速模型执行以及对多种量化方法(如 GPTQ、AWQ、INT4、INT8 和 FP8)的支持。还集成了重要的参数高效适配器方法(如 LoRA),并可以访问包括 Llama 和 Mistral 在内的各种模型架构。
为了便于快速部署,它提供了一种基于 FastAPI 的服务模式,通过 HTTP 为 LLM 提供服务。为了实现更紧密、更灵活的集成,该项目还提供了vllm.LLMEngine,它提供了用于持续处理请求的接口。我们利用异步变体将其集成到 TorchServe 中。
为了优化内存利用率并适应生成式任务中响应长度变化的特点,TorchServe 引入了异步模式,直接将请求转发到后端,由 vLLM 选择处理请求。
VLLMHandler 允许用户快速部署任何与 vLLM 兼容的模型,并通过自定义处理器实现自定义预处理和后处理步骤。
文章还介绍了 TorchServe 对单节点多 GPU 分布式推理的支持,以及新的 “custom” parallelType。为了方便 Docker 部署,提供了一个基于 TorchServe GPU Docker 镜像的单独 Dockerfile。

四、分步指南
部署 Llama 3.1 70B 模型。提供了完整的、可操作的步骤,指导读者完成 LLM 模型的部署和测试,将前文介绍的技术细节转化为实际操作。
核心要点:本节提供了详细的分步指南,演示了如何在具有四个 GPU 的机器上使用 TorchServe + vLLM 部署 Llama 3.1 70B 模型。步骤包括:(可选)下载模型权重;创建包含模型部署所需参数的 YAML 配置文件;创建包含配置和元数据的模型存档(使用 “no-archive” 格式);启动 TorchServe 实例并加载模型;以及使用 curl 命令测试部署。
案例实战:在具有四个 GPU 的机器上使用 TorchServe + vLLM 部署 Llama 3.1 70B 模型并推理
# 1. 安装 vLLM
# 通过 pip 安装 vLLM,增加对大型语言模型(LLM)的支持
pip install -U vllm==0.6.1.post2
# 2. (可选)下载模型权重
# 先登录 HuggingFace 并确认已获得 Llama 3.1 权重的访问权限
huggingface-cli download meta-llama/Meta-Llama-3.1-70B-Instruct --exclude original/*
# 3. 配置模型
# 创建模型配置文件,包含前端参数(如 GPU 使用设置)和后端处理参数(如模型路径与并行配置)
echo '
# TorchServe 前端参数
minWorkers: 1 # 最小工作进程数
maxWorkers: 1 # 最大工作进程数
startupTimeout: 1200 # 启动超时时间(秒)
deviceType: "gpu" # 使用 GPU
asyncCommunication: true # 开启异步通信
parallelType: "custom" # 自定义并行,适用于多 GPU 环境
parallelLevel: 4 # 使用 4 个 GPU
# Handler 参数
handler:
model_path: "meta-llama/Meta-Llama-3.1-70B-Instruct" # HuggingFace 模型标识符
vllm_engine_config: # vLLM 引擎配置
max_num_seqs: 16 # 最大并发序列数
max_model_len: 512 # 最大模型长度
tensor_parallel_size: 4 # GPU 并行切分数量
served_model_name:
- "meta-llama/Meta-Llama-3.1-70B-Instruct"
- "llama3"
'> model_config.yaml
# 4. 创建模型文件夹
# 使用 no-archive 格式创建模型目录,便于实验修改配置
mkdir model_store
torch-model-archiver
--model-name vllm
--version 1.0
--handler vllm_handler
--config-file model_config.yaml
--archive-format no-archive
--export-path model_store/
# 5. 部署模型
# 启动 TorchServe 实例并加载模型,禁用令牌认证(仅用于本地测试)
torchserve --start --ncs
--model-store model_store
--models vllm
--disable-token-auth
# 6. 测试部署
vLLM 集成使用与 OpenAI API 兼容的格式,因此我们可以使用专门的工具或 curl 来实现此目的。我们在此处使用的 JSON 数据包括模型标识符以及提示文本。其他选项及其默认值可在vLLMEngine文档中找到。
# 发送推理请求,验证部署是否成功
echo '{
"model": "llama3", # 使用模型名称
"prompt": "A robot may not injure a human being", # 提示词
"stream": 0 # 非流式返回
}' | curl --header "Content-Type: application/json"
--request POST
--data-binary @-
http://localhost:8080/predictions/vllm/1.0/v1/completions
五、结论
核心要点:文章总结了使用 TorchServe 和 vLLM 部署 LLM 的方法,包括使用 ts.llm_launcher 脚本进行本地部署以及创建模型存档进行更广泛部署的方法。文章还展望了未来的工作,例如支持多节点推理和提供预构建的 Docker 镜像。
在这篇博文中,我们探讨了将 vLLM 推理引擎全新地原生集成到 TorchServe 中。我们演示了如何使用 ts.llm_launcher 脚本在本地部署 Llama 3.1 70B 模型,以及如何创建模型存档以部署在任何 TorchServe 实例上。此外,我们还讨论了如何在 Docker 容器中构建和运行解决方案,以便在 Kubernetes 或 EKS 上部署。在未来的工作中,我们计划使用 vLLM 和 TorchServe 实现多节点推理,并提供预构建的 Docker 映像以简化部署过程。
文章来源于互联网:LLMs之TorchServe :基于TorchServe 和 vLLM 部署和构建高效、可扩展的 LLM(比如Llama 3.1-70B)服务解决方案及其代码示例—将 vLLM 推理引擎全新地原生集
5bei.cn大模型教程网










