Notes de version de Snowflake ML¶
Cet article contient les notes de version Snowflake ML, y compris les éléments suivants, le cas échéant :
Changements de comportement
Nouvelles fonctionnalités
Corrections de bogues pour les clients
Note
Ces notes n’incluent pas les modifications des fonctions qui n’ont pas fait l’objet d’une annonce publique. Ces fonctions peuvent apparaître dans le code source Snowflake ML, mais pas dans la documentation publique.
Voir Snowflake ML : machine learning de bout en bout pour la documentation.
Vérification du paquet snowflake-ml-python
¶
Tous les paquets Snowflake sont signés, ce qui vous permet de vérifier leur origine. Pour vérifier le paquet snowflake.ml.python
, procédez comme suit :
Installez
cosign
. Cet exemple utilise l’installation Go : Installation de cosign avec Go.Téléchargez le fichier à partir d’un référentiel tel que PyPi.
Téléchargez un fichier
.sig
pour cette version à partir de la page GitHub releases.Vérifiez la signature à l’aide de
cosign
. Par exemple :
cosign verify-blob snowflake_ml_python-1.7.0.tar.gz --key snowflake-ml-python-1.7.0.pub --signature resources.linux.snowflake_ml_python-1.7.0.tar.gz.sig
cosign verify-blob snowflake_ml_python-1.7.0.tar.gz --key snowflake-ml-python-1.7.0.pub --signature resources.linux.snowflake_ml_python-1.7.0
Note
Cet exemple utilise la bibliothèque et la signature de la version 1.7.0 du paquet. Utilisez les noms de fichier de la version que vous vérifiez.
Avis d’obsolescence¶
snowflake.ml.fileset.FileSet
est obsolète et sera supprimée dans une prochaine version. Utilisez plutôt snowflake.ml.dataset.Dataset et snowflake.ml.data.DataConnector.Les noms de fonctions « CamelCase » dans
snowflake.ml.cortex
sont obsolètes et seront supprimés dans une prochaine version. Utilisez plutôt les noms « snake_case » pour ces fonctions. Par exemple, utilisezclassify_text
au lieu deClassifyText
.Le décorateur
partitioned_inefrerence_api
est obsolète et sera supprimé dans une prochaine version. Utilisezcustom_model.partitioned_api
à la place.
Version 1.8.5 (2025-05-27)¶
Changements de comportement¶
Modifications du comportement des tâches ML :
L’argument
num_instances
a été renommétarget_instances
dans les APIs de soumission de tâches et est désormais requis.
Corrections de bogues¶
Correction des bogues du registre des modèles :
Correction d’un bogue dans l’annonce et la suppression des services de conteneurs.
Correction d’un bogue avec la connexion des pipelines scikit-learn où la fonction
explain
n’était pas créée.La connexion d’un modèle de conteneur seul ne vérifie plus que la version requise de
snowflake-ml-python
est disponible dans le canal conda de Snowflake.
Correction de bogues liés à l’explicabilité :
La version minimale de
streamlit
a été ramenée à 1.30 pour améliorer la compatibilité.
Correction de bogues de modélisation :
xgboost
est à nouveau une dépendance obligatoire (elle était facultative dans la version 1.8.4).
Nouvelles fonctionnalités¶
Nouvelles fonctions des tâches ML :
Le décorateur de tâches dispose désormais d’un argument
min_instances
qui permet à une tâche d’attendre que le nombre de travailleurs spécifié soit prêt avant de démarrer.
Version 1.8.4 (2025-05-12)¶
Changements de comportement¶
Modifications du comportement des tâches ML :
La propriété
id
est désormais le nom complet de la tâche. Une nouvelle propriété,name
, a été introduite pour représenter le nom de la tâche ML.La méthode
list_jobs
renvoie désormais le nom de la tâche ML au lieu de l’ID de tâche.
Modifications du comportement du registre de modèles :
Dans
log_model
, l’activation de l’explicabilité lorsque le modèle est déployé uniquement vers Snowpark Container Services est maintenant une erreur au lieu d’un avertissement et empêchera l’opération de connexion de se terminer.
Corrections de bogues¶
Correction des bogues du registre des modèles :
Correction d’un bogue dans lequel le fait de connecter les modèles PyTorch et TensorFlow provoquait des
UnboundLocalError: local variable 'multiple_inputs' referenced before assignment.
Nouvelles fonctionnalités¶
Les fonctions du nouveau modèle de registre :
Activez automatiquement l’explicabilité pour les modèles qui peuvent être déployés dans un entrepôt.
Nouvelles fonctions d’explicabilité :
Nouvelles fonctions de visualisation dans
snowflake.ml.monitoring
: explications des tracés dans les notebooks.Prise en charge des transformations catégorielles dans les pipelines scikit-learn.
Nouvelles fonctions Modeling :
Prise en charge des types catégoriels pour les entrées de
xgboost.DMatrix
dans les modèles XGBoost.
Version 1.8.3 (2025-04-28)¶
Nouvelles fonctionnalités¶
Les fonctions du nouveau modèle de registre :
La valeur par défaut est une image de conteneur CUDA, si elle est disponible, lorsque l’on connecte un modèle à capacité GPU pour le déploiement vers Container Runtime pour ML.
Les versions du modèle disposent d’une méthode
run_job
qui exécute les méthodes d’inférence sous la forme d’une tâche Snowpark Container Services à nœud unique. Cette méthode est disponible pour tous les modèles, y compris ceux qui ne sont pas déployés dans Container Runtime pour ML.La plateforme cible est par défaut un entrepôt Snowflake lorsque vous connectez un modèle partitionné.
Version 1.8.2 (2025-04-15)¶
Nouvelles fonctionnalités¶
L’API des tâches ML, qui vous permet d’exécuter du code sur Container Runtime pour ML à partir de votre station de travail locale, est disponible en aperçu. En conséquence, la documentation relative à cet API est disponible dans la référence de l’API ML Snowflake, et les modifications apportées à l’API figurent dans les présentes notes de version. Les nouvelles fonctions de l’API des tâches ML peuvent ne pas apparaître ici tant qu’elles n’ont pas été annoncées publiquement, mais elles apparaissent dans l’API de référence.
Les fonctions du nouveau modèle de registre :
Vous pouvez spécifier le chemin d’écriture des fichiers de versions de modèles qui sont stockés dans la zone de préparation Snowflake du modèle en utilisant l’option
save_location
dans la méthodelog_model
.Lorsque vous connectez des modèles dans Container Runtime pour ML, les dépendances des modèles sont désormais incluses par défaut dans
pip_requirements
.
Version 1.8.1 (2025-03-20)¶
Corrections de bogues¶
Correction des bogues du registre des modèles :
Correction de l’erreur
unsupported model type
lorsque l’on connecte un modèle scikit-learn avec une méthode d’inférencescore_samples
.Correction de l’échec de la création d’un service d’inférence sur un service suspendu existant.
Nouvelles fonctionnalités¶
Les fonctions du nouveau modèle de registre :
La création d’une copie d’une version de modèle à l’aide de
log_model
avec des arguments non pris en charge soulève désormais une exception.
Version 1.8.0 (2025-03-20)¶
Changements de comportement¶
Modifications du comportement du registre de modèles :
Les signatures inférées automatiquement dans
transformers.Pipeline
ont été modifiées pour utiliser la classe de tâcheFeatureGroupSpec
, y compris :Signature pour les tâches de masquage :
ModelSignature( inputs=[ FeatureSpec(name="inputs", dtype=DataType.STRING), ], outputs=[ FeatureSpec(name="outputs", dtype=DataType.STRING), ], )
ModelSignature( inputs=[ FeatureSpec(name="inputs", dtype=DataType.STRING), ], outputs=[ FeatureGroupSpec( name="outputs", specs=[ FeatureSpec(name="sequence", dtype=DataType.STRING), FeatureSpec(name="score", dtype=DataType.DOUBLE), FeatureSpec(name="token", dtype=DataType.INT64), FeatureSpec(name="token_str", dtype=DataType.STRING), ], shape=(-1,), ), ], )
Signature pour les tâches de classification des jetons :
ModelSignature( inputs=[ FeatureSpec(name="inputs", dtype=DataType.STRING), ], outputs=[ FeatureSpec(name="outputs", dtype=DataType.STRING), ], )
ModelSignature( inputs=[FeatureSpec(name="inputs", dtype=DataType.STRING)], outputs=[ FeatureGroupSpec( name="outputs", specs=[ FeatureSpec(name="word", dtype=DataType.STRING), FeatureSpec(name="score", dtype=DataType.DOUBLE), FeatureSpec(name="entity", dtype=DataType.STRING), FeatureSpec(name="index", dtype=DataType.INT64), FeatureSpec(name="start", dtype=DataType.INT64), FeatureSpec(name="end", dtype=DataType.INT64), ], shape=(-1,), ), ], )
Signature pour les tâches de réponse aux questions :
ModelSignature( inputs=[ FeatureSpec(name="question", dtype=DataType.STRING), FeatureSpec(name="context", dtype=DataType.STRING), ], outputs=[ FeatureSpec(name="outputs", dtype=DataType.STRING), ], )
ModelSignature( inputs=[ FeatureSpec(name="question", dtype=DataType.STRING), FeatureSpec(name="context", dtype=DataType.STRING), ], outputs=[ FeatureGroupSpec( name="answers", specs=[ FeatureSpec(name="score", dtype=DataType.DOUBLE), FeatureSpec(name="start", dtype=DataType.INT64), FeatureSpec(name="end", dtype=DataType.INT64), FeatureSpec(name="answer", dtype=DataType.STRING), ], shape=(-1,), ), ], )
Signature pour les tâches de questions-réponses lorsque
top_k
est supérieur à 1 :ModelSignature( inputs=[ FeatureSpec(name="question", dtype=DataType.STRING), FeatureSpec(name="context", dtype=DataType.STRING), ], outputs=[ FeatureSpec(name="outputs", dtype=DataType.STRING), ], )
ModelSignature( inputs=[ FeatureSpec(name="question", dtype=DataType.STRING), FeatureSpec(name="context", dtype=DataType.STRING), ], outputs=[ FeatureGroupSpec( name="answers", specs=[ FeatureSpec(name="score", dtype=DataType.DOUBLE), FeatureSpec(name="start", dtype=DataType.INT64), FeatureSpec(name="end", dtype=DataType.INT64), FeatureSpec(name="answer", dtype=DataType.STRING), ], shape=(-1,), ), ], )
Signature pour les tâches de classification de texte lorsque
top_k
estNone
:ModelSignature( inputs=[ FeatureSpec(name="text", dtype=DataType.STRING), FeatureSpec(name="text_pair", dtype=DataType.STRING), ], outputs=[ FeatureSpec(name="label", dtype=DataType.STRING), FeatureSpec(name="score", dtype=DataType.DOUBLE), ], )
ModelSignature( inputs=[ FeatureSpec(name="text", dtype=DataType.STRING), ], outputs=[ FeatureSpec(name="label", dtype=DataType.STRING), FeatureSpec(name="score", dtype=DataType.DOUBLE), ], )
Signature pour les tâches de classification de texte lorsque
top_k
n’est pasNone
:ModelSignature( inputs=[ FeatureSpec(name="text", dtype=DataType.STRING), FeatureSpec(name="text_pair", dtype=DataType.STRING), ], outputs=[ FeatureSpec(name="outputs", dtype=DataType.STRING), ], )
ModelSignature( inputs=[ FeatureSpec(name="text", dtype=DataType.STRING), ], outputs=[ FeatureGroupSpec( name="labels", specs=[ FeatureSpec(name="label", dtype=DataType.STRING), FeatureSpec(name="score", dtype=DataType.DOUBLE), ], shape=(-1,), ), ], )
Signature pour les tâches de génération de texte :
ModelSignature( inputs=[FeatureSpec(name="inputs", dtype=DataType.STRING)], outputs=[ FeatureSpec(name="outputs", dtype=DataType.STRING), ], )
ModelSignature( inputs=[ FeatureGroupSpec( name="inputs", specs=[ FeatureSpec(name="role", dtype=DataType.STRING), FeatureSpec(name="content", dtype=DataType.STRING), ], shape=(-1,), ), ], outputs=[ FeatureGroupSpec( name="outputs", specs=[ FeatureSpec(name="generated_text", dtype=DataType.STRING), ], shape=(-1,), ) ], )
PyTorch et TensorFlow attendent désormais par défaut une seule entrée et une seule sortie de tenseur lorsqu’ils sont connectés au registre des modèles. Pour utiliser plusieurs tenseurs (comportement antérieur), définissez
options={"multiple_inputs": True}
.Exemple avec une seule entrée de tenseur :
import torch class TorchModel(torch.nn.Module): def __init__(self, n_input: int, n_hidden: int, n_out: int, dtype: torch.dtype = torch.float32) -> None: super().__init__() self.model = torch.nn.Sequential( torch.nn.Linear(n_input, n_hidden, dtype=dtype), torch.nn.ReLU(), torch.nn.Linear(n_hidden, n_out, dtype=dtype), torch.nn.Sigmoid(), ) def forward(self, tensor: torch.Tensor) -> torch.Tensor: return cast(torch.Tensor, self.model(tensor)) # Sample usage: data_x = torch.rand(size=(batch_size, n_input)) # Log model with single tensor reg.log_model( model=model, ..., sample_input_data=data_x ) # Run inference with single tensor mv.run(data_x)
Pour des entrées ou sorties multiples de tenseurs, utilisez :
reg.log_model( model=model, ..., sample_input_data=[data_x_1, data_x_2], options={"multiple_inputs": True} )
enable_explainability
est désormais défini par défaut surFalse
lorsque le modèle peut être déployé dans Snowpark Container Services.
Corrections de bogues¶
Correction de bogues de modélisation :
Correction d’un bogue dans certaines mesures qui permettait l’installation automatique d’une version non prise en charge de numpy dans la procédure stockée, ce qui entraînait une erreur numpy lors de l’exécution.
Correction des bogues du registre des modèles :
Correction d’un bogue entraînant un message d’erreur incorrect sur
Model does not have _is_inference_api
lors de l’affectation d’un modèle pris en charge en tant que propriété d’unCustomModel
.Correction d’un bogue où l’inférence ne fonctionne pas lorsque des modèles avec plus de 500 fonctions d’entrée sont déployés sur SPCS.
Nouvelles fonctionnalités¶
Les fonctions du nouveau modèle de registre :
Prise en charge de l’utilisation d’un seul
torch.Tensor
,tensorflow.Tensor
ettensorflow.Variable
comme données d’entrée ou de sortie.Prise en charge de
xgboost.DMatrix datatype
pour les modèles XGBoost.
Version 1.7.5 (2025-03-06)¶
snowflake-ml-python
1.7.5 ajoute la prise en charge de Python 3.12.
Corrections de bogues¶
Correction des bogues du registre des modèles :
Correction d’un problème de compatibilité où, lors de l’utilisation de
snowflake-ml-python
1.7.0 ou plus récent pour enregistrer un modèletensorflow.keras
avec keras 2.x, le modèle ne pouvait pas être exécuté dans Snowflake. Ce problème s’est produit lorsquerelax_version
est défini surTrue
(ou par défaut) et qu’une nouvelle version desnowflake-ml-python
est disponible. Si vous avez connecté un modèle affecté, vous pouvez le récupérer en le chargeant à l’aide deModelVerison.load
et en le connectant à nouveau avec la dernière version desnowflake-ml-python
.Suppression de la validation qui empêche les données qui n’ont pas de valeurs non nulles d’être transmises à
ModelVersion.run
.
Nouvelles fonctionnalités¶
Les fonctions du nouveau modèle de registre :
Prise en charge des configurations de modèles Hugging Face avec fonctionnalité de mappage automatique.
Prise en charge des modèles keras 3.x avec les backends tensorflow et pytorch.
Nouvelles fonctions d’explicabilité des modèles :
Prise en charge des pipelines sklearn natifs et
snowflake-ml-python
.
Version 1.7.4 (2025-01-28)¶
Important
snowflake.ml.fileset.FileSet
est obsolète et sera supprimée dans une prochaine version. Utilisez plutôt snowflake.ml.dataset.Dataset et snowflake.ml.data.DataConnector.
Corrections de bogues¶
Correctifs de bogues dans le registre :
Correction d’un problème dans lequel les pipelines Hugging Face étaient chargés en utilisant un type de données incorrect.
Correction d’un problème dans lequel une seule ligne était utilisée lors de l’inférence de la signature d’un modèle.
Nouvelles fonctionnalités¶
Nouvelles fonctions Cortex :
Nouvelle option
guardrails
sur la fonctionComplete
.
Version 1.7.3 (2025-01-09)¶
Mises à niveau des dépendances¶
fsspec
ets3fs
doivent être 2024.6.1 ou plus récents et antérieurs à 2026.mlflow
doit être 2.16.0 ou plus récent et inférieur à 3.
Nouvelles fonctionnalités¶
Nouvelles fonctions Cortex :
Les fonctions Cortex ont désormais des noms de type « snake_case ». Par exemple,
ClassifyText
devientclassify_text
. Les anciens noms « CamelCase » fonctionnent toujours, mais seront supprimés dans une version future.
Les fonctions du nouveau modèle de registre :
Le registre prend désormais en charge plus de 500 000 fonctions.
Ajout de l’argument
user_files
àRegistry.log_model
pour inclure des images ou d’autres fichiers avec le modèle.Ajout de la prise en charge des configurations de modèle Hugging Face avec la fonctionnalité de mappage automatique.
Nouvelles fonctions de données :
Ajout du constructeur
DataConnector.from_sql
.
Corrections de bogues¶
Correctifs de bogues dans le registre :
Correction d’un bogue qui survenait lorsque l’on fournissait un DataFrame pandas d’index sans plage comme entrée à
ModelVersion.run
.Amélioration de la génération aléatoire de noms de registre de modèles pour éviter les collisions.
Correction d’un problème lors de l’inférence d’une signature ou de l’exécution d’une inférence avec Snowpark DataFrame qui a une colonne dont le type est ARRAY et qui contient une valeur NULL.
ModelVersion.run
accepte désormais un nom de service entièrement qualifié (complet).Correction d’une erreur dans
log_model
pour tous les modèles scikit-learn avec seulement un prétraitement des données, y compris les modèles de pipeline avec prétraitement uniquement.
Correctif de bogues liés à la surveillance :
Correction d’un problème lors de la création de moniteurs utilisant des noms entièrement qualifiés (complets).