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 modelun_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.
GPU | Model | Maks. kontekst |
---|---|---|
A100 (80 GB) | Meta-Llama-3.1-70B-Instruct-Q5_K_M | 71680 (70k) |
A100 (80 GB) | Meta-Llama-3.1-8B-Instruct-Q8_0 | 363520 (355k) |
A5000 (24 GB) | Meta-Llama-3.1-8B-Instruct-Q8_0 | 79872 (78k) |
A5000 (24 GB) | Bielik-2.2-11B-Instruct-Q8_0 | 39936 (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
.