首页 > 系统相关 >ubuntu上搭建ChatGLM2-6b环境及ptuing微调训练的坑

ubuntu上搭建ChatGLM2-6b环境及ptuing微调训练的坑

时间:2023-07-30 22:56:27浏览次数:89  
标签:6b -- ChatGLM2 per train steps ubuntu 安装

清华大学的chatGLM2-6B可以说是目前亚洲唯一能打的对中文支持不错的LLM大模型,网上已经有很多介绍如何在本机搭建环境的文章,就不再重复了,这里记录下最近踩的一些坑:

1、为啥要使用ubuntu?

chatGLM2-6b项目里有很多.sh文件,在windows下要正常运行通常要折腾一番,最后能不能全部通关,讲究1个“缘”字,还不如直接找个linux环境,能避免不少麻烦,如果不想安装双系统的同学们,也可以使用windows 10/11的WSL子系统,但使用WSL强烈建议大家把windows更新到最新补丁,然后升级WSL2(注:WSL确实不错,能干很多ubuntu的事儿,但是ptuing微调cuda一直提示初始化失败,最后还是放弃 )

 

2、没有GPU显卡能玩GLM大模型吗?

能!但体验极差,几乎只能跑个hello world,干不了啥正事儿,基本上会被劝退,还是建议租个服务器,或者至少弄个8G显存的N卡,我用的就是RTX4060.

 

3、ubuntu上怎么安装cuda及cudnn?

这里有一个很坑的地方,网上几乎所有文章全是清一色的介绍怎么用命令行,一步步下载安装,巨复杂,关键还不一定好使,我的ubuntu 22.04 LTS参照这些方法,试了2次,每次安装到最后,把gdm3关闭后,安装完再重启,就黑屏进不去了,按网上的各种解救方法也没效果,最后只能把ubuntu重装,浪费我不少时间 。

后面发现,软件与更新里,点点鼠标就能完成的事儿

3.1 先把服务器源设置成中国或主服务器

强烈建议:先不要按网上说的,把源换成阿里云、清华 这些国内镜像站点,不是说它们不好,而是国内镜像站点或多或少,可能更新不及时,有些依赖包不全,导致最后各种其名其妙的问题。

我在安装gcc/g++/make时就因为这个源的问题,折腾了好久,一直提示依赖项不满足 ,最后换成主服务器,就解决了。

在3.2之前,建议先安装以下组件(可能并不需要)

sudo apt install gcc
sudo apt install g++
sudo apt install make

3.2 附加驱动,选择专有驱动(默认是带-open的)

然后关闭,等着安装完成即可.

3.3 安装nvitop

这一步是可选的,推荐大家安装这个小工具 , 比nvidia-smi 好用太多,参见下面的截图, GPU的使用情况一目了然

 

4、ptuning微调问题

按ptuing/readme.md的介绍,把AdvertiseGen训练了一把,量化8(其它核心参数没改)

PRE_SEQ_LEN=128
LR=2e-2
NUM_GPUS=1

torchrun --standalone --nnodes=1 --nproc-per-node=$NUM_GPUS main.py \
    --do_train \
    --train_file AdvertiseGen/train.json \
    --validation_file AdvertiseGen/dev.json \
    --preprocessing_num_workers 10 \
    --prompt_column content \
    --response_column summary \
    --overwrite_cache \
    --model_name_or_path /home/jimmy/code/model/chatglm2-6b \
    --output_dir /home/jimmy/code/model/output/adgen-chatglm2-6b-pt-$PRE_SEQ_LEN-$LR \
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 128 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 16 \
    --predict_with_generate \
    --max_steps 3000 \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate $LR \
    --pre_seq_len $PRE_SEQ_LEN \
    --quantization_bit 8

跑了15小时,下面是output目录里的结果汇总:

{
    "epoch": 0.42,
    "train_loss": 3.3751344401041665,
    "train_runtime": 54080.5566,
    "train_samples": 114599,
    "train_samples_per_second": 0.888,
    "train_steps_per_second": 0.055
}

跑完之后,对比了下,对于服装类的问题,回答确实看上去更专业了 ,参考下图:

徾调前:

徾调后:

但也出现了1个严重的新问题:原来的通用对话能力退化了,问个“你好”都回答服装问题。在ChatGLM的微信交流群里问了下,发现不止我1个这样,原因可能是训练过拟合了,需要调整训练参数,重新训练不断尝试,以达到最佳效果。看来微调训练是一门艺术!

标签:6b,--,ChatGLM2,per,train,steps,ubuntu,安装
From: https://www.cnblogs.com/yjmyzz/p/chatGLM2-6B-on-ubuntu.html

相关文章

  • Postgresql 在Ubuntuserver 22.04上部署
    安装与卸载系统环境:1.ubuntu22.04server安装1.检查是否已经安装#psql服务sudoservicepostgresqlstatus#版本查看psql--version2.安装命令#更新安装源内容sudoapt-getupdate#postgresql-contrib额外特性安装sudoaptinstallpostgresqlpostgresql......
  • 用U盘在电脑上安装ubuntu20.04
    进入BIOS按f2.f8.delete进入bios联想是f12选择语言并点击试用ubuntu进入系统之后点击安装ubuntu分配磁盘格式化磁盘设置引导分区/boot引导分区\boot512mb设置根目录/剩下所有空间都分给/home时区设置成上海设置计算机账户名和密码配置ROOT密码ctrl+alt+t进入命令行,输入:sudop......
  • 正点原子Ubuntu入门016---shell脚本条件判断、函数和循环
    一、shell脚本的条件判断虽然可以通过&&和||来实现简单的条件判断,但是稍微复杂的就不行了shell脚本呢提供了if  then 条件判断语句,写法:if条件判断;then//判断条件成立要做的事情fi   ifthenelse语法 if条件判断;then//判断条件成立要做的事情e......
  • 如何拉取指定CPU架构的并且指定ubuntu版本的并且指定cuda和cudnn版本的docker镜像
    本篇讲的重点是如何拉取带有cuda和cudnn的docker镜像,因此这些的镜像源的频道为NVIDIA:官方地址:https://hub.docker.com/r/nvidia/cuda   根据官方资料我们知道NVIDIA的docker的tag分为三类:  base版本、runtime版本、devel版本:base版本只安装了cuda,runtime版本安装......
  • 记录Ubuntu20.04安装Python3.7
    1、先升级一下软件包列表和软件包管理工具sudoapt-getupdatesudoapt-getupgrade 2、安装依赖:sudoaptinstallopenssl*zlib* 3、下载Python压缩包wgethttps://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz 4、解压缩tar-zxvfPython-3.7.1.tgz进入解......
  • 如何拉取指定CPU架构的并且指定ubuntu版本的docker镜像
     拉取不同CPU架构下ubuntu22.04镜像:aarch64(armv8)CPU架构:dockerpull--platform=linux/aarch64ubuntu:22.04 x86_64CPU架构:dockerpull--platform=linux/x86_64ubuntu:22.04  ---------------------------------------------------------------------------......
  • ubuntu 如何放开端口
     在Ubuntu上放开端口,可以通过以下步骤进行操作:使用root用户或具有管理员权限的用户登录到Ubuntu系统。使用防火墙工具(如ufw)放开特定的端口。ufw是Ubuntu上的一个简化的防火墙配置工具,可以轻松管理端口和防火墙规则。检查ufw是否已安装:在终端中执行sudoufwversion,如......
  • ubuntu 如何放开端口
     在Ubuntu上放开端口,可以通过以下步骤进行操作:使用root用户或具有管理员权限的用户登录到Ubuntu系统。使用防火墙工具(如ufw)放开特定的端口。ufw是Ubuntu上的一个简化的防火墙配置工具,可以轻松管理端口和防火墙规则。检查ufw是否已安装:在终端中执行sudoufwversion,如......
  • ubuntu 如何放开端口
    ​ 在Ubuntu上放开端口,可以通过以下步骤进行操作:使用root用户或具有管理员权限的用户登录到Ubuntu系统。使用防火墙工具(如ufw)放开特定的端口。ufw是Ubuntu上的一个简化的防火墙配置工具,可以轻松管理端口和防火墙规则。检查ufw是否已安装:在终端中执行sudou......
  • ubuntu 如何放开端口
    ​ 在Ubuntu上放开端口,可以通过以下步骤进行操作:使用root用户或具有管理员权限的用户登录到Ubuntu系统。使用防火墙工具(如ufw)放开特定的端口。ufw是Ubuntu上的一个简化的防火墙配置工具,可以轻松管理端口和防火墙规则。检查ufw是否已安装:在终端中执行sudou......