babyAGI(3)-COOPERATIVE_MODE

babyAGI中有cooperative模式,其核心是调用ray库,实现分布式多进程执行任务。

从BabyAGI的源码中,我们可以学习ray core的使用。

1. Ray核心概念

1.1 Tasks

Ray 允许在单独的 Python 工作线程上异步执行任意函数。 这些异步执行的函数被称为“tasks”。 Ray 使任务能够根据 CPU、GPU 或自定义其资源需求。 Ray的集群调度程序根据资源请求在集群中分配任务实现并行执行。

1.2 Actors

一个actor本质上是一个有状态的worker或者服务。当一个新的 Actor 被实例化时,就会创建一个新的 Worker,并且 Actor 的方法会调度到该特定的 Worker 上,并且可以访问和改变该 Worker 的状态。 与任务一样,参与者支持 CPU、GPU 和自定义资源要求。

1.3 Objects

在 Ray 中,Tasks和 Actors在Object上创建和计算。 我们将这些对象称为远程对象,因为它们可以存储在 Ray 集群中的任何位置,并且我们使用对象引用来引用它们。

远程对象缓存在 Ray 的分布式共享内存对象存储中,集群中的每个节点都有一个对象存储。

在集群设置中,远程对象可以存在于一个或多个节点上,与持有对象引用的人无关。

1.4 Placement Group

组允许用户跨多个节点自动保留资源组(即组调度)。 然后,它们可用于安排 Ray 任务和 actor,使其尽可能的靠近本地(PACK)或分散(SPREAD)。 组通常用于调度actor,但也用于支持task。

1.5 环境依赖

当 Ray 在远程计算机上执行任务和 Actor 时,它们的环境依赖项(例如 Python 包、本地文件、环境变量)必须可供代码运行。 为了解决这个问题,可以

  1. 使用 Ray Cluster Launcher 提前准备集群上的依赖项
  2. 使用 Ray 的运行时环境即时安装它们

2. BabyAGI中的Ray代码

ray.init这个函数作用主要是连接到一个已经存在ray集群或者创建一个集群然后连接到它

使用ray.remote装饰python类,会将此类变为一个actors。每一个actor都会运行在自有的python进程中。

下面的代码定义一个cooperative模式的多个目标的存储actor。

使用队列存储多个目标,然后将目标调度到不同的远程对象上执行。

ACTOR_NAME="BabyAGI Objectives"try:ray.init(address="auto", namespace="babyagi", logging_level=logging.FATAL, ignore_reinit_error=True)
except:ray.init(namespace="babyagi", logging_level=logging.FATAL, ignore_reinit_error=True)@ray.remote
class CooperativeObjectivesListStorageActor:def __init__(self):self.objectives = deque([])def append(self, objective: str):if not objective in self.objectives:self.objectives.append(objective)def is_empty(self):return False if self.objectives else Truedef get_objective_names(self):return [t for t in self.objectives]class CooperativeObjectivesListStorage:def __init__(self):try:self.actor = ray.get_actor(name=ACTOR_NAME, namespace="babyagi")except ValueError:self.actor = CooperativeObjectivesListStorageActor.options(name=ACTOR_NAME, namespace="babyagi", lifetime="detached").remote()def append(self, objective: str):self.actor.append.remote(objective)def is_empty(self):return ray.get(self.actor.is_empty.remote())def get_objective_names(self):return ray.get(self.actor.get_objective_names.remote())

但是,这段代码并没有放到主体的程序当中,估计是作者没有实现多目标的调度执行。

接下来我们看看,用到的协同的任务清单代码。

import sys
import logging
import ray
from collections import deque
from typing import Dict, Listfrom pathlib import Path
sys.path.append(str(Path(__file__).resolve().parent.parent))
from extensions.ray_objectives import CooperativeObjectivesListStoragetry:ray.init(address="auto", namespace="babyagi", logging_level=logging.FATAL, ignore_reinit_error=True)
except:ray.init(namespace="babyagi", logging_level=logging.FATAL, ignore_reinit_error=True)@ray.remote
class CooperativeTaskListStorageActor:def __init__(self):self.tasks = deque([])self.task_id_counter = 0def append(self, task: Dict):self.tasks.append(task)def replace(self, tasks: List[Dict]):self.tasks = deque(tasks)def popleft(self):return self.tasks.popleft()def is_empty(self):return False if self.tasks else Truedef next_task_id(self):self.task_id_counter += 1return self.task_id_counterdef get_task_names(self):return [t["task_name"] for t in self.tasks]class CooperativeTaskListStorage:def __init__(self, name: str):self.name = nametry:self.actor = ray.get_actor(name=self.name, namespace="babyagi")except ValueError:self.actor = CooperativeTaskListStorageActor.options(name=self.name, namespace="babyagi", lifetime="detached").remote()objectives = CooperativeObjectivesListStorage()objectives.append(self.name)def append(self, task: Dict):self.actor.append.remote(task)def replace(self, tasks: List[Dict]):self.actor.replace.remote(tasks)def popleft(self):return ray.get(self.actor.popleft.remote())def is_empty(self):return ray.get(self.actor.is_empty.remote())def next_task_id(self):return ray.get(self.actor.next_task_id.remote())def get_task_names(self):return ray.get(self.actor.get_task_names.remote())

基本就是SingleTaskListStorage的翻版,不过多增加远程调度的功能,而且任务不再是以dict形式存储,而是存放在集群当中。

因此,需要每次都进行优先级的排序,否则任务会被重复执行。

以上,就是cooperation模式的代码,整个看起来用处不大,可能任务比较多的时候有效,但瓶颈还是会在优先级排列的任务上。

下一篇文章,我们可以看看作者的另一段代码,babycoder实现的coder的agi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE:继承和多态(下篇)

目录 一、前言 二、多态 (一)多态的概念 (二)多态实现条件 (三)多态的优缺点 三、重写 (一)重写的概念 (二)重写的规则 (三)重…

Ubuntu上安装d4rl数据集

Ubuntu上安装d4rl数据集 D4RL的官方 github: https://github.com/Farama-Foundation/D4RL 一、安装Mujoco 1.1 官网下载mujoco210文件 如果装过可以跳过这步 链接:https://github.com/deepmind/mujoco/releases/tag/2.1.0 下载第一个文件即可。我这里是在windo…

专升本-信息安全

信息安全: 1.信息安全的基本属性:保密性,完整性,可用性 信息本身的安全是指保证信息的保密性(非授权用户不能访问信息),完整性(信息正确,完整,违背篡改&…

win10怎么设置屏幕保护,win10设置屏幕保护方法

电脑屏幕保护的作用主要有三个,第一,可以防止电脑因无人操作而使显示器长时间显示同一个画面,导致加速老化而缩短显示器寿命。第二,防止你离开电脑后屏幕上的隐私被偷窥。第三,大幅度降低屏幕亮度,有一定的省电作用。而Win10系统中呢是可以设置屏幕保护的,如果你想了解具…

uniapp微信小程序消息订阅详解

一、微信公众平台申请订阅模板 注意:订阅信息 这个事件 是 当用户 点击的时候触发 或者 是 支付成功后触发, 用户勾选 “总是保持以上选择,不再询问” 之后或长期订阅,下次订阅调用 wx.requestSubscribeMessage 不会弹窗&#xf…

FastAPI+React全栈开发11 开始使用FastAPI

Chapter03 Getting Started with FastAPI 11 Summary FastAPIReact全栈开发11 开始使用FastAPI Arguably the most important part of our FARM stack is going to be the application programming interface(API). The AIP is the brain of our system, it implements the …

【最后一天!】月底 京东云服务器特价 价格更低 幻兽帕鲁、雾锁王国 32G仅210/3个月

本文纯原创,侵权必究 【云服务器推荐】价格对比!阿里云 京东云 腾讯云 选购指南视频截图 《最新对比表》已更新在文章头部—腾讯云文档,文章具有时效性,请以腾讯文档为准! 【腾讯文档实时更新】2024年-幻兽帕鲁服务器…

CSP:内容安全策略详解

在当今的网络安全环境中,内容安全策略(Content Security Policy,简称CSP)扮演着至关重要的角色。CSP是一种由浏览器实施的安全机制,旨在减少和防范跨站脚本攻击(XSS)等安全威胁。它通过允许网站…

这次彻底搞懂类加载器吧!!!

一、类加载过程 类加载过程分为:加载->链接->初始化 链接过程具体细分为:验证->准备->解析 二、类加载器 1、定义 类加载器是一个加载类的对象,它工作在类加载过程中的加载这一步,通过类的全类名获得该类的二进制…

蓝桥杯2014年第十三届省赛真题-猜字母

一、题目 猜字母 把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。 接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。 得到的新串再进行删除奇数位置字母的动作。如此…

6.6物联网RK3399项目开发实录-驱动开发之LED灯的使用(wulianjishu666)

90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】 链接:https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwdc53f LED 使用 前言 AIO-3399J 开发板上有 2 个 LED 灯,如下表所示: 可通过使用 LED 设备子系统或者直…

使用 CSS 实现多立方体悬停颜色效果实现

使用 CSS 实现多立方体悬停效果实现 效果展示 CSS 知识点 filter 属性的 hue-rotate 值运用使用 CSS 实现立方体 场景布局分析 从效果图可以看出,要实现 3*3 的立方体集合,我们需要考虑一下怎么安排小立方体的布局。我这里的做法是使用span实现单个小…

CSS(四)---【链接美化、浮动布局、三种定位】

零.前言 本篇主要讲解<a>标签链接美化、页面的浮动布局&#xff0c;以及“相对定位”、“绝对定位”、“固定定位”三种定位。 关于其它请查看作者其它文章&#xff1a; CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 CSS(二)---【常见属性、复合属…

Java常用Lambda表达式与Stream流应用

定义&#xff1a; Lambda表达式是一种在编程语言中表示匿名函数的方法。它可以在需要函数作为参数的地方使用&#xff0c;并且可以简洁地表示一个函数的定义。Lambda表达式最初由函数式编程语言引入&#xff0c;但现在已经成为许多编程语言中的常见特性。 基本语法&#xff1a;…

多路选择器选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点3.1,输入和输出端口3.2,控制端3.3,逻辑功能4,工艺流程4.1,设计阶段4.2,仿真验证4.3,制版4.4,制造4.5,测试与封装4.6,应用与测试

苹果设备下载海外app可能的方法

因为需要安装国外的APP&#xff0c;而且不是整天捣鼓这类东西&#xff0c;所以有点缩手缩脚&#xff0c;生怕引起严重后果&#xff0c;在此记录解决的方法和网上的一些分享。 在苹果电脑上的方法 在电脑上添加一个新的用户&#xff0c;然后给这个用户加一个海外Apple ID&…

【OceanBase实战之路】第3篇:多租户架构实现资源隔离

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 一、什么是OceanBase的多租户二、兼容模式2.1 MySQL 模式2.2 Oracle 模式三、租户介绍3.1 系统租户3.2 用户租户3.3 Meta 租…

数据结构--合并区间

数据结构–合并区间 分析 首先需要对整个二维数组的每一个区间的第一列&#xff08;左端&#xff09;进行升序&#xff0c;然后因为合并之后的的区间个数不确定&#xff0c;所以使用ArrayList&#xff0c;然后创建一个临时变量为第一个区间&#xff0c;然后比较其第二列&…

Artplayer视频JSON解析播放器源码|支持弹幕|json数据模式

全开源Artplayer播放器视频解析源码&#xff0c;支持两种返回模式&#xff1a;网页播放模式、json数据模式&#xff0c;json数据模式支持限制ip每分钟访问次数UA限制key密钥&#xff0c;也可理解为防盗链 &#xff0c;本播放器带弹幕库。 运行环境 推荐使用PHP8.0 redis扩展…

2024世界技能大赛某省选拔赛“网络安全项目”B模块--应急响应解析

广东省第三届职业技能大赛“网络安全项目”B模块任务书 PS: 关注鱼影安全第一部分 网络安全事件响应任务 1:应急响应第二部分 数字取证调查第三部分 应用程序安全:需要环境可以私信博主~PS: 关注鱼影安全 模块 B 竞赛项目试题 本文件为:2024世界技能大赛某省选拔赛-模块 B …