Como utilizar CUDA no Docker (OpenFace)

Uma das grandes vantagens da utilização de docker é a portabilidade que isso oferece, sendo que você pode transferir uma imagem e/ou container para outra máquina de forma simples. Mas uma das características do docker é o isolamento de processos, e isso pode ser algo que lhe esteja causando uma dor de cabeça inicial para configurar o CUDA no container. Como eu tive que executar esses passos e descobrir algumas coisas até bobas, mas não explícitas, decidi fazer esse artigo para me servir de referência para o próximo container, que certamente será feito em breve.

Configuração inicial

Primeiramente instale o driver de sua placa de video no sistema Linux nativo. É fundamental que a placa esteja devidamente configurada e aparecendo em /dev/nvidia*.

OpenFace

Para quem não conhece, o OpenFace é um conjunto de ferramentas que comporta scripts e uma rede neural (Torch) para fazer reconhecimento facial. Com uma base de 40 pessoas e uma amostragem de 1500 imagens por pessoa, consegui chegar a 100% de confidência no reconhecimento facial. Instale o docker e baixe a imagem do OpenFace seguindo esse tutorial. Mas não execute o treinamento e sequer crie um container ainda caso deseje utilizar CUDA com sua rede neural.

Criar um container





Agora criamos nosso container desse modo:

Aqui estamos liberando as portas TCP 9000 e 8000 para se conectarem ao container a partir de qualquer ponto externo. Seguidamente, dei o nome da placa de video que estou utilizando para o container, assim fica fácil eu saber qual delas está com CUDA. Então começam os pulos-do-gato. “–privileged” e “–cap-add=ALL” são altamente permissívos, dando um grande poder ao container sobre recursos do sistema nativo. Administradores de sistema certamente torcem o nariz para isso, mas desse modo foi possível solucionar o que até então era um problema, pois não dava pra instalar o driver da NVidia e carregar módulos dentro do container. Depois disso você vê o compartilhamento de /dev, para que todos os dispositivos estejam disponíveis dentro do container. Um diretório comum para transferir arquivos do host para o container também foi criado para facilitar a comunicação e “/lib/modules” precisou estar acessível no container. O resto é apenas o básico; nome da imagem e comando.

Instalar CUDA

Procure por esse gigantesco pacote e instale-o. Então siga os passos posteriores. Juntando tudo, fica assim:

Configurando o suporte no OpenFace

Agora serão necessários alguns passos extras para que o Openface funcione a contento. Instale “primeiro” o torch mais novo. Por causa da versão instalada, tive uma série de problemas para concluir a instalação dos pacotes subsequentes, portanto, faça como abaixo para tudo correr com sucesso:

Observe se realmente nenhum pacote falha, porque ainda que falhe o loop seguirá adiante e você poderá não notar.

Executar o treinamento da base de fotos

Agora você pode seguir todos os passos indicados nesse outro artigo para treinar e predizer, mas adicionando “–cuda” logo após o comando. Algo como:

O mesmo para o outro script em lua:

Quando chamar o classifier para fazer o infer, inclua “–cuda” da mesma forma, simples assim. Em meu ambiente utilizando CPU levava 80m55s para treinar uma base com 21 mil fotos. Com a GPU levou 1m2s!!! Vale muito a pena utilizar uma GPU, ainda mais se for uma GTX1080, utilizada de maneira tão “esnobe por gamers”. Brincadeira, também gosto de jogos.




Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.