Tamaño: 7934
Comentario:
|
Tamaño: 8622
Comentario:
|
Los textos eliminados se marcan así. | Los textos añadidos se marcan así. |
Línea 159: | Línea 159: |
* 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). |
* Para está versión de Numba (0.35.0) es requisito esencial tener la versión de cuda 7.5 o mayor. * Para el caso de querer correr [[https://developer.nvidia.com/gpu-accelerated-libraries|GPU-accelerated libraries]] es necesario tener una versión superior a la 8.0 del toolkit, puesto a que la compilación de las versiones menores (por ejemplo 7.5 para cuRAND) se ha omitido sin intencionalidad el PTX embebido que permite la compatibilidad (https://devtalk.nvidia.com/default/topic/941354/all-curand-samples-fail-with-gtx-1080-on-cuda-7-5/). * En el caso del repositorio Centos al instalar el paquete de cuda-<version>.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). * Una vez se instala desde el repositorio los paquetes, es necesario instalar nuevamente el controlador NVIDIA para manipular las GPU's. * El altamente recomendable instalar los controladores desde el binario oficial de NVIDIA. |
Instalación del CUDA Toolkit
Tabla de Contenidos
Se asume que el controlador que manipula la tarjeta GPU está activo, por lo que 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/ export NUMBAPRO_CUDALIB=${CUDA_HOME}/lib64
Una opción es que sean agregadas directamente en $HOME/.bashrc.
Para poder chequear que todo está correcto, se puede utilizar el comando numba -s o numba --system-info, obteniendo una salida como la siguiente:
$ numba -s System info: -------------------------------------------------------------------------------- __Time Stamp__ 2017-10-18 13:21:45.954662 __Hardware Information__ Machine : x86_64 CPU Name : broadwell CPU Features : adx aes avx avx2 bmi bmi2 cmov cx16 f16c fma fsgsbase hle invpcid lzcnt mmx movbe pclmul popcnt prfchw rdrnd rdseed rtm smap sse sse2 sse3 sse4.1 sse4.2 ssse3 xsave xsaveopt __OS Information__ Platform : Linux-3.10.0-693.2.2.el7.x86_64-x86_64-with-centos-7.4.1708-Core Release : 3.10.0-693.2.2.el7.x86_64 System Name : Linux Version : #1 SMP Tue Sep 12 22:26:13 UTC 2017 OS specific info : CentOS Linux7.4.1708Core glibc info : glibc 2.2.5 __Python Information__ Python Compiler : GCC 4.8.5 20150623 (Red Hat 4.8.5-11) Python Implementation : CPython Python Version : 3.6.3 Python Locale : en_US UTF-8 __LLVM information__ LLVM version : 4.0.0 __CUDA Information__ Found 4 CUDA devices id 0 b'GeForce GTX 1080 Ti' [SUPPORTED] compute capability: 6.1 pci device id: 0 pci bus id: 2 id 1 b'GeForce GTX 1080 Ti' [SUPPORTED] compute capability: 6.1 pci device id: 0 pci bus id: 3 id 2 b'GeForce GTX 1080 Ti' [SUPPORTED] compute capability: 6.1 pci device id: 0 pci bus id: 129 id 3 b'GeForce GTX 1080 Ti' [SUPPORTED] compute capability: 6.1 pci device id: 0 pci bus id: 130 Summary: 4/4 devices are supported CUDA driver version : 8000 CUDA libraries: Finding cublas named libcublas.so.7.5.18 trying to open library... ok Finding cusparse named libcusparse.so.7.5.18 trying to open library... ok Finding cufft named libcufft.so.7.5.18 trying to open library... ok Finding curand named libcurand.so.7.5.18 trying to open library... ok Finding nvvm named libnvvm.so trying to open library... ok finding libdevice for compute_20... ok finding libdevice for compute_30... ok finding libdevice for compute_35... ok finding libdevice for compute_50... ok __Conda Information__ Conda not present/not working. Error was [Errno 2] No such file or directory: 'conda': 'conda' -------------------------------------------------------------------------------- If requested, please copy and paste the information between the dashed (----) lines, or from a given specific section as appropriate. ============================================================= IMPORTANT: Please ensure that you are happy with sharing the contents of the information present, any information that you wish to keep private you should remove before sharing. =============================================================
Notas
- Para está versión de Numba (0.35.0) es requisito esencial tener la versión de cuda 7.5 o mayor.
Para el caso de querer correr GPU-accelerated libraries es necesario tener una versión superior a la 8.0 del toolkit, puesto a que la compilación de las versiones menores (por ejemplo 7.5 para cuRAND) se ha omitido sin intencionalidad el PTX embebido que permite la compatibilidad (https://devtalk.nvidia.com/default/topic/941354/all-curand-samples-fail-with-gtx-1080-on-cuda-7-5/).
En el caso del repositorio Centos al instalar el paquete de cuda-<version>.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).
- Una vez se instala desde el repositorio los paquetes, es necesario instalar nuevamente el controlador NVIDIA para manipular las GPU's.
- El altamente recomendable instalar los controladores desde el binario oficial de 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()
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