Trabalhos de inferência em lote¶
Nota
Recurso em versão preliminar — Público
Suportado na versão preliminar pública desde as versões 1.26.0 do snowflake-ml-python.
Use a inferência em lote do Snowflake para permitir inferência de modelo eficiente e em grande escala em conjuntos de dados estáticos ou atualizados periodicamente. A API Batch Inference usa o Snowpark Container Services (SPCS) para fornecer uma camada de computação distribuída otimizada para altíssimo rendimento e eficiência de custos.
Quando usar a inferência em lote¶
Use o método run_batch em cargas de trabalho para:
Processar arquivos de imagens, áudio ou vídeo, ou usar modelos multimodais com dados não estruturados.
Executar a inferência sobre milhões ou bilhões de linhas.
Executar a inferência como um estágio discreto e assíncrono em um pipeline.
Integrar a inferência como uma etapa dentro de um Airflow DAG ou uma tarefa do Snowflake.
Limitações¶
Para os casos de uso multimodal, a criptografia só é suportada no servidor
Modelos particionados não são compatíveis
Introdução¶
Conectar-se ao Model Registry¶
Conecte-se ao Snowflake Model Registry e recupere a referência do modelo como:
Executar trabalhos em lote¶
Esta API usa o Snowpark Container Services (SPCS) para iniciar a carga de trabalho de inferência. Depois de executar a inferência, a computação é automaticamente interrompida para impedir que haja cobranças adicionais. De modo geral, a API é similar a isto:
Gerenciamento de trabalhos¶
Você pode obter uma lista de trabalhos, cancelar um trabalho, encontrar o identificador de um trabalho ou excluir um trabalho usando os métodos abaixo:
Nota
A função result nas APIs ML Jobs não é compatível com trabalhos de inferência em lote.
Especificação de dados de inferência¶
Você pode usar dados estruturados ou não estruturados para inferência em lote. Para usar dados estruturados em seu fluxo de trabalho, você pode fornecer uma consulta SQL ou um dataframe para o método run_batch.
Para dados não estruturados, você pode referenciar seus arquivos de um estágio do Snowflake. Para referenciar seus arquivos, crie um dataframe com os caminhos de arquivo.
Você fornece seu dataframe para o método run_batch. O run_batch fornece o conteúdo dos arquivos para o modelo.
Entrada estruturada¶
Os exemplos a seguir mostram a gama de possibilidades de entrada:
Entrada não estruturada (multimodal)¶
Para dados não estruturados, o método run_batch pode ler os arquivos dos caminhos de estágio totalmente qualificados fornecidos no dataframe de entrada. O exemplo a seguir mostra como especificar dados de entrada não estruturados:
Para listar automaticamente todos os arquivos em um estágio como dataframe, use um código como o seguinte:
Expressão do tipo de dados¶
O Run_batch converte automaticamente seus arquivos para os formatos compatíveis com o modelo.
Seu modelo pode aceitar dados em um dos seguintes formatos:
RAW_BYTES
BASE64
Por exemplo, se você tiver imagens armazenadas no formato PNG em seu estágio e seu modelo aceita RAW_BYTES, você pode usar o argumento input_spec para especificar como o Snowflake converte seus dados.
O código de exemplo a seguir converte arquivos no seu estágio em RAW_BYTES:
O argumento column_handling informa ao framework que a coluna do caminho de X contém um caminho de estágio completo e chama o modelo com bytes brutos desse arquivo.
Saída (output_spec)¶
Especifique um diretório de estágio para armazenar a saída do arquivo, conforme mostrado aqui:
O Snowflake atualmente oferece suporte a modelos que geram textos e os armazenam como arquivos parquet. Você pode converter os arquivos parquet em um dataframe do Snowpark desta forma:
Parâmetros de passagem¶
Se a assinatura do modelo incluir parâmetros definidos com ParamSpec, é possível passar valores de parâmetro no momento da inferência usando o argumento params em InputSpec. Qualquer parâmetro não incluído no dicionário usa o valor padrão da assinatura.
Especificação do trabalho¶
Para definir as configurações de nível de trabalho para sua carga de trabalho de inferência em lote (como o número de trabalhadores, alocação de recursos e parâmetros de execução, passe uma instância JobSpec como o argumento job_spec do método run_batch. Um exemplo é mostrado abaixo:
Práticas recomendadas¶
Como usar um arquivo sentinela¶
Um trabalho pode falhar no meio por vários motivos. Portanto, o diretório de saída pode passar a ter dados parciais. Para marcar a conclusão do trabalho, run_batch grava um arquivo de conclusão _SUCCESS no diretório de saída.
Para evitar uma saída parcial ou incorreta:
Leia os dados de saída somente depois que o arquivo sentinela for encontrado.
Forneça um diretório vazio para começar.
Execute run_batch com o modo = SaveMode.ERROR.
Exemplos¶
Uso de um modelo personalizado¶
Uso do modelo Hugging Face¶
Uso do modelo Hugging Face com vLLM¶
Tarefa: geração de texto¶
Tarefa: texto de imagem para texto¶
Notebooks de amostra¶
Para obter exemplos executáveis completos, consulte os notebooks de amostra de inferência em lote no GitHub.