Grupo de Facebook Gephi
Consulta al grupo
¿Cómo calcular la modularidad en redes grandes? Mi red tiene 240 mil nodos y 57 millones de enlaces. La exploración funciona bien, pero cuando intento calcular la modularidad consigo el mensaje de la memoria.¿Hay una forma menos intensiva de recursos para calcular la modularidad fuera de Gephi? ¿O es Gephi ya la opción más eficiente y necesito actualizar mi equipo o usar algún servicio en la nube?
Actualización: Aumentar el límite de memoria más allá de la RAM disponible funcionó. Más soluciones en los comentarios.
Respuesta 1
El kit de herramientas de Gephi sería más indicado aquí. En otras palabras, usted necesita la codificación sin una interfaz gráfica de usuario creo.Respuesta 2
No es una idea muy especial, pero ampliar la RAM con un poco más de GB también podría ayudar.- Ya se ha actualizado a 32 GB y no quedan huecos. Probablemente mejorará la computadora antes de reemplazar los memorias DDR3.
Respuesta 3
1. Puede intentar subir la memoria en el archivo de configuración de Gephi en etc / gephi.conf simplemente estableciendo el límite de memoria a 100 GB o incluso más alto. Incluso si usted no tiene esa cantidad de RAM instalada físicamente en su computadora, los cálculos de modularidad pueden ser terminados en un tiempo razonable. He publicado algunos detalles anteriormente en este post:2. Podría probar el software iGraph. Sin embargo, se requiere experiencia en programación. Tiene bibliotecas C / C ++, Python y R disponibles. Se debe googlear "igraph louvain". En todos los paquetes de R / C / Python hay múltiples algoritmos de computación de modularidad - el método de Lovaina es el mejor. Sin embargo, cada biblioteca utiliza un nombre diferente para el método. En el paquete Python se llama community_multilevel, en C es igraph_community_multilevel, y en R cluster_louvain.
No he usado iGraph yo mismo pero parece bueno. Examinar la documentación también muestra que puede importar y exportar el formato de archivo de Gephi (GEXF al menos, probablemente otros también).
Google más acerca de iGraph + Gephi si tiene experiencia en programación.
3. Usted puede google para "Louvain método modularidad" para más implementaciones - He visto algunas implementaciones simples de C antes. El mayor problema suele ser la conversión entre diferentes formatos de archivo. Es extremadamente frustrante sólo para convertir archivos de entrada a un formato correcto, a continuación, la salida puede ser uno o más archivos. Entonces estos necesitan convertir de nuevo a Gephi. No es un enfoque recomendado!
El parámetro que utilizaría en etc / gephi.conf es "-Xmx100G". Obviamente es bueno entender cómo funciona la memoria del ordenador - no es sólo un número mágico para resolver todos los problemas de memoria.
La modificación de tutoriales de ejemplo de Gephi Toolkit también es bastante fácil si tienes experiencia previa en programación. Ya ha encontrado las partes necesarias en la sección de ejemplo. Ahora solo tendrías que conseguirlo para compilar y ejecutar - que puede ser tedioso si ocurren errores extraños. Después de la compilación de éxito + ejecutarlo debería ser bastante fácil incluso para un programador principiante para copiar y pegar los ejemplos de código relevantes de los ejemplos de Gephi Toolkit y obtener un ejecutable ejecutable Java sin cabeza. ¡Buena suerte!
Respuesta 4
Sólo se está quedando sin memoria porque el tiempo de ejecución de Java está limitando el tamaño de montón máximo. Una vez que el límite de memoria se eleva - incluso por encima de la RAM física instalada - el algoritmo puede ejecutarse. Si la memoria física se agota, el sistema operativo utilizará pagefile / swapfile / paging virtual que a menudo hace las cosas más lentas. La lentitud es causada por el sistema operativo escribiendo y leyendo cosas del disco en lugar de RAM. Hoy en día con rápidas SSD unidades esto no es necesariamente tan malo de un problema. Incluso si el disco era disco duro antiguo, el procesamiento podría continuar aunque sea más lento. Es fácil comprobar si funciona o no modificando el parámetro Xmx en etc / gephi.conf.
Respuesta 5
Haciendo swap es seguro, y sí las SSDs son agradables, pero aún órdenes de magnitud más lento que RAM. Sería bueno tener un análisis de la memoria necesaria antes de cambiar la configuración, si se tarda minutos, horas o lo que sea para ejecutar el cálculo. No tengo ni idea de la complejidad espacial de Louvain, ni de cuánto Gephi / JVM usa para vértices y aristas en este caso, o en general
Respuesta 6
¿Es su red ponderada o no - es decir, ¿tienen los enlaces con peso o fuerza? La cantidad de enlaces parece alta en contraste con la cantidad de nodos.
Si puede simplificar la red cortando algunos de los enlaces, podría ser más factible calcular la modularidad. Simplemente eliminando los enlaces con poco peso (enlaces irrelevantes) podría simplificar la red, pero aún así mantener la estructura de la comunidad subyacente intacta.
Recuerde que el algoritmo de modularidad no es óptimo en ningún caso. Simplificar la red eliminando los enlaces no significa necesariamente "perder información" de ella.
Háganos saber si descubre una manera de gestionar esa red.
- Es una red de seguidores de Twitter, por lo que los enlaces no están ponderados. Lo que hice para que funcione, sólo estaba utilizando los enlaces de las personas que siguen menos de 1 000 cuentas.
- Pero quiero hacerlo funcionar con los enlaces de las personas que siguen hasta 10 000 cuentas.
Yo uso la modularidad para dividir la red en más pequeños ya que esto funcionó bastante bien en el pasado. Pero siempre estoy abierto a mejores métodos
Respuesta 7
Una idea más sobre la computación modular en grandes redes. Encontré un plugin / tutorial para insertar datos en la base de datos de gráficos Neo4j y luego usar un plugin para calcular la modularidad en él. Los detalles están en el algoritmo Smart Local Moving (SLM), pero la implementación incluye también el algoritmo de maximización de la modularidad de Louvain.
Hay un tutorial para hacer esto aquí
Gephi tiene plugin de integración de Neo4j - podría ser incorporado en realidad. De esta manera usted podría ser capaz de calcular la modularidad en la base de datos Neo4j e importar los datos de Neo4j a Gephi a través de la consulta.
- Como solución rápida establecí el límite de memoria a 200G. Actualizaré el aquí cómo fue. Para el futuro examinaré Gephi Toolkit y Neo4j. Gracias a todos.
Respuesta 8
Aumentar el límite de memoria mucho más allá (200 GB) de la RAM disponible (32 GB) trabajado. Lo dejé correr durante la noche, así que no sé cuánto tiempo tomó, pero fue menos de 10 horas. Se escribió 550GB a la SSD.Especificaciones para los interesados:
- i5 4670k con una velocidad de reloj de 4,5 GHz
- 32 GB de RAM a 1866 GHz
- Samsung 850 EVO 500GB SSD