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_inference_api est obsolète et sera supprimé dans une prochaine version. Utilisez custom_model.partitioned_api à la place.

Version 1.15.0 (29-09-2025)

Changements de comportement

Modifications du comportement du registre de modèles :

  • Suppression de la prise en charge du type de tâche conversational obsolète pour les modèles Huggingface. Ce type de tâche a été abandonné par HuggingFace depuis un certain temps et doit être supprimé de son API dans un avenir proche.

Version 1.14.0 (18-09-2025)

Nouvelles fonctionnalités

Nouvelles fonctionnalités de ML Jobs :

  • L’argument additional_payloads des méthodes MLJob.submit_* a été renommé imports pour mieux refléter son objectif. additional_payloads est obsolète et sera supprimé dans une prochaine version.

Version 1.13.0 (11-09-2025)

Nouvelles fonctionnalités

Les fonctions du nouveau modèle de registre :

  • Vous pouvez désormais enregistrer un modèle HuggingFace sans avoir à charger le modèle en mémoire à l’aide de huggingface_pipeline.HuggingFacePipelineModel. Nécessite le paquet huggingface_hub. Pour désactiver la fonctionnalité de téléchargement du référentiel HuggingFace, couvrez download_snapshot=False lors de l’instanciation de huggingface_pipeline.HuggingFacePipelineModel.

  • Vous pouvez désormais utiliser les modèles enable_categorical=True de XGBoostavec les DataFrames pandas.

  • Lors de l’établissement de la liste des services, le point de terminaison d’inférence PrivateLink apparaît dans la liste ModelVersion.

Version 1.12.0 (04-09-2025)

Corrections de bogues

Correction des bogues du registre des modèles :

  • Correction d’un problème où la représentation sous forme de chaîne des colonnes de sortie de type dictionnaire était créée de manière incorrecte lors de la désérialisation de la sortie structurée, perdant le type de données original.

  • Correction d’un problème de performance du serveur d’inférence pour les (500+ fonctionnalités) et les entrées JSON.

Nouvelles fonctionnalités

Les fonctions du nouveau modèle de registre :

  • Vous pouvez désormais enregistrer des modèles de génération de texte avec des signatures compatibles avec la signature compatible avec l’achèvement du chat OpenAI, comme le montre l’exemple suivant :

    from snowflake.ml.model import openai_signatures
    import pandas as pd
    
    mv = snowflake_registry.log_model(
        model=generator,
        model_name=...,
        ...,
        signatures=openai_signatures.OPENAI_CHAT_SIGNATURE,
    )
    
    # create a pd.DataFrame with openai.client.chat.completions arguments like below:
    x_df = pd.DataFrame.from_records(
        [
            {
                "messages": [
                    {"role": "system", "content": "Complete the sentence."},
                    {
                        "role": "user",
                        "content": "A descendant of the Lost City of Atlantis, who swam to Earth while saying, ",
                    },
                ],
                "max_completion_tokens": 250,
                "temperature": 0.9,
                "stop": None,
                "n": 3,
                "stream": False,
                "top_p": 1.0,
                "frequency_penalty": 0.1,
                "presence_penalty": 0.2,
            }
        ],
    )
    
    Copy

Nouvelles fonctionnalités de moniteurs de modèle :

  • Les moniteurs de modèles prennent désormais en charge les colonnes de segments pour permettre l’analyse filtrée, spécifiée dans le champ segment_columns dans les options sources du moniteur de modèles. Les colonnes de segment doivent exister dans la table source et être de type chaîne. Les méthodes add_segment_column et drop_segment_column sont fournies pour ajouter ou supprimer des colonnes de segments dans des moniteurs de modèles existants.

Version 1.11.0 (12-08-2025)

Nouvelles fonctionnalités

Les fonctions du nouveau modèle de registre :

  • L’argument image_repo devient facultatif dans ModelVersion.create_service. S’il n’est pas spécifié, un référentiel d’images par défaut est utilisé.

Corrections de bogues

ML Corrections de bogues de tâches :

  • Correction de TypeError: SnowflakeCursor.execute() got an unexpected keyword argument '_force_qmark_paramstyle' dans une procédure stockée.

  • Correction de Error: Unable to retrieve head IP address lorsque toutes les instances ne démarrent pas dans le délai imparti.

Version 1.10.0 (01-08-2025)

Nouvelles fonctionnalités

Les fonctions du nouveau modèle de registre :

  • Ajout de barres de progression pour ModelVersion.create_service et ModelVersion.log_model.

  • Les journaux provenant de ModelVersion.create_service sont maintenant rédigés dans un fichier. L’emplacement du fichier journal est indiqué dans la console.

Version 1.9.2 (28-07-2025)

Corrections de bogues

Corrections de bogues DataConnector :

  • Correction d’un problème qui provoquait des erreurs mentionnant self._session.

Correction des bogues du registre des modèles :

  • Correction d’un bogue lors de la transmission de None à un tableau (pd.dtype('O')) dans la signature du modèle et le gestionnaire de données pandas.

Version 1.9.1 (18-07-2025)

Corrections de bogues

Correction des bogues du registre des modèles :

  • Correction d’un bogue lors de la configuration du jeton PAD lorsque le modèle de génération de texte HuggingFacepossède plusieurs jetons EOS. Le gestionnaire choisit désormais le premier jeton EOS comme jeton PAD.

Nouvelles fonctionnalités

Nouvelles fonctionnalités DataConnector :

  • Les objets DataConnector peuvent maintenant être sérialisés (pickled).

Nouvelles fonctionnalités du jeu de données :

  • Les objets Dataset peuvent maintenant être sérialisés (pickled).

Les fonctions du nouveau modèle de registre :

  • Les modèles hébergés sur Snowpark Container Services prennent désormais en charge une entrée large (plus de 500 fonctions).

Version 1.9.0 (25-06-2025)

Changements de comportement

Modifications du comportement des tâches ML :

  • Suppression du paramètre scope de la méthode list_jobs.

  • Ajout d’une database optionnelle et de paramètres de schema à la méthode list_jobs.

  • La méthode list_jobs renvoie à présent un DataFrame pandas plutôt qu’un DataFrame Snowpark.

  • La méthode list_jobs renvoie à présent les colonnes suivantes : name, status, message, database_name, schema_name, owner, compute_pool, target_instances, created_time, et completed_time.

Modifications du comportement du registre de modèles :

  • Définition de la relax_version sur « false » lorsque pip_requirements est spécifié dans l’appel log_model.

  • UserWarning est levé uniquement sur les target_platforms spécifiées pour répondre aux avertissements erronés

Corrections de bogues

Correction des bogues du registre des modèles :

  • Correction de l’échec de conversion de DataFrame Snowpark vers un DataFrame pandas quand le paramètre QUOTED_IDENTIFIERS_IGNORE_CASE est activé.

  • Correction des entrées de journal UserWarning en doublon durant l’empaquetage du modèle.

Nouvelles fonctionnalités

Les fonctions du nouveau modèle de registre :

  • Nouvelles APIs pour représenter les plateformes cibles (snowflake.ml.model.target_platform.TargetPlatform), les constantes des plateformes cibles, et les tâches (snowflake.ml.model.task.Task).

  • L’argument target_platform dans la méthode log_model accepte désormais une constante TargetPlatformMode, qui peut être WAREHOUSE_ONLY, SNOWPARK_CONTAINER_SERVICES_ONLY, ou BOTH_WAREHOUSE_AND_SNOWPARK_CONTAINER_SERVICES.

Nouvelles fonctionnalités de ML Jobs :

  • Les arguments de soumission de tâches moins fréquemment utilisés ont été déplacés vers **kwargs.

  • Les métriques de plateforme sont activées par défaut.

Avec cette version, les APIs de ML Jobs à nœud unique sont maintenant stables et ont été désignés comme Généralement Disponibles.

Version 1.8.6 (18-06-2025)

Nouvelles fonctionnalités

Les fonctions du nouveau modèle de registre :

  • Ajout d’informations sur les conteneurs de service aux journaux

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 de ML Jobs, qui permet d’exécuter le code sur Container Runtime pour ML à partir de votre station de travail locale, est disponible en avant-première. En conséquence, la documentation pour cette API est disponible dans le Référentiel API ML Snowflake, et les modifications effectuées sur l’API apparaissent dans ces notes de version. Les nouvelles fonctionnalités dans l’API ML Jobs peuvent ne pas apparaître ici tant qu’elles ne sont pas annoncées publiquement, mais elles apparaissent dans le référentiel API.

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 effectivement utilisée lors de l’inférence d’une signature de 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).