Le nombre de jetons détermine à la fois la vitesse et les coûts. Pour définir un jeton : il s'agit d'une unité de texte, telle qu'un mot, un sous-mot ou un caractère, traitée par un modèle. Il est crucial de comprendre le concept de tokenisation, car il fait référence à la division du texte en ces unités pour le traitement par des modèles linguistiques et des modèles d'IA. Si vos chiffres diffèrent de ce que voit réellement le serveur, vos budgets et vos SLO diminuent sans que personne ne s'en aperçoive. Par exemple, lorsque les données d'entrée sont traitées, chaque phrase est divisée en unités plus petites, et la forme que prennent ces jetons, qu'il s'agisse de mots, de sous-mots ou de caractères, influe sur la manière dont les données sont traitées. Dans des méthodes telles que le codage par paires d'octets (BPE), les mots sont représentés sous forme de séquences de jetons et le texte est tokenisé selon des règles spécifiques. La taille de vocabulaire souhaitée est définie en tant qu'hyperparamètre avant l'entraînement, afin de déterminer le moment où le processus de fusion s'arrête. Le BPE et les méthodes similaires sont entraînés sur un corpus afin d'optimiser la tokenisation, et vous pouvez utiliser une bibliothèque pour implémenter ces techniques efficacement. SentencePiece est une solution de tokenisation indépendante de la langue, qui traite les entrées comme un flux brut et prend en charge les langues sans mots séparés par des espaces. Ces méthodes de tokenisation sont essentielles pour préparer les données pour un modèle de langage ou un modèle d'IA, garantissant ainsi un traitement cohérent et efficace.
L'optimisation des performances des modèles et la préparation des données pour différentes tâches nécessitent une gestion minutieuse de la tokenisation et du décompte des jetons. En pratique, cela implique de filtrer les données pertinentes, de gérer les dépendances et d'utiliser les bons outils pour garantir que votre modèle d'IA ou votre modèle de langage fonctionne comme prévu.
Essayez Compute dès aujourd'hui: Lancez un VllM point de terminaison activé Calculer. Choisissez le modèle que vous utilisez en production et mesurez le nombre de jetons d'invite et de sortie lorsque le streaming est activé. Conservez le point de terminaison dans la région et plafonnez le nombre maximum de jetons par route.
Présentation de la tokenisation
La tokenisation est au cœur du fonctionnement des modèles linguistiques. Lorsque vous envoyez du texte à un modèle, celui-ci ne peut pas lire les mots comme vous le faites. Il doit d'abord diviser votre saisie en éléments plus petits appelés jetons. Considérez la tokenisation comme le pont entre le langage humain et ce que la machine peut réellement traiter. Ces jetons peuvent être des mots entiers, des parties de mots ou même des caractères uniques, selon la configuration du système.
Si vous travaillez avec des modèles de langage, vous devez comprendre comment la tokenisation façonne tout ce qui se passe ensuite. La façon dont votre texte est scindé influe directement sur la capacité du modèle à comprendre ce que vous demandez. Prenons l'exemple du codage par paires d'octets (BPE) : il s'agit d'une méthode courante qui permet de déterminer quelles paires de lettres ou de caractères apparaissent le plus souvent dans les données d'apprentissage, puis de créer un vocabulaire qui gère efficacement à la fois les mots du quotidien et les fragments inhabituels. WordPiece et SentencePiece fonctionnent différemment mais visent le même objectif. Chaque approche comporte des compromis : la taille du vocabulaire, la façon dont elle gère les caractères spéciaux et son efficacité dans les différentes langues.
La bonne tokenisation est importante pour vos résultats et votre budget. Lorsque vous préparez des données d'entraînement ou que vous créez des instructions pour un modèle dynamique, le fait de savoir comment le texte devient un jeton vous permet d'éviter les mauvaises surprises. Vous rédigerez de meilleures instructions, gérerez les coûts de manière plus efficace et obtiendrez les résultats que vous attendez réellement de vos modèles.
Pourquoi le nombre de jetons dérive
- Différents tokeniseurs. Un tokenizer BPE de type GPT et un tokenizer SentencePiece divisent le même texte différemment, et chacun peut utiliser une stratégie de mappage différente pour représenter et indexer des segments de texte.
- Personnages invisibles. Les NBSP, les jointures à largeur nulle, les guillemets intelligents et les fins de ligne mixtes modifient le nombre.
- Montage rapide. Les instructions et les exemples du système sont dupliqués ou reformatés par les clients, et les dépendances entre les composants des invites peuvent affecter le nombre de jetons.
- Paramètres par défaut du SDK. Certains SDK ajoutent des rôles, des séparateurs ou des wrappers de fonctions que vous n'avez pas pris en compte, et d'autres ajoutent des jetons supplémentaires aux demandes, en particulier lorsque des fonctionnalités facultatives sont utilisées.
- Des bizarreries linguistiques. Composés (allemand/néerlandais), signes diacritiques (français/espagnol), clitiques (arabe/espagnol), segmentation CJK : tous les quarts de travail comptent.
Pièges courants et solutions rapides
Différences entre le modèle et le SDK (en anglais clair)
- BPE (par exemple, famille GPT) contre Phrase (p. ex., Famille Llama): les deux sont des tokeniseurs de sous-mots, mais ils divisent les mots différemment. Attendez-vous à des comptes différents pour la même chaîne. Certains mots peuvent être traités comme un seul jeton par un tokenizer, mais divisés en plusieurs jetons par un autre, selon que le mot est présent ou non dans le vocabulaire du tokenizer.
- Enveloppes de discussion. Certains serveurs HTTP acceptent les messages structurés [] et injectent des jetons de rôle ; d'autres s'attendent à recevoir des instructions brutes. Le wrapper ajoute des jetons pour lesquels vous devez budgétiser.
- Arrêtez les séquences. Une séquence d'arrêt qui apparaît dans votre invite peut mettre fin à la génération plus tôt. Budgétisez max_tokens avec une marge.
Une liste de contrôle de normalisation avant le comptage
- Convertissez les fins de ligne en\n.
- Remplacer NBSP avec espace régulier ; bande ZWJ/ZWNJ sauf si nécessaire.
- Réduisez les espaces/onglets répétés.
- Normalisez les guillemets et les apostrophes en ASCII lorsque la langue le permet.
- Éliminez les espaces blancs qui traînent et les clôtures Markdown.
- Canoniser les invites du système (source unique ; versionnées).
- Réglez le langue de sortie cible dans l'invite du système.
- Journal tous les deux les jetons d'invite et de sortie provenant du serveur sont considérés comme vrais.
La normalisation doit être appliquée à chaque phrase de l'entrée pour garantir des résultats de tokenisation cohérents.
Un petit harnais de test (comparez les tokeniseurs)
Conservez un tokenizer à votre actif. Utilisez ce harnais dans CI pour détecter la dérive lorsque vous changez de modèle ou de SDK. Ce harnais utilise une bibliothèque ou un outil de tokenisation pour garantir des résultats cohérents entre les différents modèles et tâches. Il est essentiel que les développeurs testent la tokenisation, car les différences entre les méthodes de tokenisation peuvent entraîner un plus grand nombre de jetons et des coûts plus élevés ou des comportements inattendus. L'utilisation d'une bibliothèque ou d'un outil dédié présente l'avantage d'un comptage précis des jetons et d'un mappage fiable entre le texte et les jetons.
Remarque : Utilisez toujours la bibliothèque ou l'outil approprié pour obtenir des résultats précis. L'utilisation du mauvais jeton peut entraîner un décompte de jetons incorrect ou des sorties tokenisées.
Python (croquis)
# pip install tiktoken sentencepiece
importer tiktoken
importer un extrait de phrase en tant que spm
# Chargement du tokenizer : assurez-vous de charger le bon encodage ou le bon modèle pour votre cas d'utilisation.
enc_gpt = tiktoken.get_encoding (« cl100k_base »)
sp = SPM.SentencePieceProcessor (model_file="llama.model ») # utilisez le spm de votre modèle
# Chaque entrée de TEXTS est une instance ou un exemple de phrase à symboliser.
TEXTES = [
« l'été dernier à Zürich — café & résumé »,
« Schadenfreude und Lebensversicherung »,
« »,
« J'ai tapé:shrug : et j'ai obtenu 🤷🏽 ♂️ «,
« ```
print (« gros bloc de code qui doit être tronqué... »)
« »
]
pour s dans les TEXTES :
# Le texte est symbolisé en utilisant à la fois des bibliothèques et des outils.
gpt_tokens = len (enc_gpt.encode (s))
sp_tokens = len (sp.encoder (s))
print ({"text » : s [:32] + «... », « gpt » : gpt_tokens, « spm » : sp_tokens})
Nœud (esquisse approximative)
//npm dans js-tiktoken
importer {encoding_for_model} depuis « js-tiktoken » ;
//Chargement du tokenizer pour le modèle souhaité.
const enc = encoding_for_model (« gpt-4o-mini ») ;
//Chaque échantillon est une instance ou un exemple de phrase.
échantillons const = [
« l'été à Paris »,
« Swiss Rückversicherung »,
« émoji 🤷🏽 ♂️ »,
] ;
pour (composé d'échantillons) {
//Affiche le nombre de jetons dans lesquels chaque phrase est symbolisée.
console.log (s.slice (0,24) +"... », encode (s) .length) ;
}
Développement sensible au contexte
Pour créer des applications LLM efficaces, il ne suffit pas d'insérer du texte dans un modèle. Il s'agit également de comprendre le contexte et la manière dont il influe sur la qualité et la rapidité des résultats. Le développement tenant compte du contexte implique la conception de systèmes qui utilisent les points forts de votre modèle tout en gérant les véritables défis liés aux limites de jetons et aux fenêtres contextuelles.
Vous serez confronté à un défi majeur : comment donner au modèle un contexte suffisamment pertinent sans atteindre des limites symboliques ou voir les coûts grimper en flèche ? Chaque jeton supplémentaire figurant dans votre invite ou dans le document que vous avez récupéré augmente la charge de calcul. Cela ralentit les choses et affecte votre budget. C'est là qu'intervient la génération augmentée de récupération (RAG). Les systèmes RAG extraient les informations pertinentes de sources externes et n'injectent que le contexte le plus utile dans les données d'entrée de votre modèle. Votre modèle génère des réponses plus précises et adaptées au contexte tout en gardant le nombre de jetons gérable.
Lorsque vous comprenez comment le contexte, les jetons et les performances du modèle fonctionnent ensemble, vous pouvez concevoir des applications qui tirent le meilleur parti des LLM. Cela implique de choisir avec soin vos données d'entrée, de surveiller l'utilisation des jetons et d'utiliser des techniques contextuelles afin que chaque jeton apporte de la valeur à votre tâche spécifique. Le développement tenant compte du contexte revient à trouver le bon équilibre : donnez au modèle suffisamment d'informations pour comprendre ce dont vous avez besoin tout en préservant son efficacité pour une utilisation dans le monde réel.
Surveillance et alertes
- La vérité sur les serveurs d'abord. Exportez le nombre de jetons d'invite et de sortie depuis le serveur d'inférence et traitez-le comme canonique. La surveillance du nombre de jetons est essentielle pour gérer les coûts et garantir une facturation précise.
- Budget à la dérive. Alerte si les jetons estimés par le client diffèrent du nombre de serveurs par Entre 5 et 10 % plus d'une heure.
- Tableaux de bord des itinéraires. Surveillez les distributions de jetons par itinéraire ; ajustez les plafonds lorsque les queues augmentent.
- Mélange de langues. Suivez la langue en fonction des demandes ; des changements importants peuvent modifier le nombre et la latence.
- Incidents. Lorsque les plafonds se déclenchent ou que les OOM augmentent, vérifiez d'abord s'il y a un changement de tokenizer ou de normalisation.
Remarque : Il est essentiel de surveiller le nombre de jetons utilisés dans chaque demande afin d'éviter les dépassements de budget et les coûts imprévus.
Essayez Compute dès aujourd'hui: Exécutez un VllM point de terminaison activé Calculer avec des journaux qui incluent le nombre de jetons d'invite et de sortie, le TTFT et le TPS. Conservez un seul tokenizer et comparez-le dans CI.
Faites en sorte que le décompte des jetons soit honnête pour protéger la vitesse et le budget
Les développeurs doivent suivre les pratiques suivantes : choisir un seul tokenizer d'enregistrement, normaliser les entrées et enregistrer les comptes côté serveur. Dans la pratique, il est essentiel de tester les tokeniseurs lorsque vous changez de modèle, de langue ou de SDK pour garantir la cohérence entre les tâches. La surveillance de la dérive et de la traînée dans les tableaux de bord vous donne l'avantage de détecter les problèmes le plus tôt possible. Ces habitudes sont essentielles pour conserver TTFT et jetons par seconde stable et vos budgets prévisibles.
Conclusion et orientations futures
La création d'applications LLM de qualité commence par la tokenisation et le développement tenant compte du contexte. Vous devez comprendre comment fonctionne la tokenisation : le codage par paires d'octets, WordPiece et SentencePiece sont vos principales options. Chaque méthode gère différemment la taille du vocabulaire, les caractères spéciaux et la tokenisation des sous-mots. Choisissez celui qui convient à votre projet et vous obtiendrez de meilleures performances tout en maîtrisant les coûts.
Le terrain change rapidement. De nouvelles méthodes de tokenisation apparaîtront, qui fonctionnent plus efficacement, prennent en charge un plus grand nombre de langues et gèrent mieux les caractères spéciaux. Vous pouvez utiliser des guides étape par étape pour comprendre le processus de tokenisation et des outils qui vous montrent comment différents modèles décomposent le même texte. Lorsque vous voyez comment un jeton peut représenter un mot entier alors qu'un autre a besoin de plusieurs jetons pour le même texte, vous ferez des choix plus intelligents.
Les techniques tenant compte du contexte, telles que la récupération et la génération augmentée, ne cessent de s'améliorer. Lorsque vous pouvez gérer le contexte et le nombre de jetons à la volée, vos modèles d'IA produiront des résultats plus riches et plus pertinents. Continuez à explorer comment les jetons, le contexte et la signification fonctionnent ensemble. Utilisez les outils et la documentation les plus récents. Vous allez créer du texte de meilleure qualité et développer des applications NLP plus performantes.
La maîtrise de la tokenisation et du développement tenant compte du contexte va au-delà du comptage des jetons dans une invite ou un fichier. Il s'agit d'utiliser ces connaissances pour créer des solutions d'IA efficientes, efficaces et évolutives. Au fur et à mesure que les modèles et les méthodes s'améliorent, restez informé et prêt à vous adapter. Vos applications resteront à la pointe de l'innovation en matière de PNL.
FAQ
Quel est le moyen le plus sûr de compter les jetons ?
Utilisez le tokenizer d'enregistrement du modèle et confirmez à l'aide du nombre d'invites et de sorties du serveur. Il est important de sélectionner le bon outil ou la bonne bibliothèque pour un comptage précis des jetons, car différents outils ou bibliothèques peuvent implémenter la tokenisation différemment.
Remarque : il peut y avoir des différences entre le nombre de jetons indiqué par différents outils ou bibliothèques. Vérifiez donc toujours auprès du serveur le nombre de jetons pour la facturation et les alertes.
Par exemple, vous pouvez utiliser une bibliothèque Python telle que tiktoken pour compter les jetons localement avant d'envoyer une invite au serveur. Cela permet d'estimer le nombre de jetons et de gérer efficacement la taille des invites.
Pourquoi les chiffres sont-ils différents entre les modèles OpenAI et ceux de la famille Llama ?
Différents modèles utilisent différentes méthodes de tokenisation, telles que le codage par paire d'octets (BPE) et SentencePiece. Pour définir, une méthode de tokenisation est l'approche utilisée pour diviser le texte en jetons, qui sont les unités de base traitées par les modèles de langage. Par exemple, BPE et SentencePiece segmentent chacun le texte de manière unique, ce qui affecte le nombre de jetons produits par une entrée donnée.
Pour expliquer pourquoi c'est important : le choix de la méthode de tokenisation a un impact sur la taille du vocabulaire, les performances du modèle et l'efficacité informatique. Par exemple, la phrase « ChatGPT est incroyable ! » peut être divisé en ["Chat », « G », « PT », « is », « amazing », « !"] par BPE, mais SentencePiece pourrait le symboliser comme suit : « Chat », « G », « PT », « is », « amaz », « ing », « ! »].
Remarque : Prévoyez toujours la variation du nombre de jetons entre les modèles et définissez des plafonds de jetons en conséquence.
Les caractères Unicode sont-ils vraiment importants ?
Oui Les caractères Unicode tels que NBSP, ZWJ et les guillemets intelligents peuvent ajouter des symboles que vous ne voyez pas, en particulier lors de la tokenisation d'une phrase. Par exemple, la phrase : « Ceci est un exemple de phrase. » (avec des NBSP au lieu d'espaces) peut générer plus de jetons que prévu.
Remarque : normalisez toujours votre texte avant de compter les jetons pour éviter des résultats inattendus.
Pour expliquer, les caractères Unicode peuvent diviser des mots ou des phrases en symboles supplémentaires, car les tokeniseurs peuvent les traiter différemment des espaces ou de la ponctuation standard. Cela peut affecter la façon dont les phrases sont traitées et le nombre total de jetons.
Puis-je utiliser le nombre de mots au lieu du nombre de symboles ?
Non Les tokeniseurs de sous-mots divisent le texte en unités plus petites, séparant souvent les mots et même les phrases. Par exemple, la phrase « La tokenisation est importante » peut être divisée en jetons tels que « Token », « ization », « is », « important » et «. ». Cela signifie que le simple fait de compter des mots ou des phrases ne reflète pas exactement le nombre de jetons utilisés.
Pour expliquer, le nombre de mots est trompeur car les tokeniseurs peuvent diviser un seul mot en plusieurs symboles ou fusionner des parties de différents mots, selon le modèle linguistique. Cela affecte à la fois les calculs de coûts et de latence.
Remarque : Utilisez toujours le nombre de jetons plutôt que le nombre de mots ou de phrases pour estimer l'utilisation ou les coûts.
Quel budget dois-je prévoir pour les applications multilingues ?
Enregistrez les balises de langue par demande pour suivre avec précision l'utilisation et gérer l'allocation des jetons. Différentes tâches, telles que la traduction, la synthèse ou la génération de dialogues, peuvent nécessiter des stratégies budgétaires différentes en fonction de leur complexité et de leur langue. Mesurez le nombre de jetons pour chaque demande afin de déterminer combien de jetons sont utilisés, en vous assurant de respecter les limites du contexte du modèle.
Par exemple, lors de la budgétisation d'une application multilingue, vous pouvez attribuer davantage de jetons aux langues les plus utilisées ou aux tâches les plus complexes. Remarque : il est important de privilégier les modèles dotés de puissants tokeniseurs multilingues afin de garantir une tokenisation précise et un traitement efficace dans toutes les langues.
Mesurez le TTFT et le TPS par langue.
Le streaming modifie-t-il le nombre de jetons ?
Le streaming ne modifie pas le nombre de jetons ni le nombre de jetons utilisés dans votre demande. Cependant, cela vous permet de vous arrêter plus tôt et d'économiser des jetons en ne générant pas de sortie inutile.
Par exemple, si vous diffusez une réponse et que l'utilisateur trouve la réponse dont il a besoin à mi-chemin, il peut appuyer sur le bouton Stop, ce qui empêche la génération de jetons supplémentaires et leur prise en compte dans votre utilisation.
Remarque : le streaming est bénéfique car il permet aux utilisateurs de mieux contrôler l'utilisation des jetons et peut aider à gérer les coûts en réduisant le nombre total de jetons.
Pour expliquer plus en détail, le streaming vous aide à gérer efficacement l'utilisation des jetons en vous permettant d'interrompre la sortie dès que vous disposez de suffisamment d'informations, au lieu d'attendre la fin de la réponse complète. Gardez max_tokens serré et donnez aux utilisateurs un bouton Stop.