Repository navigation
feat(benchmark): add HLE eval script for NeMo Skills - #601
Draft
AlphaBladez wants to merge 2 commits into
Draft
AlphaBladez wants to merge 2 commits into
AlphaBladez wants to merge 2 commits into
Conversation
Add configs/hle/run.sh, run as a custom benchmark in the NeMo Skills container like configs/aime/run.sh (#91): ns prepare_data hle, then ns eval on the text split, graded by NeMo Skills' HLE LLM judge (o3-mini on api.openai.com by default, overridable with JUDGE_MODEL / JUDGE_SERVER_ADDRESS / JUDGE_SERVER_TYPE). Knobs are env vars with AIME's sampling and timeout defaults; REPEAT defaults to 1 because every repeat is another judge call per question. The script fails before generation when MODEL is unset or the default judge has no OPENAI_API_KEY. sglang.test.run_eval has no HLE task in any release, and sgl-eval does not ship one either, so this cannot ride the gpqa runner. Also: examples/features/hle.yaml, an HLE section in docs/accuracy.md, and tests/test_hle_script.py (run.sh against a stub ns). Signed-off-by: sbeldona <sbeldona@nvidia.com>
…oudly
- Drop disable-piecewise-cuda-graph from the example: v0.5.21 rejects the flag
("unrecognized arguments") and the server never starts.
- Default SEED to 0. NeMo Skills 26.03's judge reads output-rs0.jsonl, so the
previous default of 42 failed the judge after generation had finished.
- Exit non-zero when eval-results/hle/metrics.json is missing. ns can exit 0
after a failed prepare_data or judge step, so the run used to print Done.
- Document the two prerequisites for an official-benchmark run: OPENAI_API_KEY
(o3-mini is the official judge) and accepted cais/hle terms.
Signed-off-by: sbeldona <sbeldona@nvidia.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
srt-slurm has no way to run HLE (Humanity's Last Exam). The structured eval runners cannot provide it:
sglang.test.run_evalhas no HLE task in any release, andsgl-evaldoes not ship one either. NeMo Skills does, including the LLM judge HLE needs, because many of its answers are free-form and cannot be scored with a regex.This PR adds HLE the way AIME already runs (#91): a script under
configs/hle/that recipes invoke withbenchmark.type: customin the NeMo Skills container. There are no changes undersrc/, no new benchmark type and no new schema fields.Changes
configs/hle/run.sh:ns prepare_data hle, thenns eval --benchmarks=hle:<REPEAT> --split=textagainst the in-job endpoint (localhost:8000/v1, as in AIME).o3-mini-2025-01-31onapi.openai.com, the judge of the official leaderboard, which needsOPENAI_API_KEY.JUDGE_MODEL,JUDGE_SERVER_ADDRESSandJUDGE_SERVER_TYPEpoint it at another OpenAI-compatible server instead.MODEL(required),ENDPOINT,SPLIT,NUM_EXAMPLES,REPEAT,MAX_TOKENS,NUM_THREADS,TEMPERATURE,TOP_P,SEED,OUTPUT_DIR. Sampling and timeout defaults matchconfigs/aime/run.sh.REPEATdefaults to 1 because every repeat is another judge call per question.SEEDdefaults to 0. NeMo Skills 26.03's judge step readsoutput-rs0.jsonl, so a non-zero starting seed fails the judge after generation has finished.MODELis unset, or when the default judge is used withoutOPENAI_API_KEY. It exits non-zero wheneval-results/hle/metrics.jsonis missing at the end, becausenscan exit 0 after a failedprepare_dataor judge step.examples/features/hle.yaml, Qwen3-0.6B on two aggregated SGLang workers behindsglang-router, evaluated on 50 questions.docs/accuracy.mdcovering prerequisites (an OpenAI key for the official judge; a Hugging Face token whose account has accepted the terms of the gatedcais/hledataset), the recipe shape, credential handling and outputs. Also thenemo-skillsalias and features-table row inexamples/README.md, and a comment insrtslurm.yaml.example.tests/test_hle_script.pyrunsrun.shagainst a stubnsand checks thensarguments, the judge override, both early failures and the missing-metrics failure. It also loads the example recipe.Credentials are exported in the submitting shell and inherited by the job. They are never written into the recipe:
benchmark.envvalues are passed literally, so${HF_TOKEN}there would not expand.Launch snapshot diff
One new file,
tests/snapshots/launch/features__hle.txt, and no existing snapshot changes. The benchmark step runsbash -lc 'bash /configs/hle/run.sh'in thenemo-skillsimage.Validation
tests/test_hle_script.pyandtests/test_launch_snapshots.pypass; Ruff andsrtctl schema-docs --checkare clean.lmsysorg/sglang:v0.5.21andnvcr.io/nvidia/eval-factory/nemo-skills:26.03led to the second commit. It removesdisable-piecewise-cuda-graph, which v0.5.21 rejects, and adds theSEEDdefault and missing-metrics check described above.5a17f307. That covers thehledataset'stextsplit and the judge defaults innemo_skills/dataset/hle/__init__.py.