2017-01-03 6 views
2

Я установил версию 2.0.beta7 из CNTK на графическом процессоре Azure NC24 VM с Ubuntu (python 3.4). Аппарат имеет 4 графических процессора NVIDIA K80. Строить информация:Python CNTK сравнение скорости 1-битного SGD с обычным SGD в 4-х графических процессорах

  Build type: release 
      Build target: GPU 
      With 1bit-SGD: yes 
      With ASGD: yes 
      Math lib: mkl 
      CUDA_PATH: /usr/local/cuda-8.0 
      CUB_PATH: /usr/local/cub-1.4.1 
      CUDNN_PATH: /usr/local 
      Build Branch: HEAD 
      Build SHA1: 8e8b5ff92eff4647be5d41a5a515956907567126 
      Built by Source/CNTK/buildinfo.h$$0 on bbdadbf3455d 
      Build Path: /home/philly/jenkins/workspace/CNTK-Build-Linux 

Я бегала пример CIFAR в распределенном режиме:

mpiexec -n 4 python TrainResNet_CIFAR10_Distributed.py -n resnet20 -q 32 

Finished Epoch [1]: [Training] loss = 1.675002 * 50176, metric = 62.5% * 50176 112.019s (447.9 samples per second) 
Finished Epoch [1]: [Training] loss = 1.675002 * 50176, metric = 62.5% * 50176 112.019s (447.9 samples per second) 
Finished Epoch [1]: [Training] loss = 1.675002 * 50176, metric = 62.5% * 50176 112.018s (447.9 samples per second) 
Finished Epoch [1]: [Training] loss = 1.675002 * 50176, metric = 62.5% * 50176 112.019s (447.9 samples per second) 
Finished Epoch [2]: [Training] loss = 1.247423 * 50176, metric = 45.4% * 50176 8.210s (6111.3 samples per second) 
Finished Epoch [2]: [Training] loss = 1.247423 * 50176, metric = 45.4% * 50176 8.210s (6111.4 samples per second) 
Finished Epoch [2]: [Training] loss = 1.247423 * 50176, metric = 45.4% * 50176 8.210s (6111.8 samples per second) 
Finished Epoch [2]: [Training] loss = 1.247423 * 50176, metric = 45.4% * 50176 8.210s (6111.6 samples per second) 
... 
... 
Finished Epoch [160]: [Training] loss = 0.037745 * 49664, metric = 1.2% * 49664 7.883s (6300.4 samples per second) 
Finished Epoch [160]: [Training] loss = 0.037745 * 49664, metric = 1.2% * 49664 7.883s (6299.7 samples per second) 
Finished Epoch [160]: [Training] loss = 0.037745 * 49664, metric = 1.2% * 49664 7.884s (6299.7 samples per second) 
Finished Epoch [160]: [Training] loss = 0.037745 * 49664, metric = 1.2% * 49664 7.884s (6299.2 samples per second) 

Однако, когда я запускаю его с 1bit синг я получаю:

mpiexec -n 4 python TrainResNet_CIFAR10_Distributed.py -n resnet20 -q 1 -a 50000 

... 
Finished Epoch [160]: [Training] loss = 0.059290 * 49664, metric = 2.1% * 49664 10.055s (4939.1 samples per second) 
Finished Epoch [160]: [Training] loss = 0.059290 * 49664, metric = 2.1% * 49664 10.056s (4938.9 samples per second) 
Finished Epoch [160]: [Training] loss = 0.059290 * 49664, metric = 2.1% * 49664 10.056s (4938.9 samples per second) 
Finished Epoch [160]: [Training] loss = 0.059290 * 49664, metric = 2.1% * 49664 10.056s (4938.9 samples per second) 

Как пояснялось here 1 бит должен быть быстрее, чем обычный аналог. Любая помощь приветствуется.

ответ

3

1-бит sgd - эффективная стратегия, когда время связи между GPU велико по сравнению с временем вычисления для мини-бара.

В вашем эксперименте есть две проблемы: у модели, которую вы тренируете, есть несколько параметров (вычислений не так много), и 4 графических процессора находятся на одной машине (общение не так уж плохо по сравнению с тем, что происходит сеть). Кроме того, внутри устройства CNTK использует NVIDIA nccl, который намного лучше оптимизирован, чем универсальная реализация MPI, используемая в 1 бит.Обновление: На момент написания комментария NCCL не используется по умолчанию.

+0

Спасибо. Поэтому, если я буду работать с более серьезной проблемой, скажем, ImageNet с ResNet 152)? –

+0

Да, это может помочь, хотя в ResNets в целом не так много параметров, как некоторые из старых сетей, таких как VGG, которые используют полностью подключенные слои в конце. –

Смежные вопросы