Caffe: nvcc fatal: arquitetura gpu não suportada 'compute_61'

Criado em 31 dez. 2016  ·  27Comentários  ·  Fonte: BVLC/caffe

Resumo do problema

Eu tenho a seguinte configuração abaixo, mas no início da compilação, ele gera os erros para todos os módulos GPU:

nvcc fatal: arquitetura gpu não suportada 'compute_61'

Por que isso acontece? O 7.5 não é compatível com o branch master para as novas placas Geforce 1070/1080?

A configuração do seu sistema

Sistema operacional:
Compilador: GCC 4.8.4
Versão CUDA (se aplicável): 7.5
Versão CUDNN (se aplicável): 5.0
BLAS:
Versão Python ou MATLAB (para pycaffe e matcaffe respectivamente):

Comentários muito úteis

Você deve modificar Makefile.config .

\# CUDA architecture setting: going with all of them.
\# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
\# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
                -gencode arch=compute_20,code=sm_21 \
                -gencode arch=compute_30,code=sm_30 \
                -gencode arch=compute_35,code=sm_35 \
                -gencode arch=compute_50,code=sm_50 \
                -gencode arch=compute_52,code=sm_52
\#               -gencode arch=compute_60,code=sm_60 \
\#               -gencode arch=compute_61,code=sm_61 \
\#               -gencode arch=compute_61,code=compute_61

Todos 27 comentários

O CUDA 7.5 é antigo, portanto, pode não oferecer suporte a 'compute_61'.
CUDA8.0 ou selecionar 'compute_50' em Make.config será uma solução, talvez.

Estou usando CUDA8.0 + Geforce1070 sem problemas.

Sim ... seria bom ter ramos de lançamento ... em vez de um ramo mestre que você nunca sabe que pode quebrar com um novo opencv ou cuda ou qualquer versão

Você deve modificar Makefile.config .

\# CUDA architecture setting: going with all of them.
\# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
\# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
                -gencode arch=compute_20,code=sm_21 \
                -gencode arch=compute_30,code=sm_30 \
                -gencode arch=compute_35,code=sm_35 \
                -gencode arch=compute_50,code=sm_50 \
                -gencode arch=compute_52,code=sm_52
\#               -gencode arch=compute_60,code=sm_60 \
\#               -gencode arch=compute_61,code=sm_61 \
\#               -gencode arch=compute_61,code=compute_61

Se estiver usando cmake, procure CUDA_ARCH_NAME. Pode ser definido como "Manual" se o seu arco não estiver listado. Depois de configurar, CUDA_ARCH_BIN e CUDA_ARCH_PTX estarão disponíveis.

Para mim, o arquivo vanilla não tinha compute_60:

# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 lines for compatibility.
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
        -gencode arch=compute_20,code=sm_21 \
        -gencode arch=compute_30,code=sm_30 \
        -gencode arch=compute_35,code=sm_35 \
        -gencode arch=compute_50,code=sm_50 \
        -gencode arch=compute_50,code=compute_50

E ainda consigo:
nvcc fatal : Unsupported gpu architecture 'compute_60'

Alguém tem alguma ideia do que mais posso tentar?

Eu tenho o mesmo problema com você, você já resolveu? @Huxwell

Eu trabalho apenas em máquinas com gtx1070 ou gtx1080 para mim.
Sem chances de titan x, gtx 770, cpu para mim - não importa qual CUDA_ARCH seja especificado.
Ainda estou lutando para descobrir o motivo.

Mesmo depois de comentar, durante a construção, esse erro aparece no CUDA 7.0 com cuDNN 5.0. no Ubuntu 14.04
Há alguma solução para isso

Pode ser que diga respeito apenas a mim, mas se houver alguma chance de você estar usando algum dockerfile nvidia-docker de um repo diferente, verifique se você realmente usa o arquivo Makefile.config que você editou, não o padrão que é automaticamente renomeado por um script ou algum arquivo baixado do github durante o processo de compilação do docker.

Baixei a versão caffe do site caffe github e, em seguida, alterei o Makefile.config usando CUDA 7.0 e cuDNN 5.0.

Segui o procedimento padrão de mv makefile.config.example makefile.config para fazer alterações e usar o diretório de compilação para criá-lo.

Eu resolvo esse problema seguindo:
cd / usr / local / lib
sudo rm cuda
sudo ln -s cuda-8.0 / cuda

Olá pessoal,

Estou usando o CUDA 9.0 no Ubuntu 16.04 e estou enfrentando o seguinte erro:

nvcc fatal   : Unsupported gpu architecture 'compute_20'

Isso pode ser resolvido removendo as linhas no Makefile.config:

-gencode arch=compute_20,code=sm_20 \
 -gencode arch=compute_20,code=sm_21 \

Melhor,
Chris

Onde posso encontrar o Makefile.config? Tenho o mesmo problema, mas não consigo encontrar este arquivo para editar.

Também não consigo encontrar.

Quer dizer ... Caffe está meio morto agora. Todo mundo está publicando trabalhos para a TF agora

Em chriskraus0 diga:
Isso pode ser resolvido removendo as linhas no Makefile.config:

-gencode arch = compute_20, code = sm_20 \
-gencode arch = compute_20, code = sm_21 \

Mas não consigo encontrar o Makefile.config para editar. Como posso editar? Eu preciso fazer este arquivo. Não entendo, sou iniciante.

Olá,

o arquivo está na pasta base do caffe, ou você deve criá-lo copiando / renomeando Makefile.config.example.

Dê uma olhada nas instruções de instalação (http://caffe.berkeleyvision.org/installation.html#compilation).

Muitas felicidades,
Chris

Muito obrigado!

usando cmake para construir cafe, CUDA 8, cuDNN V7, 1070 Ti
quando eu uso o cmake mostra o cuda 7.5, embora eu tenha o cuda 8.0 instalado

"[1%] Cafeproto alvo construído
[2%] Construindo objeto NVCC (dispositivo) src / caffe / CMakeFiles / cuda_compile.dir / layers / cuda_compile_generated_prelu_layer.cu.o
nvcc fatal: arquitetura gpu não suportada 'compute_61'
Erro CMake em cuda_compile_generated_prelu_layer.cu.o. cmake: 207 (mensagem):
Geração de erro
/home/stanley/caffe/build/src/caffe/CMakeFiles/cuda_compile.dir/layers/./cuda_compile_generated_prelu_layer.cu.o

src / caffe / CMakeFiles / caffe.dir / build. make: 483 : a receita para o destino 'src / caffe / CMakeFiles / cuda_compile.dir / layers / cuda_compile_generated_prelu_layer.cu.o' falhou
make [2]: * [src / caffe / CMakeFiles / cuda_compile.dir / layers / cuda_compile_generated_prelu_layer.cu.o] Erro 1CMakeFiles / Makefile2: 304: a receita para o destino 'src / caffe / CMakeFiles / caffe.dir / all' falhoumake [1]: [src / caffe / CMakeFiles / caffe.dir / all] Erro 2
Makefile: 127 : a receita para o destino 'todos' falhou
make: ** [all] Erro 2
"

por favor ajude

Estou tendo um problema parecido. Estou tentando instalar o Caffe em uma imagem do Docker. Estou fazendo isso para experimentar alguns códigos para Gaze Analysis. Estou usando o Cuda 7.5 e o CuDNN 5 no Ubunut 14. Modifiquei o Dokerfile da GPU neste repositório para usá-los. Como sugerido, removi essas linhas de _Makefile.config_:

-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61

Também verifiquei se a versão do NCCV que estou usando é compatível com as versões Cuda e CuDNN. No entanto, quando o processo chega ao ponto de executar make -j"$(nproc)" , ainda recebo:

-- Build files have been written to: /opt/caffe/build
[  1%] Running C++/Python protocol buffer compiler on /opt/caffe/src/caffe/proto/caffe.proto
Scanning dependencies of target proto
[  1%] Building CXX object src/caffe/CMakeFiles/proto.dir/__/__/include/caffe/proto/caffe.pb.cc.o
Linking CXX static library ../../lib/libproto.a
[  1%] Built target proto
[  2%] [  2%] [  2%] [  2%] [  2%] [  4%] [  4%] Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/util/./cuda_compile_generated_math_functions.cu.o
Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/solvers/./cuda_compile_generated_adagrad_solver.cu.o
Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/solvers/./cuda_compile_generated_sgd_solver.cu.o
Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/solvers/./cuda_compile_generated_rmsprop_solver.cu.o
Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/solvers/./cuda_compile_generated_adadelta_solver.cu.o
Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/solvers/./cuda_compile_generated_nesterov_solver.cu.o
[  4%] Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/solvers/./cuda_compile_generated_adam_solver.cu.o
Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/layers/./cuda_compile_generated_contrastive_loss_layer.cu.o
nvcc fatal   : Unsupported gpu architecture 'compute_60'
nvcc fatal   : Unsupported gpu architecture 'compute_60'
CMake Error at cuda_compile_generated_adadelta_solver.cu.o.cmake:206 (message):
  Error generating
  /opt/caffe/build/src/caffe/CMakeFiles/cuda_compile.dir/solvers/./cuda_compile_generated_adadelta_solver.cu.o

O que é razoável, já que cmake -DUSE_CUDNN=1 -DUSE_NCCL=1 .. gera isso em algum ponto:

-- NVIDIA CUDA:
--   Target GPU(s)     :   Auto
--   GPU arch(s)       :   sm_20 sm_21 sm_30 sm_35 sm_50 sm_60 sm_61
--   cuDNN             :   Yes (ver. 5.1.10)

O que me faz pensar que ele está ignorando completamente _Makefile.config_, já que sm_52 não aparece aqui enquanto aparece no referido arquivo. No entanto, algo muito estranho acontece se eu tentar fazer isso de dentro de um contêiner do Docker. Portanto, criei uma imagem que executou todas as etapas no Dockerfile até a criação da pasta _build_. Em seguida, executei essa imagem com nvidia-docker run --rm -it --entrypoint /bin/bash caffe_image e executei manualmente estes comandos:

cd /opt/caffe/
mkdir build
cd build
cmake -DUSE_CUDNN=1 -DUSE_NCCL=1 ..

Nesta configuração, a saída é esta:

-- NVIDIA CUDA:
--   Target GPU(s)     :   Auto
--   GPU arch(s)       :   sm_50
--   cuDNN             :   Yes (ver. 5.1.10)

Como a arquitetura é suportada, isso termina sem problemas, assim make -j"$(nproc)" . No entanto, ainda não consigo compilar isso corretamente para o resto das arquiteturas de GPU.

Alguém tem ideia do que está acontecendo? Ou como isso poderia ser resolvido?
Para referência, deixei o Dockerfile que estou usando e a versão modificada do Makefile.config aqui .

Desde já, obrigado.

@javierselva Parece que você não está compilando com o Makefile, mas usando o CMake. Nesse caso, este é um sistema de construção diferente e você precisa remover / alterar os archs da GPU com algo como cmake-gui.
Cmake NÃO lê o Makefile.config, que só é usado se você executar "make" no diretório raiz do Caffe (sistema de compilação diferente).

Excelente! Muito obrigado, @ naibaf7 , sou um pouco novo para compilar coisas e ainda me confundo com as diferenças entre Make e CMake. Vou pesquisar para edições futuras.

Então, seguindo sua resposta, modifiquei o arquivo cmake / Cuda.cmake e removi as arquiteturas 60 e 61 nas linhas 7 e 92:93. Agora tudo parece estar funcionando perfeitamente.

Obrigado novamente!!

@Noiredd Acho que é hora de abandonar o sistema de compilação do Makefile, devido a problemas como o relatório de @javierselva . O que você acha?

@ naibaf7 Não tenho uma opinião clara sobre isso, principalmente devido à minha experiência limitada com make / cmake. Ainda assim, ter um único sistema de construção provavelmente limitaria os pontos de falha, então pode ser uma boa coisa a se fazer.

@Noiredd Pelo menos para o ramo OpenCL, a infraestrutura Makefile tornou-se insustentável e será removida lá em breve. Além disso, as pessoas se confundem facilmente entre os dois, como fica evidente aqui.
Makefiles não são poderosos o suficiente para pegar todos os caminhos de dependência, geralmente envolve muito trabalho manual.

Para Windows ?

@prehensilecode
Não sei muito bem sobre sua explicação: CUDA_ARCH_NAME.
Como posso definir CUDA_ARCH para arch=compute_50,code=sm_50 .

Aguardamos a sua resposta.

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