Błagam, znowu to robicie :/
Oryginalny model jest w bfloat16 a bazową konwersję do GGUF robicie na fp16. Na wstępie tracicie bez sensu precyzję, zróbcie porządnie konwersję z --outtype bf16 i najlepiej jakiś imatrix na próbce z dodanym polskim tekstem.
Oryginalny model jest w bfloat16 a bazową konwersję do GGUF robicie na fp16. Na wstępie tracicie bez sensu precyzję, zróbcie porządnie konwersję z
--outtype bf16i najlepiej jakiś imatrix na próbce z dodanym polskim tekstem.
Dorzuciłem wersje BF16, natomiast imatrix pewnie będzie w innym repozytorium, żeby nie mieszać plików (termin: nieznany)
A ja ponawiam prośbę o jakiś opis co się zmieniło aby wrzucić na reddit :)
A ja ponawiam prośbę o jakiś opis co się zmieniło aby wrzucić na reddit :)
Co się zmieniło względem czego? Chciałbym tylko uściślić bo nie widziałem żadnego pytania wcześniej
względem 2.x :) bo architektura jest chyba taka sama?
względem 2.x :) bo architektura jest chyba taka sama?
Opis jest na głównej karcie modelu: https://huggingface.co/speakleash/Bielik-11B-v3.0-Instruct
tam też jest raport techniczny: https://github.com/speakleash/bielik-papers/blob/main/v3/Bielik_11B_v3.pdf
Dorzuciłem wersje BF16, natomiast imatrix pewnie będzie w innym repozytorium, żeby nie mieszać plików (termin: nieznany)
Okay, ale kwanty też powinny być robione z BF16, a nie z F16.
Okay, ale kwanty też powinny być robione z BF16, a nie z F16.
Zastanawiam się czy to ma znaczenie, w końcu i tak chcesz używać skwantyzowanego modelu? Masz jakieś dane, badania że kwanty zrobione z BF16 są lepsze od tych z F16? Mam na myśli na przykład Q4_K_M - jest tu jakaś różnica? Czy tylko model może się minimalnie inaczej zachowywać bo algorytm może wybrać inne sieci w czasie kwantyzacji?
Moim zdaniem, jak chce się mieć lepszej jakości kwanty, trzeba ustawiać wyższe wartości dla warstw związanych z attention. Zrobiłem takie kwanty dla tego modelu z modelu BF16 jakbyś chciał spróbować.
Co do imatrix - ja unikam, o ile nie chcę używać modelu poniżej Q4 - modele zaczynają się z niektórymi datasetami inaczej zachowywać. Różnice może i małe, zależne od modelu i oczywiście datasetu ale niewątpliwie są i moim zdaniem nie na plus.
Zastanawiam się czy to ma znaczenie, w końcu i tak chcesz używać skwantyzowanego modelu? Masz jakieś dane, badania że kwanty zrobione z BF16 są lepsze od tych z F16? Mam na myśli na przykład Q4_K_M - jest tu jakaś różnica? Czy tylko model może się minimalnie inaczej zachowywać bo algorytm może wybrać inne sieci w czasie kwantyzacji?
Tak, oczywiście, że jest różnica, bo F16 dla modelu trenowanego w BF16 jest już obcięciem precyzji. Kwantowanie z obciętej precyzji skutkuje jeszcze bardziej obciętą precyzją. Ba, ostatnio dorzuciliśmy w Llama.cpp automatyczne ustawianie --outtype właśnie dlatego, że dla niektórych modeli F16 powodowało nawet kompletne popsucie modeli, patrz dyskusja nad https://github.com/ggml-org/llama.cpp/pull/18214
Moim zdaniem, jak chce się mieć lepszej jakości kwanty, trzeba ustawiać wyższe wartości dla warstw związanych z attention. Zrobiłem takie kwanty dla tego modelu z modelu BF16 jakbyś chciał spróbować.
Po to jest imatrix, żeby właśnie wyznaczać, gdzie ustawiać wyższe wartości :)
Co do imatrix - ja unikam, o ile nie chcę używać modelu poniżej Q4 - modele zaczynają się z niektórymi datasetami inaczej zachowywać. Różnice może i małe, zależne od modelu i oczywiście datasetu ale niewątpliwie są i moim zdaniem nie na plus.
Nie bardzo rozumiem. Imatrix to nic innego, jak kalibrowanie kwantów na te warstwy, które się bardziej degradują na określonym datasecie używanym do kwantowania. Oczywiście można robić zły imatrix - w szczególności dla modelu z językiem polskim takiego jak Bielik używanie domyślnych datasetów wielojęzycznych albo wręcz angielsko/chińskich byłoby nieporozumieniem, ale w ogólności raczej pomaga niż przeszkadza.
Kwantowanie samo z siebie jest obcięciem precyzji i wątpię, że jest jakaś znaczna różnica pomiędzy:
BF16 -> F16 -> Q4_K
a
BF16 -> Q4_K
może algorytm wybierze nieco inne aktywacje do usunięcia z warstw modelu i model zachowa nieco inną wiedzę. W pierwszym wypadku kwantyzujesz na dwa razy i tyle.
Co do imatrix to algorytm opisany w https://github.com/ggml-org/llama.cpp/pull/4861 wygląda jakby wybierał, które aktywacje w warstwie modelu zachować na podstawie danych treningowych zamiast używać sztywnej formuły ALE imatrix w żaden sposób nie decyduje czy daną warstwę kwantyzować Q4_K czy Q6_K... dyskusja jaką podałeś odnosi się do początkowej konwersji modelu na pełnobitowy GGUF i są warstwy, jak w tej dyskusji zgłaszana, które są bardzo podatne na kwantyzacje (w dyskusji mowa o output tensors) i zgadzam się są to wrażliwe na kwantyzacje warstwy, tak jak i te odpowiedzialne za uwagę i w związku z tym zacząłem eksperymentować z XXL GGUF-ami aby właśnie te wrażliwe na kwantyzacje warstwy pozostawić w wyższej precyzji. Bardziej inteligentne próbkowanie tych warstw robi Unsloth (UD XL GGUF) albo Magiccodingman (Magic Quants).
Co do różnic w modelach z imatrix - zaobserwowałem modele, które po imartix gubią część umiejętności wypisywania list z ikonkami unicode, ogólnie obserwowałem zmianę stylu formatowania odpowiedzi albo na pytania programistyczne mają tendencję udzielania opisowej odpowiedzi, zamiast podać przykłady kodu, czy też najczęściej obserwowane przeze mnie, drętwe płaskie odpowiedzi, gdy model bez odpowiada bardziej "żywo" i ma jakiś swój styl.
Natomiast zgodzę się, że imatrix robi dobrą robotę dla modeli poniżej Q4, zwłaszcza tych pomniejszych i są dobre datasety nie wpływające na jakość modelu (jak te w kwantach od Unsloth).
I jeszcze taka obserwacja, podawanie wysokiej wartości do parametru --chunks do imatrix degradowało model. Ale może to też zależy od datasetu/modelu, tego już nie sprawdzałem.
"Kwantowanie samo z siebie jest obcięciem precyzji i wątpię, że jest jakaś znaczna różnica pomiędzy:
BF16 -> F16 -> Q4_K
a
BF16 -> Q4_K
może algorytm wybierze nieco inne aktywacje do usunięcia z warstw modelu i model zachowa nieco inną wiedzę. W pierwszym wypadku kwantyzujesz na dwa razy i tyle."
No, jak wątpisz to już nic na to nie poradzę, ale owszem, jest istotna różnica między kwantowaniem "na raz" i "na dwa razy".
"Co do imatrix to algorytm opisany w https://github.com/ggml-org/llama.cpp/pull/4861 wygląda jakby wybierał, które aktywacje w warstwie modelu zachować na podstawie danych treningowych zamiast używać sztywnej formuły ALE imatrix w żaden sposób nie decyduje czy daną warstwę kwantyzować Q4_K czy Q6_K..."
W domyślnym kodzie faktycznie nie, chociaż większość ludzi robiących swoje kwanty z tego korzysta i ma swoje niestandardowe branche. Natomiast wpływa na współczynniki kwantyzacji.
Oryginalny model jest w bfloat16 a bazową konwersję do GGUF robicie na fp16. Na wstępie tracicie bez sensu precyzję, zróbcie porządnie konwersję z
--outtype bf16i najlepiej jakiś imatrix na próbce z dodanym polskim tekstem.
Masz rację - poprawiam. Imatrix głównie robiłem dla modeli <Q4. Nie widziałem różnicy na loss (PPL) dla większych. Nie mówię, że nie ma sensu ale po prostu na val PPL była taka sama więc porzuciłem ten pomysł.