Présentation de pplx-api

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

Introducing pplx-api by Perplexity Labs

Veuillez noter : les éléments ci-dessous sont obsolètes pour les modèles actuels.En savoir plus sur nos API

Nous avons le plaisir 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 (LLM) open source de pointe dans leurs projets.

Notre pplx-api propose :

Facilité d'utilisation : les développeurs peuvent utiliser des modèles open source de pointe « prêts à l'emploi » et démarrer 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 permet d'atteindre 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é, assurant un trafic de niveau production tant pour notre moteur de réponses Perplexity que pour notre espace de test Labs.

Solution tout-en-un pour les LLM open source : nos équipes s'engagent à ajouter de nouveaux modèles open source dès leur arrivée. Par exemple, nous avons intégré les modèles Llama et Mistral quelques heures après leur lancement, sans accès préalable.

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

Utilisez pplx-api pour un hackathon occasionnel le week-end ou comme solution commerciale pour créer des produits nouveaux et innovants. Nous espérons découvrir comment les utilisateurs créent des produits innovants et performants avec notre API grâce à cette version. Veuillez contacter api@perplexity.ai si vous avez un cas d'usage professionnel pour pplx-api. Nous serions ravis d'avoir de vos nouvelles !

Avantages de pplx-api

Facilité d'utilisation

Le déploiement et l'inférence de LLM nécessitent des investissements en infrastructure importants pour rendre le service de modèles performant et rentable. Les développeurs peuvent utiliser notre API « prête à l'emploi », sans connaissances approfondies de C++/CUDA ni accès à des GPU, tout en bénéficiant de performances de pointe. Notre inférence LLM abstrait également la complexité et la nécessité de gérer votre propre matériel, facilitant encore davantage son utilisation.


Inférence ultra-rapide

L'API LLM de Perplexity est soigneusement conçue et optimisée pour une inférence rapide. Pour y parvenir, nous avons développé une infrastructure d'inférence LLM propriétaire basée sur TensorRT-LLM de NVIDIA, hébergée sur des GPU A100 fournis par AWS. Pour en savoir plus, consultez la section Présentation de l'infrastructure pplx-api. En conséquence, pplx-api est l'une des API Llama et Mistral les plus rapides disponibles sur le marché.

Pour comparer nos performances aux solutions existantes, nous avons mesuré la latence de pplx-api par rapport à d'autres bibliothèques d'inférence LLM. Dans nos tests, 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 dans des scénarios de flux unique et de serveur, sur 2 GPU A100, en utilisant un modèle Llama-2-13B-chat fragmenté sur les deux GPU. Pour le scénario de 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 variables pour simuler une charge fluctuante. Pour le taux de requête, nous effectuons un balayage jusqu'à un maximum de 1 requête par seconde, soit le débit maximal soutenu par TGI. Nous avons utilisé des données réelles avec des longueurs de jetons d'entrée et de sortie variées pour simuler un comportement en production. Les requêtes traitent en moyenne ~700 jetons d'entrée et ~550 jetons de sortie.

En utilisant les mêmes entrées et en envoyant un flux unique 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 référence par rapport aux 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 par rapport à TGI, avec la vitesse de décodage comme contrainte de latence. Dans nos tests, pplx-api traite les jetons 1,90 à 6,75 fois plus rapidement que TGI, et TGI échoue totalement à respecter nos contraintes de latence plus strictes à 60 et 80 jetons/seconde. Nous évaluons TGI dans les mêmes conditions matérielles et de charge que celles utilisées pour évaluer pplx-api. La comparaison de cette mesure avec Replicate et Anyscale n'est pas possible car nous ne pouvons pas contrôler leurs facteurs matériels et 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 servir à une vitesse supérieure à celle de lecture.

Perplexity Labs - Débit de jetons par GPU

Présentation de l'infrastructure pplx-api

Atteindre de tels chiffres de latence nécessite une combinaison de logiciels et de matériel de pointe.

Les instances AWS p4d, équipées de GPU NVIDIA A100, constituent l'option la plus rentable et la plus fiable pour faire évoluer les GPU avec des vitesses d'horloge de premier ordre.

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

À partir de là, l'épine dorsale d'AWS et son intégration robuste avec Kubernetes nous permettent de monter en charge élastiquement au-delà de centaines de GPU, tout en minimisant les temps d'arrêt et la surcharge réseau.

Cas d'usage : 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 de Perplexity. Le simple fait de basculer une fonctionnalité d'une API externe vers 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 mesures d'infrastructure pour garantir qu'aucune dégradation de la qualité ne se produise. En 2 semaines, nous n'avons observé aucune différence statistiquement significative lors du test A/B. De plus, pplx-api pouvait supporter une charge quotidienne de plus d'un million de requêtes, totalisant près d'un milliard de jetons traités quotidiennement.

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

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

Nous utilisons également pplx-api pour alimenter Perplexity Labs, notre terrain de jeu de modèles proposant divers modèles open source.

Nombre moyen quotidien de jetons servis

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

Démarrer avec l'API IA de Perplexity

Vous pouvez accéder à l'API REST pplx-api en utilisant des requêtes HTTPS. L'authentification sur pplx-api implique les étapes suivantes :

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

Envoyez la clé API en tant que jeton porteur (bearer token) dans l'en-tête Authorization avec 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 en suivant les instructions ci-dessus. CURL est utilisé pour soumettre une requête de complétion de Chat.

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 produit 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 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, Llama 70B, et l'API est commodément compatible avec le client OpenAI pour une intégration facile avec les applications existantes.

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

Et ensuite ?

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

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

Des plongements (embeddings) Perplexity personnalisés et des plongements open source.

Une structure de tarification API dédiée avec un accès général après la phase de bêta publique.

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

Contactez api@perplexity.ai si l'un de ces cas d'usage vous intéresse.

Ceci marque également le début de notre série d'articles de blog Perplexity. Dans notre prochain article, nous partagerons une analyse approfondie de la comparaison des performances A100 vs H100 pour l'inférence LLM. Restez à l'écoute !

Nous recrutons ! Si vous souhaitez travailler sur un produit déployé à grande échelle et construire avec nous une infrastructure de modèles génératifs et de langage de grande taille, conçue avec soin et optimisée, veuillez nous rejoindre.

Suivez-nous sur Twitter, LinkedIn et rejoignez notre Discord pour plus de 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 informations personnelles 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'effectuons jamais d'entraînement sur les données transmises via pplx-api. Les utilisateurs ont la possibilité de refuser la conservation des données dans les paramètres de leur compte. Consultez notre politique de confidentialité des API ici.