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.The “CamelCase” function names in
snowflake.ml.cortex
have been deprecated and will be removed in a future release. Use the “snake_case” names for these functions instead. For example, useclassify_text
instead ofClassifyText
.The
partitioned_inefrerence_api
decorator has been deprecated and will be removed in a future release. Usecustom_model.partitioned_api
instead.
Version 1.8.4 (2025-05-12)¶
Behavior changes¶
ML Jobs behavior changes:
The
id
property is now the job’s fully-qualified name. A new property,name
, has been introduced to represent the ML Job name.The
list_jobs
method now returns the ML Job name instead of the job ID.
Model Registry behavior changes:
In
log_model
, enabling explainability when the model is deployed only to Snowpark Container Services is now an error instead of a warning and will prevent the log operation from completing.
Bug fixes¶
Model Registry bug fixes:
Fixed a bug in which logging PyTorch and TensorFlow models that caused
UnboundLocalError: local variable 'multiple_inputs' referenced before assignment.
New features¶
New Model Registry features:
Automatically enable explainability for models that can be deployed to a warehouse.
New Explainability features:
New visualization functions in
snowflake.ml.monitoring
plot explanations in notebooks.Support for categorical transforms in scikit-learn pipelines.
New Modeling features:
Support categorical types for
xgboost.DMatrix
inputs in XGBoost models.
Version 1.8.3 (2025-04-28)¶
New features¶
New Model Registry features:
Default to a CUDA container image, if available, when logging a GPU-capable model for deployment to Container Runtime for ML.
Model versions have a
run_job
method that runs inference methods as a single-node Snowpark Container Services job. This method is available for all models, including those that are not deployed to Container Runtime for ML.The target platform defaults to a Snowflake warehouse when logging a partitioned model.
Version 1.8.2 (2025-04-15)¶
New features¶
The ML Jobs API, which allows you to run code on Container Runtime for ML from your local workstation, is available in preview. Accordingly, documentation for this API is available in the Snowflake ML API Reference, and changes to the API appear in these release notes. New features in the ML Jobs API might not appear here until they are publicly announced, but they do appear in the API reference.
New Model Registry features:
You can specify the path to write the model versions files that are stored in the model’s Snowflake stage using the
save_location
option in thelog_model
method.When logging models in Container Runtime for ML, model dependencies are now included in
pip_requirements
by default.
Version 1.8.1 (2025-03-20)¶
Bug fixes¶
Model Registry bug fixes:
Fix
unsupported model type
error when logging a scikit-learn model with ascore_samples
inference method.Fix failure of inference service creation on an existing suspended service.
New features¶
New Model Registry features:
Creating a copy of a model version with
log_model
with unsupported arguments now raises an exception.
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.