[ https://issues.apache.org/jira/browse/SINGA-505?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Chris Yeung resolved SINGA-505. ------------------------------- Resolution: Fixed > Buffer Operators / Change the Autograd operators to be bufferable > ----------------------------------------------------------------- > > Key: SINGA-505 > URL: https://issues.apache.org/jira/browse/SINGA-505 > Project: Singa > Issue Type: Improvement > Components: Core > Reporter: Chris Yeung > Priority: Major > Time Spent: 7h 20m > Remaining Estimate: 0h > > We can buffer the operators, so that we can extract all the operators in > autograd to build a graph after scheduling, where the simplest scheduling can > use the FIFO principle from the buffered operators. A more complex > scheduleing algorithm could be implemented which consider the dependency of > operators that could make it parallel. One more clear advantage is that when > we run the graph we only need to run the buffered operators, then there will > be no need to run the autograd python code again throughout the training > iterations. > So this ticket uses for two purpose: > 1. Change the core components (e.g. tensor,device) to support buffering. > 2. Change all the autograd operator to be bufferable, i.e. the input and > output should be inside the block. For example, the SoftMax backward cannot > be buffered because it is not doing the operations through the block, and it > was using numpy: > def backward(self, dy): > # calculations are made on numpy array > if self.axis == 1: > dy = singa.DefaultTranspose(dy) > grad = ctensor2numpy(dy) > output = ctensor2numpy(self.output) > out_1 = np.einsum("ki,ki->ki", grad, output) > medium_out = np.einsum("ki,kj->kij", output, output) > out_2 = np.einsum("kij,kj->ki", medium_out, grad) > out = out_1 - out_2 > dx = CTensor(out_1.shape) > dx.CopyFloatDataFromHostPtr(out.flatten()) > if self.axis == 0: > return dx > elif self.axis == 1: > return singa.DefaultTranspose(dx) -- This message was sent by Atlassian Jira (v8.3.4#803005)