[diffusion-planner] nuplan/planning/script/utils.py

ad_official·2025년 3월 4일

diffusion planning

목록 보기
14/19



1. set_up_common_builder

  • 시뮬레이션 실행에 필요한 여러 공통 리소스(작업자, 콜백, 출력 폴더, 프로파일러 등)를 한 번에 초기화하고 반환하여,
    • 이후 시뮬레이션 과정에서 이들을 재사용할 수 있도록 준비하는 역할

1.0. 두괄식 정리

  • 아래 작업을 하는 4가지 콜백을 관리하는 객체 생성
    • 시뮬레이션 시간 측정
    • metric 기반 평가 결과가 시나리오 별로 되어있는데, 통합
    • 결과를 visualize하여 pdf형태의 분석 파일로 저장
  • 로깅 환경을 구성
  • 멀티스레딩이나 분산 실행을 위한 작업자 풀을 만듦
  • 시뮬레이션 결과 및 로그를 저장할 출력 폴더를 생성
  • 프로파일링


구체적인 내용

  1. 멀티 콜백 생성 및 초기화:

    • build_main_multi_callback(cfg)를 호출하여
      • 여러 콜백들을 관리하는 객체(multi_main_callback)를 만듭니다.
        • 시뮬레이션 시간 측정
        • metric 기반 평가 결과가 시나리오 별로 되어있는데, 통합
        • 결과를 visualize하여 pdf형태의 분석 파일로 저장
    • 이후 multi_main_callback.on_run_simulation_start()를 호출해
      • 시뮬레이션 실행 시작 전 초기 작업을 수행
  2. 설정 업데이트:

    • update_config_for_simulation(cfg)를 사용해
      • 시뮬레이션 실행에 맞게 설정(cfg)을 업데이트하고 오버라이드
  3. 로깅 설정:

    • build_logger(cfg)를 호출하여 로깅 환경을 구성
  4. 작업자(Worker) 풀 구성:

    • build_worker(cfg)를 통해 멀티스레딩이나 분산 실행을 위한 작업자 풀을 만듦
  5. 출력 폴더 생성:

    • build_simulation_experiment_folder(cfg)를 통해
      • 시뮬레이션 결과 및 로그를 저장할 출력 폴더를 생성
    • 이후 cfg.output_dir에서 실제 출력 경로를 가져와 output_dir 변수에 저장
  6. 프로파일러 설정 (옵션):

    • 만약 설정(cfg)에서 프로파일링이 활성화되어 있다면,
      • ProfileCallback 객체를 생성해 출력 폴더를 지정
    • 프로파일러가 있다면,
      • profiler.start_profiler(profiler_name)로 시뮬레이션 구성 과정을 프로파일링하기 시작
  7. 공통 빌더 반환:

    • 위에서 생성한 작업자 풀, 콜백 객체, 출력 경로, 프로파일러를 CommonBuilder 데이터 클래스에 담아 반환합니다.



2. build_main_multi_callback

  • 참고로 nuplan/planning/script/builders/main_callback_builder.py 에 있음
  • 이 함수의 목적은
    • 실험 실행 시 여러 "메인 콜백"들을 하나로 묶어 관리하는 MultiMainCallback 객체를 생성
    • 여러 개의 메인 콜백들을 통합하여, 시뮬레이션 실행 중에 일괄적으로 호출하거나 관리


구체적인 로직

  1. 설정 파일에서 콜백 정보 읽기:
    • 입력으로 받은 설정 객체(cfg)에서 cfg.main_callback 항목에 정의된 모든 콜백 설정을 순회
  - main_callback:
      - time_callback
      - metric_file_callback
      - metric_aggregator_callback
      - metric_summary_callback
  1. 각 콜백 인스턴스 생성:

    • 각 콜백 설정에 대해, 만약 설정된 콜백이 MetricAggregatorCallback 타입이면,
      • 먼저 build_metrics_aggregators(cfg)를 호출하여 metric aggregators(메트릭 집계자)를 생성한 후,
      • 해당 metric aggregators를 인자로 전달하여 콜백 인스턴스를 생성
    • 그렇지 않은 경우에는 단순히 Hydra의 instantiate 함수를 사용해 콜백 인스턴스를 생성
  2. MultiMainCallback 생성:

    • 모든 콜백 인스턴스를 리스트에 모은 뒤, 이 리스트를 인자로 MultiMainCallback 객체를 생성
  3. 로깅 및 반환:

    • 생성된 MultiMainCallback의 개수를 로그로 출력한 후, 해당 객체를 반환



4개 콜백

  • nuplan.planning.simulation.main_callback.time_callback.TimeCallback
  • nuplan.planning.simulation.main_callback.metric_file_callback.MetricFileCallback
  • nuplan.planning.simulation.main_callback.metric_aggregator_callback.MetricAggregatorCallback
  • nuplan.planning.simulation.main_callback.metric_summary_callback.MetricSummaryCallback

1. TimeCallback

  • 역할:
    시뮬레이션 전체 실행 시간을 측정하고 기록
  • 기능:
    • on_run_simulation_start:
      시뮬레이션 시작 시 time.perf_counter()를 사용하여 시작 시간을 저장
    • on_run_simulation_end:
      시뮬레이션 종료 시 종료 시간을 측정하고, 시작 시간과의 차이를 계산하여 총 실행 시간을 로그에 출력

2. MetricFileCallback

  • 역할:
    각 시나리오 별로 생성된 개별 메트릭 파일(JSON)들을, 하나의 통합된 메트릭 파일(Parquet 형식)로 결합

  • 기능:

    • 지정된 여러 디렉토리(경로 목록)에서 JSON 파일 형식의 시나리오 메트릭 데이터를 읽어옵니다.
    • 각 메트릭 파일의 내용을 판다스 데이터프레임으로 변환한 후, 이를 하나의 데이터프레임으로 통합합니다.
    • 통합된 데이터프레임에 시뮬레이션 소요 시간을 추가하고, 최종 결과를 지정된 출력 경로에 Parquet 파일로 저장
    • 옵션에 따라 개별 시나리오 메트릭 파일들을 삭제할 수 있습니다.

3. MetricAggregatorCallback

  • 역할:

    • 통합된 메트릭 파일들을 기반으로 메트릭 집계(aggregator)를 수행
  • 기능:

    • 지정된 메트릭 저장 경로에서 Parquet 파일들을 읽어,
      • 각 파일의 데이터를 MetricStatisticsDataFrame 형식으로 로드
    • 읽어온 메트릭 파일들을 챌린지(또는 전체) 기준으로 필터링하고, 각 메트릭 집계기를 실행하여 결과를 도출
    • 집계 작업의 진행 상황과 소요 시간을 로그에 기록

4. MetricSummaryCallback

  • 역할:
    시뮬레이션 결과로 생성된 메트릭 데이터를 시각화하여, 히스토그램 형태의 요약 리포트를 PDF 파일로 생성

  • 기능:

    • 지정된 경로에서 메트릭 통계 파일메트릭 집계 파일들을 읽어옵니다.
    • 각 메트릭 데이터에 대해 히스토그램 데이터를 집계하고, 히스토그램의 경계(빈, bins)를 계산
    • 플래너별 색상을 할당하여 여러 히스토그램을 Matplotlib을 사용해 그립니다.
    • 생성된 여러 히스토그램 플롯들을 하나의 PDF 파일로 저장합니다.
    • 전체 요약 작업에 걸린 시간을 로그에 기록합니다.

이와 같이, 각 콜백 클래스는 시뮬레이션 실행 전후에 필요한 작업(시간 측정, 메트릭 파일 통합, 집계 및 시각화)을 자동으로 수행하여, 시뮬레이션 결과 분석 및 리포팅을 체계적으로 지원합니다.

profile
ad_official

0개의 댓글