大模型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

相关文章

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

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

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 应