Моя первая работа "весь...

Posted on Thu 30 June 2022 • Tagged with from_telegram, in_russian

Моя первая работа "весь день писать код за деньги" была в Яндексе. Там я не трогал рантайм, а в основном занимался тем, что сейчас называют дата инженерией, т.е. нагружал кластер имени некоего польского математика. Как следствие, неоптимальный код ничего слишком страшного не делал, просто выполнялся часами или даже днями. Однажды я наспех написал джобу и пошел домой, утром увидел, что и близко не выполнена, и обнаружил там классическую ошибку новичка: проверка условия типа if user in some_users, выполняемая миллионы раз, проходила по some_users, который был многомиллионным списком. Одна строка вида some_users = set(some_users) ускорила тогда джобу в 250 тысяч раз. Это мой личный рекорд ускорения (и личный рекорд неэффективности, конечно, тоже).

Потом работал в компаниях, где оптимизировать надо было только рантайм/инференс, и редко делал это сам - вокруг было слишком много ICPC-олимпиадников, и я со свиным рылом в калашный ряд без особой нужды не совался. А если и совался, то обычно оптимизация лежала в DL плоскости и была довольно прямолинейной: попробовать порубить или факторизовать свертки тут и там, посмотреть на метрики, где это приносит меньше вреда, готово, вы великолепны. Было и такое: все датасеты были настолько маленькими, что можно было все алгоритмы делать брутфорсом, и никто бы не заметил; даже счета от AWS редко стимулировали что-то оптимизировать.

А сейчас я с интересом столкнулся с данными того интересного масштаба, что переходить на распределенные вычисления пока рано, а на одной машине, даже жирной, все работает слишком медленно. Например, в прошлом посте я писал, что пилю NLP классификатор. Все шустро работало, пока я не перешел с игрушечного датасета (десятки тысяч строк) к настоящему (десятки миллионов). Т.е. какая-нибудь функция даже с линейной сложностью и скоростью выполнения 1ms внезапно превратилась в недопустимо тормознутую, а подход "просто закинуть все в память" перестал масштабироваться.

Пока что я успел возненавидеть pandas (в одном пайплайне сделал +30% к скорости, заменив все на простые дикты), полюбить polars, написать суперспецифическую обертку к LMDB в стиле RocksDict и просто начать иногда думать в процессе написания кода, а не просто ~~кататься ебалом по клавиатуре~~ принимать подсказки Copilot. Единственное, что меня беспокоило — это Rust. В мире нет никого более безответственного и безнравственного, чем 🦀 программисты, которые стремятся сделать все вокруг blazing fast 🚀. И я знал, что довольно скоро в это окунусь.

source