Initial contribution of a distributed training method.  This is similar to my previous approach except this one allows sharding of the parameters across sever parameter servers.  Therefore, rather than having a single parameter server that sends work to a bunch of worker clients, I now have three roles: (1) worker clients which are more or less the same, (2) parameter servers which each manage some portion of the parameter space, and (3) a single scheduler server.  The scheduler server is a single point of failure.  It dispatches commands to the workers.  For example, it might tell a worker to first fetch parameters from each shard, compute the gradient, and push that gradient to the shards.