해당 내용은 Anaconda를 사용하지 않고 진행하였습니다

제품 사항 : Apple M2 pro 

 

1. 제품의 GPU가속 진행전 제품 지원을 확인합니다.

https://pytorch.org/get-started/locally/

 

Start Locally

Start Locally

pytorch.org

 

들어가시면 아래 사진과 같이 나옵니다.

여기서 중점으로 봐야할 부분은 [Compute Platform]에서 CUDA지원을 안하기 때문에 다른 방식으로 사용을 합니다.

 


가상환경 생성 및 활성화 하기

 

1. 간단한 가상환경 생성

python3 -m venv /원하는 가상환경 경로/virtualenv/test

※저는 virtualenv/test라는 폴더 내부에 생성하도록 하였습니다.

 

2. 가상환경 활성화

source /지정한 경로/virtualenv/test/bin/activate

 

이렇게 하셔서 오류가 없으면 이상없이 가상환경 활성화가 된 것입니다.


torch 설치 및 사용하기

 

1. 가상환경 활성화

# 가상환경 활성화
source /자신의 가상환경 경로/virtualenv/test/bin/activate

 

2. 해당 가상환경에서 torch설치

Pytorch에서 설치방법

pip3 install torch torchvision

https://pytorch.org/get-started/locally/

 

Start Locally

Start Locally

pytorch.org

 

Apple.Developer에서 설치방법

pip3 install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu

https://developer.apple.com/metal/pytorch/

 

Accelerated PyTorch training on Mac - Metal - Apple Developer

PyTorch uses the new Metal Performance Shaders (MPS) backend for GPU training acceleration.

developer.apple.com

 

저는 Pytorch에서 설치방법를 사용하여 진행하였습니다.


jupyter notebook 실행 후 파일을 생성하여 테스트 진행

 

필요 모듈 import 

import torch

 

 

버전 확인

print(torch.__version__)

 

파이토치 버전 : 2.1.2

 

임이의 값 5열 3행을 생성

x = torch.rand(5, 3)
print(x)

 

사용중인 shape, dtype, device 확인

print(f'shape: {x.shape}')
print(f'dtype: {x.dtype}')
print(f'device: {x.device}')

처음에 사용중인 device는 CPU를 사용하는것을 볼 수 있다.

 

가속화 사용가능 여부 확인

torch.backends.mps.is_available()

 

torch.backends.mps.is_built()

 

해당 2개의 코드가 전부 True가 나오면 가속화 사용이 가능합니다.

 

가속화 사용여부 체크 및 변경

tensor = x.reshape(5, 3)
tensor = x.int()

if torch.backends.mps.is_available():
    print('MPS 사용 가능')
    tensor = tensor.to('mps')

print(f'shape: {tensor.shape}')
print(f'dtype: {tensor.dtype}')
print(f'device: {tensor.device}')

다른 테스트 방법

if torch.backends.mps.is_available():
    mps_device = torch.device("mps")
    x = torch.ones(1, device=mps_device)
    print (x)
else:
    print ("MPS device not found.")

 

결과값이 tensor([1.], device='map:0')으로 나오면 정상적으로 된것입니다.


테스트

import torch
import time

# 1. 테스트용 텐서 준비
x = torch.randn(20000, 20000)

# 2. 연산 정의 (행렬 곱셈)
def matmul(tensor):
    return torch.matmul(tensor, tensor)

# 3. CPU 성능 테스트
start_time = time.time()
cpu_result = matmul(x)
cpu_time = time.time() - start_time
print(f"CPU 시간: {cpu_time}초")

# 4. MPS 성능 테스트 (MPS 사용 가능한 경우)
if torch.backends.mps.is_available():
    x_mps = x.to('mps')
    start_time = time.time()
    mps_result = matmul(x_mps)
    mps_time = time.time() - start_time
    print(f"MPS 시간: {mps_time}초")

# 5. 결과 비교
print(f"CPU와 MPS의 시간 차이: {cpu_time - mps_time}초")

 

▶ 확실히 데이터값이 커질 수 록 CPU의 처리시간이 늘어나는 방면, MPS는 많이 빠르게 진행하는 것을 볼 수 있습니다.

▷ 추가 여러가지 데이터셋으로 테스트 결과, 낮은 값 10000 이하는 CPU가 빠르고, 15000 이상은 GPU가 빠릅니다.

'System > Mac' 카테고리의 다른 글

[Mac] 환경변수(PATH)오류 "zsh: command not found: sudo"  (0) 2023.11.01
[Mac] Jupyter notebook 설치방법  (1) 2023.09.18