Caffe: Instrucciones adecuadas de instalación de la sucursal opencl de Caffe para Intel GPU

Creado en 16 dic. 2016  ·  87Comentarios  ·  Fuente: BVLC/caffe

Lamento tener que abrir esto, pero tanto en la rama de opencl github como en los foros de Google no tienen ningún tipo (actualizado) de instrucciones de instalación paso a paso para instalar Caffe Opencl en Intel GPU con controladores Intel Opencl, especialmente para alguien nuevo.

(a) ¿Siguen funcionando estas instrucciones?
cmake -DUSE_GREENTEA = ON -DUSE_INTEL_SPATIAL = ON -DUSE_ISAAC = ON path_to_caffe_source
hacer -jn
hacer -jn runtest

en esta rama https://github.com/BVLC/caffe/tree/opencl? o

¿Qué pasa?
cmake -DUSE_GREENTEA = ON -DUSE_INTEL_SPATIAL = ON -DUSE_ISAAC = ON -DBUILD_SHARED_LIBS = OFF -DUSE_CUDNN = OFF -DUSE -DBUILD_docs = OFF -DBUILD_python = OFF -DBUILD-open

(b) ¿Se sigue necesitando atlaspack para compilar opencl-caffe cuando hay clblas? ¿Sigue pidiendo atlaspack ???

(c) ¿Qué pasa con Vienna CL? ¿Esa rama todavía depende de ellos? ¿Es necesario?

(D) ¿Para qué sirve libdnn? en lugar de ?

(e) ¿Qué pasa con ISAAC?

(f) La rama de Windows, por ejemplo, habla "Si CUDA no está instalado, Caffe utilizará de forma predeterminada una compilación CPU_ONLY".

Actualice amablemente y proporcione instrucciones paso a paso
Gracias

OpenCL question windows

Comentario más útil

@atlury
Hay una sección Windows en el archivo Léame que guía cómo compilar e instalar en Windows.
El único paso que falta en esa descripción es descargar ViennaCL-DEV:
https://github.com/viennacl/viennacl-dev

Puede colocarse en cualquiera de las rutas donde CMake lo encontrará, como junto a la carpeta en la que clonó Caffe.

Las instrucciones de compilación son diferentes de las instrucciones de Linux, ya que es un script que se encarga automáticamente de la configuración de CMake y las dependencias de descarga.

Por lo general, no hay una gran necesidad de preocuparse por la configuración en Windows, ya que está diseñado para funcionar. Sin embargo te daré una explicación rápida:
(a) No y no. Utilice scripts/build_win.cmd como se describe en el archivo Léame.
(b) Sí, no importa cómo lo compile, siempre se necesita una CPU BLAS. Pero build_win.cmd se encargará de eso por usted, y su configuración predeterminada es usar OpenBLAS.
(c) Sí, se necesita ViennaCL, clonar desde aquí: https://github.com/viennacl/viennacl-dev
(d) LibDNN es el motor de convolución predeterminado para las GPU OpenCL, en sustitución de cuDNN.
También hay núcleos Intel adicionales para GPU Intel disponibles y habilitados de forma predeterminada.
(e) ISAAC, clBLAS y CLBlast son estrictamente opcionales. Debe compilarlos por separado en Windows y agregarlos a las dependencias si desea usarlos. No garantizo ni apoyo la compilación de ninguna de estas bibliotecas, están respaldadas por los respectivos mantenedores del proyecto.
(f) No, en la rama OpenCL, esto no es cierto. El valor predeterminado aquí es USE_GREENTEA = ON, USE_CUDA = OFF, CPU_ONLY = OFF.

Actualizaré el archivo Léame después de Navidad cuando tenga vacaciones. Lamentablemente, no tengo tiempo para un paso a paso detallado en este momento.
CC: @willyd

Todos 87 comentarios

@atlury
Hay una sección Windows en el archivo Léame que guía cómo compilar e instalar en Windows.
El único paso que falta en esa descripción es descargar ViennaCL-DEV:
https://github.com/viennacl/viennacl-dev

Puede colocarse en cualquiera de las rutas donde CMake lo encontrará, como junto a la carpeta en la que clonó Caffe.

Las instrucciones de compilación son diferentes de las instrucciones de Linux, ya que es un script que se encarga automáticamente de la configuración de CMake y las dependencias de descarga.

Por lo general, no hay una gran necesidad de preocuparse por la configuración en Windows, ya que está diseñado para funcionar. Sin embargo te daré una explicación rápida:
(a) No y no. Utilice scripts/build_win.cmd como se describe en el archivo Léame.
(b) Sí, no importa cómo lo compile, siempre se necesita una CPU BLAS. Pero build_win.cmd se encargará de eso por usted, y su configuración predeterminada es usar OpenBLAS.
(c) Sí, se necesita ViennaCL, clonar desde aquí: https://github.com/viennacl/viennacl-dev
(d) LibDNN es el motor de convolución predeterminado para las GPU OpenCL, en sustitución de cuDNN.
También hay núcleos Intel adicionales para GPU Intel disponibles y habilitados de forma predeterminada.
(e) ISAAC, clBLAS y CLBlast son estrictamente opcionales. Debe compilarlos por separado en Windows y agregarlos a las dependencias si desea usarlos. No garantizo ni apoyo la compilación de ninguna de estas bibliotecas, están respaldadas por los respectivos mantenedores del proyecto.
(f) No, en la rama OpenCL, esto no es cierto. El valor predeterminado aquí es USE_GREENTEA = ON, USE_CUDA = OFF, CPU_ONLY = OFF.

Actualizaré el archivo Léame después de Navidad cuando tenga vacaciones. Lamentablemente, no tengo tiempo para un paso a paso detallado en este momento.
CC: @willyd

@ naibaf7
Gracias por la rápida respuesta. ¿Qué pasa con las instrucciones de Linux?

¿Siguen siendo necesarios OpenCL BLAS e ISAAC?
https://github.com/01org/caffe/wiki/clCaffe

@atlury
Dos formas en Linux: use CMAKE y use 'make all -j8' o copie el archivo makefile.config.example a makefile.config y compile usando make all -j8; make pycaffe -j8; make runtest -j8 .
Tenga en cuenta que los resultados compilados de Makefile y CMAKE son ligeramente diferentes en Linux. El Makefile es más antiguo, pero más sencillo, y el CMAKE es más complejo.

Esta rama no es la misma que https://github.com/01org/caffe/wiki/clCaffe
por lo tanto, tiene diferentes requisitos. Sin embargo, los núcleos espaciales de Intel de allí se han fusionado en esta rama.

Requisitos estrictos:

  • ViennaCL, OpenCL y los requisitos normales de Caffe como Gflags, HDF5, etc.
  • Puede obtener OpenCL SDK con CUDA, AMD APP SDK o Intel OpenCL SDK. Esto es cierto tanto para Windows como para Linux. Mac OS X debería proporcionar su propia implementación de OpenCL.

Requisitos opcionales:

  • clBLAS (de AMD)
  • CLBlast (de @cnugteren)
  • ISAAC
  • cuDNN
  • CUDA

Gracias @ naibaf7
Y también para Linux, ¿LIBDNN es solo para la mayoría de los chips nVidia y AMD? ¿Y deberíamos usar Intel espacial para Intel iGPU?

@atlury
Intel espacial no admite la propagación hacia atrás eficiente y no todas las formas de convoluciones, pero sí, es la propagación hacia adelante más rápida en las iGPU de Intel.
Pero te sugiero que pruebes ambos y compruebes qué funciona mejor para tus redes y dispositivos.

@ naibaf7

Fabian, ¿la compilación de Windows será compatible con la compilación con Mingw-64? Amablemente hágamelo saber. Si hay instrucciones específicas para ello? El estudio de Mocosoft está demasiado hinchado.

@atlury Actualmente no, que yo sepa. @willyd es el principal contribuyente y mantenedor de la construcción de Windows, así que tal vez pueda responder a eso.
Si bien Microsoft Studio puede estar un poco hinchado, es bastante conveniente con él, ya que @willyd precompiló todas las dependencias para VS2015 y VS2013. Entonces imagino que usar mingw-64 es mucho más trabajo.

No tengo ninguna intención de admitir mingw-64 ya que CUDA no admite mingw como compilador de host en Windows. Dicho esto, doy la bienvenida a cualquier RP relacionado con el soporte de mingw64 si no agregan demasiada complejidad a la compilación.

@willyd
Genial, lo que pensé. En este caso, estoy a favor de la simplicidad, ya que el soporte de Windows sin MinGW64 no me parece un escollo importante. Es preferible utilizar el compilador estándar con cada sistema operativo respectivo.
Lo que más me preocupa es la sobrecarga de soporte cuando la gente usa configuraciones de compilación complicadas.

@ naibaf7

¿La compilación de windows opencl incluye soporte para el motor: ESPACIAL? Cuando incluyo engine: SPATIAL o engine: INTEL_SPATIAL, aparece uno de los siguientes errores

_La capa conv1 tiene un motor desconocido.
_Error al analizar el formato de texto caffe.NetParameter: 18: 3: Valor de enumeración desconocido de "SPATIAL" para el campo "motor" ._

La wiki es confuso read.me https://github.com/BVLC/caffe/tree/opencl

Menciona tanto _add entry engine: SPATIAL_ a todas las especificaciones de la capa de convolución. así como _ "motor: INTEL_SPATIAL <-------------------------- esta línea!" _

¿Cuál?

Y funciona bien sin el motor: espacial en prototxt.

_opencl-caffe-test.exe imagenet_deploy.prototxt bvlc_reference_caffenet.caffemodel imagenet_mean.binaryproto synset_words.txt truck.jpg
Usar GPU con ID de dispositivo 0
---------- Predicción para truck.jpg ----------
0.9872 - "n03417042 camión de basura, carro de basura"
0.0110 - "n04467665 camión de remolque, remolque de tractor, plataforma de transporte, plataforma, camión articulado, semi"
0,0013 - "n03496892 cosechadora, segadora"
0.0002 - "n04428191 trilladora, trilladora, trilladora"
0.0001 - "n04461696 grúa, remolque, camión de auxilio" _

También aquí hay algunas "otras" observaciones
a) Funciona mejor cuando se compila como DLL en lugar de estático. Resuelve especialmente el error _ "Error de verificación: registro.count (tipo) == 1 (0 frente a 1) Tipo de capa desconocido" _ (visual studio 2015)
b) No parece recoger OpenCL.lib, por lo que la solución es copiarlo manualmente desde la carpeta opencl-sdk a la carpeta de compilación (¿cuál espera que sea el nombre de la variable de ruta?)
c) Las bibliotecas extraídas en la carpeta de compilación podrían compilarse a la última versión (digamos, por ejemplo, opencv 3.2, etc.)

Más

C: \ Descargas \ xxx.caffe-opencl-build \ bin> caffe device_query
I0108 12: 35: 04.885713 19872 común. cpp: 382 ] Total de dispositivos: 3

I0108 12: 35: 04.888244 19872 común. cpp: 383 ] Dispositivos CUDA: 0
I0108 12: 35: 04.889102 19872 común. cpp: 384 ] Dispositivos OpenCL: 3

I0108 12: 35: 04.889681 19872 común. cpp: 408 ] Id. de dispositivo: 0

I0108 12: 35: 04.890744 19872 común. cpp: 410 ] Backend del dispositivo: OpenCL
I0108 12: 35: 04.891839 19872 común. cpp: 412 ] Detalles del backend: Intel (R) Corporation: OpenCL 1.2
I0108 12: 35: 04.893450 19872 común. cpp: 414 ] Proveedor del dispositivo: Intel (R) Corporation
I0108 12: 35: 04.894731 19872 común. cpp: 416 ] Nombre: Intel (R) HD Graphics 4400
I0108 12: 35: 04.895730 19872 común. cpp: 418 ] Memoria global total: 1708759450

I0108 12: 35: 04.897233 19872 común. cpp: 408 ] Id. de dispositivo: 1
I0108 12: 35: 04.898505 19872 común. cpp: 410 ] Backend del dispositivo: OpenCL
I0108 12: 35: 04.899590 19872 común. cpp: 412 ] Detalles del backend: Intel (R) Corporation: OpenCL 1.2
I0108 12: 35: 04.901091 19872 común. cpp: 414 ] Proveedor del dispositivo: Intel (R) Corporation
I0108 12: 35: 04.902592 19872 común. cpp: 416 ] Nombre: Intel (R) Core (TM) i5-4210U CPU @ 1.70GHz
I0108 12: 35: 04.904093 19872 común. cpp: 418 ] Memoria global total: 8513761280

I0108 12: 35: 04.905594 19872 común. cpp: 408 ] Id. de dispositivo: 2
I0108 12: 35: 04.907114 19872 común. cpp: 410 ] Backend del dispositivo: OpenCL
I0108 12: 35: 04.908617 19872 común. cpp: 412 ] Detalles del backend: Intel (R) Corporation: OpenCL 2.1
I0108 12: 35: 04.910100 19872 común. cpp: 414 ] Proveedor del dispositivo: Intel (R) Corporation
I0108 12: 35: 04.911598 19872 común. cpp: 416 ] Nombre: Intel (R) Core (TM) i5-4210U CPU @ 1.70GHz
I0108 12: 35: 04.913100 19872 común. cpp: 418 ] Memoria global total: 8513761280

Me parece bien, aunque parece que tiene instalados un OpenCL 2.1 más nuevo y un OpenCL 1.2 más antiguo. Como sigue siendo una CPU Haswell, no estoy seguro de si Intel ya tiene un controlador 2.1 / 2.0 para su chip. Pero debería intentar actualizar su OpenCL SDK para su GPU.

De todos modos, si desea utilizar INTEL_SPATIAL, también debe habilitarlo en el momento de la compilación. Después de eso, se convierte en el motor estándar en los dispositivos Intel GPU.
Puedes hacer eso aquí:
https://github.com/BVLC/caffe/blob/opencl/scripts/build_win.cmd#L82
(scripts / build_win.cmd, línea 82)

sin embargo, el kernel espacial de Intel aún no se ha probado a fondo en Windows.

Intentaré actualizar opencl sdk y acabo de ver tus confirmaciones, intentaré habilitarlas, recompilarlas, probarlas y reportarlas.
Gracias

Okie con si NO ESTÁ DEFINIDO USE_INTEL_SPATIAL establezca USE_INTEL_SPATIAL = 1

Build_win.cmd arroja el siguiente error.

C: \ Descargas \ caffe-opencl \ buildALL_BUILD.vcxproj "(destino predeterminado) (1) ->
C: \ Descargas \ caffe-opencl \ build \ src \ caffe \ caffe.vcxproj "(destino predeterminado) (3) ->

(Destino ClCompile) -> C: \ Descargas \ caffe-opencl \ src \ caffe \ layer \ conv_layer_spatial.cpp (1453): error C2572: 'caffe :: ConvolutionLayerSpatial:: swizzleWeights ': redefinición del argumento predeterminado: parámetro 1 [C: \ Descargas \ caffe-opencl \ build \ src \ caffe \ caffe.vcxproj]

C: \ Descargas \ caffe-opencl \ src \ caffe \ layer \ conv_layer_spatial.cpp (1458): error C2572: 'caffe :: ConvolutionLayerSpatial:: swizzleWeights ': redefinición del argumento predeterminado: parámetro 1 [C: \ Downloads \ caffe-opencl \ build \ src \ caffe \ caffe.vcxproj]

Ok, lo investigaré.
@gongzg como referencia.

Hola todos,
¡Gracias por tu gran trabajo!
Logré compilar y ejecutar caffe-opencl en Windows e Intel HD 4400 con USE_INTEL_SPATIAL = 0 (el tiempo de caffe es aproximadamente 2 veces más lento que ejecutar caffe-cpu en i5-4210U de 2 núcleos, a menos que esté haciendo algo mal). Sin embargo, al compilar con USE_INTEL_SPATIAL = 1, también obtengo el mismo error que @atlury (y creo que tengo el mismo hardware en mi Lenovo X240). Tengo curiosidad por ver si el uso de INTEL_SPATIAL ayudará a que la ejecución de caffe-opencl sea más rápida en esta GPU que en una CPU ...

@gfursin Debería, por un amplio margen. LibDNN espera que la GPU tenga una arquitectura de memoria diferente a la que tienen los chips Intel, por lo que no funciona de manera óptima en este momento.
Actualmente estamos investigando cómo arreglar los kernels de Intel para que también funcionen en Windows.

¡Súper! ¡Muchas gracias!

Por cierto, @atlury , al seleccionar el dispositivo 1 y 2, el "tiempo de caffe" fallaba cada vez después de aproximadamente 10 segundos. ¿

@gfursin No, no https://github.com/BVLC/caffe/pull/5165

Hay un artículo de Intel publicado aquí (clcaffe)
http://www.slideshare.net/IntelSoftware/clcaffe-unleashing-the-power-of-intel-graphics-for-deep-learning-acceleration

Donde los siguientes puntos de referencia (página 28 GT3 GPU) fueron compatibles con INTEL SPATIAL en capas de convolución.
Alexnet - 290 imágenes / segundo
GoogleNet: 77 imágenes / segundo
VGGA - 55 imágenes / segundo
Overfeat - 91 imágenes / segundo

Realmente quiero probar la detección de objetos (no solo la clasificación) también usando INTEL SPATIAL, pero no hay ningún ejemplo como tal en ninguna parte. Dudo que las Caffe Layers estén listas todavía. @ naibaf7 ?

@gongzg, ¿hay algún código fuente para las pruebas anteriores que podamos probar?

Además, se ha hecho que LiDNN funcione con tiny-dnn, lo cual es emocionante (aunque no hay muchos modelos previamente entrenados). También quiero probar la cuantificación y ver cómo opencl puede ayudar allí (8 bits, XNOR, etc.). ¡Finalmente, la detección de objetos en opencl en tiempo real sería increíble! Espero que @ naibaf7 pueda arrojar algo de luz.

@atlury Me
Intel espacial se usa automáticamente cuando compila con la opción habilitada.
Para la segmentación y detección de objetos, le sugiero que lea mi informe técnico y el artículo de ISBI 2016. Tengo las arquitecturas SK-Net y U-Net descritas allí que pueden hacer esto muy rápido. AlexNet se puede convertir a un SK-Net de este tipo.
Sin embargo, debe usar LibDNN para mantener el uso de memoria bajo en SK / U-Net.

Vaya, acabo de leer su artículo ... el concepto de núcleos Strided parece muy impresionante. No secuestrar este hilo, pero todos estos eventualmente deberán probarse en Opencl en Windows, pero antes de eso ...

¿Es esta una implementación solo de Python? ¿Sin c ++? ¿Hay modelos previamente entrenados? ¿Es aquí donde está el repositorio https://github.com/naibaf7/PyGreentea/tree/master/examples ? Sí, voy a usar LibDNN ...

@atlury Sí, la interfaz original era C ++ pero cambiamos a Python. Sin embargo, si desea proporcionar los datos a través de HDF5 o su propia interfaz C ++, eso también funcionará. Simplemente use los códigos del generador de red que proporciono en Python para ayudarlo a crear el prototipo correcto para redes de tipo SK / U.
Aquí hay un informe técnico un poco más antiguo pero completo: https://arxiv.org/abs/1509.03371 , incluye números de rendimiento antes de que se programara LibDNN.
No proporcionamos modelos previamente entrenados en este momento ya que los conjuntos de datos (clasificación EM) en los que los usamos y nuestros resultados aún no están publicados.

@atlury Algunos de los datos de referencia se miden utilizando convnet-benchmarks y puede reproducirlos en su plataforma. Actualmente, no tenemos otros ejemplos para compartir públicamente.

@atlury - ¡

@gfursin

Por favor haga lo siguiente.

  1. Utilice http://cdimage.ubuntu.com/daily-live/current/

  2. Instale el SDK de opencl y el tiempo de ejecución de opencl desde (no se requiere el parche del kernel)
    https://software.intel.com/en-us/intel-opencl/download
    https://software.intel.com/en-us/articles/opencl-drivers

  3. Descarga https://github.com/BVLC/caffe/tree/opencl
    (a) Compile con Viennacl, libdnn, intel espacial, opencv, etc. habilitados. Crea una biblioteca compartida. No habilito Python ya que no lo uso a menudo.

  4. VGG caffemodel, prototxt
    Descargar
    http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_16_layers.caffemodel
    https://gist.githubusercontent.com/ksimonyan/211839e770f7b538e2d8/raw/0067c9b32f60362c74f4c445a080beed06b07eb3/VGG_ILSVRC_16_layers_deploy.prototxt

incluir motor: INTEL_SPATIAL para todas las capas convolucionales en su despliegue.proto

Obtenga synset_words.txt

  1. Prueba usando este programa
    https://gist.github.com/atlury/f65fd41eb805cc5f77f666a59e71eae2

Solo asegúrese de que input_dim sea 1 (en su proto) y no 10 (solo le está dando una imagen a la vez) con 3 canales y el cambio de tamaño es automático.
input_dim: 1
input_dim: 3
input_dim: 224
input_dim: 224

Cualquier ayuda adicional me zumba en gtalk: atlury

Tenga en cuenta que esto solo funcionará en linux y que @ naibaf7 aún está trabajando en el soporte de opencl para windows

Muchas gracias @atlury por todos los detalles, muy apreciado, ¡lo https://github.com/dividiti/ck-caffe
Estoy esperando comentarios de mis colegas y si funciona bien, haremos un lanzamiento oficial en un par de semanas (posiblemente con soporte para dispositivos Android también) ...

Hola todos. Muchas gracias por la biblioteca y también por las discusiones anteriores.

Actualmente estoy tratando de compilar la última confirmación que corrigió la compilación de Windows OpenCL con USE_GREENTEA = 1, USE_LIBDNN = 1 y USE_INTEL_SPATIAL = 1, junto con los archivos de encabezado construidos para ViennaCL. Mi build_win.cmd se adjunta aquí: build_win.txt

Sin embargo, la mitad de la construcción de la biblioteca siempre termina con el siguiente error:
ninja: build stopped: subcommand failed.
ERROR: Build failed
En detalle:
E:\caffe-opencl\src\caffe\layers\conv_layer_spatial.cpp(1514) : error C2572: 'ca ffe::ConvolutionLayerSpatial<float>::swizzleWeights' : redefinition of default p arameter : parameter 4 ..\..\include\caffe/layers/conv_spatial_layer.hpp(164) : see declaration of 'caffe::ConvolutionLayerSpatial<float>::swizzleWeights' E:\caffe-opencl\src\caffe\layers\conv_layer_spatial.cpp(1519) : error C2572: 'ca ffe::ConvolutionLayerSpatial<double>::swizzleWeights' : redefinition of default parameter : parameter 4
Disculpas si este error es el mismo que se mencionó anteriormente.

Intenté con USE_INTEL_SPATIAL = 0 también pero con el siguiente error:
greentea_math_functions.cpp.obj : error LNK2019: unresolved external symbol clEn queueUnmapMemObject referenced in function "void __cdecl caffe::greentea_gpu_asu m<float>(int,int,struct _cl_mem * const,int,float *)" (??$greentea_gpu_asum@M<strong i="19">@ca</strong> ffe@@YAXHHQEAU_cl_mem@@HPEAM@Z) syncedmem.cpp.obj : error LNK2001: unresolved external symbol clEnqueueUnmapMemO bject benchmark.cpp.obj : error LNK2019: unresolved external symbol clWaitForEvents re ferenced in function "public: virtual __cdecl caffe::Timer::~Timer(void)" (??1Ti mer@caffe@@UEAA@XZ) benchmark.cpp.obj : error LNK2019: unresolved external symbol clReleaseEvent ref erenced in function "public: virtual __cdecl caffe::Timer::~Timer(void)" (??1Tim er@caffe@@UEAA@XZ) benchmark.cpp.obj : error LNK2019: unresolved external symbol clGetEventProfilin gInfo referenced in function "public: virtual float __cdecl caffe::Timer::MicroS econds(void)" (?MicroSeconds@Timer@caffe@@UEAAMXZ) bin\caffe.dll : fatal error LNK1120: 34 unresolved externals LINK failed. with 1120

Aconseje amablemente sobre esto. Muy apreciado.

@ yshen92 Se
El segundo error que recibe generalmente significa que su DLL de OpenCL no es válida, carece de algunos símbolos. ¿Puede decirnos qué hardware tiene y qué SDK de OpenCL ha instalado?
Este problema generalmente viene con los SDK de OpenCL que provienen de nVidia dentro de CUDA. Los SDK de Intel y AMD OpenCL deberían funcionar bien con la versión 1.2 y 2.0.

@ naibaf7 Muchas gracias por la respuesta.

Estoy construyendo la biblioteca en un Dell con Windows 8 Pro de 64 bits con Intel HD Graphics 4000 y NVIDIA NVS 5200M. Y acaba de instalar el último Intel OpenCL SDK v6.3 . Parece que el directorio OpenCL apuntaba al que viene con CUDA.

Entonces, en un intento de usar el SDK de Intel OpenCL en la compilación, eliminé CUDA e hice una modificación bastante burda en

IF("${ISWIN64}" STREQUAL "Win64")
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib "${OPENCL_LIB_DIR}" "$ENV{CUDA_LIB_PATH}" "$ENV{CUDA_PATH}/lib/x64" "$ENV{INTELOCLSDKROOT}/lib/x64")
ELSE("${ISWIN64}" STREQUAL "Win64")
FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib "${OPENCL_LIB_DIR}" "$ENV{CUDA_LIB_PATH}" "$ENV{CUDA_PATH}/lib/Win32" "$ENV{INTELOCLSDKROOT}/lib/x86")
ENDIF("${ISWIN64}" STREQUAL "Win64")

FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "${_OPENCL_INC_CAND}" "$ENV{CUDA_INC_PATH}" "$ENV{CUDA_PATH}/include" "$ENV{INTELOCLSDKROOT}/include")
FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "${_OPENCL_INC_CAND}" "$ENV{CUDA_INC_PATH}" "$ENV{CUDA_PATH}/include" "$ENV{INTELOCLSDKROOT}/include")
Básicamente, es solo para agregar las rutas del SDK de Intel. Sin embargo, no estoy seguro de si lo estoy haciendo bien. Como sin estos, el script no puede ubicar el SDK.

Sin embargo, sigo recibiendo el mismo error que el anterior (compilación sin Intel Spatial).
Y aquí está mi archivo de configuración tomado directamente del script para su referencia.
ConfigInfo.txt
¿Alguna idea de lo que hice mal?

Hola @atlury : finalmente encontré un poco de tiempo para instalar Ubuntu 17.04 y fue bastante sencillo instalar los controladores de GPU Intel sin ninguna reconstrucción del kernel, ¡gracias! También instalé Caffe-OpenCL.

Todavía hay un problema con el almacenamiento en caché del kernel, por lo que el costo inicial es muy alto, pero @ naibaf7 y @psyhtest están tratando de mejorarlo. La solución temporal para acelerar ligeramente el almacenamiento en caché del kernel es jugar con las variables de entorno VIENNACL_CACHE_PATH y CUDA_CACHE_DISABLE (consulte https://github.com/dividiti/ck-caffe/issues/44#issuecomment-277205871).

Sin embargo, tengo una pregunta: no entendí cómo agregar el motor: INTEL_SPATIAL para todas las capas convolucionales en deploy.proto. Todavía soy un usuario novato (estoy más en el lado del compilador tratando de optimizar las sub-bibliotecas). ¿Le importaría enviarme una muestra? ¡Se lo agradeceríamos mucho!

Otra nota: si es de algún interés, agregué soporte para ensamblar Caffe con OpenCL, ViennaCL y USE_INTEL_SPATIAL a través del marco CK (es decir, reconstrucción con un clic):

paquete de instalación ck

Puede encontrar detalles aquí: https://github.com/dividiti/ck-caffe/wiki/Installation

Estoy perfilando el almacenamiento en caché de ViennaCL en un par de plataformas en este momento. Sospecho que puede funcionar de manera bastante satisfactoria después de un par de cambios.

@gfursin : CUDA_CACHE_DISABLE tiene el efecto de deshabilitar el propio mecanismo de almacenamiento en caché de NVIDIA para los núcleos, por lo que solo ralentizará las cosas (en plataformas con tecnología NVIDIA, por supuesto). Sin embargo, lo necesito para la creación de perfiles de caché.

@psyhtest - gracias por tu nota ya que no te

@ naibaf7 ¿cuál es el estado del soporte de Windows ahora? Me pregunto si ya comenzó a trabajar en la habilitación del motor espacial de Intel para Windows también.

@gongzg Comencé a configurar el entorno de Windows en la computadora portátil Intel para probar esto, pero aún no llegué más allá. Entonces, el motor espacial de Intel todavía tiene problemas de compilación en Windows, pero el resto funciona.

@ naibaf7 Gracias por la actualización. Luego, verificaré si tenemos algún recurso interno para resolver los problemas del motor espacial interl en Windows.

¿Esta rama funciona para windows y amd gpu?

Sí lo es. Las GPU de AMD son totalmente compatibles con LibDNN tanto en Windows como en Linux. El soporte completo de GPU Intel seguirá el 28 de abril.

@ naibaf7
David, ¿podrías avisarme cuando el soporte para Windows OpenCL esté listo con python para Intel GPU? Tengo algunas cosas que probar e informar.

@hillarycanas - También confirmo que logré compilar y ejecutar la versión OpenCL de Caffe con libDNN en AMD con Windows 10 hace unos días (usé una APU AMD E1-2500 bastante antigua con Radeon HD Graphics solo para una prueba). Puede ver los resultados de rendimiento en http://tinyurl.com/k3dhsc2 (busque AMD).
Utilicé el paquete CK "lib-caffe-bvlc-opencl-libdnn-viennacl-universal" para compilar y ejecutar Caffe en Windows (consulte https://github.com/dividiti/ck-caffe/wiki/Installation#AMD_GPU).

Perdón por molestarme de nuevo. Después de los comentarios de los usuarios, agregamos soporte para empaquetar automáticamente la biblioteca y los binarios de Caffe para Windows en el CK, y ahora es posible instalar y comparar la CPU de Caffe y la versión de OpenCL en diferentes máquinas de Windows con una instalación mínima:

$ pip install ck
$ ck pull repo --url=https://github.com/dividiti/ck-caffe
$ ck install package:lib-caffe-bvlc-master-cpu-bin-win
$ ck install package:lib-caffe-bvlc-opencl-libdnn-viennacl-bin-win
$ ck crowdbench caffe --env.CK_CAFFE_BATCH_SIZE=1

@gfursin
Esto es genial :)
Caffe puede convertirse fácilmente en algo convencional así :)

Hola,

Intenté ejecutar la sucursal oficial de OpenCL de caffe ubicada en:
https://github.com/BVLC/caffe/tree/opencl en mi Mac con los siguientes detalles de hardware:
Nombre del modelo: MacBook Pro
Identificador del modelo: MacBookPro12,1
Nombre del procesador: Intel Core i5
Velocidad del procesador: 2,7 GHz
Número de procesadores: 1
Número total de núcleos: 2
Caché L2 (por núcleo): 256 KB
Caché L3: 3 MB
Memoria: 8 GB
Gráficos: Intel Iris Graphics 6100 1536 MB

Podría ejecutar el tutorial de Clasificación sin ningún problema. Sin embargo, cuando cambio al modo GPU e intento ejecutar net.forward (), el kernel muere cada vez. ¿Significa esto que esta rama de OpenCL caffe no es compatible con la tarjeta gráfica integrada Intel?

Gracias,

Sal

@saliltambe La rama OpenCL es compatible con Intel iGPU. Aunque la mayoría de las pruebas se realizan en el sistema Linux, también debería funcionar en Mac. ¿Cuál es el error específico que encontró cuando ejecutó net.forward ()?

@gongzg Muchas gracias por la respuesta. Recibo el siguiente mensaje de error cuando se ejecuta en el cuaderno jupyter: "El kernel parece haber muerto. Se reiniciará automáticamente". Estoy ejecutando un tamaño de lote muy pequeño, por lo que no creo que el kernel muera por quedarse sin memoria. Además, no obtengo un error cuando cambio al modo GPU usando: caffe.set_mode_gpu (). Solo obtengo el error cuando ejecuto net.forward ().

@saliltambe
Necesitamos un poco más de información: ¿Cómo lo compiló (versión del compilador, configuración de Caffe, qué bibliotecas BLAS habilitó)?
¿Puedes ejecutar ./build/test/test_all.testbin o ejecutar make runtest (si usaste Makefiles)?

@ naibaf7
Hola fabian, aquí tienes los detalles:
- General:
- Versión: 1.0.0
- Git: desconocido
- Sistema: Darwin
- Compilador de C ++: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++

- Lanzamiento de banderas CXX: -O3 -DNDEBUG -fPIC -Wall -std = c ++ 11 -DCMAKE_BUILD -Wno-sign-compare -Wno-uninitialized

- Indicadores de depuración CXX: -g -fPIC -Wall -std = c ++ 11 -DCMAKE_BUILD -Wno-sign-compare -Wno-uninitialized

  • - Tipo de construcción: Lanzamiento
  • - BUILD_SHARED_LIBS: ACTIVADO
  • - BUILD_python: ACTIVADO
  • - BUILD_matlab: APAGADO
  • - BUILD_docs: ON
  • - CPU_ONLY: APAGADO
  • - USE_OPENCV: ACTIVADO
  • - USE_FFT: APAGADO
  • - USE_LEVELDB: ACTIVADO
  • - USE_LMDB: ACTIVADO
  • - USE_NCCL: APAGADO
  • - ALLOW_LMDB_NOLOCK: APAGADO
  • - USE_HDF5: ACTIVADO



    • - Dependencias:

  • - BLAS: Sí (vecLib)
  • - Impulso: Sí (ver. 1.64)
  • - glog: Sí
  • - gflags: Sí
  • - protobuf: Sí (ver. 3.3.0)
  • - lmdb: Sí (ver. 0.9.19)
  • - LevelDB: Sí (ver. 1.20)
  • - Rápido: Sí (ver. 1.1.4)
  • - OpenCV: Sí (ver. 2.4.13.2)
  • - CUDA: No



    • - Python:

  • - Intérprete: /Users/stambe/anaconda/bin/python2.7 (ver. 2.7.13)
  • - Bibliotecas: /Users/stambe/anaconda/lib/libpython2.7.dylib (ver 2.7.13)
  • - NumPy: /Users/stambe/anaconda/lib/python2.7/site-packages/numpy/core/include (ver 1.12.1)

  • - Documentación:
  • - Doxygen: No
  • -- archivo de configuración :

  • -- Instalar en pc:
  • - Ruta de instalación: / Usuarios / stambe / Programas / caffe-opencl / build / install

  • - Configuración hecha

Advertencia de CMake (dev) en src / caffe / CMakeLists.txt:

La política CMP0022 no está establecida: INTERFACE_LINK_LIBRARIES define la interfaz de enlace. Ejecute "cmake --help-policy CMP0022" para obtener detalles sobre la política. Utilice el comando cmake_policy para establecer la política y suprimir esta advertencia.
El "caffe" de destino tiene una propiedad INTERFACE_LINK_LIBRARIES que difiere de sus propiedades LINK_INTERFACE_LIBRARIES.

INTERFACE_LINK_LIBRARIES:
caffeproto; /usr/local/lib/libboost_system-mt.dylib; /usr/local/lib/libboost_thread-mt.dylib; /usr/local/lib/libboost_filesystem-mt.dylib; / usr / local / lib / libglog. dylib; /usr/local/lib/libgflags.dylib; $ <$>: / usr / local / lib / libprotobuf.dylib>; $ <$: /usr/local/lib/libprotobuf.dylib>; / usr / local / lib / libhdf5_cpp.dylib; /usr/local/lib/libhdf5.dylib; /usr/lib/libpthread.dylib; / usr / lib / libz .dylib; /usr/lib/libdl.dylib; /usr/lib/libm.dylib; /usr/local/lib/libhdf5_hl_cpp.dylib; /usr/local/lib/libhdf5_hl.dylib; / usr / local / lib / libhdf5_cpp.dylib; /usr/local/lib/libhdf5.dylib; /usr/lib/libpthread.dylib; /usr/lib/libz.dylib; /usr/lib/libdl.dylib; /usr/lib/libm.dylib ; /usr/local/lib/libhdf5_hl_cpp.dylib; /usr/local/lib/libhdf5_hl.dylib; /usr/local/lib/liblmdb.dylib; /usr/local/lib/libleveldb.dylib; / Aplicaciones / Xcode. app / Contents / Developer / Platforms / MacOSX.platform / Developer / SDKs / MacOSX10.12.sdk / System / Library / Frameworks / OpenCL.framework; opencv_core; opencv_highgui; opencv_imgproc; -lcblas; -framework Acelerar; / usr / local / lib / libboost_python-mt.dylib

LINK_INTERFACE_LIBRARIES:

caffeproto; /usr/local/lib/libboost_system-mt.dylib; /usr/local/lib/libboost_thread-mt.dylib; /usr/local/lib/libboost_filesystem-mt.dylib; / usr / local / lib / libglog. dylib; /usr/local/lib/libgflags.dylib; /usr/local/lib/libprotobuf.dylib; /usr/local/lib/libhdf5_cpp.dylib; /usr/local/lib/libhdf5.dylib; / usr / lib /libpthread.dylib;/usr/lib/libz.dylib;/usr/lib/libdl.dylib;/usr/lib/libm.dylib;/usr/local/lib/libhdf5_hl_cpp.dylib;/usr/local/lib/ libhdf5_hl.dylib; /usr/local/lib/libhdf5_cpp.dylib; /usr/local/lib/libhdf5.dylib; /usr/lib/libpthread.dylib; /usr/lib/libz.dylib; / usr / lib / libdl .dylib; /usr/lib/libm.dylib; /usr/local/lib/libhdf5_hl_cpp.dylib; /usr/local/lib/libhdf5_hl.dylib; /usr/local/lib/liblmdb.dylib; / usr / local / lib / libleveldb.dylib; /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/OpenCL.framework; opencv_core; opencv_high_guimg; lcblas; -framework Accelerate; /usr/local/lib/libboost_python-mt.dylib

Cuando ejecuto make runtest -j8, aparece el siguiente error:
stambe- osx: build stambe $ make runtest -j8
[1%] Gtest objetivo creado
[2%] Destino creado caffeproto
[71%] Caffe objetivo construido
[71%] Construyendo el objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_deconvolution_layer.cpp.o
[72%] Construyendo el objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_db.cpp.o
[73%] Construyendo el objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_eltwise_layer.cpp.o
[73%] Construyendo el objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_dummy_data_layer.cpp.o
[73%] Construyendo el objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_embed_layer.cpp.o
[73%] Construyendo el objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_euclidean_loss_layer.cpp.o
[73%] Construyendo el objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_filter_layer.cpp.o
[75%] Construyendo el objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_filler.cpp.o
/ Usuarios / stambe / Programas / caffe-opencl / src / caffe / test / test_db. cpp: 23 : 27: error: uso de no declarado
identificador 'EXAMPLES_SOURCE_DIR'
root_images_ (string (EXAMPLES_SOURCE_DIR) + string ("imágenes /")) {}

¿Hay algún problema con mi instalación? Tenga en cuenta que no tengo problemas para ejecutar caffe en la CPU.

Gracias,
Sal

Gracias a los indicadores y pistas dados, me las arreglé para construir y ejecutar Caffe OpenCL con éxito en dos máquinas separadas con las siguientes especificaciones:

(A)

  • CPU: Intel i7-7567U de 3,5 GHz
  • iGPU: Intel Iris Plus 650
    (B)
  • CPU: Intel i7-4930K 3.4 GHz
  • Procesador gráfico: NVIDIA Geforce GTX 650

Podría ejecutar AlexNet, ResNet50 y ResNet152 en (A) y (B) sin problemas. El único problema que tengo es el procesamiento por

¿Más sugerencias y pistas sobre este? Gracias por adelantado.

@gongzg ¿ Algún

@ naibaf7 Hay algunos errores en el motor de convolución espacial actual y todavía no tengo tiempo para enviar esos PR a la rama de OpenCL ascendente. Parte de la razón es que todo mi trabajo actual depende del FP16 PR, así que quiero esperar a que se revise y se fusione el parche FP16. Por ahora, me gustaría recomendar a @jstumpin que pruebe la rama de optimización de inferencia de github.com/01org/caffe para comprobar si el problema ha desaparecido. La página wiki correspondiente está en Intel OpenCL caffe wiki

@jstumpin Es mejor aplicar la fusión de capas para resnet, y verá una ganancia de rendimiento notable.

Grandes consejos (y también noticias) por todas partes. Escuché sobre github.com/01org/caffe antes, pero no estaba muy interesado ya que estoy obligado a optar por la implementación de Windows. Recibo [especificaciones dadas en (A)]:

  1. AlexNet

    • 110 imágenes / seg, 164 imágenes / seg (lote = 15)

  2. ResNet50

    • 11 imágenes / seg, 14 imágenes / seg (lote = 5)

  3. ResNet152

    • 5 imágenes / seg, 6 imágenes / seg (lote = 2)

Los siguientes están privados de Intel espacial:

  1. AlexNet

    • 113 imágenes / seg, 114 imágenes / seg (lote = 15)

  2. ResNet50

    • 9 imágenes / seg, 14 imágenes / seg (lote = 5)

  3. ResNet152

    • 5 imágenes / seg, 6 imágenes / seg (lote = 2)

Para completar, también he comparado con OpenCV 3.3.0 y solo CPU de Caffe (con Intel MKL, todos lo son). Basta decir que solo CPU es un no-go, independientemente de la topología de la red. Disminuyo el tamaño del lote a medida que la complejidad de la red crece para ser justa con el sistema (B) ya que la memoria de la GPU es limitada. Además, no observé ninguna ganancia más allá de los tamaños de lote experimentados. Por cierto, (B) en realidad está equipado con NVIDIA Quadro K4200, no una Geforce como se anunció inicialmente (de todos modos es irrelevante ya que estamos apuntando a (B) para la implementación).

Que hacer:
[1] Reconstruir Caffe a partir de la rama de optimización de inferencias
[2] Aplicar fusión de capas y reevaluar el rendimiento.

¡Gracias!

@jstumpin , la rama inference-optimzie también es compatible con Windows, cuando clone el código, consulte el archivo README para obtener las instrucciones para compilar en Windows. Si encuentra algún problema, simplemente abra un ticket allí.

@gongzg Sí, la revisión y la refactorización de FP16 están en curso.

Aunque la etiqueta sea correcta, ¿por qué el valor de predicción es superior a 1? Esto es cierto cuando se usa OpenCL con o sin Intel espacial (solo con CPU está bien). ¿No debería ser probabilística la salida de softmax?

Estoy probando la última rama de OpenCL en mi Intel NUC. El hardware es

  • CPU Intel Core i7-7567U a 3,5 GHz
  • Gráficos Intel Iris Plus 650
  • Windows 10 Pro
  • Visual Studio 14 2015 Win64

Cloné el último viennacl en una carpeta paralela a la carpeta Caffe. Luego, ejecuto scripts/build_win.cmd sin modificarlo (ya que no vi ninguna necesidad de modificarlo). Pero obtenga un error extraño que no se encuentra en toda la discusión anterior. Consulte el resultado a continuación. Antes de ir allí, una información más es que construí windows branch con éxito.

Aquí está la salida de build_win.cmd . ¡Realmente agradecería que alguien pudiera ayudarme con esto!

================================

c: \ DL \ caffe \ scripts> build_win.cmd
El sistema no puede encontrar la unidad de disco especificada.
El sistema no puede encontrar la unidad de disco especificada.
INFORMACIÓN: ============================================== ============
INFO: Resumen:
INFORMACIÓN: ============================================== ============
INFORMACIÓN: MSVC_VERSION = 14
INFO: WITH_NINJA = 0
INFORMACIÓN: CMAKE_GENERATOR = "Visual Studio 14 2015 Win64"
INFORMACIÓN: CPU_ONLY = 0
INFORMACIÓN: USE_CUDA = 0
INFO: CUDA_ARCH_NAME = Auto
INFORMACIÓN: USE_CUDNN = 0
INFORMACIÓN: USE_GREENTEA = 1
INFORMACIÓN: USE_LIBDNN = 1
INFORMACIÓN: USE_OPENMP = 0
INFORMACIÓN: USE_INDEX64 =
INFORMACIÓN: USE_INTEL_SPATIAL = 0
INFO: DISABLE_DEVICE_HOST_UNIFIED_MEMORY = 0
INFO: CMAKE_CONFIG = Liberar
INFORMACIÓN: USE_NCCL = 0
INFORMACIÓN: CMAKE_BUILD_SHARED_LIBS = 0
INFORMACIÓN: PYTHON_VERSION = 2
INFORMACIÓN: BUILD_PYTHON = 1
INFORMACIÓN: BUILD_PYTHON_LAYER = 1
INFORMACIÓN: BUILD_MATLAB = 0
INFORMACIÓN: PYTHON_EXE = "python"
INFO: RUN_TESTS = 0
INFORMACIÓN: RUN_LINT = 0
INFORMACIÓN: RUN_INSTALL = 0
INFORMACIÓN: ============================================== ============
- Seleccionar la versión del SDK de Windows para apuntar a Windows 10.0.15063.
- La identificación del compilador de C es MSVC 19.0.24215.1
- La identificación del compilador CXX es MSVC 19.0.24215.1
- Compruebe si el compilador de C funciona: C: / Archivos de programa (x86) / Microsoft Visual Studio 14.0 / VC / bin / x86_amd64 / cl.exe
- Verifique que el compilador de C funcione: C: / Archivos de programa (x86) / Microsoft Visual Studio 14.0 / VC / bin / x86_amd64 / cl.exe - funciona
- Detectando información ABI del compilador C
- Detectando información ABI del compilador C - hecho
- Compruebe si el compilador CXX funciona: C: / Archivos de programa (x86) / Microsoft Visual Studio 14.0 / VC / bin / x86_amd64 / cl.exe
- Compruebe si el compilador CXX funciona: C: / Archivos de programa (x86) / Microsoft Visual Studio 14.0 / VC / bin / x86_amd64 / cl.exe - funciona
- Detectando información ABI del compilador CXX
- Detectando información ABI del compilador CXX - hecho
- Detección de funciones de compilación de CXX
- Detectando funciones de compilación de CXX - hecho
- PythonInterp encontrado: C: /Users/NUC-Sonavex/AppData/Local/Programs/Python/Python35/python.exe (se encontró la versión adecuada "3.5.3", el mínimo requerido es "2.7")
- Buscando pthread.h
- Buscando pthread.h - no encontrado
- Temas encontrados: VERDADERO
- Versión Boost: 1.61.0
- Encontré las siguientes bibliotecas de Boost:
-- sistema
-- hilo
- sistema de archivos
- crono
-- fecha y hora
- atómico
- GFlags encontrados: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include
- gflags encontrados (incluyen: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include, library: gflags_shared)
- Encontrado Glog: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include
- glog encontrado (incluye: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include, library: glog)
- Protobuf encontrado: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/bin/protoc.exe (versión encontrada "3.1.0")
- Compilador PROTOBUF encontrado: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/bin/protoc.exe
- Encontrado LMDB: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include
- Se encontró lmdb (incluye: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include, library: lmdb)
- Nivel encontrado DB: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include
- LevelDB encontrado (incluye: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include, library: leveldb)
- ZLIB encontrado: optimizado; C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/lib/caffezlib.lib; depuración; C: /Users/NUC-Sonavex/.caffe/dependencies1/libraries_64 .1.0 / libraries / lib / caffezlibd.lib (versión encontrada "1.2.8")
- Encontrado Snappy: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include
- Encontrado Snappy (incluye: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include, library: snappy_static; optimizado; C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_py135_1 .1.0 / libraries / lib / caffezlib.lib; debug; C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/lib/caffezlibd.lib)
- - CUDA está deshabilitado. Construir sin él ...
- Encontrados ViennaCL incluyen: C: / DL / viennacl
Error de CMake: Las siguientes variables se utilizan en este proyecto, pero están configuradas como NOTFOUND.
Configúrelos o asegúrese de que estén configurados y probados correctamente en los archivos de CMake:
OPENCL_INCLUDE_DIRS
utilizado como directorio de inclusión en el directorio C: / DL / caffe / scripts / build / CMakeFiles / CMakeTmp
_OPENCL_64_BIBRARIAS
vinculado por el objetivo "cmTC_7259e" en el directorio C: / DL / caffe / scripts / build / CMakeFiles / CMakeTmp

Error de CMake en cmake / Modules / FindOpenCL. cmake: 106 (TRY_COMPILE):
No se pudo configurar el sistema de construcción del proyecto de prueba.
Pila de llamadas (la llamada más reciente primero):
cmake / Módulos / FindViennaCL. cmake: 37 (buscar_paquete)
cmake / Dependencias. cmake: 116 (buscar_paquete)
CMakeLists. txt: 127 (incluir)

- ¡Configuración incompleta, se produjeron errores!
Consulte también "C: /DL/caffe/scripts/build/CMakeFiles/CMakeOutput.log".
Consulte también "C: /DL/caffe/scripts/build/CMakeFiles/CMakeError.log".
ERROR: Configuración fallida

@ bxk-sonavex Tal como mencioné anteriormente, algunos de los parches específicos de Intel no se han revisado ni combinado, así que intente github.com/01org/caffe inference-Optimize branch. Puede consultar la siguiente wiki para obtener instrucciones detalladas sobre la plataforma Intel:
https://github.com/01org/caffe/wiki/clCaffe

@gongzg Eso puede no ayudar dado que algunas partes de la implementación de Intel OpenCL no funcionan en Windows. Pero trabajando en ello, como sabes :)

@ naibaf7 ¿

@gongzg ¿El clCaffe que sugirió funciona en Windows con Intel iGPU?

@ bxk-sonavex Funcionará, pero no con las convoluciones de Intel, por lo tanto, un rendimiento no óptimo.
Por el momento, creo que no puede encontrar eso, pero estoy trabajando en una solución.
Su problema tiene más que ver con la falta de encabezados OpenCL. ¿Qué OpenCL tienes instalado? ¿El SDK de Intel?

@ naibaf7 Sí, estoy usando Intel SDK v6.3. Encontré una solución aquí (https://github.com/BVLC/caffe/issues/5575) y funciona para mí. Ahora tengo la rama opencl compilada. Además, probé mi compilación usando el ejemplo mnist proporcionado en la carpeta de ejemplos. Al usar CPU (modificando lenet_solver.prototxt), train_lenet se ejecutó sin ningún problema y la precisión de entrenamiento final es 0.9902, que es la esperada.

I1107 13: 53: 43.139747 3512 solucionador. cpp: 421 ] Salida neta de prueba # 0: precisión = 0.9902
I1107 13: 53: 43.139747 3512 solucionador. cpp: 421 ] Salida neta de prueba n. ° 1: pérdida = 0.0277191 (* 1 = 0.0277191 pérdida)

Sin embargo, al usar GPU, aparece la ventana de mensaje de error "caffe.exe ha dejado de funcionar" y la precisión es de solo 0.1009.

I1107 14: 11: 15.651798 7872 solucionador. cpp: 421 ] Salida neta de prueba # 0: precisión = 0.1009
I1107 14: 11: 15.651798 7872 solucionador. cpp: 421 ] Salida neta de prueba n. ° 1: pérdida = 87,31 (* 1 = 87,31 pérdida)

¿Podrías darme algunas pistas sobre lo que pasó? ¿Cómo resolverlo? ¿O es esto lo que mencionó @gongzg ?

Es posible que eso no ayude dado que algunas partes de la implementación de Intel OpenCL no funcionan en Windows. Pero trabajando en ello, como sabes :)

Los lugares que modifiqué del valor predeterminado build_win.cmd son

set WITH_NINJA=1 
set CMAKE_BUILD_SHARED_LIBS=1 
set PYTHON_VERSION=3 
set RUN_INSTALL=1

¿Debo establecer el USE_INTEL_SPATIAL ?

Cuando se establece USE_INTEL_SPATIAL = 1, la rama no se puede compilar. El error es

ninja: construcción detenida: el subcomando falló.

@ naibaf7 La versión 01org funciona bien en Windows ahora. Todavía estoy ocupado con otras cosas, así que no tengo tiempo suficiente para enviar todas las correcciones a esta rama de OpenCL. Haré eso cuando tenga algo de tiempo en el futuro cercano. @ bxk-sonavex Puede probar la versión 01org siguiendo la página wiki, y si encuentra algún problema con eso, por favor hágamelo saber.

@gongzg ¡Gracias! Siguiendo las instrucciones en https://github.com/01org/caffe/wiki/clCaffe#windows -support-for-intel-gen-platform, recibí el mensaje de error:

fatal error C1083: Cannot open include file: 'caffe/proto/caffe.pb.h': No such file or directory

FYI:
https://github.com/ptillet/isaac.git solo es compatible con hardware NVIDIA y ni siquiera se puede compilar, así que clono https://github.com/intel/isaac.

ACTUALIZAR:
Generado manualmente los archivos a través de

build\libraries\bin\protoc.exe src\caffe\proto\caffe.proto --cpp_out=.\

Supuestamente, los archivos deberían generarse automáticamente.

Entonces recibí el siguiente error:

"C:\DL\clCaffe\build\src\caffe\test\runtest.vcxproj" (default target) (1) ->
(CustomBuild target) ->
  C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(171,5): error MSB6006: "cmd.exe" exited with code -1073741515. [C:\DL\clCaffe\build\src\caffe\test\runtest.vc
xproj]

    2345 Warning(s)
    1 Error(s)

Time Elapsed 00:03:55.08
ERROR: Tests failed

Discapacitado RUN_TESTS y construyendo por tercera vez ...

@ bxk-sonavex Parece que ya se construyó con éxito. Necesita copiar los archivos dll al directorio de archivos ejecutables:
"
Tenga en cuenta que, una vez que la construcción finalizó correctamente, antes de intentar ejecutar la aplicación, debe copiar dl.dll (dlfcn) e isaac.dll (isaac) en el mismo directorio o colocarlos en un directorio del sistema.
"

@gongzg Agregó las carpetas de los dos dlls en la ruta del sistema en lugar de copiarlas a la carpeta de prueba. Ahora tengo otro error, que parece bastante serio ...

"C:\DL\clCaffe\build\src\caffe\test\runtest.vcxproj" (default target) (1) ->
(CustomBuild target) ->
  CUSTOMBUILD : Fatal error : Intel iGPU device found but doesn't support cl_intel_subgroups_short. [C:\DL\clCaffe\build\src\caffe\test\runtest.vcxproj]

    2333 Warning(s)
    1 Error(s)

Time Elapsed 00:05:41.97
ERROR: Tests failed

Estoy usando Intel Iris Plus Graphics 650 e intel_sdk_for_opencl_setup_6.3.0.1904. ¿Alguna idea y solución?

@ bxk-sonavex Necesita actualizar su controlador de gráficos Intel a la última versión.

@gongzg Gracias, eso resolvió el error de compilación. Al ejecutar las pruebas, recibí un montón de errores como (puede que no los detecte todos)

C:\DL\clCaffe\src\caffe\test\test_argmax_layer.cpp(132): error : Expected: (bottom_data[i * dim + j]) <= (max_val), actual: -0.402832 vs -0

C:\DL\clCaffe\src\caffe\test\test_convolution_layer_spatial.cpp(735): error : The difference between top_data[i] and ref_top_data[i] is 1.8
077674604790599e+28, which exceeds delta, where [C:\DL\clCaffe\build\src\caffe\test\runtest.vcxproj]
  top_data[i] evaluates to -1.8077674604790599e+28,
  ref_top_data[i] evaluates to 7.1034564971923828, and
  delta evaluates to 9.9999997473787516e-05.

C:\DL\clCaffe\src\caffe\test\test_convolution_layer_spatial.cpp(735): error : The difference between top_data[i] and ref_top_data[i] is 1
.803808228419822e+28, which exceeds delta, where [C:\DL\clCaffe\build\src\caffe\test\runtest.vcxproj]

    2418 Warning(s)
    17672 Error(s)

Time Elapsed 00:10:25.65
ERROR: Tests failed

¿Deberían preocuparse estos errores?

De todos modos, estoy probando la compilación usando el ejemplo mnist. Es extremadamente lento , incluso mucho más lento que el Caffe original que usa CPU. Y hay algunas advertencias (repetidas varias veces)

warning: Linking two modules of different data layouts: '' is 'e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024' whereas '<origin>' is 'e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-n8:16:32:64'

warning: Linking two modules of different target triples: ' is 'spir64' whereas '<origin>' is 'vISA_64'

¿Alguna idea?

@ bxk-sonavex

¿Por qué no trabajas con Running Caffe en Linux por el momento? Los desarrolladores supongo que se centran más en hacer que el código FP16, INT8, etc. funcione sin problemas, especialmente naibaf7 (david).

El soporte adecuado de Windows llegará eventualmente.

Aunque solo una sugerencia.

@atlury me encantaría !!! Pero nuestro sistema es Windows 10 + Intel Iris ... ¿Tiene alguna idea de cuándo llegará el soporte de Windows? ¿O alguna otra plataforma DL funciona (usando GPU)?

@gongzg Solo quiero actualizarte con el rendimiento
CPU: 7 minutos 33 segundos, precisión = 0,9914
GPU: 29 minutos 34 segundos, precisión = 0,8406

Preguntándose cuál es el rendimiento en Linux. Entonces, podría tener una idea básica de cuánta velocidad se acelera con la GPU Intel (OpenCL) frente a la CPU. ¡¡Gracias!!

@ bxk-sonavex

Ben, ¿habilitaste los kernels de opencl? ¿Intentaste usar INTEL_SPATIAL?

@atlury ¿Qué quieres decir con "habilitar los núcleos de opencl"? Sí, seguí las instrucciones aquí (https://github.com/01org/caffe/wiki/clCaffe#how-to-build) e hice "set USE_INTEL_SPATIAL = 1" en la línea de comando (sin modificar directamente el archivo build_win.cmd ).

ACTUALIZAR:
INFORMACIÓN: ============================================== ============
INFO: Resumen:
INFORMACIÓN: ============================================== ============
INFORMACIÓN: MSVC_VERSION = 14
INFO: WITH_NINJA = 0
INFORMACIÓN: CMAKE_GENERATOR = "Visual Studio 14 2015 Win64"
INFORMACIÓN: CPU_ONLY = 0
INFORMACIÓN: USE_CUDA = 0
INFORMACIÓN: USE_CUDNN = 0
INFORMACIÓN: USE_GREENTEA = 1
INFORMACIÓN: USE_LIBDNN = 1
INFORMACIÓN: USE_OPENMP = 0
INFORMACIÓN: USE_INDEX64 =
INFORMACIÓN: USE_INTEL_SPATIAL = 1
INFORMACIÓN: USE_ISAAC = 1
INFO: CMAKE_CONFIG = Liberar
INFORMACIÓN: USE_NCCL = 0
INFORMACIÓN: CMAKE_BUILD_SHARED_LIBS = 0
INFORMACIÓN: PYTHON_VERSION = 2
INFORMACIÓN: BUILD_PYTHON = 0
INFORMACIÓN: BUILD_PYTHON_LAYER = 0
INFORMACIÓN: BUILD_MATLAB = 0
INFORMACIÓN: PYTHON_EXE = "python"
INFORMACIÓN: RUN_TESTS = 1
INFORMACIÓN: RUN_LINT = 0
INFORMACIÓN: RUN_INSTALL = 1
INFORMACIÓN: ============================================== ============

@ bxk-sonavex

Ben, deberá incluir INTEL_SPATIAL para todas las capas convolucionales en su deploy.proto. Lo he probado personalmente en tiempo real en Linux.

https://github.com/BVLC/caffe/pull/5165

"Probé en un dispositivo de televisión Intel, una cámara web con kernels espaciales de Intel y un modelo vgg de 19 capas. Puedo obtener una clasificación en tiempo real y todo por debajo de 3,5 vatios".

Windows también debería funcionar.

@ bxk-sonavex para el problema en la versión 01org, abra un problema allí. Hay algunas fallas de prueba debido a problemas de precisión de FP16 en esos casos de prueba de gradiente que no son críticos. El rendimiento es extremadamente lento, lo que debería deberse al autoajuste. Debería ser mucho más rápido cuando lo ejecutes de nuevo. En primer lugar, puede intentar utilizar build / tools / caffe para medir el rendimiento hacia adelante de AlexNet.

Por cierto, acabo de notar que @CNugteren lanzó una nueva versión 1.2.0 de su biblioteca CLBlast sintonizada automáticamente hace unos días. Lo revisé y parece estar funcionando con Caffe en mi computadora portátil Lenovo con Windows 10 con la antigua GPU Intel 4400 (así como en Linux), por lo que puede ser una buena adición a Caffe ya que la versión anterior de CLBlast estaba fallando en Windows.

Si está interesado, puede verificar la velocidad de Caffe con LibDNN y CLBlast, por ejemplo, en SqueezeDet de la siguiente manera (el mismo procedimiento en Windows y Linux):

$ pip install ck
$ ck pull repo --url=https://github.com/dividiti/ck-caffe
$ ck install package:lib-caffe-bvlc-opencl-libdnn-clblast-universal-20171015

Tomará algún tiempo ya que CK intentará detectar su entorno y compiladores,
y luego reconstruirá todas las dependencias necesarias en su máquina.

Después de eso, puede instalar SqueezeDet y ejecutar el tiempo interno:

$ ck install package:caffemodel-deepscale-squeezenet-1.1
$ ck run program:caffe --cmd_key=time_gpu

La primera ejecución puede ser un poco lenta debido a la compilación del kernel y al almacenamiento en caché, por lo que la segunda ejecución será mucho más rápida.

También puede comparar la clasificación de imágenes:

$ ck pull repo:ctuning-datasets-min
$ ck run program:caffe --cmd_key=classify

No relacionado con Intel, pero solo una nota de que parece haber un error menor al compilar Caffe con CLBlast 1.2.0 para Android ARM64 usando Android GCC 4.9.x ("to_string" no se encuentra en la clase estándar):

$ ck install package:lib-caffe-bvlc-opencl-libdnn-clblast-universal-20171015 --target_os=android21-arm64 --env.DISABLE_DEVICE_HOST_UNIFIED_MEMORY=ON
$ ck compile program:caffe-time-opencl --target_os=android21-arm64
$ ck run program:caffe-time-opencl --target_os=android21-arm64

Sería bueno arreglarlo ya que CLBlast 1.1.0 funciona bien en Android ... En tal caso, funcionará con Caffe en todas las plataformas.

Espero que te sea de ayuda y que tengas un buen fin de semana!

parece haber un error menor al compilar Caffe con CLBlast 1.2.0 para Android ARM64 usando Android GCC 4.9.x ("to_string" no se encuentra en la clase estándar):

¿No está seguro de si quiere decir que se trata de un error en CLBlast o en Caffe? En cualquier caso, CLBlast tiene esto implementado en un encabezado especial de

@CNugteren - Acabo de verificar y el problema no está en CLBlast. Acabo de olvidar un parche en el CK que estaba arreglando LibDNN para Android (por lo que es mi culpa). Lo he agregado (https://github.com/dividiti/ck-caffe/blob/master/package/lib-caffe-bvlc-opencl-clblast-universal/patch.android/android.fgg.patch3) y ahora está posible compilar Caffe con CLBlast y libDNN. Verifiqué ejemplos de clasificación y evaluación comparativa en mi Samsung S7: funciona bien. Perdón por esta falsa alarma y gracias por lanzar un nuevo CLBlast. Ahora puedo usarlo en Caffe en Linux, Windows y Android.

@gfursin ¿Es esta una versión que usa CPU o GPU (OpenCL)? Pensé que estaba diciendo que OpenCL aún no funciona en Windows (o al menos todavía no con Intel iGPU). ¿Qué estás usando en Windows?

@ bxk-sonavex

Ben, lamento la demora en responder. Estaba lejos.

Para citar @ naibaf7
"El método de convolución (" motor ") se puede seleccionar o sobrescribir alternativamente en el archivo de prototipo de red"

Por lo tanto, agregue la entrada "motor: INTEL_SPATIAL" a todas las especificaciones de la capa de convolución.

Tome AlexNet como ejemplo, edite el archivo diga $ CAFFE_ROOT / models / bvlc_alexnet / train_val.prototxt, y agregue la siguiente línea para hacer que la capa conv1 se calcule usando convolución espacial. Igualmente cambia otras capas

 layer {
   name: "conv1"
   type: "Convolution"
   bottom: "data"
   top: "conv1"
   param {
     lr_mult: 1
     decay_mult: 1
   }
   param {
     lr_mult: 2
     decay_mult: 0
   }
   convolution_param {
     num_output: 96
     kernel_size: 11
     stride: 4
     engine: INTEL_SPATIAL      <-------------------------- this line!
     weight_filler {
       type: "gaussian"
       std: 0.01
     }
     bias_filler {
       type: "constant"
       value: 0
     }
   }
 }

Editar: Mi mal, veo que habías abierto otro hilo y parece que has progresado un poco más.

@ bxk-sonavex: uso la versión Caffe OpenCL (con libDNN y CLBlast) en Windows con la antigua GPU Intel 4400 SIN Intel Spatial; parece que funciona bien, pero puede que no sea óptimo. Aquí está la lista de dispositivos Caffe ("ck run program: caffe --cmd_key = query_gpu_opencl"):
output_caffe_opencl_devices.txt

Aquí está el resultado de la clasificación de imágenes en Windows con la versión anterior de Caffe OpenCL y GoogleNet:
output_caffe_opencl_image_classification.txt

Principalmente verifico la detección de inferencias / objetos en esta etapa (estamos tratando de unificar la instalación, la evaluación comparativa y la optimización de DNN en todas las plataformas posibles), por lo que realmente no enfaticé otras capacidades y modelos de Caffe en Windows con OpenCL ...

También intenté compilar Caffe OpenCL con Intel Spatial ON ("paquete de instalación ck: lib-caffe-bvlc-opencl-libdnn-clblast-universal --env.USE_INTEL_SPATIAL = ON") y observo los mismos 2 errores de compilación que tenía informado anteriormente por @atlury):
output_caffe_build_error_with_intel_spatial.txt

¿También hay un script de compilación disponible para Linux (Ubuntu 16.04)? Recibo errores al intentar compilar

@rachithayp Siga las instrucciones cuidadosamente, funcionará incluso en la serie 18.0x. Lo hemos probado.

Hola @rachithayp . Solo una nota de que probablemente necesite parchear el kernel para que Intel OpenCL funcione en Ubuntu 16.04: https://github.com/dividiti/ck-caffe/wiki/Installation#Intel_CPUGPU_Linux .

Logré construir la rama OpenCL de Caffe en mi Ubuntu 18.04 (laptop Lenovo T470p con GPU Intel) sin parchear el kernel y con el último Intel OpenCL a través de CK hace algunas semanas:

$ sudo pip install ck

$ ck pull repo --url=https://github.com/ctuning/ck-caffe

$ ck install package:lib-caffe-bvlc-opencl-viennacl-universal --env.USE_INTEL_SPATIAL=ON --env.CAFFE_BUILD_PYTHON=ON

CK intentará detectar sus compiladores disponibles, bibliotecas OpenCL y otras dependencias, e invocará cmake para Caffe. Si la compilación es exitosa, puede verificar la instalación usando CK virtual env:

$ ck show env
$ ck virtual env --tags=lib,caffe
> python
import caffe

También puede probar una clasificación de imágenes de muestra de la siguiente manera:

$ ck compile program:caffe-classification-opencl --speed
$ ck run program:caffe-classification-opencl

Buena suerte.

cc @ ens-lg4 y @psyhtest ...

@atlury pude compilar usando el siguiente cmake:
cmake .. -DUSE_CUDA = OFF -DBUILD_docs = 0 -DOPENCL_LIBRARIES = <> -DOPENCL_INCLUDE_DIRS = <>

Pero intentar compilar con INTEL_SPATIAL_ON está dando los siguientes errores:
cmake .. -DUSE_GREENTEA = ON -DUSE_CUDA = OFF -DUSE_INTEL_SPATIAL = ON -DBUILD_docs = 0 -DOPENCL_LIBRARIES = <> -DOPENCL_INCLUDE_DIRS = <>

/ home / intel / Documents / caffe_src / opencl_caffe / src / caffe / libdnn / libdnn_conv_spatial. cpp: 19 : 1: error: 'LibDNNConvSpatial' no nombra un tipo
LibDNNConvSpatial:: LibDNNConvSpatial (LibDNNConvConfig config) {
^
/ home / intel / Documents / caffe_src / opencl_caffe / src / caffe / libdnn / libdnn_conv_spatial. cpp: 117 : 25: error: inicializador esperado antes del token '<'
cadena LibDNNConvSpatial:: generate_fw_defs () {

¿Alguna idea de lo que podría estar mal ?. Además, no hay una carpeta include / caffe / greentea en la rama opencl, así que la copié de " https://github.com/01org/caffe ".

@rachithayp
¿Puedes probar las instrucciones del capítulo siguiente? Es un borrador del capítulo de instalación de nuestro próximo libro sobre opencl caffe. Gracias @ naibaf7

Espero que arroje algo de luz y lo ayude en sus esfuerzos de opencl caffe.

python-deep-learning-installation-chap.pdf

@ bxk-sonavex: uso la versión Caffe OpenCL (con libDNN y CLBlast) en Windows con la antigua GPU Intel 4400 SIN Intel Spatial; parece que funciona bien, pero puede que no sea óptimo. Aquí está la lista de dispositivos Caffe ("ck run program: caffe --cmd_key = query_gpu_opencl"):
output_caffe_opencl_devices.txt

Aquí está el resultado de la clasificación de imágenes en Windows con la versión anterior de Caffe OpenCL y GoogleNet:
output_caffe_opencl_image_classification.txt

Principalmente verifico la detección de inferencias / objetos en esta etapa (estamos tratando de unificar la instalación, la evaluación comparativa y la optimización de DNN en todas las plataformas posibles), por lo que realmente no enfaticé otras capacidades y modelos de Caffe en Windows con OpenCL ...

También intenté compilar Caffe OpenCL con Intel Spatial ON ("paquete de instalación ck: lib-caffe-bvlc-opencl-libdnn-clblast-universal --env.USE_INTEL_SPATIAL = ON") y observo los mismos 2 errores de compilación que tenía informado anteriormente por @atlury):
output_caffe_build_error_with_intel_spatial.txt

¿Tu HD 4400 funciona más rápido con caffe que con CPU?
Compilé clCaffe y lo ejecuté en mi HD 5500, pero es 5 veces más lento que la CPU (i3 5005U)
No sé por qué.

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

Temas relacionados

malreddysid picture malreddysid  ·  3Comentarios

lixin7895123 picture lixin7895123  ·  3Comentarios

kelvinxu picture kelvinxu  ·  3Comentarios

erogol picture erogol  ·  3Comentarios

vladislavdonchev picture vladislavdonchev  ·  3Comentarios