From 16144a7e02dd23cdbb4d0a93ffb15aaf37746f7b Mon Sep 17 00:00:00 2001
From: Liang Juhao
Date: Tue, 19 May 2026 11:22:10 +0800
Subject: [PATCH 1/5] =?UTF-8?q?chore:=20OSS=20readiness=20audit=20?=
=?UTF-8?q?=E2=80=94=20license,=20schema,=20validators,=20refactor,=20docs?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Phase 1 — Legal & attribution
- Align license: pyproject.toml + README badge → Apache-2.0 (matches LICENSE).
- Add NOTICE summarising bundled third-party data and upstream terms.
- Add License & attribution sections to datasets/README.md and each
datasets/sharegpt_*_v1/README.md (CC BY 4.0, upstream link).
- Add schema/accuracy_subset.README.md documenting the MMLU subset (MIT).
Phase 2 — Contributor experience & validation
- Fix doc drift in DEVELOPMENT.md, README.md, runners/README.md,
suites/README.md, runners/template/runner.py (rename
SUPPORTED_QUANTIZATIONS → SUPPORTED_QUANTIZATION_BACKENDS in
*editable* files only; existing runner.py hashes untouched).
- Add schema/suite.schema.json + runners/validate_suites.py and wire
both into validate_pr.yml / generate_leaderboard.yml.
- Add .github/ISSUE_TEMPLATE/new_suite.md for community suite proposals.
- CONTRIBUTING.md: add local leaderboard preview instructions.
- .gitignore: ignore node_modules/, .cursor/, .aider*, .envrc, .direnv/.
Phase 3 — Code quality & CI
- runners/benchmark_runner.py:
* Remove dead code (stub format_prompt, dead spec-decoding branch,
redundant acc_result init, duplicated _build_result_json block).
* Extract helpers (_prepare_load_context, _score_accuracy_questions,
_write_accuracy_artifacts) shared between accuracy scenarios.
* Replace inference dispatch if/elif ladder with _SCENARIO_REGISTRY
(ScenarioSpec dataclass: inference_kind, use_async, merge_key…).
* _MERGE_SCENARIO_KEYS now derived from the registry. Net −111 lines.
- leaderboard: split SUITE_META into
leaderboard/site/assets/data/suite-meta.js, data.js re-exports it
(data.js 1010 → 800 lines).
- validate_pr.yml: add python-tests job (serve + openclaw_skill pytest).
- pyproject.toml: setuptools.packages.find now lists loadgen/runners/
serve/openclaw_skill explicitly and excludes tests*.
README hero & citation
- Embed docs/assets/framework-overview.png under nav links and
docs/assets/chip-cloud.png in a new "Currently on the leaderboard"
section.
- Expand BibTeX author list in the Citation section.
Co-authored-by: Cursor
---
.github/ISSUE_TEMPLATE/new_suite.md | 75 +++
.github/workflows/generate_leaderboard.yml | 6 +-
.github/workflows/validate_pr.yml | 67 ++-
.gitignore | 9 +
CONTRIBUTING.md | 15 +
DEVELOPMENT.md | 60 +-
NOTICE | 71 +++
README.md | 37 +-
datasets/README.md | 16 +
datasets/sharegpt_edge_v1/README.md | 32 +-
datasets/sharegpt_longctx_v1/README.md | 17 +-
datasets/sharegpt_standard_v1/README.md | 14 +-
docs/assets/chip-cloud.png | Bin 0 -> 219759 bytes
docs/assets/framework-overview.png | Bin 0 -> 146196 bytes
leaderboard/site/assets/data/suite-meta.js | 230 ++++++++
leaderboard/site/assets/js/data.js | 230 +-------
pyproject.toml | 22 +-
runners/README.md | 18 +-
runners/benchmark_runner.py | 629 ++++++++++-----------
runners/template/runner.py | 21 +-
runners/validate_suites.py | 164 ++++++
schema/accuracy_subset.README.md | 58 ++
schema/suite.schema.json | 215 +++++++
suites/README.md | 18 +-
suites/suite_C/suite.json | 2 +-
25 files changed, 1415 insertions(+), 611 deletions(-)
create mode 100644 .github/ISSUE_TEMPLATE/new_suite.md
create mode 100644 NOTICE
create mode 100644 docs/assets/chip-cloud.png
create mode 100644 docs/assets/framework-overview.png
create mode 100644 leaderboard/site/assets/data/suite-meta.js
create mode 100644 runners/validate_suites.py
create mode 100644 schema/accuracy_subset.README.md
create mode 100644 schema/suite.schema.json
diff --git a/.github/ISSUE_TEMPLATE/new_suite.md b/.github/ISSUE_TEMPLATE/new_suite.md
new file mode 100644
index 00000000..4c358a18
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/new_suite.md
@@ -0,0 +1,75 @@
+---
+name: Propose a new suite
+about: Propose a new benchmark suite (new model, scenario mix, or scaling axis)
+title: "[Suite] "
+labels: suite-proposal
+assignees: ''
+---
+
+
+
+## Why this suite?
+
+
+
+## Suite contract (draft)
+
+| Field | Proposed value |
+|---|---|
+| **Suite ID** | `suite_` |
+| **Model** | `` |
+| **Model revision** | `` |
+| **Chip count** | `1` / `auto` / specific number |
+| **Precision** | `BF16` / `FP16` / list of allowed precisions |
+| **Dataset** | existing (`sharegpt_standard_v1`, `sharegpt_edge_v1`, `sharegpt_longctx_v1`) or new |
+| **Max model length** | tokens |
+| **Output tokens (max)** | tokens |
+| **Concurrency levels** | e.g. `[8, 32, 128]` |
+| **Default scenarios** | subset of `accuracy / offline / online / interactive / sustained` |
+| **Extra scenarios** | optional: `sustained / speculative / burst / …` |
+| **Primary metric** | `offline_throughput`, `max_valid_qps`, … |
+| **Expected run time on A100** | minutes |
+
+## Accuracy baseline
+
+
+
+- [ ] I will provide an A100 (or equivalent reference) BF16 baseline score
+ to add to `schema/accuracy_baselines.json`.
+- [ ] If a new dataset is required, I will submit it under
+ `datasets/_v1/` with a `README.md` that documents the source
+ and upstream license (see [`datasets/README.md`](../../datasets/README.md)).
+
+## Custom orchestration?
+
+
+
+- [ ] Standard scenario dispatch is enough — no `suite.py` needed.
+- [ ] A `suite.py` plugin is required. Reason:
+
+## Reference result plan
+
+
+
+- Reference hardware:
+- Runner: ``
+- Who will run it: <@your-handle / vendor / community member>
+
+## Open questions
+
+
diff --git a/.github/workflows/generate_leaderboard.yml b/.github/workflows/generate_leaderboard.yml
index 31dec72d..04d51173 100644
--- a/.github/workflows/generate_leaderboard.yml
+++ b/.github/workflows/generate_leaderboard.yml
@@ -11,8 +11,9 @@ on:
paths:
- 'results/**'
- 'leaderboard/**'
+ - 'suites/**'
+ - 'schema/**'
- 'tools/generate_platforms_matrix.py'
- - 'schema/platforms.json'
- 'runners/*/meta.json'
# Allow manual trigger from Actions tab (useful for first deploy or to
@@ -37,6 +38,9 @@ jobs:
- name: Validate all runner meta.json files and hashes
run: python runners/validate_runners.py
+ - name: Validate all suite definitions
+ run: python runners/validate_suites.py
+
generate:
name: Generate and deploy leaderboard
runs-on: ubuntu-latest
diff --git a/.github/workflows/validate_pr.yml b/.github/workflows/validate_pr.yml
index d24bbf16..43054c8f 100644
--- a/.github/workflows/validate_pr.yml
+++ b/.github/workflows/validate_pr.yml
@@ -8,7 +8,8 @@ on:
paths:
- 'results/**'
- 'runners/**'
- - 'schema/platforms.json'
+ - 'suites/**'
+ - 'schema/**'
- 'tools/generate_platforms_matrix.py'
- 'README.md'
- 'leaderboard/site/**'
@@ -89,6 +90,29 @@ jobs:
python tools/generate_platforms_matrix.py --check
echo "::endgroup::"
+ validate-suites:
+ name: Validate suite definitions
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-python@v5
+ with:
+ python-version: "3.11"
+ cache: pip
+
+ - name: Install dependencies
+ run: pip install jsonschema
+
+ # Always validate every suite (and re-validate on schema changes too).
+ # This catches drift introduced by shared changes — e.g. a
+ # suite.schema.json edit that breaks an unrelated existing suite.
+ - name: Validate all suite folders (drift check)
+ run: |
+ echo "::group::Validating every suite folder in the repo"
+ python runners/validate_suites.py
+ echo "::endgroup::"
+
validate:
name: Validate result submissions
runs-on: ubuntu-latest
@@ -225,4 +249,43 @@ jobs:
# extra files to leaderboard/site/test/ to widen coverage; the
# glob below picks them up automatically.
- name: Run leaderboard frontend tests
- run: node --test leaderboard/site/test/*.test.mjs
\ No newline at end of file
+ run: node --test leaderboard/site/test/*.test.mjs
+
+ python-tests:
+ name: Python unit tests (serve + skill)
+ runs-on: ubuntu-latest
+ # Lightweight checks for the FastAPI serve layer and the OpenClaw skill
+ # entry point. No GPU, no real model — everything is mocked. Tests are
+ # opt-in per package so missing deps in one folder don't take the rest
+ # of the suite down with them.
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-python@v5
+ with:
+ python-version: "3.11"
+ cache: pip
+
+ - name: Install test dependencies
+ run: |
+ pip install --quiet pytest pydantic fastapi httpx pyyaml jsonschema
+
+ - name: Run serve unit tests
+ run: |
+ if [ -d serve/tests ]; then
+ echo "::group::pytest serve/tests"
+ python -m pytest serve/tests -q --no-header --color=no
+ echo "::endgroup::"
+ else
+ echo "serve/tests/ not present — skipping."
+ fi
+
+ - name: Run OpenClaw skill unit tests
+ run: |
+ if [ -d openclaw_skill/tests ]; then
+ echo "::group::pytest openclaw_skill/tests"
+ python -m pytest openclaw_skill/tests -q --no-header --color=no
+ echo "::endgroup::"
+ else
+ echo "openclaw_skill/tests/ not present — skipping."
+ fi
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 07e5795e..36e1481f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,11 +12,20 @@ env/
# ── Editor / IDE ────────────────────────────────────────────────────────────
.idea/
.vscode/
+.cursor/
*.swp
*.swo
*~
*.tmp
.DS_Store
+.aider*
+.envrc
+.direnv/
+
+# ── Node / frontend tooling ─────────────────────────────────────────────────
+node_modules/
+.eslintcache
+npm-debug.log*
# ── Test / lint caches ──────────────────────────────────────────────────────
.pytest_cache/
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6ff8d5d1..a3044cdc 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -320,6 +320,21 @@ CI then re-runs the schema validator and the runner-folder integrity check.
When both pass and a contributor reviews the diff, the PR is merged and your
result shows up on the leaderboard on the next site build.
+### Optional: preview the leaderboard locally
+
+The static site is generated from `results/` by `leaderboard/generate.py`.
+After dropping your result into `results/community//`, you can
+preview the final UI before opening the PR:
+
+```bash
+python leaderboard/generate.py # writes leaderboard/site/leaderboard.js + api/
+python -m http.server -d leaderboard/site 8000 # serve the static site
+# open http://localhost:8000
+```
+
+Both `leaderboard.js` and `leaderboard/site/api/` are gitignored — the GitHub
+Actions workflow regenerates them on every merge to `main`.
+
### Alternative: open a submission issue (no git required)
If you'd rather not use git, paste your `result.json` into a
diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md
index 343a3132..98cddbca 100644
--- a/DEVELOPMENT.md
+++ b/DEVELOPMENT.md
@@ -32,13 +32,14 @@ AccelMark/
│ ├── loadgen.py ← Shared timing and measurement engine
│ └── types.py ← InferenceResult, SampleRecord
├── suites/
-│ ├── suite_A/suite.json + requests.jsonl
-│ ├── suite_B/suite.json + requests.jsonl
-│ ├── suite_C/suite.json + suite.py + requests.jsonl
-│ ├── suite_D/suite.json + requests.jsonl
-│ ├── suite_E/suite.json + suite.py + requests.jsonl
-│ ├── suite_F/suite.json + requests.jsonl
-│ └── suite_G/suite.json + requests.jsonl
+│ ├── suite_A/suite.json
+│ ├── suite_B/suite.json
+│ ├── suite_C/suite.json + suite.py ← suite.py is optional; only C and E ship one
+│ ├── suite_D/suite.json
+│ ├── suite_E/suite.json + suite.py
+│ ├── suite_F/suite.json
+│ └── suite_G/suite.json
+│ (request data lives in datasets/, referenced by "dataset" in suite.json)
├── datasets/
│ ├── sharegpt_standard_v1/requests.jsonl ← 500 prompts, ~280/310 tok
│ ├── sharegpt_longctx_v1/requests.jsonl ← 200 prompts, ~28K input tok (Suite D)
@@ -554,12 +555,15 @@ descriptions and distributions.
If you need a custom distribution:
1. Create `datasets/{your_dataset}_v1/requests.jsonl`
-2. Create `datasets/{your_dataset}_v1/README.md`
+2. Create `datasets/{your_dataset}_v1/README.md` (must document source +
+ upstream license — see `datasets/README.md`)
3. Set `"dataset": "{your_dataset}_v1"` in your suite.json
-If your suite needs a custom dataset only used by that suite, you can
-also place `requests.jsonl` directly in `suites/suite_X/` — the
-benchmark runner checks there as a fallback.
+The `dataset` field is **required** — `BenchmarkRunner._resolve_requests_path`
+loads `datasets//requests.jsonl` and raises `FileNotFoundError` if it
+cannot find the file. Earlier versions allowed putting `requests.jsonl`
+directly under `suites/suite_X/`; that fallback has been removed in favor
+of the immutable, versioned `datasets/` layout.
Dataset format (one JSON object per line):
```json
@@ -622,6 +626,38 @@ not shown on the main leaderboard.
---
+## Adding a new scenario type
+
+If you need a scenario name that none of `accuracy / offline / online /
+interactive / sustained / speculative / burst` covers, you can register
+one without forking the dispatch logic:
+
+1. Open `runners/benchmark_runner.py` and add a row to
+ `_SCENARIO_REGISTRY` near the top of the file:
+
+ ```python
+ "your_scenario": ScenarioSpec(
+ name="your_scenario",
+ inference_kind="streaming", # or "offline"
+ needs_streaming=True, # require SUPPORTS_STREAMING?
+ use_async=True, # passed to load_model()
+ merge_key="your_scenario", # None = no-merge (e.g. accuracy)
+ ),
+ ```
+
+2. If the scenario needs special LoadGen behaviour (e.g. like `sustained`),
+ add a branch under "Run benchmark" inside `_run_single_scenario`.
+
+3. List the new scenario name in your suite's
+ `scenarios.{default,extra}` array — the merge order is derived from
+ the registry automatically.
+
+Without a registry entry the base class falls back to a streaming
+inference path with `merge_key = `. Register an entry whenever
+you want the scenario to be treated differently (offline, no merge, etc.).
+
+---
+
## Suite plugin system
Suites with custom orchestration logic (multiple subprocesses, special
@@ -1098,6 +1134,6 @@ python runners/validate_submission.py --dir /tmp/accelmark_test/
## Questions and Support
- **Bug in LoadGen or schema:** Open a GitHub Issue
-- **New suite proposal:** Open a GitHub Issue with the "Request new suite" template
+- **New suite proposal:** Open a GitHub Issue with the [**Propose a new suite**](https://github.com/JuhaoLiang1997/AccelMark/issues/new?template=new_suite.md) template
- **New platform support:** Open a PR with a working platform script and at least one verified result
- **Leaderboard question:** Check `leaderboard/generate.py` — it's well-commented
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 00000000..d904b638
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,71 @@
+AccelMark
+Copyright 2024-2026 Juhao Liang and The AccelMark Contributors
+
+This product includes software developed as part of the AccelMark project
+(https://github.com/JuhaoLiang1997/AccelMark).
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+================================================================================
+Third-party bundled data
+================================================================================
+
+The AccelMark source tree includes a small amount of third-party data so that
+benchmark runs are fully reproducible without network access. Each bundled
+dataset retains its upstream license; the Apache 2.0 license above covers only
+the AccelMark code, schemas, and configuration around it.
+
+--------------------------------------------------------------------------------
+1. datasets/sharegpt_standard_v1/requests.jsonl (500 prompts)
+ datasets/sharegpt_edge_v1/requests.jsonl (500 prompts)
+ datasets/sharegpt_longctx_v1/requests.jsonl (200 prompts)
+--------------------------------------------------------------------------------
+
+ Derived from the ShareGPT GPT-4 conversational dataset curated by:
+
+ shibing624/sharegpt_gpt4
+ https://huggingface.co/datasets/shibing624/sharegpt_gpt4
+ License: CC BY 4.0
+ (https://creativecommons.org/licenses/by/4.0/)
+
+ The upstream corpus was assembled from publicly shared ChatGPT/GPT-4
+ conversations. AccelMark's variants are filtered subsets used as fixed
+ benchmark inputs; no derivation is intended as the authoritative copy.
+
+ Attribution: shibing624/sharegpt_gpt4 contributors, distributed under CC BY 4.0.
+
+ See datasets//README.md for the per-subset filtering criteria and
+ token statistics.
+
+--------------------------------------------------------------------------------
+2. schema/accuracy_subset.jsonl (100 multiple-choice items)
+--------------------------------------------------------------------------------
+
+ A 100-question subset of MMLU (Massive Multitask Language Understanding):
+
+ Hendrycks, D., Burns, C., Basart, S., Zou, A., Mazeika, M., Song, D.,
+ & Steinhardt, J. (2021). "Measuring Massive Multitask Language
+ Understanding." International Conference on Learning Representations.
+ https://arxiv.org/abs/2009.03300
+ https://github.com/hendrycks/test
+
+ License: MIT
+ (https://opensource.org/licenses/MIT)
+
+ AccelMark uses this subset purely as an accuracy gate (model-quality
+ sanity check) — it is NOT a measurement of MMLU performance. The subset
+ is immutable; see CONTRIBUTING.md "A few rules".
+
+================================================================================
+Third-party software dependencies
+================================================================================
+
+AccelMark's Python runtime dependencies (jsonschema, numpy, pyyaml, …) and
+the framework backends invoked by each runner (vLLM, SGLang, mlx-lm,
+vllm-ascend, vllm-rocm, vllm-tpu, vllm-musa, …) retain their own licenses.
+See each runner's requirements.txt for pinned versions; see the upstream
+projects for the corresponding license terms.
diff --git a/README.md b/README.md
index 7fac6641..c378e681 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@
-
+
@@ -23,6 +23,16 @@
Development
+
+
+
+
+
+ From workload spec to published result — every row on the leaderboard carries its runner hash, environment fingerprint, and accuracy receipt.
+
+
---
## Why AccelMark?
@@ -53,9 +63,11 @@ python run.py --runner nvidia_vllm_47f5d58e --suite suite_A
# 4. Submit your result — open a pull request:
# git checkout -b submit/
-# cp results/your-result.json results/community//result.json
-# git add results/ env_info.json && git commit -m "results: "
+# git add results/community// && git commit -m "results: "
# gh pr create # or open via the GitHub web UI
+#
+# is the directory auto-created by run.py — it already contains
+# your result.json and env_info.json; no manual file moves are needed.
```
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide. If you'd rather skip the PR workflow, [open a submission issue](https://github.com/JuhaoLiang1997/AccelMark/issues/new?template=community_submission.md) instead and a bot will draft the PR for you.
@@ -80,6 +92,18 @@ See [suites/README.md](suites/README.md) for full specs, time budgets, SLA defin
---
+## Currently on the leaderboard
+
+
+
+
+
+A snapshot of accelerators that have at least one submission on the leaderboard. Tile size is proportional to submission count; colour denotes vendor. See the [**live leaderboard**](https://juhaoliang1997.github.io/AccelMark) for current rankings, per-suite breakdowns, and the underlying `result.json` files.
+
+---
+
## Supported platforms
Reference runners live under `runners/` (see each folder’s `meta.json`). The table below is **auto-generated** from each runner's `meta.json` — never hand-edited. Add a runner, declare its `suite_support` in `meta.json`, and the matrix updates on its own.
@@ -141,7 +165,7 @@ If you use AccelMark results in research, please cite:
```bibtex
@misc{accelmark2026,
title = {AccelMark: Open Benchmark Leaderboard for AI Accelerators on LLM Workloads},
- author = {Liang, Juhao and {The AccelMark Contributors}},
+ author = {Liang, Juhao and Zhang, Zhiyuan and Li, Siyu and Lin, Zhihang and Yu, Minchen and Zeng, Li and Chen, Zizhong and Sun, Ruoyu and Wang, Benyou},
year = {2026},
url = {https://github.com/JuhaoLiang1997/AccelMark}
}
@@ -151,5 +175,6 @@ If you use AccelMark results in research, please cite:
## License
-MIT — see [LICENSE](LICENSE).
-Submitted benchmark results are contributed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
\ No newline at end of file
+Apache 2.0 — see [LICENSE](LICENSE).
+Submitted benchmark results are contributed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
+Bundled third-party data (datasets, accuracy subsets) keeps its upstream license — see [NOTICE](NOTICE).
\ No newline at end of file
diff --git a/datasets/README.md b/datasets/README.md
index 737d2318..82c06df4 100644
--- a/datasets/README.md
+++ b/datasets/README.md
@@ -41,3 +41,19 @@ Each line in `requests.jsonl`:
"prompt_type": "conversational"
}
```
+
+## License & attribution
+
+Bundled prompt data keeps its **upstream license**, not AccelMark's
+Apache-2.0. The three ShareGPT-derived datasets shipped here are
+redistributed under **[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)**
+from [shibing624/sharegpt_gpt4](https://huggingface.co/datasets/shibing624/sharegpt_gpt4).
+
+If you add a new dataset, its `README.md` **must** include:
+
+1. The upstream source (URL or HuggingFace ID).
+2. The upstream license (link to the canonical text).
+3. A citation block if the upstream authors request one.
+
+See [`../NOTICE`](../NOTICE) for the full third-party attribution that ships
+with the repository.
diff --git a/datasets/sharegpt_edge_v1/README.md b/datasets/sharegpt_edge_v1/README.md
index 2d53ad7e..0626fd46 100644
--- a/datasets/sharegpt_edge_v1/README.md
+++ b/datasets/sharegpt_edge_v1/README.md
@@ -5,18 +5,30 @@ Short-turn ShareGPT conversational prompts. Used by Suite F (consumer/edge bench
Filtered from `shibing624/sharegpt_gpt4` to retain only short-turn exchanges,
producing a distribution representative of interactive consumer inference workloads.
-| Field | Value |
-|-------------------|----------------------------------|
-| Source | shibing624/sharegpt_gpt4 |
-| Prompts | 500 |
-| Input tokens p50 | ~95 |
-| Input tokens p99 | ~600 |
-| Output tokens p50 | ~150 |
-| Output tokens p99 | ~400 |
-| Type | Conversational, single-turn |
+| Field | Value |
+|-------------------|--------------------------------------------------------------------------------------|
+| Source | [shibing624/sharegpt_gpt4](https://huggingface.co/datasets/shibing624/sharegpt_gpt4) |
+| Prompts | 500 |
+| Input tokens p50 | ~95 |
+| Input tokens p99 | ~600 |
+| Output tokens p50 | ~150 |
+| Output tokens p99 | ~400 |
+| Type | Conversational, single-turn |
## Difference from sharegpt_standard_v1
`sharegpt_standard_v1` (Suites A, B, C, and E) has p50 input ~280 tokens and p50 output ~310 tokens.
`sharegpt_edge_v1` uses shorter prompts to keep benchmark runtime practical on consumer GPUs
-and to reflect the latency-sensitive interactive use cases they are typically deployed for.
\ No newline at end of file
+and to reflect the latency-sensitive interactive use cases they are typically deployed for.
+
+## License & attribution
+
+The prompts are derived from `shibing624/sharegpt_gpt4` and are redistributed
+under the upstream license, **[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)**.
+
+Apache-2.0 (the AccelMark repository license) covers only the AccelMark code,
+schemas, and selection logic — not the prompt text itself. See [`../../NOTICE`](../../NOTICE)
+for the full third-party attribution.
+
+If you use these prompts in research, please cite the upstream dataset and
+this repository.
\ No newline at end of file
diff --git a/datasets/sharegpt_longctx_v1/README.md b/datasets/sharegpt_longctx_v1/README.md
index 72f86980..6d70a1ef 100644
--- a/datasets/sharegpt_longctx_v1/README.md
+++ b/datasets/sharegpt_longctx_v1/README.md
@@ -4,8 +4,23 @@ Long-context prompts for Suite D (~28K-token inputs; `max_model_len` 30,208 in `
| Field | Value |
|---|---|
-| Source | Long-context subset of ShareGPT |
+| Source | [shibing624/sharegpt_gpt4](https://huggingface.co/datasets/shibing624/sharegpt_gpt4) (long-context subset) |
| Prompts | 200 |
| Input tokens p50 | ~28,000 |
| Output tokens p50 | ~256 (suite caps generation) |
| Type | Document QA, long-form input |
+
+## License & attribution
+
+The prompts are derived from the same ShareGPT GPT-4 corpus as
+`sharegpt_standard_v1` and are redistributed under the upstream license,
+**[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)**. Long-context
+items are selected by tokenized input length; no additional editorial
+modification beyond filtering is applied.
+
+Apache-2.0 (the AccelMark repository license) covers only the AccelMark code,
+schemas, and selection logic — not the prompt text itself. See [`../../NOTICE`](../../NOTICE)
+for the full third-party attribution.
+
+If you use these prompts in research, please cite the upstream dataset and
+this repository.
diff --git a/datasets/sharegpt_standard_v1/README.md b/datasets/sharegpt_standard_v1/README.md
index 2f1655a6..f2413ee2 100644
--- a/datasets/sharegpt_standard_v1/README.md
+++ b/datasets/sharegpt_standard_v1/README.md
@@ -4,8 +4,20 @@ Standard ShareGPT conversational prompts. Used by Suite A, B, C, E.
| Field | Value |
|---|---|
-| Source | shibing624/sharegpt_gpt4 |
+| Source | [shibing624/sharegpt_gpt4](https://huggingface.co/datasets/shibing624/sharegpt_gpt4) |
| Prompts | 500 |
| Input tokens p50 | ~280 |
| Output tokens p50 | ~310 |
| Type | Conversational, single-turn |
+
+## License & attribution
+
+The prompts are derived from `shibing624/sharegpt_gpt4` and are redistributed
+under the upstream license, **[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)**.
+
+Apache-2.0 (the AccelMark repository license) covers only the AccelMark code,
+schemas, and selection logic — not the prompt text itself. See [`../../NOTICE`](../../NOTICE)
+for the full third-party attribution.
+
+If you use these prompts in research, please cite the upstream dataset and
+this repository.
diff --git a/docs/assets/chip-cloud.png b/docs/assets/chip-cloud.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3ccccec784dace50c29b3136f34b31c0423640a
GIT binary patch
literal 219759
zcmb5W2Uru`);3HL3y7#R1pz@RQdN3aP!y1W^ddxR=%M!jB1J)vA|M?Eq}LFT-b9*&
zUP1|-&_fR-1itZ{^Pcxy|9?H-dA?j%n90oSJ$vujYpr|V>mEL8fL>5jGEtI{kWeeX
ze5Of4az%oKgpBU;Mc{~t)ZjS@38}k{qN0YK;tNHnJ=8_Z$<*BPnT@NHy{Wf`FbN4y
zjC*vWYP$wqhkB9bfYgU;EO#D%R2&(i^l-N3qkH~Po1#c7+5d`z-~9)g&a`?Dj@k5E
z4V=n9XgfJOU4M4z#!RZzgCEvj=tS*F4s_=-Q6kl~_Du`3#%;bMGM=@Bm{&h@5F>R<
zzVE}*wF<2&^S|*^o)POe_6HBq>K_c$>OHQb)ZZi`1rt5e$+QB9#-kbC$xOuAk*ATj
z8RlX>#ydn@L36S`vVO2oIM>kI88j@IA)Ov?k$Rk`QewDe3F7?(
zI%8BXvE$DA>))odT(`nCUcb9QF&}U`93>wm;G*|dL+~>hf6p`J8?==__Xn~}Z$5Uu
z{B%9~hwFwvO$njf!2wJE)xilVG&!k2E|HcMH##-xb>S8hiR1b!QSBG&Sw|}_Ercr%
zzmkPwdElliZS0=D0asUj=TFVA?y!(~#P65gLvAsJWW3`eUSfP;+n{yvX)o{`!Y%cc
zt<=;=c!B-PBo|1TNGO0kQs65`%KYzrB~l&|@_!sBBOwX1A-V9cYe2yE&nFuA{wed%
zEqQDx$tB>|P2lU5N%lWiUy;Zp|DSy_I^Z11Q!PbhWnimi?qX@_=xPmh!_P_osppE*
zO9NLD5(dscUs7ew`#V7W<2Ks*Zu)Akq|BiXf~FQwGfP1)2d6*vkjQvR0lN;CZl-s=
z9PAxkrMzT0{&9sAu>a?<5XaqrT;gUY%b~BPaaR%QVtH3g@S)&C4mrxZckjx$SXfDE
zK2!Qvap0FMhqarVla!ECc&r?4Q@1tRoFQc_ar;bWo4j|G4$1YErx-Aug%99{4I
zvy%U*=b5Fexr>dHn+??Q?w@*1&7kgXvK$ah%#sL^J;2v_K!jEPCasB`A%>Ul;KT7KVZ^_5PVh{hb
z=zpC0{}$D8wRBO0Iso@{ll$N2^{>MJdGcQcWrY58{Xd4{pX2pAYFD-@)_GEwE1-?iP+Pnj|54LZbZaskRsC<_twD-63=5
zZrJwCnCsEkIqCVI-FRAYgEanF_5IW2%>4XY!6o{a^8-tAI4*w;<{{(Y;e4seGjkG<
z{>}h$v|@%mGHdL|p6@l+!)cqn)u-3|uqT$1KLW-dWw8g6kX^p}_x{}0xJyNvchyUK
z_2%C$b6JAyLaM}#>rY5XFZ``PciSniJN1-@g+~29G>w!S`8TWo(~PcipiPfAv$D+p
zZqF~@ebVyL_3w58xbAWBlke0LTj)lkJxqUwDa}_!oc@{5HyT-`++GS6YU!PwVKN3>N(`%`&&bm$VJm9C7(c8?
z#w7SM7ZIaI@~!$@ms{SEXLTTD7O&nG_kXqO>eFn{;8h`F=K(Kc7BHOV|15iy4`pJD
z<#L)Tsp&nqEesRxPnXrAq~~2q`E}{
Rzy{on2mo`0U1Qrj
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ʺwAfF8padg=c_*?|9;#~7(!G7d<8#%|
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