[PyTorch] M1 Macbook 💻 GPU ⚡️ 사용하는 방법!

반응형

PyTorch Logo

 

 

Contents

    1. 배경

    M1 맥북에서 Pytorch를 이용해 딥러닝 모델을 학습할 때, CPU를 사용하는 것보다 GPU를 사용하면 매우 빠르게 학습을 할 수 있습니다. 이번에 PyTorch가 1.12 버전으로 업데이트되며 M1 Mac에서도 GPU 연산을 지원합니다. 그 방법을 알아보도록 하겠습니다.

    2. 해결 방법

    1️⃣ PyTorch 최신 버전 설치

    # conda 이용 pytorch 최신 버전 설치
    conda install -c pytorch pytorch
    
    # pip 이용 설치
    python -m pip install torch

    현재(22.10.03) 기준 pytorch 최신버전은 1.12.1 버전입니다. 1.12.0 이상이면 괜찮습니다.

     

    2️⃣ device에 적용하는 코드!

    device = torch.device('mps:0' if torch.backends.mps.is_available() else 'cpu')

     

    3️⃣ MPS 지원 확인

    print (f"PyTorch version:{torch.__version__}") # 1.12.1 이상
    print(f"MPS 장치를 지원하도록 build 되었는지: {torch.backends.mps.is_built()}") # True 여야 합니다.
    print(f"MPS 장치가 사용 가능한지: {torch.backends.mps.is_available()}") # True 여야 합니다.
    !python -c 'import platform;print(platform.platform())'

    주피터 노트북에서 위 코드를 실행했을 때, Pytorch의 버전은 1.12.0 버전 이상이어야 하고, MPS is_built()와 is_available()이 모두 True로 나와야 합니다. 마지막으로, platform은 arm64가 나와야 현재 python이 Mac OS를 정상적으로 인식한 것입니다. macOS 버전도 12.3 이상이어야 합니다.

     

    * 예시 출력

     

     

    4️⃣ 예시 코드

    MPS를 사용해 GPU 연산을 하는 아주 간단한 예시코드를 아래와 같이 작성했습니다.

    import torch
    from torch import nn
    import torch.nn.functional as F
    
    class Net(nn.Module):
        def __init__(self):
            super().__init__()
            self.lin1 = nn.Linear(5,5)
    
        def forward(self,x):
            net = self.lin1(x)
            return net
    
    device = torch.device("mps") if torch.backends.mps.is_available() else "cpu"
    print(f"device: {device}")
    
    # MPS 장치에 바로 tensor를 생성합니다.
    x = torch.ones(5, device=device)
    
    # GPU 상에서 연산 진행
    y = x * 2
    
    # 또는, 다른 장치와 마찬가지로 MPS로 이동할 수도 있습니다.
    model = Net()# 어떤 모델의 객체를 생성한 뒤,
    model.to(device) # MPS 장치로 이동합니다.
    
    # 이제 모델과 텐서를 호출하면 GPU에서 연산이 이뤄집니다.
    pred = model(x)
    print(pred)

     

    * 실행 결과

     

    예측 결과에 device='mps:0'로 나오면 간단한 모델을 통한 예측에서 mps를 정상적으로 사용한 것입니다. mps 사용 여부만 판단하기 위해 backward (역전파) 과정은 굳이 넣지 않았습니다.

     

    읽어주셔서 감사합니다.

    다음에 더 유익한 글로 찾아오겠습니다.

     

    * 관련 코드는 아래 깃허브에 정리해 두었습니다.

    https://github.com/netsus/pytorch_practice/blob/master/pytorch_m1_mac_gpu.ipynb

     

    GitHub - netsus/pytorch_practice: pytorch practice with blog

    pytorch practice with blog. Contribute to netsus/pytorch_practice development by creating an account on GitHub.

    github.com

     

     

    Reference
    1. PyTorch Logo : https://icon-icons.com/ko/%EC%95%84%EC%9D%B4%EC%BD%98/pytorch-%EB%A1%9C%EA%B3%A0/169823
    2. https://discuss.pytorch.kr/t/apple-m1-pytorch-gpu/276 
    반응형

    댓글

    Designed by JB FACTORY