lCREEl commited on
Commit
97f39d6
ยท
verified ยท
1 Parent(s): f1635cf

Add one-script free Colab evaluation with private HF backups and resume

Browse files
decision-index/SUBMISSION_DRAFT.md ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # PICK-150M V5 โ€” submission draft
2
+
3
+ Do not submit this draft until the full public evaluation has completed.
4
+
5
+ - Model: [lCREEl/pick-150m](https://huggingface.co/lCREEl/pick-150m)
6
+ - Frozen model revision: `9980b9adcc14331a9b9d44bb936aca0f7deb221d`
7
+ - Parameters: 149,015,809
8
+ - Engine: `pick_v5.engine:PickV5Engine`, code revision in `release.json` and run fingerprint.
9
+ - Suite: public edition 0.3, 140,178 scoreable requests.
10
+ - Results: `lCREEl/pick-v5-decision-index-results/runs/pick-150m-v5/scores.json`.
11
+ The dataset is initially private; publish compact outputs or grant maintainer access before review.
12
+ - Hardware/software: use final `environment.json` and `hardware-history.json`.
13
+ - Settings: fp32, native CUDA TF32, no compilation, shared-state packing,
14
+ state reads questions and question reads options, 7,999 packed tokens,
15
+ 7,999 forward token budget, fixed native key/description rendering.
16
+ - Capacity: a request is unsupported if a question/option/state cannot fit without truncation.
17
+ Multi-question requests use native deterministic recursive bisection as needed;
18
+ every question and option is retained. Full counts are in the final scores.
19
+ - Calibration: native probabilities only; no benchmark-specific postprocessing or result edits.
20
+ - Data disclosure: prior development used related public task families and sampled benchmark feedback.
21
+ Exact-state/sentence decontamination exists in the V5 data builder; this is not a proof
22
+ that the entire historical curriculum is semantically disjoint from every benchmark.
23
+ - Reproduction: download the frozen inference source/wheel from the model's `decision-index/`
24
+ directory and use its fixed model revision. The wrapper is a snapshot of local
25
+ uncommitted inference fixes, not just the older private GitHub repository HEAD.
26
+
27
+ Before opening a PR, confirm `complete=true`, `completed=140178`, error count zero,
28
+ canonical suite hashes, untouched outputs, accessible inference code, and reviewer access.
29
+ Add the completed entry to `submissions/README.md` in apolinario/decision-index.
30
+ The maintainers compute the private Full-score components and the RTX PRO 6000 latency gate.
decision-index/cloud_worker.py DELETED
@@ -1,76 +0,0 @@
1
- """Run the official suite on one device, with private resumable output checkpoints."""
2
- import argparse
3
- import gzip
4
- import json
5
- import shutil
6
- import time
7
- from pathlib import Path
8
-
9
- from huggingface_hub import HfApi, hf_hub_download, snapshot_download
10
- from decision_index.runner import run
11
- from decision_index.pipeline import score_run, upload_run
12
- from decision_index.suite.io import Suite, atomic_json
13
-
14
-
15
- def main():
16
- p = argparse.ArgumentParser()
17
- p.add_argument('--suite-repo', required=True)
18
- p.add_argument('--suite-revision', required=True)
19
- p.add_argument('--results-repo', required=True)
20
- p.add_argument('--run-name', default='pick-150m-v5')
21
- p.add_argument('--root', default='/tmp/pick-evaluation')
22
- args = p.parse_args()
23
- api = HfApi()
24
- # Fail closed if a benchmark dataset is accidentally public.
25
- if not api.dataset_info(args.suite_repo, revision=args.suite_revision).private:
26
- raise ValueError('Benchmark input repository must remain private')
27
- root = Path(args.root)
28
- suite_dir = root / 'suite-0.3'
29
- snapshot_download(args.suite_repo, repo_type='dataset', revision=args.suite_revision,
30
- local_dir=suite_dir)
31
- suite = Suite(suite_dir, '0.3')
32
- verification = suite.verify(strict=True)
33
- if not verification.get('exclusions_match'):
34
- raise ValueError('Canonical exclusion file does not match')
35
- out = root / 'runs' / args.run_name
36
- out.mkdir(parents=True, exist_ok=True)
37
- atomic_json(out / 'suite-verification.json', verification)
38
- api.create_repo(args.results_repo, repo_type='dataset', private=True, exist_ok=True)
39
- if not api.dataset_info(args.results_repo).private:
40
- raise ValueError('Work-in-progress results repository must remain private')
41
- remote_path = f'runs/{args.run_name}'
42
- existing = api.list_repo_files(args.results_repo, repo_type='dataset')
43
- compressed = f'{remote_path}/results.jsonl.gz'
44
- if not (out / 'results.jsonl').exists() and compressed in existing:
45
- saved = hf_hub_download(args.results_repo, compressed, repo_type='dataset')
46
- with gzip.open(saved, 'rb') as src, (out / 'results.jsonl').open('wb') as dst:
47
- shutil.copyfileobj(src, dst)
48
- last_upload = time.monotonic()
49
-
50
- def checkpoint():
51
- if (out / 'results.jsonl').exists():
52
- score_run(suite, out / 'results.jsonl', 'pick_v5.engine:PickV5Engine', out)
53
- upload_run(args.results_repo, out, path_in_repo=remote_path, private=True)
54
-
55
- def log(line):
56
- nonlocal last_upload
57
- print(line, flush=True)
58
- if time.monotonic() - last_upload > 300:
59
- checkpoint()
60
- last_upload = time.monotonic()
61
-
62
- try:
63
- run('pick_v5.engine:PickV5Engine', {'device': 'cuda'}, suite.row_paths, out,
64
- compact=True, resume=True, corpus_sha256=verification['sha256'],
65
- keep=suite.in_edition, log=log)
66
- finally:
67
- checkpoint()
68
- scores = json.loads((out / 'scores.json').read_text())
69
- if not scores['complete'] or scores['completed'] != 140178 or scores['counts'].get('error', 0):
70
- raise RuntimeError('Full public evaluation is incomplete or has runtime errors; do not submit')
71
- print(json.dumps({'complete': True, 'public_index': scores['decision_index'],
72
- 'results_repo': args.results_repo}), flush=True)
73
-
74
-
75
- if __name__ == '__main__':
76
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
decision-index/release.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model_repo": "lCREEl/pick-150m",
3
+ "model_revision": "9980b9adcc14331a9b9d44bb936aca0f7deb221d",
4
+ "code_revision": "f1635cf8868b3359c0ea78cd7d0110e7bbe6b555",
5
+ "commit_url": "https://huggingface.co/lCREEl/pick-150m/commit/f1635cf8868b3359c0ea78cd7d0110e7bbe6b555",
6
+ "weight_sha256": "4bbf03998bf507660872fb943aa20543a18c481793c240e93a426a04b8b10033",
7
+ "wheel_sha256": "d595e42c206fecedbdc0442dadce5d667b763701692f3d213fcbd8d572c4df8c"
8
+ }
decision-index/run_colab.sh ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ # PICK V5: evaluate only. Download, install, resume, and back up; never train.
3
+ set -euo pipefail
4
+
5
+ if [[ -z "${HF_TOKEN:-}" && "${PICK_VERIFY_ONLY:-0}" != "1" ]]; then
6
+ echo 'HF_TOKEN์ด ์—†์Šต๋‹ˆ๋‹ค. Colab ๋ณด์•ˆ ๋น„๋ฐ€ HF_TOKEN์„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜์„ธ์š”.' >&2
7
+ exit 2
8
+ fi
9
+
10
+ export HF_HUB_DISABLE_XET=1
11
+ export PYTHONUNBUFFERED=1
12
+ export DCT_COMPILE=0
13
+ PICK_ROOT="${PICK_ROOT:-/content/pick-evaluation}"
14
+ export PICK_ROOT
15
+ mkdir -p "$PICK_ROOT/installer"
16
+ export HF_HUB_CACHE="$PICK_ROOT/cache/hub"
17
+ export CODE_REVISION='f1635cf8868b3359c0ea78cd7d0110e7bbe6b555'
18
+ export SUITE_REPO='lCREEl/pick-v5-decision-index-suite-0.3'
19
+ export SUITE_REVISION='f5a27dc47f7f233a66f06fc20eb45528839c5c9c'
20
+ export WHEEL_SHA256='d595e42c206fecedbdc0442dadce5d667b763701692f3d213fcbd8d572c4df8c'
21
+ export WORKER_SHA256='0bf00f9c3ace44dd91cb9d582634b36e7f8e7ff797b1fe6c2a4780519347a3e1'
22
+ export REQUIREMENTS_SHA256='ce1394a268341811eaccf4e8c97f24108f58c3efff2b7cf85d41bb0e0cbc4d2b'
23
+
24
+ echo '๊ณ ์ •๋œ V5 ํ‰๊ฐ€ ํŒŒ์ผ์„ ๋‚ด๋ ค๋ฐ›์•„ ํ•ด์‹œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.'
25
+ python3 - <<'PY'
26
+ import hashlib, os, sys, urllib.request
27
+ from pathlib import Path
28
+ if not (3,11) <= sys.version_info[:2] < (3,15):
29
+ raise SystemExit('Python 3.11~3.14 ๋Ÿฐํƒ€์ž„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.')
30
+ base=f"https://huggingface.co/lCREEl/pick-150m/resolve/{os.environ['CODE_REVISION']}/decision-index"
31
+ cache=Path(os.environ['PICK_ROOT'])/'installer'
32
+ for name, expected in {
33
+ 'pick_v5_decision_index-0.1.0-py3-none-any.whl':os.environ['WHEEL_SHA256'],
34
+ 'colab_worker.py':os.environ['WORKER_SHA256'],
35
+ 'requirements-colab.txt':os.environ['REQUIREMENTS_SHA256'],
36
+ }.items():
37
+ path=cache/name
38
+ if not path.exists() or hashlib.sha256(path.read_bytes()).hexdigest()!=expected:
39
+ tmp=path.with_suffix(path.suffix+'.part')
40
+ urllib.request.urlretrieve(f'{base}/{name}',tmp)
41
+ if hashlib.sha256(tmp.read_bytes()).hexdigest()!=expected:
42
+ raise SystemExit(f'ํŒŒ์ผ ํ•ด์‹œ ๋ถˆ์ผ์น˜: {name}')
43
+ tmp.replace(path)
44
+ PY
45
+
46
+ if [[ "${PICK_VERIFY_ONLY:-0}" == "1" ]]; then
47
+ echo '๊ณต๊ฐœ ์‹คํ–‰ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ์™€ ํ•ด์‹œ ๊ฒ€์ฆ์„ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.'
48
+ exit 0
49
+ fi
50
+
51
+ PICK_PYTHON="$PICK_ROOT/.venv/bin/python"
52
+ if [[ ! -x "$PICK_PYTHON" ]]; then
53
+ echo 'Colab ๊ธฐ๋ณธ ํ™˜๊ฒฝ๊ณผ ๋ถ„๋ฆฌ๋œ ์ „์šฉ ํ™˜๊ฒฝ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.'
54
+ python3 -m venv "$PICK_ROOT/.venv"
55
+ fi
56
+ echo '๊ณ ์ •๋œ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ์‹คํ–‰์€ ๋ช‡ ๋ถ„ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.'
57
+ "$PICK_PYTHON" -m pip install --disable-pip-version-check -q -r "$PICK_ROOT/installer/requirements-colab.txt" "$PICK_ROOT/installer/pick_v5_decision_index-0.1.0-py3-none-any.whl"
58
+
59
+ "$PICK_PYTHON" - <<'PY'
60
+ import torch
61
+ from huggingface_hub import HfApi
62
+ from pick_v5.engine import PickV5Engine
63
+ if not torch.cuda.is_available():
64
+ raise SystemExit('๋ฌด๋ฃŒ GPU๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ > ๋Ÿฐํƒ€์ž„ ์œ ํ˜• ๋ณ€๊ฒฝ > T4 GPU๋ฅผ ์„ ํƒํ•˜์„ธ์š”.')
65
+ user=HfApi().whoami()['name']
66
+ print('HF ๊ณ„์ •:',user)
67
+ print('GPU:',torch.cuda.get_device_name(0),'Torch:',torch.__version__,'CUDA:',torch.version.cuda)
68
+ PY
69
+
70
+ echo 'ํ‰๊ฐ€๋ฅผ ์‹œ์ž‘/์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค. HF ์ž๋™ ๋ฐฑ์—…์€ ๊ธฐ๋ณธ 120์ดˆ ๊ฐ„๊ฒฉ์ž…๋‹ˆ๋‹ค.'
71
+ exec "$PICK_PYTHON" "$PICK_ROOT/installer/colab_worker.py" --suite-repo "$SUITE_REPO" --suite-revision "$SUITE_REVISION" --code-revision "$CODE_REVISION" --results-repo "${PICK_RESULTS_REPO:-lCREEl/pick-v5-decision-index-results}" --run-name "${PICK_RUN_NAME:-pick-150m-v5}" --backup-seconds "${PICK_BACKUP_SECONDS:-120}" --max-minutes "${PICK_MAX_MINUTES:-330}" --root "$PICK_ROOT"