Partilhar via


Configuração CNTK no Linux

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

CNTK pode ser executado com sucesso em muitas configurações do Linux, mas no caso de querer evitar possíveis problemas de compatibilidade, poderá familiarizar-se com CNTK configuração de Construção e Teste de Produção onde listamos todas as versões de componentes e componentes de dependência que utilizamos.

CNTK como um contentor Docker

Antes de avançar, pode considerar a colocação de CNTK como recipiente Docker. Leia a secção correspondente.

Limitações e precauções atuais

Leia atentamente esta secção antes de prosseguir com a configuração do seu sistema. As informações abaixo podem poupar-lhe muito tempo de outra forma gasto em construir erros de depurar.

Nota

Esta página assume que está a tentar construir o ramo principal da CNTK.

Locais de componentes esperados em configuração e scripts Makefile

Hoje configure em dia, Makefile os scripts suportam apenas um conjunto limitado de caminhos de instalação para todos os componentes de dependência listados nesta secção. Sabemos que esta é uma limitação e vai corrigi-la em breve (também se quiser melhorar estes scripts e submeter as suas alterações propostas , a sua ajuda é bem-vinda e muito apreciada).

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

Importante

Se pretender modificar default_path_list a variável configure para adicionar um caminho personalizado para um determinado componente de dependência, certifique-se de verificar a secção correspondente de Makefile. Caso contrário, poderá obter erros de construção devido à incapacidade de encontrar ficheiros, bibliotecas, etc.

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

Abaixo listamos todos os componentes de dependência necessários para construir CNTK e explicar como instalá-los. Entendemos que há muitas outras formas de obter os mesmos componentes. No entanto, se preferir uma forma alternativa de instalação, certifique-se de que obtém a mesma coisa, porque muitas vezes fontes de instalação alternativas, nomeadamente pacotes de distribuição de rede (como Debian, RPM, etc.) contêm versões mais antigas do software, falham algumas bibliotecas, etc. Em algumas secções abaixo destacamos especificamente estas limitações, mas por favor, tome-as como precaução geral.

Utilização de make -j

Na maioria das secções sugerimos usar make -j o comando para invocar empregos paralelos de construção e, assim, aumentar a velocidade do processo de construção. No entanto, tenha em atenção que em alguns sistemas e especialmente em máquinas virtuais a utilização make -j pode resultar em erros "Fora de memória". Se encarar isto, basta usar "simples" make ou limitar o número de postos de trabalho que funcionam simultaneamente (dois trabalhos simultâneos normalmente 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 queira ter várias instalações de alguns dos pacotes de desenvolvimento mencionados abaixo no mesmo sistema. Pode resultar em muito difícil depurar erros de construção, como pode ver neste post.

E agora vamos para a instalação.

Se quiser saber que configuração pré-requisito é usada no ambiente de produção CNTK, ou seja, o que usamos internamente para construir e testar, consulte esta secção

64 bits de SO

Precisa de uma instalação Linux de 64 bits para utilizar CNTK.

Compilador C++

Certifique-se de que a sua instalação tem um compilador C++. Muitas distribuições não incluem por defeito. Consulte a documentação da sua plataforma sobre como verificar e obter um compilador C++.

Exemplo: para Ubuntu, executar o seguinte comando:

dpkg --list | grep compiler

se na saída não se vê algo como

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

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

sudo apt-get install g++

Git

Instale git no seu sistema como descrito aqui.

MKL

A biblioteca de matemática CNTK padrão é a Biblioteca Intel Math Kernel (Intel MKL). Siga esta página para instalá-lo

MPI aberto

Instale a Biblioteca de Interface de Passagem de Mensagens Abertas (OPEN MPI).

Recomendamos a instalação a partir de fontes como descrito abaixo porque muitas embalagens de distribuição contêm versões mais antigas e falham nas bibliotecas exigidas por CNTK. O requisito atual CNTK versão ABERTA MPI é de, pelo menos, 1.10. Por favor, verifique se tem instalações de versão mais antigas no seu sistema e se o faz, desinstale-as ou certifique-se (via, por exemplo, ligações simbólicas) de que CNTK procedimento de construção está a utilizar a versão necessária. Caso contrário, poderá ser difícil depurar erros de construção, como pode ver neste post.

  • Obtenha as fontes de instalação:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
  • Desembalar, construir e instalar MPI Aberto (para /usr/local/mpi neste 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 seguinte variável ambiental à sua sessão atual e ao seu .bashrc perfil (Premissar o novo caminho, garante que esta versão é usada em oposição a uma versão padrão disponível através do SISTEMA):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH

Protobuf

Usamos tampão de protocolo para serialização. Para a instalação siga estes passos:

  • Instale as embalagens necessárias usando
sudo apt-get install autoconf automake libtool curl make g++ unzip
  • Descarregue e desembale fontes de 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

Zlib hoje é uma parte de muitas distribuições populares do Linux, por isso com a alta probabilidade que você tem pré-instalado. No entanto, note que o libzip requer a versão zlib 1.1.2 ou posterior , e isto normalmente NÃO é pré-instalado. zlib deve ser instalado antes de construir Boost abaixo.

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

Exemplo: para Ubuntu utilizar o seguinte comando:

sudo apt-get install zlib1g-dev

LIBZIP

Libzip está disponível em diferentes pacotes de distribuição de rede, mas descobrimos que muitos deles contêm versões antigas. A utilização destas versões resultará provavelmente em erros de construção. Por isso, recomendamos vivamente a construção de libzip a partir de fontes, como descrito abaixo.

Note que o seguinte procedimento irá instalar libzip para /usr/local. É exatamente aqui que CNTK procedimento de construção o espera (ver o início desta página para mais detalhes). Se pretender instalar o libzip num caminho diferente, consulte as instruções em INSTALL ficheiro na raiz da pasta de distribuição libzip. No entanto, tenha cuidado que neste caso você tem que editar configure manualmente E Makefile de CNTK apoiar este caminho.

Utilize 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 à sua sessão atual e ao seu .bashrc perfil:

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

Biblioteca Boost

A Boost Library é um pré-requisito para a construção do Microsoft Cognitive Toolkit. Siga estes passos para instalar a Biblioteca Boost no 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 pretender utilizar CNTK com suporte gpu, siga esta página para instalar e configurar o ambiente em conformidade.

Opcional. O SWIG.

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

Opcional. CNTK apoio Python v2

Esta secção descreve como construir CNTK v2 com suporte Python.

Passo 1: Construir APIs Python

  • Instale a ferramenta SWIG se ainda não o tiver feito.
  • Instalar Anaconda3 4.1.1 (64-bit)
  • Se já tiver um ambiente CNTK Python (chamado cntk-py36, cntk-py35ou cntk-py27) pode atualizá-lo com os mais recentes pacotes necessários 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 ainda não tiver um ambiente CNTK Python, pode escolher entre um ambiente Python CNTK Python 2,7, 3,5 ou 3,6 com base em CNTK Python.
  • Crie o seu ambiente de eleição Python na sua instalação Python 3.5 Anaconda ou Miniconda existente utilizando um dos seguintes comandos, dependendo da versão Python desejada:
# 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: Certifique-se de que o ambiente Python atualizado ou criado acima é ativado para o resto das instruções. Por exemplo, se tiver Python ambiente baseado em 3.5 chamado cntk-py35 executar este comando:

source activate cntk-py35

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

Passo 2: Desinstalar o pacote de CNTK anterior

  • Se anteriormente instalou qualquer versão do pacote de pip CNTK na sua máquina, desinstale-o executando:pip uninstall cntk

Passo 3: Construir pacote de Python

  • Para configurar uma construção com Python, inclua esta opção de duas opções ao correrconfigure:
--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]
  • Apenas as construções de lançamento são suportadas nesta fase. Por exemplo, se instalou o SWIG /usr/local/swig-3.0.10 e o seu ambiente Python está localizado em $HOME/anaconda3/envs/cntk-py35 fornecer estes parâmetros adicionais paraconfigure:
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
  • Em seguida, corra como normalmente faria, que irá construir o módulo CNTK Python no seu interior bindings/python/cntk e também produzir um pacote (.whl) numa pitão subfolder da sua pasta de saída de construção (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

Nota

Em contraste com a configuração mostrada para a instalação do pacote Pip, aqui carregaremos o módulo CNTK do CNTK clone de repositório, e não como um pacote instalado no seu ambiente Python. (Daí também a diferença na criação PYTHONPATH)

Passo 4: Verificar a configuração

Python

  • Verifique os Python exemplos de dentro ou [CNTK clone root]/Tutorials[CNTK clone root]/Examples dos diretórios, para verificar a sua instalação. Por exemplo, vá à pasta [CNTK clone root]/Tutorials/NumpyInterop e corra python FeedForwardNet.py. Deve ver a seguinte saída na 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 requer que o open source Imagem Digitalizada (OpenCV) seja instalado, mas é opcional após CNTK 2.3. Siga esta página para instalá-lo

Opcional. Java

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

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

Obter CNTK código fonte

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

Use Git para clonar o Repositório CNTK e aceder ao código de origem:

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

O Submodule Multiverso é utilizado para permitir a formação do DataParallelASGD .

Opcional Se não precisar de suporte dataParallelASGD, então passe a opção --asgd=no para o comando de configuração.

CNTK de construção

Para construir CNTK utilizar os seguintes comandos (assumimos que o repositório CNTK foi clonado para~/Repos/cntk):

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

Certifique-se de que a configure saída corresponde às embalagens instaladas nas secções anteriores. Ou seja, certifique-se de que configure encontra CUDA se estiver instalado, etc.

Faça o seguinte para construir CNTK utilizando todos os núcleos para minimizar o tempo de construção. Note que em algum computador, isto pode sobrecarregar o seu sistema levando a enforcamentos ou quebras durante a construção.

make -j all

Se o acima sobrecarregar o computador, tente especificar menos núcleos. Por exemplo, se tiver mais de 2 núcleos, e quiser manter 2 núcleos livres da construção, pode tentar:

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

Se quiser estar absolutamente seguro, use apenas um núcleo:

make all

Isto deve produzir uma construção de CNTK. No caso de pretender obter uma construção de depurg use o seguinte parâmetro ao invocar configure:

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

Teste rápido da funcionalidade de construção de CNTK

Para garantir que CNTK está a funcionar corretamente no seu sistema, pode rapidamente executar um exemplo do tutorial de Hello World - Regressão Logística. Este exemplo treina uma rede simples e pode ser direcionado para a utilização de CPU ou GPU, o que ajuda a garantir rapidamente que CNTK está a funcionar corretamente.

Abaixo assumimos que o repositório CNTK é clonado ~/Repos/cntk e build/release foi usado como sub-diretório para a construção.

  • Fornecer o caminho para os binários CNTK e mudar 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 a amostra correr, isto é, se não houver mensagens de erro, obterá a saída relacionada primeiro com a leitura da configuração, seguida da saída do treino de rede real.

Tentando CNTK com GPU

Se construí CNTK para utilização da GPU, tente utilizar a GPU executando os seguintes comandos:

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

Perto do início da saída deverá ver uma linha confirmando a utilização de uma GPU:

Model has 9 nodes. Using GPU 0.

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

  • deviceId=-1 significa usar CPU. Valor predefinido
  • deviceId=X onde X é um inteiro >=0 significa utilização GPU X, ou seja deviceId=0 , GPU 0, etc.
  • deviceId=auto significa usar GPU, selecione GPU automaticamente

Contribuindo para CNTK código

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

Próximos passos