훈스비
개발잡부
훈스비
전체 방문자
오늘
어제
  • 분류 전체보기 (35)
    • 스터디 (29)
      • 데이터 분석 (4)
      • SQL (4)
      • Python (1)
      • JavaScript (1)
      • Spark (1)
      • DevOps (7)
      • 기타 (8)
      • 검색 엔진 (3)
    • 나의 이야기 (4)
      • 회사 생활 (3)
    • 사이드 프로젝트 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Docker
  • elasticsearch
  • flask
  • GCP
  • github copilot
  • helm
  • java
  • jupyterhub
  • k8s
  • Kubernetes
  • leetcode
  • linux
  • ncp
  • Ray
  • ReplicaSet
  • spark
  • spring
  • sql
  • udemy
  • Virtualization
  • vm
  • vsCode
  • vue
  • 개발원칙
  • 검색엔진
  • 데이터 분석
  • 랭킹
  • 백엔드
  • 사이드프로젝트
  • 유사도 정규화

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
훈스비

개발잡부

스터디/기타

[Ray] 1. Python - Ray의 기본 개념과 Tasks

2021. 3. 12. 00:14

1. Ray란?

 

Ray를 테스트 해볼 수 있는 환경을 구성하였으니 Ray를 사용해봐야 합니다.

 

Ray는 아직까지 국내에서는 활성화된 라이브러리가 아니라서 자료를 찾아보기 어려운데요,

가장 공부해보기 좋은 자료는 Ray 공식 문서입니다.

 

docs.ray.io/en/master/ray-overview/ 

 

A Gentle Introduction to Ray — Ray v2.0.0.dev0

.rst .pdf to have style consistency -->

docs.ray.io

 

공식 문서에 따르면 Ray는 "분산 애플리케이션을 구축하기 위해 간단하고 범용적인 API를 제공"을 미션으로 합니다.

 

그리고 그 미션을 달성하기 위해 아래 3가지 목표가 있습니다.

  1. Providing simple primitives for building and running distributed applications.- 분산 애플리케이션을 구축하고 실행시키기 위해 간단한 primitives를 제공합니다. 여기서 primitives는 Ray를 위한 primitive type으로 이해를 했지만... 정확한 뜻을 이해하기는 어렵네요.
  2. Enabling end users to parallelize single machine code, with little to zero code changes.- 엔드 유저가 코드 변경이 거의 없이 일반 코드를 병렬화 가능하게 합니다. 
  3. Including a large ecosystem of applications, libraries, and tools on top of the core Ray to enable complex applications.- 복잡한 애플리케이션 지원을 위해 대규모 에코시스템의 애플리케이션, 라이브러리, 툴을 Ray Core 위에 올릴 수 있습니다.

 

따라서 @ray.remote라는 데코레이터 만으로 함수나 클래스를 병렬화할 수 있고,

Tune, RLib, RaySGD, RayServe와 같은 자체 라이브러리, Scikit-learn이나 Analytics Zoo같은 에코시스템 위에 Ray를 올릴 수 있습니다.

 


2. Ray tasks

 

# Ray 라이브러리 로드
import Ray

# Ray 서비스 시작
# Single Machine 환경 : ray.init()
# Cluster 환경 : ray.init(address='auto')
# Debug 모드 : ray.init(local_mode=True)
ray.init()

# 일반 함수에 @ray.remote를 사용하는 것만으로 코드를 병렬화 가능함
@ray.remote
def f(x):
    return x * x
    
# 함수.remote()로 tasks를 생성
# 생성한 task는 ObjectRef 형태로 반환되며, ray.get(ObjectRef)를 통해 함수가 병렬로 실행됩니다.
futures = [f.remote(i) for i in range(4)]
print(ray.get(futures)) # [0, 1, 4, 9]

# Ray Runtime 종료
ray.shutdown()
더보기

코드 해석 (넘겨도 괜찮습니다)

ray는 ray.init()이라는 명령어로 Ray Runtime을 실행합니다.

Ray Runtime은 실행 이후 백그라운드에서 Ray의 병렬화를 위한 통신, 데이터 전송, 스케쥴링을 지원합니다.

 

@ray.remote 데코레이터를 통해 일반 함수를 Ray tasks로 변환할 수 있습니다.

변환된 함수는 이제 일반적인 실행 방법으로는 Call 할 수 없고,

f.remote(x) 형태로 tasks를 생성(아직 실행되지 않은 상태)하고 ObjectRef 형태로 반환 받습니다.

반한된 ObjectRef를 리스트 형태로 저장한 뒤 ray.get(ObjectRefList)를 통해 함수가 자동으로 병렬로 실행되고 결과를 반환 받을 수 있습니다.

 

그리고 Ray Runtime을 ray.shoutdown()을 통해 종료합니다.

 

코드를 보면 알 수 있듯이 @ray.remote, ray.init, ray.remote, ray.get의 4가지만 이해하여도 코드를 병렬화할 수 있다는 엄청난 장점이 있습니다. 

 

다음에는 Ray를 사용하면 얼마나 빨라지는지 테스트해보겠습니다.

저작자표시 비영리 변경금지 (새창열림)

'스터디 > 기타' 카테고리의 다른 글

[Linux] Udemy - Linux Command Line 부트캠프 강의 후기  (0) 2024.04.28
[Leetcode] 01. Add Two Numbers (Medium)  (2) 2022.02.19
[Ray] 0. GCP와 Docker를 이용한 Jupyter Notebook 환경 구성  (0) 2021.03.07
[Open API] 사이퍼즈 전적 검색 사이트 만들기 #1 - 닉네임 검색  (1) 2019.08.04
[프로세스 마이닝] Data Science In Action 강의 - 02  (0) 2019.08.03
    '스터디/기타' 카테고리의 다른 글
    • [Linux] Udemy - Linux Command Line 부트캠프 강의 후기
    • [Leetcode] 01. Add Two Numbers (Medium)
    • [Ray] 0. GCP와 Docker를 이용한 Jupyter Notebook 환경 구성
    • [Open API] 사이퍼즈 전적 검색 사이트 만들기 #1 - 닉네임 검색

    티스토리툴바