Here is the link and a short documentation to the ALS implementation in Ligra. Right now, it is about 1.5-2x faster than GraphChi depending on the input. I believe that it is faster only because of the overhead in GraphChi.
A few notes
This version works with a directed graph. As a result, we need two edges in both direction for each
It would be a graph with vertexIDs 0 to n (n users), n to n+m (m movies).
An example graph can be found here, but it is not symmetric (https://github.com/yunmingzhang17/ligra/blob/master/inputs/test_weighted_adj.txt) . The netflix graphs I have are too big to put it up in the repository, so may be we can arrange for some other methods to transfer the netflix graphs.
(2) To see the RMSE
define flag COMPUTE_RMSE (line 6)
and you need to specify the number of users, because we only want to compute the error for the users. Right now computing RMSE only works in single threaded mode, so the command to run it
taskset -c 0 ./ALS -nusers #users inputGraph
(correctness verified against GraphChi’s version here, https://github.com/GraphChi/graphchi-cpp/blob/master/toolkits/collaborative_filtering/als.cpp)
(3) Somewhat more detailed documentation
I realized that I did a somewhat messy but more comprehensive summary of my work on ALS in Ligra if you are interested in more details