모니터 시뮬레이션

Flower를 사용하면 시뮬레이션을 실행하는 동안 시스템 리소스를 모니터링할 수 있습니다. 또한 Flower 시뮬레이션 엔진은 강력하며 클라이언트별 리소스 할당 방법을 결정하고 총 사용량을 제한할 수 있습니다. 리소스 소비에 대한 인사이트를 통해 더 현명한 결정을 내리고 실행 시간을 단축할 수 있습니다.

구체적인 지침은 macOS를 사용 중이고 ‘Homebrew <https://brew.sh/>`_ 패키지 관리자가 설치되어 있다고 가정합니다.

다운로드

brew install prometheus grafana

`Prometheus <https://prometheus.io/>`_는 데이터 수집에 사용되며, `Grafana <https://grafana.com/>`_는 수집된 데이터를 시각화할 수 있게 해줍니다. 이 두 도구는 모두 Flower가 내부적으로 사용하는 `Ray <https://www.ray.io/>`_와 잘 통합되어 있습니다.

구성 파일을 덮어씁니다(장치에 따라 다른 경로에 설치되어 있을 수 있음).

M1 Mac을 사용 중이라면:

/opt/homebrew/etc/prometheus.yml
/opt/homebrew/etc/grafana/grafana.ini

이전 세대 Intel Mac 장치에서는:

/usr/local/etc/prometheus.yml
/usr/local/etc/grafana/grafana.ini

각 구성 파일을 열고 변경합니다. 장치에 따라 다음 두 명령 중 하나를 사용합니다:

# M1 macOS
open /opt/homebrew/etc/prometheus.yml

# Intel macOS
open /usr/local/etc/prometheus.yml

를 입력한 다음 파일의 모든 텍스트를 삭제하고 아래에 표시된 새 Prometheus 설정을 붙여넣습니다. 요구 사항에 따라 시간 간격을 조정할 수 있습니다:

global:
  scrape_interval: 1s
  evaluation_interval: 1s

scrape_configs:
# Scrape from each ray node as defined in the service_discovery.json provided by ray.
- job_name: 'ray'
  file_sd_configs:
  - files:
    - '/tmp/ray/prom_metrics_service_discovery.json'

이제 Prometheus 구성을 편집한 후 Grafana 구성 파일에 대해서도 동일한 작업을 수행합니다. 이전과 마찬가지로 다음 명령 중 하나를 사용하여 파일을 엽니다:

# M1 macOS
open / opt / homebrew / etc / grafana / grafana.ini

# Intel macOS
open / usr / local / etc / grafana / grafana.ini

터미널 편집기가 열리면 이전과 마찬가지로 다음 구성을 적용할 수 있습니다.

[security]
allow_embedding = true

[auth.anonymous]
enabled = true
org_name = Main Org.
org_role = Viewer

[paths]
provisioning = /tmp/ray/session_latest/metrics/grafana/provisioning

축하합니다. 매트릭 트레킹에 필요한 모든 소프트웨어를 다운로드하셨습니다. 이제 시작해 보겠습니다.

매트릭 트래킹

Flower 시뮬레이션을 실행하기 전에 방금 설치 및 구성한 모니터링 도구를 시작해야 합니다.

brew services start prometheus
brew services start grafana

시뮬레이션을 시작할 때 Python 코드에 다음 전달인자를 포함하세요.

fl.simulation.start_simulation(
    # ...
    # all the args you used before
    # ...
    ray_init_args={"include_dashboard": True}
)

이제 워크로드를 시작할 준비가 되었습니다.

시뮬레이션이 시작되고 얼마 지나지 않아 터미널에 다음 로그가 표시됩니다:

2023-01-20 16:22:58,620       INFO [worker.py:1529](http://worker.py:1529/) -- Started a local Ray instance. View the dashboard at http://127.0.0.1:8265

You can look at everything at http://127.0.0.1:8265 .

Ray 대시보드입니다. 메트릭(왼쪽 패널의 가장 아래 옵션)으로 이동할 수 있습니다.

또는 오른쪽 위 모서리인 “Grafana에서 보기”를 클릭하여 Grafana에서 바로 확인할 수도 있습니다. Ray 대시보드는 시뮬레이션 중에만 액세스할 수 있다는 점에 유의하세요. 시뮬레이션이 종료된 후에는 Grafana를 사용하여 메트릭을 탐색할 수만 있습니다. ``http://localhost:3000/``로 이동하여 Grafana를 시작할 수 있습니다.

After you finish the visualization, stop Prometheus and Grafana. This is important as they will otherwise block, for example port 3000 on your machine as long as they are running.

brew services stop prometheus
brew services stop grafana

리소스 할당

Ray 라이브러리가 어떻게 작동하는지 이해해야 시뮬레이션 클라이언트에 시스템 리소스를 효율적으로 할당할 수 있습니다.

처음에 시뮬레이션(Ray가 내부에서 처리하는)은 기본적으로 시스템에서 사용 가능한 모든 리소스를 사용하여 시작되며, 이 리소스는 클라이언트 간에 공유됩니다. 그렇다고 해서 모든 클라이언트에게 균등하게 분배하거나 모든 클라이언트에서 동시에 모델 학습이 이루어지는 것은 아닙니다. 이에 대한 자세한 내용은 이 블로그의 뒷부분에서 설명합니다. 다음을 실행하여 시스템 리소스를 확인할 수 있습니다:

import ray

ray.available_resources()

Google Colab에서는 이와 유사한 결과가 표시될 수 있습니다:

{'memory': 8020104807.0,
 'GPU': 1.0,
 'object_store_memory': 4010052403.0,
 'CPU': 2.0,
 'accelerator_type:T4': 1.0,
 'node:172.28.0.2': 1.0}

그러나 기본값을 덮어쓸 수 있습니다. 시뮬레이션을 시작할 때 다음을 수행합니다(모두 덮어쓸 필요는 없음):

num_cpus = 2
num_gpus = 1
ram_memory = 16_000 * 1024 * 1024  # 16 GB
fl.simulation.start_simulation(
    # ...
    # all the args you were specifying before
    # ...
    ray_init_args={
        "include_dashboard": True,  # we need this one for tracking
        "num_cpus": num_cpus,
        "num_gpus": num_gpus,
        "memory": ram_memory,
    }
)

단일 클라이언트에 대한 리소스도 지정해 보겠습니다.

# Total resources for simulation
num_cpus = 4
num_gpus = 1
ram_memory = 16_000 * 1024 * 1024  # 16 GB

# Single client resources
client_num_cpus = 2
client_num_gpus = 1

fl.simulation.start_simulation(
    # ...
    # all the args you were specifying before
    # ...
    ray_init_args={
        "include_dashboard": True,  # we need this one for tracking
        "num_cpus": num_cpus,
        "num_gpus": num_gpus,
        "memory": ram_memory,
    },
    # The argument below is new
    client_resources={
        "num_cpus": client_num_cpus,
        "num_gpus": client_num_gpus,
    },
)

이제 중요한 부분이 나옵니다. Ray는 리소스가 허용하는 경우에만 필요한 모든 리소스가 있을 때(병렬로 실행되는 등) 새 클라이언트를 시작합니다.

In the example above, only one client will be run, so your clients won’t run concurrently. Setting client_num_gpus = 0.5 would allow running two clients and therefore enable them to run concurrently. Be careful not to require more resources than available. If you specified client_num_gpus = 2, the simulation wouldn’t start (even if you had 2 GPUs but decided to set 1 in ray_init_args).

자주 묻는 질문

질문: 기록된 메트릭이 보이지 않습니다.

A: 기간이 제대로 설정되지 않았을 수 있습니다. 설정은 오른쪽 상단에 있습니다(기본값은 ‘지난 30분’). 시뮬레이션이 실행된 기간을 반영하도록 기간을 변경해 주세요.

질문: “Grafana 서버가 감지되지 않았습니다. Ray 대시보드의 메트릭 탭으로 이동한 후 Grafana 서버가 실행 중인지 확인하고 이 페이지를 새로고침하세요.”라는 메시지가 표시됩니다.

A: Grafana가 실행되고 있지 않을 수 있습니다. 실행 중인 서비스를 확인하세요

brew services list

Q: I see “This site can’t be reached” when going to http://127.0.0.1:8265.

A: 시뮬레이션이 이미 완료되었거나 아직 Prometheus를 시작해야 합니다.

리소스

Ray Dashboard: https://docs.ray.io/en/latest/ray-observability/getting-started.html

Ray Metrics: https://docs.ray.io/en/latest/cluster/metrics.html