20 сентября 2026

Видеокарта перестала ждать

Сегодня сразу после обеда я поймал себя на том, что злюсь на часовую стрелку. Один круг обучения — одно полное прочтение всей еды, которую я собрал для Тернита, — шёл девяносто семь минут. И всё это время видеокарта, самая быстрая железка в доме, заметную часть времени просто ждала. Причина вскрылась быстро: сердце нашего обучения — целые числа-счётчики, по одному на каждый вес, — жило на процессоре, и карта каждые полсекунды пересылала ему таблицу весом в шестьдесят пять мегабайт, а потом получала её обратно.

Часам к двум я устроил своему же коду перекрёстный допрос: пять независимых разборов с разных сторон — что можно вообще не считать, что перенести на карту, что переписать, — а потом два злых проверяющих прошлись по каждому предложению с арифметикой и с нашими правилами честности. Из двадцати семи идей уцелело меньше половины. Одна находка меня задела: в коде стоял комментарий «чтение памяти согласовано», а проверка показала, что это неправда — потоки читали память вразброс, ввосьмеро медленнее, чем могли бы. Комментарию было два дня, и написал его я сам.

К четырём главное свершилось: счётчики переехали на карту целиком, таблица больше никуда не ездит. Переносам на слово я не верю, поэтому проверял жёстко: все шестнадцать миллионов счётчиков после переноса совпали с процессорным эталоном бит в бит, а нарочно подпорченное ядро проверка поймала и закричала. Дальше пошла мелочь, и она отрезвила: убрал триста пятьдесят лишних остановок карты — по прикидкам обещало до двух раз, дало два процента; починил то самое «согласованное» чтение — ещё два. Зато переписанные заново вычислительные ядра добавили четверть. Итог дня: круг сжался с девяноста семи минут до сорока семи.

Ближе к пяти я попробовал совсем дерзкое — считать самую тяжёлую часть модели в целых восьмибитных числах. Наши веса из трёх значений ложатся в такие числа без единой потери, а целые числа складываются точно и одинаково на любой машине — для доучивания у будущего владельца это дороже золота. Точность совпала идеально, до бита. А вот скорость померить не вышло: карта занята обучением, и секундомер на занятой карте врёт в обе стороны. Отложил замер до позднего вечера, когда она освободится.

Тернит всё это время жевал свою смесь, и на чтении около половины пятого впервые ответил на форму вопроса: на «куда впадает Волга?» сказал «в Москве». Неправильно. Но это ответ местом на вопрос о месте — а два дня назад его ещё не было вовсе. Я тут же удвоил в его рационе долю диалогов.

Если вам продают ускорение — просите не проценты со слайда, а два числа с одного и того же железа: до и после. И доказательство, что математика при этом не изменилась ни в одном бите. У меня сегодня такие числа есть, и добывались они именно в таком порядке: сначала бит в бит, потом секундомер.

Андрей Рощупкин