乐趣区

关于深度学习:FATE联邦学习FATE联邦学习使用GPU指定cuda下标

问题

FATE 框架 1.x 反对 GPU 训练吗?

寻找

先看了官网,搜官网,发现还是有的。
关上第一个后,外面能够用 training param 指定各个 client 的训练 GPU,然而如同都是在 large language model 的。
而在文档中搜查到的 gpu,其实是 release 的版本阐明,外面搜来搜去,也是只有跟 LLM 相干的。莫非是一开始就反对 GPU?我心愿找到具体什么中央验证了 FATE 反对 / 不反对 GPU

在官网群里发问后,群友提供了一个文档,说 横向的联邦是反对 GPU的,并且给了 example:https://github.com/FederatedAI/FATE/blob/master/doc/tutorial/pipeline/nn_tutorial/README.md,简略把所有 example 搜了下 gpu 这个关键字,没有阐明。。

淦,那就先摸索一下这个 trainer param 吧,搜寻文档后,只有简略的几行代码,这能看进去个毛。

def __init__(self, trainer_name=None, **kwargs):
    super(TrainerParam, self).__init__()
    self.trainer_name = trainer_name
    self.param = kwargs

后果在他源码 https://github.com/FederatedAI/FATE/blob/master/python/federatedml/param/homo_nn_param.py 外面,还真就只有这么些代码

class TrainerParam(BaseParam):

    def __init__(self, trainer_name=None, **kwargs):
        super(TrainerParam, self).__init__()
        self.trainer_name = trainer_name
        self.param = kwargs

    def check(self):
        if self.trainer_name is not None:
            self.check_string(self.trainer_name, 'trainer_name')

    def to_dict(self):
        ret = {'trainer_name': self.trainer_name, 'param': self.param}
        return ret

可是他在调用的时候是写了这么多的。他既没有通知我有什么 kwargs,也没通知我每个 kwargs 是什么作用,会有什么后果。感觉文档的晋升空间还是有的。。好不不便啊。岂但没明说 GPU 的反对与否,参数的具体意义和选项也没有给全(或者说给个全参数指引链接也好呀)。

trainer_param = TrainerParam(trainer_name='fedavg_trainer', epochs=1, batch_size=8, 
                             data_loader_worker=8, secure_aggregate=True, cuda=0)

解决

我是在 /federatedml/param/homo_nn_param.py 下找到的这个 trainer param 类,所以他大概率只能反对 homo nn 的场景。

应用的办法,依据文档,应该是通过 trainer param 类,把 param 给传入而后带动训练过程。
例子能够参考这个外面的例子,homo nn 场景应该每个例子都会有 trainer_param 类,退出 cuda=0 这个参数应该就能够应用 GPU 了。

后续实在场景我会再测试

  1. 此参数 是否真是无效,通过查看 GPU 应用
  2. hetero 场景是否应用 GPU

到时再来更新。
更新:

的确无效 。然而要留神有些函数的cuda 参数是 true 或者 false,而有些函数的参数是 cuda 的下标,肯定要看好参数类型填参。

hetero 场景是否能用?在 1.11 版本以及以前,是不能用 GPU 的。不晓得 2.x 之后能不能有反对。

退出移动版