ColossalAI GPT2分布式训练调试配置—GPT系列训练与部署

2024-01-14 07:30

本文主要是介绍ColossalAI GPT2分布式训练调试配置—GPT系列训练与部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

        本专栏之前文章详细介绍了Colossal-AI环境搭建及GPT2数据处理与训练。Colossal-AI框架的主要优势在于分布式训练,进而提高训练效率。但是这种启动方式无法使用Pycharm等IDE直接进行调试。本节将重点介绍如何使用Pycharm来调试。Colossal-AI分布式GPT训练程序,文中所述方法不仅支持colossal run方法启动的程序,也支持torchrun或python -m torch.distributed.launch所启动的程序。这是因为它们本质上都是torch分布式启动方法。

        另外,本专栏具体更新可关注文章下方公众号,也可关注本专栏。所有相关文章会在《Python从零开始进行AIGC大模型训练与推理》中进行更新,地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。所有AIGC类模型部署的体验效果将在RdFast小程序中同步上线。

1 分布式训练启动方法

        由于Colossal-AI框架GPT2训练的默认启动方法为分布式模式,它的启动命令可以使用colossalai run,或torchrun,或python -m torch.distributed.launch。具体示例如下所示。

# 1、colossalai run方式启动GPT2训练
colossalai run --nproc_per_node=2 train_gpt.py --config=gpt2_configs/gpt2_vanilla.py --from_torch
# 2、torch run方式启动GPT2训练
torchrun --nproc_per_node=2 train_gpt.py --config=gpt2_configs/gpt2_vanilla.py --from_torch
# 3、python -m torch.distributed.launch方式启动GPT2训练
python -m torch.distributed.launch --nproc_per_node=2 train_gpt.py --config=gpt2_configs/gpt2_vanilla.py --from_torch

        虽然分布式训练启动方法有多种,但是却不支持Python直接启动。例如,“python train_gpt.py --config=gpt2_configs/gpt2_vanilla.py --from_torch”会报错误“RuntimeError: Could not find 'RANK' in the torch environment, visit https://www.colossalai.org/ for more information on launching with torch”。

2 Python启动方式配置

        上述分布式启动方式之一是python -m torch.distributed.launch,这说明python程序入口是launch.py文件。该文件通常位于python环境库site-packages/torch.distributed目录下,例如“/root/miniconda3/envs/clai/lib/python3.8/site-packages/torch/distributed/launch.py”。该文件的启动参数则为“--nproc_per_node=2 train_gpt.py --config=gpt2_configs/gpt2_vanilla.py --from_torch”。

        在PyCharm中,我们可以按照如上内容来配置启动程序和参数。配置页面路径为Run->Edit Configurations...,如下图所示。

图1 PyCharm配置启动程序入口

        点击“Edit Configurations...”后,PyCharm会弹出“Run/Debug Configurations”配置页面,如下图所示。需要注意,页面中分为Python和Python tests两类。我们需要在Python类别中进行配置。Python tests中类别没有启动程序路径和参数配置选项。

图2 Run/Debug Configurations配置页面

        具体配置步骤如下所示。远程服务器调试时,只需将启动程序和配餐参数中路径设置成服务器相应路径即可。远程服务器配置过程请参考第4部分

        (1)点击左上方“+”号,在弹出页面选择Python后,页面会主动创建一个Unamed配置。Unamed为配置名称,用户可以在Name字段中进行自定义,比如修改为“gpt2”。

        (2)在Scripts path中输入launch.py的完整绝对路劲,例如“/root/miniconda3/envs/clai/lib/python3.8/site-packages/torch/distributed/launch.py”。

        (3)在Parameters中输入启动参数,例如“--nproc_per_node=1 /root/project/ColossalAI-Examples/language/gpt/train_gpt.py --config=/root/project/ColossalAI-Examples/language/gpt/gpt2_configs/gpt2_vanilla.py --from_torch”。注意,这里为了方便后续调试而将nproc_per_node设置为1,即并行节点数为1。

        步骤(3)设置完成后,运行程序会调试找不到运行程序文件或配置文件,一般设置成完整绝对路径即可解决问题

        (4)点击运行按钮即可开始训练。

        配置完成界面如下所示。

 图3 配置完成页面

 图4 程序运行按钮

3 程序调试

        启动程序完成后,程序调试只要以Debug方式运行即可调试。Debug运行之前,可在实际主程序中设置断点,以便进行后续调试,如下图所示。

 图5 主程序断点设置

        通过不断步入等调试操作,我们可以定位到以下几个关键断点位置:

        (1)Colossal-AI框架训练入口:colossalai/trainer/_trainer.py第319行“for epoch in range(last_epoch, epochs):”。

        (2)Colossal-AI框架训练损失计算结果:colossalai/trainer/_trainer.py第181行logits, label, loss = self.engine.execute_schedule(”。

        (3)Colossal-AI框架模型计算入口:colossalai/amp/naive_amp/naive_amp.py第152行“out = self.model(*args, **kwargs)”。

        (4)Pytorch模型计算入口:torch/nn/modules/module.py第1130行“return forward_call(*input, **kwargs)”。

        (5)GPT模型计算入口:colossalai/titans/model/gpt/gpt.py第105行“x = self.embed(input_ids)”。

4 远程调试

4.1 服务器配置

        由于模型经常部署在服务器上,所以我们需要进行远程运行与调试。PyCharm远程配置页面为“Tools->Deployment->Configuration”,并在该页面点击“+”后选择“SFTP”。此时,页面会弹出新建服务器对话框,用户给服务器命名即可,例如test。

 图6 远程服务器配置

        在上述远程服务器配置页面的Connection中完成ssh远程连接配置,并在Mappings中完成路径配置。Mappings中的Local path为本机路径,Deployment path为服务器对应路径。Web path不用设置。程序运行时会将Deployment path的文件同步到本机的Local path。

4.2 python解释器

        PyCharm远程Python解释器配置页面为“Files->Settings->Project: python ->Python Interpreter->SSH Interpreter”,如下图所示。

图7 Python解释器配置

4.3 远程调试

        PyCharm远程调试与上述第3部分调试完全一致。调试之前,我们需要通过Tools->Deployment将运行程序同步下载到本地,如train_gpt.py等,然后在该文件中设置断点,最后以Debug方式运行程序即可开始调试。

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

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

        另外,本专栏具体更新可关注文章下方公众号,也可关注本专栏。所有相关文章会在《Python从零开始进行AIGC大模型训练与推理》中进行更新,地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。所有AIGC类模型部署的体验效果将在RdFast小程序中同步上线。

这篇关于ColossalAI GPT2分布式训练调试配置—GPT系列训练与部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/604389

相关文章

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

Keepalived+Nginx双机配置小结

《Keepalived+Nginx双机配置小结》本文主要介绍了Keepalived+Nginx双机配置小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1.1 软硬件要求1.2 部署前服务器配置调优1.3 Nginx+Keepalived部署1.3

Apache伪静态(Rewrite).htaccess文件详解与配置技巧

《Apache伪静态(Rewrite).htaccess文件详解与配置技巧》Apache伪静态(Rewrite).htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令,主要的... 一、.htAccess的基本作用.htaccess是一个纯文本文件,它里面存放着Apache服务器

nginx配置多域名共用服务器80端口

《nginx配置多域名共用服务器80端口》本文主要介绍了配置Nginx.conf文件,使得同一台服务器上的服务程序能够根据域名分发到相应的端口进行处理,从而实现用户通过abc.com或xyz.com直... 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc