Tensorflow: Milagres 3.0?

Criado em 9 nov. 2015  ·  101Comentários  ·  Fonte: tensorflow/tensorflow

Existem planos para oferecer suporte ao recurso de computação Cuda 3.0?

Comentários muito úteis

Quanto à criação do dispositivo Cuda 3.0, se você sincronizar o código TensorFlow mais recente, poderá fazer o seguinte. A documentação oficial será atualizada em breve. Mas é o que parece:

$ TF_UNOFFICIAL_SETTING=1 ./configure

... Igual às configurações oficiais acima

AVISO: você está definindo configurações não oficiais no TensorFlow. Porque alguns
bibliotecas externas não são compatíveis com versões anteriores, essas configurações são amplamente
não testado e não suportado.

Especifique uma lista de recursos de computação Cuda separados por vírgulas que você deseja
construir com. Você pode encontrar a capacidade de computação do seu dispositivo em:
https://developer.nvidia.com/cuda-gpus.
Observe que cada capacidade de computação adicional aumenta significativamente
seu tempo de construção e tamanho binário. [O padrão é: "3.5,5.2"]: 3,0

Configurando o Cuda incluem
Configurando o Cuda lib64
Configurando o Cuda bin
Configurando o Cuda nvvm
Configuração concluída

Todos 101 comentários

Oficialmente, os recursos de computação Cuda 3.5 e 5.2 são suportados. Você pode tentar habilitar outro recurso de computação modificando o script de compilação:

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

Obrigado! Vou tentar e relatar aqui.

Isso ainda não é oficialmente suportado. Mas se você quiser habilitar o Cuda 3.0 localmente, aqui estão os locais adicionais para alterar:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/gpu_device.cc#L610
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/gpu_device.cc#L629
Onde o dispositivo GPU menor é ignorado.

O suporte oficial eventualmente virá de uma forma diferente, onde garantimos que a correção funcione em todos os diferentes ambientes computacionais.

Fiz as alterações nas linhas acima e consegui compilar e executar o exemplo básico na página Getting Started: http://tensorflow.org/get_started/os_setup.md#try_your_first_tensorflow_program - não reclamou da gpu, mas também não relatou usando a gpu.

Como posso ajudar nos próximos passos?

infojunkie@, você poderia postar sua etapa e fazer o upload do log?

Se você estivesse seguindo este exemplo:

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

Se você vir a linha a seguir, o dispositivo lógico da GPU está sendo criado:

Criando dispositivo TensorFlow (/gpu:0) -> (dispositivo: ..., nome: ..., ID de barramento pci: ...)

Se você quiser ter certeza absoluta de que a GPU foi usada, defina CUDA_PROFILE=1 e ative o criador de perfil Cuda. Se os logs do criador de perfil Cuda foram gerados, foi um sinal certo de que a GPU foi usada.

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

Obtive o seguinte log:

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

Acho que significa que a GPU foi encontrada e usada. Eu posso tentar o profiler CUDA se você achar que é útil.

Por favor, priorize esta questão. Ele está bloqueando o uso de gpu no OSX e no K520 da AWS e, para muitas pessoas, esse é o único ambiente disponível.
Obrigado!

Não é a correção mais legal, mas apenas comente a verificação da versão de computação do cuda em _gpu_device.c_ line 610 to 616 , recompile e a aceleração da GPU do amazon g2 parece funcionar bem:

example

Para referência, aqui está meu patch muito primitivo para trabalhar com o Cuda 3.0: https://gist.github.com/infojunkie/cb6d1a4e8bf674c6e38e

@infojunkie Apliquei sua correção, mas obtive muitas nan na saída do cálculo:

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

@markusdr , isso é muito estranho. Você poderia postar as etapas completas de construção do binário?

Poderia com qual GPU e sistema operacional você está executando? Você está usando Cuda 7.0 e Cudnn 6.5 V2?

Apenas +1 para corrigir esse problema na AWS o mais rápido possível. Não temos outras placas de GPU para nossa pesquisa.

Olá, não tenho certeza se este é um problema separado, mas estou tentando construir com uma GPU CUDA 3.0 (Geforce 660 Ti) e estou recebendo muitos erros com --config=cuda. Veja o arquivo anexo abaixo. Parece não estar relacionado às alterações recomendadas acima. Percebi que ele tenta compilar um arquivo temporário compute_52.cpp1.ii que seria a versão errada para minha GPU.

Estou no Ubuntu 15.10. Modifiquei o host_config.h no Cuda inclui para remover a verificação de versão no gcc. Estou usando Cuda 7.0 e cuDNN 6.5 v2 conforme recomendado, embora também tenha versões mais recentes instaladas.

cuda_build_fail.txt

Sim, eu estava usando Cuda 7.0 e Cudnn 6.5 em uma instância EC2 g2.2xlarge com este AIM:
cuda_7 - ami-12fd8178
ubuntu 14.04, gcc 4.8, cuda 7.0, atlas e opencv.
Para construir, segui as instruções em tensorflow.org.

Parece que estamos vendo uma incompatibilidade de API entre o Compute Capability v3 e o Compute Capability v3.5; poste a correção do patch do infojunkie , me deparei com esse problema

I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Criando dispositivo TensorFlow (/gpu:0) -> (dispositivo: 0, nome: Quadro K2100M, ID de barramento pci: 0000:01:00.0)
I tensorflow/core/common_runtime/local_session.cc:45] Sessão local inter op threads de paralelismo: 8
F tensorflow/stream_executor/cuda/cuda_blas.cc:229] Falha na verificação: f != nullptr _could not find cublasCreate_v2 in cuBLAS DSO_; dlerror: bazel-bin/tensorflow/cc/tutorials_example_trainer: símbolo indefinido: cublasCreate_v2

Eu corro no Ubuntu 15.04, gcc 4.9.2, CUDA Toolkit 7.5, cuDNN 6.5;

+1 por ter Compute Capability v3 Support

o cublas está instalado? e onde liga
ls -lah /usr/local/cuda/lib64/libcublas.so ?

@allanzelener , quais versões de SO e GCC você tem? Seus erros parecem vir de compiladores C++ incompatíveis.

Recomenda-se usar o Ubuntu 14.04 e o GCC 4.8 com TensorFlow.

@vsrikarunyan , é melhor usar o CUDA Toolkit 7.0, conforme recomendado. Você pode instalar um kit de ferramentas CUDA mais antigo junto com seu kit de ferramentas mais recente. Basta apontar o TensorFlow "configure" e talvez LD_LIBRARY_PATH para o CUDA 7.0 ao executar o TensorFlow.

@avostryakov , o patch inicial do @infojunkie deve funcionar na AWS.

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

Um patch oficial está trabalhando no pipeline. Isso exporia uma opção de configuração para permitir que você escolha seu destino de computação. Mas por baixo, ele faz mudanças semelhantes. Eu tentei no AWS g2 e descobri uma vez que as coisas funcionariam, depois de desinstalar completamente o driver NVIDIA e reinstalar o driver GPU mais recente da NVIDIA.

Mais uma vez, a configuração recomendada na AWS neste momento é a seguinte.
Ubuntu 14.04, GCC 4.8, CUDA Toolkit 7.0 e CUDNN 6.5. Para os dois últimos, não há problema em instalá-los sem afetar a instalação existente de outras versões. Além disso, as versões oficiais recomendadas para os dois últimos também podem mudar em breve.

Eu apliquei o mesmo patch em uma instância g2.2xlarge e obtive o mesmo resultado que @markusdr... um monte de nan's.

@zheng-xq Sim, estou no Ubuntu 15.10 e estava usando o GCC 5.2.1. O problema era o compilador. Não consegui descobrir como alterar o compilador com o bazel, mas simplesmente instalar o gcc-4.8 e usar alternativas de atualização para alterar os links simbólicos em usr/bin parece ter funcionado. (Mais informações: http://askubuntu.com/questions/26498/choose-gcc-and-g-version). Obrigado pela ajuda, retornarei um relatório se tiver mais problemas.

Consegui que isso funcionasse em uma instância g2.2xlarge e executei o exemplo de treinamento e verifiquei que a gpu estava ativa usando a ferramenta nvidia-smi , mas ao executar o convolutional.py do mnist, ficou sem memória. Suspeito que isso tenha a ver apenas com o tamanho do lote e com o fato de que o aws gpus não tem muita memória, mas só queria jogar isso lá fora para ter certeza de que soa correto. Para esclarecer, executei o seguinte, e funcionou por 15 minutos e depois ficou sem memória.

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

@nbenhaim , o que você teve que fazer para que funcionasse?

@markusdr , @jbencook , o NAN é bastante preocupante. Eu mesmo corri a mesma coisa e não tive nenhum problema.

Se você usar a configuração de software recomendada: Ubuntu 14.04, GCC 4.8, Cuda 7.0 e Cudnn 6.5, meu próximo palpite é o driver Cuda. Você poderia desinstalar e reinstalar o driver Cuda mais recente.

Esta é a sequência que tentei na AWS, sua milhagem pode variar:

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

Obrigado por acompanhar @zheng-xq - vou tentar hoje.

Outro +1 para oferecer suporte a GPUs anteriores a 3,5, como outra pessoa cuja única opção realista para treinamento em dados reais são instâncias de GPU da AWS.

Mesmo para testes locais, a GPU do meu laptop (recente, desenvolvedor) não suporta 3.5 :-(

@anjishnu Acabei de seguir o patch do @infojunkie https://gist.github.com/infojunkie/cb6d1a4e8bf674c6e38e depois de fazer uma instalação limpa e compilar seguindo as instruções.

Alguns comentários - A AMI que eu estava usando tinha o kit de ferramentas NVIDIA cuda 6.5 instalado, então quando eu segui o link no guia de introdução do tensorflow, baixei o arquivo 7.0 .run para o ubuntu 14.04 , atualizei o driver e instalei o cuda 7.0 no /usr/local/cuda-7.0 sem criar um link simbólico para /usr/local/cuda desde que eu já tinha o 6.5 instalado e não queria matá-lo

Então, ao construir, apenas especifiquei a localização correta do cuda 7.0. Uma coisa confusa é que, ao construir a biblioteca python, o tutorial não lembra você de especificar --config=cuda , mas você precisa fazer isso se quiser que a biblioteca python utilize gpu

@markusdr , @jbencook , recebi um NaN e todos os tipos de valores confusos também quando apliquei o patch inicialmente, mas o que o corrigiu foi fazer um "bazel clean" e reconstruir do zero depois de fazer as alterações propostas descritas em @infojunkie remendo de. Você tentou isso?

Interessante... não, ainda não tive oportunidade. Você tentou executar a CNN do guia de introdução?

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

Curioso para saber se funcionou corretamente.

@jbencook como mencionei , convolutional.py parece funcionar corretamente, mas depois de 15 minutos ele trava devido à falta de memória, mas a saída parece correta e usei a ferramenta da nvidia-smi para verificar se está realmente sendo executado na GPU e é. Eu suspeito que isso é porque o tamanho do lote ... eu sei que o gpus no ec2 não tem tanta memória, mas estou realmente inseguro neste momento por que ficou sem memória

O exemplo convolutional.py ficou sem memória GPU para mim também, em uma GeForce GTX 780 Ti.

Consegui instalá-lo na AWS depois de muita dor. Veja https://gist.github.com/erikbern/78ba519b97b440e10640 – Eu também construí uma AMI: ami-cf5028a5 (na região da Virgínia)

Funciona em g2.2xlarge e g2.8xlarge e detecta os dispositivos corretamente (1 e 4 respectivamente). No entanto, não estou vendo nenhuma aceleração das 4 placas GPU no g2.8xlarge. Ambas as máquinas processam cerca de 330 exemplos/seg. executando o exemplo CIFAR 10 com várias GPUs. Também desempenho muito semelhante no exemplo convolucional MNIST. Ele também trava após cerca de 15 minutos com "Sem memória da GPU, veja o despejo de estado da memória acima", como algumas outras pessoas mencionadas acima

Eu executei o exemplo CIFAR por cerca de uma hora e parece funcionar muito bem até agora

Quanto à criação do dispositivo Cuda 3.0, se você sincronizar o código TensorFlow mais recente, poderá fazer o seguinte. A documentação oficial será atualizada em breve. Mas é o que parece:

$ TF_UNOFFICIAL_SETTING=1 ./configure

... Igual às configurações oficiais acima

AVISO: você está definindo configurações não oficiais no TensorFlow. Porque alguns
bibliotecas externas não são compatíveis com versões anteriores, essas configurações são amplamente
não testado e não suportado.

Especifique uma lista de recursos de computação Cuda separados por vírgulas que você deseja
construir com. Você pode encontrar a capacidade de computação do seu dispositivo em:
https://developer.nvidia.com/cuda-gpus.
Observe que cada capacidade de computação adicional aumenta significativamente
seu tempo de construção e tamanho binário. [O padrão é: "3.5,5.2"]: 3,0

Configurando o Cuda incluem
Configurando o Cuda lib64
Configurando o Cuda bin
Configurando o Cuda nvvm
Configuração concluída

@nbenhaim @markusdr

O problema de falta de memória pode ser devido ao fato de que convolutional.py executa a avaliação em todo o conjunto de dados de teste (10.000) exemplos. Isso acontece após o término do treinamento, como último passo:

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

Você pode tentar fatiar train_data e test_labels para fazer é menor?

Posso confirmar que, com o script de instalação do @erikbern e o branch master do TensorFlow mais recente, o cifar10_multi_gpu_train.py funciona conforme o esperado na GPU:

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

Embora esta linha agora quebre por causa das alterações de código.

Além disso, se eu pegar 1000 amostras de teste, o exemplo convolutional.py também funciona.

EDIT: O exemplo bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu também funciona sem me dar um monte de nan's.

Confirmo que a versão mais recente dá suporte à especificação da capacidade de computação por meio de
$ TF_UNOFFICIAL_SETTING=1 ./configure
sem necessidade de patch. Obrigado!

Eu acho que esse problema pode ser fechado, a menos que alguém encontre uma função real que falhe para Cuda < 3.5.

Na verdade, deixe-me voltar atrás :-) O script ./configure modifica o código-fonte alterando as linhas relevantes com as versões Cuda especificadas manualmente. Então o git reporta as mudanças não confirmadas e fica muito difícil trabalhar com essa base de código sem reverter a mudança, git pull ing, e configurar novamente, sem falar no envio de contribuições.

Uma abordagem melhor seria ler essas configurações de versão de um arquivo de configuração.

ErikBern acima e sua AMI está trabalhando para cifar para mim - ami-cf5028a5

Obtendo ~ 320 amostras por segundo versus minha caixa do Windows i7 no docker, que obtém ~ 105 amostras por segundo para cifar10_train.py

@infojunkie : sim, isso não é o ideal (@zheng-xq e eu discutimos isso um pouco durante a revisão!).

Tentaremos pensar em uma maneira melhor de lidar com isso, embora gostaríamos de manter a capacidade da filtragem do dispositivo de tempo de execução sincronizada com a forma como o binário foi construído (daí a necessidade de editar o código-fonte para compilar e tempo de execução). Caso contrário, os usuários obtêm erros difíceis de depurar.

Continuaremos trabalhando para tornar isso mais fácil, mas esperamos que isso permita algum progresso para você.

@vrv : sim, posso definitivamente continuar meu trabalho com essas correções. Obrigado pelo apoio!

Apenas curioso, como c4.4xlarge com 16 vCpus é cerca de 0,88 por hora versus a instância gpu que é 0,65 por hora, não seria melhor usar vários cpu do que gpu?

@timshepard Duvido, mas sinta-se à vontade para executar alguns benchmarks - você pode instalar minha AMI (ami-cf5028a5) em um c4.4xlarge e executar cifar10_train.py

Na verdade, o g2.2xlarge tem 8 cpus junto com a GPU. Vai tentar isso.

CPU multi-thread é suportada, mas se você quiser fazer algum treinamento real,
GPU 4 Life, até lançarem a implementação distribuída

Na quinta-feira, 12 de novembro de 2015 às 16h53, Erik Bernhardsson < [email protected]

escrevi:

@timshephard https://github.com/timshepard Duvido, mas fique a vontade
para executar alguns benchmarks - você pode instalar minha AMI (ami-cf5028a5) em um
c4.4xlarge e execute cifar10_train.py


Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment -156274039
.

Eu estava obtendo apenas uma velocidade de 3x para a GPU da Amazon sobre a CPU do Windows no docker. Bom, mas isso foi apenas 1 dos meus núcleos. Todos os 4 núcleos na minha caixa do Windows provavelmente poderiam vencer uma GPU da Amazon.

isso é interessante, porque com caffe , eu não fiz benchmarks reais,
mas treinar no modo CPU é horrível, como ordem de grandeza ou mais
diferença. Talvez o TF seja otimizado melhor no modo CPU - não surpreenderia
mim.

Na quinta-feira, 12 de novembro de 2015 às 17h01, timshepard [email protected]
escrevi:

Eu estava obtendo apenas uma velocidade de 3x para a GPU da Amazon sobre a CPU do meu Windows
estivador. Bom, mas isso foi apenas 1 dos meus núcleos. Tudo para 4 núcleos no meu
A caixa do Windows provavelmente poderia vencer uma GPU da Amazon.


Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment -156275410
.

Por favor, tenha em mente que o tutorial cifar10, como é, não pretende ser um benchmark. Destina-se a mostrar alguns recursos diferentes, como economia e resumo. Em sua forma atual, será limitado por CPU, mesmo com GPU. Para fazer o benchmark, é preciso ter mais cuidado e usar apenas recursos essenciais.

Pode ser que as GPUs da Amazon sejam lentas por algum motivo https://www.reddit.com/r/MachineLearning/comments/305me5/slow_gpu_performance_on_amazon_g22xlarge/
Relatório interessante: "Um g2.2xlarge é um GK104 com downclock (797 MHz), o que o tornaria 1/4 da velocidade do TitanX lançado recentemente e 2,7x mais lento que um GTX 980."

fwiw, obtendo 2015-11-13 00:38:05.472034: etapa 20, perda = 4,64 (362,5 exemplos/s; 0,353 seg/lote)
agora com 7 cpus e cifar10_multi_gpu_train.py. Eu mudei todas as referências de dispositivo de gpu para cpu, se isso faz sentido.

tudo bem, estranho. 13/11/2015 00:43:56.914273: passo 10, perda = 4,65 (347,4 exemplos/s; 0,368 segundos/lote) e usando 2 cpus, então claramente algo falhou aqui. Deve estar usando a GPU ainda. Interessante que ele processa um pouco mais rápido do que a versão gpu única do script.

mesmo com as instruções de erikbern, ainda estou recebendo

AssertionError: O modelo divergiu com perda = NaN quando tento cifar_train.py e isso ao executar mnist/convolutional.py

Época 1.63
Perda de minilote: nan, taxa de aprendizado: nan
Erro de minilote: 90,6%
Erro de validação: 90,4%
Época 1.75
Perda de minilote: nan, taxa de aprendizado: 0,000000
Erro de minilote: 92,2%
Erro de validação: 90,4%
Época 1.86
Perda de minilote: nan, taxa de aprendizado: 0,000000

Consegui rodar em GPU na AWS, mas como os outros estou obtendo velocidades inexpressivas.

Consegui executar o exemplo convolutional.py sem ficar sem memória depois de usar a correção correta sugerida por @zheng-xq de definir a opção ao executar o configure

O script de instalação fornecido por @erikbern não funciona mais a partir do commit 9c3043ff3bf31a6a81810b4ce9e87ef936f1f529

O commit mais recente introduziu esse bug, @keveman já fez uma nota sobre o commit aqui:
https://github.com/tensorflow/tensorflow/commit/9c3043ff3bf31a6a81810b4ce9e87ef936f1f529#diff -1a60d717df0f558f55ec004e6af5c7deL25

Oi! Estou com um problema na compilação do tensorflow com GTX 670. Eu corro

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

Eu tenho erro:

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

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

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

Informações sobre minha placa de amostras NVIDIA deviceQuery:

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

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

Alguma idéia de por que não está funcionando?
Obrigado!

o primitivo __ldg só existe para 3.5+ eu acho. Temos uma correção interna para oferecer suporte a ambos que tentaremos lançar em breve.

Consulte https://github.com/tensorflow/tensorflow/issues/320 para obter mais detalhes

Obrigado! Adicionar correção de # 320 me ajudou, posso compilar (com muitos avisos) e executar

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

Quando eu executo exemplos:

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

Eu recebo avisando que:

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

Como habilitar a GPU em exemplos de tensorflow/models/images?

@erikbern
você descobriu vários problemas de GPU na Amazon? Também estou executando a instância de várias GPUs CIFAR, mas não vejo aceleração.

Aqui está o status de utilização da GPU, parece que todas as GPUs estão em uso, mas não fazem nada.

+------------------------------------------------- -----+
| Versão do driver NVIDIA-SMI 346.46: 346.46 |
|------------------------------------------+----------------- -----+----------------------+
| Persistência do nome da GPU-M| Bus-Id Disp.A | Volátil Descorr. ECC |
| Fan Temp Perf Pwr:Uso/Cap | Uso de memória | GPU-Util Compute M. |
|===============================+================= =====+=======================|
| 0 GRID K520 Desligado | 0000:00:03.0 Desligado | N/A |
| N/A 54C P0 55W / 125W | 3832MiB / 4095MiB | 37% Padrão |
+-------------------------------+----------------- -----+----------------------+
| 1 GRID K520 Desligado | 0000:00:04.0 Desligado | N/A |
| N/A 42C P0 42W / 125W | 3796MiB / 4095MiB | 0% Padrão |
+-------------------------------+----------------- -----+----------------------+
| 2 GRID K520 Desligado | 0000:00:05.0 Desligado | N/A |
| N/A 46C P0 43W / 125W | 3796MiB / 4095MiB | 0% Padrão |
+-------------------------------+----------------- -----+----------------------+
| 3 GRID K520 Desligado | 0000:00:06.0 Desligado | N/A |
| N/A 43C P0 41W / 125W | 3796MiB / 4095MiB | 0% Padrão |
+------------------------------------------+----------------- -----+----------------------+

+------------------------------------------------- ----------------------------+
| Processos: Memória GPU |
| Tipo de PID de GPU Nome do processo Uso |
|================================================= =============================|
| 0 60160 C python 3819MiB |
| 1 60160 C python 3783MiB |
| 2 60160 C python 3783MiB |
| 3 60160 C python 3783MiB |
+------------------------------------------------- ----------------------------+

@mhejrati de acordo com um comentário em https://news.ycombinator.com/item?id=10555692 parece que você não pode fazer isso na AWS:

A virtualização Xen desabilita as cópias P2P e as GPUs têm o que chamamos de "falha de comunicação e algumas GPUs que você simplesmente não consegue alcançar (sem passar pela CPU que é)".

Não tenho certeza de quão confiáveis ​​são os comentários do HN, mas é tudo o que sei até agora

@erikbern @mhejrati Não tenho tanta certeza de que a propriedade específica do Xen seja um problema. As cópias P2P não parecem ser necessárias, pois a CPU ainda pode atribuir trabalho a cada GPU sem que as GPUs precisem se comunicar umas com as outras. Ainda é estranho que todas as GPUs na instância pareçam estar nesse estado semi-utilizado, mas o trabalho prossegue sem erros.

Vou fechar este bug. Por favor, abra um novo com um título mais específico se alguns problemas aqui permanecerem sem solução.

Isso significa que a última versão do tensorflow funciona em instâncias do Amazon g2 sem nenhum hack? E isso significa que ele funciona mais de uma GPU lá?

Não tenho certeza se devemos chamar TF_UNOFFICIAL_* "não é um hack", mas sim, deve funcionar. Se isso não acontecer, provavelmente não está relacionado ao Cuda 3.0 em si, e devemos ter um bug mais específico.

E é possível executar código em duas ou mais GPUs em uma instância da Amazon? Por exemplo, paralelismo de dados para treinar um modelo como no exemplo CIFAR. Vários caras apenas 5 comentários acima deste comentário escreveram que não era possível.

Não sei. Mas se isso ainda for um problema com o 0.6.0, deve ser um bug, apenas um mais específico sobre várias GPUs.

Estou usando 0.6.0 no Ubuntu, não consigo usar mais de uma GPU. A utilização da GPU em uma GPU é sempre 0.

Apenas para referência, alugar um K40 ou K80 não é proibitivamente caro. A Amazon não os possui, mas várias das opções em http://www.nvidia.com/object/gpu-cloud-computing-services.html sim. (Alguns por tão baixo quanto 3$/h)

Theano e Torch não têm nenhum problema com a computação 3.0. Podemos esperar que o TensorFlow suporte a computação 3.0 em breve?

Ou, pelo menos, adicione a capacidade de substituir a restrição sem precisar recompilar.

@Dringite , você pode habilitar o Cuda 3.0 usando o seguinte:

TF_UNOFFICIAL_SETTING=1 ./configure

Deve ser funcional. E se isso não acontecer, sinta-se à vontade para registrar outro problema para rastreá-lo.

O guia de instalação do tensorflow agora inclui uma correção para o cuda 3.0 também

Em quarta-feira, 10 de fevereiro de 2016 às 14h37, zheng-xq [email protected] escreveu:

@Dringite https://github.com/Dringite , você pode habilitar o Cuda 3.0 usando
a seguir:

TF_UNOFFICIAL_SETTING=1 ./configure

Deve ser funcional. E se isso não acontecer, sinta-se à vontade para registrar outro
problema para rastreá-lo.


Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment -182610763
.

Acho que o guia atual não funciona para gpu's - o teste retorna nan's conforme relatado anteriormente.
Em particular, você ainda precisa fazer isso:
TF_UNOFFICIAL_SETTING=1 ./configure

Não consigo encontrar o guia de instalação incluindo uma correção para o cuda 3.0, alguém poderia me indicar? THX!

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

7.5 é a versão cuda, 3.0 é a computação.

Ainda não há melhoria de desempenho para várias GPUs na Amazon (CUDA = 7,5, cudnn = 4,0 ,compute = 3,0) em comparação com uma única GPU.

alguém tem sucesso na capacidade de computação Cuda 2.0?

Verificado que 'TF_UNOFFICIAL_SETTING=1 ./configure' funciona em um macbook pro com GeForce GT 750M. Obrigado!

Existe um ETA para a correção oficial? É realmente difícil de manter (por exemplo, construir imagens com nosso próprio dockerfile) em produção.

Meu laptop me dá este log quando tento executar mnist sample :
"Ignorando dispositivo gpu (dispositivo:0,nome:GeForce GT 635M, pci bus id) com capacidade de computação Cuda 2.1. A capacidade Cuda mínima necessária é 3.0."
Então isso significa que não posso usar a versão GPU porque o Cuda mínimo para tensorflow é 3.0?
Obrigado

Se você usar os binários pré-construídos, sim. Se você construir a partir da fonte, você pode
construir com suporte Cuda 2.1, mas não sei se isso realmente funciona. Isso é
provável que o mínimo efetivo seja cuda 3.0.
Em sáb, 10 de setembro de 2016 às 11:51 Mojtaba Tabatabaie [email protected]
escrevi:

Meu laptop me dá este log quando tento executar mnist sample :
"Ignorando dispositivo gpu (dispositivo: 0, nome: GeForce GT 635M, pci bus id) com Cuda
capacidade de computação 2.1. A capacidade mínima necessária do Cuda é 3.0. "
Isso significa que não posso usar a versão GPU porque o Cuda mínimo
para tensorflow é 3.0 ?
Obrigado


Você está recebendo isso porque modificou o estado de abertura/fechamento.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment -246128896,
ou silenciar o thread
https://github.com/notifications/unsubscribe-auth/AAjO_RvNrRMQEmsueXWoaU5FX4tWHZq3ks5qovwegaJpZM4Ge0kc
.

@smtabatabaie Você tentou construir o cuDNN a partir da fonte como sugerido por @martinwicke , estou enfrentando exatamente os mesmos problemas que o seu e me ajudaria muito se você compartilhasse sua experiência?

Alguma ajuda por favor. Estou recebendo a mesma mensagem de erro com "Ignorando dispositivo gpu visível (dispositivo: 0, nome: GeForce GT 750M, ID de barramento pci: 0000:01:00.0) com capacidade de computação Cuda 3.0. A capacidade Cuda mínima necessária é 3,5."

Eu li as postagens de outras pessoas, o único problema é que esta é uma instalação direta do Windows e não na AWS, como suponho que a maioria das pessoas aqui tenha. No site do tensorflow, afirma-se que é necessário um mínimo de 3.0, por que não consigo usar isso? e como posso contornar isso?

Sugestões de como fazer isso são bem-vindas, por favor.

@gunan @mrry os pacotes do Windows não foram criados com o cuda 3.0? É por isso
são tão pequenos?

@martinwicke Os nightlies são e rc1 também deve ser.

noites sim.
rc0 eu acho que foi 3.5.
Escolhemos a mudança para usar 3.0 para r0.12?

Nós escolhemos a mudança.
@cydal você pode usar as compilações noturnas aqui:
http://ci.tensorflow.org/view/Nightly/job/nightly-win/14/DEVICE=gpu ,OS=windows/artifact/cmake_build/tf_python/dist/tensorflow_gpu-0.12.0rc0-cp35-cp35m-win_amd64. whl

Ou você pode esperar por 0.12.0rc1, que deve chegar em alguns dias.

Obrigado pessoal pela resposta rápida, eu não estava esperando um por um tempo pelo menos. Desculpe se isso soa como uma pergunta idiota, como faço para instalar isso? eu simplesmente pip instalá-lo? (se sim, eu removi a gpu tensorflow anterior? ou ela faz isso automaticamente?) ou requer o download e a instalação manual de alguma forma? considere-me um pouco de um novato.

O link aponta para um "pacote PIP".
Se você usou o comando pip install , você deve poder usar o mesmo comando com o sinalizador --upgrade .
Ou você pode executar pip uninstall tensorflow e então instalar o pacote listado acima.
Depois de fornecer o URL ao comando pip, ele será baixado e instalado automaticamente.

Isso é tudo o que posso dar com conhecimento limitado sobre seu sistema, sua distribuição python, etc.
Considere fazer uma pesquisa no Google para obter mais detalhes sobre como a instalação do pacote pip funciona com sua distribuição python.

Oi, eu simplesmente desinstalei o anterior e reinstalei e funciona! Muito obrigado, você me salvou de comprar um novo laptop.

Oi @gunan com a última alteração para compatibilidade 3.5, recebo o seguinte log:

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

Como posso contornar isso? Sugestões de como fazer isso são muito bem-vindas.

@kay10 Parece que funcionou. Essa mensagem de erro na última linha é inócua e será removida no lançamento.

Como vejo neste tópico, todos têm nível de compatibilidade 3. Para quem tem compatibilidade 2, existe alguma solução sem compilar o código-fonte?
Eu tentei a compilação noturna compartilhada por @gunan e recebi o erro:
tensorflow_gpu-0.12.0rc0-cp35-cp35m-win_amd64.whl is not a supported wheel on this platform.
não é uma roda linux e eu percebi um pouco em breve.

Situação atual em um Ubuntu 16.04.
I tensorflow/core/common_runtime/gpu/gpu_device.cc:948] Ignoring visible gpu device (device: 0, name: GeForce GTX 590, pci bus id: 0000:03:00.0) with Cuda compute capability 2.0. The minimum required Cuda capability is 3.0. I tensorflow/core/common_runtime/gpu/gpu_device.cc:948] Ignoring visible gpu device (device: 1, name: GeForce GTX 590, pci bus id: 0000:04:00.0) with Cuda compute capability 2.0. The minimum required Cuda capability is 3.0.

@batuhandayioglugil muitos de nossos kernels de GPU dependem da funcionalidade que está disponível apenas na versão 3.0 e superior, então, infelizmente, você precisará de uma GPU mais recente. Você também pode tentar um dos serviços de nuvem.

@vrv cheguei a este ponto depois de passar bastante tempo com esses problemas e comprar uma nova fonte de alimentação, por isso me custou muito. Para evitar mais perda de tempo, quero fazer uma pergunta: existem pelo menos 15 bibliotecas de deep learning que ouvi. Cuda e cuDNN foram necessários para o tensorflow. Esta situação (capacidade de computação) é especial para a biblioteca cuda? Posso ter outras chances? se não, vou desistir de saber e passar a trabalhar com CPU (Perdoe minha ignorância)

Acho que será mais problemático do que vale a pena tentar fazer com que sua placa 2.0 funcione - é possível que sua CPU existente seja tão rápida ou mais rápida que sua GPU específica e muito menos problemas para começar. Eu não sei o que outras bibliotecas exigem, infelizmente.

já é compatível com GPU computação 3.0?

sim.

@martinwicke obrigado pela resposta rápida. eu ainda tenho que construí-lo a partir da fonte, ou apenas pip instalá-lo diretamente? Estou no Arch linux e luto para construí-lo a partir da fonte, dando erro com o compilador c.

Eu acho que deve funcionar a partir de binário.

Eu tenho o mesmo problema: "Ignorando dispositivo gpu (dispositivo: 0, nome: GeForce GT 635M, pci bus id) com capacidade de computação Cuda 2.1. A capacidade Cuda mínima necessária é 3.0." . @smtabatabaie @martinwicke @alphajatin. ajuda !!!!

A capacidade de computação 2.1 é muito baixa para executar o TensorFlow. Você precisará de uma placa gráfica mais recente (ou mais poderosa) para executar o TensorFlow em uma GPU.

O URL de resposta à pergunta é inválido. Você pode atualizá-lo?

Para pacotes pip noturnos, a maneira recomendada de instalar é usar o comando pip install tf-nightly .
ci.tensorflow.org está obsoleto.

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