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.rhkb.cn/news/458569.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手指关节分割系统:视觉算法突破

手指关节分割系统源码&数据集分享 [yolov8-seg-C2f-RFAConv&yolov8-seg-fasternet-bifpn等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…

灵动AI:艺术与科技的融合

灵动AI视频官网地址:https://aigc.genceai.com/ 灵动AI 科技与艺术的完美融合之作。它代表着当下最前沿的影像技术,为我们带来前所未有的视觉盛宴。 AI 视频以强大的人工智能算法为基石,能够自动分析和理解各种场景与主题。无论是壮丽的自然…

网络学习/复习2套接字

LinuxCode/code26 zc/C语言程序学习 - 码云 - 开源中国

c语言中整数在内存中的存储

整数的二进制表示有三种:原码,反码,补码 有符号的整数,三种表示方法均有符号位和数值位两部分,符号位都是用‘0’表示“正,用1表示‘负’ 最高位的以为被当作符号位,剩余的都是数值位。 整数…

python 制作 发货单 (生成 html, pdf)

起因, 目的: 某个小店,想做个发货单。 过程: 先写一个 html 模板。准备数据, 一般是从数据库读取,也可以是 json 格式,或是 python 字典。总之,是数据内容。使用 jinja2 来渲染模板。最终的结果可以是 h…

使用 telnet 连接 dubbo 服务调用暴露的 dubbo 接口

目录 前言 环境准备 Telnet客户端 zookeeper pom 配置文件 dubbo接口 telnet连接dubbo dubbo命令 ls invoke 前言 工作中的微服务项目远程调用使用的技术是 dubbo,当对外提供了一个 duboo 接口时,无论是开发阶段自测,还是上线了服…

【EndNote版】如何在Word中引用文献

1、在Word中,鼠标光标放在所需插入文献的位置 2、点击选项卡中的“EndNote X9”,直接在EndNote中选中对应的文献 3、选中文献,点击工具栏中的“引用” 4、最后就可在Word中看到所插入的文献

华为配置BFD状态与接口状态联动实验

组网图形 图1 配置BFD状态与接口状态联动组网图 BFD简介配置注意事项组网需求配置思路操作步骤配置文件 BFD简介 为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要能够尽快检测到与相邻设备间的通信故障,以便及时采取措施&…

技术成神之路:设计模式(二十三)解释器模式

相关文章:技术成神之路:二十三种设计模式(导航页) 介绍 解释器模式(Interpreter Pattern)是一种行为设计模式,用于定义一种语言的文法表示,并提供一个解释器来处理这种文法。它用于处理具有特定语法或表达…

【C++】继承与模板

继承 1.继承的概念 概念:继承(inheritace)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称之为派生类。继承呈现了面向对象程序设计的…

时序分解 | TTNRBO-VMD改进牛顿-拉夫逊算法优化变分模态分解

时序分解 | TTNRBO-VMD改进牛顿-拉夫逊算法优化变分模态分解 目录 时序分解 | TTNRBO-VMD改进牛顿-拉夫逊算法优化变分模态分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 (创新独家)TTNRBO-VMD改进牛顿-拉夫逊优化算优化变分模态分解TTNRBO–VMD 优化VMD分解层数K和…

设计模式-单例模型(单件模式、Singleton)

单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 单例模式同时解决了两个问题, 所以违反了单一职责原则: 保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例…

【Java并发编程】信号量Semaphore详解

一、简介 Semaphore(信号量):是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。 Semaphore 一般用于流量的控制,特别是公共资源有限的应用场景。例如数据库的连接&am…

谈谈对函数式编程的理解及rxjs的使用

背景 函数式编程可以说是非常古老的编程方式,但是近几年变成了一个非常热门的话题。不管是Google力推的Go、学术派的Scala与Haskell,还是Lisp的新语言Clojure,这些新的函数式编程语言越来越受到人们的关注。函数式编程思想对前端的影响很大&…

C语言基础题(大合集2)

1. 时间转换 给定秒数 --> 输出秒数 转化成 时/分/秒 //时间转换 //给定秒数 --> 转换成 小时/分/秒 int main() {//输入int seconds 0;int h 0;//小时int m 0;//分钟int s 0;//秒scanf("%d", &seconds);//计算h seconds / 60 / 60;m seconds / 60…

详解varint,zigzag编码, 以及在Go标准库中的实现

文章目录 为啥需要varint编码为啥需要zigzag编码varint编码解码 zigzag编码解码 局限性 为啥需要varint编码 当我们用定长数字类型int32来表示整数时,为了传输一个整数1,我们需要传输00000000 00000000 00000000 00000001 32 个 bits,而有价…

【C++】STL初识

【C】STL初识 文章目录 【C】STL初识前言一、STL基本概念二、STL六大组件简介三、STL三大组件四、初识STL总结 前言 本篇文章将讲到STL基本概念,STL六大组件简介,STL三大组件,初识STL。 一、STL基本概念 STL(Standard Template Library,标准…

QT建立工程时出现了:Reading Project

QT建立工程时出现了:Reading Project 打开建立的工程发现,缺少build文件 从别的工程中复制一个build,点击.pro就可以打开了

【CSS3】css开篇基础(4)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

Spring Boot实现的动态化酒店住宿管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理酒店客房管理系统的相关信息成为必然。开发…