为什么做的网站在浏览器搜不到,暗网是什么网站,佛山市住房和建设局网站首页,西安建设局网站地址GLMvLLM 部署调用
vLLM 简介
vLLM 框架是一个高效的大型语言模型#xff08;LLM#xff09;推理和部署服务系统#xff0c;具备以下特性#xff1a;
高效的内存管理#xff1a;通过 PagedAttention 算法#xff0c;vLLM 实现了对 KV 缓存的高效管理#xff0c;减少了…GLMvLLM 部署调用
vLLM 简介
vLLM 框架是一个高效的大型语言模型LLM推理和部署服务系统具备以下特性
高效的内存管理通过 PagedAttention 算法vLLM 实现了对 KV 缓存的高效管理减少了内存浪费优化了模型的运行效率。高吞吐量vLLM 支持异步处理和连续批处理请求显著提高了模型推理的吞吐量加速了文本生成和处理速度。易用性vLLM 与 HuggingFace 模型无缝集成支持多种流行的大型语言模型简化了模型部署和推理的过程。兼容 OpenAI 的 API 服务器。分布式推理框架支持在多 GPU 环境中进行分布式推理通过模型并行策略和高效的数据通信提升了处理大型模型的能力。开源vLLM 是开源的拥有活跃的社区支持便于开发者贡献和改进共同推动技术发展。
环境准备
在 一个3090 显卡的ubuntu22.04系统上进行部署。
pip 换源加速下载并安装依赖包
# 升级pip
python -m pip install --upgrade pip
# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplepip install modelscope1.11.0
pip install openai1.17.1
pip install torch2.1.2cu121
pip install tqdm4.64.1
pip install transformers4.39.3
# 下载flash-attn 请等待大约10分钟左右~
MAX_JOBS8 pip install flash-attn --no-build-isolation
pip install vllm0.4.0.post1直接安装 vLLM 会安装 CUDA 12.1 版本。
pip install vllm如果需要在 CUDA 11.8 的环境下安装 vLLM可以指定 vLLM 版本和 python 版本下载。
export VLLM_VERSION0.4.0
export PYTHON_VERSION38
pip install https://github.com/vllm-project/vllm/releases/download/v${VLLM_VERSION}/vllm-${VLLM_VERSION}cu118-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-manylinux1_x86_64.whl --extra-index-url https://download.pytorch.org/whl/cu118vLLM 对 torch 版本要求较高且越高的版本对模型的支持更全效果更好所以新建一个全新的镜像。 https://www.codewithgpu.com/i/datawhalechina/self-llm/GLM-4
使用 modelscope 中的 snapshot_download 函数下载模型第一个参数为模型名称参数 cache_dir 为模型的下载路径。
在 /root/model 路径下新建 model_download.py 文件并在其中输入以下内容粘贴代码后请及时保存文件如下图所示。并运行 python /root/model/model_download.py 执行下载模型大小为 14GB。
import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
osmodel_dir snapshot_download(ZhipuAI/glm-4-9b-chat, cache_dir/root/model, revisionmaster)代码准备
python 文件
在 /root/model 路径下新建 vllm_model.py 文件并在其中输入以下内容粘贴代码后请及时保存文件。下面的代码有很详细的注释大家如有不理解的地方欢迎提出 issue。
首先从 vLLM 库中导入 LLM 和 SamplingParams 类。LLM 类是使用 vLLM 引擎运行离线推理的主要类。SamplingParams 类指定采样过程的参数用于控制和调整生成文本的随机性和多样性。
vLLM 提供了非常方便的封装我们直接传入模型名称或模型路径即可不必手动初始化模型和分词器。
我们可以通过这个 demo 熟悉下 vLLM 引擎的使用方式。被注释的部分内容可以丰富模型的能力但不是必要的大家可以按需选择。
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
import os
import json# 自动下载模型时指定使用modelscope。不设置的话会从 huggingface 下载
# os.environ[VLLM_USE_MODELSCOPE]Truedef get_completion(prompts, model, tokenizerNone, max_tokens512, temperature0.8, top_p0.95, max_model_len2048):stop_token_ids [151329, 151336, 151338]# 创建采样参数。temperature 控制生成文本的多样性top_p 控制核心采样的概率sampling_params SamplingParams(temperaturetemperature, top_ptop_p, max_tokensmax_tokens, stop_token_idsstop_token_ids)# 初始化 vLLM 推理引擎llm LLM(modelmodel, tokenizertokenizer, max_model_lenmax_model_len,trust_remote_codeTrue)outputs llm.generate(prompts, sampling_params)return outputsif __name__ __main__: # 初始化 vLLM 推理引擎model/root/model/ZhipuAI/glm-4-9b-chat # 指定模型路径# modelTHUDM/glm-4-9b-chat # 指定模型名称自动下载模型tokenizer None# tokenizer AutoTokenizer.from_pretrained(model, use_fastFalse) # 加载分词器后传入vLLM 模型但不是必要的。# 修改后的文本内容text [请描述一下大型语言模型的最新进展。,提供一些提高编程技能的建议。]outputs get_completion(text, model, tokenizertokenizer, max_tokens512, temperature1, top_p1, max_model_len2048)# 输出是一个包含 prompt、生成文本和其他信息的 RequestOutput 对象列表。# 打印输出。for output in outputs:prompt output.promptgenerated_text output.outputs[0].textprint(fPrompt: {prompt!r}, Generated text: {generated_text!r})
结果如下
Prompt: 给我介绍一下大型语言模型。, Generated text: 大型语言模型是自然语言处理领域的一项突破性技术它们通过分析和理解大量文本数据学习如何生成和理解自然语言。这些模型通常具有数十亿甚至数万亿的参数能够处理和理解复杂的语言结构包括语法、语义和上下文关系。大型语言模型在多个领域有广泛的应用包括文本生成、机器翻译、情感分析、问答系统和聊天机器人等。它们能够生成连贯的文本提供准确的翻译理解用户的查询并生成相关的回答。这些模型的训练需要大量的计算资源和海量的数据。随着技术的进步模型的规模和性能都在不断提高使得它们在自然语言处理任务中的表现越来越接近人类水平。然而它们也面临着一些挑战包括偏见、泛化和解释性问题。未来大型语言模型可能会在更多领域发挥作用包括教育、医疗和创意产业等。它们有望成为人们日常生活和工作中不可或缺的一部分提供更加智能和便捷的语言交互体验。
部署兼容 OpenAI API 的 vLLM 服务器
GLM4 模型与 OpenAI API 协议兼容因此我们可以利用 vLLM 快速搭建一个符合 OpenAI API 标准的服务器。此服务器默认在 http://localhost:8000 上启动并且一次只能服务一个模型。它支持模型列表查询、文本补全completions和对话补全chat completions等接口。
文本补全completions适用于基础的文本生成任务模型会在给定提示后生成文本。常用于撰写文章、故事、邮件等。对话补全chat completions专用于对话场景模型需理解和生成对话内容。适用于开发聊天机器人或对话系统。 在部署服务器时我们可以自定义多种参数如模型名称、路径、聊天模板等。--host 和 --port 用于指定服务器的地址和端口。--model 指定模型的路径。--chat-template 用于指定对话的模板。--served-model-name 设置服务中模型的名称。--max-model-len 限制模型的最大处理长度。 由于 GLM4-9b-Chat 模型的最大长度较长128K为了避免 vLLM 初始化缓存时消耗过多资源这里我们将 --max-model-len 设置为 2048。
python -m vllm.entrypoints.openai.api_server \--model /root/autodl-tmp/ZhipuAI/glm-4-9b-chat \--served-model-name glm-4-9b-chat \--max-model-len2048 \--trust-remote-code测试服务器
查看模型列表 使用 curl 命令向服务器发送请求查看当前可用的模型列表。curl http://localhost:8000/v1/models返回如下结果{object:list,data:[{id:glm-4-9b-chat,object:model,created:1717567231,owned_by:vllm,root:glm-4-9b-chat,parent:null,permission:[{id:modelperm-4fdf01c1999f4df1a0fe8ef96fd07c2f,object:model_permission,created:1717567231,allow_create_engine:false,allow_sampling:true,allow_logprobs:true,allow_search_indices:false,allow_view:true,allow_fine_tuning:false,organization:*,group:null,is_blocking:false}]}]
}测试 OpenAI Completions API 通过 curl 命令测试文本补全功能。curl http://localhost:8000/v1/completions \-H Content-Type: application/json \-d {model: glm-4-9b-chat,prompt: 你好,max_tokens: 7,temperature: 0}收到的响应如下{id:cmpl-8bba2df7cfa1400da705c58946389cc1,object:text_completion,created:1717568865,model:glm-4-9b-chat,choices:[{index:0,text:请问有什么可以帮助您的您好,logprobs:null,finish_reason:length,stop_reason:null}],usage:{prompt_tokens:3,total_tokens:10,completion_tokens:7}
}同样您也可以使用 Python 脚本向 OpenAI Completions API 发送请求。如果标准 OpenAI API 功能无法满足您的需求您可以根据 vLLM 官方文档中的说明添加额外的参数 extra_body例如传入 stop_token_ids 以控制生成过程。 更多信息请参考 vLLM 官方文档https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html。
也可以用 python 脚本请求 OpenAI Completions API 。这里面设置了额外参数 extra_body我们传入了 stop_token_ids 停止词 id。当 openai api 无法满足时可以采用 vllm 官方文档方式添加。https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html
from openai import OpenAI
client OpenAI(base_urlhttp://localhost:8000/v1,api_keytoken-abc123, # 随便设只是为了通过接口参数校验
)completion client.chat.completions.create(modelglm-4-9b-chat,messages[{role: user, content: 你好}],# 设置额外参数extra_body{stop_token_ids: [151329, 151336, 151338]}
)print(completion.choices[0].message)得到的返回值如下所示
ChatCompletionMessage(content\n你好很高兴见到你有什么可以帮助你的吗, roleassistant, function_callNone, tool_callsNone)用 curl 命令测试 OpenAI Chat Completions API 。
curl http://localhost:8000/v1/chat/completions \-H Content-Type: application/json \-d { model: glm-4-9b-chat,messages: [ {role: system, content: You are a helpful assistant.},{role: user, content: 你好}],max_tokens: 7, temperature: 0 }得到的返回值如下所示
{id:cmpl-8b02ae787c7747ecaf1fb6f72144b798,object:chat.completion,created:1717569334,model:glm-4-9b-chat,choices:[{index:0,message:{role:assistant,content:\n你好很高兴},logprobs:null,finish_reason:length,stop_reason:null}],usage:{prompt_tokens:16,total_tokens:23,completion_tokens:7}也可以用 python 脚本请求 OpenAI Chat Completions API 。
from openai import OpenAIopenai_api_key EMPTY # 随便设只是为了通过接口参数校验openai_api_base http://localhost:8000/v1client OpenAI(api_keyopenai_api_key,base_urlopenai_api_base,
)chat_outputs client.chat.completions.create(modelglm-4-9b-chat,messages[{role: system, content: You are a helpful assistant.},{role: user, content: 你好},],# 设置额外参数extra_body{stop_token_ids: [151329, 151336, 151338]}
)
print(chat_outputs)在处理请求时 API 后端也会打印一些日志和统计信息。