관리 메뉴

holssi 님의 블로그

Ray를 활용한 분산 처리 본문

카테고리 없음

Ray를 활용한 분산 처리

holssi 2026. 6. 21. 10:41

과거 : 모델 학습이나 데이터 처리가 1대의 컴퓨터로도 충분했음

현재:LLM,대용량이미지,수많은실험등->단일머신의한계

→ 빠르게 처리하려면 병렬화가 필수

 

GPU 병렬 처리의 어려움

1. 데이터 의존성 - > 연산 간에 순서가 중요한 경우가 많아서 동시에 처리하기 어려움

2. 메모리 병목 -> GPU 메모리 대역폭이 한정적이라 많은 스레드가 동시에 접근하면 병목 발생

3. 스레드 간 통신 비용 -> GPU는 수천 개의 스레드를 돌리지만, 이들 사이의 정보 교환이 느림

4. 작업 분할의 어려움 -> 연산을 균등하게 쪼개서 모든 GPU에 효율적으로 분배하는 게 어려움

 

RAY

Ray는 복잡한 분산처리를 간단하게 만들어주는 프레임워크

Python 기반의 분산 처리 프레임워크로, 복잡한 병렬 처리도 간단하게 구현 가능

GPU, CPU 자원을 효율적으로 스케줄링하며 대규모 병렬 연산을 손쉽게 관리함

사용 시나리오

1. 여러 컴퓨터의 GPU를 하나처럼 쓰고 싶을 때

여러대 서버에 흩어진 GPU를 묶어,큰 연산을 나눠서 빠르게 처리가능

2. AI 실험을 한꺼번에 여러 개 돌려야 할 때

learning_rate, batch_size 조합 100개를 테스트할 때

한번에병렬로여러실험을돌려시간절약

3. 이미지, 텍스트 같은 대량 데이터를 처리할 때

100만 이미지에서 글자를 추출해야 할 때

작업을나눠서동시에처리하면훨씬빠르게작업가능

4. 여러 사용자 요청을 동시에 처리해야 할 때

대형 언어모델(LLM)이나 AI 추론 API에 요청이 몰릴 경우

Ray를 사용하면 요청을 여러 작업자에게 자동으로 분산시켜 지연 없이 병렬 처리 가능

 

 

Ray의 주요 기능

 

 

설치

1. ray 라이브러리 설치

php install ray

ray-2.48.0 설치

 

2. ray 실행

ray.init()을 호출하면 로컬 머신에서 기본 설정으로 ray 클러스터 시작

백그라운드에서 ray controller, worker 프로세스 생성

import ray
ray.init()

 

3. 파라미터 설정

ray.init(
	num_cpus=4 # 사용할 cpu 코어 수 제한
   	num_gpus=1 # 사용할 gpu 수 제한
    include_dashboard=False # 대시보드 비활성화
)

 

address="auto" -> 외부 클러스터에 연결할 때 사용

 

4. 병렬 함수 정의(@ray.remote)

데코레이터를 붙이면 해당 함수는 바로 실행되지 않고, 태스크로 실행될 준비만함

리소스 사용량을 조절할 수 있는 파라미터 설정 가능(num_cpus, num_gpus)

@ray.remote 
def slow_task(x):
	time.sleep(2) 
    returnx*2
result = slow_task.remote(3) # 병렬 테스크 실행

 

5. 비동기 호출(.remote)

병렬 실행은 .remote() 메소드를 호출해야 시작됨

.remote()로 비동기 실행 -> ray.get()으로 결과 수집

results = [slow_task.remote(i) for i in range(10)]
output = ray.get(results) # 병렬 작업 완료 후 결과 수집

 

사용

쇼핑몰 상품을 표준 카테고리에 자동 매핑하는 AI 작업

sroberta, bge, intfloat 3개 임베딩 모델로 유사도를 계산해서 가장 유사한 카테고리 10개를 추출

 

1. 테스트 환경

Actor: Ray에서 GPU/CPU 자원을 할당받아 독립적으로 실행되는 작업 단위

Actor 설정: num_gpus=0.5로 설정하여 GPU 자원을 반으로 나눠 actor 4개 생성

 

2. 데이터 규모

표준 카테고리: 5,251

쇼핑몰 카테고리: 76,998(16개 쇼핑몰 대상)

모니터링

 
ray start --head --dashboard-host 0.0.0.0 --port=6379


[로컬] #아래명령어실행후서버비밀번호입력
ssh -L 8265:localhost:8265 kaeunlee@[서버 ip]

 

http://localhost:8265 접속

 

시각화를 위해 프로메테우스, 그라파나 설치 필요

- Cluster Utilization

  GPU — 노란선, 작업 실행 시 20~30%까지 튀었다가 평소엔 낮음 (GPU 사용률이 스파이크(순간 급등) 형태인 건 임베딩 작업이 배치로 처리되기 때문)

- Node Count 

  head-node 1개, worker-node 2개

 

매핑 실행 Cluster