Snowflake 仓库中的推理¶
默认情况下,Snowflake Model Registry 在仓库中运行模型方法。在仓库中运行模型仅适用于中小型仅限 CPU 的模型,其依赖项可以通过 Snowflake conda 通道中提供的包来满足。
备注
您还可以在 Snowpark Container Services (SPCS) 计算池上运行模型。此方法更适合于可以受益于分布式推理的大型模型。有关更多信息,请参阅 Snowpark Container Services 中的 Model Serving。
要开始使用,请在模型注册表中 记录模型。只有已在注册表中记录的模型才能进行推理。记录模型,或者通过 registry.get_model(...).version(...)
从注册表中加载现有模型,会返回一个 ModelVersion
对象,对该对象您可以调用 run
方法。
来自 Python 的推理¶
要调用模型版本的方法,请使用 mv.run
,其中 mv
是 ModelVersion
对象。指定要调用的函数的名称,并传递包含推理数据的 Snowpark 或 pandas DataFrame,以及任何必需的参数。该方法在 Snowflake 仓库中执行。
该方法的返回值是 Snowpark 或 pandas DataFrame,匹配传入的 DataFrame 的类型。Snowpark DataFrames 采用延迟计算的方式,因此只有在调用 DataFrame 的 collect
、show
或 to_pandas
方法时才会运行此类方法。
备注
调用方法时,该方法会在连接注册表时所用会话内指定的仓库中运行。请参阅 指定仓库。
下面的示例阐释了模型的 predict
方法的运行。除了推理数据(此处的 test_features
)之外,此模型的 predict
方法不需要任何参数。如果确实需要,其他参数将作为附加参数在推理数据之后传递。
remote_prediction = mv.run(test_features, function_name="predict")
remote_prediction.show() # assuming test_features is Snowpark DataFrame
要查看在给定模型上可以调用哪些方法,请调用 mv.show_functions
。此方法的返回值是一个 ModelFunctionInfo
对象列表。这些对象中的每一个都包括以下属性:
name
:可从 Python 或 SQL 调用的函数的名称。target_method
:原始登记的模型中 Python 方法的名称。
来自 SQL 的推理¶
您可以使用 model_name!method_name(...)
语法调用模型的方法。模型上可用的方法由底层 Python 模型类确定。例如,许多类型的模型都使用名为 predict 的方法进行推理。
要调用默认模型的方法,请使用以下语法。在括号中包含任何方法实参,并在 FROM
子句中指定包含推理数据的表。
SELECT <model_name>!<method_name>(...) FROM <table_name>;
要从模型的特定版本调用方法,请为模型的特定版本创建别名,然后通过别名调用该方法。
使用以下语法从模型的特定版本调用方法。
WITH <model_version_alias> AS MODEL <model_name> VERSION <version_or_alias_name>
SELECT <model_version_alias>!<method_name>(...) FROM <table_name>;
以下示例使用 LAST
别名调用模型的最新版本。
WITH latest AS MODEL my_model VERSION LAST
SELECT latest!predict(...) FROM my_table;
小技巧
请 在此处 参阅 SQL API 参考。