From 959b6b1ae7fa21efb4ca331f50aa5cb7502881c2 Mon Sep 17 00:00:00 2001 From: jw098 Date: Tue, 28 Jul 2026 12:46:52 -0700 Subject: [PATCH 1/2] rename USE_GPU_FOR_ML_INFERENCE to force default faulse. --- .../Source/CommonFramework/GlobalSettingsPanel.cpp | 11 ++++++++--- .../Source/CommonFramework/GlobalSettingsPanel.h | 2 +- .../Source/ML/Inference/ML_PaddleOCRPipeline.cpp | 2 +- .../Source/ML/Inference/ML_YOLOv5Detector.cpp | 2 +- SerialPrograms/Source/ML/Programs/ML_LabelImages.cpp | 6 +++--- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp b/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp index 3aac7870f0..2271ad0dce 100644 --- a/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp +++ b/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp @@ -154,9 +154,12 @@ GlobalSettings::GlobalSettings() "WARNING: If you change the OCR library away from the default (PaddleOCR), you must ensure that you have the necessary resource downloaded. " "Otherwise, the programs that use OCR will throw an error." ) - , USE_GPU_FOR_ML_INFERENCE( + , USE_GPU_FOR_ML_INFERENCE0( "Use GPU for Machine learning inference:
" - "Use the GPU by default for machine learning. Will fall-back to CPU if using the GPU fails.", + "Use the GPU by default for machine learning. Will fall-back to CPU if using the GPU fails.
" + "WARNING: DirectML ONNX on Windows is not threadsafe. Using multithreaded PaddleOCR with DirectML will cause a crash with our current infra. " + "Furthermore, with PaddleOCR, DirectML is slower than using the CPU. With other models, such as SAM, DirectML seems to be ~10% " + "faster than the CPU. Cuda has not been tested.", LockMode::UNLOCK_WHILE_RUNNING, false ) @@ -281,10 +284,10 @@ GlobalSettings::GlobalSettings() PA_ADD_OPTION(STATS_FILE); PA_ADD_OPTION(TEMP_FOLDER); PA_ADD_OPTION(THEME); - PA_ADD_OPTION(USE_GPU_FOR_ML_INFERENCE); // gated behind Dev mode. see GlobalSettings::load_json PA_ADD_OPTION(OCR_LIBRARY); + PA_ADD_OPTION(USE_GPU_FOR_ML_INFERENCE0); // PA_ADD_OPTION(OCR_WARNING); // TODO: enable this when Tesseract is no longer a default resource. PA_ADD_OPTION(RESOURCE_DOWNLOAD_TABLE); PA_ADD_OPTION(DOWNLOAD_ERROR); @@ -335,6 +338,7 @@ GlobalSettings::GlobalSettings() PA_ADD_OPTION(DEVELOPER_TOKEN); OCR_LIBRARY.set_visibility(ConfigOptionState::HIDDEN); + USE_GPU_FOR_ML_INFERENCE0.set_visibility(ConfigOptionState::HIDDEN); RESOURCE_DOWNLOAD_TABLE.set_visibility(ConfigOptionState::HIDDEN); DOWNLOAD_ERROR.set_visibility(ConfigOptionState::HIDDEN); SAVE_DEBUG_VIDEOS_ON_SWITCH.set_visibility(ConfigOptionState::HIDDEN); @@ -359,6 +363,7 @@ void GlobalSettings::load_json(const JsonValue& json){ ? ConfigOptionState::ENABLED : ConfigOptionState::HIDDEN; OCR_LIBRARY.set_visibility(devmode_visibility); + USE_GPU_FOR_ML_INFERENCE0.set_visibility(devmode_visibility); RESOURCE_DOWNLOAD_TABLE.set_visibility(devmode_visibility); DOWNLOAD_ERROR.set_visibility(devmode_visibility); SAVE_DEBUG_VIDEOS_ON_SWITCH.set_visibility(devmode_visibility); diff --git a/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.h b/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.h index 398f680b01..bec30ab408 100644 --- a/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.h +++ b/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.h @@ -134,7 +134,7 @@ class GlobalSettings : public BatchOption, private ConfigOption::Listener, priva Pimpl THEME; EnumDropdownOption OCR_LIBRARY; StaticTextOption OCR_WARNING; - BooleanCheckBoxOption USE_GPU_FOR_ML_INFERENCE; + BooleanCheckBoxOption USE_GPU_FOR_ML_INFERENCE0; SettingsResourceDownloadTable RESOURCE_DOWNLOAD_TABLE; SettingsDownloadError DOWNLOAD_ERROR; Pimpl WINDOW_SIZE; diff --git a/SerialPrograms/Source/ML/Inference/ML_PaddleOCRPipeline.cpp b/SerialPrograms/Source/ML/Inference/ML_PaddleOCRPipeline.cpp index fbe0f98797..379260233e 100644 --- a/SerialPrograms/Source/ML/Inference/ML_PaddleOCRPipeline.cpp +++ b/SerialPrograms/Source/ML/Inference/ML_PaddleOCRPipeline.cpp @@ -54,7 +54,7 @@ PaddleOCRPipeline::PaddleOCRPipeline(Language language) PaddleOCRPipeline::PaddleOCRPipeline(Language language, std::string rec_path, std::string dict_path) : m_env{create_ORT_env()} // , det_session(env, std::wstring(det_path.begin(), det_path.end()).c_str(), Ort::SessionOptions{}) - , m_rec_session(create_session(m_env, rec_path, ML_MODEL_CACHE_PATH() + "PaddleOCRPipeline/", GlobalSettings::instance().USE_GPU_FOR_ML_INFERENCE)) + , m_rec_session(create_session(m_env, rec_path, ML_MODEL_CACHE_PATH() + "PaddleOCRPipeline/", GlobalSettings::instance().USE_GPU_FOR_ML_INFERENCE0)) // , memory_info(Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault)) , m_language(language) , m_input_name(m_rec_session.GetInputNameAllocated(0, Ort::AllocatorWithDefaultOptions{}).get()) diff --git a/SerialPrograms/Source/ML/Inference/ML_YOLOv5Detector.cpp b/SerialPrograms/Source/ML/Inference/ML_YOLOv5Detector.cpp index 6fb47c6335..a1231ca5f7 100644 --- a/SerialPrograms/Source/ML/Inference/ML_YOLOv5Detector.cpp +++ b/SerialPrograms/Source/ML/Inference/ML_YOLOv5Detector.cpp @@ -45,7 +45,7 @@ YOLOv5Detector::~YOLOv5Detector() = default; YOLOv5Detector::YOLOv5Detector(const std::string& model_path) : m_model_path(to_resource_filepath(model_path)) - , m_use_gpu(GlobalSettings::instance().USE_GPU_FOR_ML_INFERENCE) + , m_use_gpu(GlobalSettings::instance().USE_GPU_FOR_ML_INFERENCE0) { if (!model_path.ends_with(".onnx")){ throw InternalProgramError(nullptr, PA_CURRENT_FUNCTION, diff --git a/SerialPrograms/Source/ML/Programs/ML_LabelImages.cpp b/SerialPrograms/Source/ML/Programs/ML_LabelImages.cpp index 0109dbd413..204df2a16a 100644 --- a/SerialPrograms/Source/ML/Programs/ML_LabelImages.cpp +++ b/SerialPrograms/Source/ML/Programs/ML_LabelImages.cpp @@ -57,7 +57,7 @@ LabelImages::LabelImages(const LabelImages_Descriptor& descriptor) : PanelInstance(descriptor) , m_display_session(m_display_option) , m_options(LockMode::UNLOCK_WHILE_RUNNING) - , m_use_gpu_for_sam_anno(GlobalSettings::instance().USE_GPU_FOR_ML_INFERENCE) + , m_use_gpu_for_sam_anno(GlobalSettings::instance().USE_GPU_FOR_ML_INFERENCE0) , X("X Coordinate:", LockMode::UNLOCK_WHILE_RUNNING, 0.3, 0.0, 1.0) , Y("Y Coordinate:", LockMode::UNLOCK_WHILE_RUNNING, 0.3, 0.0, 1.0) , WIDTH("Width:", LockMode::UNLOCK_WHILE_RUNNING, 0.4, 0.0, 1.0) @@ -135,7 +135,7 @@ LabelImages::LabelImages(const LabelImages_Descriptor& descriptor) - init_sam_session(GlobalSettings::instance().USE_GPU_FOR_ML_INFERENCE); + init_sam_session(GlobalSettings::instance().USE_GPU_FOR_ML_INFERENCE0); m_overlay_manager = new LabelImages_OverlayManager(*this); } @@ -510,7 +510,7 @@ void LabelImages::remove_segmentation_exclusion_point(double x, double y){ void LabelImages::compute_embeddings_for_folder(const std::string& image_folder_path){ std::string embedding_model_path = RESOURCE_PATH() + "ML/sam_embedder_cpu.onnx"; std::cout << "Use SAM Embedding model " << embedding_model_path << std::endl; - ML::compute_embeddings_for_folder(embedding_model_path, image_folder_path, GlobalSettings::instance().USE_GPU_FOR_ML_INFERENCE); + ML::compute_embeddings_for_folder(embedding_model_path, image_folder_path, GlobalSettings::instance().USE_GPU_FOR_ML_INFERENCE0); } void LabelImages::delete_selected_annotation(){ From 18c13b0ec7c4554118c626fb245bd330278fe6fc Mon Sep 17 00:00:00 2001 From: jw098 Date: Tue, 28 Jul 2026 12:49:48 -0700 Subject: [PATCH 2/2] unhide OCR_LIBRARY from dev mode --- SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp b/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp index 2271ad0dce..bb8a5cf7fa 100644 --- a/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp +++ b/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp @@ -284,9 +284,9 @@ GlobalSettings::GlobalSettings() PA_ADD_OPTION(STATS_FILE); PA_ADD_OPTION(TEMP_FOLDER); PA_ADD_OPTION(THEME); + PA_ADD_OPTION(OCR_LIBRARY); // gated behind Dev mode. see GlobalSettings::load_json - PA_ADD_OPTION(OCR_LIBRARY); PA_ADD_OPTION(USE_GPU_FOR_ML_INFERENCE0); // PA_ADD_OPTION(OCR_WARNING); // TODO: enable this when Tesseract is no longer a default resource. PA_ADD_OPTION(RESOURCE_DOWNLOAD_TABLE); @@ -337,7 +337,6 @@ GlobalSettings::GlobalSettings() PA_ADD_OPTION(DEVELOPER_TOKEN); - OCR_LIBRARY.set_visibility(ConfigOptionState::HIDDEN); USE_GPU_FOR_ML_INFERENCE0.set_visibility(ConfigOptionState::HIDDEN); RESOURCE_DOWNLOAD_TABLE.set_visibility(ConfigOptionState::HIDDEN); DOWNLOAD_ERROR.set_visibility(ConfigOptionState::HIDDEN); @@ -362,7 +361,6 @@ void GlobalSettings::load_json(const JsonValue& json){ ConfigOptionState devmode_visibility = developer_mode ? ConfigOptionState::ENABLED : ConfigOptionState::HIDDEN; - OCR_LIBRARY.set_visibility(devmode_visibility); USE_GPU_FOR_ML_INFERENCE0.set_visibility(devmode_visibility); RESOURCE_DOWNLOAD_TABLE.set_visibility(devmode_visibility); DOWNLOAD_ERROR.set_visibility(devmode_visibility);