Evaluación de Rendimiento para Redes Neuronales: Herramientas y Casos Prácticos

La evaluación del rendimiento de modelos de redes neuronales y el hardware subyacente es crucial para la investigación y el desarrollo en inteligencia artificial. Diversos proyectos y herramientas estandarizadas permiten a los ingenieros y científicos comparar eficientemente arquitecturas, frameworks y plataformas. A continuación, se exploran algunas de estas iniciativas de benchmarking.

1. MLPerf

MLPerf es un conjunto de benchmarks líderes en la industria, diseñado para medir el rendimiento de sistemas de aprendizaje automático. Abarca tanto el entrenamiento como la inferencia en una amplia gama de tareas, incluyendo clasificación de imágenes, detección de objetos, procesamiento de lenguaje natural y sistemas de recomendación. Sus principales categorías son Training, Inference y Tiny (para dispositivos de baja potencia). Es compatible con CPUs, GPUs y aceleradores de IA especializados, siendo un estándar para evaluar el rendimiento de sistemas de IA en la academia, la industria y la comunidad de código abierto.

Tomando como ejemplo el benchmark de texto a imagen con SDXL en su sección de inferencia, el proceso típicamente inicia con la configuración del entorno.

1.1. Configuración Inicial

Se requiere Python 3.8 o superior (se utilizó 3.9 en el ejemplo original) y una versión de Git actualizada. La instalación de las herramientas de MLCommons se realiza mediante pip:

pip install cmind
pip install --no-use-pep517 cm4mlops

Es importante notar el uso de --no-use-pep517 para evitar problemas de construcción de paquetes en ciertos entornos, que de otro modo podrían resultar en errores como:

ERROR: Failed building wheel for cm4mlops
ERROR: Failed to build installable wheels for some pyproject.toml based projects (cm4mlops)

1.2. Ejecución de la Inferencia

Para ejecutar un benchmark de inferencia, se utilizan los scripts de MLCommons. Primero, se establece un entorno virtual y se prepara el sistema:

cm run script --tags=install,python-venv --name=mlperf
export CM_SCRIPT_EXTRA_CMD="--adr.python.name=mlperf"

Luego, se ejecuta el benchmark de inferencia para un modelo específico (SDXL en este caso), definiendo el framework (PyTorch), la categoría (edge), el escenario (Offline), el modo de ejecución y el dispositivo (CUDA):

cm run script --tags=run-mlperf,inference,_find-performance,_full,_r4.1-dev \
   --model=sdxl \
   --implementation=reference \
   --framework=pytorch \
   --category=edge \
   --scenario=Offline \
   --execution_mode=test \
   --device=cuda  \
   --quiet \
   --test_query_count=50

Si la clonación del repositorio de inferencia de MLCommons falla (e.g., por problemas de red), el directorio local del repositorio puede especificarse usando el parámetro --inference_src:

 --inference_src=${RUTA_USUARIO}$/cuda/inference

Durante la ejecución, es común que se descarguen paquetes y modelos de gran tamaño, lo que puede llevar tiempo. Ejemplos de descargas pueden incluir bibliotecas de PyTorch, CUDA y componentes de modelos:

Collecting torch
  Downloading torch-2.4.1-cp39-cp39-manylinux1_x86_64.whl (797.1 MB)
...
Downloading: rclone sync 'mlc-inference:mlcommons-inference-wg-public/stable_diffusion_fp32' '/home/u200810220/CM/repos/local/cache/e00a5f70d26c4213/stable_diffusion_fp32' -P --error-on-no-transfer
Transferred:       12.824 GiB / 12.926 GiB, 99%, 28.401 KiB/s, ETA 1h2m34s

2. CUDA Benchmarking

CUDA Bench es una herramienta para evaluar el rendimiento de aplicaciones que se ejecutan en GPUs NVIDIA. Proporciona benchmarks para medir el desempeño de diversos algoritmos, bibliotecas y cargas de trabajo en la plataforma CUDA, como multiplicación de matrices, adición de vectores y operaciones de convolución. Es útil para evaluar la utilización de recursos de hardware, el ancho de banda y la latencia, facilitando la optimización de programas CUDA.

2.1. Requisito de CMake

Este benchmark suele requerir una versión de CMake igual o superior a 3.20.1. El proceso para actualizar CMake en sistemas basados en Debian podría ser:

sudo apt remove cmake
wget https://github.com/Kitware/CMake/releases/download/v3.20.1/cmake-3.20.1-linux-x86_64.sh
sudo bash cmake-3.20.1-linux-x86_64.sh --skip-license --prefix=/usr/local
export PATH=/usr/local/bin:$PATH

2.2. Desafíos en la Construcción

Durante el proceso de compilación, pueden surgir problemas, especialmente al intentar obtener dependencias externas. Un error común es la imposibilidad de acceder a repositorios como rapids-cmake, manifestándose como un timeout de conexión:

fatal: unable to access 'https://github.com/rapidsai/rapids-cmake.git/': Failed to connect to github.com port 443: Connection timed out
CMake Error at .../rapids-cmake-populate-gitupdate.cmake:97 (execute_process):
  execute_process failed command indexes:
    1: "Child return code: 128"

Estos problemas suelen indicar restricciones de red o conectividad a los servidores de GitHub.

3. NAS-Bench-Graph

NAS-Banch-Graph es un benchmark para la Búsqueda de Arquitectura Neuronal (NAS) específicamente diseñado para Redes Neuronales Gráficas (GNNs). Ofrece un espacio de búsqueda predefinido con diversas arquitecturas de GNN y sus resultados de entrenamiento y evaluación en múltiples datasets. Esto permite a los investigadores experimentar con NAS de manera más eficiente y comparar rápidamente el rendimiento de diferentes métodos, acelerando la investigación y optimización de GNNs.

Sin embargo, a veces surgen problemas de compatibilidad de versiones durante su implementación, lo que puede requerir ajustes manuales o el uso de entornos específicos.

4. MLCommons Training: Graph Neural Network

Dentro del proyecto MLCommons Training, existe una sección dedicada a las redes neuronales gráficas para clasificación de nodos.

Para empezar con este benchmark, una aproximación común es el uso de contenedores Docker para garantizar un entorno reproducible:

cd training/gnn_node_classification/
docker build -f Dockerfile -t training_gnn:latest .

En plataformas de alto rendimiento, es posible que los comandos Docker sean rechazados debido a políticas de seguridad o permisos, lo que requiere configuración adicional o privilegios específicos.

5. OGB (Open Graph Benchmark)

OGB (Open Graph Benchmark) es una colección a gran escala de datasets y benchmarks estandarizados para la investigación en Redes Neuronales Gráficas (GNNs). Incluye diversos datos gráficos del mundo real, como redes sociales, grafos de conocimiento y gráficos moleculares. OGB facilita la comparación efectiva de distintos modelos de GNN al proporcionar datasets y métricas de evaluación consistentes para tareas como clasificación de nodos, predicción de enlaces y clasificación de grafos, impulsando el avance de las GNNs.

Su instalación es sencilla a través de pip:

pip install ogb

No obstante, la compatibilidad de versiones de las dependencias es un factor importante, y en ocationes pueden presentarse conflictos que impidan una instalación limpia.

6. NASBench301

NAS-Bench-301 es un benchmark de Búsqueda de Arquitectura Neuronal (NAS) diseñado para mejorar la eficiencia de la investigación en NAS. Ofrece un espacio de búsqueda más complejo y se basa en una evaluación exhaustiva de arquitecturas, evitando los altos costos de entrenamiento en hardware real. Este benchmark proporciona un modelo proxy eficiente capaz de predecir rápidamente el rendimiento de una arquitectura sin necesidad de reentrenarla. Soporta múltiples estrategias de búsqueda, simplificando la experimentación y evaluación para los investigadores.

7. Benchmarking-GNNs

Benchmarking-GNNs es un framework de benchmarking enfocado en Redes Neuronales Gráficas (GNNs), que permite la comparación sistemática de varios modelos de GNN en diferentes tareas gráficas. Proporciona datasets estandarizados y un entorno experimental para tareas como clasificación de nodos, predicción de enlaces y clasificación de grafos. Su objetivo es impulsar el progreso en la investigación de GNNs, permitiendo a los investigadores desarrollar y optimizar modelos de manera más efectiva para aplicaciones del mundo real.

7.1. Configuración del Entorno

Para configurar este benchmark, especialmente en un entorno CUDA específico, se pueden seguir los siguientes pasos (ejemplo para CUDA 10.2 en Ubuntu 18.04):

# Eliminación de versiones anteriores de CUDA/NVIDIA
sudo apt-get --purge remove "*cublas*" "cuda*"
sudo apt --purge remove "nvidia*"
sudo apt autoremove

# Instalación de CUDA 10.2
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo apt update
sudo apt install -y cuda-10-2
sudo reboot
cat /usr/local/cuda/version.txt # Confirmar la versión de CUDA (10.2)

# Clonación del repositorio y configuración del entorno Python
conda install git
git clone https://github.com/graphdeeplearning/benchmarking-gnns.git
cd benchmarking-gnns
conda env create -f environment_gpu.yml 
conda activate benchmark_gnn

Es común encontrar incompatibilidades de versiones de CUDA al seguir estas instrucciones, ya que las dependencias pueden variar con el tiempo o con las configuraciones del sistema.

8. GNN-Benchmark

GNN-Benchmark es otra herramienta para evaluar el rendimiento de las Redes Neuronales Gráficas.

La instalación de sus dependencias, como MongoDB, puede presentar desafíos si la versión requerida no está disponible en los repositorios del sistema operativo. Por ejemplo, al intentar instalar una versión específica de MongoDB en Ubuntu 18.04, se podrían obtener errores como:

E: Unable to locate package mongodb-org
E: Unable to locate package mongodb-org-server
E: Unable to locate package mongodb-org-shell
E: Unable to locate package mongodb-org-mongos
E: Version '3.6.4' for 'mongodb-org-tools' was not found

Esto indica que la versión de MongoDB solicitada (3.6.4) no está directamente disponible en los repositorios de paquetes configurados para esa versión de Ubuntu, requiriendo la adición de repositorios de terceros o el uso de una versión diferente.

Etiquetas: MLPerf CUDA GNN NAS Benchmarking

Publicado el 6-23 01:28