
=== Start adding workers ===
=> Add worker SGDMWorker(index=0, momentum=0.9)
=> Add worker SGDMWorker(index=1, momentum=0.9)
=> Add worker SGDMWorker(index=2, momentum=0.9)
=> Add worker SGDMWorker(index=3, momentum=0.9)
=> Add worker SGDMWorker(index=4, momentum=0.9)

=== Start adding graph ===
Ring(n=5)

Train epoch 1
[E 1B0  |    160/60000 (  0%) ] Loss: 2.3148 top1=  7.5000

=== Peeking data label distribution E1B0 ===
Worker 0 has targets: tensor([9, 4, 7, 0, 3], device='cuda:0')
Worker 1 has targets: tensor([3, 9, 4, 6, 1], device='cuda:0')
Worker 2 has targets: tensor([5, 6, 8, 8, 3], device='cuda:0')
Worker 3 has targets: tensor([4, 8, 9, 9, 2], device='cuda:0')
Worker 4 has targets: tensor([7, 8, 4, 9, 5], device='cuda:0')



=== Log mixing matrix @ E1B0 ===
[[0.333 0.333 0.    0.    0.333]
 [0.333 0.333 0.333 0.    0.   ]
 [0.    0.333 0.333 0.333 0.   ]
 [0.    0.    0.333 0.333 0.333]
 [0.333 0.    0.    0.333 0.333]]


[E 1B10 |   1760/60000 (  3%) ] Loss: 1.9001 top1= 46.8750
[E 1B20 |   3360/60000 (  6%) ] Loss: 0.7672 top1= 75.6250

=> Averaged model (Global Average Validation Accuracy) | Eval Loss=0.4629 top1= 86.0677

Train epoch 2
[E 2B0  |    160/60000 (  0%) ] Loss: 0.7167 top1= 78.7500
[E 2B10 |   1760/60000 (  3%) ] Loss: 0.5069 top1= 83.7500
[E 2B20 |   3360/60000 (  6%) ] Loss: 0.3405 top1= 88.7500

=> Averaged model (Global Average Validation Accuracy) | Eval Loss=0.3086 top1= 90.7853

Train epoch 3
[E 3B0  |    160/60000 (  0%) ] Loss: 0.4121 top1= 88.7500
[E 3B10 |   1760/60000 (  3%) ] Loss: 0.2182 top1= 94.3750
[E 3B20 |   3360/60000 (  6%) ] Loss: 0.2114 top1= 93.1250
