import torch from torch.nn import functional as F from colossalai.fx.tracer.meta_patch import patched_function from colossalai.testing import clear_cache_before_run @clear_cache_before_run() def test_conv(): # test F.conv_1d data_1d = torch.rand(3, 16, 10) weight_1d = torch.rand(3, 16, 3) out_1d = F.conv1d(data_1d, weight_1d) patched_out_1d = patched_function.torch_nn_functional_conv1d(data_1d, weight_1d) assert out_1d.shape == patched_out_1d.shape # test F.conv_transpose1d weight_1d = torch.transpose(weight_1d, 0, 1) out_transpose_1d = F.conv_transpose1d(data_1d, weight_1d) patched_out_transpose_1d = patched_function.torch_nn_functional_convtranspose1d(data_1d, weight_1d) assert out_transpose_1d.shape == patched_out_transpose_1d.shape # test F.conv2d data_2d = torch.rand(3, 16, 10, 10) weight_2d = torch.rand(3, 16, 3, 3) out_2d = F.conv2d(data_2d, weight_2d) patched_out_2d = patched_function.torch_nn_functional_conv2d(data_2d, weight_2d) assert out_2d.shape == patched_out_2d.shape # test F.conv_transpose2d weight_2d = torch.transpose(weight_2d, 0, 1) out_transpose_2d = F.conv_transpose2d(data_2d, weight_2d) patched_out_transpose_2d = patched_function.torch_nn_functional_convtranspose2d(data_2d, weight_2d) assert out_transpose_2d.shape == patched_out_transpose_2d.shape # test F.conv3d data_3d = torch.rand(3, 16, 10, 10, 10) weight_3d = torch.rand(3, 16, 3, 3, 3) out_3d = F.conv3d(data_3d, weight_3d) patched_out_3d = patched_function.torch_nn_functional_conv3d(data_3d, weight_3d) assert out_3d.shape == patched_out_3d.shape # test F.conv_transpose3d weight_3d = torch.transpose(weight_3d, 0, 1) out_transpose_3d = F.conv_transpose3d(data_3d, weight_3d) patched_out_transpose_3d = patched_function.torch_nn_functional_convtranspose3d(data_3d, weight_3d) assert out_transpose_3d.shape == patched_out_transpose_3d.shape if __name__ == "__main__": test_conv()