paint-brush
Una descripción general del panorama de los cargadores de datos: cargadores de datospor@serialization

Una descripción general del panorama de los cargadores de datos: cargadores de datos

Demasiado Largo; Para Leer

En este artículo, los investigadores destacan los cargadores de datos como clave para mejorar la capacitación en aprendizaje automático, comparando bibliotecas en cuanto a funcionalidad, usabilidad y rendimiento.
featured image - Una descripción general del panorama de los cargadores de datos: cargadores de datos
The Serialization Publication HackerNoon profile picture
0-item

Autores:

(1) Iason Ofeidis, Departamento de Ingeniería Eléctrica e Instituto de Ciencias de Redes de Yale, Universidad de Yale, New Haven {Contribución igual};

(2) Diego Kiedanski, Departamento de Ingeniería Eléctrica e Instituto de Ciencias de Redes de Yale, Universidad de Yale, New Haven {Contribución igual};

(3) Leandros Tassiulas Levon Ghukasyan, Activeloop, Mountain View, CA, EE. UU., Departamento de Ingeniería Eléctrica e Instituto de Ciencias de Redes de Yale, Universidad de Yale, New Haven.

Tabla de enlaces

2. CARGADORES DE DATOS

En el proceso de entrenamiento de un modelo de aprendizaje profundo, el conjunto de datos debe leerse de la memoria y preprocesarse antes de poder pasarlo como entrada al modelo. Esta operación requiere cargar todos los datos en la memoria a la vez. En la mayoría de los casos y, especialmente, con grandes conjuntos de datos, surge una escasez de memoria debido a la cantidad limitada de ésta disponible en el sistema, lo que también deteriora el tiempo de respuesta del sistema. Este cuello de botella a menudo se soluciona en las bibliotecas de aprendizaje profundo mediante el uso del llamado cargador de datos. Esta estructura proporciona una forma de iterar sobre el conjunto de datos aprovechando el procesamiento paralelo, la captura previa, el procesamiento por lotes y otras técnicas para reducir el tiempo de carga de datos y la sobrecarga de memoria tanto como sea posible (Paszke et al., 2019).


El objetivo principal de un cargador de datos es realizar las acciones responsables de transferir muestras de datos desde una ubicación de almacenamiento a la memoria ubicada junto con las unidades de procesamiento para el entrenamiento con el fin de formar un lote de muestras que se introducirán en el modelo. Estas acciones están restringidas por el ancho de banda del sistema de almacenamiento y específicamente por su rendimiento de E/S. Por lo tanto, dependiendo de las especificaciones de hardware del sistema, el sistema de archivos que lo sirve y el rendimiento del enlace con las unidades informáticas, puede tener una influencia inmensa en la cantidad total de tiempo necesario para completar la capacitación.


La siguiente especificación del componente del cargador de datos se centra principalmente en PyTorch (torch.DataLoader() (PyTorch Core Team)), mientras que su contraparte de TensorFlow (tf.Dataset() (Abadi et al., 2015)), aunque no es la misma, guarda grandes similitudes.


Cuando se emplea un cargador de datos, además de proporcionar el conjunto de datos para la entrada, el usuario tiene la opción de configurar una serie de hiperparámetros, adaptados a sus necesidades y recursos. Uno común disponible en todos los cargadores de datos es el tamaño del lote, que, como se mencionó anteriormente, define la cantidad de muestras que se utilizarán antes de actualizar los parámetros internos del modelo. Este parámetro está intrínsecamente vinculado con el concepto de "mini-batch" en el descenso de gradiente estocástico (Hinton et al., 2012) y, por lo tanto, es uno de los primeros parámetros que suele someterse a un ajuste fino cuando se necesita lograr mejores resultados de entrenamiento. .


En segundo lugar, el usuario puede definir el enfoque de muestreo, que determina la estrategia para extraer muestras del conjunto de datos e insertarlas en un lote. Esto podría incluir la selección de muestras basándose en criterios específicos, así como en una distribución de probabilidad. En este paso existe la opción de barajar, donde las muestras se pueden reorganizar antes de cada iteración del conjunto de datos, con el objetivo generalmente de mejorar la generalización del modelo de entrenamiento. Otro parámetro es la función de intercalación/relleno, que esencialmente especifica el proceso de vincular todas las muestras individuales dentro de un lote (piense en apilar vectores en un tensor), para formar un único elemento que se alimentará como entrada al modelo de entrenamiento. . Además, el cargador de datos se puede configurar para almacenar automáticamente muestras de datos recuperadas en una memoria fijada (con página bloqueada), lo que permite una transferencia de datos más rápida a dispositivos habilitados para CUDA.


Los cargadores de datos vienen con un componente llamado trabajadores, cuyo propósito es optimizar este proceso de transferencia de datos. Los trabajadores se definen como subprocesos responsables de realizar la carga de datos de forma asincrónica. Al crear una instancia de un cargador de datos, el usuario tiene la opción de especificar la cantidad de trabajadores que se generarán y tendrán el control de esta operación. Si el número de trabajadores es igual a cero, no se crearán subprocesos, lo que, a su vez, significa que la obtención de datos se realiza de forma sincrónica en el mismo proceso y, por tanto, las unidades informáticas (GPU) tienen que esperar a que se carguen los datos. por completar (Equipo central de PyTorch). A la inversa, se generarán subprocesos iguales al número de trabajadores, lo que evitará el bloqueo del código de cómputo con carga de datos. Esto se logra precargando lotes futuros con anticipación para que estén listos cuando sea necesario.


Este documento está disponible en arxiv bajo licencia CC 4.0.