ChatGLM2-6B微调过程说明文档

2023-11-28 19:15

本文主要是介绍ChatGLM2-6B微调过程说明文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文档:

ChatGLM2-6B 微调(初体验) - 知乎

  1. 环境配置

下载anaconda,版本是Anaconda3-2023.03-0-Linux-x86_64.sh,其对应的python版本是3.10,试过3.7和3.11版本的在运行时都报错。

执行下面的命令安装anaconda

 sh Anaconda3-2023.03-0-Linux-x86_64.sh

进入安装过程,根据提示输入即可,会自动配置好环境变量和pip等

下载代码

git clone GitHub - hiyouga/ChatGLM-Efficient-Tuning: Fine-tuning ChatGLM-6B with PEFT | 基于 PEFT 的高效 ChatGLM 微调

cd ChatGLM-Efficient-Tuning

如果服务器不能联网,可以在自己电脑上下载好,上传到服务器的对应目录

安装依赖

pip install -r requirements.txt

  1. 下载模型

从 Hugging Face Hub 下载模型实现和参数 到本地,后期使用 只需要 从本地下载即可。

git lfs install

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

  1. 知识产权数据集准备

通过ChatGPT生成问答预料文本

例如:

prompt:

根据以下内容,生成10道简答题和答案,生成的答案需要详细,知识点完整:

在电影《天下无贼》中,演员刘德华和刘若英扮演的一对夫妇开着骗得的宝马轿车驶 入别墅区大门时,保安不但没有上前询问,反而立正敬礼。刘德华扮演的男主角将车倒回, 拍着宝马车问保安: “开好车你就不问,开好车就可以随便进入,开好车就一定是好人 吗?!”这个问题令人沉思。的确,观众们需要扪心自问:人们在追求以豪车、名表和名牌 服装等为象征的奢华生活和“面子”时,是否忽视了物质外壳之下的美丽灵魂?然而,电 影中的这一幕揭示了一个现实,如 “宝马”这样的驰名商标彰显了拥有者的身份与地位, 满足了消费者的心理需求,其作用有别于普通商标。与之相适应,商标法对驰名商标提供 了特别保护。

驰名商标是指经过长期使用或大量商业推广与宣传,在市场上享有很高知名度并为相 关公众所熟知的商标。与普通商标相比,驰名商标具有以下几个特点。

首先,驰名商标在相关公众中具有很高的知名度。

将返回的数据整理成md文档,如下图

每个章节生成的问题和回答数据达到5w字以上,全部生成完成之后,将文本内容处理成json格式,python代码如下:

import json
import os
import re


def process_md(md_text):
    qa_list = []

    # 使用正则表达式分割问题和答案
    qa_pairs = re.split(r'\n\n+', md_text)

    for pair in qa_pairs:
        question_match = re.match(r'^\s*(.*)\s*答:\s*(.*?)\s*$', pair, re.DOTALL)
        if question_match:
            #question = question_match.group(1)
            question = re.sub(r'^\d+\.\s*', '', question_match.group(1)).rstrip("\n")
            answer = question_match.group(2)
            qa = {
                "content": question,
                "summary": answer
            }
            qa_list.append(qa)
    return qa_list


def main():
    input_directory = "md_files"  # 替换为包含Markdown文件的目录
    output_directory = "formatted_qa"  # 输出文件的目录


    if not os.path.exists(output_directory):
        os.makedirs(output_directory)

    output_filename = os.path.join(output_directory, "content.json")
    output_file=open(output_filename, 'w', encoding='utf-8')

    for filename in os.listdir(input_directory):
        if filename.endswith(".md"):
            with open(os.path.join(input_directory, filename), 'r', encoding='utf-8') as file:
                md_text = file.read()

            qa_list = process_md(md_text)
            json.dump(qa_list, output_file, ensure_ascii=False, indent=2)
            print(f"转换完成,结果已保存到{output_filename}")
if __name__ == "__main__":
    main()

结果文档如下:

  1. ChatGLM2-6B模型微调

命令行训练

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \

    --stage sft \

    --model_name_or_path /home/liq/zw/chatglm2/chatglm2-6b \

    --do_train \

    --dataset zscq \

    --dataset_dir ./data \

    --finetuning_type lora \

    --output_dir /home/liq/zw/data/chatglm2-6b-lora-zscq \

    --per_device_train_batch_size 1 \

    --gradient_accumulation_steps 1 \

    --lr_scheduler_type cosine \

    --logging_steps 10 \

    --save_steps 1000 \

    --learning_rate 5e-5 \

    --num_train_epochs 3.0 \

    --fp16

开始训练

训练完成

命令行测试

python src/cli_demo.py \

    --model_name_or_path /home/liq/zw/chatglm2/chatglm2-6b \

    --checkpoint_dir /home/liq/zw/data/chatglm2-6b-lora-zscq/checkpoint-19000 \

    --quantization_bit 4

进入问答界面

输入问题,得到对应回答

导出微调模型

python src/export_model.py \

    --model_name_or_path /home/liq/zw/chatglm2/chatglm2-6b \

    --checkpoint_dir /home/liq/zw/data/chatglm2-6b-lora/checkpoint-19000 \

    --output_dir /home/liq/zw/chatglm2-6b-lora-zscq2

查看模型内容

这篇关于ChatGLM2-6B微调过程说明文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处