Hugging Face pipeline¶
Snowflake Model Registry 支持任何指定为 转换器 (link removed) 且可使用 transformers.Pipeline (link removed) 方法加载的 Hugging Face 模型。
使用以下方法之一将 Hugging Face 模型记录到 Model Registry:
使用 Snowsight 从 Hugging Face 导入和部署模型。有关说明,请参阅 Import and deploy models from an external service。
创建
snowflake.ml.model.models.huggingface.TransformersPipeline实例并调用log_model():重要
如果未指定
compute_pool_for_log实参,则使用默认的 CPU 计算池记录模型。如果指定了
compute_pool_for_log实参,则使用指定的计算池记录模型。如果将
compute_pool_for_log实参指定为 None,则模型文件会先下载到本地,然后上传到 Model Registry。这需要安装 huggingface-hub (https://pypi.org/project/huggingface-hub/)。
从内存中的 Hugging Face 加载模型并将其记录到 Model Registry:
如果您使用的是 Snowflake 笔记本,则为了下载模型的权重,您需要将外部访问集成附加到您的笔记本。要允许访问以下主机,需要此集成:
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 模型默认使用对象的 |
|
|
部署到具有 GPU 的平台时使用的 CUDA 运行时版本。如果设置为 |
|
如果管道包含以下列表中的一个任务,模型注册表就会推断 signatures 实参:
text-generation)
translation_xx_to_yy,其中
xx和yy是 ISO 3166-1 alpha-2 (link removed) 中定义的双字母国家/地区代码
备注
任务名称区分大小写。
Hugging Face 模型会忽略 sample_input_data 的 log_model 实参。在记录不在上述列表中的 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 表示的字符串。例如,多重输出问题回答输出如下所示:
示例¶
结果:
Hugging Face 管道的推断签名¶
本部分介绍支持的 Hugging Face 管道的推断签名,包括所需输入和预期输出的描述和示例。所有输入和输出均为 Snowpark DataFrames。
Fill-mask 管道¶
“Fill-mask (link removed)”任务的管道具有以下输入和输出。
输入¶
inputs:要填充掩码的字符串。
示例:
输出¶
outputs:一个字符串,包含以 JSON 格式表示的对象列表,列表中的每个对象都可能包含score、token、token_str或sequence等键。 有关详细信息,请参阅 FillMaskPipeline (link removed)。
示例:
代码示例¶
令牌分类¶
“ner”或 token-classification (link removed) 任务的管道具有以下输入和输出。
输入¶
inputs:包含要分类的令牌的字符串。
示例:
输出¶
outputs:一个字符串,包含以 JSON 格式表示的结果对象的列表,列表中的每个对象都可能包含entity、score、index、word、name、start或end等键。 有关详细信息,请参阅 TokenClassificationPipeline <https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.TokenClassificationPipeline (link removed)>`_。
示例:
代码示例¶
问答(单个输出)¶
“` question-answering <https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.QuestionAnsweringPipeline (link removed)>`_”任务的管道,其中 top_k 未设置或设置为 1,具有以下输入和输出。
输入¶
question:包含要回答的问题的字符串。context:可能包含答案的字符串。
示例:
输出¶
score:浮点置信度分数从 0.0 到 1.0。start:在上下文中,答案第一个词元的整数索引。end:在原始上下文中,答案最后一个词元的整数索引。answer:包含找到的答案的字符串。
示例:
代码示例¶
问答(多个输出)¶
任务是“` question-answering <https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.QuestionAnsweringPipeline (link removed)>`_”的管道,其中 top_k 设置为大于 1,具有以下输入和输出。
输入¶
question:包含要回答的问题的字符串。context:可能包含答案的字符串。
示例:
输出¶
outputs:一个字符串,包含以 JSON 格式表示的结果对象的列表,列表中的每个对象都可能包含score、start、end或answer等键。
示例:
代码示例¶
摘要¶
任务是“` summarization <https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.SummarizationPipeline (link removed)>`_”的管道,其中 return_tensors 为 False 或未设置,具有以下输入和输出。
输入¶
documents:包含要汇总的文本的字符串。
示例:
输出¶
summary_text:包含生成的摘要的字符串,或者,如果num_return_sequences大于 1,则字符串包含以 JSON 格式表示的结果列表,每个结果都是一个包含字段的字典,其中包括summary_text。
示例:
代码示例¶
表问答¶
任务是“` table-question-answering <https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.TableQuestionAnsweringPipeline (link removed)>`_”的管道具有以下输入和输出。
输入¶
query:包含要回答的问题的字符串。table:包含 JSON 序列化字典的字符串,形式为{column -> [values]},表示可能包含答案的表。
示例:
输出¶
answer:包含可能答案的字符串。coordinates:表示答案所在的单元格坐标的整数列表。cells:包含答案所在的单元格内容的字符串列表。aggregator:包含所用聚合器名称的字符串。
示例:
代码示例¶
文本分类(单个输出)¶
“text-clasification (link removed)”任务的管道,其中 top_k 未设置或为 None,具有以下输入和输出。
输入¶
text:要分类的字符串。text_pair:与text一起分类的字符串,用于计算文本相似度的模型。如果模型不使用它,则留空。
示例:
输出¶
label:表示文本分类标签的字符串。score:浮点置信度分数从 0.0 到 1.0。
示例:
代码示例¶
文本分类(多个输出)¶
“text-clasification (link removed)”任务的管道,其中 top_k 设置为一个数字,具有以下输入和输出。
备注
如果将 top_k 设置为任何数字,即使该数字为 1,文本分类任务也被视为多个输出。要获取 单个输出,请将 top_k 值设为 None。
输入¶
text:要分类的字符串。text_pair:与text一起分类的字符串,用于计算文本相似度的模型。如果模型不使用它,则留空。
示例:
输出¶
outputs:一个字符串,包含以 JSON 格式表示的结果列表,每个结果都包含包括label和score的字段。
示例:
代码示例¶
文本到文本的生成¶
任务是“` text2text-generation <https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.Text2TextGenerationPipeline (link removed)>`_”的管道,其中 return_tensors 为 False 或未设置,具有以下输入和输出。
输入¶
inputs:包含提示的字符串。
示例:
输出¶
generated_text:如果
num_return_sequences为 1,则为包含生成文本的字符串;如果 num_return_sequences 大于 1,则为以 JSON 格式表示字典结果列表的字符串,字典包含generated_text在内的字段。
示例:
代码示例¶
备注
文本到文本的生成管道,其中 return_tensors 是 True,不受支持。
翻译生成¶
任务是“` translation <https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.TranslationPipeline (link removed)>`_”的管道,其中 return_tensors 为 False 或未设置,具有以下输入和输出。
备注
翻译生成管道,其中 return_tensors 是 True,不受支持。
输入¶
inputs:包含要翻译的文本的字符串。
示例:
输出¶
translation_text:如果num_return_sequences为 1,则为表示生成的翻译的字符串,或者是以 JSON 格式表示字典结果列表的字符串,每个字典均包含包括translation_text的字段。
示例:
代码示例¶
Zero-shot 分类¶
“zero-shot-classification (link removed)”任务的管道具有以下输入和输出。
输入¶
sequences:包含要分类的文本的字符串。candidate_labels:包含要应用于文本的标签的字符串列表。
示例:
输出¶
sequence:输入字符串。labels:表示已应用的标签的字符串列表。scores:每个标签的浮点置信度分数列表。
示例:
文本生成¶
任务是“` text-generation <https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.TextGenerationPipeline (link removed)>`_”的管道,其中 return_tensors 为 False 或未设置,具有以下输入和输出。
备注
文本生成管道,其中 return_tensors 是 True,不受支持。
输入¶
inputs:包含提示的字符串。
示例:
输出¶
outputs:一个字符串,包含以 JSON 格式表示的结果对象的列表,每个对象都包含包括generated_text的字段。
示例:
代码示例¶
文本生成(兼容 OpenAI)¶
任务是“` text-generation <https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.TextGenerationPipeline (link removed)>`_”的管道,其中 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:选择使用 时默认使用的角色和仓库。用于生成的最高 p 值。frequency_penalty:选择使用 时默认使用的角色和仓库。用于生成的频率损失。presence_penalty:选择使用 时默认使用的角色和仓库。用于生成的存在惩罚。
示例:
输出¶
outputs:一个字符串,包含以 JSON 格式表示的结果对象的列表,每个对象都包含包括generated_text的字段。
示例: