728x90
728x90

코딩/pytorch 5

PyTorch 와 PyTorch Lightning을 위한 간단 도커파일 (Dockerfile) 작성 & 사용

도커 (docker) 사용 이유 학습 코드를 작성하다 보면 기본적으로 cuda version, python version, pytorch version, Nvidia GPU와 cuda compatibility같은 것을 신경 써야 합니다. 코드가 복잡해지면 이것저것 신경 써야 하는 것이 많아져서 그냥 처음부터 도커 환경을 구축해서 작업하는 것이 속 편하더라고요. 이번 포스트에서는 pytorch와 pytorch lightning을 사용하기 위한 간단한 도커파일 작성하는 법을 소개하려고 합니다 (ubuntu/wsl2 사용). 도커(docker)란? 이번 포스트에서 사용되는 도커의 용도는 특정 머신 (예를 들어 제가 사용하는 pc)에서 원하는 개발 환경을 구축하는 것입니다. 도커를 사용하면 머신에 이미 있는 환..

코딩/pytorch 2023.08.03

[PyTorch] 간단한 pytorch lightning 설명과 템플릿 코드

간단한 pytorch lightning 설명 모델을 만들 때 PyTorch도 충분히 많은 기능을 제공해 주지만 그래도 직접 짜기 귀찮은 것들도 많습니다. 이런 것들을 pytorch lightning이 해줘서 개인적으로 요즘은 대부분 학습을 pytorch lightning을 사용해서 짜고 있습니다. 사용 방법 1. 우선 pytorch lightning의 LightningModule이라는 클래스를 작성한다. configure_optimizer: 사용할 optimizer 세팅하고 리턴 training_step: 학습할 데이터 batch가 들어왔을 때 모델에 넣어서 loss를 계산하고 loss 값 리턴 validation_step: validation 데이터 batch가 들어왔을 때 loss 계산하고 loss ..

코딩/pytorch 2023.07.30

[PyTorch] learning rate scheduler 직접 짜기

PyTorch에 많은 learning rate scheduler이 있지만 직접 짜고 싶을 때도 있다. 방법은 어렵지 않다. torch.optim.lr_scheduler에 있는 _LRScheduler를 기반으로 class를 하나 만들면 된다. 미니멀하게는 __init__이랑 get_lr만 잘 정의해주면 된다. linear하게 learning rate를 warmup해주는 scheduler을 예로 들어보자: from torch.optim.lr_scheduler import _LRScheduler class LinearWarmup(_LRScheduler): def __init__(self,optimizer,base_lr,warmup_steps,last_epoch=-1): self.base_lr = base_lr..

코딩/pytorch 2023.02.04

[numpy][pytorch] np.memorymap로 빠른 dataloading

학습할 때 dataloading 이 생각보다 시간을 많이 잡아먹습니다. 물론 dataloading을 가장 빠르게 하는 방법은 모든 data를 RAM에 올려서 작업하는 방식이지만 현실적으로 큰 데이터 셋을 다루다 보면 이것은 불가능하죠. Dataloading을 빠르게 할 수 있는 방법 중 하나가 이번 포스트에서 소개할 memory map을 사용하는 것입니다. class numpy.memmap(filename, dtype=, mode='r+', offset=0, shape=None, order='C') "Create a memory-map to an array stored in a binary file on disk. Memory-mapped files are used for accessing small s..

코딩/pytorch 2023.01.29

ddp 학습 중단 오류--한번에 프로세스 죽이기

저는 pytorch lightning을 사용해서 ddp로 학습을 자주 돌리는데, 가끔 ctrl+c로 학습 중단을 하면 프로세스들이 죽지 않고 남는 경우가 생깁니다. 매번 이 프로세스들을 일일이 찾아서 죽이는 것은 매우 귀찮습니다. 이럴 때 다음과 같이 한번에 다 죽일 수 있습니다: nvidia-smi | grep 'python' | awk '{ print $5 }' | xargs kill -9 이 커맨드는 nvidia-smi 에서 python 프로세스가 있는 줄을 찾아서, 5번째 열에 있는 값을 (process id) 사용해서 프로세스를 죽입니다. 비슷하게, train.py라는 스크립트를 통해서 학습을 시켰으면 ps -aux | grep 'train.py' | awk '{ print $2 }' | xar..

코딩/pytorch 2023.01.23
728x90
728x90