Вчера я локально прогнал файнтюннинг модели: видеопамять 16 ГБ. Сначала всё было нормально, прогнал двадцать эпох — и сразу словил OOM, всё рухнуло. Я посмотрел мониторинг: фрагментация кэша съела всю видеопамять, пришлось перезагружаться. Я часами возился.
Эта история заставила меня присмотреться к управлению KV Cache в OpenLoRA у OpenLedger. Там есть механизм динамической миграции: когда кэш на какой-то GPU почти подходит к своему лимиту, часть запросов целиком автоматически переносится на другую карту. При этом во время миграции сохраняется состояние инференса — пересчитывать заново не нужно.
Я посмотрел, что они используют: Segmented Gather Matrix-Vector Multiplication. Если по-простому — K и V векторы разных запросов хранятся сегментами. Когда нужно, их достают по блокам, а не таскают всю таблицу целиком. Поэтому объём переносимых данных намного меньше.
В whitepaper есть формула: новый запрос R_new распределяется на GPU, который удовлетворяет ограничению по размеру батча и по памяти. Выбирается самый оптимальный вариант — это умнее, чем случайное распределение или round-robin. Round-robin легко забивает одну карту, оставляя другие пустыми $OPEN .
Похожие проблемы я сам встречал: при запуске сервиса инференса самое неприятное — не то, что не хватает вычислительных мощностей. Самое неприятное — фрагментация видеопамяти. Даже если на других картах есть свободные места, из-за фрагментации новые запросы туда не встают, и приходится докупать железо — а это сжигает бюджет. Кейс OpenLoRA с сегментным хранением и динамической миграцией теоретически как раз должен лучше использовать фрагменты, то есть экономить карты и деньги.
Но скажу честно: логика миграции в статье выглядит хорошо. На проде это может работать не так гладко. Частая миграция способна добавить лишние задержки. При высокой конкуренции планировщик сам может стать узким местом. Плюс, места в блоках ограничены, а газ в Ethereum при высокой нагрузке взлетает — в итоге это всё те же проблемы планирования, которые до конца не решены. Сможет ли OpenLoRA выдержать реальный трафик — увидим, когда оно побегает пару месяцев и появятся дальнейшие обновления белой книги.
Я буду следить за панелью мониторинга в mainnet. Если задержка миграции будет держаться в пределах 5 мс, я попробую прогнать несколько небольших моделей на тесте @OpenLedger #OpenLedger .
Эта история заставила меня присмотреться к управлению KV Cache в OpenLoRA у OpenLedger. Там есть механизм динамической миграции: когда кэш на какой-то GPU почти подходит к своему лимиту, часть запросов целиком автоматически переносится на другую карту. При этом во время миграции сохраняется состояние инференса — пересчитывать заново не нужно.
Я посмотрел, что они используют: Segmented Gather Matrix-Vector Multiplication. Если по-простому — K и V векторы разных запросов хранятся сегментами. Когда нужно, их достают по блокам, а не таскают всю таблицу целиком. Поэтому объём переносимых данных намного меньше.
В whitepaper есть формула: новый запрос R_new распределяется на GPU, который удовлетворяет ограничению по размеру батча и по памяти. Выбирается самый оптимальный вариант — это умнее, чем случайное распределение или round-robin. Round-robin легко забивает одну карту, оставляя другие пустыми $OPEN .
Похожие проблемы я сам встречал: при запуске сервиса инференса самое неприятное — не то, что не хватает вычислительных мощностей. Самое неприятное — фрагментация видеопамяти. Даже если на других картах есть свободные места, из-за фрагментации новые запросы туда не встают, и приходится докупать железо — а это сжигает бюджет. Кейс OpenLoRA с сегментным хранением и динамической миграцией теоретически как раз должен лучше использовать фрагменты, то есть экономить карты и деньги.
Но скажу честно: логика миграции в статье выглядит хорошо. На проде это может работать не так гладко. Частая миграция способна добавить лишние задержки. При высокой конкуренции планировщик сам может стать узким местом. Плюс, места в блоках ограничены, а газ в Ethereum при высокой нагрузке взлетает — в итоге это всё те же проблемы планирования, которые до конца не решены. Сможет ли OpenLoRA выдержать реальный трафик — увидим, когда оно побегает пару месяцев и появятся дальнейшие обновления белой книги.
Я буду следить за панелью мониторинга в mainnet. Если задержка миграции будет держаться в пределах 5 мс, я попробую прогнать несколько небольших моделей на тесте @OpenLedger #OpenLedger .


