Diferencias entre las revisiones 4 y 5
Versión 4 con fecha 2017-10-17 20:11:04
Tamaño: 4044
Editor: FabioDuran
Comentario:
Versión 5 con fecha 2017-10-18 12:56:45
Tamaño: 4467
Editor: FabioDuran
Comentario:
Los textos eliminados se marcan así. Los textos añadidos se marcan así.
Línea 74: Línea 74:
Importante, para está versión de Numba (0.35.0) es requisito esencial tener la versión de cuda 7.5 o menor. === Notas ===
 * Para está versión de Numba (0.35.0) es requisito esencial tener la versión de cuda 7.5 o menor.
 * En el caso del repositorio Centos al instalar el paquete de cuda-75.x84_64 vía YUM, automáticamente agregó como dependencia el paquete nvidia-kmod-384.81-2.el7.x86_64 ocasionando problemas y el siguiente mensaje "Failed to initialize NVML: Driver/library version mismatch". La solución es eliminar el paquete nvidia-kmod-384.81-2.el7.x86_64 mediante YUM y recargar el controlador de nvidia (modprobe nvidia).

Instalación del CUDA Toolkit

Se asume que el controlador que manipula la tarjeta GPU está activa, el proceso de instalación de CUDA Toolkit para el desarrollo de aplicaciones Python con uso de GPU está solventado para iniciar:

Instalación de CUDA Toolkit

El primer objetivo a lograr es adquirir el CUDA ToolKit desde el sitio del desarrollador (https://developer.nvidia.com/cuda-toolkit).

Nota: Para esta documentación la implementación se realizó en una máquina Linux usando a Centos 7 como distro, utilizando los repositorios oficiales de Nvidia para dicho caso, rpm network

Instalación de dependencias

Esto para el caso de querer instalar el toolkit de modo manual:

Centos

En Centos la instalación de dependencias siempre es confiable realizarlas a través de su gestor de paquetes YUM y desde los repositorios oficiales

yum install kernel-devel gcc-c++ freeglut freeglut-devel libX11-devel  mesa-libGLU-devel libXmu-devel libXi-devel gcc* compat-gcc*  compat-glibc* compat-lib*

O

yum groupinstall ‘Development Tools’ ‘Development Libraries’

CUDA Toolkit

Centos

Es necesario agregar el repositorio, para el caso se debe descargar el paquete RPM desde la página del desarrollador que corresponde a network, para este ejercicio se ha bajado el fichero cuda-repo-rhel7-9.0.176-1.x86_64.rpm y se instala del siguiente modo con privilegios de superusuario y se actualiza la lista de cache de YUM:

rpm -i cuda-repo-rhel7-9.0.176-1.x86_64.rpm
yum clean
yum make cache

Descargar cuda-repo-rhel7-9.0.176-1.x86_64.rpm

Como es el caso de instalación vía repositorio (YUM), se utiliza la siguiente instrucción para instalar:

yum install cuda-7-5.x86_64

Instalar NUMBA

En un entorno virtual de python que puede ser creado del siguiente modo:

virtualenv --python=/usr/bin/python3 <folder>

source <folder>/bin/activate

estableceremos nuestro ambiente de desarrollo.

Una vez creado el entorno virtual se procede a instalar los siguientes paquetes catalogados como esenciales utilizando pip (pip install <paquetes>):

Cython
llvmlite
numba
numpy
pyculib
scipy

Agregar variables de entorno

Se hace necesario agregar unas variables de entorno para referenciar algunos complementos de CUDA y Python sepa donde localizar estas librerías necesarias

# CUDA Toolkit
export CUDA_HOME=/usr/local/cuda-7.5
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:$LD_LIBRARY_PATH
export PATH=${CUDA_HOME}/bin:${PATH}
export NUMBAPRO_NVVM=${CUDA_HOME}/nvvm/lib64/libnvvm.so
export NUMBAPRO_LIBDEVICE=${CUDA_HOME}/nvvm/libdevice/

Una opción es que sean agregadas directamente en $HOME/.bashrc.

Notas

  • Para está versión de Numba (0.35.0) es requisito esencial tener la versión de cuda 7.5 o menor.
  • En el caso del repositorio Centos al instalar el paquete de cuda-75.x84_64 vía YUM, automáticamente agregó como dependencia el paquete nvidia-kmod-384.81-2.el7.x86_64 ocasionando problemas y el siguiente mensaje "Failed to initialize NVML: Driver/library version mismatch". La solución es eliminar el paquete nvidia-kmod-384.81-2.el7.x86_64 mediante YUM y recargar el controlador de nvidia (modprobe nvidia).

Primera aplicación

A modo de prueba y para comprobar la correcta instalación se puede copiar y ejecutar la siguiente aplicación:

   1 #!/usr/bin/python3
   2 import numpy as np
   3 from timeit import default_timer as timer
   4 from numba import vectorize
   5 @vectorize(["float32(float32, float32)"], target='cuda')
   6 def VectorAdd(a, b):
   7     return a + b
   8 
   9 
  10 def main():
  11     N = 32000000 #Numeros de elementos del array
  12 
  13     A = np.ones(N, dtype=np.float32)
  14     B = np.ones(N, dtypes=np.float32)
  15     C = np.zeros(N, dtypes=np.float32)
  16 
  17     start = timer()
  18 
  19     C = VectorAdd(A, B)
  20     vectoradd_time = timer() - start
  21 
  22     print("C[:5] = " + str(C[:5]))
  23     print("C[-5:] = " + str(C[-5:]))
  24 
  25     print("VectorAdd took %f seconds" % vectoradd_time)
  26 
  27 if __name__ == '__main__':
  28     main()

Descargar

El resultado debiese ser similar a esto e indicará que el programa corrió de buena manera:

C[:5] = [ 2.  2.  2.  2.  2.]
C[-5:] = [ 2.  2.  2.  2.  2.]
VectorAdd took 4.264653 seconds

programacion/python/installcudatoolkit (última edición 2017-10-19 21:57:48 efectuada por FabioDuran)