forked from mindspore-Ecosystem/mindspore
Add Sparse Attention
adjut the file structure and name Deleted extra information Do some formatting work Add test case and fix some document fix imports
This commit is contained in:
parent
ba1b86ac07
commit
ce12c02343
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue