集群整合算力,节点提供资源服务获取收益。
与传统云平台不同的关键点:用户、计算节点都不可信,结算和验证也不能依赖有信任要求的第三方。
整体三层
用户层中实际上有两类角色,一个是用户,另一个是平台。平台的存在并不会引入中心化,而是为了方便用户操作,类似交易所,用户随时可以切换平台甚至自己完成操作。对于平台,前端提供用户访问与操作的页面,后端则负责与结算层、计算层的通信。
- 后端对结算层的操作主要是:获取提供计算服务的节点列表、生成租约合约的交易、相关的合约管理操作。
- 后端对计算层的操作主要是:调用其对外开放的两个接口 -
Greet
和Process
。其中Greet
用于获取访问权限以及部署计算任务,Process
则是用户通过HTTP
请求访问部署的服务。
结算层用区块链主要提供两块功能。(1)计算层节点注册,包括自己的域名或IP,资源情况和价格。后续平台可以在注册合约里统计提供服务的节点列表。(2)用户层租约的记录和执行。包括租用资源量、租用时间,定金与收款方。用户可以取消租约,租约的定金随时间释放给收款方。
计算层主要分为两部分,一部分是网关,一部分是k8s管理的计算集群。其中网关负责对外通信,包括(1)与结算层的通信,如注册节点、验证租约。(2)与用户层的通信,提供两个访问与操作的接口,并验证用户权限的合法性。在用户访问其部署的服务时,网关只做请求和响应转发,真正的计算在k8s里运行的容器中完成。
更多详细信息参考下面计算层的结构图。
计算层
对于用户:
- 用户通过管理合约或工厂合约等能记录上链的方式,根据自己的需求生成一份订单上链。用钱包签署相关交易。(这一步也可以合并到第4步做)
- 用户在第三方平台页面上发现可用的计算节点列表,包括这些节点的配置信息和最低单价。
- 用户选定计算节点后,与节点直接通信协商。节点检查相关订单信息,通过后会返回
ACK
表示可以接受该订单条件。 - 用户在合约内将该计算节点设置为
payee
,质押足够的报酬,并设置服务开始时间,通知计算节点。计算节点检查合约信息,通过后会为用户授权相应的资源和访问权限,并返回ACK
告知用户。 - 用户可根据模板生成计算任务,如使用多少资源、运行或构建什么镜像。计算节点在完成运行后会告知用户。
- 后续用户提供
input
如模型的prompt
和各种参数,计算节点返回output
给用户。
值得注意的是,这里为了避免引入可信第三方做验证,以及保证结算的公平性:
- 用户拥有订单的所有权。如果用户认为计算节点的服务不可靠,随时能够结束订单。
- 订单内质押的报酬随时间释放,保证计算节点的权益。用户结束订单时会自动触发结算,计算节点通过函数也可以手动触发。
- 为了保证用户的权益和体验,合约逻辑内可以加入一段试用期。试用期内用户取消订单不扣费(除了交易手续费)。
在没有能力验证双方可信度的情况下,用释放合约来保证用户和计算节点双方的权益。
对于平台:
- 监听区块链上,专门用于记录计算节点配置的合约。
- 在页面上展示这些计算节点,并提供与这些节点交互的方式。
平台可以把上述提到的用户操作整合到平台页面中,方便用户操作。
对于计算节点:
- 在本地用k8s统合集群计算资源。
- 在合约内注册自己的信息。
- 等待用户生成订单并接入。
- 提供接口供用户远程调用。接口内部会调用k8s起的相应服务。
总的来说,计算节点内部整合算力是通过集群这种中心化的方式,但最后提供的服务是去中心化的形式,不依赖可信第三方,用户可以自由选择提供服务的节点。
前置:通过k8s完成底层资源的整合。前期不考虑复杂任务的情况下,只提供可选的几个镜像或任务列表(可存放在MEFS上),镜像内封装模型和应用、服务。
核心:Computing-Gateway。Gateway只做两件事:用户访问授权与验证、转发用户输入和服务输出。
k8s保证节点如何调用算力资源,gateway保证用户使用服务和节点的收益。
实现三块接口:
- 本地处理。只依赖本地的事务,如算力统计、授权、验证用户权限、启动/停止计算任务。
- 远程处理。与链上相关的事务,如注册、验证合约、结算。
- 计算。负责接收、处理用户的请求,并返回结果。
与用户相关。主要为页面、钱包接入。
后端接口:
- 获取计算节点的信息列表并展示。
- 为用户构建相关的交易内容并发起交易。
- 将与计算节点之间的交互抽象出来,方便用户操作。
平台提供的所有功能在理论上都不需要信任,因为都是可以验证的,且任何人都可以做平台方。
不一定是合约的形式,主要能解决两个问题即可:
- 注册:计算节点注册相应的资源信息。后续用于提供给用户选择。
- 结算:用户生成订单,完成双方的结算。