Managed recipe parameters
Use the managed request, not a user-controlled optimizer loop. Supported inputs include max_steps, max_length, per_device_train_batch_size, gradient_accumulation_steps, seed, labels and bounded records; the Qwen/Qwen3.8-27B text recipe also takes hyperparams, parent_checkpoint and loss_on (below). Discovery returns the current request schema and the limits of each recipe. Unknown fields are rejected.
GLM uses the frozen glm53_unsloth attention QLoRA recipe, revision and resource template. Arbitrary LoRA rank/optimizer configuration, forward-only custom loss, RL, and optimizer-state resume are unsupported. Saved state does not add these capabilities. Read actual loss/metrics and final artifacts through the monitoring APIs. Retry an identical submission using its original request_id; never replay an uncertain optimizer update.
Qwen3.8-27B options
On Qwen/Qwen3.8-27B text SFT (inline records, no recipe) a request can continue an earlier run, set the optimisation and tag the Job. Every field is optional. A request that omits them trains exactly as before: learning rate 1e-4, rank 16, linear schedule, no warmup. Discovery (GET /v1/job/training-models) lists the allowed ranges under features and limits.
{
"request_id": "rsi-7-round-2",
"base_model": "Qwen/Qwen3.8-27B",
"records": [{"messages": [
{"role": "user", "content": "What is 1 + 1?"},
{"role": "assistant", "content": "2"}
]}],
"parent_checkpoint": "envloop://job_01M5KPXGHTRDW4NTWDVSPJE0SN/adapter-final",
"hyperparams": {"learning_rate": 5e-5, "epochs": 2, "lora_rank": 16, "batch_size": 8,
"warmup_ratio": 0.1, "lr_scheduler": "cosine"},
"max_length": 4096,
"loss_on": "last_assistant_turn",
"labels": {"source": "rsi-loop-dsh", "rsi_run": "rsi-7", "rsi_round": "2", "purpose": "sft"}
}
| Field | Rule |
|---|---|
labels | At most 16 string pairs. Keys match [A-Za-z0-9_][A-Za-z0-9_.-]{0,63}; values are text of at most 256 characters without control characters. Allowed on every managed text recipe. The Job returns them as labels (and in user_metadata) in status, list and result. They never affect billing. |
parent_checkpoint | An envloop://<job>/<checkpoint> path of a succeeded managed Job in your own project, from the same recipe and with the same lora_rank. Its adapter weights initialise the new adapter; the optimizer, schedule and step count start fresh. A path that does not exist, belongs to another project or is not durable yet returns 422 PARENT_CHECKPOINT_UNAVAILABLE; a different base model, recipe or rank returns 422 PARENT_CHECKPOINT_INCOMPATIBLE. |
hyperparams.learning_rate | 1e-7 to 1e-2. |
hyperparams.epochs or hyperparams.max_steps | The run length, one of them (also not together with top-level max_steps). epochs up to 100, max_steps up to 100,000. The platform converts epochs to optimizer steps (ceil(epochs × records ÷ batch_size)) at admission and returns the steps it will run. |
hyperparams.lora_rank | 8, 16, 32 or 64 (default 16), the ranks the qwen38-27b@1 serving profile can load. |
hyperparams.batch_size | Examples per optimizer step, 1 to 256 (not together with per_device_train_batch_size or gradient_accumulation_steps). |
hyperparams.warmup_ratio | 0 to 0.5 of the run. |
hyperparams.lr_scheduler | cosine, linear (default) or constant. |
max_length | Up to 32,768 tokens (default 8,192). Only 8,192 is a validated envelope. |
loss_on | last_assistant_turn, the only mode and the default: the loss is computed on the final assistant message; earlier turns, including earlier assistant turns, are context. |
The Job returns the values it trains with as hyperparameters. Continue a chain by passing the checkpoint.path of one round as parent_checkpoint of the next. These options are validated at admission: an out-of-range value is 422 INVALID_TRAIN_JOB_SPEC, never silently clamped. Other models and recipes reject parent_checkpoint, hyperparams and loss_on.