[Pytorch] DataParallel vs DIstributedDataParallel
·
Pytorch
DataParallel multi-thread 방식 코드 한줄로 구현 가능 model = nn.DataParallel(model) 방식 1. 배치 데이터를 4개의 GPU에 나눔 2. 모델을 4개의 GPU에 복사 3. 4개의 GPU에서 forward 수행 4. 결과값을 GPU-1에 다시 모아 gradient 계산 5. 계산된 gradient를 4개의 GPU에 다시 나눔 6 .4개의 GPU에서 backward 수행 단점 output을 GPU-1에 모아 계산하기 때문에 GPU-1의 사용량이 많아집니다. Python은 GLI(Global Interpreter Lock)때문에 multi-thread로는 성능 향상이 어렵습니다. GLI : 하나의 thread에만 자원을 허락하고 Lock을 걸어 다른 thread의 ..
[Pytorch] 다양한 Learning Rate Scheduler
·
Pytorch
Deep learning은 gradient descent를 통해 loss를 줄이는 방식으로 학습하고 이 과정에서 learning rate를 설정하게 됩니다. learing rate를 너무 크게 하면 global minima에 수렴하지 못하고 너무 작게 하면 수렴 속도가 늦고 local minima에 빠질 수 있습니다. 따라서 학습을 진행하면서 고정된 learning rate가 아닌 learning rate에 변화를 주면서 학습화는 방법이 연구되고 있습니다. 0. Library import torch import torch.nn as nn from transformers import get_cosine_with_hard_restarts_schedule_with_warmup import matplotlib...
[Pytorch] Onnx로 모델 export하기
·
Pytorch
Onnx는 pytorch, tensorflow 등의 머신러닝 프레임워크에서 만들어진 모델들이 서로 호환될 수 있도록 만들어줍니다. 이를 사용하여 pytorch에서 만든 모델을 onnx로 export 한 후 tensorflow에서 사용할 수 있습니다. 1. Export import torch import torchvision.models as models # 모델 생성 model = models.vgg11(pretrained=True) # 평가 모드로 설정 model.eval() pytorch모델을 준비하고 모델을 model.eval() 또는 model.train(False)로 eval모드로 바꿔줘야 합니다. (dropout, batchnorm의 비활성화를 위해서 필요) dummy = torch.randn..
[리뷰] 행복의 기원
·
1. 선정 이유 우리는 보통 행복에 대해 접근할 때 HOW로 접근합니다. 삶은 행복하기 위해 산다고 생각하며 어떻게 하면 행복해질 수 있는지 철학적으로 고민합니다. 하지만 이 책은 행복에 대해 WHY의 관점으로 접근합니다. 인간은 왜 행복을 느끼는지에 대해 질문을 던지며 그에 대해 생물학적으로 저술했다는 점에서 흥미를 느껴 읽게 되었습니다. 2. 정리 2-1. 행복은 단지, 생존을 위해 절대적으로 필요한 정신적 도구일 뿐이다. 꿀벌은 꿀을 모으기 위해 존재하는 것이 아니고, 인간도 행복하기 위해 사는 것이 아니다. 벌도 인간도 자연의 일부이며 이 자연법칙의 유일한 주제는 생존이다. 꿀과 행복, 그 자체가 존재의 목적이 아니라 둘 다 생존을 위한 수단일 뿐이다. 간단히 말해, 행복하기 위해 사는 것이 아니..
DataFrame Iteration 속도 비교
·
Python
수백만 row가 넘는 데이터를 전처리하는데 전처리가 조금 복잡하여 iterrows를 돌렸더니 시간이 너무 오래 걸려 쓰게 된 글입니다. 다음과 같이 dataframe이 있을 때 각각의 iteration방법들을 비교해 보겠습니다. 1. for loop %%timeit for row in range(len(df)): tmp = df.iloc[row,0]+df.iloc[row,1]+df.iloc[row,2] 1min 21s ± 6.04 s per loop (mean ± std. dev. of 7 runs, 1 loop each) 2. iterrows %%timeit for _, row in df.iterrows(): tmp = (row['A']+row['B']+row['C']) 48.1 s ± 2.11 s p..
[Review] OpenAI의 DALL-E2 공개
·
AI/ML/NLP
1. Intro DALL-E의 이름은 윌-E(WALL-E)와 화가 살바도르 달리(Salvador Dali)에서 온 것으로 text to image generation 모델입니다. 자연어를 입력으로 받아 이미지를 생성하는 모델을 말하는 건데, 이번 OpenAI에서 발표한 DALL-E2는 2021년 초에 발표한 DALL-E의 후속 버전으로 당시 아보카도 의자로 많은 관심을 받았었습니다. DALL-E2에서는 해상도가 4배 높아지고 편집 기능도 제공한다고 하는데 어떻게 발전했는지 한 번 알아봤습니다. 2. DALL-E2 입력한 자연어에 대해 DALL-E2가 만들어낸 이미지들입니다. 놀라우리만큼 사실적이고 세상에 없는 이미지를 여러 장 만들어냈습니다. 또한 편지 기능도 주위의 그림자, 반사, 질감을 고려하면서 요..
디렉토리에서 파일리스트 가져오기 (glob, os.walk)
·
Python
여러 하위 폴더에서 원하는 데이터를 가져오고 싶을 때가 있는데 그때 유용한 방법들입니다. 1. glob 2. os.walk os.walk는 3가지 인자를 반환합니다. 첫 번째 인자(current)는 현재 방문하고 있는 폴더의 이름 두 번째 인자(folders)는 현재 방문하고 있는 폴더 안의 폴더들 세 번째 인자(files)는 현재 방문하고 있는 폴더 안의 파일들 따라서 다음과 같이 폴더 안의 파일들을 리스트로 만들 수 있습니다.
[Oracle] 튜닝을 위한 간단한 힌트 정리
·
SQL
인덱스 튜닝 (/*+ INDEX()*/ ) 1. 튜닝 전 SQL (0.9초) SELECT /*+ FULL(A) */ COUNT(*) FROM TB_CUST A WHERE A.CUST_NM LIKE 'AB%' AND EXISTS ( SELECT '1' FROM TB_ORD C WHERE C.CUST_ID = A.CUST_ID AND C.PRDT_CD LIKE 'AB%' ) ; 문제점 TB_CUST테이블의 CUST_NM 칼럼이 변별력 있는 칼럼임에도 인덱스를 생성하지 않았습니다. TB_ORD테이블의 CUST_ID 칼럼이 변별력 있는 칼럼임에도 인덱스를 생성하지 않았습니다. 반복적인 풀 스캔은 부하를 줍니다. 2. 튜닝 후 SQL (0.03초) CREATE INDEX TB_CUST_IDX01 ON TB_CUS..