lumen-app 0.4.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lumen_app/__init__.py +7 -0
- lumen_app/core/__init__.py +0 -0
- lumen_app/core/config.py +661 -0
- lumen_app/core/installer.py +274 -0
- lumen_app/core/loader.py +45 -0
- lumen_app/core/router.py +87 -0
- lumen_app/core/server.py +389 -0
- lumen_app/core/service.py +49 -0
- lumen_app/core/tests/__init__.py +1 -0
- lumen_app/core/tests/test_core_integration.py +561 -0
- lumen_app/core/tests/test_env_checker.py +487 -0
- lumen_app/proto/README.md +12 -0
- lumen_app/proto/ml_service.proto +88 -0
- lumen_app/proto/ml_service_pb2.py +66 -0
- lumen_app/proto/ml_service_pb2.pyi +136 -0
- lumen_app/proto/ml_service_pb2_grpc.py +251 -0
- lumen_app/server.py +362 -0
- lumen_app/utils/env_checker.py +752 -0
- lumen_app/utils/installation/__init__.py +25 -0
- lumen_app/utils/installation/env_manager.py +152 -0
- lumen_app/utils/installation/micromamba_installer.py +459 -0
- lumen_app/utils/installation/package_installer.py +149 -0
- lumen_app/utils/installation/verifier.py +95 -0
- lumen_app/utils/logger.py +181 -0
- lumen_app/utils/mamba/cuda.yaml +12 -0
- lumen_app/utils/mamba/default.yaml +6 -0
- lumen_app/utils/mamba/openvino.yaml +7 -0
- lumen_app/utils/mamba/tensorrt.yaml +13 -0
- lumen_app/utils/package_resolver.py +309 -0
- lumen_app/utils/preset_registry.py +219 -0
- lumen_app/web/__init__.py +3 -0
- lumen_app/web/api/__init__.py +1 -0
- lumen_app/web/api/config.py +229 -0
- lumen_app/web/api/hardware.py +201 -0
- lumen_app/web/api/install.py +608 -0
- lumen_app/web/api/server.py +253 -0
- lumen_app/web/core/__init__.py +1 -0
- lumen_app/web/core/server_manager.py +348 -0
- lumen_app/web/core/state.py +264 -0
- lumen_app/web/main.py +145 -0
- lumen_app/web/models/__init__.py +28 -0
- lumen_app/web/models/config.py +63 -0
- lumen_app/web/models/hardware.py +64 -0
- lumen_app/web/models/install.py +134 -0
- lumen_app/web/models/server.py +95 -0
- lumen_app/web/static/assets/index-CGuhGHC9.css +1 -0
- lumen_app/web/static/assets/index-DN6HmxWS.js +56 -0
- lumen_app/web/static/index.html +14 -0
- lumen_app/web/static/vite.svg +1 -0
- lumen_app/web/websockets/__init__.py +1 -0
- lumen_app/web/websockets/logs.py +159 -0
- lumen_app-0.4.2.dist-info/METADATA +23 -0
- lumen_app-0.4.2.dist-info/RECORD +56 -0
- lumen_app-0.4.2.dist-info/WHEEL +5 -0
- lumen_app-0.4.2.dist-info/entry_points.txt +3 -0
- lumen_app-0.4.2.dist-info/top_level.txt +1 -0
lumen_app/__init__.py
ADDED
|
File without changes
|
lumen_app/core/config.py
ADDED
|
@@ -0,0 +1,661 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Literal
|
|
3
|
+
|
|
4
|
+
from lumen_resources import LumenConfig
|
|
5
|
+
from lumen_resources.lumen_config import (
|
|
6
|
+
BackendSettings,
|
|
7
|
+
Deployment1,
|
|
8
|
+
ImportInfo,
|
|
9
|
+
Mdns,
|
|
10
|
+
Metadata,
|
|
11
|
+
ModelConfig,
|
|
12
|
+
Region,
|
|
13
|
+
Runtime,
|
|
14
|
+
Server,
|
|
15
|
+
Service,
|
|
16
|
+
Services,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class DependencyMetadata:
|
|
22
|
+
"""Python 依赖元数据(pip 管理的部分)。
|
|
23
|
+
|
|
24
|
+
用于描述特定平台的 Python 依赖安装要求,包括可选依赖标识符、
|
|
25
|
+
额外的 PyPI 索引 URL 等。
|
|
26
|
+
|
|
27
|
+
Attributes:
|
|
28
|
+
extra_index_url: 额外的 PyPI 索引 URL(如 CUDA PyTorch 索引)
|
|
29
|
+
extra_deps: 可选依赖标识符(对应 pyproject.toml 中的 [project.optional-dependencies])
|
|
30
|
+
python_version: Python 版本要求
|
|
31
|
+
install_args: 额外的 pip 安装参数
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
extra_index_url: list[str] | None = None
|
|
35
|
+
extra_deps: list[str] | None = None
|
|
36
|
+
python_version: str = "3.11"
|
|
37
|
+
install_args: list[str] | None = None
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@dataclass
|
|
41
|
+
class DeviceConfig:
|
|
42
|
+
"""设备配置类。
|
|
43
|
+
|
|
44
|
+
定义特定硬件平台的推理配置,包括运行时、ONNX 提供者、
|
|
45
|
+
批处理大小、精度,以及相关的依赖元数据。
|
|
46
|
+
|
|
47
|
+
Attributes:
|
|
48
|
+
runtime: 推理运行时类型(torch/onnx/rknn)
|
|
49
|
+
onnx_providers: ONNX 执行提供者列表
|
|
50
|
+
rknn_device: RKNN 设备标识(如 "rk3588")
|
|
51
|
+
batch_size: 设备硬编码批处理大小(如 CPU/NPU 固定为 1)
|
|
52
|
+
description: 设备描述
|
|
53
|
+
precision: 设备硬编码精度(根据设备支持情况自动选择)
|
|
54
|
+
env: mamba yaml 配置文件标识符(default/cuda/openvino/tensorrt)
|
|
55
|
+
os: 操作系统约束(linux/win/darwin)
|
|
56
|
+
dependency_metadata: Python 依赖元数据
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
runtime: Runtime
|
|
60
|
+
onnx_providers: list | None
|
|
61
|
+
rknn_device: str | None = None # 如 "rk3588"
|
|
62
|
+
batch_size: int | None = (
|
|
63
|
+
None # 设备硬编码batch_size,如cpu, npu设备均为1,如果是动态batch_size 设备,则为None,可以在后续根据任务类型/期望配置灵活调整。将会覆盖LumenConig中的batch_size字段。
|
|
64
|
+
)
|
|
65
|
+
description: str = ""
|
|
66
|
+
precision: str | None = (
|
|
67
|
+
None # 设备硬编码精度,根据设备的支持情况,自动选择最优的精度,将会覆盖LumenConfig中的precision字段。
|
|
68
|
+
)
|
|
69
|
+
env: str = "default" # mamba yaml 配置文件标识符
|
|
70
|
+
os: str | None = None # 操作系统约束 (linux/win/darwin)
|
|
71
|
+
dependency_metadata: DependencyMetadata | None = None # Python 依赖元数据
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def rockchip(cls, rknn_device: str):
|
|
75
|
+
return cls(
|
|
76
|
+
runtime=Runtime.rknn,
|
|
77
|
+
onnx_providers=None,
|
|
78
|
+
rknn_device=rknn_device,
|
|
79
|
+
batch_size=1, # NPU fixed to 1 batch size
|
|
80
|
+
description="Preset for Rockchip NPU",
|
|
81
|
+
precision="int8",
|
|
82
|
+
env="default",
|
|
83
|
+
dependency_metadata=DependencyMetadata(extra_deps=["rknn"]),
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
@classmethod
|
|
87
|
+
def apple_silicon(cls, cache_dir: str = "."):
|
|
88
|
+
return cls(
|
|
89
|
+
runtime=Runtime.onnx,
|
|
90
|
+
onnx_providers=[
|
|
91
|
+
(
|
|
92
|
+
"CoreMLExecutionProvider",
|
|
93
|
+
{
|
|
94
|
+
"ModelFormat": "MLProgram",
|
|
95
|
+
"MLComputeUnits": "ALL",
|
|
96
|
+
"RequireStaticInputShapes": "0",
|
|
97
|
+
"EnableOnSubgraphs": "0",
|
|
98
|
+
"SpecializationStrategy": "FastPrediction",
|
|
99
|
+
"ModelCacheDirectory": f"{cache_dir}/cache/coreml",
|
|
100
|
+
},
|
|
101
|
+
),
|
|
102
|
+
"CPUExecutionProvider",
|
|
103
|
+
],
|
|
104
|
+
batch_size=1, # NPU fixed to 1 batch size
|
|
105
|
+
description="Preset for Apple Silicon",
|
|
106
|
+
env="default",
|
|
107
|
+
dependency_metadata=DependencyMetadata(extra_deps=["apple"]),
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
@classmethod
|
|
111
|
+
def nvidia_gpu(cls):
|
|
112
|
+
return cls(
|
|
113
|
+
runtime=Runtime.onnx,
|
|
114
|
+
onnx_providers=[
|
|
115
|
+
("CUDAExecutionProvider", {"cudnn_conv_algo_search": "HEURISTIC"}),
|
|
116
|
+
"CPUExecutionProvider",
|
|
117
|
+
],
|
|
118
|
+
batch_size=4,
|
|
119
|
+
description="Preset for low RAM (< 12GB) Nvidia GPUs",
|
|
120
|
+
env="cuda",
|
|
121
|
+
dependency_metadata=DependencyMetadata(
|
|
122
|
+
extra_deps=["cuda"],
|
|
123
|
+
),
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
@classmethod
|
|
127
|
+
def nvidia_gpu_high(cls, cache_dir: str = "."):
|
|
128
|
+
return cls(
|
|
129
|
+
runtime=Runtime.onnx,
|
|
130
|
+
onnx_providers=[
|
|
131
|
+
(
|
|
132
|
+
"TensorRTExecutionProvider",
|
|
133
|
+
{
|
|
134
|
+
"trt_fp16_enable": True,
|
|
135
|
+
"trt_engine_cache_enable": True,
|
|
136
|
+
"trt_engine_cache_path": f"{cache_dir}/cache/trt",
|
|
137
|
+
"trt_max_workspace_size": 2147483648, # 2GB
|
|
138
|
+
},
|
|
139
|
+
),
|
|
140
|
+
"CUDAExecutionProvider",
|
|
141
|
+
"CPUExecutionProvider",
|
|
142
|
+
],
|
|
143
|
+
description="Preset for high RAM (>= 12GB) Nvidia GPUs",
|
|
144
|
+
env="tensorrt",
|
|
145
|
+
dependency_metadata=DependencyMetadata(
|
|
146
|
+
extra_deps=["cuda"],
|
|
147
|
+
),
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
@classmethod
|
|
151
|
+
def intel_gpu(cls, cache_dir: str = "."):
|
|
152
|
+
return cls(
|
|
153
|
+
runtime=Runtime.onnx,
|
|
154
|
+
onnx_providers=[
|
|
155
|
+
(
|
|
156
|
+
"OpenVINOExecutionProvider",
|
|
157
|
+
{
|
|
158
|
+
"device_type": "GPU",
|
|
159
|
+
"precision": "FP16",
|
|
160
|
+
"num_streams": 1,
|
|
161
|
+
"cache_dir": f"{cache_dir}/cache/ov",
|
|
162
|
+
},
|
|
163
|
+
),
|
|
164
|
+
"CPUExecutionProvider",
|
|
165
|
+
],
|
|
166
|
+
description="Preset for Intel iGPU or Arc GPU",
|
|
167
|
+
precision="fp16",
|
|
168
|
+
env="openvino",
|
|
169
|
+
dependency_metadata=DependencyMetadata(extra_deps=["openvino"]),
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
# ROCm Support is under evaluation.
|
|
173
|
+
# @classmethod
|
|
174
|
+
# def amd_gpu(cls):
|
|
175
|
+
# return cls(
|
|
176
|
+
# runtime=Runtime.onnx,
|
|
177
|
+
# onnx_providers=[
|
|
178
|
+
# (
|
|
179
|
+
# "MIGraphXExecutionProvider",
|
|
180
|
+
# {
|
|
181
|
+
# "migraphx_fp16_enable": 1,
|
|
182
|
+
# "migraphx_int8_enable": 0,
|
|
183
|
+
# "migraphx_exhaustive_tune": 0,
|
|
184
|
+
# },
|
|
185
|
+
# ),
|
|
186
|
+
# "CPUExecutionProvider",
|
|
187
|
+
# ],
|
|
188
|
+
# description="Preset for AMD Radeon GPUs",
|
|
189
|
+
# precision="fp16",
|
|
190
|
+
# )
|
|
191
|
+
|
|
192
|
+
@classmethod
|
|
193
|
+
def amd_gpu_win(cls):
|
|
194
|
+
"""
|
|
195
|
+
Installation instruction: Refer to https://ryzenai.docs.amd.com/en/latest/gpu/ryzenai_gpu.html
|
|
196
|
+
"""
|
|
197
|
+
return cls(
|
|
198
|
+
runtime=Runtime.onnx,
|
|
199
|
+
onnx_providers=[
|
|
200
|
+
"DMLExecutionProvider",
|
|
201
|
+
"CPUExecutionProvider",
|
|
202
|
+
],
|
|
203
|
+
description="Preset for AMD Ryzen GPUs",
|
|
204
|
+
env="default",
|
|
205
|
+
dependency_metadata=DependencyMetadata(extra_deps=["cpu"]),
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
@classmethod
|
|
209
|
+
def amd_npu(cls, cache_dir: str = "."):
|
|
210
|
+
"""
|
|
211
|
+
Installation instruction: Refer to https://ryzenai.docs.amd.com/en/latest/inst.html
|
|
212
|
+
"""
|
|
213
|
+
return cls(
|
|
214
|
+
runtime=Runtime.onnx,
|
|
215
|
+
onnx_providers=[
|
|
216
|
+
("VitisAIExecutionProvider", {"cache_dir": f"{cache_dir}/cache/amd"}),
|
|
217
|
+
"CPUExecutionProvider",
|
|
218
|
+
],
|
|
219
|
+
description="Preset for AMD Ryzen NPUs",
|
|
220
|
+
env="default",
|
|
221
|
+
dependency_metadata=DependencyMetadata(extra_deps=["cpu"]),
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
@classmethod
|
|
225
|
+
def nvidia_jetson(cls):
|
|
226
|
+
return cls(
|
|
227
|
+
runtime=Runtime.onnx,
|
|
228
|
+
onnx_providers=[
|
|
229
|
+
("CUDAExecutionProvider", {"cudnn_conv_algo_search": "HEURISTIC"}),
|
|
230
|
+
"CPUExecutionProvider",
|
|
231
|
+
],
|
|
232
|
+
description="Preset for low RAM (< 12GB) Nvidia Jetson Devices",
|
|
233
|
+
env="default",
|
|
234
|
+
os="linux",
|
|
235
|
+
dependency_metadata=DependencyMetadata(
|
|
236
|
+
extra_index_url=["https://pypi.jetson-ai-lab.io/jp6/cu126"],
|
|
237
|
+
extra_deps=["cuda"],
|
|
238
|
+
),
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
@classmethod
|
|
242
|
+
def nvidia_jetson_high(cls):
|
|
243
|
+
return cls(
|
|
244
|
+
runtime=Runtime.onnx,
|
|
245
|
+
onnx_providers=[
|
|
246
|
+
(
|
|
247
|
+
"TensorRTExecutionProvider",
|
|
248
|
+
{
|
|
249
|
+
"trt_fp16_enable": True,
|
|
250
|
+
"trt_engine_cache_enable": True,
|
|
251
|
+
"trt_engine_cache_path": "./cache/trt",
|
|
252
|
+
"trt_max_workspace_size": 2147483648,
|
|
253
|
+
},
|
|
254
|
+
),
|
|
255
|
+
"CUDAExecutionProvider",
|
|
256
|
+
"CPUExecutionProvider",
|
|
257
|
+
],
|
|
258
|
+
description="Preset for high RAM (>= 12GB) Nvidia Jetson Devices",
|
|
259
|
+
env="default",
|
|
260
|
+
os="linux",
|
|
261
|
+
dependency_metadata=DependencyMetadata(
|
|
262
|
+
extra_index_url=["https://pypi.jetson-ai-lab.io/jp6/cu126"],
|
|
263
|
+
extra_deps=["cuda"],
|
|
264
|
+
),
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
@classmethod
|
|
268
|
+
def cpu(cls):
|
|
269
|
+
return cls(
|
|
270
|
+
runtime=Runtime.onnx,
|
|
271
|
+
onnx_providers=[
|
|
272
|
+
"CPUExecutionProvider",
|
|
273
|
+
],
|
|
274
|
+
batch_size=1,
|
|
275
|
+
description="Preset General CPUs",
|
|
276
|
+
env="default",
|
|
277
|
+
dependency_metadata=DependencyMetadata(extra_deps=["cpu"]),
|
|
278
|
+
)
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
class Config:
|
|
282
|
+
def __init__(
|
|
283
|
+
self,
|
|
284
|
+
cache_dir: str,
|
|
285
|
+
device_config: DeviceConfig,
|
|
286
|
+
region: Region,
|
|
287
|
+
service_name: str,
|
|
288
|
+
port: int | None,
|
|
289
|
+
):
|
|
290
|
+
self.cache_dir: str = cache_dir
|
|
291
|
+
self.region: Region = region
|
|
292
|
+
self.port: int = port or 50051
|
|
293
|
+
self.service_name: str = service_name
|
|
294
|
+
|
|
295
|
+
self.unified_runtime: Runtime = device_config.runtime
|
|
296
|
+
self.unified_rknn_device: str | None = device_config.rknn_device
|
|
297
|
+
self.device_config: DeviceConfig = device_config
|
|
298
|
+
|
|
299
|
+
def minimal(self) -> LumenConfig:
|
|
300
|
+
return LumenConfig(
|
|
301
|
+
metadata=Metadata(
|
|
302
|
+
version="1.0.0",
|
|
303
|
+
region=self.region,
|
|
304
|
+
cache_dir=self.cache_dir,
|
|
305
|
+
),
|
|
306
|
+
deployment=Deployment1(
|
|
307
|
+
mode="hub", services=[Service(root="ocr")], service=None
|
|
308
|
+
),
|
|
309
|
+
server=Server(
|
|
310
|
+
port=self.port,
|
|
311
|
+
host="0.0.0.0",
|
|
312
|
+
mdns=Mdns(enabled=True, service_name=self.service_name),
|
|
313
|
+
),
|
|
314
|
+
services={
|
|
315
|
+
"ocr": Services(
|
|
316
|
+
enabled=True,
|
|
317
|
+
package="lumen_ocr",
|
|
318
|
+
import_info=ImportInfo(
|
|
319
|
+
registry_class="lumen_ocr.general_ocr.GeneralOcrService",
|
|
320
|
+
add_to_server="lumen_ocr.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
321
|
+
),
|
|
322
|
+
backend_settings=BackendSettings(
|
|
323
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
324
|
+
batch_size=self.device_config.batch_size or 1,
|
|
325
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
326
|
+
),
|
|
327
|
+
models={
|
|
328
|
+
"general": ModelConfig(
|
|
329
|
+
model="PP-OCRv5",
|
|
330
|
+
runtime=self.unified_runtime,
|
|
331
|
+
rknn_device=self.unified_rknn_device,
|
|
332
|
+
precision="fp32",
|
|
333
|
+
dataset=None,
|
|
334
|
+
)
|
|
335
|
+
},
|
|
336
|
+
)
|
|
337
|
+
},
|
|
338
|
+
)
|
|
339
|
+
|
|
340
|
+
def light_weight(
|
|
341
|
+
self, clip_model: Literal["MobileCLIP2-S2", "CN-CLIP_ViT-B-16"]
|
|
342
|
+
) -> LumenConfig:
|
|
343
|
+
return LumenConfig(
|
|
344
|
+
metadata=Metadata(
|
|
345
|
+
version="1.0.0",
|
|
346
|
+
region=self.region,
|
|
347
|
+
cache_dir=self.cache_dir,
|
|
348
|
+
),
|
|
349
|
+
deployment=Deployment1(
|
|
350
|
+
mode="hub",
|
|
351
|
+
services=[
|
|
352
|
+
Service(root="ocr"),
|
|
353
|
+
Service(root="clip"),
|
|
354
|
+
Service(root="face"),
|
|
355
|
+
],
|
|
356
|
+
service=None,
|
|
357
|
+
),
|
|
358
|
+
server=Server(
|
|
359
|
+
port=self.port,
|
|
360
|
+
host="0.0.0.0",
|
|
361
|
+
mdns=Mdns(enabled=True, service_name=self.service_name),
|
|
362
|
+
),
|
|
363
|
+
services={
|
|
364
|
+
"ocr": Services(
|
|
365
|
+
enabled=True,
|
|
366
|
+
package="lumen_ocr",
|
|
367
|
+
import_info=ImportInfo(
|
|
368
|
+
registry_class="lumen_ocr.general_ocr.GeneralOcrService",
|
|
369
|
+
add_to_server="lumen_ocr.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
370
|
+
),
|
|
371
|
+
backend_settings=BackendSettings(
|
|
372
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
373
|
+
batch_size=self.device_config.batch_size or 1,
|
|
374
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
375
|
+
),
|
|
376
|
+
models={
|
|
377
|
+
"general": ModelConfig(
|
|
378
|
+
model="PP-OCRv5",
|
|
379
|
+
runtime=self.unified_runtime,
|
|
380
|
+
rknn_device=self.unified_rknn_device,
|
|
381
|
+
precision="fp32",
|
|
382
|
+
dataset=None,
|
|
383
|
+
)
|
|
384
|
+
},
|
|
385
|
+
),
|
|
386
|
+
"clip": Services(
|
|
387
|
+
enabled=True,
|
|
388
|
+
package="lumen_clip",
|
|
389
|
+
import_info=ImportInfo(
|
|
390
|
+
registry_class="lumen_clip.general_clip.clip_service.GeneralCLIPService",
|
|
391
|
+
add_to_server="lumen_clip.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
392
|
+
),
|
|
393
|
+
backend_settings=BackendSettings(
|
|
394
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
395
|
+
batch_size=self.device_config.batch_size or 1,
|
|
396
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
397
|
+
),
|
|
398
|
+
models={
|
|
399
|
+
"general": ModelConfig(
|
|
400
|
+
model=clip_model,
|
|
401
|
+
runtime=self.unified_runtime,
|
|
402
|
+
rknn_device=self.unified_rknn_device,
|
|
403
|
+
dataset="ImageNet_1k",
|
|
404
|
+
precision=self.device_config.precision or "fp16",
|
|
405
|
+
)
|
|
406
|
+
},
|
|
407
|
+
),
|
|
408
|
+
"face": Services(
|
|
409
|
+
enabled=True,
|
|
410
|
+
package="lumen_face",
|
|
411
|
+
import_info=ImportInfo(
|
|
412
|
+
registry_class="lumen_face.general_face.GeneralFaceService",
|
|
413
|
+
add_to_server="lumen_face.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
414
|
+
),
|
|
415
|
+
backend_settings=BackendSettings(
|
|
416
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
417
|
+
batch_size=self.device_config.batch_size or 1,
|
|
418
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
419
|
+
),
|
|
420
|
+
models={
|
|
421
|
+
"general": ModelConfig(
|
|
422
|
+
model="buffalo_l",
|
|
423
|
+
runtime=self.unified_runtime,
|
|
424
|
+
rknn_device=self.unified_rknn_device,
|
|
425
|
+
precision=self.device_config.precision or "fp16",
|
|
426
|
+
dataset=None,
|
|
427
|
+
)
|
|
428
|
+
},
|
|
429
|
+
),
|
|
430
|
+
},
|
|
431
|
+
)
|
|
432
|
+
|
|
433
|
+
def basic(
|
|
434
|
+
self, clip_model: Literal["MobileCLIP2-S4", "CN-CLIP_ViT-L-14"]
|
|
435
|
+
) -> LumenConfig:
|
|
436
|
+
return LumenConfig(
|
|
437
|
+
metadata=Metadata(
|
|
438
|
+
version="1.0.0",
|
|
439
|
+
region=self.region,
|
|
440
|
+
cache_dir=self.cache_dir,
|
|
441
|
+
),
|
|
442
|
+
deployment=Deployment1(
|
|
443
|
+
mode="hub",
|
|
444
|
+
services=[
|
|
445
|
+
Service(root="ocr"),
|
|
446
|
+
Service(root="clip"),
|
|
447
|
+
Service(root="face"),
|
|
448
|
+
Service(root="vlm"),
|
|
449
|
+
],
|
|
450
|
+
service=None,
|
|
451
|
+
),
|
|
452
|
+
server=Server(
|
|
453
|
+
port=self.port,
|
|
454
|
+
host="0.0.0.0",
|
|
455
|
+
mdns=Mdns(enabled=True, service_name=self.service_name),
|
|
456
|
+
),
|
|
457
|
+
services={
|
|
458
|
+
"ocr": Services(
|
|
459
|
+
enabled=True,
|
|
460
|
+
package="lumen_ocr",
|
|
461
|
+
import_info=ImportInfo(
|
|
462
|
+
registry_class="lumen_ocr.general_ocr.GeneralOcrService",
|
|
463
|
+
add_to_server="lumen_ocr.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
464
|
+
),
|
|
465
|
+
backend_settings=BackendSettings(
|
|
466
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
467
|
+
batch_size=self.device_config.batch_size or 5,
|
|
468
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
469
|
+
),
|
|
470
|
+
models={
|
|
471
|
+
"general": ModelConfig(
|
|
472
|
+
model="PP-OCRv5",
|
|
473
|
+
runtime=self.unified_runtime,
|
|
474
|
+
rknn_device=self.unified_rknn_device,
|
|
475
|
+
precision=self.device_config.precision or "fp32",
|
|
476
|
+
dataset=None,
|
|
477
|
+
)
|
|
478
|
+
},
|
|
479
|
+
),
|
|
480
|
+
"clip": Services(
|
|
481
|
+
enabled=True,
|
|
482
|
+
package="lumen_clip",
|
|
483
|
+
import_info=ImportInfo(
|
|
484
|
+
registry_class="lumen_clip.general_clip.clip_service.GeneralCLIPService",
|
|
485
|
+
add_to_server="lumen_clip.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
486
|
+
),
|
|
487
|
+
backend_settings=BackendSettings(
|
|
488
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
489
|
+
batch_size=self.device_config.batch_size or 5,
|
|
490
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
491
|
+
),
|
|
492
|
+
models={
|
|
493
|
+
"general": ModelConfig(
|
|
494
|
+
model=clip_model,
|
|
495
|
+
runtime=self.unified_runtime,
|
|
496
|
+
rknn_device=self.unified_rknn_device,
|
|
497
|
+
dataset="ImageNet_1k",
|
|
498
|
+
precision=self.device_config.precision or "fp16",
|
|
499
|
+
)
|
|
500
|
+
},
|
|
501
|
+
),
|
|
502
|
+
"face": Services(
|
|
503
|
+
enabled=True,
|
|
504
|
+
package="lumen_face",
|
|
505
|
+
import_info=ImportInfo(
|
|
506
|
+
registry_class="lumen_face.general_face.GeneralFaceService",
|
|
507
|
+
add_to_server="lumen_face.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
508
|
+
),
|
|
509
|
+
backend_settings=BackendSettings(
|
|
510
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
511
|
+
batch_size=self.device_config.batch_size or 5,
|
|
512
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
513
|
+
),
|
|
514
|
+
models={
|
|
515
|
+
"general": ModelConfig(
|
|
516
|
+
model="antelopev2",
|
|
517
|
+
runtime=self.unified_runtime,
|
|
518
|
+
rknn_device=self.unified_rknn_device,
|
|
519
|
+
precision=self.device_config.precision or "fp16",
|
|
520
|
+
dataset=None,
|
|
521
|
+
)
|
|
522
|
+
},
|
|
523
|
+
),
|
|
524
|
+
"vlm": Services(
|
|
525
|
+
enabled=True,
|
|
526
|
+
package="lumen_vlm",
|
|
527
|
+
import_info=ImportInfo(
|
|
528
|
+
registry_class="lumen_vlm.fastvlm.GeneralFastVLMService",
|
|
529
|
+
add_to_server="lumen_vlm.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
530
|
+
),
|
|
531
|
+
backend_settings=BackendSettings(
|
|
532
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
533
|
+
batch_size=self.device_config.batch_size or 1,
|
|
534
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
535
|
+
),
|
|
536
|
+
models={
|
|
537
|
+
"general": ModelConfig(
|
|
538
|
+
model="FastVLM-0.5B",
|
|
539
|
+
runtime=self.unified_runtime,
|
|
540
|
+
rknn_device=self.unified_rknn_device,
|
|
541
|
+
precision=self.device_config.precision or "int8",
|
|
542
|
+
dataset=None,
|
|
543
|
+
)
|
|
544
|
+
},
|
|
545
|
+
),
|
|
546
|
+
},
|
|
547
|
+
)
|
|
548
|
+
|
|
549
|
+
def brave(self) -> LumenConfig:
|
|
550
|
+
return LumenConfig(
|
|
551
|
+
metadata=Metadata(
|
|
552
|
+
version="1.0.0",
|
|
553
|
+
region=self.region,
|
|
554
|
+
cache_dir=self.cache_dir,
|
|
555
|
+
),
|
|
556
|
+
deployment=Deployment1(
|
|
557
|
+
mode="hub",
|
|
558
|
+
service=None, # None for hub mode
|
|
559
|
+
services=[
|
|
560
|
+
Service(root="ocr"),
|
|
561
|
+
Service(root="clip"),
|
|
562
|
+
Service(root="face"),
|
|
563
|
+
Service(root="vlm"),
|
|
564
|
+
],
|
|
565
|
+
),
|
|
566
|
+
server=Server(
|
|
567
|
+
port=self.port,
|
|
568
|
+
host="0.0.0.0",
|
|
569
|
+
mdns=Mdns(enabled=True, service_name=self.service_name),
|
|
570
|
+
),
|
|
571
|
+
services={
|
|
572
|
+
"ocr": Services(
|
|
573
|
+
enabled=True,
|
|
574
|
+
package="lumen_ocr",
|
|
575
|
+
import_info=ImportInfo(
|
|
576
|
+
registry_class="lumen_ocr.general_ocr.GeneralOcrService",
|
|
577
|
+
add_to_server="lumen_ocr.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
578
|
+
),
|
|
579
|
+
backend_settings=BackendSettings(
|
|
580
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
581
|
+
batch_size=self.device_config.batch_size or 10,
|
|
582
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
583
|
+
),
|
|
584
|
+
models={
|
|
585
|
+
"general": ModelConfig(
|
|
586
|
+
model="PP-OCRv5",
|
|
587
|
+
runtime=self.unified_runtime,
|
|
588
|
+
rknn_device=self.unified_rknn_device,
|
|
589
|
+
precision=self.device_config.precision or "fp32",
|
|
590
|
+
dataset=None,
|
|
591
|
+
)
|
|
592
|
+
},
|
|
593
|
+
),
|
|
594
|
+
"clip": Services(
|
|
595
|
+
enabled=True,
|
|
596
|
+
package="lumen_clip",
|
|
597
|
+
import_info=ImportInfo(
|
|
598
|
+
registry_class="lumen_clip.expert_bioclip.BioCLIPService",
|
|
599
|
+
add_to_server="lumen_clip.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
600
|
+
),
|
|
601
|
+
backend_settings=BackendSettings(
|
|
602
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
603
|
+
batch_size=self.device_config.batch_size or 8,
|
|
604
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
605
|
+
),
|
|
606
|
+
models={
|
|
607
|
+
"bioclip": ModelConfig(
|
|
608
|
+
model="bioclip-2",
|
|
609
|
+
runtime=self.unified_runtime,
|
|
610
|
+
rknn_device=self.unified_rknn_device,
|
|
611
|
+
dataset="TreeOfLife-200M",
|
|
612
|
+
precision=self.device_config.precision or "fp16",
|
|
613
|
+
)
|
|
614
|
+
},
|
|
615
|
+
),
|
|
616
|
+
"face": Services(
|
|
617
|
+
enabled=True,
|
|
618
|
+
package="lumen_face",
|
|
619
|
+
import_info=ImportInfo(
|
|
620
|
+
registry_class="lumen_face.general_face.GeneralFaceService",
|
|
621
|
+
add_to_server="lumen_face.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
622
|
+
),
|
|
623
|
+
backend_settings=BackendSettings(
|
|
624
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
625
|
+
batch_size=self.device_config.batch_size or 8,
|
|
626
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
627
|
+
),
|
|
628
|
+
models={
|
|
629
|
+
"general": ModelConfig(
|
|
630
|
+
model="antelopev2",
|
|
631
|
+
runtime=self.unified_runtime,
|
|
632
|
+
rknn_device=self.unified_rknn_device,
|
|
633
|
+
precision=self.device_config.precision or "fp16",
|
|
634
|
+
dataset=None,
|
|
635
|
+
)
|
|
636
|
+
},
|
|
637
|
+
),
|
|
638
|
+
"vlm": Services(
|
|
639
|
+
enabled=True,
|
|
640
|
+
package="lumen_vlm",
|
|
641
|
+
import_info=ImportInfo(
|
|
642
|
+
registry_class="lumen_vlm.fastvlm.GeneralFastVLMService",
|
|
643
|
+
add_to_server="lumen_vlm.proto.ml_service_pb2_grpc.add_InferenceServicer_to_server",
|
|
644
|
+
),
|
|
645
|
+
backend_settings=BackendSettings(
|
|
646
|
+
device=None, # Auto Detect For Non-PyTorch Backend
|
|
647
|
+
batch_size=self.device_config.batch_size or 1,
|
|
648
|
+
onnx_providers=self.device_config.onnx_providers,
|
|
649
|
+
),
|
|
650
|
+
models={
|
|
651
|
+
"general": ModelConfig(
|
|
652
|
+
model="FastVLM-0.5B",
|
|
653
|
+
runtime=self.unified_runtime,
|
|
654
|
+
rknn_device=self.unified_rknn_device,
|
|
655
|
+
precision=self.device_config.precision or "fp16",
|
|
656
|
+
dataset=None,
|
|
657
|
+
)
|
|
658
|
+
},
|
|
659
|
+
),
|
|
660
|
+
},
|
|
661
|
+
)
|