Kontakt z nami

Artificial Intelligence

Zrozumienie parametrów modelu dużego języka i wymagań dotyczących pamięci: głębokie nurkowanie

mm

Opublikowany

 on

Obliczanie parametrów w LLM opartych na transformatorach

Duże modele językowe (LLM) odnotowały w ostatnich latach niezwykły postęp. Modele takie jak GPT-4, Google Gemini i Claude 3 wyznaczają nowe standardy w zakresie możliwości i zastosowań. Modele te nie tylko usprawniają generowanie i tłumaczenie tekstu, ale także otwierają nowe możliwości w przetwarzaniu multimodalnym, łącząc dane wejściowe tekstu, obrazu, audio i wideo w celu zapewnienia bardziej kompleksowych rozwiązań AI.

Na przykład GPT-4 OpenAI wykazał znaczną poprawę w rozumieniu i generowaniu tekstu podobnego do ludzkiego, podczas gdy modele Gemini firmy Google przodują w obsłudze różnorodnych typów danych, w tym tekstu, obrazów i dźwięku, umożliwiając bardziej płynne i istotne kontekstowo interakcje. Podobnie modele Claude 3 firmy Anthropic są znane ze swoich wielojęzycznych możliwości i zwiększonej wydajności w zadaniach AI.

Ponieważ rozwój LLM stale przyspiesza, zrozumienie zawiłości tych modeli, w szczególności ich parametrów i wymagań dotyczących pamięci, staje się kluczowe. Celem tego przewodnika jest wyjaśnienie tych aspektów, oferując szczegółowe i łatwe do zrozumienia wyjaśnienia.

Podstawy dużych modeli językowych

Jakie są modele wielkojęzykowe?

Duże modele językowe to sieci neuronowe wytrenowane na ogromnych zbiorach danych w celu zrozumienia i generowania ludzkiego języka. Opierają się na architekturach takich jak Transformers, które wykorzystują mechanizmy takie jak samouważność do przetwarzania i tworzenia tekstu.

Znaczenie parametrów w LLM

Parametry są podstawowymi elementami tych modeli. Obejmują one wagi i błędy systematyczne, które model dostosowuje podczas uczenia, aby zminimalizować błędy w przewidywaniach. Liczba parametrów często koreluje z pojemnością i wydajnością modelu, ale wpływa również na jego wymagania obliczeniowe i pamięciowe.

Zrozumienie architektury transformatora

Transformatory-architektura

Architektura Transformatorów

Przegląd

Architektura Transformera, przedstawiona w artykule „Attention Is All You Need” autorstwa Vaswani i in. (2017) stał się podstawą wielu LLM. Składa się z kodera i dekodera, z których każdy składa się z kilku identycznych warstw.

Elementy kodera i dekodera

  • koder: przetwarza sekwencję wejściową i tworzy reprezentację kontekstową.
  • dekoder: Generuje sekwencję wyjściową przy użyciu reprezentacji kodera i wcześniej wygenerowanych tokenów.

Kluczowe elementy konstrukcyjne

  1. Uwaga wielogłowa: Umożliwia modelowi jednoczesne skupienie się na różnych częściach sekwencji wejściowej.
  2. Sieci neuronowe ze sprzężeniem zwrotnym: Dodaje nieliniowość i złożoność do modelu.
  3. Normalizacja warstw: Stabilizuje i przyspiesza trening poprzez normalizację wyników pośrednich.

Obliczanie liczby parametrów

Szkolenie Transformatorowe

Wstępnie wytrenowane modele do wydajnego szkolenia transformatorów

Obliczanie parametrów w LLM opartych na transformatorach

Podzielmy obliczenia parametrów dla każdego komponentu LLM opartego na transformatorze. Będziemy używać zapisu z oryginalnej pracy, gdzie d_model reprezentuje wymiar stanów ukrytych modelu.

  1. Warstwa osadzania:
    • Parametry = vocab_size * d_model
  2. Uwaga wielogłowa:
    • W razie zamówieenia projektu h głowy, z d_k = d_v = d_model / h:
    • Parametry = 4 * d_model^2 (dla projekcji Q, K, V i wyjściowych)
  3. Sieć przekazująca:
    • Parametry = 2 * d_model * d_ff + d_model + d_ff
    • Gdzie d_ff zazwyczaj wynosi 4* d_model
  4. Normalizacja warstw:
    • Parametry = 2 * d_model (ze względu na skalę i stronniczość)

Łączne parametry dla jednej warstwy Transformatora:

  • Parameters_layer = Parameters_attention + Parameters_ffn + 2 * Parameters_layernorm

Dla modelu z N warstwy:

  • Razem parametry = N * Parameters_layer + Parameters_embedding + Parameters_output

Przykładowe obliczenia

Rozważmy model o następujących specyfikacjach:

  • d_model = 768
  • h (liczba głów uwagi) = 12
  • N (liczba warstw) = 12
  • vocab_size = 50,000
  1. Warstwa osadzania:
    • 50,000 * 768 = 38,400,000
  2. Uwaga wielogłowa:
    • 4 * 768^2 = 2,359,296
  3. Sieć przekazująca:
    • 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616 XNUMX XNUMX
  4. Normalizacja warstw:
    • 2 * 768 = 1,536

Całkowite parametry na warstwę:

  • 2,359,296 + 4,719,616 + (2 * 1,536) = 7,081,984

Parametry całkowite dla 12 warstw:

  • 12 * 7,081,984 = 84,983,808

Całkowite parametry modelu:

  • 84,983,808 + 38,400,000 = 123,383,808

Model ten miałby około 123 milionów parametrów.

Rodzaje wykorzystania pamięci

Pracując z LLM, musimy wziąć pod uwagę dwa główne typy wykorzystania pamięci:

  1. Pamięć modelu: Pamięć wymagana do przechowywania parametrów modelu.
  2. Pamięć robocza: Pamięć potrzebna podczas wnioskowania lub uczenia do przechowywania aktywacji pośrednich, gradientów i stanów optymalizatora.

Obliczanie pamięci modelu

Pamięć modelu jest bezpośrednio powiązana z liczbą parametrów. Każdy parametr jest zwykle przechowywany jako 32-bitowa liczba zmiennoprzecinkowa, chociaż w niektórych modelach stosuje się szkolenie o mieszanej precyzji z 16-bitowymi liczbami zmiennoprzecinkowymi.

Pamięć modelu (bajty) = Liczba parametrów * Bajty na parametr

Dla naszego przykładowego modelu ze 123 milionami parametrów:

  • Pamięć modelu (32-bitowa) = 123,383,808 4 493,535,232 * 494 bajty = XNUMX XNUMX XNUMX bajtów ≈ XNUMX MB
  • Pamięć modelu (16-bitowa) = 123,383,808 2 246,767,616 * 247 bajty = XNUMX XNUMX XNUMX bajtów ≈ XNUMX MB

Szacowanie pamięci roboczej

Wymagania dotyczące pamięci roboczej mogą się znacznie różnić w zależności od konkretnego zadania, rozmiaru partii i długości sekwencji. Przybliżone oszacowanie pamięci roboczej podczas wnioskowania wynosi:

Pamięć robocza ≈ 2 * Pamięć modelu

Uwzględnia to przechowywanie zarówno parametrów modelu, jak i aktywacji pośrednich. Podczas uczenia wymagania dotyczące pamięci mogą być jeszcze większe ze względu na konieczność przechowywania gradientów i stanów optymalizatora:

Pamięć treningowa ≈ 4 * Pamięć modelu

Dla naszego przykładowego modelu:

  • Wnioskowanie Pamięć robocza ≈ 2 * 494 MB = 988 MB ≈ 1 GB
  • Pamięć treningowa ≈ 4 * 494 MB = 1,976 MB ≈ 2 GB

Stałe i szczytowe wykorzystanie pamięci

Podczas uczenia dużych modeli językowych opartych na architekturze Transformer zrozumienie użycia pamięci ma kluczowe znaczenie dla efektywnej alokacji zasobów. Podzielmy wymagania dotyczące pamięci na dwie główne kategorie: stałe wykorzystanie pamięci i szczytowe wykorzystanie pamięci.

Użycie pamięci w stanie ustalonym

Stałe wykorzystanie pamięci obejmuje następujące elementy:

  1. Wagi modelu: Kopie FP32 parametrów modelu, wymagające 4N bajtów, gdzie N to liczba parametrów.
  2. Stany optymalizatora: Dla optymalizatora Adama wymaga to 8N bajtów (2 stany na parametr).
  3. Gradienty: Kopie gradientów FP32, wymagające 4N bajtów.
  4. Dane wejściowe: Zakładając, że dane wejściowe mają charakter int64, wymaga to 8 bajtów BD, gdzie B to rozmiar partii, a D to wymiar wejściowy.

Całkowite wykorzystanie pamięci w stanie ustalonym można przybliżyć wzorem:

  • M_steady = 16N + 8BD bajtów

Szczytowe użycie pamięci

Szczytowe wykorzystanie pamięci występuje podczas przebiegu wstecznego, gdy aktywacje są przechowywane w celu obliczenia gradientu. Głównymi czynnikami wpływającymi na pamięć szczytową są:

  1. Normalizacja warstw: Wymaga 4E bajtów na normę warstwy, gdzie E = BSH (B: rozmiar partii, S: długość sekwencji, H: ukryty rozmiar).
  2. Blok uwagi:
    • Obliczenia QKV: 2E bajtów
    • Macierz uwag: 4 bajty BSS (S: długość sekwencji)
    • Uwaga wyjście: 2E bajtów
  3. Blok sprzężenia zwrotnego:
    • Pierwsza warstwa liniowa: 2E bajtów
    • Aktywacja GELU: 8E bajtów
    • Druga warstwa liniowa: 2E bajtów
  4. Utrata krzyżowa entropii:
    • Logity: 6 bajtów BSV (V: rozmiar słownictwa)

Całkowitą pamięć aktywacji można oszacować jako:

  • M_act = L * (14E + 4BSS) + 6 bajtów BSV

Gdzie L jest liczbą warstw transformatora.

Całkowite szczytowe wykorzystanie pamięci

Szczytowe wykorzystanie pamięci podczas treningu można oszacować, łącząc pamięć stanu ustalonego i pamięć aktywacji:

  • M_peak = M_steady + M_act + 4 bajty BSV

Dodatkowy termin 4BSV uwzględnia dodatkową alokację na początku przejścia wstecz.

Rozumiejąc te komponenty, możemy zoptymalizować wykorzystanie pamięci podczas uczenia i wnioskowania, zapewniając efektywną alokację zasobów i lepszą wydajność dużych modeli językowych.

Prawa skalowania i zagadnienia dotyczące wydajności

 Prawa skalowania dla LLM

Badania wykazały, że wydajność LLM ma tendencję do przestrzegania pewnych praw skalowania w miarę wzrostu liczby parametrów. Kaplan i in. (2020) zaobserwowali, że wydajność modelu poprawia się wraz z potęgowaniem liczby parametrów, budżetu obliczeniowego i rozmiaru zbioru danych.

Zależność między wydajnością modelu a liczbą parametrów można przybliżyć wzorem:

Wydajność ∝ N^α

Gdzie N to liczba parametrów, a α to wykładnik skalowania, zwykle około 0.07 w przypadku zadań modelowania języka.

Oznacza to, że aby osiągnąć 10% poprawę wydajności, musimy zwiększyć liczbę parametrów o współczynnik 10^(1/α) ≈ 3.7.

Techniki efektywności

W miarę ciągłego rozwoju LLM badacze i praktycy opracowali różne techniki poprawiające efektywność:

a) Mieszane szkolenie precyzyjne: Używanie 16-bitowych lub nawet 8-bitowych liczb zmiennoprzecinkowych do niektórych operacji w celu zmniejszenia zużycia pamięci i wymagań obliczeniowych.

b) Równoległość modelu: Dystrybucja modelu na wiele procesorów graficznych lub TPU w celu obsługi większych modeli, niż można zmieścić na jednym urządzeniu.

c) Gradientowe punkty kontrolne: Zamiana obliczeń na pamięć poprzez ponowne obliczenie niektórych aktywacji podczas przejścia wstecz zamiast ich przechowywania.

d) Przycinanie i kwantyzacja: Usunięcie mniej ważnych ciężarów lub zmniejszenie ich precyzji po treningu w celu stworzenia mniejszych, bardziej wydajnych modeli.

e) Destylacja: Trenowanie mniejszych modeli, aby naśladowały zachowanie większych, potencjalnie zachowując znaczną część wydajności przy mniejszej liczbie parametrów.

Praktyczny przykład i obliczenia

GPT-3, jeden z największych modeli językowych, ma 175 miliardów parametrów. Wykorzystuje część dekodera architektury Transformer. Aby zrozumieć jego skalę, podzielmy liczbę parametrów na hipotetyczne wartości:

  • d_model = 12288
  • d_ff = 4 * 12288 = 49152
  • Liczba warstw = 96

Dla jednej warstwy dekodera:

Łączne parametry = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1.1 miliarda

Razem dla 96 warstw:

1.1 miliarda * 96 = 105.6 miliarda

Pozostałe parametry pochodzą z osadzania i innych komponentów.

Wnioski

Zrozumienie parametrów i wymagań dotyczących pamięci dużych modeli językowych ma kluczowe znaczenie dla skutecznego projektowania, szkolenia i wdrażania tych potężnych narzędzi. Rozbijając komponenty architektury Transformera i badając praktyczne przykłady, takie jak GPT, uzyskujemy głębszy wgląd w złożoność i skalę tych modeli.

Aby lepiej zrozumieć najnowsze osiągnięcia w zakresie dużych modeli językowych i ich zastosowań, zapoznaj się z tymi obszernymi przewodnikami:

Ostatnie pięć lat spędziłem zanurzając się w fascynującym świecie uczenia maszynowego i głębokiego uczenia się. Moja pasja i wiedza sprawiły, że uczestniczyłem w ponad 50 różnorodnych projektach z zakresu inżynierii oprogramowania, ze szczególnym uwzględnieniem AI/ML. Moja ciągła ciekawość przyciągnęła mnie również w stronę przetwarzania języka naturalnego – dziedziny, którą chcę dalej zgłębiać.