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
.sigpara 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.FileSetfoi 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.cortexforam 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_textem vez deClassifyText.O decorador
partitioned_inference_apifoi descontinuado e será removido em uma versão futura. Usecustom_model.partitioned_apiem vez disso.
Versão 1.15.0 (29/09/2025)¶
Mudanças de comportamento¶
Alterações no comportamento do registro do modelo:
Remoção do suporte para o tipo de tarefa
conversationalobsoleto para modelos Huggingface. Esse tipo de tarefa se tornou obsoleto pelo HuggingFace há algum tempo e deverá ser removido de seu API em breve.
Versão 1.14.0 (18/09/2025)¶
Novos recursos¶
Novos recursos de trabalhos ML:
O argumento
additional_payloadsdos métodosMLJob.submit_*foi renomeado paraimportspara refletir melhor a finalidade dele.additional_payloadsse tornou obsoleto e será removido em uma versão futura.
Versão 1.13.0 (11/09/2025)¶
Novos recursos¶
Novos recursos de registro do modelo:
Agora você pode registrar um modelo HuggingFace sem precisar carregá-lo na memória usando
huggingface_pipeline.HuggingFacePipelineModel. Requer o pacotehuggingface_hub. Para desativar o download do repositório HuggingFace, executedownload_snapshot=Falseao instanciarhuggingface_pipeline.HuggingFacePipelineModel.Agora você pode usar os modelos
enable_categorical=Truede XGBoost com o pandas DataFrames.Ao listar serviços, o ponto de extremidade de inferência PrivateLink é exibido na lista
ModelVersion.
Versão 1.12.0 (04/09/2025)¶
Correções de bugs¶
Correções de bugs no registro do modelo:
Correção de um problema em que a representação de cadeia de caracteres das colunas de saída do tipo dicionário estava sendo criada incorretamente durante a desserialização da saída estruturada, perdendo o tipo de dados original.
Correção de um problema de desempenho do servidor de inferência para entradas amplas (mais de 500 recursos) e JSON.
Novos recursos¶
Novos recursos de registro do modelo:
Agora você pode registrar modelos de geração de texto com assinaturas compatíveis com a assinatura de conclusão de chat da OpenAI, conforme mostrado no exemplo a seguir:
from snowflake.ml.model import openai_signatures import pandas as pd mv = snowflake_registry.log_model( model=generator, model_name=..., ..., signatures=openai_signatures.OPENAI_CHAT_SIGNATURE, ) # create a pd.DataFrame with openai.client.chat.completions arguments like below: x_df = pd.DataFrame.from_records( [ { "messages": [ {"role": "system", "content": "Complete the sentence."}, { "role": "user", "content": "A descendant of the Lost City of Atlantis, who swam to Earth while saying, ", }, ], "max_completion_tokens": 250, "temperature": 0.9, "stop": None, "n": 3, "stream": False, "top_p": 1.0, "frequency_penalty": 0.1, "presence_penalty": 0.2, } ], )
Novos recursos de monitoramento de modelos:
Os monitores de modelos agora oferecem suporte a colunas de segmento para ativar a análise filtrada, especificada no campo
segment_columnsnas opções de origem do monitor de modelos. As colunas de segmento devem existir na tabela de origem e ser do tipo cadeia de caracteres. Os métodosadd_segment_columnedrop_segment_columnsão fornecidos para adicionar ou remover colunas de segmento em monitores de modelos existentes.
Versão 1.11.0 (12/08/2025)¶
Novos recursos¶
Novos recursos de registro do modelo:
O argumento
image_repofoi transformado em opcional emModelVersion.create_service. Se ele não for especificado, um repositório de imagens padrão será utilizado.
Correções de bugs¶
Correções de bugs de trabalhos de ML:
Correção de
TypeError: SnowflakeCursor.execute() got an unexpected keyword argument '_force_qmark_paramstyle'dentro do procedimento armazenado.Correção de
Error: Unable to retrieve head IP addressquando nem todas as instâncias iniciam dentro do tempo limite.
Versão 1.10.0 (01/08/2025)¶
Novos recursos¶
Novos recursos de registro do modelo:
Adição de barras de progresso para
ModelVersion.create_serviceeModelVersion.log_model.Registros de
ModelVersion.create_servicesão agora gravados em um arquivo. A localização do arquivo de log é mostrada no console.
Versão 1.9.2 (28/07/2025)¶
Correções de bugs¶
Correções de bugs de DataConnector:
Corrigido um problema que causava erros ao mencionar
self._session.
Correções de bugs no registro do modelo:
Corrigido um bug ao passar None para a matriz (
pd.dtype('O')) na assinatura do modelo e no manipulador de dados do pandas.
Versão 1.9.1 (18/07/2025)¶
Correções de bugs¶
Correções de bugs no registro do modelo:
Correção de um bug com a configuração do token PAD quando o modelo de geração de texto HuggingFace tinha vários tokens EOS. O manipulador agora escolhe o primeiro token EOS como token PAD.
Novos recursos¶
Novos recursos DataConnector:
Os objetos DataConnector agora podem ser preparados.
Novos recursos de conjunto de dados:
Os objetos do conjunto de dados agora podem ser selecionados.
Novos recursos de registro do modelo:
Os modelos hospedados no Snowpark Container Services agora oferecem suporte a entrada ampla (500+ recursos).
Versão 1.9.0 (25/06/2025)¶
Mudanças de comportamento¶
Mudanças no comportamento dos trabalhos de ML:
Removido o parâmetro
scopedo métodolist_jobs.Adicionados os parâmetros opcionais
databaseeschemaao métodolist_jobs.O método
list_jobsagora retorna um pandas DataFrame em vez de um Snowpark DataFrame.O método
list_jobsagora retorna as seguintes colunas:name,status,message,database_name,schema_name,owner,compute_pool,target_instances,created_timeecompleted_time.
Alterações no comportamento do registro do modelo:
Definir
relax_versioncomo falso quandopip_requirementsé especificado na chamada alog_model.UserWarningé gerado somente emtarget_platformsespecificados para lidar com avisos falsos
Correções de bugs¶
Correções de bugs no registro do modelo:
Correção de falha na conversão de Snowpark DataFrame em pandas DataFrame quando o parâmetro QUOTED_IDENTIFIERS_IGNORE_CASE está habilitado
Correção de entradas de log duplicadas de
UserWarningdurante o empacotamento do modelo
Novos recursos¶
Novos recursos de registro do modelo:
Novas APIs para representar plataformas de destino (
snowflake.ml.model.target_platform.TargetPlatform), constantes e tarefas da plataforma de destino (snowflake.ml.model.task.Task).O argumento
target_platformno métodolog_modelagora aceita uma constanteTargetPlatformMode, que pode ser WAREHOUSE_ONLY, SNOWPARK_CONTAINER_SERVICES_ONLY ou BOTH_WAREHOUSE_AND_SNOWPARK_CONTAINER_SERVICES.
Novos recursos de trabalhos ML:
Os argumentos de envio de trabalho usados com menos frequência foram movidos para
**kwargs.As métricas de plataforma estão ativadas por padrão.
Nesta versão, as APIs de trabalho de ML estão agora estáveis e foram designadas como disponibilidade geral.
Versão 1.8.6 (18/06/2025)¶
Novos recursos¶
Novos recursos de registro do modelo:
Adição de informações de contêiner de serviço aos logs
Versão 1.8.5 (2025-05-27)¶
Mudanças de comportamento¶
Mudanças no comportamento dos trabalhos de ML:
O argumento
num_instancesfoi renomeado paratarget_instancesnas 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
explainnã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-pythonestá disponível no canal conda do Snowflake.
Correções de bugs de explicabilidade:
A versão mínima do
streamlitfoi reduzida para 1.30 para melhorar a compatibilidade.
Correções de bugs de modelagem:
xgboostagora é 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_instancesque 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
idagora é o nome totalmente qualificado do trabalho. Uma nova propriedade,name, foi introduzida para representar o nome do trabalho de ML.O método
list_jobsagora 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.monitoringplotam 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.DMatrixem 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_jobque 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 de trabalhos de ML, que permite executar código no Container Runtime for ML de sua estação de trabalho local, está disponível em versão preliminar. Portanto, a documentação para essa API está disponível na referência de API de ML do Snowflake, e mudanças na API aparecem nestas notas de versão. Novos recursos na API de trabalhos de ML podem não aparecer aqui até serem anunciados publicamente, mas aparecem na referência de API.
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_locationno métodolog_model.Ao registrar modelos no Container Runtime para ML, as dependências do modelo agora são incluídas em
pip_requirementspor 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 typeao 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_modelcom 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.Pipelineforam 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_knã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_explainabilityagora tem como padrãoFalsequando 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_apiincorreta 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.Tensoretensorflow.Variablecomo dados de entrada ou saída.Suporte para
xgboost.DMatrix datatypepara 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-python1.7.0 ou posterior para salvar um modelotensorflow.kerascom keras 2.x, o modelo não podia ser executado no Snowflake. Esse problema ocorre quandorelax_versionestá definido comoTrue(ou padrão) e uma nova versão desnowflake-ml-pythonestá disponível. Se você tiver registrado um modelo afetado, poderá recuperá-lo carregando-o usandoModelVerison.loade 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.
Correção de um problema em que apenas uma linha era realmente utilizada ao inferir uma assinatura de modelo.
Novos recursos¶
Novos recursos do Cortex:
Nova opção
guardrailsna funçãoComplete.
Versão 1.7.3 (09/01/2025)¶
Upgrades de dependências¶
fsspeces3fsdeve ser 2024.6.1 ou posterior e inferior a 2026.mlflowdeve 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,
ClassifyTextagora é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_filesaRegistry.log_modelpara 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.runagora aceita um nome de serviço totalmente qualificado.Correção de um erro em
log_modelpara 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.