ML 的容器运行时的笔记本¶
概述¶
您可以在 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。有关说明,请参阅 使用外部访问权限和密钥配置笔记本。
以下示例在代码单元格中使用 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)
要了解关于仓库成本的更多信息,请参阅 仓库概述。