94057c3d3e
PR Test (NPU) / check-changes (push) Has been cancelled
PR Test (NPU) / pr-gate (push) Has been cancelled
PR Test (NPU) / set-image-config (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-4-npu-a3 (push) Has been cancelled
PR Test (NPU) / stage-b-test-16-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-1-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-2-npu-a3 (push) Has been cancelled
PR Test (Arm64) / pr-gate (push) Has been cancelled
PR Test (Arm64) / check-changes (push) Has been cancelled
PR Test (Arm64) / build-test (push) Has been cancelled
PR Test (sgl-router) / gate (push) Has been cancelled
PR Test (sgl-router) / tier-1 — lint (push) Has been cancelled
PR Test (sgl-router) / tier-2 — build + test (push) Has been cancelled
PR Test (sgl-router) / tier-3 — docker (placeholder) (push) Has been cancelled
PR Test (sgl-router) / tier-3 — k8s integration (push) Has been cancelled
PR Test (sgl-router) / tier-3 — e2e (push) Has been cancelled
PR Test (sgl-router) / finish (push) Has been cancelled
PR Test (NPU) / single-node-poc (map[name:qwen3_6_27b_w8a8_1p_in64k_out1k_50ms runner:linux-aarch64-a3-2 test_case:test/registered/ascend/performance/qwen3_6_27b/test_npu_qwen3_6_27b_w8a8_1p_in64k_out1k_50ms.py test_type:perf]) (push) Has been cancelled
PR Test (NPU) / pr-test-npu-finish (push) Has been cancelled
PR Test (Xeon) / pr-gate (push) Has been cancelled
PR Test (Xeon) / check-changes (push) Has been cancelled
PR Test (Xeon) / build-test (, xeon-gnr, base-b-test-cpu) (push) Has been cancelled
PR Test (XPU) / check-changes (push) Has been cancelled
PR Test (XPU) / pr-gate (push) Has been cancelled
PR Test (XPU) / stage-a-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / wait-for-stage-a (push) Has been cancelled
PR Test (XPU) / stage-b-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / finish (push) Has been cancelled
CI Model Inventory / build-inventory (push) Has been cancelled
Lint / lint (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Compilation Check (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Manual Policy (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Request Processing (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Summary (push) Has been cancelled
PR Test (SMG) / build-wheel (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on windows (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (x86_64 - auto) (push) Has been cancelled
PR Test (SMG) / python-unit-tests (push) Has been cancelled
PR Test (SMG) / unit-tests (push) Has been cancelled
PR Test (SMG) / benchmarks (push) Has been cancelled
PR Test (SMG) / chat-completions (push) Has been cancelled
PR Test (SMG) / chat-completions-4gpu (push) Has been cancelled
PR Test (SMG) / e2e (push) Has been cancelled
PR Test (SMG) / docker-build-test (push) Has been cancelled
PR Test (SMG) / k8s-integration (push) Has been cancelled
PR Test (SMG) / finish (push) Has been cancelled
PR Test (SMG) / summarize-benchmarks (push) Has been cancelled
Release SGLang Model Gateway Docker Image / publish (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Build SDist (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Upload to PyPI (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (aarch64, 12.9, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (x86_64, 12.9, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu129 (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (aarch64, 13.0, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (x86_64, 13.0, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu130 (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 700) (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 720) (push) Has been cancelled
Release SGLang Kernels / release-rocm700 (push) Has been cancelled
Release SGLang Kernels / release-rocm720 (push) Has been cancelled
Release SGLang Kernels / build-musa43 (43, 3.10) (push) Has been cancelled
Release SGLang Kernels / release-musa43 (push) Has been cancelled
137 lines
4.3 KiB
Markdown
137 lines
4.3 KiB
Markdown
# Profiling Multimodal Generation
|
|
|
|
This guide covers profiling techniques for multimodal generation pipelines in SGLang.
|
|
|
|
## PyTorch Profiler
|
|
|
|
PyTorch Profiler provides detailed kernel execution time, call stack, and GPU utilization metrics.
|
|
|
|
### Denoising Stage Profiling
|
|
|
|
Profile the denoising stage with sampled timesteps (default: 5 steps after 1 warmup step):
|
|
|
|
```bash
|
|
sglang generate \
|
|
--model-path Qwen/Qwen-Image \
|
|
--prompt "A Logo With Bold Large Text: SGL Diffusion" \
|
|
--seed 0 \
|
|
--profile
|
|
```
|
|
|
|
**Parameters:**
|
|
- `--profile`: Enable profiling for the denoising stage
|
|
- `--num-profiled-timesteps N`: Number of timesteps to profile after warmup (default: 5)
|
|
- Smaller values reduce trace file size
|
|
- Example: `--num-profiled-timesteps 10` profiles 10 steps after 1 warmup step
|
|
|
|
### Full Pipeline Profiling
|
|
|
|
Profile all pipeline stages (text encoding, denoising, VAE decoding, etc.):
|
|
|
|
```bash
|
|
sglang generate \
|
|
--model-path Qwen/Qwen-Image \
|
|
--prompt "A Logo With Bold Large Text: SGL Diffusion" \
|
|
--seed 0 \
|
|
--profile \
|
|
--profile-all-stages
|
|
```
|
|
|
|
**Parameters:**
|
|
- `--profile-all-stages`: Used with `--profile`, profile all pipeline stages instead of just denoising
|
|
|
|
### Output Location
|
|
|
|
By default, trace files are saved in the ./logs/ directory.
|
|
|
|
The exact output file path will be shown in the console output, for example:
|
|
|
|
```bash
|
|
[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
|
|
|
|
Load and visualize trace files at:
|
|
- https://ui.perfetto.dev/ (recommended)
|
|
- chrome://tracing (Chrome only)
|
|
|
|
For large trace files, reduce `--num-profiled-timesteps` or avoid using `--profile-all-stages`.
|
|
|
|
|
|
### `--perf-dump-path` (Stage/Step Timing Dump)
|
|
|
|
Besides profiler traces, you can also dump a lightweight JSON report that contains:
|
|
- stage-level timing breakdown for the full pipeline
|
|
- step-level timing breakdown for the denoising stage (per diffusion step)
|
|
|
|
This is useful to quickly identify which stage dominates end-to-end latency, and whether denoising steps have uniform runtimes (and if not, which step has an abnormal spike).
|
|
|
|
The dumped JSON contains a `denoise_steps_ms` field formatted as an array of objects, each with a `step` key (the step index) and a `duration_ms` key.
|
|
|
|
Example:
|
|
|
|
```bash
|
|
sglang generate \
|
|
--model-path <MODEL_PATH_OR_ID> \
|
|
--prompt "<PROMPT>" \
|
|
--perf-dump-path perf.json
|
|
```
|
|
|
|
## Nsight Systems
|
|
|
|
Nsight Systems provides low-level CUDA profiling with kernel details, register usage, and memory access patterns.
|
|
|
|
### Installation
|
|
|
|
See the [SGLang profiling guide](https://github.com/sgl-project/sglang/blob/main/docs/developer_guide/benchmark_and_profiling.md#profile-with-nsight) for installation instructions.
|
|
|
|
### Basic Profiling
|
|
|
|
Profile the entire pipeline execution:
|
|
|
|
```bash
|
|
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
|
|
|
|
Use `--delay` and `--duration` to capture specific stages and reduce file size:
|
|
|
|
```bash
|
|
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
|
|
```
|
|
|
|
**Parameters:**
|
|
- `--delay N`: Wait N seconds before starting capture (skip initialization overhead)
|
|
- `--duration N`: Capture for N seconds (focus on specific stages)
|
|
- `--force-overwrite`: Overwrite existing output files
|
|
|
|
## Notes
|
|
|
|
- **Reduce trace size**: Use `--num-profiled-timesteps` with smaller values or `--delay`/`--duration` with Nsight Systems
|
|
- **Stage-specific analysis**: Use `--profile` alone for denoising stage, add `--profile-all-stages` for full pipeline
|
|
- **Multiple runs**: Profile with different prompts and resolutions to identify bottlenecks across workloads
|
|
|
|
## FAQ
|
|
|
|
- If you are profiling `sglang generate` with Nsight Systems and find that the generated profiler file did not capture any CUDA kernels, you can resolve this issue by increasing the model's inference steps to extend the execution time.
|