Чжиху: Чжэньчжунхуань Ссылка: https://www.zhihu.com/question/627258986/answer/3262812950
Простой ответ — согласовать видеопамять.
Модель 6B может быть развернута и обучена на видеокартах потребительского уровня с видеопамятью 12/16/24 ГБ. Если модель компании не предназначена для использования на видеокартах потребительского уровня, она обычно не будет обучаться в масштабе 6B. Обычно существует размер 1,4b или 2,8b, который больше подходит для количественного развертывания в мобильных телефонах и автомобильных терминалах.
Модель 13B организует данные по длине 4 КБ, параллелизм данных = 2, просто заполняет 8-карточную машину и может быть количественно развернута на A10 или даже 4090.
Следующий уровень - это не 130B. В настоящее время к более крупным моделям относятся 16B, 34B, 52B, 56B, 65B, 70B, 100B, 130B, 170B и 220B. По сути, они просто занимают определенную спецификацию вычислительной мощности или либо обучают, либо. вывод. Если вам нужно ускорить обучение, просто увеличьте количество карточек вдвое. Например, мы обучаем модель 7B с карточками 8*8 в блоках по 8 карточек, а модель 70B с карточками 80*6 в блоках по 80 карточек.
-------Дополнительный ответ-------
Друг в комментариях спросил, как посчитать использование видеопамяти. Вот простой метод:
Во-первых, это фреймворк обучения. Использование памяти в фреймворках deepspeed и megatron различно. Если компания выполняет предварительное обучение, то мегатрон обычно будет использоваться на трех этапах предварительной подготовки, sft и rlhf, поскольку он обеспечивает больше параллельных вариантов, а мегатрон использует множество операторов апексного слияния, что имеет более высокую вычислительную эффективность и более подходит. для масштабного обучения. Если вы используете только SFT, вы можете выбрать глубокую скорость или самостоятельно реализовать структуру на основе скелета модели HuggingFace. В качестве примера я использую Мегатрона.
megatronрамкаиз Модель&Коэффициент хранения оптимизатора равен18,То есть Модель Количество параметров*18=Использование видеопамяти。для13Bиз Модельда13Bx18=234GBИспользование видеопамяти。этот18изисточникда2(половинная точность Модельпараметр) + 4 (градиент одинарной точности) + 4 (копия параметров модели одинарной точности) + 4 (импульс одинарной точности первого порядка) + 4 (импульс второго порядка одинарной точности).
Примечание. Во время обучения со смешанной точностью градиент, хранимый в Megatron, не имеет половинной точности. Вместо этого оператор вершины используется для непосредственного расчета градиента с одинарной точностью и сохраняется в параметре.main_grad, поэтому приведенная выше формула является «одинарной». прецизионный градиент».
Когда конвейер распараллелен, все это будет разделено поровну между каждой картой, поэтому коэффициент 18 можно разделить в целом на количество карт. При нулевом параллелизме каждая карта имеет параметры модели половинной точности и градиенты одинарной точности, а последние три делятся поровну на каждую карту, поэтому только последние три коэффициента 4+4+4=12 можно разделить на число нулей. параллелизм. Предыдущий 2+4=6 не работает.
Используйте 13BМодель, seqlength=4096 в качестве примера для расчета.,Модель&оптимизатор Использование видеопамятисуществоватьmegatronрамка Внизда13 x 18 = 234 ГБ. Для этого требуется как минимум 4 карты x80G.
Использование памяти промежуточными переменными прямого распространения можно приблизительно оценить как 40xSHL, что составляет 40x4096 (длина последовательности) x5120 (размерность скрытого слоя) x40 (количество слоев модели) = 34 ГБ.
Если используетсяzero1данныепараллельный:Так Модель&оптимизатор Использование видеопамятикоэффициентда(6 + 12/ноль параллельного числа). При параллелизме данных каждая карта должна иметь полный фрагмент данных, поэтому каждая карта имеет 34 ГБ для хранения промежуточных переменных прямого распространения, а доступная видеопамять составляет всего 80–34 = 46 ГБ. это 13 x (6+12/нулевое параллельное число) < 46. Решения неравенства нет, и его нельзя претендовать ни на что.
Если вы используете pipelineпараллельный,Так Модель&Использование видеопамятикоэффициент就да18/параллельный номер трубопровода, промежуточные переменные прямого распространения также равномерно распределяются по каждой карте, занимая 34G/конвейерный параллельный номер, тогда можно записать формулу (13 x 18/параллельный номер трубопровода + 34 / параллельный номер трубопровода) < 80,Число полученных параллельных конвейеров должно быть больше или равно 4.,Другими словами, можно установить 4 карты.,В это время каждая карта занимает 67Гб видеопамяти.,в Модель&Оптимизатор учитывает58.5,Прямое распространение составляет 8,5.
Однако в конвейерном параллелизме есть операция, которая устраняет пузырь занятости видеокарты и повышает эффективность. В среде megatron основным направлением является использование чередующегося параллелизма 1f1b. Если вам интересно, вы можете обратиться к этой статье: Infi-zc: конвейерный параллелизм. в Мегатрон-ЛМ
Другими словами, после прямого распространения видеопамять каждой карты не сразу освободит видеопамять 8,5G. Она продолжит рассчитывать прямое распространение следующего фрагмента данных. После n раундов обратное распространение первого фрагмента. данных будут переданы сзади. Когда вы вернетесь, видеопамять, занятая первым фрагментом данных, будет освобождена.
Фактически это n = «номер параллельного конвейера — серийный номер карты + 1», поэтому карта 1 наиболее загружена и будет записывать до 4-1+1=4 фрагментов прямого распространения данных. Следовательно, пиковое использование памяти первой карты для записи прямого распространения составляет (8,5 x 4) = 34G,плюс58.5Gиз Модель&оптимизатор,Первая карта взорвется,Если посчитать таким образом, то вторая и третья карты тоже взорвутся.,Только четвертая карта не взорвется.
На данный момент есть два решения: одно — установить размер пакета только на 1, что эквивалентно отключению операции 1f1b. Однако очевидно, что размер пакета не может быть равен 1. Размер пакета соответствует. длина последовательности 4096 обычно равна 1024.
Тогда второй вариант — добавить еще 4 карты, всего получится 8 карт. 8 карт разделены на 2 группы, и каждая группа из 4 карт образует параллельный конвейер. Между этими двумя группами используется параллелизм Zero1. При этом неравенство видеопамяти, занимаемой 1 картой, составляет: 13 x (6/параллельный номер трубопровода + 12/(номер параллели трубопровода*ноль параллелей) + 34,это 13 x (1.5+1.5) + 34 = 73. В это время 1 карта видеопамяти занимает 73Г, которую можно установить. В сумме необходимо 8 карт, из них карты №1 и 2 занимают 73Г, карты №3 и 4 занимают 64Г, карты №5 и 6 занимают 56Г, а карты №7 и 8 занимают 47,5Г. В реальных ситуациях каждой карты будет немного больше, но 8 карт действительно достаточно.
Конечно, вы можете использовать все 8 карт для конвейерного распараллеливания. При этом видеопамять, занимаемая 1 картой, составляет 13 x 18/8 + 34 = 63,25 ГБ.
В дополнение к конвейерному параллелизму (pp) также можно включить тензорный параллелизм (tp), но у tp есть две проблемы: 1. В структуре преобразователя tp необходимо обмениваться данными между tp каждые два умножения матриц, а объем связи велик. 2. Нормальный слой нормализует последнее измерение в целом, поэтому параметры нормального слоя должны быть полными на каждом tp и не могут быть разделены, что приведет к тому, что на каждой карте будут храниться дубликаты нормальных слоев. Часть видеопамяти будет потрачена впустую. но не так много.
TP также имеет два преимущества: 1. Когда модель больше и одна карта не может поместиться в один слой, PP недействителен. В настоящее время TP можно использовать только для разрезания одного слоя на несколько карт. 2. У TP нет проблемы сжатия пены в PP. Если использование памяти между различными картами слишком несбалансировано из-за операции сжатия пены в PP, вы можете уменьшить PP и увеличить TP. Однако объем трафика ТП большой, поэтому кросс-машинность вообще не рекомендуется, то есть вообще не рекомендуется открывать ТП выше 8.