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
- Disable dataset_streaming on Apple Silicon (MLX) hosts
- Or run the streaming training on a CUDA host
- 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
- Gate the streaming flag on host platform in shared configs
- Do not port CUDA training configs verbatim to Apple Silicon
- Remember MLX materializes the full dataset: size disk accordingly
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
- dataset_streaming requires hf_dataset; streaming is not supp
- dataset_streaming is not supported for vision or audio datas
- dataset_streaming is not supported for embedding training; t
- dataset_streaming is HF-only; remove local_datasets / S3 sou
- dataset_streaming is HF-only; remove local_datasets / S3 sou
AI-assisted analysis of unslothai/unsloth@203007d190 (2026-08-15).
Data as JSON: /api/errors/ad64fdbc2c22a092.
Report an issue: GitHub.