¡Es hora de paralelizar!

R-Ladies Chile

Stephanie Orellana

Nuestro problema: código demora mucho tiempo

  • No lo hemos programado de forma eficiente
  • Nuestro proceso demora mucho por su naturaleza
  • Usa objetos que son muy lentos de cargar

Primeros pasos

  • Pensar una forma más eficiente de programar
  • Encontrar cuál orden es la que está haciendo que el código demore
  • Dividir cargas pesadas en porciones más pequeñas
  • Usar funciones más eficientes

Computación en paralelo


🚀 Es un tipo de computación donde múltiples tareas o partes de una tarea se realizan simultáneamente.


👷 La computación en paralelo distribuye las tareas entre varios procesadores o unidades de procesamiento, lo que permite que se realicen múltiples operaciones al mismo tiempo.

Computación en paralelo


⌛ Mejora de forma significativa el rendimiento y la velocidad de procesamiento en comparación con los sistemas de computación en serie, especialmente para tareas que pueden descomponerse en partes independientes que puedan ejecutarse en paralelo.


📝 Se utiliza en una variedad de campos, como ciencia de datos, simulación numérica, procesamiento de imágenes, inteligencia artificial y muchas otras áreas donde se requiere un alto rendimiento computacional.

En resumen …

  • En el contexto de un código de R, implica dividir el problema en diferentes tareas que corren en sesiones independientes de R

  • Esto está limitado por el número de procesadores (núcleos) del tu computador

  • Y por otras características que veremos durante el taller

¿Cómo se hace?

Con paquetes:

Futures

  • En programación, un futuro es una abstracción de un valor que puede estar disponible en algún momento en el futuro.

  • El estado de un futuro puede estar resuelto o no resuelto. Tan pronto como se resuelve, el valor está disponible instantáneamente.

  • Si se consulta el valor mientras el futuro aún no se resuelve, el proceso actual se bloquea hasta que se resuelva el futuro. Pero se puede chequear el estado del futuro sin bloquearlo.

Futures

  • Cómo y cuándo se resuelven los futuros depende de qué estrategia se utilice para evaluarlos.

    • Estrategia secuencial: se resuelve en la sesión R actual.
    • Asincrónica: evaluando expresiones en paralelo en la máquina actual o simultáneamente en un clúster de cómputo.

Paquete {furrr}

Implementa el método de computación en paralelo provisto por el paquete {future} a las funciones de iteración del paquete {purrr}

¿Qué necesito?

  • Un código que demore y que pueda dividirse en tareas independientes

  • Saber escribir funciones

  • Un contador de tiempo:

    • system.time()
    • microbenchmark::microbenchmark()
    • Paquete {tictoc}
  • Procesadores

💻 Vamos!