Skip to content

Build optimizations#4077

Draft
atobiszei wants to merge 15 commits intomainfrom
atobisze_build_opt_4
Draft

Build optimizations#4077
atobiszei wants to merge 15 commits intomainfrom
atobisze_build_opt_4

Conversation

@atobiszei
Copy link
Collaborator

🛠 Summary

JIRA/Issue if applicable.
Describe the changes.

🧪 Checklist

  • Unit tests added.
  • The documentation updated.
  • Change follows security best practices.
    ``

- Remove unused #include "logging.hpp" from status.hpp (50+ files no longer
  transitively pull in spdlog). Add minimal #include <fmt/format.h> for
  fmt::formatter<StatusCode> specialization, with @fmtlib dep in BUILD.
- Remove #include <fmt/ranges.h> from logging.hpp; add it only to the 4
  files that actually format containers (imagegen_init.cpp,
  openai_completions.cpp, assisted_decoding_test.cpp, llmnode_test.cpp).
- Move <spdlog/sinks/basic_file_sink.h> and <spdlog/sinks/stdout_sinks.h>
  from logging.hpp to logging.cpp (sinks only needed in configure_logger()).
- Add explicit #include "logging.hpp" to color_format_configuration.cpp and
  precision_configuration.cpp that relied on the transitive include.

Verified: //src:ovms and //src:ovms_test build with mp_on_py_on,
mp_on_py_off, and mp_off_py_off configs.
Removed #include logging.hpp from 12 headers that had zero logging
symbol usage. Added explicit #include <fmt/format.h> to 3 headers that
have fmt::formatter specializations (grpc_utils.hpp, modelversionstatus.hpp,
nodeinfo.hpp). Added explicit #include logging.hpp to 2 files that lost
transitive include (tensor_conversion.hpp, tensor_conversion_common.cpp).
Updated BUILD deps: replaced libovmslogging with @fmtlib where only
fmt was needed.
…odel.hpp

- Removed #include <openvino/openvino.hpp>, replaced with forward
  declaration of ov::Core (only used as unique_ptr member)
- Removed #include <spdlog/spdlog.h> (unused in header)
- Removed #include <sys/stat.h> (unused in header)
- Replaced #include model.hpp with modelconfig.hpp + forward decl of
  Model. Moved modelFactory() body to modelmanager.cpp.
- Added #include <openvino/openvino.hpp> to modelmanager.cpp
- Added #include model.hpp to 4 .cpp files and 4 test files that
  used Model via shared_ptr through the transitive include.

This eliminates the entire OpenVINO umbrella header and spdlog from
the 17 translation units that include modelmanager.hpp.
…name

- Removed #include <fstream> (unused in header, added to .cpp)
- Removed #include <set> and dead static member configAllowedLayouts
  (declared but never defined or used anywhere)
- Removed #include anonymous_input_name.hpp, moved isShapeAuto(),
  isShapeAnonymous(), isShapeAnonymousFixed(), anyShapeSetToAuto()
  bodies from inline in header to modelconfig.cpp
- Added #include <fstream> and anonymous_input_name.hpp to .cpp
…to decouple mediapipe from ModelManager

- Create ServableNameChecker interface (servableExists) and MetricProvider
  interface (getMetricRegistry, getMetricConfig)
- ModelManager inherits both interfaces
- MediapipeFactory uses unique_ptr, forward-declared in modelmanager.hpp
- mediapipegraphdefinition.hpp/cpp depend on ServableNameChecker, not ModelManager
- mediapipefactory.hpp/cpp depend on interfaces, not ModelManager
- Remove dead parameters: retire(), create(), retireOtherThan(), revalidatePipelines()
- Add explicit mediapipefactory.hpp includes where needed (4 src + 3 test files)
…hecking

- Add ServableType enum (Model, Pipeline, Mediapipe) with bitmask operators
- servableExists() accepts ServableType check param to specify which types to check
- Mediapipe validate: checks Model | Pipeline (skips self)
- DAG validate: checks Model | Mediapipe (skips self), removes mediapipefactory.hpp include
- Model loading: checks Pipeline | Mediapipe (skips self), removes #if MEDIAPIPE_DISABLE guards
- All three servable types now use the same unified servableExists() function
…apper

- Change PipelineFactory member from value to unique_ptr in ModelManager
- Forward-declare PipelineFactory, Pipeline, ModelInstance, ModelInstanceUnloadGuard in modelmanager.hpp
- Move pipeline_factory.hpp include from modelmanager.hpp to modelmanager.cpp
- Remove template createPipeline wrapper from ModelManager
- Callers now use getPipelineFactory().create() directly
- Add explicit pipeline_factory.hpp includes to files that need it
- Add ServableDefinition pure virtual interface (getName, isAvailable)
- Add SingleVersionServableDefinition bridging ServableDefinition + Servable
- Model implements ServableDefinition directly
- PipelineDefinition inherits SingleVersionServableDefinition (removes pipelineName member)
- MediapipeGraphDefinition inherits SingleVersionServableDefinition (removes name member)
- Add Bazel targets for new headers
…cades

- Add ModelManager::findServableDefinition() centralizing model->pipeline->mediapipe lookup
- Refactor KFS getModelReady to use findServableDefinition (removes nested #if blocks)
- Refactor KFS ModelMetadataImpl to use findServableDefinition
- Refactor model_service getModelStatus to use findServableDefinition
- Refactor CAPI OVMS_GetServableState to use findServableDefinition
- Remove unused duplicate BUILD targets: libovmshttpservermodule, libovms_dags_pipelinedefinition
- Fix copyright year in single_version_servable_definition.hpp
- Expand SingleVersionServableDefinition with virtual methods:
  getStatus(), getInputsInfo(), getOutputsInfo(), getMetricReporter(),
  notLoadedYetCode(), notLoadedAnymoreCode()
- Unified waitForLoaded() in SingleVersionServableDefinition base class
- Add StatusMetricReporter abstract base to model_metric_reporter.hpp
- Unify ServableDefinitionUnloadGuard (replaces PipelineDefinitionUnloadGuard
  + MediapipeGraphDefinitionUnloadGuard)
- Remove mediapipe includes from model_service.cpp and capi.cpp
- Unify KFS buildResponse for pipeline/mediapipe paths
- Add getServableDefinitionNames() to ModelManager
- Add tensorinfo_fwd.hpp for forward declarations
- Fix dangling reference: use getName() instead of constructor parameter
  in PipelineDefinition and MediapipeGraphDefinition constructors
…forward-declare servable types in mediapipegraphdefinition.hpp, remove iostream
…w OpenVINO include in kfs_grpc_inference_service.hpp, move mediapipe parse_text_proto/status to cpp
…e KFS deps from core

Phase 3E: Split libovms_mediapipe from ovms_lib into separate target
Phase 3F: Extract NodeInitializer registry pattern from initializeNodes()
  - Created node_initializer.hpp/.cpp with NodeInitializer interface + registry
  - Created graph_side_packets.hpp extracted from mediapipegraphdefinition.hpp
  - 7 self-registering concrete initializers in their calculator directories
  - Refactored ~250 line God function to ~15 line registry loop
Phase 3G: Split frontend executors from core mediapipe
  - libovms_mediapipe (core: factory, definition, executor, config)
  - libovms_mediapipe_kfs_executor (kfs_graph_executor_impl)
  - libovms_mediapipe_http_executor (http_graph_executor_impl)
Phase 3H: Remove dead KFS/TFS deps from core mediapipe
  - Removed 5 dead includes (zero symbols used)
  - Replaced //:ovms_dependencies with specific rapidjson + mediapipe deps
  - Calculator deps stay at ovms_lib level (not in libovms_mediapipe)
  - Node initializers use logging.hpp instead of direct spdlog
  - Fixed missing rapidjson/document.h in rerank_servable.hpp
@atobiszei atobiszei added the WIP Do not merge until resolved label Mar 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

WIP Do not merge until resolved

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant