通过os.dup sys.stdout.fileno捕获标准输出,判断pytorch算子是否fallback到了cpu

通过os.dup sys.stdout.fileno捕获标准输出,判断pytorch算子是否fallback到了cpu

某种设备在运行pytorch算子时,如果不支持会自动fallback到cpu,输出的tensor.device却不是cpu,我希望能获取到这个状态。本文通过捕获标准输出,根据终端是否输出fallback字符串,判断是否触发了fallback

一.代码

python 复制代码
import threading
import sys
import os

class CheckFallback:
    def __init__(self,enable=True):        
        self.is_fallback=False
        self.enable=enable
        if self.enable:
            self.stdout_fileno_origin = sys.stdout.fileno()
            self.stdout_fileno_dup = os.dup(self.stdout_fileno_origin)
            self.stdout_pipe = os.pipe()
            os.dup2(self.stdout_pipe[1], self.stdout_fileno_origin)
            os.close(self.stdout_pipe[1])
            self.stdout_messages = ''
            self.running=True
            self.task = threading.Thread(target=self.read_pipe)
            self.task.start()

    def read_pipe(self):
        while self.running:
            msg = os.read(self.stdout_pipe[0], 8192)
            if msg:
                self.stdout_messages+=msg.decode('utf-8')
    
    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        if self.enable:
            self.running=False
            os.close(self.stdout_fileno_origin)
            self.task.join()
            os.close(self.stdout_pipe[0])
            os.dup2(self.stdout_fileno_dup, self.stdout_fileno_origin)
            os.close(self.stdout_fileno_dup)
            #检查终端是否有fallback信息输出
            if self.stdout_messages.find("fallback")>=0:
                self.is_fallback=True

import torch
A=torch.ones((512,65024),dtype=torch.float16).to("your_device")
with CheckFallback() as f:
    C=torch.ops.aten.gelu.default(A)    
print(f.is_fallback)
print(C.shape,C.device)

with CheckFallback() as f:
    A=torch.ones((1,32),dtype=torch.float16).to("your_device")
    C=torch.ops.aten.pow(A,A)
print(f.is_fallback)
print(C.shape,C.device)
相关推荐
yuanpan6 分钟前
Python 网页数据爬取入门教程:requests + BeautifulSoup 从解析到保存
开发语言·python·beautifulsoup
DRobot7 分钟前
【机械制图与CAD实战(七)】正投影法
人工智能
青岛前景互联信息技术有限公司7 分钟前
从被动处置到主动防控:智能接处警带来的四大核心价值
大数据·人工智能·物联网
chatblog12 分钟前
Codex /goal:给 AI 一个目标,它自己跑一整天
人工智能
数智工坊12 分钟前
【扩散模型超分开山之作】:SR3扩散模型核心原理与全链路解析
论文阅读·人工智能·深度学习·transformer·迁移学习
云天AI实战派14 分钟前
AI 智能体/API 调用故障排查指南:实时语音、Codex 权限与 Spec 驱动开发全流程修复手册
人工智能·驱动开发·chatgpt·api·codex
谙弆悕博士17 分钟前
Python快速学习——第8章:循环语句
python·学习·servlet
小程故事多_8018 分钟前
生产级大模型应用后端架构设计指南(从入门到实战)
人工智能·架构·智能体
Championship.23.2419 分钟前
AI驱动的网络安全革命:威胁检测与防御实战指南
人工智能·安全·web安全
Swift社区21 分钟前
OpenClaw:AI 多线程时代的开始
人工智能·ai·openclaw