CI 성능 기준선
CI 성능 기준선 (CI Performance Baselines)
이 페이지는 CI(지속적 통합)에서 사용하는 확산 성능 기준선(baseline)을 생성하고 업데이트하는 방법을 설명해요. 순차 요청 검사, 성능 기준선 생성 스크립트, 야간(nightly) 비교 텔레메트리 등 테스트 파이프라인을 관리하는 데 필요한 내용을 다뤄요.
출처: 문서
본문
순차 요청 검사 (Sequential Request Checks)
서버 케이스는 서버를 재시작하지 않고 요청 간 상태(request-to-request state)를 테스트할 수 있어요:
DiffusionTestCase(
id="image_t2i",
server_args=server_args,
sampling_params=sampling_params,
perf_repeat_requests=2,
)
첫 번째 요청을 포함해 모든 요청이 검사돼요. 성능 검사에는 load/runtime 피크 메모리가 포함되고, expect_audio_output=True일 때 일관성 검사에는 오디오가 포함돼요. 요청 중 하나가 실패하면 다른 하나가 성공해도 케이스는 실패해요. 보고서는 첫 번째 결과를 두 번째로 덮어쓰는 대신 요청 인덱스를 유지해요.
워크로드를 작게 유지하되, 샘플링 파라미터가 변경될 때마다 기준선(baselines)과 GT를 재생성해요. MiniMax-H3 T2VA와 ref2va는 서로 다른 체크포인트 파티션을 사용하므로 별도 케이스로 유지되며, 각각 자체 서버에 두 개의 요청을 보내요. T2VA 케이스에는 요청 간 가중치 복원(weight restoration)을 테스트하기 위한 VAE 레이어 단위 offload가 포함되고, ref2va는 상주 VAE(resident VAE) 경로를 유지해요.
SGLANG_GEN_BASELINE=1 pytest -s ... -k <case_id>를 사용해 동일한 순차 순서로 기준선을 수집하며, 각 메트릭의 최악 관측값을 유지해요.
SGLANG_GT_OUTPUT_DIR과 함께 SGLANG_GEN_GT=1을 사용하면 GT를 저장하며, 반복 요청은 하나의 GT를 공유해요.
성능 기준선 생성 스크립트 (Perf Baseline Generation Script)
python/sglang/multimodal_gen/test/scripts/gen_perf_baselines.py는 로컬 확산 서버를 시작하고, 선택된 테스트 케이스에 요청을 보내며, 퍼프 로그에서 stage/denoise-step/E2E 타이밍을 집계하고, 결과를 perf_baselines.json의 scenarios 섹션에 다시 써요.
사용법 (Usage)
단일 케이스 업데이트:
python python/sglang/multimodal_gen/test/scripts/gen_perf_baselines.py --case qwen_image_t2i
정규식으로 선택:
python python/sglang/multimodal_gen/test/scripts/gen_perf_baselines.py --match 'qwen_image_.*'
기준선 파일 scenarios의 모든 키 실행:
python python/sglang/multimodal_gen/test/scripts/gen_perf_baselines.py --all-from-baseline
입출력 경로와 타임아웃 지정:
python python/sglang/multimodal_gen/test/scripts/gen_perf_baselines.py --baseline python/sglang/multimodal_gen/test/server/perf_baselines.json --out /tmp/perf_baselines.json --timeout 600
야간 비교 텔레메트리 (Nightly Comparison Telemetry)
야간 비교는 세 번의 클라이언트 측 측정값의 중앙값을 보고해요. SGLang 요청은 스테이지 단위 타이밍을 위해 서버 퍼프 덤프도 기록해요. 읽을 수 없는 덤프는 완료된 클라이언트 측정을 무효화하지 않지만, 대시보드는 서버 샘플 커버리지(예: 2/3)를 보고하고 서버 총계와 스테이지 중앙값을 읽을 수 있는 덤프에서만 계산해요. 불완전한 커버리지는 그 자체로 성능 회귀가 아닌 텔레메트리 경고로 취급해요.