본문 바로가기

Greedy decoding 사용 시 output의 일관성 Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations? 논문을 읽다가 의문이 가는 문구를 발견했다. "Greedy decoding always predicts the correct answer.""Greedy decoding sometimes (but not always) predicts the correct answer." Greedy decoding을 사용하면 동일한 input에 대해 항상 output이 같을 텐데, 왜 이런 문장을 썼을까? 물론 나도 이런 경험을 한 적이 있어서 의문이 든 김에 조사해봐야겠다고 생각했다. 다행히 검색해보니 누군가가 트윗(현재 X)을 남겼다. https://twitter.com/cwolferesearch/st..
[Transformers] IterableDatasetShard의 동작 분산학습 환경에서 IterableDataset을 사용하려고 하는데 데이터셋길이가 달라 문제가 발생한다. 보통의 경우에는 DataLoader에 drop_last=True 옵션을 주면 배치 사이즈가 다른 마지막 배치를 무시할 수 있다. [ [[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[9, 10, 11], [12, 13], [14, 15]] ] 그런데 LLM을 학습할 때 배치 사이즈가 1로 학습하면 아예 배치 자체의 길이가 달라지는 경우가 생긴다. [ [[0], [1], [2]], [[3], [], [] ]
[PyTorch] IterableDataset의 split 안된다... 생각해보면 안되는 게 당연하 것 같기도...
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn LLaMA2 모델에 peft library를 통해 LoRA를 적용시키고 학습하면 위와 같은 에러가 나면서 backward()가 되지 않는다. 실제로 LoRA를 적용한 후 require_grad가 true인 파라미터들을 보면, input_embedding, lm_head에 require_grad가 false로 되어 있다. 이를 하기 위해 "model.enable_input_require_grads()"를 추가해준다. 함수에 대한 설명은 "Enables the gradients for the input embeddings. This is useful for fine-tuning adapter weights while keeping the model weights fixed." 이다. 코드를 살펴보면, inp..
LLaMA2 LoRA 적용과 tokenizer의 padding_side LLaMa2에 LoRA를 적용해보고 있는데, 이상하게 loss가 NaN이 되면서 학습이 되지 않았다. 이래저라 검색을 해보다가 우연히 어떤 블로그 글에서 tokenizer의 padding_side를 "right"로 바꾸는 걸 보고 적용해봤다. 불러온 LLaMa2 모델의 tokenizer의 기본 padding_side가 "left"로 되어 있었고, "right"로 바꿔준 뒤 학습했더니 loss가 잘 떨어졌다.
NotImplementedError: Cannot copy out of meta tensor; no data! Accelerate library 환경에서 FSDP를 이용해 distributed learning을 해보고 있는 중에 "NotImplementedError: Cannot copy out of meta tensor; no data!" 에러가 나서 해결 방안을 찾아봤다. 해결 방안: config 파일의 "fsdp_cpu_ram_efficient_loading" 값을 false로 하면 된다. 참고 링크: https://github.com/huggingface/transformers/issues/26510
Karabiner로 윈도우 용 키보드의 한영키를 맥에 적용시키기 기존에 쓰던 키보드가 망가져서 USB 선택기를 이용해 윈도우 PC와 맥북에서 윈도우용 키보드를 사용하게 됐습니다. 이 때, 불편한 게 맥에서 한영을 바꾸는 것인데요, caps lock이나 control + space를 이용한 한영 전환이 불편해서 윈도우 키보드의 한영 키를 실제 맥에서도 적용하는 방법이 없나 찾아보다 발견하여 공유합니다. 일단 맥에서 Karabiner 앱을 설치해주세요. 유명한 프로그램이라 아마 이미 사용 중인 분도 계실 겁니다. 거이서 일단 한영키가 실제 어떤 키 입력을 받나 확인하기 위해 EventView를 실행해줍니다. 눌러서 실제 한영 키를 눌러 보면 "japanese_kana" 라는 키로 매핑된 것을 볼 수 있습니다. 아래의 left_command, left_shift, 4는 스..
Production을 위한 LLM 최적화 기법들 - from 허깅페이스 블로그 블로그 주소: https://huggingface.co/blog/optimize-llm LLM들을 배포하기 위해서는 여러 난관들이 존재한다. LLM은 파라미터가 매우 커서 메모리를 많이 소모하고, LLM에 context를 제공하기 위해 긴 input sequence가 필요하다. LLM을 효율적으로 배포하기 위해 크게 3가지 기법들이 사용된다. 1. Lower precision LLM들의 파라미터는 숫자 형태이며, float32, bfloat16, float16 등의 형태로 저장된다. 최근에는 float32 형태로 저장되는 모델은 거의 없으며 보통 bfloat16이나 float16 형태로 저장된다. 이를 통해 메모리를 반으로 줄일 수 있다. 그리고 input sequence가 짧을 수록 모델 파라미터의 메..