[
https://issues.apache.org/jira/browse/SYSTEMML-880?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15589478#comment-15589478
]
Niketan Pansare commented on SYSTEMML-880:
------------------------------------------
Design decisions of PR https://github.com/apache/incubator-systemml/pull/270:
1. In the initial version, I decided not to parse and walk the Python AST. The
key assumption is that the code to be pushed-down has to map to PyDML. This
will help us to identify the gaps in PyDML as well (for example: dot(H,
H.transpose()) instead of H.dot(H.transpose)). Also, cases such as sml.matrix
is not handled.
2. The inputs and outputs need to be specified. There is a tradeoff here
between simplicity of the API+Implementation and optimization scope.
- Alternative to the current implementation is that inputs+outputs are not
specified and the function to be pushed-down has access to all the variables in
the global scope. In this case, we walk down the AST and identify all the
variables on RHS and treat them as outputs and all other variables not created
as input (hand-waving lil bit here).
- Another alternative is to not require providing variable name in string
format: 'H', but this was difficult to implement due to pass-by-value and point
1.
Also, I could not find a way to enable the decorator (@parallelize) on
statement block instead of function.
import systemml as sml
from systemml import random
sml.setSparkContext(sc)
m, n = 100, 20
k = 40
V = sml.random.uniform(size=(m, n))
W = sml.random.uniform(size=(m, k))
H = sml.random.uniform(size=(k, n))
@sml.parallelize
def push_down_loop(inputs, outputs):
max_iters = 200
for i in range(0, max_iters):
H = H * dot(W.transpose(), V)/dot(W.transpose(), dot(W, H))
W = W * dot(V, H.transpose())/dot(W, dot(H, H.transpose()))
# The returned values as Matrix class
ret = push_down_loop(inputs={'H': H, 'W':W, 'V': V}, outputs=['H', 'W'])
H = ret[0].toNumPy()
W = ret[1].toNumPy()
> Push-down loop structures in Python DSL
> ---------------------------------------
>
> Key: SYSTEMML-880
> URL: https://issues.apache.org/jira/browse/SYSTEMML-880
> Project: SystemML
> Issue Type: Task
> Reporter: Niketan Pansare
>
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)