Charla sobre mi experiencia desarrollando algoritmos evolutivos distribuidos. En particular el uso de JavaScript para sacar provecho de los recursos compartidos por voluntarios, a través de su navegador.
1. Súper cómputo a bajo costo
utilizando JavaScript
Mario García Valdez
@mariogarciav
2. Súper Computo
Es la utilización de computadoras con
capacidades extraordinarias para la
realización de investigación en diversas
áreas del conocimiento.
3.
4.
5. Worldwide LHC Computing Grid
➤ El Gran Colisionador de Hadrones (LHC) se construyó
para probar la existencia del Bosón de Higgs.
➤ Los experimentos arrojan datos en cantidades sin
precedentes.
➤ Los sensores arrojan 300 GByte/s.
➤ Después del filtrado quedan al rededor de 300 MByte/s.
➤ El proyecto genera 27 TB de datos al día.
➤ En 2012 consistía en 170 centros de computo en 36 países.
➤ En 2010 eran 200,000 núcleos y 150 petabytes de disco
duro.
6. ➤ Es una aplicación que simula 60 partículas viajando alrededor
del aro del LHC.
➤ Esta simulación se realiza para 100,000 vueltas.
➤ Ayuda a ajustar los componentes para mantener las órbitas en
curso.
http://lhcathome.web.cern.ch/
7. Berkeley Open Infrastructure for Network Computing (BOINC)
➤ Es un sistema an open-source para computación
voluntaria y grid.
➤ La intención de este proyecto es obtener una capacidad
de computación enorme utilizando computadores
personales alrededor del mundo.
http://boinc.berkeley.edu/
13. ¿Súper Computadoras de bajo costo?
http://www.nvidia.com/object/why-choose-tesla.html#sthash.5yLozfYP.dpuf
Tesla K80 GPU
➤ Desempeño de hasta 2.91 TFlops en
doble precisión.
➤ Hasta 8.74 TFlops en precisión simple.
➤ Memoria interna de 24 GB.
➤ Aprox. $4000.00
➤ Con 10 tenemos medio Miztli
19. Volunteer Computing
Un conjunto de herramientas que permiten
a los ciudadanos donar ciclos de sus CPUs
a aplicaciones que permiten la ejecución
de algún experimento.
21. Computación Voluntaria
➤ Los Voluntarios son anónimos.
➤ Como entidades anónimas no podemos reprenderlos o
hacerlos responsables.
➤ Los voluntarios deben confiar en los proveedores de las
aplicaciones.
➤ Después de todo bajaremos un programa que actuará
como un malware.
22. Es una heurística de búsqueda la cual imita el proceso de selección natural
COMPUTACIÓN EVOLUTIVA (PROBLEMA)
23. Útiles cuando buscamos posibles soluciones en un espacio de búsqueda.
Cuando optimizamos.
37. ¿SÚPER CÓMPUTO EVOLUTIVO?
➤ Los algoritmos evolutivos son bochornosamente
paralelizables.
➤ El costo de computo más elevado está en la función de
aptitud.
➤ Algunos problemas requieren alto poder de procesamiento,
incluso para problemas académicos.
➤ Por ejemplo: OneMax de 106
bits.
➤ Existen muchas variantes distribuidas del algoritmo:
➤ Multi-Islas
➤ Basados en Pool
38. ¿Y SI USAMOS EL NAVEGADOR?
➤ JAVA Applets
➤ Flash, ActionScript
➤ VBScript
➤ ActiveX
39. PROPUESTA
➤ Una solución basada completamente en JavaScript, para
implementar experimentos de cómputo evolutivo voluntario.
41. JAVASCRIPT
➤ En todos lados.
➤ No requiere instalación de alguna VM, Plugin o software.
➤ Relativamente rápido.
➤ Compilador JIT para V8.
➤ En todo el stack, gracias a node.js.
➤ Buenas herramientas de desarrollo, depuradores, editores,
gestores de bibliotecas, una comunidad activa.
➤ Los Web Workers de HTML 5 permiten explotar los hilos del
CPU.
➤ Ciudadano de primera en Heroku, Azure, Openshift, etc.
42. JAVASCRIPT
➤ Inmaduro para cómputo científico, no hay muchas bibliotecas.
➤ El método de generación de números Random varía según el
navegador.
➤ La precisión y los cálculos también pueden variar.
➤ Poca aceptación por parte de la comunidad, se piensa en el
lenguaje solo para validar páginas Web.
➤ No es Java, C, Fortran, Python, R o Matlab.
43.
44. A PROBAR
➤ Escalabilidad
➤ Heterogéneo
➤ Tolerancia a fallos
➤ Adaptativo
➤ Desempeño
➤ Comportamiento de los Voluntarios
50. NodIO: Computación Voluntaria utilizando NodEO
➤ Un servidor REST
➤ Varias rutas para almacenar y recuperar información.
➤ Utiliza JSON como formato de comunicación cliente-servidor.
➤ Sobre el EA:
PUT, GET chromosome, GET random
➤ Sobre el experimento:
Generación Actual, Mejor cromosoma
➤ Bitácora
➤ Ejecuta varios experimentos.
51. NodIO: Computación Voluntaria utilizando NodEO
➤ Muchos Clientes, cada uno:
➤ Incluye un algoritmo en NodEO
➤ Despliega gráficas e información del experimento.
➤ El algoritmo puede considerarse una isla, que crea su propia
población.
➤ Cada 100 generaciones envía al mejor cromosoma al server.
➤ Después del envío, solicita un cromosoma aleatorio.
➤ Si se encuentra el cromosoma óptimo el experimento termina.
52. NodIO-W2
➤ Los clientes utilizan HTML Web Workers.
➤ Re-inician el experimento al encontrar un óptimo.
NodEO
60. DETALLES DE LA IMPLEMANTACIÓN RASTRIGIN PESADA
➤ Randomize
➤ Matlab y Java utilizan la biblioteca Java Randomizer para generar Gausianas pseudo aleatorias
de precisión double.
➤ Se utilizó random-js ya que la implementación de Math.random() tiene inconsistencias y es no
determinista.
➤ Funciones de timing.
➤ Para evaluar el tiempo de ejecución a veces se utiliza la clase Date pero su resolución llega a los
milisegundos.
➤ Para las medidas se utilizaron dos funciones, para node.js la función nativa process.hrtime()
nanosegundos y Performance.now() con microsegundos. (Firefox y Chrome).
➤ Herramientas Disponibles:
➤ npm, debupuradores, log (winston), monitores de red, monitoreo de Web Workers.
➤ Tipos de datos:
➤ Números flotantes con una precisión de 64 bits que implementan parcialmente la biblioteca
StrictMath de Java.
➤ Si se requiere de mayor precisión se puede utilizar math.js para matrices y big numbers.
61. LINKS
CÓDIGO FUENTE Y ARTICULOS
https://github.com/JJ/modeling-volunteer-computing.
https://github.com/JJ/splash-volunteer
Implementación temporal (fork) con Web Workers
https://github.com/mariosky/splash-volunteer
Comunidad JavaScript Tijuana:
http://tijuanajs.org/
mariosky@gmail.com
@mariogarciav