Tensorflow: ¿Milagros 3.0?

Creado en 9 nov. 2015  ·  101Comentarios  ·  Fuente: tensorflow/tensorflow

¿Hay planes para admitir la capacidad de cómputo 3.0 de Cuda?

Comentario más útil

En cuanto a la compilación para el dispositivo Cuda 3.0, si sincroniza el último código de TensorFlow, puede hacer lo siguiente. La documentación oficial se actualizará pronto. Pero esto es lo que parece:

$ TF_UNOFFICIAL_SETTING=1 ./configurar

... Igual que la configuración oficial anterior

ADVERTENCIA: Estás configurando ajustes no oficiales en TensorFlow. porque algunos
bibliotecas externas no son compatibles con versiones anteriores, estas configuraciones son en gran parte
sin probar y sin soporte.

Especifique una lista de las capacidades informáticas de Cuda separadas por comas que desea
construir con Puede encontrar la capacidad informática de su dispositivo en:
https://developer.nvidia.com/cuda-gpus.
Tenga en cuenta que cada capacidad informática adicional aumenta significativamente
su tiempo de compilación y tamaño binario. [El valor predeterminado es: "3.5,5.2"]: 3.0

Configurar Cuda incluir
Configurando Cuda lib64
Configuración de la papelera de Cuda
Configuración de Cuda nvvm
Configuración finalizada

Todos 101 comentarios

Oficialmente, se admiten las capacidades de cómputo Cuda 3.5 y 5.2. Puede intentar habilitar otra capacidad informática modificando el script de compilación:

https://github.com/tensorflow/tensorflow/blob/master/third_party/gpus/crosstool/clang/bin/crosstool_wrapper_driver_is_not_gcc#L236

¡Gracias! Lo intentaré e informaré aquí.

Esto no es oficialmente compatible todavía. Pero si desea habilitar Cuda 3.0 localmente, estos son los lugares adicionales para cambiar:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/gpu_device.cc#L610
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/gpu_device.cc#L629
Donde se ignora el dispositivo GPU más pequeño.

El soporte oficial eventualmente vendrá en una forma diferente, donde nos aseguramos de que la solución funcione en todos los entornos computacionales diferentes.

Hice los cambios en las líneas anteriores y pude compilar y ejecutar el ejemplo básico en la página de inicio: http://tensorflow.org/get_started/os_setup.md#try_your_first_tensorflow_program - no se quejó de gpu, pero tampoco informó usar la gpu.

¿Cómo puedo ayudar con los próximos pasos?

infojunkie@, ¿podría publicar su paso y subir el registro?

Si estuvieras siguiendo este ejemplo:

bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer
bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu

Si ve la siguiente línea, se está creando el dispositivo lógico GPU:

Creación del dispositivo TensorFlow (/ gpu: 0) -> (dispositivo: ..., nombre: ..., ID de bus pci: ...)

Si desea estar absolutamente seguro de que se utilizó la GPU, configure CUDA_PROFILE=1 y habilite el perfilador de Cuda. Si se generaron los registros del perfilador de Cuda, era una señal segura de que se utilizó GPU.

http://docs.nvidia.com/cuda/profiler-users-guide/#command-line-profiler-control

Obtuve el siguiente registro:

I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 8
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:888] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_init.cc:88] Found device 0 with properties: 
name: GeForce GT 750M
major: 3 minor: 0 memoryClockRate (GHz) 0.967
pciBusID 0000:02:00.0
Total memory: 2.00GiB
Free memory: 896.49MiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:112] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:122] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_region_allocator.cc:47] Setting region size to 730324992
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 8

Supongo que significa que la GPU fue encontrada y utilizada. Puedo probar el generador de perfiles CUDA si crees que es útil.

Priorice este problema. Está bloqueando el uso de gpu tanto en OSX como en el K520 de AWS y, para muchas personas, este es el único entorno disponible.
¡Gracias!

No es la mejor solución, pero simplemente comente la verificación de la versión de cómputo de cuda en _gpu_device.c_ línea 610 a 616 , vuelva a compilar y la aceleración de GPU g2 de Amazon parece funcionar bien:

example

Como referencia, aquí está mi parche muy primitivo para trabajar con Cuda 3.0: https://gist.github.com/infojunkie/cb6d1a4e8bf674c6e38e

@infojunkie Apliqué su solución, pero obtuve muchos nan en el resultado del cálculo:

$ bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu
000006/000003 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000004/000003 lambda = 2.000027 x = [79795.101562 -39896.468750] y = [159592.375000 -79795.101562]
000005/000006 lambda = 2.000054 x = [39896.468750 -19947.152344] y = [79795.101562 -39896.468750]
000001/000007 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000002/000003 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000009/000008 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000004/000004 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000001/000005 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000006/000007 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000003/000006 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000006/000006 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]

@markusdr , esto es muy extraño. ¿Podría publicar los pasos completos para construir el binario?

¿Podría con qué GPU y sistema operativo está ejecutando? ¿Está utilizando Cuda 7.0 y Cudnn 6.5 V2?

Solo +1 para solucionar este problema en AWS lo antes posible. No tenemos ninguna otra tarjeta GPU para nuestra investigación.

Hola, no estoy seguro de si se trata de un problema aparte, pero estoy intentando compilar con una GPU CUDA 3.0 (Geforce 660 Ti) y obtengo muchos errores con --config=cuda. Consulte el archivo adjunto a continuación. Parece no estar relacionado con los cambios recomendados anteriormente. He notado que intenta compilar un archivo temporal compute_52.cpp1.ii que sería la versión incorrecta para mi GPU.

Estoy en Ubuntu 15.10. Modifiqué host_config.h en las inclusiones de Cuda para eliminar la verificación de versión en gcc. Estoy usando Cuda 7.0 y cuDNN 6.5 v2 como se recomienda, aunque también tengo instaladas versiones más nuevas.

cuda_build_fail.txt

Sí, estaba usando Cuda 7.0 y Cudnn 6.5 en una instancia EC2 g2.2xlarge con este AIM:
cuda_7 - ami-12fd8178
ubuntu 14.04, gcc 4.8, cuda 7.0, atlas y opencv.
Para construir, seguí las instrucciones en tensorflow.org.

Parece que estamos viendo una incompatibilidad de API entre Compute Capability v3 y Compute Capability v3.5; después de la corrección del parche de infojunkie , me encontré con este problema

I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creación del dispositivo TensorFlow (/gpu:0) -> (dispositivo: 0, nombre: Quadro K2100M, ID de bus pci: 0000:01:00.0)
I tensorflow/core/common_runtime/local_session.cc:45] Subprocesos de paralelismo entre operaciones de sesión local: 8
F tensorflow/stream_executor/cuda/cuda_blas.cc:229] Comprobación fallida: f != nullptr _no se pudo encontrar cublasCreate_v2 en cuBLAS DSO_; dlerror: bazel-bin/tensorflow/cc/tutorials_example_trainer: símbolo indefinido: cublasCreate_v2

Ejecuto Ubuntu 15.04, gcc 4.9.2, CUDA Toolkit 7.5, cuDNN 6.5;

+1 por tener Compatibilidad con Compute Capability v3

¿cublas está instalado? y a donde se vincula
ls -lah /usr/local/cuda/lib64/libcublas.so ?

@allanzelener , ¿qué versiones de OS y GCC tienes? Sus errores parecen provenir de compiladores de C++ incompatibles.

Se recomienda usar Ubuntu 14.04 y GCC 4.8 con TensorFlow.

@vsrikarunyan , es mejor usar CUDA Toolkit 7.0, como se recomienda. Puede instalar un kit de herramientas CUDA anterior junto con su kit de herramientas más nuevo. Simplemente señale TensorFlow "configurar" y tal vez LD_LIBRARY_PATH a CUDA 7.0 cuando ejecute TensorFlow.

@avostryakov , el primer parche de @infojunkie debería funcionar en AWS.

https://gist.github.com/infojunkie/cb6d1a4e8bf674c6e38e

Un parche oficial se está abriendo camino a través de la tubería. Expondría una opción de configuración para permitirle elegir su destino de proceso. Pero debajo, hace cambios similares. Lo probé en AWS g2 y descubrí una vez que funcionaría, después de desinstalar completamente el controlador de NVIDIA y reinstalar el último controlador de GPU de NVIDIA.

Una vez más, la configuración recomendada en AWS en este punto es la siguiente.
Ubuntu 14.04, GCC 4.8, CUDA Toolkit 7.0 y CUDNN 6.5. Para los dos últimos, está bien instalarlos sin afectar su instalación existente de otras versiones. Además, las versiones oficiales recomendadas para los dos últimos también podrían cambiar pronto.

Apliqué el mismo parche en una instancia g2.2xlarge y obtuve el mismo resultado que @markusdr... un montón de nan.

@zheng-xq Sí, estoy en Ubuntu 15.10 y estaba usando GCC 5.2.1. El problema era el compilador. No pude averiguar cómo cambiar el compilador con bazel, pero simplemente instalar gcc-4.8 y usar alternativas de actualización para cambiar los enlaces simbólicos en usr/bin parece haber funcionado. (Más información: http://askubuntu.com/questions/26498/choose-gcc-and-g-version). Gracias por la ayuda, informaré si tengo más problemas.

Conseguí que esto funcionara en una instancia g2.2xlarge y conseguí que se ejecutara el ejemplo de entrenamiento, y verifiqué que la gpu estaba activa usando la herramienta nvidia-smi, pero cuando ejecuté convolutional.py de mnist, se quedó sin memoria. Sospecho que esto solo tiene que ver con el tamaño del lote y el hecho de que la GPU aws no tiene mucha memoria, pero solo quería descartar eso para asegurarme de que suene bien. Para aclarar, ejecuté lo siguiente, y duró como 15 minutos, y luego se quedó sin memoria.

python tensorflow/modelos/imagen/mnist/convolucional.py

@nbenhaim , ¿qué tuviste que hacer para que funcionara?

@markusdr , @jbencook , la NAN es bastante preocupante. Corrí lo mismo yo mismo, y no tuve ningún problema.

Si usa la configuración de software recomendada: Ubuntu 14.04, GCC 4.8, Cuda 7.0 y Cudnn 6.5, entonces mi próxima suposición es el controlador Cuda. ¿Podría desinstalar y reinstalar el último controlador Cuda?

Esta es la secuencia que probé en AWS, su kilometraje puede variar:

sudo apt-get remove --purge "nvidia*"
wget http://us.download.nvidia.com/XFree86/Linux-x86_64/352.55/NVIDIA-Linux-x86_64-352.55.run
sudo ./NVIDIA-Linux-x86_64-352.55.run --aceptar-licencia --no-x-check --no-recursion

Gracias por seguir a @zheng-xq. Lo intentaré hoy.

Otro +1 por admitir GPU anteriores a 3.5, como otra persona cuya única opción realista para entrenar con datos reales son las instancias de GPU de AWS.

Incluso para las pruebas locales, resulta que la GPU de mi computadora portátil (reciente, de desarrollador) no es compatible con 3.5 :-(

@anjishnu Acabo de seguir el parche de @infojunkie https://gist.github.com/infojunkie/cb6d1a4e8bf674c6e38e después de hacer una instalación limpia y compilar siguiendo las instrucciones.

Algunos comentarios: la AMI que estaba usando tenía instalado NVIDIA cuda toolkit 6.5, así que cuando seguí el enlace en la guía de inicio de tensorflow, descargué el archivo 7.0 .run para ubuntu 14.04, actualicé el controlador e instalé cuda 7.0 en /usr/local/cuda-7.0 sin crear un enlace simbólico a /usr/local/cuda ya que ya tenía instalado 6.5 y no quería eliminarlo

Luego, al construir, solo especifiqué la ubicación correcta de cuda 7.0. Una cosa confusa es que al crear la biblioteca de python, el tutorial no le recuerda que especifique --config=cuda , pero debe hacerlo si desea que python lib utilice gpu

@markusdr , @jbencook , obtuve un NaN y todo tipo de valores desordenados también cuando apliqué el parche inicialmente, pero lo que solucionó fue hacer una "limpieza de bazel" y reconstruir desde cero después de realizar los cambios propuestos descritos en @infojunkie parche de ¿Intentaste esto?

Interesante... no, aún no he tenido oportunidad. ¿Intentó ejecutar la CNN desde la guía de inicio?

python tensorflow/models/image/mnist/convolutional.py

Curiosidad por saber si eso funcionó correctamente.

@jbencook como mencioné, convolutional.py parece funcionar correctamente, pero después de unos 15 minutos se bloquea debido a la falta de memoria, pero la salida parece correcta y utilicé la herramienta de nvidia-smi para verificar que realmente se está ejecutando en la GPU y es. Sospecho que esto se debe al tamaño del lote... Sé que el GPU en ec2 no tiene tanta memoria, pero en este momento no estoy seguro de por qué se quedó sin memoria.

El ejemplo convolucional.py también se quedó sin memoria de GPU para mí, en una GeForce GTX 780 Ti.

Pude instalarlo en AWS después de mucho dolor. Ver https://gist.github.com/erikbern/78ba519b97b440e10640 – También construí una AMI: ami-cf5028a5 (en la región de Virginia)

Funciona en g2.2xlarge y g2.8xlarge y detecta correctamente los dispositivos (1 y 4 respectivamente). Sin embargo, no veo ninguna aceleración de las 4 tarjetas GPU en el g2.8xlarge. Ambas máquinas procesan alrededor de 330 ejemplos por segundo ejecutando el ejemplo CIFAR 10 con varias GPU. También un rendimiento muy similar en el ejemplo convolucional de MNIST. También se bloquea después de unos 15 minutos con "Memoria de GPU insuficiente, consulte el volcado de estado de la memoria anterior", como mencionaron otras personas anteriormente.

He ejecutado el ejemplo de CIFAR durante aproximadamente una hora y parece funcionar bastante bien hasta ahora.

En cuanto a la compilación para el dispositivo Cuda 3.0, si sincroniza el último código de TensorFlow, puede hacer lo siguiente. La documentación oficial se actualizará pronto. Pero esto es lo que parece:

$ TF_UNOFFICIAL_SETTING=1 ./configurar

... Igual que la configuración oficial anterior

ADVERTENCIA: Estás configurando ajustes no oficiales en TensorFlow. porque algunos
bibliotecas externas no son compatibles con versiones anteriores, estas configuraciones son en gran parte
sin probar y sin soporte.

Especifique una lista de las capacidades informáticas de Cuda separadas por comas que desea
construir con Puede encontrar la capacidad informática de su dispositivo en:
https://developer.nvidia.com/cuda-gpus.
Tenga en cuenta que cada capacidad informática adicional aumenta significativamente
su tiempo de compilación y tamaño binario. [El valor predeterminado es: "3.5,5.2"]: 3.0

Configurar Cuda incluir
Configurando Cuda lib64
Configuración de la papelera de Cuda
Configuración de Cuda nvvm
Configuración finalizada

@nbenhaim @markusdr

El problema de falta de memoria puede deberse al hecho de que convolutional.py ejecuta la evaluación en todos los ejemplos del conjunto de datos de prueba (10000). Ocurre después de que finaliza el entrenamiento, como último paso:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/models/image/mnist/convolutional.py#L266

¿Puedes intentar cortar train_data y test_labels para que sea más pequeño?

Puedo confirmar que con el script de instalación de @erikbern y la última rama maestra de TensorFlow, cifar10_multi_gpu_train.py funciona como se esperaba en la GPU:

step 100, loss = 4.49 (330.8 examples/sec; 0.387 sec/batch)

Aunque esta línea ahora se rompe debido a los cambios de código.

Además, si tomo 1000 muestras de prueba, el ejemplo convolutional.py también funciona.

EDITAR: El ejemplo bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu también funciona sin darme un montón de nan.

Confirmo que la última compilación admite la especificación de la capacidad informática a través de
$ TF_UNOFFICIAL_SETTING=1 ./configure
sin necesidad de parche. ¡Gracias!

Creo que este problema se puede cerrar, a menos que alguien encuentre una función real que falle para Cuda <3.5.

En realidad, permítanme retractarme :-) El script ./configure modifica el código fuente cambiando las líneas relevantes con las versiones de Cuda especificadas a mano. Luego, git informa cambios no confirmados y se vuelve muy difícil trabajar con este código base sin revertir el cambio, git pull ing y configurar nuevamente, sin mencionar el envío de contribuciones.

Un mejor enfoque sería leer esa configuración de versión desde un archivo de configuración.

ErikBern arriba y su AMI está trabajando para cifar para mí - ami-cf5028a5

Obtener ~320 muestras por segundo en comparación con mi caja de Windows i7 en la ventana acoplable, que obtiene ~105 muestras por segundo para cifar10_train.py

@infojunkie : sí, esto no es ideal (@zheng-xq y discutimos esto un poco durante la revisión!).

Intentaremos pensar en una mejor manera de manejar esto, aunque nos gustaría mantener la capacidad de filtrado del dispositivo de tiempo de ejecución para estar sincronizado con la forma en que se creó el binario (por lo tanto, es necesario editar el código fuente para compilar y tiempo de ejecución). De lo contrario, los usuarios obtienen errores difíciles de depurar.

Continuaremos trabajando para hacer esto más fácil, pero esperamos que esto le permita avanzar un poco.

@vrv : sí, definitivamente puedo continuar mi trabajo con estas correcciones. ¡Gracias por el apoyo!

Solo por curiosidad, dado que c4.4xlarge con 16 vCpus es aproximadamente 0,88 por hora en comparación con la instancia de gpu, que es de 0,65 por hora, ¿no sería mejor usar múltiples cpu que gpu?

@timshephard Lo dudo, pero no dude en ejecutar algunos puntos de referencia: puede instalar mi AMI (ami-cf5028a5) en un c4.4xlarge y ejecutar cifar10_train.py

En realidad, el g2.2xlarge tiene 8 cpus junto con la GPU. Voy a probar eso.

Se admite CPU de subprocesos múltiples, pero si desea realizar un entrenamiento real,
GPU 4 Life, hasta que lancen la implementación distribuida

El jueves 12 de noviembre de 2015 a las 4:53 p. m., Erik Bernhardsson < [email protected]

escribió:

@timshephard https://github.com/timshephard Lo dudo, pero siéntase libre
para ejecutar algunos puntos de referencia: puede instalar mi AMI (ami-cf5028a5) en un
c4.4xlarge y ejecute cifar10_train.py


Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment-156274039
.

Solo obtenía una velocidad de 3x para la GPU de Amazon sobre mi CPU de Windows en la ventana acoplable. Bien, pero eso fue solo 1 de mis núcleos. Los 4 núcleos en mi caja de Windows probablemente podrían vencer a una GPU de Amazon.

eso es interesante, porque con caffe, no hice ningún punto de referencia real,
pero entrenar en modo CPU es horrible, como orden de magnitud o más
diferencia. Tal vez TF esté mejor optimizado en modo CPU, no me sorprendería
me.

El jueves 12 de noviembre de 2015 a las 5:01 p. m., timshephard [email protected]
escribió:

Solo estaba obteniendo una velocidad de 3x para Amazon GPU sobre mi CPU de Windows en
estibador. Bien, pero eso fue solo 1 de mis núcleos. Todo por 4 núcleos en mi
El cuadro de Windows probablemente podría vencer a una GPU de Amazon.


Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment-156275410
.

Tenga en cuenta que el tutorial de cifar10 tal como está no pretende ser un punto de referencia. Está destinado a mostrar algunas características diferentes, como protector y resumen. En su forma actual, estará limitado por CPU, incluso con GPU. Para comparar, habrá que ser más cuidadoso y usar solo las características esenciales.

Podría ser que las GPU de Amazon sean lentas por algún motivo https://www.reddit.com/r/MachineLearning/comments/305me5/slow_gpu_performance_on_amazon_g22xlarge/
Informe interesante: "Un g2.2xlarge es un GK104 con reducción de frecuencia (797 MHz), lo que lo haría 1/4 de la velocidad del TitanX lanzado recientemente y 2.7 veces más lento que un GTX 980".

fwiw, obteniendo 2015-11-13 00:38:05.472034: paso 20, pérdida = 4.64 (362.5 ejemplos/seg; 0.353 seg/lote)
ahora con 7 cpus y cifar10_multi_gpu_train.py. Cambié todas las referencias de dispositivos de gpu a cpu, si eso tiene sentido.

bien, raro. 2015-11-13 00: 43: 56.914273: paso 10, pérdida = 4.65 (347.4 ejemplos / seg; 0.368 seg / lote) y usando 2 cpus, claramente algo falló aquí. Debe estar usando la GPU todavía. Es interesante que procese un poco más rápido que la versión de GPU única del script.

incluso con las instrucciones de erikbern sigo recibiendo

AssertionError: el modelo divergió con pérdida = NaN cuando intento cifar_train.py y esto cuando ejecuto mnist/convolutional.py

Época 1.63
Pérdida de minilote: nan, tasa de aprendizaje: nan
Error de minilote: 90,6%
Error de validación: 90,4%
Época 1.75
Pérdida de minilote: nan, tasa de aprendizaje: 0.000000
Error de minilote: 92,2%
Error de validación: 90,4%
Época 1.86
Pérdida de minilote: nan, tasa de aprendizaje: 0.000000

Conseguí que se ejecutara en GPU en AWS, pero al igual que los demás, obtengo velocidades poco impresionantes.

Pude ejecutar el ejemplo convolucional.py sin quedarme sin memoria después de usar la solución correcta sugerida por @zheng-xq de configurar la opción al ejecutar configurar

El script de instalación proporcionado por @erikbern ya no funciona a partir de la confirmación 9c3043ff3bf31a6a81810b4ce9e87ef936f1f529

El compromiso más reciente introdujo este error, @keveman ya hizo una nota sobre el compromiso aquí:
https://github.com/tensorflow/tensorflow/commit/9c3043ff3bf31a6a81810b4ce9e87ef936f1f529#diff-1a60d717df0f558f55ec004e6af5c7deL25

¡Hola! Tengo un problema con la compilación de tensorflow con GTX 670. Corro

TF_UNOFFICIAL_SETTING=1 ./configure
bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer

Recibí un error:

INFO: Found 1 target...
INFO: From Compiling tensorflow/core/kernels/bias_op_gpu.cu.cc:
tensorflow/core/kernels/bias_op_gpu.cu.cc(40): error: identifier "__ldg" is undefined
          detected during:
            instantiation of "void tensorflow::functor::BiasOpCustomKernel(int, const T *, const T *, int, int, T *) [with T=float]" 
(57): here
            instantiation of "void tensorflow::functor::Bias<tensorflow::GPUDevice, T, Dims>::operator()(const tensorflow::functor::Bias<tensorflow::GPUDevice, T, Dims>::Device &, tensorflow::TTypes<T, Dims, Eigen::DenseIndex>::ConstTensor, tensorflow::TTypes<T, 1, Eigen::DenseIndex>::ConstVec, tensorflow::TTypes<T, Dims, Eigen::DenseIndex>::Tensor) [with T=float, Dims=2]" 
(69): here

tensorflow/core/kernels/bias_op_gpu.cu.cc(40): error: identifier "__ldg" is undefined
          detected during:
            instantiation of "void tensorflow::functor::BiasOpCustomKernel(int, const T *, const T *, int, int, T *) [with T=double]" 
(57): here
            instantiation of "void tensorflow::functor::Bias<tensorflow::GPUDevice, T, Dims>::operator()(const tensorflow::functor::Bias<tensorflow::GPUDevice, T, Dims>::Device &, tensorflow::TTypes<T, Dims, Eigen::DenseIndex>::ConstTensor, tensorflow::TTypes<T, 1, Eigen::DenseIndex>::ConstVec, tensorflow::TTypes<T, Dims, Eigen::DenseIndex>::Tensor) [with T=double, Dims=2]" 
(69): here

2 errors detected in the compilation of "/tmp/tmpxft_000067dd_00000000-7_bias_op_gpu.cu.cpp1.ii".
ERROR: /home/piotr/tensorflow/tensorflow/tensorflow/core/BUILD:248:1: output 'tensorflow/core/_objs/gpu_kernels/tensorflow/core/kernels/bias_op_gpu.cu.o' was not created.
ERROR: /home/piotr/tensorflow/tensorflow/tensorflow/core/BUILD:248:1: not all outputs were created.
Target //tensorflow/cc:tutorials_example_trainer failed to build

Información sobre mi tarjeta de dispositivos de muestra de NVIDIAQuery:

Device 0: "GeForce GTX 670"
  CUDA Driver Version / Runtime Version          7.5 / 7.0
  CUDA Capability Major/Minor version number:    3.0
  Total amount of global memory:                 2046 MBytes (2145235968 bytes)
  ( 7) Multiprocessors, (192) CUDA Cores/MP:     1344 CUDA Cores
  GPU Max Clock rate:                            980 MHz (0.98 GHz)
  Memory Clock rate:                             3004 Mhz
  Memory Bus Width:                              256-bit
  L2 Cache Size:                                 524288 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.5, CUDA Runtime Version = 7.0, NumDevs = 1, Device0 = GeForce GTX 670

¿Alguna idea de por qué no funciona?
¡Gracias!

creo que el primitivo __ldg solo existe para 3.5+. Tenemos una solución interna para admitir ambos que intentaremos lanzar pronto.

Consulte https://github.com/tensorflow/tensorflow/issues/320 para obtener más detalles.

¡Gracias! Agregar la solución del n. ° 320 me ayudó, puedo compilar (con muchas advertencias) y ejecutar

bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu

Cuando ejecuto ejemplos:

tensorflow/models/image/mnist$ python convolutional.py 

Recibo advertencia de que:

Ignoring gpu device (device: 0, name: GeForce GTX 670, pci bus id: 0000:01:00.0) with Cuda compute capability 3.0. The minimum required Cuda capability is 3.5.

¿Cómo habilitar GPU en ejemplos de tensorflow/modelos/imágenes?

@erikbern
¿Descubriste un problema de GPU múltiple en Amazon? También estoy ejecutando una instancia de GPU múltiple CIFAR pero no veo ninguna aceleración.

Este es el estado de uso de GPU, parece que todas las GPU están en uso pero no hacen nada.

+------------------------------------------------- -----+
| NVIDIA-SMI 346.46 Versión del controlador: 346.46 |
|-----------------------------------------------+----------------- -----+-------------------------------------+
| Nombre de GPU Persistencia-M| Bus-Id Disp.A | Descorr. volátil ECC |
| Fan Temp Perf Pwr:Uso/Cap | Uso de memoria | GPU-Util Cómputo M. |
|===============================+================== =====+======================|
| 0 GRID K520 Desactivado | 0000:00:03.0 Desactivado | N/A |
| N/A 54C P0 55W / 125W | 3832MiB / 4095MiB | 37% por defecto |
+----------------------------------------+----------------- -----+-------------------------------------+
| 1 GRID K520 Desactivado | 0000:00:04.0 Desactivado | N/A |
| N/A 42C P0 42W / 125W | 3796MiB / 4095MiB | 0% Predeterminado |
+----------------------------------------+----------------- -----+-------------------------------------+
| 2 GRID K520 Apagado | 0000:00:05.0 Desactivado | N/A |
| N/A 46C P0 43W / 125W | 3796MiB / 4095MiB | 0% Predeterminado |
+----------------------------------------+----------------- -----+-------------------------------------+
| 3 GRID K520 Apagado | 0000:00:06.0 Desactivado | N/A |
| N/A 43C P0 41W / 125W | 3796MiB / 4095MiB | 0% Predeterminado |
+----------------------------------------+----------------- -----+-------------------------------------+

+------------------------------------------------- ----------------------------+
| Procesos: Memoria GPU |
| GPU PID Tipo Nombre del proceso Uso |
|================================================= ============================|
| 0 60160 C pitón 3819MiB |
| 1 60160 C pitón 3783MiB |
| 2 60160 C pitón 3783MiB |
| 3 60160 C pitón 3783MiB |
+------------------------------------------------- ----------------------------+

@mhejrati según un comentario en https://news.ycombinator.com/item?id=10555692 parece que no puede hacerlo en AWS:

La virtualización de Xen deshabilita las copias P2P, por lo que las GPU tienen lo que llamamos una "falla de comunicación y algunas GPU a las que simplemente no puede acceder (sin pasar por la CPU)".

No estoy seguro de cuán confiables son los comentarios de HN, pero eso es todo lo que sé hasta ahora.

@erikbern @mhejrati No estoy tan seguro de que la propiedad específica de Xen sea un problema. Las copias P2P no parecen ser necesarias ya que la CPU aún puede asignar trabajo a cada GPU sin que las GPU necesiten comunicarse entre sí. Todavía es extraño que todas las GPU en la instancia parezcan estar en este estado semiutilizado, pero el trabajo continúa sin errores.

Cerraré este error. Abra uno nuevo con un título más específico si quedan algunos problemas sin resolver.

¿Significa que la última versión de tensorflow funciona en instancias de Amazon g2 sin hacks? ¿Y significa que allí funciona más de una GPU?

No estoy seguro de si deberíamos llamar a TF_UNOFFICIAL_* "no un truco", pero sí, _debería_ funcionar. Si no es así, es probable que no esté relacionado con Cuda 3.0 per se, y deberíamos tener un error más específico.

¿Y es posible ejecutar código en dos o más GPU en una instancia de Amazon? Por ejemplo, paralelismo de datos para entrenar un modelo como en el ejemplo de CIFAR. Varios chicos solo 5 comentarios por encima de este comentario escribieron que no era posible.

No sé. Pero si eso sigue siendo un problema con 0.6.0, debería ser un error, solo uno más específico sobre varias GPU.

Estoy usando 0.6.0 en ubuntu, no puedo usar más de una GPU. La utilización de GPU en una GPU siempre es 0.

Solo como punto de referencia, alquilar un K40 o K80 en realidad no es prohibitivamente caro. Amazon no los tiene, pero varias de las opciones en http://www.nvidia.com/object/gpu-cloud-computing-services.html sí. (Algunos por tan solo 3$/hr)

Theano y Torch no tienen ningún problema con Compute 3.0. ¿Podemos esperar que TensorFlow sea compatible con Compute 3.0 en el corto plazo?

O al menos agregue la capacidad de anular la restricción sin tener que volver a compilar.

@Dringite , puede habilitar Cuda 3.0 usando lo siguiente:

TF_UNOFFICIAL_SETTING=1 ./configurar

Debe ser funcional. Y si no es así, siéntase libre de presentar otro problema para rastrearlo.

La guía de instalación de tensorflow ahora también incluye una solución para cuda 3.0

El miércoles 10 de febrero de 2016 a las 2:37 p. m., zheng-xq [email protected] escribió:

@Dringite https://github.com/Dringite , puede habilitar Cuda 3.0 usando
la siguiente:

TF_UNOFFICIAL_SETTING=1 ./configurar

Debe ser funcional. Y si no es así, no dude en presentar otro
problema para rastrearlo.


Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment-182610763
.

Creo que la guía actual no funciona para gpu: la prueba devuelve nan como se informó anteriormente.
En particular, aún necesita hacer esto:
TF_UNOFFICIAL_SETTING=1 ./configurar

No puedo encontrar la guía de instalación que incluye una solución para cuda 3.0, ¿alguien podría señalarme? ¡GRACIAS!

printf "\ny\n7.5\n\n\n\n3.0\n" | ./configurar

7.5 es la versión cuda, 3.0 es la computación.

Todavía no hay mejoras en el rendimiento de varias GPU en Amazon (CUDA = 7,5, cudnn = 4,0, cómputo = 3,0) en comparación con una sola GPU.

¿Alguien tiene éxito en la capacidad de cómputo de Cuda 2.0?

Verificado que 'TF_UNOFFICIAL_SETTING=1 ./configure' funciona en un macbook pro con GeForce GT 750M. ¡Gracias!

¿Hay una ETA para la corrección oficial? Es realmente una molestia mantener (por ejemplo, crear imágenes con nuestro propio archivo acoplable) en producción.

Mi computadora portátil me da este registro cuando intento ejecutar mnist sample:
"Ignorando el dispositivo gpu (dispositivo: 0, nombre: GeForce GT 635M, id de bus pci) con capacidad de cómputo Cuda 2.1. La capacidad mínima requerida de Cuda es 3.0".
Entonces, ¿significa esto que no puedo usar la versión GPU porque el Cuda mínimo para tensorflow es 3.0?
Gracias

Si usa los binarios precompilados, sí. Si construye desde la fuente, puede
construya con soporte Cuda 2.1 pero no sé si eso realmente funciona. Es
probable que el mínimo efectivo sea cuda 3.0.
El sábado 10 de septiembre de 2016 a las 11:51 Mojtaba Tabatabaie [email protected]
escribió:

Mi computadora portátil me da este registro cuando intento ejecutar mnist sample:
"Ignorando dispositivo gpu (dispositivo: 0, nombre: GeForce GT 635M, id de bus pci) con Cuda
capacidad de cómputo 2.1. La capacidad mínima requerida de Cuda es 3.0. "
Entonces, ¿esto significa que no puedo usar la versión GPU porque el mínimo Cuda
para tensorflow es 3.0?
Gracias


Está recibiendo esto porque modificó el estado abierto/cerrado.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment-246128896 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AAjO_RvNrRMQEmsueXWoaU5FX4tWHZq3ks5qovwegaJpZM4Ge0kc
.

@smtabatabaie ¿Ha intentado crear cuDNN a partir de la fuente como lo sugiere @martinwicke ? Estoy enfrentando exactamente los mismos problemas que el suyo y me ayudaría mucho si comparte su experiencia.

Un poco de ayuda por favor. Recibo el mismo mensaje de error con "Ignorando el dispositivo gpu visible (dispositivo: 0, nombre: GeForce GT 750M, id de bus pci: 0000:01:00.0) con capacidad de cómputo Cuda 3.0. La capacidad Cuda mínima requerida es 3.5".

He leído las publicaciones de otros, el único problema es que se trata de una instalación directa de Windows y no en AWS, como supongo que la mayoría de las personas aquí tienen. En el sitio web de tensorflow, se indica que se requiere un mínimo de 3.0, ¿por qué no puedo usar esto? y ¿cómo puedo evitarlo?

Sugerencias sobre cómo hacer esto bienvenido por favor.

@gunan @mrry , ¿los paquetes de Windows no están construidos con cuda 3.0? Es esa la razón de
son tan pequeños?

@martinwicke Los nightlies son y rc1 también debería serlo.

nocturnas si.
rc0 creo que fue 3.5.
¿Elegimos el cambio para usar 3.0 a r0.12?

Elegimos el cambio.
@cydal puede usar las compilaciones nocturnas aquí:
http://ci.tensorflow.org/view/Nightly/job/nightly-win/14/DEVICE=gpu ,OS=windows/artifact/cmake_build/tf_python/dist/tensorflow_gpu-0.12.0rc0-cp35-cp35m-win_amd64. whl

O puede esperar a 0.12.0rc1, que debería aterrizar en unos días.

Gracias chicos por la rápida respuesta, no esperaba uno por un tiempo al menos. Lo siento si esto suena como una pregunta tonta, ¿cómo instalo esto? ¿Simplemente lo instalo? (si es así, ¿eliminé el gpu de tensorflow anterior? ¿O lo hace automáticamente?) ¿O requiere descargarlo e instalarlo manualmente de alguna manera? considérame un poco novato.

El enlace apunta a un "paquete PIP".
Si usó el comando pip install , debería poder usar el mismo comando con el indicador --upgrade .
O puede ejecutar pip uninstall tensorflow y luego instalar el paquete mencionado anteriormente.
Una vez que le dé al comando pip la URL, se descargará e instalará automáticamente.

Esto es todo lo que puedo dar con un conocimiento limitado de su sistema, su distribución de python, etc.
Considere hacer una búsqueda en Google para obtener más detalles sobre cómo funciona la instalación del paquete pip con su distribución de python.

Hola, simplemente desinstale el anterior y lo volvi a instalar y funciona! Muchas gracias, me salvaste de comprar una nueva computadora portátil.

Hola @gunan con el último cambio para la compatibilidad con 3.5, obtengo el siguiente registro:

>>>> sess = tf.Session()
I c:\tf_jenkins\home\workspace\nightly-win\device\gpu\os\windows\tensorflow\core
\common_runtime\gpu\gpu_device.cc:885] Found device 0 with properties:
name: Quadro K4100M
major: 3 minor: 0 memoryClockRate (GHz) 0.7055
pciBusID 0000:01:00.0
Total memory: 4.00GiB
Free memory: 3.69GiB
I c:\tf_jenkins\home\workspace\nightly-win\device\gpu\os\windows\tensorflow\core
\common_runtime\gpu\gpu_device.cc:906] DMA: 0
I c:\tf_jenkins\home\workspace\nightly-win\device\gpu\os\windows\tensorflow\core
\common_runtime\gpu\gpu_device.cc:916] 0:   Y
I c:\tf_jenkins\home\workspace\nightly-win\device\gpu\os\windows\tensorflow\core
\common_runtime\gpu\gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (d
evice: 0, name: Quadro K4100M, pci bus id: 0000:01:00.0)
E c:\tf_jenkins\home\workspace\nightly-win\device\gpu\os\windows\tensorflow\core
\common_runtime\gpu\gpu_device.cc:586] Could not identify NUMA node of /job:loca
lhost/replica:0/task:0/gpu:0, defaulting to 0.  Your kernel may not have been bu
ilt with NUMA support.

¿Cómo puedo evitarlo? Sugerencias sobre cómo hacer esto son bienvenidas.

@ kay10 Parece que funcionó. Ese mensaje de error en la última línea es inocuo y se eliminará en el lanzamiento.

Como veo en este hilo, todos tienen un nivel de compatibilidad 3. Para aquellos que tienen una compatibilidad de 2, ¿hay alguna solución sin compilar el código fuente?
Probé la compilación nocturna compartida por @gunan y obtuve el error:
tensorflow_gpu-0.12.0rc0-cp35-cp35m-win_amd64.whl is not a supported wheel on this platform.
no es una rueda de Linux y me di cuenta un poco pronto.

Situación actual en un Ubuntu 16.04.
I tensorflow/core/common_runtime/gpu/gpu_device.cc:948] Ignoring visible gpu device (device: 0, name: GeForce GTX 590, pci bus id: 0000:03:00.0) with Cuda compute capability 2.0. The minimum required Cuda capability is 3.0. I tensorflow/core/common_runtime/gpu/gpu_device.cc:948] Ignoring visible gpu device (device: 1, name: GeForce GTX 590, pci bus id: 0000:04:00.0) with Cuda compute capability 2.0. The minimum required Cuda capability is 3.0.

@batuhandayioglugil demasiados de nuestros núcleos de GPU dependen de una funcionalidad que solo está disponible en 3.0 y superior, por lo que lamentablemente necesitará una GPU más nueva. También podría considerar probar uno de los servicios en la nube.

@vrv llegué a este punto después de dedicar bastante tiempo a estos problemas y comprar una fuente de alimentación nueva, por lo que me costó mucho. Para evitar más pérdidas de tiempo, quiero hacer una pregunta: hay al menos 15 bibliotecas de aprendizaje profundo que escuché. Cuda y cuDNN eran necesarios para tensorflow. ¿Es esta situación (capacidad de cómputo) especial para la biblioteca cuda? ¿Puedo tener otras oportunidades? si no, me daré por vencido y seguiré trabajando con CPU (perdonen mi ignorancia)

Creo que será más problemático de lo que vale la pena tratar de hacer funcionar su tarjeta 2.0: es posible que su CPU existente sea tan rápida o más rápida que su GPU específica, y muchos menos problemas para comenzar. Lamentablemente, no sé qué requieren otras bibliotecas.

¿Ya es compatible con GPU Compute 3.0?

si.

@martinwicke gracias por la rápida respuesta. ¿Todavía tengo que construirlo desde la fuente, o simplemente instalarlo directamente? Estoy en Arch Linux y lucho por construirlo desde la fuente dando un error con el compilador c.

Creo que debería funcionar desde binario.

Tengo el mismo problema: "Ignorando el dispositivo gpu (dispositivo: 0, nombre: GeForce GT 635M, id de bus pci) con capacidad de cómputo Cuda 2.1. La capacidad Cuda mínima requerida es 3.0". . @smtabatabaie @martinwicke @alphajatin. ayuda !!!!

La capacidad informática 2.1 es demasiado baja para ejecutar TensorFlow. Necesitará una tarjeta gráfica más nueva (o más potente) para ejecutar TensorFlow en una GPU.

La URL de respuesta a la pregunta no es válida. ¿Puedes actualizarlo?

Para los paquetes de pip nocturnos, la forma recomendada de instalar es usar el comando pip install tf-nightly .
ci.tensorflow.org está en desuso.

¿Fue útil esta página
0 / 5 - 0 calificaciones