GPT系列训练与部署——GPT2环境配置与模型训练

2023-11-20

        本文为博主原创文章,未经博主允许不得转载。

        本文为专栏《Python从零开始进行AIGC大模型训练与推理》系列文章,地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。

        Colossal-AI提供了多种并行方式来运行GPT,不同并行方式的相应配置位于gpt2_configs文件夹下。运行示例程序的教程地址为“https://github.com/hpcaitech/ColossalAI-Examples/tree/main/language/gpt”。我们将根据该教程中的步骤来运行GPT训练程序。Colossal-AI环境搭建与运行测试请参考本专栏文章《GPT系列训练与部署——Colossal-AI环境配置与测试验证》,地址为“https://blog.csdn.net/suiyingy/article/details/130209217”。

图1 GPT训练教程页面

        本节将重点介绍如何在Colossal-AI中运行GPT程序。更多AIGC类模型训练、推理及部署请参考本专栏文章《Python从零开始进行AIGC大模型训练与推理》,地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。我们也会在文末下方公众号中进行同步更新。相关AIGC模型体验会在RdFast小程序中同步上线。

1 环境安装

1.1 Colossal-AI环境

        Colossal-AI环境搭建与测试请参考本专栏文章《GPT系列训练与部署——Colossal-AI环境配置与测试验证》,地址为“https://blog.csdn.net/suiyingy/article/details/130209217”。

1.2 ColossalAI-Examples环境

        ColossalAI-Examples包含了一些示例程序,例如 GPT训练程序,其环境搭建步骤如下所示。

git clone https://github.com/hpcaitech/ColossalAI-Examples.git
cd ColossalAI-Examples
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

1.3 Colossal-AI GPT环境

        环境安装指令如下所示。其中,LSH安装依赖于早期版本GCC,即版本不易过高。教程指出9.3.0版本gcc满足要求,而10.3.0版本则不满足。

pip install ftfy langdetect numpy torch pandas nltk sentencepiece boto3 tqdm regex bs4 newspaper3k htmlmin tldextract cached-path  -i https://pypi.tuna.tsinghua.edu.cn/simple
git clone https://github.com/mattilyra/LSH.git
cd LSH
python setup.py install

        安装LSH时可能报如下错误,解决方式是用Colossal-AI的cMinhash.cpp替换LSH/lsh文件夹下文件,然后重新运行“python setup.py install”。文件替换参考命令为“cp ~/project/ColossalAI-Examples/language/gpt/tools/LSH/cMinhash.cpp lsh/cMinhash.cpp”。

/root/miniconda3/envs/clai/lib/python3.8/site-packages/numpy/core/include/numpy/__multiarray_api.h: At global scope:
/root/miniconda3/envs/clai/lib/python3.8/site-packages/numpy/core/include/numpy/__multiarray_api.h:1477:1: warning: ‘int _import_array()’ defined but not used [-Wunused-function]
 _import_array(void)
 ^~~~~~~~~~~~~
error: command '/usr/bin/gcc' failed with exit code 1

2 数据下载

2.1 url文件下载

        GPT2模型的数据集为OpenWebText,主要来源于网页文本,其完整数据集大小为38GB。Colossal-AI提供了OpenWebText数据集的下载地址,即“https://mega.nz/#F!EZZD0YwJ!9_PlEQzdMVLaNdKv_ICNVQ!cc4RgQQZ”。下载后文件为OpenWebText.zip的压缩文件,解压后文件目录为OpenWebText/Version 1/URLs。目录下包括161个文本文件,每个文件记录了网页内容的地址url。

2.2 数据清洗

        由于OpenWebText数据集中的部分url可能已经无法访问,所以需要运行如下命令后完成数据清洗。

cd path/to/tools
python Megatron/blacklist_urls.py <path/to/URLs> <path/to/clean_urls.txt>

        具体示例如下:

cd ColossalAI-Examples/language/gpt/tools/
python Megatron/blacklist_urls.py /data/data/clai/data/OpenWebText/Version\ 1/URLs/ /data/data/clai/data/OpenWebText/clean_urls.txt

        程序运行完成之后会在指定的路径下生成clean_urls.txt文件,文件包含了经过清洗后的21269934个url地址。

2.3 内容下载

        根据清洗后的url地址,我们需要下载其中的网页内容。下载命令如下所示,其中n_procs是线程数量。

Cd /language/gpt/tools
python download/download.py <path/to/clean_urls.txt> --n_procs 50 --output <path/to/raw.json>

        由于完整数据集下载时间较久,我们可以通过下面的命令仅下载一部分数据。其中,max_urls可指定最多下载的url数量,timeout用于设定url访问的超时时间。设置超时时间的好处是快速跳过无法连接的url地址。

python download/download.py  /data/data/clai/data/OpenWebText/clean_urls.txt --output /data/data/clai/data/OpenWebText/raw.json --max_urls 1000 --timeout 30

        下载后的网页内容存储在所指定路径下的raw.json文件。文件包含了一系列由json格式数据组成的列表,每个json数据对应一个url中的网页内容。Json格式为{'text': text, 'url': unique_url},示例如下所示。

{"text": "The space station looks like an airplane or a very bright star moving across the sky, except it doesn't have flashing lights or change direction. It will also be moving considerably faster than a typical airplane (airplanes generally fly at about 600 miles per hour; the space station flies at 17,500 miles per hour).\n\nBelow is a time-lapse photo of the space station moving across the sky.\n\nThe International Space Station is seen in this 30 second exposure as it flies over Elkton, VA early in the morning, Saturday, August 1, 2015. Photo Credit: NASA/Bill Ingalls\n\nVisit the NASA Johnson Flickr Photostream", "url": "http://spotthestation.nasa.gov/sightings/view.cfm?country=United_States®ion=Arizona&city=Phoenix#.UvPTWWSwLpM"}

 图2  raw.json中原始数据

3 数据处理

        相关程序位于language/gpt/tools文件夹下。

3.1 删除长度过短的文本。

        运行“python Megatron/cleanup_dataset.py <path/to/raw.json> <path/to/clean.json>”可删除长度少于128个token的数据。示例程序如下。程序中提供的cleanup_fix_dataset.py支持更多清理数据选项。清理后的数据保存于clean.json。

python Megatron/cleanup_dataset.py /data/data/clai/data/OpenWebText/raw.json  /data/data/clai/data/OpenWebText/clean.json

3.2 删除相似数据

        程序使用LSH找出可能相似的数据,然后对相似度较高的数据进行分组,每组数据最后仅保留其中一个数据,删除其它所有相似数据。

#查找相似数据
python Megatron/find_duplicates.py --inputs <path/to/clean.json> url --output <path/to/process_stage_one.json>
#相似数据分组
python Megatron/group_duplicate_url.py <path/to/process_stage_one.json> <path/to/process_stage_two.json>
#删除相似数据
python Megatron/remove_group_duplicates.py <path/to/process_stage_two.json> <path/to/clean.json> <path/to/dedup.json>

        示例程序如下,处理后结果保存在dedup.json。

python Megatron/find_duplicates.py --inputs /data/data/clai/data/OpenWebText/clean.json url --output /data/data/clai/data/OpenWebText/process_stage_one.json
python Megatron/group_duplicate_url.py /data/data/clai/data/OpenWebText/process_stage_one.json /data/data/clai/data/OpenWebText/process_stage_two.json
python Megatron/remove_group_duplicates.py /data/data/clai/data/OpenWebText/process_stage_two.json /data/data/clai/data/OpenWebText/clean.json /data/data/clai/data/OpenWebText/dedup.json

3.3 打乱数据顺序

        使用命令“shuf <path/to/dedup.json> -o <path/to/train_data.json>”随机打乱数据,并保存于train.json。处理后的数据结构与第二部分的数据结构完全一致,即{'text': text, 'url': unique_url}。

shuf /data/data/clai/data/OpenWebText/dedup.json -o /data/data/clai/data/OpenWebText/train_data.json

4 中文数据集处理

        中文数据集使用的是浪潮提供的“源数据”,可在“ https://air.inspur.com/home”网站进行申请。其分词表下载地址为“https://github.com/Shawn-Inspur/Yuan-1.0/blob/main/src/vocab.txt”。完整源数据下载后的目录结构形式如下所示。

|--dataset
|     |--001.txt
|     |--002.txt
|     |--...
|--vocab.txt

        使用该数据集训练时需要替换train_gpt.py的44行,如下所示。

import dataset.yuan import YuanDataset
train_ds = YuanDataset(os.environ['DATA'], vocab_path='/path/to/data/vocab.txt'seq_len=gpc.config.SEQ_LEN)

5 模型训练

5.1 设置训练数据路径

        这里以OpenWebText数据集来进行训练。数据集路径可以通过设置环境变量的方法来进行设置,即“export DATA=/path/to/train_data.json”,也可通过将train_gpt.py的第44行更改为“ train_ds = WebtextDataset('/data/data/clai/data/OpenWebText/train_data.json', seq_len=gpc.config.SEQ_LEN)”来实现。

5.2 模型训练

        模型训练命令为“colossalai run --nproc_per_node=<num_gpus> train_gpt.py --config=gpt2_configs/<config_file>”。其中,num_gpus为GPU数量,config可加载不同配置的GPT2或GPT3训练参数。

        示例程序为“colossalai run --nproc_per_node=2 train_gpt.py --config=gpt2_configs/gpt2_vanilla.py”。运行过程中两块GPU分别占用显存4621MB。训练过程如下图所示。如果运行报错,请继续阅读下面内容

 图3 GPT2训练示意图

        其它GPT2模型训练配置下的显存和并行训练方式如下表所示。TP、PP和DP代表三种并行模式,分别表示Tensor Parallel、Pipeline Parallel、Data Parallel。GPU数量由三者相乘得到,即TP * PP * DP,且DP取值是自动计算的。

 图4 GPT2训练配置

        如果运行报错“ModuleNotFoundError: No module named 'colossalai.zero.init_ctx'”,那么建议通过pip uninstall卸载colossalai,并重新通过pip install colossalai进行安装。安装过程中建议不使用镜像或更换不同镜像,这是因为个别镜像网站上的资源可能仍然存在该问题。

        如果运行报错“KeyError: 'SLURM_PROCID'”,那么需要将运行命令替换为“colossalai run --nproc_per_node=2 train_gpt.py --config=gpt2_configs/gpt2_1d.py --from_torch”,即增加--from_torch。

6 配置文件介绍

        配置文件可参考官方介绍,主要是并行方式、训练迭代次数、Batch Size和隐藏变量维度设置,https://github.com/hpcaitech/ColossalAI-Examples/tree/main/language/gpt。这里不作额外介绍,后续文章将结合训练程序调试过程详细介绍。

        GPT3模型训练参数配置如下所示。

 图5 GPT3训练配置

        更多AIGC类模型训练、推理及部署请参考本专栏文章《Python从零开始进行AIGC大模型训练与推理》,地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。我们也会在文末下方公众号中进行同步更新。相关AIGC模型体验会在RdFast小程序中同步上线。

        本文为博主原创文章,未经博主允许不得转载。

        本文为专栏《Python从零开始进行AIGC大模型训练与推理》系列文章,地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GPT系列训练与部署——GPT2环境配置与模型训练 的相关文章

随机推荐

  • 实测视频!为什么独立比贴片IMU更适合智能驾驶?

    在汽车智能化这场行业变革中 作为智能驾驶的标配 高精度定位系统已成L2级及以上智能驾驶 照进现实 进程中四两拨千斤的存在 惯性测量单元IMU因其工作不依赖包括卫星在内的外界信号 已是智能汽车高精度定位系统的核心元器件 然而行业对于IMU应如
  • iOS 架构组件:让你的 TableView 优雅起来

    看什么看 点我呀 全栈程序员 免费入门到精通 作者丨indulge inhttps www jianshu com p 7db73489ad99 GitHub 地址 https github com indulgeIn YBHandyTab
  • iOS代码混淆初探

    iOS代码混淆初探 在没有对应用的代码做过特殊处理的情况下 一般应用的代码中的类名和方法都是明文的 在逆向分析中 通过class dump获取MachO可执行文件中的所有类 定义的方法和属性 就能很快的从名字入手猜到这个方法是做什么用的 所
  • 如何查看MySQL的版本?

    原文地址 http blog csdn net lamp yang 3533 article details 52266320 查看MySQL的版本 主要有以下几个方法 1 没有连接到MySQL服务器 就想查看MySQL的版本 打开cmd
  • java并发包:fork/join

    本文转载至 http blog csdn net a910626 article details 51900967 Fork Join框架是Java7提供了的一个用于并行执行任务的框架 是一个把大任务分割成若干个小任务 最终汇总每个小任务结
  • vue+ts+element-plus 父组件调用子组件,子组件为el-dialog,无法弹出子组件?

    问题 使用vue ts element plus练习 在使用el dialog时遇到问题 问题1 是子组件为el dialog 父组件调用子组件弹出对话框 因为element plus中el dialog的v model无法赋值为props
  • 常用的idea快捷键及其使用说明如下:

    常用的idea快捷键及其使用说明如下 1 Ctrl N 打开一个新的文件 2 Ctrl S 保存当前文件 3 Ctrl Shift N 创建一个新的文件夹 4 Ctrl Shift S 另存为当前文件 5 Ctrl O 打开一个已存在的文件
  • java编译命令用什么写_要编译java程序需要使用的命令是什么

    要编译java程序需要使用的命令是什么 发布时间 2020 07 22 14 01 15 来源 亿速云 阅读 83 作者 Leah 要编译java程序需要使用的命令是什么 很多新手对此不是很清楚 为了帮助大家解决这个难题 下面小编将为大家详
  • Qt里通过传递函数指针实现动态绑定信号/槽

    test h include
  • 在VMware中给win10/win7虚拟机配置静态IP地址(保姆级教学,全是干货)

    1 点击VMware菜单栏的编辑 进入虚拟网络编辑器 2 点击更改设置 3 选择NAT模式 取消勾选 使用本地DHCP服务将IP地址分配给虚拟机 然后点击NAT设置 查看并记住网关IP 然后关闭NAT设置窗口 回到虚拟编辑器页面 点击确定
  • 51单片机 数码管中断操作

    实践目的 1 掌握中断的概念和思想 2 掌握51单片机中断系统和相关软硬件设计 实践内容 1 利用单片机的P0口接数码管的字段脚 P1 0脚接共阴极 P3 2 P3 3引脚接独立按键产生外部中断信号 编写程序 当程序正常运行时数码管显示H字
  • 如何保护您的数据免受.malox勒索病毒的威胁?

    简介 malox勒索病毒是2022年就开始出现的一种恶意软件 它以其强大的加密算法和恶意行为而闻名 91数据恢复将在本文深入探讨 malox勒索病毒的特征 以及被 malox勒索病毒加密的数据文件的恢复方法 帮助受害者了解如何应对这一威胁
  • vue3使用babel-plugin-import按需引入element-plus

    vue3使用babel plugin import按需引入element plus 2022年6月13日更新 用babel plugin import按需引入element plus会有问题 用官方推荐的方式真香了 以下是链接 https
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • 如何在linux系统下创建空白文本.txt文件

    如何在linux系统下创建空白文本 txt文件 跳转到要新建文本的目录下 打开终端 输入命令 最后 跳转到要新建文本的目录下 可利用cd命令在终端跳转 或者直接到要新建文件的目录文件夹中 打开终端 输入命令 touch 文本名 txt 例如
  • MySQL之索引

    数据库中的索引与书的目录相似 表中的数据类似于书的内容 书的目录有助于读者快速地找到书中相关的内容 数据库的索引有助于加快数据检索速度 目前大部分MySQL索引都是以B 树 BTREE 方式存储的 BTREE方式构建了包含多个节点的一棵树
  • pyqt点击按钮执行脚本

    class NineGridApp QWidget def init self super init self initUI def initUI self self setWindowTitle 测试常见的操作 self setGeome
  • ClassUtils.getClassFileName()方法具有什么功能呢?

    转自 ClassUtils getClassFileName 方法的功能简介说明 下文笔者讲述ClassUtils getClassFileName方法的功能简介说明 如下所示 ClassUtils getClassFileName 方法的
  • 异或运算总结

    其实主要是想介绍一些关于异或的一些例题 方便自己的复习 目录 什么是异或运算 异或运算的性质 异或性质的应用 什么是异或运算 异或 xor 是一个数学运算符 它应用于逻辑运算 异或的数学符号为 计算机符号为 xor 其运算法则为 a b a
  • GPT系列训练与部署——GPT2环境配置与模型训练

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 Python从零开始进行AIGC大模型训练与推理 系列文章 地址为 https blog csdn net suiyingy article details 130169592 Colo