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++。

  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
Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐