Thomas Pedot
vendredi 25 avril 2025
Edge Computing ML: Docker for Jetson Xavier & ARM64
📚 Part of the Cloud Native & DevOps Expertise series
Edge Computing : L'Informatique à la Périphérie
L'edge computing transforme la façon dont nous pensons le traitement des données : traiter où les données sont générées, pas dans le cloud.
Définition
Edge Computing signifie :
- Exécution de calculs sur le dispositif local
- Latence minimale
- Fonctionnement hors ligne
- Préservation de la confidentialité
Le Défi Technique
Contraintes de l'Edge Computing
Sur un NVIDIA Jetson Xavier (ARM64), nos défis :
- Latence : < 100ms
- RAM : Limitée à 32GB
- Puissance : < 20W
- Stockage : Images Docker < 2GB
Architecture Spécifique
NVIDIA Jetson Xavier ≠ Serveur classique x86_64
Différences critiques :
- Architecture ARM64 vs x86_64
- Drivers CUDA spécifiques
- GPU embarqué limité (512 CUDA cores)
- Optimisations hardware uniques
Solution : Conteneurs Docker Optimisés
Multi-Stage Build
DOCKERFILE
1# Stage 1: Builder (compilation des dépendances)
2FROM nvcr.io/nvidia/l4t-ml:r35.2.1-py3 AS builder
3
4# Installer les outils de build
5RUN apt-get update && apt-get install -y \
6 build-essential cmake git
7
8# Compiler TensorFlow from source avec optimisations ARM64
9RUN git clone https://github.com/tensorflow/tensorflow.git && \
10 cd tensorflow && \
11 bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
12
13# Stage 2: Runtime (image minimale)
14FROM nvcr.io/nvidia/l4t-base:r35.2.1
15
16# Copier uniquement les binaires compilés
17COPY /tensorflow/bazel-bin /opt/tensorflow
18
19# Installer les dépendances runtime minimales
20RUN apt-get update && apt-get install -y --no-install-recommends \
21 libcudnn8 libnvinfer8 && \
22 rm -rf /var/lib/apt/lists/*
23
24# Résultat : 1.8GB vs 8GB originalOptimisation TensorRT
PYTHON
1# optimize_model.py
2import tensorflow as tf
3from tensorflow.python.compiler.tensorrt import trt_convert as trt
4
5def optimize_for_jetson(model_path: str, output_path: str):
6 """Optimiser un modèle TensorFlow avec TensorRT pour Jetson."""
7
8 # Charger le modèle
9 model = tf.saved_model.load(model_path)
10
11 # Convertir en TensorRT
12 converter = trt.TrtGraphConverterV2(
13 input_saved_model_dir=model_path,
14 precision_mode=trt.TrtPrecisionMode.FP16, # Précision moitié pour vitesse
15 maximum_cached_engines=100
16 )
17 converter.convert()
18
19 # Sauvegarder le modèle optimisé
20 converter.save(output_path)
21
22 print(f"✅ Modèle optimisé: {model_path} → {output_path}")
23 print(f" Précision: FP16 (2x plus rapide que FP32)")Pipeline d'Inférence Temps Réel
PYTHON
1# inference.py
2import cv2
3import tensorrt as trt
4import numpy as np
5
6class JetsonInference:
7 def __init__(self, model_path: str):
8 self.engine = self.load_engine(model_path)
9 self.context = self.engine.create_execution_context()
10
11 def infer(self, image: np.ndarray) -> List[Detection]:
12 """Exécuter l'inférence sur une image."""
13 start = time.time()
14
15 # Prétraitement
16 input_tensor = self.preprocess(image)
17
18 # Inférence (GPU)
19 outputs = self.context.execute_v2(bindings=[input_tensor])
20
21 # Post-traitement
22 detections = self.postprocess(outputs)
23
24 latence = (time.time() - start) * 1000
25 print(f"Inférence: {latence:.1f}ms")
26
27 return detectionsRésultats Mesurables
YOLOv5 Détection d'Objets
Configuration :
- Input: 1080p @ 30fps
- Latence : 78ms par image (< 100ms cible ✅)
- Précision : mAP 0.89
- Puissance : 14W (< 20W cible ✅)
- Image Docker : 1.8GB (< 2GB cible ✅)
Comparaison Cloud vs Edge
| Métrique | Cloud GPU (A100) | Jetson Xavier Edge |
|---|---|---|
| Latence | 12ms + 80ms réseau = 92ms | 78ms (pas de réseau) ✅ |
| Coût | 2.50$/heure | 500$ unique |
| Hors ligne | ❌ | ✅ |
| Confidentialité | ❌ (données envoyées au cloud) | ✅ (traitement local) |
Related Cloud Native Articles
- Helm Chart Visualization Tool - Maîtriser les dépendances Helm
- ArgoCD + Dagster: Multi-Tenant GitOps - Architecture de déploiement automatisée
Leçons Apprises
- ARM64 ≠ x86_64 : Recompiler depuis les sources
- TensorRT est magique : Accélération 2-3x en précision FP16
- Ordre des layers Docker : Critique pour les temps de build
- Contraintes = Innovation : Limitations forcent l'optimisation
Conclusion
L'edge computing n'est pas qu'une alternative au cloud. C'est une approche qui replace le calcul là où il a le plus de sens : au plus près des données.
Explorez tous mes projets Cloud Native → Cloud Native & DevOps Hub