【深度学习】大模型GLM-4-9B Chat ,微调与部署

下载好东西:
在这里插入图片描述

启动容器环境:

docker run -it --gpus all --net host  --shm-size=8g -v /ssd/xiedong/glm-4-9b-xd:/ssd/xiedong/glm-4-9b-xd  kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-yolov8train  bashpip install typer tiktoken numpy==1.25 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装微调的环境:

cd /ssd/xiedong/glm-4-9b-xd/GLM-4/finetune_demo/pip install -r requirements.txt   -i https://pypi.tuna.tsinghua.edu.cn/simple

下载数据集ccfbdci.jsonl到同级目录下。
https://huggingface.co/datasets/qgyd2021/chinese_ner_sft/tree/main/data

将数据集处理为glm4的格式:

import json
import randomdef convert_jsonl(input_file, train_output_file, test_output_file, split_ratio=0.8):system_message = {"role": "system", "content": "你是一个命名实体提取的专家。"}all_data = []with open(input_file, 'r', encoding='utf-8') as infile:for line in infile:data = json.loads(line)user_content = data["text"]entities = data["entities"]if entities:entity_texts = [entity["entity_text"] for entity in entities]assistant_content = ", ".join(entity_texts)else:assistant_content = "无"conversation = {"messages": [system_message,{"role": "user", "content": user_content},{"role": "assistant", "content": assistant_content}]}all_data.append(conversation)# Shuffle the data for random splittingrandom.shuffle(all_data)# Calculate split indexsplit_index = int(len(all_data) * split_ratio)# Split the data into training and testing setstrain_data = all_data[:split_index]test_data = all_data[split_index:]# Write training data to filewith open(train_output_file, 'w', encoding='utf-8') as train_outfile:for item in train_data:json.dump(item, train_outfile, ensure_ascii=False)train_outfile.write('\n')# Write testing data to filewith open(test_output_file, 'w', encoding='utf-8') as test_outfile:for item in test_data:json.dump(item, test_outfile, ensure_ascii=False)test_outfile.write('\n')input_file = 'ccfbdci.jsonl'
train_output_file = 'ccfbdci_train.jsonl'
test_output_file = 'ccfbdci_test.jsonl'
convert_jsonl(input_file, train_output_file, test_output_file)

配置文件
微调的配置文件位于config目录中,包括以下文件:

  • ds_zero_2.json / ds_zero_3.json:DeepSpeed配置文件。
  • lora.yaml / ptuning_v2.yaml / sft.yaml:不同模式模型的配置文件,包括模型参数、优化器参数、训练参数等。

一些重要参数解释如下:

data_config部分

  • train_file:训练数据集的文件路径。
  • val_file:验证数据集的文件路径。
  • test_file:测试数据集的文件路径。
  • num_proc:加载数据时使用的进程数量。
  • max_input_length:输入序列的最大长度。
  • max_output_length:输出序列的最大长度。

training_args部分

  • output_dir:保存模型和其他输出的目录。
  • max_steps:最大训练步数。
  • per_device_train_batch_size:每个设备(如GPU)的训练批次大小。
  • dataloader_num_workers:加载数据时使用的工作线程数量。
  • remove_unused_columns:是否移除数据中未使用的列。
  • save_strategy:模型保存策略(例如,每多少步保存一次)。
  • save_steps:每多少步保存一次模型。
  • log_level:日志级别(例如,info)。
  • logging_strategy:日志记录策略。
  • logging_steps:每多少步记录一次日志。
  • per_device_eval_batch_size:每个设备的评估批次大小。
  • evaluation_strategy:评估策略(例如,每多少步进行一次评估)。
  • eval_steps:每多少步评估一次。
  • predict_with_generate:是否使用生成模式进行预测。

generation_config部分

  • max_new_tokens:生成的新标记的最大数量。

peft_config部分

  • peft_type:使用的参数微调类型(支持LORA和PREFIX_TUNING)。
  • task_type:任务类型,这里是因果语言模型(不要更改)。
LoRA参数
  • r:LoRA的秩。
  • lora_alpha:LoRA的缩放因子。
  • lora_dropout:LoRA层中使用的dropout概率。
P-TuningV2参数
  • num_virtual_tokens:虚拟标记的数量。
  • num_attention_heads:P-TuningV2的注意力头数量(不要更改)。
  • token_dim:P-TuningV2的标记维度(不要更改)。
CUDA_VISIBLE_DEVICES=2,3 OMP_NUM_THREADS=1 torchrun --standalone --nnodes=1 --nproc_per_node=2  finetune.py  /ssd/xiedong/glm-4-9b-xd/GLM-4/finetune_demo/ /ssd/xiedong/glm-4-9b-xd/glm-4-9b-chat configs/ptuning_v2.yaml # For Chat Fine-tune

可以训练,但是多张卡保存模型报错了,重启一个镜像试试。

docker commit b512e777882f kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-glm4train

docker run -it --gpus all --net host  --shm-size=8g -v /ssd/xiedong/glm-4-9b-xd:/ssd/xiedong/glm-4-9b-xd  kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-glm4train  bash
cd /ssd/xiedong/glm-4-9b-xd/GLM-4/finetune_demo/CUDA_VISIBLE_DEVICES=2,3 OMP_NUM_THREADS=1 torchrun --standalone --nnodes=1 --nproc_per_node=2  finetune.py  /ssd/xiedong/glm-4-9b-xd/GLM-4/finetune_demo/ /ssd/xiedong/glm-4-9b-xd/glm-4-9b-chat configs/ptuning_v2.yaml # For Chat Fine-tune
CUDA_VISIBLE_DEVICES=2 python finetune.py  /ssd/xiedong/glm-4-9b-xd/GLM-4/finetune_demo/ /ssd/xiedong/glm-4-9b-xd/glm-4-9b-chat configs/ptuning_v2.yaml # For Chat Fine-tune

6,还是报错,换个项目的训练方法:

https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md

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

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

相关文章

Web开发:ASP.NET CORE使用Ajax定时获取后端数据

一、低难度(刷新a标签) 1、需求 给a标签每15s刷新一次,显示最新的时间(时间必须由后端获取) 应该如何操作呢 2、代码 后端 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Mi…

解决mysql5.0,Navicat for MySQL,IntelliJ IDEA之间中文乱码

使用软件版本 jdk-8u171-windows-x64 ideaIU-2021.1.3 mysql-essential-5.0.87-win32 navicat8_mysql_cs 这个问题我调试了好久,网上的方法基本上都试过了,终于是解决了。 三个地方结果都不一样。 方法一 首先大家可以尝试下面这种方法&#xff1a…

记录 cocos 开发问题 ,微信 wx.xxx函数 报找不到名称“wx”

今天写微信排行榜遇到 问题分享一下。 目前,微信、百度 和 抖音 小游戏这些平台为了保护其社交关系链数据,增加了 开放数据域 的概念,这是一个单独的游戏执行环境。开放数据域中的资源、引擎、程序,都和主游戏(主域&a…

Vue-Plugin-HiPrint 打印设计

Vue-Plugin-HiPrint 是一个Vue.js的插件,旨在提供一个简单而强大的打印解决方案。通过 Vue-Plugin-HiPrint,您可以轻松地在Vue.js应用程序中实现高度定制的打印vue-plugin-hiprinthiprint.io

(秋招复习)自动驾驶与机器人中的SLAM技术(二)

秋招复习之--自动驾驶与机器人中的SLAM技术2 第五章 基础点云处理激光传感器与点云的数学模型最近邻问题准确率和召回率暴力最近邻栅格和体素方法二分树与K-d树四叉树和八叉树 拟合问题平面拟合直线拟合 第六章 2D激光定位与建图扫描匹配算法点到点的scan matching点到线的scan…

99:PostgreSQL开启SQL语句日志收集

为了开启连接PostgreSQL的各个客户端执行SQL语句的情况,开启SQL语句日志收集(或者称SQL审计)。 对postgresql.conf配置文件中下面项进行配置,示例如下: #是否开启日志收集(包括系统日志、错误日志等&…

Sqlmap中文使用手册 - Detection模块参数使用

目录 1. Detection模块的帮助文档2. 各个参数的介绍2.1 --levelLEVEL2.2 --riskRISK2.3 页面对比 1. Detection模块的帮助文档 Detection:These options can be used to customize the detection phase--levelLEVEL Level of tests to perform (1-5, default 1)--riskRIS…

linux中不设置堆栈大小,默认大小是多少,怎么调用的

在Linux中,使用POSIX线程(pthread)库创建线程时,如果不显式设置堆栈大小,线程将使用系统默认的堆栈大小。这个默认大小可以因系统、发行版、甚至内核版本而异,但通常对于大多数现代Linux系统来说&#xff0…

C语言相关知识点(不定期更新内容)

coutinue只能在循环当中使用 关键字不能用作变量的 typedef是用来给类型取别名的变量 一条语句结束的时候后面要有分号 函数后面不写分号 int main( )是函数,大括号和里面的是函数体,函数和函数体之间不能有分号 void是无、空的意思,后面没有…

mybatis-plus模板引擎代码生成

网盘代码:链接:https://pan.baidu.com/s/1jwuVGiA97dc1KVnGKc0c4g?pwd6666 提取码:6666 Gradle依赖: dependencies {// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starterimplementation org.…

android audio 相机按键音:(一)资源加载与替换

按键音,声音资源路径: frameworks\base\data\sounds\effects\ogg 对应路径,可见对应声音资源: camera_click.ogg camera_click_48k.ogg 编译加载声音资源mk: base/data/sounds/AllAudio.mk 加载资源规则: $(LOCAL_P…

oracle备份和恢复exp/imp-----从全库备份中恢复用户库解题思路

文章目录 从全库备份中恢复用户库的思路备份全库恢复用户库 从全库备份中恢复用户库的思路 备份全库 第一步:使用系统管理员账号将oracle整个导出备份----全库备份 1.exp system/system buffer65536 feedback100000 fully fileD:/exp.dmp logexp.log ---导出备份…

mysql 安装配置 next 按钮为什么置灰点击不了

“Next” 按钮变灰无法点击可能是由多种原因导致的,以下是一些常见的解决方法: 端口被占用:MySQL 默认使用 3306 端口,如果该端口被其他程序占用,就可能导致 Next 按钮无法点击。可以通过在命令提示符中输入 netstat …

linux系统设置开机启动的两种方法systemd及rc.local(手工写sh脚本,手工写service服务)

文章目录 知识点实验一、systemd(一)自写一个sh脚本并加入开机启动(二)源码安装的nginx加入开机启动 rc.local 知识点 在Linux系统中,有多种方法可以设置开机启动。以下是其中的一些主要方法: systemd 在较…

基于SSM的网上选课系统

系统背景 在当今信息化高速发展的时代,随着Internet的普及和高等教育规模的不断扩大,传统的手工选课方式已难以满足高校日益增长的管理需求。传统的选课方式不仅效率低下,还容易出现人为错误,导致资源浪费和管理成本上升。因此&am…

2959.力扣每日一题7/17 Java(暴力枚举+Floyd算法)

博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 Floyd算法 解题思路 解题过程 时间复杂度 空间复杂度 Floyd算法 …

python学习周报

day1: 一: # 1.注释快捷:Ctrl/ # 2.代码格式:CtrlaltL # 3.代码的上移一行:ctrlshift向上方向键 # 4.代码的下移一行:ctrlshift向下方向键 # 5.复制一行并下移 # 6.查找:ctrlF # 7.替换:ctrlR # 8.删除&…

Linux系统快速搭建轻量化网站Halo并实现无公网IP远程访问

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

AWE2025正式启动,AWE×AI 推动智慧生活的普及

7月18日,2025年中国家电及消费电子博览会(AWE2025)正式启动。主办方宣布,AWE2025的主题为“AI科技、AI生活”,展会将于2025年3月20-23日在上海新国际博览中心举办。 作为全球三大家电和消费电子领域展会之一&#xff…

MySQL的恢复与备份

MySQL的备份和恢复以及日志管理(配置文件当中的设置) 备份的目的:备灾 在生产环境中,数据的安全性非常重要。 造成数据丢失的原因: 1、程序出错 2、人为的问题 3、磁盘故障 备份的分类: 物理备份&a…