ML 的容器运行时¶
概述¶
ML 的容器运行时是一组预配置的可定制环境,专为 Snowpark Container Services 上的机器学习构建,涵盖交互式实验和批量 ML 工作负载,例如模型训练、超参数调优、批量推理和微调。它们包括最热门的机器学习和深度学习框架。与 Snowflake 笔记本一起使用,可提供端到端的 ML 体验。
执行环境¶
ML 的容器运行时提供了一个环境,其中装有支持 Snowflake 内各种 ML 开发任务的包和库。除了预安装的包外,您还可以从外部来源(如公共 PyPI 存储库)或内部托管的包存储库导入包,这些包存储库提供了经批准可在您组织内部使用的包列表。
自定义 Python ML 工作负载和受支持的训练 APIs 在 Snowpark Container Services 中执行,该服务可在 CPU 或 GPU 计算池上运行。使用 Snowflake ML APIs 时,ML 的容器运行时会将处理任务分配到可用资源中。
分布式处理¶
Snowflake ML 建模和数据加载 APIs 建立在 Snowflake ML 的分布式处理框架之上,通过充分利用可用的计算能力来最大程度地提高资源利用率。默认情况下,该框架在多 GPU 节点上使用所有 GPUs,与开源的包相比,性能显著提高,并缩短了整体运行时间。

机器学习工作负载(包括数据加载)在 Snowflake 管理的计算环境中执行。该框架允许根据当前任务的具体要求动态扩展资源,例如训练模型或加载数据。每个任务的资源数量(包括 GPU 和内存分配)可通过提供的 APIs 轻松配置。
优化的数据加载¶
容器运行时提供了一系列数据连接器 APIs,支持将 Snowflake 数据源(包括表、DataFrames 和 Datasets)连接到流行的 ML 框架(例如 PyTorch 和 TensorFlow),充分利用多个核心或 GPUs。一旦加载,数据可以使用开源包或任何 Snowflake ML APIs(包括下面所述的分布式版本)进行处理。这些 APIs 可以在 snowflake.ml.data
命名空间中找到。
snowflake.ml.data.data_connector.DataConnector
类将 Snowpark DataFrames 或 Snowflake ML Datasets 连接到 TensorFlow 或 PyTorch DataSets 或 Pandas DataFrames。使用以下类方法之一实例化连接器:
DataConnector.from_dataframe
接受 Snowpark DataFrame。
DataConnector.from_dataset
:接受 Snowflake ML 数据集,按名称和版本指定。
DataConnector.from_sources
:接受源列表,每个源可以是 DataFrame 或数据集。
您实例化了连接器(例如,调用实例 data_connector
)之后,请调用以下方法以生成所需类型的输出。
data_connector.to_tf_dataset
:返回适合与 TensorFlow 一起使用的 TensorFlow 数据集。data_connector.to_torch_dataset
:返回适合与 PyTorch 一起使用的 PyTorch 数据集。
有关这些 APIs 的更多信息,请参阅 Snowflake ML API 参考。
使用开源构建¶
凭借预先填充热门 ML 包的基础 CPU 和 GPU 图像以及灵活性,以使用 pip
安装其他库,用户可以在 Snowflake Notebooks 中使用熟悉和创新的开源框架,而无需将数据移出 Snowflake。您可以将用于数据加载、训练和超参数优化的 Snowflake 分布式 APIs 与热门 OSS 包的熟悉 APIs 结合使用,只需对接口进行小型更改以允许扩展配置,从而扩展处理。
以下代码演示如何使用这些 APIs 创建 XGBoost 分类器:
from snowflake.snowpark.context import get_active_session
from snowflake.ml.data.data_connector import DataConnector
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
session = get_active_session()
# Use the DataConnector API to pull in large data efficiently
df = session.table("my_dataset")
pandas_df = DataConnector.from_dataframe(df).to_pandas()
# Build with open source
X = df_pd[['feature1', 'feature2']]
y = df_pd['label']
# Split data into test and train in memory
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=34)
# Train in memory
model = xgb.XGBClassifier()
model.fit(X_train, y_train)
# Predict
y_pred = model.predict(X_test)
优化的训练¶
ML 的容器运行时提供一系列分布式训练 APIs(包括 LightGBM、PyTorch 和 XGBoost 的分布式版本),充分利用容器环境中的可用资源。这些可以在 snowflake.ml.modeling.distributors
命名空间中找到。分布式类的 APIs 与标准版本的类似。
有关这些 APIs 的更多信息,请参阅 API 参考。
XGBoost¶
主要 XGBoost 类是 snowflake.ml.modeling.distributors.xgboost.XGBEstimator
。相关类包括:
snowflake.ml.modeling.distributors.xgboost.XGBScalingConfig
要查看与此 API 搭配使用的示例,请参阅 Snowflake ML 容器运行时 GitHub 存储库中的 XGBoost on GPU (https://github.com/Snowflake-Labs/sfguide-getting-started-with-container-runtime-apis/blob/main/XGBoost_on_GPU_Quickstart.ipynb) 示例笔记本。
LightGBM¶
主要 LightGBM 类是 snowflake.ml.modeling.distributors.lightgbm.LightGBMEstimator
。相关类包括:
snowflake.ml.modeling.distributors.lightgbm.LightGBMScalingConfig
要查看与此 API 搭配使用的示例,请参阅 Snowflake ML 容器运行时 GitHub 存储库中的 LightGBM on GPU (https://github.com/Snowflake-Labs/sfguide-getting-started-with-container-runtime-apis/blob/main/LightGBM_on_GPU_Quickstart.ipynb) 示例笔记本。
PyTorch¶
主要 PyTorch 类是 snowflake.ml.modeling.distributors.pytorch.PyTorchDistributor
。相关的类和函数包括:
snowflake.ml.modeling.distributors.pytorch.WorkerResourceConfig
snowflake.ml.modeling.distributors.pytorch.PyTorchScalingConfig
snowflake.ml.modeling.distributors.pytorch.Context
snowflake.ml.modeling.distributors.pytorch.get_context
要查看与此 API 搭配使用的示例,请参阅 Snowflake ML 容器运行时 GitHub 存储库中的 PyTorch on GPU (https://github.com/Snowflake-Labs/sfguide-getting-started-with-container-runtime-apis/blob/main/PyTorch_on_GPU_Quickstart.ipynb) 示例笔记本。
Snowflake ML 建模 APIs¶
当 Snowflake ML 的建模 APIs 在 Notebook 中使用时,所有执行都发生在容器运行时,而不是在查询仓库中,例外情况是 snowflake.ml.modeling.preprocessing
APIs,在查询仓库中执行。
限制¶
在 ML 的容器运行时中,Snowflake ML 建模 API 仅支持
predict
、predict_proba
和predict_log_proba
推理方法。其他方法在查询仓库中运行。Snowflake ML 建模 API 仅在 ML 的容器运行时上支持与 sklearn 兼容的管道。
在 ML 的容器运行时上,Snowflake ML 建模 API 不支持预处理或指标。这些 APIs 在查询仓库中运行。
fit
、predict
和score
方法在 ML 容器运行时中执行。其他 Snowflake ML 方法在查询仓库中运行。sample_weight_cols
不支持 XGBoost 或 LightGBM 模型。
后续步骤¶
要使用 ML 的容器运行时试用笔记本,请参阅 ML 的容器运行时的笔记本。