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,与开源的包相比,性能显著提高,并缩短了整体运行时间。

此图表显示如何为 ML 处理分配工作负载。

机器学习工作负载(包括数据加载)在 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)
Copy

优化的训练

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 仅支持 predictpredict_probapredict_log_proba 推理方法。其他方法在查询仓库中运行。

  • Snowflake ML 建模 API 仅在 ML 的容器运行时上支持与 sklearn 兼容的管道。

  • 在 ML 的容器运行时上,Snowflake ML 建模 API 不支持预处理或指标。这些 APIs 在查询仓库中运行。

  • fitpredictscore 方法在 ML 容器运行时中执行。其他 Snowflake ML 方法在查询仓库中运行。

  • sample_weight_cols 不支持 XGBoost 或 LightGBM 模型。

后续步骤

语言: 中文