Кампания на пять равных долей: контейнер сразу считает свою часть
gen_scenarios.py раскладывает 115 прогонов по пяти долям (LPT, поправка на размер сетки по замерам dzn) — по ≈24 ч каждая; поле shard в scenarios.json. run_campaign.sh/.ps1 получили --shard. Новая точка входа образа entrypoint.sh: при KBC2D_SHARD сама выбирает путь к карте (dzn или NVIDIA), проверяет vulkaninfo и parity.py и запускает долю. Для чужих ПК под Windows/WSL2 — docker-compose.shards.yml и shard.bat. Образ notbigghost/kbc2d:1.3.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,9 +6,67 @@
|
||||
схемы. Каждый прогон кладёт в собственную папку `cmd.txt`, `log.txt`, `report.txt`, `series.csv`
|
||||
и `summary.json`; гифку пишут **59 прогонов из 115** — остальным `--gif` не передаётся.
|
||||
|
||||
## Пять долей: чужие ПК под Windows / WSL2
|
||||
|
||||
Кампания разложена на **пять долей, равных по времени**: у каждого прогона в `scenarios.json`
|
||||
есть поле `shard` (1…5). Каждая доля — отдельный контейнер, который при развёртывании **сразу
|
||||
начинает считать**: ни сборки, ни ручной цепочки проверок, всё окружение (решатель, Vulkan-
|
||||
загрузчик, dzn, Python) — внутри образа.
|
||||
|
||||
На машину переносятся два файла из корня решателя — `docker-compose.shards.yml` и `shard.bat`:
|
||||
|
||||
```bat
|
||||
shard.bat 3
|
||||
```
|
||||
|
||||
или из любой оболочки:
|
||||
|
||||
```sh
|
||||
docker compose -f docker-compose.shards.yml up -d shard3
|
||||
docker compose -f docker-compose.shards.yml logs -f shard3
|
||||
```
|
||||
|
||||
При старте контейнер (`entrypoint.sh`) сам делает то, что раньше делалось профилями check:
|
||||
|
||||
1. выбирает путь к карте — есть `/dev/dxg`, значит WSL2 / Docker Desktop и dzn; нет —
|
||||
нативный Linux с NVIDIA Container Toolkit;
|
||||
2. проверяет `vulkaninfo`: нужен хотя бы один не программный адаптер;
|
||||
3. гоняет `parity.py` (~2 мин) и только при совпадении с CPU-эталоном идёт дальше; после
|
||||
успеха кладёт `out/parity_shardN.ok`, и перезапуск сверку не повторяет;
|
||||
4. `run_campaign.sh --resume --shard N`.
|
||||
|
||||
Любой провал на шагах 1–3 останавливает контейнер с объяснением, что поправить на хосте, — а
|
||||
не отдаёт кампанию считать впустую.
|
||||
|
||||
**В контейнер нельзя положить** драйвер видеокарты: он должен стоять в самой Windows (Vulkan
|
||||
внутри контейнера — это dzn, транслирующий вызовы в D3D12 драйвера хоста). И нужен Docker
|
||||
Desktop с бэкендом WSL2 (так по умолчанию) либо Docker внутри WSL2.
|
||||
|
||||
| доля | прогонов | ≈ часов |
|
||||
|---|---|---|
|
||||
| 1 | 22 | 24.0 |
|
||||
| 2 | 23 | 24.0 |
|
||||
| 3 | 23 | 24.0 |
|
||||
| 4 | 23 | 24.0 |
|
||||
| 5 | 24 | 24.0 |
|
||||
|
||||
Часы — оценка при 1200 MLUPS на крупной сетке **с поправкой на размер сетки**: на dzn мелкие
|
||||
сетки считаются медленнее на узел, а сверхмелкие из группы I идут через раздельные привязки
|
||||
(кривая — `DZN_MLUPS` в `gen_scenarios.py`, по замерам из раздела «Чего трансляция стоит по
|
||||
скорости»). Раскладка жадная: самый долгий прогон — в самую лёгкую долю. Девять прогонов
|
||||
группы I (по ≈8.7 ч) разошлись по два на долю в четырёх долях, пятая получила один и добрала остальным.
|
||||
Равенство долей — равенство на **одинаковых** картах: на разных доли закончатся в разное время.
|
||||
Абсолютные часы на конкретной карте — `--dry-run --shard N` после `--calibrate`.
|
||||
|
||||
Пересобрать раскладку под другое число машин: `python gen_scenarios.py --shards 3`.
|
||||
|
||||
**Сбор результатов.** Каждая доля пишет в `./out` рядом с compose-файлом: каталоги прогонов
|
||||
`out/<id>/` (уникальны по id), свою сводку `summary_shardN.csv` и свой журнал
|
||||
`campaign_shardN.log`. Собрать кампанию целиком — скопировать все пять `out/` в одну папку.
|
||||
|
||||
## Быстрый старт на сервере
|
||||
|
||||
Образ опубликован, собирать ничего не нужно: **`notbigghost/kbc2d:1.2.0`**. Исходники на
|
||||
Образ опубликован, собирать ничего не нужно: **`notbigghost/kbc2d:1.3.0`**. Исходники на
|
||||
сервере тоже не нужны — переносится один файл `docker-compose.server.yml`.
|
||||
|
||||
```sh
|
||||
@@ -186,6 +244,7 @@ KBC2D_GPU_MLUPS=1400 ./run_campaign.sh --dry-run
|
||||
| `--group A,B` | только выбранные группы |
|
||||
| `--only cyl_re150` | по подстроке идентификатора |
|
||||
| `--budget-hours 24` | остановиться, когда время выйдет |
|
||||
| `--shard 3` | только доля 3 (поле `shard` в `scenarios.json`); то же — переменная `KBC2D_SHARD` |
|
||||
|
||||
Прогон, который упал или развалился, помечается в сводке и **не останавливает кампанию**:
|
||||
группы E и G специально ищут предел устойчивости, там развал — ожидаемый результат.
|
||||
|
||||
Reference in New Issue
Block a user