Snowflake ML release notes

This article contains the release notes for the Snowflake ML, including the following when applicable:

  • Behavior changes

  • New features

  • Customer-facing bug fixes

Note

These notes do not include changes in features that have not been publicly announced. Such features might appear in the Snowflake ML source code but not in the public documentation.

See Snowflake ML: End-to-End Machine Learning for documentation.

Verifying the snowflake-ml-python package

All Snowflake packages are signed, allowing you to verify their origin. To verify the snowflake.ml.python package, follow the steps below:

  1. Install cosign. This example uses the Go installation: Installing cosign with Go.

  2. Download the file from a repository such as PyPi.

  3. Download a .sig file for that release from the GitHub releases page.

  4. Verify the signature using cosign. For example:

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

This example uses the library and signature for version 1.7.0 of the package. Use the filenames of the version you are verifying.

Deprecation notices

snowflake.ml.fileset.FileSet has been deprecated and will be removed in a future release. Use snowflake.ml.dataset.Dataset and snowflake.ml.data.DataConnector instead.

Version 1.8.0 (2025-03-20)

Behavior changes

Model Registry behavior changes:

  • Automatically-inferred signatures in transformers.Pipeline have been changed to use the FeatureGroupSpec task class, including:

    • Signature for fill-mask tasks:

        ModelSignature(
            inputs=[
                FeatureSpec(name="inputs", dtype=DataType.STRING),
            ],
            outputs=[
                FeatureSpec(name="outputs", dtype=DataType.STRING),
            ],
      )
      
      Copy
    • Signature for token classification tasks:

      ModelSignature(
          inputs=[
              FeatureSpec(name="inputs", dtype=DataType.STRING),
          ],
          outputs=[
              FeatureSpec(name="outputs", dtype=DataType.STRING),
          ],
      )
      
      Copy
    • Signature for question-answering tasks:

      ModelSignature(
          inputs=[
              FeatureSpec(name="question", dtype=DataType.STRING),
              FeatureSpec(name="context", dtype=DataType.STRING),
          ],
          outputs=[
              FeatureSpec(name="outputs", dtype=DataType.STRING),
          ],
      )
      
      Copy
    • Signature for question-answering tasks when top_k is greater than 1:

      ModelSignature(
          inputs=[
              FeatureSpec(name="question", dtype=DataType.STRING),
              FeatureSpec(name="context", dtype=DataType.STRING),
          ],
          outputs=[
              FeatureSpec(name="outputs", dtype=DataType.STRING),
          ],
      )
      
      Copy
    • Signature for text-classification tasks when top_k is 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 for text-classification tasks when top_k is not 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 for text-generation tasks:

      ModelSignature(
          inputs=[FeatureSpec(name="inputs", dtype=DataType.STRING)],
          outputs=[
              FeatureSpec(name="outputs", dtype=DataType.STRING),
          ],
      )
      
      Copy
  • PyTorch and TensorFlow models now expect a single tensor input and output by default when they are logged to the Model Registry. To use multiple tensors (previous behavior), set options={"multiple_inputs": True}.

    Example with single tensor input:

    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

    For multiple tensor inputs or outputs, use:

    reg.log_model(
        model=model,
        ...,
        sample_input_data=[data_x_1, data_x_2],
        options={"multiple_inputs": True}
    )
    
    Copy
  • enable_explainability now defaults to False when the model can be deployed to Snowpark Container Services.

Bug fixes

Modeling bug fixes:

  • Fix a bug in some metrics that allowed an unsupported version of numpy to be installed automatically in the stored procedure, resulting in a numpy error on execution.

Model Registry bug fixes:

  • Fix a bug that leads to incorrect Model does not have _is_inference_api error message when assigning a supported model as a property of a CustomModel.

  • Fix a bug where inference does not work when models with more than 500 input features are deployed to SPCS.

New features

New Model Registry features:

  • Support for using a single torch.Tensor, tensorflow.Tensor and tensorflow.Variable as input or output data.

  • Support for xgboost.DMatrix datatype for XGBoost models.

Version 1.7.5 (2025-03-06)

snowflake-ml-python 1.7.5 adds support for Python 3.12.

Bug fixes

Model Registry bug fixes:

  • Fixed a compatibility issue where, when using snowflake-ml-python 1.7.0 or later to save a tensorflow.keras model with keras 2.x, the model could not be run in Snowflake. This issue occurred when relax_version is set to True (or default) and a new version of snowflake-ml-python is available. If you have logged an affected model, you can recover it by loading it using ModelVerison.load and logging it again with the latest version of snowflake-ml-python.

  • Removed the validation that prevents data that does not have non-null values from being passed to ModelVersion.run.

New features

New Model Registry features:

  • Support for Hugging Face model configurations with auto-mapping functionality.

  • Support for keras 3.x models with tensorflow and pytorch backends.

New Model Explainability features:

  • Support for native and snowflake-ml-python sklearn pipelines.

Version 1.7.4 (2025-01-28)

Important

snowflake.ml.fileset.FileSet has been deprecated and will be removed in a future release. Use snowflake.ml.dataset.Dataset and snowflake.ml.data.DataConnector instead.

Bug fixes

Registry bug fixes:

  • Fixed an issue in which Hugging Face pipelines were loaded using an incorrect data type.

  • Fixed an issue in which only one row was actually used when infering a model signature.

New features

New Cortex features:

  • New guardrails option on the Complete function for enabling Cortex Guard.

Version 1.7.3 (2025-01-09)

Dependency upgrades

  • fsspec and s3fs must be 2024.6.1 or later and less than 2026.

  • mlflow must be 2.16.0 or later and less than 3.

New features

New Cortex features:

  • Cortex functions now have “snake_case” names. For example, ClassifyText is now classify_text. The old “CamelCase” names still work, but will be removed in a future release.

New Model Registry features:

  • Registry now supports more than 500,000 features.

  • Added user_files argument to Registry.log_model for including images or other files with the model.

  • Added support for handling Hugging Face model configurations with auto-mapping functionality.

New Data features:

  • Added the DataConnector.from_sql constructor.

Bug fixes

Registry bug fixes:

  • Fixed a bug that occurred when providing a non-range index pandas DataFrame as the input to ModelVersion.run.

  • Improved random model registry name generation to avoid collisions.

  • Fixed an issue when inferring a signature or running inference with Snowpark DataFrame that has a column whose type is ARRAY and contains a NULL value.

  • ModelVersion.run now accepts a fully-qualified service name.

  • Fixed an error in log_model for any scikit-learn models with only data preprocessing, including preprocessing-only pipeline models.

Monitoring bug fixes:

  • Fixed an issue with creating monitors using fully-qualified names.