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 (chamado
cntk-py36
,cntk-py35
oucntk-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 paraconfigure
:
--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 executepython 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 sejadeviceId=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