Mejorando el procesamiento de datos de neuroimágenes con Sea
La biblioteca Sea mejora los flujos de trabajo de neuroimagen al optimizar el rendimiento de la transferencia de datos.
― 14 minilectura
Tabla de contenidos
- El desafío de grandes conjuntos de datos de neuroimagen
- Mejorando el rendimiento de los sistemas de archivos compartidos
- Resumen de Sea
- Pruebas de rendimiento de Sea
- Comparación con el rendimiento base
- La importancia de los aumentos de velocidad en el procesamiento de datos
- Prediciendo el rendimiento y los aumentos de velocidad
- Prefetching, flushing y expulsión con Sea
- Intercepción de pipeline de neuroimágenes
- Conclusión y direcciones futuras
- Fuente original
- Enlaces de referencia
En los últimos años, la disponibilidad de grandes conjuntos de Datos de neuroimagen ha crecido un montón gracias a iniciativas de datos abiertos. A medida que estos conjuntos de datos se hacen más grandes, el desafío de procesarlos ha cambiado de ser sobre poder de cómputo a lidiar con la transferencia de datos. Las herramientas de análisis actuales no se han ajustado completamente a este cambio, y muchas luchan con los costos de transferir grandes cantidades de datos. Un gran problema es que las Aplicaciones de neuroimagen que ya existen a menudo necesitan ser reescritas por completo para manejar los datos de manera efectiva.
Para ayudar a gestionar los datos de las herramientas de neuroimagen, se creó una nueva biblioteca llamada Sea. Sea intercepta y redirige cómo las aplicaciones leen y escriben datos. Esto ayuda a reducir el tiempo que se pasa transfiriendo datos. Este artículo analiza qué tal funciona Sea con tres tuberías de preprocesamiento populares: FSL, SPM y AFNI, usando tres conjuntos de datos de neuroimagen de diferentes tamaños. El objetivo es ver si Sea puede mejorar el rendimiento en el procesamiento de datos.
El desafío de grandes conjuntos de datos de neuroimagen
El aumento de datos de neuroimagen disponibles al público trae nuevos desafíos. Los investigadores deben lidiar con el Almacenamiento y los tiempos de procesamiento de maneras que antes no eran necesarias. Se han desarrollado varias herramientas para ayudar a gestionar mejor los datos de neuroimagen. Por ejemplo, se han establecido formas estandarizadas de organizar los datos, como los Estándares de Datos de Imágenes Cerebrales (BIDS), para facilitar el intercambio de conjuntos de datos. También se han creado herramientas como DataLad para ayudar a rastrear cambios y el historial de datos.
Los avances recientes han tratado de acelerar el procesamiento utilizando métodos de aprendizaje automático que son mucho más rápidos que el procesamiento de imágenes tradicional. Sin embargo, a pesar de la existencia de varias herramientas, algunos problemas, especialmente los relacionados con la transferencia de datos durante el procesamiento, no se han abordado adecuadamente.
Los dos mayores conjuntos de datos de neuroimagen hoy en día, el Proyecto del Conectoma Humano (HCP) y el Biobanco del Reino Unido, son enormes, con datos que alcanzan varios petabytes. Para conjuntos de datos tan grandes, los investigadores a menudo dependen del almacenamiento remoto paralelo para el procesamiento. Aunque estos sistemas de almacenamiento son escalables, generalmente no pueden igualar el rendimiento de las soluciones de almacenamiento local, como los discos de estado sólido (SSD).
Al transferir grandes cantidades de datos a estos sistemas de almacenamiento remoto, pueden ocurrir sobrecargas significativas en los tiempos de procesamiento. Los Big Data en neuroimagen pueden venir en dos formas: 1) archivos muy grandes y 2) numerosos archivos pequeños relacionados con muchas personas, como conjuntos de datos de resonancia magnética (MRI). La forma en que se organizan los datos lleva a diferentes desafíos en su transferencia. Mientras que la entrada/salida (I/O) de archivos grandes está influenciada principalmente por la velocidad del sistema de almacenamiento, la I/O de archivos pequeños puede crear retrasos notorios.
Para abordar los problemas de rendimiento por la transferencia de grandes conjuntos de datos, se han implementado dos estrategias en los marcos de Big Data: la localización de datos y la computación en memoria. Ambas estrategias buscan reducir los retrasos de las grandes transferencias utilizando almacenamiento local como un área de espera temporal. Aunque estos marcos pueden ser beneficiosos para los datos de neuroimagen, no se utilizan ampliamente porque reescribir el software de neuroimagen existente para que funcione con estos marcos requiere un esfuerzo significativo.
Las aplicaciones de neuroimagen más nuevas que utilizan motores de tuberías populares a menudo no se benefician de una mejor gestión de datos. Si bien herramientas como Nipype permiten técnicas de gestión de datos, no facilitan la integración de estas técnicas en los flujos de trabajo. Para dar a las aplicaciones de neuroimagen capacidades de gestión de datos, deben poder interactuar con un sistema de almacenamiento o biblioteca que apoye estos enfoques.
Los investigadores suelen confiar en dos sistemas principales para sus necesidades de almacenamiento y cómputo: clústeres de Computación de Alto Rendimiento (HPC) y la nube. La nube facilita el intercambio de datos y proporciona acceso a diversas infraestructuras, mientras que los clústeres HPC suelen ser más rentables para acceder a una amplia gama de recursos. Los sistemas HPC utilizan sistemas de archivos paralelos basados en red escalables para el almacenamiento, como Lustre. Aunque estos sistemas ofrecen un buen rendimiento, se comparten entre todos los usuarios, lo que significa que aquellos que ejecutan aplicaciones intensivas en datos pueden ralentizar el rendimiento para todos los demás.
Mejorando el rendimiento de los sistemas de archivos compartidos
Existen formas de mejorar el rendimiento de los sistemas de archivos compartidos, como limitar la carga de trabajo de aplicaciones intensivas en datos o usar Burst Buffers. Los Burst Buffers permiten a los usuarios reservar un nodo de cómputo para almacenamiento o usar almacenamiento local durante el procesamiento. Sin embargo, esto requiere que los usuarios gestionen la transferencia de sus datos hacia y desde el Burst Buffer, a menos que se instale un sistema de archivos especial para Burst Buffers.
Para que un sistema de archivos sea accesible por los usuarios de HPC, debe poder cargarse sin necesidad de derechos administrativos. Las aplicaciones existentes suelen interactuar con sistemas de archivos basados en POSIX, por lo que el nuevo sistema de archivos debe seguir estándares similares. Un método para lograr esto es utilizando el truco LDPRELOAD, que permite interceptar ciertas llamadas de biblioteca y cambiar su comportamiento. Esta técnica se ha empleado en varios proyectos para crear sistemas de archivos livianos en el espacio del usuario.
Resumen de Sea
Sea es una biblioteca de gestión de datos diseñada para reducir los retrasos por la transferencia de datos. Utiliza el truco LDPRELOAD para interceptar las llamadas del sistema de archivos, específicamente aquellas relacionadas con el acceso a archivos en la biblioteca GNU C en sistemas Linux. Al hacer esto, Sea puede redirigir las llamadas de escritura a un almacenamiento más rápido siempre que sea posible. Cuando intercepta llamadas de lectura, Sea también puede elegir leer desde una ubicación más rápida si allí existe una copia.
Sea determina qué ubicación de almacenamiento utilizar para escribir en función de un archivo de inicialización llamado sea.ini. Este archivo contiene información sobre las ubicaciones de almacenamiento disponibles y su orden de prioridad. Es importante destacar que Sea no es un sistema de archivos, sino una herramienta liviana diseñada para redirigir archivos a soluciones de almacenamiento más rápidas.
Todas las ubicaciones de almacenamiento que Sea puede usar para redirigir las escrituras se consideran cachés. Estas cachés pueden ser cualquier almacenamiento disponible en los nodos de cómputo, como sistemas de archivos temporales en memoria virtual o discos de estado sólido. Dado que los resultados de neuroimagen comúnmente requieren más procesamiento y los recursos locales de HPC solo pueden accederse por un tiempo determinado, Sea permite mover datos a almacenamiento compartido a largo plazo sin interrumpir los procesos en curso. Esto es gestionado por un hilo separado llamado "flusher," que transfiere datos de las cachés al almacenamiento permanente.
Los usuarios necesitan informar a Sea sobre qué archivos deben guardarse en el almacenamiento utilizando un archivo llamado .seaevictlist. Este archivo puede incluir expresiones regulares para especificar las rutas para el vaciado y la expulsión. Si un archivo aparece en ambas listas, Sea simplemente moverá el archivo del almacenamiento local al almacenamiento permanente en lugar de copiarlo.
Sea también tiene un hilo básico de prefetch que puede transferir archivos a la caché más rápida disponible. Los usuarios pueden habilitar el prefetch llenando un archivo llamado .seaprefetchlist utilizando expresiones regulares, similar a las listas de vaciado y expulsión.
Para interactuar con Sea, se crea un punto de montaje. Este punto de montaje es un directorio vacío que sirve como una vista de todos los archivos almacenados dentro de Sea. Para hacer un seguimiento de las ubicaciones de los archivos, Sea refleja la estructura de directorios de cada ubicación de almacenamiento a través de todas las cachés. Se recomienda proporcionar ubicaciones de almacenamiento vacías para que Sea optimice el rendimiento, ya que reflejar directorios grandes puede llevar tiempo.
Sea se puede ejecutar directamente usando contenedores disponibles o compilarse desde la fuente utilizando herramientas estándar. Una vez compilado, se puede ejecutar usando un simple script bash.
Pruebas de rendimiento de Sea
Para evaluar el rendimiento de Sea, se realizaron pruebas usando tres conjuntos de datos diferentes con tamaños variados. Se utilizaron tres tuberías comunes de neuroimagen-AFNI, SPM y FSL-para procesar estos conjuntos de datos. Un entorno de prueba notable fue un clúster HPC dedicado diseñado únicamente para estos experimentos.
Se crearon cargas de trabajo simuladas de otros usuarios para medir cómo se desempeña Sea en condiciones donde el sistema de archivos compartido está bajo estrés. Las pruebas mostraron que Sea proporcionó aumentos de velocidad sustanciales cuando el rendimiento de Lustre se redujo por estas cargas de trabajo adicionales. El aumento de velocidad más significativo observado fue de 32 veces cuando una tubería específica procesó una sola imagen del conjunto de datos HCP mientras múltiples escritores ocupados estaban activos.
En promedio, la tubería SPM tuvo el mayor aumento de velocidad, alcanzando una media de 12.6 durante las pruebas. La tubería AFNI también mostró aumentos de velocidad, mientras que la tubería FSL Feat tuvo las ganancias menos significativas debido a su naturaleza intensiva en cómputo.
El conjunto de datos HCP consistentemente entregó los mayores aumentos de velocidad, probablemente porque tiene los archivos individuales más grandes, lo que los hace más impactados por los retrasos durante el vaciado a Lustre. Los resultados indicaron que a medida que aumentaba el trabajo paralelo, los aumentos de velocidad de Sea tendían a disminuir, principalmente debido a los tiempos de espera incrementados por los recursos.
Comparación con el rendimiento base
En escenarios sin escritores ocupados, se encontró que el rendimiento de Sea era similar al del sistema base. Sin embargo, cuando los escritores ocupados estaban activos, Sea mejoró significativamente el rendimiento y redujo el tiempo total requerido para las tareas. Ocurrieron algunos ligeros retrasos al utilizar Sea, probablemente provenientes de la lectura inicial de los datos.
Para evaluar más a fondo la sobrecarga de Sea, se comparó con un escenario en el que el procesamiento ocurría completamente en memoria. Los resultados mostraron que la sobrecarga de Sea era mínima, lo que lo convierte en una opción segura para los usuarios incluso en condiciones donde el rendimiento estaba degradado.
Se realizaron más pruebas en un clúster de producción compartido para ver cómo se desempeñaba Sea en situaciones del mundo real. Esta prueba reveló que el rendimiento era variable pero aún así proporcionaba aumentos de velocidad notables para procesar datos de neuroimagen.
En el entorno de producción, el aumento de velocidad máximo observado fue de 11 veces durante las pruebas con la tubería AFNI mientras se procesaban imágenes. Sea demostró ser útil para mantener el rendimiento incluso cuando el sistema de archivos compartido estaba bajo un uso intensivo.
La importancia de los aumentos de velocidad en el procesamiento de datos
Los resultados mostraron que usar Sea puede llevar a aumentos de velocidad considerables en el procesamiento de datos de fMRI, especialmente cuando se trata de cargas de trabajo que estresan los recursos compartidos. Incluso en casos donde los aumentos de velocidad son menores, Sea puede ayudar a gestionar el número de archivos creados en el sistema de archivos compartido, lo que es beneficioso para los usuarios con límites estrictos.
Sea funciona mejor cuando las tareas implican escribir datos a un ritmo que excede la capacidad de la caché de página para el vaciado al sistema de archivos. Por ejemplo, ejecutar múltiples instancias de una tubería particular puede llenar rápidamente la caché disponible, lo que permite a Sea demostrar sus ventajas.
Dicho esto, Sea tiene limitaciones. No puede acelerar aplicaciones que son intensivas en uso de CPU, como sucede con la tubería FSL Feat. A veces, el espacio suficiente en caché permite vaciar datos al sistema de archivos sin retrasos. En tales situaciones, Sea aún puede resultar beneficioso al reducir el número de archivos escritos al sistema compartido.
Prediciendo el rendimiento y los aumentos de velocidad
Predecir el rendimiento de Sea puede ser complicado debido a las condiciones variables en los clústeres HPC. Aunque nuestras pruebas controladas pudieron demostrar aumentos de velocidad bajo condiciones específicas, los resultados pueden diferir según factores externos como el uso del clúster, tipos de cargas de trabajo y patrones de lectura/escritura.
En escenarios donde hay poca competencia por los recursos, los usuarios pueden obtener aumentos de velocidad de Sea si el rendimiento del sistema de archivos compartido es deficiente. Cuanto más datos escriba una aplicación, más probable será que se beneficie de Sea, ya que los datos que no pueden escribirse en la caché aún pueden dirigirse a un almacenamiento local más rápido.
La frecuencia y el tamaño de las operaciones de datos también juegan un papel crucial en determinar el rendimiento. Las aplicaciones que escriben grandes cantidades de datos en ráfagas tienden a beneficiarse más de Sea que aquellas que distribuyen las escrituras de manera uniforme.
Prefetching, flushing y expulsión con Sea
Sea mejora el rendimiento a través de prefetching, flushing y expulsión. El prefetching permite mover datos de entrada a la memoria, lo que acelera el procesamiento. Por ejemplo, en pruebas con la tubería SPM, el prefetching ayudó a mejorar significativamente la velocidad al cargar datos en la memoria donde podrían ser manipulados más fácilmente.
Se consideró el flushing y la expulsión para los entornos de producción, pero no se utilizaron en las pruebas controladas. Se asumió que los usuarios querrían acceder a todos los datos generados, aunque esto puede no ser siempre el caso en análisis de conjuntos de datos completos.
Los retrasos con Sea podrían surgir de los procesos de flushing que se ejecutan junto a cálculos. En análisis grandes, los usuarios pueden no requerir acceso a todos los archivos intermedios, lo que optimizaría el uso del almacenamiento local y reduciría el número de escrituras en sistemas de archivos remotos.
Intercepción de pipeline de neuroimágenes
El enfoque de usar LDPRELOAD para interceptar llamadas de biblioteca fue efectivo para capturar todas las acciones del sistema de archivos de las aplicaciones probadas. Esto significa que Sea puede trabajar de manera confiable con las tuberías de preprocesamiento de neuroimagen más comúnmente utilizadas.
Aunque Sea no ha sido probado en profundidad con todos los parámetros posibles, ha pasado por numerosas pruebas de integración en diferentes sistemas operativos y versiones de Linux. La elección de usar la intercepción de glibc en lugar de métodos basados en el núcleo o alternativas proporcionó una solución fácil de usar mientras se mantenía un impacto mínimo en el rendimiento.
Conclusión y direcciones futuras
En conclusión, Sea es una biblioteca liviana diseñada para proporcionar capacidades esenciales de gestión de datos para flujos de trabajo de neuroimagen. Se ha probado con éxito con las principales bibliotecas de preprocesamiento de fMRI y ha demostrado que puede mejorar significativamente el rendimiento cuando la transferencia de datos es un problema.
Se observaron aumentos máximos de velocidad de 32 veces en entornos controlados, con aumentos notables en entornos de producción también. Estas mejoras fueron especialmente fuertes con archivos más grandes, mientras que los tiempos de cómputo extendidos y la sobrecarga de otras actividades de I/O fueron mínimas.
Las iteraciones futuras de Sea podrían considerar características adicionales para archivar salidas y gestionar archivos en sistemas compartidos de manera más eficiente. En general, Sea muestra un gran potencial para investigadores que buscan mejorar sus capacidades de procesamiento de datos de neuroimagen.
Título: Hierarchical storage management in user space for neuroimaging applications
Resumen: Neuroimaging open-data initiatives have led to increased availability of large scientific datasets. While these datasets are shifting the processing bottleneck from compute-intensive to data-intensive, current standardized analysis tools have yet to adopt strategies that mitigate the costs associated with large data transfers. A major challenge in adapting neuroimaging applications for data-intensive processing is that they must be entirely rewritten. To facilitate data management for standardized neuroimaging tools, we developed Sea, a library that intercepts and redirects application read and write calls to minimize data transfer time. In this paper, we investigate the performance of Sea on three preprocessing pipelines implemented using standard toolboxes (FSL, SPM and AFNI), using three neuroimaging datasets of different sizes (OpenNeuro's ds001545, PREVENT-AD and the HCP dataset) on two high-performance computing clusters. Our results demonstrate that Sea provides large speedups (up to 32X) when the shared file system's (e.g. Lustre) performance is deteriorated. When the shared file system is not overburdened by other users, performance is unaffected by Sea, suggesting that Sea's overhead is minimal even in cases where its benefits are limited. Overall, Sea is beneficial, even when performance gain is minimal, as it can be used to limit the number of files created on parallel file systems.
Autores: Valérie Hayot-Sasson, Tristan Glatard
Última actualización: 2024-04-17 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2404.11556
Fuente PDF: https://arxiv.org/pdf/2404.11556
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.