Przejdź do głównej zawartości

Llama.cpp

Llama.cpp to wydajne rozwiązanie, służące do przeprowadzania wnioskowania za pomocą dużych modeli językowych. W tym artykule pokażemy jak uruchomić serwer API kompatybilny z OpenAI.

Wybór i ładowanie modelu

Pierwszym krokiem jest wybór modelu językowego, ale kryteria wyboru nie należą do zakresu tego artykułu. Dlatego użyjemy przykładowego modelu Meta-Llama-3.1-8B-Instruct-Q8_0.

Zwróć uwagę na rozmiar wybranego modelu. W tym przypadku powinien wystarczyć wolumen rozmiaru 10 GiB. Utwórzmy go.

cgc volume create -s 10 llms

Załadujmy teraz wybrany model na nowy wolumen. Szybkim sposobem na to jest pobranie go bezpośrednio na wolumen. Do tego można użyć instancji File Browser i dostępu SSH.

# Utwórz jeśli nie istnieje
cgc compute filebrowser create

# Zamontuj wolumen
cgc volume mount -t filebrowser llms

Upewnij się, że poprawnie skonfigurowano dostęp SSH i połącz się do filebrowser.

ssh -t cgc@cgc-api.comtegra.cloud -p 2222 filebrowser

Przejdź do katalogu, gdzie zamontowany jest nowy wolumen i pobierz model.

cd /srv/llms
wget 'https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/resolve/main/Meta-Llama-3.1-8B-Instruct-Q8_0.gguf'

Uruchom serwer

Uruchom serwer API.

cgc compute create -c 4 -m 8 -gt A5000 -g 1 -v llms -n llm-server llama-cpp -d model=Meta-Llama-3.1-8B-Instruct-Q8_0.gguf -d n_gpu_layers=999 -d parallel=10 -d ctx_size=81920
  • g, -gt - liczba i typ GPU. Upewnij się, że vRAM jest wystarczająca dla modelu.
  • -v - wolumen z modelami
  • -n - nazwa instancji, która będzie używana w adresach URL
  • -c - rdzenie CPU, w większości przypadków wystarczy nie więcej niż 4
  • -m - pamięć, w większości przypadków wystarczy nie więcej niż 8 GiB
  • -d - flaga do definiowania zmiennych środowiskowych

Zmienne środowiskowe

  • model - ścieżka do pliku modelu
  • n_gpu_layers - liczba warstw do umieszczenia w VRAM. 999 oznacza wszystkie warstwy (-1 nie działa).
  • parallel - liczba slotów do przetwarzania zapytań.
  • ctx_size - całkowity rozmiar kontekstu dla wszystkich slotów. Powinien być wielokrotnością 128.

Domyślnie parametr parallel jest ustawiony na 1. Oznacza to, że w danej chwili może być obsługiwane tylko jedno zapytanie. Jeśli pojawi się kolejne, to połączenie zostanie nawiązane, ale zapyranie nie zostanie obsłużone dopóki to pierwsze nie zostanie zakończone. Większe wartości parallel umożliwiają współbiezne przetwarzanie zapytań, ale dzielą dostępny kontekst na równe części. Np. przy kontekście 32k i 4 slotach, dla każdego zapytania dostępny jest maksymalny kontekst równy 8k. Całkowity kontekst musi zmieścić się w pamięci GPU. Poniżej zamieszczamy tabelę z przykładowymi konfiguracjami.

GPUModelMaks. kontekst
A100 (80 GB)Meta-Llama-3.1-70B-Instruct-Q5_K_M71680 (70k)
A100 (80 GB)Meta-Llama-3.1-8B-Instruct-Q8_0363520 (355k)
A5000 (24 GB)Meta-Llama-3.1-8B-Instruct-Q8_079872 (78k)
A5000 (24 GB)Bielik-2.2-11B-Instruct-Q8_039936 (39k)

API

API jest dostępne pod adresem https://llm-server.NAMESPACE.cgc-waw-01.comtegra.cloud/. Jest tam też dostępny przeglądarkowy interfejs użytkownika. Klucz API można odczytać poleceniem cgc compute list -d.