Prise en main du Jetson Nano

By 22 mars 2020mai 4th, 2020VeoNews

La carte Jetson Nano est un mini ordinateur pour le déploiement d’application d’Intelligence Artificielle dans des systèmes embarqués compacts à faible coût (109€) et basse consommation (5-10W).

En terme de spécifications techniques, la carte est équipée d’un GPU architecture NVIDIA Maxwell™ avec 128 cœurs NVIDIA CUDA® et un CPU quad-core ARM® Cortex®-A57 MPCore. La carte a une mémoire vive de 4Go 64-bit LPDDR4.

Il faut ajouter une microSD pour avoir une mémoire de stockage. Pour cela, il est nécessaire de flasher une image sur une microSD UHS-1 (non fourni). Considérez donc que la Nano n’est pas équipée d’une mémoire dédiée – la carte SD est tout ce que vous aurez. Assurez-vous donc d’en utiliser une qui soit de taille suffisante et rapide ! Ici les recommandations varient avec le tutoriel de base qui recommande 16Go minimum et le cours du Deep Learning Institute Nvidia qui en recommande une de 32Go. En fonction, l’image fera 13 ou 20Go dézippée, je recommande donc une carte de 32Go pour assurer les deux cas.

Jetson Nano est équipé de nombreux connecteurs notamment 4 ports USB (1x 3.0 et 3x 2.0), HDMI, Ethernet ou encore des connecteurs de caméra MIPI CSI-2 (compatible avec le module de caméra Raspberry Pi v2).

Il existe plusieurs façons d’alimenter la carte, soit par le connecteur coaxial 2.1mm 5V 4A (J25 sur le schéma ci-dessous) ou par le port microUSB 5V 2A (J28). On change de configuration à l’aide du pont de court-circuit (J48), la présence de celui-ci pour l’utilisation du connecteur axial et l’absence pour le microUSB.

Dans les deux cas, les câbles d’alimentation ne sont pas fournis et doivent être achetés séparément, on regrettera que l’un des deux ne vienne pas avec la carte ou du moins soit facilement achetable en complément.  Voici une liste des composants supportés par la Jetson Nano. Il est fortement recommandé d’avoir les deux types de câbles pour utiliser la carte de la meilleure façon, l’énergie en entrée micro USB étant insuffisante dans de nombreux cas.

En effet, par défaut l’état de consommation d’énergie est en mode 0 c’est-à-dire 10W uniquement pour la carte en elle-même. Dès qu’un périphérique est branché, par exemple sur un port USB, la carte ne fonctionne plus. Une solution est donc de changer l’état de consommation en mode 1 (5W) avec la commande suivante mais il y a une perte de performance. sudo nvpmodel -m 1 Le solution optimale est donc d’utiliser le câble coaxial pour alimenter la Jetson Nano.

Jetson Nano est livré avec la stack Nvidia via le JetPack SDK qui contient un OS, TensorRT, CUDA et autres fonctions. Cette carte est également compatible avec des framework de Deep Learning open source tel que Tensorflow, PyTorch, Caffe et mxnet.

Configuration

Attention, il s’agit ici d’étapes spécifiques au Jetson Nano, pour les autres cartes Jetson (AGX, TX2, …) la configuration se fait par le SDK Manager.

En premier lieu, il faut télécharger l’image NVIDIA DLI AI Jetson Nano SD Card Image du fait de sa taille (environ 7Go compressé). L’image est ici celle du cours du Deep Learning Institute de Nvidia et est donc différente de celle du tutoriel de base car vient avec des modules pré-installés.

Ensuite, il faut écrire l’image de JetCard sur la carte microSD.

Pour Linux, nous vous proposons deux méthodes, en graphique avec Etcher ou bien en lignes de commande.

Etcher

  1. Télécharger, installer et lancer Etcher
  2. Cliquer sur “Select Image” et choisissez l’image télécharger précédemment.
  3. Insérer la carte microSD (Etcher sélectionne automatiquement la carte microSD comme cible si il n’y a pas d’autres lecteurs externes)
  4. Cliquez sur « Flash » ! Votre système d’exploitation peut vous demander votre nom d’utilisateur et votre mot de passe avant de permettre à Etcher de continuer.
    Il faudra 10 à 15 minutes à Etcher pour écrire et valider l’image si votre carte microSD est connectée via USB3.

Lignes de commande

  1. Insérer la carte microSD puis taper une commande comme la suivante pour noter quel périphérique de disque lui a été attribué. dmesg | tail | awk '$3 == "sd" {print}'  Ou simplement df
  2. Taper ensuite simplement la commande suivante en prenant garde à spécifier le bon disque <x> pour écrire l’image sur la microSD. /usr/bin/unzip -p ~/Downloads/ainano_v1-1-1_20GB_200203.zip | sudo /bin/dd of=/dev/sd<x> bs=4M status=progress && sync
  3. Ne pas oublier d’éjecter proprement le disque avec la commande suivante. sudo eject /dev/sd<x>

Setup et lancement

Il existe deux modes d’utilisation du Jetson Nano : le mode head less  et le mode standalone.

Le mode headless est l’utilisation sans écran, clavier et souris depuis une machine hôte. La carte est alimentée par le câble coaxial et branchée à la machine hôte par le port microUSB. Attention à ne pas oublier de placer le pont J18. Il faut ensuite connecter la carte par USB à la machine hôte.

On peut alors accéder à un Jupyter Lab via l’adresse 192.168.55.1:8888. En cas d’échec, il peut être nécessaire de vérifier la configuration de sa machine hôte

Le mode indépendant (standalone) correspond quant à lui à une utilisation normal avec clavier, écran et souris. Un utilisateur dlinano est configuré par défaut avec pour mot de passe dlinano (attention le clavier est en qwerty! Et ce à chaque démarrage si la configuration du clavier n’est pas modifié). On accède alors une interface graphique Ubuntu classique.

Pour information, l’installation de certaines librairies python peuvent prendre beaucoup de temps car les images basées sur la distribution linux de Nvidia et l’architecture du processeur de la carte ne sont pas nécessairement disponibles. C’est pourquoi, lors des installations en utilisant python pip, ceux-ci sont compilés à partir des fichiers sources.

Utilisation de la caméra Raspberry Pi v2

Rien de plus simple, il suffit de la brancher sur le connecteur de caméra (les broches vers l’intérieur de la carte et la partie bleue vers l’extérieur) puis de lancer le notebook csi_camera.ipynb embarqué avec la distribution (dossier nvdli-nano). Ça fonctionne !

Nvidia propose une interface de caméra python facile à utiliser via Jetcam , déjà pré-installé sur le système qui permet de travailler avec diverses caméras USB et CSI.

Et l’IA dans tout ça ?

L’atout de ce mini ordinateur est la présence d’une carte graphique qui permet de faire du traitement d’images. Il s’agit principalement de faire l’inférence d’image et non de l’entraînement de modèles, ce qui serait trop lourd pour une carte comme celle-ci.

L’OS est livré avec des notebooks basiques directement utilisables (dans le dossier nvdli-nano) pour faire de la classification d’images (émotions, pouce levé ou non, …) ou de la régression (position des yeux, du nez, …). Mais également avec de nombreuses librairies tel que Pytorch ou Tensorflow pour exploiter les capacités de l’apprentissage profond.

Du fait de la puissance du Jetson Nano, les projets restent donc assez simples et permettent principalement de résoudre des problèmes d’inférences en embarqué.

Mon avis

Carte intéressante dans le même genre que le Raspberry Pi avec une meilleure capacité de traitement d’images pour mettre en place des projets IA embarqués à moindre coût. Facile d’utilisation pour les projets pré-installés mais quelques soucis quand il faut installer des nouveaux packages python qui doivent être compilés.