본문 바로가기
파이썬(Python)/AI

Tensorflow로 성능 측정하기 - Windows, Colab 성능 비교

by 기계공학 주인장 2024. 6. 23.
반응형

이전 블로그에서 Tensorflow를 사용하여 Windows PC의 GPU를 사용하도록 설정했습니다.

 

https://android-developer.tistory.com/94

 

Tensorflow에서 GPU 확인 안될 때 - is_built_with_cuda false

구글 코랩에서 무료로 제공 중인 GPU와 제 컴퓨터의 GPU를 비교하고싶어서 집에 있는 노트북으로 Tensorflow로 테스트를 하려고 했는데. 안되네요...? 그래서 여러 가지 방법을 시도한 끝에 찾아낸

android-developer.tistory.com

 

이제 TensorFlow가 GPU를 사용하니 CPU를 사용했을 때와 GPU를 사용했을 때 성능 차이가 얼마나 나는지 비교해보겠습니다.

 

참고로 제 노트북의 스펙은 다음과 같습니다.

 

CPU: RTX 4070 Laptop

GPU: i7-14700HX


파이썬의 Tensorflow를 사용하여 코드 작성하기 - Windows PC

다음과 같이 코드를 작성합니다.

 

코드 사이에 설명을 코멘트로 적었으니 쉽게 이해할 수 있을거라 생각합니다.

 

윈도우에서 돌릴 때는 이전 포스트에서 말했다 시피 2.10.0 버전을 다운로드 하셔야합니다.

 

pip install tensorflow==2.10.0

 

 

import tensorflow as tf
import time

# 간단한 신경망 모델을 생성하는 함수
def create_model():
    model = tf.keras.models.Sequential([
        # 첫 번째 밀집 층, 512 유닛과 ReLU 활성화 함수 사용
        tf.keras.layers.Dense(512, activation='relu', input_shape=(784,)),
        # 두 번째 밀집 층, 512 유닛과 ReLU 활성화 함수 사용
        tf.keras.layers.Dense(512, activation='relu'),
        # 출력 층, 10개의 유닛 (각 클래스에 하나씩)과 softmax 활성화 함수 사용
        tf.keras.layers.Dense(10, activation='softmax')
    ])
    # 모델을 컴파일, Adam 옵티마이저와 sparse categorical crossentropy 손실 함수 사용
    model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    return model

# MNIST 데이터셋 (손글씨 숫자) 로드
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# 데이터를 [0, 1] 범위로 정규화
x_train, x_test = x_train / 255.0, x_test / 255.0

# 이미지를 1차원 벡터 (28x28=784)로 변환
x_train = x_train.reshape(-1, 784)
x_test = x_test.reshape(-1, 784)

# 훈련 시간을 측정하는 함수
def measure_time(device):
    with tf.device(device):  # 사용할 디바이스 (CPU 또는 GPU) 지정
        model = create_model()  # 새로운 모델 인스턴스 생성
        start_time = time.time()  # 시작 시간 기록
        model.fit(x_train, y_train, epochs=5, batch_size=128, verbose=0)  # 모델 훈련
        end_time = time.time()  # 종료 시간 기록
    return end_time - start_time  # 경과 시간 계산 및 반환

# CPU에서의 훈련 시간 측정
cpu_time = measure_time('/cpu:0')
print(f"Training time on CPU: {cpu_time:.2f} seconds")  # CPU 훈련 시간 출력

# GPU에서의 훈련 시간 측정
if tf.config.list_physical_devices('GPU'):  # 사용 가능한 GPU가 있는지 확인
    gpu_time = measure_time('/gpu:0')
    print(f"Training time on GPU: {gpu_time:.2f} seconds")  # GPU 훈련 시간 출력
else:
    print("No GPU found. GPU test skipped.")  # GPU를 찾을 수 없는 경우 메시지 출력

 

 

위 코드를 제 PC에서 실시하면 다음과 같은 결과를 얻을 수 있습니다.

 

Training time on CPU: 11.92 seconds
Training time on GPU: 5.91 seconds

 

CPU만 사용했을 때 보다 약 2배 정도 더 빠른 모습을 볼 수 있습니다.

 


파이썬의 Tensorflow를 사용하여 코드 작성하기 - 코랩(Colab)

코랩(Colab)에서는 Tensorflow의 버전을 맞춰서 설치할 필요가 없습니다.

 

그렇기 때문에 그냥 다음과 같이 tensorflow를 설치합니다.

 

!pip install tensorflow

 

그리고 똑같이 다음과 같은 코드를 실시합니다.

 

import tensorflow as tf
import time


# Function to create a simple neural network model
def create_model():
    model = tf.keras.models.Sequential([
        tf.keras.layers.Dense(512, activation='relu', input_shape=(784,)),
        tf.keras.layers.Dense(512, activation='relu'),
        tf.keras.layers.Dense(10, activation='softmax')
    ])
    model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    return model


# Load MNIST dataset
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

# Flatten the images
x_train = x_train.reshape(-1, 784)
x_test = x_test.reshape(-1, 784)


# Function to measure training time
def measure_time(device):
    with tf.device(device):
        model = create_model()
        start_time = time.time()
        model.fit(x_train, y_train, epochs=5, batch_size=128, verbose=0)
        end_time = time.time()
    return end_time - start_time


# Measure time for CPU
cpu_time = measure_time('/cpu:0')
print(f"Training time on CPU: {cpu_time:.2f} seconds")

# Measure time for GPU
if tf.config.list_physical_devices('GPU'):
    gpu_time = measure_time('/gpu:0')
    print(f"Training time on GPU: {gpu_time:.2f} seconds")
else:
    print("No GPU found. GPU test skipped.")

 

참고로 T4 GPU를 사용했는데요

 

그 결과는 다음과 같습니다.

 

Training time on CPU: 29.14 seconds
Training time on GPU: 11.42 seconds

 

신기하게 코랩이 제 컴퓨터보다 느리네요...?

 

제 PC의 CPU로 돌린게 Colab의 GPU로 돌린거보다 느립니다.

 

생각보다 코랩에서 무료로 제공하는 PC의 성능이 좋지 않은가봅니다.

반응형


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


댓글