Está en la página 1de 7

Machine Learning Distribuido con Servidor de Parametros

Estudiante:
Navio Torres Jose
e-mail: jnavio@uni.pe

Curso:
CC4P1 Programación Concurrente y Distribuida

Abstract
El paper data del 2014, y propone un framework de servidor de parámetros para problemas
de machine learning en sistemas distribuidos. Tanto los datos (dataset) como las cargas de trabajo
se distribuyen entre los nodos trabajadores (workers) mientras que los nodos del servidor mantienen
parámetros compartidos globalmente, representados como matrices y vectores densos o dispersos. El
framework gestiona la comunicación de datos ası́ncrona entre nodos y admite modelos de coherencia
flexible, escalabilidad elástica, y tolerancia a fallos. El costo de la sincronización y la latencia de la
máquina es alto y la tolerancia a fallas continua.
Keywords: Machine Learning, Servidor de Parametros.

Contents
1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1 Contribuciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Desafı́os de Ingenierı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Machine Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3 Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.1 Vectores (Key/Value) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2 Rango de Push y Pull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3 Dependencias y tareas asincrónicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.4 Consistencia flexible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4 Discusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

5 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1
1 Introducción
La optimización y la inferencia distribuidas se están convirtiendo en un requisito previo para resolver
problemas de machine learning a gran escala. Ninguna máquina independiente puede resolver estos
problemas con la suficiente rapidez, debido al crecimiento de los datos y la complejidad del modelo
resultante, que a menudo se manifiesta en un mayor número de parámetros. Sin embargo, implementar
un algoritmo distribuido eficiente no es fácil. Tanto las cargas de trabajo computacionales intensivas
como el volumen de comunicación de datos exigen un diseño cuidadoso del sistema.
Las cantidades realistas de datos de entrenamiento pueden oscilar entre 1 TB y 1 PB. Esto permite
crear modelos potentes y complejos con 109 a 1012 parámetros. Estos modelos a menudo son compar-
tidos globalmente por todos los nodos trabajadores, que deben acceder con frecuencia a los parámetros
compartidos mientras realizan el cálculo para refinarlos. Compartir el modelo impone tres desafı́os:

1. El acceso a los parámetros requiere una enorme cantidad de ancho de banda de red.
2. Muchos algoritmos de machine learning son secuenciales. Las barreras resultantes perjudican el
rendimiento cuando el costo de la sincronización y la latencia de la máquina son altos.
3. A escala, la tolerancia a fallas es fundamental. Las tareas de aprendizaje a menudo se realizan
en un entorno de nube donde las máquinas pueden no ser confiables y los trabajos pueden ser
reemplazados.

1.1 Contribuciones
El paper es una tercera generación de la arquitectura de servidor de parámetros, enfocado hacia la
problematica de algoritmos de machine learning. Las mejoras propuestas son:
1. Comunicación eficiente: el modelo de comunicación ası́ncrona no bloquea el cálculo (a menos que
se solicite). Está optimizado para tareas de machine learning para reducir el tráfico y la sobrecarga
de la red.
2. Modelos de coherencia flexible: la coherencia relajada oculta aún más el costo de sincronización y la
latencia. Permitimos que el diseñador de algoritmos equilibre la tasa de convergencia algorı́tmica y
la eficiencia del sistema. La mejor compensación depende de los datos, el algoritmo y el hardware.
3. Escalabilidad elástica: se pueden agregar nuevos nodos sin reiniciar el framework en ejecución.
4. Tolerancia a fallas y durabilidad: Recuperación y reparación de fallas de máquinas no catastróficas
en 1 segundo, sin interrumpir el cálculo. Los relojes vectoriales garantizan un comportamiento bien
definido después de una partición de red y una falla.
5. Facilidad de uso: los parámetros compartidos globalmente se representan como vectores y matrices
(potencialmente dispersos) para facilitar el desarrollo de aplicaciones de machine learning. Los tipos
de datos de álgebra lineal vienen con bibliotecas de subprocesos múltiples de alto rendimiento.

1.2 Desafı́os de Ingenierı́a


Al resolver problemas de análisis de datos distribuidos, el problema de leer y actualizar parámetros
compartidos entre diferentes nodos trabajadores es omnipresente. El framework del servidor de parámetros
proporciona un mecanismo eficaz para agregar y sincronizar los parámetros del modelo y las estadı́sticas
entre los trabajadores. Cada nodo del servidor de parámetros mantiene solo una parte de los parámetros,
y cada nodo trabajador generalmente requiere solo un subconjunto de estos parámetros cuando está en
funcionamiento. Surgen dos desafı́os clave en la construcción de un sistema de servidor de parámetros de
alto rendimiento:
1. Comunicación. Si bien los parámetros podrı́an actualizarse como pares clave-valor en un almacén de
datos convencional, usar esta abstracción ingenuamente es ineficaz: los valores suelen ser pequeños
(flotantes o enteros) y la sobrecarga de enviar cada actualización como una operación de valor clave
es alta. La idea para mejorar esta situación proviene de la observación de que muchos algoritmos

2
de aprendizaje representan parámetros como objetos matemáticos estructurados, como vectores,
matrices o tensores. En cada momento lógico (o iteración), normalmente se actualiza una parte del
objeto. Es decir, los trabajadores suelen enviar un segmento de un vector o una fila de la matriz.
Esto brinda la oportunidad de agrupar automáticamente tanto la comunicación de actualizaciones
como su procesamiento en el servidor de parámetros, y permite que el seguimiento de coherencia
se implemente de manera eficiente.
2. La tolerancia a fallos, como se señaló anteriormente, es crı́tica a escala y para un funcionamiento
eficiente, no debe requerir un reinicio completo de un cálculo de larga duración. Replicación en vivo
de parámetros entre servidores admite la conmutación por error en caliente. La conmutación por
error y la reparación automática, a su vez, respaldan el escalado dinámico al tratar la eliminación
o adición de la máquina como falla o reparación, respectivamente.

2 Machine Learning
Los sistemas de machine learning se utilizan ampliamente en búsqueda web, detección de spam,
sistemas de recomendación, publicidad computacional y análisis de documentos. Estos sistemas aprenden
automáticamente modelos a partir de ejemplos, denominados datos de entrenamiento, y normalmente
constan de tres componentes: extracción de caracterı́sticas, función objetivo y aprendizaje. La extracción
de caracterı́sticas procesa los datos de entrenamiento sin procesar, como documentos, imágenes y registros
de consultas del usuario, para obtener vectores de caracterı́sticas, donde cada caracterı́stica captura un
atributo de los datos de entrenamiento. El preprocesamiento se puede ejecutar de manera eficiente
mediante frameworks existentes como MapReduce.
El objetivo de muchos algoritmos de aprendizaje automático se puede expresar mediante una ”función
objetivo”. Esta función captura las propiedades del modelo aprendido, como un error bajo en el caso de
clasificar correos electrónicos en spam, qué tan bien se explican los datos en el contexto de la estimación
de temas en documentos, o un resumen conciso de conteos en el contexto de bosquejar datos.
El algoritmo de aprendizaje generalmente minimiza esta función objetivo para obtener el modelo.
En general, no existe una solución de forma cerrada; en cambio, el aprendizaje comienza a partir de un
modelo inicial. Refina iterativamente este modelo procesando los datos de entrenamiento, posiblemente
varias veces, para acercarse a la solución. Se detiene cuando se encuentra una solución (casi) óptima o
se considera que el modelo es convergente.
Los datos de entrenamiento pueden ser extremadamente grandes. El procesamiento iterativo de datos
a gran escala requiere enormes recursos informáticos y de ancho de banda. Agregar estos datos al sistema
a menudo mejora tanto la precisión como la cobertura de la predicción. Pero también requiere que el
algoritmo de aprendizaje se ejecute diariamente, posiblemente en tiempo real. La ejecución eficiente de
estos algoritmos es el enfoque principal de este artı́culo.
La minimización de riesgos regularizada es un método para encontrar un modelo que equilibre la
complejidad del modelo y el error de entrenamiento. Lo hace minimizando la suma de dos términos:
una pérdida loss l(x, y, w) que representa el error de predicción en los datos de entrenamiento y un
regularizador Ω[w] que penaliza la complejidad del modelo. Un buen modelo es uno con poco error y
baja complejidad. En consecuencia, nos esforzamos por minimizar:
n
X
F (w) = l(x, y, w) + Ω(w)
i=1

3
Figure 1: Flujo de Calculo de Gradiente Descendente en Servidor de Parámetros

Figure 2: Algoritmo de Gradiente Descendente Distribuido

Como se muestra, los datos de entrenamiento se dividen entre todos los trabajadores, que aprenden
conjuntamente el vector de parámetros w. El algoritmo funciona de forma iterativa. En cada iteración,
cada trabajador utiliza de forma independiente sus propios datos de entrenamiento para determinar qué

4
cambios deben realizarse en w para acercarse a un valor óptimo. Debido a que las actualizaciones de cada
trabajador reflejan solo sus propios datos de entrenamiento, el sistema necesita un mecanismo para per-
mitir que estas actualizaciones se mezclen. Lo hace expresando las actualizaciones como un subgradiente
(una dirección en la que el vector de parámetros w debe desplazarse) y agrega todos los subgradientes
antes de aplicarlos a w. Estos gradientes generalmente se reducen, prestando mucha atención en el diseño
del algoritmo a la tasa de aprendizaje correcta η que se debe aplicar para garantizar que el algoritmo
converja rápidamente.
El paso más caro del algoritmo es calcular el subgradiente para actualizar w. Esta tarea se divide
entre todos los trabajadores, cada uno de los cuales ejecuta WORKERITERATE. Como parte de esto,
los trabajadores calculan wT xik , que podrı́a ser inviable para w de muy alta dimensión.

3 Arquitectura
Una instancia del servidor de parámetros puede ejecutar más de un algoritmo simultáneamente. Los
nodos de servidor de parámetros se agrupan en un grupo de servidores y varios grupos de trabajadores.
Un nodo de servidor en el grupo de servidores mantiene una partición de los parámetros compartidos
globalmente. Los nodos del servidor se comunican entre sı́ para replicarse y / o migrar parámetros
para confiabilidad y escala. Un nodo de administrador de servidor mantiene una vista coherente de los
metadatos de los servidores, como la actividad del nodo y la asignación de particiones de parámetros.
Cada grupo de trabajadores ejecuta una aplicación. Un trabajador normalmente almacena localmente una
parte de los datos de entrenamiento para calcular estadı́sticas locales como gradientes. Los trabajadores
se comunican solo con los nodos del servidor (no entre ellos mismos), actualizando y recuperando los
parámetros compartidos. Hay un nodo planificador para cada grupo de trabajadores. Asigna tareas a
trabajadores y monitorea su progreso. Si se agregan o eliminan trabajadores, se reprograman las tareas
sin terminar.

Figure 3: Arquitectura del servidor de parametros

El servidor de parámetros admite espacios de nombres de parámetros independientes. Esto permite


a un grupo de trabajadores aislar su conjunto de parámetros compartidos de otros. Varios grupos de
trabajadores también pueden compartir el mismo espacio de nombres: podemos usar más de un grupo de
trabajadores para resolver la misma aplicación de deep learning para aumentar la paralelización. Otro
ejemplo es el de un modelo que está siendo consultado activamente por algunos nodos, como los servicios
en lı́nea que consumen este modelo. Al mismo tiempo, un grupo diferente de nodos trabajadores actualiza
el modelo a medida que llegan nuevos datos de entrenamiento. El servidor de parámetros está diseñado
para simplificar el desarrollo de aplicaciones distribuidas de aprendizaje automático. Los parámetros
compartidos se presentan como vectores (clave, de valor) para facilitar las operaciones de álgebra lineal.
Se distribuyen en un grupo de nodos de servidor. Cualquier nodo puede sacar sus parámetros locales y

5
extraer parámetros de nodos remotos. De forma predeterminada, las cargas de trabajo o las tareas las
ejecutan los nodos trabajadores. Las tareas son asincrónicas y se ejecutan en paralelo.

3.1 Vectores (Key/Value)


El modelo compartido entre los nodos se puede representar como un conjunto de pares (key, value).
Cada entrada del modelo se puede leer y escribir de forma local o remota mediante su clave. Nuestro
servidor de parámetros reconoce el significado subyacente de estos elementos de key, value: los algoritmos
de aprendizaje automático generalmente tratan el modelo como un objeto de álgebra lineal. Por ejemplo,
w se utiliza como vector tanto para la función objetivo como para la optimización en el algoritmo por
minimización de riesgos. Al tratar estos objetos como objetos de álgebra lineal dispersos, el servidor
de parámetros puede proporcionar la misma funcionalidad que la abstracción (key, value), pero admite
operaciones optimizadas importantes como la suma de vectores w+u, la multiplicación XwT , la búsqueda
de la norma kwk2 y otras operaciones más sofisticadas.

3.2 Rango de Push y Pull


Los datos se envı́an entre nodos mediante operaciones push y pull. En el algoritmo, cada trabajador
inserta todo su gradiente local en los servidores y luego recupera el peso actualizado.

3.3 Dependencias y tareas asincrónicas


Una tarea se emite mediante una llamada a procedimiento remoto. Puede ser un push o un pull
que un trabajador emite a los servidores. Las tareas pueden incluir cualquier número de subtareas. Las
tareas se ejecutan de forma asincrónica: la persona que llama puede realizar más cálculos inmediatamente
después de emitir una tarea. La persona que llama marca una tarea como finalizada solo una vez que
recibe la respuesta de la persona que llama. Una respuesta podrı́a ser los pares (key,value) solicitados
por la extracción o un reconocimiento vacı́o. El llamado marca una tarea como finalizada solo si se
devuelve la llamada de la tarea y todas las subtareas emitidas por esta llamada están finalizadas. Las
dependencias de tareas ayudan a implementar la lógica del algoritmo. Por ejemplo, la lógica de agregación
en ServerIterate del Algoritmo actualiza el peso w solo después de que se hayan agregado todos los
gradientes de trabajadores. Esto se puede implementar haciendo que la tarea de actualización dependa
de las tareas de inserción de todos los trabajadores.

3.4 Consistencia flexible


Las tareas independientes mejoran la eficiencia del sistema al paralelizar el uso de la CPU, el disco
y el ancho de banda de la red. Sin embargo, esto puede dar lugar a incoherencias de datos entre nodos.
Esta inconsistencia potencialmente ralentiza el progreso de la convergencia del algoritmo. Sin embargo,
algunos algoritmos pueden ser menos sensibles a este tipo de inconsistencia. La mejor compensación
entre la eficiencia del sistema y la tasa de convergencia del algoritmo generalmente depende de una
variedad de factores, incluida la sensibilidad del algoritmo a la inconsistencia de los datos, la correlación de
caracterı́sticas en los datos de entrenamiento y la diferencia de capacidad de los componentes de hardware.
En lugar de obligar al usuario a adoptar una dependencia particular que puede no ser adecuada para el
problema, el servidor de parámetros le da al diseñador de algoritmos flexibilidad para definir modelos de
consistencia. Esta es una diferencia sustancial con otros sistemas de aprendizaje automático. Mostramos
tres modelos diferentes que se pueden implementar por dependencia de tareas.

1. Secuencial: En consistencia secuencial, todas las tareas se ejecutan una por una. La siguiente tarea
se puede iniciar solo si la anterior ha finalizado. Produce resultados idénticos a la implementación
de un solo subproceso, y también se denomina Procesamiento sı́ncrono masivo.
2. Eventual: La consistencia eventual es lo opuesto: todas las tareas puede iniciarse simultáneamente.
Sin embargo, esto solo es recomendable si los algoritmos subyacentes son robustos con respecto a
los retrasos.

6
3. Retraso limitado: Cuando se establece un tiempo de retraso máximo τ , se bloqueará una nueva
tarea hasta que se hayan terminado todas las tareas anteriores τ veces. Este modelo proporciona
controles más flexibles que los dos anteriores: τ = 0 es el modelo de consistencia secuencial y un
retardo infinito.

4 Discusión
En el paper se decribe al framework de servidor de parámetros para resolver problemas de aprendizaje
automático distribuido. Los parámetros compartidos globalmente se pueden usar como matrices o vectores
dispersos locales para realizar operaciones de álgebra lineal con datos de entrenamiento locales. Es
eficiente: toda la comunicación es asincrónica. Se admiten modelos de coherencia flexible para equilibrar
el equilibrio entre el sistema; eficiente y rápida tasa de convergencia del algoritmo. Además, proporciona
escalabilidad elástica y tolerancia a fallas, con el objetivo de una implementación estable a largo plazo.

5 Conclusiones
1. El servidor de parámetros es una arquitectura de computación distribuida para ejecutar algorit-
mos de machine learning o deep learning donde los servidores tienen una memoria distribuida que
almacena los pesos del modelo en hash tables que son accesibles desde los nodos trabajadores.
2. Los nodos trabajadores se reparten el dataset de entrada y se encargan de realizar las operaciones
de gradiente descendente, convoluciones, backpropagation. No intercambian información entre sı́,
sino que se comunican con el nodo servidor o nodos servidores para que actualicen los pesos del
modelo o parte del modelo.

3. La mejor eficacia en el framework de servidor de parámetros se da cuando se utiliza la opción de


retraso limitado.
4. En los años más recientes se usaron otras arquitecturas para la computación distribuida de machine
learning como son allreduce y ring allreduce que mostraron mejores resultados.

También podría gustarte