Pipeline do Hugging Face

The Snowflake Model Registry supports any Hugging Face model defined as transformers that can be loaded using transformers.Pipeline.

Use um dos seguintes métodos para registrar um modelo do Hugging Face no Model Registry:

  1. Importar e implantar um modelo do Hugging Face e registrá-lo no Model Registry usando a UI

  2. Usando a classe snowflake.ml.model.models.huggingface.TransformersPipeline, você pode registrar um modelo do Hugging Face para registro de modelos.

    from snowflake.ml.model.models import huggingface
    
    model = huggingface.TransformersPipeline(
        task="text-classification",
        model="ProsusAI/finbert",
        # compute_pool_for_log=... # Optional
    )
    
    mv = reg.log_model(model, model_name='finbert', version_name='v5')
    
    Copy

    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_log como None, os arquivos de modelo serão baixados localmente e depois carregados no registro de modelos. Isso requer a instalação do huggingface-hub.

  3. Carregar o modelo do Hugging Face na memória e registrá-lo no Model Registry

    lm_hf_model = transformers.pipeline(
        task="text-generation",
        model="bigscience/bloom-560m",
        token="...",  # Put your HuggingFace token here.
        return_full_text=False,
        max_new_tokens=100,
    )
    
    lmv = reg.log_model(lm_hf_model, model_name='bloom', version_name='v560m')
    
    Copy

Ao chamar log_model, o dicionário options oferece suporte ao seguinte:

Opção

Descrição

target_methods

Uma lista dos nomes dos métodos disponíveis no objeto modelo. Os modelos Hugging Face têm os seguintes métodos de destino por padrão, supondo que o método exista: __call__.

cuda_version

A versão do tempo de execução CUDA a ser usada na implementação em uma plataforma com uma GPU; o padrão é 12.4. Se definido manualmente como None, o modelo não poderá ser implementado em uma plataforma com GPU.

O registro infere o argumento signatures somente se o pipeline contiver uma tarefa da seguinte lista:

  • fill-mask

  • question-answering

  • summarization

  • table-question-answering

  • text2text-generation

  • text-classification (também chamado de sentiment-analysis)

  • text-generation

  • token-classification (também chamado de ner)

  • translation

  • translation_xx_to_yy

  • zero-shot-classification

The sample_input_data argument to log_model is completely ignored for Hugging Face models. Specify the signatures argument when logging a Hugging Face model that is not in the preceding list so that the registry knows the signatures of the target methods.

To see the inferred signature, use the show_functions method. The following dictionary is the result of the lmv.show_functions() method, where lmv is the model logged above:

{'name': '__CALL__',
  'target_method': '__call__',
  'signature': ModelSignature(
                      inputs=[
                          FeatureSpec(dtype=DataType.STRING, name='inputs')
                      ],
                      outputs=[
                          FeatureSpec(dtype=DataType.STRING, name='outputs')
                      ]
                  )}]
Copy

Use o código a seguir para chamar o modelo lmv:

import pandas as pd
remote_prediction = lmv.run(pd.DataFrame(["Hello, how are you?"], columns=["inputs"]))
Copy

Notas de uso

  • Muitos modelos 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, em vez de usar o modelo Llama-2-70b-chat-hf, tente 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 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:

    '[{"score": 0.61094731092453, "start": 139, "end": 178, "answer": "learn more about the world of athletics"},
    {"score": 0.17750297486782074, "start": 139, "end": 180, "answer": "learn more about the world of athletics.\""}]'
    
    Copy

Exemplo

# Prepare model
import transformers
import pandas as pd

finbert_model = transformers.pipeline(
    task="text-classification",
    model="ProsusAI/finbert",
    top_k=2,
)

# Log the model
mv = registry.log_model(
    finbert_model,
    model_name="finbert",
    version_name="v1",
)

# Use the model
mv.run(pd.DataFrame(
        [
            ["I have a problem with my Snowflake that needs to be resolved asap!!", ""],
            ["I would like to have udon for today's dinner.", ""],
        ]
    )
)
Copy

Resultado:

0  [{"label": "negative", "score": 0.8106237053871155}, {"label": "neutral", "score": 0.16587384045124054}]
1  [{"label": "neutral", "score": 0.9263970851898193}, {"label": "positive", "score": 0.05286872014403343}]
Copy

Assinaturas inferidas para pipelines Hugging Face

O Snowflake Model Registry infere automaticamente as assinaturas dos pipelines do Hugging Face com uma única tarefa da seguinte lista:

  • fill-mask

  • question-answering

  • summarization

  • table-question-answering

  • text2text-generation

  • text-classification (alias sentiment-analysis)

  • text-generation

  • token-classification (alias ner)

  • translation

  • translation_xx_to_yy

  • zero-shot-classification

Esta seção descreve as assinaturas desses tipos de pipelines Hugging Face, incluindo uma descrição e um exemplo das entradas necessárias e dos resultados esperados. 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:

--------------------------------------------------
|"inputs"                                        |
--------------------------------------------------
|LynYuu is the [MASK] of the Grand Duchy of Yu.  |
--------------------------------------------------

Saídas

  • outputs: Uma cadeia de caracteres com uma representação JSON de uma lista de objetos, cada um dos quais pode conter chaves como score, token, token_str ou sequence. Para obter mais detalhes, consulte FillMaskPipeline.

Exemplo:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"outputs"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|[{"score": 0.9066258072853088, "token": 3007, "token_str": "capital", "sequence": "lynyuu is the capital of the grand duchy of yu."}, {"score": 0.08162177354097366, "token": 2835, "token_str": "seat", "sequence": "lynyuu is the seat of the grand duchy of yu."}, {"score": 0.0012052370002493262, "token": 4075, "token_str": "headquarters", "sequence": "lynyuu is the headquarters of the grand duchy of yu."}, {"score": 0.0006560495239682496, "token": 2171, "token_str": "name", "sequence": "lynyuu is the name of the grand duchy of yu."}, {"score": 0.0005427763098850846, "token": 3200, "token_str"...  |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Classificação de token

Um pipeline cuja tarefa é «ner» ou «token-classification « tem as seguintes entradas e saídas.

Entradas

  • inputs: Uma cadeia de caracteres com os tokens a serem classificados.

Exemplo:

------------------------------------------------
|"inputs"                                      |
------------------------------------------------
|My name is Izumi and I live in Tokyo, Japan.  |
------------------------------------------------

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 como entity, score, index, word, name, start ou end. Para obter mais detalhes, consulte TokenClassificationPipeline.

Exemplo:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"outputs"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|[{"entity": "PRON", "score": 0.9994392991065979, "index": 1, "word": "my", "start": 0, "end": 2}, {"entity": "NOUN", "score": 0.9968984127044678, "index": 2, "word": "name", "start": 3, "end": 7}, {"entity": "AUX", "score": 0.9937735199928284, "index": 3, "word": "is", "start": 8, "end": 10}, {"entity": "PROPN", "score": 0.9928083419799805, "index": 4, "word": "i", "start": 11, "end": 12}, {"entity": "PROPN", "score": 0.997334361076355, "index": 5, "word": "##zumi", "start": 12, "end": 16}, {"entity": "CCONJ", "score": 0.999173104763031, "index": 6, "word": "and", "start": 17, "end": 20}, {...  |

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:

-----------------------------------------------------------------------------------
|"question"                  |"context"                                           |
-----------------------------------------------------------------------------------
|What did Doris want to do?  |Doris is a cheerful mermaid from the ocean dept...  |
-----------------------------------------------------------------------------------

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:

--------------------------------------------------------------------------------
|"score"           |"start"  |"end"  |"answer"                                 |
--------------------------------------------------------------------------------
|0.61094731092453  |139      |178    |learn more about the world of athletics  |
--------------------------------------------------------------------------------

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:

-----------------------------------------------------------------------------------
|"question"                  |"context"                                           |
-----------------------------------------------------------------------------------
|What did Doris want to do?  |Doris is a cheerful mermaid from the ocean dept...  |
-----------------------------------------------------------------------------------

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 como score, start, end ou answer.

Exemplo:

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"outputs"                                                                                                                                                                                                                                                                                                                                        |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|[{"score": 0.61094731092453, "start": 139, "end": 178, "answer": "learn more about the world of athletics"}, {"score": 0.17750297486782074, "start": 139, "end": 180, "answer": "learn more about the world of athletics.\""}, {"score": 0.06438097357749939, "start": 138, "end": 178, "answer": "\"learn more about the world of athletics"}]  |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"documents"                                                                                                                                                                                               |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|Neuro-sama is a chatbot styled after a female VTuber that hosts live streams on the Twitch channel "vedal987". Her speech and personality are generated by an artificial intelligence (AI) system  wh...  |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Saídas

  • summary_text: Uma cadeia de caracteres com o resumo gerado ou, se num_return_sequences for 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, incluindo summary_text.

Exemplo:

---------------------------------------------------------------------------------
|"summary_text"                                                                 |
---------------------------------------------------------------------------------
| Neuro-sama is a chatbot styled after a female VTuber that hosts live streams  |
---------------------------------------------------------------------------------

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:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"query"                                  |"table"                                                                                                                                                                                                                                                   |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|Which channel has the most subscribers?  |{"Channel": ["A.I.Channel", "Kaguya Luna", "Mirai Akari", "Siro"], "Subscribers": ["3,020,000", "872,000", "694,000", "660,000"], "Videos": ["1,200", "113", "639", "1,300"], "Created At": ["Jun 30 2016", "Dec 4 2017", "Feb 28 2014", "Jun 23 2017"]}  |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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:

----------------------------------------------------------------
|"answer"     |"coordinates"  |"cells"          |"aggregator"  |
----------------------------------------------------------------
|A.I.Channel  |[              |[                |NONE          |
|             |  [            |  "A.I.Channel"  |              |
|             |    0,         |]                |              |
|             |    0          |                 |              |
|             |  ]            |                 |              |
|             |]              |                 |              |
----------------------------------------------------------------

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 com text e que é usada com modelos que calculam similaridade de texto. Deixe em branco se o modelo não o utilizar.

Exemplo:

----------------------------------
|"text"       |"text_pair"       |
----------------------------------
|I like you.  |I love you, too.  |
----------------------------------

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:

--------------------------------
|"label"  |"score"             |
--------------------------------
|LABEL_0  |0.9760091304779053  |
--------------------------------

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 com text, que é usada com modelos que calculam similaridade de texto. Deixe em branco se o modelo não o utilizar.

Exemplo:

--------------------------------------------------------------------
|"text"                                              |"text_pair"  |
--------------------------------------------------------------------
|I am wondering if I should have udon or rice fo...  |             |
--------------------------------------------------------------------

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 incluem label e score.

Exemplo:

--------------------------------------------------------
|"outputs"                                             |
--------------------------------------------------------
|[{"label": "NEGATIVE", "score": 0.9987024068832397}]  |
--------------------------------------------------------

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:

--------------------------------------------------------------------------------
|"inputs"                                                                      |
--------------------------------------------------------------------------------
|A descendant of the Lost City of Atlantis, who swam to Earth while saying, "  |
--------------------------------------------------------------------------------

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 incluem generated_text.

Exemplo:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"outputs"                                                                                                                                                                                                 |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|[{"generated_text": "A descendant of the Lost City of Atlantis, who swam to Earth while saying, \"For my life, I don't know if I'm gonna land upon Earth.\"\n\nIn \"The Misfits\", in a flashback, wh...  |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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.

Nota

Pipelines de geração de texto para texto onde return_tensors é verdadeiro não são suportados.

Entradas

  • inputs: Uma cadeia de caracteres com um prompt.

Exemplo:

--------------------------------------------------------------------------------
|"inputs"                                                                      |
--------------------------------------------------------------------------------
|A descendant of the Lost City of Atlantis, who swam to Earth while saying, "  |
--------------------------------------------------------------------------------

Saídas

  • generated_text: Uma cadeia de caracteres com o texto gerado se num_return_sequences for 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 incluindo generated_text.

Exemplo:

----------------------------------------------------------------
|"generated_text"                                              |
----------------------------------------------------------------
|, said that he was a descendant of the Lost City of Atlantis  |
----------------------------------------------------------------

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:

------------------------------------------------------------------------------------------------------
|"inputs"                                                                                            |
------------------------------------------------------------------------------------------------------
|Snowflake's Data Cloud is powered by an advanced data platform provided as a self-managed service.  |
------------------------------------------------------------------------------------------------------

Saídas

  • translation_text: Uma cadeia de caracteres que representa a tradução gerada se num_return_sequences for 1, ou uma representação de cadeia de caracteres de uma lista JSON de dicionários de resultados, cada um contendo campos que incluem translation_text.

Exemplo:

---------------------------------------------------------------------------------------------------------------------------------
|"translation_text"                                                                                                             |
---------------------------------------------------------------------------------------------------------------------------------
|Le Cloud de données de Snowflake est alimenté par une plate-forme de données avancée fournie sous forme de service autogérés.  |
---------------------------------------------------------------------------------------------------------------------------------

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:

-----------------------------------------------------------------------------------------
|"sequences"                                                       |"candidate_labels"  |
-----------------------------------------------------------------------------------------
|I have a problem with Snowflake that needs to be resolved asap!!  |[                   |
|                                                                  |  "urgent",         |
|                                                                  |  "not urgent"      |
|                                                                  |]                   |
|I have a problem with Snowflake that needs to be resolved asap!!  |[                   |
|                                                                  |  "English",        |
|                                                                  |  "Japanese"        |
|                                                                  |]                   |
-----------------------------------------------------------------------------------------

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:

--------------------------------------------------------------------------------------------------------------
|"sequence"                                                        |"labels"        |"scores"                |
--------------------------------------------------------------------------------------------------------------
|I have a problem with Snowflake that needs to be resolved asap!!  |[               |[                       |
|                                                                  |  "urgent",     |  0.9952737092971802,   |
|                                                                  |  "not urgent"  |  0.004726255778223276  |
|                                                                  |]               |]                       |
|I have a problem with Snowflake that needs to be resolved asap!!  |[               |[                       |
|                                                                  |  "Japanese",   |  0.5790848135948181,   |
|                                                                  |  "English"     |  0.42091524600982666   |
|                                                                  |]               |]                       |
--------------------------------------------------------------------------------------------------------------