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.run
和torch.launch
启动脚本即可。原理说明:在ECS客户端上启动训练,会自动把GPU算子运行在远端的EAIS实例上进行加速训练,并返回任务结果。
CUDA层:兼容基于CUDA的上层AI框架,不限于PyTorch、TensorFlow、MXNet等,兼容性最佳,但性能不如图拉远(即Graph层)方式。
使用场景
EAIS实例适合用于对数据I/O要求不高,但对模型的性能、承载能力有较高要求的场景,例如可以使用EAIS实例训练AIGC、LLMs相关的模型(例如Stable-Diffusion、LLama等)。
操作步骤
远程登录ECS实例。
安装eais-tool软件包,然后查看EAIS实例的相关信息。
具体操作,请参见eais-tool。
安装CUDA 11.X.X版本软件包。
执行如下命令,下载并安装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
执行如下命令,设置CUDA相关的环境变量。
export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
如果您需要使用EAIS实例进行推理,则您需要安装eais-cuda软件包。
重要如果您仅需要使用EAIS实例进行训练,则无需执行该操作。
具体操作,请参见eais-cuda。
搭建运行环境。
在ECS实例上,根据需要自行安装模型训练环境。
以安装通信测试为例,您只需要执行如下命令,即可安装模型训练环境。
pip install torch torchvision torchaudio
安装EAIS-training拉远加速软件包。
重要该软件包正在邀测中,您需要联系EAIS技术支持获取软件包。
开发模型训练脚本并启动训练。
以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
回显如下所示,表示训练成功。