Utilisation de paquets tiers

Les zones de préparation peuvent être utilisées pour importer des packages tiers. Vous pouvez également spécifier les paquets Anaconda à installer lorsque vous créez des UDFs Python.

Dans ce chapitre :

Importation de packages à travers une zone de préparation Snowflake

Les zones de préparation Snowflake peuvent être utilisées pour importer des packages. Vous pouvez introduire tout code Python qui suit les directives définies dans Limitations générales. Pour plus d’informations, voir Création d’une UDF Python avec du code téléchargé à partir d’une zone de préparation.

Utilisation de paquets tiers à partir d’Anaconda

Pour plus de commodité, un certain nombre de paquets Python tiers open source populaires, développés et fournis par Anaconda, sont mis à disposition pour être utilisés tels quels dans des entrepôts virtuels Snowflake. Il n’y a pas de coût supplémentaire pour l’utilisation des paquets Anaconda en dehors de la tarification standard de Snowflake basée sur la consommation. Les paquets Anaconda ne peuvent actuellement pas être utilisés dans Snowpark Container Services (SPCS). Si vous avez besoin d’utiliser des paquets Python dans une image de conteneur pour SPCS, vous pouvez installer de tels paquets à partir de PyPi en utilisant pip.

Pour voir la liste des paquets tiers d’Anaconda, consultez le canal Anaconda Snowflake.

Pour demander l’ajout de nouveaux packages, rendez-vous sur la page Snowflake Ideas dans la communauté Snowflake. Sélectionnez la catégorie Python Packages & Libraries et vérifiez si quelqu’un a déjà soumis une demande. Si oui, donnez-lui un vote. Sinon, cliquez sur New Idea et soumettez votre suggestion.

Prise en main

Avant de commencer à utiliser les paquets fournis par Anaconda dans Snowflake, vous devez accepter les conditions des offres externes.

Note

Vous devez être l’administrateur de l’organisation (utilisez le rôle ORGADMIN) pour accepter les conditions. Vous ne devez accepter les conditions qu’une seule fois pour votre compte Snowflake. Voir Activation du rôle ORGADMIN dans un compte.

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Admin » Billing & Terms.

  3. Dans la section Anaconda, sélectionnez Enable.

  4. Dans la boîte de dialogue Anaconda Packages , cliquez sur le lien pour consulter la page des conditions des offres externes.

  5. Si vous acceptez les conditions, sélectionnez Acknowledge & Continue.

Si une erreur apparaît lorsque vous essayez d’accepter les conditions d’utilisation, il se peut qu’il manque un prénom, un nom ou une adresse e-mail dans votre profil d’utilisateur. Si vous avez un rôle d’administrateur, reportez-vous aux Ajouter des détails sur l’utilisateur à votre profil d’utilisateur pour mettre à jour votre profil à l’aide de Snowsight. Sinon, contactez un administrateur pour mettre à jour votre compte.

Affichage et utilisation des paquets

Affichage des paquets disponibles

Vous pouvez afficher tous les paquets disponibles et leurs informations de version en interrogeant la vue PACKAGES dans Information Schema.

select * from information_schema.packages where language = 'python';
Copy

Pour afficher les informations de version d’un paquet spécifique, par exemple numpy, utilisez cette commande :

select * from information_schema.packages where (package_name = 'numpy' and language = 'python');
Copy

Note

Certains paquets du canal Anaconda Snowflake ne sont pas destinés à être utilisés dans des UDFs Snowflake, car les UDFs sont exécutées dans un moteur restreint. Pour plus d’informations, voir Respecter les bonnes pratiques de sécurité.

Lorsque des requêtes qui appellent des UDFs Python sont exécutées dans un entrepôt Snowflake, les paquets Anaconda sont installés de manière transparente et mis en cache dans l’entrepôt virtuel en votre nom.

Affichage des paquets importés

Vous pouvez afficher la liste des paquets et modules utilisés par une UDF ou une UDTF en exécutant la commande DESCRIBE FUNCTION. L’exécution de la commande DESCRIBE FUNCTION pour une UDF dont le gestionnaire est implémenté en Python renvoie les valeurs de plusieurs propriétés, dont une liste des modules et paquets importés, ainsi que des packages installés, la signature de la fonction et son type de retour.

Lorsque vous spécifiez l’identificateur de l’UDF, veillez à inclure les types de paramètres de fonction, le cas échéant.

desc function stock_sale_average(varchar, number, number);
Copy

Utilisation des paquets Anaconda

Pour un exemple d’utilisation d’un paquet Anaconda importé dans une UDF Python, reportez-vous à Importation d’un paquet dans un gestionnaire en ligne.

Définition des politiques de paquets

Vous pouvez utiliser une politique de paquets pour définir des listes d’autorisation et des listes de blocage pour les paquets Python tiers d’Anaconda au niveau du compte. Cela vous permet de répondre à des exigences d’audit et de sécurité plus strictes et vous donne un contrôle plus précis sur les paquets disponibles ou bloqués dans votre environnement. Pour plus d’informations, consultez Politiques des paquets.

Performance des entrepôts froids

Pour une gestion plus efficace des ressources, les entrepôts virtuels nouvellement provisionnés ne préinstallent pas les paquets Anaconda. Au lieu de cela, les paquets Anaconda sont installés à la demande la première fois qu’une UDF est utilisée. Les paquets sont mis en cache pour une exécution UDF future sur le même entrepôt. Le cache est détruit lorsque l’entrepôt est suspendu. Cela peut entraîner un ralentissement des performances la première fois qu’une UDF est utilisée ou après la reprise de l’entrepôt. La latence supplémentaire pourrait être d’environ 30 secondes.

Développement et tests locaux

Pour vous aider à créer un environnement conda sur votre machine locale pour le développement et les tests, Anaconda a créé un canal Snowflake qui reproduit un sous-ensemble des paquets et des versions qui sont pris en charge dans l’environnement UDF Snowflake Python. Vous pouvez utiliser le canal Anaconda de Snowflake pour des tests et du développement locaux, sans frais, conformément aux conditions supplémentaires relatives aux logiciels embarqués des conditions de service d’Anaconda.

Par exemple, pour créer un nouvel environnement conda localement en utilisant le canal Snowflake, tapez quelque chose comme ceci sur la ligne de commande :

conda create --name py38_env -c https://repo.anaconda.com/pkgs/snowflake python=3.8 numpy pandas
Copy

Notez qu’en raison des différences de plate-forme, votre environnement conda local peut ne pas être exactement le même que celui du serveur.

Meilleures pratiques

Dans l’instruction create function la spécification du paquet (par exemple, packages = ('numpy','pandas')) ne doit spécifier que les packages de premier niveau que l’UDF utilise directement. Anaconda effectue la gestion des dépendances des paquets et installera automatiquement les dépendances requises. Pour cette raison, vous ne devez pas spécifier les paquets de dépendance.

Anaconda installera la version la plus à jour du paquet et de ses dépendances si vous ne spécifiez pas de version de package. En général, il n’est pas nécessaire de spécifier une version particulière du paquet. Notez que la résolution de version est effectuée une fois, lorsque l’UDF est créée à l’aide de la commande create function. Après cela, la résolution de version résultante est gelée et le même ensemble de paquets sera utilisé lors de l’exécution de cette UDF spécifique.

Pour un exemple d’utilisation de la spécification du paquet dans l’instruction create function voir Importation d’un paquet dans un gestionnaire en ligne.

Problèmes connus avec les paquets tiers

Performance avec la prédiction sur une seule ligne

Certains frameworks de data science, tels que Scikit-learn et TensorFlow, peuvent être lents lors de la prédiction ML sur une seule ligne.

Pour améliorer les performances, effectuez une prédiction par lot plutôt qu’une prédiction sur une seule ligne. Pour ce faire, convertissez l’ensemble de données d’entrée en tableaux Snowflake et introduisez ces tableaux dans le code de prédiction. La mise en lots peut être effectuée avec des UDTFs tabulaires Python, la fonction ARRAY_AGG, UDFs Java tabulaires (UDTFs) ou UDFs JavaScript tabulaires (UDTFs).

Vous pouvez également utiliser les UDFs vectorisées Python, avec lesquelles vous pouvez définir des fonctions Python qui reçoivent des lignes d’entrée par lots, sur lesquelles les bibliothèques de machine learning ou de science des données sont optimisées pour fonctionner. Pour plus d’informations, voir UDFs Python vectorisées.

Téléchargement de données à la demande depuis les bibliothèques de Data Science

Certaines bibliothèques de Data Science, telles que NLTK, Keras et spaCy offrent une fonctionnalité permettant de télécharger des corpus, des données ou des modèles supplémentaires à la demande.

Cependant, le téléchargement à la demande ne fonctionne pas avec les UDFs Python en raison des contraintes de sécurité de Snowflake, qui désactivent certaines capacités, comme l’accès au réseau et l’écriture dans les fichiers.

Pour contourner ce problème, téléchargez les données dans votre environnement local, puis fournissez-les à l’UDF via une zone de préparation Snowflake.

XGBoost

Lors de l’utilisation de XGBoost dans une UDF ou une UDTF pour la prédiction ou l’apprentissage en parallèle, la concurrence pour chaque instance XGBoost doit être définie sur 1. Cela garantit que XGBoost est configuré pour une performance optimale lors de l’exécution dans l’environnement Snowflake.

Exemples :

import xgboost as xgb
model = xgb.Booster()
model.set_param('nthread', 1)
model.load_model(...)
Copy
import xgboost as xgb
model = xgb.XGBRegressor(n_jobs=1)
Copy

TensorFlow/Keras

Lorsque vous utilisez Tensorflow/Keras pour la prédiction, utilisez Model.predict_on_batch et non Model.predict.

Exemple :

import keras
model = keras.models.load_model(...)
model.predict_on_batch(np.array([input]))
Copy