adjut the file structure and name Deleted extra information Do some formatting work Add test case and fix some document fix importstags/v1.5.0-rc1
| @@ -97,3 +97,29 @@ def get_bprop_matrix_set_diag(self): | |||
| return dx, dy, dz | |||
| return bprop | |||
| @bprop_getters.register(inner.DSDMatmul) | |||
| def get_dsd_matmul_bprop(self): | |||
| def bprop(w1_gm, w2_gm, v_gm, out, dout): | |||
| d_w1_gm, d_w2_gm, d_v_gm = inner.DSDGrad()(w1_gm, w2_gm, v_gm, out, dout) | |||
| return d_w1_gm, d_w2_gm, d_v_gm | |||
| return bprop | |||
| @bprop_getters.register(inner.MatmulDDS) | |||
| def get_bprop(self): | |||
| """brop of the matmulDDS operator""" | |||
| def bprop(q, k, local_mask, global_mask, out, d_out): | |||
| lc, gc = out | |||
| d_lc, d_gc = d_out | |||
| dq, dk = inner.MatmulDDSGrad()(q, k, lc, gc, d_lc, d_gc) | |||
| dk = P.Transpose()(dk, (1, 0, 3, 2)) | |||
| # local_mask = 0 | |||
| # d_local_mask = local_mask | |||
| # global_mask = 0 | |||
| # d_global_mask = global_mask | |||
| all_d = (dq, dk, None, None) | |||
| return all_d | |||
| return bprop | |||
| @@ -33,3 +33,7 @@ from .fake_quant_perlayer import _fake_quant_per_layer_tbe | |||
| from .fake_quant_perlayer_grad import _fake_quant_per_layer_grad_tbe | |||
| from .minmax_update_perchannel import _minmax_update_perchannel_tbe | |||
| from .minmax_update_perlayer import _minmax_update_perlayer_tbe | |||
| from .matmul_dds_impl import MatmulDDSImpl | |||
| from .matmul_dds_grad_impl import matmul_dds_grad | |||
| from .dsd_impl import DSDMatmulimpl | |||
| from .dsd_back_impl import dsdbpropimpl | |||
| @@ -17,7 +17,7 @@ from te import tik | |||
| from mindspore.ops.op_info_register import op_info_register, TBERegOp, DataType | |||
| matmul_dds_grad_op_info = TBERegOp("CusMatmulDDSGrad") \ | |||
| matmul_dds_grad_op_info = TBERegOp("MatmulDDSGrad") \ | |||
| .fusion_type("OPAQUE") \ | |||
| .async_flag(False) \ | |||
| .binfile_name("matmul_dds_grad.so") \ | |||
| @@ -16,12 +16,12 @@ | |||
| from te import tik | |||
| from mindspore.ops.op_info_register import op_info_register, TBERegOp, DataType | |||
| matmul_dds_op_info = TBERegOp("CusMatmulDDS") \ | |||
| matmul_dds_op_info = TBERegOp("MatmulDDS") \ | |||
| .fusion_type("OPAQUE") \ | |||
| .async_flag(False) \ | |||
| .binfile_name("matmul_dds.so") \ | |||
| .compute_cost(10) \ | |||
| .kernel_name("CusMatmulDDSImpl") \ | |||
| .kernel_name("MatmulDDSImpl") \ | |||
| .partial_flag(True) \ | |||
| .attr("bs", "required", "int", "all") \ | |||
| .attr("heads", "required", "int", "all") \ | |||
| @@ -38,15 +38,15 @@ matmul_dds_op_info = TBERegOp("CusMatmulDDS") \ | |||
| @op_info_register(matmul_dds_op_info) | |||
| def CusMatmulDDSImpl(q, | |||
| k, | |||
| local_mask, | |||
| global_mask, | |||
| local_prob, | |||
| global_prob, | |||
| bs, | |||
| heads, | |||
| kernel_name="CusMatmulDDSImpl"): | |||
| def MatmulDDSImpl(q, | |||
| k, | |||
| local_mask, | |||
| global_mask, | |||
| local_prob, | |||
| global_prob, | |||
| bs, | |||
| heads, | |||
| kernel_name="MatmulDDSImpl"): | |||
| """ | |||
| :param q: the dict of input q (bs*seq_len, embedding_size) zN | |||
| :param k: the dict of input k (bs*seq_len, embedding_size) nZ | |||
| @@ -15,4 +15,4 @@ bprop.32:x* | |||
| bprop.32:y* | |||
| bprop.32:out* | |||
| bprop.32:dout2 | |||
| bprop.32:[CNode]35:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.32:[CNode]35:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -9,4 +9,4 @@ m | |||
| bprop.13:x* | |||
| bprop.13:out* | |||
| bprop.13:dout2 | |||
| bprop.13:[CNode]15:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.13:[CNode]15:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -9,4 +9,4 @@ m | |||
| bprop.16:x* | |||
| bprop.16:out* | |||
| bprop.16:dout2 | |||
| bprop.16:[CNode]18:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.16:[CNode]18:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.21:x* | |||
| bprop.21:y* | |||
| bprop.21:out* | |||
| bprop.21:dout2 | |||
| bprop.21:[CNode]24:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.21:[CNode]24:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.25:x* | |||
| bprop.25:y* | |||
| bprop.25:out* | |||
| bprop.25:dout2 | |||
| bprop.25:[CNode]28:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.25:[CNode]28:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -12,4 +12,4 @@ bprop.60:x* | |||
| bprop.60:y* | |||
| bprop.60:out* | |||
| bprop.60:dout2 | |||
| bprop.60:[CNode]62:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.60:[CNode]62:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -9,4 +9,4 @@ m | |||
| bprop.67:x* | |||
| bprop.67:out* | |||
| bprop.67:dout2 | |||
| bprop.67:[CNode]69:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.67:[CNode]69:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -6,4 +6,4 @@ h | |||
| bprop.19:x* | |||
| bprop.19:out* | |||
| bprop.19:dout2 | |||
| bprop.19:[CNode]20:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.19:[CNode]20:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -17,4 +17,4 @@ | |||
| bprop.110:keep_prob* | |||
| bprop.110:out* | |||
| bprop.110:dout2 | |||
| bprop.110:[CNode]114:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.110:[CNode]114:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -12,4 +12,4 @@ | |||
| bprop.50:keep_prob* | |||
| bprop.50:out* | |||
| bprop.50:dout2 | |||
| bprop.50:[CNode]53:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.50:[CNode]53:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.70:x* | |||
| bprop.70:y* | |||
| bprop.70:out* | |||
| bprop.70:dout2 | |||
| bprop.70:[CNode]73:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.70:[CNode]73:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.82:x* | |||
| bprop.82:y* | |||
| bprop.82:out* | |||
| bprop.82:dout2 | |||
| bprop.82:[CNode]85:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.82:[CNode]85:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.78:x* | |||
| bprop.78:y* | |||
| bprop.78:out* | |||
| bprop.78:dout2 | |||
| bprop.78:[CNode]81:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.78:[CNode]81:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.63:x* | |||
| bprop.63:y* | |||
| bprop.63:out* | |||
| bprop.63:dout2 | |||
| bprop.63:[CNode]66:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.63:[CNode]66:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -5,4 +5,4 @@ b | |||
| bprop.2:x* | |||
| bprop.2:out* | |||
| bprop.2:dout2 | |||
| bprop.2:[CNode]3:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.2:[CNode]3:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -9,4 +9,4 @@ m | |||
| bprop.29:x* | |||
| bprop.29:out* | |||
| bprop.29:dout2 | |||
| bprop.29:[CNode]31:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.29:[CNode]31:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.90:x* | |||
| bprop.90:y* | |||
| bprop.90:out* | |||
| bprop.90:dout2 | |||
| bprop.90:[CNode]93:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.90:[CNode]93:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.86:x* | |||
| bprop.86:y* | |||
| bprop.86:out* | |||
| bprop.86:dout2 | |||
| bprop.86:[CNode]89:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.86:[CNode]89:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ | |||
| bprop.45:num* | |||
| bprop.45:out* | |||
| bprop.45:dout2 | |||
| bprop.45:[CNode]49:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.45:[CNode]49:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.94:x* | |||
| bprop.94:y* | |||
| bprop.94:out* | |||
| bprop.94:dout2 | |||
| bprop.94:[CNode]97:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.94:[CNode]97:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -9,4 +9,4 @@ m | |||
| bprop.39:x* | |||
| bprop.39:out* | |||
| bprop.39:dout2 | |||
| bprop.39:[CNode]41:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.39:[CNode]41:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.98:x* | |||
| bprop.98:y* | |||
| bprop.98:out* | |||
| bprop.98:dout2 | |||
| bprop.98:[CNode]101:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.98:[CNode]101:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -15,4 +15,4 @@ bprop.74:x* | |||
| bprop.74:y* | |||
| bprop.74:out* | |||
| bprop.74:dout2 | |||
| bprop.74:[CNode]77:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.74:[CNode]77:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -19,4 +19,4 @@ | |||
| bprop.54:off_value* | |||
| bprop.54:out* | |||
| bprop.54:dout2 | |||
| bprop.54:[CNode]59:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.54:[CNode]59:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -7,4 +7,4 @@ f | |||
| bprop.7:x* | |||
| bprop.7:out* | |||
| bprop.7:dout2 | |||
| bprop.7:[CNode]9:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.7:[CNode]9:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -7,4 +7,4 @@ f | |||
| bprop.4:x* | |||
| bprop.4:out* | |||
| bprop.4:dout2 | |||
| bprop.4:[CNode]6:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.4:[CNode]6:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -11,4 +11,4 @@ bprop.0:dxbprop.0:[CNode]1bprop.0:[CNode]1"S-Prim-MakeTuple:Default/S-Prim | |||
| bprop.0:x* | |||
| bprop.0:out* | |||
| bprop.0:dout2 | |||
| bprop.0:[CNode]1:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.0:[CNode]1:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -12,4 +12,4 @@ | |||
| bprop.102:axis* | |||
| bprop.102:out* | |||
| bprop.102:dout2 | |||
| bprop.102:[CNode]105:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.102:[CNode]105:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -12,4 +12,4 @@ | |||
| bprop.106:axis* | |||
| bprop.106:out* | |||
| bprop.106:dout2 | |||
| bprop.106:[CNode]109:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.106:[CNode]109:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -9,4 +9,4 @@ m | |||
| bprop.42:x* | |||
| bprop.42:out* | |||
| bprop.42:dout2 | |||
| bprop.42:[CNode]44:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.42:[CNode]44:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -9,4 +9,4 @@ m | |||
| bprop.36:x* | |||
| bprop.36:out* | |||
| bprop.36:dout2 | |||
| bprop.36:[CNode]38:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.36:[CNode]38:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -9,4 +9,4 @@ l | |||
| bprop.10:x* | |||
| bprop.10:out* | |||
| bprop.10:dout2 | |||
| bprop.10:[CNode]12:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d65c0e00bc893ef15ec6199798d6c8c46997153587d375b3240c1195ff2c7278c7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260 | |||
| bprop.10:[CNode]12:€027af68f320ba40d9fbd0893da424c07f9c3a4ec82e98f9543bff9b5a15547a2087787fe3abde92d74a97b5b9f48f23d8ccdd6de450a931c64f578b83dcb5c2f2366f7bd59ea5ec135e982de03b4f7cab6b61d833d046a6e13f78bdaf2fb2b224c332efad4a51b4773cb78093dd53a4ca850b2dc6cdd5f2ae47106b3fda77bb3565f906930f68ca2413e9ad958d105e129e717cd183b95d11d65a8b0b030fc0d7e635a08323207b4cb3f73fd8437b4d7ee28a7676a68f005a7749bd19e5ed4eca6c407ad6a3b57190d3702d6a45031d13b97bb6952735edf94fb36f73dbff6cdab258748286fc6d783abacce203dfc79d2fc31e23a427ce1f86e08777a687f71be985a048b98205beb531a0e96f3c9c3c36cb9a5fef472e532f1e8041d85d279c414b8c313aac4f85c6217fbbb7009dd079b2d5548f8b695a470a11cb8cc83e6f5e78f5b3c67f2e7bf339b250c3638aee952e1a073002e2834011401f3827260ffb378d62977d2a1338d9b64be24b7349347c19c65faf6ba72837f4df97ff84c | |||
| @@ -120,6 +120,7 @@ from .sponge_update_ops import (v0coordinaterefresh, v1coordinaterefresh, v2coor | |||
| MDIterationLeapFrogWithMaxVel, MDIterationGradientDescent, | |||
| BondForceWithAtomEnergyAndVirial, ConstrainForceCycle) | |||
| from .rl_ops import (BufferAppend, BufferGetItem, BufferSample) | |||
| from ._inner_ops import (MatmulDDS, DSDMatmul) | |||
| __all__ = [ | |||
| 'Unique', | |||
| @@ -1293,3 +1293,85 @@ class Roll(Primitive): | |||
| elif isinstance(shift, int) and isinstance(axis, int): | |||
| validator.check_equal_int(axis, 0, "axis", self.name) | |||
| self.init_prim_io_names(inputs=['input_x'], outputs=['output']) | |||
| class DSDMatmul(PrimitiveWithInfer): | |||
| """ | |||
| The definition of the CusSquare primitive. | |||
| """ | |||
| @prim_attr_register | |||
| def __init__(self): | |||
| self.init_prim_io_names(inputs=['input_w1', 'input_w2', 'input_v'], outputs=['output_y']) | |||
| def infer_shape(self, input_w1_shape, input_w2_shape, input_v_shape): | |||
| batch_size = input_w1_shape[0] | |||
| head = input_w1_shape[1] | |||
| v_embedding = input_v_shape[1] * 16 // head | |||
| seq_len = input_v_shape[0] * 16 // batch_size | |||
| return (batch_size, head, v_embedding // 16, seq_len // 16, 16, 16) | |||
| def infer_dtype(self, data_dtype1, data_dtype2, data_dtype3): | |||
| return data_dtype1 | |||
| class MatmulDDS(PrimitiveWithInfer): | |||
| """MatmulDDS definition""" | |||
| @prim_attr_register | |||
| def __init__(self, bs, heads): | |||
| """init MatmulDDS""" | |||
| self.init_prim_io_names(inputs=['q', 'k', 'local_mask', 'global_mask'], | |||
| outputs=['local_prob', 'global_prob']) | |||
| self.heads = heads | |||
| def infer_shape(self, q, k, local_mask, global_mask): | |||
| seq_len = local_mask[0] * local_mask[-1] | |||
| bs = q[1] * q[2] // seq_len | |||
| global_size = seq_len // 4 | |||
| size_per_head = q[0] * q[-1] // self.heads | |||
| heads = q[0] * q[-1] // size_per_head | |||
| # size_per_head = k[0] * k[-1] // heads | |||
| block_size = local_mask[1] * local_mask[2] // bs | |||
| block_num = seq_len // block_size | |||
| l_size = (bs, heads, block_num, block_size // 16, block_size // 16, 16, 16) | |||
| g_size = (bs, heads, block_num, global_size // 16, block_size // 16, 16, 16) | |||
| return l_size, g_size | |||
| def infer_dtype(self, q, k, local_mask, global_mask): | |||
| return q, q | |||
| class DSDGrad(PrimitiveWithInfer): | |||
| """ | |||
| The definition of the CusSquare primitive. | |||
| """ | |||
| @prim_attr_register | |||
| def __init__(self): | |||
| self.init_prim_io_names(inputs=['w1_gm', 'w2_gm', 'v_gm', 'a_gm', 'd_a_gm'], | |||
| outputs=['d_w1_gm', 'd_w2_gm', 'd_v_gm']) | |||
| def infer_shape(self, input_w1_shape, input_w2_shape, input_v_shape, input_a_shape, input_da_shape): | |||
| return input_w1_shape, input_w2_shape, input_v_shape | |||
| def infer_dtype(self, data_dtype1, data_dtype2, data_dtype3, data_dtype4, data_dtype5): | |||
| return data_dtype1, data_dtype1, data_dtype1 | |||
| class MatmulDDSGrad(PrimitiveWithInfer): | |||
| """MatmulDDS definition""" | |||
| @prim_attr_register | |||
| def __init__(self): | |||
| """init MatmulDDS""" | |||
| self.init_prim_io_names(inputs=['q', 'k', 'local_prob', 'global_prob', 'local_prob_grad', 'global_prob_grad'], | |||
| outputs=['dq', 'dk']) | |||
| def infer_shape(self, q, k, local_prob, global_prob, local_prob_grad, global_prob_grad): | |||
| k_size = (q[1], q[0], q[3], q[2]) | |||
| return q, k_size | |||
| def infer_dtype(self, q, k, local_prob, global_prob, local_prob_grad, global_prob_grad): | |||
| return q, k | |||
| @@ -26,3 +26,4 @@ __all__ = [] | |||
| __all__.extend(transformer.__all__) | |||
| __all__.extend(loss.__all__) | |||
| __all__.extend(op_parallel_config.__all__) | |||
| __all__.extend(layers.__all__) | |||
| @@ -17,6 +17,8 @@ The basic layer of the Transformer Networks. This is an experimental interface t | |||
| change and/or deletion. | |||
| """ | |||
| import math | |||
| import numpy as np | |||
| from mindspore.common.parameter import Parameter | |||
| from mindspore.common.initializer import initializer, Tensor | |||
| import mindspore.common.dtype as mstype | |||
| @@ -24,6 +26,56 @@ from mindspore.ops import operations as P | |||
| from mindspore._extends import cell_attr_register | |||
| from mindspore.nn.cell import Cell | |||
| from mindspore.nn.layer import Dense | |||
| import mindspore.nn as nn | |||
| from mindspore.ops import functional as F | |||
| from mindspore._checkparam import Validator | |||
| from mindspore.ops.primitive import constexpr | |||
| from .op_parallel_config import default_dpmp_config, OpParallelConfig | |||
| __all__ = [ | |||
| "FixedSparseAttention" | |||
| ] | |||
| @constexpr | |||
| def _check_input_shape(input_shape, param_name, func_name, target_len): | |||
| if len(input_shape) != target_len: | |||
| raise ValueError(f"{func_name} {param_name} should be 2d, but got shape {input_shape}") | |||
| return True | |||
| @constexpr | |||
| def _check_past_none_input_none(use_past, param_name, func_name, input_tensor, default_value=None): | |||
| """ If the past is True, check whether the inputs is None""" | |||
| if not use_past and input_tensor is not default_value: | |||
| raise ValueError(f"{func_name} {param_name} should be {default_value}, if use_past is False.") | |||
| if use_past and input_tensor is default_value: | |||
| raise ValueError(f"{func_name} {param_name} should not be {default_value}, if use_past is True.") | |||
| return True | |||
| @constexpr | |||
| def _check_shape_equal(input_shape, param_name, func_name, target_shape): | |||
| if len(input_shape) != len(target_shape): | |||
| raise ValueError(f"{func_name} {param_name} shape should be {target_shape}," | |||
| f"but got {input_shape}") | |||
| for i in range(len(input_shape)): | |||
| if input_shape[i] != target_shape[i]: | |||
| raise ValueError(f"{func_name} {param_name} shape should be {target_shape}," | |||
| f"but got {input_shape}") | |||
| return True | |||
| @constexpr | |||
| def _check_input_dtype(input_dtype, param_name, allow_dtypes, cls_name): | |||
| Validator.check_type_name(param_name, input_dtype, allow_dtypes, cls_name) | |||
| @constexpr | |||
| def _check_input_shape_value(input_shape, dim, param_name, cls_name, target_value): | |||
| if input_shape[dim] != target_value: | |||
| raise ValueError(f"{cls_name} {param_name} at {dim} shape should be {target_value}," | |||
| f"but got {input_shape[dim]}") | |||
| class _LayerNorm(Cell): | |||
| @@ -232,3 +284,206 @@ class _Linear(Dense): | |||
| getattr(self.activation, self.act_name).shard(strategy_activation) | |||
| return self | |||
| class FixedSparseAttention(nn.Cell): | |||
| """ | |||
| Fixed Sparse Attention Layer | |||
| This function contains the sparse attention primitives used in Sparse Transformers (see paper). | |||
| https://arxiv.org/abs/1904.10509 | |||
| Specifically, it includes the following: | |||
| 1. A faster implementation of normal attention (the upper triangle is not computed, and many operations are fused). | |||
| 2. An implementation of "strided" and "fixed" attention, as in the Sparse Transformers paper. | |||
| Args: | |||
| batch_size (int): Number of input batch size. | |||
| num_heads (int): Number of attention heads. | |||
| block_size (int): An integer determining the block size. Current implementation of sparse self-attention | |||
| is based on blocked sparse matrices. In which this parameter defines size of such blocks, | |||
| Block X Block. only supports 64 for now | |||
| seq_length (int): length of input sequence, only supports 1024 for now | |||
| num_different_global_patterns (int):An integer determining number of different global attentions layouts. | |||
| While global attention can be fixed by which block/s are representative of | |||
| any local window, since there are multi-heads, each head can use a | |||
| different global representative, only supports 4 for now | |||
| size_per_head (int): An integer determining embedding size of each attention head, | |||
| only supports 64, 80, 96, 112, 128 for now | |||
| Inputs: | |||
| - **q** - Tensor uery (:class:`mstype.fp16` [batch_size, seq_length, hidden_size]): Sequence of | |||
| queries to query the context. | |||
| - **k** - Tensor key (:class:`mstype.fp16` [batch_size, seq_length, hidden_size]): Sequence of | |||
| queries to query the context. | |||
| - **v** - Tensor value (:class:`mstype.fp16` [batch size, sequence length, Embedding Size]): Sequence of | |||
| queries to query the context. | |||
| - **input_mask** - Tensor the mask of (:class:`mstype.fp32` [batch_size, seq_length]): | |||
| Sequence of 0 and 1 to pass masked information. | |||
| Outputs: | |||
| A Tensor. The output of the attention with shape [batch_size, seq_length, hidden_size] | |||
| Supported Platforms: | |||
| ``Ascend`` | |||
| Examples: | |||
| >>> model = FixedSparseAttention(batch_size=2, | |||
| ... num_heads=8, | |||
| ... size_per_head=64, | |||
| ... block_size=64) | |||
| >>> q = Tensor(np.ones((2, 1024, 8*64)), dtype.float16) | |||
| >>> k = Tensor(np.ones((2, 1024, 8*64)), dtype.float16) | |||
| >>> v = Tensor(np.ones((2, 1024, 8*64)), dtype.float16) | |||
| >>> input_mask = Tensor(np.ones((2, 1024)), dtype.float16) | |||
| >>> output = model(q, k, v, input_mask) | |||
| >>> print(output.shape) | |||
| (2, 1024, 512) | |||
| """ | |||
| def __init__(self, | |||
| batch_size, | |||
| num_heads, | |||
| size_per_head, | |||
| block_size, | |||
| seq_length=1024, | |||
| num_different_global_patterns=4, | |||
| parallel_config=default_dpmp_config): | |||
| super(FixedSparseAttention, self).__init__() | |||
| if not isinstance(parallel_config, OpParallelConfig): | |||
| raise ValueError( | |||
| f"The parallel_config should be a OpParallelConfig type, but found {type(parallel_config)}") | |||
| dp, mp = parallel_config.data_parallel, parallel_config.model_parallel | |||
| self.seq_length = seq_length | |||
| self.batch_size = batch_size | |||
| self.hidden_size = size_per_head * num_heads | |||
| self.num_heads = num_heads | |||
| self.block_size = block_size | |||
| self.block_num = seq_length // block_size | |||
| self.size_per_head = size_per_head | |||
| self.global_size = seq_length // 4 | |||
| self.reshape = P.Reshape() | |||
| self.transpose = P.Transpose().shard(((dp, 1, mp, 1),)) | |||
| self.batch_matmul = P.BatchMatMul().shard(((dp, 1, 1, 1), (dp, 1, 1, 1))) | |||
| self.multiply = P.Mul().shard(((dp, 1, 1, 1), (1, 1, 1))) | |||
| self.multiply_data = Tensor([-10000.0,], dtype=mstype.float32) | |||
| self.parallel_config = parallel_config | |||
| size_per_head_list = [64, 128] | |||
| if self.seq_length != 1024: | |||
| raise ValueError("seq_length only supports 1024 for now.") | |||
| if self.block_size != 64: | |||
| raise ValueError("block_size only supports 64 for now.") | |||
| if num_different_global_patterns != 4: | |||
| raise ValueError("num_different_global_patterns only supports 4 for now.") | |||
| if self.size_per_head not in size_per_head_list: | |||
| raise ValueError(f"size_per_head only supports {size_per_head_list} for now, " | |||
| f"but found {self.size_per_head}") | |||
| local_ones = np.ones((self.block_size, self.block_size), | |||
| dtype=np.float16) | |||
| global_mask_original = np.ones((self.seq_length, self.global_size), dtype=np.float16) | |||
| for i in range(self.seq_length): | |||
| for j in range(self.global_size): | |||
| if i // 16 >= (j // 16 + 1) * 4: | |||
| global_mask_original[i, j] = 0.0 | |||
| global_mask_original = -10000 * global_mask_original | |||
| global_mask_fx = global_mask_original.reshape((self.seq_length // 16, 16, self.global_size // 16, 16)) | |||
| global_mask = np.transpose(global_mask_fx, (2, 0, 1, 3)) | |||
| global_mask = np.repeat(global_mask[np.newaxis, :, :, :, :,], self.batch_size, axis=0) | |||
| global_mask = global_mask.reshape((self.batch_size * self.global_size // 16, self.seq_length // 16, 16, 16)) | |||
| self.global_mask = Tensor(global_mask, mstype.float32) | |||
| self.local_mask_triangle = Tensor(np.tril(local_ones), mstype.float32) | |||
| self.scale_factor = Tensor((math.sqrt(self.size_per_head))) | |||
| self.matmul_dds = P.MatmulDDS(self.batch_size, self.num_heads).shard(((mp, dp, 1, 1), | |||
| (mp, dp, 1, 1), | |||
| (1, dp, 1, 1), | |||
| (dp, 1, 1, 1))) | |||
| self.matmul_dsd = P.DSDMatmul().shard(((dp, mp, 1, 1, 1, 1, 1), (dp, mp, 1, 1, 1, 1, 1), (dp, mp, 1, 1))) | |||
| self.sub1 = P.Sub().shard(((1,), (dp, 1, 1, 1))) | |||
| self.mul1 = P.Mul().shard(((dp, 1, 1, 1), (1,))) | |||
| self.transpose1 = P.Transpose().shard(((dp, 1, 1, 1),)) | |||
| self.transpose2 = P.Transpose().shard(((dp, 1, 1, 1),)) | |||
| self.transpose3 = P.Transpose().shard(((dp, mp, 1, 1, 1, 1),)) | |||
| self.transpose4 = P.Transpose().shard(((dp, mp, 1, 1),)) | |||
| def _transpose_inputs(self, q, k, v): | |||
| """ | |||
| do reshape and transpose to inputs | |||
| """ | |||
| q = self.transpose( | |||
| self.reshape( | |||
| q, | |||
| (-1, 16, self.num_heads * self.size_per_head // 16, 16)), | |||
| (2, 0, 1, 3)) | |||
| k = self.transpose( | |||
| self.reshape( | |||
| k, (-1, 16, self.num_heads * self.size_per_head // 16, 16)), | |||
| (2, 0, 1, 3)) | |||
| v = self.transpose( | |||
| self.reshape( | |||
| v, | |||
| (-1, 16, self.num_heads * self.size_per_head // 16, 16)), | |||
| (0, 2, 3, 1)) | |||
| return q, k, v | |||
| def _generate_attention_mask(self, input_mask): | |||
| """ | |||
| generate attention mask from input mask | |||
| """ | |||
| input_shape = P.Shape()(input_mask) # bs, seq_length | |||
| # bs, block_num, 1, block_size | |||
| local_shape_right = (input_shape[0], self.block_num, 1, self.block_size) | |||
| # bs, block_num, block_size, 1 | |||
| local_shape_left = (input_shape[0], self.block_num, self.block_size, 1) | |||
| local_mask_left = self.reshape(input_mask, local_shape_left) | |||
| local_mask_right = self.reshape(input_mask, local_shape_right) | |||
| # bs, block_num, block_size, block_size | |||
| local_attention_mask = self.batch_matmul(local_mask_left, local_mask_right) | |||
| lower_triangle = P.ExpandDims()(self.local_mask_triangle, 0) | |||
| local_attention_mask = self.multiply(local_attention_mask, lower_triangle) | |||
| local_multiplied_out = self.sub1(P.Cast()(F.tuple_to_array((1.0,)), mstype.float32), | |||
| P.Cast()(local_attention_mask, mstype.float32)) | |||
| local_adder = self.mul1(local_multiplied_out, self.multiply_data) | |||
| local_mask_original = self.transpose1(local_adder, (0, 2, 1, 3)) | |||
| local_mask_original = self.reshape( | |||
| local_mask_original, | |||
| (self.batch_size * self.block_size, self.block_num * self.block_size)) | |||
| local_mask_fx = self.reshape( | |||
| local_mask_original, | |||
| (self.batch_size * self.block_size // 16, 16, | |||
| self.block_num * self.block_size // 16, 16)) | |||
| local_mask = self.transpose2(local_mask_fx, (2, 0, 1, 3)) | |||
| global_mask = self.global_mask | |||
| return local_mask, global_mask | |||
| def construct(self, q, k, v, input_mask): | |||
| _check_shape_equal(F.shape(q), "q", self.cls_name, | |||
| [self.batch_size, self.seq_length, self.hidden_size]) | |||
| _check_input_dtype(F.dtype(q), "q", [mstype.float16], self.cls_name) | |||
| _check_shape_equal(F.shape(k), "k", self.cls_name, | |||
| [self.batch_size, self.seq_length, self.hidden_size]) | |||
| _check_input_dtype(F.dtype(k), "k", [mstype.float16], self.cls_name) | |||
| _check_shape_equal(F.shape(v), "v", self.cls_name, | |||
| [self.batch_size, self.seq_length, self.hidden_size]) | |||
| _check_input_dtype(F.dtype(v), "v", [mstype.float16], self.cls_name) | |||
| _check_shape_equal(F.shape(input_mask), "input_mask", self.cls_name, | |||
| [self.batch_size, self.seq_length]) | |||
| _check_input_dtype(F.dtype(input_mask), "input_mask", [mstype.float32], self.cls_name) | |||
| q, k, v = self._transpose_inputs(q, k, v) | |||
| local_mask, global_mask = self._generate_attention_mask(input_mask) | |||
| q = q / F.cast(self.scale_factor, F.dtype(q)) | |||
| k = k / F.cast(self.scale_factor, F.dtype(k)) | |||
| local_prob, global_prob = self.matmul_dds(q, k, local_mask, global_mask) | |||
| attention = self.matmul_dsd(local_prob, global_prob, v) | |||
| attention_merge = self.transpose3(attention, (0, 1, 3, 4, 2, 5)) | |||
| attention_merge = F.reshape( | |||
| attention_merge, | |||
| (-1, self.num_heads, self.seq_length, self.size_per_head)) | |||
| attention_merge = self.transpose4(attention_merge, (0, 2, 1, 3)) | |||
| attention_merge = F.reshape( | |||
| attention_merge, | |||
| (-1, self.seq_length, self.size_per_head * self.num_heads)) | |||
| return attention_merge | |||
| @@ -22,7 +22,7 @@ from mindspore.ops import operations as P | |||
| from mindspore.ops import functional as F | |||
| from mindspore.nn import Cell | |||
| from mindspore.nn.loss.loss import _check_is_tensor | |||
| from mindspore.parallel.nn.transformer import _check_input_dtype, _check_input_shape | |||
| from mindspore.parallel.nn.layers import _check_input_dtype, _check_input_shape | |||
| from .op_parallel_config import default_dpmp_config, OpParallelConfig | |||
| __all__ = ["CrossEntropyLoss"] | |||
| @@ -28,9 +28,9 @@ from mindspore.ops import operations as P | |||
| from mindspore.ops import functional as F | |||
| from mindspore.nn.cell import Cell | |||
| from mindspore._checkparam import Validator | |||
| from mindspore.ops.primitive import constexpr | |||
| from mindspore import log as logger | |||
| from .layers import _LayerNorm, _Linear | |||
| from .layers import _LayerNorm, _Linear, _check_input_shape,\ | |||
| _check_shape_equal, _check_past_none_input_none, _check_input_dtype, _check_input_shape_value | |||
| from .op_parallel_config import default_dpmp_config, _PipeLineConfig, OpParallelConfig, _Config, _check_config | |||
| __all__ = [ | |||
| @@ -47,47 +47,6 @@ __all__ = [ | |||
| "EmbeddingOpParallelConfig"] | |||
| @constexpr | |||
| def _check_input_shape(input_shape, param_name, func_name, target_len): | |||
| if len(input_shape) != target_len: | |||
| raise ValueError(f"{func_name} {param_name} should be {target_len}d, but got shape {input_shape}") | |||
| return True | |||
| @constexpr | |||
| def _check_past_none_input_none(use_past, param_name, func_name, input_tensor, default_value=None): | |||
| """ If the past is True, check whether the inputs is None""" | |||
| if not use_past and input_tensor is not default_value: | |||
| raise ValueError(f"{func_name} {param_name} should be {default_value}, if use_past is False.") | |||
| if use_past and input_tensor is default_value: | |||
| raise ValueError(f"{func_name} {param_name} should not be {default_value}, if use_past is True.") | |||
| return True | |||
| @constexpr | |||
| def _check_shape_equal(input_shape, param_name, func_name, target_shape): | |||
| if len(input_shape) != len(target_shape): | |||
| raise ValueError(f"{func_name} {param_name} shape should be {target_shape}," | |||
| f"but got {input_shape}") | |||
| for i in range(len(input_shape)): | |||
| if input_shape[i] != target_shape[i]: | |||
| raise ValueError(f"{func_name} {param_name} shape should be {target_shape}," | |||
| f"but got {input_shape}") | |||
| return True | |||
| @constexpr | |||
| def _check_input_dtype(input_dtype, param_name, allow_dtypes, cls_name): | |||
| Validator.check_type_name(param_name, input_dtype, allow_dtypes, cls_name) | |||
| @constexpr | |||
| def _check_input_shape_value(input_shape, dim, param_name, cls_name, target_value): | |||
| if input_shape[dim] != target_value: | |||
| raise ValueError(f"{cls_name} {param_name} at {dim} shape should be {target_value}," | |||
| f"but got {input_shape[dim]}") | |||
| class EmbeddingOpParallelConfig(_Config): | |||
| r""" | |||
| EmbeddingOpParallelConfig for the setting the data parallel or row slice for the embedding table. | |||
| @@ -0,0 +1,27 @@ | |||
| import numpy as np | |||
| from mindspore import Tensor | |||
| from mindspore.parallel.nn.layers import FixedSparseAttention | |||
| import mindspore.context as context | |||
| context.set_context(device_target="Ascend") | |||
| def test_net(): | |||
| np.random.seed(0) | |||
| bs = 2 # batch size | |||
| heads = 2 | |||
| seq_len = 1024 # this op is designed for seq_len = 1024 | |||
| size_per_head = 128 # maximum size per head value is 128 | |||
| block_size = 64 # block size is designed to be 64 | |||
| fixed_sparse = FixedSparseAttention(bs, heads, size_per_head, block_size) | |||
| q = np.random.rand(bs, seq_len, heads * size_per_head) | |||
| q = q.astype(np.float16) | |||
| k = np.random.rand(bs, seq_len, heads * size_per_head) | |||
| k = k.astype(np.float16) | |||
| v = np.random.rand(bs, seq_len, heads * size_per_head) | |||
| v = v.astype(np.float16) | |||
| input_mask = np.ones((bs, seq_len), dtype=np.float32) | |||
| out = fixed_sparse(Tensor(q), Tensor(k), Tensor(v), Tensor(input_mask)) | |||
| out_np = out.asnumpy() | |||
| print("local output: ", out_np[0, 0]) | |||
| @@ -18,7 +18,7 @@ import pytest | |||
| from mindspore import Tensor | |||
| from mindspore.common import dtype | |||
| from mindspore.parallel.nn import MultiHeadAttention, FeedForward, TransformerEncoderLayer, TransformerEncoder, \ | |||
| TransformerDecoder, TransformerDecoderLayer, Transformer, CrossEntropyLoss, AttentionMask | |||
| TransformerDecoder, TransformerDecoderLayer, Transformer, CrossEntropyLoss, AttentionMask, FixedSparseAttention | |||
| from mindspore.common.api import _executor | |||
| @@ -240,3 +240,16 @@ def test_attention_mask(): | |||
| model = AttentionMask(seq_length=19) | |||
| inputs = Tensor(np.ones((2, 19)), dtype.float32) | |||
| _executor.compile(model, inputs) | |||
| def test_sparse_attention(): | |||
| model = FixedSparseAttention(batch_size=2, | |||
| seq_length=1024, | |||
| size_per_head=64, | |||
| num_heads=8, | |||
| block_size=64) | |||
| q = Tensor(np.ones((2, 1024, 512)), dtype.float16) | |||
| k = Tensor(np.ones((2, 1024, 512)), dtype.float16) | |||
| v = Tensor(np.ones((2, 1024, 512)), dtype.float16) | |||
| mask = Tensor(np.ones((2, 1024)), dtype.float32) | |||
| _executor.compile(model, q, k, v, mask) | |||
| @@ -22,7 +22,7 @@ from mindspore.ops import composite as C | |||
| from mindspore.ops import functional as F | |||
| import mindspore.ops as P | |||
| from mindspore.parallel.nn import TransformerEncoder, TransformerDecoder, Transformer, TransformerOpParallelConfig, \ | |||
| VocabEmbedding, CrossEntropyLoss, OpParallelConfig, EmbeddingOpParallelConfig | |||
| VocabEmbedding, CrossEntropyLoss, OpParallelConfig, EmbeddingOpParallelConfig, FixedSparseAttention | |||
| from mindspore.nn import Dense as Linear | |||
| from mindspore.nn.wrap.loss_scale import DynamicLossScaleUpdateCell | |||
| from mindspore.nn.optim import AdamWeightDecay | |||
| @@ -355,6 +355,23 @@ def test_vocabembedding_dp_false(): | |||
| model.train(1, dataset, dataset_sink_mode=False) | |||
| def _test_sparse_attention_parallel(): | |||
| sparse_attention_config = OpParallelConfig(model_parallel=8) | |||
| net = FixedSparseAttention(batch_size=2, | |||
| seq_length=1024, | |||
| size_per_head=64, | |||
| num_heads=8, | |||
| block_size=64, | |||
| parallel_config=sparse_attention_config) | |||
| q = Tensor(np.ones((2, 1024, 512)), mstype.float16) | |||
| k = Tensor(np.ones((2, 1024, 512)), mstype.float16) | |||
| v = Tensor(np.ones((2, 1024, 512)), mstype.float16) | |||
| mask = Tensor(np.ones((2, 1024)), mstype.float32) | |||
| dataset = Dataset(q, k, v, mask) | |||
| model = Model(net) | |||
| model.train(1, dataset, dataset_sink_mode=False) | |||
| def test_parallel_cross_entroy_loss_semi_auto_parallel(): | |||
| set_auto_parallel_context(device_num=8, global_rank=0, parallel_mode=ParallelMode.SEMI_AUTO_PARALLEL) | |||