이 디렉토리는 Ray를 활용한 데이터 분산처리 및 간단한 모델 학습 실험 예제를 다룹니다. Ray의 Task/Actor 기반 분산처리와 PyTorch/Ray를 활용한 이미지 분류 모델 학습 실험을 포함합니다.
본 실습은 M3 MacBook Air 로컬 머신에서 진행되었습니다. Ray는 본래 분산 환경(멀티 노드/클러스터)에서의 대규모 데이터 처리 및 학습에 최적화된 프레임워크이지만, 여기서는 간단한 벤치마크 및 실험을 위해 로컬 환경에서 실행하였습니다. 실제 대규모 분산 환경과는 성능 특성이 다를 수 있으니 참고 바랍니다.
ray_core_bench/: Ray의 Task/Actor를 활용한 분산처리 벤치마크 실험ray_training/: PyTorch vs Ray 분산 학습 실험
- 이미지 처리 벤치마크: 무작위로 생성한 이미지를 여러 번 리사이즈 및 가우시안 블러(옵션) 처리 후, 해시값을 계산하는 작업을 수행합니다. 이 과정을
- (1) 순수 파이썬(로컬) 방식
- (2) Ray Task(배치 분산)
- (3) Ray Actor(여러 워커에 라운드로빈 분산) 방식 으로 각각 실행하여 처리 속도를 비교합니다.
- 행렬 곱셈 벤치마크: 대형 행렬 곱셈 연산을 여러 번 반복하여,
- (1) 로컬 방식
- (2) Ray Task 분산 방식 으로 각각 실행해 처리 속도를 비교합니다.
- 이미지 1000장, 크기 512x512, 반복 3회, batch 64, actor 8개, CPU 8개
| 작업 종류 | Local (s) | Ray Task (s) | Ray Actor (s) |
|---|---|---|---|
| 이미지 처리 | 29.11 | 5.92 | 7.50 |
| 행렬 곱셈 | 0.98 | 0.78 | - |
- Ray Task/Actor를 활용하면 이미지 처리에서 큰 속도 향상을 확인할 수 있습니다.
Ray의 Task/Actor 개념과 분산 실행 구조를 빠르게 이해할 수 있도록 아주 간단한 예제(simple_ray_example.py)를 제공합니다.
- 입력값의 제곱을 계산하는 함수를 Task/Actor 방식으로 병렬 실행하는 코드입니다.
- Ray를 처음 접할 때, 이 예제를 먼저 실행해보면 Task/Actor의 차이와 사용법을 쉽게 익힐 수 있습니다.
PyTorch도 최적화가 잘 되어 있기 때문에 로컬 환경에서의 간단한 학습에서는 Ray의 분산처리 오버헤드가 오히려 불리하게 작용할 수 있습니다. 따라서 본 실험에서는 데이터 로딩 과정에서 CPU 바운드가 강한 전처리를 추가하고, 학습 이미지 크기를 점진적으로 키워가며 실험을 진행했습니다. (자세한 구현은 ray_training/rayfull_backend.py, ray_training/torch_backend.py 참고)
- 다양한 image_size에 대해 PyTorch(싱글) vs Ray(분산) 학습 시간 비교
| Image Size | PyTorch Time (s) | Ray Time (s) | PyTorch Samples/sec | Ray Samples/sec |
|---|---|---|---|---|
| 30 | 68.67 | 89.54 | 2609.56 | 668.61 |
| 50 | 91.83 | 99.10 | 1714.40 | 587.74 |
| 100 | 204.57 | 138.98 | 647.33 | 391.83 |
| 150 | 409.47 | 244.31 | 302.90 | 217.85 |
| 200 | 673.48 | 442.16 | 186.12 | 123.52 |
| 225 | 1040.74 | 691.76 | 111.08 | 75.19 |
| 250 | 1130.38 | 830.04 | 107.34 | 61.43 |
- 이미지 크기가 작을 때는 큰 차이가 없지만, 이미지 크기가 커질수록 Ray의 분산처리 이점이 점차 나타나며 학습 시간이 조금씩 단축됨
python ray_core_bench/run_benchmarks.pypython ray_training/train.py --backend pytorch # PyTorch 단일 학습
python ray_training/train.py --backend ray # Ray 분산 학습