Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion framework/e2e/PaddleLT_new/engine/paddle_eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,16 @@

from pltools.res_save import save_tensor

from strategy.ordered_dict import OrderedDictProcess


class LayerEval(object):
"""
构建Layer评估的通用类
"""

# def __init__(self, testing, layerfile, device_id):
def __init__(self, testing, layerfile, device_place_id, upstream_net):
def __init__(self, testing, layerfile, device_place_id, upstream_net, orderdict_usage="None"):
"""
初始化
"""
Expand All @@ -37,6 +39,7 @@ def __init__(self, testing, layerfile, device_place_id, upstream_net):

self.testing = testing
self.upstream_net = upstream_net
self.orderdict_usage = orderdict_usage
self.return_net_instance = self.testing.get("return_net_instance", "False")
self.model_dtype = self.testing.get("model_dtype")
paddle.set_default_dtype(self.model_dtype)
Expand Down Expand Up @@ -65,6 +68,8 @@ def _net_instant(self):
net = self.upstream_net
else:
net = BuildLayer(layerfile=self.layerfile).get_layer()
if self.orderdict_usage != "None":
net = OrderedDictProcess(net=net, layerfile=self.layerfile, orderdict_usage=self.orderdict_usage).process()
return net

def _net_input_and_spec(self):
Expand Down
2 changes: 1 addition & 1 deletion framework/e2e/PaddleLT_new/engine/paddle_eval_bm.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class LayerEvalBM(object):
"""

# def __init__(self, testing, layerfile, device_id):
def __init__(self, testing, layerfile, device_place_id, upstream_net):
def __init__(self, testing, layerfile, device_place_id, upstream_net, orderdict_usage="None"):
"""
初始化
"""
Expand Down
2 changes: 1 addition & 1 deletion framework/e2e/PaddleLT_new/engine/paddle_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class LayerExport(object):
构建Layer导出的通用类
"""

def __init__(self, testing, layerfile, device_place_id, upstream_net):
def __init__(self, testing, layerfile, device_place_id, upstream_net, orderdict_usage="None"):
"""
初始化
"""
Expand Down
2 changes: 1 addition & 1 deletion framework/e2e/PaddleLT_new/engine/paddle_infer.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class LayerInfer(object):
构建Layer预测的通用类
"""

def __init__(self, testing, layerfile, device_place_id, upstream_net):
def __init__(self, testing, layerfile, device_place_id, upstream_net, orderdict_usage="None"):
"""
初始化
"""
Expand Down
2 changes: 1 addition & 1 deletion framework/e2e/PaddleLT_new/engine/paddle_train.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class LayerTrain(object):
"""

# def __init__(self, testing, layerfile, device_id):
def __init__(self, testing, layerfile, device_place_id, upstream_net):
def __init__(self, testing, layerfile, device_place_id, upstream_net, orderdict_usage="None"):
"""
初始化
"""
Expand Down
2 changes: 1 addition & 1 deletion framework/e2e/PaddleLT_new/engine/paddle_train_bm.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class LayerTrainBM(object):
"""

# def __init__(self, testing, layerfile, device_id):
def __init__(self, testing, layerfile, device_place_id, upstream_net):
def __init__(self, testing, layerfile, device_place_id, upstream_net, orderdict_usage="None"):
"""
初始化
"""
Expand Down
7 changes: 4 additions & 3 deletions framework/e2e/PaddleLT_new/engine/torch_engine_map.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@
"""

from engine.torch_eval import TorchLayerEval
from engine.torch_eval_bm import TorchLayerEvalBM

# from engine.torch_eval_bm import TorchLayerEvalBM

# from interpreter.testing_trans import TrainTrans, EvalTrans


torch_engine_map = {
"dy_eval": TorchLayerEval,
"dy_eval_perf": TorchLayerEvalBM, # 动态图评估性能
"torch_dy_eval": TorchLayerEval,
# "torch_dy_eval_perf": TorchLayerEvalBM, # 动态图评估性能
}
39 changes: 29 additions & 10 deletions framework/e2e/PaddleLT_new/engine/torch_eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,49 +6,68 @@
eval 方法
"""
import os
import traceback
import numpy as np
import torch
from engine.torch_xtools import reset
from generator.builder_layer import BuildLayer
from generator.builder_data import BuildData

from strategy.ordered_dict import OrderedDictProcess


class TorchLayerEval(object):
"""
构建Layer评估的通用类
"""

# def __init__(self, testing, layerfile, device_id):
def __init__(self, testing, layerfile):
def __init__(self, testing, layerfile, device_place_id, upstream_net, orderdict_usage="None"):
"""
初始化
"""
self.seed = 33
reset(self.seed)

self.device = os.environ.get("PLT_SET_DEVICE")
torch.device(str(self.device))
torch.device(f"cuda:{device_place_id}")

self.testing = testing
self.upstream_net = upstream_net
self.orderdict_usage = orderdict_usage
self.return_net_instance = self.testing.get("return_net_instance", "False")
self.model_dtype = self.testing.get("model_dtype")

# torch.set_default_dtype(self.model_dtype) # torch不支持字符串dtype, 测试框架暂时没兼容

self.layerfile = layerfile
self.data = BuildData(layerfile=self.layerfile).get_single_data()
# self.data = BuildData(layerfile=self.layerfile).get_single_data()

def _net_input(self):
"""get input"""
reset(self.seed)
data = BuildData(layerfile=self.layerfile).get_single_data(framework="torch")
return data

def _net_instant(self):
"""get net and data"""
"""get net"""
reset(self.seed)
net = BuildLayer(layerfile=self.layerfile).get_layer()
if self.upstream_net:
net = self.upstream_net
else:
net = BuildLayer(layerfile=self.layerfile).get_layer()
if self.orderdict_usage != "None":
net = OrderedDictProcess(net=net, layerfile=self.layerfile, orderdict_usage=self.orderdict_usage).process()
return net

def dy_eval(self):
def torch_dy_eval(self):
"""dygraph eval"""
net = self._net_instant()
# net.eval()
logit = net(*self.data)
return {"logit": logit}
net.eval()
logit = net(*self._net_input())
if self.return_net_instance == "True":
return {"res": {"logit": logit}, "net": net}
else:
return {"res": {"logit": logit}, "net": None}

# def dy2st_eval(self):
# """dy2st eval"""
Expand Down
17 changes: 9 additions & 8 deletions framework/e2e/PaddleLT_new/generator/builder_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import itertools
import numpy as np

if os.environ.get("FRAMEWORK") == "paddle":
if "paddle" in os.environ.get("FRAMEWORK"):
import paddle
import diy
import layerApicase
Expand All @@ -21,9 +21,10 @@
elif os.environ.get("USE_PADDLE_MODEL", "None") == "PaddleNLP":
import layerNLPcase
import paddlenlp
elif os.environ.get("FRAMEWORK") == "torch":

if "torch" in os.environ.get("FRAMEWORK"):
import torch
import layerTorchcase
import torch_case

import pltools.np_tool as tool

Expand All @@ -36,7 +37,7 @@ def __init__(self, layerfile):
self.layerfile = layerfile
self.layer_module = eval(self.layerfile)

def get_single_data(self):
def get_single_data(self, framework="paddle"):
"""get data"""
if hasattr(self.layer_module, "create_numpy_inputs"):
# dataname = self.layerfile + ".create_numpy_inputs()"
Expand All @@ -46,24 +47,24 @@ def get_single_data(self):
if isinstance(i, (tuple, list)): # 为了适配list输入的模型子图
tmp = []
for j in i:
if os.environ.get("FRAMEWORK") == "paddle":
if framework == "paddle":
if j.dtype == np.int64 or j.dtype == np.int32:
tmp.append(paddle.to_tensor(j, stop_gradient=True))
else:
tmp.append(paddle.to_tensor(j, stop_gradient=False))
elif os.environ.get("FRAMEWORK") == "torch":
elif framework == "torch":
if j.dtype == np.int64 or j.dtype == np.int32:
tmp.append(torch.tensor(j, requires_grad=False))
else:
tmp.append(torch.tensor(j, requires_grad=True))
data.append(tmp)
elif isinstance(i, np.ndarray):
if os.environ.get("FRAMEWORK") == "paddle":
if framework == "paddle":
if i.dtype == np.int64 or i.dtype == np.int32:
data.append(paddle.to_tensor(i, stop_gradient=True))
else:
data.append(paddle.to_tensor(i, stop_gradient=False))
elif os.environ.get("FRAMEWORK") == "torch":
elif framework == "torch":
if i.dtype == np.int64 or i.dtype == np.int32:
data.append(torch.tensor(i, requires_grad=False))
else:
Expand Down
8 changes: 5 additions & 3 deletions framework/e2e/PaddleLT_new/generator/builder_layer.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@

import os

if os.environ.get("FRAMEWORK") == "paddle":
# if os.environ.get("FRAMEWORK") == "paddle":
if "paddle" in os.environ.get("FRAMEWORK"):
import paddle
import diy
import layerApicase
Expand All @@ -21,9 +22,10 @@
import paddlenlp

os.system("cd /root/.paddlenlp && rm -rf models")
elif os.environ.get("FRAMEWORK") == "torch":

if "torch" in os.environ.get("FRAMEWORK"):
import torch
import layerTorchcase
import torch_case


class BuildLayer(object):
Expand Down
2 changes: 2 additions & 0 deletions framework/e2e/PaddleLT_new/layerApicase/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import layerApicase.perf_monitor
import layerApicase.nn_sublayer
import layerApicase.nn_extreme_size
import layerApicase.math_sublayer
import layerApicase.math_extreme_size
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import os
import glob

# 获取当前文件所在目录
current_dir = os.path.dirname(__file__)

# 获取当前目录下所有的 .py 文件路径
py_files = glob.glob(os.path.join(current_dir, "*.py"))

# 动态导入所有 .py 文件
for py_file in py_files:
# 获取文件名(不含扩展名)
module_name = os.path.basename(py_file)[:-3]
# 导入模块
__import__('layerApicase.math_extreme_size.' + module_name, globals(), locals(), [])
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import numpy as np
import paddle


class LayerCase(paddle.nn.Layer):
"""
case名称: abs_base
api简介: 求绝对值
"""

def __init__(self):
super(LayerCase, self).__init__()

def forward(self, x, ):
"""
forward
"""

paddle.seed(33)
np.random.seed(33)
out = paddle.abs(x, )
return out



def create_inputspec():
inputspec = (
paddle.static.InputSpec(shape=(-1, -1, -1, -1, -1), dtype=paddle.float32, stop_gradient=False),
)
return inputspec

def create_tensor_inputs():
"""
paddle tensor
"""
inputs = (paddle.to_tensor(-1 + (1 - -1) * np.random.random([1024, 256, 128, 100, 2]).astype('float32'), dtype='float32', stop_gradient=False), )
return inputs


def create_numpy_inputs():
"""
numpy array
"""
inputs = (-1 + (1 - -1) * np.random.random([1024, 256, 128, 100, 2]).astype('float32'), )
return inputs

Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import numpy as np
import paddle


class LayerCase(paddle.nn.Layer):
"""
case名称: Conv2D_giant_size_class
api简介: 2维卷积
"""

def __init__(self):
super(LayerCase, self).__init__()
self.func = paddle.nn.Conv2D(kernel_size=[3, 3], in_channels=256, out_channels=1, )

def forward(self, data, ):
"""
forward
"""

paddle.seed(33)
np.random.seed(33)
out = self.func(data, )
return out



def create_inputspec():
inputspec = (
paddle.static.InputSpec(shape=(-1, 256, -1, -1), dtype=paddle.float32, stop_gradient=False),
)
return inputspec

def create_tensor_inputs():
"""
paddle tensor
"""
inputs = (paddle.to_tensor(-1 + (1 - -1) * np.random.random([1024, 256, 128, 200]).astype('float32'), dtype='float32', stop_gradient=False), )
return inputs


def create_numpy_inputs():
"""
numpy array
"""
inputs = (-1 + (1 - -1) * np.random.random([1024, 256, 128, 200]).astype('float32'), )
return inputs

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import os
import glob

# 获取当前文件所在目录
current_dir = os.path.dirname(__file__)

# 获取当前目录下所有的 .py 文件路径
py_files = glob.glob(os.path.join(current_dir, "*.py"))

# 动态导入所有 .py 文件
for py_file in py_files:
# 获取文件名(不含扩展名)
module_name = os.path.basename(py_file)[:-3]
# 导入模块
__import__('layerApicase.nn_extreme_size.' + module_name, globals(), locals(), [])
Loading
Loading