A new nightly version has been released! ![]()
See the quickstart guide for installation instructions: Quickstart | MAX
MAX changelog updates:
-
Added a request body size limit.
MAX_SERVE_MAX_REQUEST_BYTES(default
100 MiB) caps the size of an accepted HTTP request body; a larger request is
rejected with HTTP 413 before the body is buffered, so a client cannot
exhaust host memory with an oversized payload. The cap is enforced both from
an oversizedContent-Lengthand by counting the bytes actually received, so
a chunked or mislabeled body cannot evade it. Raise it for larger inline
(base64) multimodal payloads, or set it to 0 to disable the limit. -
The SM100 MLA decode dispatch now enumerates 12, 24 and 48 query heads
alongside the powers of two it already covered, so a model whose per-device
head count is not a power of two can bind its dispatch metadata. -
KDA prefill now runs on the chunk-parallel pipeline. The pipeline existed as
a Mojo kernel with no graph-op registration, so every prefill fell back to
the token-sequential decode recurrence: O(total_seq_len) sequential steps per
sequence, with no parallelism to spend on a long prompt. Registering
kda_chunkas its own graph op takes that to O(total_seq_len / CHUNK_SIZE). -
Improved MXFP8 block-scaled matmul decode latency for attention
output-projection shapes at M=4, M=32, M=64, and M=128 on MI355. -
Improved MXFP8 block-scaled fused QKV projection decode latency at M=4 on
MI355.and down projection 18.2-19.6% (etm > 2048) and 6.9-23.3% (etm <= 2048)
-
The pipeline configs are now immutable:
PipelineArgs,
PipelineConfig,PipelineRuntimeConfig,SamplingConfig,
MAXModelConfig,KVCacheConfigand its nestedKVConnectorConfig,
LoRAConfig, andProfilingConfig. Assigning to a field after
construction raises a pydanticValidationError. Construct them with
the values you need. -
ModelManifestis now immutable from construction: mutating the mapping
(item assignment,update,pop, and so on) raises aTypeError, and
ModelManifest.resolve()is removed β a manifest is complete when built.
Construct it with the component configs you need. The unused
total_weights_sizeproperty is also removed. -
Constructing a
MAXModelConfigdirectly now only validates the fields
you pass. It no longer fills in the weight and model paths or loads the
HuggingFace config. Configs the pipeline builds are unchanged. -
ArchConfig.calculate_max_seq_len()no longer takespipeline_config,
andmodel_configis now required. -
KVCacheConfig.allow_kv_head_replication, the architecture registration
fieldrequires_kv_head_replication, and the
--allow-kv-head-replicationflag are removed. An architecture now asks
for KV head replication in itsconstruct_kv_params(). -
DeviceGraphBuilder.add_function[kernel](*args, ...)takes a thin
function pointer (func: def(...) thin -> None), the same identity as
DeviceContext.compile_function[kernel](). The capturing compile-and-add
overloads are removed; capturing kernels use
DeviceContext.enqueue_function()orrecording_context().
Mojo changelog updates:
- [stdlib] Add
List(length, fill_with)initializer. - [stdlib] Add
Array(fill_with=)constructor
Raw MAX diff: https://github.com/modular/modular/compare/d68e8edca0585de6ce4f1f9b37f12a6910890b04...1c9fd2e03331f77d3a1034127cb3700b7fa43c02)>
Current Mojo changelog: https://github.com/modular/modular/blob/main/mojo/docs/nightly-changelog.md