본문 바로가기

반응형

분류 전체보기

(369)
파이썬으로 행렬 구현하기 (3) - 가우스 조던 소거법을 이용한 역행렬 [알고리즘 & 코딩테스트/코딩테스트] - 파이썬으로 행렬 구현하기 (1) [알고리즘 & 코딩테스트/코딩테스트] - 파이썬으로 행렬 구현하기 (2) 지난 포스트에서의 행렬 덧셈, 뺄셈, 곱셈에 이어 이번 포스트에서는 행렬의 역변환, 역행렬을 구현해보도록 하겠습니다. 행렬의 행과 열의 크기가 같은 정방행렬의 역행렬을 구하는 방법으로는 대표적으로 가우스-조던 소거법이 있습니다. $AX=I$에서 A의 역행렬 $X$를 구하는 가우스-조던 소거법의 기본은 $AX$를 $IX$로 바꿔주기 위해 1) 행렬의 한 행을 상수배, 2) 행렬의 두 행을 바꿈, 3) 한 행을 상수배하여 다른 행에 더하는 기본 행연산을 수행한다는 것입니다. 행렬의 각 행은 일차방정식이라 볼 수 있고 각 일차방정식을 identity matrix에 ..
파이썬으로 행렬 구현하기 (2) [알고리즘 & 코딩테스트/코딩테스트] - 파이썬으로 행렬 구현하기 (1) 이번 포스트에서는 지난 포스트에서 구현한 행렬 클래스를 기반으로 덧셈, 뺄셈, 곱셈 등의 다양한 행렬 연산을 구현해보도록 하겠습니다. 이때 행렬 클래스끼리 더하거나 곱하는 등의 연산이 가능하도록 언더바 두개로 이루어진 magic method (__magic_method__) 함수를 정의하는 방식으로 구현하도록 하겠습니다. 덧셈과 뺄셈 먼저 덧셈을 구현합니다. 주의 사항으로는 더할 두 행렬의 행과 열의 크기가 같아야하고 만약 정수를 더할 때에는 기존 행렬의 행 혹은 열의 크기가 1일 경우 (벡터의 경우) 모든 원소에 정수를 더하고 행, 열의 크기가 모두 1보다 크다면 대각선 원소만 더한다고 가정합니다. 만약 기존 행렬의 행, 열의 크..
파이썬으로 행렬 구현하기 (1) 코딩테스트의 유형은 회사, 지원직무, 경력에 따라 상이합니다. 일반적으로는 특정 사이트에 접속해서 (프로그래머스, 코드업 등) 주어진 문제를 2~3 시간 내에 풀고 제출하는 경우가 대부분이지만 지원하는 직무가 높은 경력을 요구하거나 일반 알고리즘 문제로 직무 적합성을 판단하기 애매한 경우에는 회사에서 직접 문제를 지원자에게 메일로 보내 푼 문제의 소스코드를 압축파일로 보내라는 경우도 많습니다. 이때의 코딩테스트 문제는 완전 운입니다... 지원하는 팀에서 개발하려고 하는 모듈이 될 수도 있고 (개인적으로 최악의 경우로 요구사항이 높습니다) 머신러닝의 경우 직접 알고리즘를 개발하여 주어진 성능을 달성해야 하는 경우도 있습니다. 이번 포스트에서는 그 중에서도 가장 간단한 numpy 등의 외부 라이브러리 없이 ..
용역계약 잔금 신청 나라장터 수의계약 서류 용역계약 선금 신청 2021년 6월부터 12월까지 진행하였던 계약을 드디어 마무리했습니다! 계약 종료 시점에 잔금을 신청하였고 연말 보너스로 잔금 입금까지 완료되었습니다. 대학원 시절부터 과제는 매우 많이 수행해왔지만 이번에는 제가 직접 제안서, 입찰, 선금, 잔금 서류 등 처음부터 끝까지 준비하고 수행한 적은 처음이었네요. 지금 생각해보면 누구든지 시간을 들여 충분히 할 수 있는 일이지만 처음 맞닥뜨렸던 서류의 압박은 정말 상상 이상이었습니다. 그동안 행정 처리를 대신해주셔서 마음 편히 코딩만 할 수 있게 서포트해주신 사무직 분들께 정말 감사드립니다 ㅎㅎ. 이번 포스트에서는 잔금을 마무리하는 과정에서 필요한 서류들을 정리해볼까 합니다. 과제 마무리 먼저 당연히 과제가 마무리되어야..
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 별 모델 복사, ..
Property와 descriptor (디스크립터) 지난 포스트에서 클래스의 어트리뷰트의 값을 정하고 불러오는 @property와 setter, getter 메소드에 대하여 알아봤습니다. 하지만 @property 데코레이터의 단점으로는 @property가 데코레이션하는 메서드를 같은 클래스에 속하는 여러 애트리뷰트로 사용할 수 없고 서로 무관한 클래스 사이에서 @property 데코레이터를 적용한 메서드를 재사용할 수 없습니다. 예를 들어 학생에게 여러 과목의 시험 성적 점수를 별도로 부여하고 싶다고 합시다. class Exam: def __init__(self): self._writing_grade = 0 self._math_grade = 0 @staticmethod def _check_grade(value): if not (0 >> first_exam..

반응형