使用EAIS训练PyTorch模型(EAIS内置AIACC-Training)

EAIS实例成功绑定至ECS实例后,您需要远程登录该ECS实例,然后使用EAIS实例进行AI训练。本文为您介绍使用Python脚本通过EAIS实例(内置AIACC-Training 2.0加速库)训练PyTorch模型的具体操作。

前提条件

已将EAIS实例绑定至ECS实例上。具体操作,请参见绑定ECS实例

背景信息

目前只有Python脚本可以训练PyTorch模型,本文介绍使用Python脚本训练PyTorch模型的具体操作,如果您在使用EAIS训练过程中遇到问题,请联系EAIS技术支持。

训练特点

使用EAIS实例进行AI训练时,具有如下特点:

  • 通过在ECS实例上绑定EAIS实例,然后在ECS实例上提交任务的方式,实现CPU和GPU的解耦。

  • EAIS实例内置AIACC-Training 2.0加速库,可以提供更好的训练性能。

  • 通过在1个ECS实例上绑定多个EAIS实例的方式,实现GPU的弹性扩展,提供更高的训练易用性。

  • 具备远端GPU算力的弹性调整,使得模型装载能力更强,可以为LLama7B-33B-65B等不同配置大语言模型提供不同的装载能力。

原理说明

EAIS支持您根据自身业务场景选择不同的PyTorch框架版本,来使用EAIS实例进行PyTorch模型训练,目前支持如下两种框架:

  • Graph层:支持PyTorch的计算图优化,使用Python脚本训练PyTorch模型,性能最优,但只支持PyTorch框架,如需其他框架使用CUDA拉远(即CUDA层)方式。

    • 使用方式:用户在ECS客户端实例上部署好环境,执行aiacc_rdl命令替换torch.runtorch.launch启动脚本即可。

    • 原理说明:在ECS客户端上启动训练,会自动把GPU算子运行在远端的EAIS实例上进行加速训练,并返回任务结果。

  • CUDA层:兼容基于CUDA的上层AI框架,不限于PyTorch、TensorFlow、MXNet等,兼容性最佳,但性能不如图拉远(即Graph层)方式。

使用场景

EAIS实例适合用于对数据I/O要求不高,但对模型的性能、承载能力有较高要求的场景,例如可以使用EAIS实例训练AIGC、LLMs相关的模型(例如Stable-Diffusion、LLama等)。

操作步骤

  1. 远程登录ECS实例。

    1. 登录EAIS控制台

    2. 在页面左上角选择实例所在地域。

    3. 在实例列表中,单击EAIS实例对应的ECS实例ID,进入该ECS实例控制台。

    4. 远程登录ECS实例。

      具体操作,请参见远程连接ECS实例

  2. 安装eais-tool软件包,然后查看EAIS实例的相关信息。

    具体操作,请参见eais-tool

  3. 安装CUDA 11.X.X版本软件包。

    1. 执行如下命令,下载并安装CUDA软件包。

      说明

      本操作以安装CUDA 11.7.0版本为例,具体命令以您实际安装的CUDA版本为准。

      wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run
      sudo sh cuda_11.7.0_515.43.04_linux.run --silent --toolkit
    2. 执行如下命令,设置CUDA相关的环境变量。

      export PATH=/usr/local/cuda/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
  4. 如果您需要使用EAIS实例进行推理,则您需要安装eais-cuda软件包。

    重要

    如果您仅需要使用EAIS实例进行训练,则无需执行该操作。

    具体操作,请参见eais-cuda

  5. 搭建运行环境。

    1. 在ECS实例上,根据需要自行安装模型训练环境。

      以安装通信测试为例,您只需要执行如下命令,即可安装模型训练环境。

      pip install torch torchvision torchaudio
    2. 安装EAIS-training拉远加速软件包。

      重要

      该软件包正在邀测中,您需要联系EAIS技术支持获取软件包。

  6. 开发模型训练脚本并启动训练。

    以PyTorch的通信测试为例,train.py训练脚本内容如下:

    import torch
    
    def main():
        def train():
            def test_allreduce(dist, device):
                a = torch.tensor([dist.get_rank()])
                a = a.to(device)
                b = dist.all_reduce(a)
                print('allreduce get:', b)
    
            import torch
            import torch.distributed as dist
            import torch.nn as nn
            import torch.optim as optim
            import torchvision
            ADDR = '0.0.0.0'
            PORT = 6666
            RANK = 0
            SIZE = 1
            dist.init_process_group(backend='nccl',
                                    init_method='tcp://{}:{}'.format(ADDR, PORT),
                                    rank=RANK,
                                    world_size=SIZE,
                                   )
            local_rank = dist.get_rank() % torch.cuda.device_count()
            torch.cuda.set_device(local_rank)
            device = torch.device('cuda:%d' % local_rank)
            test_allreduce(dist, device)
            print('training done!')
        train()
    
    if __name__ == "__main__":
        main()

    执行如下命令,运行训练脚本。

    aiacc_rdl train.py

    回显如下所示,表示训练成功。训练成功.png