超详细!10分钟部署ChatGLM2-6B,效果测试:不愧是中文榜单第一

引言

6月份清华大学发布了ChatGLM2,相比前一版本推理速度提升42%。最近,终于有时间部署测试看看了,部署过程中遇到了一些坑,也查了很多博文终于完成了。本文详细整理了ChatGLM2-6B的部署过程。另外:作者已经把模型以及安装依赖全部整理好了

本文主要分为七个部分,分别为:显卡驱动安装、Python虚拟环境、ChatGLM2依赖安装、模型文件准备、模型加载Demo测试、模型API部署、OpenAI接口适配,具体如下图所示。「只要机器显卡驱动已装,按步骤10分钟即可完成安装测试!」

说在前面

本文主要安装环境为:Centos7(8C24G)、T4(16G)显卡,由于实验室的电脑不能联网,本文主要是离线安装(在线安装依然适用)。这里将整个安装包分为了四个个部分:ChatGLM2依赖文件、ChatGLM2模型文件、ChatGLM2 Demo展示文件、Other文件,如下图所示。「注:不论您是离线安装,还是在线安装,按步骤直接将下面这几个文件拷贝至相应目录下面,直接启动Demo测试就能运行此程序」,那么现在开始!!!

1.显卡驱动安装

跑模型少不了了显卡驱动,这部分主要内容包括:显卡驱动型号对齐、驱动依赖安装、显卡安装等三个部分。如果安装过了显卡驱动可以跳过这一步

「注」:对应Linux机器来说,显卡的安装需要用到root用户,不能使用应用用户。如果是自己安装测试,直接root用户一套下来也没有问题,如果涉及企业级应用或者对机器权限有限制,需要联系系统管理员要服务器root权限。

1、查看服务器型号:

cat /etc/redhat-release   

2、查看服务器显卡型号:

sudo lshw -numeric -C display  或  lspci | grep -i vga   

3、下载显卡驱动

访问英伟达官网:https://www.nvidia.cn/Download/index.aspx?lang=cn,根据自己显卡的系列型号,选择对应的版本,进行下载。如下图所示: 我使用的显卡是T4,操作系统是Centos7.9,所以选择这个版本。这里又一点需要注意,CUDA Toolkit的版本需要和使用的Pytorch、Tensorflow等框架版本一致。目前我看Pytorch最高可以支持11.8的CUDA版本。如果您的显卡驱动和我一样,可以直接在我的资源包里面获取,具体为:./packages/NVIDIA-Linux-x86_64-515.105.01.run

4、安装GCC、kernal组件、dkms等相关依赖

yum install gcc   yum install gcc-c++   yum -y install kernel-devel   yum -y install kernel-headers   yum -y install epel-release   yum -y install dkms   

5、关闭nouveau。

其中Nouveau 是由第三方为 NVIDIA 显卡开发的一个开源 3D 驱动,也没能得到 NVIDIA 的认可与支持。虽然 Nouveau Gallium3D 在游戏速度上还远远无法和 NVIDIA 官方私有驱动相提并论,不过却让 Linux 更容易的应对各种复杂的 NVIDIA 显卡环境,让用户安装完系统即可进入桌面并且有不错的显示效果,所以,很多 Linux 发行版默认集成了 Nouveau 驱动,在遇到 NVIDIA 显卡时默认安装。企业版的Linux 更是如此,几乎所有支持图形界面的企业 Linux 发行版都将 Nouveau 收入其中。

对于个人桌面用户来说,处于成长阶段的 Nouveau 并不完美,与企业版不一样,个人用户除了想让正常显示图形界面外很多时候还需要一些 3D 特效,Nouveau 多数时候并不能完成,而用户在安装 NVIDIA 官方私有驱动的时候 Nouveau 又成为了阻碍,不禁用 Nouveau 安装时总是报错, 错误如下:ERROR: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver……

  • 1)查看是否有nouveau在运行:
lsmod | grep nouveau   
  • 2)修改系统黑名单配置文件,进入到/etc/modprobe.d文件夹下面,找到具有blacklist.conf字样的文件。通过vim修改该配置文件,在文件中新增以下内容,最后通过!wq保存。
blacklist nouveau   blacklist lbm-nouveau   options nouveau modeset=0   alias nouveau off   alias lbm-nouveau off   
  • 3)更新内核服务器参数(如果第一个命令不行,可以尝试第二个)
update-initramfs -u  或者  dracut --force   
  • 4)重启服务器
reboot   
  • 5)再次查看是否有nouveau在运行,如果没有,则表示nouveau完全关闭了。
lsmod | grep nouveau   

5、安装显卡驱动。

将驱动拷贝到服务器上,执行以下命令,(如果安装报错,请看下面第6条):

chmod +x NVIDIA-Linux-x86_64-515.105.01.run   sh NVIDIA-Linux-x86_64-515.105.01.run   

6、显卡安装报错排查

在安装过程中,我主要遇到的报错为:ERROR:Unable to find the kernel source tree for the currently running kernel… 遇到这个问题的时候,网上看了很多的例子,这里再做一下整理。这个报错意思是说操作系统运行的内核版本与kernel-devel不一致。这里将两者版本对齐就可以了。具体操作如下:

  • 1)查看系统运行版本的内核编号
cat /proc/version   
  • 2)列出目前系统所有内核相关资源
rpm -qa | grep kernel   
  • 或者直接列出安装的kernel-devel、kernel-headers的版本
yum info kernel-devel、kernel-headers   

如下图所示: 可以发现,服务器运行的内核编号和kernel-devel、kernel-headers的版本编号并不一样。这个时候有两种做法,一种是让服务器的内核版本编号与kernel-devel、kernel-headers版本编号对齐,另外一种是让kernel-devel、kernel-headers的版本编号与服务器系统运行的内核编号对齐。

  • 1)系统内核编号与kernel-devel等编号对齐。
# 根据kernel-devel编号安装对应的系统内核   yum install kernel-3.10.0-1160.95.1.el7.x86_64   # 设置系统默认启动内核版本   grub2-set-default kernel-3.10.0-1160.95.1.el7.x86_64   # 重启服务器   reboot   # 再次进入服务器,查看系统运行内核编号   cat /proc/version   
  • 2)kernel-devel等编号与系统内核编号对齐(这里假如系统内核编号为:kernel-3.10.0-1160.95.1.el7.x86_64)
# 根据系统内核编号安装对应的kernel-devel、kernel-headers   yum install kernel-headers-3.10.0-1160.95.1.el7.x86_64   yum install kernel-devel-3.10.0-1160.95.1.el7.x86_64   

以上不管是按照哪种方式,得到的结果如下图所示,此时按照上面第5步的命令,安装显卡驱动就可以了。 另外,如果有其它的服务,需要之前的内核,那么就需要给服务器切换内核。具体操作如下:

# 进入到/boot/grub2或者/etc目录下面,其中:/etc/grub2.cfg文件是一个文件链接,实际链接到/boot/grub2/grub.cfg   #看一下是否有:grub.cfg,如果没有需要创建。   grub2-mkconfig -o /boot/grub2/grub.cfg      #查看当前内核   grub2-editenv list      #查看已安装内核   awk -F' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg      # 设置默认启动版本   grub2-set-default xx #xx为你看到的内核编号   # 重建内核配置文件   grub2-mkconfig -o /boot/grub2/grub.cfg   # 重启生效   reboot   

按照以上方式解决了报错问题之后,再按照第 5) 步执行显卡安装命令,最后通过nvidia-smi查看显卡安装是否成功。具体命令如下所示:

# 执行显卡安装命令   chmod +x NVIDIA-Linux-x86_64-515.105.01.run   sh NVIDIA-Linux-x86_64-515.105.01.run   # 按照以上命令完成安装,通过以下命令查看是否安装成功。   nvidia-smi   

最后截图如下所示:

Python虚拟环境创建

1、为什么要安装Python虚拟机环境?

答:一台服务器上面,可能需要跑多个模型,每个模型所依赖的python版本或者依赖包的版本不同,比如:模型A依赖的python2.7版本、transformers4.30.2,模型B依赖的是python3.8的版本、transformers4.26.1;这就需要做python虚拟机环境的隔离。如果您这台服务器未来就单独跑这一个模型,可以忽略这一步,也没有问题。

2、创建Python虚拟环境方法

python虚拟机环境创建大概有两个主流的方法:一个是安装virtualenv库,实现python虚拟机环境管理;另外一个是通过conda。因为自己一开始就用的conda,所以对virtualenv不是很熟悉,所以这里主要介绍通过conda的方式创建Python虚拟环境。如果有小伙伴对virtualenv感兴趣,百度一下应该有很多教程。

3、Miniconda介绍

个人比较喜欢Miniconda,自己需要什么库就自己下载安装。以下是Miniconda和Anaconda的对比。它们两个非常流行的Python发行版。Miniconda只包含最基本的工具和库,需要手动安装其他工具;Anaconda是一个完整的发行版,包含许多重要工具和库。相对于Anaconda,Miniconda更加轻量级和灵活,适合具有需要在不同的环境中切换.

4、Miniconda的安装

  • 1)获取Miniconda安装包:因为chatglm2用到了pytorch框架,按照官网的建议,这里选择了python3.8版本。

「方法一」 直接拉到文章最后,获取方式放在最后,在others文件包中。

「方法二」 因为Miniconda自带python,所以要在官网下载python版本为3.8的Miniconda版本。下载地址为:https://docs.conda.io/en/latest/miniconda.html#linux-installers,具体截图如下。

  • 2)安装Miniconda

将Miniconda下载安装包放到你要放的目录,这里我放在:/home/work/miniconda 中,然后执行sh Miniconda3-latest-Linux-x86_64.sh 如下图所示:执行完之后按照提示进行回车(enter)就好了,注意:最后选择“yes”,这样每次启动,它都会自动给你切换到conda的base环境中。

  • 3) 创建虚拟机环境

miniconda支持创建多个虚拟环境,用来支撑不同版本(python)版本的代码,这里就为chatglm2-6b创建一个单独的python虚拟机环境,名字叫:chatglm2,后面会在该环境中安装跑chatglm-6b模型的所有依赖。下面是命令及截图:

conda create -n chatglm2 # 如果能连网,可以直接执行该命令,如果不能安装执行下面带‘clone’的命令   或conda create -n chatglm2 --clone base # 注:因为是离线安装这里选择clone的方式创建,直接创建会报错,因为这里是离线安装   conda env list # 获取环境列表   conda activate chatglm2 # 切换chatglm2环境   
  • 4) 默认python虚拟机环境设置

如果需要每次进入机器都默认使用chatglm2的环境,可以通过以下方式进行配置。(这一步不是必须的!)

vi ~/.bashrc   # 在最后面添加:conda activate chatglm     # 执行以下命令就可以了   source ~/.bashrc   

Chatglm2-6B依赖安装

1、将chatglm2的依赖包:chatglm2-dependence,拷贝到:/home/work/chatglm2/下面。(这里work可以是你自己用户名)如下图所示:2、通过pip进行安装,命令如下:

pip install --no-index --find-links=/home/work/chatglm2/chatglm2-dependence -r requirements.txt   

3、授之以渔(非必须)  chatglm2-dependence中的所有依赖,主要通过https://github.com/THUDM/ChatGLM2-6B的requirment.txt进行下载得到的。相关依赖包的下载命令为:

pip download -d ./chatglm2-dependence -r requirements.txt   

模型文件准备

1、将chatglm2的模型文件:chatglm2-model,拷贝到:/home/work/chatglm2/下面。如下图所示2、授之以渔(非必须) 模型文件是在https://huggingface.co/THUDM/chatglm2-6b/tree/main下载得到,具体截图如下:

模型加载Demo测试

关于模型加载Demo的展示,目前官网给出了三种方式:分别为命令行、基于 Gradio 的网页版、基于 Streamlit 的网页版。下面是具体的操作方法。

1、首先,将chatglm-web,拷贝到:/home/work/chatglm2/下面。如下图所示2、方法1:命令行模型Demo测试:进入到chatglm-web文件夹中,修改cli_demo.py文件中的模型路径地址,如下图所示具体地,将上面的“THUDM/chatglm2-6b”修改成自己的模型文件路径,我们这里模型路径是在:/home/work/chatglm2/chatglm2-model,修改之后结果如下:最后,wq!保存修改信息。这里有一个需要注意点:尽可能地用绝对路径,之前看有人部署的时候用的相对路径,在加载模型的时候找不到。修改完配置文件,执行以下命令,直接就可以启动该脚本了。

python cli_demo.py   

运行起来的截图如下所示:3、方法2,通过基于Gradio的网页版运行模型加载测试Demo。

和方法1类似,这里也主要是修改web_demo.py配置文件,将“THUDM/chatglm2-6b”修改成自己的模型文件路径。然后执行以下命令,直接就可以启动该脚本了。

python web_demo.py   

另外,如果要指定服务运行的IP和端口port可以按照以下方式修改。4、方法3,通过基于 Streamlit 的网页版运行模型加载测试Demo。

和方法1类似,这里也主要是修改web_demo2.py配置文件,将“THUDM/chatglm2-6b”修改成自己的模型文件路径。然后执行以下命令,直接就可以启动该脚本了。另外,该种方式可以直接通过命令指定服务的端口、IP地址。

streamlit run web_demo2.py --server.address='0.0.0.0' --server.port=8099   

6.模型API部署

对模型进行API接口封装,可以实现模型的联机调用,具体操作方法如下:

1、进入到/home/work/chatglm2/chatglm2-web下面,修改api.py的文件,更改模型文件路径,如若要修改服务端口,可以在下面修改port参数,这里修改成了8099端口。 2、安装相关依赖:fastapi、uvicorn。

pip install fastapi uvicorn   

「注」:如果前面直接把chatglm2-dependence相关依赖都安装了,这一步可以忽略。我把这部分的依赖也都放到chatglm2-dependence里面了。3、启动模型api服务

python api.py   

4、通过Postman、或者curl命令测试api接口是否正常。

# 通过命令行进行测试   curl -X POST "http://xxx.xxx.xxx.xxx:8099" \        -H 'Content-Type: application/json' \        -d '{"prompt": "猪为什么能够上树吃苹果", "history": []}'   

OpenAI接口适配

实现了OpenAI格式的流式API部署。即如果您之前调用的是ChatGPT的接口,可以实现缝切换chatglm2-6b。具体实现方式如下:

1、进入到/home/work/chatglm2/chatglm2-web下面,修改openai_api.py的文件,更改模型文件路径,如若要修改服务端口,可以在下面修改port参数,这里修改成了8099端口。2、然后启动服务

python openai_api.py   

3、测试服务的可用性, API 调用的示例代码为:

import openai   if __name__ == "__main__":       openai.api_base = "http://xxx.xxx.xxx.xxx:8099/v1"       openai.api_key = "none"       for chunk in openai.ChatCompletion.create(           model="chatglm2-6b",           messages=[               {"role": "user", "content": "你好"}           ],           stream=True       ):           if hasattr(chunk.choices[0].delta, "content"):               print(chunk.choices[0].delta.content, end="", flush=True)   

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值