모델의 특정 layer를 freeze시키면, 학습 과정에서 Back Propagation이 일어날 때 freeze된 layer의 파라미터들은 weight가 업데이트되지 않고 유지된다. freeze시키는 방법은 간단하다. 해당 layer의 파라미터들에 대해 requires_grad = False로 설정해주면 된다. from transformers import AutoModel def freeze_params(model): for par in model.parameters(): par.requires_grad = False def show_requires_grad(model): for name, param in model.named_parameters(): print(name, ': ', param.requ..
'RuntimeError: CUDA error: device-side assert triggered' 이 에러는 가질 수 있는 값의 범위를 벗어나는 값이 들어왔을 때 발생한다. embed_tokens = nn.Embedding(vocab_size, hidden_size) ... embeds = embed_tokens(input_ids) # 에러 발생 나의 경우, 위 부분에서 에러가 발생했다. 내가 사용한 사전학습 모델에서의 tokenizer의 vocab_size는 30000이었는데, 여기에 special token을 10개 추가하고 아래와 같이 resize를 해주어서 vocab_size를 30010으로 설정했다. model.resize_token_embeddings(len(tokenizer)) (resi..
with open('file.txt', 'r', encoding='utf8') as f: lines = f.readlines() python에서 텍스트 파일을 읽어들일 때 일반적으로 위와 같이 코드를 작성하는데, 이 때 인코딩 에러가 자주 발생하곤 한다. 'UnicodeDecodeError: 'cp949' codec can't decode byte 0xeb in position 15: illegal multibyte sequence' 이를 확실하게 해결하는 방법은 텍스트 파일을 '메모장'으로 열기 - 다른 이름으로 저장 - 인코딩(E)를 ANSI로 저장하는 것이다.
이 에러는 float 타입의 텐서에 너무 큰 값을 저장할 때 발생한다. 다시 말하자면, int 타입으로 저장해야 할 텐서를 데이터 타입을 지정해주지 않아서 기본 타입인 float 타입으로 만든 경우에 흔히 발생한다. 예시 코드> tokens_list # [14054, 10788, 9241, 18831, 10396, 10910, 14304, 3, 3, 3, # 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] tokens_tensor = torch.Tensor(tokens_list) # tensor([1.4054e+04, 1.0788e+04, 9.2410e+03, 1.8831e+04, 1.0396e+04, 1.0910e+04, # 1.4304e+04, 3.0000e+00, 3.0000e+00, 3.00..
"NameError: name '_C' is not defined" Jupyter Notebook를 사용 중에, Anaconda prompt를 통해 새로운 라이브러리를 설치한 후 설치한 라이브러리를 사용하려 import하려 하니 위 에러가 발생했다. 보통의 경우 jupyter notebook에서 kernel restart를 하면 해결된다. (새로운 라이브러리를 설치하면 항상 restart해주는게 옳다) 하지만 내 경우 kernel을 재시작했는데도 위 에러가 발생해서 시스템적인 에러인가 싶었는데, 간단한 에러였다. Anaconda prompt에서 라이브러리를 설치한 후, 기존에 켜져있던 jupyter notebook은 닫고 Anaconda prompt에서 jupyter-notebook 을 입력해 주피터를 ..
GPU 서버에서는 GitHub에 나온 대로 $ pip install --user annoy 를 수행하면 잘 설치되었는데, CPU에서는 아래와 같은 에러 메시지가 발생하면서 설치가 안 되었다. 'error: subprocess-exited-with-error', 'error: legacy-install-failure' 구글링해보니 이는 annoy의 문제가 아니라 gcc 버전의 문제 때문이라고 하는데, 나는 그냥 conda를 이용함으로써 해결했다. conda 가상환경을 만들어 활성화한 후, 아래 명령어를 수행한다. conda install -c conda-forge python-annoy import 시에는 원래의 annoy 라이브러리와 동일하게 import annoy로 사용 가능하다.
파일 읽기 import json with open('파일 경로', 'r', encoding='utf-8') as f: json_dicts = json.load(f) 파일 쓰기 import json with open('파일 경로', 'w', encoding='utf-8') as f: # json.dump(json_dicts, f) # 기본 사용법 json.dump(json_dicts, f, ensure_ascii=False, indent='\t') 한글이 포함된 경우, ensure_ascii=False를 설정해주면 유니코드로 변환해 저장하지 않고 한글 형태 그대로 저장할 수 있다. indent='\t'를 써주면 가독성이 좋도록 들여쓰기하여 파일을 저장할 수 있다. 더보기 참고 링크 https://devpo..
언어 모델의 대표적인 Decoding strategies를 알아본다. 아래에 언급되는 '파라미터'는 transformers 라이브러리의 generate() 함수에 정의된 파라미터를 의미한다. 관련 포스팅 링크를 걸어둔다. Greedy Search 해당 시점에서 확률이 제일 높은 것 하나만 선택. 입력이 동일할 경우 매번 같은 문장이 나옴 파라미터: do_sample=False Beam Search 확률이 높은 토큰을 k개씩 선택. 각 beam에서 k개씩 선택하고, 또 새로 생성된 값들 중 누적 확률이 가장 높은 k개만 선택하는 방식 어떤 beam에서 가 나오면 해당 beam은 최종 선택 후보가 되며, 해당 beam은 k개 중에서 빠짐 이에 따라 k개를 채우기 위해 상위 k+1번째였던 값이 그 자리를 채움..