Thomas Piacentini
← Workshop

Python exercise

Read an SGLang sweep on an L4

Original text · English30 min

A serving benchmark gives a table of numbers for each setting. You must read the table and decide. In this lab you read real SGLang 0.5.22 runs of Qwen3-8B on one NVIDIA L4. You find where throughput stops rising, where the latency SLO breaks, what FP8 gives, and whether a smaller prefill chunk helps.

The data comes from manuals/sglang-101/capture/gpu/summary/l4.json in this repository. support.py has a copy of the rows that the lab needs. Each value is the median of three seeds. The MIXED rows also keep the min and max of the three seeds.

Task

Write five helper functions and answers().

  1. gains(ys) returns a float array of length n - 1. Entry i is y_{i+1} / y_i - 1.
  2. saturation_point(xs, ys, min_gain=0.05) finds the first step i with gain strictly below min_gain. It returns xs[i], the last level before that step. If no step has a gain below min_gain, it returns xs[-1].
  3. largest_within(xs, ys, limit) returns the largest x whose y is less than or equal to limit. If no y meets the limit, it returns None.
  4. pct_change(new, old) returns 100 \cdot (new - old) / old.
  5. ranges_overlap(a, b) takes two dicts with the keys "min" and "max". It returns True when a_{min} \le b_{max} and b_{min} \le a_{max}.

Then do the experiment in answers(). Use the helpers.

  1. Change the concurrency from 1 to 64 in LOAD["default"]. Measure output_throughput. Report the saturation point with min_gain = 0.05 as saturation_default.
  2. Do step 1 again for LOAD["fp8"]. Report saturation_fp8.
  3. In LOAD["default"], measure p99_ttft_ms at each concurrency. Report the largest concurrency with p99_ttft_ms within SLO["ttft_ms"] as slo_concurrency_default.
  4. In LOAD["default"], measure goodput_rps. Report the concurrency with the highest goodput as best_goodput_concurrency_default. If two levels have the same goodput, use the lower concurrency.
  5. At concurrency 32, divide the FP8 output_throughput by the default output_throughput. Report the ratio as fp8_speedup_c32.
  6. Change the prefill chunk from the default (4096 tokens) to 1024 tokens. Compare MIXED["chunk-1024"] with MIXED["default"] at the same rate. Use the "median" field. Report the mean over the three rates of pct_change in median_ttft_ms as chunk_ttft_change_pct. Report the same mean for output_throughput as chunk_throughput_change_pct. The new value is the chunk 1024 value. The old value is the default value.
  7. For each rate, test if the seed ranges of median_ttft_ms for the two settings overlap. Report the number of rates with an overlap as chunk_overlap_rates.

Input and output

Name Type Shape Meaning
xs list of numbers (n,) the levels of the variable that you change, in increasing order
ys list of floats (n,) the measured value at each level, all above 0 for gains
min_gain float scalar the smallest relative gain that counts as a rise
limit float scalar the SLO bound, in the unit of ys
new, old float scalar the changed value and the base value, old is not 0
a, b dict keys min, max one seed range each
  • gains returns a float array of shape (n - 1,).
  • saturation_point and largest_within return one element of xs. largest_within can return None.
  • pct_change returns a float. ranges_overlap returns a bool.
  • answers() returns a dict with the eight keys above. Each value is a Python float.

Constraints

  • 2 <= n <= 20 for gains and saturation_point.
  • Do not change the input lists.
  • Do not round the answers. The checks accept a relative difference of 1e-6 from the reference run.
  • Use the data in support.py only. Use numpy and the standard library only.

Examples

python
gains([13.42, 31.2, 61.54])
text
[1.32488823 0.9724359 ]
python
saturation_point([1, 2, 4, 8], [10.0, 20.0, 20.5, 30.0])
text
2

The gain from 2 to 4 is 0.025, which is below 0.05. The series rises again at 8, but the rule stops at the first low gain.

python
largest_within([1, 2, 4, 8], [100.0, 900.0, 1000.0, 1200.0], 1000.0)
text
4
python
pct_change(37411.99, 35999.18)
text
3.9245616150145577

answers()["saturation_default"] is 32.0.

Code and artifacts 15
What you take away

Saved in your notebook on this device.

Sources and limits

Reading checkpoints are self-reported. Test results are recorded separately and apply to the executed cases.

AI Engineering from Scratch · 3f9715c · MIT

Download this file ↓