RTX 8000으로 Axolotl 훈련 시 꼭 변경해야되는 설정

2024. 3. 9. 13:34인공지능

지난번 Axolotl로 Lora 파인튜닝을 처음으로 진행했었습니다. 베이스 모델은 'yanolja/EEVE-Korean-10.8B-v1.0'로 해서 'maywell/kiqu_samples' 데이터셋으로 학습했습니다.

하지만 훈련하기 까지 많은 어려움이 있었는데요. RTX 8000 그래픽카드때문에 발생한 문제, 그리고 데이터셋 자체가 너무 적어서 발생한 문제가 있어서  그 해결방법을 기록해두려고 합니다.

저는 AI 전문가가 아니라 틀린정보일수도 있으니 알아서 필터링 해주십시오.ㅠㅠ

 

1. 연산 방법

bf16: false # 기본값 : true
fp16: true   # RTX 8000은 좀 오래된 기종이라 fp16만 지원함.
tf32: false

bf16는 최근에 나온 방식으로 RTX8000같은 구형기기에서는 동작하지 않습니다. 이부분을 false로 바꾸고 fp16을 ture로 바꿔 활성화 합니다. 아래는 위의 용어에 대한 설명입니다.

bf16 (BFloat16)

BFloat16은 반 정밀도 부동 소수점 형식 중 하나입니다.
16비트로 표현되지만 일반적인 부동 소수점 형식과는 다르게 지수 부분이 짧고, 유효 자릿수가 상대적으로 적습니다.
주로 딥러닝 가속기에서 사용되며, 일부 모델에서 fp32 대신 더 낮은 정밀도로 네트워크를 훈련할 때 메모리를 절약할 수 있습니다.

fp16 (Half Precision)

Half Precision은 16비트 부동 소수점 형식을 나타냅니다.
기본적으로 32비트로 표현되는 부동 소수점의 절반의 정밀도를 가지고 있습니다.
그래픽 처리 장치(GPU)에서 연산을 가속화하기 위해 사용되며, 딥러닝에서도 모델을 훈련하거나 실행할 때 메모리 사용량을 줄일 수 있습니다.

tf32 (TensorFloat 32)

NVIDIA의 Tensor Core를 활용한 32비트 부동 소수점 형식입니다.
일반적인 부동 소수점 형식처럼 보이지만, 특별한 하드웨어 지원을 통해 더 빠른 연산을 가능하게 합니다.
주로 딥러닝 모델을 학습할 때 사용되며, NVIDIA의 GPU에서 Tensor Cores를 활용하여 성능을 최적화할 수 있습니다.

 

2. flash_attention 비활성

flash_attention: false # RTX 8000은 좀 오래된 기종이라 false로해야 돌아감.

flash_attention도 RTX 8000에서는 동작하지 않는데요. 이 다음세대부터 동작합니다. 아래는 이에 대한 용어 설명입니다.

"Flash Attention"은 특정 딥러닝 모델에서 사용되는 어텐션 메커니즘 중 하나입니다. 어텐션 메커니즘은 주로 시퀀스 데이터에서 특정 위치에 주의를 집중하도록 모델을 가르치는 데 사용됩니다. Flash Attention은 이러한 어텐션 기법 중 하나로, 특히 이미지 및 비전 태스크에 적용됩니다.

일반적으로, 어텐션은 입력 시퀀스의 각 요소에 대한 가중치를 계산하고, 이 가중치를 사용하여 모델이 주목해야 할 부분을 동적으로 선택합니다. Flash Attention은 빠른 속도와 효율성을 목표로 하는 것으로 알려져 있습니다.

 

3. 토큰나이저 변경

tokenizer_type: AutoTokenizer

기본값으로 LamaTokenizer가 설정되어 있는데 모든 모델이 저것으로 설정되어 있는것은 아닙니다. 그래서 모델 정보를 보고 수동으로 맞게 기입해주어야하는 번거로움이 있는데요. AutoTokenizer로 설정하면 토큰나이저를 알.아.서 잡아 주기때문 어떤 모델이든지 신경쓰지 않아도 되어서 아주 편리합니다. 그래서 Auto가 붙은거 같습니다.

 

4. 데이터셋 관련 설정 변경

eval_sample_packing: false

데이터셋 중에서 일부를 테스트셋으로 빼버린다는 설정인것 같은데 이게 데이터셋 자체가 적은경우 에러가 발생하면서 훈련이 되지 않습니다. 제가 2.3만 정도 크기의 데이터셋으로 훈련하려고 하는데 이것도 적었나 봅니다.^^;; false로 하고 진행했더니 무사히 훈련을 할 수 있었습니다.

 

훈련 결과

이런식으로 수정하고 훈련했더니 잘 구워진것 같습니다. 1에폭에 16시간 걸렸는데 생각보다 성능이 좋게 나오더군요.!

kurugai/Kurugai-EEVE-v1.0 · Hugging Face

 

kurugai/Kurugai-EEVE-v1.0 · Hugging Face

kurugai/Kurugai-EEVE-v1.0는 yanolja/EEVE-Korean-10.8B-v1.0를 베이스모델로 해서 maywell/kiqu_samples 데이터셋으로 학습된 모델입니다. 학습시간 RTX 8000 GPU 1EA로 16시간 학습하였습니다. Average Ko-ARC Ko-HellaSwag Ko-MMLU

huggingface.co

 

아래는 4bit로 양자화한 버전입니다.

kurugai/Kurugai-EEVE-v1.0-exl2-4.0bpw · Hugging Face

 

kurugai/Kurugai-EEVE-v1.0-exl2-4.0bpw · Hugging Face

kurugai/Kurugai-EEVE-v1.0는 yanolja/EEVE-Korean-10.8B-v1.0를 베이스모델로 해서 maywell/kiqu_samples 데이터셋으로 학습된 모델입니다. 학습시간 RTX 8000 GPU 1EA로 16시간 학습하였습니다. Average Ko-ARC Ko-HellaSwag Ko-MMLU

huggingface.co

 

리더보드에서 꽤 좋은 성능이 나왔습니다. 특히 한국인이면 반드시 알고 있는 상식(Ko-CommonGen V2)을 평가하는 항목이 엄청~ 높게 나와서 상당히 고무적이였습니다.

Ko-LLM 리더보드 점수

 

모델 테스트

ExUI로 4비트 양자화한 버전으로 몇가지 테스트해보았는데 말귀를 잘 알아듣는것 같았습니다.

저의 단골질문 세종대왕이 왜 맥북 던져버렸냐는 질문에서도 질문의 오류를 정확히 짚어 냈습니다.

세종대왕과 맥북은 전혀 관계 없다고 정확히 판단함

 

약간 흑인 비하 질문에서는 어떻게 답변을 하나 했는데 능구렁이처럼 스무스하게 안전한 답변을 하는것 같습니다.

안전한 답변을 하기위해 노력한 흔적이 보임

 

LLM이 숫자에 약하다고하는데 사칙연산중에서도 빼기에 해당되는 아주 간단한 문제를 못푸는것은 좀 실망스럽습니다. 그런데 아래 질문이 의외로 70B 모델부터 풀수 있는 문제더라고요.

10.8B는 숫자에 약하다

 

그렇다면 요약 성능은 어떨지도 궁금해서 해보았습니다. 핵심을 잘 파악하면서 상당히 잘하는것처럼 보였어요!

핵심적인 요약을 잘해주었다

 

앞으로 계획

현재 사용한 dataset을 GPT4 기반으로 답변을 받아서 훈련하고 싶은 생각이 들었습니다. 하지만 24.9K 크기의 데이터셋을 GPT4로 답변을 받는것은 엄청난 돈이 소요됩니다. 어림잡아서 한 $700~800 정도 들거 같아요. 개인이 하기에는 좀 부담스러운 금액이긴 한데 도전해볼만한 영역인것은 분명한것 같습니다.

그리고 제가 건강에 관심이 많아서 제 스스로 건강관련 데이터셋을 만들어볼까도 생각하고 싶습니다. 

언젠간....Kurugai-EEVE-v1.1 모델이 출시 할 수 있겠죠? 좀 장기 프로젝트로 가볼까 합니다^^ FIN