基于picklerpc的pytorch单算子测试[单算子远程测试]

基于picklerpc的pytorch单算子测试[单算子远程测试]

通过主流大模型测试程序-用于导出算子列表 得到了算子类型及参数信息。我希望对比每个算子在不同硬件平台上的性能和误差。如果将所有的结果都存成文件,则占用空间太大。下文演示了如何使用picklerpc 将算子类型及参数传递到远程服务器测试

一.服务端

python 复制代码
from picklerpc import PickleRPCServer
import torch
import numpy as np
import time
import traceback

class TorchOpRunner(PickleRPCServer):
    def __init__(self, addr=('localhost', 8080)):
        super().__init__(addr)

    def run(self,op_type,input_desc):
        input_args=[]
        input_kwargs={}

        for arg in input_desc:
            seed,shape,dtype,device=arg
            torch.random.manual_seed(seed)
            input_args.append(torch.rand(shape,dtype=dtype,device=device))

        op=eval(f"torch.ops.{op_type}")
        warmup_count=1
        test_count=3

        record={}
        record["error"]=0

        try:
            for _ in range(warmup_count):
                output=op(*input_args,**input_kwargs)
            torch.cuda.synchronize()

            t0=time.time()
            for _ in range(test_count):
                output=op(*input_args,**input_kwargs)    
            torch.cuda.synchronize()
            t1=time.time()

            latency=(t1-t0)/test_count

            all=[]
            if isinstance(output,torch.Tensor):
                all.append(output.detach().cpu().float().numpy().reshape(-1))
            elif isinstance(output,list) or isinstance(output,tuple):
                for out in output:
                    if isinstance(out,torch.Tensor):   
                        all.append(out.detach().cpu().float().numpy().reshape(-1))
            else:
                print("error type:",type(output))
                record["error"]=3
            
            if len(all)!=0 and record["error"]==0:
                all=np.concatenate(all,axis=0)
                if all.shape[0]>0:
                    record["data"]=all
                else:
                    record["error"]=5
            else:
                 record["error"]=4
            record["latency"]=latency
            return record
        except:
            traceback.print_exc()
            record["error"]=6
            return record
    
    def raise_error(self):
        """Raise an error"""
        raise NotImplementedError('Not ready')

if __name__ == '__main__':
    srv = TorchOpRunner(addr=('localhost',10001))
    srv.register_function(srv.run)
    srv.serve_forever()

二.客户端

python 复制代码
import torch
import picklerpc

def main():
    op_type="aten.gelu_backward.default"
    seed=0
    shape=(1,512,40,128)
    dtype=torch.float32
    device="cuda:0"
    input_desc=[(seed,shape,dtype,device),(seed,shape,dtype,device)]
    client = picklerpc.PickleRPCClient(('localhost', 10001))
    output=client.run(op_type,input_desc)
    print(output["error"],output["data"].shape)

main()
相关推荐
心易行者2 分钟前
在 Claude 4.6 发布的当下,一个不懂编程的人聊聊 Claude Code:当 AI 终于学会自己动手干活
人工智能
子榆.2 分钟前
CANN 性能分析与调优实战:使用 msprof 定位瓶颈,榨干硬件每一分算力
大数据·网络·人工智能
爱喝白开水a2 分钟前
前端AI自动化测试:brower-use调研让大模型帮你做网页交互与测试
前端·人工智能·大模型·prompt·交互·agent·rag
学易6 分钟前
第十五节.别人的工作流,如何使用和调试(上)?(2类必现报错/缺失节点/缺失模型/思路/实操/通用调试步骤)
人工智能·ai作画·stable diffusion·报错·comfyui·缺失节点
空白诗6 分钟前
CANN ops-nn 算子解读:大语言模型推理中的 MatMul 矩阵乘实现
人工智能·语言模型·矩阵
空白诗12 分钟前
CANN ops-nn 算子解读:AIGC 风格迁移中的 BatchNorm 与 InstanceNorm 实现
人工智能·ai
新芒13 分钟前
暖通行业两位数下滑,未来靠什么赢?
大数据·人工智能
B站_计算机毕业设计之家16 分钟前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
weixin_4462608521 分钟前
掌握 Claude Code Hooks:让 AI 变得更聪明!
人工智能
小白|23 分钟前
CANN性能调优实战:从Profiling到极致优化的完整方案
人工智能