Enregistrez un modèle déployé sur NVIDIA Triton Inference Server et appelez-le pour effectuer une inférence en temps réel dans les jobs Flink SQL.
Contexte
Realtime Compute for Apache Flink (VVR 11.7+) prend en charge l'enregistrement des modèles hébergés sur NVIDIA Triton Inference Server à l'aide de l'instruction CREATE MODEL. Utilisez la fonction ML_PREDICT dans vos jobs SQL pour exécuter l'inférence sur des flux de données en temps réel.
NVIDIA Triton Inference Server est un service d'inférence open source haute performance développé par NVIDIA. Il est compatible avec TensorFlow, PyTorch, ONNX, TensorRT et d'autres frameworks. Vous pouvez utiliser une instance Triton autogérée ou en déployer une sur PAI-EAS. Déployez un service à l'aide d'une image Triton Inference Server.
Notes d'utilisation
Cette fonctionnalité n'est prise en charge qu'à partir de la version 11.7 du moteur VVR.
Les requêtes adressées à un serveur Triton externe transitent par Internet public et nécessitent un accès au réseau public.
Si le serveur Triton est déployé sur PAI, les requêtes empruntent un réseau privé. Pour obtenir l'endpoint, consultez la section FAQ.
Les ressources du serveur Triton, les conditions réseau et les performances du modèle influent sur le débit d'inférence. Un service Triton surchargé ou soumis à une limitation de débit peut engendrer une contre-pression dans les jobs Flink. Une limitation sévère peut provoquer des délais d'expiration des opérateurs et le redémarrage des jobs.
Syntaxe
CREATE MODEL [catalog_name.][db_name.]model_name
INPUT (
input_column input_type
)
OUTPUT (
output_column output_type
)
WITH (
'provider' = 'triton',
'endpoint' = '<endpoint>',
'auth-token' = '<authentication_token>'
'model-name' = '<model_name>',
'model-version' = '<model_version>'
);
Paramètres WITH
Paramètres généraux
|
Parameter |
Description |
Type |
Required |
Default |
Notes |
|
provider |
Type de service de modèle. |
String |
Yes |
None |
La valeur doit être |
|
endpoint |
Endpoint HTTP du serveur Triton Inference Server. |
String |
Yes |
None |
Vérifiez la connectivité réseau entre l'espace de travail Flink et le service Triton. Options de connexion réseau. Pour les déploiements PAI-EAS, récupérez l'endpoint depuis les informations d'appel du service sur la page du service d'inférence de modèle dans la console PAI. |
|
model-name |
Nom du modèle sur le serveur Triton. |
String |
Yes |
None |
Ce nom doit correspondre exactement au nom du modèle présent dans le référentiel de modèles Triton. |
|
model-version |
Version du modèle Triton. |
String |
No |
latest |
Spécifiez une version, par exemple |
|
timeout |
Délai d'expiration pour une requête HTTP. |
Duration |
No |
30s |
S'applique aux opérations de connexion, de lecture et d'écriture. Indiquez la durée au format approprié, tel que |
|
flatten-batch-dim |
Indique s'il faut aplatir la dimension de lot d'une entrée de type tableau. |
Boolean |
No |
false |
Par défaut, la forme d'une entrée de type tableau est |
|
priority |
Priorité de la requête. |
Integer |
No |
None |
Plage : |
|
compression |
Algorithme de compression appliqué au corps de la requête. |
String |
No |
None |
Seul |
|
auth-token |
Jeton d'authentification pour le modèle Triton. |
String |
No |
None |
Ajoute l'en-tête |
|
custom-headers |
En-têtes HTTP personnalisés pour la requête. |
Map |
No |
None |
Exemple : 'X-Trace-Id:abc,Authorization:token'. |
Paramètres des modèles avec état
Ces paramètres s'appliquent aux modèles Triton avec état (RNN, LSTM) qui conservent leur état entre les requêtes.
|
Parameter |
Description |
Type |
Required |
Default |
Notes |
|
sequence-id |
ID de séquence. |
String |
No |
None |
Triton achemine les requêtes portant le même ID de séquence vers la même instance de modèle. |
|
sequence-start |
Marque la requête comme le début d'une séquence. |
Boolean |
No |
false |
Si la valeur est définie sur |
|
sequence-end |
Marque la requête comme la fin d'une séquence. |
Boolean |
No |
false |
Si la valeur est définie sur |
Correspondance des types
Les types de colonnes Flink doivent correspondre au champ data_type défini dans le fichier config.pbtxt du modèle sur le serveur Triton.
|
Flink type |
Triton dtype |
Description |
|
BOOLEAN |
BOOL |
Type booléen. |
|
TINYINT |
INT8 |
Entier signé 8 bits. |
|
SMALLINT |
INT16 |
Entier signé 16 bits. |
|
INT |
INT32 |
Entier signé 32 bits. |
|
BIGINT |
INT64 |
Entier signé 64 bits. |
|
FLOAT |
FP32 |
Nombre à virgule flottante 32 bits. |
|
DOUBLE |
FP64 |
Nombre à virgule flottante 64 bits. |
|
STRING / VARCHAR |
BYTES |
Type texte. |
|
ARRAY<T> |
Correspond au type d'élément |
Seuls les tableaux unidimensionnels sont pris en charge. Le type |
Règles relatives aux formes :
La forme d'une entrée scalaire est
[1].La forme par défaut d'une entrée
ARRAY<T>est[1, N], oùNreprésente la longueur du tableau. Si le modèle Triton attend une forme[N], définissez'flatten-batch-dim' = 'true'.
FAQ
Comment obtenir l'endpoint et le jeton pour un service Triton déployé sur Platform for AI (PAI) ?
Connectez-vous à la console Platform for AI (PAI).
Dans le volet de navigation de gauche, choisissez , puis cliquez sur le nom du service cible pour ouvrir la page Overview.
Dans la section Basic Information, cliquez sur View Invocation Information.
Dans le panneau Invocation Information, copiez l'endpoint et le jeton.
Comment résoudre une erreur d'incompatibilité de forme ?
Vérifiez que le type de colonne d'entrée Flink correspond au champ dims défini dans le fichier config.pbtxt du modèle sur le serveur Triton. Pour les entrées de type ARRAY<T>, Flink envoie par défaut la forme [1, N]. Si le modèle attend [N], configurez :
'flatten-batch-dim' = 'true'
Les tableaux imbriqués ne sont pas pris en charge. Pour les tenseurs de haute dimension, aplatissez-les en un ARRAY<T> unidimensionnel et restaurez la forme côté modèle.
Les modèles à entrées ou sorties multiples sont-ils pris en charge ?
Seules les colonnes d'entrée unique et de sortie unique sont prises en charge. Pour gérer plusieurs entrées, regroupez les caractéristiques numériques dans un seul ARRAY<T> ou sérialisez les structures complexes sous forme de string JSON et analysez-les côté modèle. Pour les sorties multiples, fusionnez-les en un seul tenseur de sortie ou en une chaîne JSON côté modèle.