Docker-сервис, выбор основы и сравнение моделей, сборщик датасета
docker / build (push) Failing after 39s
docker / build (push) Failing after 39s
- Docker: Dockerfile (CPU), compose с FlareSolverr, настройка через DUB_* переменные, токен доступа к /predict, tools/pack_models.py, workflow Gitea Actions, docs/docker.md - Модель грузится офлайн (config.json рядом с весами); общий код вынесен в src/spans.py, сервису не нужны sklearn/matplotlib/pandas - Обучение: профили tiny2/base/large/modern, запуски в models/runs, реестр и честное сравнение на одной тестовой выборке (src/runs.py), пункт меню «Модели» - Датасет: язык и аудио-параметры дорожек, 18+ по строкам «Аудио», ручные метки по ссылкам, переиндексация сохранённого HTML, параллельная сборка, сбалансированная выборка - Тексты страниц (data/pages) больше не хранятся в git Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d155b8584b
commit
efc9a4f56a
411 files changed
+87495
-27363
No files matched your search
@@ -0,0 +1,44 @@
|
||||
"""Проверка параллельной переиндексации: те же метки, страницы и meta, что и в одном процессе.
|
||||
|
||||
Отдельный скрипт, потому что multiprocessing на Windows заново импортирует главный модуль:
|
||||
tests/run_tests.py без `if __name__ == "__main__"` запустился бы в каждом процессе.
|
||||
Печатает одну строку JSON.
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path[:0] = [str(ROOT), str(ROOT / "tools"), str(ROOT / "tools" / "harvest")]
|
||||
import collect as col # noqa: E402
|
||||
|
||||
POST = ("Год выпуска: 2020\nАудио 1: Opus, 6 ch, 221 Kbps | Русский AVO (Дмитрий Пучков)\n"
|
||||
"Аудио 2: AC3, 6 ch, 448 Kbps | Русский MVO (LostFilm)\n")
|
||||
|
||||
|
||||
def run(base: Path, name: str, workers: int) -> dict:
|
||||
d = base / name
|
||||
(d / "raw" / "nnm").mkdir(parents=True)
|
||||
(d / "labels.csv").write_text("", encoding="utf-8")
|
||||
for i in range(50):
|
||||
(d / "raw" / "nnm" / f"{9000 + i}.json").write_text(json.dumps(
|
||||
{"id": str(9000 + i), "source": "nnm", "ok": True, "title": f"Фильм {i} (2020) BDRip", "post": POST},
|
||||
ensure_ascii=False), encoding="utf-8")
|
||||
(d / "raw" / "nnm" / f"{9000 + i}.html").write_text(
|
||||
f"<html><body><h1>Фильм {i}</h1><div>{POST.replace(chr(10), '<br>')}</div></body></html>", encoding="utf-8")
|
||||
col.RAW, col.PAGES, col.LABELS = d / "raw", d / "pages", d / "labels.csv"
|
||||
col.POSTONLY, col.META, col.MANUAL = d / "po.txt", d / "meta.csv", d / "m.txt"
|
||||
return col.cmd_build(rewrite=True, runner=col.Runner(workers=workers))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
base = Path(tempfile.mkdtemp())
|
||||
a, b = run(base, "serial", 1), run(base, "par", 2)
|
||||
same = (
|
||||
(base / "serial" / "labels.csv").read_bytes() == (base / "par" / "labels.csv").read_bytes()
|
||||
and (base / "serial" / "meta.csv").read_bytes() == (base / "par" / "meta.csv").read_bytes()
|
||||
and sorted(p.name for p in (base / "serial" / "pages").glob("*.txt"))
|
||||
== sorted(p.name for p in (base / "par" / "pages").glob("*.txt")))
|
||||
print("RESULT " + json.dumps({"same": same, "pages": b["pages"], "labeled": [a["labeled"], b["labeled"]]}))
|
||||
Reference in new issue
Block a user