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)
모델들은 순차적 층 구조를 사용하여 코드 구조를 개선하고 유지보수를 용이하게 합니다.
벤치마크 과정
벤치마크는 다음과 같은 과정으로 두 프레임워크를 평가합니다:
-
입력 데이터 준비
- 1024 차원의 랜덤 입력 데이터 생성
- 수치 안정성을 위한 float32 정밀도 사용
- 배치 크기: 1, 32, 128의 세 가지 크기 테스트
-
모델 실행
- 각 모델이 입력 데이터를 두 개의 은닉층을 통해 처리
- ReLU 활성화 함수와 dropout 정규화 적용
- 512 차원의 출력값 생성
-
성능 측정
- 각 배치 크기별로 모델을 100번 실행
- 성능 안정화를 위한 워밍업 실행 10회 포함
- 실행 시간과 처리량 측정
- MLX와 PyTorch 간 속도 향상 비율 계산
-
결과 비교
- 샘플당 추론 시간(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 |
성능 분석
주요 결과
-
일관된 성능 우위
- 모든 배치 크기에서 MLX가 PyTorch보다 빠른 성능을 보였습니다.
- 배치 크기가 커질수록 성능 차이가 더 두드러집니다.
- 배치 크기 128에서 최대 1.64배의 속도 향상을 달성했습니다.
-
효율적인 배치 처리
- MLX가 배치 처리에서 뛰어난 성능을 보여주었습니다.
- 배치 크기 128에서 초당 222,876개의 샘플을 처리할 수 있습니다.
성능 향상 요인
-
Apple Silicon 최적화
- MLX는 Apple Silicon을 위해 특별히 최적화되어 있습니다.
- MPS(Metal Performance Shaders)를 효율적으로 활용합니다.
- Apple의 Metal 프레임워크와의 더 나은 통합
-
오버헤드 감소
- MLX는 가벼운 프레임워크로 불필요한 오버헤드가 적습니다.
- PyTorch는 다양한 플랫폼 지원을 위한 추가적인 추상화 계층이 있습니다.
-
메모리 관리
- MLX는 Apple Silicon의 통합 메모리 아키텍처를 효율적으로 활용합니다.
- CPU와 GPU 간 데이터 전송 오버헤드가 적습니다.
-
컴파일 최적화
- 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는 성능 측면에서 매력적인 선택지가 될 것입니다.
https://claude.ai/referral/JGdhsKncfg