Ejecutando el script de Python en la GPU.

Las GPU tienen más núcleos que la CPU y, por lo tanto, cuando se trata de computación paralela de datos, las GPU funcionan excepcionalmente mejor que la CPU, aunque la GPU tiene una velocidad de reloj más baja y carece de varias funciones de administración de núcleo en comparación con la CPU. 

Machine-Learning-Course

Por lo tanto, ejecutar un script de python en la GPU puede resultar comparativamente más rápido que la CPU; sin embargo, debe tenerse en cuenta que para procesar un conjunto de datos con la GPU, los datos primero se transferirán a la memoria de la GPU, lo que puede requerir tiempo adicional, por lo que si los datos el conjunto es pequeño, entonces la CPU puede funcionar mejor que la GPU. 

Empezando: 

Solo las GPU de NVIDIA son compatibles por ahora y las que se enumeran en esta página. Si su tarjeta gráfica tiene núcleos CUDA, puede continuar con la configuración. 

Instalación: 

Primero, asegúrese de que los controladores de Nvidia estén actualizados y también puede instalar cudatoolkit explícitamente desde aquí. luego instale Anaconda agregue anaconda al entorno durante la instalación. 
Después de completar todas las instalaciones, ejecute los siguientes comandos en el símbolo del sistema.

conda install numba & conda install cudatoolkit

NOTA: Si Anaconda no se agrega al entorno, navegue hasta la instalación de Anaconda, busque el directorio Scripts y abra el símbolo del sistema allí. 

CÓDIGO :

Usaremos el decorador numba.jit para la función que queremos calcular sobre la GPU. El decorador tiene varios parámetros, pero trabajaremos solo con el parámetro de destino. Target le dice al jit que compile códigos para qué fuente («CPU» o «Cuda»). “Cuda” corresponde a GPU. Sin embargo, si se pasa la CPU como argumento, el jit intenta optimizar la ejecución del código más rápido en la CPU y también mejora la velocidad. 

Python3

from numba import jit, cuda
import numpy as np
# to measure exec time
from timeit import default_timer as timer   
  
# normal function to run on cpu
def func(a):                                
    for i in range(10000000):
        a[i]+= 1      
  
# function optimized to run on gpu 
@jit(target ="cuda")                         
def func2(a):
    for i in range(10000000):
        a[i]+= 1
if __name__=="__main__":
    n = 10000000                            
    a = np.ones(n, dtype = np.float64)
    b = np.ones(n, dtype = np.float32)
      
    start = timer()
    func(a)
    print("without GPU:", timer()-start)    
      
    start = timer()
    func2(a)
    print("with GPU:", timer()-start)

Salida: basado en CPU = i3 6006u, GPU = 920M. 

without GPU: 8.985259440999926
with GPU: 1.4247172560001218

Sin embargo, debe tenerse en cuenta que la array se copia primero de la RAM a la GPU para su procesamiento y, si la función devuelve algo, los valores devueltos se copiarán de la GPU a la CPU. Por lo tanto, para conjuntos de datos pequeños, la velocidad de la CPU es comparativamente más rápida, pero la velocidad se puede mejorar aún más, incluso para conjuntos de datos pequeños, pasando el objetivo como «CPU». Se debe tener especial cuidado cuando la función que está escrita debajo de jit intenta llamar a cualquier otra función, entonces esa función también debe optimizarse con jit, de lo contrario, jit puede producir códigos aún más lentos.

Publicación traducida automáticamente

Artículo escrito por hitesh_kumar_kushwaha y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *