Repository navigation
TL;DR
More frontier models. DeepSeek-V4.1 Flash and MiMo-V2.6-Flash-RL (309B MoE) now train on the standard Miles image.
A third training backend. torchtitan joins Megatron and FSDP. All three now share one layer for data, loss, metrics, checkpoints and weight sync to SGLang, so a new backend or model plugs into the same path.
Run Miles natively on Kubernetes (experimental feature). With the new experimental backend, --cluster-backend kubernetes, the cluster schedules every trainer, engine and controller of a run directly, with no Ray cluster in between. The same backend can deploy trainers and engines as separate releases and restart a run's orchestration without stopping training. Ray remains the default.
Train several policies in one run. One job can train multiple policies, each with its own trainer, engines and checkpoints; the gsm8k example trains a solver together with the verifier that grades it.
Faster attention for sparse and linear models. Sparse attention for GLM-5 and DeepSeek-V3.2/V4/V4.1 runs on merged, per-architecture kernels, and linear-attention models (Qwen3.5, Kimi-K3, GLM-5.3-Flash) get a tensor-parallel layer with faster backward kernels.
Score centering for off-policy RL. A new loss, --loss-type score_centering, corrects the gradient drift that appears when rollouts come from an older policy than the one being trained, using the sampler's top-k probabilities.
Highlights
417 PRs from 17 contributors.
Model Support
| Model | Training | PRs | Docs |
|---|---|---|---|
| DeepSeek-V4.1 Flash | Full | #3179 @Zhichenzzz | link |
| MiMo-V2.6-Flash-RL | Full | #3648, #3743 @guapisolo | link |
DeepSeek-V4.1 Flash moves into mainline. It previously needed its own image and an SGLang fork. Its training plugin and launcher are now part of Miles, and the sglang-miles build in the standard image carries the model, so DeepSeek-V4.1 trains on radixark/miles like any other model (#3179 @Zhichenzzz, sgl-project/sglang#42408).
MiMo-V2.6-Flash-RL. A 309B MoE with per-layer KV heads, asymmetric Q/K/V and sliding-window sinks, trained in bridge mode with a BF16 rollout engine. prepare converts the official FP8/MXFP4 checkpoint to BF16; on 2x8 H200 the full model streams its optimizer state to NVMe (#3648, #3743 @guapisolo).
Also new: native Megatron DSA for DeepSeek-V3.2 and GLM-5/5.1/5.2 behind --dsa-impl megatron (#3866 @zianglih), and NVIDIA Vera Rubin support in the container and launchers (#3700 @kaixih).
Training Backends
torchtitan joins Megatron and FSDP. --train-backend torchtitan trains through torchtitan's own trainer and parallelisms, and models it does not ship can be added as Miles-side packages; GLM-4.7-Flash is the first, trained colocated with tensor and expert parallelism and routing replay. Megatron remains the default (docs, #3171, #3252 @Zhichenzzz).
One layer underneath all three. Before this release FSDP carried its own copy of the RL step, weight sync and offload, and a third backend would have meant a third copy. FSDP and torchtitan now share one actor and training-step interface, all three backends send weights to SGLang through the same updater, and miles/backends/training_utils/ holds the data, loss, metrics, replay and checkpoint code they have in common (#3171, #3248 @Zhichenzzz).
Features
Run Miles natively on Kubernetes (experimental feature). Until now a Miles run lived inside one Ray job, even on a Kubernetes cluster. With --cluster-backend kubernetes, Miles installs the run itself and lets the cluster schedule every trainer, engine and controller, so a run's pods are ordinary cluster workloads that the cluster's own scheduling and monitoring already see. A per-namespace workbench (python -m miles.utils.external_utils.miles_workbench) checks your permissions before installing, follows every pod's logs, and collects a diagnosis bundle when a run fails. The backend is still under active development; Ray remains the default and needs no change (docs, #2188, #2436, #2446 and the series under Cluster Backend: Kubernetes @fzyzcjy).
Keep a run alive while parts of it restarts. On Kubernetes, one run can be installed as separate releases for its trainers, its inference engines and its orchestration script (--deploy-component), so each part can be managed on its own. A live run can also replace its orchestration script and rollout executor while trainers and engines stay up, and trainers reload their state in place; e2e tests check both against an undisturbed run. The fault injector now crashes trainer cells and rollout engines on Ray and Kubernetes during soaks, and a deterministic comparison checks that rollout engine crashes leave the loss curve unchanged. More related pull requests will be merged to main. (split deployment, hot restart, #2952, #2963, #2974, #2919 @fzyzcjy).
Train several policies in one run. Some recipes need models that learn from each other, such as a solver and the verifier that grades it. --megatron-config now declares several trainers in one job; each policy gets its own placement, rollout queue, data buffer, weight updates and checkpoints, while the run coordinates a global checkpoint and a leader policy decides when the run ends. The gsm8k solver–verifier example shows the setup (example, #2642, #2643, #2645 @fzyzcjy).
Score centering. When rollouts come from an older policy than the one being trained, even a constant reward can push the policy in an unwanted direction. --loss-type score_centering removes that drift by subtracting the expected score under the sampler's top-k probabilities, with optional truncated or masked importance weights (--score-centering-is tis|mis). It works with native and session rollouts (example, #3621–#3626, #3732 @Shi-Dong, #3904 @guapisolo).
Agentic rollouts that keep moving. Each agent call now runs in its own process by default, so one episode stuck parsing a very large response no longer stalls every other episode on the rollout loop (--custom-agent-function-mode inline restores the old behavior). Agents also stop receiving per-token logprobs they did not ask for, which could exceed 100 MiB for a long reply with top-k logprobs on (#3717, #3716 @nblintao).
Attach existing SGLang engines. --rollout-external-engine-addrs points Miles at engines launched elsewhere; it discovers their topology from /server_info and still drives their weight updates (#2513, #2514 @fzyzcjy).
Optimizations
Sparse and linear attention. GLM-5, DeepSeek-V3.2, V4 and V4.1 used to carry separate copies of the same sparse-attention kernels. They now share one implementation that picks FlashMLA or TileLang per GPU architecture and shape, which is faster on every GLM-5 shape and on Blackwell, and no longer recompiles for each packed sequence length. Linear-attention models (Qwen3.5, Qwen3-Next, Kimi-K3, GLM-5.3-Flash) move to a tensor-parallel layer that shards heads across ranks, with faster short-conv and KDA backward kernels (#3607, #3608, #3609, #3610, #3632, #3634 @Zhichenzzz).
DeepSeek-V4 under context parallelism. The sparse-attention indexer used to leave the last CP rank with the most work. Rows are now balanced across ranks with identical top-k picks, which raises long-context training throughput (#3689 @HJSang).
Weight sync for large MoE models. --update-weight-transfer-mode broadcast_packed (opt-in) sends each bucket as one broadcast instead of one per tensor, and routed-expert weights are prepared in parallel across expert-parallel ranks before they are gathered (#3224, #3731 @zianglih).
Refactors
Kernels and launchers. Kernels move from the model plugins into miles/kernels (#3605, #3606 @Zhichenzzz). Every launch script now offers the same prepare, train and full-train commands, and controllers run as independent workers that the Kubernetes backend, split deployment and hot restart build on (#2431, #2432, #2319, #2324, #2325 @fzyzcjy).
Full release notes by category below; breaking changes are near the end.
Cluster Backend: Kubernetes
--cluster-backend ray|kubernetes: Ray stays the default; Kubernetes installs a run as a helm release and lets the cluster schedule every worker: #2188, #2469, #2186 @fzyzcjy- Level-triggered reconcile loop over Kubernetes LIST/WATCH, with relist deletions, per-key backoff, resync and a pod reflector: #2179, #2180, #2181, #2182, #2183, #2184, #2185, #2927 @fzyzcjy
- Kubernetes worker providers and cell operations: pod packing from node GPUs, static addresses from chart naming, pods projected into workers, deletion treated as gone: #2328, #2329, #2330, #2331, #2332, #2333, #2334, #2335, #2336, #2337, #2338, #2339, #2340, #2341, #2342, #2343, #2344, #2345 @fzyzcjy
- Helm charts
miles-common,miles-workbenchandmiles-run, with values schemas generated from one set of Python types and Helm lint in pre-commit/CI: #2190, #2192, #2193, #2194, #2416, #2436, #2437, #2438, #2439 @fzyzcjy miles_workbenchCLI: install a namespace workbench, pre-flight RBAC/API/namespace checks, exec into it, stop/uninstall runs, collect diagnosis: #2417, #2418, #2419, #2420, #2421, #2422, #2423, #2425, #2899, #3055 @fzyzcjy- Run lifecycle on Kubernetes: install and wait for a verdict, stream every container's log, surface cluster events, collect the scene on failure, escape/uninstall jobs, relaunch that may only resize: #2440, #2441, #2442, #2443, #2444, #2446, #2447, #2449, #2450, #2451, #2452, #2453, #2454, #2455, #2456, #2457, #2458, #2459, #2460, #2461, #2922, #2923, #3038, #3039 @fzyzcjy
- Mooncake master as part of the run that needs it: #2434, #2448 @fzyzcjy
- Colocate on Kubernetes: pair engine and trainer pods (down to GPU granularity), gate engine pods until placed, engines narrower than a node, NCCL-usable shared memory, platform read access: #2464, #2465, #2466, #2988, #2989, #2990, #2991, #2992, #2993, #2994, #2995, #2996, #2997, #3041, #3056 @fzyzcjy
- Cluster plumbing: kind and self-provisioned apiserver test environments, kubectl/helm in the training image, process supervisor for several ranks per container, storage as a list of volumes, namespaced infra paths, e2e dump location, hashed long component names, node-pin validation, router binding on the placed host: #2177, #2178, #2187, #2191, #2624, #3045, #3046, #3047, #3054, #3356, #2926, #2467, #2468 @fzyzcjy
Split Deployment
- Install one run as several helm releases (one per trainer, one per inference engine group, one carrying the orchestration script), with engine registration/discovery across deployments: #2930, #2931, #2932, #2933, #2934, #2935, #2936, #2937, #2938, #2939, #2940, #2941, #2942, #2943, #2944, #2945, #2946, #2947, #2948, #2949, #2950, #2951, #2952, #2953, #2954, #2955 @fzyzcjy
- E2E harness and comparisons: a run deployed in parts matches the same run deployed as one, and serves every engine it was given: #3004, #3005, #3006, #3007 @fzyzcjy
Fault Tolerance
- Fault injector as an event-log-driven package; faults over RPC, pod deletion and in-pod engine crashes on Kubernetes; schedule-based crash frequencies: #2900, #2901, #2902, #2903, #2904, #2905, #2906, #2907, #2908, #2909, #2910, #2911, #2912, #2913, #2914, #2915, #2916, #2925 @fzyzcjy
- Soaks: trainer and rollout cells under faults, fully-async trainer under random faults; rollout engine crashes leave the loss curve bitwise identical to a fault-free run: #2917, #2918, #2919, #2920, #2921, #3357, #2924 @fzyzcjy
- Shared scenario machinery, quiescent-point injection, Ray fault gating between weight updates, event analysis off the trainer event loop: #2999, #3000, #3001, #3002, #3003, #3064, #3066, #3067 @fzyzcjy
- Trainer fault tolerance covers every policy's trainers: #2647 @fzyzcjy
- More related pull requests will be merged to main.
Hot Restart and Take-over
- Hot restart the orchestration script and rollout executor of a live run while trainers and engines stay up (
--hot-restart orchestration,rollout_executor, Kubernetes): #2956, #2957, #2958, #2959, #2960, #2961, #2962, #2963, #2964, #2965, #2966, #2967, #2979, #2982, #2983, #2984, #2985, #2986, #2987 @fzyzcjy - Runnable example, scheduled freezes and take-over as an injectable fault; comparisons against an untouched run, take-over before the first save, realistic convergence runs: #3011, #3012, #3013, #3014, #3015, #3016, #3017, #3018, #3019, #3020, #3021, #3061, #3063, #3068, #3069, #3070 @fzyzcjy
- In-place trainer state reload: Megatron trainer split into reloadable pieces, checkpoint loads return objects, live optimizer reset to a freshly built state with verification, every cell of a trainer controller reloadable: #2968, #2969, #2970, #2971, #2972, #2973, #2974, #2975, #2976, #2977, #2978, #2980, #2981 @fzyzcjy
- More related pull requests will be merged to main.
Workers and RPC
- Controllers, rollout executor and multi-LoRA controller run as independent workers; providers and backends handed to workers by spec: #2189, #2313, #2314, #2315, #2316, #2317, #2318, #2319, #2320, #2321, #2322, #2323, #2324, #2325, #2327, #2424 @fzyzcjy
--worker-comm-backend: serve workers over RPC as well as Ray (including Ray object store with cloudpickle), with wire typing, concurrency groups, generation checks and dead-worker detection: #2608, #2609, #2610, #2611, #2612, #2613, #2614, #2615, #2616, #2617, #2618, #2619, #2620, #2621, #2622, #3048, #3077 @fzyzcjy- External engine fleets:
--rollout-external-engine-addrsdiscovers static SGLang engines,--custom-inference-engine-provider-pathplugs a provider, cells without launch gates: #2511, #2512, #2513, #2514, #2927, #2928, #2929 @fzyzcjy - Robustness: bounded retry attempts, aborts that survive dead engines, Ray suspend taking turns with weight broadcast, worker manager reclaimed on every exit, single init enforced, faster cell handle fetches: #3023, #3024, #3025, #3031, #3032, #3033, #3034, #3035, #3036, #3037, #3042, #3043, #3044, #3057, #3062, #3078, #3118, #3120, #3718 @fzyzcjy @guapisolo
Multi-Policy Training
- Train several policy models in one run:
--megatron-confignames every trainer, per-policy placement, rollout state, output queues, data buffers, weight updates, health monitoring and global checkpoints; the leader model decides when the run ends: #2625, #2626, #2627, #2628, #2629, #2630, #2631, #2632, #2633, #2634, #2635, #2636, #2637, #2638, #2639, #2640, #2641, #2642, #2643, #2644, #2645, #2646, #2648, #2649, #3060 @fzyzcjy - Solver-verifier gsm8k example, verifier reward reporting, shared-engine eval, per-policy sample saving, retract pause, calibrated long test: #2998, #3065, #3072, #3073, #3074, #3075, #3076 @fzyzcjy
- Multi-policy runs deployed as one release per policy: #3008, #3009, #3010 @fzyzcjy
Training Backends
- torchtitan as a third training backend; FSDP and torchtitan share one torch-native actor, step-runner seam and the
WeightUpdaterpath: #3171 @Zhichenzzz training_utilsbecomes the shared layer for Megatron, FSDP and torchtitan (data, loss, metrics, replay, checkpoint, weight_update); one spelling for common knobs: #3248 @Zhichenzzz- Miles-side torchtitan model packages, with GLM-4.7-Flash first: #3252 @Zhichenzzz
RL Algorithms & Training
- Score centering (
--loss-type score_centering) with TIS/MIS weights, candidate probability transport through native and session rollouts, and mismatch diagnostics: #3621, #3622, #3623, #3624, #3625, #3626, #3732, #3904 @Shi-Dong @guapisolo - Add a debug switch that computes the stored log probabilities under grad: #3058 @fzyzcjy
- Fix uniform reward percentages for numeric rewards: #3722 @anthonyhe-bot
- Make preassigned WandB run IDs resumable: #3030 @fzyzcjy
Agentic & Session
- Run each agent call in its own process, so one slow episode cannot stall the rest: #3717 @nblintao
- Stop sending agents per-token logprobs they did not ask for: #3716 @nblintao
- fix(session): omit meta_info from chat responses: #3877 @guapisolo
LoRA & Multi-LoRA
- [multi-lora v2] Support context parallelism : #3320 @micahtyong
- Drop the empty-batch timeout only multi-LoRA v1 ever raised: #3723 @fzyzcjy
Weight Update
--update-weight-transfer-mode broadcast_packed: one NCCL byte broadcast per bucket (opt-in): #3224 @zianglih- Parallelize routed-expert weight updates across EP and expert DP: #3731 @zianglih
- Gate inference engine weight checksums behind their own flag: #3022 @fzyzcjy
- Hand the weight-update group the gpus each engine really has: #2510 @fzyzcjy
- Stamp the startup weight sync with the restored rollout id: #3059 @fzyzcjy
Kernels & Performance
- Kernels move under
miles/kernels(quant, MoE, activation, norm, HC, RoPE, attention): #3605, #3606 @Zhichenzzz - One DSA kernel pair for GLM-5 / DeepSeek-V3.2 / V4 / V4.1, with per-arch dispatch and a FlashMLA sparse forward: #3607, #3608 @Zhichenzzz
- Head-sharded linear-attention layer for GDN and KDA (Qwen3.5 / Qwen3-Next, Kimi-K3, GLM-5.3-Flash) plus per-arch short-conv and KDA backward kernels: #3609, #3610, #3632, #3634 @Zhichenzzz
- perf(dsv4): balance the CSA indexer across contiguous CP ranks: #3689 @HJSang
- feat(fsdp): load module-level compute kernels from the Hub: #2829 @adarshxs
Memory & Offload
- fix(optimizer): convert NVMe-streamed gradients to fp32 one bucket at a time: #3743 @guapisolo
- fix(ray): pin each trainer to the NUMA node of the GPU it actually uses: #3869 @guapisolo
- test(e2e): cover distributed Muon for three MoE models: #3878 @guapisolo
Model Support & Fixes
- DeepSeek-V4.1 RL Support: #3179 @Zhichenzzz
- feat(models): add MiMo-V2.6-Flash-RL support: #3648 @guapisolo
- add models support GLM-5.3: #3948 @Zhichenzzz
- Support native Megatron DSA in raw model mode: #3866 @zianglih
- fix: normalize GLM-5 indexer queries with shared RMSNorm: #3715 @xiuhu17
- test(inkling): run Inkling-Small CI on a 6-layer slice with a global-attention layer: #3937 @HJSang
- Add support for Vera Rubin: #3700 @kaixih
Observability
- Every process names itself; redacted environment audit events re-recorded periodically (
--env-report-interval-seconds), uncommitted-diff hashes, what the Kubernetes launcher launched, and every SGLang engine's serving environment: #2503, #2504, #2505, #2506, #2507, #2508, #2509 @fzyzcjy
Launchers & Configuration
- Every launch script exposes
prepare,trainandfull-trainand talks to a backend object: #2426, #2427, #2428, #2429, #2430, #2431, #2432, #2433 @fzyzcjy command_utilsbecomes a package (v1 API kept), ray-only helpers move under the Ray backend, one place builds a run's environment,execute_trainknows its launch and deploy component: #2414, #2415, #2445, #2462, #2463, #3027, #3028, #3029, #3119 @fzyzcjy- E2E harness: own command runner, stack dumps on hang, model/data directory overrides from the environment, model-script test args from the launcher environment: #3050, #3051, #3052, #3053, #3121 @fzyzcjy
- Call a trainer pool a trainer engine: #2435 @fzyzcjy
AMD / ROCm
- [AMD][LoRA] Add a gpt-oss-20b MoE LoRA RL launcher: #3157 @Arist12
- [AMD] docker: add rocm10-mi30x (gfx942) image variant: #3858 @michaelzhang-ai
- [AMD] docker: build the ROCm images on the sglang v0.5.20 release images: #3873 @XinyuJiangCMU
- [AMD] ci: expand ROCm nightly coverage and refresh runtime estimates: #2541 @XinyuJiangCMU
- [AMD] ci: enable MI350-verified e2e tests on the ROCm nightly: #3876 @XinyuJiangCMU
- [AMD] ci: expand ROCm10 nightly coverage on MI350: #3910 @XinyuJiangCMU
- fix(ci): add the missing pytest entry to three fast-gpu tests: #3889 @XinyuJiangCMU
- fix(ci): repair ROCm CI (AMD launcher args, single HIP runtime): #3981 @Zhichenzzz
Docker & Build
- build: bump CUDA 13 images to SGLang v0.5.21: #3884 @guapisolo
- build: retire CUDA 12 Docker builds: #3895 @guapisolo
- Use the base image's Mooncake instead of reinstalling a dev wheel: #3738 @guapisolo
- fix(docker): patch TileLang's fp16 256-bit store on Blackwell: #3647 @Zhichenzzz
- ci(wheels): add a workflow that rebuilds the x86_64 TE wheels from the fork: #3871 @guapisolo
- fix(ci): preserve image cuDNN during dependency resolution: #3880 @guapisolo
CI & Release Infrastructure
- CI coverage, scheduling and runner fixes: #3660, #3699, #3956, #3958, #3888, #3955, #3902, #3927, #3978, #3122, #3049, #3872, #3932, #3881, #3897 @guapisolo @fzyzcjy @Zhichenzzz @Shi-Dong @yueming-yuan
- Release gating on CPU and CUDA; version bump: #3705, #3922 @yueming-yuan @Zhichenzzz
- Contributor rules for CI tests and code review: #3953, #3954 @guapisolo
Docs & Legal
- Move copyright notices to NOTICE; restore standard Apache-2.0 LICENSE text: #3865 @maocheng23
- docs: add Claude rule for launch and request args: #3867 @guapisolo
- Update README: #3949 @Zhichenzzz
Dependencies
- SGLang:
sglang-mileslocked atb84bec5761(v0.1.1:880e3d2453), the Miles patch stack rebased onto SGLang v0.5.21 (#3884 @guapisolo). It includes the DeepSeek-V4.1 bf16 MoE fix (sgl-project/sglang#42408), Kimi-K3 weight reloads after graph capture (sgl-project/sglang#41925), packed weight receive buffers (sgl-project/sglang#39265) and the MiMo colocated RL loaders. - Megatron-LM:
radixark/Megatron-LM@miles-mainlocked atfd15ee20a4(v0.1.1:f148a32b43): fused RoPE packing for MLA/DSA, the DeepSeek-V4 CSA core, a load-balanced CP DSA indexer, deterministic fused CSA top-k, and explicit DSA top-k backends (radixark/Megatron-LM#108). - Ray: constrained to
>=2.56.0,<2.59.0; 2.59 removed the object-freeing API the RPC references use (#3895 @guapisolo). - Mooncake: the base image's
mooncake-transfer-engine-cuda13==0.3.13instead of an older dev wheel (#3738 @guapisolo). - TileLang: 0.1.14 patched for fp16 256-bit stores on Blackwell, pending tile-ai/tilelang#3158 in a release (#3647 @Zhichenzzz).
Docker
docker pull radixark/miles:v0.1.2- NVIDIA: CUDA 13 only,
linux/amd64andlinux/arm64, built onlmsysorg/sglang:v0.5.21(manifest digestsha256:c81d8ba7b91571aac8e0bb2be372c6a9664e1ff7b88f518a8891861bae83e3b7; pin withradixark/miles@sha256:c81d8ba7…). Sources: milesa22fd82419,sglang-milesb84bec5761, Megatron-LMfd15ee20a4. Automatic CUDA 12 builds are retired; previously published CUDA 12 tags remain available, anddocker/Dockerfile.cu12is kept as a deprecated manual recipe (#3895 @guapisolo). - The image now ships
kubectlandhelmfor the Kubernetes backend (#2191 @fzyzcjy). - AMD: ROCm images build on the SGLang v0.5.20/v0.5.21 ROCm bases, and a new
rocm10-mi30x(gfx942, MI300X/MI325X) variant replaces the retiredrocm700-mi30x(#3873 @XinyuJiangCMU, #3858 @michaelzhang-ai). - Vera Rubin:
docker/build.py --variant rubinbuilds an arm64 image fromdocker/Dockerfile.rubin(#3700 @kaixih).
Breaking Changes & Upgrade Notes
- Launcher subcommands. Launch scripts now expose
prepare,trainandfull-train.trainonly submits training (and copies converted checkpoints to node-local disk first); download/cast/conversion moved toprepare, andprepare-cpis gone. Scripts whosetrainused to run the whole pipeline (for examplescripts/run_deepseek.py) → runfull-train, orprepareonce and thentrain(#2431 @fzyzcjy). --rollout-externalremoved. External rollout is now implied by--rollout-external-engine-addrs(static engines discovered from/server_info) or--custom-inference-engine-provider-path→ drop--rollout-external; for a PD-disaggregated external fleet add--rollout-external-router-pd.--eval-num-gpuscannot be combined with external engines (#2513 @fzyzcjy).--freeze-indexerremoved. It had no effect; there is no replacement (#3866 @zianglih).- Agent functions run in a child process by default. Their arguments and return values must be picklable, and module-level state lasts one call → make them picklable, or pass
--custom-agent-function-mode inlinefor the old behavior (#3717 @nblintao). - Session chat replies are slimmer.
meta_infois no longer included in/sessions/{id}/v1/chat/completionsreplies (session records keep it), andlogprobsare returned only when the agent's request asks for them → setlogprobsin the request if an agent reads them (#3877 @guapisolo, #3716 @nblintao). - CUDA 12 images are no longer built automatically → use the CUDA 13 image (#3895 @guapisolo).
- Ray must be
<2.59.0(#3895 @guapisolo). - Licensing.
LICENSEis the standard Apache-2.0 text; the Miles copyright and the Slime (Zhipu AI) attribution move toNOTICE(#3865 @maocheng23).
All Contributors
@adarshxs @anthonyhe-bot @Arist12 @fzyzcjy @guapisolo @HJSang @kaixih @maocheng23 @micahtyong @michaelzhang-ai @nblintao @Shi-Dong @XinyuJiangCMU @xiuhu17 @yueming-yuan @zianglih @Zhichenzzz
Full Changelog: v0.1.1...v0.1.2