在某次联邦学习架构的代码中使用opacus库遇到下面这个报错
raise ValueError(“Trying to add hooks twice to the same model”)
ValueError: Trying to add hooks twice to the same model
意思是对同一个模型进行了重复差分隐私。
然后搜索到这个链接中的解决办法
需要修改的地方就是在客户端模型更新后,返回的数据内容
return model.state_dict()
改为
return model.to_standard_module().state_dict()
理由在于,聚合服务器需要接受非私有模型。客户端需要先接收非私有模型,再调用opacus库的privacy_engine将模型私有化,最后返回非私有模型的参数。model.to_standard_module().state_dict()
是opacus库中的方法,用于返回标准的模型参数。