pytorch 多机单卡分布式训练配置笔记.18010304
pytorch 多机单卡分布式训练配置笔记
记录通过torchrun
进行pytorch的分布式训练配置方法,示例代码为基本的分布式训练框架代码,无实际功能
环境
操作系统:Ubuntu 22.04
Python环境:anaconda 23.11.0、Python 3.8
pytorch:2.1.2
编写代码
将代码保存为main.py
模型训练代码写到train
函数中,本示例仅做打印输出
import argparse
import os
import sys
import tempfile
from time import sleep
from urllib.parse import urlparse
import torch
import torch.distributed as dist
import torch.nn as nn
import torch.optim as optim
import datetime
from torch.nn.parallel import DistributedDataParallel as DDP
def train():
local_rank = int(os.environ["LOCAL_RANK"])
rank = int(os.environ["RANK"])
while True:
print(f"[{os.getpid()}] (rank = {rank}, local_rank = {local_rank}) training...")
sleep(1)
def run():
env_dict = {
key: os.environ[key]
for key in ("MASTER_ADDR", "MASTER_PORT", "WORLD_SIZE", "LOCAL_WORLD_SIZE")
}
print(f"[{os.getpid()}] Initializing process group with: {env_dict}")
dist.init_process_group(backend="nccl", timeout=datetime.timedelta(seconds=30))
#dist.init_process_group(backend="nccl")
train()
dist.destroy_process_group()
if __name__ == "__main__":
run()
运行
以torchrun
方式运行,此命令无需单独安装,随pytorch一同安装
- 运行主节点
torchrun --nproc_per_node=4 --nnodes=2 --node_rank=0 --master_addr="127.0.0.1" --master_port=1234 main.py
- 运行工作节点
torchrun --nproc_per_node=4 --nnodes=2 --node_rank=1 --master_addr="127.0.0.1" --master_port=1234 main.py
参数解释
nproc_per_node
每个节点线程数nnodes
总节点数node_rank
当前节点编号,主节点必须为0master_addr
主节点ip地址master_port
主节点端口号
上述示例命令先运行了主节点,指定每个节点创建四个线程,一共有2个节点,主节点地址为127.0.0.1
端口为1234
。主启动完成后再启动工作节点。主节点不会执行训练。只有工作节点进行训练
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~