파이썬에는 GIL(Global Interpreter Lock) 개념이 있습니다. 하나의 쓰레드에서 파이썬 전체내용을 처리하는 것으로 다수의 쓰레드를 갖고있는 CPU 입장에서는 상당히 비효율적인 방법으로 보여집니다.

파이썬 연산모듈에서는 CPython 등을 활용하거나, 파이썬 기본으로 제공하는 multiprocessing 등을 활용하여 다수의 쓰레드 연산을 가능하게 합니다. 이번에 리뷰를 하게된 Ray 모듈은 단순연산 보다는 딥러닝 연산 중에서 강화학습 에 특화되어 시스템 리소스를 최대한 활용할 수 있게 도와줌으로써 성능향샹을 돕는 모듈 입니다. 때문에 딥러닝 연산 중 강화학습 작업을 하시는 분들에게는 매력적으로 다가갈 것입니다.

러닝 레이 성능비교

총평

이 책은 강화학습 뿐만이 아니라, Pytorch, Tensorflow 등의 딥러닝 모듈, 기본적인 데이터 파이프라인 작업 그리고 FastAPI 등의 웹서비스 작업에서도 적용하는 내용을 다루고 있습니다. 이처럼 강화학습 이외에 다양한 작업 및 환경에 있어서 사용자가 Ray 분산처리 모듈을 적용할 수 있도록 도와 줍니다. 그리고 현재 출간된 유일한 Ray 관련 한글도서라는 점에 있어서 장점이 있습니다.

</br>

책 내용 빠르게 살펴보기

1장 ~ 5장

아쉬운 부분이 크게 2가지가 있습니다. 그 중 첫번째가 이 책의 구성인데 1장 ~ 5장 까지 강화학습내용 중심으로 전개가 되고 있어서, 다른 작업에 있어서 어떻게 적용할 수 있는지를 알려면 6장 (155p) 이후부터 나머지 내용이 이에 해당 됩니다.

때문에 강화학습에는 익숙하지 않은 독자 분이라면 155p 6장 부터 진행하시는 것을 추천 합니다. 아니면 1장 ~ 5장 까지 내용을 가볍게 살펴보면서 ray 모듈의 구조와 주요 개념들을 눈으로 익힌 뒤 6장 부터 자세하게 실습을 따라하셔야 중도 하차를 하지 않을 것입니다.

6장 레이 데이터셋을 활용한 데이터 분산 처리 ~ 11장 레이 생태계와 그 너머

초보자 분들이라면 1~5장이 어려울 수 있는데, 꼭 6장 부터 8장 - 레이 서브를 활용한 온라인 추론 부분을 읽어보신다면 이 책에 대해서 아쉬웠던 부분들이 상당부분 해소가 될 것입니다. 특히 6장은 CSV 파일의 테이블 데이터를 활용하여 병렬 분류기 등의 딥러닝 강화학습 내용보다 쉬운 내용들로 구성되어 있어서 보다 직접적인 예시들로 이해가 쉽게 구성되어 있었습니다.

170 P

개인적으로는 8장 - 온라인 추론 부분이 인상적이었습니다. 서버 환경에서도 효율적인 작업을 할 수 있도록 도와준다는 점이 가장 큰 매력으로 다가 왔습니다.

206 P - FastAPI 활용


아쉬웠던 점

이책의 아쉬웠던 2가지 중, 두번째 내용은 특히 초보자 분들에게 아쉬운 내용인데, 2024년 2월 책 내용으로 실습을 진행하다 보면 패키지 의존성 내용으로 인해 다수의 오류를 마주칠 수 밖에 없도록 되어 있었습니다.

Python 3.11 환경에서 작업을 진행할 때에는 아래와 같은 오류를 피할 수 없었습니다.

$ pip install "ray[rllib, serve, tune]==2.2.0"

ERROR: Could not find a version that satisfies the requirement ray==2.2.0 
(from versions: 2.3.0, 2.3.1, 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.6.1, 2.6.2, 
2.6.3, 2.7.0rc0, 2.7.0, 2.7.1, 2.7.2, 2.8.0, 2.8.1, 2.9.0, 2.9.1, 2.9.2)
ERROR: No matching distribution found for ray==2.2.0

때문에 책 내용대로 2.2.0 버젼으로 메서드를 적용하며 진행을 하려면 Python 3.10 환경에서 진행을 해야만 합니다. Python 3.11 환경은 ray 2.6.1 이후 버젼부터 지원 합니다.

requirements.txt 파일에는 중요한 패키지들만 적혀 있고, 의존성과 관련된 나머지 패키지들은 내용이 제외가 되어 있습니다. 때문에 파이썬 버젼을 맞춰서 진행하더라도 ray 모듈에서 의존성을 꼼꼼하게 적용하지 않는 모듈들이 업데이트가 됨으로 인하여 메서드가 변경되어 오류가 발생하는 경우가 다수 발생하였습니다. 대표적인 예제가 10장의 Pydantic 메서드 변경등이 이에 해당 되었습니다. 때문에 혹시라도 이 책으로 스터디를 진행하려는 계획이 있으시다면 미리 환경설정에 있어서 꼼꼼한 점검 및 수정을 완료한 뒤 진행하시기 바랍니다.

Pydantic 오류

Pydantic 오류 수정


리뷰를 한 뒤

이 책에 적용된 2.2.0 버젼은 2022년 12월 릴리즈된 버젼으로 2024년 2월 기준으로도 1년남짓 된 버젼으로 번역서 내용으로는 그리 오래된 버젼은 아닙니다. 공교롭게도 2023년도에 많은 변화가 이루어 져서 2.9.0 버젼까지 업데이트가 진행되면서 상당히 많은 내용들이 수정 및 보완된 것으로 보입니다. 특히 2.5.0 버젼부터 새로운 개념이 추가 및 보완됨으로써 현재 최신버젼을 적용 및 활용하는데는 전혀 문제가 없었습니다. 그만큼 RayRllib 커뮤니티가 활성화 되어 있어서 컨트리뷰터 분들이 활발하게 활동을 하고 있다는 점이 이 모듈의 큰 장점입니다.

이 책으로 인하여 개념 및 간단한 실습들을 마친 분들이라면 Ray 공식문서 그리고 Ray 공식문서 하위 내용인 rllib 내용을 참고하여 변경된 메서드 및 추가된 개념들을 익히신다면 완벽하게 적응을 할 수 있을 것입니다.

딥러닝 강화학습 이 아닌 데이터 작업 을 하시는 다수의 파이선 개발자 분들 중, 이 책을 시작으로 파이썬 리소스를 최대한 활용하는데 관심이 생긴 분 이라면 이 책에서도 간단하게 언급된 Dask 패키지를 다루고 있는 파이썬과 대스크를 활용한 고성능 데이터 분석 - 한빛미디어 - 2020 책을 추천합니다

이 책에서 짧게 다뤄서 아쉬웠던 6장 ~ 8장 의 내용을 Dask 모듈을 활용하여 책 전체내용으로 다루고 있어서 많은 도움이 되었습니다. 앞에서 보여드린 표처럼 Ray 모듈이 보다 다양한 리소스를 활용할 수 있고 Tensorboard 와 같은 Dashboard 를 제공하는 등 성능향상 및 시스템 모니터링에도 도움이 되는 만큼 최종목표는 Ray로 방향을 정하는 것도 나쁘지 않아 보였습니다.

[In] :  import ray
        ray.init()

[Out] : 2024-02-18 15:10:33,346	INFO worker.py:1715 
-- Started a local Ray instance. 
View the dashboard at 127.0.0.1:8265 

Python version: 	3.10.11
Ray version: 	2.9.2
Dashboard: 	http://127.0.0.1:8265


참고 사이트

※ 본 리뷰는 IT 현업개발자가, 한빛미디어 책을 제공받아 작성한 서평입니다.

러닝 레이