RunPod Parameter Golf
Utilisez cette skill lors du lancement ou de la préparation d'une soumission Parameter Golf sur RunPod, notamment quand l'opérateur s'attend à ce que l'agent provisionne un Pod ou exécute un job d'entraînement de style compétitif.
Non-Négociables
- Une exécution de style compétitif valide se fait dans un checkout Parameter Golf depuis l'intérieur d'un dossier record.
- La soumission doit être auto-contenue : pas d'imports de paquets locaux, code d'entraînement sans rapport, checkpoints locaux uniquement, ou dépendances cachées.
- Utilisez les shards en cache FineWeb SP1024 standard sauf si la soumission change intentionnellement le tokenizer/données et prouve la comptabilité BPB.
- La limite de 16 MB est décimale :
16 000 000octets. - Ne déclarez pas le travail terminé avant que le log contienne
final_int8_zlib_roundtrip_exactet la ligne de taille d'artefact.
Ce qu'il Faut Demander À L'Opérateur
Avant de pouvoir l'exécuter vous-même, demandez :
Clé API RunPod ou commande SSH :
Plafond budgétaire :
Mode d'exécution : smoke / final / smoke-then-final
GPU : 1xH100 smoke ? 8xH100 final ?
Cloud/stockage : Secure Cloud ? GB de volume ou networkVolumeId ?
Transfert de fichiers : Git clone / rsync/SCP / runpodctl ?
Dossier source ou URL/branche du repo :
Politique de nettoyage : stop ou terminate après que les artefacts sont sécurisés ?
Si l'accès API est fourni, utilisez le privilège minimum permettant de créer/lister/démarrer/arrêter/supprimer des Pods et optionnellement créer/lister des volumes réseau. Traitez les clés comme des secrets ; ne les écrivez jamais dans les logs, commits, ou mémoire durable.
Specs Pod RunPod Recommandées
Exécution finale 8xH100
{
"cloudType": "SECURE",
"computeType": "GPU",
"gpuTypeIds": ["NVIDIA H100 80GB HBM3"],
"gpuCount": 8,
"imageName": "runpod/pytorch:2.1.0-py3.10-cuda11.8.0-devel-ubuntu22.04",
"containerDiskInGb": 50,
"volumeInGb": 200,
"volumeMountPath": "/workspace",
"ports": ["22/tcp", "8888/http"],
"supportPublicIp": true,
"interruptible": false
}
Smoke run
Utilisez la même image et les mêmes ports avec gpuCount=1. Si le cache FineWeb doit être téléchargé sur le pod smoke, gardez volumeInGb=200 ; sinon 100 GB est acceptable.
Commandes De Configuration Sur Le Pod
cd /workspace
if [ ! -d parameter-golf ]; then
git clone https://github.com/openai/parameter-golf.git
fi
cd /workspace/parameter-golf
python3 -m pip install --upgrade pip
pip install numpy sentencepiece huggingface-hub datasets tqdm
Télécharger les données :
# Cache smoke
python3 data/cached_challenge_fineweb.py --variant sp1024 --train-shards 1
# Cache final
python3 data/cached_challenge_fineweb.py --variant sp1024
Chemins attendus :
/workspace/parameter-golf/data/datasets/fineweb10B_sp1024/
/workspace/parameter-golf/data/tokenizers/fineweb_1024_bpe.model
Placement De La Soumission
Le dossier d'exécution doit ressembler à ceci :
/workspace/parameter-golf/records/<track>/<date_or_name>/
README.md
submission.json
train_gpt.py
Pour un dossier ConvGPT-style non-record préparé :
mkdir -p /workspace/parameter-golf/records/track_non_record_16mb
# Copiez ou clonez le dossier ici, puis :
cd /workspace/parameter-golf/records/track_non_record_16mb/<submission-folder>
Commandes De Lancement
Final 8xH100
RUN_ID=convgpt_hybridconv_sp1024_8h100 \
DATA_PATH=/workspace/parameter-golf/data/datasets/fineweb10B_sp1024 \
TOKENIZER_PATH=/workspace/parameter-golf/data/tokenizers/fineweb_1024_bpe.model \
VOCAB_SIZE=1024 \
MODEL_DIM=256 \
NUM_LAYERS=8 \
MLP_MULT=2 \
GRID_SIZE=32 \
MAX_WALLCLOCK_SECONDS=600 \
TRAIN_LOG_EVERY=50 \
VAL_LOSS_EVERY=1000 \
torchrun --standalone --nproc_per_node=8 train_gpt.py 2>&1 | tee runpod_console.log
1xH100 smoke
RUN_ID=convgpt_hybridconv_sp1024_smoke \
DATA_PATH=/workspace/parameter-golf/data/datasets/fineweb10B_sp1024 \
TOKENIZER_PATH=/workspace/parameter-golf/data/tokenizers/fineweb_1024_bpe.model \
VOCAB_SIZE=1024 \
MODEL_DIM=256 \
NUM_LAYERS=8 \
MLP_MULT=2 \
GRID_SIZE=32 \
ITERATIONS=5 \
MAX_WALLCLOCK_SECONDS=0 \
TRAIN_BATCH_TOKENS=65536 \
VAL_BATCH_SIZE=65536 \
TRAIN_LOG_EVERY=1 \
VAL_LOSS_EVERY=0 \
torchrun --standalone --nproc_per_node=1 train_gpt.py 2>&1 | tee smoke_console.log
Checklist De Surveillance
Surveillez :
- les échecs d'import de dépendances (
sentencepiece,torch,numpy) - les chemins de données manquants
CUDA out of memory- création de
final_model.int8.ptz Total submission size int8+zlib: ...final_int8_zlib_roundtrip_exact val_loss:... val_bpb:...
Après succès :
cp logs/${RUN_ID}.txt train.log
python3 - <<'PY'
from pathlib import Path
log = Path('train.log').read_text(errors='ignore')
for key in ['Total submission size int8+zlib', 'final_int8_zlib_roundtrip_exact']:
print('\n'.join(line for line in log.splitlines() if key in line)[-2000:])
PY
Mettez à jour submission.json avec les valeurs exactes de val_bpb, val_loss, taille d'artefact, commande, nombre de GPUs, et statut d'exécution.
Notes De Transfert De Fichiers
La documentation RunPod distingue :
- SSH proxifié basique : accès shell rapide, sans SCP/SFTP
- SSH complet avec IP publique et port
22/tcpexposé : supporte SCP/SFTP/rsync runpodctl send/receive: facile pour les transferts petits à moyensrsync: meilleur pour les transferts volumineux ou répétés
Pour les agents, préférez SSH complet ou Git clone pour que le workflow soit reproductible et résumable.
Nettoyage
Avant d'arrêter/terminer :
- Confirmez que
train.log,submission.json,README.md, ettrain_gpt.pysont présents. - Copiez
train.logetfinal_model.int8.ptzsi le volume du Pod n'est pas persistant. - Arrêtez le Pod pour libérer le GPU si vous conservez les données
/workspace. - Terminez seulement après que les artefacts ont été copiés ou stockés de manière sécurisée sur un volume réseau.