본문 바로가기

반응형

pytorch

(20)
Pytorch - DistributedDataParallel (2) - 동작 원리 Pytorch - DataParallel Pytorch - DistributedDataParallel (1) - 개요 Pytorch DDP (torch.nn.parallel.DistributedDataParallel) 함수는 어떤 방식으로 동작할까요? 먼저 각 process 별로 torch.nn.Linear 함수를 이용한 간단한 선형모델을 한 번의 forward/backward pass를 거치는 간단한 예제를 살펴보겠습니다. import torch import torch.distributed as dist import torch.multiprocessing as mp import torch.nn as nn import torch.optim as optim from torch.nn.parallel impo..
Pytorch - DistributedDataParallel (1) - 개요 Pytorch - DataParallel 지난 포스트의 DataParallel 모듈은 하나의 machine에 붙어있는 multi-gpu를 사용하여 훈련하는 방법이지만 최근에는 하드웨어 리소스를 충분히 활용하기 위해 하나의 machine 만이 아닌 여러 개의 machine을 동시에 활용하여 deep neural networks를 훈련시키는 distributed data parallel 방법 또한 필수적으로 사용되고 있는 상황입니다. 즉, $N$개의 machine에 $G$개의 gpu가 달려있다면 총 $N\times G$개의 gpu를 딥러닝 훈련에 사용하겠다는 것이죠. Figure 1은 2개의 machine과 각 machine 별로 4개의 gpu가 달려 있는 분산 환경을 나타내며 DDP (Distributed..
Pytorch - DataParallel 제가 딥러닝을 처음 시작한 2017년 초반에 대학원에서 사용한 GPU는 GTX1080Ti 였습니다. 메모리가 대충 11 GB 정도 였던 것으로 기억하는데 서버당 GPU 4기씩 설치되어 있었으니 그 당시로서는 학교에서 사용할 수 있는 최선의 인프라를 제공받았었죠 ㅎㅎ. 물론 서버 하나를 제가 독점하지는 않았지만요. 제가 처음 작업한 딥러닝 프로젝트는 100 GB가 넘는 대용량 음성 데이터를 이용한 multi-gpu training 이었습니다. 그 당시에는 Pytorch가 나오기 직전이었고 (아마 lua로 된 Torch만 있었던 것으로 기억합니다.) 딥러닝 프레임워크로 사용한 tensorflow 에는 gpu 병렬구현 api가 존재하지 않았습니다. 즉, multi-gpu에 필요한 1) gpu 별 모델 복사, ..
Pytorch - ModuleList vs List Pytorch의 nn 모듈은 neural networks를 위한 다양한 구성 요소 클래스를 제공합니다. 특히, 여러 개의 구성 요소를 하나의 리스트로 담는 nn.ModuleList 객체 또한 많이 사용되는데요, 겉보기에는 일반 파이썬 list와 큰 차이가 없어 보입니다. 다음과 같이 간단한 네트워크를 구성해 보겠습니다. import torch import torch.nn as nn class MyNN(nn.Module): def __init__(self, fc_input_size, fc_hidden_sizes, num_classes): super(MyNN, self).__init__() fcs = [nn.Sequential( nn.Linear(fc_input_size, fc_hidden_size), nn..
Pytorch - backward(retain_graph=True) (2) Pytorch - backward(retain_graph=True) (1) 일반적으로 손실 함수 (loss function)을 계산할 때는 배치에 대하여 평균/합 등을 통해 스칼라 값을 만들어준 이후에 .backward() 함수를 적용합니다. 스칼라 로스에 대한 각 파라미터 별 기울기를 계산하고 최적화를 수행하죠. 하지만 출력 $y$가 스칼라가 아닌 다변수 벡터 $y=$인 경우에는 .backward() 함수를 어떻게 적용할 수 있을까요? Pytorch에서는 JVP (Jacobian Vector Product)를 계산하여 최종 loss에 대한 파라미터 기울기를 계산합니다. 먼저 입력 벡터 $x=$, 출력 벡터 $y=$에 대해서 Figure 1과 같은 Jacobian matrix를 구성할 수 있습니다. 이 ..
RecSys - DeepFM RecSys - Factorization Machines (1) ResSys - Factorization Machines (2) RecSys - Field-aware Factorization Machines 유저가 추천된 아이템에 대하여 클릭할 확률을 예측하는 CTR (Click Through Rate) prediction은 온라인 광고, 유튜브 등의 모바일 어플리케이션에 유용하게 탑재되는 알고리즘으로 수많은 데이터가 존재하는 상황에서 플랫폼의 수익성 증대, 유저 관리 측면에서 매우 중요합니다. 지난 포스트에서 살펴본 FM (Factorization Machine)이나 FFM (Field-aware Factorization Machine)에서는 희박하고 (sparse) 고차원 (high-dimension..
Pytorch LSTM 이번 포스트에서는 시계열 데이터에서 자주 쓰이는 'airline-passengers.csv' 데이터에 대해 Pytorch 프레임워크의 LSTM 모듈을 이용하여 시계열 예측을 수행해보도록 하겠습니다. Import libraries 먼저 필요한 라이브러리를 호출합니다. import torch import torch.nn as nn import numpy as np import pandas as pd import matplotlib.pyplot as plt from torch.autograd import Variable from sklearn.preprocessing import MinMaxScaler Load data 판다스의 'read_csv' 함수를 이용해 데이터를 읽습니다. csv 데이터의 첫번째 열은..
RecSys - Factorization Machines (3), Pytorch 구현 RecSys - Factorization Machines (1) ResSys - Factorization Machines (2) 이번 포스트에서는 Factorization Machines (FM)을 Pytorch 프레임워크로 구현해보려 합니다. 먼저 추천 시스템에서 자주 쓰이는 벤치마크 데이터셋 MovieLens 20M을 다운받습니다. MovieLens 데이터셋은 다양한 종류가 있으며 여러 유저의 여러 영화에 대한 평가와 장르, 태그와 같은 메타 데이터가 csv 파일로 존재합니다. 그중 MovieLens 20M 데이터셋은 13만여명 유저의 3만여개의 영화에 대한 2백만개의 5-star 레이팅으로 구성되어 있습니다. (Figure 1, ratings.csv) Load datasets 먼저 Pytorch의 ..

반응형