Pytorch分布式训练print()使用技巧

在分布式训练场景中,有时我们可能会需要使用print函数(虽然大部分情况下大多会用logging进行信息输出)在终端打印相关信息。但由于同时运行多个进程,如果不进行限制,每个进程都会打印信息,不但影响观感,而且可能会造成阻塞。

通常的解决方法是利用if条件语句进行限制,只在主进程中进行打印,如下:

python 复制代码
# 当前为主进程
if args.rank == 0:
    print('Train message')

但最近在学习目标检测模型DINO源码时,我发现作者采用重写内置print函数 的方式实现了相同的功能,即只在主进程中启用print函数,在其他进程中禁用print函数。

函数源码如下:

python 复制代码
def setup_for_distributed(is_master):
    """
    This function disables printing when not in master process
    """
    import builtins as __builtin__

    # 得到内置的print函数
    builtin_print = __builtin__.print

    
    # 重写print函数
    def print(*args, **kwargs):
        force = kwargs.pop('force', False)
        # 在主进程或者强制条件下才调用内置print输出
        if is_master or force:
            builtin_print(*args, **kwargs)

    # 用重写后的print函数替换内置的print函数
    __builtin__.print = print

该方法具体的调用位置是在初始化多进程组之后,示例如下:

python 复制代码
import torch

args.rank = int(os.environ["RANK"])
args.world_size = int(os.environ['WORLD_SIZE'])
args.dist_backend = 'nccl'
args.dist_url = 'env://'
torch.distributed.init_process_group(backend=args.dist_backend, init_method=args.dist_url,
                                         world_size=args.world_size, rank=args.rank)
# 只在主进程启用print
setup_for_distributed(args.rank == 0)

实测好用,且思路清奇,果然学习永无止境。在此做一个学习记录,也分享给需要的人。

相关推荐
LiYingL3 小时前
ImmerseGen:由代理引导的、轻量级的、高度逼真的下一代虚拟现实场景生成
人工智能·vr
@小码农3 小时前
6547网题库:2025年9月 Python等级考试(四级)真题及答案
开发语言·python
CES_Asia3 小时前
八大核心展区全景布局!CES Asia 2026北京展勾勒未来科技生态图谱
大数据·人工智能·科技·机器人
@我本楚狂人3 小时前
Python MCP实战:构建 FastAPI 服务端与客户端示例&MCP客户端调用
开发语言·python·fastapi
无心水3 小时前
【神经风格迁移:性能优化】21、模型轻量化实战:让VGG19在CPU上实时运行
人工智能·神经网络·机器学习·gpu·vgg·神经风格迁移·神经风格迁移:性能优化
卡奥斯开源社区官方3 小时前
技术拆解:中国首款全植入脑机接口的三大核心突破与工程化实践
人工智能
艾上编程4 小时前
第二章——数据分析场景之Python自动化统计分析:高效挖掘数据价值
python·数据分析·自动化
高洁014 小时前
智能体大模型时代的AI革新者
人工智能·深度学习·算法·机器学习·django
正见TrueView4 小时前
要闻集锦|抖音买单上线;豆包手机衍生灰产;OPPO整合AI部门成立超级小布;张予彤出任月之暗面总裁
人工智能
轻竹办公PPT4 小时前
上传PDF直接生成PPT,适合工作汇报和总结场景
python·pdf·powerpoint