【ChatGLM2-6B】在只有CPU的Linux服务器上进行部署

2023-10-18 16:20

本文主要是介绍【ChatGLM2-6B】在只有CPU的Linux服务器上进行部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

ChatGLM2-6B 是清华大学开源的一款支持中英双语的对话语言模型。经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,具有62 亿参数的 ChatGLM2-6B 已经能生成相当符合人类偏好的回答。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。

准备工作

安装wget

  • 删除自带的wget: yum remove wget
  • 重新安装wget: yum -y install wget
  • 检测wget版本: rpm -qa | grep "wget"

若出现以下,则成功。

[root@localhost ~]# rpm -qa | grep "wget"
wget-1.14-18.el7_6.1.x86_64

安装ANACONDA

  • 官网下载页面: https://www.anaconda.com/download#downloads
  • Linux64位下载: wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
  • 安装: sh Anaconda3-2023.09-0-Linux-x86_64.sh
  • 会出现很多信息,一路yes下去,观看文档用q跳过
  • 查看版本验证是否安装成功: conda -V
(base) [root@localhost ~]# conda -V
conda 23.7.4

安装pytorch

  • 前往pytorch官网: https://pytorch.org/
  • 选择StableLinuxCondaPythonCPU
  • 执行给出的指令: conda install pytorch torchvision torchaudio cpuonly -c pytorch

创建虚拟Python环境

  • conda创建虚拟环境: conda create --name ChatGLM2 python=3.10.6 -y
  • –name 后面ChatGLM2为创建的虚拟环境名称
  • python=之后输入自己想要的python版本
  • -y表示后面的请求全部为yes,这样就不用自己每次手动输入yes了。
  • 激活虚拟环境: conda activate ChatGLM2

大语言模型ChatGLM2-6B安装

  • 源码/文档: https://github.com/THUDM/ChatGLM2-6B
  • 下载源码: git clone https://github.com/THUDM/ChatGLM2-6B
  • 创建ChatGLM2项目的虚拟环境: python -m venv venv
  • 激活虚拟环境venv: source ./venv/bin/activate
  • 安装依赖(豆瓣源): pip install -r requirements.txt -i https://pypi.douban.com/simple
  • 参数:-r 是read的意思,可以把要安装的文件统一写在一个txt中,批量下载
  • 参数:-i 后面是下载的网址,这里使用的是豆瓣源,下载安装大概十几分钟
  • 清华大学源: pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
  • 阿里云源: pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
  • 也可以离线安装
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install -r requirements.txt --no-index --find-links=/home/ChatGLM2/chatglm2-dependence
  • 安装依赖: pip install gradio -i https://pypi.douban.com/simple

从Hugging Face Hub下载模型实现和参数文件

  • 在上面的ChatGLM2-6B目录下新建THUDM文件夹
  • THUDM文件夹下新建chatglm2-6b文件夹和chatglm2-6b-int4文件夹
  • 下载模型实现和参数文件: git clone https://huggingface.co/THUDM/chatglm2-6b
  • 也可以仅下载模型实现: GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b
  • 然后从清华大学下载模型参数文件: https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2F&mode=list
  • 把下载后的所有文件放到上面新建的chatglm2-6b文件夹
  • 如果需要使用量化模型和参数,chatglm2-6b-int4的模型和参数文件地址: https://huggingface.co/THUDM/chatglm2-6b-int4,下载方式与chatglm2-6b一样
  • 国内无法访问huggingface.co,可以让国外的朋友帮忙下载
  • 可以从这里下载模型实现
  • 然后从清华大学下载参数文件

修改启动脚本

如果使用有chatglm2-6b-int4,需要修改cli_demo.pyapi.pyweb_demo.pyweb_demo2.py

# 修改前
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()# 修改后
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b-int4", trust_remote_code=True)
# GPU用cuda(),CPU用float()
model = AutoModel.from_pretrained("THUDM/chatglm2-6b-int4", trust_remote_code=True).float()

修改 web_demo.py文件

  • 除了需要按上面修改,还需要在最后一行,将demo.queue().lanuch函数改为如下
demo.queue().launch(share=True, inbrowser=True, server_name = '0.0.0.0')
  • predict函数中,第二句话改为
for response, history in model.stream_chat ( tokenizer ,input ,history,past_key_values=past_key_values, return_past_key_values=False, max_length=max_length, top_p=top_p,
temperature=temperature)

启动

  • 启动基于 Gradio 的网页版 demo: python web_demo.py
  • 启动基于 Streamlit 的网页版 demo: streamlit run web_demo2.py
  • 网页版 demo 会运行一个 Web Server,并输出地址。在浏览器中打开输出的地址即可使用。 经测试,基于 Streamlit 的网页版 Demo 会更流畅。
  • 命令行 Demo: python cli_demo.py

API部署

  • 安装额外的依赖: pip install fastapi uvicorn -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
  • 运行: python api.py
  • 通过 POST 方法进行调用:
curl -X POST "http://192.168.3.109:8000" -H "Content-Type: application/json" -d "{\"prompt\": \"你好\", \"history\": []}"
  • 得到的返回值为
{"response":"你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。","history":[["你好","你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。"]],"status":200,"time":"2023-10-18 14:26:48"}

可视化交互界面

在这里插入图片描述

协议

  • 本仓库的代码依照 Apache-2.0 协议开源,ChatGLM2-6B 模型的权重的使用则需要遵循 Model LicenseChatGLM2-6B 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。

总结

  • 如果机器的内存资源不多,命令行交互模式、可视化模式、API模式,通常只能运行一种
  • 再启动另外一个脚本时,会导致前一个启动的进行被killed
  • ChatGLM2在多个中文数据集上测试结果优于GPT,比上代版本ChatGLM1有较大改善,受限于训练数据和资源,从实际效果看推理对话内容仍比较简单,本次部署在云端的CPU,推理过程需要几分钟,甚至十几分钟,不过重在体验,看下效果。有兴趣的话使用GPU能够较大程度提高反应速度,几秒就能给出答案。

这篇关于【ChatGLM2-6B】在只有CPU的Linux服务器上进行部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/233771

相关文章

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境