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-py35
oucntk-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 correr
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]
- 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 corrapython 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 sejadeviceId=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