ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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() 함수에 넣어주면, 분산 처리를 하여 결과를 반환해준다.

Designed by Tistory.