当前位置: 首页 > article >正文

利用vLLM本地安装和配置大语言模型-猎户星空

这次本地安装和配置是通过一系列Dockerfile指令,构建了一个兼容OpenAI接口标准的vLLM推理框架镜像。这意味着用户可以轻松地在自己的电脑上设置并启动大语言模型的推理服务。
如果你是第一次使用Docker(一个可以让软件在隔离环境运行的工具),不用担心。你可以去Docker的官方网站,那里有很多教程可以帮助你开始。确保你已经在你的电脑上安装了Docker。
这个Docker镜像是基于Ubuntu22.04操作系统的,构建过程包括了一系列步骤,但这些步骤都已经为你准备好了,你只需要按照指导操作即可。这样做的好处是,你不需要从头开始搭建环境,可以直接进入到使用模型的阶段。这就像是你买了一台预装了所有软件的新电脑,省去了自己安装的麻烦:

  • 安装必要的apt软件包和Python PIP包。
  • 下载并安装vLLM源码包。
  • 启动一个内置的、基于OpenAI接口标准的vLLM推理服务。

本地安装和配置猎户星空

1.1系统要求:

  • 操作系统:建议使用Ubuntu 22.04或更高版本。
  • 内存:至少需要16GB RAM。
  • 处理器:应支持AVX-512指令集的CPU。
  • 存储空间:至少需要30GB的可用空间。
    此外,对于图形处理单元(GPU),推荐使用NVIDIA RTX 3060或更高性能的显卡,以便在推理时获得更好的性能。

1.2模型选择:

OrionStarAI开发了一系列大语言模型,主要包括以下几个:

Orion-14B-Base: 这是一个具有140亿参数的多语言基础模型,它在2.5T的多语言语料库上进行了训练,涵盖中文、英文、日语、韩语等多种语言。Orion-14B-Base在20B参数级别的模型中表现出色。
Orion-14B-Chat: 这个模型是在高质量语料库上微调的聊天模型,旨在为大型模型社区的用户提供优秀的交互体验。
Orion-14B-LongChat: 长文本版本的模型,擅长处理极长文本,能够在200k的token长度下表现出色,并支持最多320k的token长度。
Orion-14B-Chat-RAG: 这个模型是在自定义的检索增强生成数据集上微调的聊天模型,它在检索增强生成任务中取得了优异的性能。
Orion-14B-Chat-Plugin: 专为插件和函数调用任务定制的聊天模型,适用于LLM作为插件和函数调用系统的代理相关场景。
Orion-14B-Base-Int4: 这是一个使用4位整数权重的量化基础模型。它显著减小了模型大小(减少了70%),同时提高了推理速度(提升了30%),性能损失不到1%。
Orion-14B-Chat-Int4: 它在Orion-14B-Chat基础上,使用4位整数权重进行量化处理。这种量化技术显著减小了模型的大小,使其比原始模型小70%,同时提高了推理速度,达到了30%的提升,而性能损失非常小,不到1%。

在这书中我们会使用这使得Orion-14B-Chat-Int4作为示例,因为Orion-14B-Chat-Int4是OrionStarAI系列中的一个量化聊天模型,成为资源有限环境中理想的选择,尤其是在需要快速响应的应用场景中。

1.3下载模型:

OrionStarAI的模型可以在两个主要的开源平台找到:国际上的HuggingFace和国内的ModelScope。ModelScope是由阿里巴巴达摩院与CCF开源发展委员会合作创建的,旨在提供一个模型共享和创新的平台。我们将在ModelScope平台上展示这些模型。您可以通过点击链接访问ModelScope网站,并查看我们的演示。
https://modelscope.cn/models/OrionStarAI/Orion-14B-Chat-Int4/files
在这里插入图片描述
我们首先在“模型介绍”旁边点击“模型文件”,然后点击右边“下载模型”的按钮,网页右侧会出现两种下载方式。
在这里插入图片描述
我们选择git的下载方式,在根目录下,创建models文件夹,然后下载模型。

mkdir models
cd models
git clone https://www.modelscope.cn/OrionStarAI/Orion-14B-Chat-Int4.git

注意:模型内一些大文件(如下图红线提示)可能在git命令下丢失,需要自己点击下载。

在这里插入图片描述

1.4部署模型:

我们将使用vLLM框架来运行大语言模型。vLLM是一个由伯克利大学开发的开源推理引擎,它采用了一种叫做"PagedAttention"的新技术,可以更高效地使用显存并加快处理速度。OrionStar为此创建了一个特殊的Docker镜像文件,这个文件包含了所有必要的软件和设置。这意味着用户不需要手动搭建软件环境或安装Python包,大大简化了启动服务的过程。简而言之,OrionStar的Docker镜像让启动和运行大语言模型变得既快捷又简单。

1.4.1构建镜像

要开始使用OrionStarAI的vLLM,我们首先需要从他们的GitHub页面下载这个项目。这个项目主要是一个Dockerfile文件,一个用来构建Docker镜像的脚本。构建这个镜像可能会根据你的网络速度和电脑性能而有所不同,通常需要20到60分钟,因为它需要下载一些PIP软件包。在这个过程中,请耐心等待。完成后,我们将得到一个名为vllm_server:0.0.0.0的Docker镜像,它将包含vLLM的所有必要组件。这样,你就可以在本地运行vLLM,开始进行大语言模型推理了。
首先,我们的电脑需要和Docker容器通过一个端口号来通信,我们默认使用9999这个端口。如果你的电脑上9999端口已被占用,你可以修改Dockerfile文件中的–port选项来更换端口,同时也要在运行docker run命令时调整端口映射,以确保通信顺畅。如果在构建过程中遇到任何问题,可以查阅相关文档或在GitHub上提交问题。

git clone https://github.com/OrionStarAI/vllm_server.git

当我们下载完vllm_server后,我们有需要对Dockerfile 进行修改。下面是运行成功的命令和讲解。

  • 第一步构建底层镜像,用来构建一个基于Ubuntu 22.04和NVIDIA CUDA 12.1的开发环境的Docker镜像。
###########################
# Base Image Build
###########################
FROM nvidia/cuda:12.1.0-devel-ubuntu22.04 AS dev
LABEL maintainer huangyi@orionstar.com
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install --assume-yes apt-utils
RUN apt-get install --assume-yes git
RUN apt-get clean && apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential \
        python3-pip \
        git
RUN ldconfig /usr/local/cuda-12.1/compat/
WORKDIR /workspace
RUN git clone https://github.com/vllm-project/vllm.git
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install --no-cache-dir --upgrade -r vllm/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install --no-cache-dir --upgrade -r vllm/requirements-dev.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 第二步构建一个扩展镜像,主要用于编译和安装具有特定CUDA架构支持的Python扩展。其中包括了为特定CUDA架构编译PyTorch扩展的能力,以及安装vLLM所需的依赖。这样做可以确保在不同的CUDA环境中,vLLM能够正确地编译和运行。
###########################
# Extension Image Build
###########################
FROM dev AS build
# 安装构建依赖项
RUN pip install --no-cache-dir --upgrade -r vllm/requirements-build.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 由torch使用的CUDA架构列表
ARG torch_cuda_arch_list='7.0 7.5 8.0 8.6 8.9 9.0+PTX'
ENV TORCH_CUDA_ARCH_LIST=${torch_cuda_arch_list}
# Ninja用于构建扩展的最大作业数
ARG max_jobs=2
ENV MAX_JOBS=${max_jobs}
# nvcc使用的线程数量
ARG nvcc_threads=8
ENV NVCC_THREADS=$nvcc_threads
# 确保为LoRA构建了punica内核为一
ENV VLLM_INSTALL_PUNICA_KERNELS=1
  • 第三步创建一个测试环境的Docker镜像,它基于之前定义的dev镜像,其中包含了vLLM项目的所有文件,但不包括构建依赖项,因为假设已经有了预编译的扩展。这样做可以加快测试过程,因为不需要重新编译代码。
###########################
# Test Image
###########################
FROM dev AS test
# 单独复制PyTorch扩展以避免重建
WORKDIR /vllm-workspace
COPY --from=dev /workspace/vllm/ /vllm-workspace/
# 因为我们使用了预编译的扩展,所以忽略构建依赖项的安装
RUN rm pyproject.toml
  • 第四步构建一个运行时基础镜像,用于运行基于NVIDIA CUDA的应用程序。这段代码的目的是为vLLM项目创建一个包含所有运行时依赖的环境,确保可以在Docker容器中顺利运行vLLM应用程序。通过预先配置好时区和软件源,以及预装必要的软件包,这个镜像可以作为运行vLLM的稳定基础。
###########################
# Runtime Base Image
###########################
FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04 AS vllm-base
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get update -y && apt-get install -y python3-pip
WORKDIR /workspace
COPY --from=dev /workspace/vllm/ /workspace/
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install --no-cache-dir --upgrade -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1
  • 第五步设置一个OpenAI API服务器。该服务器配置了必要的依赖和参数,以便能够处理对Orion-14B-Chat-Int4模型的请求。通过这种方式,用户可以通过API与模型交互,进行深度学习推理任务。
###########################
# OpenAI API Server
###########################
FROM vllm-base AS vllm-openai
#为OpenAI API服务器安装额外的依赖项
RUN pip install accelerate
RUN mv vllm vllm-bak
RUN pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
# gpu-memory-utilization设置了GPU内存利用率,我用的显卡是4090, 24G显存,Orion-14B-Chat-Int4大概需要13G左右的显存,所以gpu-memory-utilization设置了0.55, 55%的显存使用率。
ENTRYPOINT python -m vllm.entrypoints.openai.api_server --host=0.0.0.0 --port=9999 --dtype float16 --model=/workspace/models/Orion-14B-Chat-Int4 --trust-remote-code --gpu-memory-utilization=0.55 --device=cuda --served-model-name=Orion-14B-Chat-Int4

上面代码可以根据自己实际情况修改。下面我们运行Dockerfile 文件。

cd vllm_server
docker build -t vllm_server:0.0.0.0 -f Dockerfile .

在这里插入图片描述
用docker images检查镜像vllm_server:0.0.0.0是否安装成功。
在这里插入图片描述

1.4.2启动镜像并开启推理服务

接下来,你需要告诉Docker你的模型存放在电脑上的哪个位置。这就像是给Docker一个地图,指引它到达目的地。我们之前在根目录创建了一个models的文件夹,并将模型下载到其中,命令里$HOME/models就是指本地模型的位置,/workspace/models是docker镜像里模型的位置。
如果你的电脑有两个显卡,编号为0和1(你可以用nvidia-smi命令查看),你可以设置CUDA_VISIBLE_DEVICES=0,1来让Docker使用这两个显卡。如果你想同时使用多个显卡来加速模型推理,记得在启动vLLM服务时添加-tp <gpu_num>参数,其中<gpu_num>是你想使用的显卡数量。
最后,以Orion-14B-Chat模型为例,我们将推理服务的模型名称设为orion14b-chat-int4。使用我们之前创建的vllm_server:0.0.0.0镜像,就可以启动推理服务了。这个过程可以通过以下命令完成:

docker run --gpus all -it -p 9999:9999 -v $(pwd)/logs:/workspace/logs:rw -v $HOME/models:/workspace/models -e CUDA_VISIBLE_DEVICES=0 -e MODEL_DIR=Orion-14B-Chat-Int4 -e MODEL_NAME=Orion-14B-Chat-Int4 vllm_server:0.0.0.0

这样,你就可以通过网络向这个服务器发送请求,并获取模型的推理结果。
在这里插入图片描述

1.5测试运行:

完成上述配置后,您可以打开一个新的命令行界面来调用推理服务。使用IP地址0.0.0.0和您之前设置的端口号9999,通过JSON格式发送请求。在命令中,model字段应与您启动服务时定义的模型名称相匹配。

以orion14b-chat-int4为例,您可以在content字段中输入您想要模型回复的内容。此外,stream字段允许您选择是希望以流式输出还是以非流式输出接收响应。

以下是一个示例命令:

curl -X POST "http://0.0.0.0:9999/predict" -H "Content-Type: application/json" -d '{"model": "Orion-14B-Chat-Int4", "content": "您好,Orion-14B-Chat-Int4!", "stream": false}'

在这里插入图片描述
这个命令将向运行在本地的推理服务发送一个请求,并等待模型的回复。请根据您的实际情况调整命令中的参数。如果您在使用过程中遇到任何问题,可以查阅相关文档或寻求社区帮助。


http://www.kler.cn/a/469696.html

相关文章:

  • 前端学习DAY31(子元素溢出父元素)
  • jenkins入门6 --拉取代码
  • Ungoogled Chromium127 编译指南 MacOS篇(五)- 安装Python和Node.js
  • Hadoop服装数据分析系统 大屏数据展示 智能服装推荐系统(协同过滤余弦函数)
  • 卫星导航信号的形成及解算
  • HTML+CSS+JS制作高仿小米官网网站(内附源码,含6个页面)
  • 蓝桥杯历届真题--#R格式(C++,Java) 高精度运算
  • 前端如何从入门进阶到高级
  • 发票打印更方便
  • Docker学习相关笔记,持续更新
  • 科研绘图系列:R语言科研绘图之标记热图(heatmap)
  • haproxy+nginx负载均衡实验
  • 0104java面经
  • 网段划分和 IP 地址
  • 计算机网络 (26)互联网的路由选择协议
  • ubuntu 工具安装
  • TCP协议:三次握手、四次挥手
  • LLM2Vec: 解锁大语言模型的隐藏能力
  • 【每日学点鸿蒙知识】list折叠动画效果、混淆问题定位、bindPopup问题等
  • unity学习11:地图相关的一些基础