딥러닝 모델을 훈련시켜 두고 nvidia-smi 명령을 치면 의아할 때가 있습니다. GPU 메모리 사용량 때문입니다.내가 만든 모델은 기껏해야 몇백 메가바이트 수준의 파라미터를 가지고 있는데, 훈련을 시작하자마자 GPU 메모리는 몇 기가바이트(GB)를 훌쩍 넘어갑니다.결론부터 말씀드리면, 지극히 정상입니다. 오히려 "내 모델 가중치 크기랑 메모리 사용량이 비슷한데요?"라는 상황이라면, 그건 훈련이 제대로 되지 않고 있다는 뜻입니다.왜 이런 일이 벌어질까요? 훈련은 Inference와 달리 단순히 가중치를 들고 계산하는 일이 아니기 때문입니다. 훈련의 본질은 미분을 해서 모델을 학습시키는 것이고, 이를 위해서는 수많은 과거의 흔적들을 메모리에 남겨둬야 합니다.오늘은 훈련 시 GPU 메모리를 잡아먹는 주요 ..
오늘의 주제는 PyTorch의 torch.compile()입니다.PyTorch 2.0부터 도입되어 PyTorch 모델의 속도를 빠르게 해준 기능입니다. 이미 많은 분이 사용하고 계실 겁니다.오늘은 torch.compile()이 무슨 일을 하길래 이런 놀라운 일이 가능한지 살펴보려고 합니다.현재를 잘 알려면 과거를 먼저 알아야겠죠? 왜 torch.compile()이 등장했는지부터 알아보겠습니다.이 전에 작성한 Pytorch 코드가 GPU에서 실행되기까지를 먼저 읽어보시면 이 글을 이해하는 데 도움이 될 것 같습니다.1. The Bottleneck: 왜 컴파일러가 필요한가?본격적인 최적화 이야기를 하기 전에, 우리가 지금 쓰고 있는 PyTorch의 기본 모드인 Eager Mode(즉시 실행)가 무엇인지, 그..
PyTorch 코드를 실행할 때 우리는 습관처럼 외웁니다..to('cuda')순간 잠잠하던 컴퓨터 본체에서는 웅장한 팬 소리가 들려옵니다. Cloud GPU를 주로 사용하신다면 이 소리를 들을 일은 많지 않겠군요.그런데 이런 궁금증, 가져본 적 없으신가요?"도대체 느리다는 파이썬이 어떻게 그 엄청난 속도의 GPU를 제어하는 걸까?"오늘은 우리가 작성한 고작 몇 줄의 파이썬 코드가 어떻게 GPU를 제어하고 복잡한 계산을 수행하는지 알아보려고 합니다.1. 파이썬: 저는 운전자이지 엔진은 아니에요가장 중요한 이야기 먼저 하고 시작하겠습니다.우리가 PyTorch로 작성하는 파이썬 코드는 GPU 위에서 실행되지 않습니다.정확히 말하면 파이썬은 명령만 내릴 뿐, 실제로 땀 흘려 뛰는 건 C++과 CUDA입니다. 파..
PyTorch로 코드를 짜다 보면 아래 에러를 본 적이 있을 겁니다.RuntimeError: view size is not compatible with input tensor's size and stride..."그냥 shape 좀 바꾸자는데 뭐가 이렇게 까다로워?"라고 생각하며 .reshape()으로 해결한 적이 있지 않으신가요?오늘은 왜 이런 일이 생기는지, PyTorch의 tensor는 Shape을 어떻게 관리하는지 그 내부를 알아보겠습니다. 이 글은 PyTorch를 어느 정도 써봤고, view / reshape / transpose를 실제 코드에서 사용해본 분을 대상으로 합니다. 1. 이중인격자 TensorPyTorch의 tensor는 내부적으로 두 부분으로 나뉘어 있습니다. 실제 데이터가 저장..
PyTorch 를 쓰다보면 습관처럼 쓰는 문장이 있습니다. 바로, loss.backward() 입니다. 신경망을 배우고 역전파를 위한 미분을 배우고나서 PyTorch를 접했을 때 loss.backward()를 마주치면 마법같다는 생각을 할 수 밖에 없습니다. 그 복잡한 계산이 loss.backward() 한 줄이면 해결되니까요.하지만 엔지니어로서 "아 좋다"라고 넘어가기에는 조금 찜찜합니다. 도대체 loss.backward()가 내부적으로 어떻게 작동하는지 궁금합니다.오늘은 PyTorch의 핵심 중 하나이자 이 마법을 가능하게 해주는 Autograd 에 대해서 알아보겠습니다.0. 들어가기 전에: 딥러닝 학습의 4단계 흐름코드를 뜯어보기전에 딥러닝 모델 학습의 기본 흐름을 다시 한번 떠올려보겠습니다. 딥러..
한국어 품사 태거를 만들어 봅시다 품사 태거(Part-of-Speech Tagger)는 NLP에서 기본이 되는 태스크이고, 그 때문에 NLP를 배울 때 많이 만들어보는 기능이기도 합니다. 품사 태거가 NLP에서 나름 인기있는 이유는 몇가지가 있을 겁니다. 다른 NLP Task의 입력 또는 전처리 역할을 합니다. 요즘은 트렌드가 언어학적인 요소를 많이 배제하는 추세지만 전통적으로 파싱, 번역 등의 NLP 파이프라인에 많이 쓰였습니다. 한국어에서 BPE와 같은 통계적인 Tokenizer를 대신하는 방법으로 쓰이기도 합니다. 한국어의 특성상 통계적인 Subword보다는 형태소 단위를 토근으로 쓸 때 성능이 더 좋긴 경우들이 있습니다. (참조: 한국어 토큰의 단위는 뭐가 좋을까?) 품사 태깅은 Sequentia..
모델을 훈련시키는데 오랜 시간이 걸리다보면 여러가지 이유로 처음에 생각했던 Epoch만큼 훈련을 시키지 못하고 중간에 끝나는 경우가 있습니다. 누군가 실수로 Ctrl+C를 눌러버린다거나, 모종의 이유로 훈련 프로세스가 죽어버린다거나, 아니면 GPU를 다른 곳에 쓰기 위해서 눈물을 머금고 중간에 멈추는 경우도 있습니다. 이럴 때 유용한 방법이 중간 중간 모델을 저장해두고 나중에 그 시점부터 훈련을 이어서 하는 것입니다. 오늘은 중간중간 모델을 저장하는 방법과 나중에 이어서 훈련을 시작하는 방법을 알아보겠습니다. import torch import torch.nn as nn import torch.optim as optim import argparse class MyModel(nn.Module): def _..
Logit, Sigmoid, Softmax 오늘은 Logit, Sigmoid, Softamx에 대해서 알아보려고 합니다. 코드와 함께 Logit, Sigmoid, Softmax의 차이와 활용처를 알아보겠습니다. import torch import torch.nn as nn x = torch.rand(8, 256) print(x) linear_layer = nn.Linear(256, 5) tensor([[0.8509, 0.5229, 0.0945, ..., 0.0343, 0.9828, 0.8862], [0.2340, 0.6683, 0.6794, ..., 0.0669, 0.7153, 0.4655], [0.8962, 0.0695, 0.5760, ..., 0.9555, 0.3334, 0.7940], ..., [0..
- Total
- Today
- Yesterday
- Ai
- word vector
- transformer
- token
- docker
- iterator
- LLM
- ChatGPT
- Linux
- DEEPLEARNING
- generator
- sys.path
- GPT
- tip
- Python
- 자연어처리
- keras
- Deep Learning
- word embedding
- tensorflow
- fasttext
- GPU
- Large Language Model
- 파이썬
- Import
- speculativedecoding
- NLP
- MachineLearning
- Foundation Model
- pytorch
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |