У нас очень много железа. И облачного, и локального, всякого много. Все таки большие модели учим.
И когда железа много, оно неизбежно обрастает системами управления, распределения нагрузки, очередями задач с хитрыми политиками под наш кейс, итд.
Я, в свою очередь, как главный (единственный) админ всего этого добра, и информированный наблюдатель, не перестаю удивляться сайдэффектам возникающим в сложных системах, и тому какой прикол мне подкинут следующим. Чаще всего это баги, конечно, но и они ранжируются от "у нас ничего не работает" до восхитительных ситуаций, об одной из которых я решил написать спустя год радиомолчания 🙂
Пару недель назад начали приходить репорты от разных людей, о том что их задачи в очереди для оценки чекпоинтов моделей не выполняются. Я это списывал на простую нетерпеливость, так как кластеры перегружены, очереди глубокие, люди не понимают как работает FIFO... И просто говорил что нужно подождать.
Рано или поздно задачи запускались, так что никакой проблемы, по сути, и не было.
Но тут кроилась небольшая загвоздка: жалобы поступали от всех команд кроме одной.
Копнув глубже, я с восхищением обнаружил что мои ML рисерчеры, которые cat от ls отличают только по праздникам и пасмурным дням, превзошли себя и, наподобии AI моделей которые сами тренируют, сломали правила симуляции и захватили кластер.
Схема такая:
1. Закидываешь в очередь с интервалом в 1 час задачи с низким приоритетом — тут стоит уточнить, что приоритет учитывается только для preemption внутри команды, как локальный инструмент, не влияющий на другие команды
Таким образом почти всегда есть как минимум одна задача, на которую для команды выделена машина
2. Когда нужно что-то запустить, создаешь задачу с высоким приоритетом
3. Шедулер выкидывает задачу-пустышку, и на ее месте в очереди ставит новую задачу
4. PROFIT, вы великолепны, ваши задачи всегда выполняются в любое время суток, независимо от загрузки кластера и глубины очереди!
Я даже немного горжусь!
Было жаль ломать такой замечательный эксплоит.
Теперь политика дает больше веса командам, которые использовали меньше GPU часов, и наказывает такое поведение понижением приоритета в очереди. Обучение с подкреплением так сказатб.
* естественно это не единственный режим аллокации, для основных задач реализован другой, куда более гибкий механизм 😉