使用 Ray 扩展应用¶
Snowflake 容器运行时集成了 Ray (https://docs.ray.io/),这是一个开源统一框架,用于扩展 AI 和 Python 应用。 此集成允许您在 Snowflake 上利用 Ray 的分布式计算能力处理机器学习工作负载。
Ray is pre-installed and runs as a background process within the Snowflake ML container runtime. You can access Ray from the Container Runtime in the following ways:
Snowflake 笔记本:交互式环境,可连接到 Ray、定义任务,并动态扩展集群以进行开发和实验。
Snowflake ML 作业:将 Ray 应用提交为结构化、可重复的作业。可在作业配置中指定集群规模以满足生产工作负载。
在 Snowflake Notebook 或 ML Job 中运行容器运行时时,Ray 进程会作为容器的一部分自动启动。。
使用以下 Python 代码连接到集群:
重要
确保在连接 Ray 集群时始终使用 "auto" 地址。使用 "auto" 地址初始化将指向 Snowflake 为您的会话提供的 Ray 集群头节点。
扩展 Ray 集群¶
连接到 Ray 集群后,可根据工作负载的计算需求调整集群规模。
使用以下方法扩展 Ray 集群:
在笔记本中,可使用 scale_cluster 函数动态上下调集群规模,适合资源需求可能变化的交互式工作流。
指定 expected_cluster_size=5 时,集群包含 1 个头节点和 4 个工作节点。
在 ML 作业中,可在作业定义中声明性地定义集群规模。在作业定义中指定集群规模,可确保作业启动时按需提供所需节点。
作业装饰器可能包括:
使用完成后,可缩减集群规模以节约资源。有关更多信息,请参阅 清理。
使用 Ray 控制面板监控¶
在 Snowflake 笔记本中运行作业时,可使用 Ray 控制面板监控集群。Dashboard 是 Web 界面,可查看集群资源、作业、任务和性能。使用以下代码访问控制面板的 URL:
在新浏览器标签中打开 URL,使用 Snowflake 凭据登录。
高级用例¶
本节涵盖复杂工作负载及迁移现有应用的高级 Ray 功能。
使用 Ray 创建和操作分布式工作负载¶
Ray 提供组件,可创建和操作分布式工作负载,包括 Ray Core 的基础组件,用于构建和扩展工作负载。
还包括以下库,可用于构建数据预处理、ML 训练、超参数调优和模型推理的工作流:
Ray Data:可扩展的数据处理和转换
Ray Train:ML 模型的分布式训练与微调
Ray Tune:高级搜索算法的超参数优化
Ray Serve:模型服务与推理
以下部分说明如何直接使用这些库,同时 Snowflake 基于 Ray 的原生接口提供额外工具以构建、部署和操作 Ray 应用。
射线核心:Ray Core:任务 (Tasks) 与 执行体 (Actors)¶
Ray 提供以下分布式计算原语:
Tasks(任务):无状态函数,远程执行并返回结果
Actors(执行体):有状态类,可远程实例化并多次调用
Objects(对象):存储在 Ray 分布式对象存储中的不可变值
Resources(资源):CPU、GPU 以及任务和执行体的自定义资源需求
示例展示如何使用基础 Ray Task 与 Actor 进行线性回归:
Ray Train:分布式训练¶
Ray Train is a library that enables distributed training and fine-tuning of models. You can run your training code on a single machine or an entire cluster.
You can use Ray Train for both single-node and multi-node execution.
For multi-node training, you must handle the following:
Distributed storage for checkpoints (no shared filesystem across nodes)
Custom data loading
Manual resource configuration to coordinate between data ingestion and training resource usage
For a streamlined experience, use the Optimized Training functions for XGBoost, LightGBM, and PyTorch. On the same Ray cluster, these functions handle:
Snowflake stage-based checkpointing
Native Snowflake data ingestion
Built-in resource allocation for data ingestion and training
Ray Data:可扩展数据处理¶
为 ML 工作负载提供可扩展的分布式数据处理能力。通过流式执行和惰性计算处理比集群内存更大的数据集。
备注
Snowflake 提供原生集成,可将任何 Snowflake 数据源转换为 Ray Data。更多信息,请参阅 Data Connector 和 Ray Data Ingestion 页面。
Ray Data 的使用场景:
处理单节点内存无法容纳的大型数据集
分布式数据预处理与特征工程
构建可与其他 Ray 库集成的数据管道
Ray Tune:分布式超参数调优¶
Ray Tune 提供分布式超参数优化,支持高级搜索算法和提前停止功能。在读取 Snowflake 数据源时,使用原生超参数优化 (HPO) API 可获得更集成、优化的体验。有关使用 HPO 优化的更多信息,请参阅 优化模型的超参数。
如果需要更可定制的分布式 HPO 实现,可使用 Ray Tune。
Ray Tune 的使用场景如下:
并行多次试验的超参数优化
高级搜索算法(贝叶斯优化、基于种群的训练)
需要分布式执行的大规模超参数搜索
模型服务¶
For model serving, you can use Snowflake's native capabilities. For more information, see 为实时推理部署模型 (REST API).
在 Ray 集群上提交与管理分布式应用¶
使用 Ray Jobs 提交和管理 Ray 集群上的分布式应用,以获得更好的资源隔离和生命周期管理。对于所有需要访问 Ray 集群的基于任务的执行,Snowflake 建议使用 ML 作业,您可以在其中定义 Ray 应用程序逻辑。在需要直接访问 Ray Job 接口的情况下(例如迁移现有实现),可以按 Ray 文档 (https://docs.ray.io/en/latest/cluster/running-applications/job-submission/sdk.html) 中的说明使用 Ray Job 基元。
使用 Ray Job 的场景包括:
生产环境中的 ML 管道和计划任务
需要容错能力的长期运行负载
批处理和大规模数据处理
使用选项扩展 Ray 集群¶
在 Snowflake 笔记本中,可以根据计算需求精确调整 Ray 集群的规模。一个集群由一个主节点(协调器)和多个工作节点(执行任务)组成。
资源监视¶
清理¶
集群使用完毕后,可以将其缩小以避免产生额外费用。使用以下代码缩小集群: