大模型ChatGLM的部署与微调

2024-06-04 03:28
文章标签 部署 模型 微调 chatglm

本文主要是介绍大模型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/

这篇关于大模型ChatGLM的部署与微调的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

OpenManus本地部署实战亲测有效完全免费(最新推荐)

《OpenManus本地部署实战亲测有效完全免费(最新推荐)》文章介绍了如何在本地部署OpenManus大语言模型,包括环境搭建、LLM编程接口配置和测试步骤,本文给大家讲解的非常详细,感兴趣的朋友一... 目录1.概况2.环境搭建2.1安装miniconda或者anaconda2.2 LLM编程接口配置2

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (