分布式集群使用教程

分布式集群使用教程

分布式集群配置说明

配额

每个用户默认的集群数量配额为1个,每个集群实例配额为5个(一个集群内最多添加5台机器),如需更多,请联系小助手

集群类型

基础集群

**功能特性:**支持集群内网络互通。

注:

  • 集群中添加 Windows 实例(带Windows图标机器)节点,如果要网络互通,需要打开防火墙;

  • Docker 实例 (带HC图标机器)暂不支持加入集群。

深度学习集群

**功能特性:**支持构建 Tensorflow、Pytorch、Horovod 等用于深度学习分布式训练的集群。

每个集群可配置一个 master 节点,设置 master 节点后,系统将对节点进行重新配置:

  • 所有节点注册网卡通信相关环境变量:NCCL_SOCKET_IFNAME、GLOO_IFACE
  • 配置 master 节点到其它节点的SSH公钥登录。如果您在配置master节点前,如果已经登录了节点,则设置完成后,需要重新登录该节点才能让配置生效或使用 source ~/.bashrc命令更新环境变量

注:

  • 当前仅支持从基础集群升级到深度学习集群,不支持降级;

  • 深度学习集群不支持Windows 实例(带Windows图标机器)节点。

GPU 分布式使用教程之 Pytorch

Pytorch 官方推荐使用 DistributedDataParallel(DDP) 模块来实现单机多卡和多机多卡分布式计算。DDP 模块涉及了一些新概念,如网络(World Size/Local Rank),代码修改(数据分配加载),多种启动方式(torchrun/launch),使用前请参考官方文档以及更多学习资料

选择机器

  • 单机多卡分布式:租用同个计算节点的多张卡即可。

  • 多机多卡分布式: 点击直达分布式集群,在租用时,请选择带有如图所示图标的机器。没有这个图标的机器不支持加入分布式网络。

单机多卡

1)租用机器: 为实现 Pytorch 的单机多卡分布式,首先,您需要按正常流程租用GPU,如单节点 4 卡 A2000,选择 Pytorch 镜像,如Pytorch 1.12镜像。

租用的时候 GPU 数设置成 4,即表示 4 卡,对应显存、内存等配置也会翻倍。

2)适配代码: 分布式需对脚本进行相应修改,可参考官方文档。此处使用开源项目作为测试demo,点击下载测试代码mnmc_ddp_launch.py

3)运行代码: 进入运行脚本所在目录,输入命令行,如:

bash
复制代码
# 项目地址 https://github.com/BIGBALLON/distribuuuu/blob/master/tutorial/mnmc_ddp_launch.py # 进入项目目录 cd /mnt/test/multi-card/torch # 复制数据集到当前目录 cp -r /public/torchvision_datasets/cifar-10-batches-py ./ # 运行程序 python -m torch.distributed.launch --nproc_per_node=4 mnmc_ddp_launch.py

这里使用的是 launch 启动方式,也可使用torchrun以及其他启动方式。--nproc_per_node 指定每个节点的GPU数量,mnmc_ddp_launch.py 为执行脚本文件(如需下载 cifar10 数据集,修改download=True)。

4)查看GPU使用情况: 租用界面点击详情按钮即可查看 GPU、CPU使用情况。从截图中可以看到 4 个显卡都有使用到。

多机多卡

多机多卡需要使用 分布式集群 功能。

1)租用机器: 首先,您需要按正常流程租用 GPU,主机市场筛选栏选择 支持分布式集群 筛选,然后选择自己需要的机器租用即可。

如两个计算节点,租用两台 A2000 4 卡,共计 8 卡。选择相同的Pytorch镜像,如Pytorch 1.12。

注意: 多机多卡中每个节点的 GPU 卡数应该一样,才能都使用上,机器类型也最好一样。

2)创建集群: 进入 【个人中心】 — 【我的租用】 — 【分布式集群】

点击【添加集群】可以创建一个集群。如果你和我一样,主要用来跑深度学习项目,可以将集群免费升级为深度学习集群。点击这里查看相关说明

3)添加机器: 点击集群页面添加机器按钮,勾选要加入集群的机器,点击确定,即可将租用机器添加到集群。

添加机器成功后,系统会给每个节点分配集群 IP,当状态为已连接时,代表机器间可相互通信。这里我们还需要设置一个 master 节点,设置后会自动进行以下操作:

  • 所有节点注册网卡的环境变量:NCCL_SOCKET_IFNAME、GLOO_IFACE
  • 配置 master 节点到其它节点的SSH公钥登录

4)适配代码: 分布式需对脚本进行相应修改,可参考官方文档。此处使用开源项目作为测试demo,点击下载测试代码mnmc_ddp_launch.py

5)运行程序: 登录 master 节点,进入运行脚本所在目录,输入命令行,如:

bash
复制代码
# 项目地址 https://github.com/BIGBALLON/distribuuuu/blob/master/tutorial/mnmc_ddp_launch.py # 进入项目目录 cd /mnt/test/multi-card/torch # 复制数据集到当前目录 cp -r /public/torchvision_datasets/cifar-10-batches-py ./ # 运行程序 python -m torch.distributed.launch --nproc_per_node=4 --nnodes=2 --node_rank=0 --master_addr="192.168.1.9" --master_port=12345 mnmc_ddp_launch.py

--nproc_per_node 指定每个节点的GPU数量,每个节点GPU数量应该一样,不然无法运行成功,--nnodes 指定节点数(总共2个节点),--node_rank 指定节点顺序(主节点故为0号),--master_addr和master_port 设定主节点ip和端口号。mnmc_ddp_launch.py 为执行脚本。

登录剩余节点,运行:

bash
复制代码
# 进入项目目录 cd /mnt/test/multi-card/torch # 运行程序 python -m torch.distributed.launch --nproc_per_node=4 --nnodes=2 --node_rank=1 --master_addr="192.168.1.9" --master_port=12345 mnmc_ddp_launch.py

其中,--node_rank 指定节点顺序(第二个节点故为1号),如有更多节点,需做相应修改,其他参数不用修改。运行后,系统会自动连接并运行训练任务。

6)查看GPU使用情况: 租用界面点击详情按钮即可查看 GPU、CPU使用情况。

GPU 分布式使用教程之 TensorFlow

TensorFlow 提供了6种策略实现分布式计算,各个策略详情请参考官方文档。本文档使用 MirroredStrategy 实现单机多卡分布式,MultiWorkerMirroredStrategy 实现多机多卡分布式计算。

选择机器

  • 单机多卡分布式:租用同个计算节点的多张卡即可。
  • 多机多卡分布式: 点击直达分布式集群,在租用时,请选择带有如图所示图标的机器。没有这个图标的机器不支持加入分布式网络。

单机多卡

1)租用机器: 为实现TensorFlow的单机多卡分布式,首先,您需要按正常流程租用GPU,如单节点 4 卡 A2000,选择TensorFlow镜像,如TensorFlow2.8镜像。

租用的时候 GPU 数设置成 4,即表示 4 卡,对应显存、内存等配置也会翻倍。

2)适配代码: 单机多卡分布式使用 MirroredStrategy 需对脚本进行相应修改,点击下载测试代码(将代码写入机器中的一个 .py 文件即可,如:tf-demo.py )。

3)运行代码: 进入运行脚本所在目录,输入命令行,如:

bash
复制代码
# 进入脚本目录 cd /mnt/test/multi-card/tf # 解压数据集到当前目录 unzip /public/tensorflow_datasets/cats_vs_dogs/kagglecatsanddogs_3367a.zip -d ./cats_vs_dogs # 安装缺的依赖包 pip install tensorflow_datasets # 运行程序 python tf-demo.py

4)查看GPU使用情况: 租用界面点击详情按钮即可查看 GPU、CPU使用情况。从截图中可以看到 4 个显卡都有使用到。

多机多卡

多机多卡需要使用 分布式集群 功能。

1)租用机器: 首先,您需要按正常流程租用 GPU,主机市场筛选栏选择 支持分布式集群 筛选,然后选择自己需要的机器租用即可。

如两个计算节点,租用两台 A2000 4,共计 8 卡。选择相同的 TensorFlow 镜像,如 TensorFlow2.8 镜像。

注意: 多机多卡中每个节点的 GPU 卡数应该一样,才能都使用上,机器类型也最好一样。

2)创建集群: 进入 【个人中心】 — 【我的租用】 — 【分布式集群】

点击【添加集群】可以创建一个集群。如果你和我一样,主要用来跑深度学习项目,可以将集群免费升级为深度学习集群。点击这里查看相关说明

3)添加机器: 点击集群页面添加机器按钮,勾选要加入集群的机器,点击确定,即可将租用机器添加到集群。

添加机器成功后,系统会给每个节点分配集群 IP,当状态为已连接时,代表机器间可相互通信。这里我们还需要设置一个 master 节点,设置后会自动:

  • 所有节点注册网卡的环境变量:NCCL_SOCKET_IFNAME、GLOO_IFACE
  • 配置 master 节点到其它节点的SSH公钥登录

4)适配代码: 注意和单机多卡不同,多机多卡使用了 MultiWorkerMirroredStrategy,并需要配置TF_CONFIG网络设置:

python
复制代码
os.environ['TF_CONFIG'] = json.dumps({ 'cluster': { 'worker': ["192.168.1.7:20005", "192.168.1.8:20006"] }, 'task': {'type': 'worker', 'index':0} })

其中 cluster 包含了全部节点的IP和端口信息,所有节点此部分相同;task包含当前节点的角色,例如节点一为worker 0,节点二为worker 1。

点击下载测试代码(将代码写入机器中的一个 .py 文件即可,如:tf-demo2.py ):

5)运行程序: 登录主节点,进入运行脚本所在目录,输入命令行,如:

bash
复制代码
# 进入脚本目录 cd /mnt/test/multi-card/tf # 解压数据集到当前目录 unzip /public/tensorflow_datasets/cats_vs_dogs/kagglecatsanddogs_3367a.zip -d ./cats_vs_dogs # 安装缺的依赖包 pip install tensorflow_datasets # 运行程序 python tf-demo2.py --num_workers 2 --worker_no 0

测试代码中,--num_workers 指定节点数(总共2个节点),用于设定batch_size, --worker_no 指定节点顺序(主节点故为0号)。

登录剩余节点,运行:

bash
复制代码
# 进入脚本目录 cd /mnt/test/multi-card/tf # 安装缺的依赖包 pip install tensorflow_datasets # 运行程序 python tf-demo2.py --num_workers 2 --worker_no 1

其中,--worker_no 指定节点顺序(第二个节点故为1号),如有更多节点,需做相应修改,其他参数不用修改。运行后,系统会自动连接并运行训练任务。

6)查看GPU使用情况: 租用界面点击详情按钮即可查看 GPU、CPU使用情况。

GPU 分布式使用教程之 Horovod

Horovod 是实现分布式机器学习的较佳实践之一,支持 Pytorch,TensorFlow,Keras,MXNet,采用 Ring-AllReduce 算法,在 GPU 较多时,算力的发挥能提升近一倍,且代码改动较小。使用镜像即可快速开启单机多卡/多机多卡分布式学习。

选择机器

  • 单机多卡分布式:租用同个计算节点的多张卡即可。
  • 多机多卡分布式: 点击直达分布式集群,在租用时,请选择带有如图所示图标的机器。没有这个图标的机器不支持加入分布式网络。

单机多卡

**1)租用机器:**单机多卡使用 Horovod 实现较简单。首先,您需要按正常流程租用GPU,主机市场筛选栏选择 支持分布式集群 筛选,然后选择自己需要的机器租用即可。如单节点 4 卡 K80,选择含有 Horovod 镜像,如Pytorch1.8.1-Horovod/TensorFlow 2.4-Horovod。

选择镜像

**2)运行代码:**进入运行脚本所在目录,输入命令行,如

shell
复制代码
# 进入项目目录 cd /mnt/test/multi-card/horovod # 安装依赖 pip install filelock # 运行代码 horovodrun -np 4 python test.py

运行

即可实现单机多卡计算。-np 指定进程数,推荐设定为总GPU数。test.py 可使用官方范例。普通的脚本如果要使用 Hovorod,修改方法可参考第三部分:脚本修改

多机多卡

1)租用机器: 首先,您需要按正常流程租用GPU,主机市场筛选栏选择 支持分布式集群 筛选,然后选择自己需要的机器租用即可。如两个计算节点,每节点各 2 卡 A2000,共计 4 卡。选择相应的 Horovod 镜像,如Pytorch1.8.1-Horovod/TensorFlow 2.4-Horovod。

2)创建集群: 进入 【个人中心】 — 【我的租用】 — 【分布式集群】

点击【添加集群】可以创建一个集群。如果你和我一样,主要用来跑深度学习项目,可以将集群免费升级为深度学习集群。点击这里查看相关说明

3)添加机器: 点击集群页面添加机器按钮,勾选要加入集群的机器,点击确定,即可将租用机器添加到集群。

添加机器成功后,系统会给每个节点分配集群 IP,当状态为已连接时,代表机器间可相互通信。这里我们还需要设置一个 master 节点,设置后会自动进行以下操作:

  • 所有节点注册网卡的环境变量:NCCL_SOCKET_IFNAME、GLOO_IFACE
  • 配置 master 节点到其它节点的SSH公钥登录

**4)运行代码:**进入项目代码目录,只需要在 master 运行下面命令即可:

shell
复制代码
# 进入项目目录 cd /mnt/test/multi-card/horovod # 安装依赖 pip install filelock # 只需在 master 节点运行 horovodrun -np 4 -H 192.168.1.29:2,192.168.1.30:2 --network-interface "192.168.1.29/24,192.168.1.30/24" python test.py

参数说明

  • np:GPU显卡总数,比如我现在租用2台2卡机器总共就是4张显卡;
  • H:指定各计算节点所运行卡数,格式为 IP:GPU数,多个节点之间逗号隔开,本机的信息也需要配置,所有节点都需要写入。例如 192.168.1.29:2 代表 IP 为 192.168.1.29,机器上有 2 张显卡;
  • network-interface:指定各计算节点的 IP,需要与 H 的参数对应。

5)查看GPU使用情况: 租用界面点击详情按钮即可查看 GPU、CPU使用情况。

脚本修改

Horovod 对各模块进行了包裹,使用方便,但仍需对代码进行修改,逻辑和 Pytorch DDP 比较类似,官方流程如下:

python
复制代码
import torch import horovod.torch as hvd # Initialize Horovod hvd.init() # Pin GPU to be used to process local rank (one GPU per process) torch.cuda.set_device(hvd.local_rank()) # Define dataset... train_dataset = ... # Partition dataset among workers using DistributedSampler train_sampler = torch.utils.data.distributed.DistributedSampler( train_dataset, num_replicas=hvd.size(), rank=hvd.rank()) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=..., sampler=train_sampler) # Build model... model = ... model.cuda() optimizer = optim.SGD(model.parameters()) # Add Horovod Distributed Optimizer optimizer = hvd.DistributedOptimizer(optimizer, named_parameters=model.named_parameters()) # Broadcast parameters from rank 0 to all other processes. hvd.broadcast_parameters(model.state_dict(), root_rank=0) for epoch in range(100): for batch_idx, (data, target) in enumerate(train_loader): optimizer.zero_grad() output = model(data) loss = F.nll_loss(output, target) loss.backward() optimizer.step() if batch_idx % args.log_interval == 0: print('Train Epoch: {} [{}/{}]\tLoss: {}'.format( epoch, batch_idx * len(data), len(train_sampler), loss.item()))

更详细资料请参考官网

Copyright © 2019-2025 matpool.com. All rights reserved.

Command Palette

Search for a command to run...