snowflake-ml-python 1.7.4__py3-none-any.whl → 1.8.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- snowflake/cortex/_complete.py +58 -3
- snowflake/ml/_internal/env_utils.py +64 -21
- snowflake/ml/_internal/file_utils.py +18 -4
- snowflake/ml/_internal/platform_capabilities.py +3 -0
- snowflake/ml/_internal/relax_version_strategy.py +16 -0
- snowflake/ml/_internal/telemetry.py +25 -0
- snowflake/ml/data/_internal/arrow_ingestor.py +1 -1
- snowflake/ml/feature_store/feature_store.py +18 -0
- snowflake/ml/feature_store/feature_view.py +46 -1
- snowflake/ml/fileset/fileset.py +0 -1
- snowflake/ml/jobs/_utils/constants.py +31 -1
- snowflake/ml/jobs/_utils/payload_utils.py +232 -72
- snowflake/ml/jobs/_utils/spec_utils.py +78 -38
- snowflake/ml/jobs/decorators.py +8 -25
- snowflake/ml/jobs/job.py +4 -4
- snowflake/ml/jobs/manager.py +5 -0
- snowflake/ml/model/_client/model/model_version_impl.py +1 -1
- snowflake/ml/model/_client/ops/model_ops.py +107 -14
- snowflake/ml/model/_client/ops/service_ops.py +1 -1
- snowflake/ml/model/_client/service/model_deployment_spec.py +7 -3
- snowflake/ml/model/_client/sql/model_version.py +58 -0
- snowflake/ml/model/_client/sql/service.py +8 -2
- snowflake/ml/model/_model_composer/model_composer.py +50 -3
- snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +4 -0
- snowflake/ml/model/_model_composer/model_manifest/model_manifest_schema.py +2 -1
- snowflake/ml/model/_model_composer/model_method/model_method.py +0 -1
- snowflake/ml/model/_packager/model_env/model_env.py +49 -29
- snowflake/ml/model/_packager/model_handlers/_utils.py +8 -4
- snowflake/ml/model/_packager/model_handlers/huggingface_pipeline.py +44 -24
- snowflake/ml/model/_packager/model_handlers/keras.py +226 -0
- snowflake/ml/model/_packager/model_handlers/pytorch.py +51 -20
- snowflake/ml/model/_packager/model_handlers/sklearn.py +25 -3
- snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +73 -21
- snowflake/ml/model/_packager/model_handlers/tensorflow.py +70 -72
- snowflake/ml/model/_packager/model_handlers/torchscript.py +49 -20
- snowflake/ml/model/_packager/model_handlers/xgboost.py +2 -2
- snowflake/ml/model/_packager/model_handlers_migrator/pytorch_migrator_2023_12_01.py +20 -0
- snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2023_12_01.py +48 -0
- snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2025_01_01.py +19 -0
- snowflake/ml/model/_packager/model_handlers_migrator/torchscript_migrator_2023_12_01.py +20 -0
- snowflake/ml/model/_packager/model_meta/_packaging_requirements.py +0 -1
- snowflake/ml/model/_packager/model_meta/model_meta.py +6 -2
- snowflake/ml/model/_packager/model_meta/model_meta_schema.py +16 -0
- snowflake/ml/model/_packager/model_packager.py +3 -5
- snowflake/ml/model/_packager/model_runtime/_snowml_inference_alternative_requirements.py +1 -2
- snowflake/ml/model/_packager/model_runtime/model_runtime.py +8 -1
- snowflake/ml/model/_packager/model_task/model_task_utils.py +5 -1
- snowflake/ml/model/_signatures/builtins_handler.py +20 -9
- snowflake/ml/model/_signatures/core.py +54 -33
- snowflake/ml/model/_signatures/dmatrix_handler.py +98 -0
- snowflake/ml/model/_signatures/numpy_handler.py +12 -20
- snowflake/ml/model/_signatures/pandas_handler.py +28 -37
- snowflake/ml/model/_signatures/pytorch_handler.py +57 -41
- snowflake/ml/model/_signatures/snowpark_handler.py +0 -12
- snowflake/ml/model/_signatures/tensorflow_handler.py +61 -67
- snowflake/ml/model/_signatures/utils.py +120 -8
- snowflake/ml/model/custom_model.py +13 -4
- snowflake/ml/model/model_signature.py +39 -13
- snowflake/ml/model/type_hints.py +28 -2
- snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +14 -1
- snowflake/ml/modeling/metrics/ranking.py +3 -0
- snowflake/ml/modeling/metrics/regression.py +3 -0
- snowflake/ml/modeling/pipeline/pipeline.py +18 -1
- snowflake/ml/modeling/preprocessing/k_bins_discretizer.py +1 -1
- snowflake/ml/modeling/preprocessing/polynomial_features.py +2 -2
- snowflake/ml/registry/_manager/model_manager.py +55 -7
- snowflake/ml/registry/registry.py +52 -4
- snowflake/ml/version.py +1 -1
- {snowflake_ml_python-1.7.4.dist-info → snowflake_ml_python-1.8.0.dist-info}/METADATA +336 -27
- {snowflake_ml_python-1.7.4.dist-info → snowflake_ml_python-1.8.0.dist-info}/RECORD +73 -66
- {snowflake_ml_python-1.7.4.dist-info → snowflake_ml_python-1.8.0.dist-info}/WHEEL +1 -1
- {snowflake_ml_python-1.7.4.dist-info → snowflake_ml_python-1.8.0.dist-info/licenses}/LICENSE.txt +0 -0
- {snowflake_ml_python-1.7.4.dist-info → snowflake_ml_python-1.8.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: snowflake-ml-python
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.8.0
|
4
4
|
Summary: The machine learning client library that is used for interacting with Snowflake to build machine learning solutions.
|
5
5
|
Author-email: "Snowflake, Inc" <support@snowflake.com>
|
6
6
|
License:
|
@@ -223,13 +223,14 @@ Classifier: Operating System :: OS Independent
|
|
223
223
|
Classifier: Programming Language :: Python :: 3.9
|
224
224
|
Classifier: Programming Language :: Python :: 3.10
|
225
225
|
Classifier: Programming Language :: Python :: 3.11
|
226
|
+
Classifier: Programming Language :: Python :: 3.12
|
226
227
|
Classifier: Topic :: Database
|
227
228
|
Classifier: Topic :: Software Development
|
228
229
|
Classifier: Topic :: Software Development :: Libraries
|
229
230
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
230
231
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
231
232
|
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
232
|
-
Requires-Python: <3.
|
233
|
+
Requires-Python: <3.13,>=3.9
|
233
234
|
Description-Content-Type: text/markdown
|
234
235
|
License-File: LICENSE.txt
|
235
236
|
Requires-Dist: absl-py<2,>=0.15
|
@@ -250,46 +251,48 @@ Requires-Dist: retrying<2,>=1.3.3
|
|
250
251
|
Requires-Dist: s3fs<2026,>=2024.6.1
|
251
252
|
Requires-Dist: scikit-learn<1.6,>=1.4
|
252
253
|
Requires-Dist: scipy<2,>=1.9
|
253
|
-
Requires-Dist: snowflake-connector-python[pandas]<4,>=3.
|
254
|
+
Requires-Dist: snowflake-connector-python[pandas]<4,>=3.12.0
|
254
255
|
Requires-Dist: snowflake-snowpark-python!=1.26.0,<2,>=1.17.0
|
255
256
|
Requires-Dist: sqlparse<1,>=0.4
|
256
257
|
Requires-Dist: typing-extensions<5,>=4.1.0
|
257
258
|
Requires-Dist: xgboost<3,>=1.7.3
|
258
259
|
Provides-Extra: all
|
259
260
|
Requires-Dist: catboost<2,>=1.2.0; extra == "all"
|
260
|
-
Requires-Dist:
|
261
|
+
Requires-Dist: keras<4,>=2.0.0; extra == "all"
|
261
262
|
Requires-Dist: lightgbm<5,>=4.1.0; extra == "all"
|
262
263
|
Requires-Dist: mlflow<3,>=2.16.0; extra == "all"
|
263
|
-
Requires-Dist:
|
264
|
-
Requires-Dist:
|
265
|
-
Requires-Dist: sentencepiece<1,>=0.1.95; extra == "all"
|
264
|
+
Requires-Dist: sentence-transformers<4,>=2.7.0; extra == "all"
|
265
|
+
Requires-Dist: sentencepiece<0.2.0,>=0.1.95; extra == "all"
|
266
266
|
Requires-Dist: shap<1,>=0.46.0; extra == "all"
|
267
|
-
Requires-Dist: tensorflow<3,>=2.
|
268
|
-
Requires-Dist: tokenizers<1,>=0.
|
269
|
-
Requires-Dist: torch<
|
267
|
+
Requires-Dist: tensorflow<3,>=2.17.0; extra == "all"
|
268
|
+
Requires-Dist: tokenizers<1,>=0.15.1; extra == "all"
|
269
|
+
Requires-Dist: torch<3,>=2.0.1; extra == "all"
|
270
270
|
Requires-Dist: torchdata<1,>=0.4; extra == "all"
|
271
|
-
Requires-Dist: transformers<5,>=4.
|
271
|
+
Requires-Dist: transformers<5,>=4.39.3; extra == "all"
|
272
272
|
Provides-Extra: catboost
|
273
273
|
Requires-Dist: catboost<2,>=1.2.0; extra == "catboost"
|
274
|
+
Provides-Extra: keras
|
275
|
+
Requires-Dist: keras<4,>=2.0.0; extra == "keras"
|
276
|
+
Requires-Dist: tensorflow<3,>=2.17.0; extra == "keras"
|
277
|
+
Requires-Dist: torch<3,>=2.0.1; extra == "keras"
|
274
278
|
Provides-Extra: lightgbm
|
275
279
|
Requires-Dist: lightgbm<5,>=4.1.0; extra == "lightgbm"
|
276
|
-
Provides-Extra: llm
|
277
|
-
Requires-Dist: peft<1,>=0.5.0; extra == "llm"
|
278
280
|
Provides-Extra: mlflow
|
279
281
|
Requires-Dist: mlflow<3,>=2.16.0; extra == "mlflow"
|
280
282
|
Provides-Extra: shap
|
281
283
|
Requires-Dist: shap<1,>=0.46.0; extra == "shap"
|
282
284
|
Provides-Extra: tensorflow
|
283
|
-
Requires-Dist: tensorflow<3,>=2.
|
285
|
+
Requires-Dist: tensorflow<3,>=2.17.0; extra == "tensorflow"
|
284
286
|
Provides-Extra: torch
|
285
|
-
Requires-Dist: torch<
|
287
|
+
Requires-Dist: torch<3,>=2.0.1; extra == "torch"
|
286
288
|
Requires-Dist: torchdata<1,>=0.4; extra == "torch"
|
287
289
|
Provides-Extra: transformers
|
288
|
-
Requires-Dist:
|
289
|
-
Requires-Dist:
|
290
|
-
Requires-Dist:
|
291
|
-
Requires-Dist:
|
292
|
-
Requires-Dist: transformers<5,>=4.
|
290
|
+
Requires-Dist: sentence-transformers<4,>=2.7.0; extra == "transformers"
|
291
|
+
Requires-Dist: sentencepiece<0.2.0,>=0.1.95; extra == "transformers"
|
292
|
+
Requires-Dist: tokenizers<1,>=0.15.1; extra == "transformers"
|
293
|
+
Requires-Dist: torch<3,>=2.0.1; extra == "transformers"
|
294
|
+
Requires-Dist: transformers<5,>=4.39.3; extra == "transformers"
|
295
|
+
Dynamic: license-file
|
293
296
|
|
294
297
|
# Snowpark ML
|
295
298
|
|
@@ -346,7 +349,7 @@ If you don't have a Snowflake account yet, you can [sign up for a 30-day free tr
|
|
346
349
|
Follow the [installation instructions](https://docs.snowflake.com/en/developer-guide/snowpark-ml/index#installing-snowpark-ml)
|
347
350
|
in the Snowflake documentation.
|
348
351
|
|
349
|
-
Python versions 3.9 to 3.
|
352
|
+
Python versions 3.9 to 3.12 are supported. You can use [miniconda](https://docs.conda.io/en/latest/miniconda.html) or
|
350
353
|
[anaconda](https://www.anaconda.com/) to create a Conda environment (recommended),
|
351
354
|
or [virtualenv](https://docs.python.org/3/tutorial/venv.html) to create a virtual environment.
|
352
355
|
|
@@ -399,28 +402,329 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
399
402
|
|
400
403
|
# Release History
|
401
404
|
|
402
|
-
## 1.
|
405
|
+
## 1.8.0
|
406
|
+
|
407
|
+
### Bug Fixes
|
408
|
+
|
409
|
+
- Modeling: Fix a bug in some metrics that allowed an unsupported version of numpy to be installed
|
410
|
+
automatically in the stored procedure, resulting in a numpy error on execution
|
411
|
+
- Registry: Fix a bug that leads to incorrect `Model is does not have _is_inference_api` error message when assigning
|
412
|
+
a supported model as a property of a CustomModel.
|
413
|
+
- Registry: Fix a bug that inference is not working when models with more than 500 input features
|
414
|
+
are deployed to SPCS.
|
415
|
+
|
416
|
+
### Behavior Change
|
417
|
+
|
418
|
+
- Registry: With FeatureGroupSpec support, auto inferred model signature for `transformers.Pipeline` models have been
|
419
|
+
updated, including:
|
420
|
+
- Signature for fill-mask task has been changed from
|
421
|
+
|
422
|
+
```python
|
423
|
+
ModelSignature(
|
424
|
+
inputs=[
|
425
|
+
FeatureSpec(name="inputs", dtype=DataType.STRING),
|
426
|
+
],
|
427
|
+
outputs=[
|
428
|
+
FeatureSpec(name="outputs", dtype=DataType.STRING),
|
429
|
+
],
|
430
|
+
)
|
431
|
+
```
|
432
|
+
|
433
|
+
to
|
434
|
+
|
435
|
+
```python
|
436
|
+
ModelSignature(
|
437
|
+
inputs=[
|
438
|
+
FeatureSpec(name="inputs", dtype=DataType.STRING),
|
439
|
+
],
|
440
|
+
outputs=[
|
441
|
+
FeatureGroupSpec(
|
442
|
+
name="outputs",
|
443
|
+
specs=[
|
444
|
+
FeatureSpec(name="sequence", dtype=DataType.STRING),
|
445
|
+
FeatureSpec(name="score", dtype=DataType.DOUBLE),
|
446
|
+
FeatureSpec(name="token", dtype=DataType.INT64),
|
447
|
+
FeatureSpec(name="token_str", dtype=DataType.STRING),
|
448
|
+
],
|
449
|
+
shape=(-1,),
|
450
|
+
),
|
451
|
+
],
|
452
|
+
)
|
453
|
+
```
|
454
|
+
|
455
|
+
- Signature for token-classification task has been changed from
|
456
|
+
|
457
|
+
```python
|
458
|
+
ModelSignature(
|
459
|
+
inputs=[
|
460
|
+
FeatureSpec(name="inputs", dtype=DataType.STRING),
|
461
|
+
],
|
462
|
+
outputs=[
|
463
|
+
FeatureSpec(name="outputs", dtype=DataType.STRING),
|
464
|
+
],
|
465
|
+
)
|
466
|
+
```
|
467
|
+
|
468
|
+
to
|
469
|
+
|
470
|
+
```python
|
471
|
+
ModelSignature(
|
472
|
+
inputs=[FeatureSpec(name="inputs", dtype=DataType.STRING)],
|
473
|
+
outputs=[
|
474
|
+
FeatureGroupSpec(
|
475
|
+
name="outputs",
|
476
|
+
specs=[
|
477
|
+
FeatureSpec(name="word", dtype=DataType.STRING),
|
478
|
+
FeatureSpec(name="score", dtype=DataType.DOUBLE),
|
479
|
+
FeatureSpec(name="entity", dtype=DataType.STRING),
|
480
|
+
FeatureSpec(name="index", dtype=DataType.INT64),
|
481
|
+
FeatureSpec(name="start", dtype=DataType.INT64),
|
482
|
+
FeatureSpec(name="end", dtype=DataType.INT64),
|
483
|
+
],
|
484
|
+
shape=(-1,),
|
485
|
+
),
|
486
|
+
],
|
487
|
+
)
|
488
|
+
```
|
489
|
+
|
490
|
+
- Signature for question-answering task when top_k is larger than 1 has been changed from
|
491
|
+
|
492
|
+
```python
|
493
|
+
ModelSignature(
|
494
|
+
inputs=[
|
495
|
+
FeatureSpec(name="question", dtype=DataType.STRING),
|
496
|
+
FeatureSpec(name="context", dtype=DataType.STRING),
|
497
|
+
],
|
498
|
+
outputs=[
|
499
|
+
FeatureSpec(name="outputs", dtype=DataType.STRING),
|
500
|
+
],
|
501
|
+
)
|
502
|
+
```
|
503
|
+
|
504
|
+
to
|
505
|
+
|
506
|
+
```python
|
507
|
+
ModelSignature(
|
508
|
+
inputs=[
|
509
|
+
FeatureSpec(name="question", dtype=DataType.STRING),
|
510
|
+
FeatureSpec(name="context", dtype=DataType.STRING),
|
511
|
+
],
|
512
|
+
outputs=[
|
513
|
+
FeatureGroupSpec(
|
514
|
+
name="answers",
|
515
|
+
specs=[
|
516
|
+
FeatureSpec(name="score", dtype=DataType.DOUBLE),
|
517
|
+
FeatureSpec(name="start", dtype=DataType.INT64),
|
518
|
+
FeatureSpec(name="end", dtype=DataType.INT64),
|
519
|
+
FeatureSpec(name="answer", dtype=DataType.STRING),
|
520
|
+
],
|
521
|
+
shape=(-1,),
|
522
|
+
),
|
523
|
+
],
|
524
|
+
)
|
525
|
+
```
|
526
|
+
|
527
|
+
- Signature for text-classification task when top_k is `None` has been changed from
|
528
|
+
|
529
|
+
```python
|
530
|
+
ModelSignature(
|
531
|
+
inputs=[
|
532
|
+
FeatureSpec(name="text", dtype=DataType.STRING),
|
533
|
+
FeatureSpec(name="text_pair", dtype=DataType.STRING),
|
534
|
+
],
|
535
|
+
outputs=[
|
536
|
+
FeatureSpec(name="label", dtype=DataType.STRING),
|
537
|
+
FeatureSpec(name="score", dtype=DataType.DOUBLE),
|
538
|
+
],
|
539
|
+
)
|
540
|
+
```
|
541
|
+
|
542
|
+
to
|
543
|
+
|
544
|
+
```python
|
545
|
+
ModelSignature(
|
546
|
+
inputs=[
|
547
|
+
FeatureSpec(name="text", dtype=DataType.STRING),
|
548
|
+
],
|
549
|
+
outputs=[
|
550
|
+
FeatureSpec(name="label", dtype=DataType.STRING),
|
551
|
+
FeatureSpec(name="score", dtype=DataType.DOUBLE),
|
552
|
+
],
|
553
|
+
)
|
554
|
+
```
|
555
|
+
|
556
|
+
- Signature for text-classification task when top_k is not `None` has been changed from
|
557
|
+
|
558
|
+
```python
|
559
|
+
ModelSignature(
|
560
|
+
inputs=[
|
561
|
+
FeatureSpec(name="text", dtype=DataType.STRING),
|
562
|
+
FeatureSpec(name="text_pair", dtype=DataType.STRING),
|
563
|
+
],
|
564
|
+
outputs=[
|
565
|
+
FeatureSpec(name="outputs", dtype=DataType.STRING),
|
566
|
+
],
|
567
|
+
)
|
568
|
+
```
|
569
|
+
|
570
|
+
to
|
571
|
+
|
572
|
+
```python
|
573
|
+
ModelSignature(
|
574
|
+
inputs=[
|
575
|
+
FeatureSpec(name="text", dtype=DataType.STRING),
|
576
|
+
],
|
577
|
+
outputs=[
|
578
|
+
FeatureGroupSpec(
|
579
|
+
name="labels",
|
580
|
+
specs=[
|
581
|
+
FeatureSpec(name="label", dtype=DataType.STRING),
|
582
|
+
FeatureSpec(name="score", dtype=DataType.DOUBLE),
|
583
|
+
],
|
584
|
+
shape=(-1,),
|
585
|
+
),
|
586
|
+
],
|
587
|
+
)
|
588
|
+
```
|
589
|
+
|
590
|
+
- Signature for text-generation task has been changed from
|
591
|
+
|
592
|
+
```python
|
593
|
+
ModelSignature(
|
594
|
+
inputs=[FeatureSpec(name="inputs", dtype=DataType.STRING)],
|
595
|
+
outputs=[
|
596
|
+
FeatureSpec(name="outputs", dtype=DataType.STRING),
|
597
|
+
],
|
598
|
+
)
|
599
|
+
```
|
600
|
+
|
601
|
+
to
|
602
|
+
|
603
|
+
```python
|
604
|
+
ModelSignature(
|
605
|
+
inputs=[
|
606
|
+
FeatureGroupSpec(
|
607
|
+
name="inputs",
|
608
|
+
specs=[
|
609
|
+
FeatureSpec(name="role", dtype=DataType.STRING),
|
610
|
+
FeatureSpec(name="content", dtype=DataType.STRING),
|
611
|
+
],
|
612
|
+
shape=(-1,),
|
613
|
+
),
|
614
|
+
],
|
615
|
+
outputs=[
|
616
|
+
FeatureGroupSpec(
|
617
|
+
name="outputs",
|
618
|
+
specs=[
|
619
|
+
FeatureSpec(name="generated_text", dtype=DataType.STRING),
|
620
|
+
],
|
621
|
+
shape=(-1,),
|
622
|
+
)
|
623
|
+
],
|
624
|
+
)
|
625
|
+
```
|
626
|
+
|
627
|
+
- Registry: PyTorch and TensorFlow models now expect a single tensor input/output by default when logging to Model
|
628
|
+
Registry. To use multiple tensors (previous behavior), set `options={"multiple_inputs": True}`.
|
629
|
+
|
630
|
+
Example with single tensor input:
|
631
|
+
|
632
|
+
```python
|
633
|
+
import torch
|
634
|
+
|
635
|
+
class TorchModel(torch.nn.Module):
|
636
|
+
def __init__(self, n_input: int, n_hidden: int, n_out: int, dtype: torch.dtype = torch.float32) -> None:
|
637
|
+
super().__init__()
|
638
|
+
self.model = torch.nn.Sequential(
|
639
|
+
torch.nn.Linear(n_input, n_hidden, dtype=dtype),
|
640
|
+
torch.nn.ReLU(),
|
641
|
+
torch.nn.Linear(n_hidden, n_out, dtype=dtype),
|
642
|
+
torch.nn.Sigmoid(),
|
643
|
+
)
|
644
|
+
|
645
|
+
def forward(self, tensor: torch.Tensor) -> torch.Tensor:
|
646
|
+
return cast(torch.Tensor, self.model(tensor))
|
647
|
+
|
648
|
+
# Sample usage:
|
649
|
+
data_x = torch.rand(size=(batch_size, n_input))
|
650
|
+
|
651
|
+
# Log model with single tensor
|
652
|
+
reg.log_model(
|
653
|
+
model=model,
|
654
|
+
...,
|
655
|
+
sample_input_data=data_x
|
656
|
+
)
|
657
|
+
|
658
|
+
# Run inference with single tensor
|
659
|
+
mv.run(data_x)
|
660
|
+
```
|
661
|
+
|
662
|
+
For multiple tensor inputs/outputs, use:
|
663
|
+
|
664
|
+
```python
|
665
|
+
reg.log_model(
|
666
|
+
model=model,
|
667
|
+
...,
|
668
|
+
sample_input_data=[data_x_1, data_x_2],
|
669
|
+
options={"multiple_inputs": True}
|
670
|
+
)
|
671
|
+
```
|
672
|
+
|
673
|
+
- Registry: Default `enable_explainability` to False when the model can be deployed to Snowpark Container Services.
|
674
|
+
|
675
|
+
### New Features
|
676
|
+
|
677
|
+
- Registry: Added support to single `torch.Tensor`, `tensorflow.Tensor` and `tensorflow.Variable` as input or output
|
678
|
+
data.
|
679
|
+
- Registry: Support [`xgboost.DMatrix`](https://xgboost.readthedocs.io/en/stable/python/python_api.html#xgboost.DMatrix)
|
680
|
+
datatype for XGBoost models.
|
681
|
+
|
682
|
+
## 1.7.5 (03-06-2025)
|
683
|
+
|
684
|
+
- Support Python 3.12.
|
685
|
+
- Explainability: Support native and snowflake.ml.modeling sklearn pipeline
|
686
|
+
|
687
|
+
### Bug Fixes
|
688
|
+
|
689
|
+
- Registry: Fixed a compatibility issue when using `snowflake-ml-python` 1.7.0 or greater to save a `tensorflow.keras`
|
690
|
+
model with `keras` 2.x, if `relax_version` is set or default to True, and newer version of `snowflake-ml-python`
|
691
|
+
is available in Snowflake Anaconda Channel, model could not be run in Snowflake. If you have such model, you could
|
692
|
+
use the latest version of `snowflake-ml-python` and call `ModelVersion.load` to load it back, and re-log it.
|
693
|
+
Alternatively, you can prevent this issue by setting `relax_version=False` when saving the model.
|
694
|
+
- Registry: Removed the validation that disallows data that does not have non-null values being passed to
|
695
|
+
`ModelVersion.run`.
|
696
|
+
- ML Job (PrPr): No longer require CREATE STAGE privilege if `stage_name` points to an existing stage
|
697
|
+
- ML Job (PrPr): Fixed a bug causing some payload source and entrypoint path
|
698
|
+
combinations to be erroneously rejected with
|
699
|
+
`ValueError(f"{self.entrypoint} must be a subpath of {self.source}")`
|
700
|
+
- ML Job (PrPr): Fixed a bug in Ray cluster startup config which caused certain Runtime APIs to fail
|
701
|
+
|
702
|
+
### New Features
|
703
|
+
|
704
|
+
- Registry: Added support for handling Hugging Face model configurations with auto-mapping functionality.
|
705
|
+
- Registry: Added support for `keras` 3.x model with `tensorflow` and `pytorch` backend
|
706
|
+
- ML Job (PrPr): Support any serializable (pickleable) argument for `@remote` decorated functions
|
707
|
+
|
708
|
+
## 1.7.4 (01-28-2025)
|
403
709
|
|
404
710
|
- FileSet: The `snowflake.ml.fileset.FileSet` has been deprecated and will be removed in a future version.
|
405
711
|
Use [snowflake.ml.dataset.Dataset](https://docs.snowflake.com/en/developer-guide/snowflake-ml/dataset) and
|
406
712
|
[snowflake.ml.data.DataConnector](https://docs.snowflake.com/en/developer-guide/snowpark-ml/reference/latest/api/data/snowflake.ml.data.data_connector.DataConnector)
|
407
713
|
instead.
|
714
|
+
- Registry: `ModelVersion.run` on a service would require redeploying the service once account opts into nested function.
|
408
715
|
|
409
716
|
### Bug Fixes
|
410
717
|
|
411
718
|
- Registry: Fixed an issue that the hugging face pipeline is loaded using incorrect dtype.
|
412
719
|
- Registry: Fixed an issue that only 1 row is used when infer the model signature in the modeling model.
|
413
720
|
|
414
|
-
### Behavior Changes
|
415
|
-
|
416
|
-
- Registry: `ModelVersion.run` on a service would require redeploying the service once account opts into nested function.
|
417
|
-
|
418
721
|
### New Features
|
419
722
|
|
420
723
|
- Add new `snowflake.ml.jobs` preview API for running headless workloads on SPCS using
|
421
724
|
[Container Runtime for ML](https://docs.snowflake.com/en/developer-guide/snowflake-ml/container-runtime-ml)
|
422
725
|
- Added `guardrails` option to Cortex `complete` function, enabling
|
423
726
|
[Cortex Guard](https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions#cortex-guard) support
|
727
|
+
- Model Monitoring: Expose Model Monitoring Python API by default.
|
424
728
|
|
425
729
|
## 1.7.3 (2025-01-08)
|
426
730
|
|
@@ -428,6 +732,7 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
428
732
|
- Bumped the requirements of `fsspec` and `s3fs` to `>=2024.6.1,<2026`
|
429
733
|
- Bumped the requirement of `mlflow` to `>=2.16.0, <3`
|
430
734
|
- Registry: Support 500+ features for model registry
|
735
|
+
- Feature Store: Add support for `cluster_by` for feature views.
|
431
736
|
|
432
737
|
### Bug Fixes
|
433
738
|
|
@@ -545,6 +850,10 @@ class ExamplePipelineModel(custom_model.CustomModel):
|
|
545
850
|
- Data Connector: Add the option of passing a `None` sized batch to `to_torch_dataset` for better
|
546
851
|
interoperability with PyTorch DataLoader.
|
547
852
|
- Model Registry: Support [pandas.CategoricalDtype](https://pandas.pydata.org/docs/reference/api/pandas.CategoricalDtype.html#pandas-categoricaldtype)
|
853
|
+
- Limitations:
|
854
|
+
- The native categorical data handling handling by XGBoost using `enable_categorical=True` is not supported.
|
855
|
+
Instead please use [`sklearn.pipeline`](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html)
|
856
|
+
to preprocess the categorical datatype and log the pipeline with the XGBoost model.
|
548
857
|
- Registry: It is now possible to pass `signatures` and `sample_input_data` at the same time to capture background
|
549
858
|
data from explainablity and data lineage.
|
550
859
|
|