Download hf_pull_v5.py from musabc/nanogpt-tr-v5-code: direct link, hf CLI and curl.
- Browser
- Download file 4.63 kB
-
https://huggingface.co/musabc/nanogpt-tr-v5-code/resolve/main/hf_pull_v5.py
- Command line
-
hf download hf://musabc/nanogpt-tr-v5-code/hf_pull_v5.py
-
curl -L -o hf_pull_v5.py https://huggingface.co/musabc/nanogpt-tr-v5-code/resolve/main/hf_pull_v5.py
4.63 kB
| """ | |
| Thunder Compute (H100) üzerinde HuggingFace'ten V5 verisi + ckpt + kod indir. | |
| Bootstrap script'i — sıfırdan kurulum: | |
| 1. Veriyi data/ icine indir | |
| 2. Checkpoint'leri runs/tr-200m-v5/ icine indir | |
| 3. Kodu mevcut dizine indir (varsa overwrite) | |
| Kullanim: | |
| pip install huggingface_hub | |
| python hf_pull_v5.py --user musabc # her seyi indir | |
| python hf_pull_v5.py --user musabc --no-ckpt # sadece data + code | |
| python hf_pull_v5.py --resume-token <TOKEN> # private repolar icin | |
| NOT: ~30GB indirme. Thunder Compute disk yeterli mi kontrol et: | |
| df -h . | |
| """ | |
| import argparse | |
| import os | |
| import sys | |
| from pathlib import Path | |
| try: | |
| from huggingface_hub import snapshot_download, hf_hub_download | |
| except ImportError: | |
| print("huggingface_hub yok, kuruluyor...") | |
| os.system("pip install -U huggingface_hub") | |
| from huggingface_hub import snapshot_download, hf_hub_download | |
| REPO_BASE = "nanogpt-tr-v5" | |
| DEFAULT_USER = "musabc" | |
| ROOT = Path(__file__).parent if "__file__" in dir() else Path(".") | |
| DATA_DIR = ROOT / "data" | |
| RUN_DIR = ROOT / "runs" / "tr-200m-v5" | |
| def fmt_size(b): | |
| for u in ["B", "KB", "MB", "GB"]: | |
| if b < 1024: | |
| return f"{b:.1f} {u}" | |
| b /= 1024 | |
| return f"{b:.1f} TB" | |
| def check_disk(path: Path, need_gb: float): | |
| import shutil | |
| free_gb = shutil.disk_usage(path).free / 1e9 | |
| print(f" Disk free: {free_gb:.1f} GB (gerekli: ~{need_gb} GB)") | |
| if free_gb < need_gb * 1.1: | |
| print(f" ! YETERSIZ DISK") | |
| return False | |
| return True | |
| def main(): | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument("--user", type=str, default=DEFAULT_USER) | |
| parser.add_argument("--no-data", action="store_true") | |
| parser.add_argument("--no-ckpt", action="store_true") | |
| parser.add_argument("--no-code", action="store_true") | |
| parser.add_argument("--token", type=str, default=None, | |
| help="HF token (private repolar icin)") | |
| parser.add_argument("--only-best", action="store_true", | |
| help="Sadece best_ckpt.pt indir (latest'i atla)") | |
| parser.add_argument("--workers", type=int, default=8, | |
| help="Paralel indirme worker (default 8)") | |
| args = parser.parse_args() | |
| token = args.token or os.environ.get("HF_TOKEN") | |
| data_repo = f"{args.user}/{REPO_BASE}-data" | |
| ckpt_repo = f"{args.user}/{REPO_BASE}-ckpts" | |
| code_repo = f"{args.user}/{REPO_BASE}-code" | |
| DATA_DIR.mkdir(parents=True, exist_ok=True) | |
| RUN_DIR.mkdir(parents=True, exist_ok=True) | |
| # Disk kontrol | |
| print(f"\n{'='*60}\nDISK & ORTAM\n{'='*60}") | |
| needed = 0 | |
| if not args.no_data: needed += 30 | |
| if not args.no_ckpt: needed += 4 if args.only_best else 8 | |
| if not args.no_code: needed += 0.01 | |
| check_disk(ROOT, needed) | |
| # DATA | |
| if not args.no_data: | |
| print(f"\n{'='*60}\nDATA pull ← {data_repo}\n{'='*60}") | |
| print(" ~30GB indirme — internet hizina gore 15-40 dk") | |
| snapshot_download( | |
| repo_id=data_repo, | |
| repo_type="dataset", | |
| local_dir=str(DATA_DIR), | |
| token=token, | |
| max_workers=args.workers, | |
| allow_patterns=["*.bin", "*.json", "*.md"], | |
| ) | |
| # Boyut dogrula | |
| for f in DATA_DIR.glob("v5_*.bin"): | |
| print(f" ✓ {f.name}: {fmt_size(f.stat().st_size)}") | |
| # CKPT | |
| if not args.no_ckpt: | |
| print(f"\n{'='*60}\nCKPT pull ← {ckpt_repo}\n{'='*60}") | |
| patterns = ["best_ckpt.pt", "README.md"] | |
| if not args.only_best: | |
| patterns.extend(["latest_ckpt.pt", "train.log"]) | |
| snapshot_download( | |
| repo_id=ckpt_repo, | |
| repo_type="model", | |
| local_dir=str(RUN_DIR), | |
| token=token, | |
| max_workers=args.workers, | |
| allow_patterns=patterns, | |
| ) | |
| for f in RUN_DIR.glob("*.pt"): | |
| print(f" ✓ {f.name}: {fmt_size(f.stat().st_size)}") | |
| # CODE | |
| if not args.no_code: | |
| print(f"\n{'='*60}\nCODE pull ← {code_repo}\n{'='*60}") | |
| snapshot_download( | |
| repo_id=code_repo, | |
| repo_type="model", | |
| local_dir=str(ROOT), | |
| token=token, | |
| max_workers=args.workers, | |
| allow_patterns=["*.py", "*.md"], | |
| ) | |
| print(f"\n{'='*60}\n✓ TAMAMLANDI\n{'='*60}") | |
| print(f"\nSonraki adımlar (Thunder Compute):") | |
| print(f" pip install -r requirements.txt # veya manuel torch, tokenizers, liger-kernel") | |
| print(f" python 05_train_v5.py --compile --resume") | |
| print(f"\nGPU kontrol:") | |
| print(f" nvidia-smi") | |
| if __name__ == "__main__": | |
| main() | |