Hugging Faceパイプライン¶
Snowflakeモデルレジストリは、 transformers.Pipeline メソッドを使用してロードできる 変換器 として定義されたHugging Faceモデルをサポートします。
以下のメソッドのいずれかを使用して、Hugging Faceモデルをモデルレジストリにログします。
Snowsight を使用して、Hugging Faceからモデルをインポートしてデプロイします。手順については 外部サービスからモデルをインポートしてデプロイする をご参照ください。
snowflake.ml.model.models.huggingface.TransformersPipelineインスタンスを作成し、log_model(): を呼び出します。重要
compute_pool_for_log引数を指定しない場合、モデルはデフォルトの CPU コンピューティングプールを使用してログに記録されます。compute_pool_for_log引数を指定した場合、モデルは指定されたコンピューティングプールを使用してログに記録されます。compute_pool_for_log引数をNoneに指定した場合、モデルファイルはローカルにダウンロードされ、モデルレジストリにアップロードされます。これには、 huggingface-hub をインストールする必要があります。
Hugging Faceからモデルをメモリにロードし、モデルレジストリにログを記録します。
Snowflake Notebooksを使用している場合、モデルの重みをダウンロードするには、ノートブックに外部アクセス統合がアタッチされている必要があります。この統合は、次のホストへのエグレスを許可するために必要です。
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
注釈
このホストのリストは、Hugging Faceにアクセスするために必要なもののみであり、いつでも変更される可能性があります。モデルは他のソースからのアーティファクトを必要とするかもしれません。
以下の例では、ノートブックで使用するための新しい外部アクセス統合 huggingface_network_rule を作成しています。
詳細については、 外部アクセス統合の作成と使用 をご参照ください。
外部アクセス統合が作成されたら、ノートブックに添付し、Hugging Faceモデルリポジトリにアクセスして、モデルの重みと構成をダウンロードします。詳細については、 Snowflake Notebooks の外部アクセスの設定 をご参照ください。
モデルレジストリ API¶
log_model() を呼び出すとき、 options ディクショナリは以下のキーをサポートしています。
オプションキー |
説明 |
型 |
|---|---|---|
|
モデルオブジェクトで利用可能なメソッドのリスト。Hugging Faceモデルは、デフォルトでオブジェクトの |
|
|
CUDAを持つプラットフォームへの展開時に使用するGPUランタイムのバージョン。 |
|
モデルレジストリは、パイプラインが以下のリストのタスクを含む場合に、 signatures 引数を推測します。
translation_xx_to_yy 。ここで、
xxおよびyyは、 ISO 3166-1 alpha-2 で定義されている2文字の国コードです。
注釈
タスク名は大文字と小文字が区別されます。
sample_input_data への log_model 引数は、Hugging Face モデルでは無視されます。レジストリがターゲットメソッドのシグネチャを知ることができるように、前述のリストにないHugging Faceモデルをログに記録する際には signatures 引数を指定します。
推論された署名を見るには、 show_functions() メソッドを呼び出します。この署名は、モデル関数の入力に必要な型と列名、およびその出力の形式を提供します。次の例は、 text-generation タスクを持つモデル bigscience/bloom-560m のシグネチャを示しています。
次の例は、以前の署名を使用してモデルを呼び出す方法を示しています。
使用上の注意¶
Hugging Faceのモデルの多くは大型で、標準的なウェアハウスには収まりません。Snowparkに最適化されたウェアハウスを使用するか、モデルの小さいバージョンを選択します。たとえば、
Llama-2-70b-chat-hfモデルの代替Llama-2-7b-chat-hfです。Snowflakeウェアハウスには GPUs はありません。CPU に最適化されたHugging Faceモデルのみを使用します。
Hugging Face変換器の中には、入力行ごとにディクショナリの配列を返すものがあります。モデルレジストリは、辞書の配列を、JSON表現を含む文字列に変換します。例えば、複数出力のQuestion Answeringの出力はこのようになります。
例¶
結果:
Hugging Faceパイプラインの推測署名¶
このセクションでは、必要な入力と期待される出力の説明と例を含め、サポートされるHugging Faceパイプラインの推測署名について説明します。すべての入出力はSnowpark DataFramesです。
フィル・マスク・パイプライン¶
タスクが「 fill-mask 」であるパイプラインには、以下の入出力があります。
入力¶
inputs:入力するマスクがある文字列。
例:
出力¶
outputs:score、token、token_str、sequenceのようなキーを含む、結果オブジェクトのリストの JSON 表現を含む文字列。詳細については、 FillMaskPipeline をご参照ください。
例:
コード例¶
トークン分類¶
タスクが「ner」または token-classification のパイプラインは、以下の入力と出力を持ちます。
入力¶
inputs:分類されるトークンを含む文字列。
例:
出力¶
outputs:entity、score、index、word、name、start、endのようなキーを含む、結果オブジェクトのリストの JSON 表現を含む文字列。詳細については、 TokenClassificationPipeline をご参照ください。
例:
コード例¶
質問応答(単一出力)¶
タスクが「 question-answering 」であるパイプラインは、 top_k が未設定または1に設定されている場合、次の入力と出力を持ちます。
入力¶
question:回答が必要な質問を含む文字列。context:回答を含む文字列。
例:
出力¶
score:0.0~1.0までの浮動小数点信頼度スコア。start:コンテキスト内の回答の最初のトークンの整数インデックス。end:元のコンテクストにおける回答の最後のトークンの整数インデックス。answer:見つかった回答を含む文字列。
例:
コード例¶
質問応答(複数出力)¶
タスクが「 question-answering 」であるパイプラインは、 top_k が設定され、1より大きい場合、次の入出力があります。
入力¶
question:回答が必要な質問を含む文字列。context:回答を含む文字列。
例:
出力¶
outputs:score、start、end、answerのようなキーを含む、結果オブジェクトのリストの JSON 表現を含む文字列。
例:
コード例¶
要約¶
タスクが「 要約 」のパイプラインでは、 return_tensors がFalseまたは未設定であり、次の入出力があります。
入力¶
documents:要約するテキストを含む文字列。
例:
出力¶
summary_text: 生成された要約を含む文字列、またはnum_return_sequencesが1より大きい場合、結果のリストの JSON 表現を含む文字列であり、各辞書にはsummary_textを含むフィールドがあります。
例:
コード例¶
テーブル質問応答¶
タスクが「 table-question-answering 」であるパイプラインには、以下の入出力があります。
入力¶
query: 回答が必要な質問を含む文字列。table: 回答を含む可能性のあるテーブルを表す{column -> [values]}形式の JSON シリアル化ディクショナリを含む文字列。
例:
出力¶
answer: 考えられる回答を含む文字列。coordinates: 回答が見つかったセルの座標を表す整数のリスト。cells: 回答が見つかったセルの内容を含む文字列のリスト。aggregator:使用するアグリゲーターの名前を含む文字列。
例:
コード例¶
テキスト分類(単一出力)¶
タスクが「 text-clasification 」または「sentiment-analysis」で、 top_k が設定されていないかNoneのパイプラインには、次の入出力があります。
入力¶
text:分類する文字列。text_pair:textと一緒に分類する文字列で、テキストの類似度を計算するモデルで使用されます。モデルが使用しない場合は空のままにします。
例:
出力¶
label:テキストの分類ラベルを表す文字列。score:0.0から1.0までの浮動小数点信頼度スコア。
例:
コード例¶
テキスト分類(複数出力)¶
タスクが「 text-clasification 」または「sentiment-analysis」で、 top_k が数値に設定されているパイプラインには、次の入出力があります。
注釈
テキスト分類タスクは、 top_k が任意の数に設定されている場合、その数が1であっても、複数出力とみなされます。単一出力 を取得するには、 top_k の値をNoneにしてください。
入力¶
text:分類する文字列。text_pair:textと一緒に分類する文字列で、テキストの類似度を計算するモデルで使用されます。モデルが使用しない場合は空のままにします。
例:
出力¶
outputs: 結果のリストの JSON 表現を含む文字列で、各リストには、labelとscoreを含むフィールドがあります。
例:
コード例¶
テキストからテキストへの生成¶
タスクが「 text2text generation 」であるパイプライン(return_tensors がFalseまたは未設定)には、次の入出力があります。
入力¶
inputs: プロンプトを含む文字列。
例:
出力¶
generated_text:
num_return_sequencesが1の場合に生成されたテキストを含む文字列、またはnum_return_sequences が1より大きい場合のgenerated_textなどのフィールドを含む結果ディクショナリの JSON リストの文字列表現。
例:
コード例¶
注釈
return_tensors がTrueのテキストからテキストの生成パイプラインはサポートされていません。
翻訳生成¶
タスクが「 translation 」であるパイプライン(return_tensors がFalseまたは未設定)には、以下の入出力があります。
注釈
return_tensors がTrueの翻訳生成パイプラインはサポートされていません。
入力¶
inputs:翻訳するテキストを含む文字列。
例:
出力¶
translation_text:num_return_sequencesが1の場合、生成された翻訳を表す文字列。または、translation_textなどのフィールドをそれぞれ含む、結果ディクショナリのリスト JSON の文字列表現。
例:
コード例¶
ゼロショット分類¶
タスクが「 zero-shot-classification 」であるパイプラインには、以下の入出力があります。
入力¶
sequences:分類するテキストを含む文字列。candidate_labels:テキストに適用するラベルを含む文字列のリスト。
例:
出力¶
sequence:入力文字列。labels:適用されたラベルを表す文字列のリスト。scores:各ラベルの浮動小数点信頼度スコアのリスト。
例:
テキスト生成¶
タスクが「 テキスト生成 」で、 return_tensors がFalseまたは未設定であるパイプラインには、以下の入出力があります。
注釈
return_tensors がTrueのテキスト生成パイプラインはサポートされていません。
入力¶
inputs: プロンプトを含む文字列。
例:
出力¶
outputs:generated_textを含むフィールドを含む結果オブジェクトのリストを JSON で表した文字列。
例:
コード例¶
テキスト生成(OpenAI互換)¶
タスクが「 テキスト生成 」で、 return_tensors がFalseまたは未設定であるパイプラインには、以下の入出力があります。
モデルのログの間、 snowflake.ml.model.openai_signatures.OPENAI_CHAT_SIGNATURE 署名を提供することによって、モデルはOpenAI APIとの互換性を得ます。これにより、ユーザーは openai.client.ChatCompletion スタイルリクエストをモデルに渡せます。
注釈
return_tensors がTrueのテキスト生成パイプラインはサポートされていません。
入力¶
messages:モデルに送信するメッセージを含むディクショナリのリスト。max_completion_tokens:生成するトークンの最大数。temperature:生成に使用する温度。stop:生成に使用する停止シーケンス。n:作成する生成の数。stream:生成をストリーミングするかどうか。top_p:生成に使用するtop p値。frequency_penalty:生成に使用する頻度ペナルティ。presence_penalty:生成に使用する存在ペナルティ。
例:
出力¶
outputs:generated_textを含むフィールドを含む結果オブジェクトのリストを JSON で表した文字列。
例: