通过vllm框架进行大模型推理

通过vLLM框架进行大模型推理

1. vLLM简介(摘自vLLM官方文档

vLLM 是一个快速且易于使用的 LLM 推理和服务库

1.1 vLLM 的速度很快

  • 吞吐量大
  • 使用 PagedAttention 高效管理attention的键值对缓存
  • 连续批处理传入请求
  • 使用 CUDA/HIP 快速执行模型
  • 支持量化模型:GPTQ、AWQ、SqueezeLLM
  • 优化的 CUDA 内核

1.2 vLLM 灵活且利于使用

  • 与主流的 HuggingFace 模型无缝集成
  • 高吞吐量服务与各种解码算法,包括并行采样、波束搜索等
  • 对分布式推理的张量并行支持
  • 流式输出
  • 提供兼容OpenAI的api接口服务
  • 支持 NVIDIA GPU 和 AMD GPU

2. 本次工作前提

  • 有一块GPU的电脑(本人使用的是RTX4080 16GB)
  • 电脑已经安装Docker应用

3. 主要步骤

3.1 从GitHub上克隆vLLM仓库到本地

git clone https://github.com/vllm-project/vllm.git

这里可能下载不成功,可以选择多试几次,直到下载成功为止。或者通过复制下载压缩包的链接,在github加速下载的网页中下载。

3.2 进入vLLM目录修改Dockerfile文件

  • vLLM官方文档中有建议直接拉取NVIDIA PyTorch的官方镜像,但拉取那个镜像涉及到nvidia账号注册、密钥登录等问题,最重要的是还是会遇到网络问题。所以采用dockerfile去创建镜像
进入vLLM目录后可以看到有个Dockerfile文件,因为网络环境原因和后面方便使用我们需要修改几个地方

vLLM项目文件中的Dockerfile文件

pip下载镜像源的添加。因为国内的网络问题,我们需要在每一句pip install的后边指定一下从镜像源去下载,这里以清华镜像源为例
-i https://pypi.tuna.tsinghua.edu.cn/simple

添加镜像源后

容器进入点的修改。为了方便我们建立容器后进去进行其他工作,而不只是用vLLM起一个模型的推理服务,我们需要修改一下Dockerfile文件中的最后一行的ENTRYPOINT的参数,将其改为
ENTRYPOINT ["/bin/bash"]

修改进入点后

3.3 构建Docker镜像

在vLLM项目文件夹路径下通过下面这行命令构建镜像(vllmimage:0.1.0可以自行修改,vllmimage指的是镜像名,但请注意镜像名只能小写,0.1.0指的是镜像的tag,这里用作记录版本号)

docker build -t vllmimage:0.1.0 .

构建完毕

docker镜像构建完毕

输入docker images查看镜像

docker images

查看本地docker镜像

3.4创建并进入容器

输入下面这行命令创建并启动docker容器,启用全部gpu,容器名称为vllm,映射端口80:80

docker run -it --gpus all --name vllm -p 80:80 vllmimage:0.1.0

创建并启动docker容器

这就是进来了,在该路径下输入下启动openai_api接口的帮助命令就可以看到以下结果,说明vllm是已经装好并且可以使用的(虽然还没加载模型推理,有点不严谨)

python3 -m vllm.entrypoints.openai.api_server --help

在这里插入图片描述

3.5 下载模型

我们从魔搭社区下载模型,这里以Yi-6B-Chat为例

vLLM支持从modelscope下载模型,只需要在vLLM容器中运行下面命令即可

pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
VLLM_USE_MODELSCOPE=True python3 -m vllm.entrypoints.openai.api_server \
--model 01ai/Yi-6B-Chat \
--trust-remote-code \
--host 0.0.0.0 \
--port 80 \
--tensor-parallel-size 1 \
--served-model-name Yi-6B-Chat \
--gpu-memory-utilization 0.95

这里需要耐心等待模型下载完毕并且加载完毕,需要注意的是如果是多卡推理,需要将–tensor-parallel-size参数改为卡数,这里我们只使用一张卡,所以为1。不改的话会默认为1

后面如果想换别的地方下的模型来玩的话可以将–model后参数改为模型路径就行,同时注意将环境变量中的VLLM_USE_MODELSCOPE改为False,不然会无法加载本地模型,它会将本地路径拼上魔搭社区地址去下载模型

export VLLM_USE_MODELSCOPE=False

这样就算是启动完成了

在这里插入图片描述

下面我们尝试一下调用,首先打开浏览器,并在地址栏中输入

http://localhost/docs#/

然后就可以看到FastApi的接口文档,然后在第一个post接口中大胆输入并发送就可以了

{
    "model": "Yi-6B-Chat",
    "messages": [
        {
            "role": "user",
            "content": "我是撒比,你是谁?"
        }
    ],
    "stop_token_ids": [7]
}

在这里插入图片描述

返回结果:

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值