본문 바로가기

Dev/DL

강화학습 자동매매 proj - 라즈베리파이 Pytorch 설치 & MNIST 라즈베리파이 colab 비교

728x90

강화학습 자동매매 proj - 라즈베리파이 Pytorch 설치 & MNIST

 

라즈베리파이에 pytorch를 설치하고 mnist로 테스트해보자

 

0. 가상환경(virtual environment)

sudo apt update
sudo apt upgrade

python3 -m venv myenv
source myenv/bin/activate

 

1. pytorch install

파이토치와 파이비전을 설치하자.

pip install torch torchvision

 

2. 버전확인

설치한 pytorch의 버전을 확인해보자.

python -c "import torch; print(torch.__version__)"

 

3. mnist sample

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import time

# GPU를 사용할 수 있다면 사용하고, 그렇지 않다면 CPU를 사용합니다.
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 데이터 변환 정의
transform = transforms.Compose([
    transforms.ToTensor(),  # 이미지를 텐서로 변환
    transforms.Normalize((0.5,), (0.5,))  # 이미지를 정규화
])

# MNIST 데이터셋 다운로드
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)

# 데이터로더 설정
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

# 신경망 모델 정의
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(28 * 28, 128)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = x.view(-1, 28 * 28)  # 이미지를 1D로 펼침
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

# 모델, 손실 함수, 최적화 함수 정의
model = SimpleNN().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 훈련 함수 정의
def train(model, train_loader, criterion, optimizer, epochs=5):
    for epoch in range(epochs):
        start_time = time.time()  # 현재 시간 기록

        for inputs, labels in train_loader:
            inputs, labels = inputs.to(device), labels.to(device)

            optimizer.zero_grad()  # 그래디언트 초기화

            outputs = model(inputs)  # 모델 순전파
            loss = criterion(outputs, labels)  # 손실 계산
            loss.backward()  # 역전파
            optimizer.step()  # 가중치 업데이트

        end_time = time.time()  # 현재 시간 기록
        epoch_time = end_time - start_time  # 에폭당 걸린 시간 계산

        print(f"Epoch {epoch + 1}/{epochs}, Loss: {loss.item()}, Time: {epoch_time:.2f} seconds")


# 훈련 실행
train(model, train_loader, criterion, optimizer)

# 테스트 함수 정의
def test(model, test_loader):
    model.eval()
    correct = 0
    total = 0

    with torch.no_grad():
        for inputs, labels in test_loader:
            inputs, labels = inputs.to(device), labels.to(device)
            outputs = model(inputs)
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()

    accuracy = correct / total
    print(f"Test Accuracy: {accuracy * 100:.2f}%")

# 테스트 실행
test(model, test_loader)

 

 

4. colab vs respberry vs AMD Ryzen 5 5500U with Radeon Graphics 

colab과 라즈베리 성능을 비교해보자. colab은 T4 GPU를 사용했고, 노트북 cpu는 amd 라데온 5 5500u 내장그래픽이다

 

colab

Epoch 1/5, Loss: 0.30467528104782104, Time: 13.71 seconds
Epoch 2/5, Loss: 0.15264375507831573, Time: 13.71 seconds
Epoch 3/5, Loss: 0.32598111033439636, Time: 13.71 seconds
Epoch 4/5, Loss: 0.286398708820343, Time: 14.43 seconds
Epoch 5/5, Loss: 0.18845626711845398, Time: 13.78 seconds
Test Accuracy: 92.75%

 

AMD Ryzen 5 5500U with Radeon Graphics 

Epoch 1/5, Loss: 0.2696661949157715, Time: 12.08 seconds
Epoch 2/5, Loss: 0.18215198814868927, Time: 11.54 seconds
Epoch 3/5, Loss: 0.1384127289056778, Time: 11.41 seconds
Epoch 4/5, Loss: 0.29524537920951843, Time: 11.67 seconds
Epoch 5/5, Loss: 0.2897138297557831, Time: 12.05 seconds
Test Accuracy: 92.74%

 

respberry pi 4 4gb

Epoch 1/5, Loss: 0.18655535578727722, Time: 69.62 seconds
Epoch 2/5, Loss: 0.49827146530151367, Time: 68.31 seconds
Epoch 3/5, Loss: 0.34614962339401245, Time: 68.06 seconds
Epoch 4/5, Loss: 0.1613757163286209, Time: 69.00 seconds
Epoch 5/5, Loss: 0.22222955524921417, Time: 68.35 seconds
Test Accuracy: 92.68%

 

728x90