Wprowadzenie do formatu plików dużych modeli GGUF
Frameworki takie jak PyTorch są zwykle używane do tworzenia dużych modeli językowych, a ich wyniki wstępnego trenowania są zapisywane w odpowiednim formacie binarnym, na przykład plik sufiksu pt jest zazwyczaj binarnym wynikiem przed trenowaniem zapisanym przez framework PyTorch.
Jednak bardzo ważnym problemem z przechowywaniem dużych modeli jest to, że ich pliki są ogromne, a struktura, parametry itd. modelu również wpływają na efekt rozumowania i wydajność modelu. Aby zwiększyć efektywność przechowywania i wymiany dużych modeli, istnieją duże pliki modeli w różnych formatach. Wśród nich GGUF jest bardzo ważnym formatem plików dużych modeli.
Plik GGUF oznacza GPT-Generated Unified Format, czyli duży format pliku modelowego zdefiniowany i wydany przez Georgiego Gerganova. Georgi Gerganov jest założycielem słynnego projektu open source llama.cpp.
GGUF to specyfikacja plików w formacie binarnym, a oryginalne wyniki z pre-treningu dużych modeli są konwertowane na format GGUF i mogą być ładowane i używane szybciej, a jednocześnie zużywać mniej zasobów. Powodem jest to, że GGUF wykorzystuje różnorodne technologie do zachowania wyników wstępnego trenowania dużych modeli, w tym stosowanie kompaktowych formatów kodowania binarnego, zoptymalizowanych struktur danych, mapowania pamięci itd.
Różnice między GGUF, GGML, GGMF i GGJT
GGUF to format binarny zaprojektowany do szybkiego ładowania i zapisywania modeli. Jest to następca formatu plików GGML, GGMF i GGJT, zapewniający przejrzystość poprzez uwzględnienie wszystkich informacji potrzebnych do załadowania modelu. Jest również zaprojektowany tak, aby był skalowalny, dzięki czemu można było dodawać nowe informacje do modelu bez naruszania kompatybilności.
- GGML (Brak wersji): Format bazowy bez wersjonowania czy wyrównania.
- GGMF (wersjonowany): To samo co GGML, ale z wersjonowaniem.
- GGJT: Wyrównanie tensorów, aby umożliwić użycie z mmapami, które wymagają wyrównania. V1, V2 i V3 są takie same, ale późniejsze wersje stosują inne schematy kwantyzacji, które nie są kompatybilne z wcześniejszymi wersjami.
Dlaczego duże pliki modeli w formacie GGUF działają dobrze
Format plików GGUF umożliwia szybsze ładowanie modeli dzięki kilku kluczowym cechom:
Format binarny: GGUF jako format binarny może być odczytywany i analizowany szybciej niż pliki tekstowe. Binary są zazwyczaj bardziej kompaktowe, co zmniejsza ilość operacji I/O oraz czas przetwarzania potrzebny na odczyt i parsowanie.
Zoptymalizowane struktury danych: GGUF może stosować specjalnie zoptymalizowane struktury danych, które umożliwiają szybki dostęp i ładowanie danych modeli. Na przykład dane mogą być organizowane zgodnie z potrzebami do ładowania pamięci, aby zmniejszyć przetwarzanie podczas obciążenia.
Kompatybilność z mapowaniem pamięci (mmap): Jeśli GGUF obsługuje mapowanie pamięci (mmap), pozwala to na bezpośrednie mapowanie danych z przestrzeni adresowej dysku do pamięci, co skutkuje szybszym ładowaniem danych. Dzięki temu dane mogą być dostępne bez faktycznego ładowania całego pliku, co jest szczególnie skuteczne w przypadku dużych modeli.
Efektywna serializacja i deserializacja: GGUF może stosować metody efektywnej serializacji i deserializacji, co oznacza, że dane modelu mogą być szybko przekształcane w użyteczne formaty.
Niewiele zależności i odniesień zewnętrznych: Jeśli format GGUF jest zaprojektowany jako samodzielny, tzn. wszystkie wymagane informacje są przechowywane w jednym pliku, zmniejsza to liczbę operacji wyszukiwania i odczytu pliku zewnętrznego podczas parsowania i ładowania modelu.
Kompresja danych: Format GGUF może wykorzystywać skuteczne techniki kompresji danych, zmniejszając rozmiary plików i tym samym przyspieszając proces odczytu.
Zoptymalizowane mechanizmy indeksowania i dostępu: Mechanizmy indeksowania i dostępu do danych w plikach mogą być zoptymalizowane, aby przyspieszyć wyszukiwanie i ładowanie konkretnych fragmentów danych.
Podsumowując, GGUF umożliwia szybkie ładowanie modeli dzięki różnym metodom optymalizacji, co jest szczególnie istotne w scenariuszach wymagających częstego ładowania różnych modeli.
Przykładowy plik GGUF:Logowanie do linku jest widoczne. llama.cpp Adres projektu:Logowanie do linku jest widoczne. |