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 笔记本,请按照以下步骤操作:

  1. 登录 Snowsight。

  2. 选择 Notebooks

  3. 选择 + Notebook

  4. 输入笔记本的名称。

  5. 选择在其中存储笔记本的数据库和架构。创建笔记本后,这些内容便无法更改。

    备注

    数据库和架构仅用于存储您的笔记本。您可以从您的笔记本中查询您角色可以访问的任何数据库和架构。

  6. 选择 Run on container 作为您的 Python 环境。

  7. 选择 Runtime 类型:CPU 或 GPU。

  8. 选择 Compute pool

    Snowflake 自动在每个账户中预置两个 计算池,用于运行笔记本:SYSTEM_COMPUTE_POOL_CPU 和 SYSTEM_COMPUTE_POOL_GPU。

  9. 更改所选仓库以用于运行 SQL 和 Snowpark 查询。

  10. 要创建和打开笔记本,请选择 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
Copy

更新笔记本设置

您可以随时在 Notebook settings 中更新设置,例如使用哪个计算池或仓库,可以通过右上角的 工作表的更多操作 笔记本操作 菜单访问。

您可以在 Notebook settings 中更新的设置之一是空闲超时设置。空闲超时的默认值为 1 小时,您可以将其设置为最长 72 小时。要在 SQL 中设置此项,请使用 CREATE NOTEBOOKALTER NOTEBOOK 命令来设置笔记本的 IDLE_AUTO_SHUTDOWN_TIME_SECONDS 属性。

安装专用包

Pip 支持从具有 基本身份验证 (https://pip.pypa.io/en/stable/topics/authentication/#basic-http-authentication) 的私有源安装软件包,例如 JFrog Artifactory。配置笔记本以进行外部访问集成 (EAI),以便它可以访问存储库。

  1. 创建网络规则以指定您要访问的存储库。例如,此网络规则指定了一个 JFrog 存储库:

    CREATE OR REPLACE NETWORK RULE jfrog_network_rule
      MODE = EGRESS
      TYPE = HOST_PORT
      VALUE_LIST = ('<your-repo>.jfrog.io');
    
    Copy
  2. 创建一个外部访问集成,以允许访问存储库:

    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;
    
    Copy
  3. 要访问外部访问配置,请选择笔记本右上角的 |vertical-ellipsis|(Notebook actions 菜单)。

  4. 选择 Notebook settings,然后选择 External access 选项卡。

  5. 选择 EAI 以连接到存储库。

    笔记本重新启动。

  6. 笔记本重新启动后,您可以从存储库安装:

    !pip install hello-jfrog --index-url https://<user>:<token>@<your-repo>.jfrog.io/artifactory/api/pypi/test-pypi/simple
    
    Copy

使用专用连接安装专用包

如果您的专用包存储库需要专用连接,请按照以下步骤配置账户。如果您需要帮助,可以与您的账户管理员协调以设置网络规则。

  1. 按照 使用专用连接的网络出口 中的步骤,使用专用连接设置网络出口。

  2. 从第 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;
    
    Copy
  3. 要访问外部访问配置,请选择笔记本右上角的 |vertical-ellipsis|(Notebook actions 菜单)。

  4. 选择 Notebook settings,然后选择 External access 选项卡。

  5. 选择 EAI 以连接到您的专用存储库。

    笔记本重新启动。

  6. 在笔记本重新启动后,您可以提供存储库的 --index-url

    !pip install my_package --index-url https://my-private-repo-url.com/simple
    
    Copy

运行 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)
Copy

限制

容器运行时笔记本会话启动后,它可以运行长达 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)
Copy

要了解关于仓库成本的更多信息,请参阅 仓库概述

语言: 中文