[Actualización 2] Cómo construir e instalar la GPU / CPU TensorFlow para Windows desde el código fuente usando bazel y Python 3.6

Esta es una actualización para mi historia anterior. Qué hay de nuevo aquí:

  • TensorFlow v1.12
  • CUDA v10.0
  • cuDNN v7.4
  • bazel 0.19.0
  • Soporte Apache Ignite

Hay una guía en el sitio oficial. No es muy completo pero es muy útil.

Resumen

  1. Instalar Git para Windows
  2. Instalar Bazel
  3. Instale MSYS2 x64 y herramientas de línea de comando
  4. Instale las herramientas de compilación de Visual Studio 2017, incluidas las herramientas de compilación de Visual Studio 2015
  5. Instalar Python 3.6 de 64 bits
  6. Instale NVIDIA CUDA 10.0 y cuDNN 7.4 (para aceleración de GPU)
  7. Configurar entorno de compilación
  8. Clone el código fuente de TensorFlow v1.12 y aplique el parche obligatorio
  9. Configurar parámetros de compilación
  10. Construir TensorFlow desde las fuentes
  11. Crear archivo de rueda TensorFlow para Python 3.6
  12. Instale el archivo de rueda TensorFlow para Python 3.6 y verifique el resultado

Paso 1: instalar Git para Windows

Descargue e instale Git para Windows. Lo llevo aquí. Asegúrese de que la ruta a git.exe se agregue a la variable de entorno% PATH%. Instalo Git en el

C: \ Bin \ Git

carpeta para este tutorial.

Paso 2: Instale MSYS2 x64 y herramientas de línea de comando

Descargue e instale la distribución de 64 bits aquí. Bazel usa grep, patch, descomprimir y otros puertos de herramientas Unix para construir fuentes. Puede intentar encontrar binarios independientes para cada uno de ellos, pero prefiero usar el paquete MSYS2. Lo instalo en el

C: \ Bin \ msys64

carpeta para este tutorial. Debe agregar una carpeta con herramientas a la variable de entorno% PATH%. Es "C: \ Bin \ msys64 \ usr \ bin" en mi caso.

Inicie el acceso directo "MSYS2 MinGW de 64 bits" desde el menú Inicio. Ejecute el siguiente comando para actualizar (reinicie "MSYS2 MinGW 64-bit" si se le solicita):

pacman -Syu

Entonces corre:

pacman -Su

Las herramientas de instalación son necesarias para construir:

pacman -S parche descomprimir

Cierre el shell "MSYS2 MinGW de 64 bits" con el comando "salir". No lo necesitamos más.

Paso 3: Instale las herramientas de compilación de Visual Studio 2017, incluidas las herramientas de compilación de Visual Studio 2015

Tenemos que instalar el "conjunto de herramientas VC ++ 2015.3 v14.00 (v140) para escritorio" desde Visual Studio 2017 Build Tools para compilar TensorFlow v1.11:

Paso 4: instalar Bazel

Descargue la última Basilea aquí. Busque el archivo bazel- -windows-x86_64.exe. He probado este tutorial con bazel 0.19.0. Cambie el nombre del binario a bazel.exe y muévalo a un directorio en su% PATH%, para que pueda ejecutar Bazel escribiendo bazel en cualquier directorio. Consulte los detalles de la instalación de Bazel para Windows x64 en caso de problemas.

Agregue la variable de entorno global BAZEL_SH para la ubicación bash. Mi camino es

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

Agregue la variable de entorno global BAZEL_VC para la ubicación de la cadena de herramientas “VC ++ 2015.3 v14.00 (v140) toolset para escritorio”:

C: \ Archivos de programa (x86) \ Microsoft Visual Studio 14.0 \ VC

Paso 5: Instale Python 3.6 de 64 bits

TensorFlow no es compatible con Python 3.7, por lo que debe instalar la versión 3.6.
Anaconda / Minicondais no respalda oficialmente la construcción desde fuentes. Por eso uso el entorno virtual Python para compilar.

Python 3.6 está disponible para descargar aquí. Instálelo y agregue la ubicación a python.exe a la variable% PATH%.

Paso 6: Instale NVIDIA CUDA 10.0 y cuDNN 7.4 (para aceleración de GPU)

Esta sección es real si tiene una tarjeta gráfica NVIDIA que admita CUDA. De lo contrario, omita esta sección.
Vea la instalación paso a paso de CUDA aquí si necesita ayuda. Copio y pego esa guía pero corto algunos detalles.

Vaya a https://developer.nvidia.com/cuda-downloads y descargue el instalador de CUDA 10.0 para Windows [su versión]. Para mí, la versión es Windows 10.

Instálelo en la ubicación predeterminada con la configuración predeterminada, pero desmarque la opción de integración de VisualStudio. Actualizará su controlador de GPU si es necesario y se reiniciará.

Ir a ejecutar (Win + R) tipo cmd

El siguiente comando verificará la versión de nvcc y se asegurará de que esté configurado en la variable de entorno de ruta.

nvcc --version

A continuación, vaya a https://developer.nvidia.com/cudnn (se requiere membresía).

Después de iniciar sesión, descargue lo siguiente:

cuDNN v7.4.1 Biblioteca para Windows [su versión] para mí Windows 10. Vaya a la carpeta descargada y extraiga el archivo zip.

Vaya dentro de la carpeta extraída y copie todos los archivos y carpetas de la carpeta cuda (por ejemplo, bin, include, lib) y péguelo en "C: \ Archivos de programa \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0".

El paso final aquí es agregar "C: \ Archivos de programa \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64" a la variable de entorno% PATH%.

Paso 7: configurar el entorno de compilación

Inicie el shell VC ++ 2015 para x64 (acceso directo "Símbolo del sistema de herramientas nativas VS2015 x64") desde el menú Inicio.

A continuación, debe crear, activar y configurar el entorno Python. Ejecute dentro de los comandos de shell "Símbolo del sistema de herramientas nativas VS2015 x64" a continuación (rutas correctas según sus ubicaciones).

pip3 install -U virtualenv
virtualenv --system-site-packages C: \ Users \ amsokol \ tensorflow-v1.12
C: \ Users \ amsokol \ tensorflow-v1.12 \ Scripts \ generate.bat

Su shell debería verse así después de aplicar los comandos:

Instalar paquetes obligatorios de Python:

pip3 instala seis ruedas numpy
pip3 install keras_applications == 1.0.5 --no-deps
pip3 install keras_preprocessing == 1.0.3 --no-deps

Ejecute "pip3 list" para asegurarse de que los paquetes obligatorios estén instalados:

Eso es todo por ahora. No cierre la carcasa.

Paso 8: Clone el código fuente de TensorFlow y aplique el parche obligatorio

En primer lugar, debe elegir la carpeta donde clonar el código fuente de TensorFlow. Es "C: \ Users \ amsokol \ Development \ tensorflow-build" en mi caso. Volver a shell y ejecutar:

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

Código fuente de clonación:

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

Comprobación más reciente de la versión 1.12:

cd tensorflow
git checkout v1.12.0

Ahora tenemos fuentes.

Hay un ERROR en la biblioteca de terceros eigen. Tenemos que arreglarlo antes de compilar.
  • Descargue el parche aquí y guárdelo con el nombre de archivo eigen_half.patch en la carpeta third_party
  • Agregue patch_file = clean_dep (“// third_party: eigen_half.patch”), línea a la sección eigen_archive al archivo tensorflow / workspace.bzl.

El resultado en el archivo tensorflow / workspace.bzl debería ser así:

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

Hecho.

Paso 9: configurar los parámetros de compilación

Asegúrese de que estamos en la carpeta raíz del código fuente:

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

Ejecutar configurador:

python ./configure.py

Primero pregunta la ubicación de Python. Presione Entrar para dejar el valor predeterminado:

...
Tienes instalado Bazel 0.19.0.
Por favor, especifique la ubicación de python. [El valor predeterminado es C: \ Users \ amsokol \ tensorflow-v1.12 \ Scripts \ python.exe]:

Luego se pregunta la ubicación de las rutas de la biblioteca Python. Presione Entrar para dejar el valor predeterminado:

Rastreo (llamadas recientes más última):
  Archivo "", línea 1, en 
AttributeError: el módulo 'sitio' no tiene el atributo 'getsitepackages'
Se encontraron posibles rutas de la biblioteca de Python:
  C: \ Users \ amsokol \ tensorflow-v1.12 \ Lib \ site-packages
Ingrese la ruta de la biblioteca Python deseada para usar. El valor predeterminado es [C: \ Users \ amsokol \ tensorflow-v1.12 \ Lib \ site-packages]

Luego pregunta sobre el soporte de Apache Ignite. Presione "y" si lo necesita:

¿Desea construir TensorFlow con el soporte Apache Ignite? [S / n]: y

Luego pregunta sobre el soporte de XLA JIT. Presione "n":

¿Desea construir TensorFlow con soporte XLA JIT? [y / N]: n
Activar el soporte XLA JIT genera el error de compilación "La compilación C ++ de la regla‘ // tensorflow / compiler / tf2xla: cpu_function_runtime "ha fallado". Aún no he encontrado la solución.

Luego pregunta sobre el soporte ROCm. No lo necesitamos si elegimos el soporte de CUDA. Presione "n":

¿Desea construir TensorFlow con soporte ROCm? [y / N]: n

Luego pregunta sobre el soporte de CUDA:

¿Desea construir TensorFlow con soporte CUDA? [s / N]:

Responda "y" si va a utilizar la aceleración de GPU. De lo contrario, presione "n".

En caso de que Sí para el configurador CUDA haga preguntas adicionales:
Responda 10.0 como versión del SDK de CUDA:
Especifique la versión del SDK de CUDA que desea usar. [Dejar en blanco por defecto a CUDA 9.0]: 10.0
Presione Entrar para dejar la ubicación predeterminada del kit de herramientas CUDA:
Especifique la ubicación donde está instalado el kit de herramientas CUDA 10.0. Consulte README.md para más detalles. [El valor predeterminado es C: / Archivos de programa / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Presione Entrar para dejar el valor predeterminado en cuDNN 7:
Por favor, especifique la versión de cuDNN que desea usar. [Dejar en blanco por defecto a cuDNN 7]:
Presione Entrar para dejar la ubicación predeterminada de la biblioteca cuDNN:
Especifique la ubicación donde está instalada la biblioteca cuDNN 7. Consulte README.md para más detalles. [El valor predeterminado es C: / Archivos de programa / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
La siguiente pregunta es sobre las capacidades informáticas de CUDA para construir. Puede encontrar la capacidad de cálculo de su dispositivo en: https://developer.nvidia.com/cuda-gpus. Tengo GTX 1070, por eso respondo 6.1:
Especifique una lista de capacidades de cómputo de Cuda separadas por comas con las que desea construir.
Puede encontrar la capacidad de cálculo de su dispositivo en: https://developer.nvidia.com/cuda-gpus.
Tenga en cuenta que cada capacidad de cálculo adicional aumenta significativamente el tiempo de compilación y el tamaño binario. [El valor predeterminado es: 3,5,7.0]: 6.1

La siguiente pregunta es establecer banderas de optimización. Tengo una CPU Intel de 6.a generación, por eso respondo / archivo: AVX2:

Especifique los indicadores de optimización para usar durante la compilación cuando se especifique la opción "--config = opt" de Bazel [El valor predeterminado es / arch: AVX]: / arch: AVX2

La última pregunta es sobre eigen. Responda "y". Reduce drásticamente el tiempo de compilación.

¿Desea anular eigen strong inline para alguna compilación de C ++ para reducir el tiempo de compilación? [S / n]: y
Eigen fuerte en línea anulado.

Configuración completada. Construyamos.

Paso 10: Construya TensorFlow desde las fuentes

Hay un ERROR en bazel 0.19.0. Vea aquí los detalles anteriores. Para solucionarlo, debemos agregar la cadena "import /tensorflow/tools/bazel.rc" en la línea superior de (ocultar archivo) " /tensorflow/.bazelrc". En mi caso, el archivo "C: /Users/amsokol/Development/tensorflow-build/tensorflow/.bazelrc" es:
importar C: /Users/amsokol/Development/tensorflow-build/tensorflow/tools/bazel.rc
importación C: /Users/amsokol/Development/tensorflow-build/tensorflow/.tf_configure.bazelrc

Asegúrese de que estamos en la carpeta raíz del código fuente:

cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
Construir lleva mucho tiempo. Recomiendo desactivar el software antivirus, incluida la protección en tiempo real de Windows Defender Antivirus.

Ejecutar compilación:

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

Siéntate y relájate por un tiempo.

Paso 11: Cree el archivo de rueda TensorFlow para Python 3.6

Ejecute el comando para crear el archivo de la rueda de Python:

mkdir .. \ out
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out

Crea el archivo tensorflow-1.12.0-cp36-cp36m-win_amd64.whl en la carpeta ".. \ out".

Paso 12: Instale el archivo de rueda TensorFlow para Python 3.6 y verifique el resultado

Ejecute el comando para instalar el archivo de la rueda de Python:

pip3 install .. \ out \ tensorflow-1.12.0-cp36-cp36m-win_amd64.whl

Deje el directorio "tensorflow" (los errores ocurren a veces cuando ejecuto scripts de Python dentro de la carpeta de código fuente de Tensoflow; no sé el motivo):

discos compactos ..

Para hacer chequear el script de descarga aquí o copiar-pegar y ejecutar:

importar tensorflow como tf
hola = tf.constant ('¡Hola, TensorFlow!')
sesión = tf.Session ()
print (session.run (hola))

Si el sistema genera lo siguiente, entonces todo está bien:

Hola, TensorFlow!

Mi salida:

Puede ejecutar este script de Python para garantizar que la versión de TensorFlow instalada también:

# TensorFlow y tf.keras
importar tensorflow como tf
desde tensorflow import keras
print (tf .__ version__)
print (keras .__ version__)

Tienes que obtener el siguiente resultado:

1.12.0
2.1.6-tf

Ahora ha instalado correctamente TensorFlow 1.12 en la máquina con Windows.

Hazme saber en los comentarios a continuación si te funcionó. O si tienes algún error. ¡Gracias!