반응형

pytorch 82

[PyTorch] CLIP의 text encoder에는 attention mask가 존재합니다.

CLIP의 text encoder 내부의 Multi_head_attention에서 attention mask가 None으로 입력되는 줄 알았다. 아이디어를 구현하기 위해 attention mask 부분을 만들어서 넣어줬더니.. 성능이 엄청 떨어졌다. 한번 확인해보니 CLIP의 text encoder에서 attention mask가 None으로 입력되는 것이 아니라 다음과 같이 들어간다. 근데 어떤 layer에서는 None으로 들어가기 때문에 구체적으로 확인해볼 필요는 있다. 항상 저렇게 attention mask가 들어가는게 아니다. BERT 구조임에도 autoregressive하게 문장을 보게 하려는 의도 인듯?

[PyTorch] Multi_head_attention에서 target sequence length와 source sequence length 의미

Multi_head_attention에서 target sequence length와 source sequence length 의미 연구를 위해 pytorch의 multi head attention에 attention mask를 씌워줘야 했다. 도큐먼트를 보면 L은 target sequence length를 의미하고 S는 source sequence length를 말하는데, 이 둘은 무엇일까? pytorch 내부 코드를 뜯어보니 target sequence length는 query의 길이를 의미한다. soure sequence length는 key의 길이를 의미함. 구글링해도 관련 내용을 찾기 어려워서 작성해본당. 나만 모르고 다 아는 내용이라서 구글링해도 못찾았던 거일수도?

[PyTorch] Tensor.retain_grad()

a.reatain_grad()를 통해 gradient가 사라지는 것을 예방할 수 있다. 계산그래프에서 leaf node가 아닌 tensor의 gradient는 계산 후 날라가는데, retain_grad를 통해 날라가지 않고 붙잡을 수 있다. https://blog.paperspace.com/pytorch-hooks-gradient-clipping-debugging/ Debugging and Visualisation in PyTorch using Hooks In this post, we cover debugging and Visualisation in PyTorch. We go over PyTorch hooks and how to use them to debug our backpass, visualise ..

[PyTorch] register_hook을 사용하여 Transformer 내부의 Attention matrix(Torch.Tensor)의 gradient 받아오기

register_hook을 사용하여 Transformer 내부의 Attention matrix(Torch.Tensor)의 gradient 받아오기 모델의 파라미터에 대한 grad가 아닌, Tensor object에 대한 grad는 계산만하고 날라가버린다. 즉, loss.backward()를 통해 backpropagation을 진행하면 중간 연산에 필요한 Tensor 변수의 gradient는 .grad로 저장이 안되고 계산이 끝나면 날라간다는 말이다. 따라서 Tensor object에 register_hook 함수로 gradient를 한번 붙잡아야 한다. 붙잡는다는 말은 gradient가 계산되었을 때, 날라가도록 두는게 아니라 다른 변수에 저장해야 한다는 말이다. 나는 중간 연산의 Tensor objec..

[Pytorch] Sementation mask 시각화 하기

이미지를 segmentation 모델로 전달하여 pred를 얻었다고 가정하겠습니다. for image, target in data_loader: pred_masks = model(image) # [N, H, W], dtype= Tensor.bool 이 pred_masks를 matplotlib를 사용하여 시각화 하겠습니다. 우선, pred_masks, target, image를 동일한 사이즈로 resize 해줘야 합니다. 안되어있는 경우 resize 합니다. import torchvision.transforms.functional as TF h, w = image.shape[2], image.shape[3] pred_masks = TF.resize(pred_masks, (h, w)).type(torch.b..

[Pytorch Ligtning] RuntimeError: t == DeviceType::CUDAINTERNAL ASSERT FAILED at "/opt/conda/conda-bld/pytorch_1634272068694/work/c10/cuda/impl/CUDAGuardImpl.h":24, please report a bug to PyTorch.

RuntimeError: t == DeviceType::CUDAINTERNAL ASSERT FAILED at "/opt/conda/conda-bld/pytorch_1634272068694/work/c10/cuda/impl/CUDAGuardImpl.h":24, please report a bug to PyTorch. 에러가 발생했다. Pytorch Lightning을 사용하다 발생한 에러인데, torchmetric에서 불러온 PSNR 함수를 .cuda()로 보내지 않아 발생한 오류였다. Pytorch Lightning이 torchmetric에서 불러온 PSNR 함수를 자동으로 cuda로 전달하지 않나보다. psnr = PSNR().cuda()

[Pytorch] Load state_dict로 인한 out of memory

back = Back().cuda() state_dict = torch.load(config['back_init_model']) back.load_state_dict(state_dict['state_dict']) 모델을 GPU에 올린뒤에 load 명령어로 state_dict 파일을 불러오고 모델.load_state_dict로 불러온 state_dict을 적용하면 GPU 메모리가 낭비된다. 즉 CUDA out of memory가 발생할 수 있다는 것. load_state_dict이 적용된 모델과 처음에 정의한 모델이 함께 GPU에 올라가서 발생한 문제인 것 같다. 먼저 CPU 에 모델을 올리고 나서 load_state_dict으로 state_dict을 적용한 후에 GPU에 올리면 된다. back = Bac..

반응형