Skip to main content
NetApp artificial intelligence solutions
Se proporciona el idioma español mediante traducción automática para su comodidad. En caso de alguna inconsistencia, el inglés precede al español.

Procedimiento de prueba y resultados detallados

Colaboradores kevin-hoke

Esta sección describe los resultados detallados del procedimiento de prueba.

Entrenamiento de reconocimiento de imágenes utilizando ResNet en ONTAP

Ejecutamos la prueba de rendimiento ResNet50 con uno y dos servidores SR670 V2. Esta prueba utilizó el contenedor NGC MXNet 22.04-py3 para ejecutar el entrenamiento.

Utilizamos el siguiente procedimiento de prueba en esta validación:

  1. Limpiamos la memoria caché del host antes de ejecutar el script para asegurarnos de que los datos no estuvieran ya almacenados en caché:

    sync ; sudo /sbin/sysctl vm.drop_caches=3
  2. Ejecutamos el script de referencia con el conjunto de datos ImageNet en el almacenamiento del servidor (almacenamiento SSD local) así como en el sistema de almacenamiento NetApp AFF .

  3. Validamos el rendimiento de la red y el almacenamiento local utilizando el dd dominio.

  4. Para la ejecución de un solo nodo, utilizamos el siguiente comando:

    python train_imagenet.py --gpus 0,1,2,3,4,5,6,7 --batch-size 408 --kv-store horovod --lr 10.5 --mom 0.9 --lr-step-epochs pow2 --lars-eta 0.001 --label-smoothing 0.1 --wd 5.0e-05 --warmup-epochs 2 --eval-period 4 --eval-offset 2 --optimizer sgdwfastlars --network resnet-v1b-stats-fl --num-layers 50 --num-epochs 37 --accuracy-threshold 0.759 --seed 27081 --dtype float16 --disp-batches 20 --image-shape 4,224,224 --fuse-bn-relu 1 --fuse-bn-add-relu 1 --bn-group 1 --min-random-area 0.05 --max-random-area 1.0 --conv-algo 1 --force-tensor-core 1 --input-layout NHWC --conv-layout NHWC --batchnorm-layout NHWC --pooling-layout NHWC --batchnorm-mom 0.9 --batchnorm-eps 1e-5 --data-train /data/train.rec --data-train-idx /data/train.idx --data-val /data/val.rec --data-val-idx /data/val.idx --dali-dont-use-mmap 0 --dali-hw-decoder-load 0 --dali-prefetch-queue 5 --dali-nvjpeg-memory-padding 256 --input-batch-multiplier 1 --dali- threads 6 --dali-cache-size 0 --dali-roi-decode 1 --dali-preallocate-width 5980 --dali-preallocate-height 6430 --dali-tmp-buffer-hint 355568328 --dali-decoder-buffer-hint 1315942 --dali-crop-buffer-hint 165581 --dali-normalize-buffer-hint 441549 --profile 0 --e2e-cuda-graphs 0 --use-dali
  5. Para las ejecuciones distribuidas, utilizamos el modelo de paralelización del servidor de parámetros. Utilizamos dos servidores de parámetros por nodo y configuramos el número de épocas para que sea el mismo que para la ejecución de un solo nodo. Hicimos esto porque el entrenamiento distribuido a menudo toma más épocas debido a la sincronización imperfecta entre los procesos. El diferente número de épocas puede sesgar las comparaciones entre casos de nodo único y casos distribuidos.

Velocidad de lectura de datos: almacenamiento local versus almacenamiento en red

La velocidad de lectura se probó utilizando el dd comando en uno de los archivos del conjunto de datos ImageNet. En concreto, ejecutamos los siguientes comandos para datos locales y de red:

sync ; sudo /sbin/sysctl vm.drop_caches=3dd if=/a400-100g/netapp-ra/resnet/data/preprocessed_data/train.rec of=/dev/null bs=512k count=2048Results (average of 5 runs):
Local storage: 1.7 GB/s Network storage: 1.5 GB/s.

Ambos valores son similares, lo que demuestra que el almacenamiento en red puede entregar datos a una velocidad similar al almacenamiento local.

Caso de uso compartido: Trabajos múltiples, independientes y simultáneos

Esta prueba simuló el caso de uso esperado para esta solución: entrenamiento de IA de múltiples trabajos y múltiples usuarios. Cada nodo ejecutó su propio entrenamiento mientras usaba el almacenamiento de red compartido. Los resultados se muestran en la siguiente figura, que muestra que el caso de la solución proporcionó un rendimiento excelente con todos los trabajos ejecutándose esencialmente a la misma velocidad que los trabajos individuales. El rendimiento total se escala linealmente con el número de nodos.

Esta figura muestra las imágenes agregadas por segundo.

Esta figura muestra el tiempo de ejecución en minutos.

Estos gráficos presentan el tiempo de ejecución en minutos y las imágenes agregadas por segundo para los nodos de cómputo que utilizaron ocho GPU de cada servidor en una red de cliente de 100 GbE, combinando el modelo de entrenamiento simultáneo y el modelo de entrenamiento único. El tiempo de ejecución promedio del modelo de entrenamiento fue de 35 minutos y 9 segundos. Los tiempos de ejecución individuales fueron 34 minutos y 32 segundos, 36 minutos y 21 segundos, 34 minutos y 37 segundos, 35 minutos y 25 segundos y 34 minutos y 31 segundos. Las imágenes promedio por segundo para el modelo de entrenamiento fueron 22.573, y las imágenes individuales por segundo fueron 21.764; 23.438; 22.556; 22.564; y 22.547.

Según nuestra validación, un modelo de entrenamiento independiente con un tiempo de ejecución de datos de NetApp fue de 34 minutos y 54 segundos con 22 231 imágenes/seg. Un modelo de entrenamiento independiente con un tiempo de ejecución de datos locales (DAS) fue de 34 minutos y 21 segundos con 22 102 imágenes/seg. Durante esas ejecuciones, la utilización promedio de la GPU fue del 96%, como se observó en nvidia-smi. Tenga en cuenta que este promedio incluye la fase de prueba, durante la cual no se utilizaron GPU, mientras que la utilización de la CPU fue del 40 %, según lo medido por mpstat. Esto demuestra que la velocidad de entrega de datos es suficiente en cada caso.