Guide til ‘Jetson Nano’-opsætning

Kristian Tølbøl
Computer Vision Corner
5 min readDec 18, 2020

Jetson Nano er til sin pris på ca. 1.100 kr en priseffektiv edge-computer, som er særligt udviklet til deep learning. Den giver mulighed for at anvende dybe neurale netværk i situationer, hvor cloud-løsninger ikke kan bruges, f.eks. pga. manglende internetadgang, eller sikkerheds- og GDPR-hensyn. Jetson Nano er stadig under udvikling, og selvom der kan være mange veje til samme mål, er der også mange mere eller mindre udokumenterede vejbump undervejs. Denne guide er tænkt som en vejviser, så man forhåbentlig kan styre uden om de værste forhindringer på vejen til en Jetson Nano, der kan køre custom Docker-billeder med GPU-acceleration.

Jetson Nano er en edge-computer på størrelse med en hånd, som egner sig til deep learning. (kilde: nvidia.com)

Anskaffelse

  • Man kan købe et kit, som DLI Kit for Jetson Nano. Bemærk, at det medfølgende stik ikke passer til EU-lysnet, så bestil også en adapter eller et andet kabel (samme kabel bruge bl.a. til mange printere, så måske har du ét i forvejen).
  • Hvis man i forvejen har webkamera og et tomt micro-SD-kort (på min. 32 GB), kan man sådan set fint nøjes med NVIDIA Jetson Nano Developer Kit (V3) samt strømforsyning.
  • Man skal dog sørge for at man har en ekstra jumper (eller improvisere én) til force recovery, for at kunne flashe med Nvidia SDK Manager (hvilket er nødvendigt for dependencies).
  • Det micro-USB kabel der fulgte med i kittet var i vores tilfælde defekt, så overvej at bestille et andet med i samme forsendelse, med mindre du har et ekstra.
  • Til første opsætning er det en fordel at kunne koble mus, tastatur samt skærm med HDMI-kabel til Jetson Nano.
  • For at kunne flashe med SDK Manager, skal man desuden bruge en anden PC (her kaldet “host PC”, det antages i det følgende at denne kører Ubuntu 18.04)

Opsætning

Forbered SD-kortet

  1. Download Nvidia SDK Manager på host-PC’en (kræver Nvidia login) og installér SDK Manager via sudo dpkg -i ./sdkmanager_1.2.0-6733_amd64.deb (udskift filnavnet om nødvendigt). Det var i vores tilfælde desuden nødvendigt at køre `sudo apt — fix-broken install` og prøve igen.
    Bemærk: Hvis man bare flasher med Jetson Nano SD Card Image, som guiden ellers foreslår, kan man se frem til at skulle flashe igen senere for at få alle dependencies på plads. Så start med at bruge Nvidia SDK Manager fra starten.
  2. Åbn SDK Manager ved at skrive sdkmanager i terminalen, vælg target board, og tryk videre for at downloade de nødvendige komponenter. Dobbelt-tjek, at Nvidia Container Runtime er valgt. Vælg “download and install later”.
    Bemærk: Hvis man bare flasher med SDK Manager og følger instrukserne, kommer man til at stå med et SD-kort, hvis hovedpartition er på 14 GB, og som ikke kan resizes, uanset SD-kortets størrelse. Dette er nævnt under “known issues” i release notes, men betyder, at der ikke er nok plads til, at man kan hente Docker images ned, og så må man flashe forfra. Disse instruktioner bør dog omgå dette problem.
  3. Der bør på host-PC’en findes et script $HOME/nvidia/nvidia_dsk/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/tools/jetson-disk-image-creator.sh (bemærk at stien kan være blevet anderledes siden dette blev skrevet), som gør det muligt at skrive diskbilledet fra SDK Manager til en .img-fil.
  4. Man kan nu bruge Balena Etcher til at skrive til et SD-kort fra host-PC’en.
  5. Derefter kan partitionen resizes med gparted (sudo apt install gparted, hvis gparted ikke allerede haves), hvorved den fulde kapacitet kan udnyttes.

Flash Jetson Nano

  1. Sæt SD-kortet i Jetson Nano (kortlæseren sidder under heatsink-boardet, modsat USB-portene).
  2. Jetson Nano har en power select jumper som ikke nævnes i quick-start guiden, og hvis man ikke flytter jumperen, giver strømforsyningen ikke strøm. Sæt jumperen på power select pin, for at give den strøm fra barrel connector’en. Ift. jumper-placering skal man vide, om man har en B01-revision af board’et (det havde vi) — som beskrevet i Jetson Nano Developer Kit User Guide.
    Bemærk: Man kan godt køre Jetson Nano med en officiel Raspberry Pi-strømforsyning (der kan levere 2A stabilt), men man kan ikke flashe med SDK Manager, hvis der trækkes strøm fra Micro-USB. Derfor er strømforsyningen nødvendig.
  3. Herefter skal SDK Manager flashe, men vær opmærksom på at fravælge Jetson OS, for at være sikker på ikke at overskrive og genpartitionere SD-kortet.
  4. For at flashe med SDK Manager skal man nu sætte en ekstra jumper på Jetson Nano pin 9 og 10 (for force recovery).
  5. Tilslut Jetson Nano til host pc via micro-USB.
  6. Sæt strøm på Jetson Nano via barrel connector (efter at power select jumper er sat på, beskrevet ovenfor).
  7. Vent 1 sekund,
  8. Fjern force recovery-jumperen.
  9. Derefter bør der ses en “nvidia”-device hvis man på host-PC’en skriver lsusb i en terminal. Man kan nu flashe via SDK Manager, hvorefter Jetson Nano er klar til brug.

Opsæt Nvidia-Docker

Nvidia Jetpack inkluderer Docker, men overraskende nok uden support for Nvidia Docker. For at installere dette, følges på Jetson Nano følgende trin (fra Nvidias Github-side):

sudo apt install curl
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

Genstart derefter Jetson Nano, og tjek at Docker med gpu er installeret: docker run --gpus all hello-world

Tips

  • Jetson Nano kræver særlige baseimages, som ikke kan køre på en almindelig PC. For at teste, kan du f.eks. køre:
docker run — rm -it — gpus all nvcr.io/nvidia/l4t-pytorch:r32.4.3-pth1.6-py3 python3 -c print(‘Number of CUDA Devices:’, torch.cuda.device_count())
  • Jetson Zoo er i det hele taget en god ressource, hvor ovenstående Docker-image til Jetson med PyTorch er fundet.
  • Man kan ssh’e ind via USB-kablet til bruger-navn@192.168.55.1
  • Hvis man oplever langsomme predictions, kan det være nødvendigt at oversætte til TensorRT.

Resultatet af ovenstående guide bør være en Jetson Nano, som har alle de nødvendige afhængigheder, og som kan køre ens egne Docker-billeder med GPU-acceleration, f.eks. til at give deep learning prædiktioner i realtid. Held og lykke!

--

--