Tâches d’inférence par lots¶
Note
Fonction de prévisualisation — Publique
Prise en charge en prévisualisation publique à partir de la version 1.26.0 de snowflake-ml-python.
Utilisez l’inférence par lots Snowflake pour permettre une inférence efficace et à grande échelle de modèles sur des ensembles de données statiques ou mis à jour périodiquement. L’API d’inférence par lots utilise Snowpark Container Services (SPCS) pour fournir une couche de calcul distribuée optimisée pour un débit et une rentabilité considérables.
Quand utiliser l’inférence par lots¶
Utilisez la méthode run_batch pour les charges de travail pour :
Traiter des images, des fichiers audio ou vidéo ou utiliser des modèles multimodaux avec des données non structurées
Exécuter une inférence sur des millions ou des milliards de lignes.
Exécuter l’inférence en tant que zone de préparation discrète et asynchrone dans un pipeline
Intégrer l’inférence en tant qu’étape dans un DAG Airflow ou une tâche Snowflake.
Limitations¶
Pour les cas d’utilisation multimodaux, le chiffrement n’est pris en charge que côté serveur.
Les modèles partitionnés ne sont pas pris en charge
Prise en main¶
Se connecter au registre des modèles¶
Connectez-vous au registre des modèles Snowflake et récupérez la référence du modèle comme suit :
Exécuter une tâche par lots¶
Cette API utilise la tâche Snowpark Container Services (SPCS) pour lancer la charge de travail d’inférence. Après l’exécution de l’inférence, le calcul s’arrête automatiquement pour vous éviter d’encourir des frais supplémentaires. À un haut niveau, cette API ressemble à ce qui suit :
Gestion des tâches¶
Vous pouvez obtenir une liste de tâches, annuler une tâche, obtenir l’identifiant (handle) d’une tâche ou supprimer une tâche à l’aide des méthodes ci-dessous :
Note
La fonction result dans les APIs de tâche ML n’est pas prise en charge pour les tâches d’inférence par lots.
Spécifier des données d’inférence¶
Vous pouvez utiliser des données structurées ou des données non structurées pour l’inférence par lots. Pour utiliser des données structurées dans votre workflow, vous pouvez fournir une requête SQL ou un dataframe à la méthode run_batch.
Pour les données non structurées, vous pouvez référencer vos fichiers à partir d’une zone de préparation Snowflake. Pour référencer vos fichiers, créez un dataframe avec les chemins d’accès aux fichiers.
Vous fournissez votre dataframe à la méthode run_batch et la méthode run_batch fournit le contenu des fichiers au modèle.
Entrée structurée¶
Les exemples suivants illustrent la plage des possibilités d’entrée :
Entrée non structurée (multimodale)¶
Pour les données non structurées, la méthode run_batch peut lire les fichiers à partir des chemins de zone de préparation complets fournis dans le dataframe d’entrée. L’exemple suivant vous montre comment spécifier des données d’entrée non structurées :
Pour lister automatiquement tous les fichiers d’une zone de préparation en tant que dataframe, utilisez un code comme celui-ci :
Expression du type de données¶
Run_batch convertit automatiquement vos fichiers dans les formats compatibles avec les modèles.
Votre modèle peut accepter des données dans l’un des formats suivants :
RAW_BYTES
BASE64
Par exemple, si vous avez des images stockées au format PNG dans votre zone de préparation et si votre modèle accepte RAW_BYTES, vous pouvez utiliser l’argument input_spec pour spécifier comment Snowflake convertit vos données.
L’exemple de code suivant convertit les fichiers de votre zone de préparation en RAW_BYTES :
L’argument column_handling indique au framework que la colonne de chemin X contient un chemin complet de la zone de préparation et appelle le modèle avec des octets bruts de ce fichier.
Sortie (output_spec)¶
Spécifiez un répertoire de zone de préparation pour stocker la sortie du fichier, comme indiqué ici :
Snowflake prend actuellement en charge les modèles qui produisent du texte et les stockent sous forme de fichiers Parquet. Vous pouvez convertir les fichiers Parquet en un cadre de données Snowpark comme suit :
Transmission de paramètres¶
Si la signature du modèle comprend des paramètres définis avec ParamSpec, vous pouvez transmettre les valeurs des paramètres au moment de l’inférence en utilisant l’argument params dans InputSpec. Tout paramètre non inclus dans le dictionnaire utilise sa valeur par défaut à partir de la signature.
Spécification de la tâche¶
Pour configurer les paramètres de niveau tâche pour votre charge de travail d’inférence par lots (comme le nombre de travailleurs, l’allocation des ressources et les paramètres d’exécution, transmettez une instance JobSpec en tant qu’argument job_spec de la méthode run_batch. En voici un exemple :
Meilleures pratiques¶
Utilisation d’un fichier sentinelle¶
Une tâche peut échouer à mi-chemin pour diverses raisons. Le répertoire de sortie peut donc se retrouver avec des données partielles. Pour marquer l’achèvement de la tâche, la méthode run_batch écrit un fichier d’achèvement _SUCCESS dans le répertoire de sortie.
Pour éviter toute sortie partielle ou incorrecte :
Ne lire les données de sortie qu’une fois le fichier sentinelle trouvé.
Indiquez un répertoire vide pour commencer.
Exécutez la méthode run_batch avec le mode = SaveMode.ERROR.
Exemples¶
Utilisation d’un modèle personnalisé¶
Utilisation du modèle Hugging Face¶
Utilisation du modèle Hugging Face avec vLLM¶
Tâche : génération de texte¶
Tâche : texte d’image vers texte¶
Exemples de notebooks¶
Pour des exemples d’exécutions de bout en bout, consultez les ` exemples de notebooks d’inférence par lots <https://github.com/Snowflake-Labs/sf-samples/tree/main/samples/ml/model_serving/batch_inference>`_ sur GitHub.