Wprowadzenie do pplx-api

Szybkie i wydajne API Perplexity do modeli open-source LLM

Introducing pplx-api by Perplexity Labs

Uwaga: Poniższe elementy zostały wycofane w bieżących modelach. Dowiedz się więcej o naszych API

Z przyjemnością ogłaszamy uruchomienie pplx-api, zaprojektowanego jako jeden z najszybszych sposobów dostępu do modeli Mistral 7B, Llama2 13B, Code Llama 34B, Llama2 70B oraz replit-code-v1.5-3b. pplx-api ułatwia programistom integrację nowoczesnych modeli LLM typu open-source z ich projektami.

Nasze pplx-api zapewnia:

Łatwość użycia: programiści mogą korzystać z gotowych, najnowocześniejszych modeli open-source i rozpocząć pracę w ciągu kilku minut dzięki znanej technologii REST API.

Błyskawiczne wnioskowanie: nasz starannie zaprojektowany system wnioskowania jest wydajny i osiąga opóźnienia do 2.9x niższe niż Replicate oraz 3.1x niższe niż Anyscale.

Sprawdzona infrastruktura: niezawodność pplx-api została potwierdzona poprzez obsługę ruchu produkcyjnego w naszym silniku odpowiedzi Perplexity oraz w piaskownicy Labs.

Kompleksowe rozwiązanie dla modeli LLM open-source: nasze zespoły nieustannie pracują nad dodawaniem nowych modeli open-source, gdy tylko się pojawiają. Przykładowo, modele Llama i Mistral dodaliśmy w ciągu zaledwie kilku godzin od ich premiery bez dostępu przedpremierowego.

pplx-api znajduje się w publicznej wersji beta i jest bezpłatne dla użytkowników z subskrypcją Perplexity Pro.

Wykorzystaj pplx-api do okazjonalnego weekendowego hackathonu lub jako komercyjne rozwiązanie do tworzenia nowych i innowacyjnych produktów. Mamy nadzieję, że dzięki tej premierze dowiemy się, w jaki sposób użytkownicy tworzą ciekawe i innowacyjne produkty za pomocą naszego API. Jeśli masz biznesowe zastosowanie dla pplx-api, skontaktuj się z nami pod adresem api@perplexity.ai. Chętnie poznamy Twoją opinię!

Korzyści z pplx-api

Łatwość użycia

Wdrożenie i wnioskowanie modeli LLM wymagają znacznych nakładów na infrastrukturę, aby obsługa modelu była wydajna i ekonomiczna. Programiści mogą korzystać z naszego API od razu po zainstalowaniu, bez głębokiej wiedzy na temat C++/CUDA czy dostępu do procesorów graficznych (GPU), jednocześnie ciesząc się najwyższą wydajnością. Nasze wnioskowanie LLM eliminuje również złożoność i konieczność zarządzania własnym sprzętem, co dodatkowo zwiększa łatwość użytkowania.

Błyskawiczne wnioskowanie

API LLM firmy Perplexity zostało starannie zaprojektowane i zoptymalizowane pod kątem szybkiego wnioskowania. W tym celu zbudowaliśmy autorską infrastrukturę wnioskowania LLM opartą na technologii NVIDIA TensorRT-LLM, działającą na procesorach graficznych A100 dostarczanych przez AWS. Dowiedz się więcej w sekcji Przegląd infrastruktury pplx-api. W rezultacie pplx-api jest jednym z najszybszych komercyjnie dostępnych interfejsów API dla modeli Llama i Mistral.

Aby porównać wydajność z istniejącymi rozwiązaniami, zestawiliśmy opóźnienia pplx-api z innymi bibliotekami wnioskowania LLM. W naszych eksperymentach pplx-api osiąga do 2.92x mniejsze opóźnienie całkowite w porównaniu do Text Generation Inference (TGI) oraz do 4.35x krótszy czas odpowiedzi początkowej. W tym eksperymencie porównaliśmy TGI i system wnioskowania Perplexity dla scenariuszy pojedynczego strumienia i serwera na dwóch procesorach graficznych A100, używając modelu Llama-2-13B-chat rozproszonego na oba procesory. W scenariuszu pojedynczego strumienia serwer przetwarza jedno żądanie po drugim. W scenariuszu serwerowym klient wysyła żądania zgodnie z rozkładem Poissona z różnymi częstotliwościami, aby symulować zmienne obciążenie. Dla częstotliwości żądań wykonaliśmy niewielki test do maksymalnie 1 żądania na sekundę, co stanowi maksymalną przepustowość obsługiwaną przez TGI. Użyliśmy danych rzeczywistych o zróżnicowanej długości tokenów wejściowych i wyjściowych, aby zasymulować zachowanie w warunkach produkcyjnych. Żądania miały średnio ~700 tokenów wejściowych i ~550 wyjściowych.

Używając tych samych danych wejściowych i wysyłając pojedynczy strumień żądań, zmierzyliśmy również średnie opóźnienia interfejsów API Replicate i Anyscale dla tego samego modelu, aby zebrać bazę porównawczą wydajności w stosunku do innych istniejących interfejsów API.

Perplexity Labs - Opóźnienie pierwszego tokena
Perplexity Labs - Szybkość dekodowania

Korzystając z tej samej konfiguracji eksperymentalnej, porównaliśmy maksymalną przepustowość pplx-api z TGI, traktując szybkość dekodowania jako ograniczenie opóźnienia. W naszych eksperymentach pplx-api przetwarza tokeny od 1.90x do 6.75x szybciej niż TGI, podczas gdy TGI nie spełnia naszych surowszych wymagań dotyczących opóźnień przy 60 i 80 tokenach na sekundę. Oceniamy TGI w tych samych warunkach sprzętowych i obciążeniowych, których użyliśmy do oceny pplx-api. Porównanie tego wskaźnika z Replicate i Anyscale nie jest możliwe, ponieważ nie mamy kontroli nad ich sprzętem i czynnikami obciążenia.

Dla porównania, średnia prędkość czytania przez człowieka wynosi 5 tokenów na sekundę, co oznacza, że pplx-api jest w stanie serwować dane szybciej, niż człowiek jest w stanie je przeczytać.

Perplexity Labs - Przepustowość tokenów na procesor graficzny

Przegląd infrastruktury pplx-api

Osiągnięcie takich wyników opóźnień wymaga połączenia najnowocześniejszego oprogramowania i sprzętu.

Instancje AWS p4d oparte na procesorach graficznych NVIDIA A100 stanowią najbardziej opłacalną i niezawodną opcję skalowania zasobów graficznych przy wiodących prędkościach zegara.

Aby oprogramowanie mogło w pełni wykorzystać ten sprzęt, korzystamy z NVIDIA TensorRT-LLM, biblioteki open-source, która przyspiesza i optymalizuje wnioskowanie LLM. TensorRT-LLM wykorzystuje kompilator głębokiego uczenia TensorRT i zawiera najnowsze zoptymalizowane jądra stworzone dla zaawansowanych implementacji FlashAttention oraz maskowanej uwagi wielogłowicowej (MHA) dla faz kontekstu i generowania w trakcie wykonywania modelu LLM.

Fundament w postaci AWS i jego solidna integracja z Kubernetes pozwalają nam na elastyczne skalowanie powyżej setek procesorów graficznych przy jednoczesnej minimalizacji przestojów i narzutu sieciowego.

Przypadek użycia: Nasze API w produkcji

pplx-api w Perplexity: Redukcja kosztów i niezawodność

Nasze API już wspiera jedną z kluczowych funkcji produktu Perplexity. Przełączenie pojedynczej funkcji z zewnętrznego API na pplx-api zaowocowało oszczędnościami rzędu 0,62 mln USD rocznie, co stanowi około 4-krotną redukcję kosztów. Przeprowadziliśmy testy A/B i monitorowaliśmy wskaźniki infrastrukturalne, aby zapewnić brak spadku jakości. W ciągu 2 tygodni nie zaobserwowaliśmy statystycznie istotnych różnic w testach A/B. Dodatkowo pplx-api jest w stanie wytrzymać dzienne obciążenie przekraczające milion żądań, co łącznie daje niemal miliard przetwarzanych tokenów dziennie.

Wyniki tego wstępnego badania są bardzo obiecujące i przewidujemy, że z czasem pplx-api będzie wspierać więcej naszych funkcji produktowych.

pplx-api w Perplexity Labs: Ekosystem wnioskowania open-source

Używamy również pplx-api do obsługi Perplexity Labs, naszego środowiska testowego modeli, udostępniającego różne modele open-source.

Średnia dzienna liczba obsłużonych tokenów

Nasz zespół angażuje się w zapewnianie dostępu do najnowszych modeli LLM typu open-source. Zintegrowaliśmy Mistral 7B, Code Llama 34b oraz wszystkie modele Llama 2 w ciągu kilku godzin od ich premiery i planujemy robić to samo, gdy tylko pojawią się bardziej wydajne modele open-source.

Rozpocznij korzystanie z API AI firmy Perplexity

Dostęp do REST API pplx-api można uzyskać za pomocą żądań HTTPS. Uwierzytelnianie w pplx-api obejmuje następujące kroki:

Wygeneruj klucz API za pośrednictwem strony ustawień konta Perplexity. Klucz API jest długoterminowym tokenem dostępowym, którego można używać do momentu ręcznego odświeżenia lub usunięcia.

Wysyłaj klucz API jako token bearer w nagłówku Authorization przy każdym żądaniu pplx-api.

W poniższym przykładzie PERPLEXITY_API_KEY to zmienna środowiskowa powiązana z kluczem wygenerowanym zgodnie z powyższymi instrukcjami. Do przesłania żądania ukończenia czatu użyto narzędzia CURL.

bash
curl -X POST \ --url https://perplexity.coolkeypoint.com/__p/api.perplexity.ai/chat/completions \ --header 'accept: application/json' \ --header 'content-type: application/json' \ --header "Authorization: Bearer ${PERPLEXITY_API_KEY}" \ --data '{ "model": "mistral-7b-instruct", "stream": false, "max_tokens": 1024, "frequency_penalty": 1, "temperature": 0.0, "messages": [ { "role": "system", "content": "Be precise and concise in your responses." }, { "role": "user", "content": "How many stars are there in our galaxy?" } ] }'

Co daje następującą odpowiedź z nagłówkiem content-type: application/json

json
{ "id": "3fbf9a47-ac23-446d-8c6b-d911e190a898", "model": "mistral-7b-instruct", "object": "chat.completion", "created": 1765322, "choices": [ { "index": 0, "finish_reason": "stop", "message": { "role": "assistant", "content": " The Milky Way galaxy contains an estimated 200-400 billion stars.." }, "delta": { "role": "assistant", "content": " The Milky Way galaxy contains an estimated 200-400 billion stars.." } } ], "usage": { "prompt_tokens": 40, "completion_tokens": 22, "total_tokens": 62 } }

Oto przykład wywołania w języku Python:

python
from openai import OpenAI YOUR_API_KEY = "INSERT API KEY HERE" messages = [ { "role": "system", "content": ( "You are an artificial intelligence assistant and you need to " "engage in a helpful, detailed, polite conversation with a user." ), }, { "role": "user", "content": ( "Count to 100, with a comma between each number and no newlines. " "E.g., 1, 2, 3, ..." ), }, ] client = OpenAI(api_key=YOUR_API_KEY, base_url="https://perplexity.coolkeypoint.com/__p/api.perplexity.ai") # demo chat completion without streaming response = client.chat.completions.create( model="mistral-7b-instruct", messages=messages, ) print(response) # demo chat completion with streaming response_stream = client.chat.completions.create( model="mistral-7b-instruct", messages=messages, stream=True, ) for response in response_stream: print(response)

Obecnie obsługujemy Mistral 7B, Llama 13B, Code Llama 34B, Llama 70B, a nasze API jest wygodnie kompatybilne z klientem OpenAI, co ułatwia integrację z istniejącymi aplikacjami.

Więcej informacji można znaleźć w naszej dokumentacji API oraz w Przewodniku szybkiego startu.

Co dalej?

W najbliższej przyszłości pplx-api będzie wspierać:

Niestandardowe modele Perplexity LLM oraz inne modele open-source LLM.

Niestandardowe embeddingi Perplexity oraz embeddingi open-source.

Dedykowaną strukturę cenową API z dostępem ogólnym po zakończeniu publicznej fazy beta.

API Perplexity RAG-LLM z bazą faktów i cytowań.

Jeśli jesteś zainteresowany którymkolwiek z tych zastosowań, skontaktuj się z nami pod adresem api@perplexity.ai.

Jest to również początek naszej serii wpisów na blogu Perplexity. W kolejnym poście dogłębnie przeanalizujemy porównanie wydajności A100 vs H100 dla wnioskowania LLM. Bądźcie czujni!

Rekrutujemy! Jeśli chcesz pracować nad produktem wdrożonym na ogromną skalę i wspólnie z nami tworzyć starannie zaprojektowaną, zoptymalizowaną infrastrukturę dla generatywnych modeli językowych, dołącz do nas.

Obserwuj nas na Twitterze, LinkedIn i dołącz do naszego Discorda, aby dyskutować dalej.

Autorzy:

Lauren Yang, Kevin Hu, Aarash Heydari, William Zhang, Dmitry Pervukhin, Grigorii Alekseev, Alexandr Yarats

Prywatność danych

Wybierając pplx-api, wykorzystujesz pełen potencjał modeli LLM, jednocześnie chroniąc prywatność i zaufanie swoich użytkowników oraz klientów. Rozumiemy wagę ochrony danych osobowych i jesteśmy oddani zapewnieniu bezpieczeństwa oraz prywatności naszych użytkowników. Dane API są automatycznie usuwane po 30 dniach i nigdy nie używamy danych przesyłanych przez pplx-api do trenowania naszych modeli. Użytkownicy mają możliwość rezygnacji z przechowywania danych w ustawieniach konta. Naszą politykę prywatności API znajdziesz tutaj.