Hi everyone
Its about split learning
1.I have one server and 10 clients. The server has one optimizer for his part/layers. Does each client need to have an individual/its own optimizer?
2.Previosly I had for each client one optimizer
client_model_list = [ResNet18Client(config).to(device) for client_num in range (total_client_num)] client_optimizer_list = [optim.SGD(client_model_list[client_num].parameters(), lr=0.05, momentum=0.9) for client_num in range(total_client_num)]
Now I have my own parameters and when I create one optimizer, everything is good with training.
for i, l in enumerate(p.children()):
for m,n in enumerate(l.children()):
if(m==8):
ft1=n
if(m==9):
ft2=n
params1 = list(ft1.parameters()) + list(ft2.parameters())
frst_opt=torch.optim.SGD(params1, lr=0.05, momentum=0.9)
But when I make for each client one optimizer, the loss is increasing 2,5…2,7…3,5… etc
first_lst=[]
for p in client_model_list:
u=0
for i, l in enumerate(p.children()):
for m,n in enumerate(l.children()):
if(m==8):
ft1=n
if(m==9):
ft2=n
params1 = list(ft1.parameters()) + list(ft2.parameters())
frst_opt=torch.optim.SGD(params1, lr=0.05, momentum=0.9)
first_lst.append( torch.optim.SGD(params1, lr=0.05, momentum=0.9))
Where I made a mistake/ any help?