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.py

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

cd /mnt/test/multi-card/torch
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,当状态为已连接时,代表机器间可相互通信。

4)添加机器: 登录任一节点。因秘钥由您掌握,故需由您按以下步骤完成节点间的ssh连通:

ssh-keygen -t rsa # 一路默认,生成公私钥
ssh-copy-id root@其他节点IP #分发给其他节点,输入对应秘钥。IP可在我的集群页面查看,如192.168.1.1

5)添加以下环境变量: 在每一个节点,使用 ifconfig 命令查询节点网卡名称,如 meth01,meth02。登陆各个节点添加相同环境变量(可用 ssh 登录)

export NCCL_SOCKET_IFNAME=meth919,meth920
export GLOO_IFACE=meth919,meth920
export NCCL_DEBUG=INFO #可选,如需获得额外的nccl信息

可以将以上内容添加到~/.bashrc文件中(meth917 meth918记得改成自己的网卡名称)。

6)适配代码: 分布式需对脚本进行相应修改,可参考官方文档。此处使用开源demo.py

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

cd /mnt/test/multi-card/torch
python -m torch.distributed.launch --nproc_per_node=2 --nnodes=2 --node_rank=0 --master_addr="192.168.1.2" --master_port=12345 mnmc_ddp_launch.py

--nproc_per_node 指定每个节点的GPU数量,每个节点GPU数量应该一样,不然无法运行成功,--nnodes 指定节点数(总共2个节点),--node_rank 指定节点顺序(主节点故为0号),--master_addr和master_port 设定主节点ip和端口号。demo.py 为执行脚本(如需下载cifar10数据集,修改download=True)。

登录剩余节点,运行:

cd /mnt/test/multi-card/torch
python -m torch.distributed.launch --nproc_per_node=2 --nnodes=2 --node_rank=1 --master_addr="192.168.1.2" --master_port=12345 mnmc_ddp_launch.py

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

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

矩池云 | GPU 分布式使用教程之 Pytorch的更多相关文章

  1. 使用 MobaXterm 连接矩池云 GPU服务器

    Host Name(主机名):hz.matpool.com 或 hz-t2.matpool.com,请以您 SSH 中给定的域名为准. Port(端口号):矩池云租用记录里 SSH 链接里冒号后的几位 ...

  2. 解决矩池云GPU显存未释放问题

    很多用户反馈说终止程序之后,显存依然被占用,这里我们提供了两种解决方案,帮助用户解决这个问题. nvidia-smi查看 我们可以先用如下命令 nvidia-smi 查看一下当前GPU进程情况. _ ...

  3. 使用 Xshell 连接矩池云 GPU服务器

    下单租用 租用成功 打开软件 完成 错误用法不能这样使用

  4. 矩池云 | 高性价比的GPU租用深度学习平台

    矩池云是一个专业的国内深度学习云平台,拥有着良好的深度学习云端训练体验.在性价比上,我们以 2080Ti 单卡为例,36 小时折扣后的价格才 55 元,每小时单价仅 1.52 元,属于全网最低价.用户 ...

  5. 矩池云升级JupyterLab版本教程

    先使用 Xshell 连接矩池云 GPU服务器,可以查看教程. 要在base环境下执行,用下面命令 conda deactivate ps -aux | grep jupyter 我这个进程是616 ...

  6. 如何使用 PuTTY 远程连接矩池云主机

    PuTTY 是一款开源的连接软件,用来远程连接服务器,支持 SSH.Telnet.Serial 等协议. 矩池云的主机支持 SSH 登录,以下为使用 PuTTY 连接矩池云 GPU 的使用教程. 如您 ...

  7. 矩池云 | 新冠肺炎防控:肺炎CT检测

    连日来,新型冠状病毒感染的肺炎疫情,牵动的不仅仅是全武汉.全湖北,更是全国人民的心,大家纷纷以自己独特的方式为武汉加油!我们相信坚持下去,终会春暖花开. 今天让我们以简单实用的神经网络模型,来检测肺炎 ...

  8. 矩池云 | 教你如何使用GAN为口袋妖怪上色

    在之前的Demo中,我们使用了条件GAN来生成了手写数字图像.那么除了生成数字图像以外我们还能用神经网络来干些什么呢? 在本案例中,我们用神经网络来给口袋妖怪的线框图上色. 第一步: 导入使用库 fr ...

  9. 矩池云上使用nvidia-smi命令教程

    简介 nvidia-smi全称是NVIDIA System Management Interface ,它是一个基于NVIDIA Management Library(NVML)构建的命令行实用工具, ...

  10. 矩池云里查看cuda版本

    可以用下面的命令查看 cat /usr/local/cuda/version.txt 如果想用nvcc来查看可以用下面的命令 nvcc -V 如果环境内没有nvcc可以安装一下,教程是矩池云上如何安装 ...

随机推荐

  1. [转帖]01-rsync备份方式

    https://developer.aliyun.com/article/885783?spm=a2c6h.24874632.expert-profile.284.7c46cfe9h5DxWK 简介: ...

  2. [转帖]「更易用的OceanBase」|OceanBase 4.0 一体化安装包 - 把简单留给用户

    https://www.modb.pro/db/565842 1. OceanBase 3.x 版本安装浅谈 我是在 OceanBase 3.1.4 版本的时候开始尝试入手测试的.刚开始 OB 3.x ...

  3. [转贴]win10临时修改、永久cmd 编码格式的方法

    https://www.jianshu.com/p/40a9fbaf1cac   cmd 前言 有时候,运行一些命令行程序某些字符无法正常显示,常见的就是方块,或者是火星文字都是由于 cmd 程序的默 ...

  4. 渗透学习笔记(cookies、XSS注入)

    1.cookie 插件:cookie-editor JavaScript语法: 获取:document.cookie; 设置:document.cookie="username=felix& ...

  5. 即时通讯(IM)开源项目OpenIM每周迭代版本发布-音视频实时通话-v2.0.4

    介绍 OpenIM每周五发布新版,包括新特性发布,bug修复,同时合并PR 由于2.0版本重构完毕,架构更清晰,代码更规范,先邀请各位参与OpenIM社区建设,包括技术开发,技术分享等,特性开发,性能 ...

  6. 7.4 C/C++ 实现链表栈

    相对于顺序栈,链表栈的内存使用更加灵活,因为链表栈的内存空间是通过动态分配获得的,它不需要在创建时确定其大小,而是根据需要逐个分配节点.当需要压入一个新的元素时,只需要分配一个新的节点,并将其插入到链 ...

  7. 遥感图像处理笔记之【FastAI Multi-label image classification】

    遥感图像处理学习(4) 前言 遥感系列第4篇.遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2023年12月15日 2024年1月24日搬运至本人博客园平台 文章标题:FastAI Multi ...

  8. Axure谷歌浏览器扩展程序下载及安装方法(免FQ)

    在用Axure在chrome查看原型时,没有安装Axure谷歌浏览器插件时无法显示会有提示信息,如果未FQ按照提示是无法直接安装扩展程序的,这里提供插件下载地址并教大家如何安装插件. 平时在使用谷歌浏 ...

  9. 28图图解Raft协议,so easy~~

    大家好,我是三友~~ 在之前写的<万字+20张图探秘Nacos注册中心核心实现原理> 这篇文章中我留了一个彩蛋 当文章点赞量突破28个,就单独写一篇关于Raft协议的文章 既然现在文章点赞 ...

  10. 关于TypeScript中提示xxx is declared but its value is never read的解决方法

    首先,提示很明显,是定义了变量,但是却没有使用.解决方案有如下两种: 一: 需要确定变量是否真的没有使用到,如果没有使用直接删除即可. 二: 对于方法中的入参,是没法随便删除的.这时候我们可以利用Ty ...