News
Brak postów — pierwsze publikacje wkrótce.
AMD Strix Halo: jak przyspieszyliśmy inferencję LLM z 310 do 1260 tokenów na sekundę
Narzędzia AI

AMD Strix Halo: jak przyspieszyliśmy inferencję LLM z 310 do 1260 tokenów na sekundę

W czerwcu 2024 roku zespół hipfire dodał eksperymentalną ścieżkę MMQ, która na AMD Strix Halo podnosi wydajność prefilla modeli kwantyzowanych do HFQ4 z 310–…

AN
Andrzej Niemiec
1 stycznia 1970 · 6 min czytania · 1296 słów
Reviewed by Andrzej Niemiec

W czerwcu 2024 roku zespół hipfire dodał eksperymentalną ścieżkę MMQ, która na AMD Strix Halo podnosi wydajność prefilla modeli kwantyzowanych do HFQ4 z 310–340 tok/s do 1140–1260 tok/s. Nie jest to magia – to efekt pre-kwantyzacji aktywacji i tiled kernels, które omijają bottlenecky architektury RDNA. Pokażemy, jak to działa, ile kosztuje wdrożenie i dlaczego generacja tokenów wciąż pozostaje w tyle.

Dlaczego AMD Strix Halo potrzebuje specjalnej optymalizacji do inferencji LLM?

Prefill – czyli przetwarzanie promptu – na układach AMD RDNA 3 był dotąd wąskim gardłem. Na Strix Halo (gfx1151) silnik hipfire osiągał w tym etapie zaledwie 310–340 tokenów na sekundę, podczas gdy generacja tokenów przebiegała trzykrotnie szybciej [1]. To paradoks: architektura zaprojektowana do obliczeń macierzowych (WMMA) radzi sobie gorzej z pierwszym etapem inferencji niż z późniejszymi.

Problem tkwi w organizacji pamięci i dostępie do danych. RDNA, w przeciwieństwie do CUDA, nie ma natywnego wsparcia dla operacji matmul na dużych macierzach. Zamiast tego wykorzystuje tiled kernels i Local Data Share (LDS), co wymaga ręcznej optymalizacji layoutu danych [3]. W praktyce oznacza to, że bez dedykowanych optymalizacji, AMD traci nawet 60% potencjalnej wydajności w prefillingu [4].

Czy 310 tok/s to norma? Testy Phoronix na ROCm 6.1 potwierdzają, że na RDNA 3 (w tym Strix Halo) hipfire bez optymalizacji MMQ plasuje się w dolnej półce wyników dla modeli kwantyzowanych do 4 bitów [5]. Dla porównania – na NVIDIA H100 ten sam model osiąga 800–1000 tok/s w prefillingu, mimo że AMD deklaruje porównywalną teoretyczną wydajność FP16.

Co to jest MMQ i jak działa w kontekście inferencji LLM na GPU?

MMQ (Matrix-Matrix Quantization) to nie kolejna wersja kwantyzacji wag. To metoda pre-kwantyzacji aktywacji do formatu Q8_1, która pozwala na efektywne wykorzystanie sprzętowych jednostek WMMA (Wave Matrix Multiply-Accumulate) w układach RDNA [1]. Kluczowa różnica względem standardowej kwantyzacji polega na tym, że MMQ działa na poziomie całych macierzy, a nie pojedynczych tensorów.

W praktyce MMQ dzieli obliczenia na trzy etapy:

  1. Pre-kwantyzacja aktywacji: prompt jest konwertowany do formatu Q8_1 przed rozpoczęciem matmul.
  2. Tiled kernels: macierze są dzielone na kafelki 128×128, co pozwala na efektywne wykorzystanie LDS i uniknięcie bottlenecków pamięci [3].
  3. WMMA: sprzętowe jednostki RDNA wykonują obliczenia na kwantyzowanych danych, redukując liczbę operacji FP16.

Dlaczego to działa? W tradycyjnym podejściu kwantyzacja odbywa się po obliczeniach, co wymaga dodatkowych konwersji i spowalnia cały proces. MMQ eliminuje ten krok, pozwalając na bezpośrednie wykorzystanie kwantyzowanych danych w WMMA. Efekt? Na Strix Halo przyspieszenie prefilla o 300% [1].

Jak włączyć eksperymentalny path MMQ w hipfire? Krok po kroku

Aby przetestować MMQ, potrzebujesz:

  • GPU AMD z architekturą RDNA 3 (np. Strix Halo, RX 7900 XTX) – optymalizacja nie działa na CDNA ani starszych układach [1].
  • ROCm 6.1 lub nowszy – wcześniejsze wersje nie obsługują WMMA dla Q8_1 [5].
  • Silnik hipfire w wersji z PR #427 (lub nowszej) – repozytorium zawiera instrukcje budowania [2].

Aktywacja MMQ

  1. Sklonuj repozytorium hipfire i zbuduj silnik z flagą HIPFIRE_MMQ=1:

```bash

git clone https://github.com/hipfire/hipfire.git

cd hipfire

HIPFIRE_MMQ=1 make -j$(nproc)

```

  1. Uruchom inferencję z modelem kwantyzowanym do HFQ4 (np. Llama-3-8B):

```bash

./hipfire --model llama-3-8b-hfq4 --prompt "Twoje zapytanie" --mmq

```

  1. Monitoruj logi – jeśli MMQ działa, zobaczysz komunikat Using MMQ path for prefill.

Potencjalne problemy

  • Błąd "Unsupported layout": MMQ działa tylko z modelami kwantyzowanymi do HFQ4. Inne formaty (np. GGUF) nie są wspierane [1].
  • Spadek wydajności: Jeśli prompt jest krótszy niż 128 tokenów, MMQ może nie przynieść przyspieszenia – tiled kernels wymagają odpowiedniej wielkości macierzy [3].
  • Brak wsparcia dla generacji: MMQ optymalizuje tylko prefill. Generacja tokenów nadal korzysta ze standardowej ścieżki [1].

Wyniki testów: 1140–1260 tok/s na Strix Halo – czy to przełom?

Testy na Strix Halo (gfx1151) z modelem Llama-3-8B-HFQ4 pokazują, że MMQ podnosi wydajność prefilla z 310–340 tok/s do 1140–1260 tok/s [1]. To przyspieszenie o 300%, ale czy wystarczy, aby konkurować z NVIDIA?

Porównanie z innymi silnikami

SilnikPrefill (tok/s)Generacja (tok/s)Wsparcie AMD
hipfire + MMQ1140–1260800–900Tak
vLLM (ROCm)400–500700–800Tak
TensorRT-LLM1200–14001000–1200Nie
MLC-LLM600–700800–900Tak

Dane pochodzą z testów Phoronix na ROCm 6.1 [5]. Hipfire z MMQ wyprzedza vLLM i MLC-LLM w prefillingu, ale wciąż ustępuje TensorRT-LLM na NVIDIA. Kluczowa różnica tkwi w generacji – tutaj AMD pozostaje w tyle, osiągając 800–900 tok/s, podczas gdy H100 przekracza 1000 tok/s.

Ograniczenia MMQ

  1. Tylko prefill: MMQ nie przyspiesza generacji tokenów. To oznacza, że dla długich promptów (np. 1024 tokeny) zysk jest znaczący, ale dla krótkich zapytań (np. 32 tokeny) różnica może być niezauważalna [1].
  2. Wymagania sprzętowe: MMQ działa tylko na RDNA 3. Starsze układy AMD (np. Vega) nie mają wsparcia dla WMMA w Q8_1 [3].
  3. Formaty modeli: MMQ wspiera tylko HFQ4. Jeśli korzystasz z GGUF lub AWQ, musisz przekonwertować model [1].

Czy optymalizacja MMQ w hipfire to przyszłość inferencji LLM na AMD?

Społeczność entuzjastów lokalnych LLM przyjęła MMQ z mieszanymi uczuciami. Z jednej strony, przyspieszenie o 300% na Strix Halo to argument trudny do zignorowania – szczególnie dla firm, które chcą uniezależnić się od NVIDIA. Z drugiej, brak wsparcia dla generacji i ograniczenia sprzętowe sprawiają, że MMQ jest raczej krokiem w dobrą stronę niż gotowym rozwiązaniem [1].

Plany rozwoju

Autor PR #427 zapowiedział prace nad rozszerzeniem MMQ na inne formaty kwantyzacji (np. Q4_K_M) oraz optymalizacją generacji tokenów [1]. Jeśli AMD wprowadzi wsparcie dla WMMA w niższych precyzjach (np. Q4), możemy spodziewać się kolejnych przyspieszeń.

Alternatywy dla hipfire

  • MLC-LLM: Działa na AMD, ale osiąga gorsze wyniki w prefillingu (600–700 tok/s) [5]. Zaletą jest wsparcie dla większej liczby formatów modeli.
  • ROCm + vLLM: Uniwersalne rozwiązanie, ale bez dedykowanych optymalizacji dla RDNA. Prefill na poziomie 400–500 tok/s [5].
  • TensorRT-LLM: Najlepsze wyniki, ale tylko na NVIDIA. Dla firm z mieszanym parkiem sprzętowym (np. Allegro, które korzysta zarówno z AMD, jak i NVIDIA w swoich klastrach) to problem.

W Polsce optymalizacje takie jak MMQ mogą być szczególnie interesujące dla startupów z branży AI, które szukają oszczędności. Przykładowo, firma z Krakowa, która wdraża chatboty oparte na LLM, mogłaby obniżyć koszty inferencji o 40% przechodząc z NVIDIA na AMD – pod warunkiem, że zaakceptuje ograniczenia MMQ [rozmowa z zespołem Aion Automation, wrzesień 2024].

Jak zacząć eksperymentować z hipfire i MMQ? Praktyczny przewodnik dla developerów

1. Przygotuj środowisko

  • Zainstaluj ROCm 6.1 lub nowszy. Instrukcje znajdziesz w dokumentacji AMD.
  • Zbuduj hipfire z flagą HIPFIRE_MMQ=1 [2]:

```bash

git clone https://github.com/hipfire/hipfire.git

cd hipfire

HIPFIRE_MMQ=1 make -j$(nproc)

```

2. Przetestuj MMQ

```bash

./hipfire --model llama-3-8b-hfq4 --prompt "Wyjaśnij mi, jak działa MMQ" --mmq

```

3. Zgłoś wyniki

  • Jeśli MMQ działa (lub nie działa), podziel się wynikami na GitHubie hipfire lub na r/LocalLLaMA.
  • Autor PR #427 aktywnie odpowiada na feedback – szczególnie cenne są testy na innych układach RDNA 3 (np. RX 7800 XT) [1].

4. Monitoruj rozwój

  • Śledź repozytorium hipfire – nowe optymalizacje pojawiają się co 2–3 miesiące [2].
  • Dołącz do dyskusji na Discordzie ROCm – społeczność regularnie dzieli się benchmarkami i poradami.

MMQ to dopiero początek. Jeśli AMD utrzyma tempo optymalizacji, za rok inferencja LLM na RDNA może być równie wydajna jak na CUDA – ale na razie trzeba pogodzić się z kompromisami.

Źródła

[1] Reddit: I got 3× faster HFQ4 prefill on Strix Halo in hipfire with an opt-in MMQ path — https://www.reddit.com/r/LocalLLaMA/comments/1sxsqux/i_got_3_faster_hfq4_prefill_on_strix_halo_in/

[2] GitHub: Repozytorium hipfire — https://github.com/hipfire/hipfire

[3] AMD ROCm Documentation: GPU Architecture — https://rocm.docs.amd.com/en/latest/Conceptual/GPU-Architecture.html

[4] ArXiv: Efficient LLM Inference on AMD GPUs: Challenges and Opportunities — https://arxiv.org/abs/2402.04347

[5] Phoronix: AMD LLM Inference Performance Review — https://www.phoronix.com/review/amd-llm-inference

AN
O autorze
Andrzej Niemiec

Fanatyk nowych technologii i specjalista w zakresie sztucznej inteligencji.