首页 > 其他分享 >穷穷穷孩子如何体验ColossalAI SFT(Kaggle篇)

穷穷穷孩子如何体验ColossalAI SFT(Kaggle篇)

时间:2023-05-01 11:11:24浏览次数:34  
标签:ColossalAI -- SFT kaggle https 穷孩子 com 下载

Kaggle Notebook每周会提供30小时的GPU免费使用额度。这为一些想先小小熟悉一下语言模型、但是手里没有资源可用、暂时还不想租用服务器的小伙伴来说,可能带来了一丝安慰。这篇教程以能够运行ColossalAI的“RLHF Training Stage1 - Supervised instructs tuning”部分为主线,附带罗列了安装过程中可能遇到的困难以及解决办法,希望对你有一点帮助。

  • 本篇教程对应代码:https://github.com/createmomo/Open-Source-Language-Model-Pocket
  • Kaggle:https://www.kaggle.com/
  • Colossal AI官方项目:https://github.com/hpcaitech/ColossalAI/tree/main/applications/Chat

 

本文微信公众号(“看个通俗理解吧”)版本(排版阅读更舒服,多配图):

https://mp.weixin.qq.com/s/Q29uSNxvPMy0rC-QxHiGZA

 

注意:

  • 此notebook只演示在kaggle notebook下如何跑通ColossalAI的SFT部分,并不会包含超参数的调整、对结果的分析等
  • 类似的操作放到google colab理论上应该也可以跑通
  • 如果你有自己的机器,则此notebook对你的帮助可能不大(因为你不需要在notebook上进行训练)
  • 此notebook的受众是手里没有GPU资源,但是又想熟悉和浅浅尝试ColossalAI的小伙伴

数据的准备

  1. 根据官方文档的提示 (https://github.com/hpcaitech/ColossalAI/tree/main/applications/Chat/examples),在运行前需要准备好数据
  2. 数据可以在这里下载 (https://github.com/XueFuzhao/InstructionWild/tree/main/data)。注意不要下载seed文件(因为seed文件只有instruction,而没有response)。要下载README里面提到的json文件,例如instinwild_ch.json。也可以自行准备数据,按照下载的json文件格式准备即可。
  1. 将数据上传到Kaggle的Dataset中(需要创建自己的Dataset,可以为仅自己可见),按照Kaggle的步骤操作就可以了

Kaggle Notebook

  1. 在界面右方添加Dataset,选择自己创建的Dataset。选择后,在代码中可以通过绝对路径访问。比如刚才创建的数据集名字叫做"instructdata",其中我们上传了文件"instinwild_ch_small.json",则在代码中,我们就可以通过这个路径访问数据集: /kaggle/input/instructdata/instinwild_ch_small.json

  2. 最好选择GPU T4x2(Kaggle Notebook界面右方的Accelerator中选择)。如果选择P100可能会在安装过程中报错

特别要注意的地方:

  1. 每周有30个小时的GPU使用时间
  2. 每一次启动notebook最长只能运行12个小时(如果启动了但是不怎么使用,比如没有运行任何cell,也没有什么编辑的动作,可能也会在12个小时以内被强行终止。与google colab不同的时,长时间运行cell是可以的)
  3. 一旦被终止,则不能再找回输出的数据!(输出的数据会放到/kaggle/working/路径下,如果需要里面的数据,必须在终止运行之前就下载下来)

安装环境

大体上是按照官方文档说明安装。但是,如果严格按照文档安装会报错。原因是ColossalAI是一个非常活跃的项目,每日都会有不同的代码变化。文档的部分内容可能还不能及时得到更新。所以,我们针对目前的情况,对安装顺序和细节做了一点微调。

相信在不远的将来,ColossalAI团队会把这些小bug修好,并且把文档逐渐完善起来。

1 ColossalAI

执行完下面的命令后,此时你会发现,下载的文件是放在了/kaggle/working/ColossalAI下

!git clone https://github.com/hpcaitech/ColossalAI.git

安装ColossalAI

如果不执行这个安装,可能会出现错误 (https://github.com/hpcaitech/ColossalAI/issues/3629):"ImportError: cannot import name 'ColoInitContext' from 'colossalai.zero'"

import os
os.chdir('./ColossalAI')
!pip install .

(chdir的作用是变换目前Python的工作目录)

安装transformers

这里我们安装的是hpcaitech下的transformers,如果直接pip install transformers是否可行并没有测试

!git clone https://github.com/hpcaitech/transformers
os.chdir('./transformers')
!pip install .

安装Chat部分需要的库

os.chdir('/kaggle/working/ColossalAI/applications/Chat/')
!pip install .

我们还需要将analyzer的部分复制到当前操作系统的对应的python packages目录中(否则可能将来会报错:找不到analyzer)。如果你问,我怎么知道packages的路径是哪里呢?其实在上面执行各种pip install的过程中,就可以发现这个路径。

!cp -r /kaggle/working/ColossalAI/colossalai/_analyzer/ /opt/conda/lib/python3.7/site-packages/colossalai/

2 预训练模型的下载(以bloom为例)

首先需要执行下面的命令(如果你是在colab中做尝试,可能也需要)

如果不安装下面的命令会出现什么情况呢?

  • 从huggingface中git clone下来的模型看似下载下来了,但是其实下载下来的并不是实质的模型文件(如果你检查文件的大小,只有几B)
  • 一旦下载下来的文件并不是实质的模型,则在运行SFT代码的时候会报错:safetensors_rust.SafetensorError: Error while deserializing header: HeaderTooLarge
!sudo apt-get install git-lfs
!git lfs install

下载ColossalAI支持的系列模型,我们以bloomz-560m为例。在下面,我们将模型放在了/kaggle/working/中,但是这里并不是强制的,可以根据自己的喜欢变换位置。

os.chdir('/kaggle/working/')
!git clone https://huggingface.co/bigscience/bloomz-560m

3 运行SFT

os.chdir('/kaggle/working/ColossalAI/applications/Chat/examples')

执行SFT代码

我们这里是直接运行的py文件,如果你按照文档的说明 (https://github.com/hpcaitech/ColossalAI/tree/main/applications/Chat/examples),运行sh脚本文件(!bash train_sft.sh)也是可以的。其本质上,都是运行这个train_sft.py文件。

在下面的命令中,我们以演示为目的(不以训练为目的):

  • 我们只是用一个非常非常非常小的数据集(--dataset)去跑程序(小到就只有5条数据)
  • model:改为了"bloom"
  • pretrain:改成了我们自己下载的模型地址
  • save_path: 改成了我们想放的目录地址

需要注意的是:

  • Kaggle Notebook的GPU是T4x2,所以显存大概有14.8+14.8=29.6G。所以我们在运行训练的时候可以设置 --nproc_per_node=2(如果是1的话,则有一块GPU会闲置,显存也会砍半)
  • 其他参数可能需要你自己去多多探索:比如lora、gradient checkingpoint等。更多参数的说明见官方文档 (https://github.com/hpcaitech/ColossalAI/tree/main/applications/Chat/examples)
!torchrun --standalone --nproc_per_node=2 train_sft.py \
    --pretrain "/kaggle/working/bloomz-560m" \
    --model 'bloom' \
    --strategy colossalai_zero2 \
    --log_interval 50 \
    --save_path  "/kaggle/working/bloomz-560m-finetuned" \
    --dataset "/kaggle/input/instructdata/instinwild_ch_small.json" \
    --batch_size 4 \
    --accumulation_steps 8 \
    --lr 2e-5 \
    --max_datasets_size 512 \
    --max_epochs 1

4 下载SFT完成的模型

os.chdir('/kaggle/working/')

理论上,我们是可以通过Kaggle Notebook右边的界面,选择想要下载的文件进行下载。但是由于Kaggle界面做的并不是很好,经常会出现目录不能显示的问题。好在,你应该是知道训练好的模型是放在了哪里。我们可以找到另一种办法将文件下载下来。

首先,我们把完成的模型进行打包(这样我们就可以一下字全都下载下来了,而不用一个一个的下载)

!tar -czvf bloomz-560m-finetuned.tar.gz bloomz-560m-finetuned

完成打包后,我们想办法获得下载链接。执行下面的命令后,直接点击链接便可下载。

from IPython.display import FileLink
FileLink(r'bloomz-560m-finetuned.tar.gz')

5 小结

跑起来只是一个开始。祝愿每个小伙伴最终都会获得更好的GPU资源、更棒的数据和更出色的属于自己的语言模型!


本篇教程对应代码:https://github.com/createmomo/Open-Source-Language-Model-Pocket

标签:ColossalAI,--,SFT,kaggle,https,穷孩子,com,下载
From: https://www.cnblogs.com/createMoMo/p/17366277.html

相关文章

  • centos 7 下docker 部署vsftpd(docker-compose)
    启动命令:dockerrun-d-p21:21-p20:20-p21100-21110:21100-21110-v/opt/vsftpd/file:/home/vsftpd-eFTP_USER=admin-eFTP_PASS=1234\-ePASV_MIN_PORT=21100-ePASV_MAX_PORT=21110-ePASV_ADDRESS=0.0.0.0-ePASV_ENABLE=YES--nameftp\--restar......
  • 使用FlashFxp sftp无法连接Linux处理
    sftp无法连接[18:32:41]FlashFXP5.4.0(build3970)[18:32:41]SupportForumshttps://www.flashfxp.com/forum/[18:32:41]...[18:33:03][R]SSH错误:协商认证模式失败[18:33:03][R]SSH连接已关闭[18:33:03][R]连接失败处理:/etc/ssh/sshd_config文件夹的一......
  • Windterm-SSH/Sftp/Shell/Telnet/Serial 客户端
    如果图片查看不了的话,请关注公众号@生活处处有BUGWindTerm是一款开源免费、跨平台SSH/Sftp/Shell/Telnet/Serial客户端,即远程连接工具,还跨平台,支持Windows、Linux和macOS。特征实现了SSHv2、Telnet、RawTcp、Serial、Shell协议。会话认证时支持SSH自动执行。支......
  • SFTP文件传输基本命令
    以下是sftp的一些基本操作命令1.sftp建立连接[root@localhost~]#sftpusername@remote_ip(orremotehostname),#连接root用户,则可省略"root@".[root@localhost~]#sftp-oport=1000username@remote_ip[root@localhost~]#[email protected]......
  • JSch - 配置SFTP服务器SSH免密登录
    目录1.什么是SFTP2.什么是Jsch以及它的作用3.sftp服务器认证机制4.publickey和password两种方式登录sftp的API调用需求:做一个通过ssh免密登录的需求,是基于原先密码登录sftp服务器的代码上进行改造1.什么是SFTPSFTP是一个安全文件传送协议,可以为传输文件提供一种安全的加......
  • Ubuntu搭建SFTP服务器笔记
    说明:server01为sftp服务端;client01为客户端【在server01上操作】1、强力卸载openssh-serverapt-getremove--purgeopenssh-server2、安装openssh-server1)更新apt-get源apt-getupdate2)安装openssh-serverapt-getinstallopenssh-server【在client01上操作】3、使用......
  • vsftp配置
    本文使用vsftp来部署ftp服务,要求如下:1、使用ftp用户登录指定的家目录,该ftp用户禁止本地登录,禁止访问非家目录外其他目录;2、不同用户登录不同家目录;具体操作配置如下:1、安装vsftp的rpm包# yuminstallvsftpd.x86_642、创建ftp用户允许登录ftp服务、禁止登录本地、指定家目录mkdir......
  • sftp在不同服务器间传数据?
    目录登录上传下载常用命令登录客户数据分享:连接登录:sftp-oport=xxxxusername@remote_ip上传上传文件把本地服务器的/www/wwwroot目录下面的study.log文件上传到远程服务器的/www/server目录下。sftp>lcd/www/wwwrootsftp>putstudy.log/www/server上传文件夹......
  • 安装完SFTP后,用PUTTY连接CENTOS,软件闪退问题
    我出现这个问题是因为SFTP和SSH的配置文件是一个,都是etc/ssh/sshd_config所以是配置文件的问题,我将配置SFTP时设置的删除下面这些就好了MatchGroupsftpX11ForwardingnoAllowTcpForwardingnoChrootDirectory%h           ForceCommandinternal-sftp......
  • Ubuntu 18.04安装SFTP服务
    1.安装sftp服务sudoapt-getinstallopenssh-server2.修改配置文件vim/etc/ssh/sshd_config##下面这行注释掉#Subsystemsftp/usr/libexec/openssh/sftp-server##后面加入Subsystemsftpinternal-sftp找到PermitRootLoginno一行,改为PermitRootLoginyes  让root用户可......