Configuration des Workers
Connecter vos propres machines GPU a la plateforme Parsyn. Installation, configuration, gestion de flotte et resolution de problemes.
Pourquoi connecter vos propres workers
Les Parsyn Workers (GPU geres par la plateforme) sont le moyen le plus rapide de lancer un entrainement, mais connecter vos propres machines vous offre :
- Aucun cout en credits : Vous payez votre materiel et votre electricite, pas des credits a l'heure.
- Capacite d'inference : Les Parsyn Workers ne gerent que le fine-tuning. Pour discuter avec vos modeles, il vous faut vos propres workers.
- Controle des donnees : Vos machines GPU peuvent rester sur votre propre reseau. Les poids du modele transitent par le stockage S3, mais le calcul reste sur votre materiel.
- Disponibilite permanente : Pas de limite de capacite. Vos machines sont a vous.
Prerequis
- Un GPU NVIDIA avec ses pilotes installes
- 8 Go+ de VRAM (16 Go+ recommandes pour un 7B en LoRA)
- Linux, ou Windows avec WSL2
- Acces internet vers
parsyn.progatis.com(WebSocket + HTTPS)
Ni Python ni toolkit CUDA a installer : le worker tourne depuis une image de conteneur qui embarque son propre environnement. Les pilotes sont la seule chose que l'installateur ne touchera pas — verifiez que les votres repondent :
nvidia-smiInstallation
Une commande sur la machine equipee du GPU :
curl -fsSL https://get.parsyn.progatis.com/worker | sh Elle installe Docker et le toolkit conteneur NVIDIA s'ils manquent, puis la commande parsyn, puis recupere l'image du worker. Ensuite :
parsyn init # pose deux questions
parsyn start # se connecte et s'enrole
parsyn logs -f # suivre
parsyn doctor # diagnostiquer, si quelque chose clocheparsyn init demande votre cle d'enrolement a l'invite plutot que de la prendre en argument, pour qu'elle ne passe pas par l'historique du shell. Creez la cle depuis Workers → Ajouter une machine dans le tableau de bord, qui affiche ces memes trois commandes.
Installation sans surveillance
Pour cloud-init, Ansible ou la construction d'une image, parsyn init accepte la meme configuration sans rien demander. La cle arrive sur l'entree standard pour la raison qui fait qu'elle n'est pas un drapeau : une ligne de commande est visible dans ps pendant son execution.
curl -fsSL https://get.parsyn.progatis.com/worker | sh
printf '%s' "$PARSYN_KEY" | parsyn init --key-stdin --non-interactive --name gpu-box-1
parsyn startparsyn init --help liste toutes les options, dont --url pour une plateforme auto-hebergee et --force pour remplacer une configuration existante.
Enregistrer un worker
Avant de pouvoir se connecter, un worker doit etre enregistre sur la plateforme. Deux options :
Cle d'enrolement
Creez une cle d'enrolement depuis la page Enrollment Keys du dashboard :
curl -X POST https://parsyn.progatis.com/api/v1/master-keys \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "datacenter-east-fleet",
"description": "Auto-enrollment for east datacenter",
"auto_name_prefix": "east-worker",
"default_worker_type": "both",
"max_enrollments": 50
}' La cle d'enrolement (format : enroll_...) peut etre partagee avec autant de machines que necessaire. Lors de la premiere connexion, chaque worker s'enregistre automatiquement et recoit sa propre cle individuelle (format : wkr_...). Le worker l'ecrit dans son fichier .env sous WORKER_API_KEY et la reutilise aux demarrages suivants, sans repasser par l'enrolement.
C'est l'approche recommandee pour deployer des workers a grande echelle. Integrez la master key d'enrollment dans votre script de provisioning ou votre image machine, et les nouvelles machines s'enregistrent d'elles-memes.
Configuration
Les workers sont configures via des variables d'environnement :
# Connexion (obligatoire)
PLATFORM_URL=wss://parsyn.progatis.com/ws/worker
WORKER_ENROLLMENT_KEY=enroll_xyz789... # a la premiere installation
WORKER_API_KEY=wkr_abc123... # ecrit automatiquement apres enrolement
# GPU
GPU_DEVICE=cuda:0
MAX_BATCH_SIZE=32
# Comportement du worker
WORKER_TYPE=both # fine_tuner, prompter, ou both
HEARTBEAT_INTERVAL=30 # Secondes entre les heartbeats
RECONNECT_DELAY=5 # Delai initial de reconnexion
# Performance
QUANTIZATION=none # none, 4bit, ou 8bit pour l'inference
TRUST_REMOTE_CODE=false # Autoriser les modeles HF avec du code custom
# Stockage
CACHE_DIR=~/.cache/parsyn
LOG_LEVEL=INFOReference complete de configuration
| Variable | Obligatoire | Defaut | Description |
|---|---|---|---|
PLATFORM_URL | Oui | URL WebSocket. Utilisez wss://parsyn.progatis.com/ws/worker pour la plateforme hebergee. | |
WORKER_API_KEY | Oui* | API key individuelle obtenue par enregistrement manuel. | |
WORKER_ENROLLMENT_KEY | Oui* | Master key pour l'auto-enrollment a la premiere connexion. | |
GPU_DEVICE | Non | cuda:0 | Peripherique CUDA. cuda:1 pour le second GPU, etc. |
MAX_BATCH_SIZE | Non | 32 | Limite haute de la taille de batch que le worker acceptera. |
WORKER_TYPE | Non | both | fine_tuner (fine-tuning uniquement), prompter (inference uniquement) ou both. |
QUANTIZATION | Non | none | Charger les modeles quantifies pour l'inference. Reduit la VRAM au prix d'une legere perte de qualite. |
TRUST_REMOTE_CODE | Non | false | Autoriser les modeles avec du code Python custom provenant de HuggingFace. Risque de securite, a activer uniquement pour des modeles de confiance. |
CACHE_DIR | Non | ~/.cache/parsyn | Cache local pour les modeles et datasets telecharges. |
TRAINING_TIMEOUT_SECONDS | Non | 86400 | Duree maximale d'entrainement par job (24 heures). |
INFERENCE_TIMEOUT_SECONDS | Non | 300 | Duree maximale d'inference par requete (5 minutes). |
MAX_INFERENCE_CACHED_MODELS | Non | 2 | Nombre de modeles conserves en memoire GPU pour un changement de modele rapide en inference. |
* L'une des deux variables WORKER_API_KEY ou WORKER_ENROLLMENT_KEY est obligatoire.
Demarrer le worker
parsyn-worker startAu demarrage, le worker :
- Determine son API key (cle individuelle, identifiants caches d'un enrollment precedent, ou master key d'enrollment)
- Se connecte a la plateforme via WebSocket
- S'authentifie et (en cas d'enrollment) recoit son API key individuelle
- Lance un benchmark GPU (mis en cache pendant 24 heures)
- Envoie les informations materielles et les resultats du benchmark a la plateforme
- Demarre la boucle de heartbeat (toutes les 30 s) et la boucle de metriques (toutes les 5 s)
- Attend des taches
Sortie attendue :
INFO Worker abc12345 connecting to wss://parsyn.progatis.com/ws/worker
INFO Connected to platform
INFO Running GPU benchmark...
INFO Benchmark complete: score=85.2, TFLOPS=82.6, bandwidth=1008 GB/s
INFO Registered: NVIDIA A100-SXM4-80GB, 80 GB VRAM, CUDA 12.1
INFO Worker ready, waiting for tasks...Benchmark GPU
A la premiere connexion (puis toutes les 24 heures), le worker execute un benchmark GPU automatise. La plateforme utilise les scores du benchmark pour l'assignation intelligente des jobs en mode auto, en attribuant chaque job au worker le plus performant disponible.
Le benchmark mesure :
- TFLOPS : Debit de multiplication de matrices en FP16
- Bande passante memoire : Vitesse de transfert de tenseurs volumineux (Go/s)
- Taille de batch maximale : Recherche binaire du plus grand batch tenant en memoire
- Score composite : Combinaison ponderee (50 % TFLOPS, 30 % bande passante, 20 % VRAM), normalisee par rapport a une RTX 4090 de reference
Si le benchmark depasse le delai d'attente (60 secondes), le worker utilise des valeurs de repli conservatives et se signale quand meme a la plateforme.
Executer en tant que service systeme
En production, utilisez systemd pour que le worker demarre au boot et redemarre automatiquement en cas d'echec :
[Unit]
Description=Parsyn Training Worker
After=network.target
[Service]
Type=simple
User=parsyn
WorkingDirectory=/opt/parsyn-worker
EnvironmentFile=/opt/parsyn-worker/.env
ExecStart=/opt/parsyn-worker/venv/bin/parsyn-worker start
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable parsyn-worker
sudo systemctl start parsyn-worker
sudo journalctl -u parsyn-worker -fPlusieurs GPU sur une meme machine
Chaque processus worker utilise un seul GPU. Lancez plusieurs instances avec des valeurs de GPU_DEVICE differentes :
# Terminal 1
GPU_DEVICE=cuda:0 parsyn-worker start
# Terminal 2
GPU_DEVICE=cuda:1 parsyn-worker startAvec systemd, utilisez un template unit :
# /etc/systemd/system/[email protected]
[Service]
EnvironmentFile=/opt/parsyn-worker/.env.%i
ExecStart=/opt/parsyn-worker/venv/bin/parsyn-worker start
# Activer par GPU
sudo systemctl enable parsyn-worker@gpu0 parsyn-worker@gpu1Si vous utilisez l'enrollment par master key, chaque instance GPU s'enregistre comme un worker distinct et recoit sa propre API key.
Gestion de flotte
Cycle de vie des master keys
Les master keys supportent des limites et une date d'expiration :
max_enrollments: limite le nombre de workers pouvant s'enregistrer (null pour illimite)expires_at: date d'expiration apres laquelle les nouveaux enrollments sont refusesauto_name_prefix: les workers sont nommes sequentiellement (par exemple "east-worker-1", "east-worker-2")
Revoquer une master key
DELETE /api/v1/master-keys/{id}La revocation empeche les nouveaux enrollments mais ne deconnecte pas les workers existants. Ces workers possedent deja leur propre API key individuelle.
Surveiller votre flotte
La page Workers affiche des cartes de synthese en haut (total, en ligne, en entrainement, inactifs, utilisation GPU moyenne) et un tableau en temps reel de tous les workers. Un point vert clignotant indique que la connexion WebSocket temps reel est active.
Chaque ligne du tableau affiche :
- Statut de connexion (point vert pour inactif, rouge clignotant pour en entrainement, gris pour hors ligne)
- Pourcentage d'utilisation GPU avec barre de progression, ainsi que la VRAM utilisee
- Barres d'utilisation CPU et RAM
- ID du job en cours avec barre de progression et pourcentage (si en entrainement)
- Badge de type du worker (Both, Training only, Inference only)
- Temps restant estime pour le job en cours
Cliquez sur une ligne pour ouvrir un panneau de details. Utilisez les icones d'action pour voir les details ou supprimer le worker.
Persistence de la cle individuelle
Lorsqu'un worker s'enregistre via une cle d'enrolement, il recoit une cle individuelle (wkr_...) que le processus worker ecrit directement dans son fichier .env sous la variable WORKER_API_KEY. Aux demarrages suivants, le worker utilise cette cle et saute l'etape d'enrolement.
Si vous devez re-enregistrer un worker (par exemple en cas de perte du .env), relancez-le en fournissant a nouveau la cle d'enrolement.
Resolution de problemes
Le worker ne peut pas se connecter
- Verifiez l'acces reseau :
curl https://parsyn.progatis.com/health - Verifiez que la cle d'enrolement est toujours active dans le dashboard.
- Si vous etes derriere un pare-feu d'entreprise, assurez-vous que le trafic WebSocket (wss://) sur le port 443 est autorise.
Le worker se connecte mais se deconnecte immediatement
- Consultez les logs du worker pour des erreurs d'authentification.
- Verifiez le prefixe de la cle :
wkr_pour une cle individuelle,enroll_pour les cles d'enrolement. - Verifiez que la cle d'enrolement n'a pas ete revoquee ou que sa limite d'enrolements n'est pas atteinte.
GPU non detecte
- Lancez
nvidia-smipour confirmer que le GPU est visible. - Verifiez PyTorch :
python -c "import torch; print(torch.cuda.is_available())" - Si vous utilisez Docker, utilisez le runtime NVIDIA :
docker run --gpus all ...
Le fine-tuning plante avec une erreur OOM
MAX_BATCH_SIZElimite la taille de batch que le worker accepte. Reduisez-la si necessaire.- Activez la quantization :
QUANTIZATION=4bit - Assurez-vous qu'aucun autre processus n'utilise le GPU.
Le telechargement du modele echoue
- Verifiez l'acces internet vers HuggingFace :
curl https://huggingface.co - Pour les modeles a acces restreint (Llama, Gemma, etc.), definissez
HF_TOKENavec un token ayant les droits d'acces. - Verifiez que
CACHE_DIRdispose de suffisamment d'espace disque. Les modeles 7B necessitent au moins 15 Go.