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

vllm部署私有智谱大模型

大模型的硬件要求

什么是GPU

        Graphical Processing Units (GPUs) 图形处理单元(GPU)是一种功能强大的电子芯片,用于在沉浸式视频游戏、电影和其他视觉媒体中呈现丰富的 2D/3D 图形和动画 因其超越 CPU 的并行矩阵运算性能,所以也被广泛应用于人工智能相关的各种系统,包括机器视觉、NLP、语音识别、自动驾驶等 GPU通过大量简单的处理单元(CUDA核心、Tensor核心等)并行工作,能够在短时间内完成复杂的矩阵运算和数据处理任务。

        当我们为模型训练及推理做硬件选型时,NVIDIA 几乎是唯一选择,其在 GPU 领域,尤其 AI 领域芯片具有垄断性优势。

cpu和gpu的区别

        CPU(中央处理器)和GPU(图形处理器)都是计算机中的重要组件,但它们在设计目的、结构、性能特点和应用场景等方面存在显著区别,以下是详细介绍:

设计目的

  • CPU:设计初衷是实现通用计算,能够处理各种各样不同类型的任务,如操作系统运行、办公软件使用、多任务处理等,强调指令的顺序执行和通用性。
  • GPU:最初是为了加速图形渲染而设计的,专注于处理图形和图像相关的计算任务,如游戏画面、动画制作、3D建模等,以提供流畅的视觉体验。

结构特点

  • CPU:由少数几个强大的核心组成,每个核心都有较大的缓存和复杂的控制单元。缓存用于存储近期使用的数据和指令,控制单元则负责协调核心的操作,确保指令能够按顺序高效执行。这种结构使得CPU能够快速处理复杂的逻辑判断和分支跳转。
  • GPU:拥有大量相对简单的核心,这些核心可以并行处理大量的数据。GPU的缓存相对较小,但拥有极高的内存带宽,能够快速地从显存中读取和写入数据。

性能特点

  • CPU:单核性能较强,擅长处理串行任务,即在同一时间内按照顺序依次执行的任务。对于需要复杂逻辑判断和频繁数据交互的任务,CPU能够快速做出响应并处理。
  • GPU:并行计算能力强大,适合处理大规模的并行任务,即可以同时进行多个相同或相似操作的任务。在处理大量数据的并行计算时,GPU能够显著提高计算速度。

为什么GPU更适合做模型训练和推理

并行计算架构

  • 大量核心:GPU拥有数千个相对简单的计算核心,如英伟达的一些高端GPU可能包含超过一万个CUDA核心(计算统一设备架构核心)。而深度学习模型在训练和推理过程中,存在大量可以并行执行的小任务,例如矩阵乘法、向量加法等。GPU的众多核心可以同时处理这些小任务,大大提高了计算效率。
  • 线程并行:GPU支持大规模的线程并行,它可以将一个大的计算任务分解成许多小的线程,每个线程在一个核心上独立执行。在深度学习中,一个矩阵乘法运算可以被分解成多个元素级的乘法和加法操作,这些操作可以分配给不同的线程并行执行,从而显著加快计算速度。

强大的计算能力

  • 浮点运算能力:深度学习模型的训练和推理通常涉及大量的浮点运算,如卷积层、全连接层等都需要进行大量的浮点乘法和加法运算。GPU具有极高的浮点运算能力,尤其是单精度(FP32)和半精度(FP16)浮点运算,能够快速完成这些计算任务。
  • 计算密集型优化:GPU的硬件设计针对计算密集型任务进行了优化,其核心的架构和指令集更适合处理大规模的数值计算。与CPU相比,GPU在执行深度学习中的矩阵和向量运算时,能够更高效地利用硬件资源,减少计算时间。

高内存带宽

  • 快速数据传输:深度学习模型通常需要处理大量的数据,如输入的图像、音频等,以及模型的参数和中间计算结果。GPU具有很高的内存带宽,能够快速地将数据从显存传输到计算核心进行处理,减少了数据传输的延迟,提高了计算效率。
  • 显存容量:现代GPU配备了较大的显存容量,可以存储更多的模型参数和中间数据,避免了频繁地从主内存中读取数据,进一步提高了计算速度。

专门的深度学习库和框架支持

  • 优化算法实现:为了充分发挥GPU的性能,许多深度学习库和框架,如TensorFlow、PyTorch等,都针对GPU进行了优化。这些库提供了高效的算法实现,能够自动将深度学习模型的计算任务分配到GPU的各个核心上并行执行。
  • 硬件适配:深度学习库和框架会根据不同的GPU硬件特性进行适配和优化,确保在各种GPU上都能获得最佳的性能表现。例如,针对英伟达的GPU,这些库可以利用CUDA和cuDNN等加速库,进一步提高计算效率。

CUDA 核心和 Tensor 核心

CUDA核心

  • 定义和功能
    • CUDA(Compute Unified Device Architecture)核心是NVIDIA GPU的基本计算单元。它是一种通用的流式多处理器核心,能够执行各种类型的计算任务。CUDA核心遵循单指令多线程(SIMT)架构,即一个指令可以同时作用于多个线程,从而实现并行计算。
    • CUDA核心可以处理多种数据类型和计算操作,包括整数运算、浮点运算等,能够应对广泛的计算需求,从图形渲染到科学计算,再到深度学习等领域都有应用。
  • 应用场景
    • 通用计算:在一些通用的科学计算任务中,如物理模拟、计算流体力学、分子动力学等,CUDA核心可以通过并行计算加速计算过程。
    • 传统深度学习:在深度学习早期,CUDA核心是执行深度学习模型训练和推理的主要力量,负责矩阵乘法、卷积等基本运算。

Tensor核心

  • 定义和功能
    • Tensor核心是NVIDIA专门为深度学习中的矩阵运算而设计的一种特殊计算单元,它是在CUDA架构基础上发展而来的。Tensor核心能够在一个时钟周期内完成多个矩阵乘法 - 累加(GEMM)操作,尤其是针对半精度(FP16)和混合精度(FP16/FP32)的矩阵运算进行了优化。
    • Tensor核心通过采用特殊的硬件架构和算法,能够以更高的效率处理深度学习中常见的大规模矩阵运算,大大提高了深度学习模型的训练和推理速度。
  • 应用场景
    • 深度学习训练:在现代深度学习模型的训练中,如卷积神经网络(CNN)、循环神经网络(RNN)及其变体(LSTM、GRU)等,Tensor核心能够显著加速矩阵乘法和卷积操作,从而缩短训练时间。
    • 深度学习推理:在模型部署和推理阶段,Tensor核心可以快速处理输入数据,实现实时的预测和分类任务,如图像识别、语音识别、自然语言处理等应用。

二者关系和区别

  • CUDA核心更通用,Tensor核心更专用:CUDA核心是一种通用的计算单元,能处理多种类型的计算任务;而Tensor核心则是专门为深度学习中的矩阵运算优化的,在特定的深度学习任务上表现更出色。
  • 计算效率差异:在处理深度学习中的大规模矩阵运算时,Tensor核心的计算效率要远高于CUDA核心。但对于非矩阵运算的任务,Tensor核心无法发挥作用,仍需要CUDA核心来完成。
  • 协同工作:在NVIDIA的GPU中,CUDA核心和Tensor核心通常协同工作。CUDA核心负责处理一些通用的计算任务和深度学习中的非矩阵运算部分,而Tensor核心则专注于加速矩阵运算,二者共同提高了GPU在深度学习和其他计算领域的性能。

大模型训练推理如何选择GPU

在选择GPU时,我们还需要考虑预算因素。不同型号的GPU价格差异较大,因此我们需要根据自己的预算情况进行选择。对于预算有限的用户,可以选择性价比较高的V100 32G或A800/H800等型号的GPU。这些GPU虽然性能略逊于A100系列,但同样能够满足一般规模的大模型训练推理需求。

大模型显存需求分析

估算大模型所需显存在线工具: 显存计算器 - 大模型显存需求分析工具 | LlamaFactory | LlamaFactory

部署智谱大模型

云平台

我这里使用算力云:https://www.autodl.com/,主要是便宜,选择gpu:RTX 4090D(24GB)*1按量计费,不用的时候关机不收费

创建云主机

登录主机

下载模型

        在魔塔社区ModelScope - 模型列表页 查找GLM模型,我这里安装的是GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。 在语义、数学、推理、代码和知识等多方面的数据集测评中,GLM-4-9B 及其人类偏好对齐的版本 GLM-4-9B-Chat 均表现出较高的性能。

点击下载模型,先更新云主机pip后,安装modelscope库:

python -m pip install --upgrade pip
pip install modelscope

复制命令行下载命令,在云主机新建download.py文件,粘贴命令到download.py,模型下载目录要提前建好

#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('ZhipuAI/glm-4-9b-chat', cache_dir='/root/autodl-tmp/models', revision='master')

pythton download.py运行下载脚本,下载模型

安装python库

设置pip仓库为国内源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

运行pip安装库 pip install -r requirement.txt,依赖如下

torch>=2.3.0
torchvision>=0.18.0
transformers>=4.42.4
huggingface-hub>=0.24.0
sentencepiece>=0.2.0
jinja2>=3.1.4
pydantic>=2.8.2
timm>=1.0.7
tiktoken>=0.7.0
accelerate>=0.32.1
sentence_transformers>=3.0.1
gradio>=4.38.1 # web demo
openai>=1.35.0 # openai demo
einops>=0.8.0
pillow>=10.4.0
sse-starlette>=2.1.2
bitsandbytes>=0.43.1 # INT4 Loading
vllm>=0.5.2

启动大模型

新建脚本start_gml.sh内容如下:

#!/bin/bash
export OPENAI_API_KEY=haha123
python -m vllm.entrypoints.openai.api_server --model ./models/ZhipuAI/glm-4-9b-chat --host 0.0.0.0 --port 8000 --trust-remote-code --dtype float16 --enable-reasoning --gpu-memory-utilization 0.9 --max-model-len 8192

OPENAI_API_KEY是访问大模型的api key,自行设置

vllm.entrypoints.openai.api_server 是 VLLM 库中的一个特定入口点,用于启动一个兼容 OpenAI API 的服务端

各参数含义:

--model:指定要使用的模型路径,这里是 ./models/ZhipuAI/glm-4-9b-chat。
--host:服务监听的主机地址,0.0.0.0 表示监听所有可用的网络接口。
--port:服务监听的端口号,这里设置为 8000。
--trust-remote-code:允许加载远程代码,适用于需要运行自定义代码的模型。
--dtype:指定模型的数据类型,float16 可以减少内存使用。
--enable-reasoning:启用推理功能。
--gpu-memory-utilization:设置 GPU 内存的利用率,这里设置为 0.9。
--max-model-len:设置模型能够处理的最大序列长度,这里设置为 8192。

如有需要其它参数可通过python -m vllm.entrypoints.openai.api_server --help查看

运行./start_gml.sh启动大模型,看到如下证明大模型启动成功

测试验证

算力云主机没有公网ip,需要内网穿透,点击自定义服务:

根据提示进行操作,注意要代理的端口,我的是8000

代理成功后,就可以访问 http://127.0.0.1:8000/openapi.json验证是否代理成功

 接着我们就可以调用大模型了,写个简单的my_model.py

from openai import OpenAIclient = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="haha123")
resp = client.chat.completions.create(model="./models/ZhipuAI/glm-4-9b-chat", messages=[{"role": "user", "content": "你是谁"}], )
print(resp)

注意这里大模型的名称可以通过http://127.0.0.1:8000/v1/models查看id就是模型名称

运行my_model.py结果如下,到此gml大模型安装成功,使用后记得关机不然会一直扣费

http://www.lqws.cn/news/572509.html

相关文章:

  • 疏通经脉: Bridge 联通逻辑层和渲染层
  • 模拟多维物理过程与基于云的数值分析-AI云计算数值分析和代码验证
  • 生物实验室安全、化学品安全
  • 【notes2】并发,IO,内存
  • 30套精品论文答辩开题报告PPT模版
  • Gemini cli Quickstart
  • 数据结构复习4
  • 常用指令合集(DOS/Linux/git/Maven等)
  • debug的计算表达式
  • 《平行宇宙思维如何让前端错误处理无懈可击》
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 20(题目+回答)
  • 各种常用的串口助手工具分享
  • 第10篇 图像语义分割和目标检测介绍
  • 循环神经网络的概念和案例
  • 带读YOLOv13,HyperACE | FullPAD到底是什么
  • 个人计算机系统安全、网络安全、数字加密与认证
  • 数据库中的 DDL(Data Definition Language,数据定义语言) 用于定义或修改数据库结构(如库、表、索引、约束等)。
  • 机器学习-02(深度学习的基本概念)
  • 智能新纪元:大语言模型如何重塑电商“人货场”经典范式
  • 【QT】信号和槽(1) 使用 || 定义
  • 深入学习 GORM:记录插入与数据检索
  • MySQL技巧
  • 【ad-hoc】# P12414 「YLLOI-R1-T3」一路向北|普及+
  • Requests源码分析:面试考察角度梳理
  • MySQL 架构
  • 理解 Confluent Schema Registry:Kafka 生态中的结构化数据守护者
  • 第10.4篇 使用预训练的目标检测网络
  • 学习使用Visual Studio分析.net内存转储文件的基本用法
  • C# 委托(调用带引用参数的委托)
  • 计算机组成原理与体系结构-实验四 微程序控制器 (Proteus 8.15)