当前位置: 首页 > backend >正文

PyTorch分布式训练调试方法(跟踪调用过程)

PyTorch分布式训练调试方法(跟踪调用过程)

背景

在分布式深度学习训练场景中,通信操作(如AllReduce、Send/Recv)和CUDA操作的时序问题往往难以调试。本工具通过以下方式提供调试支持:

  1. 拦截所有PyTorch张量操作并记录调用栈
  2. 监控分布式通信操作的完整生命周期
  3. 自动生成带时间戳的详细日志
  4. 支持多GPU并行调试(每个进程独立日志)

方法

本工具采用PyTorch官方推荐的扩展方式实现:

  1. TorchDispatchMode:拦截所有张量操作
  2. Monkey Patch:重写分布式通信原语
  3. 异步日志:确保日志完整性
  4. 调用栈追踪:定位操作发起位置

操作步骤

# 禁用可能产生干扰的第三方扩展库
import sys
sys.modules['apex'] = None
sys.modules['transformer_engine'] = Noneimport os
import torch
from functools import partial
from torch.utils._python_dispatch import TorchDispatchMode
from dataclasses import dataclass
from typing import Any
from datetime import datetime
import time
import os
import pickle
import inspect# 初始化日志系统(每个进程独立日志)
glog=open(f"trace_rank{os.environ['RANK']}.log","w")def save_info(msg):"""带缓冲刷新的日志记录函数"""glog.write(f"{msg}\n")glog.flush()@dataclass
class _ProfilerState:cls: Anyobject: Any = Noneclass TorchDumpDispatchMode(TorchDispatchMode):def __init__(self,parent):super().__init__()self.parent=parentdef is_allow_dump(self,name):"""过滤不需要记录的操作"""black_list=["_has_compatible_shallow_copy_type"]for i in black_list:if name.find(i)>=0:return Falsereturn Truedef __torch_dispatch__(self, func, types, args=(), kwargs=None):func_packet = func._overloadpacketop_name=f"{func}"enable_dump
http://www.xdnf.cn/news/105.html

相关文章:

  • 每日算法【双指针算法】(Day 2-复写零)
  • 社交媒体时代的隐私忧虑:聚焦Facebook
  • ios精灵脚本辅助软件,有根和无根roothide越狱区别
  • iOS Google登录
  • 【生态系统模型】Biome-BGC生态系统模型与Python融合技术实践应用
  • iOS Facebook 登录
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(四级)答案 + 解析
  • 基于大模型的腹股沟疝诊疗全流程风险预测与方案制定研究报告
  • 【vLLM 学习】Aqlm 示例
  • 网页端调用本地应用打开本地文件(PDF、Word、excel、PPT)
  • day31和day32图像处理OpenCV
  • 数据通信学习笔记之OSPF配置命令
  • 大数据应用开发——大数据平台集群部署
  • 数据结构——二叉树
  • GB28181的SIP注册与PS推流学习
  • 常用绑定事件方式有哪几种
  • Spring AI与通义千问的完美结合:构建智能对话应用
  • 【OSG学习笔记】Day 3: 加载你的第一个3D模型
  • C++每日训练 Day 16:构建 GUI 响应式信号机制(面向初学者)
  • Linux 文件传输:系统数据交互的动脉
  • 【Leetcode 每日一题 - 补卡】2537. 统计好子数组的数目
  • Flink-01学习 介绍Flink及上手小项目之词频统计
  • GPT对话UI--通义千问API
  • Linux 权限
  • 2025.4.17学习日记 初识JavaScript 以及Java和JavaScript有什么区别
  • 什么是分布式锁?
  • Linux: 生产者消费者模型
  • 从零开始学A2A四:A2A 协议的安全性与多模态支持
  • 多个路由器互通(静态路由)无单臂路由(简单版)
  • STM32 时钟树