Effective Parallelisation for Machine Learning