diff --git a/Scheduler/scheduler.py b/Scheduler/scheduler.py index 834698a6..10358321 100644 --- a/Scheduler/scheduler.py +++ b/Scheduler/scheduler.py @@ -140,7 +140,7 @@ def __str__(self): def register_model(model_name : str, compiled_model): SchedulerDNNModel.MODEL_MAP[model_name] = compiled_model -class ExecutionEngine: +class PyTorchSimRunner: PARTITION_BUSY = 0 PARTITION_IDLE = 1 SELECT_NOTHING = 2 @@ -262,7 +262,7 @@ def launch_kernel(self, current_cycle, partion_idx=0): self.partition_state[partion_idx] = self.PARTITION_BUSY return self.backend_simulator.launch(onnx_path, attribute_path, current_cycle, partion_idx) -class FIFOExecutionEngine(ExecutionEngine): +class FIFORunner(PyTorchSimRunner): def __init__(self, backend_simulator: BackendSimulator, num_partion=1) -> None: super().__init__(backend_simulator, num_partion) @@ -297,7 +297,7 @@ def select_kernel(self, partition_idx): # No proper kernel now return self.SELECT_NOTHING -class RRExecutionEngine(ExecutionEngine): +class RoundRobinRunner(PyTorchSimRunner): def __init__(self, backend_simulator: BackendSimulator, num_partion=1) -> None: super().__init__(backend_simulator, num_partion) self.next_pointer = None @@ -360,9 +360,9 @@ def __init__(self, num_request_queue=1, max_batch=1, engine_select=FIFO_ENGINE, self.backend_simulator = BackendSimulator(backend_path, backend_config) self.backend_simulator.interactive_simulation() if engine_select == Scheduler.FIFO_ENGINE: - self.execution_engine = FIFOExecutionEngine(self.backend_simulator, self.num_request_queue) + self.execution_engine = FIFORunner(self.backend_simulator, self.num_request_queue) elif engine_select == Scheduler.RR_ENGINE: - self.execution_engine = RRExecutionEngine(self.backend_simulator, self.num_request_queue) + self.execution_engine = RoundRobinRunner(self.backend_simulator, self.num_request_queue) else: print(f"Not supporetd engine type {engine_select}") exit(1) @@ -480,7 +480,7 @@ def run(self, until_time): def execute_cycle(): launch_ret_info = [] for i in range(self.execution_engine.num_partion): - if self.execution_engine.partition_state[i] == ExecutionEngine.PARTITION_IDLE: + if self.execution_engine.partition_state[i] == PyTorchSimRunner.PARTITION_IDLE: ret = self.execution_engine.launch_kernel(self.current_cycle, i) launch_ret_info.append(ret) @@ -495,7 +495,7 @@ def execute_cycle(): for core_idx in result_list: # Kernel is finished. So set idle state - self.execution_engine.partition_state[core_idx] = ExecutionEngine.PARTITION_IDLE + self.execution_engine.partition_state[core_idx] = PyTorchSimRunner.PARTITION_IDLE return result_list @@ -543,4 +543,4 @@ def msec_to_cycle(self, msec): return msec freq = self.backend_simulator.get_core_freq() - return int(msec * (freq / 1000)) \ No newline at end of file + return int(msec * (freq / 1000)) diff --git a/experiments/gemm.py b/experiments/gemm.py index a1fdcff6..e7a639ad 100644 --- a/experiments/gemm.py +++ b/experiments/gemm.py @@ -48,7 +48,7 @@ def custom_matmul(a, b): if 'BACKENDSIM_SPIKE_ONLY' in os.environ: del os.environ['BACKENDSIM_SPIKE_ONLY'] - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() run_matmul(size[0], size[1], size[2], config) diff --git a/scripts/ILS_experiment/test_matmul.py b/scripts/ILS_experiment/test_matmul.py index 09cc407d..667dfc66 100644 --- a/scripts/ILS_experiment/test_matmul.py +++ b/scripts/ILS_experiment/test_matmul.py @@ -60,7 +60,7 @@ def custom_matmul(bias, a, b): args = parser.parse_args() shape = tuple(map(int, args.shape.strip('()').split(','))) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_matmul(device, *shape) diff --git a/scripts/chiplet_prep.py b/scripts/chiplet_prep.py index 168532f1..32f7ad50 100644 --- a/scripts/chiplet_prep.py +++ b/scripts/chiplet_prep.py @@ -61,8 +61,8 @@ def modify_file(dump_path, name, address_numa_stride=None, subgraph_map=None): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() parser = argparse.ArgumentParser(description='Process folder argument.') parser.add_argument('size', type=int, help='Folder value', default=256) diff --git a/test_extension_backend.py b/test_extension_backend.py index f0a9353a..5e6427ef 100644 --- a/test_extension_backend.py +++ b/test_extension_backend.py @@ -22,8 +22,8 @@ from tests.Fusion.test_matmul_activation import test_matmul_activation if __name__ == "__main__": - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() #test_vectoradd(device, (47, 10)) #test_vector_scalar_add(device, (10, 10)) diff --git a/tests/Diffusion/test_diffusion.py b/tests/Diffusion/test_diffusion.py index 03d1b721..c5170209 100644 --- a/tests/Diffusion/test_diffusion.py +++ b/tests/Diffusion/test_diffusion.py @@ -553,8 +553,8 @@ def test_upsample2d( args = parser.parse_args() sys.path.append(os.environ.get("TORCHSIM_DIR", "/workspace/PyTorchSim")) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() #test_upsample2d(device) diff --git a/tests/Fusion/test_addmm_residual.py b/tests/Fusion/test_addmm_residual.py index a5e05182..ef753a67 100644 --- a/tests/Fusion/test_addmm_residual.py +++ b/tests/Fusion/test_addmm_residual.py @@ -43,8 +43,8 @@ def addmm_residual(a, b, c, d): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_addmm_residual(device, 32, 32, 32) test_addmm_residual(device, 128, 128, 128) diff --git a/tests/Fusion/test_attention_fusion.py b/tests/Fusion/test_attention_fusion.py index 95bdf165..123376d1 100644 --- a/tests/Fusion/test_attention_fusion.py +++ b/tests/Fusion/test_attention_fusion.py @@ -75,8 +75,8 @@ def test_MHA(device, num_heads=12, embed_dim=768, input_seq=512): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_MHA(device) # test_Attention(device, head=16, seq=512, d_k=64) diff --git a/tests/Fusion/test_bmm_reduction.py b/tests/Fusion/test_bmm_reduction.py index 42e38095..4f4d3ad6 100644 --- a/tests/Fusion/test_bmm_reduction.py +++ b/tests/Fusion/test_bmm_reduction.py @@ -42,8 +42,8 @@ def bmm(a, b): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() #test_bmm_reduce(device) test_bmm_reduce(device, 12, 512) diff --git a/tests/Fusion/test_conv_fusion.py b/tests/Fusion/test_conv_fusion.py index 42210b13..694f3bb9 100644 --- a/tests/Fusion/test_conv_fusion.py +++ b/tests/Fusion/test_conv_fusion.py @@ -101,8 +101,8 @@ def custom_conv_bn_relu(a, b, bias, c, d, e, f): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() # Vanila test diff --git a/tests/Fusion/test_matmul_activation.py b/tests/Fusion/test_matmul_activation.py index 2381bd8c..2f1d014f 100644 --- a/tests/Fusion/test_matmul_activation.py +++ b/tests/Fusion/test_matmul_activation.py @@ -73,8 +73,8 @@ def test_matmul_activation(device, batch_size=16, input_size=32, output_size=8, import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_matmul_activation(device) test_matmul_activation(device, batch_size=32, input_size=32, output_size=32, activation_fn="sigmoid") diff --git a/tests/Fusion/test_matmul_reduction.py b/tests/Fusion/test_matmul_reduction.py index 31ea1b0d..df8cf969 100644 --- a/tests/Fusion/test_matmul_reduction.py +++ b/tests/Fusion/test_matmul_reduction.py @@ -89,8 +89,8 @@ def matmul_fused(a, b, c, d): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_matmul_reduce(device, 3072, 512, 768) test_matmul_var_mean(device) diff --git a/tests/Fusion/test_matmul_scalar.py b/tests/Fusion/test_matmul_scalar.py index 0dcb54f9..0815bb90 100644 --- a/tests/Fusion/test_matmul_scalar.py +++ b/tests/Fusion/test_matmul_scalar.py @@ -39,7 +39,7 @@ def matmul_fused(a, b, c): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_matmul_scalar(device) diff --git a/tests/Fusion/test_prologue_fusion.py b/tests/Fusion/test_prologue_fusion.py index 797f9e76..b27312a9 100644 --- a/tests/Fusion/test_prologue_fusion.py +++ b/tests/Fusion/test_prologue_fusion.py @@ -88,8 +88,8 @@ def bmm(a, b, c, d): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_elem_broadcast_fusion(device) test_elem_fusion(device) diff --git a/tests/Fusion/test_transformer_fusion.py b/tests/Fusion/test_transformer_fusion.py index 0e500b5b..b1cceb2c 100644 --- a/tests/Fusion/test_transformer_fusion.py +++ b/tests/Fusion/test_transformer_fusion.py @@ -203,8 +203,8 @@ def test_EncoderBlock_validation(head=12, embed_dim=768, input_seq=512): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() #test_MHA(device) test_EncoderBlock(device) diff --git a/tests/MLP/test_mlp.py b/tests/MLP/test_mlp.py index 6f6c9444..31bcefdf 100644 --- a/tests/MLP/test_mlp.py +++ b/tests/MLP/test_mlp.py @@ -281,9 +281,9 @@ def train(model, device): return if __name__ == "__main__": - from Scheduler.scheduler import ExecutionEngine + from Scheduler.scheduler import PyTorchSimRunner torch.set_printoptions(threshold=float('inf'), linewidth=600) - module = ExecutionEngine.setup_device() + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_mlp(device) diff --git a/tests/MLP/test_mlp_cpu.py b/tests/MLP/test_mlp_cpu.py index 49f44650..112f5d07 100644 --- a/tests/MLP/test_mlp_cpu.py +++ b/tests/MLP/test_mlp_cpu.py @@ -399,7 +399,6 @@ def train(model, device): if __name__ == "__main__": - from Scheduler.scheduler import ExecutionEngine # torch.set_printoptions(threshold=float('inf'), linewidth=600) device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") diff --git a/tests/Mixtral_8x7B/test_attention.py b/tests/Mixtral_8x7B/test_attention.py index aa1af651..6a7747f7 100644 --- a/tests/Mixtral_8x7B/test_attention.py +++ b/tests/Mixtral_8x7B/test_attention.py @@ -163,8 +163,8 @@ def test_rmsnorm(device, seq=32): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_rmsnorm(device, seq=1) test_concat(device, size1=(1, 8, 64, 64), size2=(1,8,1,64), dim=2) diff --git a/tests/MoE/test_moe.py b/tests/MoE/test_moe.py index c5ab8107..ae16f0b0 100644 --- a/tests/MoE/test_moe.py +++ b/tests/MoE/test_moe.py @@ -783,9 +783,9 @@ def evaluation(model, evaluation_loader): train(opt_model, train_loader) if __name__ == "__main__": - from Scheduler.scheduler import ExecutionEngine + from Scheduler.scheduler import PyTorchSimRunner torch.set_printoptions(threshold=float('inf'), linewidth=600) - module = ExecutionEngine.setup_device() + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_moe(device) diff --git a/tests/test_activation.py b/tests/test_activation.py index de3542c3..575fc7e8 100644 --- a/tests/test_activation.py +++ b/tests/test_activation.py @@ -88,8 +88,8 @@ def test_SwiGLU(device, size=(128, 128)): args = parser.parse_args() shape = tuple(map(int, args.shape.strip('()').split(','))) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_ReLU(device, (47, 10)) test_ReLU(device, (128, 128)) diff --git a/tests/test_add.py b/tests/test_add.py index 5e1ab15e..118632d5 100644 --- a/tests/test_add.py +++ b/tests/test_add.py @@ -58,8 +58,8 @@ def vectoradd(a, b): args = parser.parse_args() shape = tuple(map(int, args.shape.strip('()').split(','))) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_vectoradd(device, (1, 1)) test_vectoradd(device, (47, 10)) diff --git a/tests/test_batchnorm.py b/tests/test_batchnorm.py index f7abacf5..251805f5 100644 --- a/tests/test_batchnorm.py +++ b/tests/test_batchnorm.py @@ -37,8 +37,8 @@ def test_BatchNorm(device, size=(1, 16, 64, 64)): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_BatchNorm(device) test_BatchNorm(device, size=(1,64, 32, 32)) diff --git a/tests/test_bmm.py b/tests/test_bmm.py index 6d9279aa..d90410db 100644 --- a/tests/test_bmm.py +++ b/tests/test_bmm.py @@ -46,8 +46,8 @@ def bmm(a, b, bias): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_BMM(device) test_BMM(device, 2, 256, 128, 256) diff --git a/tests/test_cnn.py b/tests/test_cnn.py index aaad2836..54225747 100644 --- a/tests/test_cnn.py +++ b/tests/test_cnn.py @@ -53,7 +53,7 @@ def test_CNN(device): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_CNN(device) diff --git a/tests/test_conv2d.py b/tests/test_conv2d.py index 21bbfec7..e964319d 100644 --- a/tests/test_conv2d.py +++ b/tests/test_conv2d.py @@ -40,8 +40,8 @@ def custom_conv2d(a, b, bias): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() torch._dynamo.config.cache_size_limit = 64 test_conv2d(device, batch_size=8, in_channels=3, out_channels=32, input_size=32, kernel_size=1, stride=1, padding=0) diff --git a/tests/test_exponent.py b/tests/test_exponent.py index c95823cb..e60f8407 100644 --- a/tests/test_exponent.py +++ b/tests/test_exponent.py @@ -31,7 +31,7 @@ def exponent(a): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_exponent(device, size=(32, 32)) diff --git a/tests/test_indirect_access.py b/tests/test_indirect_access.py index b7b20074..c6afaf86 100644 --- a/tests/test_indirect_access.py +++ b/tests/test_indirect_access.py @@ -48,8 +48,8 @@ def test_embedding(device, vocab_size, dim): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_indirect_vectoradd(device) #test_embedding(device, 1024, 2048) \ No newline at end of file diff --git a/tests/test_layernorm.py b/tests/test_layernorm.py index 1cea9d9f..28e38d37 100644 --- a/tests/test_layernorm.py +++ b/tests/test_layernorm.py @@ -41,8 +41,8 @@ def test_LayerNorm(device, size=(64, 64)): args = parser.parse_args() shape = tuple(map(int, args.shape.strip('()').split(','))) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() #test_LayerNorm(device) test_LayerNorm(device, shape) diff --git a/tests/test_matmul.py b/tests/test_matmul.py index 6f41468b..cd30bd30 100644 --- a/tests/test_matmul.py +++ b/tests/test_matmul.py @@ -94,8 +94,8 @@ def custom_linear(a, b, bias): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_matmul(device, 32, 32, 32) test_matmul(device, 128, 128, 128) diff --git a/tests/test_mlp.py b/tests/test_mlp.py index b8118aa3..423d6e8e 100644 --- a/tests/test_mlp.py +++ b/tests/test_mlp.py @@ -109,8 +109,8 @@ def test_optimizer(device): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_mlp(device) test_mlp_inf(device, batch_size=1, input_size=256, hidden_size=512, output_size=256) diff --git a/tests/test_pool.py b/tests/test_pool.py index 304a5e7c..f5505dba 100644 --- a/tests/test_pool.py +++ b/tests/test_pool.py @@ -47,8 +47,8 @@ def avgpool(a): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() #test_maxpool(device, b=1, c=8, h=16, w=16) #test_maxpool(device, b=1, c=8, h=112, w=112) diff --git a/tests/test_reduce.py b/tests/test_reduce.py index e1a84b7f..4781112d 100644 --- a/tests/test_reduce.py +++ b/tests/test_reduce.py @@ -47,8 +47,8 @@ def reduce_sum(a, dim, keepdim): args = parser.parse_args() shape = tuple(map(int, args.shape.strip('()').split(','))) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_reduce_sum(device, (29, 47), 1, keepdim=True) test_reduce_sum(device, (17, 68), 0, keepdim=True) diff --git a/tests/test_resnet.py b/tests/test_resnet.py index 97c60528..c83f13ba 100644 --- a/tests/test_resnet.py +++ b/tests/test_resnet.py @@ -49,7 +49,7 @@ def test_resnet(device, batch=1, model_type='resnet18'): args = args.parse_args() sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_resnet(device, model_type=args.model_type) diff --git a/tests/test_single_perceptron.py b/tests/test_single_perceptron.py index c7fdca06..beab1c54 100644 --- a/tests/test_single_perceptron.py +++ b/tests/test_single_perceptron.py @@ -82,7 +82,7 @@ def weight_update(a, b, lr): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_single_perceptron(device) diff --git a/tests/test_softmax.py b/tests/test_softmax.py index 9fba41dd..e6e8cc1e 100644 --- a/tests/test_softmax.py +++ b/tests/test_softmax.py @@ -58,8 +58,8 @@ def test_softmax(device, size=(128, 128), dim=1): args = parser.parse_args() shape = tuple(map(int, args.shape.strip('()').split(','))) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_softmax(device, size=(64, 128)) test_softmax(device, size=(64, 128), dim=0) diff --git a/tests/test_sparse_core.py b/tests/test_sparse_core.py index b2b16818..72eda0c8 100644 --- a/tests/test_sparse_core.py +++ b/tests/test_sparse_core.py @@ -80,9 +80,9 @@ def test_sparse_mlp(device, batch_size=32, input_size=128, hidden_size=128, outp import os import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/root/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine + from Scheduler.scheduler import PyTorchSimRunner - module = ExecutionEngine.setup_device() + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_sparse_mlp(device, batch_size=8, input_size=16, hidden_size=32, output_size=64) diff --git a/tests/test_sparsity.py b/tests/test_sparsity.py index 3e079f83..a2493673 100644 --- a/tests/test_sparsity.py +++ b/tests/test_sparsity.py @@ -96,8 +96,8 @@ def test_mlp_inf(device, batch_size=64, input_size=64, hidden_size=32, output_si ) args = parser.parse_args() - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() #test_dec_inf(device, sparsity=args.sparsity, block=args.block) diff --git a/tests/test_stonne.py b/tests/test_stonne.py index 5e4fe5fb..04ad05a8 100644 --- a/tests/test_stonne.py +++ b/tests/test_stonne.py @@ -54,7 +54,7 @@ def test_sparse_mm(device, input_size=128, hidden_size=128, output_size=128, spa args = parser.parse_args() sys.path.append(os.environ.get('TORCHSIM_DIR', default='/root/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_sparse_mm(device, args.sz, args.sz, args.sz, args.sparsity) \ No newline at end of file diff --git a/tests/test_topk.py b/tests/test_topk.py new file mode 100644 index 00000000..0d5c08ec --- /dev/null +++ b/tests/test_topk.py @@ -0,0 +1,54 @@ +import torch +import torch._dynamo +import torch.utils.cpp_extension + +def test_result(name, out, cpu_out, rtol=1e-4, atol=1e-4): + if torch.allclose(out.cpu(), cpu_out, rtol=rtol, atol=atol): + message = f"|{name} Test Passed|" + print("-" * len(message)) + print(message) + print("-" * len(message)) + else: + message = f"|{name} Test Failed|" + print("-" * len(message)) + print(message) + print("-" * len(message)) + print("custom out: ", out.cpu()) + print("cpu out: ", cpu_out) + exit(1) + +def test_topk(device, size=(128, 128), k=5, dim=-1, largest=True, sorted=True): + # dim 해석을 위해 양수 인덱스로 변환 + dim_ = dim if dim >= 0 else (len(size) + dim) + assert 0 <= dim_ < len(size), "dim이 텐서 차원 범위를 벗어났습니다." + assert k <= size[dim_], f"k(={k})는 size[dim](={size[dim_]}) 이하여야 합니다." + + def topk_fn(a): + return torch.topk(a, k, dim=dim, largest=largest, sorted=sorted) + + x = torch.randn(size) + x = x.to(device=device) + + opt_topk = torch.compile(dynamic=False)(topk_fn) + res_values, res_indices = opt_topk(x) + + ref_values, ref_indices = torch.topk(x.cpu(), k, dim=dim, largest=largest, sorted=sorted) + + test_result("TopK/values", res_values, ref_values) + test_result("TopK/indices", res_indices, ref_indices) + +if __name__ == "__main__": + import os + import sys + import argparse + sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) + + parser = argparse.ArgumentParser(description="Run LayerNorm test with dynamic shape") + parser.add_argument('--shape', type=str, default="(512,768)") + args = parser.parse_args() + shape = tuple(map(int, args.shape.strip('()').split(','))) + + from Scheduler.scheduler import ExecutionEngine + module = ExecutionEngine.setup_device() + device = module.custom_device() + test_topk(device, (128, 128), k=2, dim=-1) \ No newline at end of file diff --git a/tests/test_transcendental.py b/tests/test_transcendental.py index 5f296581..38c2f4f6 100644 --- a/tests/test_transcendental.py +++ b/tests/test_transcendental.py @@ -73,8 +73,8 @@ def cos(a): args = parser.parse_args() shape = tuple(map(int, args.shape.strip('()').split(','))) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_tanh(device) test_exp(device) diff --git a/tests/test_transformer.py b/tests/test_transformer.py index 4d45707e..a3ac55d7 100644 --- a/tests/test_transformer.py +++ b/tests/test_transformer.py @@ -119,8 +119,8 @@ def test_MHA(device, num_heads=12, embed_dim=768, input_seq=512): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_EncoderBlock(device) # test_Attention(device, head=16, seq=512, d_k=64) diff --git a/tests/test_transpose2D.py b/tests/test_transpose2D.py index 14f16fbb..af5aacf7 100644 --- a/tests/test_transpose2D.py +++ b/tests/test_transpose2D.py @@ -46,8 +46,8 @@ def transpose(a, b): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_Transpose2D(device, [64, 156]) test_Transpose2D_2(device, [16, 64]) diff --git a/tests/test_transpose3D.py b/tests/test_transpose3D.py index 937948c4..d6c1092d 100644 --- a/tests/test_transpose3D.py +++ b/tests/test_transpose3D.py @@ -61,8 +61,8 @@ def transpose(a, b): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_Transpose3D_1(device, [62, 34, 44]) test_Transpose3D_1(device, [62, 134, 144]) diff --git a/tests/test_vectorops.py b/tests/test_vectorops.py index 0677b7ae..ed895171 100644 --- a/tests/test_vectorops.py +++ b/tests/test_vectorops.py @@ -6,8 +6,8 @@ import os import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() # Target shape diff --git a/tests/test_view3D_2D.py b/tests/test_view3D_2D.py index a5a31a85..148fe8fa 100644 --- a/tests/test_view3D_2D.py +++ b/tests/test_view3D_2D.py @@ -44,8 +44,8 @@ def view2D_3D(a): import sys sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() test_view3D_2D(device) test_view3D_2D(device, [12, 512, 64]) diff --git a/tests/test_vit.py b/tests/test_vit.py index 6f587127..aeb4f148 100644 --- a/tests/test_vit.py +++ b/tests/test_vit.py @@ -202,8 +202,8 @@ def test_encoder_block_with_class_token( shape = tuple(map(int, args.shape.strip('()').split(','))) sys.path.append(os.environ.get('TORCHSIM_DIR', default='/workspace/PyTorchSim')) - from Scheduler.scheduler import ExecutionEngine - module = ExecutionEngine.setup_device() + from Scheduler.scheduler import PyTorchSimRunner + module = PyTorchSimRunner.setup_device() device = module.custom_device() #test_multihead_attention(device) #test_encoder_block(device, seq_len=197)