Azure Databricks에서 Ray 사용

Ray 2.3.0 이상을 사용하면 Azure Databricks를 사용하여 Ray 클러스터를 만들고 Apache Spark 클러스터에서 Ray 애플리케이션을 실행할 수 있습니다. 자습서 및 예제를 포함하여 Ray에서 기계 학습을 시작하는 방법에 대한 자세한 내용은 Ray 설명서를 참조 하세요. Ray 및 Apache Spark 통합에 대한 자세한 내용은 Spark API의 Ray 설명서를 참조 하세요.

요구 사항

  • Databricks Runtime 12.2 LTS ML 이상.
  • Databricks 런타임 클러스터 액세스 모드는 "할당됨" 모드 또는 "격리 공유 없음" 모드여야 합니다.

Ray 설치

다음 명령을 사용하여 Ray를 설치합니다. 확장은 [default] Ray 대시보드 구성 요소에 필요합니다.

%pip install ray[default]>=2.3.0

Databricks 클러스터에서 사용자별 Ray 클러스터 만들기

Ray 클러스터를 만들려면 ray.util.spark.setup_ray_cluster API를 사용합니다.

Databricks 클러스터에 연결된 모든 Databricks Notebook에서 다음 명령을 실행할 수 있습니다.

from ray.util.spark import setup_ray_cluster, shutdown_ray_cluster

setup_ray_cluster(
  num_worker_nodes=2,
  num_cpus_worker_node=4,
  collect_log_to_path="/dbfs/path/to/ray_collected_logs"
)

API는 ray.util.spark.setup_ray_cluster Spark에 Ray 클러스터를 만듭니다. 내부적으로 백그라운드 Spark 작업을 만듭니다. 작업의 각 Spark 작업은 Ray 작업자 노드를 만들고 Ray 헤드 노드는 드라이버에 만들어집니다. 인수 num_worker_nodes 는 만들 Ray 작업자 노드 수를 나타냅니다. 각 Ray 작업자 노드에 할당된 CPU 또는 GPU 코어 수를 지정하려면 인수 num_cpus_worker_node (기본값: 1) 또는 num_gpus_worker_node (기본값: 0)을 설정합니다.

Ray 클러스터를 만든 후에는 Notebook에서 직접 Ray 애플리케이션 코드를 실행할 수 있습니다. 새 탭에서 광선 클러스터 대시보드 열기를 클릭하여 클러스터에 대한 Ray 대시보드를 봅니다.

Azure Databricks 단일 사용자 클러스터를 사용하는 경우 Ray 클러스터에 ray.util.spark.MAX_NUM_WORKER_NODES 사용 가능한 모든 리소스를 사용하도록 설정할 num_worker_nodes 수 있습니다.

setup_ray_cluster(
  # ...
  num_worker_nodes=ray.util.spark.MAX_NUM_WORKER_NODES,
)

Ray 클러스터 로그를 수집할 대상 경로를 지정하려면 인수 collect_log_to_path 를 설정합니다. 로그 수집은 Ray 클러스터가 종료된 후 실행됩니다. Databricks는 Spark 클러스터를 종료하는 경우에도 로그가 유지되도록 경로를 설정하는 /dbfs/ 것이 좋습니다. 그렇지 않으면 클러스터가 종료될 때 클러스터의 로컬 스토리지가 삭제되므로 로그를 복구할 수 없습니다.

참고 항목

"Ray 애플리케이션이 생성된 Ray 클러스터를 자동으로 사용하도록 하려면 환경 변수를 Ray 클러스터의 주소로 설정 RAY_ADDRESS 하도록 호출 ray.util.spark.setup_ray_cluster 합니다." ray.init API의 인수를 address 사용하여 대체 클러스터 주소를 지정할 수 있습니다.

Ray 애플리케이션 실행

Ray 클러스터를 만든 후에는 Azure Databricks Notebook에서 모든 Ray 애플리케이션 코드를 실행할 수 있습니다.

Important

Databricks는 애플리케이션에 필요한 라이브러리 %pip install <your-library-dependency> 를 설치하여 그에 따라 Ray 클러스터 및 애플리케이션에서 사용할 수 있도록 하는 것이 좋습니다. Ray init 함수 호출에 종속성을 지정하면 Spark 작업자 노드에 액세스할 수 없는 위치에 종속성이 설치되어 버전 비호환성 및 가져오기 오류가 발생합니다.

예를 들어 다음과 같이 Azure Databricks Notebook에서 간단한 Ray 애플리케이션을 실행할 수 있습니다.

import ray
import random
import time
from fractions import Fraction

ray.init()

@ray.remote
def pi4_sample(sample_count):
    """pi4_sample runs sample_count experiments, and returns the
    fraction of time it was inside the circle.
    """
    in_count = 0
    for i in range(sample_count):
        x = random.random()
        y = random.random()
        if x*x + y*y <= 1:
            in_count += 1
    return Fraction(in_count, sample_count)

SAMPLE_COUNT = 1000 * 1000
start = time.time()
future = pi4_sample.remote(sample_count=SAMPLE_COUNT)
pi4 = ray.get(future)
end = time.time()
dur = end - start
print(f'Running {SAMPLE_COUNT} tests took {dur} seconds')

pi = pi4 * 4
print(float(pi))

자동 크기 조정 모드에서 Ray 클러스터 만들기

Ray 2.8.0 이상에서 Databricks에서 시작된 Ray 클러스터는 Databricks 자동 크기 조정과의 통합을 지원합니다. Databricks 클러스터 자동 크기 조정을 참조 하세요.

Ray 2.8.0 이상을 사용하면 워크로드에 따라 스케일 업 또는 다운을 지원하는 Databricks 클러스터에 Ray 클러스터를 만들 수 있습니다. 이 자동 크기 조정 통합은 Databricks 환경 내에서 내부적으로 Databricks 클러스터 자동 크기 조정을 트리거합니다.

자동 크기 조정을 사용하도록 설정하려면 다음 명령을 실행합니다.

from ray.util.spark import setup_ray_cluster

setup_ray_cluster(
  num_worker_nodes=8,
  autoscale=True,
  ... # other arguments
)

자동 크기 조정을 사용하는 num_worker_nodes 경우 최대 Ray 작업자 노드 수를 나타냅니다. Ray 작업자 노드의 기본 최소 수는 0입니다. 이 기본 설정은 Ray 클러스터가 유휴 상태일 때 Ray 작업자 노드가 0개까지 축소된다는 것을 의미합니다. 이는 모든 시나리오에서 빠른 응답성에 적합하지 않을 수 있지만 사용하도록 설정하면 비용을 크게 줄일 수 있습니다.

자동 크기 조정 모드 num_worker_nodes 에서는 .로 설정할 ray.util.spark.MAX_NUM_WORKER_NODES수 없습니다.

다음 인수는 업스케일링 및 다운스케일링 속도를 구성합니다.

  • autoscale_upscaling_speed 는 보류 중인 노드 수를 현재 노드 수의 배수로 나타냅니다. 값이 높을수록 업 스케일링이 더 공격적입니다. 예를 들어 1.0으로 설정된 경우 클러스터의 크기는 언제든지 최대 100% 증가할 수 있습니다.
  • autoscale_idle_timeout_minutes 는 자동 크기 조정기에서 유휴 작업자 노드를 제거하기 전에 통과해야 하는 시간(분)을 나타냅니다. 값이 작을수록 다운 스케일링이 더 공격적입니다.

Ray 2.9.0 이상을 사용하면 Ray 클러스터가 유휴 상태일 때 Ray 클러스터가 작업자 0으로 축소되지 않도록 설정할 autoscale_min_worker_nodes 수도 있습니다.

Ray 클라이언트를 사용하여 원격 Ray 클러스터에 커넥트

Ray 2.9.3에서 API를 호출하여 Ray 클러스터를 setup_ray_cluster 만듭니다. 동일한 Notebook에서 API를 ray.init() 호출하여 이 Ray 클러스터에 연결합니다.

전역 모드가 아닌 Ray 클러스터의 경우 다음 코드를 사용하여 원격 연결 문자열 가져옵니다.

다음을 사용하여 원격 연결 문자열 가져옵니다.

from ray.util.spark import setup_ray_cluster

_, remote_conn_str = setup_ray_cluster(num_worker_nodes=2, ...)

이 원격 연결 문자열 사용하여 원격 클러스터에 커넥트.

import ray
ray.init(remote_conn_str)

Ray 클라이언트는 모듈에 정의된 Ray 데이터 세트 API를 ray.data 지원하지 않습니다. 해결 방법으로 다음 코드와 같이 원격 광선 작업 내에서 Ray 데이터 세트 API를 호출하는 코드를 래핑할 수 있습니다.

import ray
import pandas as pd
ray.init("ray://<ray_head_node_ip>:10001")

@ray.remote
def ray_data_task():
    p1 = pd.DataFrame({'a': [3,4] * 10000, 'b': [5,6] * 10000})
    ds = ray.data.from_pandas(p1)
    return ds.repartition(4).to_pandas()

ray.get(ray_data_task.remote())

Spark DataFrame에서 데이터 로드

Spark DataFrame을 Ray 데이터 세트로 로드하려면 먼저 Spark DataFrame을 UC 볼륨 또는 Databricks Filesystem(사용되지 않음)에 Parquet 형식으로 저장해야 합니다. Databricks Filesystem 액세스를 안전하게 제어하기 위해 Databricks는 클라우드 개체 스토리지를 DBFS에 탑재하는 것이 좋습니다. 그런 다음, 다음 도우미 메서드를 ray.data.Dataset 사용하여 저장된 Spark DataFrame 경로에서 인스턴스를 만들 수 있습니다.

import ray
import os
from urllib.parse import urlparse

def create_ray_dataset_from_spark_dataframe(spark_dataframe, dbfs_tmp_path):
    spark_dataframe.write.mode('overwrite').parquet(dbfs_tmp_path)
    fuse_path = "/dbfs" + urlparse(dbfs_tmp_path).path
    return ray.data.read_parquet(fuse_path)

# For example, read a Delta Table as a Spark DataFrame
spark_df = spark.read.table("diviner_demo.diviner_pedestrians_data_500")

# Provide a dbfs location to write the table to
data_location_2 = (
    "dbfs:/home/example.user@databricks.com/data/ray_test/test_data_2"
)

# Convert the Spark DataFrame to a Ray dataset
ray_dataset = create_ray_dataset_from_spark_dataframe(
    spark_dataframe=spark_df,
    dbfs_tmp_path=data_location_2
)

Databricks SQL 웨어하우스를 통해 Unity 카탈로그 테이블에서 데이터 로드

Ray 2.8.0 이상의 경우 API를 ray.data.read_databricks_tables 호출하여 Databricks Unity 카탈로그 테이블에서 데이터를 로드할 수 있습니다.

먼저 환경 변수를 DATABRICKS_TOKEN Databricks 웨어하우스 액세스 토큰으로 설정해야 합니다. Databricks 런타임에서 프로그램을 실행하지 않는 경우 다음과 같이 환경 변수를 Databricks 작업 영역 URL로 설정합니다 DATABRICKS_HOST .

export DATABRICKS_HOST=adb-<workspace-id>.<random-number>.azuredatabricks.net

그런 다음 Databricks SQL 웨어하우스에서 읽기를 호출 ray.data.read_databricks_tables() 합니다.

import ray

ray_dataset = ray.data.read_databricks_tables(
    warehouse_id='...',  # Databricks SQL warehouse ID
    catalog='catalog_1',  # Unity catalog name
    schema='db_1',  # Schema name
    query="SELECT title, score FROM movie WHERE year >= 1980",
)

Ray 헤드 노드에서 사용하는 리소스 구성

기본적으로 Spark에서 Ray 구성의 경우 Databricks는 Ray 헤드 노드에 할당된 리소스를 다음으로 제한합니다.

  • CPU 코어 0개
  • GPU 0개
  • 128MB 힙 메모리
  • 128MB 개체 저장소 메모리

광선 헤드 노드는 일반적으로 광선 작업을 실행하는 것이 아니라 전역 조정에 사용되므로 발생합니다. Spark 드라이버 노드 리소스는 여러 사용자와 공유되므로 기본 설정은 Spark 드라이버 쪽에 리소스를 저장합니다.

Ray 2.8.0 이상을 사용하면 Ray 헤드 노드에서 사용하는 리소스를 구성할 수 있습니다. API에서 다음 인수를 setup_ray_cluster 사용합니다.

  • num_cpus_head_node: Ray 헤드 노드에서 사용하는 CPU 코어 설정
  • num_gpus_head_node: Ray 헤드 노드에서 사용하는 GPU 설정
  • object_store_memory_head_node: Ray 헤드 노드별 개체 저장소 메모리 크기 설정

다른 유형의 클러스터에 대한 지원

더 효율적이고 비용 효율적인 학습 실행을 위해 Spark 클러스터에서 Ray를 만들고 Ray 헤드 노드와 Ray 작업자 노드 간에 서로 다른 구성을 설정할 수 있습니다. 그러나 모든 Ray 작업자 노드에는 동일한 구성이 있어야 합니다. Databricks 클러스터는 다른 유형의 클러스터를 완전히 지원하지는 않지만 클러스터 정책을 설정하여 다른 드라이버 및 작업자 인스턴스 유형으로 Databricks 클러스터를 만들 수 있습니다.

예시:

{
  "node_type_id": {
    "type": "fixed",
    "value": "i3.xlarge"
  },
  "driver_node_type_id": {
    "type": "fixed",
    "value": "g4dn.xlarge"
  },
  "spark_version": {
    "type": "fixed",
    "value": "13.x-snapshot-gpu-ml-scala2.12"
  }
}

Ray 클러스터 구성 튜닝

각 Ray 작업자 노드에 권장되는 구성은 다음과 같습니다.

  • Ray 작업자 노드당 최소 4개의 CPU 코어.
  • 각 Ray 작업자 노드에 대한 최소 10GB 힙 메모리입니다.

호출ray.util.spark.setup_ray_cluster할 때 Databricks는 값 >= 4로 설정하는 num_cpus_worker_node 것이 좋습니다.

각 Ray 작업자 노드의 힙 메모리 튜닝에 대한 자세한 내용은 Ray 작업자 노드에 대한 메모리 할당을 참조하세요.

Ray 작업자 노드에 대한 메모리 할당

각 Ray 작업자 노드는 힙 메모리와 개체 저장소 메모리라는 두 가지 유형의 메모리를 사용합니다. 각 형식에 할당된 메모리 크기는 아래에 설명된 대로 결정됩니다.

각 Ray 작업자 노드에 할당된 총 메모리는 다음과 같습니다.

RAY_WORKER_NODE_TOTAL_MEMORY = (SPARK_WORKER_NODE_PHYSICAL_MEMORY / MAX_NUMBER_OF_LOCAL_RAY_WORKER_NODES * 0.8)

MAX_NUMBER_OF_LOCAL_RAY_WORKER_NODES 는 Spark 작업자 노드에서 시작할 수 있는 최대 Ray 작업자 노드 수입니다. 인수 또는 num_gpus_worker_node.에 num_cpus_worker_node 의해 결정됩니다.

인수 object_store_memory_per_node를 설정하지 않으면 각 Ray 작업자 노드에 할당된 힙 메모리 크기 및 개체 저장소 메모리 크기는 다음과 같습니다.

RAY_WORKER_NODE_HEAP_MEMORY = RAY_WORKER_NODE_TOTAL_MEMORY * 0.7
OBJECT_STORE_MEMORY_PER_NODE = RAY_WORKER_NODE_TOTAL_MEMORY * 0.3

인수 object_store_memory_per_node를 설정하는 경우:

RAY_WORKER_NODE_HEAP_MEMORY = RAY_WORKER_NODE_TOTAL_MEMORY - argument_object_store_memory_per_node

또한 레이 작업자 노드당 개체 저장소 메모리 크기는 운영 체제의 공유 메모리에 의해 제한됩니다. 최대값은 다음과 같습니다.

OBJECT_STORE_MEMORY_PER_NODE_CAP = (SPARK_WORKER_NODE_OS_SHARED_MEMORY / MAX_NUMBER_OF_LOCAL_RAY_WORKER_NODES * 0.8)

SPARK_WORKER_NODE_OS_SHARED_MEMORY/dev/shm Spark 작업자 노드에 대해 구성된 디스크 크기입니다.

모범 사례

각 Ray 작업자 노드에 대한 CPU/GPU 번호를 설정하는 방법

Databricks는 Spark 작업자 노드당 CPU 코어 수로 설정하고 num_cpus_worker_node Spark 작업자 노드당 GPU 수로 설정하는 num_gpus_worker_node 것이 좋습니다. 이 구성에서 각 Spark 작업자 노드는 Spark 작업자 노드의 리소스를 완전히 활용하는 하나의 Ray 작업자 노드를 시작합니다.

GPU 클러스터 구성

Ray 클러스터는 Databricks Spark 클러스터 위에서 실행됩니다. 일반적인 시나리오는 Spark 작업 및 Spark UDF를 사용하여 GPU 리소스가 필요하지 않은 간단한 데이터 전처리 작업을 수행하고 Ray를 사용하여 GPU를 활용하는 복잡한 기계 학습 작업을 실행하는 것입니다. 이 경우 Databricks는 모든 Spark DataFrame 변환 및 Spark UDF 실행에서 GPU 리소스를 0사용하지 않도록 Spark 클러스터 수준 구성 매개 변수 spark.task.resource.gpu.amount 를 설정하도록 권장합니다.

이 구성의 이점은 다음과 같습니다.

  • GPU 인스턴스 유형에는 일반적으로 GPU 디바이스보다 더 많은 CPU 코어가 있기 때문에 Spark 작업 병렬 처리가 증가합니다.
  • Spark 클러스터가 여러 사용자와 공유되는 경우 이 구성은 Spark 작업이 동시에 실행 중인 Ray 워크로드를 사용하여 GPU 리소스에 대해 경쟁하지 못하게 합니다.

Ray 작업에서 사용하는 경우 트레이너 mlflow 통합 사용 안 함 transformers

transformers 트레이너 MLflow 통합은 기본적으로 설정됩니다. Ray 학습을 사용하여 학습하는 경우 Databricks MLflow 서비스 자격 증명이 Ray 작업에 대해 구성되지 않아 Ray 작업이 실패합니다.

이 문제를 방지하려면 databricks 클러스터 구성에서 환경 변수를 'TRUE'로 설정합니다 DISABLE_MLFLOW_INTEGRATION . Ray 트레이너 작업에서 MLflow에 로그인하는 방법에 대한 자세한 내용은 "Ray 작업에서 MLflow 사용" 섹션을 참조하세요.

Ray 원격 함수 선택 오류 해결

Ray 작업을 실행하기 위해 Ray는 피클을 사용하여 작업 함수를 직렬화합니다. 선택기가 실패하면 코드에서 오류가 발생하는 줄을 결정합니다. 종종 명령을 작업 함수로 이동 import 하면 일반적인 선택 오류가 해결됩니다. 예를 들어 datasets.load_dataset Databricks 런타임 내에서 패치를 적용하여 외부 가져오기를 선택 취소할 수 있게 렌더링하는 널리 사용되는 함수입니다. 이 문제를 해결하려면 다음과 같이 코드를 업데이트할 수 있습니다.

def ray_task_func():
  from datasets import load_dataset  # import the function inside task function
  ...

OOM 오류로 인해 Ray 작업이 예기치 않게 중단된 경우 Ray 메모리 모니터를 사용하지 않도록 설정

Ray 2.9.3에서 Ray 메모리 모니터는 레이 태스크가 잘못 사망하는 문제를 알고 있습니다.

이 문제를 해결하려면 Databricks 클러스터 구성에서 환경 변수 RAY_memory_monitor_refresh_ms0 설정하여 Ray 메모리 모니터를 사용하지 않도록 설정합니다.

Spark 및 Ray 하이브리드 워크로드에 대한 메모리 리소스 구성

Databricks 클러스터에서 하이브리드 Spark 및 Ray 워크로드를 실행하는 경우 Databricks는 Databricks 클러스터 구성의 설정 spark.executor.memory 4g 과 같이 Spark 실행기 메모리를 작은 값으로 줄이는 것이 좋습니다. 이는 GC(가비지 수집)를 지연적으로 트리거하는 Java 프로세스 내에서 실행되는 Spark 실행기 때문입니다. Spark 데이터 세트 캐싱에 대한 메모리 압력이 다소 높아 Ray에서 사용할 수 있는 사용 가능한 메모리가 감소합니다. 잠재적인 OOM 오류를 방지하기 위해 Databricks는 구성된 'spark.executor.memory' 값을 기본값보다 작은 값으로 줄이는 것이 좋습니다.

Spark 및 Ray 하이브리드 워크로드에 대한 계산 리소스 구성

Databricks 클러스터에서 하이브리드 Spark 및 Ray 워크로드를 실행하는 경우 Spark 클러스터 노드를 자동 확장 가능으로 설정하거나, Ray 작업자 노드를 자동 확장 가능으로 설정하거나, 자동 크기 조정을 사용하도록 설정합니다.

예를 들어 Databricks 클러스터에 고정된 수의 작업자 노드가 있는 경우 Ray-on-Spark 자동 크기 조정을 사용하도록 설정하여 실행 중인 Ray 워크로드가 없으면 Ray 클러스터가 축소되도록 하는 것이 좋습니다. 결과적으로 유휴 클러스터 리소스는 Spark 작업에서 사용할 수 있도록 해제됩니다.

Spark 작업이 완료되고 Ray 작업이 시작되면 처리 요구에 맞게 스케일 업하도록 Ray-on-Spark 클러스터를 트리거합니다.

Databricks 클러스터와 Ray-on-spark 클러스터를 모두 자동으로 확장할 수 있습니다. 특히 Databricks 클러스터 자동 확장 가능 노드를 최대 10개의 노드로 구성하고, Ray-on-Spark 작업자 노드를 최대 4개의 노드(Spark 작업자당 하나의 Ray 작업자 노드 포함)로 구성할 수 있으므로 Spark는 Spark 작업에 대해 최대 6개의 노드를 할당할 수 있습니다. 즉, Ray 워크로드는 최대 4개의 노드 리소스를 동시에 사용할 수 있지만 Spark 작업은 최대 6개 노드의 리소스를 할당할 수 있습니다.

데이터 일괄 처리에 변환 함수 적용

데이터를 일괄 처리할 때 Databricks는 함수와 함께 map_batches Ray Data API를 사용하는 것이 좋습니다. 이 방법은 특히 큰 데이터 세트의 경우 또는 일괄 처리의 이점을 활용하는 복잡한 계산을 수행할 때 더 효율적이고 확장할 수 있습니다. 모든 Spark DataFrame은 API를 사용하여 ray.data.from_spark Ray 데이터로 변환할 수 있으며 API ray.data.write_databricks_table를 사용하여 databricks UC 테이블에 쓸 수 있습니다.

광선 작업에서 MLflow 사용

Ray 작업에서 MLflow를 사용하려면 다음을 구성합니다.

  • Ray 작업의 Databricks MLflow 자격 증명
  • MLflow는 생성된 값을 Ray 작업에 전달하는 Spark 드라이버 쪽에서 run_id 실행됩니다.

다음 코드는 예제입니다.

import mlflow
import ray
from mlflow.utils.databricks_utils import get_databricks_env_vars
mlflow_db_creds = get_databricks_env_vars("databricks")

experiment_name = "/Users/<your-name>@databricks.com/mlflow_test"
mlflow.set_experiment(experiment_name)

@ray.remote
def ray_task(x, run_id):
  import os
  os.environ.update(mlflow_db_creds)
  mlflow.set_experiment(experiment_name)
  # We need to use the run created in Spark driver side,
  # and set `nested=True` to make it a nested run inside the
  # parent run.
  with mlflow.start_run(run_id=run_id, nested=True):
    mlflow.log_metric(f"task_{x}_metric", x)
  return x

with mlflow.start_run() as run:  # create MLflow run in Spark driver side.
  results = ray.get([ray_task.remote(x, run.info.run_id) for x in range(10)])

Ray 작업에서 Notebook 범위가 지정된 Python 라이브러리 또는 클러스터 Python 라이브러리 사용

현재 Ray에는 Ray 작업에서 Notebook 범위 Python 라이브러리 또는 클러스터 Python 라이브러리를 사용할 수 없다는 알려진 문제가 있습니다. 이 제한을 해결하려면 Ray-on-Spark 클러스터를 시작하기 전에 Notebook에서 다음 명령을 실행합니다.

%pip install ray==<The Ray version you want to use> --force-reinstall

그런 다음 Notebook에서 다음 명령을 실행하여 Python 커널을 다시 시작합니다.

dbutils.library.restartPython()

Ray 대시보드 행위자 페이지에서 스택 추적 및 불꽃 그래프 사용

Ray 대시보드 행위자 페이지에서 활성 광선 행위자의 스택 추적 및 불꽃 그래프를 볼 수 있습니다.

이 정보를 보려면 Ray 클러스터를 시작하기 전에 설치 py-spy 합니다.

%pip install py-spy

Ray 클러스터 종료

Azure Databricks에서 실행되는 Ray 클러스터를 종료하려면 ray.utils.spark.shutdown_ray_cluster API를 호출합니다.

참고 항목

다음과 같은 경우 광선 클러스터도 종료됩니다.

  • Azure Databricks 클러스터에서 대화형 Notebook을 분리합니다.
  • Azure Databricks 작업이 완료됩니다.
  • Azure Databricks 클러스터가 다시 시작되거나 종료됩니다.
  • 지정된 유휴 시간에 대한 활동이 없습니다.

예제 Notebook

다음 Notebook에서는 Ray 클러스터를 만들고 Databricks에서 Ray 애플리케이션을 실행하는 방법을 보여 줍니다.

Spark 시작 Notebook의 Ray

전자 필기장 가져오기

제한 사항

  • 다중 사용자 공유 Azure Databricks 클러스터(격리 모드 사용)는 지원되지 않습니다.
  • %pip를 사용하여 패키지를 설치하는 경우 Ray 클러스터가 종료됩니다. %pip를 사용하여 모든 라이브러리 설치를 완료한 후 Ray를 시작해야 합니다.
  • 구성 ray.util.spark.setup_ray_cluster 을 재정의하는 통합을 사용하면 Ray 클러스터가 불안정해지고 Ray 컨텍스트가 충돌할 수 있습니다. 예를 들어 패키지를 사용하고 Ray 클러스터 구성을 초과하는 행위자 또는 cpus_per_actor 구성에서 설정을 RayParams 사용하면 xgboost_ray Ray 클러스터가 자동으로 충돌할 수 있습니다.