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

vLLM推理部署Qwen2.5

 

vLLM

vLLM 是一个用于大模型推理的高效框架。它旨在提供高性能、低延迟的推理服务,并支持多种硬件加速器,如 GPU 和 CPU。

vLLM 适用于大批量Prompt输入,并对推理速度要求高的场景,吞吐量比HuggingFace Transformers高10多倍。

安装:vllm需要在Linux环境中,可以启动虚拟机来实现部署,创建时选择64G,否则空间不够用

wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
  •  下载CUDA Toolkit 12.4.0

sudo sh cuda_12.4.0_550.54.14_linux.run
  • 运行CUDA Toolkit的安装脚本
pip install vllm

或者我们可以使用docker的方式搭建一个Ubuntu环境,来使用 vLLM 推理部署

docker run -tid --gpus all -p 3316:22 -p 5900:5900 -p 5901:5901 -p 8889:8888 --name container_name -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all --privileged=true ubuntu:20.04
  • 启动一个名为 container_name 的 Ubuntu 20.04 容器
  • 以特权模式运行,并且可以使用所有 NVIDIA GPU 

docker exec -it container_name bash

如果我们已经创建了一个容器,但是后续需要映射端口号到本机8000,那么可以创建一个新镜像

# 创建一个新的镜像,基于现有容器
docker commit container_name new_image_name# 停止并删除旧容器
docker stop container_name
docker rm container_name# 使用新镜像启动新容器,并映射端口
docker run -p 8000:8000 --name container_name new_image_name

这样就进入了Ubuntu环境。 

现在的Ubuntu是最简单配置的,如果使用wget等命令,需要使用apt-get下载再使用。

离线推理

Qwen2.5代码支持的模型都被vLLM所支持。 vLLM最简单的使用方式是通过以下演示进行离线批量推理。

from transformers import AutoTokenizer
from vllm import LLM, SamplingParamstokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B-Instruct")
# 指定大模型生成文本时的行为,温度越低生成的文本越确定,更倾向于选择概率最高的词
sampling_params = SamplingParams(temperature=0.7, top_p=0.8, repetition_penalty=1.05, max_tokens=512)llm = LLM(model="Qwen/Qwen2.5-7B-Instruct")
prompt = "hello?"
messages = [{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
)outputs = llm.generate([text], sampling_params)for output in outputs:prompt = output.promptgenerated_text = output.outputs[0].textprint(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

   

OpenAI兼容的API服务 

借助vLLM,构建一个与OpenAI API兼容的API服务十分简便,该服务可以作为实现OpenAI API协议的服务器进行部署。默认情况下,它将在 http://localhost:8000 启动服务器

vllm serve Qwen/Qwen2.5-7B-Instruct
  • 快速启动一个基于 vLLM 的模型服务。会加载指定的模型,并提供一个 REST API 接口,使得可以通过网络请求来与模型交互 
  • vLLM 会下载并加载 Qwen/Qwen2.5-7B-Instruct 模型,并启动一个本地的服务端点

如果本地已经下载模型,可以使用下面来启动:

python3 -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2___5-1___5B-Instruct

 


from openai import OpenAIopenai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
# 因为我们在本地运行一个不需要实际密钥的服务器,可以将密钥设置为任意值,因为它不会被实际使用client = OpenAI(api_key=openai_api_key,base_url=openai_api_base,
)chat_response = client.chat.completions.create(model="Qwen/Qwen2.5-7B-Instruct",messages=[{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},{"role": "user", "content": "hello"},],temperature=0.7,top_p=0.8,max_tokens=512,extra_body={"repetition_penalty": 1.05,},
)
print("Chat response:", chat_response)

输出:

Chat response: ChatCompletion(id='chat-fdc2422da17f4d4cb419e1af320eb481', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='Hello! How can I assist you today?', refusal=None, role='assistant', function_call=None, tool_calls=[]), stop_reason=None)], created=1730100300, model='Qwen/Qwen2___5-1___5B-Instruct', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=10, prompt_tokens=30, total_tokens=40, completion_tokens_details=None, prompt_tokens_details=None), prompt_logprobs=None)Process finished with exit code 0

本地运行

llama.cpp就像 Python 框架 torch+transformers 或 torch+vllm 的组合,但用的是 C++。

  1. 获取 llama-cli 程序

  2. 获取 GGUF[1] 格式的 Qwen2.5 模型

  3. 使用模型运行程序

Linux上安装构建工具:

sudo apt install build-essential

编译程序:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

然后运行 make 命令:

make llama-cli

llama-cli 提供多种“模式”来与模型进行“交互”

./llama-cli -m qwen2.5-7b-instruct-q5_k_m.gguf \-co -cnv -p "You are Qwen, created by Alibaba Cloud. You are a helpful assistant." \-fa -ngl 80 -n 512

Text Generation Web UI

这是一款流行的文本生成Web界面工具,拥有多个交互界面,并支持多种模型后端。

使用 repo中提供的Shell脚本。首先,克隆repo并进去文件夹中:

git clone https://github.com/oobabooga/text-generation-webui
cd text-generation-webui

在Linux系统上运行 start_linux.sh ,在Windows系统上运行 start_windows.bat:

pip install -r requirements_apple_silicon.txt
text-generation-webui
├── models
│   ├── Qwen2.5-7B-Instruct
│   │   ├── config.json
│   │   ├── generation_config.json
│   │   ├── model-00001-of-00004.safetensor
│   │   ├── model-00002-of-00004.safetensor
│   │   ├── model-00003-of-00004.safetensor
│   │   ├── model-00004-of-00004.safetensor
│   │   ├── model.safetensor.index.json
│   │   ├── merges.txt
│   │   ├── tokenizer_config.json
│   │   └── vocab.json

http://www.mrgr.cn/news/60471.html

相关文章:

  • python编程-闭包
  • 【Linux网络】Linux网络基础入门:初识网络,理解网络协议
  • 查找与排序-插入排序
  • python对文件的读写操作
  • GAMES101------学习笔记---自用02--Antialiasing (反走样)
  • 【设计模式系列】代理模式(八)
  • 【云原生】云原生后端:数据管理
  • 有手就行的大模型教程:如何在个人电脑上部署盘古大模型
  • 2024最新保姆级Python下载安装教程
  • 小白也能轻松制作产品宣传册的软件
  • 消息队列-RabbitMQ
  • npcap-1.80
  • OpenIPC开源FPV之msposd配置
  • 本地搭建Trilium Notes轻松创建个人知识库并实现远程查看文档资料
  • 内衣洗衣机真的可以洗得更干净吗?入手这四款洗衣机真心不后悔!
  • 全家桶工具介绍
  • 10.28.2024刷华为OD C题型
  • 采购管理系统有哪些基础的功能
  • js中 没值用 ??还是||
  • DDRPHY数字IC后端设计实现系列专题
  • WebGL进阶(四)-视点和视线
  • JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
  • react18中react-thunk实现公共数据仓库的异步操作
  • WSGI、uwsgi与uWSGI
  • [ComfyUI]Mochi:最强视频开源模型,它来了!
  • 使用libimobiledevice+ifuse访问iOS沙盒目录