Свежая выжимка ml и AI статей - каждый день
С увеличением популярности концепции AIPC (AI PC) гибридные процессоры (ЦП) становятся все более распространенными для выполнения ИИ-моделей на клиентских устройствах. Однако существующие фреймворки для ИИ-инференса не учитывают несбалансированные аппаратные возможности гибридных ЦП, что приводит к низкой производительности инференса. В этой статье мы рассмотрим новый динамический параллельный метод, который значительно увеличивает производительность инференса LLM (Large Language Model) за счет балансировки нагрузки на каждое ядро гибридного ЦП до начала параллельной работы.
Гибридные ЦП, такие как Intel Ultra 100 Series и AMD Ryzen AI 300 Series, имеют несколько микроструктур или рабочих частот среди своих ядер. Эти процессоры специально разработаны для обработки больших ИИ-моделей, особенно LLM. Однако, поскольку ядра имеют разные аппаратные возможности, важно оптимизировать распределение задач, чтобы избежать ситуации, когда производительные ядра ждут менее производительные.
Существующие методы параллельной обработки, такие как OpenMP, используют фиксированные разделения задач для каждого потока. Это приводит к тому, что высокопроизводительные ядра простаивают, ожидая завершения работы менее производительных ядер. В результате эффективность использования ресурсов ЦП снижается. Для решения этой проблемы необходимо динамически обновлять производительность ядер и распределять задачи в зависимости от текущих условий выполнения.
В нашем подходе мы предлагаем новый динамический параллельный метод, который включает два основных компонента: время выполнения ЦП и планировщик потоков.
Время выполнения ЦП отслеживает состояние каждого ядра и управляет пулом потоков. Каждый поток привязывается к физическому ядру, и время выполнения каждого потока фиксируется во время выполнения ядер. Это позволяет динамически обновлять производительность ядер на основе их текущего состояния.
Планировщик потоков делит задачи на подзадачи в зависимости от динамической производительности каждого ядра. Он получает информацию о состоянии ЦП из времени выполнения и корректирует нагрузку на ядра на основе обновленных данных. Это позволяет максимизировать производительность инференса, адаптируясь к изменяющимся условиям выполнения.
Для оценки эффективности нашего метода мы провели серию экспериментов на двух гибридных ЦП: Core-12900K и Ultra-125H. Мы сравнили производительность выполнения задач, используя разные методы параллельной обработки.
В качестве базовых методов мы выбрали OpenMP и llama.cpp, поскольку они известны своей производительностью на различных клиентских ЦП. Мы использовали модель llama2-7B с 4-битной квантованием весов для демонстрации стабильных результатов.
Наш метод показал значительное улучшение производительности. В тестах INT8 GEMM (умножение матриц) мы достигли увеличения производительности на 65% на Ultra-125H и на 85% на Core-12900K. Это подтверждает, что наш метод эффективно использует ресурсы ЦП и улучшает взаимодействие между гибридными ядрами.
При тестировании производительности INF4 (умножение матрицы на вектор) мы также зафиксировали улучшение пропускной способности памяти на 19% на Ultra-125H, достигая более 90% использования пропускной способности памяти.
В тестах на полное выполнение инференса LLM мы наблюдали улучшение вычислительной эффективности на 20-30% по сравнению с оригинальным методом OpenMP. Это связано с тем, что наш метод позволяет динамически адаптироваться к изменениям в производительности ядер, что приводит к более эффективному распределению задач.
Наш подход значительно улучшает производительность инференса LLM на гибридных ЦП. Новый параллельный метод заменяет традиционный метод OpenMP и демонстрирует многообещающие результаты. Мы достигли до 3.7-кратного увеличения скорости по сравнению с llama.cpp и более 90% использования пропускной способности памяти для INT4 GEMV.
В будущем мы планируем оптимизировать гибридные вычислительные единицы, чтобы уменьшить задержку в фазе предварительной выборки (prefill phase) на AIPC. Это позволит еще больше улучшить производительность и эффективность использования ресурсов в задачах ИИ.