-
[yongggg's] ray 분산처리GPUTraining & View 2025. 5. 22. 14:48
안녕하세요~! 오늘 장에서는 대용량의 데이터를 ray로 분산처리하여, 기존 방법보다 훨씬 빠르게 전처리나 추론할 수 있는 방법에 대해 다루고자 합니다.
parsing task를 겪으면서, 단순히 inference 코드로 여러 파일들을 sequential 하게 parsing을 하게되면,
parsing 속도가 매우 저조하여 이를 현실 업무에서 사용할 수 없는 문제를 해결하고자 했습니다.
간단히 ray를 적용하면, 이런 문제를 해결할 수 있습니다!
1. ray module 설치
ray를 이용하기 앞서, module을 설치해야 합니다. 각자 서버에서 다음 코드를 통해 Module을 설치하실 수 있다.
pip install ray pip install ray[default]
2. ray start
ray module을 설치했다면, 사용하고자 하는 서버(가상환경 또는 container)에서 ray server를 시작한다. 시작하는 코드는 다음과 같다.
ray start --head --dashboard-host=0.0.0.0 --dashboard-port=8265
ray는 실행 하는 job을 dashboard로 자동으로 적용하여 보여주는데, 진행 현황과 error를 보기 편리하다.
이때, 방화벽이 있는 서버에서 dashboard를 접근한다면, 로컬의 url에서 http://IP:port의 dashboard에 접근이 안된다.
vscode에서 접근한다면, 우측 하단에 자동으로 터널링을 해주어 dashboard를 띄워주지만, 그렇지 못한 환경이라면 local PC의 terminal에서 다음을 입력하여 터널링을 해준다.
ssh -L 8265:localhost:8265 [user]@IP
이렇게 서버에 접근을 하면, 로컬 환경의 url에 http://IP:port로 ray dashboard에 접근할 수 있다.
3. ray code 실행
python 환경에서 돌리고자 하는 code에 아래처럼 ray code를 작성해주자.
import ray ... @ray.remote(num_gpus=1) def parse_parallel(): ... return result if __name__ == "__main__": ray.init() # 떠있는 ray 서버에 연결 pdf_files = [os.path.join(PDF_FOLDER_PATH, f) for f in os.listdir(PDF_FOLDER_PATH) if f.endswith(".pdf")] results = ray.get([parse_parallel.remote(pdf_file) for pdf_file in pdf_files])
위처럼 ray를 import 해주고, 직접적으로 output을 생성해주는 함수 위에 @ray.remote를 선언한다.
그리고 main 함수에서 ray.init()과 분산처리에서 함수에 넘겨줄 input을 list에 나누어 ray.get() 함수에 넣어주면, 분산 처리를 하여 결과를 반환해준다.
'GPUTraining & View' 카테고리의 다른 글
[yongggg's] DeepSpeed + Zero 둘러보기 (0) 2024.04.25 [yongggg's] FSDP details and options (2) 2024.03.13 [yongggg's] FSDP: Fully Sharded Data Parallel (1) 2024.02.06 [yongggg's] DDP (2) 2023.12.14 [yongggg's] Big-size image dataset load Tip (0) 2023.02.01