A new nightly version has been released! ![]()
See the quickstart guide for installation instructions: Quickstart | Modular
MAX changelog updates:
-
Image generation responses on the Open Responses endpoint now report
usage:output_tokensandtotal_tokenscarry the total pixel count of
the generated images, counted from the actual output arrays, and
input_tokensis 0 (prompt text is not counted). Previouslyusagewas
alwaysnull. -
Added an optional
init_valueargument tomax.graph.ops.buffer_create.
When set, the buffer becomes persistent state: it is allocated and filled
with the scalarinit_valueexactly once when the model is loaded, and the
same buffer (with its mutations preserved) is reused across every execution,
rather than being re-created per call. Use it for a buffer that a kernel
mutates in place and only needs initialized once, such as a counter a kernel
resets at the end of each call. -
session.profiling.range(name)is a new context manager that annotates a
named CPU span in the trace. The span appears as auser_annotationbar in
Perfetto/HTA with the GPU kernels launched inside it correlated to it, and
also records during Dynolog-initiated on-demand traces. When no trace is
live the calls reduce to a single predicted branch, so annotations are safe
to leave in production code. The companionsession.profiling.is_recording
property reports whether a trace of either origin is live ā the right gate
for eliding annotation work on hot paths (is_enabledreflects only the
session API and staysFalseduring daemon-driven traces). -
MAX processes launched with
KINETO_USE_DAEMON=1now register with a
Dynolog daemon at device
initialization, sodyno gputrace --pids <pid>captures any such process
on demand with no profiling flags and no code changes. Set
profiling_dynolog_enabled = False(or
MODULAR_MAX_DEBUG_PROFILING_DYNOLOG_ENABLED=0) to opt a process out. -
Profiling can now be armed and disarmed at runtime for CUDA-graph
(capture/replay) workloads: a mid-runsession.profiling.start()or a
Dynologdyno gputracerequest captures kernels replayed from graphs that
were instantiated before profiling was enabled, and replay overhead reverts
when the trace stops. Enabling at session construction is no longer
required for these workloads.
Mojo changelog updates:
- [stdlib] stabilize more list methods
- [stdlib] Make
TupleconditionallyImplicitlyDeletable - [stdlib] Generalize
Dict.fromkeysto any iterable - [stdlib] Rename
StaticConstantOrigintoImmStaticOrigin - [stdlib] Add
Tuple.consume_elementsfor moving out elements
Raw MAX diff: https://github.com/modular/modular/compare/d073bde762f2743d67e1bc9da35d30c819bca394...41222c77ed089a7cf0716b15e83f1f2f07f9309d)>
Current Mojo changelog: https://github.com/modular/modular/blob/main/mojo/docs/nightly-changelog.md