FEAT: Agent GPU — worker consommateur : exécution des jobs d'analyse reçus du broker #76

Open
opened 2026-08-12 09:46:39 +02:00 by nonobis · 0 comments
Owner

🎯 Contexte

L'agent équipé GPU consomme les jobs publiés (par lui-même ou par d'autres sites), exécute l'inférence YOLO/ONNX et publie le résultat (AnalysisJobCompleted/Failed). C'est le bras qui exécute à distance pour les sites sans GPU.

🔍 État actuel (vérifié dans le code)

FrameAnalyzerService existe côté agent (queue bornée Channel, DropWrite) mais RunInference est un stub et le service n'est pas en DI. Aucun consommateur de file. L'agent n'a aucun accès GPU déclaré (cf. ticket docker GPU).

🧩 À faire

  • Consommateur MassTransit côté agent (IConsumer<AnalysisJobRequested>)
  • Préfetch + max concurrent (backpressure : ne pas noyer le GPU)
  • Brancher sur FrameAnalyzerService réel (une fois le ticket #2 fait) avec le backend GPU si disponible
  • Publication AnalysisJobCompleted (détections, confidence, ms) / AnalysisJobFailed (raison)
  • Mise à jour de la charge locale (CurrentJobs, GpuUtilizationPercent — ticket capacités) pendant l'exécution
  • Métriques : jobs exécutés/s, durée moyenne, échecs
  • Tests : consommer→exécuter→publier (transport in-memory), backpressure

🧪 Critères d'acceptation

  • Un job publié par un site A est exécuté par l'agent GPU du site B et le résultat revient au central
  • La concurrence locale est bornée (pas de surcharge GPU)
  • En cas d'échec, AnalysisJobFailed est publié et le job est retenté puis dead-letté au central
  • make test vert

📁 Fichiers concernés

src/Heimdall.Agent/Consumers/AnalysisJobConsumer.cs (nouveau), src/Heimdall.Agent/Program.cs (DI bus), src/Heimdall.Agent/Services/FrameAnalyzerService.cs, tests/Heimdall.Agent.Tests/

⚠️ Impact

Dépend du broker (ticket 1), de l'inférence réelle (ticket #2), des capacités (heartbeat) et de l'accès GPU (docker).

📝 Notes

Le GPU peut exécuter plusieurs jobs concurrents selon VRAM — le max concurrent doit être paramétrable et respecté.

## 🎯 Contexte L'agent équipé GPU consomme les jobs publiés (par lui-même ou par d'autres sites), exécute l'inférence YOLO/ONNX et **publie le résultat** (`AnalysisJobCompleted`/`Failed`). C'est le bras qui exécute à distance pour les sites sans GPU. ## 🔍 État actuel (vérifié dans le code) `FrameAnalyzerService` existe côté agent (queue bornée Channel, DropWrite) mais `RunInference` est un stub et le service n'est pas en DI. Aucun consommateur de file. L'agent n'a aucun accès GPU déclaré (cf. ticket docker GPU). ## 🧩 À faire - [ ] Consommateur MassTransit côté agent (`IConsumer<AnalysisJobRequested>`) - [ ] Préfetch + max concurrent (backpressure : ne pas noyer le GPU) - [ ] Brancher sur `FrameAnalyzerService` réel (une fois le ticket #2 fait) avec le backend GPU si disponible - [ ] Publication `AnalysisJobCompleted` (détections, confidence, ms) / `AnalysisJobFailed` (raison) - [ ] Mise à jour de la charge locale (CurrentJobs, GpuUtilizationPercent — ticket capacités) pendant l'exécution - [ ] Métriques : jobs exécutés/s, durée moyenne, échecs - [ ] Tests : consommer→exécuter→publier (transport in-memory), backpressure ## 🧪 Critères d'acceptation - [ ] Un job publié par un site A est exécuté par l'agent GPU du site B et le résultat revient au central - [ ] La concurrence locale est bornée (pas de surcharge GPU) - [ ] En cas d'échec, `AnalysisJobFailed` est publié et le job est retenté puis dead-letté au central - [ ] `make test` vert ## 📁 Fichiers concernés src/Heimdall.Agent/Consumers/AnalysisJobConsumer.cs (nouveau), src/Heimdall.Agent/Program.cs (DI bus), src/Heimdall.Agent/Services/FrameAnalyzerService.cs, tests/Heimdall.Agent.Tests/ ## ⚠️ Impact Dépend du broker (ticket 1), de l'inférence réelle (ticket #2), des capacités (heartbeat) et de l'accès GPU (docker). ## 📝 Notes Le GPU peut exécuter plusieurs jobs concurrents selon VRAM — le max concurrent doit être paramétrable et respecté.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#76
No description provided.