Closed Bleking closed 1 month ago
일단 bf16을 fp16으로 대체하고, True로 설정했더니 현 문제는 해결됐습니다. 데이터 부재 문제도 해결했고요. 다만 현재는 "RuntimeError: FlashAttention only supports Ampere GPUs or newer." 문제를 마주한 상황이라 다시 진행에 문제가 생겼는데, 이건 제가 사용하는 리눅스 환경의 GPU가 맞지 않아서 그런건가요? 혹시 확인해봐야 하는 사항이 있으시면 답변으로 공유해드리겠습니다.
UserWarning: Flash attention is only supported on A100 or H100 GPU during training due to head dim
사용하시는 GPU가 A100 이나 H100이 아니라면, LLaVA의 official repo 를 참고하시면 좋을 것 같습니다.
We provide training script with DeepSpeed here. Tips:
If you are using V100 which is not supported by FlashAttention, you can use the memory-efficient attention implemented in xFormers. Install xformers and replace llava/train/train_mem.py above with llava/train/train_xformers.py.
flash attention 대신 xformers를 사용해 학습하는 방법이 공개되어 있습니다.
우선 finetune_lora.sh 파일은 아래와 같이 재설정하였습니다.
현재 사용중인 서버 환경이 bf16과 tf32가 없어서 둘 다 False로 했고요, data_path 및 image_folder는 KoLLaVA 경로에 넣은 관계로 제 환경에 맞게 다시 작성했습니다.
일단 데이터셋도 모두 다운받고 (EKVQA는 일단 training, validation 모두 받아놨고요) LoRA 파인튜닝을 진행하려는데, 입력 텐서와 출력 텐서의 타입이 일치해야 한다는 오류가 떠서 현재 학습에 지장이 있는 상황입니다. 아무래도 float32 이런 설정인 것으로 보입니다. 자세한 원인 분석을 하실 수 있도록 전체 출력 결과를 공유해드리겠습니다.
훈련할 때는 pretrain 하는 대신 다운받으로 하신 KoLLaVA-v1.5-mlp2x-336px-pretrain-Synatra-7b 받고 진행했습니다. global batch size(per_device_train_batch_size x gradient_accumulation_steps x num_gpus)도 finetune.sh와 동일하게 하라고 하셔서 서로 같은걸 보고 그대로 진행했는데, 어느 부분 때문에 타입 불일치 문제가 뜨는지 잘 모르겠네요. 혹시 bf16이랑 tf32를 False로 설정한거랑 Pretrain된 모델을 불러온게 충돌이 난걸까요?
아 그리고 그 오류가 뜨기 전에 FileNotFoundError: [Errno 2] No such file or directory: '/home/work/testdataset1/KoLLaVA/workspace/data/ekvqa/211000220221025115121.jpg' 오류도 떴었는데, 혹시 이게 현재 타입 불일치 문제에 기여했을까요? Train, validation 데이터 모두 다운받은건데, 211000220221025115121.jpg는 없다고 뜨네요.
감사합니다.