Caffe: Instruções de instalação adequadas do Caffe opencl branch para Intel GPU

Criado em 16 dez. 2016  ·  87Comentários  ·  Fonte: BVLC/caffe

Lamento ter que abrir isso, mas tanto no ramo opencl github quanto nos fóruns do google não tem nenhum tipo (atualizado) de instruções de instalação passo a passo para instalar o Caffe Opencl na GPU Intel com drivers Intel Opencl especialmente para alguém novo.

(a) Essas instruções ainda funcionam?
cmake -DUSE_GREENTEA = ON -DUSE_INTEL_SPATIAL = ON -DUSE_ISAAC = ON path_to_caffe_source
make -jn
make -jn runtest

neste ramo https://github.com/BVLC/caffe/tree/opencl? ou

A respeito?
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_matlab = OFF / root / caffe-openclab = OFF / root / caffe

(b) O atlaspack ainda é necessário para compilar o opencl-caffe quando o clblas está lá ??? Ele continua pedindo atlaspack ???

(c) e sobre Vienna CL? Esse ramo ainda depende deles? É necessário?

(D) Para que serve a libdnn? no lugar de ?

(e) E quanto ao ISAAC?

(f) A ramificação do Windows, por exemplo, fala "Se CUDA não estiver instalado, o Caffe será padronizado para uma compilação CPU_ONLY" Isso significa que não funcionará no Modo Opencl em compilações não cuda ??

Atualize e forneça instruções passo a passo
Obrigada

OpenCL question windows

Comentários muito úteis

@atlury
Há uma seção Windows no Leiame que orienta como compilar e instalar no Windows.
A única etapa que falta nessa descrição é fazer o download do ViennaCL-DEV:
https://github.com/viennacl/viennacl-dev

Ele pode ser colocado em qualquer um dos caminhos onde o CMake o encontrará, como ao lado da pasta na qual você clonou o Caffe.

As instruções de construção são diferentes das instruções do Linux, pois é um script que cuida automaticamente da configuração do CMake e das dependências de download.

Normalmente, não há grande necessidade de se preocupar com a configuração do Windows, já que ele foi projetado para funcionar. No entanto, vou dar uma explicação rápida:
(a) Não e não. Use scripts/build_win.cmd conforme descrito no Leiame.
(b) Sim, não importa como você o compila, uma CPU BLAS é sempre necessária. Mas build_win.cmd cuidará disso para você, e sua configuração padrão é usar OpenBLAS.
(c) Sim, ViennaCL é necessário, clone aqui: https://github.com/viennacl/viennacl-dev
(d) LibDNN é o padrão do mecanismo de convolução para GPUs OpenCL, substituto para cuDNN.
Também há kernels Intel adicionais para GPUs Intel disponíveis e habilitados por padrão.
(e) ISAAC, clBLAS e CLBlast são estritamente opcionais. Você precisa compilá-los separadamente no Windows e adicioná-los às dependências se quiser usá-los. Eu não garanto ou apóio a compilação de qualquer uma dessas bibliotecas, elas são suportadas pelos respectivos mantenedores do projeto.
(f) Não, no ramo OpenCL, isso não é verdade. O padrão aqui é USE_GREENTEA = ON, USE_CUDA = OFF, CPU_ONLY = OFF.

Vou atualizar o Leiame depois do Natal, quando tiver feriados. Infelizmente, não tenho tempo para um passo a passo detalhado agora.
CC: @willyd

Todos 87 comentários

@atlury
Há uma seção Windows no Leiame que orienta como compilar e instalar no Windows.
A única etapa que falta nessa descrição é fazer o download do ViennaCL-DEV:
https://github.com/viennacl/viennacl-dev

Ele pode ser colocado em qualquer um dos caminhos onde o CMake o encontrará, como ao lado da pasta na qual você clonou o Caffe.

As instruções de construção são diferentes das instruções do Linux, pois é um script que cuida automaticamente da configuração do CMake e das dependências de download.

Normalmente, não há grande necessidade de se preocupar com a configuração do Windows, já que ele foi projetado para funcionar. No entanto, vou dar uma explicação rápida:
(a) Não e não. Use scripts/build_win.cmd conforme descrito no Leiame.
(b) Sim, não importa como você o compila, uma CPU BLAS é sempre necessária. Mas build_win.cmd cuidará disso para você, e sua configuração padrão é usar OpenBLAS.
(c) Sim, ViennaCL é necessário, clone aqui: https://github.com/viennacl/viennacl-dev
(d) LibDNN é o padrão do mecanismo de convolução para GPUs OpenCL, substituto para cuDNN.
Também há kernels Intel adicionais para GPUs Intel disponíveis e habilitados por padrão.
(e) ISAAC, clBLAS e CLBlast são estritamente opcionais. Você precisa compilá-los separadamente no Windows e adicioná-los às dependências se quiser usá-los. Eu não garanto ou apóio a compilação de qualquer uma dessas bibliotecas, elas são suportadas pelos respectivos mantenedores do projeto.
(f) Não, no ramo OpenCL, isso não é verdade. O padrão aqui é USE_GREENTEA = ON, USE_CUDA = OFF, CPU_ONLY = OFF.

Vou atualizar o Leiame depois do Natal, quando tiver feriados. Infelizmente, não tenho tempo para um passo a passo detalhado agora.
CC: @willyd

@ naibaf7
Obrigado pela resposta rápida. E quanto às instruções do Linux?

O OpenCL BLAS e o ISAAC ainda são necessários ??
https://github.com/01org/caffe/wiki/clCaffe

@atlury
Duas maneiras no Linux: Use CMAKE e use 'make all -j8' ou copie makefile.config.example para makefile.config e compile usando make all -j8; make pycaffe -j8; make runtest -j8 .
Observe que os resultados compilados de Makefile e CMAKE são ligeiramente diferentes no Linux. O Makefile é mais antigo, mas mais fácil, e o CMAKE é mais complexo.

Este branch não é o mesmo que https://github.com/01org/caffe/wiki/clCaffe
portanto, tem requisitos diferentes. No entanto, os kernels espaciais da Intel de lá foram mesclados neste ramo.

Requisitos estritos:

  • ViennaCL, OpenCL e requisitos normais do Caffe, como Gflags, HDF5, etc.
  • Você pode obter o OpenCL SDK com CUDA, AMD APP SDK ou Intel OpenCL SDK. Isso é verdadeiro para Windows e Linux. O Mac OS X deve fornecer sua própria implementação OpenCL.

Requisitos opcionais:

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

Obrigado @ naibaf7
E também para linux, LIBDNN é apenas para a maioria dos chips nVidia e AMD? E devemos usar Intel espacial para Intel iGPUs?

@atlury
O Intel Spatial não suporta a propagação posterior eficiente e nem todas as formas de convoluções, mas sim, é a propagação direta mais rápida em iGPUs Intel.
Mas eu sugiro que você experimente os dois e verifique o que funciona melhor para suas redes e dispositivos.

@ naibaf7

Fabian, o windows construirá suporte para compilar com Mingw-64. Por favor me avise. Se houver instruções específicas para isso? O estúdio Mocosoft é muito inchado ..

@atlury Atualmente não, que eu saiba. @willyd é o principal contribuidor e mantenedor do Windows Building, então talvez ele possa responder a isso.
Embora o microsoft studio possa estar um pouco inchado, é bastante conveniente com ele, já que @willyd pré-

Não tenho nenhuma intenção de oferecer suporte ao mingw-64, pois o CUDA não oferece suporte ao mingw como um compilador de host no Windows. Dito isso, eu dou boas-vindas a quaisquer PRs relacionados ao suporte mingw64, se eles não adicionarem muita complexidade à compilação.

@willyd
Legal, o que eu pensei. Neste caso, sou a favor da simplicidade, já que o suporte ao Windows sem MinGW64 não parece uma grande armadilha para mim. É preferível usar o compilador padrão com cada sistema operacional respectivo.
Estou mais preocupado com a sobrecarga de suporte quando as pessoas usam configurações de compilação complicadas.

@ naibaf7

O windows opencl build inclui suporte para engine: SPATIAL? Quando incluo motor: SPATIAL ou motor: INTEL_SPATIAL, ocorre um dos seguintes erros

_Camada conv1 tem motor desconhecido._
_Erro ao analisar o formato de texto caffe.NetParameter: 18: 3: Valor de enumeração desconhecido de "ESPACIAL" para o campo "motor" ._

O wiki é confuso read.me https://github.com/BVLC/caffe/tree/opencl

Ele menciona ambos _motor de entrada: SPATIAL_ para todas as especificações da camada de convolução. bem como _ "motor: INTEL_SPATIAL <-------------------------- esta linha!" _

Qual deles?

E funciona bem sem o motor: espacial no prototxt.

_opencl-caffe-test.exe imagenet_deploy.prototxt bvlc_reference_caffenet.caffemodel imagenet_mean.binaryproto synset_words.txt truck.jpg
Use GPU com ID de dispositivo 0
---------- Predição para caminhão.jpg ----------
0,9872 - "n03417042 caminhão de lixo, carrinho de lixo"
0,0110 - "n04467665 caminhão reboque, reboque trator, plataforma de transporte, plataforma, caminhão articulado, semi"
0,0013 - "n03496892 colheitadeira, ceifeira"
0,0002 - "n04428191 debulhador, debulhador, debulhador"
0,0001 - "n04461696 caminhão de reboque, carro de reboque, guincho" _

Também aqui estão algumas "outras" observações
a) Funciona melhor quando compilado como DLL em vez de estático. Resolve especialmente o erro _ "Falha na verificação: registro.count (tipo) == 1 (0 vs. 1) Tipo de camada desconhecido" _ (visual studio 2015)
b) Ele não parece pegar o OpenCL.lib, então a solução é copiá-lo manualmente da pasta opencl-sdk para a pasta de construção (o que ele espera que seja o nome da variável de caminho?)
c) As bibliotecas extraídas na pasta de compilação podem ser compiladas para o mais recente (digamos, por exemplo, opencv 3.2 etc)

Avançar

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

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

I0108 12: 35: 04.889681 19872 comum. cpp: 408 ] Id do dispositivo: 0

I0108 12: 35: 04.890744 19872 comum. cpp: 410 ] Back-end do dispositivo: OpenCL
I0108 12: 35: 04.891839 19872 comum. cpp: 412 ] Detalhes do back-end: Intel (R) Corporation: OpenCL 1.2
I0108 12: 35: 04.893450 19872 comum. cpp: 414 ] Fornecedor do dispositivo: Intel (R) Corporation
I0108 12: 35: 04.894731 19872 comum. cpp: 416 ] Nome: Intel (R) HD Graphics 4400
I0108 12: 35: 04.895730 19872 comum. cpp: 418 ] Memória global total: 1708759450

I0108 12: 35: 04.897233 19872 comum. cpp: 408 ] Id do dispositivo: 1
I0108 12: 35: 04.898505 19872 comum. cpp: 410 ] Back-end do dispositivo: OpenCL
I0108 12: 35: 04.899590 19872 comum. cpp: 412 ] Detalhes do back-end: Intel (R) Corporation: OpenCL 1.2
I0108 12: 35: 04.901091 19872 comum. cpp: 414 ] Fornecedor do dispositivo: Intel (R) Corporation
I0108 12: 35: 04.902592 19872 comum. cpp: 416 ] Nome: CPU Intel (R) Core (TM) i5-4210U a 1,70 GHz
I0108 12: 35: 04.904093 19872 comum. cpp: 418 ] Memória global total: 8513761280

I0108 12: 35: 04.905594 19872 comum. cpp: 408 ] Id do dispositivo: 2
I0108 12: 35: 04.907114 19872 comum. cpp: 410 ] Back-end do dispositivo: OpenCL
I0108 12: 35: 04.908617 19872 comum. cpp: 412 ] Detalhes do back-end: Intel (R) Corporation: OpenCL 2.1
I0108 12: 35: 04.910100 19872 comum. cpp: 414 ] Fornecedor do dispositivo: Intel (R) Corporation
I0108 12: 35: 04.911598 19872 comum. cpp: 416 ] Nome: CPU Intel (R) Core (TM) i5-4210U a 1,70 GHz
I0108 12: 35: 04.913100 19872 comum. cpp: 418 ] Memória global total: 8513761280

Parece bom para mim, embora pareça que você tem um OpenCL 2.1 mais recente e um OpenCL 1.2 mais antigo instalados. Como ainda é uma CPU Haswell, não tenho certeza se a Intel já tem um driver 2.1 / 2.0 para o seu chip. Mas você deve tentar atualizar seu OpenCL SDK para sua GPU.

De qualquer forma, se você quiser usar INTEL_SPATIAL, você precisa habilitá-lo também em tempo de compilação. Depois disso, ele se torna o mecanismo padrão em dispositivos Intel GPU.
Você pode fazer isso aqui:
https://github.com/BVLC/caffe/blob/opencl/scripts/build_win.cmd#L82
(scripts / build_win.cmd, linha 82)

entretanto, o kernel espacial da Intel ainda não foi completamente testado no Windows.

Vou tentar atualizar o opencl sdk e acabei de ver seus commits, vou tentar habilitá-lo, recompilar e testá-los e relatar de volta.
Obrigado

Okie com se NÃO DEFINIDO USE_INTEL_SPATIAL definir USE_INTEL_SPATIAL = 1

Build_win.cmd lança o seguinte erro.

C: \ Downloads \ caffe-opencl \ buildALL_BUILD.vcxproj "(destino padrão) (1) ->
C: \ Downloads \ caffe-opencl \ build \ src \ caffe \ caffe.vcxproj "(destino padrão) (3) ->

(Alvo ClCompile) -> C: \ Downloads \ caffe-opencl \ src \ caffe \ layers \ conv_layer_spatial.cpp (1453): erro C2572: 'caffe :: ConvolutionLayerSpatial:: swizzleWeights ': redefinição do argumento padrão: parâmetro 1 [C: \ Downloads \ caffe-opencl \ build \ src \ caffe \ caffe.vcxproj]

C: \ Downloads \ caffe-opencl \ src \ caffe \ layers \ conv_layer_spatial.cpp (1458): erro C2572: 'caffe :: ConvolutionLayerSpatial:: swizzleWeights ': redefinição do argumento padrão: parâmetro 1 [C: \ Downloads \ caffe-opencl \ build \ src \ caffe \ caffe.vcxproj]

Ok, vou dar uma olhada nisso.
@gongzg para referência.

Olá a todos,
Obrigado pelo ótimo trabalho!
Consegui compilar e executar o caffe-opencl no Windows e Intel HD 4400 com USE_INTEL_SPATIAL = 0 (o tempo do caffe infelizmente é cerca de 2x mais lento do que o do caffe-cpu no 2-core i5-4210U, a menos que eu esteja fazendo algo errado). No entanto, ao compilar com USE_INTEL_SPATIAL = 1, também recebo o mesmo erro que @atlury (e acredito que tenho o mesmo hardware no meu Lenovo X240). Estou curioso para ver se o uso de INTEL_SPATIAL ajudará a tornar a execução do caffe-opencl mais rápida nesta GPU do que em uma CPU ...

@gfursin Deve, por uma grande margem. A LibDNN espera que a GPU tenha uma arquitetura de memória diferente da que os chips da Intel têm, portanto, ela não funciona de maneira ideal no momento.
No momento, estamos investigando como consertar os kernels da Intel para que funcionem no Windows também.

Super! Muito obrigado!

A propósito, @atlury , ao selecionar os dispositivos 1 e 2, o "tempo caffe" travava a cada vez após cerca de 10 segundos - você teve o mesmo comportamento? Obrigado!

@gfursin Não, não https://github.com/BVLC/caffe/pull/5165

Há um artigo da Intel publicado aqui (clcaffe)
http://www.slideshare.net/IntelSoftware/clcaffe-unleashing-the-power-of-intel-graphics-for-deep-learning-acceleration

Onde os seguintes benchmarks (página 28 GPU GT3) foram suportados usando INTEL SPATIAL em camadas de convolução.
Alexnet - 290 imagens / segundo
GoogleNet - 77 imagens / segundo
VGGA - 55 imagens / segundo
Overfeat - 91 imagens / segundo

Eu realmente quero testar a Detecção de Objetos (não apenas a classificação) também usando o INTEL SPATIAL, mas não há exemplo como tal em qualquer lugar. Tenho dúvidas se as camadas Caffe já estão prontas? @ naibaf7 ?

@gongzg existe algum código-fonte para os testes acima que possamos tentar?

Além disso, o LiDNN foi feito para funcionar com tiny-dnn, o que é empolgante (embora não haja muitos modelos pré-treinados lá). Eu também quero testar a quantização e ver como o opencl pode ajudar nisso (8 bits, XNOR etc). Finalmente, a detecção de objetos em opencl em tempo real seria incrível !!! espero que @ naibaf7 possa lançar alguma luz.

@atlury Entrarei em contato com você na próxima semana com relação às questões mais difíceis.
O Intel spatial é usado automaticamente quando você compila com a opção ativada.
Para segmentação e detecção de objetos, sugiro que você leia meu artigo e relatório técnico do ISBI 2016. Eu tenho as arquiteturas SK-Net e U-Net descritas lá que podem fazer isso muito rápido. AlexNet pode ser convertido em um SK-Net.
Você precisa usar LibDNN para manter o uso de memória baixo no SK / U-Net.

Uau, acabei de ler seu artigo ... o conceito de kernels Strided parece muito impressionante. Não sequestrar este tópico, mas todos eles eventualmente precisarão ser testados no Opencl no Windows, mas antes disso ....

Esta é uma implementação somente de python? Sem c ++? Existem modelos pré-treinados? É aqui que o repo está https://github.com/naibaf7/PyGreentea/tree/master/examples ? Sim, vou usar LibDNN ...

@atlury Sim, a interface original era C ++, mas mudamos para python. No entanto, se você quiser fornecer os dados através de HDF5 ou sua própria interface C ++, isso também funcionará. Basta usar os códigos de gerador de rede que forneço em python para ajudá-lo a criar o prototxt correto para redes do tipo SK / U.
Aqui está um relatório técnico um pouco mais antigo, mas completo: https://arxiv.org/abs/1509.03371 , inclui números de desempenho antes de LibDNN ser programado.
Não fornecemos modelos pré-treinados neste momento, uma vez que os conjuntos de dados (classificação EM) que usamos e nossos resultados ainda não foram publicados.

@atlury Alguns dos dados de benchmark são medidos usando os benchmarks convnet e você pode reproduzi-los em sua plataforma. Não temos outros exemplos para compartilhar publicamente atualmente.

@atlury - muito obrigado pelas referências! Eu tive muitos problemas ao instalar e usar o OpenCL para GPU Intel no Ubuntu no passado (tive que recompilar o kernel do Linux), mas talvez os drivers mais recentes funcionem bem - preciso verificar isso. A propósito, no # 5165 você tem um instantâneo de uma webcam + classificação Caffe com medidas FPS - posso perguntar qual programa você usou para isso? Muito obrigado!!!

@gfursin

Faça o seguinte.

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

  2. Instale o opencl SDK e o opencl Run time (o patch do kernel não é necessário)
    https://software.intel.com/en-us/intel-opencl/download
    https://software.intel.com/en-us/articles/opencl-drivers

  3. Baixe https://github.com/BVLC/caffe/tree/opencl
    (a) Compile com Viennacl, libdnn, intel spatial, opencv etc. habilitado. Faça uma biblioteca compartilhada. Eu não habilito o python, pois não o uso com frequência.

  4. Caffemodel VGG, prototxt
    Download
    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 mecanismo: INTEL_SPATIAL para todas as camadas convolucionais em seu deploy.proto

Obtenha o synset_words.txt

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

Apenas certifique-se de que o input_dim é 1 (em seu proto) e não 10 (você está dando uma imagem por vez) com 3 canais e o redimensionamento é automático.
input_dim: 1
input_dim: 3
input_dim: 224
input_dim: 224

Qualquer ajuda adicional pode enviar um toque para mim no gtalk: atlury

Por favor note que isto só funcionará em linux e o suporte do opencl para windows ainda está sendo trabalhado por @ naibaf7

Muito obrigado @atlury por todos os detalhes - muito apreciado - vou testá-lo em breve! A propósito, comecei a automatizar a instalação do Caffe no Windows (modo CPU e OpenCL) usando Collective Knowledge Framework, mas ainda precisa de mais testes: https://github.com/dividiti/ck-caffe
Estou esperando um feedback dos meus colegas e se funcionar bem, faremos um lançamento oficial em algumas semanas (possivelmente com suporte para dispositivos Android também) ...

Olá a todos. Muito obrigado pela biblioteca e também pelas discussões acima.

No momento, estou tentando construir o último commit que corrigiu a construção do Windows OpenCL com USE_GREENTEA = 1, USE_LIBDNN = 1 e USE_INTEL_SPATIAL = 1, junto com os arquivos de cabeçalho construídos para ViennaCL. Meu build_win.cmd está anexado aqui: build_win.txt

No entanto, construir a biblioteca no meio do caminho sempre termina com o seguinte erro:
ninja: build stopped: subcommand failed.
ERROR: Build failed
Em detalhe:
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
Pedimos desculpas se este erro for igual ao mencionado acima.

Também tentei com USE_INTEL_SPATIAL = 0, mas com o seguinte erro:
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

Por favor, avise sobre isso. Muito apreciado.

@ yshen92 O primeiro erro é conhecido e está sendo
O segundo erro que você obtém geralmente significa que sua DLL OpenCL é inválida, faltam alguns símbolos. Você pode nos dizer qual hardware você possui e quais SDKs OpenCL você instalou?
Este problema geralmente vem com SDKs OpenCL vindos da nVidia dentro do CUDA. Os SDKs OpenCL da Intel e AMD devem funcionar bem com as versões 1.2 e 2.0.

@ naibaf7 Muito obrigado pela resposta.

Estou construindo a biblioteca em um Dell Windows 8 Pro de 64 bits com Intel HD Graphics 4000 e NVIDIA NVS 5200M. E acabou de instalar o mais recente Intel OpenCL SDK v6.3 . Parece que o diretório OpenCL estava apontando para aquele que vem com CUDA.

Portanto, em uma tentativa de usar o Intel OpenCL SDK na compilação, removi o CUDA e fiz algumas modificações bastante grosseiras em FindOpenCL.cmake nas linhas 46, 48, 52 e 53 da seguinte maneira:

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")
Basicamente, é apenas para adicionar os caminhos do Intel SDK. Não tenho certeza se estou fazendo certo, no entanto. Sem isso, o script não consegue localizar o SDK.

No entanto, ainda estou recebendo o mesmo erro acima (compilando sem Intel Spatial).
E aqui está meu arquivo de configuração retirado diretamente do script para sua referência.
ConfigInfo.txt
Alguma ideia do que fiz de errado?

Olá @atlury - Finalmente encontrei um pouco de tempo para instalar o Ubuntu 17.04 e foi bastante simples instalar os drivers da GPU Intel sem qualquer reconstrução do kernel - obrigado! Eu também instalei o Caffe-OpenCL.

Ainda há um problema com o cache do kernel, então o custo inicial é muito alto, mas @ naibaf7 e @psyhtest estão tentando melhorá-lo. A solução temporal para acelerar um pouco o cache do kernel é brincar com as variáveis ​​de ambiente VIENNACL_CACHE_PATH e CUDA_CACHE_DISABLE (consulte https://github.com/dividiti/ck-caffe/issues/44#issuecomment-277205871).

Porém, tenho uma pergunta: não entendi como adicionar engine: INTEL_SPATIAL para todas as camadas convolucionais no deploy.proto? Ainda sou um usuário novato (estou mais no lado do compilador, tentando otimizar sub-bibliotecas). Importa-se de me enviar uma amostra, por favor - será muito apreciado!

Outra observação: se for de algum interesse, adicionei suporte para montar Caffe com OpenCL, ViennaCL e USE_INTEL_SPATIAL via framework CK (ou seja, reconstrução com um clique):

pacote de instalação ck

Você pode encontrar detalhes aqui: https://github.com/dividiti/ck-caffe/wiki/Installation

Estou criando o perfil do cache de ViennaCL em algumas plataformas no momento. Eu suspeito que pode funcionar de forma bastante satisfatória após algumas mudanças.

@gfursin : CUDA_CACHE_DISABLE tem o efeito de desabilitar o próprio mecanismo de cache da NVIDIA para kernels, então só vai desacelerar as coisas (em plataformas com NVIDIA, é claro). No entanto, preciso disso para a criação de perfil de cache.

@psyhtest - obrigado pela sua nota, já que o entendi mal - pensei que era um bug estranho e uma solução temporária;) ...

@ naibaf7 qual é o status do suporte do Windows agora? Eu me pergunto se você já começou a trabalhar na habilitação do motor espacial Intel para Windows também.

@gongzg Comecei a configurar o ambiente Windows no laptop Intel para testar isso, mas não fui além disso ainda. Portanto, o mecanismo espacial da Intel ainda tem problemas de compilação no Windows, mas o resto funciona.

@ naibaf7 Obrigado pela atualização. Em seguida, verificarei se temos algum recurso interno para resolver os problemas do mecanismo interl espacial no Windows.

Este branch está funcionando para windows e amd gpu?

Sim, ele é. As GPUs AMD são totalmente suportadas com LibDNN tanto no Windows quanto no Linux. O suporte completo para GPU da Intel seguirá no dia 28 de abril.

@ naibaf7
David, você pode me informar quando o suporte para Windows OpenCL estiver pronto com python para Intel GPU? Tenho algumas coisas para testar e relatar.

@hillarycanas - Também confirmo que consegui compilar e rodar a versão OpenCL do Caffe com libDNN em AMD com Windows 10 alguns dias atrás (usei um APU AMD E1-2500 bastante antigo com Radeon HD Graphics apenas para um teste). Você pode ver os resultados de desempenho em http://tinyurl.com/k3dhsc2 (procure AMD).
Usei o pacote CK "lib-caffe-bvlc-opencl-libdnn-viennacl-universal" para compilar e executar o Caffe no Windows (consulte https://github.com/dividiti/ck-caffe/wiki/Installation#AMD_GPU).

Desculpe por incomodar novamente. Após o feedback do usuário, adicionamos suporte para empacotar automaticamente a biblioteca Caffe e binários para Windows no CK, e agora é possível instalar e comparar a versão Caffe CPU e OpenCL em diferentes máquinas Windows com instalação 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
Isso é ótimo :)
O Caffe pode facilmente se tornar popular assim :)

Oi,

Tentei executar o branch oficial do OpenCL do caffe localizado em:
https://github.com/BVLC/caffe/tree/opencl no meu Mac com os seguintes detalhes de hardware:
Nome do modelo: MacBook Pro
Identificador do modelo: MacBookPro12,1
Nome do processador: Intel Core i5
Velocidade do processador: 2,7 GHz
Número de processadores: 1
Número total de núcleos: 2
Cache L2 (por núcleo): 256 KB
Cache L3: 3 MB
Memória: 8 GB
Gráficos: Intel Iris Graphics 6100 1536 MB

Eu poderia executar o tutorial de Classificação sem nenhum problema. No entanto, quando eu alterno para o modo GPU e tento executar net.forward (), o kernel morre a cada vez. Isso significa que este ramo do OpenCL caffe não suporta placa de vídeo integrada intel?

Obrigado,

Sal

@saliltambe A ramificação OpenCL oferece suporte para intel iGPU. Embora a maioria dos testes seja no sistema Linux, ele deve funcionar no Mac também. Qual é o erro específico que você encontrou ao executar net.forward ()?

@gongzg Muito obrigado pela resposta. Recebo a seguinte mensagem de erro ao executar no notebook jupyter: "O kernel parece ter morrido. Ele reiniciará automaticamente." Estou executando um tamanho de lote muito pequeno, então não acho que o kernel morre por falta de memória. Além disso, não recebo um erro quando alterno para o modo GPU usando: caffe.set_mode_gpu (). Eu só recebo o erro quando executo net.forward ().

@saliltambe
Precisamos de mais informações: como você compilou (versão do compilador, configurações do Caffe, quais bibliotecas BLAS você habilitou)?
Você pode executar ./build/test/test_all.testbin ou make runtest (se você usou Makefiles)?

@ naibaf7
Olá, fabian, aqui estão os detalhes:
-- Em geral:
- Versão: 1.0.0
- Git: desconhecido
- Sistema: Darwin
- Compilador C ++: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++

- Liberar sinalizadores CXX: -O3 -DNDEBUG -fPIC -Wall -std = c ++ 11 -DCMAKE_BUILD -Wno-sign-compare -Wno-uninitialized

- Depurar sinalizadores CXX: -g -fPIC -Wall -std = c ++ 11 -DCMAKE_BUILD -Wno-sign-compare -Wno-uninitialized

  • - Tipo de compilação: Lançamento
  • - BUILD_SHARED_LIBS: ON
  • - BUILD_python: ON
  • - BUILD_matlab: OFF
  • - BUILD_docs: ON
  • - CPU_ONLY: OFF
  • - USE_OPENCV: ON
  • - USE_FFT: OFF
  • - USE_LEVELDB: ON
  • - USE_LMDB: ON
  • - USE_NCCL: OFF
  • - ALLOW_LMDB_NOLOCK: OFF
  • - USE_HDF5: LIGADO



    • - Dependências:

  • - BLAS: Sim (vecLib)
  • - Boost: Sim (versão 1,64)
  • - glog: Sim
  • - gflags: Sim
  • - protobuf: Sim (versão 3.3.0)
  • - lmdb: Sim (versão 0.9.19)
  • - LevelDB: Sim (versão 1.20)
  • - Snappy: Sim (versão 1.1.4)
  • - OpenCV: Sim (versão 2.4.13.2)
  • - CUDA: Não



    • -- Pitão:

  • - Intérprete: /Users/stambe/anaconda/bin/python2.7 (versão 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)

  • - Documentação:
  • - Doxygen: Não
  • - config_file:

  • - Instale:
  • - Caminho de instalação: / Usuários / stambe / Programas / caffe-opencl / build / install

  • - Configuração feita

Aviso CMake (dev) em src / caffe / CMakeLists.txt:

A política CMP0022 não está definida: INTERFACE_LINK_LIBRARIES define a interface do link. Execute "cmake --help-policy CMP0022" para obter os detalhes da política. Use o comando cmake_policy para definir a política e suprimir este aviso.
O destino "caffe" tem uma propriedade INTERFACE_LINK_LIBRARIES que difere de suas propriedades 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/libhibleveldb.dylib; / Applications / 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 Accelerate; / 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_core; opencv_core; opencvoc_hgui; opencv_core; opencvoc_hgui; lcblas; -framework Accelerate; /usr/local/lib/libboost_python-mt.dylib

Quando executo make runtest -j8, recebo o seguinte erro:
stambe- osx: build stambe $ make runtest -j8
[1%] Gtest alvo construído
[2%] Cafeproto alvo construído
[71%] Café alvo construído
[71%] Construindo objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_deconvolution_layer.cpp.o
[72%] Construindo objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_db.cpp.o
[73%] Construindo objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_eltwise_layer.cpp.o
[73%] Construindo objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_dummy_data_layer.cpp.o
[73%] Construindo objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_embed_layer.cpp.o
[73%] Construindo objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_euclidean_loss_layer.cpp.o
[73%] Construindo objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_filter_layer.cpp.o
[75%] Construindo objeto CXX src / caffe / test / CMakeFiles / test.testbin.dir / test_filler.cpp.o
/ Users / stambe / Programas / caffe-opencl / src / caffe / test / test_db. cpp: 23 : 27: erro: uso de não declarado
identificador 'EXAMPLES_SOURCE_DIR'
root_images_ (string (EXAMPLES_SOURCE_DIR) + string ("imagens /")) {}

Existe algum problema com a minha instalação? Observe que não estou tendo problemas para executar o Caffe na CPU.

obrigado,
Sal

Graças aos indicadores e leads fornecidos, consegui construir e executar o Caffe OpenCL com êxito em duas máquinas separadas com as seguintes especificações:

(UMA)

  • CPU: Intel i7-7567U 3,5 GHz
  • iGPU: Intel Iris Plus 650
    (B)
  • CPU: Intel i7-4930K 3,4 GHz
  • GPU: NVIDIA Geforce GTX 650

Eu poderia executar AlexNet, ResNet50 e ResNet152 em (A) e (B) sem problemas. O único problema que tenho é o processamento em

Mais dicas e pistas sobre este? Desde já, obrigado.

@gongzg Alguma

@ naibaf7 Existem alguns bugs no mecanismo de convolução espacial atual e ainda não tive tempo de enviar esses PR para o branch upstream do OpenCL. Parte do motivo é que todo o meu trabalho atual depende do FP16 PR, então quero esperar que o patch FP16 seja revisado e mesclado. Por enquanto, gostaria de recomendar @jstumpin para tentar o branch de otimização de inferência de github.com/01org/caffe para verificar se o problema foi resolvido. A página wiki correspondente está em Intel OpenCL caffe wiki

@jstumpin É melhor aplicar a fusão de camadas para resnet, e você verá um ganho de desempenho notável.

Ótimas dicas (e notícias também) ao redor. Já ouvi falar sobre github.com/01org/caffe antes, mas não gostei muito, já que sou obrigado a fazer a implantação do Windows. Estou recebendo [especificações fornecidas em (A)]:

  1. AlexNet

    • 110 imagens / s, 164 imagens / s (lote = 15)

  2. ResNet50

    • 11 imagens / s, 14 imagens / s (lote = 5)

  3. ResNet152

    • 5 imagens / s, 6 imagens / s (lote = 2)

Os seguintes são privados de Intel espacial:

  1. AlexNet

    • 113 imagens / s, 114 imagens / s (lote = 15)

  2. ResNet50

    • 9 imagens / s, 14 imagens / s (lote = 5)

  3. ResNet152

    • 5 imagens / s, 6 imagens / s (lote = 2)

Para completar, também fiz benchmarking em relação ao OpenCV 3.3.0 e somente CPU do Caffe (com Intel MKL, todos eles são). É suficiente dizer que somente a CPU é proibida, independentemente da topologia da rede. Eu diminuo o tamanho do lote conforme a complexidade da rede cresce para ser justo com o sistema (B), pois a memória da GPU é limitada. Além disso, não observei nenhum ganho além dos tamanhos de lote experimentados. BTW, (B) está realmente equipado com NVIDIA Quadro K4200, não um Geforce como inicialmente anunciado (é irrelevante de qualquer maneira, já que estamos direcionando (B) para implantação).

Pendência:
[1] Reconstruir Caffe do branch de otimização de inferência
[2] Aplicar fusão de camadas e reavaliar o desempenho

Obrigado!

@jstumpin , o

@gongzg Sim, revisão e refatoração do FP16 em andamento.

Embora rótulo correto, por que o valor de predição excede 1? Isso é verdadeiro ao usar o OpenCL com ou sem Intel espacial (apenas CPU é bom). A saída do softmax não deveria ser probabilística?

Estou testando o branch OpenCL mais recente em meu Intel NUC. O hardware é

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

Clonei o último viennacl em uma pasta paralela à pasta Caffe. Então, eu executo o scripts/build_win.cmd sem modificá-lo (pois não vi nenhuma necessidade de modificá-lo). Mas obtenha um erro estranho que não foi encontrado em toda a discussão acima. Por favor, veja na saída abaixo. Antes de ir lá, mais uma informação é que eu construí windows branch com sucesso.

Aqui está o resultado de build_win.cmd . Agradeço muito se alguém puder me ajudar nisso!

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

c: \ DL \ caffe \ scripts> build_win.cmd
O sistema não pode encontrar a unidade especificada.
O sistema não pode encontrar a unidade especificada.
INFO: ==================================================== ============
INFO: Resumo:
INFO: ==================================================== ============
INFO: MSVC_VERSION = 14
INFO: WITH_NINJA = 0
INFO: CMAKE_GENERATOR = "Visual Studio 14 2015 Win64"
INFO: CPU_ONLY = 0
INFO: USE_CUDA = 0
INFO: CUDA_ARCH_NAME = Auto
INFO: USE_CUDNN = 0
INFO: USE_GREENTEA = 1
INFO: USE_LIBDNN = 1
INFO: USE_OPENMP = 0
INFO: USE_INDEX64 =
INFO: USE_INTEL_SPATIAL = 0
INFO: DISABLE_DEVICE_HOST_UNIFIED_MEMORY = 0
INFO: CMAKE_CONFIG = Liberar
INFO: USE_NCCL = 0
INFO: CMAKE_BUILD_SHARED_LIBS = 0
INFO: PYTHON_VERSION = 2
INFO: BUILD_PYTHON = 1
INFO: BUILD_PYTHON_LAYER = 1
INFO: BUILD_MATLAB = 0
INFO: PYTHON_EXE = "python"
INFO: RUN_TESTS = 0
INFO: RUN_LINT = 0
INFO: RUN_INSTALL = 0
INFO: ==================================================== ============
- Seleção da versão do Windows SDK para o Windows 10.0.15063.
- A identificação do compilador C é MSVC 19.0.24215.1
- A identificação do compilador CXX é MSVC 19.0.24215.1
- Verifique se o compilador C está funcionando: C: / Arquivos de programas (x86) / Microsoft Visual Studio 14.0 / VC / bin / x86_amd64 / cl.exe
- Verifique se o compilador C está funcionando: C: / Arquivos de programas (x86) / Microsoft Visual Studio 14.0 / VC / bin / x86_amd64 / cl.exe - funciona
- Detecção de informações ABI do compilador C
- Detecção de informações ABI do compilador C - concluído
- Verifique se o compilador CXX está funcionando: C: / Arquivos de programas (x86) / Microsoft Visual Studio 14.0 / VC / bin / x86_amd64 / cl.exe
- Verifique se o compilador CXX está funcionando: C: / Arquivos de programas (x86) / Microsoft Visual Studio 14.0 / VC / bin / x86_amd64 / cl.exe - funciona
- Detecção de informações ABI do compilador CXX
- Detecção de informações ABI do compilador CXX - concluído
- Detecção de recursos de compilação CXX
- Detecção de recursos de compilação CXX - concluído
- PythonInterp encontrado: C: /Users/NUC-Sonavex/AppData/Local/Programs/Python/Python35/python.exe (versão adequada encontrada "3.5.3", mínimo necessário é "2.7")
- Procurando por pthread.h
- Procurando por pthread.h - não encontrado
- Tópicos encontrados: VERDADEIRO
- Versão Boost: 1.61.0
- Encontrou as seguintes bibliotecas Boost:
-- sistema
-- fio
-- sistema de arquivo
- crono
-- data hora
- atômico
- GFlags encontrados: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include
- gflags encontrados (incluem: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include, library: gflags_shared)
- Glog encontrado: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include
- Glog encontrado (inclui: 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 (versão encontrada "3.1.0")
- Compilador PROTOBUF encontrado: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/bin/protoc.exe
- LMDB encontrado: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include
- lmdb encontrado (inclui: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include, library: lmdb)
- LevelDB encontrado: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include
- LevelDB encontrado (inclui: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include, library: leveldb)
- ZLIB encontrado: otimizado; C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/lib/caffezlib.lib; debug; C: /Users/NUC-Sonavex/.caffe/dependencies_1/libraries_v140_x64 .1.0 / libraries / lib / caffezlibd.lib (versão encontrada "1.2.8")
- Snappy encontrado: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include
- Snappy encontrado (inclui: C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_py35_1.1.0/libraries/include, library: snappy_static; otimizado; C: /Users/NUC-Sonavex/.caffe/dependencies/libraries_v140_x64_x64_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á desativado. Construindo sem ele ...
- ViennaCL encontrado inclui: C: / DL / viennacl
Erro CMake: As seguintes variáveis ​​são usadas neste projeto, mas são definidas como NOTFOUND.
Configure-os ou certifique-se de que estejam configurados e testados corretamente nos arquivos CMake:
OPENCL_INCLUDE_DIRS
usado como diretório de inclusão no diretório C: / DL / caffe / scripts / build / CMakeFiles / CMakeTmp
_OPENCL_64_LIBRARIES
vinculado pelo destino "cmTC_7259e" no diretório C: / DL / caffe / scripts / build / CMakeFiles / CMakeTmp

Erro CMake em cmake / Modules / FindOpenCL. cmake: 106 (TRY_COMPILE):
Falha ao configurar o sistema de compilação do projeto de teste.
Pilha de chamadas (a chamada mais recente primeiro):
cmake / Modules / FindViennaCL. cmake: 37 (find_package)
cmake / Dependências. cmake: 116 (find_package)
CMakeLists. txt: 127 (incluir)

- Configurando incompleto, ocorreram erros!
Consulte também "C: /DL/caffe/scripts/build/CMakeFiles/CMakeOutput.log".
Veja também "C: /DL/caffe/scripts/build/CMakeFiles/CMakeError.log".
ERRO: Falha na configuração

@ bxk-sonavex Assim como mencionei acima, alguns dos patches específicos da Intel não foram analisados ​​e mesclados, então tente github.com/01org/caffe Inference-Optimize branch. Você pode consultar o seguinte wiki para obter instruções detalhadas sobre a plataforma Intel:
https://github.com/01org/caffe/wiki/clCaffe

@gongzg Isso pode não ajudar, já que algumas partes da implementação do Intel OpenCL não funcionam no Windows. Mas trabalhando nisso, como você sabe :)

@ naibaf7 Isso significa que este ramo NÃO está funcionando com o Intel iCPU no Windows? Então, onde posso encontrar uma versão Caffe com suporte para OpenCL no Windows com Intel iGPU?

@gongzg O clCaffe que você sugeriu trabalhar no Windows com Intel iGPU?

@ bxk-sonavex Funcionará, mas não com as convoluções Intel, portanto, desempenho não ideal.
No momento, acho que você não consegue encontrar isso, mas estou trabalhando em uma solução.
Seu problema tem mais a ver com a falta de cabeçalhos OpenCL. Que OpenCL você instalou? O Intel SDK?

@ naibaf7 Sim, estou usando o Intel SDK v6.3. Encontrei uma solução alternativa aqui (https://github.com/BVLC/caffe/issues/5575) e funciona para mim. Agora eu tenho o branch opencl compilado. Além disso, testei minha construção usando o exemplo mnist fornecido na pasta de exemplos. Ao usar a CPU (modificando lenet_solver.prototxt), o train_lenet foi executado sem nenhum problema e a precisão final do treinamento é 0,9902, que é a esperada.

I1107 13: 53: 43.139747 Solucionador 3512. cpp: 421 ] Saída da rede de teste # 0: precisão = 0,9902
I1107 13: 53: 43.139747 Solucionador 3512. cpp: 421 ] Teste de saída líquida # 1: perda = 0,0277191 (* 1 = perda de 0,0277191)

No entanto, ao usar a GPU, recebo a janela de mensagem de erro "caffe.exe parou de funcionar" e a precisão é de apenas 0,1009.

I1107 14: 11: 15.651798 7872 solver. cpp: 421 ] Saída da rede de teste # 0: precisão = 0,1009
I1107 14: 11: 15.651798 7872 solver. cpp: 421 ] Teste de saída líquida # 1: perda = 87,31 (* 1 = perda 87,31)

Você poderia me dar algumas pistas sobre o que aconteceu? Como resolver isso? Ou é isso que @gongzg mencionou?

Isso pode não ajudar, visto que algumas partes da implementação do Intel OpenCL não funcionam no Windows. Mas trabalhando nisso, como você sabe :)

Os lugares que eu modifiquei do padrão build_win.cmd são

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

Devo definir USE_INTEL_SPATIAL ?

Quando definido USE_INTEL_SPATIAL = 1, o branch não pode ser compilado. O erro é

ninja: compilação interrompida: subcomando falhou.

@ naibaf7 A versão 01org agora funciona bem no Windows. Ainda estou ocupado com outras coisas, então não tenho tempo suficiente para enviar todas as correções para este branch OpenCL. Farei isso quando tiver algum tempo no futuro próximo. @ bxk-sonavex Você pode tentar a versão 01org seguindo a página wiki, e se você encontrou algum problema com isso, por favor me avise.

@gongzg Obrigado! Seguindo as instruções em https://github.com/01org/caffe/wiki/clCaffe#windows -support-for-intel-gen-platform, recebi a mensagem de erro:

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

PARA SUA INFORMAÇÃO:
https://github.com/ptillet/isaac.git só é compatível com hardware NVIDIA e nem pode ser compilado, então clonei o https://github.com/intel/isaac.

ATUALIZAR:
Os arquivos gerados manualmente por meio de

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

Supostamente, os arquivos deveriam ser gerados automaticamente.

Então, recebi o seguinte erro:

"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

Desativou RUN_TESTS e construindo pela terceira vez ...

@ bxk-sonavex Parece que já foi construído com sucesso. Você precisa copiar os arquivos dll para o diretório dos arquivos executáveis:
"
Observe que, após a conclusão bem-sucedida da construção, antes de tentar executar o aplicativo, você precisa copiar o dl.dll (dlfcn) e o isaac.dll (isaac) no mesmo diretório ou colocá-los em um diretório do sistema.
"

@gongzg Adicionadas as pastas das duas dlls no caminho do sistema em vez de copiá-las para a pasta de teste. Agora tenho outro erro, que parece muito sério ...

"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

Estou usando Intel Iris Plus Graphics 650 e intel_sdk_for_opencl_setup_6.3.0.1904. Quaisquer pensamentos e soluções?

@ bxk-sonavex Você precisa atualizar o driver Intel Graphics para a versão mais recente.

@gongzg Obrigado, isso resolveu o erro de compilação. Ao executar os testes, recebi um monte de erros como (pode não pegar todos eles)

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

Esses erros devem ser preocupados?

De qualquer forma, estou testando a compilação usando o exemplo mnist. É extremamente lento , muito mais lento do que o Caffe original usando CPU. E há alguns avisos (repetidos várias vezes)

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'

Qualquer ideia?

@ bxk-sonavex

Por que você não trabalha rodando o Caffe no Linux por enquanto? Devs eu acho que estão mais focados em fazer o código FP16, INT8 etc rodando sem problemas, especialmente naibaf7 (david).

O suporte adequado do Windows virá eventualmente.

Só uma sugestão.

@atlury eu adoraria !!! Mas nosso sistema é Windows 10 + Intel Iris ... Tem alguma ideia de quando virá o suporte para Windows? Ou qualquer outra plataforma DL funciona (usando GPU)?

@gongzg Só quero atualizá-lo com o desempenho
CPU: 7 minutos 33 segundos, precisão = 0,9914
GPU: 29 minutos e 34 segundos, precisão = 0,8406

Querendo saber qual é o desempenho no Linux. Então, eu poderia ter uma ideia básica de quanto acelerar usando Intel GPU (OpenCL) vs CPU. Obrigado!!

@ bxk-sonavex

Ben, você habilitou o opencl kernels? Você tentou usar INTEL_SPATIAL?

@atlury O que quer dizer "habilitar os kernels opencl"? Sim, eu segui as instruções aqui (https://github.com/01org/caffe/wiki/clCaffe#how-to-build) e "set USE_INTEL_SPATIAL = 1" na linha de comando (não modificando diretamente o arquivo build_win.cmd )

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

@ bxk-sonavex

Bem, você precisará incluir INTEL_SPATIAL para todas as camadas convolucionais em seu deploy.proto. Eu testei pessoalmente em tempo real no Linux.

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

"Eu testei em um stick de TV Intel, webcam usando os kernels Intel Spatial e usando o modelo vgg de 19 camadas. Consigo obter classificação em tempo real e tudo com menos de 3,5 watts"

O Windows também deve funcionar.

@ bxk-sonavex para o problema na versão 01org, abra um problema aqui. Existem algumas falhas de teste devido ao problema de precisão do FP16 nesses casos de teste de gradiente, o que não é crítico. O desempenho é extremamente lento, o que deve ser causado pelo autoajuste. Deve ser muito mais rápido quando você executá-lo novamente. Em primeiro lugar, você pode tentar usar build / tools / caffe para medir o desempenho de avanço do AlexNet.

A propósito, acabei de notar que @CNugteren lançou uma nova versão 1.2.0 de sua biblioteca CLBlast autotuned há alguns dias. Eu verifiquei e parece estar funcionando com Caffe no meu laptop Windows 10 Lenovo com GPU Intel 4400 antigo (bem como no Linux) - então pode ser uma boa adição ao Caffe, uma vez que a versão anterior do CLBlast apresentava falhas de segmentação no Windows!

Se você estiver interessado, pode verificar a velocidade do Caffe com LibDNN e CLBlast, por exemplo, no SqueezeDet da seguinte forma (o mesmo procedimento no Windows e no 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

Levará algum tempo, pois o CK tentará detectar seu ambiente e compiladores,
e reconstruirá todas as dependências necessárias em sua máquina.

Depois disso, você pode apenas instalar o SqueezeDet e executar o tempo interno:

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

A primeira execução pode ser um pouco lenta devido à compilação do kernel e ao cache, então a segunda execução será muito mais rápida!

Você também pode comparar a classificação da imagem:

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

Não relacionado à Intel, mas apenas uma observação de que parece haver um pequeno bug ao compilar Caffe com CLBlast 1.2.0 para Android ARM64 usando Android GCC 4.9.x ("to_string" não encontrado na classe std):

$ 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

Seria bom consertá-lo, pois o CLBlast 1.1.0 funciona bem no Android ... Nesse caso, ele funcionará com o Caffe em todas as plataformas.

Espero que seja de alguma ajuda e tenha um bom final de semana!

parece haver um pequeno bug ao compilar Caffe com CLBlast 1.2.0 para Android ARM64 usando Android GCC 4.9.x ("to_string" não encontrado na classe std):

Não tem certeza se você quer dizer que é um bug no CLBlast ou no Caffe? Em qualquer caso, CLBlast tem isso implementado em um cabeçalho Android especial. Talvez isso pudesse ser usado no Caffe também?

@CNugteren - Acabei de verificar e o problema não está no CLBlast. Eu só esqueci um patch no CK que estava corrigindo LibDNN para Android (então minha culpa). Eu adicionei (https://github.com/dividiti/ck-caffe/blob/master/package/lib-caffe-bvlc-opencl-clblast-universal/patch.android/android.fgg.patch3) e é agora possível compilar Caffe com CLBlast e libDNN. Verifiquei exemplos de classificação e benchmarking no meu Samsung S7 - funciona bem. Sinto muito por esse alarme falso e obrigado por lançar um novo CLBlast - agora posso usá-lo no Caffe no Linux, Windows e Android.

@gfursin Esta é uma versão que usa CPU ou GPU (OpenCL)? Achei que estivesse dizendo que o OpenCL ainda não está funcionando no Windows (ou pelo menos não com o Intel iGPU ainda). O que você está usando no Windows?

@ bxk-sonavex

Ben, desculpe a demora em responder. Eu estava longe.

Para citar @ naibaf7
"O método de convolução (" motor ") pode, alternativamente, ser selecionado / sobrescrito no arquivo prototxt de rede"

Portanto, adicione a entrada "engine: INTEL_SPATIAL" a todas as especificações da camada de convolução.

Tome AlexNet como um exemplo, edite o arquivo digamos $ CAFFE_ROOT / models / bvlc_alexnet / train_val.prototxt e adicione a seguinte linha para fazer a camada conv1 ser calculada usando a convolução espacial. Da mesma forma, mude outras camadas

 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
     }
   }
 }

Edit: Meu mal, vejo que você abriu outro tópico e parece ter progredido um pouco mais.

@ bxk-sonavex - Eu uso a versão Caffe OpenCL (com libDNN e CLBlast) no Windows com a antiga GPU Intel 4400 SEM Intel Spatial - parece estar funcionando bem, mas pode estar abaixo do ideal. Aqui está a lista de dispositivos Caffe ("ck run program: caffe --cmd_key = query_gpu_opencl"):
output_caffe_opencl_devices.txt

Aqui está o resultado da classificação de imagens no Windows com a versão Caffe OpenCL e GoogleNet acima:
output_caffe_opencl_image_classification.txt

Eu verifico principalmente inferência / detecção de objeto neste estágio (estamos tentando unificar a instalação, benchmarking e otimização de DNN em todas as plataformas possíveis), então eu realmente não enfatizei outros recursos e modelos do Caffe no Windows com OpenCL ...

Eu também tentei compilar o Caffe OpenCL com Intel Spatial ON ("ck install package: lib-caffe-bvlc-opencl-libdnn-clblast-universal --env.USE_INTEL_SPATIAL = ON") e observei os mesmos 2 erros de compilação. relatado anteriormente por @atlury):
output_caffe_build_error_with_intel_spatial.txt

Existe um script de compilação disponível para Linux (Ubuntu 16.04) também? Estou recebendo erros ao tentar compilar

@rachithayp Siga as instruções cuidadosamente, ele funcionará mesmo na série 18.0x. Nós o testamos.

Olá @rachithayp . Apenas uma observação de que você provavelmente precisará corrigir o kernel para fazer o Intel OpenCL funcionar no Ubuntu 16.04: https://github.com/dividiti/ck-caffe/wiki/Installation#Intel_CPUGPU_Linux .

Consegui construir o ramo OpenCL do Caffe no meu Ubuntu 18.04 (laptop Lenovo T470p com GPU Intel) sem patchear o kernel e com o mais recente Intel OpenCL via CK algumas semanas atrás:

$ 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

O CK tentará detectar seus compiladores disponíveis, bibliotecas OpenCL e outras dependências e invocará o cmake para o Caffe. Se a compilação for bem-sucedida, você pode verificar a instalação usando o ambiente virtual CK:

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

Você também pode tentar uma classificação de imagem de amostra da seguinte maneira:

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

Boa sorte.

cc @ ens-lg4 e @psyhtest ...

@atlury fui capaz de compilar usando o cmake abaixo:
cmake .. -DUSE_CUDA = OFF -DBUILD_docs = 0 -DOPENCL_LIBRARIES = <> -DOPENCL_INCLUDE_DIRS = <>

Mas tentar compilar com INTEL_SPATIAL_ON está dando os erros abaixo:
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: erro: 'LibDNNConvSpatial' não nomeia um tipo
LibDNNConvSpatial:: LibDNNConvSpatial (LibDNNConvConfig config) {
^
/ home / intel / Documents / caffe_src / opencl_caffe / src / caffe / libdnn / libdnn_conv_spatial. cpp: 117 : 25: erro: inicializador esperado antes do token '<'
string LibDNNConvSpatial:: generate_fw_defs () {

Alguma ideia do que pode estar errado?. Além disso, não há pasta include / caffe / greentea no branch opencl, então copiei de " https://github.com/01org/caffe ".

@rachithayp
Você pode tentar as instruções do capítulo abaixo? É um corte preliminar do capítulo de instalação de nosso próximo livro sobre o opencl caffe. Obrigado @ naibaf7

Espero que ele lance alguma luz e o ajude em seus esforços de opencl caffe.

python-deep-learning-installation-chap.pdf

@ bxk-sonavex - Eu uso a versão Caffe OpenCL (com libDNN e CLBlast) no Windows com a antiga GPU Intel 4400 SEM Intel Spatial - parece estar funcionando bem, mas pode estar abaixo do ideal. Aqui está a lista de dispositivos Caffe ("ck run program: caffe --cmd_key = query_gpu_opencl"):
output_caffe_opencl_devices.txt

Aqui está o resultado da classificação de imagens no Windows com a versão Caffe OpenCL e GoogleNet acima:
output_caffe_opencl_image_classification.txt

Eu verifico principalmente inferência / detecção de objeto neste estágio (estamos tentando unificar a instalação, benchmarking e otimização de DNN em todas as plataformas possíveis), então eu realmente não enfatizei outros recursos e modelos do Caffe no Windows com OpenCL ...

Eu também tentei compilar o Caffe OpenCL com Intel Spatial ON ("ck install package: lib-caffe-bvlc-opencl-libdnn-clblast-universal --env.USE_INTEL_SPATIAL = ON") e observei os mesmos 2 erros de compilação. relatado anteriormente por @atlury):
output_caffe_build_error_with_intel_spatial.txt

seu HD 4400 roda mais rápido com cafeína do que CPU?
Compilei o clCaffe e o executei no meu HD 5500, mas ele é 5 vezes mais lento que a CPU (i3 5005U)
Não sei por quê.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

shiorioxy picture shiorioxy  ·  3Comentários

Ruhjkg picture Ruhjkg  ·  3Comentários

kelvinxu picture kelvinxu  ·  3Comentários

malreddysid picture malreddysid  ·  3Comentários

dfotland picture dfotland  ·  3Comentários