ML 的容器运行时的笔记本¶
概述¶
您可以在 ML 容器运行时中运行 Snowflake Notebooks。ML 容器运行时由 Snowpark Container Services 提供支持,为您提供灵活的容器基础设施,支持在 Snowflake 内部完全构建和操作各种工作流。ML 容器运行时提供软件和硬件选项,以支持高级数据科学和机器学习工作负载。与 虚拟仓库 相比,ML 容器运行时提供了一个更灵活的计算环境,您可以从多个源安装包并选择计算资源,包括 GPU 机器类型,同时仍然在仓库上运行 SQL 查询以获得最佳性能。
This document describes some considerations for using notebooks on Container Runtime for ML. You can also try the Getting Started with Snowflake Notebook Container Runtime (https://quickstarts.snowflake.com/guide/notebook-container-runtime/) quickstart to learn more about using the Container Runtime for ML in your development.
先决条件¶
在开始使用 ML 容器运行时中的 Snowflake Notebooks 之前,ACCOUNTADMIN 角色必须完成笔记本设置步骤,以创建必要的资源以及授予这些资源的权限。有关详细步骤,请参阅 管理员设置。
在 ML 容器运行时中创建笔记本¶
当您在 ML 容器运行时中创建笔记本时,您需要选择仓库、运行时和计算池,以提供运行笔记本所需的资源。您选择的运行时根据您的用例提供对不同 Python 包的访问。不同的仓库大小或计算池具有不同的成本和性能影响。如果需要,所有这些设置可以稍后更改。
备注
具有 ACCOUNTADMIN、ORGADMIN 或 SECURITYADMIN 角色的用户无法直接在容器运行时中创建或拥有笔记本。这些角色创建或直接拥有的笔记本将无法运行。然而,如果笔记本被一个角色拥有,而该角色继承了 ACCOUNTADMIN、ORGADMIN 或 SECURITYADMIN 角色的权限,例如 PUBLIC 角色,那么您可以使用这些角色来运行该笔记本。
要创建在容器运行时中运行的 Snowflake 笔记本,请按照以下步骤操作:
Sign in to Snowsight.
In the navigation menu, select Projects » Notebooks.
选择 + Notebook。
输入笔记本的名称。
选择在其中存储笔记本的数据库和架构。创建笔记本后,这些内容便无法更改。
备注
数据库和架构仅用于存储您的笔记本。您可以从您的笔记本中查询您角色可以访问的任何数据库和架构。
为 Runtime 选择 Run on container。
从 CPU 或 GPU 选项中选择 Runtime version。
- 选择 Compute pool。
Snowflake 自动在每个账户中预置两个 计算池,用于运行笔记本:SYSTEM_COMPUTE_POOL_CPU 和 SYSTEM_COMPUTE_POOL_GPU。
更改所选仓库以用于运行 SQL 和 Snowpark 查询。
要创建和打开笔记本,请选择 Create。
Runtime version:
提供两种类型的运行时版本类型:CPU 和 GPU。每个运行时图像包含一组由 Snowflake 验证和集成的基础 Python 包和版本。所有运行时图像支持使用 Snowpark Python、Snowflake ML 和 Streamlit 进行数据分析、建模和训练。
要从公共存储库安装额外的包,您可以使用 pip。需要一个外部访问集成 (EAI),以便 Snowflake Notebooks 从外部端点安装包。要配置 EAIs,请参阅 为 Snowflake Notebooks 设置外部访问。然而,如果包已经是基础镜像的一部分,那么您无法通过使用 pip install 安装不同版本来更改包的版本。要查看预安装的包列表,请从笔记本的单元格中运行以下命令:
!pip freeze
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 a secret that represents credentials required to authenticate with the external network location.
CREATE OR REPLACE SECRET jfrog_token TYPE = GENERIC_STRING SECRET_STRING = '<your-jfrog-token>';
创建一个外部访问集成,以允许访问存储库:
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION jfrog_integration ALLOWED_NETWORK_RULES = (jfrog_network_rule) ALLOWED_AUTHENTICATION_SECRETS = (jfrog_token) ENABLED = TRUE; GRANT USAGE ON INTEGRATION jfrog_integration TO ROLE data_scientist;
Associate the external access integration and secret with the notebook.
ALTER NOTEBOOK my_notebook SET EXTERNAL_ACCESS_INTEGRATIONS = (jfrog_integration), SECRETS = ('jfrog_token' = jfrog_token);
要访问外部访问配置,请选择笔记本右上角的 |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
使用专用连接安装专用包¶
如果您的专用包存储库需要专用连接,请按照以下步骤配置账户。如果您需要帮助,可以与您的账户管理员协调以设置网络规则。
按照 使用专用连接的网络出口 中的步骤,使用专用连接设置网络出口。
Create a secret that represents credentials required to authenticate with the external network location.
CREATE OR REPLACE SECRET jfrog_token TYPE = GENERIC_STRING SECRET_STRING = '<your-jfrog-token>';
从第 1 步,使用网络规则创建一个 EAI。例如:
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION private_repo_integration ALLOWED_NETWORK_RULES = (PRIVATE_LINK_NETWORK_RULE) ALLOWED_AUTHENTICATION_SECRETS = (jfrog_token) ENABLED = TRUE; GRANT USAGE ON INTEGRATION private_repo_integration TO ROLE data_scientist;
Associate the external access integration and secret with the notebook.
ALTER NOTEBOOK my_notebook SET EXTERNAL_ACCESS_INTEGRATIONS = (jfrog_integration), SECRETS = ('jfrog_token' = jfrog_token);
要访问外部访问配置,请选择笔记本右上角的 |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 服务维护的详细信息,请参阅 计算池维护。
成本和计费注意事项¶
在容器运行时中运行笔记本时,可能会产生 仓库计算 和 SPCS 计算成本。在 Snowflake Notebooks 中,仓库不仅是执行查询所必需的,也是支持某些前端功能所必需的。例如,使用计算池执行 Python 时,可能仍需要一个仓库来呈现输出或处理交互式组件。
Snowflake Notebooks 依靠虚拟仓库来高效运行 SQL 和 Snowpark 查询。因此,在 Python 单元格中执行 SQL 单元格或 Snowpark 下推查询时,可能会产生仓库计算成本。
下图显示了在一个笔记本中,SQL、Snowpark 和 Python 单元格的计算发生在何处:
备注
当您执行使用计算池的笔记本时,Python 代码将在计算池上运行。但您可能会在 Query History 中看到使用一个仓库来运行 EXECUTE NOTEBOOK 命令的活动。这是符合预期的行为。仓库会短暂地用于初始化执行环境,但不会耗用任何仓库 Credit。所有代码执行均由计算池处理。
例如,以下 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)
要了解关于仓库成本的更多信息,请参阅 仓库概述。