Ultralytics v8.4.22 is out!
We’re excited to share Ultralytics v8.4.22, a reliability-focused release that brings basic Huawei Ascend NPU support, more dependable multi-GPU training, safer export behavior, and smoother Docker/CI workflows for the Ultralytics YOLO ecosystem ![]()
If you’re training with Ultralytics YOLO11 today, this release makes day-to-day workflows more robust. And if you’re starting something new, we recommend exploring Ultralytics YOLO26, our latest stable model family with smaller, faster, and more accurate models across detect, segment, classify, pose, and OBB.
You can review the full release on GitHub Releases for v8.4.22 and compare all changes in the full changelog from v8.4.21 to v8.4.22.
Highlights
Basic Huawei Ascend NPU support
The headline feature in this release is Huawei Ascend NPU parsing in select_device, contributed in PR #23902 by @GiantAxeWhy with thanks to @GiantAxeWhy for the first contribution ![]()
You can now use:
device=npudevice=npu:0
This update adds:
torch_npuinstallation checks- NPU availability validation
- clearer errors for invalid device strings
- explicit blocking of unsupported multi-NPU strings like
npu:0,1
This makes Ascend usage much more straightforward for training and inference without custom device-selection workarounds ![]()
More reliable multi-GPU training
Custom Albumentations pipelines now work more safely with DDP subprocesses thanks to PR #23849 by @onuralpszr, contributed by @onuralpszr.
This change serializes and deserializes custom transforms correctly, which helps avoid failures in multi-GPU training setups.
Related documentation improvements were added in PR #23876 by @onuralpszr.
Export stability improvements
Several export-related edge cases were improved in v8.4.22:
- TensorRT INT8 compatibility: PR #23872 by @lakshanthad from @lakshanthad disables
end2endautomatically for incompatibletensorrt<=10.3.0 - Small calibration dataset handling: PR #23899 by @glenn-jocher adjusts batch sizing more gracefully instead of failing in some cases
- ONNX and export docs improvements: PR #23759 by @Shreyas-S-809 by @Shreyas-S-809, PR #23867 by @K-saif by @K-saif, and PR #23838 by @sjsr-0401 by @sjsr-0401
Improvements and Fixes
Docker and CI updates
We’ve refreshed build and runner environments to keep installs and testing more consistent:
- Base Docker image updated to PyTorch 2.10.0 in PR #23807 by @glenn-jocher
- Torch 2.10 / Torchvision 0.25.0 CI coverage added in PR #23808 by @glenn-jocher
UV_BREAK_SYSTEM_PACKAGES=1added across Dockerfiles in PR #23809 by @glenn-jocher- New CPU runner image in PR #23827 by @glenn-jocher
- Runner updates and image improvements in PR #23826, PR #23828, PR #23829, PR #23830, PR #23832, and PR #23878 by @Laughing-q
- CI runner label updates in PR #23901 by @glenn-jocher and PR #23904 by @glenn-jocher
- Workflow dependency bump in PR #23813 by @dependabot[bot]
Reliability fixes
A set of practical fixes landed across training, caching, and integrations:
- FastSAM text-prompt index remapping fix in PR #23764 by @orcinus, contributed by @orcinus
- ClearML callback fix to avoid Ray Tune override conflicts in PR #23833 by @knotgrass, contributed by @knotgrass
- Dataset/classification cache robustness improvement in PR #23892 by @Laughing-q, contributed by @Laughing-q
- Greyscale test fix in PR #23903 by @glenn-jocher
- OpenVINO Conda CI exclusion update in PR #23839 by @Y-T-G, contributed by @Y-T-G
Code quality and maintenance
A few cleanup and maintenance improvements also shipped:
Callabletype hint fix in PR #23836 by @ahmet-f-gumustas, contributed by @ahmet-f-gumustas- Removed unused
taskattribute from metrics classes in PR #23835 by @raimbekovm, contributed by @raimbekovm - Removed resolved TODO from OBB head in PR #23848 by @raimbekovm
setuptoolsrequirement bump in PR #23846 by @dependabot[bot]
Docs and Dataset Updates
New dataset: DOTA128
A new DOTA128 OBB dataset config was added in PR #23885 by @Laughing-q. It provides a nice middle ground between lightweight tiny subsets and the full DOTA dataset for oriented bounding box workflows.
Ultralytics Platform docs expanded
We also continued improving the Ultralytics Platform documentation, including:
- SAM 3 docs in PR #23834 by @glenn-jocher
- Platform prelaunch documentation updates in PR #23888 by @mykolaxboiko, contributed by @mykolaxboiko
- Teams and Cloud Training doc fixes in PR #23905 by @mykolaxboiko
- Docker image docs in PR #23884 by @onuralpszr
- Triton Inference Server guide updates in PR #23880 by @onuralpszr
- Strict mode docs in PR #23900 by @glenn-jocher
- README local docs build improvements in PR #23877 by @raimbekovm
- Local docs portability and CI fixes in PR #23883 by @raimbekovm, PR #23896 by @raimbekovm, PR #23882 by @raimbekovm
- ONNX/CoreML/export doc fixes in PR #23838 by @sjsr-0401, PR #23867 by @K-saif, and PR #23898 by @Y-T-G
- Additional docs media update in PR #23873 by @RizwanMunawar
New Contributors
A warm welcome to our new contributors who made their first contribution in this release:
- @sjsr-0401 in PR #23838
- @Shreyas-S-809 in PR #23759
- @mykolaxboiko in PR #23888
- @GiantAxeWhy in PR #23902
- @knotgrass in PR #23833
- @orcinus in PR #23764
Thank you to everyone who contributed code, docs, testing, and feedback ![]()
Try it out
Update with:
pip install -U ultralytics
And if you want to test the new NPU device parsing directly:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.predict(source="image.jpg", device="npu:0")
You can also explore training, deployment, and collaboration workflows on the Ultralytics Platform, which is the simplest way to annotate datasets, train, deploy, and monitor YOLO projects.
Feedback welcome
Please give v8.4.22 a try and let us know how it works for your workflows, especially if you’re using:
- Huawei Ascend NPUs
- multi-GPU DDP with custom augmentations
- ONNX or TensorRT export
- Docker or CI-heavy setups
As always, feedback, bug reports, and PRs are welcome in the Ultralytics repository.