批量推理作业¶
备注
预览版功能 – 公开
支持自 snowflake-ml-python 版本 1.26.0 之后的公开预览版。
使用 Snowflake 批量推理对静态或定期更新的数据集进行高效、大规模的模型推理。批量推理 API 使用 Snowpark Container Services (SPCS),提供针对海量吞吐量和成本效益进行优化的分布式计算层。
何时使用批量推理¶
对工作负载使用 run_batch 方法可以执行以下操作:
处理图像、音频或视频文件,或将多模态模型与非结构化数据结合使用
对数百万或数十亿行执行推理。
将推理作为管道中的离散异步暂存区运行。
将推理集成为 Airflow DAG 或 Snowflake 任务中的一个步骤。
限制¶
对于多模态用例,仅在服务器端支持加密
开始使用¶
连接到 Model Registry¶
连接到 Snowflake Model Registry 并检索模型引用如下:
执行批处理作业¶
此 API 使用 Snowpark Container Services (SPCS) 作业启动推理工作负载。运行推理后,计算会自动结束,以防止产生额外费用。在较高级别,此 API 如下所示:
作业管理¶
您可以使用以下方法获取作业列表、取消作业、获取作业句柄或删除作业:
备注
批量推理作业不支持 ML 作业 APIs 中的 result 函数。
指定推理数据¶
您可以使用结构化数据或非结构化数据进行批量推理。要在工作流程中使用结构化数据,可以向 run_batch 方法提供 SQL 查询或数据帧。
对于非结构化数据,您可以从 Snowflake 暂存区引用文件。要引用文件,请创建一个包含文件路径的数据帧。
向 run_batch 方法提供数据帧。run_batch 向模型提供文件内容。
结构化输入¶
以下示例说明了输入可能性范围:
非结构化输入(多模态)¶
对于非结构化数据,run_batch 方法可以从输入数据帧中提供的完全限定暂存区路径读取文件。以下示例展示如何指定非结构化输入数据:
要自动将暂存区中的所有文件列为数据帧,请使用如下代码:
表示数据类型¶
Run_batch 会自动将文件转换为模型兼容的格式。
模型可以接受以下格式之一的数据:
RAW_BYTES
BASE64
例如,如果您将图像以 PNG 格式存储在暂存区中,并且模型接受 RAW_BYTES,则可以使用 input_spec 实参来指定 Snowflake 如何转换数据。
以下示例代码将暂存区中的文件转换为 RAW_BYTES:
column_handling 实参告诉框架 X 的路径列包含完整的暂存区路径,并使用该文件中的原始字节调用模型。
输出 (output_spec)¶
指定用于存储文件输出的暂存区目录,如下所示:
Snowflake 目前支持输出文本并将其存储为 parquet 文件的模型。您可以将 parquet 文件转换为 Snowpark 数据框,如下所示:
传递参数¶
如果模型的签名包含使用 ParamSpec 定义的参数,您可以在推理时通过 InputSpec 中的 params 实参传递参数值。字典中未包含的任何参数都使用签名中的默认值。
分区模型¶
备注
此功能需要 snowflake-ml-python 版本 1.33.0 或更高版本。
您可以通过传递 InputSpec 中的 partition_column 实参,使用分区模型来运行批量推理作业。每个分区都是独立处理的,这对于按组训练或预测的模型非常有用。
有关分区模型的更多信息,请参阅 使用分区模型。
作业规范¶
要为批量推理工作负载配置作业级设置(例如处理器数量、资源分配和执行参数),请将 JobSpec 实例作为 run_batch 方法的 job_spec 实参传递。示例如下:
最佳实践¶
使用哨兵文件¶
作业可能会因各种原因而中途失败。因此,输出目录最终可能只有部分数据。为了标记作业完成,run_batch 会在输出目录中写入一个完成文件 _SUCCESS。
为避免输出不完整或不正确,请执行以下操作:
仅在找到哨兵文件后读取输出数据。
首先提供一个空目录。
使用 mode = SaveMode.ERROR 来运行 run_batch。
示例¶
使用自定义模型¶
使用 Hugging Face 模型¶
结合使用 Hugging Face 模型和 vLLM¶
任务:文本生成¶
任务:图像文本转文本¶
示例笔记本¶
有关端到端的可运行示例,请参阅 GitHub 上的 批量推理示例笔记本 (https://github.com/Snowflake-Labs/sf-samples/tree/main/samples/ml/model_serving/batch_inference)。