Présentation de pplx-api

API rapide et efficace de Perplexity Labs pour les LLM open source

Introducing pplx-api by Perplexity Labs

Remarque : Les éléments ci-dessous ne sont plus pris en charge pour les modèles actuels. En savoir plus sur nos API

Nous sommes ravis d'annoncer pplx-api, conçue pour être l'un des moyens les plus rapides d'accéder aux modèles Mistral 7B, Llama2 13B, Code Llama 34B, Llama2 70B et replit-code-v1.5-3b. pplx-api permet aux développeurs d'intégrer facilement des modèles de langage open source de pointe dans leurs projets.

Notre pplx-api offre :

Facilité d'utilisation : les développeurs peuvent utiliser des modèles open source de pointe prêts à l'emploi et commencer en quelques minutes avec une API REST familière.

Inférence ultra-rapide : notre système d'inférence conçu avec soin est efficace et atteint une latence jusqu'à 2,9 fois inférieure à celle de Replicate et 3,1 fois inférieure à celle d'Anyscale.

Infrastructure éprouvée : pplx-api a fait ses preuves en matière de fiabilité, prenant en charge le trafic de niveau production dans notre moteur de recherche Perplexity et notre espace de jeux Labs.

Guichet unique pour les LLM open source : notre équipe se consacre à l'ajout de nouveaux modèles open source dès leur sortie. Par exemple, nous avons ajouté les modèles Llama et Mistral quelques heures après leur lancement sans accès préalable.

pplx-api est en version bêta publique et est gratuite pour les utilisateurs disposant d'un abonnement Perplexity Pro.

Utilisez pplx-api pour un hackathon décontracté de fin de semaine ou comme solution commerciale pour créer des produits nouveaux et innovants. Nous espérons découvrir comment les gens peuvent créer des produits cool et innovants avec notre API grâce à cette sortie. N'hésitez pas à communiquer avec api@perplexity.ai si vous avez un cas d'utilisation commerciale pour pplx-api. Nous avons hâte d'avoir de vos nouvelles !

Avantages de pplx-api

Facilité d'utilisation

Le déploiement et l'inférence des LLM nécessitent d'importants investissements en infrastructure pour rendre le service des modèles performant et rentable. Les développeurs peuvent utiliser notre API prête à l'emploi, sans connaissance approfondie de C++/CUDA ni accès à des processeurs graphiques (GPU), tout en bénéficiant de performances de pointe. L'inférence de nos LLM élimine également la complexité et la nécessité de gérer votre propre matériel, ce qui simplifie encore davantage votre utilisation.


Inférence ultra-rapide

L'API LLM de Perplexity est soigneusement conçue et optimisée pour une inférence rapide. Pour ce faire, nous avons construit une infrastructure d'inférence LLM propriétaire autour de TensorRT-LLM de NVIDIA, hébergée sur des GPU A100 fournis par AWS. Pour en savoir plus, consultez la section Aperçu de l'infrastructure de pplx-api. Par conséquent, pplx-api est l'une des API Llama et Mistral les plus rapides offertes sur le marché.

Pour établir une référence par rapport aux solutions existantes, nous avons comparé la latence de pplx-api avec d'autres bibliothèques d'inférence LLM. Dans nos expériences, pplx-api atteint une latence globale jusqu'à 2,92 fois plus rapide que Text Generation Inference (TGI), et une latence de réponse initiale jusqu'à 4,35 fois plus rapide. Pour cette expérience, nous avons comparé TGI et l'inférence de Perplexity pour des scénarios à flux unique et de serveur sur 2 GPU A100 à l'aide d'un modèle Llama-2-13B-chat réparti sur les deux GPU. Pour le scénario à flux unique, le serveur traite les requêtes les unes après les autres. Dans le scénario de serveur, le client envoie des requêtes selon une distribution de Poisson avec des taux de requête variables pour imiter une charge changeante. Pour le taux de requête, nous effectuons un petit balayage jusqu'à un maximum de 1 requête par seconde, le débit maximal pris en charge par TGI. Nous avons utilisé des données réelles avec diverses longueurs de jetons d'entrée et de sortie pour simuler le comportement en production. Les requêtes comptent en moyenne environ 700 jetons d'entrée et environ 550 jetons de sortie.

En utilisant les mêmes entrées et en envoyant un seul flux de requêtes, nous avons également mesuré les latences moyennes des API de Replicate et d'Anyscale pour ce même modèle afin d'établir une base de performance par rapport à d'autres API existantes.

Perplexity Labs - Latence du premier jeton
Perplexity Labs - Vitesse de décodage

En utilisant la même configuration expérimentale, nous avons comparé le débit maximal de pplx-api à celui de TGI, la vitesse de décodage servant de contrainte de latence. Dans nos expériences, pplx-api traite les jetons de 1,90 à 6,75 fois plus vite que TGI, et TGI ne parvient pas du tout à satisfaire nos contraintes de latence plus strictes à 60 et 80 jetons par seconde. Nous évaluons TGI dans les mêmes conditions matérielles et de charge que celles utilisées pour évaluer pplx-api. Il n'est pas possible de comparer cette mesure avec Replicate et Anyscale puisque nous ne pouvons pas contrôler leur matériel et leurs facteurs de charge.

Pour référence, la vitesse de lecture humaine moyenne est de 5 jetons par seconde, ce qui signifie que pplx-api est capable de diffuser du contenu à un rythme supérieur à notre capacité de lecture.

Perplexity Labs - Débit de jetons par GPU

Aperçu de l'infrastructure de pplx-api

L'atteinte de ces chiffres de latence nécessite une combinaison de logiciels et de matériel de pointe.

Les instances p4d d'AWS alimentées par des GPU A100 de NVIDIA constituent l'option la plus rentable et la plus fiable pour étendre les GPU avec des vitesses d'horloge de pointe.

Pour que les logiciels puissent tirer parti de ce matériel, nous exécutons TensorRT-LLM de NVIDIA, une bibliothèque open source qui accélère et optimise l'inférence des LLM. TensorRT-LLM intègre le compilateur d'apprentissage profond de TensorRT et comprend les derniers noyaux optimisés conçus pour des implémentations de pointe de FlashAttention et d'attention multi-tête masquée (MHA) pour les phases de contexte et de génération de l'exécution du modèle LLM.

À partir de là, la dorsale d'AWS et son intégration robuste avec Kubernetes nous permettent d'évoluer de manière élastique au-delà de centaines de GPU et de minimiser les temps d'arrêt et la surcharge réseau.

Cas d'utilisation : Notre API en production

pplx-api dans Perplexity : Réduction des coûts et fiabilité

Notre API alimente déjà l'une des fonctionnalités principales des produits de Perplexity. Le simple fait de faire passer une seule fonctionnalité d'une API externe à pplx-api a permis de réaliser des économies de 0,62 million de dollars par an, soit une réduction des coûts d'environ 4 fois. Nous avons effectué des tests A/B et surveillé les métriques de l'infrastructure pour nous assurer qu'il n'y avait aucune dégradation de la qualité. Sur une période de 2 semaines, nous n'avons observé aucune différence statistiquement significative dans le test A/B. De plus, pplx-api pouvait supporter une charge quotidienne de plus d'un million de requêtes, pour un total de près d'un milliard de jetons traités chaque jour.

Les résultats de cette première exploration sont très encourageants, et nous prévoyons que pplx-api alimentera un plus grand nombre de nos fonctionnalités au fil du temps.

pplx-api dans Perplexity Labs : Écosystème d'inférence open source

Nous utilisons également pplx-api pour propulser Perplexity Labs, notre espace de jeux de modèles proposant divers modèles open source.

Moyenne quotidienne de jetons servis

Notre équipe s'engage à offrir un accès aux derniers LLM open source de pointe. Nous avons intégré Mistral 7B, Code Llama 34b et tous les modèles Llama 2 en quelques heures après leur sortie, et nous prévoyons de faire de même à mesure que des LLM open source plus performants seront disponibles.

Commencer avec l'API d'IA de Perplexity

Vous pouvez accéder à l'API REST pplx-api à l'aide de requêtes HTTPS. L'authentification auprès de pplx-api comprend les étapes suivantes :

Générez une clé d'API via la page des paramètres du compte Perplexity. La clé d'API est un jeton d'accès à long terme qui peut être utilisé jusqu'à ce qu'il soit actualisé ou supprimé manuellement.

Envoyez la clé d'API en tant que jeton du porteur (bearer token) dans l'en-tête Authorization à chaque requête pplx-api.

Dans l'exemple suivant, PERPLEXITY_API_KEY est une variable d'environnement liée à une clé générée à l'aide des instructions ci-dessus. CURL est utilisé pour soumettre une requête de fin de clavardage.

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?" } ] }'

Ce qui donne la réponse suivante, avec 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 } }

Voici un exemple d'appel en 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)

Nous prenons actuellement en charge Mistral 7B, Llama 13B, Code Llama 34B et Llama 70B. L'API est également compatible avec le client OpenAI pour une intégration facile avec les applications existantes.

Pour plus d'informations, veuillez consulter notre documentation sur l'API et notre guide de démarrage rapide.

Prochaines étapes

Dans un avenir proche, pplx-api prendra en charge :

Des LLM Perplexity personnalisés et d'autres LLM open source.

Des représentations (embeddings) Perplexity personnalisées et des représentations open source.

Une structure de tarification d'API dédiée avec un accès général une fois la période de version bêta publique terminée.

API LLM-RAG de Perplexity avec ancrage pour les faits et les citations.

Communiquez avec api@perplexity.ai si vous êtes intéressé par l'un de ces cas d'utilisation.

C'est également le début de notre série de messages sur le blogue de Perplexity. Dans notre prochain article, nous partagerons une analyse approfondie de la comparaison des performances entre A100 et H100 pour l'inférence des LLM. Restez à l'écoute !

Nous embauchons ! Si vous souhaitez travailler sur un produit déployé à grande échelle et concevoir avec nous une infrastructure de modèles génératifs et de grands langages soigneusement conçue et optimisée, veuillez vous joindre à nous.

Suivez-nous sur Twitter et LinkedIn, et rejoignez notre serveur Discord pour participer aux discussions.

Auteurs :

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

Confidentialité des données

En choisissant pplx-api, vous pouvez exploiter tout le potentiel des LLM tout en préservant la confidentialité et la confiance de vos utilisateurs et clients. Nous comprenons l'importance de protéger vos renseignements personnels et nous nous engageons à maintenir la sécurité et la confidentialité de nos utilisateurs. Les données de l'API sont automatiquement supprimées après 30 jours, et nous n'utilisons jamais les données transmises via pplx-api pour l'entraînement. Les utilisateurs ont la possibilité de refuser la conservation des données dans les paramètres de leur compte. Retrouvez notre politique de confidentialité de l'API ici.