ml_chain

module
v0.0.0-...-12a9a0b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 10, 2025 License: GPL-3.0

README

ml_chain

shardchain for FL

流程设计

1. 分片链设计

image-20230717033545956

通讯设计

1、go-python交互接口
  1. 全局模型导入,训练一轮后,取得加噪后的局部模型以及训练参数
    1. 输入:全局模型
    2. 输出:加噪后的局部模型、训练参数
  2. 使用模型根据自己的测试集计算损失值
    1. 输入:模型
    2. 输出:损失函数
  3. 模型聚合
    1. 输入:局部模型
    2. 输出:全局模型
2、分片链节点间通信消息类型
  1. 区块信息

    1. 数据:Block
    2. 发送:通过区块hash得到该轮miner,收集期间局部模型,生成全局模型后,生成区块发送给其他节点
    3. 处理:
      1. 判断区块是否匹配hash,prevHash是否匹配上一个区块(因为是同步训练,我们就不考虑孤块的情况),区块是不是该轮miner创建的,这一步其实就是consensus做的
      2. 将区块加入区块链中,将区块中的全局模型导入到python中,开始训练
  2. 局部模型信息:

    1. 数据:加密模型+训练参数+VRF结果证明
    2. 发送:在一轮迭代完毕后,给新模型加噪声,并使用VRF生成验证委员会,发送给miner节点
    3. 处理:
      1. 如果自己不是miner,转发给miner
      2. miner收到后,验证验证委员会是否合理随机,发送局部模型给验证节点
  3. 局部模型验证请求信息:

    1. 数据:局部模型
    2. 发送:验证验证委员会是否合理随机,发送局部模型给验证节点
    3. 处理:验证者导入局部模型,使用自己的验证集计算损失函数,生成验证结果给miner
  4. 局部模型验证响应信息:

    1. 数据:损失函数 + 签名
    2. 发送:验证者导入局部模型,使用自己的验证集计算损失函数,生成验证结果给miner
    3. 处理:根据所有的验证结果,计算出该局部模型的影响系数;
  5. 节点注册信息:(√)

    1. 数据:remotePeer
    2. 发送:节点启动后,发送该消息给所有可能的节点
    3. 处理:把该节点注册到发现服务中
3、区块内交易类型
  1. 任务初始化交易
    1. 数据:初始模型 及 超参数,以及论文中任务链的创世区块中的数据
    2. 处理:将初始数据导入到python中,初始化roleManager等
  2. 任务迭代交易
    1. 数据:对应论文中的一个区块
    2. 处理:作为新模型导入python
  3. 任务创建交易
    1. 数据:主链上的一个区块,用于创建一个分片链
    2. 处理:对于主链而言只是存储,对于一般节点可以根据该交易生成一个任务链的创世区块
  4. 主链是否需要特殊的创世交易(?)

go代码模块设计

  • bccsp:负责提供所有加密功能
  • block:区块链相关
    • chain:区块链定义
    • consensus:共识的接口
    • manager:区块链的管理器,区块链对外接口,查询区块,区块增加,触发区块、交易监听器等
  • comm:通信模块
    • comm:通信相关,负责对外通信
    • crypto:信息加密
    • discovery:节点发现服务
    • node:通信节点,该通信模块对系统内部的接口
  • mainchain:主链
  • trainer:任务链节点
    • message:定义各种通信消息的监听器
    • role:定义角色管理器,用于选取和管理网络中各个节点的角色
    • trainer.go:trainer对象本身
    • model:
      • aggregate:聚合模块
        • 处理收到的局部模型
        • 聚合模型
        • 生成一轮迭代的交易,发送给挖矿者(就是自己吧,但是依旧推荐走comm,而不是内部依赖)
      • train:训练模块
        • 配置一个txhandler,将新一轮迭代的交易发送给该模块
        • 发送模型验证请求和处理模型验证响应
        • 管理训练任务
      • validate:验证模块
        • 处理模型验证请求,验证模型
        • 发送模型验证响应
      • python:与python交互
        • 与python服务器进行交互,提供对应的接口
    • consensus:实现trainer使用的共识算法
  • proto:所有通信要用的协议对象
    • message.go:定义所有消息类型
    • model.go:定义模型相关的类型
    • block.go和transaction.go:定义区块和区块内交易
    • common.go:定义一些通用的类型

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL