well, it has been used for similar use cases. It works well if the dataset fits into memory of each worker. For very large datasets, the distributed right indexing is an issue, as it prevents us from running parfor itself as distributed operation. However, this can be addressed via block-partitioning, but so far we only support row/column partitioning.

Regards,
Matthias

On 11/23/2016 2:54 AM, dusenberr...@gmail.com wrote:
Also for some context, we're aiming to use this for remote hyperparameter 
tuning over a large dataset.  Specifically, each remote process would train a 
separate model over the full dataset using a mini-batch SGD approach.  Has the 
`parfor` construct been used for this purpose before?

--

Mike Dusenberry
GitHub: github.com/dusenberrymw
LinkedIn: linkedin.com/in/mikedusenberry

Sent from my iPhone.


On Nov 22, 2016, at 2:01 PM, Matthias Boehm <mboe...@googlemail.com> wrote:

that's a good catch - thanks Felix. It would be great if you could modify 
rewriteSetExecutionStategy and rewriteSetFusedDataPartitioningExecution in 
OptimizerConstrained to handle the respective Spark execution types. Thanks.

Regards,
Matthias

On 11/22/2016 7:54 PM, fschue...@posteo.de wrote:
The constrained optimizer doesn't seem to know about a REMOTE_SPARK
execution mode and either sets CP or REMOTE_MR. I can open a jira for
that and provide a fix.

Felix

Am 22.11.2016 02:07 schrieb Matthias Boehm:
yes, this came up several times - initially we only supported opt=NONE
where users had to specify all other parameters. Meanwhile, there is a
so-called "constrained optimizer" that does the same as the rule-based
optimizer but respects any given parameters. Please try something like
this:

parfor (i in 1:10, opt=CONSTRAINED, par=10, mode=REMOTE_SPARK) {
    // some code here
}


Regards,
Matthias

On 11/22/2016 12:33 AM, fschue...@posteo.de wrote:
While debugging some ParFor code it became clear that the parameters for
parfor can be easily overwritten by the optimizer.
One example is when I write:

```
parfor (i in 1:10, par=10, mode=REMOTE_SPARK) {
   // some code here
}
```

Depending on the data size and cluster resources, the optimizer
(OptimizerRuleBased.java, line 844) will recognize that the work can be
done locally and overwrite it to local execution. This might be valid
and definitely works (in my case) but kind of contradicts what I want
SystemML to do.
I wonder if we should disable this optimization in case a concrete
execution mode is given and go with the mode that is provided.

Felix





Reply via email to