일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 캐글
- Kaggle
- GPU
- 머신러닝
- 성능
- pytorch
- 딥러닝
- 2유형
- gradio
- 3유형
- dl
- ㅂ
- 예제소스
- 1유형
- Ai
- streamlit
- webserving
- DASH
- CUDA
- qgis
- QGIS설치
- 실기
- K최근접이웃
- ml 웹서빙
- 공간분석
- KNN
- fastapi
- 인공지능
- 빅데이터분석기사
- 공간시각화
Archives
- Today
- Total
에코프로.AI
[CUDA] 2. pytorch에서 GPU를 사용하는 방법 본문

CUDA를 설치하지 않으셨으면 아래의 링크를 통해서 선행 설치해야 진행가능합니다.
[CUDA] 1. 소개 및 설치 for windows(Feat. GTX 1650)
Check GPU
- GPU 가용성 확인
GPU에 액세스할 수 있는지 확인하는 가장 쉬운 방법은 torch.cuda.is_available()을 호출하는 것입니다. True를 반환하면 시스템에 torch버전에 맞는 CUDA가 올바르게 설치되어 있다는 뜻입니다.
import torch
torch.cuda.is_available()

- 현재 선택한 디바이스의 인덱스를 가져옵니다.
torch.cuda.current_device()

- 사용 가능한 GPU 수를 확인합니다.
torch.cuda.device_count()

- 디바이스 이름을 가져옵니다.
torch.cuda.get_device_name(0)

- 사용 가능한 CPU,GPU를 반환합니다.
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(device)

Use GPU
GPU사용
- PyTorch는 CPU에서 생성된 텐서를 GPU로 전송하기 위해 사용하기 쉬운 API를 제공합니다. 다행히도 새로운 텐서는 부모 텐서와 동일한 device(장치)에서 생성됩니다.
X_train = X_train.to(device)
X_train.is_cuda

- 텐서를 GPU에 배치하려면 .cuda()를 호출하면 됩니다
X_train= torch.FloatTensor([0., 1., 2.])
X_train = X_train.cuda()
X_train.is_cuda

CPU 사용
- 기본적으로 텐서는 CPU에서 생성됩니다. 모델도 CPU에서 초기화됩니다. 따라서 GPU를 사용하여 작업이 수행되는지 수동으로 확인해야 합니다.
X_train = torch.FloatTensor([0., 1., 2.])
X_train.is_cuda

- 텐서를 CPU에 배치하려면 .cpu()를 호출하면 됩니다.
※ .cuda() or .cpu() 둘다 설정 안하는 경우 기본은 cpu로 처리 합니다.
X_train= torch.FloatTensor([0., 1., 2.])
X_train = X_train.cpu()
X_train.is_cuda

CUDA 성능 테스트
그리 성능이 좋지 않은 GTX1650 인데요, GPU가 CPU보다 거의 10배 정도 빠른 것을 알 수 있습니다.
구분 | GPU(CUDA) | CPU |
평균 추론 시간 (ms) | 4.10 | 38.27 |
초당 처리량 ( FPS) | 243.78 | 26.13 |
GPU(CUDA)
import torch # PyTorch 메인 라이브러리 임포트
import torchvision.models as models # 사전 학습된 모델을 사용하기 위한 torchvision 모델 임포트
import time # 시간 측정을 위한 time 라이브러리 임포트
# CUDA 설정
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # CUDA 사용 가능 여부 확인 후 디바이스 설정
torch.backends.cudnn.benchmark = True # CUDA 연산 최적화를 위한 벤치마크 모드 활성화
# 모델 생성 및 GPU 이동
model = models.resnet18(pretrained=True).to(device) # 사전 학습된 ResNet18 모델을 불러와서 지정된 디바이스로 이동
model.eval() # 모델을 평가 모드로 설정 (학습 모드 비활성화)
# 테스트용 입력 데이터 생성
input_tensor = torch.rand(1, 3, 224, 224).to(device) # 1개의 배치, 3채널, 224x224 크기의 랜덤 입력 텐서 생성
# CUDA 이벤트 생성
start = torch.cuda.Event(enable_timing=True) # CUDA 이벤트 시작점 생성
end = torch.cuda.Event(enable_timing=True) # CUDA 이벤트 종료점 생성
# 워밍업 (첫 실행의 초기화 시간 제외)
# 초기화 오버헤드를 제외하기 위해 10회 예비 실행
for _ in range(10):
_ = model(input_tensor)
# 성능 측정
times = []
for _ in range(100): # 100회 반복 측정
start.record() # 시작 시간 기록
output = model(input_tensor) # 모델 추론 실행
end.record() # 종료 시간 기록
torch.cuda.synchronize() # GPU 연산 완료 대기
times.append(start.elapsed_time(end)) # 경과 시간을 리스트에 추가
# 결과 출력
avg_time = sum(times) / len(times) # 평균 실행 시간 계산
print(f'평균 추론 시간: {avg_time:.2f} ms') # 밀리초 단위로 평균 시간 출력
print(f'초당 처리량: {1000/avg_time:.2f} FPS') # 초당 프레임 수(FPS) 출력
결과 값

CPU
import torch # PyTorch 메인 라이브러리 임포트
import torchvision.models as models # 사전 학습된 모델을 사용하기 위한 torchvision 모델 임포트
import time # 시간 측정을 위한 time 라이브러리 임포트
# CPU 설정
device = torch.device('cpu') # CPU를 연산 디바이스로 설정
# 모델 생성
model = models.resnet18(pretrained=True).to(device) # 사전 학습된 ResNet18 모델을 불러와서 CPU로 설정
model.eval() # 모델을 평가 모드로 설정 (배치 정규화, 드롭아웃 등 비활성화)
# 테스트용 입력 데이터 생성
# 랜덤 입력 텐서 생성
# 1: 배치 크기
# 3: RGB 채널
# 224x224: 이미지 크기
input_tensor = torch.rand(1, 3, 224, 224).to(device)
# 워밍업 (첫 실행의 초기화 시간 제외)
# 초기 실행시 발생하는 오버헤드를 제외하기 위한 예비 실행
for _ in range(10):
_ = model(input_tensor)
# 성능 측정
times = []
for _ in range(100): # 100회 반복 측정
start_time = time.time() # 시작 시간 기록
output = model(input_tensor) # 모델 추론 실행
end_time = time.time() # 종료 시간 기록
times.append((end_time - start_time) * 1000) # ms(밀리초) 단위로 변환하여 저장
# 결과 출력
avg_time = sum(times) / len(times) # 평균 실행 시간 계산
print(f'평균 추론 시간: {avg_time:.2f} ms') # 밀리초 단위로 평균 시간 출력
print(f'초당 처리량: {1000/avg_time:.2f} FPS') # 초당 처리할 수 있는 이미지 수 계산
결과 값

[참고사이트]
https://wandb.ai/wandb/common-ml-errors/reports/How-To-Use-GPU-with-PyTorch---VmlldzozMzAxMDk
끝~

'AI Tutorial' 카테고리의 다른 글
[HuggingFace] Fine-tuning - 3 (A full training) (0) | 2025.01.09 |
---|---|
[HuggingFace] Fine-tuning - 1 (Processing the data) (1) | 2025.01.05 |
[CUDA] 1. 소개 및 설치 for windows(Feat. GTX 1650) (0) | 2025.01.03 |
[DeepLearning] 사전학습, 전이학습, RAG, 미세조정 (0) | 2025.01.03 |
[Hugging Face - 7] Putting it all together (모든 것을 종합하기) (1) | 2025.01.03 |