Compartilhar via


Configurar CNTK no Linux

configuração de compilação e teste de produção CNTK

CNTK pode ser executado com êxito em muitas configurações do Linux, mas caso você queira evitar possíveis problemas de compatibilidade, você pode se familiarizar com CNTK configuração de Build e Teste de Produção em que listamos todas as versões de componente e componente de dependência que usamos.

CNTK como um contêiner do Docker

Antes de mover mais, você pode considerar implantar CNTK como um contêiner do Docker. Leia a seção correspondente.

Limitações e precauções atuais

Leia cuidadosamente esta seção antes de prosseguir com a configuração do sistema. As informações abaixo podem economizar muito tempo, caso contrário, gastos na depuração de erros de build.

Observação

Esta página pressupõe que você está tentando criar o branch mestre do CNTK.

Locais de componente esperados na configuração e scripts Makefile

Hoje configure e Makefile scripts dão suporte apenas a um conjunto limitado de caminhos de instalação para todos os componentes de dependência listados nesta seção. Sabemos que essa é uma limitação e a corrigirá em breve (também se você quiser melhorar esses scripts e enviar suas alterações propostas , sua ajuda é bem-vinda e muito apreciada).

configure procura todos os componentes de dependência entre os caminhos listados na default_path_list variável definida dentro do script.

Importante

Se você quiser modificar default_path_list a variável configure para adicionar um caminho personalizado para um determinado componente de dependência, verifique a seção correspondente de Makefile. Caso contrário, você poderá obter erros de build devido à incapacidade de localizar arquivos INCLUDE, bibliotecas etc.

Métodos de instalação e caminhos de componentes de dependência

Abaixo, listamos todos os componentes de dependência necessários para criar CNTK e explicar como instalá-los. Entendemos que há muitas outras maneiras de obter os mesmos componentes. No entanto, se você preferir uma maneira alternativa de instalação, certifique-se de obter a mesma coisa, pois muitas vezes fontes de instalação alternativas, ou seja, pacotes de distribuição de rede (como Debian, RPM, etc.) contêm versões mais antigas do software, perder algumas bibliotecas etc. Em algumas seções abaixo, destacamos especificamente essas limitações, mas tome-a como precaução geral.

Uso de make -j

Na maioria das seções, sugerimos usar make -j o comando para invocar trabalhos de build paralelos e, portanto, aumentar a velocidade do processo de build. No entanto, lembre-se de que, em alguns sistemas e especialmente em máquinas virtuais , o uso make -j pode resultar em erros de "Memória insuficiente". Se você enfrentar isso, basta usar "simples" make ou limitar o número de trabalhos executados simultaneamente (dois trabalhos simultâneos geralmente funcionam para a maioria dos sistemas - use o comando make -j 2).

Instalação simultânea de diferentes versões dos mesmos pacotes de desenvolvimento

Tenha muito cuidado caso você queira ter várias instalações de alguns dos pacotes de desenvolvimento mencionados abaixo no mesmo sistema. Pode resultar em erros de compilação muito difíceis, como você pode ver nesta postagem.

E agora vamos para a instalação.

Se você quiser saber qual configuração de pré-requisito é usada no ambiente de produção CNTK, ou seja, o que usamos internamente para compilar e testar, confira esta seção

Sistema operacional de 64 bits

Você precisa de uma instalação linux de 64 bits para usar CNTK.

Compilador C++

Verifique se a instalação tem um compilador C++. Muitas distribuições não a incluem por padrão. Consulte a documentação da plataforma sobre como verificar e obter um compilador C++.

Exemplo: para ubuntu, execute o seguinte comando:

dpkg --list | grep compiler

se na saída você não vir algo como

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

em seguida, um compilador C++ não está instalado. Se você tiver o Ubuntu 1604, instale o gcc 5.4 com:

sudo apt-get install g++

Git

Instale o Git em seu sistema, conforme descrito aqui.

MKL

O padrão CNTK biblioteca matemática é a Biblioteca intel math kernel (Intel MKL). Siga esta página para instalá-la

Abrir MPI

Instale a Biblioteca de Interface de Passagem de Mensagem Aberta (Abrir MPI).

É recomendável instalar de fontes conforme descrito abaixo porque muitos pacotes de distribuição contêm versões mais antigas e perdem as bibliotecas exigidas por CNTK. O requisito de versão atual CNTK Open MPI é pelo menos 1.10. Verifique se você tem instalações de versão mais antigas em seu sistema e, se tiver, desinstale-as ou verifique (por exemplo, links simbólicos) que CNTK procedimento de build esteja usando a versão necessária. Caso contrário, você poderá ficar difícil de depurar erros de build, como você pode ver nesta postagem.

  • Obtenha as fontes de instalação:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
  • Desempacotar, compilar e instalar o Open MPI (neste /usr/local/mpi exemplo):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
  • Adicione a variável de ambiente a seguir à sessão atual e ao seu .bashrc perfil (Anexando o novo caminho, garante que essa versão seja usada em vez de uma versão padrão disponível por meio do sistema operacional):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH

Protobuf

Usamos buffers de protocolo para serialização. Para instalação, siga estas etapas:

  • Instalar os pacotes necessários usando
sudo apt-get install autoconf automake libtool curl make g++ unzip
  • Baixar e desempacotar fontes protobuf
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
  • Compilar 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

O zlib hoje faz parte de muitas distribuições populares do Linux, portanto, com a alta probabilidade de pré-instalação. No entanto, observe que o libzip requer zlib versão 1.1.2 ou posterior e isso geralmente NÃO é pré-instalado. o zlib deve ser instalado antes de criar o Boost abaixo.

Consulte a documentação da plataforma sobre como obter o pacote zlib necessário ou obtê-lo diretamente do site do zlib.

Exemplo: para ubuntu, use o seguinte comando:

sudo apt-get install zlib1g-dev

LIBZIP

o libzip está disponível em diferentes pacotes de distribuição de rede, mas descobrimos que muitos deles contêm versões antigas. O uso dessas versões provavelmente resultará em erros de build. Portanto, é altamente recomendável criar libzip de fontes, conforme descrito abaixo.

Observe que o procedimento a seguir instalará o libzip para /usr/local. É exatamente aqui que CNTK procedimento de build o espera (consulte o início desta página para obter detalhes). Se você quiser instalar o libzip em um caminho diferente, consulte instruções no INSTALL arquivo na raiz da pasta de distribuição libzip. No entanto, cuidado que, nesse caso, você precisa editar configure manualmente E Makefile de CNTK para dar suporte a esse caminho.

Use os seguintes comandos:

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

Adicione a seguinte variável de ambiente à sessão atual e ao seu .bashrc perfil:

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

Biblioteca boost

A Biblioteca boost é um pré-requisito para a criação do Microsoft Cognitive Toolkit. Siga estas etapas para instalar a Biblioteca do Boost em seu 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  

Pacotes específicos da GPU

Se você pretende usar CNTK com suporte para GPU, siga esta página para instalar e configurar o ambiente adequadamente.

OPCIONAL. GOLE.

Se você quiser aproveitar CNTK do Python, precisará instalar o SWIG. O SWIG também é um requisito para criar as bibliotecas de avaliação de CNTK para Java. Para instalá-lo, execute o script: [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh. . Isso cria a versão instalada na pasta /usr/local/swig-3.0.10.

OPCIONAL. Suporte ao Python CNTK v2

Esta seção descreve como criar CNTK v2 com suporte do Python.

Etapa 1: Criar APIs do Python

  • Instale a ferramenta SWIG se você ainda não tiver feito isso.
  • Instalar o Anaconda3 4.1.1 (64 bits)
  • Se você já tiver um ambiente do Python CNTK (chamadocntk-py36, cntk-py35ou cntk-py27) poderá atualizá-lo com os pacotes necessários mais recentes com os seguintes 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
  • Se você ainda não tiver um ambiente do Python CNTK, poderá escolher entre um ambiente python 2.7, 3.5 ou 3.6 baseado em CNTK Python.
  • Crie seu ambiente python de escolha em sua instalação existente do Python 3.5 Anaconda ou Miniconda usando um dos seguintes comandos, dependendo da versão desejada do Python:
# 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

Observação: verifique se o ambiente python atualizado ou criado acima está ativado para o restante das instruções. Por exemplo, se você tiver um ambiente baseado em Python 3.5 chamado cntk-py35 , execute este comando:

source activate cntk-py35

Da mesma forma, para um ambiente baseado em Python 3.6 ou 2.7.

Etapa 2: Desinstalar o pacote de CNTK anterior

  • Se você instalou anteriormente qualquer versão do CNTK pacote pip em seu computador, desinstale-o executando:pip uninstall cntk

Etapa 3: Criar Pacote Python

  • Para configurar um build com Python, inclua estas duas opções ao executar configure:
--with-swig[=directory]

e um dos seguintes (o que se aplica ao seu ambiente):

--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
  • Somente builds de versão têm suporte nesta fase. Por exemplo, se você instalou o /usr/local/swig-3.0.10 SWIG e o ambiente do Python estiver localizado, $HOME/anaconda3/envs/cntk-py35 forneça estes parâmetros adicionais para configure:
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
  • Posteriormente, execute make como você normalmente faria, o que criará o módulo CNTK Python dentro bindings/python/cntk e também produzirá um pacote (.whl) em uma subpasta python da pasta de saída de build (por exemplo, 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

Observação

Ao contrário da configuração mostrada para a instalação do pacote Pip, aqui carregaremos o módulo CNTK do clone do repositório CNTK, não como um pacote instalado em seu ambiente python. (Portanto, também a diferença na configuração PYTHONPATH)

Etapa 4: Verificar a instalação

Python

  • Execute os exemplos do Python de dentro dos [CNTK clone root]/Tutorials diretórios ou [CNTK clone root]/Examples diretórios para verificar sua instalação. Por exemplo, vá para a pasta [CNTK clone root]/Tutorials/NumpyInterop e execute python FeedForwardNet.py. Você deve ver a seguinte saída no console:
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 requer que o OpenCV (Pesquisa Visual Computacional de Software Livre) seja instalado, mas é opcional após CNTK 2.3. Siga esta página para instalá-la

OPCIONAL. Java

Para criar as associações Java para a biblioteca de avaliação de CNTK, instale a ferramenta SWIG se você ainda não tiver feito isso. Além disso, um JDK (Java Development Kit) é necessário. Atualmente, usamos o OpenJDK 8 de 64 bits.

O script de configuração fornece --with-jdk a opção para especificar o diretório JDK manualmente, se ele não puder ser encontrado por padrão.

Obtendo CNTK código-fonte

Antes de prosseguir, observe que, se você planeja fazer modificações no código CNTK, deve ler as informações sobre Desenvolvimento e Teste.

Use o Git para clonar o repositório CNTK e acessar o código-fonte:

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

O Submodule Multiverso é usado para habilitar o DataParallelASGD para treinamento.

Opcional Se você não precisar de suporte ao DataParallelASGD, passe a opção --asgd=no para o comando configurar.

Criando CNTK

Para criar CNTK use os seguintes comandos (presumimos que o repositório CNTK foi clonado para ~/Repos/cntk):

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

Verifique se a configure saída corresponde aos pacotes instalados nas seções anteriores. Ou seja, verifique se configure o CUDA está instalado, etc.

Faça o seguinte para criar CNTK usando todos os núcleos para minimizar o tempo de build. Observe que, em algum computador, isso pode sobrecarregar seu sistema, levando a travas ou quebras durante o build.

make -j all

Se o acima sobrecarregar o computador, tente especificar menos núcleos. Por exemplo, se você tiver mais de 2 núcleos e quiser manter 2 núcleos livres do build, tente:

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

Se você quiser estar absolutamente seguro, basta usar 1 núcleo:

make all

Isso deve produzir um build de versão de CNTK. Caso você queira obter uma compilação de depuração, use o seguinte parâmetro ao invocar configure:

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

Teste rápido da funcionalidade de build CNTK

Para garantir que CNTK esteja funcionando corretamente em seu sistema, você pode executar rapidamente um exemplo do tutorial Olá, Mundo - Regressão Logística. Este exemplo treina uma rede simples e pode ser direcionado para usar a CPU ou a GPU, o que ajuda a garantir rapidamente que CNTK esteja funcionando corretamente.

Abaixo, presumimos que o repositório CNTK é clonado ~/Repos/cntk e build/release usado como um subdiretório para o build.

  • Forneça o caminho para os binários CNTK e altere para o Tutorials/HelloWorld-LogisticRegression diretório:
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression

Primeiro tente o exemplo:

cntk configFile=lr_bs.cntk makeMode=false

Se o exemplo for executado, ou seja, se não houver mensagens de erro, você obterá a saída relacionada primeiro à leitura da configuração, seguida pela saída do treinamento de rede real.

Tentando CNTK com GPU

Se você criou CNTK para uso de GPU, tente usar a GPU executando os seguintes comandos:

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

Perto do início da saída, você verá uma linha confirmando que uma GPU foi usada:

Model has 9 nodes. Using GPU 0.

Observe que a ID da GPU pode ser diferente. O deviceId parâmetro define qual processador usar para computação.

  • deviceId=-1 significa usar A CPU. Valor padrão
  • deviceId=X onde X é um inteiro >=0 significa usar GPU X, ou seja deviceId=0 , significa GPU 0, etc.
  • deviceId=auto significa usar GPU, selecionar GPU automaticamente

Contribuindo para CNTK código

Se você planeja modificações no código, deve ler as informações sobre Desenvolvimento e Teste.

Próximas etapas