Download lib/python3.9/site-packages/caffe2/python/mkl/rewrite_graph_test.py from camenduru/slahmr-test: direct link, hf CLI and curl.
- Browser
- Download file 7.89 kB
-
https://huggingface.co/camenduru/slahmr-test/resolve/main/lib/python3.9/site-packages/caffe2/python/mkl/rewrite_graph_test.py
- Command line
-
hf download hf://camenduru/slahmr-test/lib/python3.9/site-packages/caffe2/python/mkl/rewrite_graph_test.py
-
curl -L -o rewrite_graph_test.py https://huggingface.co/camenduru/slahmr-test/resolve/main/lib/python3.9/site-packages/caffe2/python/mkl/rewrite_graph_test.py
7.89 kB
| import unittest | |
| import numpy as np | |
| import copy | |
| from hypothesis import given | |
| import hypothesis.strategies as st | |
| from caffe2.python.model_helper import ModelHelper | |
| from caffe2.python.models import resnet | |
| from caffe2.python import workspace, brew | |
| import caffe2.python.hypothesis_test_util as hu | |
| import caffe2.python.mkl.rewrite_graph as rewrite_graph | |
| def deterministic_io(model): | |
| model = copy.deepcopy(model) | |
| for i, op in enumerate(model.InitProto().op): | |
| op.device_option.random_seed = i + 1 | |
| if not model.Proto().external_output: | |
| model.Proto().external_output.extend([model.Proto().op[-1].output[0]]) | |
| return model | |
| def simple_fc(): | |
| model = ModelHelper(name="r") | |
| brew.fc(model, "data", "fc", 10, 10) | |
| return model, [(1, 10)] | |
| def double_matmul(): | |
| model = ModelHelper(name="r") | |
| fc0 = brew.fc(model, "data", "fc0", 10, 10) | |
| fc1 = brew.fc(model, fc0, "fc1", 10, 10) | |
| model.Proto().external_output[:] = [str(fc0), str(fc1)] | |
| return model, [(1, 10)] | |
| def simple_relu(): | |
| model = ModelHelper(name="r") | |
| brew.relu(model, "data", "fc") | |
| return model, [(1, 10)] | |
| def simple_mlp(): | |
| model = ModelHelper(name="r") | |
| brew.relu( | |
| model, | |
| brew.fc( | |
| model, | |
| brew.relu( | |
| model, | |
| brew.fc( | |
| model, | |
| "data", | |
| "fc1", | |
| 10, | |
| 10), | |
| "rl1"), | |
| "fc2", | |
| 10, | |
| 10), | |
| "rl2") | |
| return model, [(1, 10)] | |
| def simple_cnn(): | |
| model = ModelHelper(name="r", arg_scope={"order": "NCHW", "is_test": True}) | |
| brew.conv( | |
| model, "data", 'conv1', 3, 16, kernel=3, stride=1 | |
| ) | |
| brew.spatial_bn( | |
| model, 'conv1', 'conv1_spatbn', 16, epsilon=1e-3 | |
| ) | |
| brew.relu(model, 'conv1_spatbn', 'relu1') | |
| return model, [(1, 3, 32, 32)] | |
| def alexnet(): | |
| model = ModelHelper(name="r", arg_scope={"order": "NCHW", "is_test": True}) | |
| conv1 = brew.conv( | |
| model, | |
| "data", | |
| "conv1", | |
| 3, | |
| 64, | |
| 11, ('XavierFill', {}), ('ConstantFill', {}), | |
| stride=4, | |
| pad=2 | |
| ) | |
| relu1 = brew.relu(model, conv1, "conv1") | |
| pool1 = brew.max_pool(model, relu1, "pool1", kernel=3, stride=2, pad=0, | |
| legacy_pad=3) | |
| lrn1 = brew.lrn( | |
| model, pool1, "pool1_lrn", size=5, alpha=1.0e-4, beta=0.75, bias=1.0) | |
| conv2 = brew.conv( | |
| model, | |
| lrn1, | |
| "conv2", | |
| 64, | |
| 192, | |
| 5, | |
| ('XavierFill', {}), | |
| ('ConstantFill', {}), | |
| pad=2 | |
| ) | |
| relu2 = brew.relu(model, conv2, "conv2") | |
| pool2 = brew.max_pool(model, relu2, "pool2", kernel=3, stride=2) | |
| lrn2 = brew.lrn( | |
| model, pool2, "pool2_lrn", size=5, alpha=1.0e-4, beta=0.75, bias=1.0) | |
| conv3 = brew.conv( | |
| model, | |
| lrn2, | |
| "conv3", | |
| 192, | |
| 384, | |
| 3, | |
| ('XavierFill', {}), | |
| ('ConstantFill', {}), | |
| pad=1 | |
| ) | |
| relu3 = brew.relu(model, conv3, "conv3") | |
| conv4 = brew.conv( | |
| model, | |
| relu3, | |
| "conv4", | |
| 384, | |
| 256, | |
| 3, | |
| ('XavierFill', {}), | |
| ('ConstantFill', {}), | |
| pad=1 | |
| ) | |
| relu4 = brew.relu(model, conv4, "conv4") | |
| conv5 = brew.conv( | |
| model, | |
| relu4, | |
| "conv5", | |
| 256, | |
| 256, | |
| 3, | |
| ('XavierFill', {}), | |
| ('ConstantFill', {}), | |
| pad=1 | |
| ) | |
| relu5 = brew.relu(model, conv5, "conv5") | |
| pool5 = brew.max_pool(model, relu5, "pool5", kernel=3, stride=2) | |
| fc6 = brew.fc( | |
| model, | |
| pool5, "fc6", 256 * 6 * 6, 4096, ('XavierFill', {}), | |
| ('ConstantFill', {}) | |
| ) | |
| relu6 = brew.relu(model, fc6, "fc6") | |
| fc7 = brew.fc( | |
| model, relu6, "fc7", 4096, 4096, ('XavierFill', {}), ('ConstantFill', {}) | |
| ) | |
| relu7 = brew.relu(model, fc7, "fc7") | |
| drop7 = brew.dropout(model, relu7, "fc7_dropout", is_test=1, ratio=0.5) | |
| fc8 = brew.fc( | |
| model, drop7, "fc8", 4096, 1000, ('XavierFill', {}), ('ConstantFill', {}) | |
| ) | |
| relu8 = brew.relu(model, fc8, "fc8") | |
| brew.dropout(model, relu8, "fc8_dropout", is_test=1, ratio=0.5) | |
| return model, [(1, 3, 224, 224)] | |
| def simple_resnet(): | |
| model = ModelHelper(name="r", arg_scope={"order": "NCHW", "is_test": True}) | |
| resnet.create_resnet_32x32( | |
| model, "data", num_input_channels=1, num_groups=1, num_labels=5, | |
| is_test=True) | |
| return model, [(1, 1, 32, 32)] | |
| def complex_resnet(): | |
| model = ModelHelper(name="r", arg_scope={"order": "NCHW", "is_test": True}) | |
| resnet.create_resnet50( | |
| model, "data", num_input_channels=1, num_labels=5, is_test=True, | |
| no_loss=True) | |
| return model, [(1, 1, 224, 224)] | |
| class MKLRewriteTest(hu.HypothesisTestCase): | |
| def test_mkl_simple_rewrite(self, gen): | |
| cpu_model, (shape,) = gen() | |
| cpu_model = deterministic_io(cpu_model) | |
| mkl_model = rewrite_graph.rewrite_model_helper_simple(cpu_model) | |
| X = np.random.randn(*shape).astype(np.float32) | |
| def run(model): | |
| self.ws.run(model.InitProto()) | |
| self.ws.create_blob(model.Proto().external_input[0]).feed(X) | |
| self.ws.run(model.Proto()) | |
| return self.ws.blobs[model.Proto().external_output[0]].fetch() | |
| np.testing.assert_allclose(run(cpu_model), run(mkl_model), | |
| atol=1e-4, rtol=1e-4) | |
| def test_mkl_resnet_rewrite(self): | |
| cpu_model, (shape,) = complex_resnet() | |
| cpu_model = deterministic_io(cpu_model) | |
| mkl_model = rewrite_graph.rewrite_model_helper_simple(cpu_model) | |
| np.random.seed(1701) | |
| X = np.random.randn(*shape).astype(np.float32) | |
| def run(model): | |
| self.ws.run(model.InitProto()) | |
| self.ws.create_blob(model.Proto().external_input[0]).feed(X) | |
| self.ws.run(model.Proto()) | |
| return self.ws.blobs[model.Proto().external_output[0]].fetch() | |
| np.testing.assert_allclose(run(cpu_model), run(mkl_model), | |
| atol=1e-4, rtol=1e-4) | |
| def test_mkl_multi_output_rewrite(self): | |
| cpu_model, shapes = double_matmul() | |
| cpu_model = deterministic_io(cpu_model) | |
| mkl_model = rewrite_graph.rewrite_model_helper_simple(cpu_model) | |
| np.random.seed(1701) | |
| Xs = [np.random.randn(*shape).astype(np.float32) for shape in shapes] | |
| def run(model): | |
| self.ws.run(model.InitProto()) | |
| for (name, X) in zip(model.Proto().external_input, Xs): | |
| self.ws.create_blob(name).feed(X) | |
| print(model.Proto()) | |
| self.ws.run(model.Proto()) | |
| return [self.ws.blobs[name].fetch() | |
| for name in model.Proto().external_output] | |
| run(mkl_model) | |
| np.testing.assert_allclose(run(cpu_model), run(mkl_model), | |
| atol=1e-4, rtol=1e-4) | |
| def test_mkl_alexnet_rewrite(self): | |
| cpu_model, (shape,) = alexnet() | |
| cpu_model = deterministic_io(cpu_model) | |
| mkl_model = rewrite_graph.rewrite_model_helper_simple(cpu_model) | |
| np.random.seed(1701) | |
| X = np.random.randn(*shape).astype(np.float32) | |
| def run(model): | |
| self.ws.run(model.InitProto()) | |
| self.ws.create_blob(model.Proto().external_input[0]).feed(X) | |
| self.ws.run(model.Proto()) | |
| return self.ws.blobs[model.Proto().external_output[0]].fetch() | |
| np.testing.assert_allclose(run(cpu_model), run(mkl_model), | |
| atol=1e-4, rtol=1e-4) | |
| if __name__ == "__main__": | |
| import unittest | |
| unittest.main() | |