Wprowadzenie innowacyjnych technologii w rozwoju aplikacji serwerless staje się coraz bardziej popularne. Jednym z ciekawszych zastosowań w tej dziedzinie jest wykorzystanie lekkiego modelu języka sztucznej inteligencji Llama 3.2 w chmurze Amazon Web Services (AWS) Lambda. W tym artykule przyjrzymy się, jak krok po kroku wdrożyć ten model, korzystając z narzędzi takich jak Hugging Face i Nitric do zarządzania infrastrukturą, w tym trasami API oraz wdrożeniami.
Dlaczego Llama 3.2?
Llama 3.2 1B to wysoce zoptymalizowany model AI, który może działać efektywnie w środowiskach bez serwerów (serverless), takich jak AWS Lambda, bez konieczności korzystania z akceleracji GPU. Dzięki swojej lekkości, model ten jest idealnym kandydatem do zastosowań w chmurze, gdzie zasoby są często ograniczone, a wydajność ma kluczowe znaczenie.
Zanim przejdziemy do szczegółów technicznych, ważne jest zrozumienie, dlaczego wybór odpowiedniego modelu ma znaczenie. Llama 3.2 oferuje różne konfiguracje, które mają wpływ na wydajność i dokładność. W przypadku serwerless, szczególną uwagę należy zwrócić na modele lekkie, które mogą działać w ograniczonych środowiskach bez akceleratorów GPU.
Przed rozpoczęciem: Wymagania
Przed przystąpieniem do pracy, należy upewnić się, że mamy odpowiednie narzędzia i środowisko. Do tego projektu potrzebne będą:
– Konto AWS.
– Zainstalowane na komputerze narzędzia AWS CLI oraz Docker.
– Środowisko Python (wersja 3.11).
– Narzędzia Nitric oraz Hugging Face.
Tworzenie projektu
Zaczynamy od stworzenia nowego projektu, korzystając z szablonu startowego Nitric dla Pythona. Gdy nasz projekt zostanie utworzony, należy zainstalować podstawowe zależności oraz dodatkowe zależności potrzebne do załadowania modelu językowego.
Wybór modelu Llama
Llama 3.2 jest dostępna w różnych wersjach, a każda z nich ma swoje kompromisy pod względem wydajności, dokładności i zasobów. Dla aplikacji serwerless ważne jest, aby wybrać model, który jest wystarczająco lekki i efektywny, by działać w środowiskach takich jak AWS Lambda. W naszym przypadku użyjemy wersji skwantyzowanej modelu Llama 1B, a dokładniej Llama-3.2-1B-Instruct-Q4KM.gguf.
Skwantyzowanie to technika, która pozwala na zmniejszenie rozmiaru modelu oraz jego zapotrzebowania na zasoby, co czyni go odpowiednim do aplikacji serwerless. Należy jednak pamiętać, że skwantyzowanie może wpłynąć na dokładność modelu, dlatego warto testować różne wersje, aby znaleźć najlepsze rozwiązanie dla konkretnych potrzeb.
Tworzenie serwisu do uruchamiania modelu
Następnie, korzystając z Nitric, stworzymy API HTTP, które pozwoli na wysyłanie zapytań do modelu Llama i odbieranie odpowiedzi. W tym celu musimy utworzyć serwis, który zdefiniuje punkt końcowy API oraz obsłuży żądania z zapytaniami tekstowymi. Po przesłaniu zapytania, API odeśle odpowiedź generowaną przez model językowy.
Kod serwisu można umieścić w pliku PLACEHOLDERed2a2fa643dc6af1. Definiuje on punkt końcowy PLACEHOLDER7d22018b19500824, który akceptuje żądania POST z zapytaniem w ciele żądania. Funkcja process_prompt
przesyła zapytanie do modelu Llama i zwraca odpowiedź.
Testowanie lokalne
Po skonfigurowaniu API, możemy przetestować je lokalnie. Nitric udostępnia narzędzie do uruchamiania aplikacji w kontenerze Docker, który zawiera wszystkie niezbędne zależności do korzystania z modelu Llama. Możemy uruchomić naszą aplikację komendą:
bash
nitric run
Powyższa komenda uruchamia aplikację w kontenerze, co pozwala na testowanie jej lokalnie przed wdrożeniem na AWS. Możemy również skorzystać z Nitric Dashboard, który domyślnie dostępny jest pod adresem http://localhost:49152
.
Wdrażanie w AWS
Gdy nasze API działa lokalnie, możemy przejść do wdrożenia na AWS. Nitric pozwala na łatwe tworzenie stosów zasobów w chmurze. Tworzymy nowy stos dla AWS:
bash
nitric stack new dev aws
Po utworzeniu stosu, aktualizujemy plik nitric.dev.yaml
z odpowiednimi ustawieniami, takimi jak region AWS oraz alokacja pamięci, aby obsłużyć model. Nitric korzysta z domyślnego dostawcy infrastruktury Pulumi dla AWS, jednak można także wdrożyć projekt na inne platformy chmurowe, takie jak Terraform.
Aby wdrożyć aplikację na AWS, wystarczy uruchomić komendę:
bash
nitric up
Po zakończeniu wdrożenia otrzymamy adres URL punktu końcowego API, który możemy użyć do testów i dalszego rozwoju aplikacji.
Testowanie na AWS
Do testowania wdrożonej usługi możemy użyć dowolnego narzędzia do testowania API, takiego jak cURL lub Postman. Poniżej znajduje się przykład użycia cURL do wysłania zapytania do modelu:
bash
curl -X POST {Twój_adres_koncowy_API}/prompt -d "Cześć, jak się masz?"
W odpowiedzi otrzymamy wynik wraz z dodatkowymi metadanymi, a same dane generowane przez model znajdą się w tablicy choices
.
Podsumowanie
W tym artykule pokazaliśmy, jak skonfigurować i wdrożyć model Llama 3.2 na AWS Lambda przy użyciu narzędzi Nitric i Hugging Face. Projekt można w dalszym ciągu rozwijać, dodając bardziej złożone interakcje z modelem, takie jak utrzymywanie kontekstu pomiędzy zapytaniami. W przyszłości można także rozważyć integrację WebSocketów oraz strumieniowane odpowiedzi, co pozwoli na bardziej dynamiczne i interaktywne aplikacje AI.