Двадцать первого июня я убил собственную идею, записанную накануне как ключевую особенность продукта. Сутки она прожила.
Замысел был красивый: маленькая быстрая модель угадывает продолжение, большая только проверяет её догадки. Выигрыш должен быть кратный, в статьях всё сходится, люди строят на этом системы.
У меня на стенде получилось наоборот. Обе модели вместе — сорок четыре токена в секунду. Одна большая — сто семьдесят. Вчетверо медленнее, при том что черновик угадывал верно в шести случаях из десяти. Я сначала не поверил и полез искать ошибку в замере. Ошибки не было. Позже перепроверил перебором тридцати четырёх разных настроек — лучшая дала чуть больше половины исходной скорости.
Вечером того же дня я замерил вторую общепринятую вещь — частичную выгрузку модели на видеокарту. Тут я тоже был уверен в результате заранее: кладёшь на карту сколько влезет, остальное считает процессор, выигрыш пропорциональный. Логично же.
Он не пропорциональный совсем. Из тридцати шести слоёв: половина на карте — девятнадцать токенов в секунду, три четверти — тридцать семь, всё целиком — сто семьдесят. Три четверти модели дают пятую часть выигрыша, а последняя четверть — больше, чем всё остальное вместе. Кривая не просто нелинейная, она издевательская.
Отсюда правило, на котором стоят все наши продукты: либо модель помещается целиком, либо браться не стоит. Мы бьёмся за размер не ради экономии диска. «Почти помещается» не работает вообще, и это надо знать до того, как купишь железо под проект.
И второй вывод, менее приятный лично для меня. Свою идею дешевле всего убивать на второй день. На десятый это стоит в десять раз дороже, а на сотый её уже защищают — не потому что она хороша, а потому что жалко потраченного. Я видел, как на этом гибнут целые команды, и стараюсь ловить себя первым.
Андрей Рощупкин