Distributed Learning on Heterogeneous Resource-Constrained Devices