프로파일링

프로파일링 (Profiling)

이 페이지는 PyTorch Profiler와 Nsight Systems로 SGLang 확산 워크로드를 프로파일링하는 방법을 설명해요. 멀티모달 생성 파이프라인의 디노이징 단계나 전체 파이프라인을 프로파일링하고, 트레이스 파일을 시각화하는 방법까지 다뤄요.

출처: 문서

본문

이 가이드는 SGLang의 멀티모달 생성 파이프라인 프로파일링 기법을 다뤄요.

PyTorch Profiler

PyTorch Profiler는 상세한 커널 실행 시간, 콜 스택, GPU 사용률 메트릭을 제공해요.

디노이징 단계 프로파일링 (Denoising Stage Profiling)

샘플링된 타임스텝으로 디노이징 단계 프로파일링(기본값: 1개 워밍업 스텝 후 5개 스텝):

sglang generate \
  --model-path Qwen/Qwen-Image \
  --prompt "A Logo With Bold Large Text: SGL Diffusion" \
  --seed 0 \
  --profile

파라미터:

  • --profile: 디노이징 단계에 대한 프로파일링 활성화
  • --num-profiled-timesteps N: 워밍업 후 프로파일링할 타임스텝 수 (기본값: 5)
    • 값이 작을수록 트레이스 파일 크기가 줄어요
    • 예: --num-profiled-timesteps 10은 1개 워밍업 스텝 후 10개 스텝을 프로파일링해요

전체 파이프라인 프로파일링 (Full Pipeline Profiling)

모든 파이프라인 단계(텍스트 인코딩, 디노이징, VAE 디코딩 등) 프로파일링:

sglang generate \
  --model-path Qwen/Qwen-Image \
  --prompt "A Logo With Bold Large Text: SGL Diffusion" \
  --seed 0 \
  --profile \
  --profile-all-stages

파라미터:

  • --profile-all-stages: --profile과 함께 사용. 디노이징만이 아닌 모든 파이프라인 단계를 프로파일링

출력 위치 (Output Location)

기본적으로 트레이스 파일은 ./logs/ 디렉터리에 저장돼요.

정확한 출력 파일 경로는 콘솔 출력에 표시돼요. 예를 들면:

[mm-dd hh:mm:ss] Saved profiler traces to: /sgl-workspace/sglang/logs/mocked_fake_id_for_offline_generate-5_steps-global-rank0.trace.json.gz

트레이스 보기 (View Traces)

트레이스 파일을 다음에서 로드하고 시각화해요:

큰 트레이스 파일의 경우 --num-profiled-timesteps를 줄이거나 --profile-all-stages 사용을 피하세요.

--perf-dump-path (Stage/Step 타이밍 덤프)

프로파일러 트레이스 외에도 다음을 포함하는 가벼운 JSON 보고서를 덤프할 수 있어요:

  • 전체 파이프라인의 단계 단위(stage-level) 타이밍 분해
  • 디노이징 단계의 스텝 단위(step-level) 타이밍 분해 (확산 스텝별)

이는 어떤 단계가 엔드투엔드 지연 시간을 지배하는지, 그리고 디노이징 스텝이 균일한 실행 시간을 가지는지(그렇지 않다면 어떤 스텝에 비정상적인 스파이크가 있는지)를 빠르게 식별하는 데 유용해요.

덤프된 JSON에는 denoise_steps_ms 필드가 있으며, 각각 step 키(스텝 인덱스)와 duration_ms 키를 가진 객체 배열로 형식화돼요.

예시:

sglang generate \
  --model-path <MODEL_PATH_OR_ID> \
  --prompt "<PROMPT>" \
  --perf-dump-path perf.json

Nsight Systems

Nsight Systems는 커널 상세 정보, 레지스터 사용량, 메모리 액세스 패턴을 포함한 저수준 CUDA 프로파일링을 제공해요.

설치 (Installation)

설치 지침은 SGLang 프로파일링 가이드를 참고해 주세요.

기본 프로파일링 (Basic Profiling)

전체 파이프라인 실행 프로파일링:

nsys profile \
  --trace-fork-before-exec=true \
  --cuda-graph-trace=node \
  --force-overwrite=true \
  -o QwenImage \
  sglang generate \
    --model-path Qwen/Qwen-Image \
    --prompt "A Logo With Bold Large Text: SGL Diffusion" \
    --seed 0

대상 단계 프로파일링 (Targeted Stage Profiling)

--delay--duration로 특정 단계를 캡처하고 파일 크기를 줄여요:

nsys profile \
  --trace-fork-before-exec=true \
  --cuda-graph-trace=node \
  --force-overwrite=true \
  --delay 10 \
  --duration 30 \
  -o QwenImage_denoising \
  sglang generate \
    --model-path Qwen/Qwen-Image \
    --prompt "A Logo With Bold Large Text: SGL Diffusion" \
    --seed 0

파라미터:

  • --delay N: 캡처 시작 전 N초 대기 (초기화 오버헤드 건너뛰기)
  • --duration N: N초 동안 캡처 (특정 단계에 집중)
  • --force-overwrite: 기존 출력 파일 덮어쓰기

참고 사항 (Notes)

  • 트레이스 크기 줄이기: --num-profiled-timesteps를 더 작은 값으로 사용하거나 Nsight Systems에서 --delay/--duration 사용
  • 단계별 분석: 디노이징 단계만 보려면 --profile 단독 사용, 전체 파이프라인은 --profile-all-stages 추가
  • 여러 번 실행: 서로 다른 프롬프트와 해상도로 프로파일링해 워크로드 전반의 병목을 식별

FAQ

  • Nsight Systems로 sglang generate를 프로파일링할 때 생성된 프로파일러 파일에 CUDA 커널이 캡처되지 않았다면, 모델의 추론 스텝 수를 늘려 실행 시간을 연장하면 이 문제를 해결할 수 있어요.

더 알아보기