Hugging Face 파이프라인

Model Registry 레지스트리는 transformers.Pipeline 에서 파생되는 변환기 로 정의된 Hugging Face 모델 클래스를 지원합니다. 예:

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

log_model 을 호출할 때 options 사전에서 다음 추가 옵션을 사용할 수 있습니다.

옵션

설명

target_methods

모델 오브젝트에서 사용할 수 있는 메서드 이름 목록입니다. Hugging Face 모델에는 __call__ 메서드가 존재한다고 가정하여 기본적으로 이 대상 메서드를 갖습니다.

cuda_version

GPU가 있는 플랫폼에 배포할 때 사용되는 CUDA 런타임 버전은 기본적으로 11.8입니다. 수동으로 None 으로 설정하면 GPU가 있는 플랫폼에 모델을 배포할 수 없습니다.

중요

huggingface_pipeline.HuggingFacePipelineModel 기반 모델에는 구성 데이터만 포함되는데, 모델을 사용할 때마다 Hugging Face Hub에서 모델 가중치가 다운로드됩니다.

현재, Model Registry는 외부 네트워크 액세스 없이도 실행할 수 있는 독립형 모델만 지원합니다. 가장 좋은 방법은 위의 예와 같이 transformers.Pipeline 을 사용하는 것입니다. 이렇게 하면 모델 가중치를 로컬 시스템인 log_model 에 다운로드한 다음 인터넷 액세스가 필요 없는 독립형 모델 오브젝트를 업로드합니다.

레지스트리는 파이프라인에 다음 목록의 작업이 하나 포함되어 있는 경우에만 signatures 인자를 추론합니다.

  • conversational

  • fill-mask

  • question-answering

  • summarization

  • table-question-answering

  • text2text-generation

  • text-classification (sentiment-analysis 라고도 함)

  • text-generation

  • token-classification (ner 라고도 함)

  • translation

  • translation_xx_to_yy

  • zero-shot-classification

log_model 에 대한 sample_input_data 인자는 Hugging Face 모델에서 완전히 무시됩니다. 레지스트리가 대상 메서드의 서명을 알 수 있도록 위 목록에 없는 Hugging Face 모델을 로깅할 때 signatures 인자를 지정하십시오.

추론된 서명을 보려면 show_functions 메서드를 사용하십시오. 예를 들어 다음 사전은 lmv.show_functions() 의 결과이며, 여기서 lmv 는 위에 로깅된 모델입니다.

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

다음 코드를 사용하여 lmv 모델을 호출합니다.

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

사용법 노트

  • 많은 Hugging Face 모델은 크기가 커서 표준 웨어하우스에 맞지 않습니다. Snowpark에 최적화된 웨어하우스를 사용하거나 더 작은 버전의 모델을 선택하십시오. 예를 들어 Llama-2-70b-chat-hf 모델을 사용하는 대신 Llama-2-7b-chat-hf 를 사용해 보십시오.

  • Snowflake 웨어하우스에는 GPU가 없습니다. CPU에 최적화된 Hugging Face 모델만 사용하십시오.

  • 일부 Hugging Face 변환기는 입력 행마다 사전 배열을 반환합니다. 레지스트리는 사전 배열을 JSON 배열 표현이 포함된 문자열로 변환합니다. 예를 들어 다중 출력 질문 답변 출력은 이와 비슷하게 보입니다.

    '[{"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

# 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

결과:

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

Hugging Face 파이프라인에 대한 추론된 서명

Snowflake Model Registry는 다음 목록에서 단일 작업을 포함하는 Hugging Face 파이프라인의 시그니처를 자동으로 추론합니다.

  • conversational

  • fill-mask

  • question-answering

  • summarization

  • table-question-answering

  • text2text-generation

  • text-classification (별칭은 sentiment-analysis)

  • text-generation

  • token-classification (별칭은 ner)

  • translation

  • translation_xx_to_yy

  • zero-shot-classification

이 섹션에서는 요구 사항 및 예상 출력에 대한 설명과 예시를 포함하여 이러한 유형의 Hugging Face 파이프라인의 서명에 대해 설명합니다. 모든 입력과 출력은 Snowpark DataFrames입니다.

대화형 파이프라인

작업이 대화형 인 파이프라인으로, 입력과 출력은 다음과 같습니다.

입력

  • user_inputs: 사용자의 이전 입력과 현재 입력을 나타내는 문자열 목록입니다. 목록의 마지막 항목은 현재 입력입니다.

  • generated_responses: 모델의 이전 응답을 나타내는 문자열 목록입니다.

예:

---------------------------------------------------------------------------
|"user_inputs"                                    |"generated_responses"  |
---------------------------------------------------------------------------
|[                                                |[                      |
|  "Do you speak French?",                        |  "Yes I do."          |
|  "Do you know how to say Snowflake in French?"  |]                      |
|]                                                |                       |
---------------------------------------------------------------------------

출력

  • generated_responses: 모델의 이전 응답과 현재 응답을 나타내는 문자열 목록입니다. 목록의 마지막 항목은 현재 응답입니다.

예:

-------------------------
|"generated_responses"  |
-------------------------
|[                      |
|  "Yes I do.",         |
|  "I speak French."    |
|]                      |
-------------------------

마스크 채우기 파이프라인

작업이 “마스크 채우기 “ 인 파이프라인으로, 입력과 출력은 다음과 같습니다.

입력

  • inputs: 채워야 할 마스크가 있는 문자열입니다.

예:

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

출력

  • outputs: 오브젝트 목록의 JSON 표현이 포함된 문자열로, 각 키에는 score, token, token_str 또는 sequence 같은 키가 포함될 수 있습니다. 자세한 내용은 FillMaskPipeline 섹션을 참조하십시오.

예:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"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"...  |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

토큰 분류

작업이 “ner” 또는 “token-classification “인 파이프라인으로, 입력과 출력은 다음과 같습니다.

입력

  • inputs: 분류할 토큰이 포함된 문자열입니다.

예:

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

출력

  • outputs: 결과 오브젝트 목록의 JSON 표현이 포함된 문자열로, 각 키에는 entity, score, index, word, name, start 또는 end 같은 키가 포함될 수 있습니다. 자세한 내용은 TokenClassificationPipeline 섹션을 참조하십시오.

예:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"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}, {...  |

쿼리 응답(단일 출력)

작업이 “question-answering “인 파이프라인으로, 여기서 top_k 는 설정 취소되거나 1로 설정되고, 입력과 출력은 다음과 같습니다.

입력

  • question: 답변할 질문이 포함된 문자열입니다.

  • context: 답변을 포함할 수 있는 문자열입니다.

예:

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

출력

  • score: 0.0~1.0 사이의 부동소수점 신뢰도 점수입니다.

  • start: 컨텍스트에서 답변의 첫 번째 토큰의 정수 인덱스입니다.

  • end: 원래 컨텍스트에서 답변의 마지막 토큰의 정수 인덱스입니다.

  • answer: 찾은 답변이 포함된 문자열입니다.

예:

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

쿼리 응답(다중 출력)

작업이 “question-answering “인 파이프라인으로, 여기서 top_k 는 설정되고 1보다 큰 값이며, 입력과 출력은 다음과 같습니다.

입력

  • question: 답변할 질문이 포함된 문자열입니다.

  • context: 답변을 포함할 수 있는 문자열입니다.

예:

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

출력

  • outputs: 결과 오브젝트 목록의 JSON 표현이 포함된 문자열로, 각 키에는 score, start, end 또는 answer 같은 키가 포함될 수 있습니다.

예:

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"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"}]  |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

요약

작업이 “요약 “ 인 파이프라인으로, 여기서 return_tensors 는 False 또는 설정 취소되며, 입력과 출력은 다음과 같습니다.

입력

  • documents: 요약할 텍스트가 포함된 문자열입니다.

예:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"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...  |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

출력

  • summary_text: 생성된 요약이 포함된 문자열 또는 num_return_sequences 가 1보다 큰 경우 결과 목록의 JSON 표현식이 포함된 문자열이며, 각 문자열은 summary_text 를 포함한 필드가 포함된 사전입니다.

예:

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

테이블 질문 답변

작업이 table-question-answering 인 파이프라인으로, 입력과 출력은 다음과 같습니다.

입력

  • query: 답변할 질문이 포함된 문자열입니다.

  • table: 답변을 포함할 수 있는 테이블을 나타내는 {column -> [values]} 형식의 JSON 직렬화 사전이 포함된 문자열입니다.

예:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"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"]}  |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

출력

  • answer: 가능한 답변이 포함된 문자열입니다.

  • coordinates: 답변이 이 위치한 셀의 좌표를 나타내는 정수 목록입니다.

  • cells: 답변이 위치한 셀의 내용이 포함된 문자열 목록입니다.

  • aggregator: 사용된 집계 장치의 이름이 포함된 문자열입니다.

예:

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

텍스트 분류(단일 출력)

작업이 “text-clasification “ 또는 “sentiment-analysis”인 파이프라인으로, 여기서 top_k 는 설정되지 않거나 None이며, 입력과 출력은 다음과 같습니다.

입력

  • text: 분류할 문자열입니다.

  • text_pair: text 로 분류되는 문자열로, 텍스트 유사도를 계산하는 모델과 함께 사용됩니다. 모델에서 사용하지 않으면 비워둡니다.

예:

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

출력

  • label: 텍스트의 분류 레이블을 나타내는 문자열입니다.

  • score: 0.0~1.0 사이의 부동소수점 신뢰도 점수입니다.

예:

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

텍스트 분류(다중 출력)

작업이 “text-clasification “ 또는 “sentiment-analysis”인 파이프라인으로, 여기서 top_k 는 숫자로 설정되며, 입력과 출력은 다음과 같습니다.

참고

텍스트 분류 작업은 top_k 가 임의의 숫자로 설정되어 있으면 그 숫자가 1이더라도 다중 출력으로 간주됩니다. 단일 출력 을 얻으려면 None의 top_k 값을 사용합니다.

입력

  • text: 분류할 문자열입니다.

  • text_pair: text 로 분류되는 문자열로, 텍스트 유사도를 계산하는 모델과 함께 사용됩니다. 모델에서 사용하지 않으면 비워둡니다.

예:

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

출력

  • outputs: 결과 목록의 JSON 표현을 포함하는 문자열로, 각 목록에는 labelscore 등의 필드가 포함되어 있습니다.

예:

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

텍스트 생성

작업이 “text-generation “ 인 파이프라인으로, 여기서 return_tensors 는 False 또는 설정 취소되며, 입력과 출력은 다음과 같습니다.

참고

return_tensors 가 True인 텍스트 생성 파이프라인은 지원되지 않습니다.

입력

  • inputs: 프롬프트가 포함된 문자열입니다.

예:

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

출력

  • outputs: 결과 오브젝트 목록의 JSON을 나타내는 문자열로, 각 필드에는 generated_text 등의 필드가 포함됩니다.

예:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|"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...  |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

텍스트-텍스트 생성

작업이 “text2text-generation “ 인 파이프라인으로, 여기서 return_tensors 는 False 또는 설정 취소되며, 입력과 출력은 다음과 같습니다.

참고

return_tensors 가 True인 텍스트-텍스트 생성 파이프라인은 지원되지 않습니다.

입력

  • inputs: 프롬프트가 포함된 문자열입니다.

예:

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

출력

  • generated_text: num_return_sequences 가 1이면 생성된 텍스트를 포함하는 문자열, num_return_sequences가 1보다 크면 generated_text 를 포함한 필드를 포함하는 결과 사전의 JSON 목록을 문자열로 표현합니다.

예:

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

번역 생성

작업이 “번역 “ 인 파이프라인으로, 여기서 return_tensors 는 False 또는 설정 취소되며, 입력과 출력은 다음과 같습니다.

참고

return_tensors 가 True인 번역 생성 파이프라인은 지원되지 않습니다.

입력

  • inputs: 번역할 텍스트가 포함된 문자열입니다.

예:

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

출력

  • translation_text: num_return_sequences 가 1인 경우 생성된 번역을 나타내는 문자열 또는 translation_text 등 필드가 각각 포함된 결과 사전의 JSON 목록을 나타내는 문자열입니다.

예:

---------------------------------------------------------------------------------------------------------------------------------
|"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.  |
---------------------------------------------------------------------------------------------------------------------------------

제로샷 분류

작업이 zero-shot-classification 인 파이프라인으로, 입력과 출력은 다음과 같습니다.

입력

  • sequences: 분류할 텍스트가 포함된 문자열입니다.

  • candidate_labels: 텍스트에 적용할 레이블이 포함된 문자열 목록입니다.

예:

-----------------------------------------------------------------------------------------
|"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"        |
|                                                                  |]                   |
-----------------------------------------------------------------------------------------

출력

  • sequence: 입력 문자열입니다.

  • labels: 적용된 레이블을 나타내는 문자열 목록입니다.

  • scores: 각 레이블에 대한 부동소수점 신뢰도 점수 목록입니다.

예:

--------------------------------------------------------------------------------------------------------------
|"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   |
|                                                                  |]               |]                       |
--------------------------------------------------------------------------------------------------------------