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 :

  1. Installez cosign. Cet exemple utilise l’installation Go : Installation de cosign avec Go.

  2. Téléchargez le fichier à partir d’un référentiel tel que PyPi.

  3. Téléchargez un fichier .sig pour cette version à partir de la page GitHub releases.

  4. 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
Copy

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, utilisez classify_text au lieu de ClassifyText.

  • Le décorateur partitioned_inefrerence_api est obsolète et sera supprimé dans une prochaine version. Utilisez custom_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éthode log_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érence score_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âche FeatureGroupSpec, y compris :

    • Signature pour les tâches de masquage :

        ModelSignature(
            inputs=[
                FeatureSpec(name="inputs", dtype=DataType.STRING),
            ],
            outputs=[
                FeatureSpec(name="outputs", dtype=DataType.STRING),
            ],
      )
      
      Copy
    • Signature pour les tâches de classification des jetons :

      ModelSignature(
          inputs=[
              FeatureSpec(name="inputs", dtype=DataType.STRING),
          ],
          outputs=[
              FeatureSpec(name="outputs", dtype=DataType.STRING),
          ],
      )
      
      Copy
    • 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),
          ],
      )
      
      Copy
    • 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),
          ],
      )
      
      Copy
    • Signature pour les tâches de classification de texte lorsque top_k est None :

      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),
          ],
      )
      
      Copy
    • Signature pour les tâches de classification de texte lorsque top_k n’est pas None :

      ModelSignature(
          inputs=[
              FeatureSpec(name="text", dtype=DataType.STRING),
              FeatureSpec(name="text_pair", dtype=DataType.STRING),
          ],
          outputs=[
              FeatureSpec(name="outputs", dtype=DataType.STRING),
          ],
      )
      
      Copy
    • 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),
          ],
      )
      
      Copy
  • 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)
    
    Copy

    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}
    )
    
    Copy
  • enable_explainability est désormais défini par défaut sur False 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’un CustomModel.

  • 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 et tensorflow.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èle tensorflow.keras avec keras 2.x, le modèle ne pouvait pas être exécuté dans Snowflake. Ce problème s’est produit lorsque relax_version est défini sur True (ou par défaut) et qu’une nouvelle version de snowflake-ml-python est disponible. Si vous avez connecté un modèle affecté, vous pouvez le récupérer en le chargeant à l’aide de ModelVerison.load et en le connectant à nouveau avec la dernière version de snowflake-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 fonction Complete.

Version 1.7.3 (2025-01-09)

Mises à niveau des dépendances

  • fsspec et s3fs 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 devient classify_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).