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:
Importar e implantar um modelo do Hugging Face e registrá-lo no Model Registry usando a UI
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')
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 dohuggingface-hub.
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')
Ao chamar log_model, o dicionário options oferece suporte ao seguinte:
Opção |
Descrição |
|---|---|
|
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: |
|
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 |
O registro infere o argumento signatures somente se o pipeline contiver uma tarefa da seguinte lista:
fill-maskquestion-answeringsummarizationtable-question-answeringtext2text-generationtext-classification(também chamado desentiment-analysis)text-generationtoken-classification(também chamado dener)translationtranslation_xx_to_yyzero-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')
]
)}]
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"]))
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, tenteLlama-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.\""}]'
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.", ""],
]
)
)
Resultado:
0 [{"label": "negative", "score": 0.8106237053871155}, {"label": "neutral", "score": 0.16587384045124054}]
1 [{"label": "neutral", "score": 0.9263970851898193}, {"label": "positive", "score": 0.05286872014403343}]
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-maskquestion-answeringsummarizationtable-question-answeringtext2text-generationtext-classification(aliassentiment-analysis)text-generationtoken-classification(aliasner)translationtranslation_xx_to_yyzero-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 comoscore,token,token_strousequence. 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 comoentity,score,index,word,name,startouend. 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 comoscore,start,endouanswer.
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, 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:
---------------------------------------------------------------------------------
|"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 comtexte 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 comtext, 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 incluemlabelescore.
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 incluemgenerated_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_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:
----------------------------------------------------------------
|"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 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:
---------------------------------------------------------------------------------------------------------------------------------
|"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 |
| |] |] |
--------------------------------------------------------------------------------------------------------------