vLLM推理部署Qwen2.5
借助vLLM,构建一个与OpenAI API兼容的API服务十分简便,该服务可以作为实现OpenAI API协议的服务器进行部署。适用于大批量Prompt输入,并对推理速度要求高的场景,吞吐量比HuggingFace Transformers高10多倍。它旨在提供高性能、低延迟的推理服务,并支持多种硬件加速器,如 GPU 和 CPU。现在的Ubuntu是最简单配置的,如果使用wget等命令,需要使
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, SamplingParams
tokenizer = 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.prompt
generated_text = output.outputs[0].text
print(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 OpenAI
openai_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++。
-
获取
llama-cli
程序 -
获取 GGUF[1] 格式的 Qwen2.5 模型
-
使用模型运行程序
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
更多推荐
所有评论(0)