ubuntu18.4(后改为20.4)部署chatglm2并进行基于 P-Tuning v2 的微调

news2024/11/24 13:48:36

下载驱动

NVIDIA显卡驱动官方下载地址
下载好对应驱动并放在某个目录下,

在Linux系统中安装NVIDIA显卡驱动前,建议先卸载Linux系统自带的显卡驱动nouveau。

禁用nouveau
首先,编辑黑名单配置。

vim /etc/modprobe.d/blacklist.conf

在文件的最后添加下面两行。

blacklist nouveau
options nouveau modeset=0

然后,输入下面的命令更新并重启。

update-initramfs -u
reboot

重启后输入下面的命令验证是否禁用成功,成功的话这行命令不会有输出。

lsmod | grep nouveau

驱动安装

首先,使用apt卸载已有的驱动,命令如下。

apt-get purge nvidia*

缺少gcc

J解决办法:

sudo apt install build-essential

然后gcc -v看是否安装成功

我的系统是ubuntu18.04

要装cuda12.0,需要升级系统至至少Ubuntu20.04,升级后apt-get upgrade有问题,还是卸载后重新安装了系统。

Ubuntu操作系统的版本号。命令如下

lsb_release -a

可以看到Ubuntu的系统版本号码为18.04

在终端的命令窗口输入下面的命令,进行软件源列表的更新。

sudo apt-get update 

完成上面的软件列表更新之后,使用下面的命令 进行更新包的安装。

sudo apt-get upgrade

重启 

reboot

apt install update-manager-core

sudo apt dist-upgrade

sudo do-release-upgrade

cuda10.1及以上的卸载:

  1. cd /usr/local/cuda-xx.x/bin/

  2. sudo ./cuda-uninstaller

  3. sudo rm -rf /usr/local/cuda-xx.x  

 升级后apt-get upgrade有问题,还是卸载后重新安装了系统。

官网下载并安装对应版本CUDA
  1. 根据系统支持版本下载对应版本的CUDA Toolkit,为了后续的torch安装作者此处选择CUDA12.1。官网链接
  2. 没有用,还是从bin文件夹中卸载cuda-uninstaller
  3. 选择所需版本,通过对应命令进行下载安装(注意此处需要记住下载文件的目录,之后需要找到)

sh cuda_12.0**.run

配置环境变量

编辑 /etc/profile 结尾添加如下

export CUDA_HOME=/usr/local/cuda-12.0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
PATH="$CUDA_HOME/bin:$PATH"
使生效

source /etc/profile

4.测试CUDA安装是否成功

nvcc -V

重装cuda12.1的时候,注意不要选driver,因为之前安装过了

安装依赖

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

安装Git LFS

1. curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

2. sudo apt-get install git-lfs

3. 验证安装成功:

输入: git lfs install

如果出现: Git LFS initialized.  则说明成功

从Hugging Face Hub 下载模型

git clone https://huggingface.co/THUDM/chatglm2-6b

模型量化
默认情况下,模型以 FP16 精度加载,运行上述代码需要大概 13GB 显存。如果你的 GPU 显存有限,可以尝试以量化方式加载模型,使用方法如下:

# 按需在web_demo.py中修改,目前只支持 4/8 bit 量化
 model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).quantize(4).cuda()

其中"THUDM/chatglm2-6b"需修改为你本地部署的路径

注:如果内存只有8G,模型量化选择int4

安装transformers和gradio和mdtex2html,pip install gradio -i https://pypi.tuna.tsinghua.edu.cn/simple

如果没有报错,输入信息后没有输出,有可能是gradio的版本问题。

需要降低版本 gradio==3.39.0

启动web_demo.py
 python web_demo.py

API部署
首先需要安装额外的依赖

pip install fastapi uvicorn

将api.py中的"THUDM/chatglm2-6b"修改为本地模型路径

 tokenizer = AutoTokenizer.from_pretrained("D:\ChatGLM2-6B", trust_remote_code=True)
 model = AutoModel.from_pretrained("D:\ChatGLM2-6B", trust_remote_code=True).quantize(4).cuda()

运行仓库中的 api.py

python api.py
 

基于 P-Tuning v2 的微调


软件依赖

运行微调除 ChatGLM2-6B 的依赖之外,还需要安装以下依赖

pip install rouge_chinese nltk jieba datasets -i https://pypi.tuna.tsinghua.edu.cn/simple

cd ptuning

vi train_chat.sh,修改模型地址,数据集地址,输出模型地址

参数解释:

PRE_SEQ_LEN=128: 定义了一个名为PRE_SEQ_LEN的变量,并将其设置为128。这个变量的作用在后续的代码中会用到。

LR=2e-2: 定义了一个名为LR的变量,并将其设置为2e-2,即0.02。这个变量表示学习率,在后续的代码中会用到。

–train_file /root/train.json : 指定训练数据文件的路径和文件名为"/root/train.json"。

–validation_file /root/verify.json : 指定验证数据文件的路径和文件名为"/root/verify.json"。

–prompt_column content : 指定输入数据中作为提示的列名为"content"。

–response_column summary : 指定输入数据中作为响应的列名为"summary"。

–overwrite_cache : 一个命令行参数,指示在缓存存在的情况下覆盖缓存。

–model_name_or_path THUDM/chatglm-6b : 指定使用的模型的名称或路径为"THUDM/chatglm-6b"。

–output_dir output/adgen-chatglm-6b-pt : 指定输出目录的路径和名称为"output/adgen-chatglm-6b-pt

–overwrite_output_dir : 一个命令行参数,指示在输出目录存在的情况下覆盖输出目录。

–max_source_length 512 : 指定输入序列的最大长度为512。

–max_target_length 512 : 指定输出序列的最大长度为512。

–per_device_train_batch_size 1 : 指定每个训练设备的训练批次大小为1。

–per_device_eval_batch_size 1 : 指定每个评估设备的评估批次大小为1。

–gradient_accumulation_steps 16 : 指定梯度累积的步数为16。在每个更新步骤之前,将计算并累积一定数量的梯度。

–predict_with_generate : 一个命令行参数,指示在生成模型的预测时使用生成模式。

–max_steps 3000 : 指定训练的最大步数为3000。

–logging_steps 10 : 指定每隔10个步骤记录一次日志。

–save_steps 1000 : 指定每隔1000个步骤保存一次模型。

–learning_rate $LR : 指定学习率为之前定义的LR变量的值。

–pre_seq_len $PRE_SEQ_LEN : 指定预设序列长度为之前定义的PRE_SEQ_LEN变量的值。

–quantization_bit 4 : 指定量化位数为4。这个参数可能是与模型相关的特定设置。

执行训练命令

sh train_chat.sh
在p-tuning文件夹下执行 sh web_demo.py可以运行微调后的模型。

web_demo.py中注意模型地址和微调模型地址

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实现【亚马逊商品】数据采集

亚马逊作为最大的跨境电商平台之一,其产品一直备受关注,因此采集亚马逊产品功能也是部分卖家所需的,下面我们来了解一下采集亚马逊产品是如何操作的。 l 采集网站 【场景描述】采集亚马逊搜索关键词出来的商品信息。 【入口网址】https://…

MES系统在工业生产中的重要性与功能

MES系统在工业生产中的重要性体现在它的信息化管理能力。传统的生产管理方法主要依靠人工操作和纸质文档记录,效率低下且容易出错。而MES系统利用计算机技术和数据库管理,能够实时记录和监控生产数据,提供准确的生产情况分析报告,…

2023年中国高尔夫服饰市场规模、主要品牌及行业发展方向分析[图]

高尔夫服饰是指高尔夫运动的专用服饰,高尔夫运动作为商务交流的手段和工具,具有较强的商务属性,高尔夫服饰除了具备专业功能属性以外,具备较强的时尚性,适合于商务、日常、休闲等多场景穿戴。高尔夫服饰里的主要类别&a…

快速上手视频下载助手:简单操作,高效下载你心仪的影片

在如今的社交媒体时代,视频已成为人们生活中不可或缺的一部分。微信视频号作为新兴的视频平台,吸引了越来越多的用户。然而,与其他视频平台相比,微信视频号并不支持视频下载功能,给用户带来了不便。但是,不…

React之Jsx如何转换成真实DOM

一、是什么 react通过将组件编写的JSX映射到屏幕&#xff0c;以及组件中的状态发生了变化之后 React会将这些「变化」更新到屏幕上 在前面文章了解中&#xff0c;JSX通过babel最终转化成React.createElement这种形式&#xff0c;例如&#xff1a; <div>< img src&q…

Vue 2 生命周期与 Vue 3 生命周期:介绍与差别对比

目录 引言&#xff1a; 一、Vue 2 生命周期介绍&#xff1a; 二、Vue 3 生命周期介绍&#xff1a; 注册周期钩子​ 生命周期图示 生命周期 三、Vue 2 生命周期与 Vue 3 生命周期的差别对比&#xff1a; 引言&#xff1a; Vue.js 是一款流行的 JavaScript 框架&#xff0…

仿真数字正弦波发生器程序

1&#xff09;构建这个IOC程序的程序框架&#xff1a; orangepiorangepi5:/usr/local/EPICS/program/simScope$ ls bin configure db dbd iocBoot lib Makefile simScopeApp2&#xff09;修改configure下RELEASE文件&#xff0c;添加所需的支持模块&#xff0c;此IOC程…

ThinkPad电脑HDMI接口失灵如何解决?

ThinkPad电脑HDMI接口失灵如何解决&#xff1f; 如果平时正常使用的外接显示器&#xff0c;某天突然无法使用了&#xff0c;重新插拔依然无信号的话&#xff0c;可以打开系统的设备管理器&#xff08;快捷键winx&#xff09;&#xff0c;首先看一下监视器的识别情况&#xff0c…

人声分离神仙网站,用过都说好~

在生活中好听的音乐有千千万的&#xff0c;音乐是非常容易可以找到下载下来的&#xff0c;但是背景音乐相当不容易找的&#xff0c;我们看的某短视频的背景音乐我们觉得不错的&#xff0c;想要下载下来的时候&#xff0c;我们都会无从下手不知道如何才可以找到这个相关的背景音…

内网渗透-内网信息收集

内网信息收集 前言 当我们进行外网信息收集&#xff0c;漏洞探测以及漏洞利用后&#xff0c;获得了主机的权限后&#xff0c;我们需要扩大渗透的战果时&#xff0c;这是我们就要进行内网的渗透了&#xff0c;内网渗透最重要的还是前期的信息收集的操作了&#xff0c;就是我们的…

文件加密丨最值得收藏的3种方法

信息的安全性变得越来越重要。文件加密作为一种有效的信息安全保护手段&#xff0c;广泛应用于各类场景。 今天就分享3种值得小白收藏的文件加密的方法&#xff1a; 方法一 简单加密 简单加密是一种常见的文件加密方法&#xff0c;其原理是通过使用简单的加密算法和密钥&…

YUV格式详解

YUV 可以将亮度信息&#xff08;Y&#xff09;与色度信息&#xff08;UV&#xff09;分离&#xff0c;没有UV信息一样可以显示完整图像&#xff0c;只不过是黑白的,也是一种颜色编码方法&#xff0c;&#xff0c;YUV和RGB可以通过公式互相转换&#xff0c;图片中每一个像素的颜…

响应式网站建站源码系统+完整的搭建教程

互联网已成为人们生活中不可或缺的一部分。在这个信息爆炸的时代&#xff0c;企业和个人对网站的需求不再仅仅是展示信息&#xff0c;而是要求网站能够适应各种设备、屏幕尺寸和网络环境&#xff0c;以便更好地与用户进行互动。因此&#xff0c;响应式网站建设应运而生&#xf…

使用Jenkins触发gitlab的webhook

满足条件&#xff1a; 首先手动构建可以完成构建 例如&#xff1a; 打开项目点击配置 在“Build Triggers”栏勾选&#xff0c;Build when a change is pushed to GitLab. GitLab webhook &#xff1b;如下 复制URL链接&#xff0c;我的链接是&#xff1a;http://192.168.44…

23款奔驰E300L升级几何多光束大灯 车辆自检等功能

奔驰几何多光束大灯核心特点就是通过内部的84颗可独立控制的LED光源&#xff0c;行车远光灯会甄别对向驶来的车辆或者行人&#xff0c;并且动态的跟随目标&#xff0c;之后阴影话该区域&#xff0c;避免晃到车辆和行人。 奔驰升级几何多光束 LED 大灯&#xff08;MULTIBEAM LED…

TypeError: data.reduce is not a function:数据类型不匹配

错误展示&#xff1a; 错误分析&#xff1a; 首先来看看前端代码&#xff1a;我表格绑定的数据模型是tableData&#xff0c;而我tableData定义的是一个数组 其次看看后端给的数据&#xff1a; 传递的是一个对象&#xff0c;而不是一个数组&#xff01; 这样原因就找出了&…

Spring如何使用三级缓存解决循环依赖问题?

Spring框架中采用了"三级缓存"&#xff08;三级缓存是一种缓存解决循环依赖的数据结构&#xff09;来解决循环依赖问题&#xff0c;其中缓存包括singletonObjects、earlySingletonObjects和singletonFactories。 第一级缓存 - singletonObjects&#xff1a; 在Spr…

Qt跨平台(统信UOS)各种坑解决办法

记录Qt跨平台的坑&#xff0c;方便日后翻阅。 一、环境安装 本人用的是qt 5.14.2.直接在官网下载即可。地址&#xff1a;Index of /archive/qt/5.14/5.14.2 下载linux版本。 下载之后 添加可执行权限。 chmod 777 qt-opensource-linux-x64-5.14.2.run 然后执行。 出现坑1…

个头小却很能“打”!合合信息扫描全能王推出A4便携式打印机

过去&#xff0c;为了打印一份清晰工整的材料&#xff0c;人们往往需要到专门的打印店或办公室。处理文件。对于销售、物流人员、工程师、医生、媒体记者等出差频率较高的职业而言&#xff0c;打印是一项“不太友好”的需求。为解决移动打印难题&#xff0c;近期&#xff0c;合…

嵌入式学习笔记(63)指针到底是什么

3.1.1.指针变量和普通变量的区别 首先必须非常明确&#xff1a;指针的实质就是个变量&#xff0c;它跟普通变量没有任何本质区别。指针完整的名字叫指针变量&#xff0c;简称指针。 3.1.2.为什么需要指针 (1)指针的出现是为了实现间接访问。在汇编中都有间接访问&#xff08…