赞
踩
依赖项:
AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL
配置:4090,24G显存,windterm远程,vscode等基于软件就不说了
qwen2需求情况一览表:
显存占用大小(可以通过改浮点位调整占用显存大小):
内存占用量:
第一步:申请资源,创建python环境(autodl自带conda环境)
conda create -n myllm python==3.8.18
第二步:依赖包
哼...,pip install vllm不行,使用下面结束!
- pip install vllm==0.4.0.post1
- pip install modelscope==1.11.0
- pip install openai==1.17.1
- pip install tqdm==4.64.1
- pip install transformers==4.39.3
- MAX_JOBS=8 pip install flash-attn --no-build-isolation
第三步:下载qwen2-7B大模型(确保下载完)
- # model_download.py
- import os
- import torch
- from modelscope import snapshot_download, AutoModel, AutoTokenizer
- model_dir = snapshot_download('qwen/Qwen2-7B-Instruct', cache_dir='/root/autodl-tmp', revision='master')
第四步:初级调用
- # vllm_model.py
- from vllm import LLM, SamplingParams
- from transformers import AutoTokenizer
- import os
- import json
-
- # 自动下载模型时,指定使用modelscope。不设置的话,会从 huggingface 下载
- os.environ['VLLM_USE_MODELSCOPE']='True'
-
- def get_completion(prompts, model, tokenizer=None, max_tokens=512, temperature=0.8, top_p=0.95, max_model_len=2048):
- stop_token_ids = [151329, 151336, 151338]
- # 创建采样参数。temperature 控制生成文本的多样性,top_p 控制核心采样的概率
- sampling_params = SamplingParams(temperature=temperature, top_p=top_p, max_tokens=max_tokens, stop_token_ids=stop_token_ids)
- # 初始化 vLLM 推理引擎
- llm = LLM(model=model, tokenizer=tokenizer, max_model_len=max_model_len,trust_remote_code=True)
- outputs = llm.generate(prompts, sampling_params)
- return outputs
-
-
- if __name__ == "__main__":
- # 初始化 vLLM 推理引擎
- model='/root/autodl-tmp/qwen/Qwen2-7B-Instruct' # 指定模型路径
- # model="qwen/Qwen2-7B-Instruct" # 指定模型名称,自动下载模型
- tokenizer = None
- # 加载分词器后传入vLLM 模型,但不是必要的。
- # tokenizer = AutoTokenizer.from_pretrained(model, use_fast=False)
-
- text = ["你好,帮我介绍一下什么时大语言模型。",
- "可以给我将一个有趣的童话故事吗?"]
- # messages = [
- # {"role": "system", "content": "你是一个有用的助手。"},
- # {"role": "user", "content": prompt}
- # ]
- # 作为聊天模板的消息,不是必要的。
- # text = tokenizer.apply_chat_template(
- # messages,
- # tokenize=False,
- # add_generation_prompt=True
- # )
-
- outputs = get_completion(text, model, tokenizer=tokenizer, max_tokens=512, temperature=1, top_p=1, max_model_len=2048)
-
- # 输出是一个包含 prompt、生成文本和其他信息的 RequestOutput 对象列表。
- # 打印输出。
- for output in outputs:
- prompt = output.prompt
- generated_text = output.outputs[0].text
- print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
结果:
第三步:部署为openai接口,API访问
python -m vllm.entrypoints.openai.api_server --model /root/autodl-tmp/qwen/Qwen2-7B-Instruct --served-model-name Qwen2-7B-Instruct --max-model-len=2048 --port 8000
其他指令
- --host 0.0.0.0 #IP
- --port 8000 #端口
- --gpu-memory-utilization 0.7 #占用GPU内存部分
- --max-model-len 29856 #上下文长度
- --model Qwen1.5-72B-Chat #模型文件位置
- --tensor-parallel-size 4 #指定4张卡
如果想指定某几张卡,可以使用命令:
CUDA_VISIBLE_DEVICES=0,1 python -m vllm.entrypoints.openai.api_server --model /root/autodl-tmp/qwen/Qwen2-7B-Instruct --served-model-name Qwen2-7B-Instruct --max-model-len=2048 --port 8000
OOM(内存溢出)问题。我们推荐您尝试三个参数进行修复。第一个参数是 --max-model-len 。我们提供的默认最大位置嵌入(max_position_embedding)为32768,因此服务时的最大长度也是这个值,这会导致更高的内存需求。将此值适当减小通常有助于解决OOM问题。另一个您可以关注的参数是 --gpu-memory-utilization 。默认情况下,该值为 0.9 ,您可以将其调高以应对OOM问题。最后就是--dtype float16,选择较小的浮点数可以降低内存消耗。
部署完成后查询当前端口的模型信息:
curl http://localhost:8000/v1/models
指定端口:--port 8000
指定浮点位数:(可以设置auto,或者去掉使用默认值)
--dtype float16
--dtype float32(直接超过显存了,说明位数不同,占的显存差别还是很大的)
测试api接口代码:
- # vllm_openai_completions.py
- from openai import OpenAI
- client = OpenAI(
- base_url="http://localhost:8000/v1",
- api_key="sk-xxx", # 随便填写,只是为了通过接口参数校验
- )
-
- completion = client.chat.completions.create(
- model="Qwen2-7B-Instruct",
- messages=[
- {"role": "user", "content": "你是谁"}
- ]
- )
-
- print(completion.choices[0].message)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。