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环境配置与模型训练 的相关文章

  • 用CHAT写一份标题为职业教育教师教学能力提升培训总结

    CHAT回复 标题 职业教育教师教学能力提升培训总结 一 活动概述 本次由学校组织的职业教育教师教学能力提升培训于8月15日至8月20日顺利进行 来自全校的60位职业教育教师参与了此次培训 主讲人为享有盛名的教育专家马丁先生 二 培训内容与
  • 喜报|华测导航荣获“张江之星”领军型企业称号

    近日 2023年度 张江之星 企业培育名单发布 上海华测导航荣获2023年度 张江之星 领军型企业称号 据悉 张江之星 企业培育是上海科创办为落实 关于推进张江高新区改革创新发展建设世界领先科技园区的若干意见 张江高新区加快世界领先科技园区
  • Soul App:年轻人的社交状态,还有多少种可能?

    查尔斯 狄更斯在 双城记 的开篇写下 这是最好的时代 这是最坏的时代 这是智慧的时代 这是愚蠢的时代 这是信仰的时期 这是怀疑的时期 人们面前有着各样事物 人们面前一无所有 既然万事万物都和狄更斯所说般 好坏参半 那又何必执着于过去 苦恼于
  • 利用CHAT写实验结论

    问CHAT 通过观察放置在玻璃表面上的单个水滴 人们可以观察到水滴充当成像系统 探究这样一个透镜的放大倍数和分辨率 CHAT回复 实验报告标题 利用玻璃表面的单一水滴观察成像系统的放大倍数和分辨率 一 实验目的 通过对比和测量 研究和探索玻
  • 面对AI革新时,Soul App等社交应用的“出圈”解法是什么?

    2023年初 ChatGPT掀开海内外互联网 AI革新 的序幕 公众在惊讶于ChatGPT对于海量信息富有逻辑的整合归纳 帮助大家提升工作及学习效率之余 更为期待的莫过于有一天人工智能的 意识觉醒 十余年前由斯派克 琼斯 Spike Jon
  • 链上繁荣,合作不断,外媒热议波场 TRON 2023 年度成绩

    近日 权威外媒Theblock 美联社和Decrypt等就波场 TRON 2023大事件进行了年度盘点 报道指出 波场TRON网络在2023年取得了一系列的发展和合作 提升了其在Web3领域的地位 其中 波场TRON网络账户数量增加了 54
  • 活动日程&直播预约|智谱AI技术开放日 Zhipu DevDay

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 直播预约通道 关于AI TIME AI TIME源起于2019年 旨在发扬科学思辨精神 邀请各界人士对人工智能理论 算法和场景应用的本质问题进行探索 加强思想碰撞 链接全球AI学
  • 明日 15:00 | NeurIPS 2023 Spotlight 论文

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 哔哩哔哩直播通道 扫码关注AITIME哔哩哔哩官方账号预约直播 1月17日 15 00 16 00 讲者介绍 黄若孜 腾讯AI LAB游戏AI研究员 2020年复旦大学硕士毕业后
  • 毕业设计:基于深度学习的微博谣言检测系统 人工智能

    目录 前言 设计思路 一 课题背景与意义 二 算法理论原理 三 检测的实现 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有
  • 台积电再被坑,2纳米光刻机优先给Intel和三星,美国太霸道了

    外媒指出今年ASML的10台2纳米光刻机分配已经基本确定了 Intel拿到6台 三星获得3台 台积电只能得到一台 考虑到美国对ASML的强大影响力 外媒的这些消息应该有较高的可信性 Intel在先进工艺制程方面 自从2014年量产14纳米之
  • 机器学习算法实战案例:时间序列数据最全的预处理方法总结

    文章目录 1 缺失值处理 1 1 统计缺失值 1 2 删除缺失值 1 3 指定值填充 1 4 均值 中位数 众数填充
  • 机器学习算法实战案例:Informer实现多变量负荷预测

    文章目录 机器学习算法实战案例系列 答疑 技术交流 1 实验数据集 2 如何运行自己的数据集 3 报错分析 机器学习算法实战案例系
  • 主流进销存系统有哪些?企业该如何选择进销存系统?

    主流进销存系统有哪些 企业该如何选择进销存系统 永久免费 的软件 这个可能还真不太可能有 而且就算有 也只能说是相对免费 因为要么就是数据存量有限 要么就是功能有限 数据 信息都不保障 并且功能不完全 免费 免费软件 免费进销存 诸如此类
  • 微信公众号AI爆文项目入门

    今日 尝试了进行AI爆文的项目 其核心逻辑是不依赖于传统的打造个人IP 而是使用ChatGPT 文心一言等大语言模型进行创作 并发表到微信公众号平台 实现低粉爆文的效果 通过系统流量池的推荐来实现收益 一篇10W 的文章的收益在800到几千
  • CorelDRAW2024官方中文版重磅发布更新

    35年专注于矢量设计始于1988年并不断推陈出新 致力为全球设计工作者提供更高效的设计工具 CorelDRAW 滋养并见证了一代设计师的成长 在最短的时间内交付作品 CorelDRAW的智能高效会让你一见钟情 CorelDRAW 全称 Co
  • 3D点云检测神技 | UFO来了!让PointPillars、PV-RCNN统统涨点!

    作者 AI驾驶员 编辑 智驾实验室 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 3D目标检测 技术交流群 本文只做学术分享 如有侵权 联系删文 在这篇论文中提出了一个关于在3D点云中检测未
  • 考虑光伏出力利用率的电动汽车充电站能量调度策略研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 自动驾驶离不开的仿真!Carla-Autoware联合仿真全栈教程

    随着自动驾驶技术的不断发展 研发技术人员开始面对一系列复杂挑战 特别是在确保系统安全性 处理复杂交通场景以及优化算法性能等方面 这些挑战中 尤其突出的是所谓的 长尾问题 即那些在实际道路测试中难以遇到的罕见或异常驾驶情况 这些问题暴露了实车
  • 实力认证!鼎捷软件荣膺“领军企业”和“创新产品”两大奖项

    近日 由中国科学院软件研究所 中科软科技股份有限公司联合主办的 2023中国软件技术大会 于北京成功举办 本届大会以 大模型驱动下的软件变革 为主题 数十位来自知名互联网公司和软件巨头企业的技术大咖 不同领域行业专家 畅销书作者等分享嘉宾
  • AI 赋能绿色制冷,香港岭南大学开发 DEMMFL 模型进行建筑冷负荷预测

    近年来 城市化进程加速所带来的碳排放量骤增 已经严重威胁到了全球环境 多个国家均已给出了 碳达峰 碳中和 的明确时间点 一场覆盖全球 全行业的 绿色革命 已经拉开序幕 在一众行业中 建筑是当之无愧的能耗大户 其中又以暖通空调 Heating

随机推荐

  • 实测视频!为什么独立比贴片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