Partilhar via


CNTK estivadores

Pode configurar CNTK como um Estivador no seu sistema Linux.

Existem duas formas de utilizar CNTK estivadores:

Usando CNTK Images publicado em Docker Hub

Acolhemos imagens de CNTK públicas no Docker Hub. Consulte a lista completa de Imagens disponíveis na página CNTK Repositórios Docker Hub. Atualmente, apenas acolhemos configurações de tempo de execução . A configuração do tempo de execução corresponde a um ambiente com CNTK pacote binário instalado e configurado. Esta configuração não contém nem CNTK código fonte, nem os pré-requisitos necessários para a construção de CNTK.

Note que precisa do NVIDIA Docker para usar CNTK imagens ativadas pela GPU.

Os comandos Standard Docker são usados para obter a imagem:

docker pull mcr.microsoft.com/cntk/release

para obter a mais recente imagem oficial de lançamento, que hoje significa a mais recente configuração de tempo de execução disponível da GPU. Também pode obter a mais recente imagem noturna de desenvolvimento:

docker pull mcr.microsoft.com/cntk/nightly

Para obter uma configuração específica, precisa adicionar uma etiqueta. Por exemplo,

docker pull mcr.microsoft.com/cntk/release:2.7-cpu-python3.5

irá levá-lo CNTK configuração de tempo de execução de 2.7 CPU configurada para Python 3.5.

Se não estiver familiarizado com o Docker, leia as secções abaixo nesta página.

Usando o recipiente Docker para executar CNTK Jupyter Notebook tutoriais

Você pode usar CNTK recipientes Docker para executar CNTK Cadernos Jupyter no seu ambiente local.

Assumimos que já retirou as imagens necessárias de Docker Hub. No exemplo abaixo, usaremos a configuração da GPU. Se estiver a utilizar a configuração do CPU, então nos comandos abaixo substitua todas as ocorrências de nvidia-docker .docker

Primeiro crie e inicie um recipiente CNTK em modo separado com porta IP exposto (usamos a porta 8888 que é padrão para Jupyter Notebook aplicação):

nvidia-docker run -d -p 8888:8888 --name cntk-jupyter-notebooks -t mcr.microsoft.com/cntk/release

Agora comece Jupyter Notebook servidor no seu contentor Docker:

docker exec -it cntk-jupyter-notebooks bash -c "source /cntk/activate-cntk && jupyter-notebook --no-browser --port=8888 --ip=0.0.0.0 --notebook-dir=/cntk/Tutorials --allow-root"

No seu terminal verá a saída da consola do servidor Jupyter Notebooks. Esta saída conteria uma linha como esta:
http://0.0.0.0:8888/?token=082684fbe2b43eebd72583c301c05072084173d0ac06a4d7

Copie o símbolo apresentado (no nosso exemplo 082684fbe2b43eebd72583c301c05072084173d0ac06a4d7).

Agora pode aceder CNTK Os Cadernos Jupyter utilizando o endereço IP da máquina onde está a executar o contentor Docker. Ou seja, se o endereço do seu machine for 192.168.1.1 então para aceder a CNTK Os Cadernos abrem uma janela do navegador e vão para http://192.168.1.1:8888.

Note que durante a primeira execução Jupyter Notebook pedido pedirá uma senha ou um token. Use o símbolo que guardou acima.

Para parar o servidor Jupyter Notebook enviar Ctrl-C sequência no terminal onde tem a saída da consola do servidor Júpiter Notebook e confirmar o desligar do servidor. Note que não vai parar o próprio contentor Docker. Para parar o recipiente, utilize o comando:
docker stop cntk-jupyter-notebooks

ATENÇÃO! Os comandos acima exporão a aplicação Jupyter Notebooks a todos os que possam aceder ao endereço IP da máquina onde está a executar o contentor Docker.

Edifício CNTK Imagens Docker

Pode construir e executar CNTK usando o mesmo recipiente e esta é uma abordagem recomendada para reproduzir a nossa configuração de referência.

Primeiro tens de instalar o Docker. É altamente recomendado seguir o processo de instalação na documentação oficial do estivador. As versões que acompanham a sua distribuição Linux podem estar desatualizadas e não funcionarão (com nvidia-docker as quais poderá ter de instalar, para além do estivador, se pretender construir e executar a imagem da GPU a partir do mesmo recipiente). Deve também seguir as instruções na secção opcional intitulada criação de um grupo de estivadores.

Os ficheiros do correspondente Docker estão no repositório CNTK emhttps://github.com/Microsoft/CNTK/tree/release/latest/Tools/docker

Para construir uma imagem estival com CNTK e todas as suas dependências, basta clonar o repositório CNTK, navegar CNTK/Tools/docker e usar o Dockerfile a partir do que pretende construir (CPU ou GPU). Por exemplo, para construir a imagem de estivador gpu da CNTK, execute:

docker build -t cntk -f CNTK-GPU-Image/Dockerfile .

O -f <path/to/Dockerfile> argumento é necessário porque alguns patches, comuns tanto para os ficheiros de estival CPU como para os ficheiros de estivadores da GPU, precisam de ser aplicados no código fonte SWIG. Se receber erros que dizem Could not resolve 'archive.ubuntu.com' que terá de fornecer ao Docker os endereços IP dos seus servidores DNS. Primeiro encontre os endereços IP dos seus servidores DNS usando, por exemplo, o comando

nm-tool

ou o comando

nmcli dev show

Digamos que os IPs dos seus servidores DNS são a.b.c.d e x.y.z.w. Então

  • em Ubuntu 15.10 e mais tarde (ou outro Linux que usa sistema) modificar /lib/systemd/system/docker.service para que o daemon do docker seja iniciado com as opções adicionais --dns a.b.c.d --dns x.y.z.w
  • em Ubuntu 15.04 e anterior (ou outro Linux que não usa sistema) editar /etc/default/docker de modo a que a linha
    #DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
    
    não está comentado e contém os endereços IP dos seus servidores DNS.

Nota: algumas empresas bloqueiam servidores DNS públicos como 8.8.8.8 e 8.8.4.4. Pode tentar utilizá-las, mas se o problema persistir, deverá tentar utilizar os endereços IP do servidor DNS relatados por nm-tool/nmcli.

Reinicie o daemon do estivador via

sudo service docker restart

e apagar quaisquer imagens estivas que sejam criadas com as definições de DNS erradas. Para apagar todas as imagens do estivador fazer

docker rmi $(docker images -q)

Para apagar todos os recipientes de estivadores fazer

docker rm $(docker ps -a -q)

Agora tente de novo.

docker build -t cntk -f CNTK-GPU-Image/Dockerfile .

Se tiver uma GPU, vai querer testar se pode acessá-la através de um contentor de estivadores uma vez que tenha construído a imagem. Experimente este comando:

docker run --rm cntk nvidia-smi

Se funcionar, está feito. Se não o fizer, significa que existe um desfasamento entre a versão CUDA e/ou os condutores instalados no seu anfitrião e na sua imagem de estivador CNTK. Em particular, o desfasamento encontra-se entre o módulo de controlador NVidia em modo kernel e o módulo de modo de utilizador (que é uma lib partilhada) e isso acontece se a versão do anfitrião não corresponder exatamente à versão do recipiente. Felizmente, isto é fácil de arranjar. Basta instalar o nvidia-docker e usá-lo exatamente como estivador (não há necessidade de reconstruir a imagem).

nvidia-docker run --rm cntk nvidia-smi

Isto deve funcionar e permite que CNTK utilize a GPU a partir de dentro de um recipiente de estivadores. Se isto não funcionar, procure na secção Questões sobre o GitHub nvidia-docker -- muitas soluções já estão documentadas. Note que se os seus diretórios /usr e /var estiverem em divisórias diferentes, você precisará de alguns passos extras como aqui. Para obter uma concha interativa para um recipiente que não será automaticamente eliminado após a sua saída

nvidia-docker run --name cntk_container1 -ti cntk bash

Se pretender partilhar os seus dados e configurações entre o hospedeiro (a sua máquina ou VM) e o recipiente em que está a utilizar CNTK, utilize a opção -v, por exemplo.

nvidia-docker run --name cntk_container1 -ti -v /project1/data:/data -v /project1/config:/config cntk bash

Isto tornará visível /project1/dados do hospedeiro como /dados no recipiente, e /project1/config como /config. Este isolamento reduz as chances das suas experiências em contentores sobreemo ou usando dados errados.