Операция выполнена!
Закрыть
Хабы: Анализ и проектирование систем, Видеокарты, Искусственный интеллект, Машинное обучение

Наконец-то мы добрались непосредственно до того, как тренировать трансформер, не просто тренировать, а делать это эффективно и масштабируемо.

Как мы уже знаем из прошлых глав, трансформер штука тяжелая и на один ускоритель обычно не влезает, поэтому цель масштабирования состоит в том, чтобы распихать тренировку модели по нескольким ускорителям, и желательно при этом, чтобы производительность и пропускная способность такой системы росли пропорционально количеству ускорителей в ней. А этого добиться довольно сложно, просто потому что чем больше ускорителей в системе, тем сложнее и накладнее передавать данные между частями системы и все это дело синхронизировать. Как мы видели в одной из предыдущих глав про шардинг матричных операций, распределенное матричное умножение требует разных дополнительных операций вроде AllGather или ReduceScatter, которые занимают шину данных и тратят процессорное время. В общем наша задача не просто масштабировать систему, а еще и понять, когда остановиться, потому что накладные расходы становятся совсем неподъемными.

В этой главе мы обсудим четыре вида параллелизма, их достоинства, недостатки и когда что можно применять и/или комбинировать. Для простоты будем считать, что работаем внутри одного вычислительного кластера и учитывать только соединения между ускорителями.

Теперь кратко перечислим условные обозначения

Модель

D - размерность входных эмбеддингов

F - размерность скрытого MLP слоя (как я писал в предыдущей главе, большая часть параметров и вычислений трансформера приходится именно на такие большие MLP слои)

Читать далее
Читайте также
НОВОСТИ

ПИШИТЕ

Техническая поддержка проекта ВсеТут

info@vsetut.pro