[ 
https://issues.apache.org/jira/browse/MAHOUT-376?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12966223#action_12966223
 ] 

Dmitriy Lyubimov commented on MAHOUT-376:
-----------------------------------------

{quote}I think that my suggested approach handles this already.

The block decomposition of Q via the blockwise QR decomposition implies a 
breakdown of B into column-wise blocks which can each be handled separately. 
The results are then combined using concatenation.

{quote}
Ted, yes, i understand that part, but i think we are talking about different 
things. What I am talking about is formation of Y rows well before 
orthonotmalization is even concerned. 

What i mean is that right now VectorWritable loads the entire thing into 
memory. Hence, the bound for width of A. (i.e. we can't load A row that is 
longer than some memory chunk we can afford for it). 

However, what A row is participating in in each case is a bunch of (namely, 
k+p) dot-products. In order to produce those, it is sufficient to examine A row 
sequentialy  (i.e. streamingly) in one pass while keeping only k+p values in 
memory as dot-accumulators.

Hence,  say if we equipped VectorWritable with a push-parser like element 
handler (notorious DocumentHanlder immediately pops in memory form SAXParser) 
then we will never have to examine more than one element of A row at a time. 
And hence we are not bound by memory for n (A width) anymore. That handler 
would form Y rows directly during the sequential examination of A rows. 
Identical considerations are in effect when forming Qt*A partial products (i 
already checked for this).

I already thought about this approach a little (and i believe Jake Mannix also 
posted something very similar to that recently to effect of sequential vector 
examination backed by a streaming read). 

Since it is touching VectorWritable internals, i think i would need to make a 
change proposal for it and if seems reasonable handle it in another issue. I 
will do so but i need to check couple of things first in Hadoop see if it is 
feasible within current MR framework and doesn't blow off all benefits 
code-data collocation.

If that proposal is implemented, and MR considerations are tackled, we will 
have SSVD that scales to about a billion rows for 500 singular vlaues and 1G 
memory in mapper vertically (m) and a gazillion in n (width). 
theoretically. How about that.



> Implement Map-reduce version of stochastic SVD
> ----------------------------------------------
>
>                 Key: MAHOUT-376
>                 URL: https://issues.apache.org/jira/browse/MAHOUT-376
>             Project: Mahout
>          Issue Type: Improvement
>          Components: Math
>            Reporter: Ted Dunning
>            Assignee: Ted Dunning
>             Fix For: 0.5
>
>         Attachments: MAHOUT-376.patch, Modified stochastic svd algorithm for 
> mapreduce.pdf, QR decomposition for Map.pdf, QR decomposition for Map.pdf, QR 
> decomposition for Map.pdf, sd-bib.bib, sd.pdf, sd.pdf, sd.pdf, sd.pdf, 
> sd.tex, sd.tex, sd.tex, sd.tex, SSVD working notes.pdf, SSVD working 
> notes.pdf, SSVD working notes.pdf, ssvd-CDH3-or-0.21.patch.gz, 
> ssvd-CDH3-or-0.21.patch.gz, ssvd-m1.patch.gz, ssvd-m2.patch.gz, 
> ssvd-m3.patch.gz, Stochastic SVD using eigensolver trick.pdf
>
>
> See attached pdf for outline of proposed method.
> All comments are welcome.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to