Por distribuir, ¿quiere decir “optimización distribuida mediante descenso de gradiente”? Si ese es el caso, hay muchas maneras de hacerlo. Una manera simple que probé es a continuación.
Si está trabajando con un conjunto de datos muy grande, y si está haciendo actualizaciones de mini lotes, una buena manera sería distribuir el cómputo en diferentes subprocesos (en una misma computadora) y en diferentes computadoras (incluso si es un mini- el lote es demasiado grande): cada uno de los subprocesos de todas las computadoras funciona solo en un sector / segmento particular del lote. Principalmente en tareas de ML, la actualización final del vector de peso (o la variable de optimización) se reduce a la suma de actualizaciones en cada uno de los sectores de un lote. Puede tener un hilo que combine todos esos cálculos distribuidos y luego actualizar los parámetros.
Multi-threading no será ningún problema, supongo. Para las comunicaciones a través de nodos (computadoras), puede usar cualquiera de las bibliotecas o herramientas estándar. Codifico solo en C ++. Y encontré que Lightweight Communications and Marshalling (LCM) es un buen paquete para hacer todas las comunicaciones a través de los nodos. Es muy fácil de usar y entender. Pero si está creando su propio clúster y tiene tiempo para el mismo, puede hacer openMP / openMPI.
- ¿Por qué Bayes ingenuo se considera un modelo generativo?
- ¿Puedo usar el concepto de aprendizaje automático para predecir cuánta cantidad de comida cocinar por día en un restaurante?
- El reciclaje de residuos de construcción urbana necesita usar qué máquina.
- En forma de estudios de caso, ¿cómo utilizan las empresas financieras el aprendizaje automático?
- ¿Cuál es el error de la bolsa en bosques aleatorios? Qué significa eso? ¿Cuál es un valor típico, si lo hay? ¿Por qué sería mayor o menor que un valor típico?
Yo mismo implementé PEGASOS multiproceso y distribuido para SVM para entrenamiento en un conjunto de datos de 6.3 TB y el próximo conjunto de datos tendrá un tamaño cercano a 65 TB (más de 2 mil millones de puntos de datos y más de 1000 dimensiones). PEGASOS es un solucionador basado en subgrado para SVM. Los cálculos (para el conjunto de datos de 6,3 TB) se realizaron con 4 computadoras diferentes, cada una con 4 núcleos.
El tipo de arquitectura distribuida que desea construir depende de usted. Pero en lo que respecta al descenso de gradiente, todo lo que tiene que hacer es hacerlo funcionar en diferentes sectores de los datos que tenga y combinar el resultado final. No debería importar en absoluto si los cálculos se distribuyeron a través de las computadoras o con varios subprocesos en una sola. En mi caso, los cálculos en cada uno de los hilos también fueron multiproceso. Tenía un servidor central que tenía datos almacenados en 4 discos duros. También hubo un CV de 10 pliegues involucrados, por lo tanto, se necesitaban 4 computadoras, de lo contrario, una sola podría haber sido suficiente (PEGASOS multihilo).
¡Buena suerte!