
Ray Adapter调度策略详解PlacementGroup与NodeAffinity实战【免费下载链接】ray-adapterCompatible with the core interfaces of the open-source software Ray, it facilitates the seamless migration of workloads running on Ray (such as vllm/verl, etc.) to the Yuanrong cluster, while also enjoying the performance advantages brought by Yuanrongs deep optimization on Huawei Kunpeng and Ascend hardware.项目地址: https://gitcode.com/openeuler/ray-adapter前往项目官网免费下载https://ar.openeuler.org/ar/Ray Adapter作为openEuler社区推出的高性能计算框架适配工具通过兼容开源软件Ray的核心接口帮助用户将vllm/verl等基于Ray的工作负载无缝迁移至元戎集群并充分发挥华为鲲鹏与昇腾硬件的深度优化性能。本文将深入解析其两大核心调度策略——PlacementGroup与NodeAffinity带您掌握任务调度的实战技巧。一、PlacementGroup资源打包的终极调度方案 1.1 什么是PlacementGroupPlacementGroup是Ray Adapter中用于资源分配的高级抽象通过将任务所需的计算资源CPU、内存、NPU等打包成资源束Bundle实现任务间的资源亲和性管理。其核心优势在于支持多种调度策略PACK/SPREAD/STRICT_PACK/STRICT_SPREAD精确控制资源分配粒度优化跨节点通信开销1.2 四种调度策略深度对比策略类型适用场景核心特点实现代码PACK密集型任务所有资源束集中在单个节点ray_adapter/util/placement_group.py#L28SPREAD容错性任务资源束均匀分布在不同节点ray_adapter/util/placement_group.py#L29STRICT_PACK强资源亲和性必须在单个节点满足所有资源ray_adapter/util/placement_group.py#L30STRICT_SPREAD强隔离需求每个资源束必须在独立节点ray_adapter/util/placement_group.py#L311.3 实战创建高性能PlacementGroup创建PlacementGroup的标准流程包含资源定义、策略选择和实例化三个步骤from ray_adapter.util.placement_group import placement_group # 定义资源束2个CPU束 1个NPU束 bundles [ {CPU: 2}, # 2核CPU {CPU: 2}, # 2核CPU {NPU: 1} # 1张NPU卡 ] # 创建PlacementGroup实例采用PACK策略 pg placement_group( bundlesbundles, strategyPACK, namenpu_inference_group ) # 等待资源分配完成 pg.wait(timeout_seconds60)注意资源单位转换已在底层自动处理如CPU以毫核为单位1 CPU 1000毫核NPU资源会自动转换为NPU/./count格式。1.4 高级操作PlacementGroup管理Ray Adapter提供完整的生命周期管理接口# 获取当前PlacementGroup current_pg get_current_placement_group() # 查询PlacementGroup信息 pg_info placement_group_table(current_pg) # 删除PlacementGroup remove_placement_group(pg)二、NodeAffinity节点亲和性的精准控制 2.1 NodeAffinity的核心价值NodeAffinity调度策略允许用户指定任务与特定节点的亲和性关系适用于利用特定硬件特性如昇腾NPU满足数据本地性需求实现负载均衡或故障隔离2.2 硬亲和与软亲和NodeAffinity支持两种亲和性模式硬亲和softFalse任务必须调度到指定节点否则失败软亲和softTrue优先调度到指定节点失败时可降级到其他节点2.3 实战指定NPU节点运行任务from ray_adapter.util.scheduling_strategies import NodeAffinitySchedulingStrategy # 获取目标节点ID可通过集群管理工具查询 target_node_id node-10-0-1-23 # 创建带节点亲和性的Actor actor MyModelActor.options( scheduling_strategyNodeAffinitySchedulingStrategy( node_idtarget_node_id, softFalse # 硬亲和必须在目标节点运行 ) ).remote()三、混合调度PlacementGroup NodeAffinity在复杂场景下可组合使用两种策略实现更精细的调度控制# 1. 创建带SPREAD策略的PlacementGroup pg placement_group(bundles[{CPU: 4}, {NPU: 1}], strategySPREAD) # 2. 在指定节点上使用该PlacementGroup actor MyActor.options( scheduling_strategyPlacementGroupSchedulingStrategy( placement_grouppg, placement_group_bundle_index1 # 使用第2个资源束 ) ).remote()四、最佳实践与常见问题4.1 性能优化建议资源束设计将通信密集型任务放入同一PlacementGroup的不同束节点选择通过NodeAffinity将大内存任务调度到高配置节点策略组合优先使用PlacementGroup控制资源分配NodeAffinity处理特殊硬件需求4.2 常见错误排查资源分配失败检查是否超过集群总资源可尝试降低CPU/NPU请求量节点亲和性不生效确认节点ID是否正确硬亲和模式下检查目标节点状态策略冲突避免同时设置多个调度策略优先级为NodeAffinity PlacementGroup五、快速上手通过以下步骤开始使用Ray Adapter调度策略克隆仓库git clone https://gitcode.com/openeuler/ray-adapter安装依赖pip install -r requirements.txt查看完整示例ray_adapter/tests/test_placement_group.pyAPI文档ray_adapter/util/placement_group.py通过灵活运用PlacementGroup和NodeAffinity调度策略您可以充分发挥元戎集群的硬件优势实现AI训练与推理任务的性能最大化。立即尝试体验高效资源调度带来的计算加速吧【免费下载链接】ray-adapterCompatible with the core interfaces of the open-source software Ray, it facilitates the seamless migration of workloads running on Ray (such as vllm/verl, etc.) to the Yuanrong cluster, while also enjoying the performance advantages brought by Yuanrongs deep optimization on Huawei Kunpeng and Ascend hardware.项目地址: https://gitcode.com/openeuler/ray-adapter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考