【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) 一些基本的说明
  • 四、使用
    • 1、启动命令
    • 2、接口调用方式
    • 2、模型微调
      • 1) 先安装依赖
      • 2) 进行微调
      • 3) 报错问题解决
      • 4)微调完成
    • 3、微调效果评估
      • 1)修改evaluate.sh脚本
      • 2)执行评估
      • 3)评估结果
    • 4、部署新模型
      • 1)修改web_demo.sh文件

一、简介

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 # 如下图是已安装
    

    在这里插入图片描述

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

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

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

  • 开始安装其软件包
chmod +x NVIDIA-Linux-x86_64-525.105.17.run
./NVIDIA-Linux-x86_64-525.105.17.run
  • 验证是否安装成功
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
-p 8000:8000 woshikid/chatglm2-6b python openai_api.py
-p 7860:7860 woshikid/chatglm2-6b python web_demo.py
-p 8501:8501 woshikid/chatglm2-6b streamlit run web_demo2.py

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) 一些基本的说明

在这里插入图片描述

四、使用

请先学习一篇文章,以了解什么是微调以及如何进行微调:https://zhuanlan.zhihu.com/p/641047705?utm_id=0

1、启动命令

基础镜像:woshikid/chatglm2-6b

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-6b \
-dit woshikid/chatglm2-6b \
python web_demo.py

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

woshikid/chatglm2-6b python cli_demo.py
-p 8000:8000 woshikid/chatglm2-6b python api.pyW
-p 8000:8000 woshikid/chatglm2-6b python openai_api.py
-p 7860:7860 woshikid/chatglm2-6b python web_demo.py
-p 8501:8501 woshikid/chatglm2-6b streamlit run web_demo2.py

vim web_demo.py

在这里插入图片描述

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"
}

2、模型微调

微调参数文件为.json文件,先将你的微调数据和验证数据处理成如下格式:

{"content": "类型#裤*版型#宽松*风格#性感*图案#线条*裤型#阔腿裤", "summary": "宽松的阔腿裤这两年真的吸粉不少,明星时尚达人的心头爱。毕竟好穿时尚,谁都能穿出腿长2米的效果宽松的裤腿,当然是遮肉小能手啊。上身随性自然不拘束,面料亲肤舒适贴身体验感棒棒哒。系带部分增加设计看点,还让单品的设计感更强。腿部线条若隐若现的,性感撩人。颜色敲温柔的,与裤子本身所呈现的风格有点反差萌。"}
{"content": "类型#裙*风格#简约*图案#条纹*图案#线条*图案#撞色*裙型#鱼尾裙*裙袖长#无袖", "summary": "圆形领口修饰脖颈线条,适合各种脸型,耐看有气质。无袖设计,尤显清凉,简约横条纹装饰,使得整身人鱼造型更为生动立体。加之撞色的鱼尾下摆,深邃富有诗意。收腰包臀,修饰女性身体曲线,结合别出心裁的鱼尾裙摆设计,勾勒出自然流畅的身体轮廓,展现了婀娜多姿的迷人姿态。"}
{"content": "类型#上衣*版型#宽松*颜色#粉红色*图案#字母*图案#文字*图案#线条*衣样式#卫衣*衣款式#不规则", "summary": "宽松的卫衣版型包裹着整个身材,宽大的衣身与身材形成鲜明的对比描绘出纤瘦的身形。下摆与袖口的不规则剪裁设计,彰显出时尚前卫的形态。被剪裁过的样式呈现出布条状自然地垂坠下来,别具有一番设计感。线条分明的字母样式有着花式的外观,棱角分明加上具有少女元气的枣红色十分有年轻活力感。粉红色的衣身把肌肤衬托得很白嫩又健康。"}
{"content": "类型#裙*版型#宽松*材质#雪纺*风格#清新*裙型#a字*裙长#连衣裙", "summary": "踩着轻盈的步伐享受在午后的和煦风中,让放松与惬意感为你免去一身的压力与束缚,仿佛要将灵魂也寄托在随风摇曳的雪纺连衣裙上,吐露出<UNK>微妙而又浪漫的清新之意。宽松的a字版型除了能够带来足够的空间,也能以上窄下宽的方式强化立体层次,携带出自然优雅的曼妙体验。"}

其中content是向模型输入的内容,summary为模型应该输出的内容。

其中微调数据是通过本批数据对模型进行调试(文件是train.json),验证数据是通过这些数据验证调试的结果(文件是dev.json)。

1) 先安装依赖

pip install rouge_chinese  -i https://pypi.douban.com/simple/
pip install nltk  -i https://pypi.douban.com/simple/
pip install datasets  -i https://pypi.douban.com/simple/
pip install jieba  -i https://pypi.douban.com/simple/
pip install transformers  -i https://pypi.douban.com/simple/

​ train.sh:微调

​ evaluate.sh: 调试结果评估

2) 进行微调

微调参数如下:

PRE_SEQ_LEN=128
LR=2e-2
NUM_GPUS=1torchrun --standalone --nnodes=1 --nproc-per-node=$NUM_GPUS main.py \--do_train \--train_file /chatglm2-6b/train.json \--validation_file /chatglm2-6b/dev.json \--preprocessing_num_workers 10 \--prompt_column content \--response_column summary \--overwrite_cache \--model_name_or_path /chatglm2-6b \--output_dir output/adgen-chatglm2-6b-pt-$PRE_SEQ_LEN-$LR \--overwrite_output_dir \--max_source_length 512 \--max_target_length 64 \--per_device_train_batch_size 1 \--per_device_eval_batch_size 1 \--gradient_accumulation_steps 16 \--predict_with_generate \--max_steps 3000 \--logging_steps 10 \--save_steps 1000 \--learning_rate $LR \--pre_seq_len $PRE_SEQ_LEN \

在这里插入图片描述

修改 train.shevaluate.sh 中的 train_filevalidation_filetest_file为你自己的 JSON 格式数据集路径,并将 prompt_columnresponse_column 改为 JSON 文件中输入文本和输出文本对应的 KEY。可能还需要增大 max_source_lengthmax_target_length 来匹配你自己的数据集中的最大输入输出长度。并将模型路径 THUDM/chatglm-6b 改为你本地的模型路径。 其中的LR=2e-2表示的是调整的权重,2e-2表示0.0002,可以适当降低,让模型也可以回答其他问题。

在这里插入图片描述

3) 报错问题解决

  1. 出现了$‘\r’: command not found错误

    可能因为该Shell脚本是在Windows系统编写时,每行结尾是\r\n
    而在Linux系统中行每行结尾是\n
    在Linux系统中运行脚本时,会认为\r是一个字符,导致运行错误

    使用dos2unix 转换一下就可以了

    dos2unix <文件名># dos2unix: converting file one-more.sh to Unix format ...

    -bash: dos2unix: command not found

    就是还没安装,安装一下就可以了

    apt install dos2unix
    
  2. 报错RuntimeError: Library cudart is not initialized

    在这里插入图片描述

可以把 --quantization_bit 4 去掉试试!!!

在这里插入图片描述

4)微调完成

在这里插入图片描述

3、微调效果评估

1)修改evaluate.sh脚本

在这里插入图片描述

2)执行评估

bash evaluate.sh

在这里插入图片描述

3)评估结果

在这里插入图片描述

微调评估的文件位于./output/adgen-chatglm2-6b-pt-128-2e-2/generated_predictions.txt

其中,labels 是 dev.json 中的预测输出,predict 是 ChatGLM-6B 生成的结果

在这里插入图片描述

4、部署新模型

1)修改web_demo.sh文件

在这里插入图片描述

设置端口及允许远程访问

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马斯克星链与芯事:30亿美元炸出卫星互联网革命,GPU算力创无限可能

★卫星互联网&#xff1b;算力&#xff1b;卫星通信&#xff1b;互联网&#xff1b;低轨卫星互联网&#xff1b;5G基础设施&#xff1b;GPT-4 Turbo&#xff1b;算力&#xff1b;地面通信&#xff1b;液冷&#xff1b;水冷&#xff1b;AI服务器&#xff1b;东数西算&#xff1b…

【MySQL】内连接和外连接

内连接和外连接 前言正式开始内连接外连接左外连接右外连接 前言 前一篇讲多表查询的时候讲过笛卡尔积&#xff0c;其实笛卡尔积就算一种连接&#xff0c;不过前一篇讲的时候并没有细说连接相关的内容&#xff0c;本篇就来详细说说表的连接有哪些。 本篇博客中主要用到的还是…

SQL Server Profiler基础使用

文章目录 SQL Server Profiler基础使用简介如何打开直接打开Microsoft SQL Server Management Studio工具栏打开 配置跟踪新建跟踪跟踪属性配置常规配置事件选择 启动跟踪跟踪时执行脚本跟踪记录 暂停跟踪停止跟踪 SQL Server Profiler基础使用 简介 一个图形界面工具&#x…

HR9110H 单通道低压 H 桥电机驱动芯片

HR9110H为消费类产品、玩具和其它低电压或者电池供电的运动控制类应用提供了一个集成的电机驱动器解决方案。HR9110H是SOP8封装&#xff0c;且是无铅产品&#xff0c;符合环保标准。 HR9110H能够驱动一个直流有刷电机或其他诸如螺线管的器件。输出驱动模块由PMOSNMOS功率管构成…

前端(HTML + CSS + JS)

文章目录 一、HTML1. 概念&#xff08;1&#xff09;HTML 文件基本结构&#xff08;2&#xff09;HTML代码框架 2. 、HTML常见标签 二、CSS1. CSS基本语法规范2. 用法&#xff08;1&#xff09; 引用方式&#xff08;2&#xff09;选择器&#xff08;3&#xff09;常用元素属性…

Django JSONField/HStoreField SQL注入漏洞(CVE-2019-14234)

漏洞描述 Django 于2019年8月1日 日发布了安全更新&#xff0c;修复了 JSONField 和 HStoreField 两个模型字段的 SQL 注入漏洞。 参考链接&#xff1a; Django security releases issued: 2.2.4, 2.1.11 and 1.11.23 | Weblog | DjangoDjango JSONField SQL注入漏洞&#x…

记录华为云服务器(Linux 可视化 宝塔面板)

文章目录 前言一、购买-配置选型二、重置密码三、登陆服务器使用macOS系统自带的终端&#xff08;Terminal&#xff09;使用移动设备登录下载华为云App连接云服务器 总结如有启发&#xff0c;可点赞收藏哟~ 前言 花了&#xffe5;88.02大洋开启个人服务器搭建之旅~ 当前为Linu…

“圆柱-计算公式“技术支持网址

该软件可以计算圆柱的底面圆周长、底面积、侧面积和体积。 您在使用中有遇到任何问题都可以和我们联系。我们会在第一时间回复您。 邮箱地址&#xff1a;elmo30zeongmail.com 谢谢&#xff01;

网安融合新进展:Check Point+七云网络联合研发,加固大型企业边缘、分支侧安全

AI 爆火、万物互联&#xff0c;底层需要更灵活的网络设施提供支撑。据国际分析机构 Gartner 预测&#xff0c;到 2024 年&#xff0c;SD-WAN&#xff08;软件定义的广域网&#xff09;使用率将达到 60%。不过边缘和终端兴起&#xff0c;未经过数据中心的流量也在成为新的安全风…

vue 通过ref调用router-view子组件的方法

由于用的vue2.7版本&#xff0c;但用了vue3 setup的语法&#xff1b; 注意&#xff1a;是vue2的template结构&#xff0c;vue3的setup语法&#xff1b;非这种情况需要举一反三。 处理方案&#xff1a; 1、对router-view加上ref template修改 直接对router-view加上ref&#x…

编程入门基础知识,编程入门推荐,中文编程工具下载,软件定制开发

编程入门基础知识&#xff0c;编程入门推荐&#xff0c;中文编程工具下载&#xff0c;软件定制开发 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型…

webshell之基于框架免杀

thinkphp array_map_recursive函数 array_map_recursive函数分析 这里存在一个call_user_func命令执行函数 免杀效果 B函数 免杀效果 B函数分析 exec函数分析 在exec函数用存在有个类调用&#xff0c;且所有的参数都可控 smarty_php_tag函数 免杀效果 smarty_php_tag函数分析…