Эндпоинт подбора числа потоков
Масштабирование ONNX зависит от процессора: замеры на Apple M4 не переносятся на Ryzen, а подбирать конфигурацию перезапусками мучительно. Теперь /v1/benchmark гоняет минуту записи на 1, 2, 4, 8 и 16 потоках и говорит, что поставить в config.toml. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c1ba61fcd5
commit
42a98bd703
+25
@@ -229,6 +229,31 @@ async def create_job(
|
||||
"queue_position": store.queue_position(job_id)}
|
||||
|
||||
|
||||
@app.post("/v1/benchmark", dependencies=[Depends(guard)], summary="Подобрать число потоков",
|
||||
description="Прогоняет минуту из присланной записи на разном числе потоков "
|
||||
"и показывает, где быстрее. Занимает пару минут и на это время "
|
||||
"нагружает процессор.")
|
||||
async def benchmark(file: UploadFile = File(...)) -> dict:
|
||||
from app.bench import run_benchmark
|
||||
from app.pipeline import read_wav
|
||||
|
||||
if not _state["ready"]:
|
||||
raise HTTPException(status_code=503, detail=_state["error"] or "сервис ещё не готов")
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
src = Path(tmp) / (file.filename or "audio")
|
||||
with src.open("wb") as out:
|
||||
while chunk := await file.read(1 << 20):
|
||||
out.write(chunk)
|
||||
wav = Path(tmp) / "audio.wav"
|
||||
to_wav16k(src, wav, pipeline.ffmpeg)
|
||||
samples = read_wav(wav)
|
||||
|
||||
return run_benchmark(samples, models_dir=settings.models_dir,
|
||||
base_dir=settings.base_dir,
|
||||
replacements_path=settings.replacements_path)
|
||||
|
||||
|
||||
@app.get("/v1/jobs/{job_id}", dependencies=[Depends(guard)], summary="Забрать результат",
|
||||
description="Пока задача не готова, возвращает статус и место в очереди. "
|
||||
"Готовый результат содержит реплики с говорящими и тайм-кодами, "
|
||||
|
||||
Reference in New Issue
Block a user