Snowpark ML:Snowflake 中的端到端机器学习¶
备注
Snowpark ML Modeling API 从包版本 1.1.1 开始正式发布,Snowpark Model Registry 从包版本 1.5.0 开始正式发布。 如需提前获取即将推出的 Snowpark ML 功能的相关文档,请联系您的 Snowflake 代表。
Snowpark ML 是用于 Snowflake 端到端 ML 工作流程的 Python 库和底层基础架构,包括用于模型开发和操作的组件。通过 Snowpark ML,您可以使用熟悉的 Python 框架进行预处理、特征工程和训练。您可以完全在 Snowflake 中部署和管理模型,而无需进行任何数据移动、孤岛或治理权衡。
小技巧
请参阅 ` 通过 Snowpark ML 使用机器学习简介 <https://quickstarts.snowflake.com/guide/intro_to_machine_learning_with_snowpark_ml_for_python/#0 (https://quickstarts.snowflake.com/guide/intro_to_machine_learning_with_snowpark_ml_for_python/#0)>`_,其中提供了一个 Snowpark ML 中的端到端工作流程示例。
Snowpark ML 的关键组件¶
Snowpark ML 提供 APIs 来支持端到端机器学习开发和管理过程的每个阶段,它包括功能的以下关键组件:
Snowpark ML 还为您的模型提供了 访问数据 的方法。
Snowpark ML Modeling¶
Snowpark ML Modeling 支持使用流行的机器学习框架(如 scikit-learn、xgboost 和 lightgbm)在 Snowflake 中进行数据预处理、特征工程和模型训练。该 API 还包括一个预处理模块,可利用由 Snowpark 优化的数据仓库提供的计算资源,提供可扩展的数据转换。
Snowpark ML Operations¶
Snowpark ML Operations (MLOps) 提供 Snowpark ML Model Registry,补充了 Snowpark ML Development API。该模型注册表允许在 Snowflake 中安全部署和管理模型,并支持在 Snowflake 内部和外部训练的模型。
Snowpark ML Data Access¶
Snowpark ML Data Access 提供了简单而高性能的方法将数据馈送到机器学习模型。
FileSet API 提供了一个符合 ` Python fsspec <https://filesystem-spec.readthedocs.io/en/latest/ (https://filesystem-spec.readthedocs.io/en/latest/)>`_ 的 API,用于将数据从查询或 Snowpark DataFrame 具体化到 Snowflake 内部暂存区中,它还提供了用于处理数据以及 将数据馈送到 PyTorch 或 TensorFlow 中的便捷方法。
我们还推出一组 框架连接器,这些连接器以原生数据加载器格式为 Pytorch 和 Tensorflow 框架提供优化、安全且高性能的数据预置。
安装 Snowpark ML¶
重要
最近对 Snowpark Connector for Python 库进行了变更,移除了对 ` PyArrow <https://pypi.org/project/pyarrow/ (https://pypi.org/project/pyarrow/)>`_ 的依赖项。Snowpark ML 需要 PyArrow,但在 Snowpark ML 1.1.2 之前并不明确依赖于它。如果您使用的是早期版本,并且最近升级了 Snowpark Connector for Python,则可能需要手动安装 PyArrow。为此,请根据项目中使用的是 conda 还是 pip,使用以下命令之一。
conda install pyarrow
python -m pip install pyarrow
所有 Snowpark ML 功能都在一个包 (snowflake-ml-python
) 中提供。
您可以使用 conda
命令从 Snowflake Conda 通道安装 Snowpark ML,也可以使用 pip
从 Python 包索引 (PyPI) 进行安装。从 Conda 通道安装为首选方法。
从 Snowflake Conda 通道安装 Snowpark ML¶
警告
在基于 arm 的 Mac(使用 M1 或 M2 芯片)上通过 conda 安装 Snowpark ML 时,需要在创建 conda 环境时指定系统架构。可通过在 conda create
命令中设置 CONDA_SUBDIR=osx-arm64
来实现此操作:CONDA_SUBDIR=osx-arm64 conda create --name snowpark-ml
。
创建将安装 Snowpark ML 的 Conda 环境。如果您希望使用现有环境,请跳过此步骤。
conda create --name snowpark-ml
激活 Conda 环境:
conda activate snowpark-ml
从 Snowflake Conda 通道安装 Snowpark ML:
conda install --override-channels --channel https://repo.anaconda.com/pkgs/snowflake/ snowflake-ml-python
小技巧
当使用 Snowpark ML 时,请尽可能从 Snowflake conda 通道安装包,以确保您收到的包已经过 Snowpark ML 验证。
从 PyPI 安装 Snowpark ML¶
您可以使用标准 Python 包管理器 pip
,从 Python 包索引 (PyPI) 安装 Snowpark ML 包。
警告
如果您使用的是 Conda 环境,请勿使用此安装程序。请使用 Conda 说明。
切换到您的项目目录并激活您的 Python 虚拟环境:
cd ~/projects/ml source .venv/bin/activate
安装 Snowpark ML 包:
python -m pip install snowflake-ml-python
安装可选的建模依赖项¶
某些 Snowpark ML Modeling APIs 需要依赖项,而这些依赖项并未作为 Snowpark ML 的依赖项安装。当您安装 Snowpark ML Modeling 时,默认会安装 scikit-learn 和 xgboost 包,但 lightgbm 是一个可选的依赖项。如果计划使用 snowflake.ml.modeling.lightgbm
命名空间中的类,请自行安装 lightgbm。
使用以下命令激活 conda 环境,并从 Snowflake conda 通道安装 lightgbm。
conda activate snowpark-ml
conda install --override-channels --channel https://repo.anaconda.com/pkgs/snowflake/ lightgbm
使用以下命令激活虚拟环境,并使用 pip 安装 lightgbm。
.venv/bin/activate
python -m pip install 'snowflake-ml-python[lightgbm]'
Snowflake 可能会不时向 Snowpark ML 添加其他可选依赖项。要使用 pip 安装所有可选依赖项,请执行以下操作:
.venv/bin/activate
python -m pip install 'snowflake-ml-python[all]'
设置 Snowpark Python¶
Snowpark Python 是 Snowpark ML 的依赖项,随 Snowpark ML 自动安装。如果您的系统上未设置 Snowpark Python,您可能需要执行其他配置步骤。有关 Snowpark Python 设置说明,请参阅 为 Snowpark Python 设置开发环境。
连接到 Snowflake¶
Snowpark ML 要求您使用 Snowpark Session
对象连接到 Snowflake。使用 snowflake.ml.utils.connection_params
模块中的 SnowflakeLoginOptions
函数来获取创建会话的配置设置。该函数可从 SnowSQL 配置文件 中的指定连接或您设置的环境变量读取连接设置。它会返回一个包含这些参数的字典,以用于创建连接。
以下示例从 SnowSQL 配置文件中的指定连接 myaccount
中读取连接参数。要创建 Snowpark Python 会话,请为 Session
类创建一个构建器,并将连接信息传递给构建器的 configs
方法:
from snowflake.snowpark import Session
from snowflake.ml.utils import connection_params
params = connection_params.SnowflakeLoginOptions("myaccount")
sp_session = Session.builder.configs(params).create()
现在,您可以将会话传递到需要它们的任意 Snowpark ML 函数。
小技巧
要从现有的 Snowflake Connector for Python 连接创建 Snowpark Python 会话,请将连接对象传递给会话构建器。这里,connection
是 Snowflake Connector for Python 连接。
session = Session.builder.configs({"connection": connection}).create()
指定仓库¶
Snowpark ML 的许多部分,例如训练模型或运行推理,都在 Snowflake 仓库中运行代码。这些操作在您用于连接的会话指定的仓库中运行。例如,如果在 SnowSQL 配置文件 中通过指定连接创建会话,就可以在指定配置中使用 warehousename
参数指定仓库。
如果配置中还不存在仓库设置,可以在创建 Session
对象时添加该设置,如此处所示。
from snowflake.snowpark import Session
from snowflake.ml.utils import connection_params
# Get named connection from SnowQSL configuration file
params = connection_params.SnowflakeLoginOptions("myaccount")
# Add warehouse name for model method calls if it's not already present
if "warehouse" not in params:
params["warehouse"] = "mlwarehouse"
sp_session = Session.builder.configs(params).create()
如果会话中没有指定仓库,或者想使用不同的仓库,请调用会话的 use_warehouse
方法。
sp_session.use_warehouse("mlwarehouse")
成本注意事项¶
在 Snowflake 中训练和使用模型时,您需在虚拟仓库中运行代码,这会产生计算成本。这些成本根据模型类型以及训练和预测中使用的数据量而有所不同。有关 Snowflake 计算成本的一般信息,请参阅 了解计算成本。
延伸阅读¶
有关 Snowpark ML Modeling 和 Snowpark ML Ops 的信息,请参阅以下资源。
** 端到端 ML 工作流程 **
` Snowpark ML Quickstarts <https://quickstarts.snowflake.com/guide/intro_to_machine_learning_with_snowpark_ml_for_python (https://quickstarts.snowflake.com/guide/intro_to_machine_learning_with_snowpark_ml_for_python)>`_
建模
数据访问
ML Ops
如需提前获取当前正在开发的其他功能的文档,请联系您的 Snowflake 代表。
API 参考¶
Snowpark ML API 参考 中包含有关所有公开发布的功能的文档。您还可以通过在交互式 Python 会话中使用 Python 的 help
函数,获得任意类的详细 API 文档。例如:
from snowflake.ml.modeling.preprocessing import OneHotEncoder
help(OneHotEncoder)