Questions about optimizers

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?