Pular para o conteúdo principal

Primeiros Passos com Docker

Esta é uma republicação do blog escrito por Ajeet em collabnix.com. Todos os créditos vão para ele.

Na semana passada, tive a sorte de ter acesso pela primeira vez ao mais recente dispositivo de borda de IA Seeed Studio reComputer J1020. O reComputer J1020 é alimentado pelo kit de desenvolvimento Jetson Nano. É um pequeno e poderoso computador do tamanho da palma da mão que traz o poder da IA moderna para desenvolvedores embarcados. Este pequeno dispositivo de US$ 259 é construído em torno do módulo de sistema NVIDIA Jetson Nano e projetado para aplicações de Edge AI. Este dispositivo permite executar várias redes neurais em paralelo para aplicações como classificação de imagens, detecção de objetos, segmentação e processamento de fala. Com ricos módulos de extensão, periféricos industriais e gerenciamento térmico, o reComputer J1020 está pronto para ajudar você a acelerar e escalar o produto de IA de próxima geração, implantando modelos DNN populares e frameworks de ML na borda e fazendo inferência com alto desempenho, para tarefas como classificação e detecção de objetos em tempo real, estimação de pose, segmentação semântica e processamento de linguagem natural (NLP).

O que há de único no reComputer J1020?

Seeed Studio reComputer J1020 vem com tudo o que você precisa para começar a construir sua aplicação baseada em IA. Em comparação com o kit de desenvolvimento Jetson Nano fornecido pela NVIDIA, ele não requer gravar o sistema operacional em um cartão SD do zero. Ele vem com o sistema operacional Ubuntu já pré-instalado em um eMMC de 16 GB. O reComputer com Jetpack 4.6 pré-instalado inclui um pacote de suporte à placa (BSP), sistema operacional Linux, NVIDIA CUDA, cuDNN e bibliotecas de software TensorRT para aprendizado profundo, visão computacional, computação em GPU, processamento multimídia, etc. Ele suporta toda a pilha de software Jetson e várias ferramentas de desenvolvedor para construir aplicações de IA rápidas e robustas fornecidas pelos parceiros Seeed Edge AI.

Alguns recursos notáveis incluem

  • 128 núcleos NVIDIA CUDA® – fornecem 0,5 TFLOPs (FP16) para executar frameworks e modelos de IA para aplicações como classificação de imagens, detecção de objetos, segmentação e processamento de fala.
  • Equipado com processador Armv8
  • Vem com NVIDIA Tegra X1(nvgpu)/Integrado
  • Tamanho de disco de 16GB
  • Memória de 4GB
  • Sistema operacional de 64 bits
  • Ubuntu 18.04.5
  • Seeed Studio reComputer vem com o sistema JetPack 4.6 já instalado
  • Você não precisa gravar um cartão SD, ele vem com o sistema operacional já instalado
  • Suporte a CUDA 10.2.300
  • Arquitetura CUDA: 5.3
  • Versão do OpenCV: 4.1.1

Saiba mais sobre o Layout de Hardware do reComputer

Componentes do reComputer

Ele vem com a seguinte lista de partes:

  • NVIDIA Jetson Nano x1
  • Placa Carrier de Referência Seed x1
  • Dissipador de calor passivo de alumínio x1
  • Gabinete de alumínio x1
  • Adaptador de energia 12V x1
  • 4x portas USB 3.0
  • 2x portas HDMI
  • Conector de câmera MIPI-CSI
  • Header de controle e UART
  • Header de expansão de 40 pinos (GPIO, I2C, Header)
  • SODIMM de 260 pinos
  • MicroUSB
  • Porta Ethernet Gigabit
  • Luzes LED

Configuração de Hardware

Para começar, você precisará ter os conectores mínimos abaixo em uso:

  • Cabo de energia
  • Módulo Wi-Fi / Cabo Ethernet Gigabit
  • Receptor USB para teclado e mouse Wi-Fi
  • Conectividade HDMI com seu monitor

Executando CUDA deviceQuery

cd /usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

Aqui estão os resultados:

./deviceQuery Starting...

CUDA Device Query (Runtime API) version (CUDART static linking
Detected 1 CUDA Capable device(s)

Device 0: "NVIDIA Tegra X1"
CUDA Driver Version / Runtime Version 10.2 / 10.2
CUDA Capability Major/Minor version number: 5.3
Total amount of global memory: 3956 MBytes (4148273152 bytes)
( 1) Multiprocessors, (128) CUDA Cores/MP: 128 CUDA Cores
GPU Max Clock rate: 922 MHz (0.92 GHz)
Memory Clock rate: 13 Mhz
Memory Bus Width: 64-bit
L2 Cache Size: 262144 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: Yes
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device supports Compute Preemption: No
Supports Cooperative Kernel Launch: No
Supports MultiDevice Co-op Kernel Launch: No
Device PCI Domain ID / Bus ID / location ID: 0 / 0 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.2, CUDA Runtime Version = 10.2, NumDevs = 1

Result = PASS

Executando Docker no reComputer Jetson Nano

Docker é um conjunto de ferramentas de desenvolvimento de software para criar, compartilhar e executar contêineres individuais. É uma plataforma de conteinerização que empacota sua aplicação e todas as suas dependências juntas na forma de um contêiner Docker para garantir que sua aplicação funcione perfeitamente em qualquer ambiente. Um contêiner Docker é uma unidade padronizada que pode ser criada sob demanda para implantar uma aplicação ou ambiente específico.

Desenvolver qualquer tipo de aplicação hoje é complexo. É muito mais do que escrever código. Há uma infinidade de linguagens de programação, frameworks web, arquiteturas complexas e interfaces descontínuas entre ferramentas para cada estágio do ciclo de vida, o que cria uma complexidade enorme. O Docker simplifica e acelera seu fluxo de trabalho, ao mesmo tempo em que dá aos desenvolvedores a liberdade de inovar com a sua escolha de ferramentas, pilhas de aplicações e ambientes de implantação para cada projeto. Ele permite separar suas aplicações da sua infraestrutura para que você possa entregar software rapidamente.

Docker é oficialmente suportado no reComputer J1020, um kit de desenvolvimento alimentado por Jetson Nano. O kit vem com a versão mais recente do Docker pré-instalada por padrão. Você pode verificar a versão do Docker executando o seguinte comando:

sudo docker version

Client: Docker Engine - Community
Cloud integration: v1.0.25
Version: 20.10.17
API version: 1.41
Go version: go1.17.11
Git commit: 100c701
Built: Mon Jun 6 23:02:19 2022
OS/Arch: linux/arm64
Context: default
Experimental: true


Server: Docker Engine - Community
Engine:
Version: 20.10.17
API version: 1.41 (minimum version 1.12)
Go version: go1.17.11
Git commit: a89b842
Built: Mon Jun 6 23:00:46 2022
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.6
GitCommit: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
runc:
Version: 1.1.2
GitCommit: v1.1.2-0-ga916309
docker-init:
Version: 0.19.0
GitCommit: de40ad0

Instalando o Docker Compose

O reComputer Jetson não vem com Docker Compose instalado. Você pode seguir as etapas abaixo para instalar o Docker Compose no seu sistema:

export DOCKER_COMPOSE_VERSION=2.6.0
sudo apt-get install libhdf5-dev
sudo apt-get install libssl-dev
sudo pip3 install docker-compose=="${DOCKER_COMPOSE_VERSION}"
apt install python3
apt install python3-pip
pip install docker-compose

Instalar a versão mais recente do kit de ferramentas CUDA

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/sbsa/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda-repo-ubuntu1804-11-3-local_11.3.1-465.19.01-1_arm64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-3-local_11.3.1-465.19.01-1_arm64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-3-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

Verificar o runtime do Docker

docker info | grep runtime

Runtimes: nvidia runc io.containerd.runc.v2 io.containerd.runtime.v1.linuxs

Executando seu primeiro contêiner Python

Vamos testar uma imagem Docker Python simples baseada em Arm executando o comando abaixo:

sudo docker run arm64v8/python:slim ls

Monitorando CPU, GPU e Memória usando o contêiner Docker JTOP

Nesta seção, você verá como configurar um utilitário de monitoramento do sistema para monitorar CPU, RAM e GPU. Usaremos o utilitário JTOP. Jtop é um utilitário de monitoramento de sistema que roda no terminal e vê e controla em tempo real o status do seu kit reComputer Jetson Nano, status e frequência de CPU, RAM e GPU. Você verá como pode conteinerizar o utilitário. Vamos começar –

Primeiro, crie um Dockerfile com o seguinte conteúdo:

FROM python:3-alpine

RUN apk update \

&& apk --no-cache add bash \

&& pip install jetson-stats \

&& rm -rf /var/cache/apk/*

A primeira linha mostra que escolhemos python:3-alpine como imagem base. A segunda linha instala jetson-stats e pacotes dependentes

Construindo a imagem Docker do JTOP

Use o CLI do Docker build para construir a imagem Docker

docker build -t ajeetraina/jetson-stats-nano .

Executando o contêiner Docker JTOP

Agora é hora de executar o contêiner Docker passando –gpus como parâmetro e montando-o no socket do jtop.

docker run --rm -it --gpus all -v /run/jtop.sock:/run/jtop.sock ajeetraina/jetson-stats-nano jtop

Você verá os seguintes resultados:

Em nosso próximo post no blog, veremos como implementar identificação de veículos usando OpenDatacam rodando dentro de um contêiner Docker. Fique ligado!

Confira o seguinte exemplo de aplicação com tutoriais!

Siga Ajeet em:

Suporte Técnico & Discussão sobre Produtos

Obrigado por escolher nossos produtos! Estamos aqui para lhe oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...