MLX vs PyTorch 성능 벤치마크

MLX vs PyTorch 성능 벤치마크: Apple Silicon에서 MLX와 PyTorch 프레임워크의 성능을 비교하는 벤치마크를 제공합니다.

https://github.com/jaysys/mlx_pytorch_benchmark.git

실행 환경

  • 하드웨어: Apple Silicon (M3)
  • 운영 체제: macOS
  • Python 버전: 3.11
  • 의존성 패키지:
    • mlx>=0.0.7
    • numpy>=1.24.0
    • torch>=2.0.0
    • logging>=0.5.1.2

프로젝트 구조


.
├── main.py          # 벤치마크 스크립트
├── requirements.txt  # 프로젝트 의존성
├── .gitignore       # Git 무시 규칙
└── README.md        # 문서

모델 아키텍처

구현한 MLX와 PyTorch 모델은 동일한 구조의 다층 퍼셉트론(MLP)을 구현합니다:

  • 입력층: 1024 차원
  • 은닉층 1: 2048 차원
  • 은닉층 2: 2048 차원
  • 출력층: 512 차원
  • 활성화 함수: ReLU
  • 정규화: Dropout (0.1)

모델들은 순차적 층 구조를 사용하여 코드 구조를 개선하고 유지보수를 용이하게 합니다.

벤치마크 과정

벤치마크는 다음과 같은 과정으로 두 프레임워크를 평가합니다:

  1. 입력 데이터 준비

    • 1024 차원의 랜덤 입력 데이터 생성
    • 수치 안정성을 위한 float32 정밀도 사용
    • 배치 크기: 1, 32, 128의 세 가지 크기 테스트
  2. 모델 실행

    • 각 모델이 입력 데이터를 두 개의 은닉층을 통해 처리
    • ReLU 활성화 함수와 dropout 정규화 적용
    • 512 차원의 출력값 생성
  3. 성능 측정

    • 각 배치 크기별로 모델을 100번 실행
    • 성능 안정화를 위한 워밍업 실행 10회 포함
    • 실행 시간과 처리량 측정
    • MLX와 PyTorch 간 속도 향상 비율 계산
  4. 결과 비교

    • 샘플당 추론 시간(ms) 비교
    • 초당 처리량(샘플/초) 측정
    • 더 빠른 프레임워크 식별
    • 배치 크기별 속도 향상 비율 계산

이 벤치마크는 MLX와 PyTorch가 Apple Silicon 하드웨어에서 동일한 신경망 구조를 처리하는 방식을 종합적으로 비교합니다.

벤치마크 결과

테스트 환경

  • 입력 차원: 1024
  • 은닉층 차원: 2048
  • 출력 차원: 512
  • 배치 크기: 1, 32, 128
  • 벤치마크 실행 횟수: 100회 (워밍업 10회 제외)
  • 정밀도: float32

성능 요약

배치 크기 MLX (ms) PyTorch (ms) 더 빠른 속도 향상 MLX (샘플/초) PyTorch (샘플/초)
1 4.3721 16.3789 MLX 3.75x 229 61
32 4.5971 17.7336 MLX 3.86x 6,961 1,804
128 5.0260 19.7162 MLX 3.92x 25,467 6,492

성능 분석

주요 결과

  1. 일관된 성능 우위

    • 모든 배치 크기에서 MLX가 PyTorch보다 빠른 성능을 보였습니다.
    • 배치 크기가 커질수록 성능 차이가 더 두드러집니다.
    • 배치 크기 128에서 최대 1.64배의 속도 향상을 달성했습니다.
  2. 효율적인 배치 처리

    • MLX가 배치 처리에서 뛰어난 성능을 보여주었습니다.
    • 배치 크기 128에서 초당 222,876개의 샘플을 처리할 수 있습니다.

성능 향상 요인

  1. Apple Silicon 최적화

    • MLX는 Apple Silicon을 위해 특별히 최적화되어 있습니다.
    • MPS(Metal Performance Shaders)를 효율적으로 활용합니다.
    • Apple의 Metal 프레임워크와의 더 나은 통합
  2. 오버헤드 감소

    • MLX는 가벼운 프레임워크로 불필요한 오버헤드가 적습니다.
    • PyTorch는 다양한 플랫폼 지원을 위한 추가적인 추상화 계층이 있습니다.
  3. 메모리 관리

    • MLX는 Apple Silicon의 통합 메모리 아키텍처를 효율적으로 활용합니다.
    • CPU와 GPU 간 데이터 전송 오버헤드가 적습니다.
  4. 컴파일 최적화

    • MLX는 Apple의 Metal 프레임워크를 통해 저수준 최적화를 수행합니다.
    • PyTorch의 최적화는 때때로 일반적인 접근 방식으로 제한됩니다.

사용 방법

설치

pip install -r requirements.txt

벤치마크 실행

python main.py

환경 요구사항

  • 하드웨어: Apple M3 칩셋
  • 운영 체제: macOS 13.x 이상
  • Python: 3.11
  • 의존성:
    • mlx>=0.0.7
    • torch>=2.0.0
    • numpy>=1.24.0

결론

벤치마크 결과, MLX는 특히 배치 처리 시나리오에서 PyTorch보다 우수한 성능을 보여주었습니다. 이는 MLX가 Apple 하드웨어 아키텍처에 특화되어 있기 때문입니다. Apple 기기에서 머신러닝 애플리케이션을 개발하는 개발자들에게 MLX는 성능 측면에서 매력적인 선택지가 될 것입니다.

1 thought on “MLX vs PyTorch 성능 벤치마크”

Leave a Comment