top of page

Duży model na małym komputerze (cz. 2)

  • Zdjęcie autora: Tomasz Dyrda
    Tomasz Dyrda
  • 26 cze
  • 5 minut(y) czytania

TL;DR

  • Druga część cyklu o „suwerenności AI": jak uruchomić duży model językowy (LLM) lokalnie, na własnym komputerze.

  • Lokalny LLM daje niezależność od dostawcy (brak ryzyka odcięcia), brak kosztów tokenów i pełną kontrolę nad danymi, które zostają na Twoim sprzęcie.

  • Kompromis: działa wolniej niż modele „chmurowe", a bez większych inwestycji w sprzęt jesteśmy ograniczeni do mniejszych modeli.

  • W praktyce stosujemy podejście hybrydowe: zadania wrażliwe i poufne wykonujemy lokalnie, a z modeli „chmurowych" korzystamy na danych zanonimizowanych.

  • Nie trzeba drogiego sprzętu — polski model Bielik działa na MacBooku Air z 16 GB RAM; do uruchomienia służy Ollama, darmowe narzędzie open source.

  • Krok po kroku: instalujemy Ollamę => wybieramy i pobieramy model => uruchamiamy go. Praktyczne zastosowania pokażemy w częściach 3 i 4.


Choć większość użytkowników korzysta z modeli językowych w „chmurze”, to jak najbardziej można mieć swojego lokalnego LLMa pod ręką.

Dlaczego warto rozważyć korzystanie z lokalnego LLM? Korzyści jest kilka:

  • nie jesteśmy uzależnieni od czyjegoś kaprysu i możliwości odcięcia nas od infrastruktury z dnia na dzień (i to nie metaforycznie);

  • nie ponosimy kosztów tokenów, które w przypadku korzystania z modeli przez API są rozliczane wg zużycia (płacimy za każde X tokenów)

  • mamy pełną kontrolę nad tym co dzieje się z danymi, które zostają w całości na naszym sprzęcie i naszych nośnikach

Oczywiście lokalny model to nie same pozytywy:

  • czas przetwarzania jest zwykle wielokrotnie dłuższy niż z wykorzystaniem modeli „chmurowych”

  • jeśli nie decydujemy się na duże (a przy obecnych cenach pamięci i GPU to nawet bardzo duże) inwestycje, to jesteśmy „skazani” na mniejsze, specjalistyczne modele

  • może ominąć nas sesja iRacing bo nasze GPU jest właśnie bardzo zajęte przez LLamę(4)

Rozwiązaniem które stosujemy w praktyce w Deka Forensics jest podejście hybrydowe – wrażliwe lub poufne, wyspecjalizowane zadania związane z przetwarzaniem dokumentów lub danych wykonujemy lokalnie, z potęgi modeli „chmurowych” korzystamy na zanonimizowanych danych.

Praktyczne przykłady przedstawimy w 3 i 4 części naszego cyklu. Teraz skupimy się na pierwszym kroku – zainstalowaniu i uruchomieniu lokalnie LLM.

Ollama naszym przyjacielem (przyjaciółką?)

Rozszerzając zakres „suwerenności AI”, nie jesteśmy ograniczeni do zagranicznych rozwiązań, tylko możemy wykorzystać naszego polskiego LLMa – Bielika (aczkolwiek zbudowanego początkowo w oparciu o model Mistral od francuskiej firmy Mistral.ai).

Cytując za https://bielik.ai/ Bielik to społecznościowy projekt non-profit tworzenia polskich modeli językowych (LLM). Modele rozumieją język, kulturę i kontekst polski, działają lokalnie i są rozwijane przez Fundację SpeakLeash, Partnerów oraz Społeczność.”

Do uruchomienia Bielika wystarczy przyzwoity laptop z 16 GB RAM i w miarę wydajnym procesorem. Wszystkie przykłady zaprezentowane w niniejszym poście i filmy powstały z wykorzystaniem MacBook Air z 16 GB RAM i procesorem Apple M3. Podkreślam te stosunkowo niewygórowane wymagania techniczne, ponieważ dzięki temu możemy używać LLM do poważnych zadań bez konieczności dużych inwestycji sprzętowych.

Zanim skorzystamy z Bielika, zainstalujemy Ollamę – narzędzie „open source” które umożliwia uruchamianie i korzystanie (komunikację) z LLM na lokalnym sprzęcie.

Ollamę możemy ściągnąć bezpośrednio ze strony https://ollama.com/ - wystarczy kliknąć na DOWNLOAD:

Okno startowe Ollama
Okno startowe Ollama

Po zainstalowaniu i uruchomieniu Ollamy w macOS zobaczymy na górnej belce ikonkę Ollamy – dzięki temu będziemy wiedzieć że aplikacja działa.

Ollama w belce macOS
Ollama w belce macOS

Ollama umożliwia dodatkową konfigurację modelu, w tym m.in. wielkość okna kontekstowego. Na potrzeby pierwszego uruchomienia, pozostawimy standardowe ustawienia.

Ustawienia Ollamy
Ustawienia Ollamy

Żeby dodatkowo sprawdzić czy Ollama działa, warto otworzyć okno terminalu i wpisać w linii poleceń „ollama” i nacisnąć ENTER. Powinniśmy zobaczyć podobną informację jak na poniższym ekranie:

Komunikaty Ollamy w oknie terminala po wpisaniu polecenia "ollama"
Komunikaty Ollamy w oknie terminala po wpisaniu polecenia "ollama"

W kolejnym kroku musimy zdecydować się na wybór modelu (lub modeli – może być ich więcej niż jeden), które chcemy zainstalować lokalnie. Na potrzeby naszego postu zdecydujemy się na Bielika:

Lista modeli Bielika dostępna w Ollamie
Lista modeli Bielika dostępna w Ollamie

Po kliknięciu na wybrany model (w tym przypadku SpeakLeash/bielik-11b-v3.0-instruct), przejdziemy do karty modelu ze szczegółowymi informacjami, skryptami i parametrami do konfiguracji jak też możliwości wyboru wersji modelu (wielkość modelu w GB, liczba parametrów, okno kontekstowe – ważne z perspektywy tego, ile treści można przetworzyć za jednym razem):

Karta wybranego modelu Bielik
Karta wybranego modelu Bielik

Gdy już podejmiemy decyzję który model chcemy zainstalować, to musimy ściągnąć go na nasz komputer. Służy do tego polecenie „ollama pull”. Ponieważ model może mieć wielkość od kilku do kilkudziesięciu GB, ściąganie plików na lokalny dysk zajmie (dłuższą) chwilę.

Dla tego konkretnego modelu polecenie powinno wyglądać następująco:

Instalacja modelu Bielik w Ollamie
Instalacja modelu Bielik w Ollamie

Po ściągnięciu Ollama zweryfikuje sumy kontrolne (hash). Jeżeli proces zakończył się sukcesem, możemy sprawdzić czy Ollama „widzi” model z którego chcemy skorzystać. Służy do tego polecenie „ollama list”. Po wykonaniu tego polecenia powinniśmy zobaczyć listę dostępnych modeli:

Wylistowanie modeli dostępnych w Ollamie na lokalnym komputerze
Wylistowanie modeli dostępnych w Ollamie na lokalnym komputerze

Widzimy że nasz model SpeakLeash/bielik-11b-v3.0-instruct jest na liście.

To jest ten moment, w którym możemy przywitać się z naszym modelem:

Przywitanie z Bielikiem
Przywitanie z Bielikiem

Zgodnie ze starym polskim powiedzeniem – „alive and kicking”! Uwaga – przy pierwszym uruchomieniu Ollama ładuje model do pamięci operacyjnej (RAM). Stąd też na pierwszą odpowiedź modelu będziemy musieli chwilę poczekać. Kolejne będą już dużo szybsze.

***

Po wykonaniu powyższych kroków mamy dostępny, działający lokalnie model językowy. Możemy z nim pracować z poziomu terminala lub zacząć wykorzystywać do regularnej pracy. Jak to zrobić i do czego można go wykorzystać – tym zagadnieniom poświęcimy 3 i 4 część naszego cyklu.

Będziemy informować o kolejnych postach. Miłej lektury!

Słowniczek pojęć wykorzystanych w tekście (uzupełnienie do części 1)

Anonimizacja — usuwanie lub maskowanie danych identyfikujących przed przekazaniem treści do modelu (np. „chmurowego"), tak by przetwarzane dane nie pozwalały zidentyfikować osób ani poufnych szczegółów.

Bielik — polski, otwarty model językowy rozwijany przez Fundację SpeakLeash (we współpracy m.in. z ACK Cyfronet AGH), zoptymalizowany pod język i kontekst polski; początkowo oparty na architekturze Mistrala.

GPU (procesor graficzny) — układ wyspecjalizowany w obliczeniach równoległych, mocno przyspieszający działanie modeli; jego pamięć (lub pamięć współdzielona w układach Apple) ogranicza wielkość modelu, który da się uruchomić.

Kwantyzacja — zmniejszenie precyzji zapisu wag modelu (np. z 16 do 4 bitów), które wielokrotnie redukuje zapotrzebowanie na pamięć i rozmiar pliku, kosztem pewnego spadku jakości odpowiedzi. To dzięki niej model 11B mieści się w 16 GB RAM.

Liczba parametrów (np. 11B) — miara wielkości modelu (tu: 11 miliardów); większe modele są zwykle bardziej zdolne, ale wymagają więcej pamięci i mocy obliczeniowej.

Lokalny LLM — model językowy uruchamiany na własnym sprzęcie, bez wysyłania danych do dostawcy „chmurowego".

Model „chmurowy" — model udostępniany zdalnie przez dostawcę (przez przeglądarkę lub API); wygodny i wydajny, ale uzależniający od dostawcy i wymagający przesłania danych poza własną infrastrukturę.

Okno kontekstowe (context window) — maksymalna ilość tekstu (liczona w tokenach), którą model uwzględnia jednocześnie; określa, ile treści przetworzy „za jednym razem".

Ollama — otwarte (open source) narzędzie do pobierania, uruchamiania i komunikacji z modelami językowymi lokalnie; modelami zarządza się poleceniami, m.in. ollama pull (pobranie) i ollama list (lista zainstalowanych).

Open source — oprogramowanie z publicznie dostępnym kodem źródłowym, które można swobodnie używać, analizować i modyfikować na warunkach licencji.

Pamięć operacyjna (RAM) — szybka pamięć robocza komputera, do której ładowany jest model przy uruchomieniu; jej ilość (np. 16 GB) wyznacza, jak duży model da się uruchomić.

Podejście hybrydowe — łączenie modeli lokalnych i „chmurowych": zadania wrażliwe lub poufne wykonuje się lokalnie, a z mocy modeli „chmurowych" korzysta na danych zanonimizowanych.

Suma kontrolna (hash) — krótki „odcisk" pliku, służący weryfikacji, że pobrane dane są kompletne i niezmienione (Ollama sprawdza go po pobraniu modelu).

Terminal (wiersz poleceń) — tekstowy interfejs do wydawania komputerowi poleceń wpisywanych z klawiatury (tu: do obsługi Ollamy).

 

Uwaga 1: ilustracje (ale nie zrzuty ekranu) zostały wygenerowane w ChatGPT na podstawie tekstu

Uwaga 2: słowniczek pojęć został przygotowany z Claude na podstawie tekstu

Uwaga 3: model Bielika do którego odnoszę się w tekście to skwantyzowana wersja modelu. Oznacza to tyle, że w celu zmniejszenia rozmiaru modelu i umożliwienia wczytania go do pamięci RAM na przeciętnym sprzęcie zmniejszono długość (precyzję) wag modelu. W praktyce sprowadza się to do zaokrąglenia wag do mniejszej liczby miejsc po przecinku. Negatywną konsekwencją zaokrąglenia wag jest pewne „ogłupienie” modelu, pogorszenie jakości odpowiedzi i większa możliwość halucynacji (czym są halucynacje opisaliśmy w pierwszej części naszego cyklu).

Uwaga 4: symulatory jazdy wymagają potężnych kart graficznych z procesorami GPU i dużą ilością pamięci VRAM. Ten sam procesor i ta sama pamięć która obsluguje generowanie grafiki w symulatorze, doskonale obsługuje też duże modele językowe. Przyspieszenie pracy LLM przy wykorzystaniu potężnych kart kraficznych wynosi od kilkunastu do kilkudziesięciu razy w stosunku do modelu który korzysta z CPU i RAM.

Komentarze


bottom of page