들어가기 전에
일반적으로 사용되는 Windows, MacOS와 같은 운영체제도 파일을 다운로드 받거나 바탕화면을 구성하는 폴더 구조가 존재합니다. 같은 맥락으로 어떤 프로그램이 개발될 때에도, 그 프로그램을 설치&관리하기 위한 구조가 필요합니다.
딥러닝에서도 '데이터 전처리 - 모델 학습 - 저장 - 추론'하는 과정을 거치면서 편리한 사용을 위해 고민한 "구조"들이 존재하고, 이를 적절히 활용하는 것도 딥러닝의 중요한 요소입니다. 이번 강의 에서는 PyTorch를 활용해 딥러닝 프로젝트를 관리하기 위한 구조에 대해 학습합니다. 앞선 챕터에서 '1. PyTorch 기본 - PyTorch 프로젝트 구조 소개' 강의를 듣고 오셨다면, 구조에 대한 이해는 어느 정도 되셨으리라고 생각합니다.
그렇다면 주변 환경은 어떨까요? 어떤 컴퓨팅 자원, 편집기를 활용하는게 PyTorch를 개발하는 데 적합할까요? 편리하게 코드를 작성하고 실행할 수 있고, 나아가 다양한 모델의 실험을 수행하고 관리하기 위해서는 다양한 인프라와 관련된 기술들이 필요합니다. 해당 강의에서는 이러한 주변 환경 세팅에 대한 내용들도 담고 있습니다.
이번 강의는 특히 PyTorch의 작동 구조를 넘어서서 주변 환경에 대한 내용도 많이 들어 있습니다. 컴퓨터 사이언스를 처음 접한다면 매우 어려울 수 있고, 초심자의 입장에서는 잘 이해되지 않는 것이 어쩌면 당연합니다. 잘 이해가 되지 않더라도 너무 상심하지 않으셔도 됩니다. 우선은 "PyTorch를 사용하여 어떻게 구조를 짜는가?"에 대해서만 집중해서 강의를 수강해주시고, 모르는 부분이 나오면 새로운 지식의 포인터로 삼고, 추가로 찾아보며 성장하시기를 권유드립니다.
- 잠깐!! 실습 자료가 아직 준비 중에 있습니다. 오류여부를 꼼꼼히 검토한 후 오픈 예정이니 조금만 기다려주세요 :)
학습 목표
- PyTorch 프로젝트의 구조가 필요한 이유에 대해서 이해합니다.
- PyTorch 프로젝트에 필요한 주변 시스템에 대해서 이해합니다.
핵심 단어
- Project Template
- Object Oriented Programming
- Visual Studio Code
강의 영상
1) Machine learning project template (머신러닝 프로젝트 템플릿)
PyTorch를 포함한 다양한 프레임워크를 통해 AI 모델이 생성됩니다. 'AI 모델이 만들어지는 과정을 정형화할 수는 없을까요?' 라는 질문으로 시작한 결과가 프로젝트의 템플릿입니다. 사실 "프로젝트 템플릿" 이라는 개념은 딥러닝 외 분야에서도 사용되는 상당히 포괄적인 개념입니다. 세상에는 다양한 형태의 소프트웨어가 존재하고, 이를 개발하기 위해서 만들어진 정형화된 템플릿이 존재합니다. "머신러닝 모델 개발" 도 그 중에 하나입니다.
머신러닝 모델이 개발되는 과정을 생각해 봅시다. 아래와 같이 간단히 5가지 정도의 절차로 정형화할 수 있을 것으로 보입니다.
(1)데이터 전처리 -> (2)모델 아키텍쳐 구축 -> (3)모델 학습 -> (4)모델 검증 -> (5)모델 배포
머신러닝 프로젝트 템플릿이란, 이러한 일련의 과정들을 잘 정형화 해서 구조화 해놓은 것을 의미합니다.
해당 강의를 통해 그 예시를 학습하면서 어떻게 함수들이 구조화 되어 있는지 확인해 보세요 :)
2) OOP (Object Oriented Programming, 객체지향 프로그래밍)
OOP(객체지향 프로그래밍)은 프로그램 코드를 하나의 "객체"로 생각하는 방식의 구현입니다. 여기서 객체란, 다른 객체와 상호작용 하고 값을 주고 받으며 행동하는 하나의 주체를 의미합니다.
예를 들어 "사람" 이라는 객체의 공통적인 패턴을 정의한다고 생각해 봅시다. 다양한 경우가 있겠지만, "이동"에 관련된 함수들을 구현하다고 한다면, 걷기 / 뛰기 / 구르기 / 기어가기 등의 함수가 구현될 수 있습니다. 이 때, "사람" 이라는 "클래스"를 하나의 객체로 표현하여 프로그래밍 하게 됩니다.
그런데 "이름" 은 어떨까요? "이름"이라는 객체는 각 사람마다 고유적으로 가질 수 있고, 어쩌면 서로를 구분하는 값으로 서로 다른 경우가 많을 것입니다. 이런 경우 객체를 생성할 때 "이름" 이라는 속성을 부여해 하나의 "인스턴스"를 생성합니다.
"홍길동" 씨와 "강감찬" 씨는 서로 다른 것처럼, 각각의 인스턴스들은 "클래스"로부터 공통적인 속성들을 부여받고 인스턴스마다의 특징을 생성 시점에 반영하도록 프로그래밍 할 수 있습니다.
객체의 개념을 간단히 알아 보았습니다. 본 강의는 PyTorch의 개념과 사용법을 위한 강의로 너무 벗어나지 않는 선에서 짧게 설명되었는데요. 추가적으로 궁금한 사항이 있다면, 아래 참고 자료의 "Python OOP Basic"을 참고하는 것을 추천드립니다.
강의 자료
comment
https://research.google.com/colaboratory/faq.html#limitations-and-restrictions
코랩에서 SSH를 하지말라고 FAQ에 있는데여..! 해도 될까요?
https://github.com/victoresque/pytorch-template