Aprendizaje Automático sobre
Grandes Volúmenes de Datos

Clase 13

Pablo Ariel Duboue, PhD

Universidad Nacional de Córdoba,
Facultad de Matemática, Astronomía y Física
figura escudo.png

None.1 Décima Tercera Clase: Métodos Alternativos

None.1.1 Clase anterior

Material de lectura
Preguntas
Recordatorio

None.2 Clase Anterior

Temas Claves
Descomposición LU
figura fig310.png
(adaptado de Xiang Jingen, 2013)
Descomposición LU en MR
figura lu.png
(adaptado de Xiang Jingen, 2013)
Descomposición LU en MR
figura fig313.png
(adaptado de Xiang Jingen, 2013)
El algoritmo a vuelo de pájaro
Implementación en MapReduce
  1. Nodo master crea archivos de control que son usados como entrada a las tareas map subsecuentes
    • Falsas entradas
  2. Una tarea MapReduce subdivide A de manera recursiva
  3. Se envian tareas MapReduce para L2, U2 y B
    • L1 y U1 son ejecutadas en el master node si A1es lo suficientemente pequeña
Número de Tareas
figura fig32.png
(adaptado de Xiang Jingen, 2013)
Ejecución
figura fig34.png
(adaptado de Xiang Jingen, 2013)

None.3 Descenso por el gradiente distribuido

Zinkevich et al., NIPS 2010
Algoritmo en nodo worker
figura algoritmo1.png
(adaptado de Zinkevich et al, 2010)
Algoritmo en nodo central
figura algoritmo2.png
(adaptado de Zinkevich et al, 2010)

None.4 Método de Dirección Alternada de Multiplicadores

Dirección Alternada de Multiplicadores
minimizar f(x) + g(z) dado que Ax + Bz = c

None.5 Métodos Alternativos

MPI
MPI
Decisiones de diseño
Implementación de ejemplo: MPICH
Ejemplo
#include <mpi.h>
#include <stdio.h>
int main(int argc, char ** argv) {
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
printf("I am %d of %d\n", rank + 1, size);
MPI_Finalize();
return 0;
}
Adapted from http://www.mcs.anl.gov/~balaji/permalinks/2014-06-06-argonne-mpi-basic.pptx
Diferencia con MapReduce
Message Queues
Advanced Message Queuing Protocol (AMQP)
Especificación AMQP
ActiveMQ
Ejemplo
String user = env("ACTIVEMQ_USER", "admin");
String password = env("ACTIVEMQ_PASSWORD", "password");
String host = env("ACTIVEMQ_HOST", "localhost");
int port = Integer.parseInt(env("ACTIVEMQ_PORT", "61616"));
String destination = arg(args, 0, "event");
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://" + host + ":" + port);
Connection connection = factory.createConnection(user, password);
connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = new ActiveMQTopic(destination);
MessageProducer producer = session.createProducer(dest);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
TextMessage msg = session.createTextMessage(body);
msg.setIntProperty("id", 1); producer.send(msg);
producer.send(session.createTextMessage("SHUTDOWN")); connection.close();
AMQP vs. MapReduce