Plana-Archive commited on
Commit
2ac2e06
·
verified ·
1 Parent(s): 9a50d38

Upload monochrome_detection/onnxruntime_.py with huggingface_hub

Browse files
monochrome_detection/onnxruntime_.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ import os
3
+ import shutil
4
+ from typing import Optional
5
+
6
+ from hbutils.system import pip_install
7
+
8
+ __all__ = [
9
+ 'get_onnx_provider', 'open_onnx_model'
10
+ ]
11
+
12
+
13
+ def _ensure_onnxruntime():
14
+ try:
15
+ import onnxruntime
16
+ except (ImportError, ModuleNotFoundError):
17
+ logging.warning('Onnx runtime not installed, preparing to install ...')
18
+ if shutil.which('nvidia-smi'):
19
+ logging.info('Installing onnxruntime-gpu ...')
20
+ pip_install(['onnxruntime-gpu'], silent=True)
21
+ else:
22
+ logging.info('Installing onnxruntime (cpu) ...')
23
+ pip_install(['onnxruntime'], silent=True)
24
+
25
+
26
+ _ensure_onnxruntime()
27
+ from onnxruntime import get_available_providers, get_all_providers, InferenceSession, SessionOptions, \
28
+ GraphOptimizationLevel
29
+
30
+ alias = {
31
+ 'gpu': "CUDAExecutionProvider",
32
+ "trt": "TensorrtExecutionProvider",
33
+ }
34
+
35
+
36
+ def get_onnx_provider(provider: Optional[str] = None):
37
+ if not provider:
38
+ if "CUDAExecutionProvider" in get_available_providers():
39
+ return "CUDAExecutionProvider"
40
+ else:
41
+ return "CPUExecutionProvider"
42
+ elif provider.lower() in alias:
43
+ return alias[provider.lower()]
44
+ else:
45
+ for p in get_all_providers():
46
+ if provider.lower() == p.lower() or f'{provider}ExecutionProvider'.lower() == p.lower():
47
+ return p
48
+
49
+ raise ValueError(f'One of the {get_all_providers()!r} expected, '
50
+ f'but unsupported provider {provider!r} found.')
51
+
52
+
53
+ def _open_onnx_model(ckpt: str, provider: str) -> InferenceSession:
54
+ options = SessionOptions()
55
+ options.graph_optimization_level = GraphOptimizationLevel.ORT_ENABLE_ALL
56
+ if provider == "CPUExecutionProvider":
57
+ options.intra_op_num_threads = os.cpu_count()
58
+
59
+ logging.info(f'Model {ckpt!r} loaded with provider {provider!r}')
60
+ return InferenceSession(ckpt, options, [provider])
61
+
62
+
63
+ def open_onnx_model(ckpt: str, mode: str = None) -> InferenceSession:
64
+ return _open_onnx_model(ckpt, get_onnx_provider(mode))