Сатурн Новый подход к обучению больших языковых моделей и других нейронных сетей

Сатурн новый подход к обучению языковых моделей и нейронных сетей

Примечание редактора: Кабир Нагреча выступит на ODSC West 2023 осенью. Обязательно посмотрите его доклад “Демократизация настройки Open-Source больших моделей совместной оптимизацией систем”, который там будет!

Масштаб модели стал абсолютно неотъемлемым аспектом современной практики глубокого обучения. Успех многомиллиардных моделей больших языковых моделей (LLM) побудил практиков расширять границы размера моделей. Исследователи и практики теперь создают все более крупные и требовательные к памяти архитектуры моделей, чтобы повысить точность и качество модели.

Но эти масштабы представляют собой инфраструктурные проблемы, которые нельзя игнорировать. Запросы ресурсов для обучения модели взлетели вверх. И если есть хотя бы одна вещь, которую мы узнали из наших сотрудничеств в UCSD и с нашими партнерами в индустрии, то это то, что задачи глубокого обучения никогда не выполняются в изоляции. Если вы обучаете одну модель, вы, вероятно, обучаете десяток – оптимизация гиперпараметров, многопользовательские кластеры и итеративное исследование мотивируют множественное обучение моделей, увеличивая требования к вычислениям.

В этой статье мы рассмотрим нашу работу над Saturn, нашим недавно опубликованным инструментом для одновременного обучения нескольких больших моделей. Saturn интегрируется с инструментами стандартной промышленной практики обучения больших моделей, такими как HuggingFace, FSDP PyTorch, GPipe Google, FairScale, XFormers и другие. Мы продемонстрируем, как Saturn может помочь оптимизировать выполнение в этой новой и важной среде, снижая затраты и повышая эффективность обучения.

Зачем обучать большие модели? И зачем обучать много из них?

“Увеличение размера наших моделей определенно повысило нашу точность. Это стало общим правилом – больше – лучше.” (Пользователь Saturn в индустрии)

Недавние исследования показали, что более крупные модели обычно показывают лучшие результаты на различных бенчмарках.

Языковые модели – малообучаемые модели (Браун и др., 2020)

Таким образом, если вы хотите создать самую точную модель для поддержки вашего приложения, вы, вероятно, будете использовать модель большого масштаба – возможно, модель LLaMA, возможно, GPT-J, а может быть, даже GPT-2.

Похоже, что есть достаточно много мотивации для обучения больших моделей. Но основная идея Saturn заключается в оптимизации нескольких больших моделей одновременно.

“Мы, вероятно, проходим через сотни… может быть, тысячу разных модельных итераций, прежде чем мы что-то выкладываем в продакшн. И этот процесс повторяется ежедневно для повторного обучения.” (Пользователь Saturn о своих производственных конвейерах)

Практическое глубокое обучение почти всегда состоит из нескольких задач обучения. Промышленные кластеры получают задачи от сотен пользователей и конвейеров. Автоматические производственные конвейеры могут запустить десятки задач обучения с разными конфигурациями (например, скорости обучения, размеров пакетов, вариаций архитектуры модели), чтобы найти наиболее точную для развертывания. Отдельные исследователи могут отправлять несколько исследовательских задач для оценки разных подходов. К концу дня кластер может получить тысячи задач для управления.

Там есть нерешенная проблема, пересекающая вызовы обучения больших моделей и выполнение нескольких моделей, которую необходимо решить. С Saturn мы явно оптимизируем эту ситуацию.

Что такое Saturn? И как я могу его использовать?

При одновременном решении нескольких больших моделей необходимо учитывать три важные проблемы.

Во-первых, параллелизация. Большим моделям обычно требуются несколько графических процессоров для распределения памяти и повышения скорости обучения. Однако разработка схемы параллельного выполнения представляет собой сложную задачу – существует десятки (или даже сотни!) разных техник! FSDP, параллелизм конвейера, 3D-параллелизм и многие другие – лучший выбор зависит от ваших графических процессоров, взаимосвязей, архитектуры модели и даже гиперпараметров. Это сложное пространство для навигации, но выбор неправильного подхода может иметь серьезные последствия для производительности.

Во-вторых, распределение ресурсов. Если в кластере есть 100 графических процессоров и 30 отправленных задач, как следует распределить графические процессоры по задачам? Оптимизация пропускной способности требует автоматического нахождения оптимального плана распределения ресурсов.

В-третьих, планирование. Как должно быть упорядочено выполнение, чтобы минимизировать время выполнения от начала до конца? Должна ли модель A быть выполнена перед моделью B? Или модель C перед моделью A?

Обратите внимание, что все эти проблемы связаны. План распределения ресурсов, который вы используете, будет ограничивать график и также влиять на выбор оптимальной параллельности, и наоборот. Поэтому мы должны решать это как совместную проблему.

И вот что именно делает Saturn. С помощью Saturn вы можете просто отправить пакет обучающих заданий и наблюдать, как создается автоматический план решения всех этих проблем. Saturn выполняет быстрое профилирование всех ваших заданий, а затем использует решатель смешанно-целочисленного линейного программирования для создания оптимизированного плана выполнения. Легко расширить и зарегистрировать новые техники параллелизации, поэтому нет риска отставания от передовых исследований. В сочетании с некоторыми механизмами, такими как интроспекция для эффективного планирования, он способен значительно сократить время выполнения пакетных заданий с несколькими моделями. Практически мы обнаруживаем, что он способен сократить время выполнения и затраты на столько, сколько 2X по сравнению с текущей практикой, при этом снижая нагрузку на разработчика.

Использование Saturn для более эффективного выполнения ваших заданий – это простой процесс. Наш репозиторий GitHub содержит пример рабочего процесса, но вот небольшая справка.

Сначала оберните вашу функцию загрузки/инициализации модели в конструкцию “Task” Saturn.

from saturn import Task
t1 = Task(load_model, load_dataloader, loss_function, hyperparameters)

Затем зарегистрируйте любые техники параллелизации, которые вы хотите использовать, с помощью “Library” Saturn.

from saturn.library import register
from saturn.core.executors.Technique import BaseTechnique 

class MyExecutor(BaseTechnique):
   def execute(task, gpus, task_id, batch_count):
      # обучение модели
      return
   def search(task, gpus, task_id):
      # оптимизация любых внутренних параметров
      # они автоматически ассоциируются с отправленной задачей
      return parameters

register(“my_parallelism”, MyExecutor)

Наконец, отправьте список задач для профилирования и выполнения.

from saturn.trial_runner.PerformanceEvaluator import search
from saturn import orchestrate

search([t1, t2, t3, t4]) # профилирование и оценка каждой задачи
orchestrate([t1, t2, t3, t4]) # оркестрирование и управление выполнением

Выводы и ключевые моменты

Saturn позволяет значительно ускорить работу более чем в 2 раза для рабочих нагрузок, которые обучают несколько больших моделей одновременно. Он отлично совместим с такими стандартными инструментами, как HuggingFace. В следующий раз, когда вы пытаетесь настроить модель LLaMA или создать свою собственную LLM, рассмотрите возможность использования Saturn для снижения затрат и ускорения времени выполнения! Если вас интересует получение дополнительной информации, вы можете найти нашу статью о Saturn здесь.

На данный момент мы ищем новых участников и пользователей, поэтому если вас интересует Saturn, рекомендуем ознакомиться с нашим недавно опубликованным репозиторием на GitHub по адресу https://github.com/knagrecha/saturn!

Об авторе/Спикер ODSC West 2023:

Кабир Нагреча является аспирантом в Университете Калифорнии в Сан-Диего, работающим с профессорами Аруном Кумаром и Хао Чжангом. Он является стипендиатом Meta Research Fellowship, а также стипендиями от Института науки о данных Халичиоглу и Школы инженерии в Университете Калифорнии в Сан-Диего.

Кабир является самым молодым аспирантом в Университете Калифорнии в Сан-Диего, начав свою докторскую программу в возрасте 17 лет. Он ранее работал в компаниях Apple, Meta и Netflix, чтобы создать основную инфраструктуру, которая поддерживает широко используемые сервисы, такие как Siri и рекомендательные алгоритмы Netflix.

LinkedIn: https://www.linkedin.com/in/kabir-nagrecha-952591152/

Веб-сайт: https://kabirnagrecha.com/