runpod-parameter-golf

Par mkurman · zorai

Exécutez les soumissions de la compétition Parameter Golf sur des RunPod GPU Pods. Couvre les inputs opérateur requis, les spécifications de pod RunPod, la mise en cache des données FineWeb SP1024, la gestion du dossier d'enregistrement, les commandes de lancement torchrun, la surveillance, les vérifications de taille des artefacts et la collecte des résultats.

npx skills add https://github.com/mkurman/zorai --skill runpod-parameter-golf

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 000 octets.
  • Ne déclarez pas le travail terminé avant que le log contienne final_int8_zlib_roundtrip_exact et 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/tcp exposé : supporte SCP/SFTP/rsync
  • runpodctl send/receive : facile pour les transferts petits à moyens
  • rsync : 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 :

  1. Confirmez que train.log, submission.json, README.md, et train_gpt.py sont présents.
  2. Copiez train.log et final_model.int8.ptz si le volume du Pod n'est pas persistant.
  3. Arrêtez le Pod pour libérer le GPU si vous conservez les données /workspace.
  4. 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.

Skills similaires