¿Cómo se almacenan la mayoría de los conjuntos de datos para el aprendizaje automático a gran escala?

Diría que depende principalmente de la naturaleza de los datos, así como del tipo de consultas que intenta ejecutar con más frecuencia. Finalmente, como dijo Sean, terminarás teniendo que leer los datos del disco de todos modos, a menos que seas lo suficientemente rico como para vivir en la memoria. Y antes de comenzar a responder por lo que he visto a mi alrededor, los archivos planos son la solución más común con diferencia.

Permíteme darte dos ejemplos concretos que enfrenté este verano, para los cuales terminé con dos soluciones diferentes:

  • RDBMS para datos MOOC como edX o Coursera
  • limas planas para almacenar formas de onda para la presión arterial de pacientes en UCI

Ejemplo 1: manejo de datos MOOC.

Recibí los datos de un montón de cursos de edX, básicamente todo lo que se registró en las actividades de los estudiantes: qué páginas visitaron, qué enviaron, el foro, etc. En general, el tamaño de los datos no era tan grande: alrededor de 50 GB por curso en el formato sin formato que recibí.

Además de la multiplicidad de datos, teníamos la intención de ejecutar grandes cantidades de consultas diferentes para investigar muchos aspectos del curso a partir de estadísticas descriptivas misceláneas (por ejemplo, cursos en línea abiertos masivos (MOOC): ¿Dónde puedo encontrar datos y estadísticas? en los MOOC?) para el aprendizaje automático y la investigación educativa, como predecir abandonos y qué recursos son útiles para responder a un problema dado.

Como resultado, pensamos que usar un DBMS sería útil para lograr esas tareas de manera eficiente. Estábamos más motivados ya que estábamos viendo algunos otros laboratorios que tenían dificultades para manejar CSV en todo el lugar. Además, la tabla más grande se ajustaba en RAM, por lo que no tuvimos ningún problema de E / S.

Aquí hay un ejemplo de una consulta que necesitábamos responder:

Como puede ver, responder una pregunta simple fue una molestia al usar archivos planos (los cuadros azul grisáceos en esta diapositiva), pero podría ocuparse de usar una sola consulta SQL una vez que cambiamos a DBMS (vicelet MySQL)

(más detalles sobre este trabajo aquí si está interesado: http://francky.me/publications.p…)

Ejemplo 2: tratar con datos de la UCI.

En este proyecto, los datos fueron mucho más simples ya que nos centramos en un conjunto de datos de forma de onda del paciente en la UCI. Eran solo las 22 formas de onda diferentes.

Aquí estaba la motivación (la copié de un documento que mi laboratorio y acabo de enviar)

Para los estudios de forma de onda fisiológica típicos, los investigadores definen un grupo de estudio dentro del cual designan casos y controles. Extraen las formas de onda del grupo, filtran las señales, las procesan previamente y extraen las características antes de ejecutar, evaluar e interpretar iterativamente una máquina preseleccionada.
algoritmo de aprendizaje con métricas como el área bajo la curva y análisis como la sensibilidad variable.

Reconociendo que un estudio típico, incluso con cantidades modestas de pacientes, puede tomar de 6 a 12 meses, hemos preguntado cómo se puede reducir esta duración y múltiples estudios pueden compartir el esfuerzo de desarrollo. En respuesta, estamos diseñando un marco de análisis y aprendizaje automático a gran escala, llamado beatDB, para extraer conocimiento de formas de onda fisiológicas de alta resolución. beatDB es nuestro primer corte para crear repositorios de datos de nivel de función muy grandes y de acceso abierto derivados de formas de onda de señal fisiológica periódicas continuas, como electrocardiogramas (ECG) o presión arterial. En la actualidad, hemos procesado cerca de mil millones de latidos de la presión arterial de la base de datos de formas de onda MIMIC 2 versión 3 y hemos desarrollado una estrategia para la extracción y descubrimiento de características que respalda estudios eficientes.

Por lo tanto, beatDB reduce drásticamente el tiempo de las investigaciones a gran escala precalculando juiciosamente las características de ritmo que probablemente se utilizarán con frecuencia. Es compatible con la investigación ágil al ofrecer parametrizaciones que permiten que se tomen decisiones específicas de intercambio de cómputo y almacenamiento de tareas al calcular características adicionales y preparar datos para aprendizaje automático o visualización.

Resumir la estructura de datos es sencillo: tenemos algunas formas de onda y características que calculamos en ellas para facilitar el aprendizaje automático.

Además de la simplicidad de los datos, las consultas que pretendemos ejecutar son siempre las mismas: tome estas características o estas formas de onda para estos pacientes. Eso es.

Importar los datos a algunos DBMS no sería tan útil. De hecho, incluso sería una carga recuperar los datos, ya que el tamaño era bastante grande (más de 1 TB) y podría crecer a medida que agregamos más funciones.

Entonces, en este segundo caso, decidimos usar archivos planos, con algunas carpetas para agrupar por pacientes / características.

Pero ahora estamos pensando en incorporar datos de pacientes más complejos, como los datos demográficos o lo que les sucede durante la estadía en la UCI, y nos gustaría ver cómo se comportan sus formas de onda dependiendo de las condiciones. A medida que los datos nos hemos vuelto más complejos, estamos considerando un formato más estructurado.

Entiendo que la pregunta es más sobre cómo se almacenan los bytes, en lugar del formato de serialización o el protocolo de acceso.

Dada mi línea de trabajo, estoy acostumbrado a que la respuesta sea “en HDFS”. Ciertamente, si tiene la intención de hacer un procesamiento distribuido en los datos, tiene valor tener los datos ya divididos entre los trabajadores, lo que ahorra movimiento de datos. Aunque más habitualmente la ventaja de HDFS, en los casos de uso a los que estoy acostumbrado, no es su naturaleza distribuida sino el hecho de que los datos simplemente ya están allí, almacenados por algún proceso ETL anterior.

Más allá de eso, el resto de mi comentario proviene de estar acostumbrado a cargar datos en la memoria para trabajar en ellos. En memoria es rápido y fácil, por supuesto. A escala, lo rápido es importante. O su conjunto de datos ya cabe en la memoria o ha tenido que paralelizar a un nivel superior para que la operación funcione en un subconjunto en la memoria. Este es el patrón básico en Hadoop, donde cada vez es más común hacer cargas laterales incómodas o ‘uniones en el lado del mapa’ en la memoria, y es parte de la razón por la cual los futuros marcos de cómputo en Hadoop además del diseño M / R son mucho más compatibles con largo tiempo. Vivió estructuras de datos en memoria.

Entonces, si los datos van a la memoria de todos modos, su almacenamiento no hace mucha diferencia. Un RDBMS no es ventajoso sobre un archivo plano, ya que ambos se leerán secuencialmente de todos modos. De hecho, solo tiene gastos generales. De hecho, HDFS se optimiza en gran medida para lecturas / escrituras secuenciales, y esto está bastante bien.

Cualquier arquitectura que dependiera de un gran acceso aleatorio a los datos en una base de datos de cualquier tipo sería demasiado lenta para competir.

Pienso en las arquitecturas para la computación en grandes máquinas multinúcleo como algo intermedio. A menudo se vuelven inteligentes acerca de cómo tocan estructuras de datos masivas en la memoria para que solo se necesite un pequeño conjunto de trabajo en la RAM. Esto significa que pueden extender RAM masiva con un espacio de intercambio aún más masivo para una gran escala. Pero debajo hay cierto grado de acceso aleatorio a los datos almacenados, aunque locales, optimizados y diseñados con criterio.

Así que creo que debería decir que la respuesta es básicamente “en archivos planos” que podrían distribuirse.

Si quiere decir formatos, en el nivel inferior, estoy acostumbrado a ver serializaciones simples basadas en texto (CSV, JSON) para una máxima interoperabilidad, en la entrada / salida de los trabajos de ML. Dentro del trabajo, las salidas intermedias son formatos binarios personalizados o formatos binarios comprimidos estructurados como Avro.

En realidad, nunca he leído / escrito formatos como svmlight para vectores, o cualquier formato especial como los utilizados por R.

El patrón que he observado, pero no necesariamente estoy de acuerdo, es el siguiente: hasta 2 gb de archivos planos son bastante comunes. De 1 gb a 100 gb, las bases de datos relacionales como SQL tienden a ser bastante comunes. Alrededor del nivel de 50 gb, a menudo comienza a ver bases de datos orientadas a documentos como MongoDB. Con más de 5 TB, estás bastante atrapado usando Hadoop, aunque muchas compañías comienzan a usar Hadoop en el nivel de 100 gb.

Personalmente, creo que las empresas deberían estar mucho más dispuestas a usar archivos planos incluso en tamaños más grandes, y que muchas más personas deben comprender que la diferencia entre las bases de datos relacionales y las orientadas a documentos no se trata del tamaño del archivo, sino de los requisitos de estructura y consistencia.

Depende de la estructura de sus datos, las herramientas que desea utilizar y la velocidad requerida para procesarlos. Por lo general, para los tamaños que menciona, los datos estructurados se almacenan mejor en una base de datos relacional y los datos no estructurados o semiestructurados en una base de datos o archivos NoSQL.

No puedo responder por “la mayoría” pero puedo responder por “los conjuntos de datos que uso”. Los guardo en el formato que requiere la herramienta que estoy usando. Con frecuencia, los datos se originarán en un archivo CSV o SPSS. A veces, accedo a través de una conexión ODBC o JDBC, dependiendo, nuevamente, de la herramienta que estoy usando.