Как Хоровод координирует обучение?
Я пытаюсь научиться обучать распределенную модель Keras и найти horovod, я создал кластер Google Cloud Kubernetes (GKE) и установил Kubeflow с mpi-оператором и драйверами nvdia.
Я попытался запустить образец https://github.com/uber/horovod/blob/master/examples/keras_mnist_advanced.py
Я создал образ Docker с таким определением:
FROM uber/horovod:0.15.2-tf1.12.0-torch1.0.0-py3.5
# Temporary fix until Horovod pushes out a new release.
# See https://github.com/uber/horovod/pull/700
RUN sed -i '/^NCCL_SOCKET_IFNAME.*/d' /etc/nccl.conf
RUN mkdir /home/mnist
WORKDIR /home/mnist
ADD keras_mnist_advanced.py /home/mnist
RUN ldconfig /usr/local/cuda/lib64/stubs
CMD mpirun \
python keras_mnist_advanced.py
подтолкнул его в репозиторий проекта и заставил его работать со следующим Yaml
apiVersion: kubeflow.org/v1alpha1
kind: MPIJob
metadata:
name: keras-mnist-1
spec:
replicas: 3
template:
spec:
containers:
- image: us.gcr.io/$ProjectName/keras-mnist:1.0
name: keras-mnist
Это запускает 3 рабочих и запускает, сохраняет контрольные точки только на worker-0, все хорошо, но журналы действительно смущают меня,
Я получаю 3 строки журналов (одна на одного работника)
I x_train shape: (60000, 28, 28, 1)
I 60000 train samples
I 10000 test samples
I x_train shape: (60000, 28, 28, 1)
I 60000 train samples
I 10000 test samples
I x_train shape: (60000, 28, 28, 1)
I 60000 train samples
I 10000 test samples
I Epoch 1/24
I Epoch 1/24
I Epoch 1/24
...
2019-02-09 17:48:19.763 VET Epoch 24/24
2019-02-09 17:48:19.763 VET Epoch 24/24
2019-02-09 17:48:19.763 VET Epoch 24/24
2019-02-09 17:49:27.756 VET Using TensorFlow backend.
2019-02-09 17:49:27.756 VET Test loss: 0.01727276442445009
2019-02-09 17:49:27.756 VET Test accuracy: 0.994
2019-02-09 17:49:27.756 VET Using TensorFlow backend.
2019-02-09 17:49:27.756 VET Test loss: 0.01727276442445009
2019-02-09 17:49:27.756 VET Test accuracy: 0.994
2019-02-09 17:49:27.756 VET Using TensorFlow backend.
2019-02-09 17:49:27.756 VET Test loss: 0.01727276442445009
2019-02-09 17:49:27.756 VET Test accuracy: 0.994
Я не понимаю, работает ли модель 24 эпохи на каждого работника, и каждая из них заканчивается "3 моделями" или работает 24 эпохи между 3 и объединяет результаты.
Может кто-нибудь объяснить, как на самом деле работает horovod и могу ли я что-то сделать, чтобы он лучше координировался и воспользовался ресурсами?
Как я могу извлечь одну модель в конце?