ML 的容器运行时的笔记本¶
备注
基于容器运行时的 ML 笔记本功能,现已在 Azure 和 Azure SPrivateLink 上公开预览版。
概述¶
您可以在 ML 容器运行时中运行 Snowflake Notebooks。ML 容器运行时由 Snowpark Container Services 提供支持,为您提供灵活的容器基础设施,支持在 Snowflake 内部完全构建和操作各种工作流。ML 容器运行时提供软件和硬件选项,以支持高级数据科学和机器学习工作负载。与 虚拟仓库 相比,ML 容器运行时提供了一个更灵活的计算环境,您可以从多个源安装包并选择计算资源,包括 GPU 机器类型,同时仍然在仓库上运行 SQL 查询以获得最佳性能。
本文档描述了在 ML 容器运行时 中使用笔记本的一些注意事项。您还可以尝试 开始使用 Snowflake 笔记本容器运行时 (https://quickstarts.snowflake.com/guide/notebook-container-runtime/index.html) 快速入门,了解有关在您的开发中使用 ML 容器运行时的更多信息。
先决条件¶
在开始使用 ML 容器运行时中的 Snowflake Notebooks 之前,ACCOUNTADMIN 角色必须完成笔记本设置步骤,以创建必要的资源以及授予这些资源的权限。有关详细步骤,请参阅 管理员设置。
在 ML 容器运行时中创建笔记本¶
当您在 ML 容器运行时中创建笔记本时,您需要选择仓库、运行时和计算池,以提供运行笔记本所需的资源。您选择的运行时根据您的用例提供对不同 Python 包的访问。不同的仓库大小或计算池具有不同的成本和性能影响。如果需要,所有这些设置可以稍后更改。
备注
具有 ACCOUNTADMIN、ORGADMIN 或 SECURITYADMIN 角色的用户无法直接在容器运行时中创建或拥有笔记本。这些角色创建或直接拥有的笔记本将无法运行。然而,如果笔记本被一个角色拥有,而该角色继承了 ACCOUNTADMIN、ORGADMIN 或 SECURITYADMIN 角色的权限,例如 PUBLIC 角色,那么您可以使用这些角色来运行该笔记本。
要创建在容器运行时中运行的 Snowflake 笔记本,请按照以下步骤操作:
登录 Snowsight。
选择 Notebooks。
选择 + Notebook。
输入笔记本的名称。
选择在其中存储笔记本的数据库和架构。创建笔记本后,这些内容便无法更改。
备注
数据库和架构仅用于存储您的笔记本。您可以从您的笔记本中查询您角色可以访问的任何数据库和架构。
选择 Run on container 作为您的 Python 环境。
选择 Runtime 类型:CPU 或 GPU。
- 选择 Compute pool。
Snowflake 自动在每个账户中预置两个 计算池,用于运行笔记本:SYSTEM_COMPUTE_POOL_CPU 和 SYSTEM_COMPUTE_POOL_GPU。
更改所选仓库以用于运行 SQL 和 Snowpark 查询。
要创建和打开笔记本,请选择 Create。
Runtime:
提供两种类型的运行时:CPU 和 GPU。每个运行时图像包含一组由 Snowflake 验证和集成的基础 Python 包和版本。所有运行时图像支持使用 Snowpark Python、Snowflake ML 和 Streamlit 进行数据分析、建模和训练。
要从公共存储库安装额外的包,您可以使用 pip。需要一个外部访问集成 (EAI),以便 Snowflake Notebooks 从外部端点安装包。要配置 EAIs,请参阅 为 Snowflake Notebooks 设置外部访问。然而,如果包已经是基础镜像的一部分,那么您无法通过使用 pip install 安装不同版本来更改包的版本。有关预安装包的列表,请参阅 ML 的容器运行时。
Compute pool:
计算池为您的笔记本内核和 Python 代码提供计算资源。使用较小的基于 CPU 的计算池开始入门,并选择内存更大、基于 GPU 的计算池,以优化计算机视觉或 LLMs/VLMs 等密集型 GPU 使用场景。
请注意,每个计算节点每次仅限于为每个用户运行一个笔记本。在为笔记本创建计算池时,应将 MAX_NODES 参数设置为大于 1 的值。有关示例,请参阅 计算资源。有关 Snowpark Container Services 计算池的更多详细信息,请参阅 Snowpark Container Services:使用计算池。
当笔记本电脑未被使用时,请考虑将其关闭以释放节点资源。您可以通过在连接下拉菜单中选择 End session 来关闭笔记本。
如果笔记本在容器运行时中运行,则角色需要对计算池(而不是在笔记本仓库中)拥有 USAGE 权限。计算池是由 Snowflake 管理的基于 CPU 或 GPU 的虚拟机。创建计算池时,需要将 MAX_NODES 参数设置为大于 1,因为每个笔记本需要一个完整的节点来运行。有关信息,请参阅 Snowpark Container Services:使用计算池。
您可以查看您的资源利用率。有关更多信息,请参阅 关于 Snowflake Notebooks。
备注
在 AWS 上,运行于 GPU 计算池的笔记本默认采用高性能 NVMe 存储作为启动设备。
在容器运行时中运行笔记本¶
在创建笔记本后,您可以通过添加和运行单元格立即开始运行代码。有关添加单元格的信息,请参阅 在 Snowflake Notebooks 中开发和运行代码。
导入更多包¶
除了预安装的包以便让您的笔记本启动和运行外,您还可以从已设置外部访问的公共源安装包。您还可以使用存储在暂存区或专用存储库中的包。您需要使用 ACCOUNTADMIN 角色或可以创建外部访问集成 (EAIs) 的角色来设置并授予您访问特定外部端点的权限。使用 ALTER NOTEBOOK 命令在您的笔记本上启用外部访问。授权后,您会在 Notebook settings 中看到 EAIs。在开始从外部通道安装之前,请切换 EAIs。有关说明,请参阅 创建外部访问集成 (EAI)。
以下示例在代码单元格中使用 pip install 安装外部包:
!pip install transformers scipy ftfy accelerate
更新笔记本设置¶
您可以随时在 Notebook settings 中更新设置,例如使用哪个计算池或仓库,可以通过右上角的 笔记本操作 菜单访问。
您可以在 Notebook settings 中更新的设置之一是空闲超时设置。空闲超时的默认值为 1 小时,您可以将其设置为最长 72 小时。要在 SQL 中设置此项,请使用 CREATE NOTEBOOK 或 ALTER NOTEBOOK 命令来设置笔记本的 IDLE_AUTO_SHUTDOWN_TIME_SECONDS 属性。
安装专用包¶
Pip 支持从具有 基本身份验证 (https://pip.pypa.io/en/stable/topics/authentication/#basic-http-authentication) 的私有源安装软件包,例如 JFrog Artifactory。配置笔记本以进行外部访问集成 (EAI),以便它可以访问存储库。
创建网络规则以指定您要访问的存储库。例如,此网络规则指定了一个 JFrog 存储库:
CREATE OR REPLACE NETWORK RULE jfrog_network_rule MODE = EGRESS TYPE = HOST_PORT VALUE_LIST = ('<your-repo>.jfrog.io');
创建一个外部访问集成,以允许访问存储库:
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION jfrog_integration ALLOWED_NETWORK_RULES = (jfrog_network_rule) ENABLED = TRUE; GRANT USAGE ON INTEGRATION jfrog_integration TO ROLE data_scientist;
要访问外部访问配置,请选择笔记本右上角的 |vertical-ellipsis|(Notebook actions 菜单)。
选择 Notebook settings,然后选择 External access 选项卡。
选择 EAI 以连接到存储库。
笔记本重新启动。
笔记本重新启动后,您可以从存储库安装:
!pip install hello-jfrog --index-url https://<user>:<token>@<your-repo>.jfrog.io/artifactory/api/pypi/test-pypi/simple
使用专用连接安装专用包¶
如果您的专用包存储库需要专用连接,请按照以下步骤配置账户。如果您需要帮助,可以与您的账户管理员协调以设置网络规则。
按照 使用专用连接的网络出口 中的步骤,使用专用连接设置网络出口。
从第 1 步,使用网络规则创建一个 EAI。例如:
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION private_repo_integration ALLOWED_NETWORK_RULES = (PRIVATE_LINK_NETWORK_RULE) ENABLED = TRUE; GRANT USAGE ON INTEGRATION private_repo_integration TO ROLE data_scientist;
要访问外部访问配置,请选择笔记本右上角的 |vertical-ellipsis|(Notebook actions 菜单)。
选择 Notebook settings,然后选择 External access 选项卡。
选择 EAI 以连接到您的专用存储库。
笔记本重新启动。
在笔记本重新启动后,您可以提供存储库的
--index-url
:!pip install my_package --index-url https://my-private-repo-url.com/simple
运行 ML 工作负载¶
容器运行时的笔记本非常适合运行 ML 工作负载,例如模型训练和参数调整。运行时预安装了常见的 ML 包。设置好外部集成访问后,您可以使用 !pip install
安装所需的任何其他包。
为获得最佳体验,建议使用 OSS 库开发模型,或导入包含 OSS 组件的笔记本。容器运行时已优化 APIs,例如:
用于更快的数据引入的
DataConnector
用于可扩展的模型拟合的分布式训练 APIs
分布式超参数优化 APIs,从而有效利用所有可用资源。
有关更多信息,请参阅 ML 的容器运行时。
备注
由于运行时预安装了许多软件包,因此更改任何版本都需要重新启动内核。有关更多信息,请参阅 探索笔记本。
使用 OSS ML 库¶
以下示例使用一个 OSS ML 库,xgboost
,并且有一个活跃的 Snowpark 会话,以便直接将数据提取到内存中进行训练:
from snowflake.snowpark.context import get_active_session
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
session = get_active_session()
df = session.table("my_dataset")
# Pull data into local memory
df_pd = df.to_pandas()
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)
限制¶
容器运行时笔记本会话启动后,它可以运行长达 7 天而不会中断。若在七天后遇到预定的 SPCS 服务维护事件,该服务可能会中断并关闭。笔记本空闲时间设置仍然适用。有关 SPCS 服务维护的详细信息,请参阅 计算池维护。
成本/计费注意事项¶
在 容器运行时上运行笔记本时,可能会同时产生 仓库计算 和 :doc:SPCS 计算成本 </developer-guide/snowpark-container-services/accounts-orgs-usage-views>
。在 |sf-notebooks| 平台中,数据仓库是执行查询和支撑特定前端功能的必备组件。例如,当使用计算池执行 Python 时,可能需要仓库来呈现输出或处理程序交互式组件。
Snowflake Notebooks 需要一个虚拟仓库来运行 SQL 和 Snowpark 查询以获得优化的性能。因此,如果您在 SQL 单元格中使用 SQL,并在 Python 单元格中执行 Snowpark 下推查询,您可能还会产生虚拟仓库计算成本。以下图表显示了每种类型的单元格计算发生的位置。

例如,以下 Python 示例使用 xgboost (https://xgboost.readthedocs.io/en/stable/) 库。数据被拉入容器中,并在 Snowpark Container Services 中进行计算。
from snowflake.snowpark.context import get_active_session
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
session = get_active_session()
df = session.table("my_dataset")
# Pull data into local memory
df_pd = df.to_pandas()
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)
要了解关于仓库成本的更多信息,请参阅 仓库概述。