feat(p1g): device policy GPU/CPU paramétrable pour la cascade vision
resolve_device(auto/cuda/cpu) avec garde-fou VRAM et fallback CPU propre.
Bascule EasyOCR/SoM/docTR sur GPU si VRAM libre, rollback env sans toucher au code.
- core/gpu/device_policy.py (nouveau) : resolve_device + garde-fou VRAM (max_total_gb)
- core/detection/som_engine.py, core/llm/ocr_extractor.py,
agent_v0/server_v1/resolve_engine.py : câblage device auto (35 lignes)
- tests/unit/test_device_policy.py : 15 tests (verts venv réel)
Rollback sans toucher au code : RPA_VISION_DEVICE=cpu (force CPU global) / RPA_EASYOCR_GPU=0.
Bench GPU réel (latence) + activation large après verdict Qwen. QG Qwen deja valide sur le patch.
Mergé depuis worktree agent-a4f390f410e00ad7c (base 5b2afa362), 3 fichiers cibles non modifiés
dans le principal (zéro écrasement), dry-run apply propre.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -89,8 +89,11 @@ class SomResult:
|
||||
class SomEngine:
|
||||
"""Moteur Set-of-Mark : YOLO + docTR + annotation."""
|
||||
|
||||
def __init__(self, device: str = "cuda"):
|
||||
self._device = device
|
||||
def __init__(self, device: str = "auto"):
|
||||
# Résolution paramétrable avec garde-fou VRAM (cf. core/gpu/device_policy).
|
||||
# "auto" → cuda si VRAM libre suffisante (VLM sur DGX distant), sinon cpu.
|
||||
from core.gpu.device_policy import resolve_device
|
||||
self._device = resolve_device(device)
|
||||
self._yolo = None
|
||||
self._ocr = None
|
||||
self._loaded = False
|
||||
@@ -300,8 +303,12 @@ _shared_engine: Optional[SomEngine] = None
|
||||
_shared_lock = __import__("threading").Lock()
|
||||
|
||||
|
||||
def get_shared_engine(device: str = "cpu") -> Optional[SomEngine]:
|
||||
"""Singleton SomEngine partagé entre tous les modules."""
|
||||
def get_shared_engine(device: str = "auto") -> Optional[SomEngine]:
|
||||
"""Singleton SomEngine partagé entre tous les modules.
|
||||
|
||||
device="auto" (défaut) délègue à core.gpu.device_policy.resolve_device :
|
||||
cuda si la VRAM locale est libre, cpu sinon. Passer "cpu" force le CPU.
|
||||
"""
|
||||
global _shared_engine
|
||||
if _shared_engine is None:
|
||||
with _shared_lock:
|
||||
|
||||
Reference in New Issue
Block a user