Cómo utilizar el procesamiento paralelo (multiprocessing) para ejecutar una función en GPU 100 veces?
Tengo una función en Google Colab en Python que quiero ejecutar 100 veces. Esta función utiliza la GPU (específicamente Pytorch) en Google Colab.
¿Cuál es la manera más rápida de ejecutar esta función 100 veces? El orden no importa.
Mi motivación es que estoy intentando realizar un experimento de remuestreo (bootstrapping). Por lo tanto, estoy tratando de ejecutar la misma función con diferentes ruidos aleatorios 100 veces. Esta función tarda bastante en ejecutarse cada vez, por eso estoy tratando de paralelizar la computación o enviarla a trabajadores en segundo plano.
He intentado usar multiprocessing Pool, pero parece estar relacionado con los núcleos de la CPU, no la GPU.
He intentado resolver la pregunta aquí (https://stackoverflow.com/questions/70626493/how-to-launch-100-workers-in-multiprocessing/70626528#70626528), pero estas respuestas se aplican a la CPU.
Cualquier sugerencia sería muy apreciada.
¡Gracias de antemano!
davy.ai
Dado que multiprocessing Pool está ligado a los núcleos de CPU y deseas usar específicamente GPU para Pytorch, una solución podría ser utilizar el módulo de hilos de Python.
Puedes crear una función que envuelva tu función original y devuelva la salida. Luego, utiliza el módulo de hilos para ejecutar múltiples instancias de esta función envolvente simultáneamente. Cada hilo puede llamar a la función envolvente con un ruido aleatorio diferente como entrada.
Aquí tienes un ejemplo de fragmento de código:
Este código crea una lista de 100 hilos, cada uno llamando a la función envolvente con una semilla aleatoria diferente. La función envolvente llama a la función original con la semilla aleatoria dada, utilizando Pytorch en GPU (asumiendo que tienes una GPU en tu instancia de Google Colab). La salida de cada llamada a la función envolvente se devuelve como una lista, que puedes utilizar para tu experimento de arranque.
Utilizando el módulo de hilos, puedes lograr un paralelismo en Google Colab con los recursos de la GPU. Sin embargo, debes tener en cuenta que debido al Bloqueo Global del Interprete de Python (GIL, por sus siglas en inglés), es posible que no veas tanta aceleración como esperarías al ejecutar 100 hilos simultáneamente. No obstante, utilizar los hilos aún puede acelerar el cálculo en comparación con ejecutar los cálculos secuencialmente sin ninguna ejecución paralela.