chatglm3-6b部署及微调

chatglm3-6b部署及微调

  • modelscope: https://modelscope.cn/models/ZhipuAI/chatglm3-6b/files
  • github: https://github.com/THUDM/ChatGLM3
  • 镜像: ubuntu20.04-cuda11.7.1-py38-torch2.0.1-tf1.15.5-1.8.1
  • v100 16G现存 单卡

安装

软件依赖

# 非必要无需执行
# pip install --upgrade pip

pip install modelscope>=1.9.0

下载及调用

from modelscope import AutoTokenizer, AutoModel, snapshot_download
model_dir = snapshot_download("ZhipuAI/chatglm3-6b", revision = "v1.0.2")
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)

在这里插入图片描述

微调

数据集: https://modelscope.cn/datasets/damo/MSAgent-Bench/summary
项目: https://github.com/modelscope/swift

项目下载

mkdir py
git clone https://github.com/modelscope/swift.git
cd swift

安装依赖:

# 已安装忽略
pip install ms-swift

# 已安装忽略
pip install modelscope>=1.9.0

# 设置pip全局镜像和安装相关的python包
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
git clone https://github.com/modelscope/swift.git
cd swift
pip install .[llm]
# 下面的脚本需要在此目录下执行
cd examples/pytorch/llm


# 如果你想要使用deepspeed
pip install deepspeed -U


# 如果你想要使用基于auto_gptq的qlora训练. (推荐, 效果优于bnb)
# 使用auto_gptq的模型: qwen-7b-chat-int4, qwen-14b-chat-int4, qwen-7b-chat-int8, qwen-14b-chat-int8
pip install auto_gptq optimum -U


# 如果你想要使用基于bnb的qlora训练.
pip install bitsandbytes -U

脚本sft.sh

sft.sh
将脚本放在swift/examples/pytorch/llm/scripts/chatglm3_6b/lora_ddp_ds这个目录下

  • 单显卡: CUDA_VISIBLE_DEVICES=0
  • 模型ID: model_id_or_path ZhipuAI/chatglm3-6b
  • 模型版本: model_revision v1.0.2
  • dtype: 如果是老显卡比如V100 是不支持bf16的 需要指定为: fp16
  • 模板类型: template_type chatglm3
  • 数据集: dataset damo-agent-mini-zh 这里采用达摩院的agent
  • lora_rank和lora_alpha 注意: lora_alpha一定要是lora_rank 2倍质量最高
  • hub_token: 你的modelscope平台的token该参数只有在push_to_hub设置为True时才生效.
  • gradient_accumulation_steps 根据你的服务器性能调整大小 性能不好则值相对较小 v100
  • 剩余其他参数默认即可
# v100 16G 单卡
nproc_per_node=1

PYTHONPATH=../../.. \
CUDA_VISIBLE_DEVICES=0 \
torchrun \
    --nproc_per_node=$nproc_per_node \
    --master_port 29500 \
    llm_sft.py \
    --model_id_or_path ZhipuAI/chatglm3-6b \
    --model_revision v1.0.2 \
    --sft_type lora \
    --tuner_backend swift \
    --template_type chatglm3 \
    --dtype fp16 \
    --output_dir output \
    --dataset damo-agent-mini-zh \
    --train_dataset_sample -1 \
    --num_train_epochs 1 \
    --max_length 4096 \
    --lora_rank 8 \
    --lora_alpha 16 \
    --lora_dropout_p 0.05 \
    --lora_target_modules AUTO \
    --gradient_checkpointing true \
    --batch_size 1 \
    --weight_decay 0. \
    --learning_rate 1e-4 \
    --gradient_accumulation_steps 16 \
    --max_grad_norm 0.5 \
    --warmup_ratio 0.03 \
    --eval_steps 100 \
    --save_steps 100 \
    --save_total_limit 2 \
    --logging_steps 10 \
    --push_to_hub false \
    --hub_model_id chatglm3-6b-lora \
    --hub_private_repo true \
    --hub_token 'token' \
    --deepspeed_config_path 'ds_config/zero2.json' \
    --only_save_model true \

运行脚本

注意: 要在 swift/examples/pytorch/llm 这个目录下进行 记得给脚本权限chmod +x llm/*.py

./scripts/chatglm3_6b/lora_ddp_ds/sft.sh

推理

infer.sh
将脚本放在swift/examples/pytorch/llm/scripts/chatglm3_6b/lora_ddp_ds这个目录下

# Experimental environment: v100
PYTHONPATH=../../.. \
CUDA_VISIBLE_DEVICES=0 \
python llm_infer.py \
    --model_id_or_path ZhipuAI/chatglm3-6b \
    --model_revision v1.0.2 \
    --sft_type lora \
    --template_type chatglm3 \
    --dtype fp16 \
    # --ckpt_dir "output/chatglm3-6b/vx_xxx/checkpoint-xxx" \
    --eval_human false \
    --dataset damo-agent-mini-zh \
    --max_length 2048 \
    --max_new_tokens 2048 \
    --temperature 0.9 \
    --top_k 20 \
    --top_p 0.9 \
    --do_sample true \
    --merge_lora_and_save false \

常见问题

1.显卡驱动

RuntimeError: The NVIDIA driver on your system is too old (found version 11080). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver.
解决方案

错误提示显卡驱动较老 其实可能是torch版本太高导致的问题 我们用的是2.0.1 请检查你的版本是否是2.0.1
https://pytorch.org/get-started/previous-versions/

# 查看torch版本
python
import torch
print(torch.__version__)

# 查看CUDA版本
nvidia-smi

# 卸载过高的版本
pip uninstall torch

# 访问官方查看对应版本: https://pytorch.org/get-started/previous-versions/  以cuda 11.8 pytorch:2.0.1 举例  
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.8 -c pytorch -c nvidia

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OC-编译错误

明明包含了头文件,但是还是显示未知的类型 可能这个头文件被某个宏包住了 #if defined(__cplusplus) 在 C 代码中包含了一个 C 的头文件会显示这个错误“the util lib only be used in c”,此时用 #if defined(__cplusplus) #endif 包一下就行了&…

NSS [HUBUCTF 2022 新生赛]checkin

NSS [HUBUCTF 2022 新生赛]checkin 判断条件是if ($data_unserialize[username]$username&&$data_unserialize[password]$password),满足则给我们flag。正常思路来说,我们要使序列化传入的username和password等于代码中的两个同名变量&#xff0…

数字滤波器分析---频率响应

数字滤波器分析---频率响应 幅值、相位、冲激和阶跃响应、相位和群延迟、零极点分析。 分析滤波器的频域和时域响应。可视化复平面中的滤波器极点和零点。 频率响应 数字域 freqz 使用基于 FFT 的算法来计算数字滤波器的 Z 变换频率响应。具体来说,语句 [h,w]…

多组学整合,快速定位关键代谢通路,解析分子机制

生物学是一种复杂的学科,往往单一组学无法探究想要了解的生物学问题,这时就要运用到多组学联合分析。近年来,多组学研究的不断发展和持续火热,越来越多的研究者开始将微生物组学和代谢组学联合起来。16s全长扩增子测序可提供细菌构…

【微信公众号开发】1.1 微信公众号开发课程内容介绍

一、微信公众号介绍 1、公众号类型及基本介绍 服务号、订阅号、小程序之间的关联及区别 2、编辑模式的使用 非开发者使用微信公众号的方式,通过微信公众号提供的平台来编辑 3、开发模式及预备知识介绍 如果我们不想使用默认的编辑模式,可以在具备一…

【算法练习Day44】最长递增子序列最长连续递增序列最长重复子数组

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 最长递增子序列最长连续递增…

利用MSF设置代理

1、介绍: 通过MSF拿到一个机器的权限后,通过MSF搭建socks代理,然后通内网。 拿到目标权限,有很多方法,比如:①ms17-010 ②补丁漏洞 ③MSF生成后门 在此直接使用MSF生成后门 MSF中有三个代理模块&#x…

k8s ingress基础

一、ingress 简介 在k8s集群中,service和pod的ip为内网ip,仅集群内部才可以访问。如果外部应用想要直接访问集群内的服务,就需要把外部请求通过负载均衡转发到service上,然后再由kube-proxy组件将其转发给后端pod。一般service可…

Centos8安装出错问题

科普介绍: CentOS 8 是一个基于 Linux 的操作系统,是 Red Hat Enterprise Linux (RHEL)的免费和开源版本。它提供了稳定、安全和可靠的基础设施,适用于服务器和桌面环境。CentOS 8 是 CentOS 系列中最新的版本&#x…

亚数受邀参加“长三角G60科创走廊量子密码应用创新联盟(中心)”启动仪式

11月8日,在第六届中国国际进口博览会2023长三角G60科创走廊高质量发展要素对接大会上,亚数信息科技(上海)有限公司CEO翟新元作为密码企业代表之一受邀参加“长三角G60科创走廊量子密码应用创新联盟(中心)”…

ios 对话框 弹框,输入对话框 普通对话框

1 普通对话框 UIAlertController* alert [UIAlertController alertControllerWithTitle:"a" message:"alert12222fdsfs" pr…

人工智能数学基础3:用Python 编程求极限

求极限,并用Python 编程求极限 使用洛必达法则来求解 利用泰勒展开的方法来求解这个极限 import sympyx sympy.Symbol(x) f (sympy.sin(x) - x * sympy.cos(x)) / (sympy.sin(x) ** 3)limit_value sympy.limit(f, x, 0) print(limit_value)

OAuth2.0和1.0的区别

OAuth2.0的最大改变就是不需要临时token了,直接authorize生成授权code,用code就可以换取accesstoken了,同时accesstoken加入过期,刷新机制,为了安全,要求第三方的授权接口必须是https的。OAuth2.0不能向下兼…

FL Studio21.2宿主软件中文免费版下载

纵观当下宿主软件市场,正值百家争鸣、百花齐放之际像Mac系统的Logic Pro X、传统宿主软件代表Cubase、录音师必备Pro Tools、后起之秀Studio One等,都在各自的领域具有极高的好评度。而在众多宿主软件中,有这么一款历久弥新且长盛不衰的独特宿…

Postman使用json提取器和正则表达式实现接口的关联

近期在复习Postman的基础知识,在小破站上跟着百里老师系统复习了一遍,也做了一些笔记,希望可以给大家一点点启发。 一)使用json提取器实现接口关联 实际项目场景,在财务信息页面,需要上传一个营业执照&…

HashMap 是怎么解决哈希冲突的?

(本文摘自mic老师面试文档) 常用数据结构基本上是面试必问的问题,比如 HashMap、LinkList、 ConcurrentHashMap 等。 关于 HashMap,有个学员私信了我一个面试题说: “HashMap 是怎么解决哈希冲突 的?” …

竞赛选题 深度学习疲劳检测 驾驶行为检测 - python opencv cnn

文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习加…

STM32H563烧录后无法擦除

STM32H563烧录后无法擦除,使用STM32CubeProgrammer连接后显示如下图所示。

rocksdb 中 db_bench 的使用方法

硬件要求 硬件要求如表1所示。 表1 硬件要求 项目 说明 CPU 12 * AMD Ryzen 5 5500U with Radeon Graphics 内存 DDR4 磁盘 HDD 软件要求 软件要求如表2所示。 表2 软件要求 项目 版本 说明 下载地址 CentOS 7.6 操作系统。 Download kernel 4.14.0 内核。…

DDU框架学习之路

目录 MVVM对比 DDU 数据消费者UI 数据的转换者:Domain Layer 数据图生产者/提供者 DataLayer 遵循原理: 单一数据流: Android官方推荐架构:DDU MVVM对比 M:Model 网络层 用于获取远端数据 VM:ViewModel 中间转…