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

【大模型】Vllm基础学习

前言:vllm是一个大语言模型高速推理框架,旨在提高大模型的服务效率。优势是内存管理,实现的核心是pageattetion算法。仅在gpu上加速,不在cpu加速。

目录

  • 1. PageAttention
  • 2. 实践
    • 2.1 安装
    • 2.2 离线推理
    • 2.3 适配OpenAI的api

1. PageAttention

  • 核心思想:将每个序列的KV cache(键值缓存)分块处理,每块包含固定数量的token。
  • 灵感来源:操作系统中的虚拟内存和分页管理技术,旨在动态地为请求分配KV cache显存,提升显存利用率
  • 评估结果:vLLM可以将常用的LLM吞吐量提高了2-4倍

2. 实践

2.1 安装

 pip install vllm

2.2 离线推理

示例一

from vllm import llmllm = LLM("facebook/opt-13b", tensor_parallel_size=4)
output = llm.generate("San Franciso is a")

示例二

from transformers import AutoTokenizer
from vllm import LLM, SamplingParams# Initialize the tokenizer
tokenizer = AutoTokenizer.from_pretrained("/data/weisx/model/Qwen1.5-4B-Chat")# Pass the default decoding hyperparameters of Qwen1.5-4B-Chat
# max_tokens is for the maximum length for generation.
sampling_params = SamplingParams(temperature=0.7, top_p=0.8, repetition_penalty=1.05, max_tokens=512)# Input the model name or path. Can be GPTQ or AWQ models.
llm = LLM(model="Qwen/l/Qwen1.5-4B-Chat", trust_remote_code=True)# Prepare your prompts
prompt = "Tell me something about large language models."
messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
)# generate outputs
outputs = llm.generate([text], sampling_params)# Print the outputs.
for output in outputs:prompt = output.promptgenerated_text = output.outputs[0].textprint(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
  • SamplingParams:在VLLM模型中主要负责调整采样过程。采样是在模型生成文本或其他类型输出时的一个关键步骤,它决定了模型如何从可能的输出中选择一个。
  • LLM的参数model是模型名,还可以输入其他大语言模型,但要注意不是所有的llm都被vllm支持。
  • message中定义了系统的角色内容以及用户的角色内容

2.3 适配OpenAI的api

a. 命令行输入

python -m vllm.entrypoints.openai.api_server --model your_model_path --trust-remote-code

默认监听 8000 端口,–host 和–port 参数可以指定主机和端口。
b. 使用curl与Qwen对接(命令行)

curl http://localhost:8000/generate \-d '{"prompt": "San Francisco is a","use_beam_search": true,"n": 4,"temperature": 0}'
  • http://localhost:8000/generate是访问的http地址,也就是客户端地址
  • -d后面跟的是参数,可以根据需求配置不同的参数

c. 使用python和Qwen对接

from openai import OpenAI
# Set OpenAI's API key and API base to use vLLM's API server.
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/Qwen1.5-4B-Chat",messages=[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Tell me something about large language models."},]
)
print("Chat response:", chat_response)
http://www.lryc.cn/news/389566.html

相关文章:

  • 使用vue动态给同一个a标签添加内容 并给a标签设置hover,悬浮文字变色,结果鼠标悬浮有的字上面不变色
  • 【ajax实战06】进行文章发布
  • Codeforces Round 954 (Div. 3)(A~E)
  • 基于Java微信小程序同城家政服务系统设计和实现(源码+LW+调试文档+讲解等)
  • [21] Opencv_CUDA应用之使用Haar级联的对象检测
  • CXL:拯救NVMe SSD缓存不足设计难题-2
  • Opencv学习项目6——pyzbar
  • Switch 刷安卓11 (LineageOS 18.1) 大气层双系统图文教程
  • Spring Boot与Spring Batch的深度集成
  • RTSP协议在视频监控系统中的典型应用、以及视频监控设备的rtsp地址格式介绍
  • Kotlin基础——异步和并发
  • 消防认证-防火卷帘
  • SpringBoot3.3集成knif4j-swagger文档方式和使用案例
  • 老年服务与管理实训室:制定教学模式
  • 4、DDD、中台和微服务的关系
  • 【ACM出版,马来西亚-吉隆坡举行】第四届互联网技术与教育信息化国际会议 (ITEI 2024)
  • 走进IT的世界
  • Linux 时区文件编译器 zic【man 8 zic】
  • Springboot下使用Redis管道(pipeline)进行批量操作
  • Vue技巧大揭秘:自定义指令的力量与应用
  • HR人才测评,如何考察想象力?
  • Git命令远程分支的合并和本地分支的同步
  • 墨烯的C语言技术栈-C语言基础-003
  • RpcRrovider分发rpc服务(OnMessage和Closure回调)
  • 分解+降维+预测!多重创新!直接写核心!EMD-KPCA-Transformer多变量时间序列光伏功率预测
  • 【Python】MacBook M系列芯片Anaconda下载Pytorch,并开发一个简单的数字识别代码(附带踩坑记录)
  • 自定义控件动画篇(四)ObjectAnimator的使用
  • 实现List接口的ArrayList和LinkedList
  • 下拉选择输入框(基于elment-ui)
  • CPP入门:日期类的构建