大模型ChatGLM的部署与微调

前言:最近大模型太火了,导师让我看看能不能用到自己的实验中,就想着先微调一个chatGLM试试水,微调的过程并不难,难的的硬件条件跟不上,我试了一下lora微调,也算跑通了吧,虽然最后评估的时候报错了,淦!
真正设计lora微调的就那一行代码,仅以此博客作为记录,希望有大佬能够告知为啥评估的时候会出现那两个bug,不胜感激!

环境准备

GPU:3090两块
系统镜像:Ubuntu 9.4.0-1ubuntu1~20.04.2
python版本:Python 3.10

部署

  1. 创建python环境
conda create -n py310_chat python=3.10 

小编这里报错了:
在这里插入图片描述
说什么channel获取不到,可以理解为conda的下载源找不到
解决办法:
将获取不到的channel删除即可

conda config --remove channels 要删除的channel

还有报错就接着删,然后查看当前是否还存在channel

conda config --show channels

如果没有可用channel,使用下述命令添加,这里给出几个例子

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

解决完上述问题,重新创建就可以啦!

  1. 激活环境
conda activate py310_chat
  1. 下载(克隆)项目
git clone https://github.com/THUDM/ChatGLM3.git
  1. 进入目录,安装依赖
cd ChatGLM3
pip install -r requirements.txt
  1. 预训练好的模型下载
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git

因为模型很大,这里下载可能需要点时间
小编这里下载模型的时候也出了点问题,只下载了一部分就报错停止了,重新下载还是会出现类似情况,所以我就去hugging face把缺失的文件手动的一个一个下载下来,拷贝到chatglm3-6b中

  1. 命令行demo运行

打开项目下的basic_demo,可以看到很多可运行的demo,这里选择cli_demo.py,成功运行之后终端会出现一个交互式命令行,你就可以跟chatGLM聊天了

注意: 这里你需要将cli_demo.py中的MODEL_PATH和TOKENZIER_PATH改为上述第五步中下载的模型地址
(web demo小编也运行了,但是出了点问题,时间紧迫也没有去探究为什么报错)

微调

  1. 准备数据集

这里先用官方提供的数据集试试水:AdvertiseGen数据集
数据集下载完成之后,放到你的项目下

  1. 安装依赖

进入到项目中的finetune_demo目录下,这里是官方提供的微调代码,以及还有微调所需要安装的依赖:

pip install -r requirements.txt
  1. 处理数据集

运行lora_finetune.ipynb最开始的一段代码,对train.json和dev.json进行“切割对齐”,生成最终的微调数据集
这里我们只需要修改一下原数据集存放的路径和处理之后数据集存放的路径就可以了,即下述这一行代码中的路径:
在这里插入图片描述

  1. 配置文件修改

配置文件都放在finetune_demo目录下的configs目录中
包括以下文件:

  • ds_zereo_2 / ds_zereo_3.json: deepspeed 配置文件。
  • lora.yaml / ptuning.yaml / sft.yaml: 模型不同方式的配置文件,包括模型参数、优化器参数、训练参数等
    详情可查看finetune_demo目录下的readme文件

按照官网的lora.yaml配置进行微调,CUDA out of memory了!!!
可替换成下述配置:https://github.com/KevinFanng/makeChatGLM3FinetuneData/blob/main/lora.yaml(这是我参考的博主的文章里面提供的,我单张3090不行,两张3090可以)

  1. 运行微调代码

单机单卡:

python finetune_hf.py  数据集路径/ 模型路径/ configs/lora.yaml

单机双卡:

 OMP_NUM_THREADS=1 torchrun --standalone --nnodes=1 --nproc_per_node=2 finetune_hf.py  数据集路径/ 模型路径/ configs/lora.yaml

发现还是有很多包都没装上,缺什么装什么就可以啦!

后记:
尽管我一再的修改配置文件使参数尽可能的小一点,但是一块3090还是没有带起来,后来我就采用单机双卡的训练模式,跑是跑起来了,训练跑完一轮的时候评估却报错了,具体错误如下:

在包的内部报这个错误,给我整不会了,想来想去也只能是版本错误,咋回事呢

  • TypeError: BatchEncoding.to() got an unexpected keyword argument 'non_blocking

第二个错误是device的错误,to(device)的时候报空类型,我麻了

  • AttributeError: ‘NoneType’ object has no attribute ‘to’
  1. 微调代码解析

微调调用的是封装好的peft包,主要跟下面这行代码有关,get_peft_model是peft包中的方法,接受两个参数,一个是我们要微调的模型。一个是微调参数,返回值是设置完微调参数之后的模型

model = get_peft_model(model, peft_config)

参考

  • 感谢博主:https://www.bilibili.com/read/cv33842619/

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

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

相关文章

【问题随记】tightvnc 连接后灰屏

问题描述 刚刚入手了官方发的 OrangePi AI Pro,想用 tight vnc 来连接开发板,就不用连接屏幕那么麻烦了。结果连接后,没能显示 OrangePi AI Pro 桌面。 问题解决 看一下现有的桌面环境。 apt list --installed | grep desktop从中可以看到…

语言模型解构——Tokenizer

1. 认识Tokenizer 1.1 为什么要有tokenizer? 计算机是无法理解人类语言的,它只会进行0和1的二进制计算。但是呢,大语言模型就是通过二进制计算,让你感觉计算机理解了人类语言。 举个例子:单1,双2&#x…

【传知代码】探索视觉与语言模型的可扩展性(论文复现)

前言:在数字化时代的浪潮中,我们见证了人工智能(AI)技术的飞速发展,其中视觉与语言模型作为两大核心领域,正以前所未有的速度改变着我们的生活和工作方式。从图像识别到自然语言处理,从虚拟现实…

无人机推流/RTMP视频推拉流EasyDSS无法卸载软件是什么原因?

视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务,在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外,平台还支持用户自行上传视频文件,也可将上传的点播…

大话设计模式解读01-简单工厂模式

本系列的文章,来介绍编程中的设计模式,介绍的内容主要为《大话设计模式》的读书笔记,并改用C语言来实现(书中使用的是.NET中的C#),本篇来学习第一章,介绍的设计模式是——简单工厂模式。 1 面向对象编程 …

Mixly 开启WIFI AP UDP收发数据

一、开发环境 软件:Mixly 2.0在线版 硬件:ESP32-C3(立创实战派) 固件:ESP32C3 Generic(UART) 测试工工具:NetAssist V5.0.1 二、实现功能 ESP32开启WIFI AP,打印接入点IP地址,允许…

模拟堆-java

模拟堆也是对堆的一次深入理解和一些其它操作,可以了解一下。 文章目录 前言 一、模拟堆 二、算法思路 1.结点上移 2.结点下移 3.插入一个数 4.输出当前集合的最小值 5.删除当前集合的最小值(数据保证此时的最小值唯一) 6.删除第k个插入的数 …

Springboot健身房管理系统-计算机毕业设计源码44394

摘 要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在健身房管理的要求下,开发一款整体式结构的健身房管理系统…

代理 模式

一、什么是代理模式 代理模式指代理控制对其他对象的访问,也就是代理对象控制对原对象的引⽤。在某些情况下,⼀个对象不适合或者不能直接被引⽤访问,⽽代理对象可以在客⼾端和⽬标对象之间起到中介的作⽤。 二、为什么使用代理模式 模式作…

HW面试常见知识点2——研判分析(蓝队中级版)

🍀文章简介:又到了一年一度的HW时刻,本文写给新手想快速进阶HW蓝中的网安爱好者们, 通读熟练掌握本文面试定个蓝中还是没问题的!大家也要灵活随机应变,不要太刻板的回答) 🍁个人主页…

揭秘下载数据背后的秘密,Xinstall助你掌握市场脉搏

在当下这个移动互联网时代,应用推广已成为各大企业竞争的重要战场。然而,如何有效地获取并分析应用下载数据,却成为了许多推广者面临的难题。今天,我们将为大家介绍一款强大的应用推广助手——Xinstall,它能够帮助你轻…

隐藏 IP 地址的重要性是什么?

在当今的数字时代,保护我们的在线身份至关重要。从保护个人信息到保护隐私,互联网用户越来越多地寻求增强在线安全性的方法。保持匿名和保护敏感数据的一个关键方面是隐藏您的 IP 地址。在这篇博文中,我们将深入探讨隐藏 IP 地址的重要性&…

人脸识别技术与人证合一智能闸机的剖析

人脸识别技术,作为一种先进的生物认证手段,依据个体面部独有的特征信息来进行身份验证。这项技术通过捕获图像或视频中的面部数据,执行一系列精密步骤,包括图像获取、面部定位、预处理、特征提取与比对,以确认个人身份…

【JMeter接口自动化】第2讲 Jmeter目录结构

JMeter的目录结构如下: bin目录:可执行文件目录,启动jmeter时,就是启动bin目录下的ApacheJmeter.jar,jmeter.bat,jmeter.sh ApacheJmeter.jar:启动文件 jmeter.bat:Windows 的启动命令。 jmeter…

前端框架前置知识之Node.js:fs模块、path模块、http模块、端口号介绍

什么是模块? 类似插件,封装了方法 / 属性 fs 模块- 读写文件 代码示例 // 1. 加载 fs 模块对象 const fs require(fs) // 2. 写入文件内容 fs.writeFile(./test.txt, hello, Node.js, (err) > {if (err) console.log(err) //若 err不为空&#xf…

韩顺平0基础学java——第15天

p303-326 重写override 和重载做个对比 注:但子类可以扩大范围,比如父类是protected,子类可以是public 多态 方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承基础之上的。 多态的具体体现…

绕过WAF(Web应用程序防火墙)--介绍、主要功能、部署模式、分类及注入绕过方式等

网站WAF是一款集网站内容安全防护、网站资源保护及网站流量保护功能为一体的服务器工具。功能涵盖了网马/木马扫描、防SQL注入、防盗链、防CC攻击、网站流量实时监控、网站CPU监控、下载线程保护、IP黑白名单管理、网页防篡改功能等模块。能够为用户提供实时的网站安全防护&…

Java开发:Spring Boot 实战教程

序言 随着技术的快速发展和数字化转型的深入推进,软件开发领域迎来了前所未有的变革。在众多开发框架中,Spring Boot凭借其“约定大于配置”的核心理念和快速开发的能力,迅速崭露头角,成为当今企业级应用开发的首选框架之一。 《…

git拉去代码报错“Failed to connect to 127.0.0.1 port 31181: Connection refused“

最近参与了一个新项目,在使用git clone 克隆代码时遇到了一个报错"fatal: unable to access ‘https://example.git/’: Failed to connect to 127.0.0.1 port 31181: Connection refused",今天就和大家分享下解决过程。 报错详情 在使用git clone 克隆…

【JavaEE】Servlet

文章目录 一、Servlet 是什么二、如何创建Servlet程序1、创建项目2、引入依赖3、创建目录4、编写代码5、打包程序6、部署程序7、验证程序 一、Servlet 是什么 二、如何创建Servlet程序 1、创建项目 2、引入依赖 Maven 项目创建完后,会自动生成一个 pom.xml 的文…