首页 > 编程语言 >Ray 源码分析系列(12)—python/ray._private

Ray 源码分析系列(12)—python/ray._private

时间:2025-01-07 11:31:18浏览次数:3  
标签:12 python 序列化 py 支持 源码 日志 ray Ray

前言

这个文件夹下放置了python最核心的代码,从文件夹命名就可以知道,这部分的代码并不是用户可修改的部分,而是ray进行任务管理、节点交互、GCS通信等核心功能实现。

核心实现

概览

文件名/模块名 功能描述
services.py 负责 Ray 的核心服务管理,包括启动和停止 Ray 的各个服务(如 GCS、Raylet 等)。
worker.py 实现 Ray 的 Worker 进程逻辑,负责执行 Task 和管理 Task 的生命周期。
gcs_xxx.py 提供与 GCS 交互的核心类与函数,负责与GCS进行信息互动。
state.py 实现 Ray 的状态管理,包括 Task、Actor、Object 等的状态查询和监控。
ray_constants.py 定义 Ray 的常量和配置项,如默认端口号、超时时间等。
log_monitor.py 监控和管理 Ray 的日志文件,支持日志的轮转和清理。
memory_monitor.py 监控 Worker 进程的内存使用情况,防止内存泄漏或 OOM(Out of Memory)。
metrics_agent.py 收集和上报 Ray 的运行时指标,用于监控和性能分析。
serialization.py 实现对象的序列化和反序列化,支持跨进程和跨语言的数据传输。
signature.py 解析和验证 Python 函数的签名,确保 Task 的参数传递正确。
parameter.py 管理 Ray 的配置参数,支持从文件或环境变量中加载配置。
runtime_env/ 管理 Task 和 Actor 的运行时环境,包括依赖安装和环境隔离。
storage.py 管理不同的存储后端,并且对存储产物进行管理

services.py

特性 描述
多工具支持 支持 Valgrind、GDB、Jemalloc 等多种调试和性能分析工具,确保开发人员可以方便地进行性能分析和调试。
环境变量控制 通过环境变量动态控制调试工具的启用,提高了灵活性,允许在不修改代码的情况下启用或禁用调试工具。
日志管理 支持日志文件的读取、轮转和备份,确保日志文件不会过大,并且开发人员可以快速定位问题。
命令行参数解析 通过复杂的命令行参数解析,确保能够正确获取配置信息,如 Redis 地址、节点 IP 等。
进程管理 支持通过 tmux 启动进程,确保进程可以在后台运行,适合长时间任务。
错误处理 在 Dashboard 启动失败时,自动读取日志文件并返回错误信息,帮助开发人员快速定位问题。
日志轮转 支持日志文件的轮转和备份,确保日志文件不会过大,并且可以保留历史日志。

worker.py

特性 描述
泛型支持 RemoteFunction 系列类通过泛型类型注解支持不同参数数量的远程函数,确保类型安全。
任务依赖 支持 ObjectRef 和 DAGNode 作为参数,允许链式调用和任务依赖,构建复杂的任务图。
错误处理 通过 _unhandled_error_handler 和 raise_errors 方法处理未捕获的异常,确保错误信息能够被记录。
环境变量控制 支持通过环境变量 RAY_IGNORE_UNHANDLED_ERRORS 动态控制错误处理行为,提高灵活性。
线程安全 通过锁机制确保反序列化操作的线程安全,防止并发访问导致的竞态条件。
序列化上下文 支持自定义序列化上下文,确保反序列化操作的灵活性。
任务配置 通过 HasOptions 协议实现统一的 options 方法,用于配置任务选项。

由于这个代码里面包含了主要的api 接口,下面稍微展开讲一下各个api接口的实现。

init

  • 核心代码实现:https://github.com/ray-project/ray/blob/master/python/ray/_private/worker.py#L1275

  • 核心实现函数:
    在这里插入图片描述

  • 核心功能:创建或连接上已存在的Ray cluster

  • 代码里会把所有的参数转换为RayParam,这里总结ray cluster 使用到的所有参数:

参数名 类型/默认值 描述
redis_address str Redis 服务器的地址。如果未提供,Ray 会启动 Redis、raylet、Plasma 存储等组件。
redis_port int / DEFAULT_PORT 主 Redis 分片的监听端口。如果未指定,则使用默认端口或随机端口。
redis_shard_ports List[int] 非主 Redis 分片的端口列表。如果未指定,则使用 redis_port 之后的端口或随机端口。
num_cpus int 配置 raylet 的 CPU 数量。
num_gpus int 配置 raylet 的 GPU 数量。
resources Dict[str, float] 可用资源的字典,键为资源名称,值为资源数量。
labels

标签:12,python,序列化,py,支持,源码,日志,ray,Ray
From: https://blog.csdn.net/weixin_43956669/article/details/144923721

相关文章

  • 12306 可以自动购票了!我羡慕了
    12月30日,中国铁路官方宣布,2024年12月30日至2025年2月8日间,铁路部门在北京市、天津市、上海市、江苏省、浙江省、广东省各车站往返四川省、重庆市各车站始发终到列车的长途区段车票发售中,试点推出“系统自动提交购票订单”功能。即日起,铁路12306用户可通过新......
  • 移远EC800M-CN的python代码使用
    本文档目的介绍EC800M模组使用python脚本控制的过程1.烧写QPython的模组固件,移远已经提供。资源下载|QuecPython,下载相应固件。2.安装模组的USB驱动,然后USB连接电脑,打开Qpycom,选择串口,下载-》选择固件-》下载固件3.下载完成后,模组会重启。4.在Qpycom中,重新选择串口,......
  • 基于单片机的速度里程表设计(论文+源码)
    1  系统方案本次智能速度里程表的总体架构如图2-1所示,在硬件上包括了STC89C52单片机,电机,显示模块,报警模块,DS1302时钟模块,超速检测模块,按键等等。在软件设计功能的功能上,按下开关按键驱动电机,由霍尔传感器来检测脉冲信号,模拟汽车行驶,并且可以通过霍尔传感器进行实时速度,如果......
  • 5个代码技巧,加速你的Python!
    Python作为一种功能强大的编程语言,因其简单易学而受到很多初学者的青睐。它的应用领域又非常广泛:科学计算、游戏开发、爬虫、人工智能、自动化办公、Web应用开发等等。而在数据科学领域中,Python是使用最广泛的编程语言,并且其受欢迎程度持续增长。如果也经常需要用Python处理......
  • STM32F407ZG移植FreeRTOS(在有LVGL的基础上进行移植,附源码)
    目录1.准备资料1.1FreeRTOS源码获取1.2基础工程获取1.3精简FreeRTOS源码2.移植步骤2.1添加FreeRTOS源码2.1.1添加源码2.1.3添加路径2.2.添加FreeRTOSConfig.h配置文件2.2.1生成FreeRTOSConfig.h文件2.2.2配置FreeRTOSConfig.h文件2.3修改系统文件2.3.1修改sys.......
  • 【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
    ......
  • 计算机毕设项目分享:21g8a524+springboot基于java的商户点评管理与数据分析系统(毕设源
    基于java的商户点评管理与数据分析系统摘 要商户点评管理与数据分析系统是一个以店铺点评为核心的平台。用户可以通过该网站对商户的评价。同时,用户也可以浏览和发现店铺信息等。本文讲述了基于java语言开发,后台数据库选择MySQL进行数据的存储。该软件的主要功能是进行......
  • 基于Android7.0的Launcher3源码分析(2)——UI显示控件的组成
      开始系列文章前,先把Launcher显示相关的主要控件做个介绍。界面1上图就是通常所说的桌面部分,下面会做个简单介绍:   SearchDropTagetBar:搜索条和删除条   Workspace:只显示系统默认加载、用户手动拖入和应用自动生成的图标   BubbleTextView:显示应用图标的自定义......
  • Electron开发的应用如何保护源码?
    Electron开发的应用保护源码的方法可以归纳为以下几点:代码打包:使用打包工具如ElectronBuilder或ElectronPackager,将源代码和依赖项打包成一个可执行文件。这样做可以将源代码隐藏在可执行文件中,增加直接访问源代码的难度。代码加密:利用加密工具对源代码进行加密,例如使用Ja......
  • 如何安全有效地修改网站模板源码以满足个性化需求
    修改网站模板源码以满足个性化需求是一项常见的任务,以下是详细的步骤和建议,帮助您顺利完成这一过程:选择合适的模板:选择一个结构清晰、易于修改的HTML模板。确保模板支持响应式设计,能够在不同设备上良好显示。熟悉模板结构:仔细阅读模板提供的文档,了解其文件组织方式、命......