GPU vs CPU
출처: 챗GPT
◆ CPU (Central Processing Unit)
- 특징
CPU는 범용 프로세서로, 다양한 작업을 처리하는 데 최적화되어 있습니다.
소수의 강력한 코어를 가지고 있어 다중 작업 처리에 적합합니다.
-성능
CPU는 단순 연산 작업에는 적합하지만, 연산량이 많은 딥러닝 작업에서는 속도가 느립니다.
데이터 전송 속도가 상대적으로 느리고, 병렬 처리에 한계가 있습니다.
- 적용 사례
CPU는 주로 데이터 전처리, 모델 초기 설정 및 간단한 추론 작업에 사용됩니다.
◆ GPU (Graphics Processing Unit)
- 특징
GPU는 대량의 연산을 동시에 처리할 수 있도록 설계된 특수 프로세서입니다.
수천 개의 작은 코어를 가지고 있어 병렬 처리에 매우 유리합니다.
- 성능
딥러닝 모델 학습 시 GPU는 CPU에 비해 수십 배에서 수백 배 빠른 성능을 보입니다.
특히, 합성곱 신경망(CNN)과 같은 구조에서는 GPU의 성능이 두드러집니다.
- 적용 사례
GPU는 주로 모델의 학습(training)과 추론(inference) 작업에서 사용됩니다.
대규모 데이터셋을 처리해야 하는 경우, GPU가 필수적입니다.
◆ 비교 요약
- 연산 능력: CPU는 일반 연산에 강하고, GPU는 병렬 연산에 강합니다.
- 처리 속도: 딥러닝 작업에서는 GPU가 훨씬 빠릅니다.
- 사용 사례: CPU는 데이터 전처리, 모델 설정 등 여러 작업에 사용되며, GPU는 학습 및 대량 데이터 처리에 적합합니다.
딥러닝과 GPU
사이킷런을 통한 머신러닝 프로젝트 수행 때는 굳이 gpu를 사용하지 않아도 그럭저럭 괜찮았었다.
물론, 그리드 서치 같은 거 돌릴 때는 엄청 오래 걸리긴 했지만..
그러다 딥러닝 쪽으로 넘아가면서 gpu 를 사용하지 않으니 연산이 수행되는 데 거의 5시간 넘게 걸리는 경우도 있었고, 아예 되지 않던 때가 수두룩 했다. (어찌보면 5시간 기다린 것도 대단...)
그래서 주피터노트북에서 gpu를 연동하여 사용하고 싶었는데, 며칠 동안 이것저것 시도해봤지만 주피터노트북에서 gpu를 불러오는 게 쉽지 않았다.
임시방편으로 구글 코랩에서 gpu 환경을 사용해서 프로젝트를 수행하려고 해봤으나, 구글 코랩은 무료 사용자의 경우 프로젝트를 수행하기가 여러모로 쉽지 않아서 어쩔 수 없이 주피터노트북에 gpu를 사용할 수 있게 해놔야했다.
며칠을 이리저리 해보다가 드디어 gpu 연결이 성공을 해서 기쁜 마음으로 글을 남겨본다.
나처럼 아예 아무것도 몰랐던 사람들에게 도움이 되었으면 좋겠다!
그리고, 나중에 새로운 노트북을 샀을 때를 대비하여 까먹지 않도록 기록해두는 것도 또 다른 이유다.
주피터노트북에 GPU 연결하기
우선, 내 방법을 하려면 NVIDIA 그래픽카드를 무조건(!) 사용해야 한다.
그리고 나의 경우엔 파이토치를 내 노트북에 설치 했으나, 파이토치를 위한 CUDA와 CUDNN 버전과 tensorflow를 위한 CUDA, CUDNN 버전이 다르기 때문에 이것때문에 애를 많이 먹었었다.
결론부터 말하자면, 나는 아나콘다 프롬프트(Anaconda Prompt)를 이용해서 설치 및 연동하는 방법을 선택했는데,
물론, 아나콘다 및 주피터노트북을 이미 사용할 줄 안다는 전제 하에 설명을 시작하려고 한다.
아나콘다 및 주피터노트북 설치 관련 글은 하단을 읽어보면 된다.
아무튼, 순서는
1) 아나콘다 프롬프트를 열고, 가상 환경을 만든다. (앞으로 모든 명령어는 별도 지칭이 있을 때까지 아나콘다 프롬프트에 입력하도록 한다)
conda create -n jun python=3.7 #jun 부분이 가상환경 이름이다. 각자 알아서 바꾸면 된다.
※ 찾아보니, python=3.8이나 3.9는 충돌을 일으킨대서 3.7 버전을 설치하는 게 제일 낫다고 한다.
중간에 Proceed ([y]/n)? 가 나오는 데, y를 입력해주면 설치가 이어서 진행된다.
2) 가상환경 활성화
하단의 명령어를 입력하여 만들었던 가상환경을 활성화 시켜준다.
conda activate jun # 본인의 가상환경 이름
3) (가상환경)텐서플로우 gpu 버전 설치
pip install tensorflow-gpu==2.6.0
사진에서 볼 수 있듯, 가상환경(빨간 네모) 에 tensorflow-gpu 버전을 설치해준다,
가상환경을 활성화 시켰으므로 아까(base)와 이름이 달라졌다.
4) (가상환경) CUDA와 CUDNN 드라이브 설치
conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1
처음 이 명령어를 찾았을 때는 내 PC에 깔려있는 CUDA는 11.8, CUDNN은 8.6.0 인데 이 버전에 맞게 저 명령어를 수정해야 하는건가 싶어 (왜냐하면 파이토치는 제대로 설치 되었으니까) 저 명령어를 계속 바꿔넣었는데, 실패했다.
그래서 그냥 에라 모르겠다 싶어 저 코드를 그대로 입력했더니 웬걸 설치가 성공했다.
5) (가상환경) 주피터노트북 설치
pip install jupyter notebook
기존에 주피터노트북이 깔려 있었더라도, 이거는 가상환경에 설치하는 것이기 때문에 설치가 필요하다. (그전까지는 나역시도 주피터노트북이 이미 설치되어있으니까.. 하고 넘어가 버렸던 거 같다. 그러니까 당연히 연동이 안 되지.)
6) (가상환경) ipykernel 설치
jupyter notebook 만 설치하면 ipykernel이 자동으로 다운받아진다. 혹시나 안 받아진다면 ipykernel을 따로 다운해준다.
pip install ipykernel
7) (가상환경) 커넬 연결하기
python -m ipykernel install --user --name jun --display-name "tf_jun"
# jun: 가상환경 이름
# display-name: 표시되었으면 하는 이름
8) (가상환경) 주피터노트북 실행하기
jupyter notebook
※ 만약 'jupyter notebook'을 입력했는데, 하단과 같은 에러가 나온다면 (새로운 가상환경2 를 만들 때 이랬음)
'jupyter'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.
하단의 명령어를 입력하니, 주피터노트북이 잘 실행되었다.
conda install -c conda-forge jupyter
▼ (가상환경에서 실행한) 주피터노트북 실행화면
기존에 쓰던 주피터노트북과 UI가 완전히 다르다.
9) (주피터노트북에서) 내가 설정한 커널로 노트북 만들기
내가 만든 커널(필자의 경우 'tf_jun')로 노트북을 새로 만든다. (New 버튼을 누르면 내가 앞서 만들었던 커널이 나온다.)
10) (노트북에서) GPU 연결되었는지 확인해보기
노트북에서 하단의 코드를 입력하고 실행해본다. 만약 GPU가 연결되어 있을 경우, GPU가 잘 나온다.
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
내 PC의 GPU가 잘 보인다.
앞으로는 딥러닝 수행 시에는 아나콘다 프롬프트에서 가상환경을 활성화시키고 주피터노트북을 실행한 다음 작업을 하면 될 거 같다.
(누군가는 그냥 원래 하던 대로 주피터노트북 실행해도 된다고 그랬는데, 그렇게 한 번 해봐야겠다.)
실제로 GPU가 잘 되는지 내일 코드를 한 번 돌려봐야겠다. (오늘은 이거 하느라 밤 11시가 넘었다.)
▶ 그냥 주피터노트북을 실행해봤는데 옛날에 사용하던 버전이 나와서 가상환경을 활성화시킨 뒤 주피터노트북을 실행했다.
# anaconda prompt를 켜고
activate jun
# 가상환경이 활성화된 뒤
jupyter notebook
추가!!!
가상환경으로 주피터노트북 실행 시 pandas, numpy 등 여러 모듈들은 새로 다시 깔아줘야 한다. (아나콘다 프롬프트에서)
conda install numpy # 넘파이
conda install pandas # 판다스
conda install matplotlib # 맷플롯립
conda install scipy # 사이파이
conda install scikit-learn # 사이킷런
'[파이썬 Projects] > <파이썬 딥러닝, 신경망>' 카테고리의 다른 글
[딥러닝] RNN을 사용한 자연어 처리: 신경망 기계 번역 (2) | 2024.12.05 |
---|---|
[딥러닝] RNN을 사용한 자연어 처리: 감성분석 (0) | 2024.12.05 |
[딥러닝] 강화 학습(Reinforcement Learning) - 1 (3) | 2024.12.04 |
[딥러닝] 비지도 학습: 확산 모델 (3) | 2024.12.04 |
[딥러닝] 비지도 학습: 생성적 적대 신경망(GAN) (1) | 2024.12.04 |