Pipeline do Hugging Face¶
O Snowflake Model Registry oferece suporte a qualquer modelo do Hugging Face definido como transformador que pode ser carregado usando o método transformers.Pipeline.
Use um dos seguintes métodos para registrar um modelo do Hugging Face no Model Registry:
Importar e implementar um modelo do Hugging Face usando o Snowsight. Consulte Importação e implementação de modelos de um serviço externo para obter instruções.
Criar uma instância
snowflake.ml.model.models.huggingface.TransformersPipelinee chamarlog_model():Importante
Se você não especificar um argumento
compute_pool_for_log, o modelo será registrado usando o pool de computação da CPU padrão.Se você especificar um argumento
compute_pool_for_log, o modelo será registrado usando o pool de computação especificado.Se você especificar o argumento
compute_pool_for_logcomo None, os arquivos de modelo serão baixados localmente e depois carregados no registro de modelos. Isso requer a instalação do huggingface-hub.
Carregar o modelo do Hugging Face na memória e registrá-lo no Model Registry:
Se você usa o Snowflake Notebooks, para baixar os pesos do modelo, precisa ter uma integração de acesso externo anexada ao seu notebook. Essa integração é necessária para permitir a saída para os seguintes hosts:
huggingface.cohub-ci.huggingface.cocdn-lfs-us-1.hf.cocdn-lfs-eu-1.hf.cocdn-lfs.hf.cotransfer.xethub.hf.cocas-server.xethub.hf.cocas-bridge.xethub.hf.c
Nota
Essa lista é apenas dos hosts necessários para acessar o Hugging Face e pode ser alterada a qualquer momento. Seu modelo pode exigir artefatos de outras fontes, que devem ser adicionados à regra de rede conforme permitido para saída.
O exemplo a seguir cria uma nova integração de acesso externo huggingface_network_rule para uso com um notebook:
Consulte Criação e uso de uma integração de acesso externo para obter mais informações.
Depois de criar sua integração de acesso externo, anexe-a ao seu notebook e tenha acesso ao repositório de modelos do Hugging Face para baixar os pesos e as configurações do modelo. Consulte Configurar acesso externo para o Snowflake Notebooks para obter mais informações.
API do registro de modelo¶
Ao chamar log_model(), o dicionário options oferece suporte às seguintes chaves:
Chave de opção |
Descrição |
Tipo |
|---|---|---|
|
Uma lista de métodos disponíveis no objeto de modelo. Por padrão, os modelos do Hugging Face usam o método |
|
|
A versão do tempo de execução CUDA a ser usada na implantação em uma plataforma com GPU. Se definido como |
|
O registro de modelos infere o argumento signatures se o pipeline contém uma tarefa da seguinte lista:
question-answering (única saída, várias saídas)
text-classification (única saída, várias saídas)
sentiment-analysis (única saída, várias saídas)
translation_xx_to_yy, em que
xxeyysão códigos de país de duas letras definidos no formato ISO 3166-1 alpha-2
Nota
Os nomes das tarefas diferenciam maiúsculas de minúsculas.
O argumento sample_input_data para log_model é ignorado nos modelos do Hugging Face. Especifique o argumento signatures ao registrar um modelo do Hugging Face que não está na lista acima, para que o registro saiba as assinaturas dos métodos de destino.
Para ver a assinatura inferida, chame o método show_functions(). Essa assinatura fornece os tipos e nomes de colunas necessários para a entrada da função de modelo, bem como o formato da respectiva saída. O exemplo a seguir mostra a assinatura do modelo bigscience/bloom-560m com uma tarefa de text-generation:
O exemplo a seguir mostra como invocar um modelo usando a assinatura anterior:
Notas de uso¶
Muitos modelos do Hugging Face são grandes e não cabem em um warehouse padrão. Use um warehouse otimizado para Snowpark ou escolha uma versão menor do modelo. Por exemplo, uma alternativa ao modelo
Llama-2-70b-chat-hféLlama-2-7b-chat-hf.Os warehouses Snowflake não têm GPUs. Use apenas modelos Hugging Face otimizados para CPU.
Alguns transformadores Hugging Face retornam uma matriz de dicionários por linha de entrada. O registro de modelos converte a matriz de dicionários em uma cadeia de caracteres que contém uma representação JSON da matriz. Por exemplo, a saída de resposta a perguntas com várias saídas é semelhante a esta:
Exemplo¶
Resultado:
Assinaturas inferidas para pipelines Hugging Face¶
Esta seção descreve as assinaturas inferidas para os pipelines Hugging Face compatíveis, incluindo uma descrição e um exemplo das entradas necessárias e das saídas esperadas. Todas as entradas e saídas são Snowpark DataFrames.
Pipeline de máscara de preenchimento¶
Um pipeline cuja tarefa é «fill-mask « tem as seguintes entradas e saídas.
Entradas¶
inputs: uma cadeia de caracteres onde há uma máscara para preencher.
Exemplo:
Saídas¶
outputs: Uma cadeia de caracteres com uma representação JSON de uma lista de objetos, cada um dos quais pode conter chaves comoscore,token,token_strousequence. Para obter mais detalhes, consulte FillMaskPipeline.
Exemplo:
Exemplo de código¶
Classificação de token¶
Um pipeline cuja tarefa é «ner» ou `token-classification<https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.TokenClassificationPipeline>`_ tem as seguintes entradas e saídas.
Entradas¶
inputs: Uma cadeia de caracteres com os tokens a serem classificados.
Exemplo:
Saídas¶
outputs: Uma cadeia de caracteres com uma representação JSON de uma lista de objetos de resultado, cada um dos quais pode conter chaves comoentity,score,index,word,name,startouend. Para obter mais detalhes, consulte TokenClassificationPipeline.
Exemplo:
Exemplo de código¶
Resposta a perguntas (saída única)¶
Um pipeline cuja tarefa é «question-answering «, em que top_k não está definido ou está definido como 1, tem as seguintes entradas e saídas.
Entradas¶
question: Uma cadeia de caracteres com a pergunta a ser respondida.context: uma cadeia de caracteres que pode conter a resposta.
Exemplo:
Saídas¶
score: pontuação de confiança de ponto flutuante de 0,0 a 1,0.start: índice inteiro do primeiro token da resposta no contexto.end: índice inteiro do último token da resposta no contexto original.answer: Uma cadeia de caracteres com a resposta encontrada.
Exemplo:
Exemplo de código¶
Resposta a perguntas (várias saídas)¶
Um pipeline cuja tarefa é «question-answering «, em que top_k é definido e é maior que 1, tem as seguintes entradas e saídas.
Entradas¶
question: Uma cadeia de caracteres com a pergunta a ser respondida.context: uma cadeia de caracteres que pode conter a resposta.
Exemplo:
Saídas¶
outputs: Uma cadeia de caracteres com uma representação JSON de uma lista de objetos de resultado, cada um dos quais pode conter chaves comoscore,start,endouanswer.
Exemplo:
Exemplo de código¶
Resumo¶
Um pipeline cuja tarefa é «summarization «, onde return_tensors é falso ou não definido, tem as seguintes entradas e saídas.
Entradas¶
documents: Uma cadeia de caracteres com texto para resumir.
Exemplo:
Saídas¶
summary_text: Uma cadeia de caracteres com o resumo gerado ou, senum_return_sequencesfor maior que 1, uma cadeia de caracteres com uma representação JSON de uma lista de resultados, cada um dos quais é um dicionário com campos, incluindosummary_text.
Exemplo:
Exemplo de código¶
Tabela de respostas a perguntas¶
Um pipeline cuja tarefa é «table-question-answering « tem as seguintes entradas e saídas.
Entradas¶
query: Uma cadeia de caracteres com a pergunta a ser respondida.table: Uma cadeia de caracteres com um dicionário serializado em JSON no formato{column -> [values]}, que representa a tabela que pode conter uma resposta.
Exemplo:
Saídas¶
answer: Uma cadeia de caracteres com uma possível resposta.coordinates: Uma lista de inteiros que representam as coordenadas das células onde a resposta foi localizada.cells: Uma lista de cadeias de caracteres com o conteúdo das células onde a resposta foi localizada.aggregator: Uma cadeia de caracteres com o nome do agregador usado.
Exemplo:
Exemplo de código¶
Classificação de texto (saída única)¶
Um pipeline cuja tarefa é «text-classification « ou «análise de sentimento», onde top_k não é definido ou é nenhum (none), tem as seguintes entradas e saídas.
Entradas¶
text: uma cadeia de caracteres para classificar.text_pair: Uma cadeia de caracteres para classificar juntamente comtexte que é usada com modelos que calculam similaridade de texto. Deixe em branco se o modelo não o utilizar.
Exemplo:
Saídas¶
label: Uma cadeia de caracteres que representa o rótulo de classificação de texto.score: uma pontuação de confiança de ponto flutuante de 0,0 a 1,0.
Exemplo:
Exemplo de código¶
Classificação de texto (saída múltipla)¶
Um pipeline cuja tarefa é «text-classification « ou «análise de sentimento», onde top_k é definido como um número, tem as seguintes entradas e saídas.
Nota
Uma tarefa de classificação de texto é considerada de saída múltipla se top_k for definido como qualquer número, mesmo que esse número seja 1. Para obter uma saída única, use um valor top_k de Nenhum.
Entradas¶
text: uma cadeia de caracteres para classificar.text_pair: Uma cadeia de caracteres para classificar juntamente comtext, que é usada com modelos que calculam similaridade de texto. Deixe em branco se o modelo não o utilizar.
Exemplo:
Saídas¶
outputs: Uma cadeia de caracteres com uma representação JSON de uma lista de resultados, cada um dos quais contém campos que incluemlabelescore.
Exemplo:
Exemplo de código¶
Geração de texto para texto¶
Um pipeline cuja tarefa é «geração de texto para texto «, onde return_tensors é falso ou não definido, tem as seguintes entradas e saídas.
Entradas¶
inputs: Uma cadeia de caracteres com um prompt.
Exemplo:
Saídas¶
generated_text: Uma cadeia de caracteres com o texto gerado se
num_return_sequencesfor 1, ou se num_return_sequences for maior que 1, uma representação de cadeia de caracteres de uma lista JSON de dicionários de resultados com campos incluindogenerated_text.
Exemplo:
Exemplo de código¶
Nota
Pipelines de geração de texto para texto onde return_tensors é verdadeiro não são suportados.
Geração de tradução¶
Um pipeline cuja tarefa é «translation «, onde return_tensors é falso ou não definido, tem as seguintes entradas e saídas.
Nota
Pipelines de geração de tradução onde return_tensors é verdadeiro não são suportados.
Entradas¶
inputs: Uma cadeia de caracteres com texto a ser traduzido.
Exemplo:
Saídas¶
translation_text: Uma cadeia de caracteres que representa a tradução gerada senum_return_sequencesfor 1, ou uma representação de cadeia de caracteres de uma lista JSON de dicionários de resultados, cada um contendo campos que incluemtranslation_text.
Exemplo:
Exemplo de código¶
Classificação zero-shot¶
Um pipeline cuja tarefa é «zero-shot-classification « tem as seguintes entradas e saídas.
Entradas¶
sequences: Uma cadeia de caracteres com o texto a ser classificado.candidate_labels: Uma lista de cadeias de caracteres com os rótulos a serem aplicados ao texto.
Exemplo:
Saídas¶
sequence: a cadeia de caracteres de entrada.labels: Uma lista de cadeias de caracteres que representam os rótulos aplicados.scores: uma lista de pontuações de confiança de ponto flutuante para cada rótulo.
Exemplo:
Geração de texto¶
Um pipeline cuja tarefa é «geração de texto «, onde return_tensors é falso ou não definido, tem as seguintes entradas e saídas.
Nota
Pipelines de geração de texto onde return_tensors é verdadeiro não são suportados.
Entradas¶
inputs: Uma cadeia de caracteres com um prompt.
Exemplo:
Saídas¶
outputs: Uma cadeia de caracteres com uma representação JSON de uma lista de objetos de resultado, cada um dos quais contém campos que incluemgenerated_text.
Exemplo:
Exemplo de código¶
Geração de texto (compatível com OpenAI)¶
Um pipeline cuja tarefa é «geração de texto «, onde return_tensors é falso ou não definido, tem as seguintes entradas e saídas.
Durante o registro do modelo, ao fornecer a assinatura snowflake.ml.model.openai_signatures.OPENAI_CHAT_SIGNATURE, o modelo será compatível com a API OpenAI. Isso permite que os usuários passem solicitações no estilo openai.client.ChatCompletion ao modelo.
Nota
Pipelines de geração de texto onde return_tensors é verdadeiro não são suportados.
Entradas¶
messages: uma lista de dicionários com as mensagens que serão enviadas ao modelo.max_completion_tokens: o número máximo de tokens a serem gerados.temperature: a temperatura que será usada para a geração.stop: a sequência de parada que será usada para a geração.n: o número de gerações a serem produzidas.stream: se a geração será ou não transmitida.top_p: o valor p superior que será usado para a geração.frequency_penalty: a penalidade de frequência que será usada para a geração.presence_penalty: a penalidade de presença que será usada para a geração.
Exemplo:
Saídas¶
outputs: Uma cadeia de caracteres com uma representação JSON de uma lista de objetos de resultado, cada um dos quais contém campos que incluemgenerated_text.
Exemplo: