súper cómputo a bajo costo utilizando javascript

62
Súper cómputo a bajo costo utilizando JavaScript Mario García Valdez @mariogarciav

Upload: mario-garcia-valdez

Post on 22-Jan-2018

344 views

Category:

Science


3 download

TRANSCRIPT

Page 1: Súper cómputo a bajo costo utilizando JavaScript

Súper cómputo a bajo costo utilizando JavaScript

Mario García Valdez @mariogarciav

Page 2: Súper cómputo a bajo costo utilizando JavaScript

Súper ComputoEs la utilización de computadoras con capacidades extraordinarias para la realización de investigación en diversas áreas del conocimiento.

Page 3: Súper cómputo a bajo costo utilizando JavaScript
Page 4: Súper cómputo a bajo costo utilizando JavaScript
Page 5: Súper cómputo a bajo costo utilizando JavaScript

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.

Page 6: Súper cómputo a bajo costo utilizando JavaScript

➤ 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/

Page 7: Súper cómputo a bajo costo utilizando JavaScript

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/

Page 8: Súper cómputo a bajo costo utilizando JavaScript
Page 9: Súper cómputo a bajo costo utilizando JavaScript
Page 10: Súper cómputo a bajo costo utilizando JavaScript
Page 11: Súper cómputo a bajo costo utilizando JavaScript
Page 12: Súper cómputo a bajo costo utilizando JavaScript

¿Súper Computadoras?

Page 13: Súper cómputo a bajo costo utilizando JavaScript

¿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

Page 14: Súper cómputo a bajo costo utilizando JavaScript

¿Súper Computadoras de bajo costo? Un Cluster

Page 15: Súper cómputo a bajo costo utilizando JavaScript

¿Súper Computadoras de bajo costo? Un Cluster

Page 16: Súper cómputo a bajo costo utilizando JavaScript

Servicios Cloud - Free Tier

Page 17: Súper cómputo a bajo costo utilizando JavaScript

Servicios Cloud - Free Tier / Low Cost

Page 18: Súper cómputo a bajo costo utilizando JavaScript

Servicios Cloud - Free Tier

Page 19: Súper cómputo a bajo costo utilizando JavaScript

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.

Page 20: Súper cómputo a bajo costo utilizando JavaScript

Volunteer Computing

Page 21: Súper cómputo a bajo costo utilizando JavaScript

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.

Page 22: Súper cómputo a bajo costo utilizando JavaScript

Es una heurística de búsqueda la cual imita el proceso de selección natural

COMPUTACIÓN EVOLUTIVA (PROBLEMA)

Page 23: Súper cómputo a bajo costo utilizando JavaScript

Útiles cuando buscamos posibles soluciones en un espacio de búsqueda.

Cuando optimizamos.

Page 24: Súper cómputo a bajo costo utilizando JavaScript

ONEMAX

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]

Page 25: Súper cómputo a bajo costo utilizando JavaScript

ONEMAX

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]ONEMAX ( ) 15

Page 26: Súper cómputo a bajo costo utilizando JavaScript

ONEMAX

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]ONEMAX ( ) 15

ONEMAX ( )[ 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 10 10 ] 20

Page 27: Súper cómputo a bajo costo utilizando JavaScript

ONEMAX

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]ONEMAX ( ) 15

ONEMAX ( )[ 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 10 10 ] 20

ONEMAX ( )[ 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 10 10 ] 11

Page 28: Súper cómputo a bajo costo utilizando JavaScript

ONEMAX

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]ONEMAX ( ) 15

ONEMAX ( )[ 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 10 10 ] 20

ONEMAX ( )[ 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 10 10 ] 11 262 = 67,108,864

Page 29: Súper cómputo a bajo costo utilizando JavaScript

ONEMAX

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]

[ 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]ONEMAX ( ) 15

ONEMAX ( )[ 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 10 10 ] 20

ONEMAX ( )[ 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 10 10 ] 11

ONEMAX ( )[ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ] 26

262 = 67,108,864

Page 30: Súper cómputo a bajo costo utilizando JavaScript

POBLACIÓN

[ 0 0 0 0 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 10 0 0 ]

[ 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]

[ 1 0 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 10 10 ]

[ 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 10 10 ]

[ 0 0 0 0 1 0 1 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 10 0 0 ]

[ 0 0 0 0 0 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 10 10 ]

[ 1 0 1 0 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 0 1 10 10 ]

[ 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 1 1 1 10 10 ]

Page 31: Súper cómputo a bajo costo utilizando JavaScript

EVALUACIÓN FUNCIÓN DE APTITUD = ONEMAX( )

[ 0 0 0 0 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 10 0 0 ]

[ 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]

[ 1 0 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 10 10 ]

[ 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 10 10 ]

[ 0 0 0 0 1 0 1 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 10 0 0 ]

[ 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 ]

[ 0 0 0 0 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 10 ]

[ 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 1 1 1 10 10 ]

9

13

18

11

10

7

17

10

Page 32: Súper cómputo a bajo costo utilizando JavaScript

SELECCIÓN

[ 0 0 0 0 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 10 0 0 ]

[ 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 0 1 0 10 10 ]

[ 1 0 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 10 10 ]

[ 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 10 10 ]

[ 0 0 0 0 1 0 1 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 10 0 0 ]

[ 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 ]

[ 1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 0 0 0 0 10 ]

[ 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 1 1 1 10 10 ]

9 13

18

11

10

7

17

10

Page 33: Súper cómputo a bajo costo utilizando JavaScript

CRUCE

[ 1 0 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 10 10 ] 18

17[ 1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 0 0 0 0 10 ]

19

16

[1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 10 10]

[1 0 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 0 0 0 0 10]

Page 34: Súper cómputo a bajo costo utilizando JavaScript

MUTACIÓN

[1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 10 10]

[1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 10 10]

Page 35: Súper cómputo a bajo costo utilizando JavaScript

NUEVA POBLACIÓN - GEN 2

[ 0 0 0 0 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 10 0 0 ]

[ 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 0 1 0 10 11 ]

[ 1 0 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 10 10 ]

[ 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 10 10 ]

[ 0 0 0 0 1 0 1 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 10 0 0 ]

[ 0 0 0 0 0 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 10 10 ]

[1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 10 10]

[ 1 0 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 0 0 0 0 10 ]

Page 36: Súper cómputo a bajo costo utilizando JavaScript

NUEVA POBLACIÓN - GEN N

[ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ]

[ 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 10 11 ]

[ 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 0 0 1 1 1 1 10 10 ]

[ 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 0 1 0 10 10 ]

[1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 10 10]

[ 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 10 ]

[ 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 0 1 0 10 10 ]

[ 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 0 1 0 10 10 ]

Page 37: Súper cómputo a bajo costo utilizando JavaScript

¿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

Page 38: Súper cómputo a bajo costo utilizando JavaScript

¿Y SI USAMOS EL NAVEGADOR?

➤ JAVA Applets

➤ Flash, ActionScript

➤ VBScript

➤ ActiveX

Page 39: Súper cómputo a bajo costo utilizando JavaScript

PROPUESTA

➤ Una solución basada completamente en JavaScript, para implementar experimentos de cómputo evolutivo voluntario.

Page 40: Súper cómputo a bajo costo utilizando JavaScript

JAVASCRIPT¿ ?

PROPUESTA

JAVA C++

FORTRANMATLAB

C

Page 41: Súper cómputo a bajo costo utilizando JavaScript

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.

Page 42: Súper cómputo a bajo costo utilizando JavaScript

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.

Page 43: Súper cómputo a bajo costo utilizando JavaScript
Page 44: Súper cómputo a bajo costo utilizando JavaScript

A PROBAR

➤ Escalabilidad

➤ Heterogéneo

➤ Tolerancia a fallos

➤ Adaptativo

➤ Desempeño

➤ Comportamiento de los Voluntarios

Page 45: Súper cómputo a bajo costo utilizando JavaScript

NodEO

Page 46: Súper cómputo a bajo costo utilizando JavaScript

NodEO

function Chromosome(string,fitness){ this.string = string; this.fitness = fitness; // functions this.invert = invert; this.mutate = mutate; this.crossover=crossover; this.reproduction=reproduction; }

Page 47: Súper cómputo a bajo costo utilizando JavaScript

NodEO

eo = new Nodeo( { population_size: population_size, chromosome_size: chromosome_size, fitness_func: trap_fitness } );

Page 48: Súper cómputo a bajo costo utilizando JavaScript

NodEO

(function do_ea() {

eo.generation();

generation_count++;

if ( (generation_count % 100 === 0) ) {

do_periodic_stuff()

}

if( (eo.fitness_of[eo.population[0]] < traps*conf.fitness.b )

&& ( generation_count*conf.population_size < conf.max_evaluations)) {

setTimeout(do_ea, 5);

} else {

we_are_done();

}

})();

Page 49: Súper cómputo a bajo costo utilizando JavaScript
Page 50: Súper cómputo a bajo costo utilizando JavaScript

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.

Page 51: Súper cómputo a bajo costo utilizando JavaScript

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.

Page 52: Súper cómputo a bajo costo utilizando JavaScript

NodIO-W2

➤ Los clientes utilizan HTML Web Workers.

➤ Re-inician el experimento al encontrar un óptimo.

NodEO

Page 53: Súper cómputo a bajo costo utilizando JavaScript

NodEO-W2

Page 54: Súper cómputo a bajo costo utilizando JavaScript

IPS VS TIEMPO ONEMAX

Page 55: Súper cómputo a bajo costo utilizando JavaScript

FUNCIÓN RASTRIGIN

Page 56: Súper cómputo a bajo costo utilizando JavaScript

FUNCIÓN RASTRIGIN

Page 57: Súper cómputo a bajo costo utilizando JavaScript

WEIBULL FIT GEV FIT

Page 58: Súper cómputo a bajo costo utilizando JavaScript
Page 59: Súper cómputo a bajo costo utilizando JavaScript
Page 60: Súper cómputo a bajo costo utilizando JavaScript

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.

Page 61: Súper cómputo a bajo costo utilizando JavaScript

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 Workershttps://github.com/mariosky/splash-volunteer

Comunidad JavaScript Tijuana:http://tijuanajs.org/

[email protected] @mariogarciav

Page 62: Súper cómputo a bajo costo utilizando JavaScript

GRACIAS POR SU ATENCIÓN