[Atualização 1] Como criar e instalar a GPU / CPU TensorFlow para Windows a partir do código-fonte usando bazel e Python 3.6

Esta é uma atualização para a minha história anterior. O que há de novo aqui:

  • TensorFlow v1.11
  • CUDA v10.0
  • cuDNN v7.3

Há um guia no site oficial. Não é muito abrangente, mas útil às vezes.

Sumário

  1. Instale o Git para Windows
  2. Instale o Bazel
  3. Instale o MSYS2 x64 e as ferramentas de linha de comando
  4. Instale as Ferramentas de Compilação do Visual Studio 2017, incluindo as Ferramentas de Compilação do Visual Studio 2015
  5. Instale o Python 3.6 de 64 bits
  6. Instale o NVIDIA CUDA 10.0 e o cuDNN 7.3 (para aceleração da GPU)
  7. Configurar ambiente de construção
  8. Clone o código-fonte do TensorFlow v1.11 e aplique o patch obrigatório
  9. Configurar parâmetros de construção
  10. Crie o TensorFlow a partir de fontes
  11. Criar arquivo de roda TensorFlow para Python 3.6
  12. Instale o arquivo de roda TensorFlow para Python 3.6 e verifique o resultado

Etapa 1: instalar o Git para Windows

Baixe e instale o Git para Windows. Eu tomo aqui. Verifique se o caminho para o git.exe foi adicionado à variável de ambiente% PATH%. Eu instalo o Git no diretório

C: \ Bin \ Git

pasta para este tutorial.

Etapa 2: Instalar o MSYS2 x64 e as ferramentas de linha de comando

Baixe e instale a distribuição de 64 bits aqui. O Bazel usa grep, patch, descompacta outras portas do Unix-tools para criar fontes. Você pode tentar encontrar binários autônomos para cada um deles, mas eu prefiro usar o pacote MSYS2. Eu instalo no

C: \ Bin \ msys64

pasta para este tutorial. Você precisa adicionar uma pasta com ferramentas à variável de ambiente% PATH%. É "C: \ Bin \ msys64 \ usr \ bin" no meu caso.

Inicie o atalho “MSYS2 MinGW 64 bits” no menu Iniciar. Execute o seguinte comando para atualizar (reinicie o "MSYS2 MinGW 64 bits", se solicitado):

pacman -Syu

Então corra:

pacman -Su

As ferramentas de instalação são necessárias para a construção:

pacman -S patch descompactar

Feche o shell "MSYS2 MinGW 64 bits" pelo comando "exit". Não precisamos mais disso.

Etapa 3: Instale as Ferramentas de Compilação do Visual Studio 2017, incluindo as Ferramentas de Compilação do Visual Studio 2015

Temos que instalar o "conjunto de ferramentas VC ++ 2015.3 v14.00 (v140) para desktop" do Visual Studio 2017 Build Tools para criar o TensorFlow v1.11:

Etapa 4: instalar o Bazel

Faça o download da última Basiléia aqui. Procure o arquivo bazel- -windows-x86_64.exe. Eu testei este tutorial com o bazel 0.17.2. Renomeie o binário para bazel.exe e mova-o para um diretório em seu% PATH%, para que você possa executar o Bazel digitando bazel em qualquer diretório. Veja detalhes da instalação do Bazel para Windows x64 em caso de problemas.

Adicione a variável de ambiente global BAZEL_SH para o local do bash. Meu caminho é

C: \ Bin \ msys64 \ usr \ bin \ bash.exe

Adicione a variável de ambiente global BAZEL_VC para o local da cadeia de ferramentas "VC ++ 2015.3 v14.00 (v140) para desktop":

C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 14.0 \ VC

Etapa 5: Instalar o Python 3.6 de 64 bits

O TensorFlow não suporta o Python 3.7, portanto você deve instalar a versão 3.6.
Parece que o TensorFlow v1.11 não está mais suportando o Anaconda / Miniconda para compilação - recebo um erro estranho. É por isso que eu uso o ambiente virtual Python para compilar.

O Python 3.6 está disponível para download aqui. Instale-o e adicione o local ao python.exe na variável% PATH%.

Etapa 6: Instale o NVIDIA CUDA 10.0 e o cuDNN 7.3 (para aceleração da GPU)

Esta seção é real se você tiver uma placa gráfica NVIDIA compatível com CUDA. Caso contrário, pule esta seção.
Consulte a instalação passo a passo do CUDA aqui, se precisar de ajuda. Copio e colo esse guia, mas corto alguns detalhes.

Acesse https://developer.nvidia.com/cuda-downloads e baixe o CUDA 10.0 Installer for Windows [sua versão]. Para mim, a versão é o Windows 10.

Instale-o no local padrão com as configurações padrão, mas desmarque a opção de integração do VisualStudio. Ele atualizará o driver da GPU, se necessário, e será reiniciado.

Vá para executar (Win + R) digite cmd

O comando a seguir verificará a versão do nvcc e garantirá que ele esteja definido na variável de ambiente do caminho.

nvcc --version

Próximo, vá para https://developer.nvidia.com/cudnn (é necessário ser membro).

Após o login, faça o download do seguinte:

Biblioteca cuDNN v7.3.1 para Windows [sua versão] para mim Windows 10. Vá para a pasta baixada e extraia o arquivo zip.

Entre na pasta extraída e copie todos os arquivos e pastas da pasta cuda (por exemplo, bin, include, lib) e cole em “C: \ Arquivos de Programas \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0”.

A etapa final aqui é adicionar "C: \ Arquivos de programas \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64" à variável de ambiente% PATH%.

Etapa 7: configurar o ambiente de construção

Inicie o shell do VC ++ 2015 para x64 (atalho “VS2015 x64 Native Tools Command Prompt”) no menu Iniciar.

Em seguida, você deve criar, ativar e configurar o ambiente Python. Execute os comandos do shell “VS2015 x64 Native Tools Command Prompt” abaixo (caminhos corretos de acordo com sua localização).

instalação do pip3 -U virtualenv
virtualenv --system-site-packages C: \ Usuários \ amsokol \ tensorflow-v1.11
C: \ Usuários \ amsokol \ tensorflow-v1.11 \ Scripts \ activar.bat

Seu shell deve ficar assim após a aplicação dos comandos:

Instale os pacotes obrigatórios do Python:

pip3 instalar seis rodas numpy
pip3 install keras_applications == 1.0.5 --no-deps
pip3 install keras_preprocessing == 1.0.3 --no-deps

Execute a "lista pip3" para garantir que os pacotes obrigatórios estejam instalados:

É tudo por agora. Não feche a casca.

Etapa 8: Clone o código-fonte do TensorFlow e aplique o patch obrigatório

Primeiro, você precisa escolher a pasta onde clonar o código-fonte do TensorFlow. É "C: \ Users \ amsokol \ Development \ tensorflow-build" no meu caso. De volta ao shell e execute:

cd C: \ Users \ amsokol \ Development \ tensorflow-build

Código fonte do clone:

git clone https://github.com/tensorflow/tensorflow

Checkout mais recente da versão 1.11:

tensorflow de cd
git checkout v1.11.0

Agora nós temos fontes.

Há um erro na biblioteca de terceiros autônoma. Temos que corrigi-lo antes da compilação.
  • Faça o download do patch aqui e salve com o nome de arquivo eigen_half.patch na pasta third_party
  • Inclua patch_file = clean_dep (“// terceira_partia: eigen_half.patch”), linha na seção eigen_archive no arquivo tensorflow / workspace.bzl.

O resultado no arquivo tensorflow / workspace.bzl deve ser assim:

...
tf_http_archive (
  name = "eigen_archive",
  urls = [
"https://mirror.bazel.build/bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz",
    "https://bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz",
   ],
sha256 = "d956415d784fa4e42b6a2a45c32556d6aec9d0a3d8ef48baee2522ab762556a9",
  strip_prefix = "eigen-eigen-fd6845384b86",
  build_file = clean_dep ("// terceira_parte: eigen.BUILD"),
  patch_file = clean_dep ("// terceira_parte: eigen_half.patch"),
)
...

Feito.

Etapa 9: configurar parâmetros de construção

Verifique se estamos na pasta raiz do código-fonte:

cd C: \ Usuários \ amsokol \ Desenvolvimento \ tensorflow-build \ tensorflow

Execute o configurador:

python ./configure.py

Primeiro, ele pergunta a localização do Python. Pressione Enter para deixar o valor padrão:

...
Você tem o bazel 0.17.2 instalado.
Por favor, especifique a localização do python. [O padrão é C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:

Em seguida, pergunta a localização dos caminhos da biblioteca Python. Pressione Enter para deixar o valor padrão:

Traceback (última chamada mais recente):
  Arquivo "", linha 1, em 
AttributeError: o módulo 'site' não tem atributo 'getsitepackages'
Encontrados caminhos possíveis da biblioteca Python:
  C: \ Usuários \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages
Insira o caminho da biblioteca Python desejada para usar. O padrão é [C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages]

Em seguida, ele pergunta sobre o suporte do nGraph. Nós não precisamos disso. Pressione "n":

Deseja criar o TensorFlow com suporte para nGraph? [s / N]: n
Nenhum suporte nGraph será ativado para o TensorFlow.

Em seguida, ele pergunta sobre o suporte CUDA:

Deseja criar o TensorFlow com suporte para CUDA? [s / N]:

Responda "y" se você estiver usando a aceleração da GPU. Caso contrário, pressione "n".

No caso de Sim para o configurador CUDA, faça perguntas adicionais:
Responda 10.0 como versão do CUDA SDK:
Especifique a versão do CUDA SDK que você deseja usar. [Deixe em branco para o padrão CUDA 9.0]: 10.0
Pressione Enter para deixar o local padrão do kit de ferramentas CUDA:
Especifique o local em que o kit de ferramentas CUDA 10.0 está instalado. Consulte README.md para mais detalhes. [O padrão é C: / Arquivos de Programas / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Responda 7.3.1 como versão cuDNN:
Especifique a versão cuDNN que você deseja usar. [Deixe em branco para o padrão cuDNN 7.0]: 7.3.1
Pressione Enter para deixar o local padrão da biblioteca cuDNN:
Especifique o local em que a biblioteca cuDNN 7 está instalada. Consulte README.md para mais detalhes. [O padrão é C: / Arquivos de Programas / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
A próxima pergunta é sobre os recursos de computação CUDA para construir. Você pode encontrar o recurso de computação do seu dispositivo em: https://developer.nvidia.com/cuda-gpus. Eu tenho o GTX 1070 e é por isso que respondo 6.1:
Especifique uma lista de recursos de computação Cuda separados por vírgula com os quais deseja construir.
Você pode encontrar a capacidade de computação do seu dispositivo em: https://developer.nvidia.com/cuda-gpus.
Observe que cada recurso adicional de computação aumenta significativamente o tempo de compilação e o tamanho binário. [O padrão é: 3.5,7.0]: 6.1

A próxima pergunta é definir sinalizadores de otimização. Eu tenho CPU Intel de 6a geração e é por isso que respondo / arquivo: AVX2:

Especifique sinalizadores de otimização para usar durante a compilação quando a opção bazel "--config = opt" for especificada [O padrão é / arch: AVX]: / arch: AVX2

A última pergunta é sobre eigen. Responda "y". Reduz drasticamente o tempo de compilação.

Deseja substituir eigen inline forte para alguma compilação de C ++ para reduzir o tempo de compilação? [S / n]: y
Eigen inline forte substituído.

Configuração concluída. Vamos construir.

Etapa 10: criar o TensorFlow a partir de fontes

Verifique se estamos na pasta raiz do código-fonte:

cd C: \ Usuários \ amsokol \ Desenvolvimento \ tensorflow-build \ tensorflow
A construção leva muito tempo. Eu recomendo fortemente desativar o software antivírus, incluindo a proteção em tempo real do Windows Defender Antivirus.

Execute a compilação:

bazel build --config = opt // tensorflow / tools / pip_package: build_pip_package

Sente-se e relaxe por algum tempo.

Etapa 11: Crie o arquivo de roda TensorFlow para Python 3.6

Execute o comando para criar o arquivo de roda Python:

mkdir .. \ out
bazel-bin \ tensorflow \ tools \ pacote_de_pacote \ pacote_pip_pacote .. \ out

Falha:

Existe um problema conhecido. Veja a pasta "bazel-bin \ tensorflow \ tools \ pip_package". Ele contém o arquivo "simple_console_for_windows.zip" de tamanho zero. Este é o problema. O Bazel contém o utilitário zip de 32 bits que falha no arquivo 2GB maior. Consulte os links para obter detalhes e solução alternativa:

  • https://github.com/tensorflow/tensorflow/issues/20332
  • https://stackoverflow.com/questions/52394305/creating-pip-package-for-tensorflow-with-gpu-support-results-in-0-byte-simple-co

Existem etapas para corrigir o problema:

cd. \ bazel-bin \ tensorflow \ tools \ pip_package

Abra o arquivo "simple_console_for_windows.zip-0.params" e remova a linha que contém "mnist.zip":

...
runfiles / org_tensorflow / tensorflow / contrib / eager / python / examples / gan / mnist.zip = bazel-out / x64_windows-opt / bin / tensorflow / contrib / eager / python / examples / gan / mnist.zip
...
Isso me ajuda. Caso isso não ajude você a remover outras linhas com arquivos zip (veja detalhes aqui). O objetivo desta atividade é tornar o comprimento de "simple_console_for_windows.zip" com menos de 2 GB.

Exclua o arquivo “simple_console_for_windows.zip” vazio.

Em seguida, olhe para a sua pasta pessoal. Você precisa ver a pasta com o nome "_bazel_ ". É "_bazel_amsokol" no meu caso. Ele contém uma pasta com arquivos de compilação. É "lx6zoh4k" no meu caso. De volta ao shell de uma execução (corrija de acordo com os nomes das pastas):

CD C: \ Users \ amsokol \ _bazel_amsokol \ lx6zoh4k \ execroot \ org_tensorflow

Crie o arquivo “simple_console_for_windows.zip” manualmente:

external \ bazel_tools \ tools \ zip \ zipper \ zipper.exe vcC bazel-out / x64_windows-opt / bin / tensorflow / tools / pip_package / simple_console_for_windows.zip @ bazel-out / x64_windows-opt / bin / tensorflow / tools / pip_package / simple_console_for_windows.zip-0.params

Execute o comando para criar o arquivo de roda Python:

cd C: \ Usuários \ amsokol \ Desenvolvimento \ tensorflow-build \ tensorflow
bazel-bin \ tensorflow \ tools \ pacote_de_pacote \ pacote_pip_pacote .. \ out

Ele cria o arquivo tensorflow-1.11.0-cp36-cp36m-win_amd64.whl na pasta ".. \ out".

Etapa 12: instale o arquivo da roda TensorFlow para Python 3.6 e verifique o resultado

Execute o comando para instalar o arquivo de roda Python:

instalação do pip3 .. \ out \ tensorflow-1.11.0-cp36-cp36m-win_amd64.whl

Deixe o diretório "tensorflow" (os erros ocorrem algumas vezes quando executo scripts Python dentro da pasta de código-fonte Tensoflow - não sei o motivo):

cd ..

Para fazer o download do script de verificação aqui ou copie e cole e execute:

importar tensorflow como tf
hello = tf.constant ('Olá, TensorFlow!')
session = tf.Session ()
print (session.run (olá))

Se o sistema emitir o seguinte, tudo estará bem:

Olá, TensorFlow!

Minha saída:

Você instalou com sucesso o TensorFlow na máquina Windows.

Deixe-me saber nos comentários abaixo se funcionou para você. Ou se você tiver algum erro. Obrigado!