본문 바로가기
TechStudy/LLM

Llama3, 그리고 ORPO

4월 18일에 발매된 Meta Llama3

[MetaLlama3 주요 특징]: 새로운 아키텍처 없음.
학습 데이터 2T -> 15T 확장 
토크나이저 크기 32k -> 128k 확장

종류: 8B(~2023.03), 70B(~2023.12), 400+B 모델 3가지

Llama 3 엑세스 및 사용: 올라마, docker, LM스튜디오 3 곳에서 Mac, Linux, Windows 사용자 접근 가능

LLM 파인튜닝 도구 여부: XTuner에서 Llama-3 기반의 LLaVA 모델 공개.

<<라마2와 차이점>>
라마 2는 한국어 튜닝시, 토크나이저에 한국어 토큰을 추가하는 복잡한 과정 필요
라마 3은 그냥 한국어 데이터만 추가로 학습시키면 라마 3 한국어 특화 모델 생성 가능

주의사항: 업무 활용시 llama3-   라고 꼭 앞에 붙여서 배포. 
          월간 활성 사용자가 7억명 이상의 상업적 서비스 이용 시 메타 문의 필요



*temperature 온도: 높으면 창의적 답변, 낮으면 일반적 답변

 

 


 

 

ORPO (Odds Ratio Preference Optimization)?

기존 fine-tuningpreference alignment stage를 하나의 프로세스로 결합한 fine-tuning 라이브러리

기존 LLM 훈련과 ORPO LLM 훈련 방식 비교

-> 사용되는 컴퓨터 자원과 훈련 시간 감소

 

 

결론: 컴퓨터 자원 사용량과 시간에 대한 효율성을 높이기 위해서 ORPO를 사용

 

 

 

 

 

 

Llama3 + ORPO 과정에서의 문제점 및 해결과정

trl 라이브러리에서 ORPOConfig, ORPOTrainer import 불가 오류

- trl 라이브러리 설치 문제인가? -> update, __init__.py 파일 확인 결과 이상 없음

- python 버전 호환성 문제인가? -> 3.9가 아닌 3.10 환경에서 실행해야 정상 작동

 

예제 코드에 따르면 ORPO를 적용하기위한 데이터 형식이 prompt, chosen, rejected로 정해짐
- 해당 데이터 형식을 지키지 않으면 문제가 되는가? -> ORPOConfig, ORPOTrainer에서 오류 발생

- 데이터 형식을 지키는 방법은?
-> Contextprompt, Resposnechosen으로, rejected‘ ‘로 더미 데이터 생성

 

CUDA Out of Memory 문제

- batch size를 줄이는 등 각종 파라미터 조절 -> 이것만으로 문제 해결 안됨

- 불필요한 프로세스 kill, memory flush 시도 -> 이것만으로 문제 해결 안됨

- 널럴한 GPU로 옮겨서 실행? -> 훈련시, 선택된 GPU 공간이 넉넉해야 실행 가능하므로 옮겨도 결과 동일

- 실행 전에 양자화를 해야했던 것은 아닐까?, Flash Attention을 도입하고 실행해보면 안될까?

-> 기존의 99% GPU사용량이 약 60~70%로 감소

 

ValueError: Calculated loss must be on the original device: cuda:0 but device in use is cuda:3

- cuda3에 위치한 모델을 model = model.to(device)을 통해 0으로 바꾸기

-> You shouldn't move a model that is dispatched using accelerate hooks.

ValueError: `.to` is not supported for `4-bit` or `8-bit` bitsandbytes models. Please use the model as it is, since the model has already been set to the correct devices and casted to the correct `dtype`.

-> GPU 번호가 바뀌는 순간이 언제인지를 torch.cuda.current_device()을 통해 코드별 하나하나 체크

-> 원인: AutoModelForCausalLM.from_pretrained에서 device_map설정을 “auto”로 한 것

-> device_map=torch.device("cuda:0") 로 변경

-> 모델 생성 후 torch.cuda.current_device() 수행 시 0으로 출력(해결)

 

 

테스트 chatbot 오류: 어를 제대로 못말함

- chatbot test 코드가 잘못되었는가? -> 기존에 잘 작동된 코드에 모델만 바꾸었으나 현상 동일

- 모델 훈련이 잘못되었는가?

-> 모델 저장 과정에서 기존 모델과 합치는 과정이 없이 저장한 것이 원인이 아닐까?

-> 또는 모델 로드 방식이 잘못된 것은 아닐까?

 

 

 

 

사실 데이터 형식을 엄격하게 지켰다면 이런 문제는 발생하지 않았음

 

 

728x90
반응형