Skip to content

Commit d358f34

Browse files
authored
feat: upgrade ort to v2.0.0-rc11 and add NvTensorRT-RTX ep (#189)
* feat: upgrade ort to v2.0.0-rc11 and add NvTensorRT-RTX execution provider
1 parent 6aa8d9f commit d358f34

111 files changed

Lines changed: 1262 additions & 1203 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.toml

Lines changed: 77 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "usls"
33
edition = "2021"
44
version = "0.2.0-alpha.1"
5-
rust-version = "1.87"
5+
rust-version = "1.88"
66
description = "A Rust library integrated with ONNXRuntime, providing a collection of ML models."
77
repository = "https://github.com/jamjamjon/usls"
88
authors = ["Jamjamjon <xxyydzml@outlook.com>"]
@@ -19,7 +19,7 @@ image = { version = "0.25", default-features = false, features = [
1919
] }
2020
imageproc = { version = "0.25", default-features = false, features = ["rayon"], optional = true }
2121
ab_glyph = { version = "0.2.32", optional = true }
22-
ndarray = { version = "0.16.1", features = ["rayon"] }
22+
ndarray = { version = "0.17", features = ["rayon"] }
2323
half = { version = "2.7.1", features = ["bytemuck", "num-traits"] }
2424
indicatif = { version = "0.18", default-features = false }
2525
tracing = { version = "0.1" }
@@ -39,8 +39,9 @@ tempfile = { version = "3.23.0" }
3939
fast_image_resize = { version = "5.5.0", default-features = false, features = ["image", "rayon"] }
4040
minifb = { version = "0.28.0", optional = true }
4141
video-rs = { version = "0.10.5", features = ["ndarray"], optional = true }
42-
ndarray-npy = { version = "0.9.1", optional = true }
43-
ort = { version = "=2.0.0-rc.10", default-features = false, features = [
42+
ndarray-npy = { version = "0.10", optional = true }
43+
ort = { version = "=2.0.0-rc.11", default-features = false, features = [
44+
"tls-rustls",
4445
"copy-dylibs",
4546
"half",
4647
"std",
@@ -60,7 +61,6 @@ lru = { version = "0.16.2", default-features = false }
6061
clap = { version = "4.5", features = ["derive"] }
6162
tracing-subscriber = { version = "0.3.18", features = ["env-filter", "chrono", "fmt", "ansi"] }
6263

63-
6464
[profile.dev]
6565
opt-level = 0
6666
incremental = true
@@ -78,42 +78,9 @@ strip = true
7878
[features]
7979
default = ["ort-download-binaries", "vision", "annotator"]
8080

81-
# Video / Stream processing
82-
video = ["dep:video-rs"]
83-
84-
# Viewer
85-
viewer = ["dep:minifb"]
86-
87-
# Annotator
88-
annotator = ["dep:ab_glyph", "dep:imageproc"]
89-
90-
# Additional image formats (optional for faster compilation)
91-
image-gif = ["image/gif"]
92-
image-bmp = ["image/bmp"]
93-
image-ico = ["image/ico"]
94-
image-avif = ["image/avif"]
95-
image-tiff = ["image/tiff"]
96-
image-dds = ["image/dds"]
97-
image-exr = ["image/exr"]
98-
image-ff = ["image/ff"]
99-
image-hdr = ["image/hdr"]
100-
image-pnm = ["image/pnm"]
101-
image-qoi = ["image/qoi"]
102-
image-tga = ["image/tga"]
103-
image-all-formats = ["image/default-formats"]
104-
105-
# Hugging Face hub support (for downloading models from Hugging Face)
106-
hf-hub = ["dep:hf-hub"]
107-
108-
# Model Zoo
109-
vision = []
110-
vlm = ["vision", "dep:tokenizers", "dep:ndarray-npy"]
111-
mot = []
112-
all-models = ["vision", "vlm", "mot"]
113-
11481
# ONNXRuntime loading strategies
11582
ort-download-binaries = ["ort/download-binaries"]
116-
ort-load-dynamic = ["ort/load-dynamic"]
83+
ort-load-dynamic = ["ort/load-dynamic"]
11784

11885
# Cuda features (Internal use)
11986
cuda-runtime = ["dep:cudarc"]
@@ -153,24 +120,6 @@ rocm = ["ort/rocm"]
153120
tvm = ["ort/tvm"]
154121
vitis = ["ort/vitis"]
155122
xnnpack = ["ort/xnnpack"]
156-
tensorrt = ["ort/tensorrt"]
157-
tensorrt-full = ["tensorrt", "cuda-runtime-build"]
158-
tensorrt-cuda-11040 = ["tensorrt", "cuda-runtime-11040"]
159-
tensorrt-cuda-11050 = ["tensorrt", "cuda-runtime-11050"]
160-
tensorrt-cuda-11060 = ["tensorrt", "cuda-runtime-11060"]
161-
tensorrt-cuda-11070 = ["tensorrt", "cuda-runtime-11070"]
162-
tensorrt-cuda-11080 = ["tensorrt", "cuda-runtime-11080"]
163-
tensorrt-cuda-12000 = ["tensorrt", "cuda-runtime-12000"]
164-
tensorrt-cuda-12010 = ["tensorrt", "cuda-runtime-12010"]
165-
tensorrt-cuda-12020 = ["tensorrt", "cuda-runtime-12020"]
166-
tensorrt-cuda-12030 = ["tensorrt", "cuda-runtime-12030"]
167-
tensorrt-cuda-12040 = ["tensorrt", "cuda-runtime-12040"]
168-
tensorrt-cuda-12050 = ["tensorrt", "cuda-runtime-12050"]
169-
tensorrt-cuda-12060 = ["tensorrt", "cuda-runtime-12060"]
170-
tensorrt-cuda-12080 = ["tensorrt", "cuda-runtime-12080"]
171-
tensorrt-cuda-12090 = ["tensorrt", "cuda-runtime-12090"]
172-
tensorrt-cuda-13000 = ["tensorrt", "cuda-runtime-13000"]
173-
tensorrt-cuda-13010 = ["tensorrt", "cuda-runtime-13010"]
174123
cuda = ["ort/cuda"]
175124
cuda-full = ["cuda", "cuda-runtime-build"]
176125
cuda-11040 = ["cuda", "cuda-runtime-11040"]
@@ -189,6 +138,77 @@ cuda-12080 = ["cuda", "cuda-runtime-12080"]
189138
cuda-12090 = ["cuda", "cuda-runtime-12090"]
190139
cuda-13000 = ["cuda", "cuda-runtime-13000"]
191140
cuda-13010 = ["cuda", "cuda-runtime-13010"]
141+
tensorrt = ["ort/tensorrt"]
142+
tensorrt-full = ["tensorrt", "cuda-runtime-build"]
143+
tensorrt-cuda-11040 = ["tensorrt", "cuda-runtime-11040"]
144+
tensorrt-cuda-11050 = ["tensorrt", "cuda-runtime-11050"]
145+
tensorrt-cuda-11060 = ["tensorrt", "cuda-runtime-11060"]
146+
tensorrt-cuda-11070 = ["tensorrt", "cuda-runtime-11070"]
147+
tensorrt-cuda-11080 = ["tensorrt", "cuda-runtime-11080"]
148+
tensorrt-cuda-12000 = ["tensorrt", "cuda-runtime-12000"]
149+
tensorrt-cuda-12010 = ["tensorrt", "cuda-runtime-12010"]
150+
tensorrt-cuda-12020 = ["tensorrt", "cuda-runtime-12020"]
151+
tensorrt-cuda-12030 = ["tensorrt", "cuda-runtime-12030"]
152+
tensorrt-cuda-12040 = ["tensorrt", "cuda-runtime-12040"]
153+
tensorrt-cuda-12050 = ["tensorrt", "cuda-runtime-12050"]
154+
tensorrt-cuda-12060 = ["tensorrt", "cuda-runtime-12060"]
155+
tensorrt-cuda-12080 = ["tensorrt", "cuda-runtime-12080"]
156+
tensorrt-cuda-12090 = ["tensorrt", "cuda-runtime-12090"]
157+
tensorrt-cuda-13000 = ["tensorrt", "cuda-runtime-13000"]
158+
tensorrt-cuda-13010 = ["tensorrt", "cuda-runtime-13010"]
159+
nvrtx = ["ort/nvrtx"]
160+
nvrtx-full = ["nvrtx", "cuda-runtime-build"]
161+
nvrtx-cuda-11040 = ["nvrtx", "cuda-runtime-11040"]
162+
nvrtx-cuda-11050 = ["nvrtx", "cuda-runtime-11050"]
163+
nvrtx-cuda-11060 = ["nvrtx", "cuda-runtime-11060"]
164+
nvrtx-cuda-11070 = ["nvrtx", "cuda-runtime-11070"]
165+
nvrtx-cuda-11080 = ["nvrtx", "cuda-runtime-11080"]
166+
nvrtx-cuda-12000 = ["nvrtx", "cuda-runtime-12000"]
167+
nvrtx-cuda-12010 = ["nvrtx", "cuda-runtime-12010"]
168+
nvrtx-cuda-12020 = ["nvrtx", "cuda-runtime-12020"]
169+
nvrtx-cuda-12030 = ["nvrtx", "cuda-runtime-12030"]
170+
nvrtx-cuda-12040 = ["nvrtx", "cuda-runtime-12040"]
171+
nvrtx-cuda-12050 = ["nvrtx", "cuda-runtime-12050"]
172+
nvrtx-cuda-12060 = ["nvrtx", "cuda-runtime-12060"]
173+
nvrtx-cuda-12080 = ["nvrtx", "cuda-runtime-12080"]
174+
nvrtx-cuda-12090 = ["nvrtx", "cuda-runtime-12090"]
175+
nvrtx-cuda-13000 = ["nvrtx", "cuda-runtime-13000"]
176+
nvrtx-cuda-13010 = ["nvrtx", "cuda-runtime-13010"]
177+
178+
179+
# Video / Stream processing
180+
video = ["dep:video-rs"]
181+
182+
# Viewer
183+
viewer = ["dep:minifb"]
184+
185+
# Annotator
186+
annotator = ["dep:ab_glyph", "dep:imageproc"]
187+
188+
# Additional image formats (optional for faster compilation)
189+
image-gif = ["image/gif"]
190+
image-bmp = ["image/bmp"]
191+
image-ico = ["image/ico"]
192+
image-avif = ["image/avif"]
193+
image-tiff = ["image/tiff"]
194+
image-dds = ["image/dds"]
195+
image-exr = ["image/exr"]
196+
image-ff = ["image/ff"]
197+
image-hdr = ["image/hdr"]
198+
image-pnm = ["image/pnm"]
199+
image-qoi = ["image/qoi"]
200+
image-tga = ["image/tga"]
201+
image-all-formats = ["image/default-formats"]
202+
203+
# Hugging Face hub support (for downloading models from Hugging Face)
204+
hf-hub = ["dep:hf-hub"]
205+
206+
# Model Zoo
207+
vision = []
208+
vlm = ["vision", "dep:tokenizers", "dep:ndarray-npy"]
209+
mot = []
210+
all-models = ["vision", "vlm", "mot"]
211+
192212

193213

194214
[[example]]

README.md

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ Run the **YOLO-Series demo** to explore models with different tasks, precision a
5353
- **Precision**: `fp32`, `fp16`, `q8`, `q4`, `q4f16`, `bnb4`
5454
- **Execution Providers**: `CPU`, `CUDA`, `TensorRT`, `CoreML`, `OpenVINO`, and more
5555

56+
57+
### Examples
58+
5659
```bash
5760
# CPU: Object detection with YOLOv8n (FP16)
5861
cargo run -r --example yolo -- --task detect --ver 8 --scale n --dtype fp16
@@ -69,6 +72,12 @@ cargo run -r -F tensorrt --example yolo -- --device tensorrt:0 --processor-devic
6972
# TensorRT model + CUDA processor (CUDA 12.4)
7073
cargo run -r -F tensorrt-cuda-12040 --example yolo -- --device tensorrt:0 --processor-device cuda:0
7174

75+
# TensorRT-RTX model + CUDA processor
76+
cargo run -r -F nvrtx-full --example yolo -- --device nvrtx:0 --processor-device cuda:0
77+
78+
# TensorRT-RTX model + CPU processor
79+
cargo run -r -F nvrtx --example yolo -- --device nvrtx:0
80+
7281
# Apple Silicon CoreML
7382
cargo run -r -F coreml --example yolo -- --device coreml
7483

@@ -88,17 +97,19 @@ cargo run -r --example yolo -- --help
8897

8998
### Performance
9099

91-
>**Environment:** NVIDIA RTX 3060Ti (TensorRT v10.11.0.33, CUDA 12.8) / Intel i5-12400F
100+
>**Environment:** NVIDIA RTX 3060Ti (TensorRT-10.11.0.33, CUDA 12.8, TensorRT-RTX-1.3.0.35) / Intel i5-12400F
92101
>
93-
>**Setup:** YOLOv8n-Det on 5000 coco2017val images
102+
>**Setup:** YOLOv8n-detect model (640×640), COCO2017 validation set (5,000 images), no warm-up
94103
95104

96105
#### Batch = 1
97106

98107
| Backend | DType | Preprocess | Inference | Postprocess | Total |
99108
| --- | --- | --- | --- | --- | --- |
100-
| **TensorRT EP + CUDA processor** | FP16 | 252.029µs | 1.669ms | 435.488µs | 2.357ms |
109+
| **TensorRT EP + CUDA processor** | FP16 | 252.029µs | 1.494ms | 435.488µs | 2.182ms |
101110
| **TensorRT EP + CPU processor** | FP16 | 804.315µs | 2.877ms | 264.489µs | 3.946ms |
111+
| **TensorRT-RTX EP + CUDA processor** | FP32 | 261.607µs | 3.280ms | 394.933µs | 3.936ms |
112+
| **TensorRT-RTX EP + CPU processor** | FP32 | 850.883µs | 4.494ms |279.605µs | 5.625ms |
102113
| **CUDA EP + CUDA processor** | FP32 | 256.842µs | 4.108ms | 287.730µs | 4.653ms |
103114
| **CUDA EP + CUDA processor** | FP16 | 252.456µs | 3.702ms | 291.365µs | 4.246ms |
104115
| **CUDA EP + CPU processor** | FP32 | 884.493µs | 5.376ms | 267.707µs | 6.528ms |
@@ -112,6 +123,8 @@ cargo run -r --example yolo -- --help
112123
| --- | --- | --- | --- | --- | --- |
113124
| **TensorRT EP + CUDA processor** | FP16 | 1.712ms | 10.295ms | 1.525ms | 13.532ms |
114125
| **TensorRT EP + CPU processor** | FP16 | 18.489ms | 28.692ms | 1.399ms | 48.580ms |
126+
| **TensorRT-RTX EP + CUDA processor** | FP32 | 1.467ms | 19.668ms | 1.396ms | 22.531ms |
127+
| **TensorRT-RTX EP + CPU processor** | FP32 | 18.329ms | 37.447ms | 1.372ms | 57.148ms |
115128
| **CUDA EP + CUDA processor** | FP32 | 1.504ms | 24.225ms | 1.448ms | 27.177ms |
116129
| **CUDA EP + CUDA processor** | FP16 | 1.617ms | 18.785ms | 1.411ms | 21.813ms |
117130
| **CUDA EP + CPU processor** | FP32 | 18.580ms | 44.257ms | 1.365ms | 64.202ms |
@@ -359,8 +372,10 @@ cargo run -r --example yolo -- --help
359372

360373
- **`cuda`**: NVIDIA CUDA execution provider (pure model inference acceleration).
361374
- **`tensorrt`**: NVIDIA TensorRT execution provider (pure model inference acceleration).
375+
- **`nvrtx`**: NVIDIA NvTensorRT-RTX execution provider (pure model inference acceleration).
362376
- **`cuda-full`**: `cuda` + `cuda-runtime-build` (Model + Image Preprocessing acceleration).
363377
- **`tensorrt-full`**: `tensorrt` + `cuda-runtime-build` (Model + Image Preprocessing acceleration).
378+
- **`nvrtx-full`**: `nvrtx` + `cuda-runtime-build` (Model + Image Preprocessing acceleration).
364379
- **`coreml`**: Apple Silicon (macOS/iOS).
365380
- **`openvino`**: Intel CPU/GPU/VPU.
366381
- **`onednn`**: Intel Deep Neural Network Library.
@@ -397,6 +412,16 @@ cargo run -r --example yolo -- --help
397412

398413
> **Note**: `tensorrt-cuda-*` features enable **TensorRT execution provider** with CUDA runtime libraries for image processing. The "cuda" in the name refers to `cudarc` dependency.
399414
415+
- ### NVRTX Support
416+
NVIDIA NvTensorRT-RTX execution provider with CUDA runtime libraries:
417+
418+
- **`nvrtx-full`**: Uses `cuda-version-from-build-system` (auto-detects via `nvcc`).
419+
- **`nvrtx-cuda-11040`**, **`nvrtx-cuda-11050`**, **`nvrtx-cuda-11060`**, **`nvrtx-cuda-11070`**, **`nvrtx-cuda-11080`**: NVRTX + CUDA 11.x runtime.
420+
- **`nvrtx-cuda-12000`**, **`nvrtx-cuda-12010`**, **`nvrtx-cuda-12020`**, **`nvrtx-cuda-12030`**, **`nvrtx-cuda-12040`**, **`nvrtx-cuda-12050`**, **`nvrtx-cuda-12060`**, **`nvrtx-cuda-12080`**, **`nvrtx-cuda-12090`**: NVRTX + CUDA 12.x runtime.
421+
- **`nvrtx-cuda-13000`**, **`nvrtx-cuda-13010`**: NVRTX + CUDA 13.x runtime.
422+
423+
> **Note**: `nvrtx-cuda-*` features enable **NVRTX execution provider** with CUDA runtime libraries for image processing. The "cuda" in the name refers to `cudarc` dependency.
424+
400425
---
401426

402427
## 🚀 Device Combination Guide
@@ -419,6 +444,14 @@ cargo run -r --example yolo -- --help
419444
- **Other Issues**: For other questions or bug reports, see [issues](https://github.com/jamjamjon/usls/issues) or open a new discussion.
420445

421446

447+
#### ⚠️ Compatibility Note
448+
449+
If you encounter linking errors with `__isoc23_strtoll` or similar glibc symbols, use the dynamic loading feature:
450+
451+
```bash
452+
cargo run -F ort-load-dynamic --example
453+
```
454+
422455
#### **Why no LM models?**
423456

424457
This project focuses on vision and VLM models under 1B parameters for efficient inference.

examples/annotator/hbb.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ fn demo_hbb_styles(
8787
Hbb::default()
8888
.with_xyxy(x, 450.0, x + 280.0, 700.0)
8989
.with_id(i + 4)
90-
.with_name(&format!("thickness={}", thickness))
90+
.with_name(&format!("thickness={thickness}"))
9191
.with_confidence(0.88)
9292
.with_style(
9393
HbbStyle::default()
@@ -98,7 +98,7 @@ fn demo_hbb_styles(
9898
);
9999

100100
// Add thickness label
101-
let label = format!("Direction: {}", name);
101+
let label = format!("Direction: {name}");
102102
hbbs.push(
103103
Hbb::default()
104104
.with_xyxy(x + 10.0, 720.0, x + 270.0, 750.0)

examples/annotator/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ fn blank_canvas(width: u32, height: u32, bg: Color) -> RgbaImage {
9292
fn save_to(img: &RgbaImage, sub_dir: &str, name: &str) -> anyhow::Result<()> {
9393
let path = usls::Dir::Current
9494
.base_dir_with_subs(&["runs", "Annotate", sub_dir])?
95-
.join(format!("{}.png", name));
95+
.join(format!("{name}.png"));
9696
img.save(path.display().to_string())?;
97-
println!(" Saved: {}/{}.png", sub_dir, name);
97+
println!(" Saved: {sub_dir}/{name}.png");
9898
Ok(())
9999
}

examples/background-removal/ben2.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub fn config(args: &Ben2Args) -> Result<Config> {
4141
.with_dtype_all(args.dtype)
4242
.with_device_all(args.device)
4343
.with_image_processor_device(args.processor_device)
44-
.with_batch_size_all_min_opt_max(args.min_batch, args.batch, args.max_batch)
44+
.with_batch_size_min_opt_max_all(args.min_batch, args.batch, args.max_batch)
4545
.with_num_dry_run_all(args.num_dry_run);
4646

4747
Ok(config)

examples/background-removal/rmbg.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ pub fn config(args: &RmbgArgs) -> Result<Config> {
4545
}
4646
.with_dtype_all(args.dtype)
4747
.with_device_all(args.device)
48-
.with_batch_size_all_min_opt_max(args.min_batch, args.batch, args.max_batch)
48+
.with_batch_size_min_opt_max_all(args.min_batch, args.batch, args.max_batch)
4949
.with_num_dry_run_all(args.num_dry_run)
5050
.with_image_processor_device(args.processor_device);
5151

examples/dataloader/main.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ fn main() -> anyhow::Result<()> {
2424
// Read the first valid image from a source
2525
let image = DataLoader::new("./assets/bus.jpg")?.try_read_one()?;
2626
println!("## DataLoader: loaded 1 image with try_read_one():");
27-
println!(" - {:?}", image);
27+
println!(" - {image:?}");
2828

2929
// Read the Nth valid image (0-indexed)
3030
let image = DataLoader::new("./assets/*.jpg")?.try_read_nth(2)?;
3131
println!("## DataLoader: loaded n-th image with try_read_nth():");
32-
println!(" - {:?}", image);
32+
println!(" - {image:?}");
3333

3434
// --- Range of Items ---
3535
// Read a specific range of images using Rust range syntax
@@ -39,7 +39,7 @@ fn main() -> anyhow::Result<()> {
3939
images.len()
4040
);
4141
for image in images {
42-
println!(" - {:?}", image);
42+
println!(" - {image:?}");
4343
}
4444

4545
// --- Batch Loading ---
@@ -59,7 +59,7 @@ fn main() -> anyhow::Result<()> {
5959
images.len()
6060
);
6161
for image in images {
62-
println!(" - {:?}", image);
62+
println!(" - {image:?}");
6363
}
6464

6565
// =========================================================================

examples/depth-estimation/depth_anything.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ pub fn config(args: &DepthAnythingArgs) -> Result<Config> {
6060
args.kind
6161
),
6262
}
63-
.with_batch_size_all_min_opt_max(1, args.batch, 4)
63+
.with_batch_size_min_opt_max_all(1, args.batch, 4)
6464
.with_device_all(args.device)
6565
.with_model_dtype(args.dtype)
6666
.with_image_processor_device(args.processor_device);

examples/depth-estimation/depth_pro.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub fn config(args: &DepthProArgs) -> Result<Config> {
2121
let config = Config::depth_pro()
2222
.with_dtype_all(args.dtype)
2323
.with_device_all(args.device)
24-
.with_batch_size_all_min_opt_max(1, 1, 1)
24+
.with_batch_size_min_opt_max_all(1, 1, 1)
2525
.with_num_dry_run_all(0)
2626
.with_image_processor_device(args.processor_device);
2727

examples/embedding/clip.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ pub fn config(args: &ClipArgs) -> Result<Config> {
5858
}
5959
.with_dtype_all(args.dtype)
6060
.with_device_all(args.device)
61-
.with_batch_size_all_min_opt_max(args.min_batch, args.batch, args.max_batch)
61+
.with_batch_size_min_opt_max_all(args.min_batch, args.batch, args.max_batch)
6262
.with_num_dry_run_all(args.num_dry_run)
6363
.with_image_processor_device(args.processor_device);
6464

0 commit comments

Comments
 (0)