Datatoy Logo

Workers avec état

Un modèle ML par worker, chargé une seule fois

`.class_task(MyClass, MyClass.method, args)` instancie `MyClass` une seule fois par worker. L'instance persiste entre les items — parfait pour les modèles ML, les connexions BDD, les accumulateurs.

python
from olympipe import Pipeline
from transformers import pipeline as hf_pipeline

class EmbeddingWorker:
    def __init__(self, model_name: str):
        # Chargé une fois au démarrage du worker
        self.model = hf_pipeline("feature-extraction", model=model_name)

    def embed(self, text: str) -> list:
        return self.model(text)[0][0]  # CLS token

# 2 workers GPU, chacun charge le modèle une fois
embeddings = (
    Pipeline(texts)          # 50 000 textes
    .batch(32)
    .class_task(
        EmbeddingWorker,
        EmbeddingWorker.embed,
        ["sentence-transformers/all-MiniLM-L6-v2"],
        count=2,
    )
    .wait_for_result()
)

Performance

50 000 textes, embeddings HuggingFace

Séquentiel 2.0min
1 worker GPU 40.0s
2 workers GPU 21.0s
4 workers GPU 11.0s
🚀 10.9× plus rapide

Comment ça fonctionne

Au démarrage du processus worker, le constructeur est appelé avec `args`. Toutes les invocations suivantes réutilisent la même instance — les poids du modèle restent en RAM (ou VRAM) sans rechargement.

Exemples liés