Gdy siadam do pisania tego tekstu, kurs akcji NVidii – najwyżej wycenianej firmy świata – spadł o 17%, co oznacza, że w kilkanaście godzin łączna wartość firmy zmniejszyła mniej-więcej o cztery roczne budżety Polski. A wszystko z powodu Dużego Modelu Językowego (LLM) chińskiej produkcji o nazwie DeepSeek R1. Zainstalujemy go dziś na naszym komputerze.
Tylko… czy instalowanie chińskiego oprogramowania będzie bezpieczne? Każdy z nas bawił się ChatemGPT, ale w jego przypadku korzystamy z przeglądarki internetowej a serwery zlokalizowane są w USA. To zupełnie inna sytuacja, niż uruchamianie czegoś lokalnie na własnej maszynie – szczególnie, gdy mowa o produkcie z Chin, państwa totalitarnego, inwigilującego obywateli i trzymającego rodzime firmy technologiczne na krótkiej smyczy.
Stali czytelnicy bloga spodziewają się już, że ten tekst nie ograniczy się do tutoriala tłumaczącego, który plik ściągnąć i jakie opcje kliknąć. Nowych informuję: moje teksty są długie. Co najwyżej AI wam je streści, ale to już wasza sprawa.
O czym w ogóle mowa? Co to jest LLM?
ChatGPT to produkt firmy OpenAI, automat konwersacyjny korzystający z mechanizmów tzw. sztucznej inteligencji (artificial intelligence – AI). Jego premiera w roku 2022 odbiła się bardzo szerokim echem i przykuła uwagę nie tylko specjalistów, ale także szerszej publiczności. ChatGPT zaprezentował zupełnie nowe perspektywy – maszyna była gotowa rozmawiać na dowolny temat, nie gubiła wątku, nie brzmiała schematycznie, dysponowała wiedzą z każdej dziedziny. Słowem – wszystkie ułomności dawniejszych czatbotów znikły jak za dotknięciem magicznej różdżki.
ChatGPT został zbudowany w oparciu o tzw. Duże Modele Językowe (Large Language Model – LLM) z rodziny GPT. Prace nad nimi firma OpenAI rozpoczęła w roku 2015, przełom nastąpił po opracowaniu modelu oznaczonego numerem 3.5 (dziś zastąpiono go już kilkoma nowszymi modelami).
Jak działają sieci neuronowe?
Po pierwsze – napisano o tym całe regały książek. Po drugie – to dość ciekawa sprawa. Wiemy doskonale, jak działają sieci neuronowe. Nie mamy pojęcia, dlaczego działają i co dzieje się w ich środku. Dobra, to nie jest do końca prawda. Gdy mówimy o prostych sieciach, które składają się z kilkudziesięciu lub kilkuset parametrów i realizują skrajnie proste zadanie (np. rozpoznanie napisanej ręcznie cyfry), potrafimy prześledzić i opisać przebieg obliczeń. Gdy jednak sieci składają się z setek miliardów parametrów, nikt nie jest w stanie przeniknąć ich złożoności.
Spójrzmy na przykładowy obrazek
Widzimy tu skrajnie uproszczony przykład tego, jak działa pojedynczy neuron w sieci neuronowej (pomarańczowe kółko). W niebieskich polach mamy parametry wejściowe. Zielone liczby to wagi połączeń. Aby ustalić, jaką wartość przyjmie nasz neuron, mnożymy każdy parametr przez wagę połączenia i sumujemy wyniki. Wartość wyliczona dla danego neuronu może być jednym z parametrów wejściowych kolejnego neuronu. Do czego można użyć takich obliczeń?
Zerknijmy na tę stronę, na której znajdziemy sieć neuronową rozpoznającą ręcznie pisane cyfry. W lewym górnym rogu możemy naszkicować cyferkę. Co dzieje się dalej?
Wpisany znak trafia na kratkę o rozmiarach 28×28 pikseli, które zamieniane są na 784 liczby stanowiące dane wejściowe. Nad kratką mamy rząd 300 neuronów. Każdy „piksel” z kratki (liczba reprezentująca kolor piksela) połączony jest z każdym neuronem, zaś każde takie połączenie charakteryzuje się jakąś wagą. Do przeprowadzenia obliczeń potrzebujemy więc 235 tysięcy liczb określających wagi połączeń. Zgodnie z konwencją z powyższego obrazka, im większą wartość liczbową przyjął neuron, tym jaśniejszym kolorem jest oznaczony.
W tej wizualizacji nie widać, jak mocno które piksele wpływają na finalną wartość danego neuronu, bo połączeń jest zwyczajnie za dużo. Gdybyśmy jednak zagłębili się w obliczenia, to prawdopodobnie udałoby się znaleźć w tej warstwie neurony, których wartość oznaczała obecność (lub brak) takich cech obrazka jak „pionowa kreska” albo „owal w górnej połowie obrazu”.
Dalej mamy warstwę 100 neuronów, z których każdy łączy się z trzema setkami z poprzedniej warstwy (czyli kolejne 30 tys. wag połączeń). Na samej górze znajduje się ostatnia warstwa 10 neuronów w których sieć neuronowa informuje nas o dokonanej klasyfikacji. Interesującą zabawą jest odkrywanie, kiedy trójka zamienia się w ósemkę.
Uczenie sieci neuronowej
Wspomnieliśmy już, że sieć neuronowa z obrazka zawiera 410 neuronów zorganizowanych w trzech warstwach. Wiemy też, że przy 784 parametrach wejściowych potrzebujemy ponad 250 tysięcy liczb stanowiących wagi połączeń. Jak je wyznaczyć?
To jest właśnie najlepsze w sieciach neuronowych – nie musimy! Właściwe wagi pojawią się same, jako rezultat procesu uczenia. Będziemy tylko potrzebować dużej liczby obrazków z cyferkami do treningu sieci. Na przykład: popularny zestaw MNIST zawiera 60 tysięcy ręcznie pisanych cyferek do swobodnego wykorzystania.
Proces uczenia jest zaskakująco prosty. Najpierw wszystkim wagom przypisujemy… wartości losowe. Oczywiście taka sieć będzie działać chaotycznie, nie sklasyfikuje poprawnie żadnej cyferki. Gdy weźmiemy obrazek z zerem i przeliczymy całą sieć, w warstwie wynikowej będziemy mieli wskazania całkiem od czapy.
Teraz nastąpi kluczowy moment. Zmodyfikujemy odrobinkę te nasze losowe wagi w taki chytry sposób, aby w warstwie wynikowej zero uzyskało minimalnie wyższe wskazanie, a wszystkie inne cyferki minimalnie niższe. Teraz bierzemy obrazek z jedynką i przeliczamy sieć ponownie. Nadal będzie chaos, więc po raz kolejny zmodyfikujemy odrobinkę wagi, by odrobinkę podbić klasyfikację wyniku jako jedynki. Potem bierzemy dwójkę, trójkę, i tak dalej. Powtarzamy operację dla wszystkich 60 tysięcy cyferek ze zbioru uczącego.
Gdy skończymy, nasza sieć neuronowa będzie… nadal beznadziejna. Najprawdopodobniej nie będzie widać żadnej poprawy. Cały cykl zaczniemy więc od nowa. Po kilkudziesięciu lub kilkuset powtórzeniach zauważymy jednak, że coś drgnęło. Predykcje będą coraz lepsze. Nasza sieć zacznie klasyfikować cyferki!
W każdej chwili możemy przerwać pętlę szkolenia, zresztą w którymś momencie jakość predykcji przestanie rosnąć. Wyliczone wagi możemy zapisać do pliku, by korzystać z nich za każdym razem, gdy staniemy przed koniecznością maszynowego rozpoznawania cyferek z obrazka 28×28 pikseli. Wagi z aplikacji, której przed chwilą się przyglądaliśmy, znajdziemy tutaj.
Uproszczenia, uproszczenia
Powyższe zakreślenie tematu sieci neuronowych było pełne uproszczeń. Po pierwsze – nie zawsze sieć będzie budowana zgodnie z metodą „każdy neuron warstwy A łączyć z każdym neuronem warstwy B”. Czasem lepiej sprawdzą się metody z mniejszą liczbą połączeń, czasem połączymy ze sobą odległe warstwy. Po drugie – używałem niefachowych terminów, bo te „neurony” to tak naprawdę perceptrony, „chytra modyfikacja wag” to tak naprawdę propagacja wsteczna – i tak dalej. Po trzecie – nie zawsze wynikiem działania sieci neuronowej będzie klasyfikacja typu „jedna spośród N wartości”, to tylko jedno z zadań, jakie mogą realizować takie konstrukcje.
Uważny czytelnik zauważył też, że zboczyłem nieco z tematu. Opisałem sieć neuronową, która rozpoznaje obrazki, tymczasem ChatGPT generuje napisy. Nic nie szkodzi, zasada ich działania jest zbliżona. Czemu więc generatywna AI nie pojawiła się 60 lat temu, gdy opracowano pierwsze algorytmy uczenia maszynowego?
Cóż, dopiero od niedawna naukowcy i wynalazcy mogli sięgnąć po moc obliczeniową niezbędną do trenowania sieci neuronowych o setkach miliardów połączeń. Nie chodzi tu nawet o moc procesorów (CPU mają kilka pracujących równolegle jednostek obliczeniowych), lecz wydajność kart graficznych (wyposażonych są w setki lub tysiące niezależnych jednostek). To właśnie GPU stanowiły sekretny składnik, który pozwolił na utworzenie zupełnie nowej dziedziny nauki i technologii. Drugim czynnikiem była nowa architektura zastosowana w takich modelach, czyli wspomniane już „transformery”.
Dlaczego DeepSeek zrobił tyle hałasu?
ChatGPT jest darmową aplikacją dostępną przez przeglądarkę internetową. Gdy jednak chcemy zautomatyzować użycie modeli GPT albo zintegrować je z naszą aplikacją, konieczne jest użycie płatnego API. Płacimy tam za generowane obciążenie. Wysokość opłat zależy zarówno od liczby tokenów wysyłanych do serwerów, jak i liczbę tokenów w generowanych przez model odpowiedziach (jedno słowo to jeden lub dwa tokeny).
Najnowszym dużym modelem firmy OpenAI jest o1, wyposażony w mechanizm wnioskowania. Model po otrzymaniu prompta (zadania tekstowego) rozpoczyna pracę nie od generowania pierwszych słów odpowiedzi, lecz od utworzenia planu wykonania zadania. Opisuje kolejne etapy pracy oraz wszelkie informacje dodatkowe, których kontekst może pomóc w „skupieniu uwagi” na istocie problemu. Model o1 może też spekulować na temat najlepszej metody wykonania zadania oraz wypróbować kilka podejść – na przykład przy próbie zdekodowania nieznanego szyfru.
Wszystko to oznacza, że serwery OpenAI muszą zrealizować istotnie więcej obliczeń, niż miało to miejsce w starszych GPT 3.5 czy 4o. Najnowszy model jest więc wyceniany sześć razy drożej niż poprzedni. Ponieważ jednak był to jedyny dostępny na rynku model z zaawansowanym wnioskowaniem, wysoka cena wydawała się zarówno uzasadniona, jak i nieunikniona.
I w tym właśnie momencie na arenę wchodzi DeepSeek R1. Po pierwsze – dostępny za darmo, na otwartej licencji. OpenAI, wbrew nazwie i pierwotnej idei założycieli, od lat nie dzieli się wynikami swoich badań. Po drugie – DeepSeek R1 jest wyposażony w funkcję wnioskowania, której działanie jest w pełni transparentne (model o1 firmy OpenAI ukrywa treść kroków prowadzących do celu). Po trzecie – jest kilkukrotnie tańszy w użyciu od modelu OpenAI. Nie jest więc zaskoczeniem, że dla środowiska AI był to wstrząs, zaś dla NVidii – wręcz trzęsienie ziemi.
R1 nie jest jedynym debiutującym modelem DeepSeek, opublikowano także wariant V3 z nowatorskim mechanizmem równoległego generowania kilku kolejnych tokenów wyjściowych. Według zapowiedzi (oraz cennika wersji dostępnej przez API) koszt jego eksploatacji ma być kilkadziesiąt razy niższy, niż modelu 4o od OpenAI.
Jak to możliwe, że nieznana szerzej firma z Chin była w stanie znienacka wywrócić stolik? Zwłaszcza biorąc pod uwagę ograniczenia eksportowe, którym podlegają najmocniejsze chipy NVidii? Wszystko wskazuje na to, że Chińczycy po prostu bardziej się przyłożyli i zoptymalizowali te niskopoziomowe fragmenty kodu działającego na GPU, którym wcześniej nikt się na serio nie przyjrzał. Teraz wiemy, że da się tam jeszcze wiele poprawić. Tworzenie i trenowanie LLM-ów to specjalizacja skrajnie niszowa, o specjalistów trudno, zaś miliardowe inwestycje zachodnich firm w setki tysięcy kart NVidii przyzwyczaiły wszystkich, że te rzeczy po prostu muszą być skrajnie drogie. Okazuje się, że nieco mniej, niż dotąd sądzono.
Czy chiński LLM jest bezpieczny?
Cóż, „bezpieczeństwo” można rozumieć wielorako. Większość z nas nigdy nie odwiedzi Chin i nie zetknie się z chińską bezpieką ani służbami imigracyjnymi, więc niewinne heheszki z Przewodniczącego Xi nie będą się wiązać z jakimkolwiek zagrożeniem prawnym lub fizycznym.
Co innego z poufnością i prywatnością danych przetwarzanych po drugiej stronie Wielkiego Firewalla. Gdy używamy przeglądarkowej lub mobilnej aplikacji DeepSeek, której serwery działają w Chinach, nie możemy tak naprawdę liczyć na jakąkolwiek prawną ochronę prywatności, poufności ani niczego podobnego. Niewielkim pocieszeniem będzie to, że możemy być w miarę obojętni na ewentualne śledzenie czy profilowanie – bo przecież nikt w Polsce nie korzysta z chińskich serwisów społecznościowych czy służby zdrowia.
Popularna mądrość mówi, by nie wrzucać do Internetu żadnych tekstów ani zdjęć, których nie chcielibyśmy pokazać rodzicom lub bliskim. W przypadku chińskiego LLM-a warto nieco rozszerzyć tę radę – nie wrzucaj do chińskiego internetu tego, co wstydziłbyś się wykrzykiwać na zatłoczonym rynku.
DeepSeek zaliczył naprawdę fatalny start, gdy chodzi o poufność danych. Kilka dni temu badacze security znaleźli publicznie dostępną bazę danych z historią czatów. W ich opinii ekipa DeepSeek zlekceważyła ryzyka w tym obszarze i pozostawiła kompromitujące dziury w swoich systemach. Wszyscy wiemy zaś, jak trudno „doinżynierować” bezpieczeństwo do już działającego systemu.
Dlaczego więc zachęcam do eksperymentów na własnym komputerze, czy nie będzie to jeszcze bardziej ryzykowne?
Chcemy uruchomić lokalnie model DeepSeek R1. Czym ryzykujemy?
Najlepsza odpowiedź na takie pytanie to: zróbmy własny research! Bez obaw jednak, czapeczka z amelinium dziś nam się nie przyda. Najpierw pozwólmy sobie na ważną refleksję.
Aby używać komputera z internetem do efektywnej pracy, musimy zaufać wielu osobom i firmom. Ufamy Microsoftowi, że system Windows i pakiet Office nie zrobią nam krzywdy. Ufamy Google, że przeglądarka Chrome jest po naszej stronie. Ja ufam (sprawdza ikonki na ekranie) twórcy Total Commandera, twórcy Notepada++, twórcom Winampa, ufam firmom produkującym sprzęt i sterowniki Elgato, firmom Zoom, Jetbrains i Atlassian. A to przecież tylko programy przypięte do paska zadań albo obecne w pasku statusu, w komputerze mam zainstalowane dziesiątki innych produktów!
Owszem, istotna część tych programów należy do kategorii open-source. Co z tego jednak, skoro nigdy nie audytowałem kodu źródłowego Gimpa czy OBS-a. Nigdy nie sprawdzałem też, czy pakiety instalacyjne tych programów są na pewno pozbawione niepożądanych dodatków. Zaufanie to nadal podstawa. Oraz nadzieja, że ktoś z milionów użytkowników coś zauważy, gdyby zagrożenie się zmaterializowało.
Dobra, do rzeczy. Aby skorzystać z DeepSeek R1, zainstalujemy pakiet Ollama (ollama.com). Rozwija go mały amerykański startup, zaś projekt zaistniał w roku 2023, gdy wyprodukowany przez Facebooka model „Llama” wyciekł poza środowisko akademickie a pasjonaci zaczęli szukać sposobów, jak go odpalić na domowych pecetach.
Ollama jest oprogramowaniem bardzo znanym w branży AI. Potrafi uruchamiać wiele rodzajów sieci neuronowych, o najróżniejszych kombinacjach warstw, głębokości, precyzji, na CPU i GPU, na różnych architekturach sprzętowych. Integrują się z nim dziesiątki i setki innych pakietów, wiele osób śledzi jego ewolucję i ufa twórcom. Zaliczam go więc do takiej samej kategorii zaufanych programów, jak Gimp czy DBeaver. Instrukcję instalacji Ollamy znajdziesz w dalszej części artykułu.
Co tak naprawdę pobierzemy, gdy ściągamy model?
Pamiętacie jeszcze początek tekstu i sieć neuronową rozpoznającą cyferki? Pokazałem, że ćwierć miliona wag niezbędnych do pracy było pobieranych z tego pliku.
Jeśli zajrzymy do środka, zobaczymy kilka komend języka Javascript oraz rzędy i kolumny liczb opisujących wagi kolejnych połączeń między wejściem a neuronami oraz między neuronami w kolejnych warstwach.
Okazuje się, że do dystrybucji sieci neuronowej nie potrzeba wiele więcej. Nowoczesny format GGUF (Generic GPT Unified Format) zawiera wszystkie dane wymagane do przeprowadzenia obliczeń. Oprócz zakodowanych informacji o precyzji, typach użytych neuronów, warstwach i wagach, znajdziemy tam jeszcze specyfikację tokenizatora – do kodowania (zamiany tekstu wejściowego na wartości parametrów) oraz dekodowania warstwy wynikowej (zamiany liczb na tekst).
Wiadomo, konkretne implementacje miewają usterki. Co do zasady jednak pobrany model nie będzie mógł wykonać dowolnego kodu na naszym komputerze. Z modelu pochodzi jedynie instrukcja budowy i przeliczania modelu, kod wykonujący obliczenia dostarcza Ollama.
Model językowy chińskiego pochodzenia posłuży jedynie do zainicjowania w pamięci odpowiednich struktur danych i nadania parametrów obliczeniom arytmetycznym. Nie będzie mógł czytać plików, nie ma dostępu do internetu – i dlatego właśnie możemy go odpalać bez ryzyka.
Nie stać nas na uruchomienie pełnego modelu
Rozczarowanie: w domu nie uruchomimy modelu DeepSeek R1. Powód jest prosty – o ile typowy komputer zwykłego człowieka na 8-16 GB RAM, zaś pasjonata – 32-64 GB RAM, to pełny model R1 wymaga ponad… 700 GB RAM/VRAM. Najtańszy sprzęt wyposażony nie w cztery, lecz w 24 gniazda pamięci kosztuje – wraz z tyloma modułami 32 GB – przeszło 6000 dolarów – a i tak osiągnie jedynie parę tokenów na sekundę. Koszt bardziej efektywnej maszyny z odpowiednią liczbą odpowiednich kart graficznych szybuje w kosmos.
Jednym z rozwiązań jest kwantyzacja czyli redukcja rozmiaru modelu polegająca na zredukowaniu precyzji wag. Ponieważ jednak wagi modelu R1 są kodowane na zaledwie 8 bitach, nie mamy tu zbyt dużego pola manewru (tutaj poczytasz o takich próbach). W tak dużych modelach trudno też przeprowadzić eliminację wag i neuronów, które nie mają istotnego wkładu w inferencję.
Twórcy DeepSeek rozwiązali problem dostarczając tzw. modele destylowane, czyli mniejsze (czasem – dużo mniejsze) sieci neuronowe szkolone na bazie oryginału. O metodach destylacji można poczytać tutaj lub tutaj. Oczywiście dziesiątki lub setki razy mniejszy model pomieści dużo mniej wiedzy i zdolności kojarzenia. Będzie „głupszy” ale zachowa charakterystyczne cechy pierwowzoru – jak np. umiejętność wnioskowania.
Pamiętajmy, że owej „głupoty” nie należy traktować dosłownie. W przypadku sieci neuronowych degradacja nie oznacza, że sieć utraci dający się wskazać obszar wiedzy albo zacznie odpowiadać prostszymi czy krótszymi zdaniami. Wydarzą się raczej następujące sytuacje:
- tworzenie nieistniejących słów
- wtrącenia słów z innych języków lub alfabetów
- zmiana języka w środku wypowiedzi
- gubienie wątku i kontekstu
- redukcja zdolności ujęcia tematu z różnych perspektyw
- halucynacje czyli opis nieistniejących faktów, miejsc, osób, sytuacji
Objawy będą tym bardziej dotkliwe, im bardziej model zostanie skompresowany. Na stronie ollama.com/library/deepseek-r1 znajdziesz dostępne warianty destylowanego modelu DeepSeek R1, o rozmiarach od 1.5 do 70 miliardów parametrów (na dysku zajmują od 1 do 42 GB).
Może czas już coś uruchomić?
Decyzja zapadła, instalujemy!
Instalacja środowiska Ollama jest prosta – wchodzimy na stronę ollama.com/download/windows, pobieramy instalator, uruchamiamy, klikamy przycisk Install.
Chwilę później zobaczymy powiadomienie
Oznacza ono, że Ollama jest gotowa, by załadować model i udostępnić go lokalnym aplikacjom klienckim. Najprostszą taką aplikacją jest ollama.exe
, którą możemy uruchomić z linii komend. Najlepiej sprawdzi się Windows Terminal, bo obsługuje szeroki zakres znaków Unicode. Aby uruchomić (a za pierwszym razem – uprzednio pobrać) model 1.5b (najmniejszy), wydajemy komendę
ollama run depseek-r1:1.5b
Gdy zobaczymy znak zachęty >>>
, model jest gotów do pracy. Gdy przywitamy się po polsku, w połowie przypadków zobaczymy pozdrowienie, w połowie zaś – niespójne bzdury. Potem będzie tylko gorzej.
Przykład? Niech naszym promptem będzie polecenie „Co wiesz o Adamie Mickiewiczu, narodowym wieszczu? odpowiedz po polsku”. Najmniejszy model odpowiedział mi tak:
Czy wiesz oadamzie Mickiewiczu, narodzie w wizuce?
Co chcesz z nim?Adam wiedno spokoju,
Z czystności miarki.Są siła i potomki w myśle,
Po jascie, po niespoznaście.Inny wiedy takie,
Kontynuujmy.Adam jest nienaśny,
A w powiemianu nie.I chcesz z nim?
Wizuce, to co do naszejcywiczy,
Są myślnikami w skuteczności.
Gdy jednak załadowałem model 32b (a więc 20 razy większy), odpowiedź była bez porównania lepsza – choć nadal zawiera błędy słowne i gramatyczne:
Adam Mickiewicz jest uważany za najważniejszego polskiego poety romantyzmu i narodowego wieszczu Polski. Urodził się w 1798 roku koło Navahrudaka (obecnie na Białorusi) i zmarł w 1855 roku w Konstantynopoli (obecnie Stambuł). Jego twórczość obejmuje takie utwory, jak „Dziady”, „Pan Tadeusz”, „Konrad Wallenrod” i „Sonety Krymskie”. Mickiewicz uwidocznił tematy wolności, miłości do ojczyzny, wiary, obowiązku i heroizmu. Jego poezja cechuje się symbolicznymi elementami i głębiałą więzią z naturą. Jako poetę narodowego, Mickiewicz znacząco wpłynął na polską tożsamość kulturalną i literacką, będąc inspiracją dla wielu pokoleń Polaków.
Jeśli goły interfejs tekstowy jest dla nas zbyt prymitywny, możemy sięgnąć po darmową aplikację Chatbox wyposażoną w wiele udogodnień, jak np. historia czatów.
Jakiej wydajności możemy się spodziewać?
Wybór wariantu DeepSeek najlepiej dopasować do posiadanego sprzętu. Najpierw spójrzmy na ich rozmiary.
Model 1.5b zajmie ok. 1 GB pamięci, więc uruchomi się absolutnie wszędzie, nawet na nowszych Raspberry Pi. Niestety, rezultaty nie nadają się do niczego. Modele 7b i 8b zajmą poniżej 5 GB pamięci, 14b – ok. 9 GB pamięci, 32b – ok. 20 GB pamięci. Z nimi można się już sensownie pobawić – należy wybrać największy wariant, którego rozmiar nie przekracza ilości zainstalowanej pamięci RAM.
Jakiej wydajności możemy się spodziewać? Dowiemy się tego odpalając Ollamę z opcją --verbose
, wówczas po każdym prompcie zobaczymy statystyki. Mam 16-rdzeniowego Ryzena 5950X oraz 64 GB pamięci RAM. Model 32b generuje u mnie 2 tokeny na sekundę. Mniejszy model 14b działa na CPU z prędkością 4.5 tokena/s, jeszcze mniejszy 8b osiąga ponad 8 tokenów/s.
Nie wspominałem dotąd o wykorzystaniu pamięci VRAM na karcie graficznej i użyciu GPU do generowania odpowiedzi (tutaj wspierane modele). Ollama potrafi wykorzystać dostępną przestrzeń VRAM, ale to do użytkownika należy jej opróżnienie. Zazwyczaj będzie się to wiązało z zamknięciem gier i przeglądarek internetowych. Rozmiar wolnej pamięci RAM i VRAM sprawdzimy np. za pomocą Process Explorera (więcej o tym narzędziu w moim Mini-Kursie Process Explorera).
Moja karta graficzna to RTX 3060 z zaledwie 6 GB RAM. Cóż, gdy ją kupowałem, nie słyszało się jeszcze o LLM-ach odpalanych lokalnie. W całości zmieszczę w niej jedynie model w wariancie 8b. Potwierdzenie załadowania modelu do GPU uzyskam wydając w drugim oknie komendę ollama ps
i weryfikując obecność napisu 100% GPU
. W takiej konfiguracji proces inferencji zdecydowanie przyspiesza – zamiast poprzednich ośmiu, uzyskujemy 76 tokenów na sekundę.
Co ciekawe, Ollama potrafi wykorzystać jednocześnie pamięć RAM i VRAM do obsługi jednego modelu, komenda ollama ps
pokaże wówczas np. 28%/72% CPU/GPU
. W takiej konfiguracji model 14b niemal podwoił wydajność, osiągając przeszło 8 tokenów/s.
A może Bielik?
Polski Duży Model Językowy o nazwie Bielik (bielik.ai) to temat na osobny artykuł, tutaj zostawmy tylko komendę uruchamiającą ten model lokalnie (11 GB):
ollama run SpeakLeash/bielik-11b-v2.2-instruct:Q8_0
albo mniejsza wersja kwantyzowana (6.7 GB)
ollama run SpeakLeash/bielik-11b-v2.2-instruct:Q4_K_M
Próbka twórczości:
Adam Mickiewicz to jedna z najważniejszych postaci w historii polskiej literatury i kultury. Urodził się 24 grudnia 1798 roku w Zaosiu koło Nowogródka, a zmarł 26 listopada 1855 roku w Konstantynopolu (obecnie Stambuł). Był poetą, prozaikiem, dramatopisarzem i działaczem politycznym, uznawanym za jednego z „trzech wieszczów” polskiego romantyzmu.
Oto kilka kluczowych informacji o jego życiu i twórczości:
1. Młodość i edukacja:
– Mickiewicz urodził się w rodzinie szlacheckiej na Litwie, wówczas części Imperium Rosyjskiego.
– Studiował na Uniwersytecie Wileńskim, gdzie zetknął się z ideami romantyzmu i działalnością filomatów i filaretów.
2. Twórczość:
– Jego najważniejsze dzieła to „Pan Tadeusz” (epopeja narodowa), „Dziady” (dramaty romantyczne), „Sonety krymskie”, „Konrad Wallenrod”.
– Mickiewicz jest również autorem wielu wierszy lirycznych, takich jak „Romantyczność” czy „Do Matki Polki”.
3. Działalność polityczna i społeczna:
– Zaangażowany w działalność patriotyczną i niepodległościową, współzałożyciel Towarzystwa Filomatów.
– Po wybuchu powstania listopadowego wyjechał do Drezna, gdzie napisał „Dziady” część III.
– W późniejszym okresie życia zajmował się publicystyką polityczną i działalnością w ruchach emigracyjnych.
4. Przebieg kariery:
– Po ukończeniu studiów pracował jako nauczyciel, m.in. w Kownie i Petersburgu.
– Od 1829 roku przebywał na emigracji, początkowo we Włoszech, później we Francji.
– W latach 40. XIX wieku wykładał literaturę słowiańską w Collège de France w Paryżu.
5. Dziedzictwo:
– Mickiewicz jest uważany za jednego z największych poetów polskich i twórcę języka literackiego epoki romantyzmu.
– Jego twórczość miała ogromny wpływ na kształtowanie się tożsamości narodowej Polaków w okresie zaborów i po odzyskaniu niepodległości.
6. Ważne osiągnięcia:
– „Pan Tadeusz” – epopeja narodowa, która stała się symbolem polskości i patriotyzmu.
– „Dziady” – dramaty romantyczne, poruszające tematykę walki o wolność i tożsamość narodową.
– „Sonety krymskie” – cykl liryczny, łączący piękno przyrody Krymu z głębokimi refleksjami filozoficznymi i patriotycznymi.
Adam Mickiewicz pozostawił po sobie bogatą spuściznę literacką, która do dziś jest przedmiotem badań i analizy wielu pokoleń czytelników i badaczy literatury. Jego twórczość nie tylko odzwierciedla ducha epoki romantyzmu, ale także stanowi ważny element polskiej tożsamości narodowej i kulturowej.
Czy odpalanie modeli LLM lokalnie ma sens?
Oczywiście! Po pierwsze – mamy szansę nauczyć się naprawdę dużo bez ponoszenia dodatkowych kosztów. Po drugie – wyrobimy sobie lepszą intuicję dotyczącą tego, co potrafią LLM-y i jak ich „mądrość” skaluje się w zależności od rozmiaru modelu. Po trzecie – lokalne modele będą w przyszłości o wiele lepsze, niż dziś.
Ta ostatnia myśl to oczywiście spekulacja, ale nie pozbawiona podstaw. Wielkie firmy fundujące prace liderów branży AI (Microsoft/OpenAI, Amazon/Anthropic) oraz samodzielnie tworzące własne modele (Amazon, Google) wiedzą już, że LLM-y nie są na razie wynalazkiem tak rewolucyjnym, jak smartfony, internet, e-commerce czy usługi chmurowe. Co z tego, że sprzedaż usług AI można liczyć w miliardach USD, skoro coroczne nakłady na GPU, serwerownie i badania wynoszą dziesiątki miliardów USD.
Sądzę, że po epoce skalowania infrastruktury nastąpi epoka optymalizacji – a wtedy za pomocą modeli uruchamianych lokalnie osiągniemy to, co teraz wymaga opłacania abonamentu u zewnętrznego dostawcy. Nie zaszkodzi więc zgłębić temat lokalnych LLM-ów, zanim stanie się on modny.
Za korektę merytoryczną tekstu bardzo dziękuję Mateuszowi Chrobokowi, twórcy platformy uczmnie.pl i współtwórcy aidevs.pl.
O autorze: zawodowy programista od 2003 roku, pasjonat bezpieczeństwa informatycznego. Rozwijał systemy finansowe dla NBP, tworzył i weryfikował zabezpieczenia bankowych aplikacji mobilnych, brał udział w pracach nad grą Angry Birds i wyszukiwarką internetową Microsoft Bing.