01. PyTorch 기본
수강 준비 및 환경 설정
들어가기 전에
'파이토치로 만드는 딥러닝 이론' 강의는 jupyter notebook 환경에서 구동하도록 제작되어 그에 맞는 개발환경을 구성해야 합니다. 본격적인 학습에 앞서, 이번 장에서는 jupyter notebook을 사용하기 위한 환경설정 방법을 소개합니다.
- jupyter notebook 이란?
- 강의 전에 준비할 것들
- Local device(개인용 PC, 노트북)으로 수강하는 경우
- 웹 환경(Colab)을 활용해 수강하는 경우
jupyter notebook이란?
jupyter notebookc(주피터 노트북)은 파이썬의 Interactive한 개발환경을 제공하는 웹 어플리케이션으로, 셀 단위 코드를 구성하고 적용하는 것이 가능한 환경입니다. 예를 들어 다음과 같은 코드를 한 줄씩 실행하는 것이 가능합니다.
[실행 전]
print("Hello PyTorch!")
print("**********")
print("Begining of Study")
[실행 후]
print("Hello PyTorch!") # 실행 1
print("**********") # 실행 2
print("Begining of Study") # 실행 3
주피터 노트북을 사용하면, 좋은 점은 다음과 같습니다.
- 데이터를 분석할 때, 결과를 자주 확인하거나 시각화해야 한다.
- 중간에 에러가 나는 경우 어디까지 실행되다가 멈췄는지 명확하게 알 수 있어 빠른 디버깅에 유리하다.
- Mark Down 언어를 통한 문서화가 가능해 공유가 편하다.
(markdown 언어란 한글&워드와 같은 문서와 같이 이미지, 목록, 링크 등을 작성할 수 있도록 웹 문서 언어라고 생각하면 편합니다.)
이 밖에도 많은 장단점이 존재하지만 초심자 분들이 궁금할만한 내용을 위주로 정리하고 넘어가도록 하겠습니다.
추가적인 내용은 "jupyter notebook"을 키워드로 검색해보시는 것을 추천해드려요 :)
학습 꿀팁 TIP | 이런 환경들은 어디까지나 편리한 개발을 위한 도구입니다. 사실 코드를 실행할 수만 있다면 어떤 개발환경이든 환영입니다! 환경에 매몰되지 않고, 코드를 실행하는 것에 집중하도록 해요.
준비할 내용들
1. Local device(개인 PC, 노트북 등)으로 수강하는 경우
1) python 설치 (버전 3.9.13, 2022.5.30 기준)
- 사용하고 있는 OS에 따라 'python'을 설치합니다. 윈도우는 CMD 창에서, MacOS 또는 Linux의 경우는 Terminal에서 python 또는 python3를 입력했을 때 동작하는지 확인하는 것으로 잘 설치되었는지를 확인할 수 있습니다.
ㅇ Window python 설치
ㅇ MacOS python 설치
ㅇ Linux python 설치
※ 이 강좌에서는 python3를 사용합니다. 버전에 따라 실행결과가 달라지기 때문에 헷갈리지 않도록 주의해주세요!
2) 관련 package 설치
- 코드를 실행하기 위해서 jupyter notebook, pytorch와 같이 필요한 프레임워크를 pip를 통해서 다운로드 받습니다. Windows의 경우 CMD, MacOS 또는 Linux의 경우 Terminal을 열고 다음과 같이 입력해주세요.
pip install jupyter torch numpy pandas matplotlib seaborn
- 혹 강의를 듣는 도중에 나에게 없는 패키지를 찾게 된다면, 다음 command 를 입력해서 설치해주세요 😃.
pip install <package_name>
3) jupyter notebook 실행
- 다운로드가 완료되었다면, CMD/Terminal 에서 다음 command를 입력하여 jupyter notebook을 실행합니다.
jupyter notebook
- 만약 jupyter notebook이 웹 브라우저에서 열리지 않고 CMD(Terminal)에 실행결과만 나타난 경우, 아래의 이미지에서 보이는 것과 같이 웹 주소를 찾아 복사해 브라우저 주소창에 붙여넣으면 사용할 수 있습니다.
끝나면 다음과 같이 뜹니다.
- 다음과 같이 실행화면이 나타나면, 일반적인 파일을 만드는 것과 같이 노트북 파일(.ipynb)을 생성하면 됩니다.
2. 웹 환경(Colab)을 활용해 수강하는 경우
- 다른 브라우저도 사용이 가능하지만, 두 가지 브라우저 중 하나를 사용하는 것을 권장합니다.
2) Google login & Colab 페이지로 이동
- Google 계정으로 로그인 한 후 Colab 페이지로 접속합니다.
3) Google Drive에 노트북 생성 또는 저장된 노트북 로드
- 아래 사진에서 오른쪽 하단의 새 노트를 클릭하여 새로운 노트북 파일을 생성하거나, 기존의 노트북의 경우 Google Drive에 업로드하여 더블 클릭하면 사용이 가능합니다.
- 클릭을 통하여 새로 생성되는 notebook 파일을 저장하면, 내 Google Drive의 Colab notebooks 폴더에 저장됩니다.
※ 업로드된 노트북 파일의 경우 반드시 본인 계정의 Google Drive로 사본을 만들어 사용해야해요.
그렇지 않으면 내가 작성한 코드와 시도들이 저장되지 않습니다.
Introduction to PyTorch
들어가기 전에
딥러닝을 시작하면서 "여러가지 개념들을 직접 다 구현해야 하는가?" 에 대한 고민을 할 수 있습니다. 프로젝트를 할 때마다 모든 것을 개발해야한다면, 많은 시간이 걸리겠죠. 딥러닝 분야에서도 이를 해결해주는 여러 프레임워크가 존재합니다. 프레임워크란 무엇이고, 그 중에서 파이토치는 무엇인지 알아봅시다.
학습 목표
- 다양한 딥러닝 프레임워크를 알아보고, PyTorch의 특징과 경우에 따른 사용법을 고민해봅니다.
핵심 단어
- 딥러닝 프레임워크
- PyTorch
- Define by run
관련 영상
1) 프레임워크란?
딥러닝 뿐만 아니라 다양한 웹, 앱, 네트워크 등 다양한 프로그래밍 분야가 존재하는데요. 프로그램을 다룸에 있어서, 공통적으로 사용되는 기능들을 표준화된 소스코드로 만들어 놓고 사용할 수 있도록 제공하는 것을 프레임워크라고 합니다.
딥러닝에도 기초 함수부터 복잡한 신경망 등이 구현되어 있는 여러가지 프레임워크가 있고 PyTorch도 그 중 하나입니다. 이름이 다른만큼, 프레임워크마다 특징도 조금씩은 다르겠죠? 파이토치가 가지는 특징들을 이번 장을 통해 이해할 수 있길 바랍니다 :)
2) 딥러닝 프레임워크의 종류와 특징
개발에 사용되는 언어와 사용하는 방식에 따라 설계가 조금씩 달라지기 때문에 딥러닝 프레임워크도 그 숫자도 아주 많은데요. 그 중 대표적으로 사용되는 프레임워크는 Google에서 개발된 TensorFlow와, Meta(구 Facebook)에서 개발된 PyTorch 두 가지가 있습니다. 두 프레임워크의 특징은 다음과 같고, 가장 큰 차이점은 Define and Run과 Define by Run에 있습니다.
facebook의 PyTorch와 Google의 TensorFlow
- 실행할 계산에 관련된 그래프를 미리 다 정의하여 올려놓고
- 그래프에 투입될 데이터들을 집어넣어 연산을 수행하는 방식입니다.
- 따라서 한번 실행이 된 상태에서 에러가 나면 찾기가 힘듭니다.
- 연산이 이루어지는 시점에서 동적으로 그래프를 만들어 연산을 수행하기 때문에
- 조금 더 낮은 단위의 연산들로 구성 할 수 있게 되고
- 디버깅 및 구조 설계의 세분화가 가능해집니다.
- 즉시 확인 가능하다는 장점(pythonic code)
텐서플로우 | 파이토치 |
Production, scalability, cloud 연결 등 실제 제품 출시에 유리 | 논문, 아이디어 구현에 유리 > 학회 연구에 많이 쓰임 |
Pytorch가 가지고 있는 것: Numpy + AutoGrad + Function
- Numpy 구조를 가지는 Tensor 객체로 array 표현
- 자동 미분을 지원하여 DL 연산을 지원
- 다양한 형태의 DL을 지원하는 함수와 모델 제공: datasheet, multi-GPU
autograd가 무엇인가, 어떻게 작동하는가?
PyTorch Basics
들어가기 전에
이번 챕터에선 PyTorch에서 데이터들의 연산을 위한 Tensor 사용법 및 자동 미분 기능인 AutoGrad에 대해 배우고 예제를 통해 실습 합니다.
학습 목표
- Tensor를 학습하여 추후 스스로 필요한 네트워크를 만들 수 있는 기본 지식을 익히고, AutoGrad의 작동 원리를 배워 backward 함수가 학습 시 어떻게 내부적으로 동작되는지 확인합니다.
핵심 단어
- Tensor
- view, reshape
- AutoGrad
- backward
강의 영상
1) Tensor
PyTorch를 공부하면서 가장 많이 볼 객체 중 하나입니다. Tensor는 numpy에서 ndarray, 파이썬 내장 객체의 list와 유사한 배열 객체입니다. 엄밀히 말하자면, list 객체보다 numpy의 ndarray와 가장 유사하다고 볼 수 있습니다. 따라서 Tensor 객체가 가지고 있는 여러 메서드나 Tensor 객체를 통해서 이루어지는 연산들은 numpy의 ndarray와 거의 동일합니다. 혹여 numpy에 대해 잘 모르는 분들은 boostcourse의 "머신러닝을 위한 파이썬" - "Data handling" - "Numerical pyton - Numpy" 를 보고 오시는 것을 추천합니다.
numpy와의 차이: device 라는 모듈을 씀(GPU에 올려서 사용 가능하다)
GPU와 메모리 중에 어디에 올릴 것인지 결정하는 property
2) Squeeze vs Unsqueeze
여러분은 앞으로 딥러닝을 학습하면서, 다양한 행렬 연산들을 수행하게 됩니다. 그런데 행렬 연산시, 가장 중요한 게 뭘까요? 바로 행렬의 크기입니다. 행렬의 크기가 다른 경우, 다른 연산의 결과가 수행될 수 도 있습니다. 이를 위해서 PyTorch에서는 다양한 방식의 함수를 제공합니다. 그 중의 하나로 Squeeze와 Unsqueeze를 소개합니다. 이 함수를 통해서 행렬의 "차원"을 하나 더 높이거나 줄 일 수 있습니다. 예를들어 [1,2,3,4] 와 같은 행렬을 [[1,2,3,4]] 또는 [[1],[2],[3],[4]] 와 같이 변환 할 수 있습니다. 물론 그 반대도 가능합니다.
3) Broadcasting
torch를 통해 행렬을 연산하다 보면, 두 행렬의 크기가 갖지 않아도 계산이 되는 경우가 종종 있습니다. 이 경우 작은 크기의 행렬이 큰 크기의 행렬의 차원으로 Broadcasting 되는 것인데요, 다음 예시를 통해 살펴보겠습니다. 만약 A라는 tensor에 2X4 크기의 다음과 같은 행렬 [[1,2,3,4],[5,6,7,8]] 이 할당되어 있고, B라는 행렬에 1X4 크기의 다음과 같은 [1,2,3,4] 라는 행렬이 할당 되어 있다고 해봅시다. 두 tensor를 더하면 어떻게 될까요? 정답은 크기가 작은 B행렬이 크기가 큰 A행렬로 Broadcasting되어 [[2,4,6,8],[6,8,10,12]] 라는 결과를 얻을 수 있게 됩니다.
4) Matrix multiplication
위에서 설명한대로 Broadcasting을 수행할 때, 행렬의 곱의 상황은 어떨까요? 우선 tensor에는 행렬 곱을 위한 mm, matmul 두가지의 메서드가 존재합니다. (메서드에 대해 잘 모르시면 tensor라는 객체가 가지고 있는 함수 라고 생각하시면 됩니다.) mm 메서드의 경우 Broadcasting을 지원하지 않고 matmul 메서드의 경우 지원합니다. 그럼 위와 같은 상황 A, B를 곱한다면 어떻게 연산이 이루어 질까요? 한번 직접 코드를 통해 실습하고 결과를 분석해보세요 :)
5) nn.Functional
PyTorch에서는 다양한 function들을 한번에 모아서 사용 할 수 있도록 하는 모듈인 nn.Functional을 제공합니다! 이를 통해서 sigmoid, tanh, cross entropy 등 다양한 함수들을 직접 구현하지 않아도 사용 할 수 있습니다 :) nn.~ 으로 제공되는 함수들은 어떤게 있을까요? 한번 찾아보고 직접 사용도 해보시면서 PyTorch를 익혀나가시길 바랍니다!
6) AutoGrad
PyTorch의 핵심 기능 중 하나죠! 바로 자동 미분입니다. pytorch는 어떤 tensor에 대한 연산 정보들을 기억했다가 자동으로 미분해주는 기능이 있습니다. 바로 Tensor 객체의 requires_grad 인자를 True로 만들어 주면 되는데요! xx 텐서에 대해서 2x^22x2 같은 연산을 거쳤다고 해보겠습니다. 해당 미분의 값은 4x4x 가 되겠죠? 그럼 해당 값인 "4"를 미분 값으로 잘 가지고 있다가 연산에 필요할 때 적용하게 됩니다. 더 다양한 예시들을 실습을 통해 적용 해 보시면서 자동 미분의 편리함을 체화해 보세요! :)
챕터를 넘어가며
챕터를 넘어가며
다음 챕터부터는 기존의 jupyter notebook과 달리, 스크립트 형태로 짜여진 PyTorch Project 구성에 대해 학습합니다. 객체지향 프로그래밍(Object Oriented Programming, OOP)과 모듈의 개념을 통해 Project를 구성하는 방법과 PyTorch에서 구성되는 모듈들을 함께 살펴봅니다.
다만, 제공되는 강의가 초심자가 받아드리기에 어렵고 파이토치 활용 등의 부가적인 내용으로 판단되어 부득이하게 Appendix의 형태로 제공하게 되었습니다. 해당 강의를 듣고 학습을 이어가고 싶다면 4. Advanced PyTorch - PyTorch 프로젝트 구조 활용하기의 영상을 먼저 듣고 오셔도 좋습니다.
https://www.boostcourse.org/ai213/lecture/1418325?isDesc=false
만약 본 강의가 제공된 순서대로 들을 예정이라면, 다음 강의에서 '프로젝트 구조'가 언급될 때 당황하지 않기 위해 하단에 첨부된 URL의 코드 구조를 참고해 주세요.
관련 URL
<부스트캠프 AI Tech에서 제공된 강의 진행순서>
- [1. PyTorch 기본] Introduction to PyTorch
- [1. PyTorch 기본] PyTorch Basics
- [1. PyTorch 기본] PyTorch 프로젝트 구조 활용하기
<현재 강의 진행순서>
- [1. PyTorch 기본] Introduction to PyTorch
- [1. PyTorch 기본] PyTorch Basics
- [4. Advanced PyTorch] PyTorch 프로젝트 구조 활용하기
학습꿀팁 | '4. Adavanced PyTorch - PyTorch 구조 활용하기' 강의에서는 기본적인 PyTorch 사용법과 이외에도 아래와 같이 딥러닝 학습을 위해 환경을 구축하는 다른 방법도 다룹니다.
1) VSCode와 Colab을 SSH로 연결해서 사용하는 방법
2) PyTorch를 활용하여 프로젝트의 기본 베이스라인 구조를 파악하는 등