모니터 시뮬레이션#
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
http://127.0.0.1:8265 에서 모든 것을 볼 수 있습니다.
Ray 대시보드입니다. 메트릭(왼쪽 패널의 가장 아래 옵션)으로 이동할 수 있습니다.
또는 오른쪽 위 모서리인 “Grafana에서 보기”를 클릭하여 Grafana에서 바로 확인할 수도 있습니다. Ray 대시보드는 시뮬레이션 중에만 액세스할 수 있다는 점에 유의하세요. 시뮬레이션이 종료된 후에는 Grafana를 사용하여 메트릭을 탐색할 수만 있습니다. ``http://localhost:3000/``로 이동하여 Grafana를 시작할 수 있습니다.
시각화를 완료한 후에는 Prometheus와 Grafana를 중지합니다. 그렇지 않으면 실행 중인 동안 컴퓨터에서 포트 3000
등을 차단하므로 이 작업이 중요합니다.
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는 리소스가 허용하는 경우에만 필요한 모든 리소스가 있을 때(병렬로 실행되는 등) 새 클라이언트를 시작합니다.
위의 예에서는 하나의 클라이언트만 실행되므로 클라이언트가 동시에 실행되지 않습니다. client_num_gpus = 0.5
를 설정하면 두 개의 클라이언트를 실행할 수 있으므로 동시에 실행할 수 있습니다. 사용 가능한 리소스보다 더 많은 리소스를 요구하지 않도록 주의하세요. :code:`client_num_gpus = 2`를 지정하면 시뮬레이션이 시작되지 않습니다(GPU가 2개이지만 :code:`ray_init_args`에서 1개를 설정한 경우에도 마찬가지입니다).
자주 묻는 질문#
질문: 기록된 메트릭이 보이지 않습니다.
A: 기간이 제대로 설정되지 않았을 수 있습니다. 설정은 오른쪽 상단에 있습니다(기본값은 ‘지난 30분’). 시뮬레이션이 실행된 기간을 반영하도록 기간을 변경해 주세요.
질문: “Grafana 서버가 감지되지 않았습니다. Ray 대시보드의 메트릭 탭으로 이동한 후 Grafana 서버가 실행 중인지 확인하고 이 페이지를 새로고침하세요.”라는 메시지가 표시됩니다.
A: Grafana가 실행되고 있지 않을 수 있습니다. 실행 중인 서비스를 확인하세요
brew services list
Q: `<http://127.0.0.1:8265>`_로 이동할 때 “이 사이트에 연결할 수 없습니다.”라는 메시지가 표시됩니다.
A: 시뮬레이션이 이미 완료되었거나 아직 Prometheus를 시작해야 합니다.
리소스#
Ray 대시보드: https://docs.ray.io/en/latest/ray-observability/getting-started.html