axolotl 훈련 중 정보 해석하기

2024. 3. 2. 22:36인공지능

10.7B 모델을 알파카 포맷으로 1에폭 진행중입니다. lora로 돌리는데 RAM은 37.5GB, VRAM은 33.9GB정도 먹습니다. VRAM은 초기에 30GB였는데 데이터가 쌓이는지 소폭 증가했습니다.

 

워낙 데이터셋이 큰지라 시간이 많이 걸리는데 훈련 중간에   loss, grad_norm 등 여러 외계어가 보이는데요. 이것에 대한 내용을 chatgpt에게 묻고 어떤 의미인지 알려달라고 했습니다.

axolotl 훈련 시 위와 같은 정보가 표시된다.

 

■ 손실 함수 값 (Loss): 손실 함수의 값이 감소하고 있는지 확인해야 합니다. 제공된 정보에서는 'loss' 값이 감소하는 경향을 보이고 있습니다. 이는 훈련이 모델을 더 정확하게 만들고 있는 것을 나타낼 수 있습니다.

손실 감소 확인하기 (Loss Decrease): 손실이 완만하게 감소하는 것은 모델이 훈련 데이터에서 점차적으로 높은 정확도를 학습하고 있다는 신호입니다. 일반적으로 손실이 감소할수록 모델의 성능이 향상되고 있습니다. 그러나 손실이 갑자기 증가하거나 감소하지 않는 경우에는 문제가 있을 수 있습니다. 손실이 증가하는 경우에는 모델이 훈련 데이터에 오버피팅(과적합)될 가능성이 있습니다. 반면, 손실이 감소하지 않으면 모델이 충분히 학습되지 못하고 있는지를 나타낼 수 있습니다.

로스와 성능 평가 지표의 일치 확인하기: 일반적으로는 훈련 중에 로스의 변화뿐만 아니라 성능 평가 지표(예: 정확도, 정밀도, 재현율 등)도 함께 고려합니다. 모델이 훈련 데이터에서 손실이 감소하더라도, 평가 지표가 개선되지 않으면 모델이 실제 작업에서 성능이 향상되지 않고 있는 것일 수 있습니다. 이 경우에는 전처리, 하이퍼파라미터 조정 등을 통해 모델을 개선하는 시도를 할 수 있습니다.

결론적으로, 손실의 감소는 모델의 향상을 나타내지만, 모델의 성능을 평가하는 데에는 로스 외에도 다양한 지표를 고려하는 것이 중요합니다. 그리고 훈련 도중 로스나 지표의 이상한 변화가 나타나면 모델의 문제를 해결하기 위해 적절한 대응이 필요합니다.

→ 커뮤니티 사이트 눈팅한 결과 이 값은 훈련하면서 감소하는게 좋다는 의견이 많이 있었습니다. 보통 0.5~0.3 까지 떨어지도록 훈련하는데 정확하진 않습니다. 현재 위로 튀지 않고 꾸준히 감소하고 있는게 좋네요.


■ 그래디언트 노름(Gradient Norm)은 모델의 가중치를 얼마나 크게 조절해야 하는지를 나타내는 지표입니다. 간단히 말해, 그래디언트 노름은 모델을 훈련할 때 각 가중치의 업데이트 크기를 결정하는데 도움을 줍니다.

여기서 "그래디언트"는 손실 함수의 기울기를 나타내며, "노름"은 벡터의 길이를 측정하는 방법 중 하나입니다. 그래서 그래디언트 노름은 손실 함수의 기울기 벡터의 크기를 나타냅니다.

일반적으로, 훈련 도중 그래디언트 노름이 너무 크면 모델이 수렴하지 않을 수 있고, 그래디언트 노름이 너무 작으면 훈련이 더디게 진행될 수 있습니다. 따라서 적절한 그래디언트 노름을 유지하는 것은 모델의 안정성과 효율성을 향상시키는 데 도움이 됩니다.

요약하면, 그래디언트 노름은 모델이 훈련 데이터에 얼마나 민감하게 반응하는지를 나타내는 지표이며, 적절한 크기로 조절해야 모델의 훈련이 안정적으로 이루어집니다.

→2.6~3 사이의 값이면 안정적이라고 할 수 있다는데...6까지 뛴적이 있어서 좀 불안해지는군요.

 

  학습률 (Learning Rate): 학습률은 모델이 얼마나 큰 스텝으로 업데이트되는지를 결정합니다. 학습률이 적절하게 조절되면 훈련이 안정적으로 수렴할 가능성이 높습니다. 여기서는 'learning_rate' 값이 점진적으로 증가하는 것을 확인할 수 있습니다.

  에폭 (Epoch): 에폭은 전체 데이터셋이 모델에 대해 한 번 훈련되는 횟수를 나타냅니다. 에폭이 증가함에 따라 성능이 향상되는지 확인할 수 있습니다.

→ 여기서는 1에폭만 실시했습니다.

 

평가 관련된 항목들

 eval_loss: 평가 데이터셋에 대한 손실 값입니다. 일반적으로 이 값은 모델의 성능을 나타냅니다. 낮은 평가 손실은 모델이 평가 데이터에서 더 정확한 예측을 수행한다는 것을 의미할 수 있습니다.

eval_runtime: 평가가 소요된 전체 시간입니다. 여기서는 4027.6507 초가 소요되었습니다.

  eval_samples_per_second: 초당 평가 샘플의 수입니다. 이 값은 평가 속도를 나타냅니다. 여기서는 0.309 샘플/초입니다.

  eval_steps_per_second: 초당 평가 스텝의 수입니다. 이 값은 평가 속도를 또 다른 방식으로 표현한 것입니다. 여기서는 0.154 스텝/초입니다.

  epoch: 현재까지의 에폭 수입니다. 이 정보는 모델이 몇 번의 훈련 주기를 완료했는지를 나타냅니다.

 

axolotl은 뭔가 다양한 정보를 주는데 처음하는거라서 이게 좋은건지 나쁜건지 아직도 감이 잘 잡히지 않습니다. chatgpt가 제대로 알려주었는지 확인하는 작업을 해야겠네요. 지금 훈련은 5시간 25분 진행했고...총 11시간 30분 걸리는것 같습니다. 원래 10시간이였는데 시간이 지날수록 점점 늘어나는 현상이 있네요.