en utilisant MXNet modèle à finetune Resnet sur jeu de données Caltech 256 de l'exemple suivant:Je MXNet précision la formation distribuée
https://mxnet.incubator.apache.org/how_to/finetune.html
que je fais avant tout pour un POC pour tester la formation distribuée (que je utilisation ultérieure dans mon projet actuel).
D'abord, j'ai couru cet exemple sur une seule machine avec 2 GPU pour 8 époques. J'ai pris environ 20 minutes et la précision de validation finale était de 0.809072.
Ensuite, je l'ai couru sur 2 machines (identiques, chacune avec 2 GPU) avec un paramètre distribué et partitionné les données d'entraînement de moitié pour ces deux machines (en utilisant num_parts
et part_index
).
8 époques ont pris seulement 10 minutes, mais la précision de validation finale était seulement 0,772847 (le plus élevé des deux). Même lorsque j'ai utilisé 16 époques, je n'ai réussi qu'à atteindre 0,797006.
Donc, ma question est que c'est normal? Je veux principalement utiliser une formation distribuée pour réduire le temps de formation. Mais si cela prend deux fois ou plus pour atteindre la même précision, alors quel est l'avantage? Peut-être qu'il me manque quelque chose.
Je peux poster mon code et exécuter la commande si nécessaire.
Merci
EDIT
Un peu plus d'informations pour aider à la réponse:
Version MXNet: 0.11.0
Topologie: 2 travailleurs (chacun sur un séparé machine)
Code Promo:https://gist.github.com/reactivefuture/2a1f9dcd3b27c0fe8215b4e3d25056ce
commande pour démarrer:
python3 mxnet/tools/launch.py -n 2 -H hosts --sync-dst-dir /tmp/mxnet python3 training.py --kv-store dist_sync --gpus 0,1
Je l'ai utilisé un moyen hacky de faire le partitionnement (en utilisant des adresses IP) puisque je ne pouvais pas se rendre au travail kv.num_workers
et kv.rank
.
Comment exécutez-vous la partition. Avez-vous fait le shuffle? Pouvez-vous poster le code, les commandes et les détails de configuration ici. – rgaut