본문 바로가기
딥러닝 기초

[김기현의 딥러닝을 활용한 자연어처리] 딥러닝 환경 구축

by 나연하야 2023. 5. 11.

"김기현의 딥러닝을 활용한 자연어처리"를 보면서 딥러닝을 시작하기 전 알았으면 좋았을 내용을 정리해보았음

 

딥러닝 환경 구축 관련

  • 아나콘다 설치

- 아나콘다 설치 시 "Add Anaconda3 to my PATH environment variable" 체크

 

  • Visual Studio Code(VSCode)

- VSCode는 파이썬 코드를 짜고 디버그를 쉽게 할 수 있는 통합 개발 환경(Integrated Development Environment: IDE)

- GPU가 설치된 고성능 리눅스 서버를 두고, 원격 개발 환경을 구성하고자 하면 "Remote SSH" 플러그인을 설치하면 편리

(이 플러그인을 통해 원격 서버 상에서 직접 코드를 편집하고 실행 및 디버깅을 진행할 수 있으며, 로컬 소스 코드와 원격 소스 코드 사이의 싱크 등을 걱정할 필요가 없음)

 

  • 파이토치 설치

- 아나콘다 위에 파이토치를 설치하기 위해서는 “GET STARTED” 페이지(https://pytorch.org/get-started/locally/)에 접속하여 알맞은 운영체제와 CUDA 버전 선택

 

  • GPU사용

- 딥러닝은 연산량이 많기 때문에 보통 엔비디아(Nvidia)그래픽처리장치(GPU)에서 이루어지게 됨

 

cuda함수

- cuda: 뒤에 붙는 숫자는 GPU 디바이스 인덱스를 의미함(예를 들어 device='0'이면 첫 번째 디바이스임)

 

서로 다른 장치간 연산

- 서로 다른 장치에 올라가 있는 텐서 또는 nn.Module의 하위 클래스 객체끼리는 연산이 불가(CPU와 GPU에 위치한 텐서들끼리 연산이 불가능 할 뿐만 아니라 0번 GPU와 1번 GPU 사이의 연산도 불가능)

 

to 함수

- to함수는 인자로 원하는 디바이스에 대한 정보를 담은 객체를 받아 함수 자신을 호출한 객체를 해당 디바이스로 복사(이동)시킴

>>> cpu_device = torch.device('cpu')
>>> gpu_device = torch.device('cuda:0')

>>> x = torch.FloatTensor(2, 2)
>>> x
tensor([[1.1874e+26, 4.5598e-41],
        [1.1973e+26, 4.5598e-41]])

>>> x = x.to(gpu_device)
>>> x
tensor([[1.1874e+26, 4.5598e-41],
        [1.1973e+26, 4.5598e-41]], device='cuda:0')

 

device 속성

- 텐서는 device 속성을 가지고 있어 텐서가 위치한 디바이스를 쉽게 파악할 수 있음

- 단, nn.Module의 하위 클래스 객체는 이와 같은 속성을 가지고 있지 않아 모델이 어느 장치에 올라가있는지 알고 싶다면 첫 번째 파라미터 텐서의 device 속성에 접근해야함(모델 내부의 파라미터 전체가 같은 디바이스에 위치한다는 가정 하에)

>>> x = torch.cuda.FloatTensor(2, 2)
>>> x.device
device(type='cuda', index=0)

>>> layer = nn.Linear(2, 2)
>>> next(layer.parameters()).device
device(type='cpu')

 

  • 실무를 진행하듯이 실습

- 주피터 노트북의 경우 데이터를 분석하는 과정과 같이 각 셀의 결과에 따라 해야하는 일이 바뀌는 경우에 적합

- 해야할 작업이 명확하고 반복되는 경우에는 py확장자를 가진 파이썬 스크립트로 제작하여 CLI(Command line interface)환경에서 작업을 수행하는 것이 바람직

- 특히 모델링 및 하이퍼파라미터 튜닝 작업시에는 반복적인 실험이 수행되기 때문에 CLI 환경에서 파이썬 스크립트 실행과 함꼐 실행 파라미터를 넣어주는 실험을 수행하도록 하는 것이 좋음

 

머신러닝 프로젝트 파일 구조 예시

model.py: 모델 클래스가 정의된 코드

trainer.py: 데이터를 받아와 모델 객체를 학습하기 위한 트레이너가 정의된 코드

dataloader.py: 데이터 파일을 읽어와 전처리를 수행하고, 신경망에 넣기 좋은 형태로 변환하는 코드

train.py: 하이퍼파라미터를 입력 받아 필요한 객체들을 준비하여 학습을 진행

predict.py: 이미 학습된 모델과 추론을 위한 샘플을 입력받아 추론 수행

 

 출처: Home | NLP with Deep Learning (kh-kim.github.io)