| # Optimizer Offloading 修复 |
|
|
| Patch文件仅适用于 `Megatron-LM-250328`, 对于其他版本的Megatron-LM,您需要手动修改代码 |
|
|
| > Megatron-LM Commit ID: 6ba97dd37150a6bfba03d31808674211cf2a4d0d |
|
|
| ## 使用Patch文件修复 |
|
|
| ``` |
| cp Pai-Megatron-Patch/megatron_patch/fixes/optimizer_offloading/fix_optimizer_offloading.patch Pai-Megatron-Patch/Megatron-LM-250328 |
| cd Pai-Megatron-Patch/Megatron-LM-250328 |
| git apply fix_optimizer_offloading.patch |
| ``` |
|
|
| ## 手动修复 |
|
|
| ### Fix 1 |
| 修改 `DistributedOptimizer._copy_model_params_to_main_params`: |
|
|
| #### Before |
| ``` |
| def _copy_model_params_to_main_params(self): |
| """ |
| Copy model params to main params. |
| |
| During finetuning, this method is used to reload the main params from |
| the model params. This copy does not make use of the grad buffer as |
| an intermediary. |
| """ |
| if isinstance(self.optimizer, HybridDeviceOptimizer): |
| return |
| |
| ... # other code |
| ``` |
|
|
| #### After |
|
|
| ``` |
| def _copy_model_params_to_main_params(self): |
| """ |
| Copy model params to main params. |
| |
| During finetuning, this method is used to reload the main params from |
| the model params. This copy does not make use of the grad buffer as |
| an intermediary. |
| """ |
| if isinstance(self.optimizer, HybridDeviceOptimizer): |
| return self.optimizer._update_fp32_param_by_new_param() |
| |
| ... # other code |
| ``` |
|
|
| ### Fix 2 |
|
|
| 为`HybridDeivceOptimizer`增加以下方法 |
| ``` |
| def _update_fp32_param_by_new_param(self): |
| for param, fp32_param in self.param_to_fp32_param.items(): |
| fp32_param.data.copy_(param) |
| ``` |