Getting very close, I will post a complete solution once I get it.  The new parameter groups created are going onto the CPU (the model was moved to the GPU prior to optimizer construction per the documentation) instead of the GPU.  So when I run the model, it complains that the weights are on the CPU.  How can I create the new parameters on the GPU instead?
As a side not for anyone interested I ended up using the call optimizer.add_param_group since it handles the creation of the options automatically.  The code posted above with “params_groups.push_back” actually fails when you try to index into it with “Expected has_options() to be true, but got false”