Комментарии 3
Спасибо за публикацию. Не могли бы немного подробнее в общих чертах объяснить, как вместо 600 ток. в сек, получилось 3400 ток. в сек, кроме перевода kv cache в формат int 4, который карта быстрее считает (сама модель в формате nvfp4 была)? serving_setup просмотрел, но не разобрался - откуда берутся переменные TAAF_*.
Конечно. То что KV cache в int4 это не для более быстрого счета в основном, а для того чтобы памяти больше оставалось.
Разница даже более брутальная.
Milestone 1 winner: https://www.kaggle.com/code/jeroencottaar/tufa-labs-duck-harness-june-30-milestone-winner -
Milestone 2 winner:
https://github.com/da-fr/arc-agi-3-solution/blob/main/WRITEUP.md Harness-side generation throughput 609.0 tokens/s
В целом, самое важное - повысить количество параллельных линий.
Здесь основные рычаги такие.
Плотные веса и эксперты в int4 (на качество влияет мало), урезка с 512 до 400 экспертов (1 эксперт примерно дает 0.4 линий), KV offload в оперативную память.
То есть практически все веса связанные с историей линии лежат в оперативке, а не в ГПУ. Называется эта техника HiSparse.
Вот эти 3 вещи плюс минус и помогают с 10-20 линий параллельных дойти до 110.
А дальше уже лежат детали чтобы все это работало быстро. Там память из оперативки в гпу надо постоянно гонять - значит добавил горячий кэш LRU по токенам на которые модель чаще смотрела. Сделал частичные перекрытия подкачки из РАМ вычислениями. Черновики стохастические добавил и дообучил. Ядра пропатчил и некоторые на тритон переписал. Начал копить prefil токены до 4096 с тем чтобы смешанных шагов меньше было.
Вот тут есть полный список патчей https://github.com/gzatravkin/pathbreaker-arc-agi-3/blob/main/WRITEUP.md
Спасибо за пояснения. Получается было необходимо достичь максимально возможной пропускной способности VLLM для генерации reasoning от 110 параллельных чатов агентов, в чем сильно помог mtp с предсказанием 4х токенов и разные способы повышения возможностей кеширования в RAM контекста и недопущения ситуаций, требующих его перерасчета и, насколько я понял, в конечном счете, был достигнут предел скорости обмена данными через CPU между RAM и GPU, хотя сама GPU была утилизирована на 90% - были ли при этом в OS включены Huge Pages по 64кб или такое только замедляет обмен нужными данными CPU RAM <-> GPU? Не проводились ли эксперименты с SGLang или VLLM + LMCache и TurboQuant (возможно даже в его 3 bit, 2 bit вариантах) или нативный int 4 в A6000 всё это обгоняет?

История 6-го места ARC-AGI-3