Notas de lançamento de Snowflake ML¶
Este artigo contém as notas de versão do Snowflake ML, incluindo o seguinte, quando aplicável:
Mudanças de comportamento
Novos recursos
Correções de bugs voltados para o cliente
Nota
Estas notas não incluem mudanças em recursos que não foram anunciados publicamente. Esses recursos podem aparecer no código-fonte do Snowflake ML, mas não na documentação pública.
Consulte Snowflake ML: aprendizado de máquina de ponta a ponta para ver a documentação.
Verificação do pacote snowflake-ml-python
¶
Todos os pacotes do Snowflake são assinados, permitindo que você verifique sua origem. Para verificar o pacote snowflake.ml.python
, siga as etapas abaixo:
Instale
cosign
. Este exemplo usa a instalação do Go: Instalação do cosign com o Go.Baixe o arquivo de um repositório como PyPi.
Baixe um arquivo
.sig
para esse lançamento na página de lançamentos do GitHub.Verifique a assinatura usando
cosign
. Por exemplo:
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
Nota
Este exemplo usa a biblioteca e a assinatura da versão 1.7.0 do pacote. Use os nomes de arquivo da versão que você está verificando.
Avisos de descontinuação¶
snowflake.ml.fileset.FileSet
foi descontinuado e será removido em uma versão futura. Em vez disso, use snowflake.ml.dataset.Dataset e snowflake.ml.data.DataConnector.Os nomes das funções “CamelCase” em
snowflake.ml.cortex
foram descontinuados e serão removidos em uma versão futura. Em vez disso, use os nomes “snake_case” para essas funções. Por exemplo, useclassify_text
em vez deClassifyText
.O decorador
partitioned_inefrerence_api
foi descontinuado e será removido em uma versão futura. Usecustom_model.partitioned_api
em vez disso.
Versão 1.8.5 (2025-05-27)¶
Mudanças de comportamento¶
Mudanças no comportamento dos trabalhos de ML:
O argumento
num_instances
foi renomeado paratarget_instances
nas APIs de envio do trabalho e agora é obrigatório.
Correções de bugs¶
Correções de bugs no registro do modelo:
Foi corrigido um erro na listagem e exclusão de serviços de contêineres.
Foi corrigido um bug no registro de pipelines do scikit-learn em que a função
explain
não era criada.O registro de um modelo somente de contêiner não verifica mais se a versão necessária do
snowflake-ml-python
está disponível no canal conda do Snowflake.
Correções de bugs de explicabilidade:
A versão mínima do
streamlit
foi reduzida para 1.30 para melhorar a compatibilidade.
Correções de bugs de modelagem:
xgboost
agora é novamente uma dependência obrigatória (era opcional na versão 1.8.4).
Novos recursos¶
Novos recursos dos trabalhos de ML:
O decorador de trabalhos agora tem o argumento
min_instances
que faz com que um trabalho aguarde que o número especificado de trabalhadores esteja pronto antes de iniciar.
Versão 1.8.4 (2025-05-12)¶
Mudanças de comportamento¶
Mudanças no comportamento dos trabalhos de ML:
A propriedade
id
agora é o nome totalmente qualificado do trabalho. Uma nova propriedade,name
, foi introduzida para representar o nome do trabalho de ML.O método
list_jobs
agora retorna o nome do trabalho de ML em vez do ID do trabalho.
Alterações no comportamento do registro do modelo:
Em
log_model
, a ativação da explicabilidade quando o modelo é implantado somente no Snowpark Container Services agora é um erro em vez de um aviso e impedirá a conclusão da operação de log.
Correções de bugs¶
Correções de bugs no registro do modelo:
Corrigido um erro no log dos modelos PyTorch e TensorFlow que causava
UnboundLocalError: local variable 'multiple_inputs' referenced before assignment.
Novos recursos¶
Novos recursos de registro do modelo:
Ative automaticamente a explicabilidade para modelos que podem ser implementados em um warehouse.
Novos recursos de explicabilidade:
Novas funções de visualização em
snowflake.ml.monitoring
plotam explicações em notebooks.Suporte a transformações categóricas em pipelines do scikit-learn.
Novos recursos de modelagem:
Suporte a tipos categóricos para entradas
xgboost.DMatrix
em modelos XGBoost.
Versão 1.8.3 (2025-04-28)¶
Novos recursos¶
Novos recursos de registro do modelo:
Padrão para uma imagem de contêiner CUDA, se disponível, ao registrar um modelo compatível com GPU para implantação no Container Runtime para ML.
As versões do modelo têm um método
run_job
que executa métodos de inferência como um trabalho do Snowpark Container Services de nó único. Esse método está disponível para todos os modelos, inclusive aqueles que não são implantados no Container Runtime para ML.O padrão da plataforma de destino é um warehouse Snowflake ao registrar um modelo particionado.
Versão 1.8.2 (2025-04-15)¶
Novos recursos¶
A API dos trabalhos de ML, que permite executar código no Container Runtime para ML a partir de sua estação de trabalho local, está disponível em versão preliminar. Assim, a documentação para esta API está disponível na Snowflake ML API Reference, e as alterações na API aparecem nestas notas de versão. Os novos recursos da API dos trabalhos de ML podem não aparecer aqui até serem anunciados publicamente, mas aparecem na API de referência.
Novos recursos de registro do modelo:
Você pode especificar o caminho para gravar os arquivos de versões do modelo que são armazenados no estágio Snowflake do modelo usando a opção
save_location
no métodolog_model
.Ao registrar modelos no Container Runtime para ML, as dependências do modelo agora são incluídas em
pip_requirements
por padrão.
Versão 1.8.1 (2025-03-20)¶
Correções de bugs¶
Correções de bugs no registro do modelo:
Corrija o erro
unsupported model type
ao registrar um modelo do scikit-learn com um método de inferênciascore_samples
.Correção de falha na criação de serviço de inferência em um serviço suspenso existente.
Novos recursos¶
Novos recursos de registro do modelo:
A criação de uma cópia de uma versão de modelo com
log_model
com argumentos não suportados agora gera uma exceção.
Versão 1.8.0 (2025-03-20)¶
Mudanças de comportamento¶
Alterações no comportamento do registro do modelo:
As assinaturas automaticamente inferidas em
transformers.Pipeline
foram alteradas para usar a classe de tarefaFeatureGroupSpec
, inclusive:Assinatura para tarefas de preenchimento de máscara:
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,), ), ], )
Assinatura para tarefas de classificação de tokens:
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,), ), ], )
Assinatura para tarefas de resposta a perguntas:
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,), ), ], )
Assinatura para tarefas de resposta a perguntas quando
top_k
é maior que 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,), ), ], )
Assinatura para tarefas de classificação de texto quando
top_k
é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), ], )
ModelSignature( inputs=[ FeatureSpec(name="text", dtype=DataType.STRING), ], outputs=[ FeatureSpec(name="label", dtype=DataType.STRING), FeatureSpec(name="score", dtype=DataType.DOUBLE), ], )
Assinatura para tarefas de classificação de texto quando
top_k
não éNone
: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,), ), ], )
Assinatura para tarefas de geração de texto:
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,), ) ], )
Os modelos PyTorch e TensorFlow agora esperam uma única entrada e saída de tensor por padrão quando são registrados no registro de modelo. Para usar vários tensores (comportamento anterior), defina
options={"multiple_inputs": True}
.Exemplo com entrada de tensor único:
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)
Para várias entradas ou saídas de tensor, use:
reg.log_model( model=model, ..., sample_input_data=[data_x_1, data_x_2], options={"multiple_inputs": True} )
enable_explainability
agora tem como padrãoFalse
quando o modelo pode ser implantado no Snowpark Container Services.
Correções de bugs¶
Correções de bugs de modelagem:
Correção de um bug em algumas métricas que permitia que uma versão não suportada do numpy fosse instalada automaticamente no procedimento armazenado, resultando em um erro de numpy na execução.
Correções de bugs no registro do modelo:
Correção de um bug que leva a uma mensagem de erro
Model does not have _is_inference_api
incorreta ao atribuir um modelo compatível como uma propriedade de umCustomModel
.Correção de um bug em que a inferência não funciona quando modelos com mais de 500 recursos de entrada são implantados em SPCS.
Novos recursos¶
Novos recursos de registro do modelo:
Suporte ao uso de um único
torch.Tensor
,tensorflow.Tensor
etensorflow.Variable
como dados de entrada ou saída.Suporte para
xgboost.DMatrix datatype
para modelos XGBoost.
Versão 1.7.5 (2025-03-06)¶
snowflake-ml-python
1.7.5 adiciona suporte ao Python 3.12.
Correções de bugs¶
Correções de bugs no registro do modelo:
Corrigido um problema de compatibilidade em que, ao usar
snowflake-ml-python
1.7.0 ou posterior para salvar um modelotensorflow.keras
com keras 2.x, o modelo não podia ser executado no Snowflake. Esse problema ocorre quandorelax_version
está definido comoTrue
(ou padrão) e uma nova versão desnowflake-ml-python
está disponível. Se você tiver registrado um modelo afetado, poderá recuperá-lo carregando-o usandoModelVerison.load
e registrando-o novamente com a versão mais recente desnowflake-ml-python
.Foi removida a validação que impede que dados que não tenham valores não nulos sejam passados para
ModelVersion.run
.
Novos recursos¶
Novos recursos de registro do modelo:
Suporte para configurações de modelo Hugging Face com funcionalidade de mapeamento automático.
Suporte para modelos keras 3.x com backends de tensorflow e pytorch.
Novos recursos de explicabilidade do modelo:
Suporte para pipelines sklearn nativos e
snowflake-ml-python
.
Versão 1.7.4 (2025-01-28)¶
Importante
snowflake.ml.fileset.FileSet
foi descontinuado e será removido em uma versão futura. Em vez disso, use snowflake.ml.dataset.Dataset e snowflake.ml.data.DataConnector.
Correções de bugs¶
Correções de erros no registro:
Corrigido um problema em que os pipelines do Hugging Face eram carregados usando um tipo de dados incorreto.
Corrigido um problema em que apenas uma linha era realmente usada ao inferir uma assinatura de modelo.
Novos recursos¶
Novos recursos do Cortex:
Nova opção
guardrails
na funçãoComplete
.
Versão 1.7.3 (09/01/2025)¶
Upgrades de dependências¶
fsspec
es3fs
deve ser 2024.6.1 ou posterior e inferior a 2026.mlflow
deve ser 2.16.0 ou posterior e inferior a 3.
Novos recursos¶
Novos recursos do Cortex:
As funções Cortex agora têm nomes «snake_case». Por exemplo,
ClassifyText
agora éclassify_text
. Os nomes antigos “CamelCase” ainda funcionam, mas serão removidos em um lançamento futuro.
Novos recursos de registro do modelo:
O registro agora aceita mais de 500.000 recursos.
Adição do argumento
user_files
aRegistry.log_model
para incluir imagens ou outros arquivos no modelo.Adição de suporte para lidar com as configurações do modelo Hugging Face com a funcionalidade de mapeamento automático.
Novos recursos de dados:
Adição do construtor
DataConnector.from_sql
.
Correções de bugs¶
Correções de erros no registro:
Correção de um bug que ocorria ao fornecer um índice pandas não abrangente DataFrame como entrada para
ModelVersion.run
.Melhoria na geração de nomes de registro de modelos aleatórios para evitar colisões.
Correção de um problema ao inferir uma assinatura ou executar uma inferência com o Snowpark DataFrame que tem uma coluna cujo tipo é ARRAY e contém um valor NULL.
ModelVersion.run
agora aceita um nome de serviço totalmente qualificado.Correção de um erro em
log_model
para qualquer modelo scikit-learn com apenas pré-processamento de dados, incluindo modelos de pipeline somente de pré-processamento.
Correções de bugs de monitoramento:
Correção de um problema com a criação de monitores usando nomes totalmente qualificados.