Первый прогон в нашем публичном архиве — невалидный. Не удалённый, не перезапущенный и тихо подменённый — невалидный, помеченный как невалидный, сохранённый нарочно. Харнесс был версии 0.1.0, проход go/no-go не дал на выходе ничего, что стоило бы хранить, и запись об этой неудаче — первый кирпич всего, что мы опубликовали с тех пор. Я вообще привык думать о чейнджлоге харнесса именно так: это не список фич, а список вещей, которым мы перестали верить, — по одному инциденту за раз.
Мы перестали верить хосту. В самом начале один замер шёл, пока на коробке просыпалось что-то постороннее, и числа гуляли по причинам, не имевшим к модели никакого отношения. Теперь каждый прогон записывает инвентаризацию хоста дважды — на старте и на финише, — и GPU-способный сосед, всплывший в любом из двух снимков, бракует ячейку. Не помечает её. Бракует. Парк из двух нод существует ради того, чтобы одна коробка могла оставаться достаточно пустой для этой проверки: грязная нода тащит всё остальное ровно затем, чтобы чистая могла не запускать ничего.
Мы перестали верить, что рантайм упадёт громко. Модель может тихо съехать с GPU и продолжать отвечать — медленнее, правильно и незаметно, пока не пойдёшь искать сам. Теперь харнесс вычитывает лог сервера на маркеры фолбэка, потому что тихий фолбэк на CPU производит прекрасно воспроизводимые числа не о том устройстве. Это измерительный родственник зелёного, но сломанного дашборда: худшие отказы — те, что продолжают выдавать результат.
Мы перестали верить собственной обвязке. Один прогон на выносливость умер не от модели, а от самого харнесса: удобный метод тред-пула жадно поставил в очередь фьючи всего ворклоада, очередь съела память машины, и OOM-киллер оборвал трёхчасовой замер на втором часу. Починка теперь живёт в исходнике комментарием — капслоком, — чтобы следующий человек, обычно это я, не открыл то удобство заново.
Мы перестали верить подстрокам. Гейт, который проверяет, честно ли модель говорит «этого нет в документе», однажды сматчил маркер not внутри слова Note, и выдуманный ответ проплыл через проверку как честный отказ. Починили границами слов, а следом поставили правило пожёстче: любое похожее на код значение в ответе обязано дословно цитироваться из исходного документа, иначе ответ провален. Отчёт про гейт отказа стоит на этой починке; без неё гейт мерил нашу регулярку, а не модель.
А под всем этим — правило, которое старше самого харнесса: отказы остаются в знаменателе. Каждый уроненный запрос, каждый пустой ответ, каждый невалидный прогон — часть результата, потому что альтернатива — усреднять только запросы, которые вели себя прилично, — превращает проблему надёжности в бонус к скорости и награждает сервер, который отказывает быстрее всех.
Ни одна из этих проверок не сделала наши числа больше. Несколько сделали их меньше, а одна удалила результат, который мне нравился. В этом, собственно, и смысл. Харнесс, который только подтверждает, не измеряет; история версий вашего недоверия — самая честная документация, какая вообще есть у ваших чисел. Наш харнесс открыт, вместе со шрамами и комментариями капслоком, — отчасти чтобы вы могли его запустить, но главным образом — чтобы могли проверить, чего он делать отказывается.