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:
Install
cosign
. This example uses the Go installation: Installing cosign with Go.Download the file from a repository such as PyPi.
Download a
.sig
file for that release from the GitHub releases page.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
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 theFeatureGroupSpec
task class, including:Signature for fill-mask tasks:
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 for token classification tasks:
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 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), ], )
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 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), ], )
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 for text-classification tasks when
top_k
isNone
: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 for text-classification tasks when
top_k
is notNone
: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 for text-generation tasks:
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 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)
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} )
enable_explainability
now defaults toFalse
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 aCustomModel
.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
andtensorflow.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 atensorflow.keras
model with keras 2.x, the model could not be run in Snowflake. This issue occurred whenrelax_version
is set toTrue
(or default) and a new version ofsnowflake-ml-python
is available. If you have logged an affected model, you can recover it by loading it usingModelVerison.load
and logging it again with the latest version ofsnowflake-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 theComplete
function for enabling Cortex Guard.
Version 1.7.3 (2025-01-09)¶
Dependency upgrades¶
fsspec
ands3fs
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 nowclassify_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 toRegistry.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.