Text Classification
Transformers
Safetensors
English
modernbert
feature-extraction
decision-model
decision-transformer
ettin
cross-encoder
zero-shot-classification
classification
calibrated-probabilities
routing
multiple-choice
tool-calling
agent-decision
text-embeddings-inference
Instructions to use lCREEl/pick-150m with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use lCREEl/pick-150m with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="lCREEl/pick-150m")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("lCREEl/pick-150m") model = AutoModel.from_pretrained("lCREEl/pick-150m", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Add one-script free Colab evaluation with private HF backups and resume
Browse files- decision-index/SUBMISSION_DRAFT.md +30 -0
- decision-index/cloud_worker.py +0 -76
- decision-index/release.json +8 -0
- decision-index/run_colab.sh +71 -0
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"
|