unslothai/unsloth · error · HTTPException

dataset_streaming is not yet supported on Apple Silicon (MLX

Error message

dataset_streaming is not yet supported on Apple Silicon (MLX); the MLX loader materializes the full dataset.

What it means

HTTP 400 when dataset_streaming=true and the detected hardware is MLX (Apple Silicon): the MLX dataset loader materializes the full dataset and has no streaming path, so the combination is rejected rather than silently ignored.

Source

Thrown at studio/backend/routes/training.py:1342

        if request.dataset_streaming:
            if not request.hf_dataset:
                raise HTTPException(
                    status_code = 400,
                    detail = "dataset_streaming requires hf_dataset; streaming is not supported for local datasets.",
                )
            if request.is_dataset_image or request.is_dataset_audio:
                raise HTTPException(
                    status_code = 400,
                    detail = "dataset_streaming is not supported for vision or audio datasets.",
                )
            if request.is_embedding:
                raise HTTPException(
                    status_code = 400,
                    detail = "dataset_streaming is not supported for embedding training; the embedding loader needs the full dataset.",
                )
            if _hw.DEVICE == _hw.DeviceType.MLX:
                raise HTTPException(
                    status_code = 400,
                    detail = "dataset_streaming is not yet supported on Apple Silicon (MLX); the MLX loader materializes the full dataset.",
                )
            if request.max_steps is None or request.max_steps <= 0:
                raise HTTPException(
                    status_code = 422,
                    detail = "dataset_streaming requires max_steps > 0 because streaming datasets have no known length.",
                )
            if request.train_on_completions:
                raise HTTPException(
                    status_code = 422,
                    detail = "dataset_streaming is not supported with train_on_completions yet.",
                )
            if request.eval_steps > 0:
                train_split = request.train_split or "train"
                if not request.eval_split or request.eval_split == train_split:
                    raise HTTPException(
                        status_code = 422,

View on GitHub (pinned to 203007d190)

Solutions

  1. Disable dataset_streaming on Apple Silicon (MLX) hosts
  2. Or run the streaming training on a CUDA host
  3. Gate the streaming flag on platform in your client config so it is only set where supported

Example fix

// before (on a Mac)
{"dataset_streaming": true, "hf_dataset": "org/ds"}  // 400

// after
{"dataset_streaming": false, "hf_dataset": "org/ds"}
Defensive patterns

Strategy: validation

Validate before calling

import platform

def streaming_supported_here() -> bool:
    return platform.machine() != "arm64" or not platform.system() == "Darwin"  # proxy for MLX hosts

def streaming_config_valid(p: dict) -> bool:
    return (not p.get("dataset_streaming")) or streaming_supported_here()

Try / catch

resp = client.post("/training/start", payload)
if resp.status_code == 400 and "MLX" in resp.text:
    payload["dataset_streaming"] = False
    resp = client.post("/training/start", payload)

Prevention

When it happens

Trigger: POST /training/start with dataset_streaming: true on a Mac where utils.hardware reports DEVICE == DeviceType.MLX.

Common situations: Config developed on a CUDA/Linux box reused on an Apple Silicon machine; assuming the streaming flag is platform-independent.

Related errors


AI-assisted analysis of unslothai/unsloth@203007d190 (2026-08-15). Data as JSON: /api/errors/ad64fdbc2c22a092. Report an issue: GitHub.