Attend the Women in ML Symposium on December 7 Register now

Construir desde la fuente

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Cree un paquete pip de TensorFlow desde la fuente e instálelo en Ubuntu Linux y macOS. Si bien las instrucciones pueden funcionar para otros sistemas, solo se prueban y son compatibles con Ubuntu y macOS.

Configuración para Linux y macOS

Instale las siguientes herramientas de compilación para configurar su entorno de desarrollo.

Instale Python y las dependencias del paquete TensorFlow

ubuntu

sudo apt install python3-dev python3-pip

Mac OS

Requiere Xcode 9.2 o posterior.

Instale usando el administrador de paquetes Homebrew :

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
export PATH="/usr/local/opt/python/libexec/bin:$PATH"
# if you are on macOS 10.12 (Sierra) use export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
brew install python

Instale las dependencias del paquete pip de TensorFlow (si usa un entorno virtual, omita el argumento --user ):

pip install -U --user pip numpy wheel packaging requests opt_einsum
pip install -U --user keras_preprocessing --no-deps

Instalar Bazel

Para compilar TensorFlow, deberá instalar Bazel. Bazelisk es una manera fácil de instalar Bazel y descarga automáticamente la versión correcta de Bazel para TensorFlow. Para facilitar el uso, agregue Bazelisk como el ejecutable de bazel en su PATH .

Si Bazelisk no está disponible, puede instalar Bazel manualmente. Asegúrese de instalar una versión compatible de Bazel: cualquier versión entre _TF_MIN_BAZEL_VERSION y _TF_MAX_BAZEL_VERSION como se especifica en tensorflow/configure.py .

Instalar compatibilidad con GPU (opcional, solo Linux)

No hay soporte de GPU para macOS.

Lea la guía de soporte de GPU para instalar los controladores y el software adicional necesarios para ejecutar TensorFlow en una GPU.

Descarga el código fuente de TensorFlow

Usa Git para clonar el repositorio de TensorFlow :

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

El repositorio tiene como valor predeterminado la rama de desarrollo master . También puede consultar una rama de lanzamiento para compilar:

git checkout branch_name  # r2.2, r2.3, etc.

Opcional: configurar la compilación

Las compilaciones de TensorFlow están configuradas por el archivo .bazelrc en el directorio raíz del repositorio. Los scripts ./configure o ./configure.py se pueden usar para ajustar la configuración común.

Si necesita cambiar la configuración, ejecute el script ./configure desde el directorio raíz del repositorio. Esta secuencia de comandos le solicitará la ubicación de las dependencias de TensorFlow y le solicitará opciones de configuración de compilación adicionales (indicadores del compilador, por ejemplo). Consulte la sección Sesión de muestra para obtener más información.

./configure

También hay una versión de Python de este script, ./configure.py . Si usa un entorno virtual, python configure.py prioriza las rutas dentro del entorno, mientras que ./configure prioriza las rutas fuera del entorno. En ambos casos puede cambiar el valor predeterminado.

sesión de muestra

A continuación, se muestra una ejecución de muestra del script ./configure (su sesión puede diferir):

Opciones de configuración

Soporte de GPU

Para compatibilidad con GPU , establezca cuda=Y durante la configuración y especifique las versiones de CUDA y cuDNN. Si su sistema tiene varias versiones de CUDA o cuDNN instaladas, establezca explícitamente la versión en lugar de confiar en la predeterminada. ./configure crea enlaces simbólicos a las bibliotecas CUDA de su sistema, por lo que si actualiza las rutas de la biblioteca CUDA, este paso de configuración debe ejecutarse nuevamente antes de compilar.

Optimizaciones

Para los indicadores de optimización de compilación, el valor predeterminado ( -march=native ) optimiza el código generado para el tipo de CPU de su máquina. Sin embargo, si compila TensorFlow para un tipo de CPU diferente, considere un indicador de optimización más específico. Consulte el manual de GCC para ver ejemplos.

Configuraciones preconfiguradas

Hay algunas configuraciones de compilación preconfiguradas disponibles que se pueden agregar al comando de bazel build , por ejemplo:

  • --config=dbg —Compila con información de depuración. Ver CONTRIBUCIÓN.md para más detalles.
  • --config=mkl con Intel® MKL-DNN .
  • --config=monolithic configuración para una compilación monolítica mayoritariamente estática.

Compile e instale el paquete pip

El paquete pip se construye en dos pasos. Un comando de compilación de bazel build crea un programa de "construcción de paquetes". Luego ejecuta el generador de paquetes para crear el paquete.

Cree el generador de paquetes

Use bazel build para crear el generador de paquetes TensorFlow 2.x con soporte solo para CPU :

bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package

Soporte de GPU

Para crear un generador de paquetes de TensorFlow compatible con GPU:

bazel build --config=cuda [--config=option] //tensorflow/tools/pip_package:build_pip_package

Opciones de construcción de Bazel

Consulte la referencia de la línea de comandos de Bazel para conocer las opciones de compilación .

Construir TensorFlow desde la fuente puede usar mucha RAM. Si su sistema tiene limitaciones de memoria, limite el uso de RAM de Bazel con: --local_ram_resources=2048 .

Los paquetes oficiales de TensorFlow están construidos con una cadena de herramientas GCC que cumple con el estándar de paquetes manylinux2010.

Para GCC 5 y versiones posteriores, la compatibilidad con la ABI anterior se puede generar mediante: --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" . La compatibilidad con ABI garantiza que las operaciones personalizadas creadas con el paquete oficial de TensorFlow continúen funcionando con el paquete integrado de GCC 5.

Construya el paquete

El bazel build crea un ejecutable llamado build_pip_package : este es el programa que compila el paquete pip . Ejecute el ejecutable como se muestra a continuación para crear un paquete .whl en el directorio /tmp/tensorflow_pkg .

Para construir desde una rama de lanzamiento:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Para compilar desde maestro, use --nightly_flag para obtener las dependencias correctas:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package --nightly_flag /tmp/tensorflow_pkg

Aunque es posible crear configuraciones CUDA y no CUDA en el mismo árbol de origen, se recomienda ejecutar bazel clean al cambiar entre estas dos configuraciones en el mismo árbol de origen.

Instalar el paquete

El nombre del archivo .whl generado depende de la versión de TensorFlow y de su plataforma. Use pip install para instalar el paquete, por ejemplo:

pip install /tmp/tensorflow_pkg/tensorflow-version-tags.whl

Compilaciones de Docker Linux

Las imágenes de desarrollo de Docker de TensorFlow son una forma sencilla de configurar un entorno para compilar paquetes de Linux desde el origen. Estas imágenes ya contienen el código fuente y las dependencias necesarias para compilar TensorFlow. Vaya a la guía de TensorFlow Docker para obtener instrucciones de instalación y la lista de etiquetas de imagen disponibles .

solo CPU

El siguiente ejemplo usa la imagen :devel para crear un paquete solo para CPU a partir del último código fuente de TensorFlow. Consulta la guía de Docker para conocer las etiquetas de desarrollo de -devel disponibles.

Descargue la imagen de desarrollo más reciente e inicie un contenedor Docker que usará para crear el paquete pip :

docker pull tensorflow/tensorflow:devel
docker run -it -w /tensorflow_src -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    tensorflow/tensorflow:devel bash

git pull  # within the container, download the latest source code

El comando de docker run anterior inicia un shell en el directorio /tensorflow_src , la raíz del árbol de fuentes. Monta el directorio actual del host en el directorio /mnt del contenedor y pasa la información del usuario del host al contenedor a través de una variable ambiental (que se usa para establecer permisos; Docker puede complicarlo).

Como alternativa, para crear una copia de host de TensorFlow dentro de un contenedor, monte el árbol de fuentes de host en el directorio /tensorflow del contenedor:

docker run -it -w /tensorflow -v /path/to/tensorflow:/tensorflow -v $PWD:/mnt \
    -e HOST_PERMS="\\((id -u):\\)(id -g)" tensorflow/tensorflow:devel bash

Con el árbol de fuentes configurado, crea el paquete de TensorFlow dentro del entorno virtual del contenedor:

  1. Opcional: configure la compilación: esto solicita al usuario que responda preguntas de configuración de la compilación.
  2. Cree la herramienta utilizada para crear el paquete pip .
  3. Ejecute la herramienta para crear el paquete pip .
  4. Ajuste los permisos de propiedad del archivo para fuera del contenedor.
./configure  # if necessary

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

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt  # create package

chown $HOST_PERMS /mnt/tensorflow-version-tags.whl

Instale y verifique el paquete dentro del contenedor:

pip uninstall tensorflow  # remove current version

pip install /mnt/tensorflow-version-tags.whl
cd /tmp  # don't import from source directory
python -c "import tensorflow as tf; print(tf.__version__)"

En su máquina host, el paquete pip de TensorFlow está en el directorio actual (con permisos de usuario host): ./tensorflow- version - tags .whl

Soporte de GPU

Docker es la forma más fácil de crear compatibilidad con GPU para TensorFlow, ya que la máquina host solo requiere el controlador NVIDIA® (no es necesario instalar NVIDIA® CUDA® Toolkit ). Consulte la guía de soporte de GPU y la guía de TensorFlow Docker para configurar nvidia-docker (solo Linux).

El siguiente ejemplo descarga la imagen TensorFlow :devel-gpu y usa nvidia-docker para ejecutar el contenedor habilitado para GPU. Esta imagen de desarrollo está configurada para crear un paquete pip compatible con GPU:

docker pull tensorflow/tensorflow:devel-gpu
docker run --gpus all -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    tensorflow/tensorflow:devel-gpu bash
git pull  # within the container, download the latest source code

Luego, dentro del entorno virtual del contenedor, crea el paquete TensorFlow compatible con GPU:

./configure  # if necessary

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

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt  # create package

chown $HOST_PERMS /mnt/tensorflow-version-tags.whl

Instale y verifique el paquete dentro del contenedor y busque una GPU:

pip uninstall tensorflow  # remove current version

pip install /mnt/tensorflow-version-tags.whl
cd /tmp  # don't import from source directory
python -c "import tensorflow as tf; print(\"Num GPUs Available: \", len(tf.config.list_physical_devices('GPU')))"

Configuraciones de compilación probadas

linux

UPC

Versión Versión de Python Compilador Construir herramientas
tensorflow-2.11.0 3.7-3.10 CGC 9.3.1 bazel 5.0.0
tensorflow-2.10.0 3.7-3.10 CGC 9.3.1 bazel 5.0.0
tensorflow-2.9.0 3.7-3.10 CGC 9.3.1 bazel 5.0.0
tensorflow-2.8.0 3.7-3.10 CGC 7.3.1 bazel 4.2.1
tensorflow-2.7.0 3.7-3.9 CGC 7.3.1 bazel 3.7.2
tensorflow-2.6.0 3.6-3.9 CGC 7.3.1 bazel 3.7.2
tensorflow-2.5.0 3.6-3.9 CGC 7.3.1 bazel 3.7.2
tensorflow-2.4.0 3.6-3.8 CGC 7.3.1 Bazel 3.1.0
tensorflow-2.3.0 3.5-3.8 CGC 7.3.1 Bazel 3.1.0
tensorflow-2.2.0 3.5-3.8 CGC 7.3.1 bazel 2.0.0
tensorflow-2.1.0 2.7, 3.5-3.7 CGC 7.3.1 bazel 0.27.1
tensorflow-2.0.0 2.7, 3.3-3.7 CGC 7.3.1 bazel 0.26.1
tensorflow-1.15.0 2.7, 3.3-3.7 CGC 7.3.1 bazel 0.26.1
tensorflow-1.14.0 2.7, 3.3-3.7 CCG 4.8 bazel 0.24.1
tensorflow-1.13.1 2.7, 3.3-3.7 CCG 4.8 Bazel 0.19.2
tensorflow-1.12.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0
tensorflow-1.11.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0
tensorflow-1.10.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0
tensorflow-1.9.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.11.0
tensorflow-1.8.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.10.0
tensorflow-1.7.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.10.0
tensorflow-1.6.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.9.0
tensorflow-1.5.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.8.0
tensorflow-1.4.0 2.7, 3.3-3.6 CCG 4.8 bazel 0.5.4
tensorflow-1.3.0 2.7, 3.3-3.6 CCG 4.8 bazel 0.4.5
tensorflow-1.2.0 2.7, 3.3-3.6 CCG 4.8 bazel 0.4.5
tensorflow-1.1.0 2.7, 3.3-3.6 CCG 4.8 bazel 0.4.2
tensorflow-1.0.0 2.7, 3.3-3.6 CCG 4.8 bazel 0.4.2

GPU

Versión Versión de Python Compilador Construir herramientas cuDNN CUDA
tensorflow-2.11.0 3.7-3.10 CGC 9.3.1 bazel 5.1.1 8.1 11.2
tensorflow-2.10.0 3.7-3.10 CGC 9.3.1 bazel 5.1.1 8.1 11.2
tensorflow-2.9.0 3.7-3.10 CGC 9.3.1 bazel 5.0.0 8.1 11.2
tensorflow-2.8.0 3.7-3.10 CGC 7.3.1 bazel 4.2.1 8.1 11.2
tensorflow-2.7.0 3.7-3.9 CGC 7.3.1 bazel 3.7.2 8.1 11.2
tensorflow-2.6.0 3.6-3.9 CGC 7.3.1 bazel 3.7.2 8.1 11.2
tensorflow-2.5.0 3.6-3.9 CGC 7.3.1 bazel 3.7.2 8.1 11.2
tensorflow-2.4.0 3.6-3.8 CGC 7.3.1 Bazel 3.1.0 8.0 11.0
tensorflow-2.3.0 3.5-3.8 CGC 7.3.1 Bazel 3.1.0 7.6 10.1
tensorflow-2.2.0 3.5-3.8 CGC 7.3.1 bazel 2.0.0 7.6 10.1
tensorflow-2.1.0 2.7, 3.5-3.7 CGC 7.3.1 bazel 0.27.1 7.6 10.1
tensorflow-2.0.0 2.7, 3.3-3.7 CGC 7.3.1 bazel 0.26.1 7.4 10.0
tensorflow_gpu-1.15.0 2.7, 3.3-3.7 CGC 7.3.1 bazel 0.26.1 7.4 10.0
tensorflow_gpu-1.14.0 2.7, 3.3-3.7 CCG 4.8 bazel 0.24.1 7.4 10.0
tensorflow_gpu-1.13.1 2.7, 3.3-3.7 CCG 4.8 Bazel 0.19.2 7.4 10.0
tensorflow_gpu-1.12.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.11.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.10.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.9.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.11.0 7 9
tensorflow_gpu-1.8.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.10.0 7 9
tensorflow_gpu-1.7.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.9.0 7 9
tensorflow_gpu-1.6.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.9.0 7 9
tensorflow_gpu-1.5.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.8.0 7 9
tensorflow_gpu-1.4.0 2.7, 3.3-3.6 CCG 4.8 bazel 0.5.4 6 8
tensorflow_gpu-1.3.0 2.7, 3.3-3.6 CCG 4.8 bazel 0.4.5 6 8
tensorflow_gpu-1.2.0 2.7, 3.3-3.6 CCG 4.8 bazel 0.4.5 5.1 8
tensorflow_gpu-1.1.0 2.7, 3.3-3.6 CCG 4.8 bazel 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2.7, 3.3-3.6 CCG 4.8 bazel 0.4.2 5.1 8

Mac OS

UPC

Versión Versión de Python Compilador Construir herramientas
tensorflow-2.11.0 3.7-3.10 Sonido de xcode 10.14 bazel 5.1.1
tensorflow-2.10.0 3.7-3.10 Sonido de xcode 10.14 bazel 5.1.1
tensorflow-2.9.0 3.7-3.10 Sonido de xcode 10.14 bazel 5.0.0
tensorflow-2.8.0 3.7-3.10 Sonido de xcode 10.14 bazel 4.2.1
tensorflow-2.7.0 3.7-3.9 Sonido de xcode 10.11 bazel 3.7.2
tensorflow-2.6.0 3.6-3.9 Sonido de xcode 10.11 bazel 3.7.2
tensorflow-2.5.0 3.6-3.9 Sonido de xcode 10.11 bazel 3.7.2
tensorflow-2.4.0 3.6-3.8 Sonido de xcode 10.3 Bazel 3.1.0
tensorflow-2.3.0 3.5-3.8 Sonido de xcode 10.1 Bazel 3.1.0
tensorflow-2.2.0 3.5-3.8 Sonido de xcode 10.1 bazel 2.0.0
tensorflow-2.1.0 2.7, 3.5-3.7 Sonido de xcode 10.1 bazel 0.27.1
tensorflow-2.0.0 2.7, 3.5-3.7 Sonido de xcode 10.1 bazel 0.27.1
tensorflow-2.0.0 2.7, 3.3-3.7 Sonido de xcode 10.1 bazel 0.26.1
tensorflow-1.15.0 2.7, 3.3-3.7 Sonido de xcode 10.1 bazel 0.26.1
tensorflow-1.14.0 2.7, 3.3-3.7 Sonido de xcode bazel 0.24.1
tensorflow-1.13.1 2.7, 3.3-3.7 Sonido de xcode Bazel 0.19.2
tensorflow-1.12.0 2.7, 3.3-3.6 Sonido de xcode Bazel 0.15.0
tensorflow-1.11.0 2.7, 3.3-3.6 Sonido de xcode Bazel 0.15.0
tensorflow-1.10.0 2.7, 3.3-3.6 Sonido de xcode Bazel 0.15.0
tensorflow-1.9.0 2.7, 3.3-3.6 Sonido de xcode Bazel 0.11.0
tensorflow-1.8.0 2.7, 3.3-3.6 Sonido de xcode Bazel 0.10.1
tensorflow-1.7.0 2.7, 3.3-3.6 Sonido de xcode Bazel 0.10.1
tensorflow-1.6.0 2.7, 3.3-3.6 Sonido de xcode bazel 0.8.1
tensorflow-1.5.0 2.7, 3.3-3.6 Sonido de xcode bazel 0.8.1
tensorflow-1.4.0 2.7, 3.3-3.6 Sonido de xcode bazel 0.5.4
tensorflow-1.3.0 2.7, 3.3-3.6 Sonido de xcode bazel 0.4.5
tensorflow-1.2.0 2.7, 3.3-3.6 Sonido de xcode bazel 0.4.5
tensorflow-1.1.0 2.7, 3.3-3.6 Sonido de xcode bazel 0.4.2
tensorflow-1.0.0 2.7, 3.3-3.6 Sonido de xcode bazel 0.4.2

GPU

Versión Versión de Python Compilador Construir herramientas cuDNN CUDA
tensorflow_gpu-1.1.0 2.7, 3.3-3.6 Sonido de xcode bazel 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2.7, 3.3-3.6 Sonido de xcode bazel 0.4.2 5.1 8