ChatGLM-4-9b-chat本地化|天翼云GPU上vLLM本地部署开源模型完整攻略

news2024/11/16 0:53:12

 拥有一个私有化的领先国产开源大模型?本文详细介绍了如何在天翼云GPU上使用vLLM部署ChatGLM-4-9b-chat本地化模型的完整攻略,助您快速上手。

9e029b29b6f88e1c783b481f79692f89.png

01

vLLM

本来打算用ollama在GPU服务器上部署开源模型GLM4,在之前文章有部署教程:《普通电脑也能跑大模型,三步搞定私人AI助手 | LLaMA-3本地部署小白攻略》。后来朋友推荐使用vLLM部署服务来运行GLM4。

vLLM是一个高效大语言模型(LLM)推理部署服务框架:‍‍

  • 高效内存管理:通过 PagedAttention 算法,vLLM 减少了内存浪费,优化了模型的运行效率。

  • 高吞吐量:支持异步处理和连续批处理请求,显著提高了模型推理的吞吐量,加速了文本生成和处理速度。

  • 易用性:与 HuggingFace 模型无缝集成,支持多种流行的大型语言模型,简化了模型部署和推理的过程。

  • 提供兼容ChatGPT接口服务。

  • 分布式推理:支持在多 GPU 环境中进行分布式推理,通过模型并行策略和高效的数据通信,提升了处理大型模型的能力。

  • 开源:开源社区支持,能不断改进,适配新模型。

02

安装准备

服务器配置:pi7.4xlarge.4 | 16核 | 64G,GPU: NVIDIA A10*1 (24GB)。

鉴于直接装(“pip install vllm”,还会附带安装 CUDA 12.1 版本。)可能会遇到一些意想不到的坑,毕竟安装步骤看着就几行,实际在服务器上操作可能会遇到一坑又一坑,考虑采用 Docker 方式部署。‍‍‍‍‍‍‍‍‍‍‍

开始选择的镜像: nvcr.io/nvidia/tritonserver:24.07-vllm-python-py3,试了很久,无法正常拉取。

经过不懈的寻找,找到一个国内阿里云的镜像:egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm:0.4.0.post1-pytorch2.1.2-cuda12.1.1-cudnn8-ubuntu22.04。来源《使用vLLM容器镜像快速构建大语言模型的推理环境》:https://help.aliyun.com/zh/egs/use-cases/use-a-vllm-container-image-to-run-inference-tasks-on-a-gpu-accelerated-instance。‍‍‍‍‍‍‍

下载完成后,启动镜像。

docker run -d -t --rm --net=host --gpus all \
 --privileged \
 --ipc=host \
 --name vllm \
 egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm:0.4.0.post1-pytorch2.1.2-cuda12.1.1-cudnn8-ubuntu22.04

更新vLLM版本。-i 参数指定国内镜像主机。‍‍‍

pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu121 -U
pip install vllm -U -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install jsonschema==3.1000 -U -i https://pypi.tuna.tsinghua.edu.cn/simple

从魔搭社区下载GLM4模型。‍‍‍‍‍‍‍‍‍

pip install modelscope
modelscope download --model ZhipuAI/glm-4-9b-chat

c523a573698ad69ab08f3044992e5c42.png

vLLM在容器内拉起模型时,默认会去huggingface拉取模型文件,有参数可以指定去modelscope魔搭社区下载。因为现在使用容器方式启动,拉取的模型文件会在容器重启后丢失,导致每次启动都会拉取模型文件。所以咱们采用映射方式,将提前下载好的模型映射到容器内。

03‍

启动‍

映射模型文件方式启动容器,模型文件存放位置: /home/GLM-4 。‍‍‍‍‍‍‍

docker run -d -t --rm --net=host --gpus all \
 --privileged \
 --ipc=host \
 --name vllm \
 -v /home/GLM-4:/home/GLM-4 \
 egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm:0.4.0.post1-pytorch2.1.2-cuda12.1.1-cudnn8-ubuntu22.04

进入容器。

docker exec -it vllm /bin/bash


‍‍

创建兼容 OpenAI API 接口的推理模型服务。‍‍‍‍‍‍‍‍

python -m vllm.entrypoints.openai.api_server --host 0.0.0.0 --port 8005  \
    --block-size 16 \
    --model /home/GLM-4 \
    --dtype float16 \
    --trust-remote-code \
    --served-model-name chatglm4-9b \
    --api-key 1234567 \
    --disable-log-requests \
    --enable-prefix-caching \
    --max_model_len 8192 \
    --enforce-eager

默认 http://localhost:8000 启动服务器。一次托管一个模型,实现了列表模型、completions 和 chat completions 端口。

创建服务器时,参数含义:

  • –host 和 --port 参数指定地址。

  • –model 参数指定模型名称。

  • –served-model-name 指定服务模型的名称。

  • –max-model-len 指定模型的最大长度。

block-size 大小和模型吞吐相关,保持默认16即可。

glm4最大支持1M上下文,实际一般服务器没有足够内存支持。

实践中指定长度为8192,消耗了大约18G内存。‍‍‍‍‍‍‍‍‍‍

882fc5bed4255aac641ca53261027afa.png

测试服务文本生成接口。‍‍‍

curl --location 'http://localhost:8005/v1/chat/completions' \
                --header 'Authorization: Bearer 1234567'                        \
                --header 'Content-Type: application/json'                      \
                --data '{
                    "model" : "chatglm4-9b",
                    "messages" : [
                        {"role": "system", "content": "You are a helpful assistant."}, 
                        {"role": "user", "content": "Hello!"}
                    ]
                }'

得到返回如下:‍

{"id":"chat-736aa029f23b495782b832df6359feb1","object":"chat.completion","created":1723716800,"model":"chatglm4-9b","choices":[{"index":0,"message":{"role":"assistant","content":"\nHello! How can I assist you today?","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":151336}],"usage":{"prompt_tokens":15,"total_tokens":26,"completion_tokens":11}}

至此,我们得到了一个本地部署国内领先的开源大模型GLM4。后续可以基于这个大模型,继续搭建我们上层的应用,各种对话应用、助手、智能体等等。‍‍‍‍‍‍

例如,采用吴恩达公布的三次模型翻译法,实现了可媲美专业翻译的水平。


相关文章推荐:

在 RAGFlow 中实践 GraphRAG

普通电脑也能跑大模型,三步搞定私人AI助手 | LLaMA-3本地部署小白攻略

Llama 3.1论文精读:为什么模型参数是4050亿?

Agent Hospital | 对话数据合成:清华利用多Agent合成大量医疗对话数据显著提升LLM在医疗场景效果

Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读

拥抱未来,学习 AI !‍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2046800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中央空调能量型计费系统,实现节能降耗

中央空调能量型计费系统是一种先进的计费方式,旨在通过科学、合理、公平地分摊中央空调使用费用,促进能源的有效利用和节能降耗。上海智能医疗创新示范基地使用的空调系统正是中央空调能量型计费系统 项目:上海智能医疗创新示范基地 项目情况…

【通信理论知识】数据传送的方式:串/并行;传输方向:单工、半/全双工;传输方式:同步/异步

通信协议与接口知识参考文章: 【通信理论知识】数据传送的方式:串/并行;传输方向:单工、半/全双工;传输方式:同步/异步 【串口通信详解】USART/UART、RS232、RS485标准接口与协议特点解析 【同步串行通信接…

【DGL系列】详细分析DGL中dgl.NID和orig_id的区别

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 背景知识 深入分析 初步结论 代码验证 实验设计 结果分析 最终结论 扩展思考 本文将详细分析orig_id和dgl.NID的区别。 背景知识 在做子图…

《Redis核心技术与实战》学习笔记4——AOF日志:宕机了,Redis如何避免数据丢失?

文章目录 AOF 日志是如何实现的?三种写回策略 日志文件太大了怎么办?AOF 重写会阻塞吗?小结 大家好,我是大白。 如果有人问你:“你会把 Redis 用在什么业务场景下?”我想你大概率会说:“我会把它当作缓存使…

【Kubernetes】k8s集群之包管理器Helm

目录 一.Helm概述 1.Helm的简介 2.Helm的三个重要概念 3.Helm2与Helm3的的区别 二.Helm 部署 1.安装 helm 2.使用 helm 安装 Chart 3.Helm 自定义模板 4.Helm 仓库 每个成功的软件平台都有一个优秀的打包系统,比如Debian、Ubuntu 的 apt,RedH…

医疗器械5G智能制造工厂物联数字孪生平台,推进制造业数字化转型

在当今这个日新月异的数字时代,医疗器械行业正经历着前所未有的变革与升级。随着5G技术的迅猛发展和智能制造的深入应用,医疗器械5G智能制造工厂物联数字孪生平台应运而生,它不仅为传统制造业注入了新的活力,更以其独特的优势引领…

C++图像识别、图像识别接口、ocr api

如果您在找工作并且在找内容审核编辑的工作,那么不难发现,快手在全国多个招聘网站发布了关于“内容审核编辑”岗位的招聘信息,据悉,此次的“内容审核编辑”岗位招聘的规模达3000人。因为快手上面“低龄妈妈”内容的炒作&#xff0…

Linux 与 Windows 服务器操作系统 | 全面对比

在服务器操作系统的领域,Linux 和 Windows 一直是两个备受关注的选择。 首先来看 Windows 操作系统。它由 Microsoft Corporation 开发,在桌面领域占据显著份额,其中 Windows 10 是使用最广泛的版本,广泛应用于个人计算机和企业桌…

8月16日笔记

只有DNS协议出网场景 DNS 协议是一种请求、应答协议,也是一种可用于应用层的隧道技术。DNS 隧道的工作原理很简单,在进行 DNS 查询时,如果查询的域名不在 DNS 服务器本机缓存中,就会访问互联网进行查询,然后返回结果。…

ELK整合实战,filebeat和logstash采集SpringBoot项目日志发送至ES

文章目录 ELK整合实战使用FileBeats将日志发送到Logstash配置Logstash接收FileBeat收集的数据并打印Logstash输出数据到Elasticsearch利用Logstash过滤器解析日志Grok插件Grok语法用法 输出到Elasticsearch指定索引 前文:FileBeats详解 前文:logstash详解…

pdf翻译软件哪个好用?多语言轻松转

想知道怎么用pdf翻译器在线翻译吗?无需复杂操作,一键即可解锁语言障碍。 在这个全球化日益加深的时代,掌握pdf文件的快速翻译技巧尤为重要。 无论是学习、工作还是国际交流,以下4个免费pdf翻译技巧都将是你不可或缺的得力助手。…

Apollo9.0 PNC源码学习之Planning模块—— Lattice规划(一):笛卡尔和Frenet坐标系

参考文章:Frenet坐标系 or Cartesian坐标系? 1 Lattice规划算法框架结构 2 Frenet坐标系 // 跟据匹配点,计算Frenet坐标系的S-L值// 3. according to the matched point, comp

十九、中介者模式

文章目录 1 基本介绍2 案例2.1 Developer 抽象类2.2 FrontendDeveloper 类2.3 BackendDeveloper 类2.4 Mediator 接口2.5 ProjectManager 类2.6 Client 类2.7 Client 类的运行结果2.8 总结 3 各角色之间的关系3.1 角色3.1.1 Colleague ( 同事 )3.1.2 ConcreteColleague ( 具体的…

RabbitMQ-消息队列-centos7

一、RabbitMQ安装 1、通过官网下 官网网址:https://www.rabbitmq.com 首先下载erlang-23.3.4.11-1.el7.x86_64.rpm,其次下载rabbitmq-server-3.10.0-1.el7.noarch.rpm 注意:RabbitMQ是由erlang开发的,所以必须先安装erlang版本…

Pytorch1: Anaconda下载,安装,配置

Anaconda手册 一,Anconada1,Anconada简介 二、下载、安装、配置环境变量1,安装 三、anaconda创建多版本python环境四、anaconda 安装 pytorch五、Jupyter Notebook 一,Anconada 1,Anconada简介 Anaconda就是一个用于…

【多线程】JUC的常见类,Callable接口,ReentranLock,Semaphore,CountDownLatch

JUC:java.util.concurrent 一、Callable 接⼝ 接口方法Callablecall,带有返回值Runnablerun,void所以创建一个线程,希望它给你返回一个结果,那么使用 Callable 更加方便一些 比如,创建一个线程&#xff…

leetcode350. 两个数组的交集 II,哈希表

leetcode350. 两个数组的交集 II 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可…

导出word格式的Javadoc(可用于快速生成项目详细设计文档)

导出word格式的Javadoc ​ 最近要编写项目详细设计文档,作为程序员当然想看看有没有能够自动生成的办法,生成详细设计文档,然后再在生成的基础上略做修改就好了(偷懒大法~),还真有,特此分享&am…

数字乡村+智慧农业数字化转型大数据平台建设方案

1. 数字农业发展趋势 数字农业正经历全环节数字技术应用、全流程生产经营再造、全方位线上线下对接和管理服务全生命周期覆盖的四大趋势,标志着我国农业进入高质量发展新阶段。 2. 数字乡村的战略意义 数字乡村作为数字化、网络化和信息化的产物,对于…

人工智能技术工程师由谁颁发?都学习哪些课程?

人工智能技术工程师是一个充满挑战和机遇的职业。他们将用自己的专业知识和技能,为人类带来更加美好的未来。 一、人工智能工程师发证单位是谁? 人工智能技术工程师证书是由工业和信息化部教育与考试中心颁发的。 工信部电子标准院的人工智能从业人员认…