Salta para o conteúdo

Guia de início rápido do Docker para Ultralytics

Ultralytics Visual do pacote Docker

Este guia serve como uma introdução abrangente à configuração de um ambiente Docker para seus projetos Ultralytics . O Docker é uma plataforma para desenvolver, enviar e executar aplicativos em contêineres. É particularmente benéfico para garantir que o software será sempre executado da mesma forma, independentemente de onde for implantado. Para obter mais detalhes, visita o repositório do Docker Ultralytics no Docker Hub.

Versão da imagem do Docker Docker Pulls

O que vais aprender

  • Configura o Docker com suporte para NVIDIA
  • Instalar imagens do Ultralytics Docker
  • Executar Ultralytics num contentor Docker com suporte para CPU ou GPU
  • Usando um servidor de exibição com Docker para mostrar os resultados da deteção de Ultralytics
  • Montagem de directórios locais no contentor

Pré-requisitos

  • Certifica-te de que o Docker está instalado no teu sistema. Se não estiver, podes transferi-lo e instalá-lo a partir do site do Docker.
  • Certifica-te de que o teu sistema tem um controlador NVIDIA GPU e NVIDIA instalados.

Configura o Docker com o suporte NVIDIA

Primeiro, verifica se os controladores NVIDIA estão corretamente instalados, executando:

nvidia-smi

Instalando o NVIDIA Docker Runtime

Agora, vamos instalar o tempo de execução do Docker NVIDIA para habilitar o suporte a GPU em contêineres do Docker:

# Add NVIDIA package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(lsb_release -cs)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# Install NVIDIA Docker runtime
sudo apt-get update
sudo apt-get install -y nvidia-docker2

# Restart Docker service to apply changes
sudo systemctl restart docker

Verifica o tempo de execução de NVIDIA com o Docker

Corre docker info | grep -i runtime para garantir que nvidia aparece na lista de tempos de execução:

docker info | grep -i runtime

Instalando Ultralytics Imagens Docker

Ultralytics oferece várias imagens Docker optimizadas para várias plataformas e casos de utilização:

  • Dockerfile: GPU imagem, ideal para formação.
  • Dockerfile-arm64: Para a arquitetura ARM64, adequada para dispositivos como o Raspberry Pi.
  • Dockerfile-cpu: CPU Versão exclusiva para ambientes de inferência e nãoGPU .
  • Dockerfile-jetson: Optimizado para NVIDIA dispositivos Jetson.
  • Dockerfile-python: Ambiente mínimo Python para aplicações leves.
  • Dockerfile-conda: Inclui o pacote Miniconda3 e Ultralytics instalado via Conda.

Para obteres a imagem mais recente:

# Set image name as a variable
t=ultralytics/ultralytics:latest

# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $t

Executa Ultralytics no Docker Container

Vê aqui como executar o contentor Docker Ultralytics :

Utilizando apenas o CPU

# Run with all GPUs
sudo docker run -it --ipc=host $t

Utilizar GPUs

# Run with all GPUs
sudo docker run -it --ipc=host --gpus all $t

# Run specifying which GPUs to use
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t

O -it atribui um pseudo-TTY e mantém o stdin aberto, permitindo-te interagir com o contentor. O sinalizador --ipc=host permite a partilha do espaço de nomes IPC do anfitrião, essencial para a partilha de memória entre processos. O sinalizador --gpus permite que o contentor aceda às GPUs do anfitrião.

Executa Ultralytics no Docker Container

Vê aqui como executar o contentor Docker Ultralytics :

Utilizando apenas o CPU

# Run with all GPUs
sudo docker run -it --ipc=host $t

Utilizar GPUs

# Run with all GPUs
sudo docker run -it --ipc=host --gpus all $t

# Run specifying which GPUs to use
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t

O -it atribui um pseudo-TTY e mantém o stdin aberto, permitindo-te interagir com o contentor. O sinalizador --ipc=host permite a partilha do espaço de nomes IPC do anfitrião, essencial para a partilha de memória entre processos. O sinalizador --gpus permite que o contentor aceda às GPUs do anfitrião.

Nota sobre a acessibilidade dos ficheiros

Para trabalhar com ficheiros na tua máquina local dentro do contentor, podes utilizar os volumes Docker:

# Mount a local directory into the container
sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container $t

Substitui /path/on/host com o caminho do diretório na tua máquina local e /path/in/container com o caminho desejado dentro do contentor Docker.

Executa aplicações de interface gráfica do utilizador (GUI) num contentor Docker

Altamente experimental - o utilizador assume todos os riscos

As instruções a seguir são experimentais. Partilhar um socket X11 com um contentor Docker apresenta potenciais riscos de segurança. Portanto, é recomendável testar essa solução apenas em um ambiente controlado. Para obter mais informações, consulta estes recursos sobre como utilizar xhost(1)(2).

O Docker é usado principalmente para colocar em contêineres aplicativos em segundo plano e programas CLI , mas também pode executar programas gráficos. No mundo Linux, dois servidores gráficos principais lidam com a exibição gráfica: X11 (também conhecido como X Window System) e Wayland. Antes de começar, é essencial determinar qual o servidor gráfico que estás a utilizar atualmente. Executa este comando para descobrir:

env | grep -E -i 'x11|xorg|wayland'

A instalação e configuração de um servidor de ecrã X11 ou Wayland está fora do âmbito deste guia. Se o comando acima não retornar nada, então terás de começar por pôr qualquer um deles a funcionar no teu sistema antes de continuar.

Executando um Docker Container com uma GUI

Exemplo

Utiliza GPUs
If you're using [GPUs](#using-gpus), you can add the `--gpus all` flag to the command.

Se estiveres a utilizar o X11, podes executar o seguinte comando para permitir que o contentor Docker aceda ao socket X11:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host $t

Este comando define o DISPLAY para o ecrã do anfitrião, monta o socket X11 e mapeia a variável de ambiente .Xauthority para o contentor. O ficheiro xhost +local:docker permite que o contentor Docker aceda ao servidor X11.

Para Wayland, utiliza o seguinte comando:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host $t

Este comando define o DISPLAY para a tela do host, monta o soquete Wayland e permite que o contêiner Docker acesse o servidor Wayland.

Usando o Docker com uma GUI

Agora podes apresentar aplicações gráficas dentro do teu contentor Docker. Por exemplo, podes executar o seguinte comandoCLI para visualizar as previsões de um modeloYOLOv8 :

yolo predict model=yolov8n.pt show=True
Testes

Uma forma simples de validar que o grupo Docker tem acesso ao servidor X11 é executar um contentor com um programa GUI como xclock ou xeyes. Alternativamente, também podes instalar estes programas no contentor Ultralytics Docker para testar o acesso ao servidor X11 do teu servidor de visualização GNU-Linux. Se tiveres algum problema, considera definir a variável de ambiente -e QT_DEBUG_PLUGINS=1. A definição desta variável de ambiente permite a saída de informações de depuração, ajudando no processo de resolução de problemas.

Quando terminares com a GUI do Docker

Revogar o acesso

Em ambos os casos, não te esqueças de revogar o acesso do grupo Docker quando terminares.

xhost -local:docker
Queres ver os resultados das imagens diretamente no Terminal?

Consulta o seguinte guia para ver os resultados da imagem utilizando um terminal


Parabéns! Agora estás preparado para usar Ultralytics com o Docker e pronto para tirar partido das suas poderosas capacidades. Para métodos de instalação alternativos, fica à vontade para explorar a documentação de início rápido doUltralytics .

FAQ

Como é que configuro Ultralytics com o Docker?

Para configurar Ultralytics com o Docker, primeiro certifica-te de que o Docker está instalado no teu sistema. Se tiveres um NVIDIA GPU , instala o tempo de execução do Docker NVIDIA para ativar o suporte GPU . Em seguida, extrai a imagem mais recente do Ultralytics Docker do Docker Hub usando o seguinte comando:

sudo docker pull ultralytics/ultralytics:latest

Para obter etapas detalhadas, consulta o nosso Guia de início rápido do Docker.

Quais são as vantagens de utilizar imagens Ultralytics Docker para projectos de aprendizagem automática?

Usando Ultralytics imagens Docker garante um ambiente consistente em diferentes máquinas, replicando o mesmo software e dependências. Isto é particularmente útil para colaborar entre equipas, executar modelos em vários hardwares e manter a reprodutibilidade. Para treinamento baseado em GPU, Ultralytics fornece imagens Docker otimizadas, como Dockerfile para utilização geral GPU e Dockerfile-jetson para NVIDIA dispositivos Jetson. Explora Ultralytics Docker Hub para mais pormenores.

Como posso executar Ultralytics YOLO num contentor Docker com suporte para GPU ?

Primeiro, certifica-te de que o tempo de execução do NVIDIA Docker está instalado e configurado. Em seguida, usa o seguinte comando para executar Ultralytics YOLO com o suporte de GPU :

sudo docker run -it --ipc=host --gpus all ultralytics/ultralytics:latest

Esse comando configura um contêiner do Docker com acesso GPU . Para obter detalhes adicionais, consulte o Guia de início rápido do Docker.

Como é que visualizo os resultados da previsão de YOLO num contentor Docker com um servidor de visualização?

Para visualizar os resultados da previsão YOLO com uma GUI num contentor Docker, é necessário permitir que o Docker aceda ao seu servidor de visualização. Para sistemas que executam o X11, o comando é:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host ultralytics/ultralytics:latest

Para sistemas com Wayland, utiliza:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host ultralytics/ultralytics:latest

Podes encontrar mais informações na secção Executar aplicações de interface gráfica do utilizador (GUI) num contentor Docker.

Posso montar directórios locais no contentor Docker Ultralytics ?

Sim, podes montar directórios locais no contentor Docker Ultralytics utilizando o comando -v bandeira:

sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest

Substitui /path/on/host com o diretório na tua máquina local e /path/in/container com o caminho desejado dentro do contentor. Esta configuração permite-te trabalhar com os teus ficheiros locais dentro do contentor. Para mais informações, consulta a secção relevante sobre montagem de directórios locais.



Criado em 2023-11-12, Atualizado em 2024-07-05
Autores: glenn-jocher (7), Burhan-Q (1), jpedrofonseca_94@hotmail.com (1)

Comentários