Escribí mi programa de aprendizaje profundo en C ++ y ahora necesito más potencia informática. ¿Cuál es la mejor manera de implementarlo en la nube?

Bueno, si su programa se ejecutará desde la línea de comandos y se ejecuta en Windows o Linux, simplemente puede pagar por un servicio en la nube. Pagará por instancia o por uso de recursos de la máquina, según el servicio y las opciones que elija. Luego se le dará una dirección IP a través de la cual puede acceder a esa instancia, como a través de VPN. Puede cargar su programa y ejecutarlo (suponiendo que la máquina tenga un tiempo de ejecución c adecuado, etc.).

Controlarás el programa a través de la línea de comando en tu VPN. Alternativamente, podría ejecutar un servidor web con un front-end web para su programa, ejecutándose en la misma instancia o en una instancia separada. Su programa ahora se está ejecutando en la nube. Pero … algo está mal. Realmente no es más rápido. ¿Que pasó?

Hay una gran diferencia entre usar la nube para ejecutar un programa y ejecutar un programa que aprovecha la nube para hacer más trabajo más rápido.

El primero es trivial, como se describió anteriormente. Esto último es muy difícil. Debe diseñar un programa distribuido , es decir, un programa que pueda comunicarse con otras instancias en ejecución de sí mismo en otras máquinas, para compartir el almacenamiento y el procesamiento de datos en más de una computadora. Luego compra muchas de las instancias en la nube descritas anteriormente y ejecuta muchas instancias de su programa distribuido. Ahora tiene una capacidad de almacenamiento y procesamiento significativamente mayor a su disposición que la que puede proporcionar una sola máquina. Ah, no olvide diseñar su programa para que los beneficios de rendimiento de muchas instancias superen la lentitud y la sobrecarga adicionales de tener múltiples máquinas intercambiando su conjunto de datos presumiblemente grande a través de una red.

Eso depende mucho de la arquitectura de su programa y de cómo lo haya distribuido. Si es monolítico, no hay mucho que puedas hacer.

Entonces, el primer paso sería evaluar su arquitectura y ver cómo puede distribuirla mediante un paradigma de mapa / reducción (ala hadoop) o mediante servicios idempotentes estándar (una arquitectura de microservicios).

Una vez que se distribuye su programa, puede activar un gran clúster de hadoop o instalar instancias que ejecutarían sus microservicios.

¡Los mejores deseos!

¿Lo has escrito de una manera que maneje el paralelismo? Puede considerar uno de los principales marcos DL, como Deeplearning4j.org, Caffe, Tensorflow o MXNet.