Compartir a través de


Configuración de CNTK en Linux

configuración de compilación y prueba de producción de CNTK

CNTK puede ejecutarse correctamente en muchas configuraciones de Linux, pero en caso de que desee evitar posibles problemas de compatibilidad, puede familiarizarse con CNTK configuración de compilación y prueba de producción, donde enumeramos todas las versiones de componentes y componentes de dependencia que usamos.

CNTK como contenedor de Docker

Antes de mover más, puede considerar la posibilidad de implementar CNTK como contenedor de Docker. Lea la sección correspondiente.

Limitaciones y precauciones actuales

Lea detenidamente esta sección antes de continuar con la configuración del sistema. La información siguiente puede ahorrarle mucho tiempo en la depuración de errores de compilación.

Nota

En esta página se supone que está intentando compilar la rama maestra de CNTK.

Ubicaciones de componentes esperadas en scripts de configuración y archivos Make

Hoy en día configure y Makefile los scripts solo admiten un conjunto limitado de rutas de instalación para todos los componentes de dependencia enumerados en esta sección. Sabemos, que se trata de una limitación y lo corregirá pronto (también si se siente como mejorar estos scripts y enviar sus cambios propuestos , su ayuda es bienvenida y muy apreciada).

configure busca todos los componentes de dependencia entre las rutas de acceso enumeradas en default_path_list la variable definida en el script.

Importante

Si desea modificar default_path_list la variable en configure para agregar una ruta de acceso personalizada para un determinado componente de dependencia, asegúrese de comprobar la sección correspondiente de Makefile. De lo contrario, puede obtener errores de compilación debido a la incapacidad de encontrar archivos INCLUDE, bibliotecas, etc.

Métodos de instalación y rutas de acceso de los componentes de dependencia

A continuación se enumeran todos los componentes de dependencia necesarios para compilar CNTK y explicar cómo instalarlos. Entendemos que hay muchas otras maneras de obtener los mismos componentes. Sin embargo, si prefiere una forma alternativa de instalación, asegúrese de obtener lo mismo, ya que a menudo orígenes de instalación alternativos, es decir, los paquetes de distribución de red (como Debian, RPM, etc.) contienen versiones anteriores del software, pierden algunas bibliotecas, etc. En algunas secciones siguientes se resaltan específicamente estas limitaciones, pero por favor tome como precaución general.

Uso de make -j

En la mayoría de las secciones se recomienda usar make -j el comando para invocar trabajos de compilación en paralelo y, por tanto, aumentar la velocidad del proceso de compilación. Sin embargo, tenga en cuenta que en algunos sistemas y especialmente en las máquinas virtuales que usan make -j pueden producir errores de "memoria insuficiente". Si se enfrenta a esto, use "sin formato" make o limite el número de trabajos que se ejecutan simultáneamente (dos trabajos simultáneos suelen funcionar para la mayoría de los sistemas, use el comando make -j 2).

Instalación simultánea de diferentes versiones de los mismos paquetes de desarrollo

Tenga mucho cuidado en caso de que desee tener varias instalaciones de algunos de los paquetes de desarrollo mencionados a continuación en el mismo sistema. Puede resultar muy difícil depurar errores de compilación, como puede ver en esta publicación.

Y ahora vamos a continuar con la configuración.

Si desea saber qué configuración de requisitos previos se usa en el entorno de producción de CNTK, es decir, lo que usamos internamente para compilar y probar, consulte esta sección.

Sistema operativo de 64 bits

Necesita una instalación de Linux de 64 bits para usar CNTK.

Compilador C++

Asegúrese de que la instalación tiene un compilador de C++. Muchas distribuciones no lo incluyen de forma predeterminada. Consulte la documentación de la plataforma sobre cómo comprobar y obtener un compilador de C++.

Ejemplo: para Ubuntu, ejecute el siguiente comando:

dpkg --list | grep compiler

si en la salida no ve algo parecido a

g++-5 5.4.0-6ubuntu1~16.04.5 amd64 GNU C++ compiler

a continuación, no se instala un compilador de C++. Si tiene Ubuntu 1604, instale gcc 5.4 con:

sudo apt-get install g++

Git

Instale Git en el sistema como se describe aquí.

MKL

La biblioteca matemática predeterminada CNTK es la biblioteca de kernels matemáticos de Intel (Intel MKL). Siga esta página para instalarla.

Abrir MPI

Instale Open Message Passing Interface Library (Open MPI) (Abrir biblioteca de interfaz de paso de mensajes [Open MPI]).

Se recomienda instalar desde orígenes, como se describe a continuación, ya que una gran cantidad de paquetes de distribución contienen versiones anteriores y se pierden las bibliotecas requeridas por CNTK. El requisito actual CNTK versión de Open MPI es al menos 1.10. Compruebe si tiene instalaciones de versiones anteriores en el sistema y, si lo hace, desinstálelas o asegúrese de (por ejemplo, vínculos simbólicos) que CNTK procedimiento de compilación usa la versión necesaria. De lo contrario, es posible que le resulte difícil depurar los errores de compilación, como puede ver en esta publicación.

  • Obtenga los orígenes de instalación:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
  • Desempaquetar, compilar e instalar Open MPI (en /usr/local/mpi este ejemplo):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
  • Agregue la siguiente variable de entorno a la sesión actual y .bashrc al perfil (pendiente de la nueva ruta de acceso, garantiza que esta versión se use en lugar de una versión predeterminada disponible a través del sistema operativo):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH

Protobuf

Usamos Búferes de protocolo para la serialización. Para la instalación, siga estos pasos:

  • Instalación de los paquetes necesarios mediante
sudo apt-get install autoconf automake libtool curl make g++ unzip
  • Descargar y desempaquetar orígenes protobuf
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
  • Compilación de protobuf
cd protobuf-3.1.0
./autogen.sh
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC --disable-shared --prefix=/usr/local/protobuf-3.1.0
make -j $(nproc)
sudo make install

ZLIB

zlib es una parte de muchas distribuciones de Linux populares, por lo que con la alta probabilidad de tenerla preinstalada. Sin embargo, tenga en cuenta que libzip requiere la versión 1.1.2 o posterior de zlib y esto normalmente no está preinstalado. zlib debe instalarse antes de compilar Boost a continuación.

Consulte la documentación de la plataforma sobre cómo obtener el paquete zlib necesario o obtenerlo directamente desde el sitio web de zlib.

Ejemplo: para Ubuntu, use el siguiente comando:

sudo apt-get install zlib1g-dev

LIBZIP

libzip está disponible en diferentes paquetes de distribución de red, pero encontramos que muchos de ellos contienen versiones anteriores. El uso de estas versiones probablemente provocará errores de compilación. Por lo tanto, se recomienda encarecidamente compilar libzip a partir de orígenes, como se describe a continuación.

Tenga en cuenta que el procedimiento siguiente instalará libzip en /usr/local. Aquí es exactamente donde CNTK procedimiento de compilación lo espera (consulte el principio de esta página para obtener más información). Si desea instalar libzip en otra ruta de acceso, consulte las instrucciones del archivo en INSTALL la raíz de la carpeta de distribución libzip. Sin embargo, tenga en cuenta que en este caso tiene que editar configure manualmente AND Makefile de CNTK para admitir esta ruta de acceso.

Use los comandos siguientes:

wget http://nih.at/libzip/libzip-1.1.2.tar.gz
tar -xzvf ./libzip-1.1.2.tar.gz
cd libzip-1.1.2
./configure
make -j all
sudo make install

Agregue la siguiente variable de entorno a la sesión actual y al .bashrc perfil:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

Boost Library

La biblioteca Boost es un requisito previo para crear el Microsoft Cognitive Toolkit. Siga estos pasos para instalar boost Library en el sistema:

sudo apt-get install libbz2-dev
sudo apt-get install python-dev

wget -q -O - https://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.gz/download | tar -xzf - 
cd boost_1_60_0 
./bootstrap.sh --prefix=/usr/local/boost-1.60.0
sudo ./b2 -d0 -j"$(nproc)" install  

Paquetes específicos de GPU

Si tiene previsto usar CNTK con compatibilidad con GPU, siga esta página para instalar y configurar el entorno en consecuencia.

OPCIONAL. TRAGO.

Si desea aprovechar las ventajas de CNTK de Python, deberá instalar SWIG. SWIG también es un requisito para compilar las bibliotecas de evaluación de CNTK para Java. Para instalarlo, ejecute el script: [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh. Esto crea la versión instalada en la carpeta /usr/local/swig-3.0.10.

OPCIONAL. compatibilidad con Python de CNTK v2

En esta sección se describe cómo compilar CNTK v2 con compatibilidad con Python.

Paso 1: Compilación de las API de Python

  • Instale la herramienta SWIG si aún no lo ha hecho.
  • Instale Anaconda3 4.1.1 (64 bits)
  • Si ya tiene un entorno de Python CNTK (denominado cntk-py36, cntk-py35o cntk-py27), puede actualizarlo con los paquetes necesarios más recientes con los siguientes comandos:
# For cntk-py36:
conda env update --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py36-environment.yml --name cntk-py36
# For cntk-py35:
conda env update --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py35-environment.yml --name cntk-py35
# For cntk-py27:
conda env update --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py27-environment.yml --name cntk-py27
  • Si aún no tiene un entorno de Python de CNTK, puede elegir entre un entorno de Python 2.7, 3.5 o 3.6 basado en CNTK python.
  • Cree el entorno de Python que prefiera en la instalación existente de Python 3.5 Anaconda o Miniconda mediante uno de los siguientes comandos, en función de la versión de Python deseada:
# For a Python 3.6 based version:
conda env create --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py36-environment.yml
# For a Python 3.5 based version:
conda env create --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py35-environment.yml
# For a Python 2.7 based version:
conda env create --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py27-environment.yml

Nota: Asegúrese de que el entorno de Python actualizado o creado anteriormente esté activado durante el resto de las instrucciones. Por ejemplo, si tiene un entorno basado en Python 3.5 denominado cntk-py35 ejecutar este comando:

source activate cntk-py35

Del mismo modo, para un entorno basado en Python 3.6 o 2.7.

Paso 2: Desinstalar el paquete de CNTK anterior

  • Si instaló previamente cualquier versión del CNTK pip-package en el equipo, desinstálela mediante la ejecución de:pip uninstall cntk

Paso 3: Compilación del paquete de Python

  • Para configurar una compilación con Python, incluya esta dos opciones al ejecutar configure:
--with-swig[=directory]

y uno de los siguientes (lo que se aplica a su entorno):

--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
  • En esta fase solo se admiten compilaciones de versión. Por ejemplo, si instaló SWIG en /usr/local/swig-3.0.10 y el entorno de Python se encuentra en $HOME/anaconda3/envs/cntk-py35 , proporcione estos parámetros adicionales a configure:
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
  • Después, ejecute make como lo haría normalmente, que compilará el módulo de Python CNTK dentro bindings/python/cntk y también generará un paquete (.whl) en una subcarpeta python de la carpeta de salida de compilación (por ejemplo, build/gpu/release/python).
cd [CNTK clone root]
export PYTHONPATH=$PWD/bindings/python:$PYTHONPATH
cd [CNTK clone root]/bindings/python
export LD_LIBRARY_PATH=$PWD/cntk/libs:$LD_LIBRARY_PATH

Nota

A diferencia de la configuración que se muestra para la instalación del paquete Pip, aquí se cargará el módulo CNTK desde el clon del repositorio de CNTK, no como un paquete instalado en el entorno de Python. (Por lo tanto, también la diferencia en la configuración PYTHONPATHde )

Paso 4: Comprobar la instalación

Python

  • Ejecute los ejemplos de Python desde dentro de los [CNTK clone root]/Tutorials directorios o [CNTK clone root]/Examples para comprobar la instalación. Por ejemplo, vaya a la carpeta [CNTK clone root]/Tutorials/NumpyInterop y ejecute python FeedForwardNet.py. Debería ver la siguiente salida en la consola:
Minibatch: 0, Train Loss: 0.7915553283691407, Train Evaluation Criterion: 0.48

Minibatch: 20, Train Loss: 0.6266774368286133, Train Evaluation Criterion: 0.48

Minibatch: 40, Train Loss: 1.0378565979003906, Train Evaluation Criterion: 0.64

Minibatch: 60, Train Loss: 0.6558118438720704, Train Evaluation Criterion: 0.56

OPCIONAL. OpenCV

CNTK 2.2 requiere que Computer Vision de código abierto (OpenCV) esté instalado, pero es opcional después de CNTK 2.3. Siga esta página para instalarla.

OPCIONAL. Java

Para compilar los enlaces de Java para la biblioteca de evaluación de CNTK, instale la herramienta SWIG si aún no lo ha hecho. Además, se requiere un Kit de desarrollo de Java (JDK). Actualmente usamos OpenJDK 8 de 64 bits.

El script de configuración proporciona --with-jdk la opción de especificar manualmente el directorio JDK, si no se encuentra de forma predeterminada.

Obtener CNTK código fuente

Antes de continuar, tenga en cuenta que si planea realizar modificaciones en el código de CNTK, debe leer la información sobre desarrollo y pruebas.

Use Git para clonar el repositorio de CNTK y acceder al código fuente:

git clone --recursive https://github.com/Microsoft/cntk
cd cntk

Multiverso de submódulo se usa para habilitar DataParallelASGD para el entrenamiento.

Opcional Si no necesita compatibilidad con DataParallelASGD, pase la opción --asgd=no al comando configure.

Creación de CNTK

Para compilar CNTK use los siguientes comandos (se supone que el repositorio de CNTK se ha clonado en ~/Repos/cntk):

cd ~/Repos/cntk
mkdir build/release -p
cd build/release
../../configure

Asegúrese de que la configure salida corresponde a los paquetes que instaló en las secciones anteriores. Es decir, asegúrese de que configure encuentre CUDA si está instalado, etc.

Haga lo siguiente para compilar CNTK usar todos los núcleos para minimizar el tiempo de compilación. Tenga en cuenta que en algún equipo, esto puede sobrecargar el sistema que conduce a bloqueos o interrupciones durante la compilación.

make -j all

Si lo anterior sobrecarga el equipo, intente especificar menos núcleos. Por ejemplo, si tiene más de 2 núcleos y desea mantener 2 núcleos libres de la compilación, puede intentar:

make -j"$(($(nproc)  - 2))" all

Si desea ser absolutamente seguro, use solo 1 núcleo:

make all

Esto debería generar una compilación de versión de CNTK. En caso de que quiera obtener una compilación de depuración, use el siguiente parámetro al invocar configure:

../../configure --with-buildtype=debug

Prueba rápida de CNTK funcionalidad de compilación

Para asegurarse de que CNTK funciona correctamente en el sistema, puede ejecutar rápidamente un ejemplo del tutorial Hola mundo - Regresión logística. En este ejemplo se entrena una red simple y se puede dirigir para que use cpu o GPU, lo que ayuda a garantizar rápidamente que CNTK funcione correctamente.

A continuación se supone que el repositorio de CNTK se clona ~/Repos/cntk en y build/release se usó como un subdirectorio para la compilación.

  • Proporcione la ruta de acceso a los archivos binarios de CNTK y cambie al Tutorials/HelloWorld-LogisticRegression directorio :
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression

Primero pruebe el ejemplo:

cntk configFile=lr_bs.cntk makeMode=false

Si el ejemplo se ejecuta, es decir, si no hay ningún mensaje de error, obtendrá la salida relacionada primero con la lectura de la configuración, seguida de la salida del entrenamiento de red real.

Prueba de CNTK con GPU

Si ha compilado CNTK para el uso de GPU, pruebe a usar la GPU mediante la ejecución de los siguientes comandos:

cntk configFile=lr_bs.cntk makeMode=false deviceId=auto

Cerca del principio de la salida debería ver una línea que confirma que se usó una GPU:

Model has 9 nodes. Using GPU 0.

Tenga en cuenta que el identificador de GPU puede ser diferente. El deviceId parámetro define qué procesador se va a usar para el cálculo.

  • deviceId=-1 significa usar CPU. Valor predeterminado
  • deviceId=X donde X es un entero >=0 significa usar GPU X, es decir deviceId=0 , GPU 0, etc.
  • deviceId=auto significa usar GPU, seleccionar GPU automáticamente

Contribución al código de CNTK

Si planea modificaciones en el código, debe leer la información sobre desarrollo y pruebas.

Pasos siguientes