【ChatGLM2-6B】小白入门及Docker下部署

【ChatGLM2-6B】小白入门及Docker下部署

  • 一、简介
    • 1、ChatGLM2是什么
    • 2、组成部分
    • 3、相关地址
  • 二、基于Docker安装部署
    • 1、前提
    • 2、CentOS7安装NVIDIA显卡驱动
      • 1)查看服务器版本及显卡信息
      • 2)相关依赖安装
      • 3)显卡驱动安装
    • 2、 CentOS7安装NVIDIA-Docker
      • 1)相关环境准备
      • 2)开始安装
      • 3)验证&使用
    • 3、 Docker部署ChatGLM2
      • 1)下载对应代码包和模型包
      • 2)上传至服务器并进行解压
      • 3)下载镜像并启动容器
      • 4)等待启动并访问页面
      • 5)注意事项
  • 三、开发环境搭建
    • 1) 代码远程编辑配置
    • 2) 一些基本的说明
    • 2、接口调用方式
      • 好了,开始你的探索吧~

一、简介

1、ChatGLM2是什么

  • 一个类似于ChatGPT的智能文本对话模型,支持页面方式进行对话(ChatGLM3已经支持图片分析和生成,这里由于研究仅限于文本,因此选择GLM2)
  • 支持训练与微调
  • 代码开源

2、组成部分

  • 模型:基本的模型矩阵,重量级的参数,大约十几个G,可以理解为是程序的初始化参数配置信息

    在这里插入图片描述

  • 代码:加载模型的py代码,ChatGLM2已经封装好了多种加载和对话的方式,支持窗口对话、WEB页面对话、Socket对话、HTTP接口对话等方式。

    在这里插入图片描述

3、相关地址

  • GitHub地址: https://github.com/THUDM/ChatGLM2-6B
  • 国内模型下载地址:https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2F&mode=list
  • 代码下载地址:https://github.com/THUDM/ChatGLM-6B
  • docker下部署文档:https://www.luckzym.com/tags/ChatGLM-6B/
  • windows下部署文档:https://github.com/ZhangErling/ChatGLM-6B/blob/main/deployment_windows.md
  • 官方推荐指导手册:https://www.heywhale.com/mw/project/6436d82948f7da1fee2be59e

二、基于Docker安装部署

1、前提

  • 安装了docker

  • 16G以上显卡

2、CentOS7安装NVIDIA显卡驱动

  • 先查看显卡是否已经安装,没有安装再进行安装,已安装就跳过此步

    nvidia-smi # 如下图是已安装
    

    nvidia-smi

如果没有相关信息,再进行显卡的安装。

1)查看服务器版本及显卡信息

# Linux查看显卡信息:(ps:若找不到lspci命令,可以安装 yum install pciutils)
lspci | grep -i vga

# 使用nvidia GPU可以:
lspci | grep -i nvidia

# 查看显卡驱动
cat /proc/driver/nvidia/version
  • 系统:CentOS7 Linux
  • 显卡:iGame GeForce RTX 3070 Ti Advanced OC 8G

2)相关依赖安装

  • 安装依赖环境
yum install kernel-devel gcc -y
  • 检查内核版本和源码版本,保证一致
ls /boot | grep vmlinu
rpm -aq | grep kernel-devel
  • 屏蔽系统自带的Nouveau
# 查看命令:
lsmod | grep nouveau
# 修改dist-blacklist.conf文件:
vim /lib/modprobe.d/dist-blacklist.conf
# 将nvidiafb注释掉:
blacklist nvidiafb 

# 然后添加以下语句:
blacklist nouveau
options nouveau modeset=0

可以在屏蔽之后重启系统并在命令行中输入lsmod | grep nouveau查看命令观察是否已经将其屏蔽。

  • 重建Initramfs Image步骤
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)
  • 修改运行级别为文本模式
systemctl set-default multi-user.target
  • 重新启动
reboot

3)显卡驱动安装

  • 去到NVIDIA官网下载对应的显卡驱动
网址:https://www.nvidia.cn/Download/index.aspx?lang=cn

NVIDIA显卡驱动下载

在这里点击搜索即可弹出对应的下载软件包

Display-Driver

  • 开始安装其软件包
chmod +x NVIDIA-Linux-x86_64-525.105.17.run
./NVIDIA-Linux-x86_64-525.105.17.run
  • 验证是否安装成功
nvidia-smi

nvidia-smi

到此CentOS7已完成NVIDIA显卡驱动的安装

2、 CentOS7安装NVIDIA-Docker

1)相关环境准备

在开始之前我们需要确保已经安装好了Docker的环境,并且也安装了Docker Compose

需要注意的是,因为NVIDIA-Docker软件的存在,我们不需要在宿主机上安装CUDA工具包,这样我们可以根据不同的需要选择合适的版本。

NVIDIA容器工具包对应的Github代码仓库地址:https://github.com/NVIDIA/nvidia-docker

2)开始安装

# 获得当前操作系统的发行版和版本,以便下载适用于NVIDIA Docker Toolkit的正确仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

# 下载NVIDIA Docker Toolkit仓库,并将其保存为文件到/etc/yum.repos.d/目录中,使得包管理器够定位并安装工具包
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

# 使用yum安装nvidia-container-toolkit软件包
sudo yum install -y nvidia-container-toolkit

# 重新启动Docker守护程序,以便它识别通过安装NVIDIA Docker Toolkit进行的新配置更改
sudo systemctl restart docker

3)验证&使用

# 在现有的GPU上启动启用GPU的容器,并运行nvidia-smi命令
docker run --gpus all nvidia/cuda:10.0-base nvidia-smi

# 在两个GPU上启动启用GPU的容器,并运行nvidia-smi命令
docker run --gpus 2 nvidia/cuda:10.0-base nvidia-smi

# 在特定的GPU上启动启用GPU的容器,并运行nvidia-smi命令
docker run --gpus '"device=1,2"' nvidia/cuda:10.0-base nvidia-smidocker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:10.0-base nvidia-smi

# 这个命令演示了如何为容器指定能力(图形、计算等)
# 请注意,这种方式很少使用
docker run --gpus all,capabilities=utility nvidia/cuda:10.0-base nvidia-smi

3、 Docker部署ChatGLM2

1)下载对应代码包和模型包

链接:https://pan.baidu.com/s/1RhoYQ6wL5eJM8Qd0K4BYAg?pwd=zws4 
提取码:zws4

2)上传至服务器并进行解压

解压完成后的目录如下

在这里插入图片描述

3)下载镜像并启动容器

注意:在线环境直接使用以下代码启动即可,离线环境需要先手动下载和加载woshikid/chatglm2-6b镜像,然后在使用docker进行启动

docker run --gpus all  --runtime=nvidia  \
-p 7860:7860 \
-p 8000:8000 \
-p 8501:8501 \
-p 80:80 \
-v ./ChatGLM2-6B:/ChatGLM2-6B \
-v ./model/chatglm2-6b:/chatglm2-6b \
--name chatglm2-webdemo \
-dit woshikid/chatglm2-6b \
python web_demo.py

其中,-p表示端口映射,物理机的7860端口会映射容器的7860端口,这个端口是web页面的端口

-v后跟的参数表示将物理机上的对应目录映射进入docker容器中

以下是启动的不同的访问方式和端口信息:

woshikid/chatglm2-6b python cli_demo.py  # 小黑窗口对话
-p 8000:8000 woshikid/chatglm2-6b python api.py # HTTP接口对话
-p 8000:8000 woshikid/chatglm2-6b python openai_api.py # HTTP接口对话
-p 7860:7860 woshikid/chatglm2-6b python web_demo.py  # WEB页面对话
-p 8501:8501 woshikid/chatglm2-6b streamlit run web_demo2.py  # streamlit框架的WEB页面对话

4)等待启动并访问页面

http://ip:7860即可进入对话页面

在这里插入图片描述

5)注意事项

通过nvidia-smi命令可以查看显卡使用情况

在这里插入图片描述

另外,如果是自己从github上下载的官方代码,需要修改下web_demo.py代码允许远程访问,否则默认会只允许本机访问。

在这里插入图片描述

三、开发环境搭建

1) 代码远程编辑配置

通常,本地的代码开发机器性能不足以支持ChatGLM2-6B的运行,但是在服务器上去编辑代码又十分的不方便,因此使用一种可以远程开发的方法来进行开发。下面是对这种方法的步骤介绍:

各种开发工具基本上都有这种功能,这里以Idea或者PyCharm开发工具来说明,其原理是本地开发后,利用SFTP将代码推送到远程服务器来进行对应的调试。

1)首先打开IDEA或PyCharm开发工具,打开我们的代码。
在这里插入图片描述

2)打开开发环境配置。

在这里插入图片描述

3)新建一个SFTP配置,并在Connection中填写服务器连接配置信息。

在这里插入图片描述

4)点击Mappings,将本地的代码地址和服务器上的代码地址做映射,这里服务器上的代码地址是我们ChatGLM-6B的地址,用于映射到容器内部,然后点击确认。

在这里插入图片描述

5)代码推送。

6)这样,就可以实现本地编写代码,推送到远程进行调试了,十分的便捷。

报错的信息不用管,因为本地没有环境,所以只能当编辑器使用。

2) 一些基本的说明

在这里插入图片描述

2、接口调用方式

curl -X POST "http://127.0.0.1:8000" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你好", "history": []}'

回复的内容:

{
  "response":"你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。",
  "history":[["你好","你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。"]],
  "status":200,
  "time":"2023-03-23 21:38:40"
}

好了,开始你的探索吧~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“产业大数据”助推园区实现可持续发展!

​产业园区在现代经济体系中扮演着重要角色,不仅是地方经济的重要支柱,更是企业发展的舞台。产业园区要想实现可持续的长远发展,不仅需要不断的招引优质企业入驻,更要时刻关注园内的企业,培育有潜力的企业,…

华为OD机试 - 最优策略组合下的总的系统消耗资源数(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明4、思路 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷…

FPGA时序分析与约束(10)——生成时钟

一、概述 最复杂的设计往往需要多个时钟来完成相应的功能。当设计中存在多个时钟的时候,它们需要相互协作或各司其职。异步时钟是不能共享确定相位关系的时钟信号,当多个时钟域交互时,设计中只有异步时钟很难满足建立和保持要求。我们将在后面…

如何改善食品饮料包装生产企业的OEE?

食品饮料这类商品在我们的日常生活中十分常见,它们存在于各类商店、超市或路边的小店里。而食品饮料的包装是吸引人们购买该产品的一个重要因素。为了在这个市场中脱颖而出并提高盈利能力,企业需要关注设备的综合效率,即OEE(Overa…

数据结构-单链表-力扣题

移除链表元素 题目链接:力扣(LeetCode) 思路:和前面学的单链表的中间删除数据一样,使要被删除节点的前一个节点指向下要被删除节点的下一个节点,然后把要被删除的节点free掉。 具体实现过程:先…

docker搭建mysql环境

1. 基础环境 名称描述CentOS 7.6Linux操作系统版本docker 20.10.5docker版本mysql 8.0.29mysql镜像版本 2. 下载安装 使用docker命令下载mysql镜像 [rootzhouwei ~]# docker pull mysql:8.0.29查看docker仓库是否已经下载了mysql镜像 [rootzhouwei ~]# docker images将mys…

【PHP】医院HIS手术麻醉临床信息管理系统源码 实现术前、术中、术后全流程管理

手术麻醉系统是一套以数字形式与医院信息系统(如HIS、EMR、LIS、PACS等)和医疗设备等软、硬件集成并获取围手术期相关信息的计算机系统,其核心是对围手术期患者信息自动采集、储存、分析并呈现。该系统通过整合围手术期中病人信息、人员信息、…

最速下降法

目录 前言 一、梯度下降相关数学概念 二、最速下降法实战 2.1、例图1 2.2、Matlab代码实现 2.3、例题2 三、小结 前言 最速下降法,在SLAM中,作为一种很重要求解位姿最优值的方法,缺点很明显:迭代次数太多&#xff0c…

Linux笔记——Ubuntu子系统从系统盘迁移到非系统盘

Linux笔记——Ubuntu子系统从系统盘迁移到非系统盘 一、子系统迁移1. 关闭linux子系统2. 使用move-wsl进行迁移 二、 虚拟机子系统瘦身 安了子系统还没用几天,C盘提示我没空间了。。。剩余0kb的那种。。。Ubuntu安装的时候默认按C盘了,所以还是移走腾点地…

现货白银的代码为什么不是ag

如果大家对求学时期所学的化学知识还记忆犹新,应该记得白银这种物质的化学元素符号是ag,但在参与伦敦银交易的时候,大家也许会发现,在大多数平台的交易软件中,它的代码并没有使用到这个简写符号。 其实在国际现货贵金属…

Git查询某次提交属于哪个分支

在Android studio(JetBrains系列也类似)左下角,可以看到所有提交信息。 选中某一次提交信息,右键,选择“Copy Revision Number”,如下图: 打开Android studio的Terminal,输入git b…

使用 promise 重构 Android 异步代码

背景 业务当中写Android异步任务一直是一项挑战,以往的回调和线程管理方式比较复杂和繁琐,造成代码难以维护和阅读。在前端领域中JavaScript其实也面临同样的问题,Promise 就是它的比较主流的一种解法。 在尝试使用Promise之前我们也针对And…

【BUG解决】服务器没报警但是应用接口崩了....

最近遇到一个突发问题:服务器没报警但是应用接口崩了… 为其他业务系统提供一个接口,平时好好的,突然就嚷嚷反馈说访问不了了,吓得我赶紧跳起来! 正常情况下在系统崩溃前,我会收到很多系统报警&#xff0…

【Linux】补充:进程管理之手动控制进程,以及计划任务

目录 一、手动启动进程 1、理解前台启动与后台启动 2、如何完成前台启动后台启动的切换 3、完成并行执行多个任务 4、结束进程 1、kill 2、killall 2、pkill 二、计划任务 1、at一次性计划任务 2、实操 2、周期性计划任务 1、关于设置周期性任务的配置文件以及格式…

使用ffmpeg调用电脑自带的摄像头和扬声器录制音视频

1、打开cmd,执行chcp 65001,修改cmd的编码格式为utf8,避免乱码 2、执行指令ffmpeg -list_devices true -f dshow -i dummy,查看当前window的音频和视频名称 3、打开windows系统的"打开声音设置"–“麦克风隐私设置”–"允许应用访问你…

技术分享 | 测试平台开发-前端开发之数据展示与分析

测试平台的数据展示与分析,我们主要使用开源工具ECharts来进行数据的展示与分析。 ECharts简介与安装 ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表&#xff…

第七章《搞懂算法:线性回归是怎么回事》笔记

线性回归算法是机器学习算法中最简单的一类,线性回归算法主要用于连续值的预测问题。 7.1 什么是线性回归 这种刻画了不同变量之间关系的模型叫作回归模型,如果这个模型是线性的,则为线性回归模型。 线性回归主要是应用回归分析来确定两种…

EfficientNet 系列网络学习

EfficientNet V1 EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks 增加网络参数的方式有三种:深度、宽度和输入图像的分辨率。探究这三种方式对网络性能的影响,以及如何同时缩放这三种因素是 EifficentNet的主要贡献。 单独…

Centos7开放及查看端口

1、开放端口 firewall-cmd --zonepublic --add-port8888/tcp --permanent # 开放8888端口 firewall-cmd --zonepublic --remove-port8888/tcp --permanent #关闭8888端口 firewall-cmd --reload # 配置立即生效 2、查看防火墙所有开放的端口 firewall-cmd --zonepubl…

什么是数字化管理?产业园区如何进行数字化管理?

工业园区的数字化管理涉及利用技术和数据驱动的工具来优化工业园区环境中的运营、提高效率并改进决策流程。它通常包括使用各种数字技术和数据分析技术来监视、控制和增强公园运营的各个方面。 以下是工业园区数字化管理的一些关键方面以及如何实施: 1.数据收集和…