Error 관련

axolotl : resume_from_checkpoint 시, save checkpoint 및 resume train error

Yonggg 2024. 8. 30. 10:32

axolotl로 qdora 학습을 진행 하는 중 마주친 에러이다.

Error invalid argument at line 396 in file /src/csrc/pythonInterface.cpp

해당 에러는 axolotl config 중  optimizer: paged_adamw_32bit로 설정하여 발생하는 에러인데, 이 인자를 사용하면, 실제로 gpu 메모리가 10GB 정도 적게 사용되며, 학습을 할 수 있었다.

 

하지만, saves_per_epoch 인자와 호환이 안되는 문제가 있어서, save_steps로 steps마다 저장을 해주었지만, 마지막 iter의 checkpoint에 저장하는데에 오류가 발생했다. 

 

문제 해결은 다음과 같이, 해당 checkpoint의 optimizer.pt를 만져준 뒤, optimizer: torch_adamw로 변경하여 resume_from_checkpoint를 활성화 하면, 정상적으로 checkpoint로 부터 이어서 학습이 가능했다.

import os
import torch

if __name__ == "__main__":
    os.rename("optimizer.pt", "optimizer.paged.pt")
    state_dict = torch.load("optimizer.paged.pt")
    for i in state_dict["state"].keys():
        exp_avg = state_dict["state"][i].pop("state1")
        exp_avg_sq = state_dict["state"][i].pop("state2")
        state_dict["state"][i]["exp_avg"] = exp_avg
        state_dict["state"][i]["exp_avg_sq"] = exp_avg_sq

    for i in range(len(state_dict["param_groups"])):
        state_dict["param_groups"][i]["amsgrad"] = False
        state_dict["param_groups"][i]["foreach"] = None
        state_dict["param_groups"][i]["maximize"] = False
        state_dict["param_groups"][i]["capturable"] = False
        state_dict["param_groups"][i]["differentiable"] = False
        state_dict["param_groups"][i]["fused"] = None

    torch.save(state_dict, "optimizer.pt")

 

saves_per_epoch: 1 설정 시, checkpoint 저장시 NCCL 에러가 발생하는데, 이 것도 optimizer 문제인지는 실험을 해봐야 알 것 같다.