Skip to content

Commit 86a455f

Browse files
refactor: align weakscaling package roles [code:qws] [system:MiyabiG]
1 parent 131ee1c commit 86a455f

19 files changed

Lines changed: 705 additions & 240 deletions

‎docs/cx/BENCHKIT_GAP_ANALYSIS.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ Once the estimation specification is clarified, many other design decisions beco
169169

170170
現状は `qws` が先行 app として、
171171

172-
- `lightweight_fom_scaling`
172+
- `weakscaling`
173173
- `instrumented_app_sections_dummy`
174174
- 推定元 result の UUID / timestamp 引き回し
175175
- side ごとの `model` 表現
@@ -184,8 +184,8 @@ Once the estimation specification is clarified, many other design decisions beco
184184
| 項目 | 仕様上の期待 | 現状実装 | GAP | 優先度 |
185185
|---|---|---|---|---|
186186
| 共通推定エントリ | app 側 `estimate.sh` を薄くし、共通呼び出し順を持つこと | `scripts/estimation/common.sh` と package 呼び出し型の `qws/estimate.sh` がある | 他 app への横展開が未着手。`estimate.sh` 内の宣言ブロックの共通 API も未固定 | 最優先 |
187-
| 軽量推定 package | FOM-only、weak scaling 前提、補正なしなら FOM 一定 | `lightweight_fom_scaling` が実装済み | 参照実装は 1 本のみ。current/future 側で別 model を使う実運用は未整備 | 高 |
188-
| 適用可能性判定 | 不足入力を `applicable/fallback/not_applicable/needs_remeasurement` で扱うこと | `lightweight_fom_scaling` と `instrumented_app_sections_dummy` はこれらを扱え、final Estimate JSON では `applicable`、`partially_applicable`、`fallback`、`not_applicable` を表現できる。requested/applied package の識別も保持できる | 複数 detailed package 間の分岐、より細かい fallback 選択、UI 表示は未実装 | 高 |
187+
| 軽量推定 package | section ごとの時間を app 側が出し、`identity` と `logp` で weak scaling を構成できること | `weakscaling` の実装を整理中 | app / package / BenchKit の責務分離、他 app への横展開、表示整合は未完 | 高 |
188+
| 適用可能性判定 | 不足入力を `applicable/fallback/not_applicable/needs_remeasurement` で扱うこと | `weakscaling` と `instrumented_app_sections_dummy` はこれらを扱う方向で整理中。final Estimate JSON では `applicable`、`partially_applicable`、`fallback`、`not_applicable` を表現できる | 複数 detailed package 間の分岐、より細かい fallback 選択、UI 表示は未実装 | 高 |
189189
| package metadata | package 名、版、required inputs、fallback policy を持つこと | 軽量/詳細ダミーとも最小 metadata を持つ | richer metadata を discovery や UI に活かす実装がまだ無い | 中 |
190190
| section ごとの package 指定 | 区間ごとに推定 package を割り当てられること | `bk_emit_section` / `bk_emit_overlap` から Result JSON に `estimation_package` を載せられ、`instrumented_app_sections_dummy` でも dispatch に利用している | 他 app への横展開と package discovery の整理が未完。app 側が実行前に宣言する形は設計整理済みだが未実装 | 最優先 |
191191
| app 側推定宣言 | app 側が実行前に section / overlap と `estimation_package` をまとめて宣言できること | `estimate.sh` に宣言ブロックを寄せる方向性は整理済み | 宣言 API、既定値の与え方、`run.sh` からの読込み方は未固定。実装も未着手 | 最優先 |
@@ -201,7 +201,7 @@ Once the estimation specification is clarified, many other design decisions beco
201201
この表から、現在の最小核は以下と整理できる。
202202

203203
1. `scripts/estimation/common.sh` を中心とした共通呼び出しと Estimate JSON 出力
204-
2. `lightweight_fom_scaling` による FOM-only 軽量推定
204+
2. `weakscaling` による `identity` / `logp` ベースの軽量推定
205205
3. `instrumented_app_sections_dummy` による区間時間ベース詳細ダミー推定
206206
4. 推定元 result UUID / timestamp の引き回し
207207

‎docs/cx/ESTIMATE_JSON_SPEC.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ In addition, `target_nodes` represents the estimated node count on each system s
157157
"system": "FugakuNEXT",
158158
"fom": 246.912,
159159
"target_nodes": "4",
160-
"scaling_method": "scale-mock",
160+
"scaling_method": "weakscaling",
161161
"benchmark": {
162162
"system": "MiyabiG",
163163
"fom": 123.456,
@@ -225,7 +225,7 @@ Estimate JSON may include the following extension fields:
225225
"method_class": "lightweight",
226226
"detail_level": "basic",
227227
"source_result_uuid": "00000000-0000-0000-0000-000000000000",
228-
"estimation_package": "lightweight_fom_scaling",
228+
"estimation_package": "weakscaling",
229229
"estimation_package_version": "0.1",
230230
"requested_estimation_package": "instrumented_app_sections_dummy",
231231
"requested_estimation_package_version": "0.1"
@@ -290,7 +290,7 @@ This field stores how the measurement inputs used for estimation were obtained.
290290
{
291291
"model": {
292292
"type": "scaling",
293-
"name": "scale-mock",
293+
"name": "weakscaling",
294294
"version": "0.1",
295295
"implementation": "programs/qws/estimate.sh"
296296
}

‎docs/cx/ESTIMATION_INPUT_ACQUISITION_SPEC.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,8 @@ The application developer should generally only need to ensure:
389389

390390
詳細推定では、これに加えて app 側が `estimate.sh` の宣言ブロックで section / overlap と `estimation_package` の割当てを先に示せるようにしてよい。ただし、採取手順の詳細や保存形式の詳細まで app 側へ押し込めない方が望ましい。
391391

392+
`weakscaling` のように artifact を要求しない package では、app 側は通常実行の中で section / overlap 時間を出し、その item ごとに `identity` または `logp` を割り当てるところまででよい。
393+
392394
### 8.2 推定パッケージ開発者の責務 / Estimation Package Developer Responsibility
393395

394396
推定パッケージ開発者は、原則として次を定義する。
@@ -428,6 +430,8 @@ BenchKit is generally responsible for:
428430
- package metadata を見た追加採取実行の組立て
429431
- `bk_emit_*` で与えられた値と追加採取結果の合流
430432

433+
一方で `weakscaling` のような artifact 不要 package では、BenchKit 側は追加採取を組み立てるのではなく、app 側が出した section / overlap 時間に対して `identity` / `logp` を dispatch し、top-level FOM を合成する責務を持つ。
434+
431435
## 9. 現時点で固定しないこと / Items Intentionally Left Open
432436

433437
本書は以下を現時点では固定しない。

‎docs/cx/ESTIMATION_PACKAGE_METADATA_SPEC.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ Estimation-package metadata must contain at least:
8282

8383
例:
8484

85-
- `lightweight_fom_scaling`
85+
- `weakscaling`
8686
- `section_breakdown_scaling`
8787

8888
This is the name used to identify the package.
@@ -271,7 +271,7 @@ Examples:
271271

272272
```json
273273
{
274-
"name": "lightweight_fom_scaling",
274+
"name": "weakscaling",
275275
"version": "0.1",
276276
"method_class": "lightweight",
277277
"detail_level": "basic",

‎docs/cx/ESTIMATION_PACKAGE_SHELL_API_SPEC.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ In the future, application-side `estimate.sh` should preferably be limited to:
181181
## 7. 参照イメージ / Reference Shape
182182

183183
```sh
184-
BK_ESTIMATION_PACKAGE=lightweight_fom_scaling
184+
BK_ESTIMATION_PACKAGE=weakscaling
185185
source scripts/estimation/common.sh
186186
source scripts/estimation/packages/${BK_ESTIMATION_PACKAGE}.sh
187187

‎docs/cx/ESTIMATION_PACKAGE_SPEC.md‎

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ Here, input means not only the presence of a Result JSON, but at least:
448448
ここで重要なのは、これらは「使える配下パッケージの集合」を表すものであり、app 固有の section 名そのものを固定で期待するための項目ではない、という点である。どの section にどの package を割り当てるかは app 側 Result JSON の `estimation_package` で表す。
449449

450450
また、区間パッケージ側が `required_artifact_kinds` や system 範囲を定義している場合、それと実際の section / overlap の割当て、必要なデータ採取、採取済みデータの保存・復元との照合は BenchKit 側で扱う。app 側は原則として「section 名」と「どの推定 package を使うか」を決めればよく、採取手順や保存形式の具体記述を直接抱え込まない方がよい。
451-
- 例: `"interval_time_simple"`
451+
- 例: `"identity"`
452452

453453
For practical use, the package metadata or equivalent documented definition should preferably be able to express at least:
454454

@@ -521,6 +521,8 @@ The application side should preferably be limited to:
521521

522522
特に詳細推定では、app 側は section 名と `estimation_package` の割当てを決めるところまでに責務を寄せ、PAPI の counter set 分割や trace 採取方法、保存形式のような共通化可能な処理は BenchKit 側へ寄せるのが望ましい。
523523

524+
`weakscaling` のように artifact を前提としない section-wise package では、さらに app 側責務は明確になる。app 側は通常実行から section / overlap 時間を Result JSON へ出し、各 item に `identity` または `logp` を割り当てればよい。
525+
524526
### 5.3 推定パッケージ開発者側責務 / Estimation-Package-Developer Responsibilities
525527

526528
推定パッケージ開発者の責務は、原則として以下を定義することにある。
@@ -534,6 +536,18 @@ The application side should preferably be limited to:
534536

535537
すなわち、BenchKit が共通ルールを提供し、app 側が package を選択し、package 開発者が推定方式の具体的意味を定める、という責務分離を基本とする。
536538

539+
`weakscaling` の場合は、少なくとも次のように読めるのが望ましい。
540+
- app 側
541+
- section / overlap 時間を書く
542+
- `identity` / `logp` の割当てを決める
543+
- 推定パッケージ開発者側
544+
- `identity` と `logp` の意味
545+
- `weakscaling` の合成規則
546+
- BenchKit 側
547+
- section package dispatch
548+
- current / future breakdown 合成
549+
- top-level `applicability` と Estimate JSON への正規化
550+
537551
The estimation-package developer is primarily responsible for defining:
538552

539553
- the measurement method assumed by the package
@@ -551,14 +565,14 @@ In other words, the intended separation is that BenchKit provides the common rul
551565

552566
例:
553567

554-
- `lightweight_fom_scaling`
568+
- `weakscaling`
555569
- `baseline_ratio_estimation`
556570

557571
これらは、高頻度実行や PoC に向く。
558572

559573
Examples:
560574

561-
- `lightweight_fom_scaling`
575+
- `weakscaling`
562576
- `baseline_ratio_estimation`
563577

564578
These are suitable for high-frequency runs and PoC work.
@@ -593,7 +607,7 @@ BenchKit においては、将来的に app 側の `estimate.sh` が毎回すべ
593607
BK_ESTIMATION_TARGET_SYSTEM=FutureSystemA
594608
BK_ESTIMATION_TARGET_NODES=256
595609

596-
bk_declare_section prepare_rhs interval_time_simple
610+
bk_declare_section prepare_rhs identity
597611
bk_declare_section compute_hopping counter_papi_detailed
598612
bk_declare_overlap compute_hopping,halo_exchange overlap_max_basic
599613

@@ -609,7 +623,7 @@ In BenchKit, a desirable future direction is that application-side `estimate.sh`
609623
BK_ESTIMATION_TARGET_SYSTEM=FutureSystemA
610624
BK_ESTIMATION_TARGET_NODES=256
611625

612-
bk_declare_section prepare_rhs interval_time_simple
626+
bk_declare_section prepare_rhs identity
613627
bk_declare_section compute_hopping counter_papi_detailed
614628
bk_declare_overlap compute_hopping,halo_exchange overlap_max_basic
615629

‎docs/guides/add-estimation-package.md‎

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@
5050
- top-level:
5151
`instrumented_app_sections_dummy.sh`
5252
- section:
53-
`interval_time_simple.sh`
53+
`identity.sh`
5454
`counter_papi_detailed.sh`
5555
`trace_mpi_basic.sh`
56-
`trace_collective_logp.sh`
56+
`logp.sh`
5757
`overlap_max_basic.sh`
5858

5959
という分け方になっています。
@@ -94,11 +94,11 @@
9494

9595
たとえば、
9696

97-
- `interval_time_simple`
97+
- `identity`
9898
- 区間時間があれば固定比で変換
9999
- `counter_papi_detailed`
100100
- PAPI artifact があればそれを前提に変換
101-
- `trace_collective_logp`
101+
- `logp`
102102
- collective 系の区間を logP 扱いで変換
103103

104104
です。
@@ -245,7 +245,7 @@ required_section_artifacts:
245245
output_fields:
246246
future_system.fom_breakdown.sections[].time
247247
current_system.fom_breakdown.sections[].time
248-
fallback_to: interval_time_simple
248+
fallback_to: identity
249249
```
250250

251251
このとき、上位パッケージと区間パッケージで役割を分けておくと整理しやすくなります。
@@ -260,6 +260,17 @@ fallback_to: interval_time_simple
260260

261261
ここで、上位パッケージは app 固有の section 名を固定で期待しない方がよいです。どの section にどの package を割り当てるかは app 側 Result JSON の `estimation_package` で表します。
262262

263+
`weakscaling` はこの分担を確認する最初の例として分かりやすいです。
264+
- app 側
265+
- section / overlap 時間を出す
266+
- 各 item に `identity` または `logp` を割り当てる
267+
- package 側
268+
- `identity` と `logp` の意味を定義する
269+
- `weakscaling` として合成する
270+
- BenchKit 側
271+
- 割当てられた package を呼ぶ
272+
- current / future の breakdown と top-level FOM をまとめる
273+
263274
PAPI のように複数回の採取が必要な場合でも、package 開発者は「`papi` が必要」と定義するところまでに責務を寄せるのがよいです。どの counter set を何回に分けて取るか、どこへ保存するか、再推定時にどう復元するかは、できるだけ BenchKit 側の共通処理に寄せます。
264275

265276
ここが曖昧なまま実装を始めると、

‎docs/guides/add-estimation-to-app.md‎

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
#!/bin/bash
4646
set -euo pipefail
4747

48-
BK_ESTIMATION_PACKAGE="lightweight_fom_scaling"
48+
BK_ESTIMATION_PACKAGE="weakscaling"
4949
source scripts/estimation/common.sh
5050
source "scripts/estimation/packages/${BK_ESTIMATION_PACKAGE}.sh"
5151

@@ -70,6 +70,18 @@ bk_run_estimation "$1"
7070

7171
詳細推定では、app ごとの推定宣言を `estimate.sh` にまとめると整理しやすくなります。`estimate.sh` 自身は CI や再推定の入口になり、`run.sh` 側も必要に応じてこれを読み込む形にできます。
7272

73+
`weakscaling` を使う場合は、特に次の分担を前提にすると分かりやすいです。
74+
- app 側
75+
- section / overlap の時間を通常実行で出す
76+
- 各 item に `identity` または `logp` を割り当てる
77+
- package 側
78+
- `identity` は補正なし
79+
- `logp` は node 数比較にもとづく補正
80+
- BenchKit 側
81+
- section package の呼び分け
82+
- current / future の合成
83+
- top-level applicability の整理
84+
7385
ここでまず宣言したいのは次です。
7486
- section 名
7587
- overlap 名
@@ -79,9 +91,9 @@ bk_run_estimation "$1"
7991
イメージとしては次のようになります。
8092

8193
```bash
82-
bk_declare_section prepare_rhs interval_time_simple
94+
bk_declare_section prepare_rhs identity
8395
bk_declare_section compute_solver counter_papi_detailed
84-
bk_declare_section allreduce trace_collective_logp
96+
bk_declare_section allreduce logp
8597
bk_declare_overlap compute_hopping,halo_exchange overlap_max_basic
8698
```
8799

@@ -119,7 +131,7 @@ bk_emit_result \
119131
```bash
120132
bk_emit_section \
121133
prepare_rhs 0.42 \
122-
--estimation-package interval_time_simple \
134+
--estimation-package identity \
123135
>> results/result
124136

125137
bk_emit_section \
@@ -172,6 +184,8 @@ bk_run_estimation "$1"
172184

173185
詳細推定では、区間パッケージが `papi` や `trace` のような採取種別を要求することがあります。
174186

187+
ただし `weakscaling` の場合は、追加採取を前提にしません。app 側が通常実行の中で section / overlap 時間を書き、`identity` と `logp` だけで推定する前提です。
188+
175189
app 側では、まず section 名と `estimation_package` を決めることを優先してください。採取手順、複数回実行の要否、保存先、再推定時の復元方法は、共通化できるものから BenchKit 側へ寄せるのがよいです。
176190

177191
特に PAPI のように複数回実行が必要になる採取は、app 側に細かく書かせすぎると重くなります。package 側は「`papi` が必要」と定義し、BenchKit 側が採取や保存の共通処理を引き受ける形が自然です。

‎programs/qws/estimate.sh‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ load_estimation_package() {
1919
source "scripts/estimation/packages/${package_name}.sh"
2020
BK_ESTIMATION_PACKAGE_VERSION=$(bk_estimation_package_metadata | jq -r '.version // empty')
2121
case "$package_name" in
22-
lightweight_fom_scaling)
23-
BK_ESTIMATION_MODEL_NAME="scale-mock"
22+
weakscaling)
23+
BK_ESTIMATION_MODEL_NAME="weakscaling"
2424
BK_ESTIMATION_MODEL_VERSION="0.1"
2525
;;
2626
instrumented_app_sections_dummy)

‎programs/qws/run.sh‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ print_results() {
6161
create_dummy_estimation_artifact "estimation_inputs/write_result_interval.json" "{\"section\":\"write_result\",\"kind\":\"interval_time\"}"
6262
create_dummy_estimation_artifact "estimation_inputs/compute_halo_overlap.json" "{\"overlap\":[\"compute_hopping\",\"halo_exchange\"],\"kind\":\"overlap_time\"}"
6363

64-
bk_emit_section prepare_rhs "$section_prepare_rhs" interval_time_simple results/estimation_inputs/prepare_rhs_interval.json
64+
bk_emit_section prepare_rhs "$section_prepare_rhs" identity results/estimation_inputs/prepare_rhs_interval.json
6565
bk_emit_section compute_hopping "$section_compute_hopping" counter_papi_detailed results/estimation_inputs/compute_hopping_papi.tgz
6666
bk_emit_section compute_solver "$section_compute_solver" counter_papi_detailed results/estimation_inputs/compute_solver_papi.tgz
6767
bk_emit_section halo_exchange "$section_halo_exchange" trace_mpi_basic results/estimation_inputs/halo_exchange_trace.tgz
68-
bk_emit_section allreduce "$section_allreduce" trace_collective_logp results/estimation_inputs/allreduce_trace.tgz
69-
bk_emit_section write_result "$section_write_result" interval_time_simple results/estimation_inputs/write_result_interval.json
68+
bk_emit_section allreduce "$section_allreduce" logp results/estimation_inputs/allreduce_trace.tgz
69+
bk_emit_section write_result "$section_write_result" identity results/estimation_inputs/write_result_interval.json
7070
bk_emit_section overlap:compute_hopping,halo_exchange "$overlap_compute_halo" overlap_max_basic results/estimation_inputs/compute_halo_overlap.json --type overlap --members compute_hopping,halo_exchange
7171
}
7272

0 commit comments

Comments
 (0)