def schedule(xgraph: XGraph, target: str, **kwargs) -> XGraph: """ Schedule a xgraph for execution on the given target Returns XGraph containing only executable operations """ fancy_logger.banner("SCHEDULE `{}` EXECUTION GRAPH".format(target)) xgraph = target_registry.get_target_build_func(target)(xgraph.copy(), **kwargs) return xgraph
def test_copy(self): xgraph = XGraph() xgraph.add(XLayer( name='in1', type=['Input'], bottoms=[], tops=[], targets=[] )) xgraph.add(XLayer( name='in2', type=['Input'], bottoms=[], tops=[], targets=[] )) xgraph.add(XLayer( name='conv1', type=['Convolution'], bottoms=['in1'], tops=[], data=ConvData( weights=np.array([[[[1, 2], [3, 4]]]], dtype=np.float32), biases=np.array([0., 1.], dtype=np.float32) ), targets=[] )) xgraph.add(XLayer( name='add1', type=['Eltwise'], bottoms=['conv1', 'in2'], tops=[], targets=[] )) xgraph.insert(XLayer( name='conv2', type=['Convolution'], bottoms=['in2'], tops=['add1'], data=ConvData( weights=np.array([[[[1, 2], [3, 4]]]], dtype=np.float32), biases=np.array([0., 1.], dtype=np.float32) ), targets=[] )) xgraph.add(XLayer( name='pool1', type=['Pooling'], bottoms=['add1'], tops=[], targets=[] )) assert len(xgraph) == 6 assert xgraph.get_layer_names() == \ ['in1', 'conv1', 'in2', 'conv2', 'add1', 'pool1'] xg_copy = xgraph.copy() assert len(xg_copy) == 6 assert xg_copy.get_layer_names() == \ ['in1', 'conv1', 'in2', 'conv2', 'add1', 'pool1'] xgc_layers = xg_copy.get_layers() assert xgc_layers[1].type == ['Convolution'] assert xg_copy.get('conv1').type == ['Convolution'] xgc_layers[1].type = ['Convolution2'] assert xg_copy.get('conv1').type == ['Convolution2'] xgc_layers[1].type = ['Convolution'] assert xgc_layers[1].type == ['Convolution'] assert xg_copy.get('conv1').type == ['Convolution'] np.testing.assert_array_equal( xgc_layers[1].data.weights, np.array([[[[1, 2], [3, 4]]]], dtype=np.float32) ) np.testing.assert_array_equal( xgc_layers[1].data.biases, np.array([0., 1.], dtype=np.float32) ) xgraph.get('conv1').data = ConvData( weights=xgc_layers[1].data.weights * 2, biases=xgc_layers[1].data.biases ) np.testing.assert_array_equal( xgraph.get('conv1').data.weights, np.array([[[[2, 4], [6, 8]]]], dtype=np.float32) ) np.testing.assert_array_equal( xgc_layers[1].data.weights, np.array([[[[1, 2], [3, 4]]]], dtype=np.float32) ) np.testing.assert_array_equal( xgc_layers[1].data.biases, np.array([0., 1.], dtype=np.float32) )
def _test_copy( in1_name: str, in2_name: str, conv1_name: str, add_name: str, conv2_name: str, pool_name: str, ): expected_in1_name = px.stringify(in1_name) expected_in2_name = px.stringify(in2_name) expected_conv1_name = px.stringify(conv1_name) expected_conv2_name = px.stringify(conv2_name) expected_pool_name = px.stringify(pool_name) expected_add_name = px.stringify(add_name) in1 = px.ops.input(op_name=in1_name, shape=[1, 2, 4, 4]) in2 = px.ops.input(op_name=in2_name, shape=[1, 2, 4, 4]) W = px.ops.constant( "W", np.array([[[[1, 2], [3, 4]]]], dtype=np.float32)) X_conv = px.ops.conv2d(op_name=conv1_name, input_layer=in1, weights_layer=W, kernel_size=[2, 2]) X_add = px.ops.eltwise(op_name=add_name, lhs_layer=X_conv, rhs_layer=in2) X_conv2 = px.ops.conv2d(op_name=conv2_name, input_layer=in2, weights_layer=W, kernel_size=[2, 2]) X_pool = px.ops.pool2d(op_name=pool_name, input_layer=X_add, pool_type="Avg", pool_size=[2, 2]) xgraph = XGraph() xgraph.add(in1) xgraph.add(in2) xgraph.add(X_conv) xgraph.add(X_add) xgraph.insert( XLayer( name=conv2_name, type=["Convolution"], bottoms=[in2_name], tops=[add_name], data=ConvData( weights=np.array([[[[1, 2], [3, 4]]]], dtype=np.float32), biases=np.array([0.0, 1.0], dtype=np.float32), ), targets=[], )) xgraph.add(X_pool) assert len(xgraph) == 6 assert xgraph.get_layer_names() == [ expected_in1_name, expected_conv1_name, expected_in2_name, expected_conv2_name, expected_add_name, expected_pool_name, ] xg_copy = xgraph.copy() assert len(xg_copy) == 6 assert xg_copy.get_layer_names() == [ expected_in1_name, expected_conv1_name, expected_in2_name, expected_conv2_name, expected_add_name, expected_pool_name, ] xgc_layers = xg_copy.get_layers() assert xgc_layers[1].type == ["Convolution"] assert xg_copy.get(conv1_name).type == ["Convolution"] xgc_layers[1].type = ["Convolution2"] assert xg_copy.get(conv1_name).type == ["Convolution2"] xgc_layers[1].type = ["Convolution"] assert xgc_layers[1].type == ["Convolution"] assert xg_copy.get(conv1_name).type == ["Convolution"] np.testing.assert_array_equal( xgc_layers[1].data.weights, np.array([[[[1, 2], [3, 4]]]], dtype=np.float32), ) np.testing.assert_array_equal(xgc_layers[1].data.biases, np.array([0.0], dtype=np.float32)) xgraph.get(conv1_name).data = ConvData( weights=xgc_layers[1].data.weights * 2, biases=xgc_layers[1].data.biases) np.testing.assert_array_equal( xgraph.get(conv1_name).data.weights, np.array([[[[2, 4], [6, 8]]]], dtype=np.float32), ) np.testing.assert_array_equal( xgc_layers[1].data.weights, np.array([[[[1, 2], [3, 4]]]], dtype=np.float32), ) np.testing.assert_array_equal(xgc_layers[1].data.biases, np.array([0.0], dtype=np.float32))