首页 > 其他分享 >Qwen2-72B的vLLM部署

Qwen2-72B的vLLM部署

时间:2024-08-24 20:47:58浏览次数:12  
标签:显存 72B Qwen2 -- Instruct OpenAI vLLM

今天尝试本地部署了 Qwen2-72B-Instruct-GPTQ-Int4 模型,这里记录一下操作的过程。

参考:

环境

  • Ubuntu 22.04
  • Python 3.12.3
  • vLLM 0.5.5
  • PyTorch 2.4.0
  • 硬件:双卡 RTX 4090,共 48 GB 显存

安装 vLLM

确保已经安装了 CUDA 工具链。

创建一个新的 Python 虚拟环境,Python 使用最新版本即可。然后使用 pip 安装 vLLM:

pip install vllm

所有的依赖应该都会自动安装。

下载模型

模型位于 HuggingFace,国内可以使用镜像站 hf-mirror.com 来加速下载。这里记录一下使用 HuggingFace 官方的下载工具 huggingface-cli 下载模型的过程。

安装 huggingface-hub

pip install huggingface_hub

找一处空间足够大的地方。需要约 40 GB 空闲空间来存放 INT4 量化的 72B 模型权重,最好是固态硬盘,从而获得最快的模型加载速度。首先将 HF_ENDPOINT 环境变量修改为 hf-mirror.com:

export HF_ENDPOINT=https://hf-mirror.com

然后进行下载:

huggingface-cli download --resume-download Qwen/Qwen2-72B-Instruct-GPTQ-Int4 --local-dir Qwen2-72B-Instruct-GPTQ-Int4

这会在当前目录中创建一个 Qwen2-72B-Instruct-GPTQ-Int4 目录用于保存模型的权重。如果下载过程中出现问题,会自动恢复。

启动服务

使用以下命令启动服务:

vllm serve ./Qwen2-72B-Instruct-GPTQ-Int4 \
    --tensor-parallel-size 2 \
    --host 127.0.0.1 \
    --port 6006 \
    --served-model-name Qwen2-72B-Instruct \
    --api-key xxx \
    --gpu-memory-utilization 0.95 \
    --max_model_len 4096 \
    --enforce-eager \
    --quantization gptq

注意,48 GB 显存只能勉强放下 72B 的模型,因此我们需要一些额外的节省显存的策略来防止 CUDA OOM 错误。以下是所有参数的解释:

  • tensor-parallel-size:张量并行的路数,可以简单地理解为使用多少张卡来推理。
  • host:监听的主机名,一般是 127.0.0.1 或者 0.0.0.0。本地使用的话前者即可。如果希望公开服务,那么建议使用前者的同时外加反向代理。
  • port:监听端口号。
  • served-model-name:提供的 OpenAI 风格的 API 能够接受的模型名称。其他程序在调用模型时需要使用这个名称。如果不指定,就是传递给 vllm serve 的默认模型名称。
  • api-key:OpenAI 的 Python 库强制要求使用 API-key,如果不使用会拒绝请求。此处可以随便填写,不需要遵循 OpenAI 的 API-key 命名规则。
  • gpu-memory-utilization 预留显存占总显存的百分比。默认值是0.9,但在这个配置下必须调到 0.95 才不会 OOM。
  • max_model_len:最大的位置嵌入(max_position_embedding)长度,Qwen 系列的默认值是 32768。在这个配置下最大是 4096,再大就会 OOM。
  • enforce-eager:不太明白什么意思,似乎打开之后每张卡会有 1~3 GB 的额外显存占用,用来存储某种东西。官方的解释是:Always use eager-mode PyTorch. If False, will use eager mode and CUDA graph in hybrid for maximal performance and flexibility.
  • quantization:使用的量化类型。此处为 GPTQ。

测试服务

使用 OpenAI 的 Python 客户端库来测试:

from openai import OpenAI
from rich import print

client = OpenAI(
    api_key="xxx",
    base_url="http://127.0.0.1:6006/v1/"
)

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "你是谁?",
        }
    ],
    model="Qwen2-72B-Instruct",
)
print(chat_completion)

输出如下:

ChatCompletion(
    id='chat-75c0e4db516c415094c3558d48d7c863',
    choices=[
        Choice(
            finish_reason='stop',
            index=0,
            logprobs=None,
            message=ChatCompletionMessage(
                content='我是通义千问,由阿里云开发的AI助手。我可以回答各种问题、提供信息和与用户进行对话。有什么我
可以帮助你的吗?',
                role='assistant',
                function_call=None,
                tool_calls=[]
            ),
            stop_reason=None
        )
    ],
    created=1724498191,
    model='Qwen2-72B-Instruct',
    object='chat.completion',
    service_tier=None,
    system_fingerprint=None,
    usage=CompletionUsage(completion_tokens=34, prompt_tokens=22, total_tokens=56),
    prompt_logprobs=None
)

说明服务一切正常。之后就可以像使用 OpenAI API 那样调用 vLLM 提供的 API。

标签:显存,72B,Qwen2,--,Instruct,OpenAI,vLLM
From: https://www.cnblogs.com/eslzzyl/p/18378226

相关文章

  • 开源模型应用落地-qwen2-7b-instruct-LoRA微调-LLaMA-Factory-单机单卡-V100(八)
    一、前言  本篇文章将使用LLaMA-Factory去高效微调(命令和界面方式)QWen2系列模型,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。二、术语介绍2.1.LoRA微调  LoRA(Low-RankAdaptation)用于微调大型语言模型(LLM)。......
  • vLLM
    vLLM是一个快速且易于使用的LLM推理和服务库vLLM的快速性体现在:最先进的服务吞吐量通过PagedAttention有效管理注意力机制KV的内存连续的批次处理请求使用CUDA/HIP图快速执行模型量化:GPTQ、AWQ、INT4、INT8、FP8CUDA内核优化,包括FlashAttention和FlashInfer的集成推测行......
  • Qwen2-Math,新一代数学模型
    原文链接:https://qwenlm.github.io/zh/blog/qwen2-math/友情链接Github:https://github.com/QwenLM/Qwen2-MathHuggingFace:https://huggingface.co/QwenModelScope:https://modelscope.cn/organization/qwenDiscord:https://discord.gg/yPEP2vHTu4......
  • vLLM (2) - 架构总览
    系列文章目录vLLM(1)-Qwen2推理&部署vLLM(2)-架构总览文章目录系列文章目录前言一、官方资料二、原理简述三、架构图四、项目结构总结前言上一篇通过Qwen2的vllm推理和部署,对vllm有了简单直观的了解,但是我们尚未涉及到它的工作原理。接下来我们将以vllm源......
  • 【课程总结】day24(下):大模型部署调用(vLLM+LangChain)
    前言在上一章【课程总结】day24(上):大模型三阶段训练方法(LLaMaFactory)内容中主要了解一个大模型的训练过程,无论是第三方的大模型还是自研的大模型,都需要部署到服务端,提供对应API接口供上层应用使用。所以,本章将主要了解vLLm+langchain的基本使用方法。大模型应用框架......
  • Qwen2-Math 开源 AI 模型发布;阿里云推出首个域名 AI 大模型应用丨 RTE 开发者日报
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但......
  • 一文搞定:LLM并发加速部署方案(llama.cpp、vllm、lightLLM、fastLLM)
    llama.cpp、vllm、lightllm、fastllm四种框架的对比:llama.cpp:基于C++,①请求槽,②动态批处理,③CPU/GPU混合推理vllm:基于Python,①PagedAttention高效管理注意力KV内存,②连续动态批处理,③量化GPTQ/AWQ/SqueezeLLM等。lightllm:基于Python,①三进程异步协作,②动态批处理,③Fla......
  • vllm+go||vllm+go-zero 流式输出
    Golang后端流式输出实现以下是如何在Golang后端实现流式输出的步骤。1.后端(Golang)首先,你需要创建一个HTTP处理器来处理前端的请求,并设置响应头以支持Server-SentEvents(SSE)。import("fmt""net/http")funcstreamHandler(whttp.ResponseWriter,r......
  • QWen2-72B-Instruct模型安装部署过程
    最近在给我们的客户私有化部署我们的TorchV系统,客户给的资源足够充裕,借此机会记录下部署千问72B模型的过程,分享给大家!一、基础信息操作系统:Ubuntu22.04.3LTSGPU:A800(80GB)*8内存:1TB二、软件信息Python:3.10Pytorch:2.3.0Transformers:4.43.0vLLM:0.5.0cuda:......
  • lora微调qwen2-0.5B
    我们利用复旦新闻数据集进行训练:gitclonehttps://www.modelscope.cn/datasets/swift/zh_cls_fudan-news.gitgitclonehttps://www.modelscope.cn/qwen/Qwen2-0.5B.git安装库pipinstalldatasetspipinstallpeftfromdatasetsimportDatasetimportpandasaspdfro......