解锁对话新体验:ChatGLM3 模型微调教程(第一版本)

ChatGLM3 是一个对话预训练大模型,由清华大学 KEG 实验室和智谱 AI 共同就研究发布。其中ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,不仅有前两代模型对话流畅、部署门槛低等众多优秀特性,还增加引入了如下特性:

  1. 更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base ,采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。通过评测显示在语义、数学、推理、代码、知识等不同角度的数据集上,该基础模型在 10B 以下的基础模型中拥有最强性能 。
  2. 更完整的功能支持: ChatGLM3-6B 采用了全新设计的 Prompt 格式 ,除了正常的多轮对话外,同时也支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。
  3. 更全面的开源序列: 除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM3-6B-Base 、长文本对话模型 ChatGLM3-6B-32K 和进一步强化了对于长文本理解能力的 ChatGLM3-6B-128K。

一、大模型 ChatGLM3 微调步骤

基础环境最低要求:

环境名称 版本信息 1
Ubuntu 22.04.4 LTS
Cuda V12.1.105
Python 3.10.8
NVIDIA Corporation RTX 3090

1. 结束当前运行(按键盘上的 Ctrl + C)

2. 安装模型依赖库

  • 切换到项目目录、激活 ChatGLM3 虚拟环境、安装 requirements.txt 依赖

    切换到 ChatGLM3 项目工作目录

    cd /ChatGLM3/finetune_demo

    激活 ChatGLM3 虚拟环境

    conda activate ChatGLM3

    在 ChatGLM3 环境中安装 requirements.txt 依赖

    pip install -r requirements.txt

出现以上报错,需要修改 requirements.txt 文件

复制代码
vim requirements.txt

鼠标往下滑,找到最后一行 双击键盘上的 d 键,即可快速删除

继续执行依赖安装命令

复制代码
# 在 ChatGLM3 环境中安装 requirements.txt 依赖
pip install -r requirements.txt

3. 准备数据集

3.1 创建文件夹 data 以及 子文件夹 AdvertiseGen
  • 创建 data 文件夹
  • 同样的方式创建 AdvertiseGen 子文件夹
3.2 上传数据集

我们使用 AdvertiseGen 数据集来进行微调。从 Google Drive 或者 Tsinghua Cloud 下载处理好的 AdvertiseGen 数据集,将解压后的 AdvertiseGen 目录放到本目录的 /data/ 下, 例如。/ChatGLM3/finetune_demo/data/AdvertiseGen

3.3 解压数据集
复制代码
cd data/AdvertiseGen
tar -xzvf AdvertiseGen.tar.gz

这里的选项解释如下:

  • x 代表解压。
  • z 代表 gzip 压缩(.gz)。
  • v 代表在解压时显示过程(verbose 模式)。
  • f 代表后面跟着的是文件名。
3.4 转换数据格式
  • 创建 AdvertiseGen_fix.py 文件

    切换到 ChatGLM3 项目工作目录

    cd /ChatGLM3/finetune_demo

    创建 AdvertiseGen_fix.py 文件

    vim AdvertiseGen_fix.py

  • 插入以下代码

    import json
    from typing import Union
    from pathlib import Path

    def _resolve_path(path: Union[str, Path]) -> Path:
    return Path(path).expanduser().resolve()

    def _mkdir(dir_name: Union[str, Path]):
    dir_name = _resolve_path(dir_name)
    if not dir_name.is_dir():
    dir_name.mkdir(parents=True, exist_ok=False)

    def convert_adgen(data_dir: Union[str, Path], save_dir: Union[str, Path]):
    def _convert(in_file: Path, out_file: Path):
    _mkdir(out_file.parent)
    with open(in_file, encoding='utf-8') as fin:
    with open(out_file, 'wt', encoding='utf-8') as fout:
    for line in fin:
    dct = json.loads(line)
    sample = {'conversations': [{'role': 'user', 'content': dct['content']},
    {'role': 'assistant', 'content': dct['summary']}]}
    fout.write(json.dumps(sample, ensure_ascii=False) + '\n')

    复制代码
      data_dir = _resolve_path(data_dir)
      save_dir = _resolve_path(save_dir)
    
      train_file = data_dir / 'train.json'
      if train_file.is_file():
          out_file = save_dir / train_file.relative_to(data_dir)
          _convert(train_file, out_file)
    
      dev_file = data_dir / 'dev.json'
      if dev_file.is_file():
          out_file = save_dir / dev_file.relative_to(data_dir)
          _convert(dev_file, out_file)

    convert_adgen('data/AdvertiseGen/AdvertiseGen', 'data/AdvertiseGen_fix')

  • 运行 AdvertiseGen_fix.py 文件

    运行 AdvertiseGen_fix.py 文件

    python AdvertiseGen_fix.py

4. 使用命令行开始微调,我们使用 lora 进行微调

接着,我们仅需要将配置好的参数以命令行的形式传参给程序,就可以使用命令行进行高效微调。

复制代码
python finetune_hf.py  /ChatGLM3/finetune_demo/data/AdvertiseGen_fix  /ChatGLM3/basic_demo/THUDM/ZhipuAI/chatglm3-6b  configs/lora.yaml

出现以上问题,需要安装 nltk 依赖

复制代码
# 安装 nltk 依赖
pip install nltk

再次执行微调命令

复制代码
python finetune_hf.py  /ChatGLM3/finetune_demo/data/AdvertiseGen_fix  /ChatGLM3/basic_demo/THUDM/ZhipuAI/chatglm3-6b  configs/lora.yaml

微调完成

5. 微调验证以及推理

  • 找到模型保存点路径
  • 执行推理命令

    python inference_hf.py output/checkpoint-500/ --prompt "类型#裙版型#显瘦材质#网纱风格#性感裙型#百褶裙下摆#压褶裙长#连衣裙裙衣门襟#拉链裙衣门襟#套头裙款式#拼接裙款式#拉链裙款式#木耳边裙款式#抽褶*裙款式#不规则"

相关推荐
我材不敲代码12 小时前
OpenCV 实战——图像形态学操作与边缘检测全解析:从腐蚀膨胀到 Canny 边缘检测
人工智能·opencv·计算机视觉
芯片-嵌入式12 小时前
具身智能(2):OpenExplorer下的模型量化
人工智能·深度学习·算法
DamianGao12 小时前
我用 OpenClaw 做了一个 AI 新闻早报,每天自动推送
人工智能·python·语言模型
Lab_AI12 小时前
电子实验记录本(ELN)助力熙华药业核心竞争力提升
大数据·人工智能·实验室管理·eln·药物研发·ai制药·电子实验记录本
崔高杰12 小时前
训练数据选择又有新方法了?——两篇文章的阅读笔记 Less is Enough和 OPUS
人工智能·笔记·机器学习
爱吃奶酪的松鼠丶12 小时前
LangGraph 实战笔记:用 AI 发起流程应用
人工智能·笔记
Westward-sun.12 小时前
Python argparse 模块:命令行参数解析实战全攻略
python·opencv·机器学习·rpc
Storynone12 小时前
【Day21】LeetCode:93. 复原IP地址,78. 子集,90. 子集 II
python·算法·leetcode
RechoYit12 小时前
项目记录:把 OpenClaw 结合自己的交易项目做成飞书里的 AI Trading Partner-- A 股智能分析机器人
人工智能·python·金融·飞书·投资·openclaw
大强同学12 小时前
复杂任务文件化规划工具:planning-with-files
人工智能·ai编程