From dacfaa9d150516fef88d580aa0da8b51365af9f2 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Wed, 2 Apr 2025 15:00:47 +0000 Subject: [PATCH 001/118] Add nnUNet segmentation application and dependencies Signed-off-by: Simone Bendazzoli --- .../apps/ai_spleen_nnunet_seg_app/__init__.py | 18 ++ .../apps/ai_spleen_nnunet_seg_app/__main__.py | 19 ++ examples/apps/ai_spleen_nnunet_seg_app/app.py | 177 ++++++++++++++++++ .../apps/ai_spleen_nnunet_seg_app/app.yaml | 27 +++ .../ai_spleen_nnunet_seg_app/requirements.txt | 11 ++ monai/deploy/operators/__init__.py | 2 + .../monai_bundle_inference_operator.py | 4 +- .../monai_nnunet_bundle_inference_operator.py | 88 +++++++++ 8 files changed, 344 insertions(+), 2 deletions(-) create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/__init__.py create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/__main__.py create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/app.py create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/app.yaml create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/requirements.txt create mode 100644 monai/deploy/operators/monai_nnunet_bundle_inference_operator.py diff --git a/examples/apps/ai_spleen_nnunet_seg_app/__init__.py b/examples/apps/ai_spleen_nnunet_seg_app/__init__.py new file mode 100644 index 00000000..526cee59 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/__init__.py @@ -0,0 +1,18 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys + +_current_dir = os.path.abspath(os.path.dirname(__file__)) +if sys.path and os.path.abspath(sys.path[0]) != _current_dir: + sys.path.insert(0, _current_dir) +del _current_dir diff --git a/examples/apps/ai_spleen_nnunet_seg_app/__main__.py b/examples/apps/ai_spleen_nnunet_seg_app/__main__.py new file mode 100644 index 00000000..07fe20a4 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/__main__.py @@ -0,0 +1,19 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging + +from app import AISpleennnUNetSegApp + +if __name__ == "__main__": + logging.info(f"Begin {__name__}") + AISpleennnUNetSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py new file mode 100644 index 00000000..60b09fb2 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -0,0 +1,177 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path + +from pydicom.sr.codedict import codes + +from monai.deploy.conditions import CountCondition +from monai.deploy.core import AppContext, Application +from monai.deploy.core.domain import Image +from monai.deploy.core.io_type import IOType +from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator +from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription +from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator +from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator +from monai.deploy.operators.monai_bundle_inference_operator import ( + BundleConfigNames, + IOMapping, + +) +from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator +from monai.deploy.operators.stl_conversion_operator import STLConversionOperator + + +# @resource(cpu=1, gpu=1, memory="7Gi") +# pip_packages can be a string that is a path(str) to requirements.txt file or a list of packages. +# The monai pkg is not required by this class, instead by the included operators. +class AISpleennnUNetSegApp(Application): + """Demonstrates inference with built-in MONAI nnUNet Bundle inference operator with DICOM files as input/output + + This application loads a set of DICOM instances, select the appropriate series, converts the series to + 3D volume image, performs inference with the built-in MONAI nnUNet Bundle inference operator, including pre-processing + and post-processing, save the segmentation image in a DICOM Seg OID in an instance file, and optionally the + surface mesh in STL format. + + Pertinent nnUNet MONAI Bundle: + + + Execution Time Estimate: + With a Nvidia RTXA600 48GB GPU, for an input DICOM Series of 139 instances, the execution time is around + 75 seconds with saving both DICOM Seg and surface mesh STL file. + """ + + def __init__(self, *args, **kwargs): + """Creates an application instance.""" + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + super().__init__(*args, **kwargs) + + def run(self, *args, **kwargs): + # This method calls the base class to run. Can be omitted if simply calling through. + self._logger.info(f"Begin {self.run.__name__}") + super().run(*args, **kwargs) + self._logger.info(f"End {self.run.__name__}") + + def compose(self): + """Creates the app specific operators and chain them up in the processing DAG.""" + + logging.info(f"Begin {self.compose.__name__}") + + # Use Commandline options over environment variables to init context. + app_context: AppContext = Application.init_app_context(self.argv) + app_input_path = Path(app_context.input_path) + app_output_path = Path(app_context.output_path) + + # Create the custom operator(s) as well as SDK built-in operator(s). + study_loader_op = DICOMDataLoaderOperator( + self, CountCondition(self, 1), input_folder=app_input_path, name="study_loader_op" + ) + series_selector_op = DICOMSeriesSelectorOperator(self, rules=Sample_Rules_Text, name="series_selector_op") + series_to_vol_op = DICOMSeriesToVolumeOperator(self, name="series_to_vol_op") + + # Create the inference operator that supports MONAI Bundle and automates the inference. + # The IOMapping labels match the input and prediction keys in the pre and post processing. + # The model_name is optional when the app has only one model. + # The bundle_path argument optionally can be set to an accessible bundle file path in the dev + # environment, so when the app is packaged into a MAP, the operator can complete the bundle parsing + # during init. + + config_names = BundleConfigNames(config_names=["inference"]) # Same as the default + + bundle_spleen_seg_op = MonainnUNetBundleInferenceOperator( + self, + input_mapping=[IOMapping("image", Image, IOType.IN_MEMORY)], + output_mapping=[IOMapping("pred", Image, IOType.IN_MEMORY)], + app_context=app_context, + bundle_config_names=config_names, + name="nnunet_bundle_spleen_seg_op", + ) + + # Create DICOM Seg writer providing the required segment description for each segment with + # the actual algorithm and the pertinent organ/tissue. The segment_label, algorithm_name, + # and algorithm_version are of DICOM VR LO type, limited to 64 chars. + # https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html + segment_descriptions = [ + SegmentDescription( + segment_label="Spleen", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Spleen, + algorithm_name="volumetric (3D) segmentation of the spleen from CT image", + algorithm_family=codes.DCM.ArtificialIntelligence, + algorithm_version="0.3.2", + ) + ] + + custom_tags = {"SeriesDescription": "AI generated Seg, not for clinical use."} + + dicom_seg_writer = DICOMSegmentationWriterOperator( + self, + segment_descriptions=segment_descriptions, + custom_tags=custom_tags, + output_folder=app_output_path, + name="dicom_seg_writer", + ) + + # Create the processing pipeline, by specifying the source and destination operators, and + # ensuring the output from the former matches the input of the latter, in both name and type. + self.add_flow(study_loader_op, series_selector_op, {("dicom_study_list", "dicom_study_list")}) + self.add_flow( + series_selector_op, series_to_vol_op, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(series_to_vol_op, bundle_spleen_seg_op, {("image", "image")}) + # Note below the dicom_seg_writer requires two inputs, each coming from a source operator. + self.add_flow( + series_selector_op, dicom_seg_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(bundle_spleen_seg_op, dicom_seg_writer, {("pred", "seg_image")}) + # Create the surface mesh STL conversion operator and add it to the app execution flow, if needed, by + # uncommenting the following couple lines. + stl_conversion_op = STLConversionOperator( + self, output_file=app_output_path.joinpath("stl/spleen.stl"), name="stl_conversion_op" + ) + self.add_flow(bundle_spleen_seg_op, stl_conversion_op, {("pred", "image")}) + + logging.info(f"End {self.compose.__name__}") + + +# This is a sample series selection rule in JSON, simply selecting CT series. +# If the study has more than 1 CT series, then all of them will be selected. +# Please see more detail in DICOMSeriesSelectorOperator. +Sample_Rules_Text = """ +{ + "selections": [ + { + "name": "CT Series", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "SeriesDescription": "(.*?)" + } + } + ] +} +""" + +if __name__ == "__main__": + # Creates the app and test it standalone. When running is this mode, please note the following: + # -m , for model file path + # -i , for input DICOM CT series folder + # -o , for the output folder, default $PWD/output + # e.g. + # monai-deploy exec app.py -i input -m model/model.ts + # + # export HOLOSCAN_INPUT_PATH=dcm + # export HOLOSCAN_MODEL_PATH=spleen_model/model.ts + # export HOLOSCAN_OUTPUT_PATH="output" + logging.info(f"Begin {__name__}") + AISpleennnUNetSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.yaml b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml new file mode 100644 index 00000000..62636118 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml @@ -0,0 +1,27 @@ +%YAML 1.2 +# SPDX-FileCopyrightText: Copyright (c) 2022-2023 MONAI. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +application: + title: MONAI Deploy App Package - Spleen nnUNet Seg Inference + version: 1.0 + inputFormats: ["file"] + outputFormats: ["file"] + +resources: + cpu: 1 + gpu: 1 + memory: 1Gi + gpuMemory: 7Gi diff --git a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt new file mode 100644 index 00000000..ebce84bd --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt @@ -0,0 +1,11 @@ +scikit-image>=0.17.2 +pydicom>=2.3.0 +highdicom>=0.18.2 +SimpleITK>=2.0.0 +Pillow>=8.0.0 +numpy-stl>=2.12.0 +trimesh>=3.8.11 +nibabel>=3.2.1 +torch>=1.12.0 +monai>=1.0.0 +nnunetv2>=2.5.1 diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 75176dab..c875eea8 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -25,6 +25,7 @@ IOMapping ModelInfo MonaiBundleInferenceOperator + MonainnUNetBundleInferenceOperator MonaiSegInferenceOperator PNGConverterOperator PublisherOperator @@ -47,6 +48,7 @@ from .dicom_utils import EquipmentInfo, ModelInfo, random_with_n_digits, save_dcm_file, write_common_modules from .inference_operator import InferenceOperator from .monai_bundle_inference_operator import BundleConfigNames, IOMapping, MonaiBundleInferenceOperator +from .monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator from .monai_seg_inference_operator import MonaiSegInferenceOperator from .nii_data_loader_operator import NiftiDataLoader from .png_converter_operator import PNGConverterOperator diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index 7ae4db4d..94c118e3 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -60,7 +60,7 @@ def get_bundle_config(bundle_path, config_names): Gets the configuration parser from the specified Torchscript bundle file path. """ - bundle_suffixes = (".json", ".yaml", "yml") # The only supported file ext(s) + bundle_suffixes = (".json", ".yaml", ".yml") # The only supported file ext(s) config_folder = "extra" def _read_from_archive(archive, root_name: str, config_name: str, do_search=True): @@ -90,7 +90,7 @@ def _read_from_archive(archive, root_name: str, config_name: str, do_search=True name_list = archive.namelist() for suffix in bundle_suffixes: for n in name_list: - if (f"{config_name}{suffix}").casefold in n.casefold(): + if (f"{config_name}{suffix}").casefold() in n.casefold(): logging.debug(f"Trying to read content of config {config_name!r} from {n!r}.") content_text = archive.read(n) break diff --git a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py new file mode 100644 index 00000000..3bedb448 --- /dev/null +++ b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py @@ -0,0 +1,88 @@ +# Copyright 2002 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config +from monai.deploy.utils.importutil import optional_import +from typing import Any, Dict, Tuple, Union +from monai.deploy.core import Image +from pathlib import Path +MONAI_UTILS = "monai.utils" +nibabel, _ = optional_import("nibabel", "3.2.1") +torch, _ = optional_import("torch", "1.10.2") + +NdarrayOrTensor, _ = optional_import("monai.config", name="NdarrayOrTensor") +MetaTensor, _ = optional_import("monai.data.meta_tensor", name="MetaTensor") +PostFix, _ = optional_import("monai.utils.enums", name="PostFix") # For the default meta_key_postfix +first, _ = optional_import("monai.utils.misc", name="first") +ensure_tuple, _ = optional_import(MONAI_UTILS, name="ensure_tuple") +convert_to_dst_type, _ = optional_import(MONAI_UTILS, name="convert_to_dst_type") +Key, _ = optional_import(MONAI_UTILS, name="ImageMetaKey") +MetaKeys, _ = optional_import(MONAI_UTILS, name="MetaKeys") +SpaceKeys, _ = optional_import(MONAI_UTILS, name="SpaceKeys") +Compose_, _ = optional_import("monai.transforms", name="Compose") +ConfigParser_, _ = optional_import("monai.bundle", name="ConfigParser") +MapTransform_, _ = optional_import("monai.transforms", name="MapTransform") +SimpleInferer, _ = optional_import("monai.inferers", name="SimpleInferer") + +Compose: Any = Compose_ +MapTransform: Any = MapTransform_ +ConfigParser: Any = ConfigParser_ +__all__ = ["MonainnUNetBundleInferenceOperator"] + + +class MonainnUNetBundleInferenceOperator(MonaiBundleInferenceOperator): + """ + A specialized operator for performing inference using the MONAI nnUNet bundle. + This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific + configurations and prediction logic. It initializes the nnUNet predictor and provides + a method for performing inference on input data. + + Attributes + ---------- + _nnunet_predictor : torch.nn.Module + The nnUNet predictor module used for inference. + + Methods + ------- + _init_config(config_names) + Initializes the configuration for the nnUNet bundle, including parsing the bundle + configuration and setting up the nnUNet predictor. + predict(data, *args, **kwargs) + Performs inference on the input data using the nnUNet predictor. + """ + + def __init__( + self, + *args, + **kwargs, + ): + + + super().__init__(*args, **kwargs) + + self._nnunet_predictor : torch.nn.Module = None + + + def _init_config(self, config_names): + + super()._init_config(config_names) + parser = get_bundle_config(str(self._bundle_path), config_names) + parser['bundle_root'] = str(Path(self._bundle_path).parent.parent.parent) + self._parser = parser + + self._nnunet_predictor = parser.get_parsed_content("network_def") + + def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, ...], Dict[Any, Any]]: + """Predicts output using the inferer.""" + + self._nnunet_predictor.predictor.network = self._model_network + #os.environ['nnUNet_def_n_proc'] = "1" + return self._nnunet_predictor(torch.unsqueeze(data, 0)) From fbb8c619972a175878e8d0943a4cf8b525fe455a Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Thu, 27 Mar 2025 03:02:29 -0400 Subject: [PATCH 002/118] CCHMC Ped Abd CT Seg Example App (#525) * hugging_face_integration_app dependency cleanup Signed-off-by: bluna301 * cchmc_ped_abd_ct_seg example app Signed-off-by: bluna301 * license update + code optimizations Signed-off-by: bluna301 * cleanup Signed-off-by: bluna301 * spelling + dependency cleanup Signed-off-by: bluna301 * model DICOM tag cleanup Signed-off-by: bluna301 --------- Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- docs/source/getting_started/examples.md | 1 + .../apps/cchmc_ped_abd_ct_seg_app/README.md | 40 ++ .../apps/cchmc_ped_abd_ct_seg_app/__init__.py | 29 ++ .../apps/cchmc_ped_abd_ct_seg_app/__main__.py | 26 ++ .../abdomen_seg_operator.py | 294 +++++++++++++ examples/apps/cchmc_ped_abd_ct_seg_app/app.py | 281 +++++++++++++ .../apps/cchmc_ped_abd_ct_seg_app/app.yaml | 32 ++ .../dicom_sc_writer_operator.py | 253 ++++++++++++ .../mongodb_entry_creator_operator.py | 349 ++++++++++++++++ .../mongodb_writer_operator.py | 235 +++++++++++ .../post_transforms.py | 387 ++++++++++++++++++ .../cchmc_ped_abd_ct_seg_app/requirements.txt | 27 ++ .../scripts/map_build.sh | 29 ++ .../scripts/map_extract.sh | 31 ++ .../scripts/map_run.sh | 31 ++ .../scripts/map_run_interactive.sh | 37 ++ .../scripts/model_run.sh | 21 + requirements-examples.txt | 1 + 18 files changed, 2104 insertions(+) create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/README.md create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/app.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh diff --git a/docs/source/getting_started/examples.md b/docs/source/getting_started/examples.md index e16873c3..521a4e52 100644 --- a/docs/source/getting_started/examples.md +++ b/docs/source/getting_started/examples.md @@ -13,3 +13,4 @@ - ai_unetr_seg_app - dicom_series_to_image_app - breast_density_classifer_app +- cchmc_ped_abd_ct_seg_app diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/README.md b/examples/apps/cchmc_ped_abd_ct_seg_app/README.md new file mode 100644 index 00000000..5e1a8a21 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/README.md @@ -0,0 +1,40 @@ +# MONAI Application Package (MAP) for CCHMC Pediatric Abdominal CT Segmentation MONAI Bundle + +This MAP is based on the [CCHMC Pediatric Abdominal CT Segmentation MONAI Bundle](https://github.com/cchmc-dll/pediatric_abdominal_segmentation_bundle/tree/original). This model was developed at Cincinnati Children's Hospital Medical Center by the Department of Radiology. + +The PyTorch and TorchScript DynUNet models can be downloaded from the [MONAI Bundle Repository](https://github.com/cchmc-dll/pediatric_abdominal_segmentation_bundle/tree/original/models). + +For questions, please feel free to contact Elan Somasundaram (Elanchezhian.Somasundaram@cchmc.org) and Bryan Luna (Bryan.Luna@cchmc.org). + +## Unique Features + +Some unique features of this MAP pipeline include: +- **Custom Inference Operator:** custom `AbdomenSegOperator` enables either PyTorch or TorchScript model loading +- **DICOM Secondary Capture Output:** custom `DICOMSecondaryCaptureWriterOperator` writes a DICOM SC with organ contours +- **Output Filtering:** model produces Liver-Spleen-Pancreas segmentations, but seg visibility in the outputs (DICOM SEG, SC, SR) can be controlled in `app.py` +- **MONAI Deploy Express MongoDB Write:** custom operators (`MongoDBEntryCreatorOperator` and `MongoDBWriterOperator`) allow for writing to the MongoDB database associated with MONAI Deploy Express + +## Scripts +Several scripts have been compiled that quickly execute useful actions (such as running the app code locally with Python interpreter, MAP packaging, MAP execution, etc.). Some scripts require the input of command line arguments; review the `scripts` folder for more details. + +## Notes +The DICOM Series selection criteria has been customized based on the model's training and CCHMC use cases. By default, Axial CT series with Slice Thickness between 3.0 - 5.0 mm (inclusive) will be selected for. + +If MongoDB writing is not desired, please comment out the relevant sections in `app.py` and the `AbdomenSegOperator`. + +To execute the pipeline with MongoDB writing enabled, it is best to create a `.env` file that the `MongoDBWriterOperator` can load in. Below is an example `.env` file that follows the format outlined in this operator; note that these values are the default variable values as defined in the [.env](https://github.com/Project-MONAI/monai-deploy/blob/main/deploy/monai-deploy-express/.env) and [docker-compose.yaml](https://github.com/Project-MONAI/monai-deploy/blob/main/deploy/monai-deploy-express/docker-compose.yml) files of v0.6.0 of MONAI Deploy Express: + +```dotenv +MONGODB_USERNAME=root +MONGODB_PASSWORD=rootpassword +MONGODB_PORT=27017 +MONGODB_IP_DOCKER=172.17.0.1 # default Docker bridge network IP +``` + +Prior to packaging into a MAP, the MongoDB credentials should be hardcoded into the `MongoDBWriterOperator`. + +The MONAI Deploy Express MongoDB Docker container (`mdl-mongodb`) needs to be connected to the Docker bridge network in order for the MongoDB write to be successful. Executing the following command in a MONAI Deploy Express terminal will establish this connection: + +```bash +docker network connect bridge mdl-mongodb +``` diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py b/examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py new file mode 100644 index 00000000..06014cc7 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py @@ -0,0 +1,29 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# __init__.py is used to initialize a Python package +# ensures that the directory __init__.py resides in is included at the start of the sys.path +# this is useful when you want to import modules from this directory, even if it’s not the +# directory where your Python script is running. + +# give access to operating system and Python interpreter +import os +import sys + +# grab absolute path of directory containing __init__.py +_current_dir = os.path.abspath(os.path.dirname(__file__)) + +# if sys.path is not the same as the directory containing the __init__.py file +if sys.path and os.path.abspath(sys.path[0]) != _current_dir: + # insert directory containing __init__.py file at the beginning of sys.path + sys.path.insert(0, _current_dir) +# delete variable +del _current_dir diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py b/examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py new file mode 100644 index 00000000..80cca2fa --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py @@ -0,0 +1,26 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# __main__.py is needed for MONAI Application Packager to detect the main app code (app.py) when +# app.py is executed in the application folder path +# e.g., python my_app + +import logging + +# import AIAbdomenSegApp class from app.py +from app import AIAbdomenSegApp + +# if __main__.py is being run directly +if __name__ == "__main__": + logging.info(f"Begin {__name__}") + # create and run an instance of AIAbdomenSegApp + AIAbdomenSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py new file mode 100644 index 00000000..2f412f14 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py @@ -0,0 +1,294 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path +from typing import List + +import torch +from numpy import float32, int16 + +# import custom transforms from post_transforms.py +from post_transforms import CalculateVolumeFromMaskd, ExtractVolumeToTextd, LabelToContourd, OverlayImageLabeld + +import monai +from monai.deploy.core import AppContext, Fragment, Model, Operator, OperatorSpec +from monai.deploy.operators.monai_seg_inference_operator import InfererType, InMemImageReader, MonaiSegInferenceOperator +from monai.transforms import ( + Activationsd, + AsDiscreted, + CastToTyped, + Compose, + CropForegroundd, + EnsureChannelFirstd, + EnsureTyped, + Invertd, + LoadImaged, + Orientationd, + SaveImaged, + ScaleIntensityRanged, + Spacingd, +) + + +# this operator performs inference with the new version of the bundle +class AbdomenSegOperator(Operator): + """Performs segmentation inference with a custom model architecture.""" + + DEFAULT_OUTPUT_FOLDER = Path.cwd() / "output" + + def __init__( + self, + fragment: Fragment, + *args, + app_context: AppContext, + model_path: Path, + output_folder: Path = DEFAULT_OUTPUT_FOLDER, + output_labels: List[int], + **kwargs, + ): + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + self._input_dataset_key = "image" + self._pred_dataset_key = "pred" + + # self.model_path is compatible with TorchScript and PyTorch model workflows (pythonic and MAP) + self.model_path = self._find_model_file_path(model_path) + + self.output_folder = output_folder + self.output_folder.mkdir(parents=True, exist_ok=True) + self.output_labels = output_labels + self.app_context = app_context + self.input_name_image = "image" + self.output_name_seg = "seg_image" + self.output_name_text_dicom_sr = "result_text_dicom_sr" + self.output_name_text_mongodb = "result_text_mongodb" + self.output_name_sc_path = "dicom_sc_dir" + + # the base class has an attribute called fragment to hold the reference to the fragment object + super().__init__(fragment, *args, **kwargs) + + # find model path; supports TorchScript and PyTorch model workflows (pythonic and MAP) + def _find_model_file_path(self, model_path: Path): + # when executing pythonically, model_path is a file + # when executing as MAP, model_path is a directory (/opt/holoscan/models) + # torch.load() from PyTorch workflow needs file path; can't load model from directory + # returns first found file in directory in this case + if model_path: + if model_path.is_file(): + return model_path + elif model_path.is_dir(): + for file in model_path.rglob("*"): + if file.is_file(): + return file + + raise ValueError(f"Model file not found in the provided path: {model_path}") + + # load a PyTorch model and register it in app_context + def _load_pytorch_model(self): + + _device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + _kernel_size: tuple = (3, 3, 3, 3, 3, 3) + _strides: tuple = (1, 2, 2, 2, 2, (2, 2, 1)) + _upsample_kernel_size: tuple = (2, 2, 2, 2, (2, 2, 1)) + + # create DynUNet model with the specified architecture parameters + move to computational device (GPU or CPU) + # parameters pulled from inference.yaml file of the MONAI bundle + model = monai.networks.nets.dynunet.DynUNet( + spatial_dims=3, + in_channels=1, + out_channels=4, + kernel_size=_kernel_size, + strides=_strides, + upsample_kernel_size=_upsample_kernel_size, + norm_name="INSTANCE", + deep_supervision=False, + res_block=True, + ).to(_device) + + # load model state dictionary (i.e. mapping param names to tensors) via torch.load + # weights_only=True to avoid arbitrary code execution during unpickling + state_dict = torch.load(self.model_path, weights_only=True) + + # assign loaded weights to model architecture via load_state_dict + model.load_state_dict(state_dict) + + # set model in evaluation (inference) mode + model.eval() + + # create a MONAI Model object to encapsulate the PyTorch model and metadata + loaded_model = Model(self.model_path, name="ped_abd_ct_seg") + + # assign loaded PyTorch model as the predictor for the Model object + loaded_model.predictor = model + + # register the loaded Model object in the application context so other operators can access it + # MonaiSegInferenceOperator uses _get_model method to load models; looks at app_context.models first + self.app_context.models = loaded_model + + def setup(self, spec: OperatorSpec): + spec.input(self.input_name_image) + + # DICOM SEG + spec.output(self.output_name_seg) + + # DICOM SR + spec.output(self.output_name_text_dicom_sr) + + # MongoDB + spec.output(self.output_name_text_mongodb) + + # DICOM SC + spec.output(self.output_name_sc_path) + + def compute(self, op_input, op_output, context): + input_image = op_input.receive(self.input_name_image) + if not input_image: + raise ValueError("Input image is not found.") + + # this operator gets an in-memory Image object, so a specialized ImageReader is needed. + _reader = InMemImageReader(input_image) + + # preprocessing and postprocessing + pre_transforms = self.pre_process(_reader) + post_transforms = self.post_process(pre_transforms) + + # if PyTorch model + if self.model_path.suffix.lower() == ".pt": + # load the PyTorch model + self._logger.info("PyTorch model detected") + self._load_pytorch_model() + # else, we have TorchScript model + else: + self._logger.info("TorchScript model detected") + + # delegates inference and saving output to the built-in operator. + infer_operator = MonaiSegInferenceOperator( + self.fragment, + roi_size=(96, 96, 96), + pre_transforms=pre_transforms, + post_transforms=post_transforms, + overlap=0.75, + app_context=self.app_context, + model_name="", + inferer=InfererType.SLIDING_WINDOW, + sw_batch_size=4, + model_path=self.model_path, + name="monai_seg_inference_op", + ) + + # setting the keys used in the dictionary-based transforms + infer_operator.input_dataset_key = self._input_dataset_key + infer_operator.pred_dataset_key = self._pred_dataset_key + + seg_image = infer_operator.compute_impl(input_image, context) + + # DICOM SEG + op_output.emit(seg_image, self.output_name_seg) + + # grab result_text_dicom_sr and result_text_mongodb from ExractVolumeToTextd transform + result_text_dicom_sr, result_text_mongodb = self.get_result_text_from_transforms(post_transforms) + if not result_text_dicom_sr or not result_text_mongodb: + raise ValueError("Result text could not be generated.") + + # only log volumes for target organs so logs reflect MAP behavior + self._logger.info(f"Calculated Organ Volumes: {result_text_dicom_sr}") + + # DICOM SR + op_output.emit(result_text_dicom_sr, self.output_name_text_dicom_sr) + + # MongoDB + op_output.emit(result_text_mongodb, self.output_name_text_mongodb) + + # DICOM SC + # temporary DICOM SC (w/o source DICOM metadata) saved in output_folder / temp directory + dicom_sc_dir = self.output_folder / "temp" + + self._logger.info(f"Temporary DICOM SC saved at: {dicom_sc_dir}") + + op_output.emit(dicom_sc_dir, self.output_name_sc_path) + + def pre_process(self, img_reader) -> Compose: + """Composes transforms for preprocessing the input image before predicting on a model.""" + + my_key = self._input_dataset_key + + return Compose( + [ + # img_reader: specialized InMemImageReader, derived from MONAI ImageReader + LoadImaged(keys=my_key, reader=img_reader), + EnsureChannelFirstd(keys=my_key), + Orientationd(keys=my_key, axcodes="RAS"), + Spacingd(keys=my_key, pixdim=[1.5, 1.5, 3.0], mode=["bilinear"]), + ScaleIntensityRanged(keys=my_key, a_min=-250, a_max=400, b_min=0.0, b_max=1.0, clip=True), + CropForegroundd(keys=my_key, source_key=my_key, mode="minimum"), + EnsureTyped(keys=my_key), + CastToTyped(keys=my_key, dtype=float32), + ] + ) + + def post_process(self, pre_transforms: Compose) -> Compose: + """Composes transforms for postprocessing the prediction results.""" + + pred_key = self._pred_dataset_key + + labels = {"background": 0, "liver": 1, "spleen": 2, "pancreas": 3} + + return Compose( + [ + Activationsd(keys=pred_key, softmax=True), + Invertd( + keys=[pred_key, self._input_dataset_key], + transform=pre_transforms, + orig_keys=[self._input_dataset_key, self._input_dataset_key], + meta_key_postfix="meta_dict", + nearest_interp=[False, False], + to_tensor=True, + ), + AsDiscreted(keys=pred_key, argmax=True), + # custom post-processing steps + CalculateVolumeFromMaskd(keys=pred_key, label_names=labels), + # optional code for saving segmentation masks as a NIfTI + # SaveImaged( + # keys=pred_key, + # output_ext=".nii.gz", + # output_dir=self.output_folder / "NIfTI", + # meta_keys="pred_meta_dict", + # separate_folder=False, + # output_dtype=int16 + # ), + # volume data stored in dictionary under pred_key + '_volumes' key + ExtractVolumeToTextd( + keys=[pred_key + "_volumes"], label_names=labels, output_labels=self.output_labels + ), + # comment out LabelToContourd for seg masks instead of contours; organ filtering will be lost + LabelToContourd(keys=pred_key, output_labels=self.output_labels), + OverlayImageLabeld(image_key=self._input_dataset_key, label_key=pred_key, overlay_key="overlay"), + SaveImaged( + keys="overlay", + output_ext=".dcm", + # save temporary DICOM SC (w/o source DICOM metadata) in output_folder / temp directory + output_dir=self.output_folder / "temp", + separate_folder=False, + output_dtype=int16, + ), + ] + ) + + # grab volume data from ExtractVolumeToTextd transform + def get_result_text_from_transforms(self, post_transforms: Compose): + """Extracts the result_text variables from post-processing transforms output.""" + + # grab the result_text variables from ExractVolumeToTextd transfor + for transform in post_transforms.transforms: + if isinstance(transform, ExtractVolumeToTextd): + return transform.result_text_dicom_sr, transform.result_text_mongodb + return None diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/app.py b/examples/apps/cchmc_ped_abd_ct_seg_app/app.py new file mode 100644 index 00000000..845954b0 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/app.py @@ -0,0 +1,281 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path + +# custom inference operator +from abdomen_seg_operator import AbdomenSegOperator + +# custom DICOM Secondary Capture (SC) writer operator +from dicom_sc_writer_operator import DICOMSCWriterOperator + +# custom MongoDB operators +from mongodb_entry_creator_operator import MongoDBEntryCreatorOperator +from mongodb_writer_operator import MongoDBWriterOperator + +# required for setting SegmentDescription attributes +# direct import as this is not part of App SDK package +from pydicom.sr.codedict import codes + +from monai.deploy.conditions import CountCondition +from monai.deploy.core import Application +from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator +from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription +from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator +from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator +from monai.deploy.operators.dicom_text_sr_writer_operator import DICOMTextSRWriterOperator, EquipmentInfo, ModelInfo + + +# inherit new Application class instance, AIAbdomenSegApp, from MONAI Application base class +# base class provides support for chaining up operators and executing application +class AIAbdomenSegApp(Application): + """Demonstrates inference with customized CCHMC pediatric abdominal segmentation bundle inference operator, with + DICOM files as input/output + + This application loads a set of DICOM instances, selects the appropriate series, converts the series to + 3D volume image, performs inference with a custom inference operator, including pre-processing + and post-processing, saves a DICOM SEG (organ contours), a DICOM Secondary Capture (organ contours overlay), + and a DICOM SR (organ volumes), and writes organ volumes and relevant DICOM tags to the MONAI Deploy Express + MongoDB database (optional). + + Pertinent MONAI Bundle: + https://github.com/cchmc-dll/pediatric_abdominal_segmentation_bundle/tree/original + + Execution Time Estimate: + With a NVIDIA GeForce RTX 3090 24GB GPU, for an input DICOM Series of 204 instances, the execution time is around + 25 seconds for DICOM SEG, DICOM SC, and DICOM SR outputs, as well as the MDE MongoDB database write. + """ + + def __init__(self, *args, **kwargs): + """Creates an application instance.""" + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + super().__init__(*args, **kwargs) + + def run(self, *args, **kwargs): + # this method calls the base class to run; can be omitted if simply calling through + self._logger.info(f"Begin {self.run.__name__}") + super().run(*args, **kwargs) + self._logger.info(f"End {self.run.__name__}") + + # use compose method to instantiate operators and connect them to form a Directed Acyclic Graph (DAG) + def compose(self): + """Creates the app specific operators and chain them up in the processing DAG.""" + + logging.info(f"Begin {self.compose.__name__}") + + # use Commandline options over environment variables to init context + app_context = Application.init_app_context(self.argv) + app_input_path = Path(app_context.input_path) + app_output_path = Path(app_context.output_path) + model_path = Path(app_context.model_path) + + # create the custom operator(s) as well as SDK built-in operator(s) + # DICOM Data Loader op + study_loader_op = DICOMDataLoaderOperator( + self, CountCondition(self, 1), input_folder=app_input_path, name="study_loader_op" + ) + + # custom DICOM Series Selector op + # all_matched and sort_by_sop_instance_count = True; want all series that meet the selection criteria + # to be matched, and SOP sorting + series_selector_op = DICOMSeriesSelectorOperator( + self, rules=Sample_Rules_Text, all_matched=True, sort_by_sop_instance_count=True, name="series_selector_op" + ) + + # DICOM Series to Volume op + series_to_vol_op = DICOMSeriesToVolumeOperator(self, name="series_to_vol_op") + + # custom inference op + # output_labels specifies which of the organ segmentations are desired in the DICOM SEG, DICOM SC, and DICOM SR outputs + # 1 = Liver, 2 = Spleen, 3 = Pancreas; all segmentations performed, but visibility in outputs (SEG, SC, SR) controlled here + # all organ volumes will be written to MongoDB + output_labels = [1, 2, 3] + abd_seg_op = AbdomenSegOperator( + self, app_context=app_context, model_path=model_path, output_labels=output_labels, name="abd_seg_op" + ) + + # create DICOM Seg writer providing the required segment description for each segment with + # the actual algorithm and the pertinent organ/tissue; the segment_label, algorithm_name, + # and algorithm_version are of DICOM VR LO type, limited to 64 chars + # https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html + + # general algorithm information + _algorithm_name = "CCHMC Pediatric CT Abdominal Segmentation" + _algorithm_family = codes.DCM.ArtificialIntelligence + _algorithm_version = "0.4.3" + + segment_descriptions = [ + SegmentDescription( + segment_label="Liver", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Liver, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + SegmentDescription( + segment_label="Spleen", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Spleen, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + SegmentDescription( + segment_label="Pancreas", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Pancreas, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + ] + + # custom tags - add Device UID to DICOM SEG to match SR and SC tags + custom_tags_seg = {"SeriesDescription": "AI Generated DICOM SEG; Not for Clinical Use.", "DeviceUID": "0.0.1"} + custom_tags_sr = {"SeriesDescription": "AI Generated DICOM SR; Not for Clinical Use."} + custom_tags_sc = {"SeriesDescription": "AI Generated DICOM Secondary Capture; Not for Clinical Use."} + + # DICOM SEG Writer op writes content from segment_descriptions to output DICOM images as DICOM tags + dicom_seg_writer = DICOMSegmentationWriterOperator( + self, + segment_descriptions=segment_descriptions, + custom_tags=custom_tags_seg, + # store DICOM SEG in SEG subdirectory; necessary for routing in CCHMC MDE workflow definition + output_folder=app_output_path / "SEG", + # omit_empty_frames is a default parameteter (type bool) of DICOMSegmentationWriterOperator + # dictates whether or not to omit frames that contain no segmented pixels from the output segmentation + # default value is True; changed to False to ensure input and output DICOM series #'s match + omit_empty_frames=False, + name="dicom_seg_writer", + ) + + # model and equipment info + my_model_info = ModelInfo("CCHMC CAIIR", "CCHMC Pediatric CT Abdominal Segmentation", "0.4.3", "0.0.1") + my_equipment = EquipmentInfo(manufacturer="The MONAI Consortium", manufacturer_model="MONAI Deploy App SDK") + + # DICOM SR Writer op + dicom_sr_writer = DICOMTextSRWriterOperator( + self, + # copy_tags is a default parameteter (type bool) of DICOMTextSRWriterOperator; default value is True + # dictates whether or not to copy DICOM attributes from the selected DICOM series + # changed to True to copy DICOM attributes so DICOM SR has same Study UID + copy_tags=True, + model_info=my_model_info, + equipment_info=my_equipment, + custom_tags=custom_tags_sr, + # store DICOM SR in SR subdirectory; necessary for routing in CCHMC MDE workflow definition + output_folder=app_output_path / "SR", + ) + + # custom DICOM SC Writer op + dicom_sc_writer = DICOMSCWriterOperator( + self, + model_info=my_model_info, + equipment_info=my_equipment, + custom_tags=custom_tags_sc, + # store DICOM SC in SC subdirectory; necessary for routing in CCHMC MDE workflow definition + output_folder=app_output_path / "SC", + ) + + # MongoDB database, collection, and MAP version info + database_name = "CTLiverSpleenSegPredictions" + collection_name = "OrganVolumes" + map_version = "0.0.1" + + # custom MongoDB Entry Creator op + mongodb_entry_creator = MongoDBEntryCreatorOperator(self, map_version=map_version) + + # custom MongoDB Writer op + mongodb_writer = MongoDBWriterOperator(self, database_name=database_name, collection_name=collection_name) + + # create the processing pipeline, by specifying the source and destination operators, and + # ensuring the output from the former matches the input of the latter, in both name and type + # instantiate and connect operators using self.add_flow(); specify current operator, next operator, and tuple to match I/O + self.add_flow(study_loader_op, series_selector_op, {("dicom_study_list", "dicom_study_list")}) + self.add_flow( + series_selector_op, series_to_vol_op, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(series_to_vol_op, abd_seg_op, {("image", "image")}) + + # note below the dicom_seg_writer, dicom_sr_writer, dicom_sc_writer, and mongodb_entry_creator each require + # two inputs, each coming from a source operator + + # DICOM SEG + self.add_flow( + series_selector_op, dicom_seg_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, dicom_seg_writer, {("seg_image", "seg_image")}) + + # DICOM SR + self.add_flow( + series_selector_op, dicom_sr_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, dicom_sr_writer, {("result_text_dicom_sr", "text")}) + + # DICOM SC + self.add_flow( + series_selector_op, dicom_sc_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, dicom_sc_writer, {("dicom_sc_dir", "dicom_sc_dir")}) + + # MongoDB + self.add_flow( + series_selector_op, mongodb_entry_creator, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, mongodb_entry_creator, {("result_text_mongodb", "text")}) + self.add_flow(mongodb_entry_creator, mongodb_writer, {("mongodb_database_entry", "mongodb_database_entry")}) + + logging.info(f"End {self.compose.__name__}") + + +# series selection rule in JSON, which selects for axial CT series; flexible ST choices: +# StudyDescription: matches any value +# Modality: matches "CT" value (case-insensitive); filters out non-CT modalities +# ImageType: matches value that contains "PRIMARY", "ORIGINAL", and "AXIAL"; filters out most cor and sag views +# SeriesDescription: matches any values that do not contain "cor" or "sag" (case-insensitive); filters out cor and sag views +# SliceThickness: supports list, string, and numerical matching: +# [3, 5]: matches ST values between 3 and 5 +# "^(5(\\\\.0+)?|5)$": RegEx; matches ST values of 5, 5.0, 5.00, etc. +# 5: matches ST values of 5, 5.0, 5.00, etc. +# all valid series will be selected; downstream operators only perform inference and write outputs for 1st selected series +# please see more detail in DICOMSeriesSelectorOperator + +Sample_Rules_Text = """ +{ + "selections": [ + { + "name": "Axial CT Series", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "ImageType": ["PRIMARY", "ORIGINAL", "AXIAL"], + "SeriesDescription": "(?i)^(?!.*(cor|sag)).*$", + "SliceThickness": [3, 5] + } + } + ] +} +""" + +# if executing application code using python interpreter: +if __name__ == "__main__": + # creates the app and test it standalone; when running is this mode, please note the following: + # -m , for model file path + # -i , for input DICOM CT series folder + # -o , for the output folder, default $PWD/output + # e.g. + # monai-deploy exec app.py -i input -m model/dynunet_FT.ts + # + logging.info(f"Begin {__name__}") + AIAbdomenSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml b/examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml new file mode 100644 index 00000000..badfac7c --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml @@ -0,0 +1,32 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +# app.yaml is a configuration file that specifies MAP settings +# used by MONAI App SDK to understand how to run our app in a MAP and what resources it needs + +# specifies high-level information about our app +application: + title: MONAI Deploy App Package - CCHMC Pediatric CT Abdominal Segmentation + version: 0.0.1 + inputFormats: ["file"] + outputFormats: ["file"] + +# specifies the resources our app needs to run +# per MONAI docs (https://docs.monai.io/projects/monai-deploy-app-sdk/en/latest/developing_with_sdk/executing_packaged_app_locally.html) +# MAR does not validate all of the resource requirements embedded in the MAP to ensure they are met in host system +# e.g, MAR will throw an error if gpu requirement is not met on host system; however, gpuMemory parameter doesn't appear to be validated +resources: + cpu: 1 + gpu: 1 + memory: 1Gi + # during MAP execution, for an input DICOM Series of 204 instances, GPU usage peaks at just under 8900 MiB ~= 9.3 GB ~= 8.7 Gi + gpuMemory: 9Gi diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py new file mode 100644 index 00000000..9479485e --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py @@ -0,0 +1,253 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os +from pathlib import Path +from typing import Dict, Optional, Union + +import pydicom + +from monai.deploy.core import Fragment, Operator, OperatorSpec +from monai.deploy.core.domain.dicom_series import DICOMSeries +from monai.deploy.core.domain.dicom_series_selection import StudySelectedSeries +from monai.deploy.operators.dicom_utils import EquipmentInfo, ModelInfo, write_common_modules +from monai.deploy.utils.importutil import optional_import +from monai.deploy.utils.version import get_sdk_semver + +dcmread, _ = optional_import("pydicom", name="dcmread") +dcmwrite, _ = optional_import("pydicom.filewriter", name="dcmwrite") +generate_uid, _ = optional_import("pydicom.uid", name="generate_uid") +ImplicitVRLittleEndian, _ = optional_import("pydicom.uid", name="ImplicitVRLittleEndian") +Dataset, _ = optional_import("pydicom.dataset", name="Dataset") +FileDataset, _ = optional_import("pydicom.dataset", name="FileDataset") +Sequence, _ = optional_import("pydicom.sequence", name="Sequence") + + +class DICOMSCWriterOperator(Operator): + """Class to write a new DICOM Secondary Capture (DICOM SC) instance with source DICOM Series metadata included. + + Named inputs: + dicom_sc_dir: file path of temporary DICOM SC (w/o source DICOM Series metadata). + study_selected_series_list: DICOM Series for copying metadata from. + + Named output: + None. + + File output: + New, updated DICOM SC file (with source DICOM Series metadata) in the provided output folder. + """ + + # file extension for the generated DICOM Part 10 file + DCM_EXTENSION = ".dcm" + # the default output folder for saving the generated DICOM instance file + # DEFAULT_OUTPUT_FOLDER = Path(os.path.join(os.path.dirname(__file__))) / "output" + DEFAULT_OUTPUT_FOLDER = Path.cwd() / "output" + + def __init__( + self, + fragment: Fragment, + *args, + output_folder: Union[str, Path], + model_info: ModelInfo, + equipment_info: Optional[EquipmentInfo] = None, + custom_tags: Optional[Dict[str, str]] = None, + **kwargs, + ): + """Class to write a new DICOM Secondary Capture (DICOM SC) instance with source DICOM Series metadata. + + Args: + output_folder (str or Path): The folder for saving the generated DICOM SC instance file. + model_info (ModelInfo): Object encapsulating model creator, name, version and UID. + equipment_info (EquipmentInfo, optional): Object encapsulating info for DICOM Equipment Module. + Defaults to None. + custom_tags (Dict[str, str], optional): Dictionary for setting custom DICOM tags using Keywords and str values only. + Defaults to None. + + Raises: + ValueError: If result cannot be found either in memory or from file. + """ + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + + # need to init the output folder until the execution context supports dynamic FS path + # not trying to create the folder to avoid exception on init + self.output_folder = Path(output_folder) if output_folder else DICOMSCWriterOperator.DEFAULT_OUTPUT_FOLDER + self.input_name_sc_dir = "dicom_sc_dir" + self.input_name_study_series = "study_selected_series_list" + + # for copying DICOM attributes from a provided DICOMSeries + # required input for write_common_modules; will always be True for this implementation + self.copy_tags = True + + self.model_info = model_info if model_info else ModelInfo() + self.equipment_info = equipment_info if equipment_info else EquipmentInfo() + self.custom_tags = custom_tags + + # set own Modality and SOP Class UID + # Standard SOP Classes: https://dicom.nema.org/dicom/2013/output/chtml/part04/sect_B.5.html + # Modality, e.g., + # "OT" for PDF + # "SR" for Structured Report. + # Media Storage SOP Class UID, e.g., + # "1.2.840.10008.5.1.4.1.1.88.11" for Basic Text SR Storage + # "1.2.840.10008.5.1.4.1.1.104.1" for Encapsulated PDF Storage, + # "1.2.840.10008.5.1.4.1.1.88.34" for Comprehensive 3D SR IOD + # "1.2.840.10008.5.1.4.1.1.66.4" for Segmentation Storage + self.modality_type = "OT" # OT Modality for Secondary Capture + self.sop_class_uid = ( + "1.2.840.10008.5.1.4.1.1.7.4" # SOP Class UID for Multi-frame True Color Secondary Capture Image Storage + ) + # custom OverlayImageLabeld post-processing transform creates an RBG overlay + + # equipment version may be different from contributing equipment version + try: + self.software_version_number = get_sdk_semver() # SDK Version + except Exception: + self.software_version_number = "" + self.operators_name = f"AI Algorithm {self.model_info.name}" + + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + """Set up the named input(s), and output(s) if applicable. + + This operator does not have an output for the next operator, rather file output only. + + Args: + spec (OperatorSpec): The Operator specification for inputs and outputs etc. + """ + + spec.input(self.input_name_sc_dir) + spec.input(self.input_name_study_series) + + def compute(self, op_input, op_output, context): + """Performs computation for this operator and handles I/O. + + For now, only a single result content is supported, which could be in memory or an accessible file. + The DICOM Series used during inference is required (and copy_tags is hardcoded to True). + + When there are multiple selected series in the input, the first series' containing study will + be used for retrieving DICOM Study module attributes, e.g. StudyInstanceUID. + + Raises: + NotADirectoryError: When temporary DICOM SC path is not a directory. + FileNotFoundError: When result object not in the input, and result file not found either. + ValueError: Content object and file path not in the inputs, or no DICOM series provided. + IOError: If the input content is blank. + """ + + # receive the temporary DICOM SC file path and study selected series list + dicom_sc_dir = Path(op_input.receive(self.input_name_sc_dir)) + if not dicom_sc_dir: + raise IOError("Temporary DICOM SC path is read but blank.") + if not dicom_sc_dir.is_dir(): + raise NotADirectoryError(f"Provided temporary DICOM SC path is not a directory: {dicom_sc_dir}") + self._logger.info(f"Received temporary DICOM SC path: {dicom_sc_dir}") + + study_selected_series_list = op_input.receive(self.input_name_study_series) + if not study_selected_series_list or len(study_selected_series_list) < 1: + raise ValueError("Missing input, list of 'StudySelectedSeries'.") + + # retrieve the DICOM Series used during inference in order to grab appropriate study/series level tags + # this will be the 1st Series in study_selected_series_list + dicom_series = None + for study_selected_series in study_selected_series_list: + if not isinstance(study_selected_series, StudySelectedSeries): + raise ValueError(f"Element in input is not expected type, {StudySelectedSeries}.") + selected_series = study_selected_series.selected_series[0] + dicom_series = selected_series.series + break + + # log basic DICOM metadata for the retrieved DICOM Series + self._logger.debug(f"Dicom Series: {dicom_series}") + + # the output folder should come from the execution context when it is supported + self.output_folder.mkdir(parents=True, exist_ok=True) + + # write the new DICOM SC instance + self.write(dicom_sc_dir, dicom_series, self.output_folder) + + def write(self, dicom_sc_dir, dicom_series: DICOMSeries, output_dir: Path): + """Writes a new, updated DICOM SC instance and deletes the temporary DICOM SC instance. + The new, updated DICOM SC instance is the temporary DICOM SC instance with source + DICOM Series metadata copied. + + Args: + dicom_sc_dir: temporary DICOM SC file path. + dicom_series (DICOMSeries): DICOMSeries object encapsulating the original series. + + Returns: + None + + File output: + New, updated DICOM SC file (with source DICOM Series metadata) in the provided output folder. + """ + + if not isinstance(output_dir, Path): + raise ValueError("output_dir is not a valid Path.") + + output_dir.mkdir(parents=True, exist_ok=True) # just in case + + # find the temporary DICOM SC file in the directory; there should only be one .dcm file present + dicom_files = list(dicom_sc_dir.glob("*.dcm")) + dicom_sc_file = dicom_files[0] + + # load the temporary DICOM SC file using pydicom + dicom_sc_dataset = pydicom.dcmread(dicom_sc_file) + self._logger.info(f"Loaded temporary DICOM SC file: {dicom_sc_file}") + + # use write_common_modules to copy metadata from dicom_series + # this will copy metadata and return an updated Dataset + ds = write_common_modules( + dicom_series, + self.copy_tags, # always True for this implementation + self.modality_type, + self.sop_class_uid, + self.model_info, + self.equipment_info, + ) + + # Secondary Capture specific tags + ds.ImageType = ["DERIVED", "SECONDARY"] + + # for now, only allow str Keywords and str value + if self.custom_tags: + for k, v in self.custom_tags.items(): + if isinstance(k, str) and isinstance(v, str): + try: + ds.update({k: v}) + except Exception as ex: + # best effort for now + logging.warning(f"Tag {k} was not written, due to {ex}") + + # merge the copied metadata into the loaded temporary DICOM SC file (dicom_sc_dataset) + for tag, value in ds.items(): + dicom_sc_dataset[tag] = value + + # save the updated DICOM SC file to the output folder + # instance file name is the same as the new SOP instance UID + output_file_path = self.output_folder.joinpath( + f"{dicom_sc_dataset.SOPInstanceUID}{DICOMSCWriterOperator.DCM_EXTENSION}" + ) + dicom_sc_dataset.save_as(output_file_path) + self._logger.info(f"Saved updated DICOM SC file at: {output_file_path}") + + # remove the temporary DICOM SC file + os.remove(dicom_sc_file) + self._logger.info(f"Removed temporary DICOM SC file: {dicom_sc_file}") + + # check if the temp directory is empty, then delete it + if not any(dicom_sc_dir.iterdir()): + os.rmdir(dicom_sc_dir) + self._logger.info(f"Removed temporary directory: {dicom_sc_dir}") + else: + self._logger.warning(f"Temporary directory {dicom_sc_dir} is not empty, skipping removal.") diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py new file mode 100644 index 00000000..4f2f275c --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py @@ -0,0 +1,349 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from datetime import datetime +from typing import Any, Dict, Union + +import pydicom +import pytz + +from monai.deploy.core import Fragment, Operator, OperatorSpec +from monai.deploy.core.domain.dicom_series import DICOMSeries +from monai.deploy.core.domain.dicom_series_selection import StudySelectedSeries + + +class MongoDBEntryCreatorOperator(Operator): + """Class to create a database entry for downstream MONAI Deploy Express MongoDB database writing. + Provided text input and source DICOM Series DICOM tags are used to create the entry. + + Named inputs: + text: text content to be included in the database entry. + study_selected_series_list: DICOM series for copying metadata from. + + Named output: + mongodb_database_entry: formatted MongoDB database entry. Downstream receiver MongoDBWriterOperator will write + the entry to the MONAI Deploy Express MongoDB database. + """ + + def __init__(self, fragment: Fragment, *args, map_version: str, **kwargs): + """Class to create a MONAI Deploy Express MongoDB database entry. Provided text input and + source DICOM Series DICOM tags are used to create the entry. + + Args: + map_version (str): version of the MAP. + + Raises: + ValueError: If result cannot be found either in memory or from file. + """ + + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + self.map_version = map_version + + self.input_name_text = "text" + self.input_name_dcm_series = "study_selected_series_list" + + self.output_name_db_entry = "mongodb_database_entry" + + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + """Set up the named input(s), and output(s). + + Args: + spec (OperatorSpec): The Operator specification for inputs and outputs etc. + """ + + spec.input(self.input_name_text) + spec.input(self.input_name_dcm_series) + + spec.output(self.output_name_db_entry) + + def compute(self, op_input, op_output, context): + """Performs computation for this operator and handles I/O. + + For now, only a single result content is supported, which could be in memory or an accessible file. + The DICOM Series used during inference is required. + + When there are multiple selected series in the input, the first series' containing study will + be used for retrieving DICOM Study module attributes, e.g. StudyInstanceUID. + + Raises: + FileNotFoundError: When result object not in the input, and result file not found either. + ValueError: Content object and file path not in the inputs, or no DICOM series provided. + IOError: If the input content is blank. + """ + + # receive the result text and study selected series list + result_text = str(op_input.receive(self.input_name_text)).strip() + if not result_text: + raise IOError("Input is read but blank.") + + study_selected_series_list = None + try: + study_selected_series_list = op_input.receive(self.input_name_dcm_series) + except Exception: + pass + if not study_selected_series_list or len(study_selected_series_list) < 1: + raise ValueError("Missing input, list of 'StudySelectedSeries'.") + + # retrieve the DICOM Series used during inference in order to grab appropriate Study/Series level tags + # this will be the 1st Series in study_selected_series_list + dicom_series = None + for study_selected_series in study_selected_series_list: + if not isinstance(study_selected_series, StudySelectedSeries): + raise ValueError(f"Element in input is not expected type, {StudySelectedSeries}.") + selected_series = study_selected_series.selected_series[0] + dicom_series = selected_series.series + break + + # create MongoDB entry + mongodb_database_entry = self.create_entry(result_text, dicom_series, self.map_version) + + # emit MongoDB entry + op_output.emit(mongodb_database_entry, self.output_name_db_entry) + + def create_entry(self, result_text: str, dicom_series: DICOMSeries, map_version: str): + """Creates the MONAI Deploy Express MongoDB database entry. + + Args: + result_text (str): text content to be included in the database entry. + dicom_series (DICOMSeries): DICOMSeries object encapsulating the original series. + map_version (str): version of the MAP. + + Returns: + mongodb_database_entry: formatted MongoDB database entry. + """ + + if not result_text or not len(result_text.strip()): + raise ValueError("Content is empty.") + + # get one of the SOP instance's native sop instance dataset + # we will pull Study level (and some Series level) DICOM tags from this SOP instance + # this same strategy is employed by write_common_modules + orig_ds = dicom_series.get_sop_instances()[0].get_native_sop_instance() + + # # loop through dicom series tags; look for discrepancies from SOP instances + # for sop_instance in dicom_series.get_sop_instances(): + # # get the native SOP instance dataset + # dicom_image = sop_instance.get_native_sop_instance() + + # # check if the tag is present in the dataset + # if hasattr(dicom_image, 'Exposure'): + # tag = dicom_image.Exposure + # print(f"Exposure: {tag}") + # else: + # print("Exposure tag not found in this SOP instance.") + + # DICOM TAG WRITING TO MONGODB + # edge cases addressed by looking at DICOM tag Type, Value Representation (VR), + # and Value Multiplicity (VM) specifically for the CT Image CIOD + # https://dicom.innolitics.com/ciods/ct-image + + # define Tag Absent variable + tag_absent = "Tag Absent" + + # STUDY AND SERIES LEVEL DICOM TAGS + + # AccessionNumber - Type: Required (2), VR: SH, VM: 1 + accession_number = orig_ds.AccessionNumber + + # StudyInstanceUID - Type: Required (1), VR: UI, VM: 1 + study_instance_uid = orig_ds.StudyInstanceUID + + # StudyDescription: Type: Optional (3), VR: LO, VM: 1 + # while Optional, only studies with this tag will be routed from Compass and MAP launched per workflow def + study_description = orig_ds.get("StudyDescription", tag_absent) + + # SeriesInstanceUID: Type: Required (1), VR: UI, VM: 1 + series_instance_uid = dicom_series._series_instance_uid + + # SeriesDescription: Type: Optional (3), VR: LO, VM: 1 + series_description = orig_ds.get("SeriesDescription", tag_absent) + + # sop instances should always be available on the MONAI DICOM Series object + series_sop_instances = len(dicom_series._sop_instances) + + # PATIENT DETAIL DICOM TAGS + + # PatientID - Type: Required (2), VR: LO, VM: 1 + patient_id = orig_ds.PatientID + + # PatientName - Type: Required (2), VR: PN, VM: 1 + # need to convert to str; pydicom can't encode PersonName object + patient_name = str(orig_ds.PatientName) + + # PatientSex - Type: Required (2), VR: CS, VM: 1 + patient_sex = orig_ds.PatientSex + + # PatientBirthDate - Type: Required (2), VR: DA, VM: 1 + patient_birth_date = orig_ds.PatientBirthDate + + # PatientAge - Type: Optional (3), VR: AS, VM: 1 + patient_age = orig_ds.get("PatientAge", tag_absent) + + # EthnicGroup - Type: Optional (3), VR: SH, VM: 1 + ethnic_group = orig_ds.get("EthnicGroup", tag_absent) + + # SCAN ACQUISITION PARAMETER DICOM TAGS + + # on CCHMC test cases, the following tags had consistent values for all SOP instances + + # Manufacturer - Type: Required (2), VR: LO, VM: 1 + manufacturer = orig_ds.Manufacturer + + # ManufacturerModelName - Type: Optional (3), VR: LO, VM: 1 + manufacturer_model_name = orig_ds.get("ManufacturerModelName", tag_absent) + + # BodyPartExamined - Type: Optional (3), VR: CS, VM: 1 + body_part_examined = orig_ds.get("BodyPartExamined", tag_absent) + + # row and column pixel spacing are derived from PixelSpacing + # PixelSpacing - Type: Required (1), VR: DS, VM: 2 (handled by MONAI) + row_pixel_spacing = dicom_series._row_pixel_spacing + column_pixel_spacing = dicom_series._col_pixel_spacing + + # per DICOMSeriesToVolumeOperator, depth pixel spacing will always be defined + depth_pixel_spacing = dicom_series._depth_pixel_spacing + + # SliceThickness - Type: Required (2), VR: DS, VM: 1 + slice_thickness = orig_ds.SliceThickness + + # PixelRepresentation - Type: Required (1), VR: US, VM: 1 + pixel_representation = orig_ds.PixelRepresentation + + # BitsStored - Type: Required (1), VR: US, VM: 1 + bits_stored = orig_ds.BitsStored + + # WindowWidth - Type: Conditionally Required (1C), VR: DS, VM: 1-n + window_width = orig_ds.get("WindowWidth", tag_absent) + # for MultiValue case: + if isinstance(window_width, pydicom.multival.MultiValue): + # join multiple values into a single string separated by a | + # convert DSfloat objects to strs to allow joining + window_width = " | ".join([str(window) for window in window_width]) + + # RevolutionTime - Type: Optional (3), VR: FD, VM: 1 + revolution_time = orig_ds.get("RevolutionTime", tag_absent) + + # FocalSpots - Type: Optional (3), VR: DS, VM: 1-n + focal_spots = orig_ds.get("FocalSpots", tag_absent) + # for MultiValue case: + if isinstance(focal_spots, pydicom.multival.MultiValue): + # join multiple values into a single string separated by a | + # convert DSfloat objects to strs to allow joining + focal_spots = " | ".join([str(spot) for spot in focal_spots]) + + # SpiralPitchFactor - Type: Optional (3), VR: FD, VM: 1 + spiral_pitch_factor = orig_ds.get("SpiralPitchFactor", tag_absent) + + # ConvolutionKernel - Type: Optional (3), VR: SH, VM: 1-n + convolution_kernel = orig_ds.get("ConvolutionKernel", tag_absent) + # for MultiValue case: + if isinstance(convolution_kernel, pydicom.multival.MultiValue): + # join multiple values into a single string separated by a | + convolution_kernel = " | ".join(convolution_kernel) + + # ReconstructionDiameter - Type: Optional (3), VR: DS, VM: 1 + reconstruction_diameter = orig_ds.get("ReconstructionDiameter", tag_absent) + + # KVP - Type: Required (2), VR: DS, VM: 1 + kvp = orig_ds.KVP + + # on CCHMC test cases, the following tags did NOT have consistent values for all SOP instances + # as such, if the tag value exists, it will be averaged over all SOP instances + + # initialize an averaged values dictionary + averaged_values: Dict[str, Union[float, str]] = {} + + # tags to check and average + tags_to_average = { + "XRayTubeCurrent": tag_absent, # Type: Optional (3), VR: IS, VM: 1 + "Exposure": tag_absent, # Type: Optional (3), VR: IS, VM: 1 + "CTDIvol": tag_absent, # Type: Optional (3), VR: FD, VM: 1 + } + + # check which tags are present on the 1st SOP instance + for tag, default_value in tags_to_average.items(): + # if the tag exists + if tag in orig_ds: + # loop through SOP instances, grab tag values + values = [] + for sop_instance in dicom_series.get_sop_instances(): + ds = sop_instance.get_native_sop_instance() + value = ds.get(tag, default_value) + # if tag is present on current SOP instance + if value != default_value: + # add tag value to values; convert to float for averaging + values.append(float(value)) + # compute the average if values were collected + if values: + averaged_values[tag] = round(sum(values) / len(values), 3) + else: + averaged_values[tag] = default_value + else: + # if the tag is absent in the first SOP instance, keep the default value + averaged_values[tag] = default_value + + # parse result_text (i.e. predicted organ volumes) and format + map_results = {} + for line in result_text.split("\n"): + if ":" in line: + key, value = line.split(":") + key = key.replace(" ", "") + map_results[key] = value.strip() + + # create the MongoDB database entry + mongodb_database_entry: Dict[str, Any] = { + "Timestamp": datetime.now(pytz.UTC), # timestamp in UTC + "MAPVersion": map_version, + "DICOMSeriesDetails": { + "AccessionNumber": accession_number, + "StudyInstanceUID": study_instance_uid, + "StudyDescription": study_description, + "SeriesInstanceUID": series_instance_uid, + "SeriesDescription": series_description, + "SeriesFileCount": series_sop_instances, + }, + "PatientDetails": { + "PatientID": patient_id, + "PatientName": patient_name, + "PatientSex": patient_sex, + "PatientBirthDate": patient_birth_date, + "PatientAge": patient_age, + "EthnicGroup": ethnic_group, + }, + "ScanAcquisitionDetails": { + "Manufacturer": manufacturer, + "ManufacturerModelName": manufacturer_model_name, + "BodyPartExamined": body_part_examined, + "RowPixelSpacing": row_pixel_spacing, + "ColumnPixelSpacing": column_pixel_spacing, + "DepthPixelSpacing": depth_pixel_spacing, + "SliceThickness": slice_thickness, + "PixelRepresentation": pixel_representation, + "BitsStored": bits_stored, + "WindowWidth": window_width, + "RevolutionTime": revolution_time, + "FocalSpots": focal_spots, + "SpiralPitchFactor": spiral_pitch_factor, + "ConvolutionKernel": convolution_kernel, + "ReconstructionDiameter": reconstruction_diameter, + "KVP": kvp, + }, + "MAPResults": map_results, + } + + # integrate averaged tags into MongoDB entry: + mongodb_database_entry["ScanAcquisitionDetails"].update(averaged_values) + + return mongodb_database_entry diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py new file mode 100644 index 00000000..6d18e395 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py @@ -0,0 +1,235 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os + +from dotenv import load_dotenv + +load_dotenv() + +from pymongo import MongoClient, errors + +from monai.deploy.core import Fragment, Operator, OperatorSpec + + +class MongoDBWriterOperator(Operator): + """Class to write the MONAI Deploy Express MongoDB database with provided database entry. + + Named inputs: + mongodb_database_entry: formatted MongoDB database entry. + + Named output: + None + + Result: + MONAI Deploy Express MongoDB database write of the database entry. + """ + + def __init__(self, fragment: Fragment, *args, database_name: str, collection_name: str, **kwargs): + """Class to write the MONAI Deploy Express MongoDB database with provided database entry. + + Args: + database_name (str): name of the MongoDB database that will be written. + collection_name (str): name of the MongoDB collection that will be written. + + Raises: + Relevant MongoDB errors if database writing is unsuccessful. + """ + + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + self.database_name = database_name + self.collection_name = collection_name + + self.input_name_db_entry = "mongodb_database_entry" + + # MongoDB credentials + self.mongodb_username = os.environ.get("MONGODB_USERNAME") + self.mongodb_password = os.environ.get("MONGODB_PASSWORD") + self.mongodb_port = os.environ.get("MONGODB_PORT") + self.docker_mongodb_ip = os.environ.get("MONGODB_IP_DOCKER") + + # determine the MongoDB IP address based on execution environment + self.mongo_ip = self._get_mongo_ip() + self._logger.info(f"Using MongoDB IP: {self.mongo_ip}") + + # connect to the MongoDB database + self.client = None + + try: + self.client = MongoClient( + f"mongodb://{self.mongodb_username}:{self.mongodb_password}@{self.mongo_ip}:{self.mongodb_port}/?authSource=admin", + serverSelectionTimeoutMS=10000, # 10s timeout for testing connection; 20s by default + ) + if self.client is None: + raise RuntimeError("MongoClient was not created successfully") + ping_response = self.client.admin.command("ping") + self._logger.info( + f"Successfully connected to MongoDB at: {self.client.address}. Ping response: {ping_response}" + ) + self.db = self.client[self.database_name] + self.collection = self.db[self.collection_name] + except errors.ServerSelectionTimeoutError as e: + self._logger.error("Failed to connect to MongoDB: Server selection timeout.") + self._logger.debug(f"Detailed error: {e}") + raise + except errors.ConnectionFailure as e: + self._logger.error("Failed to connect to MongoDB: Connection failure.") + self._logger.debug(f"Detailed error: {e}") + raise + except errors.OperationFailure as e: + self._logger.error("Failed to authenticate with MongoDB.") + self._logger.debug(f"Detailed error: {e}") + raise + except Exception as e: + self._logger.error("Unexpected error occurred while connecting to MongoDB.") + self._logger.debug(f"Detailed error: {e}") + raise + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + """Set up the named input(s), and output(s) if applicable. + + This operator does not have an output for the next operator - MongoDB write only. + + Args: + spec (OperatorSpec): The Operator specification for inputs and outputs etc. + """ + + spec.input(self.input_name_db_entry) + + def compute(self, op_input, op_output, context): + """Performs computation for this operator""" + + mongodb_database_entry = op_input.receive(self.input_name_db_entry) + + # write to MongoDB + self.write(mongodb_database_entry) + + def write(self, mongodb_database_entry): + """Writes the database entry to the MONAI Deploy Express MongoDB database. + + Args: + mongodb_database_entry: formatted MongoDB database entry. + + Returns: + None + """ + + # MongoDB writing + try: + insert_result = self.collection.insert_one(mongodb_database_entry) + if insert_result.acknowledged: + self._logger.info(f"Document inserted with ID: {insert_result.inserted_id}") + else: + self._logger.error("Failed to write document to MongoDB.") + except errors.PyMongoError as e: + self._logger.error("Failed to insert document into MongoDB.") + self._logger.debug(f"Detailed error: {e}") + raise + + def _get_mongo_ip(self): + """Determine the MongoDB IP based on the execution environment. + + If the pipeline is being run pythonically, use localhost. + + If MAP is being run via MAR or MONAI Deploy Express, use Docker bridge network IP. + """ + + # if running in a Docker container (/.dockerenv file present) + if os.path.exists("/.dockerenv"): + self._logger.info("Detected Docker environment") + return self.docker_mongodb_ip + + # if not executing as Docker container, we are executing pythonically + self._logger.info("Detected local environment (pythonic execution)") + return "localhost" + + +# Module function (helper function) +def test(): + """Test writing to and deleting from the MDE MongoDB instance locally""" + + # MongoDB credentials + mongodb_username = os.environ.get("MONGODB_USERNAME") + mongodb_password = os.environ.get("MONGODB_PASSWORD") + mongodb_port = os.environ.get("MONGODB_PORT") + + # sample information + database_name = "CTLiverSpleenSegPredictions" + collection_name = "OrganVolumes" + test_entry = {"test_key": "test_value"} + + # connect to MongoDB instance (localhost as we are testing locally) + try: + client = MongoClient( + f"mongodb://{mongodb_username}:{mongodb_password}@localhost:{mongodb_port}/?authSource=admin", + serverSelectionTimeoutMS=10000, # 10s timeout for testing connection; 20s by default + ) + if client is None: + raise RuntimeError("MongoClient was not created successfully") + ping_response = client.admin.command("ping") + print(f"Successfully connected to MongoDB at: {client.address}. Ping response: {ping_response}") + db = client[database_name] + collection = db[collection_name] + except errors.ServerSelectionTimeoutError as e: + print("Failed to connect to MongoDB: Server selection timeout.") + print(f"Detailed error: {e}") + raise + except errors.ConnectionFailure as e: + print("Failed to connect to MongoDB: Connection failure.") + print(f"Detailed error: {e}") + raise + except errors.OperationFailure as e: + print("Failed to authenticate with MongoDB.") + print(f"Detailed error: {e}") + raise + except Exception as e: + print("Unexpected error occurred while connecting to MongoDB.") + print(f"Detailed error: {e}") + raise + + # insert document + try: + insert_result = collection.insert_one(test_entry) + if insert_result.acknowledged: + print(f"Document inserted with ID: {insert_result.inserted_id}") + else: + print("Failed to write document to MongoDB.") + except errors.PyMongoError as e: + print("Failed to insert document into MongoDB.") + print(f"Detailed error: {e}") + raise + + # verify the inserted document + try: + inserted_doc = collection.find_one({"_id": insert_result.inserted_id}) + if inserted_doc: + print(f"Inserted document: {inserted_doc}") + else: + print("Document not found in the collection after insertion.") + except errors.PyMongoError as e: + print("Failed to retrieve the inserted document from MongoDB.") + print(f"Detailed error: {e}") + return + + # # delete a database + # try: + # client.drop_database(database_name) + # print(f"Test database '{database_name}' deleted successfully.") + # except errors.PyMongoError as e: + # print("Failed to delete the test database.") + # print(f"Detailed error: {e}") + + +if __name__ == "__main__": + test() diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py b/examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py new file mode 100644 index 00000000..607bcd47 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py @@ -0,0 +1,387 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json +import logging +import os +from typing import List + +import matplotlib.cm as cm +import numpy as np + +from monai.config import KeysCollection +from monai.data import MetaTensor +from monai.transforms import LabelToContour, MapTransform + + +# Calculate segmentation volumes in ml +class CalculateVolumeFromMaskd(MapTransform): + """ + Dictionary-based transform to calculate the volume of predicted organ masks. + + Args: + keys (list): The keys corresponding to the predicted organ masks in the dictionary. + label_names (list): The list of organ names corresponding to the masks. + """ + + def __init__(self, keys, label_names): + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys) + self.label_names = label_names + + def __call__(self, data): + # Initialize a dictionary to store the volumes of each organ + pred_volumes = {} + + for key in self.keys: + for label_name in self.label_names.keys(): + # self._logger.info('Key: ', key, ' organ_name: ', label_name) + if label_name != "background": + # Get the predicted mask from the dictionary + pred_mask = data[key] + # Calculate the voxel size in cubic millimeters (voxel size should be in the metadata) + # Assuming the metadata contains 'spatial_shape' with voxel dimensions in mm + if hasattr(pred_mask, "affine"): + voxel_size = np.abs(np.linalg.det(pred_mask.affine[:3, :3])) + else: + raise ValueError("Affine transformation matrix with voxel spacing information is required.") + + # Calculate the volume in cubic millimeters + label_volume_mm3 = np.sum(pred_mask == self.label_names[label_name]) * voxel_size + + # Convert to milliliters (1 ml = 1000 mm^3) + label_volume_ml = label_volume_mm3 / 1000.0 + + # Store the result in the pred_volumes dictionary + # convert to int - radiologists prefer whole number with no decimals + pred_volumes[label_name] = int(round(label_volume_ml, 0)) + + # Add the calculated volumes to the data dictionary + key_name = key + "_volumes" + + data[key_name] = pred_volumes + # self._logger.info('pred_volumes: ', pred_volumes) + return data + + +class LabelToContourd(MapTransform): + def __init__(self, keys: KeysCollection, output_labels: list, allow_missing_keys: bool = False): + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys, allow_missing_keys) + + self.output_labels = output_labels + + def __call__(self, data): + d = dict(data) + for key in self.keys: + label_image = d[key] + assert isinstance(label_image, MetaTensor), "Input image must be a MetaTensor." + + # Initialize the contour image with the same shape as the label image + contour_image = np.zeros_like(label_image.cpu().numpy()) + + if label_image.ndim == 4: # Check if the label image is 4D with a channel dimension + # Process each 2D slice independently along the last axis (z-axis) + for i in range(label_image.shape[-1]): + slice_image = label_image[:, :, :, i].cpu().numpy() + + # Extract unique labels excluding background (assumed to be 0) + unique_labels = np.unique(slice_image) + unique_labels = unique_labels[unique_labels != 0] + + slice_contour = np.zeros_like(slice_image) + + # Generate contours for each label in the slice + for label in unique_labels: + # skip contour generation for labels that are not in output_labels + if label not in self.output_labels: + continue + + # Create a binary mask for the current label + binary_mask = np.zeros_like(slice_image) + binary_mask[slice_image == label] = 1.0 + + # Apply LabelToContour to the 2D slice (replace this with actual contour logic) + thick_edges = LabelToContour()(binary_mask) + + # Assign the label value to the contour image at the edge positions + slice_contour[thick_edges > 0] = label + + # Stack the processed slice back into the 4D contour image + contour_image[:, :, :, i] = slice_contour + else: + # If the label image is not 4D, process it directly + slice_image = label_image.cpu().numpy() + unique_labels = np.unique(slice_image) + unique_labels = unique_labels[unique_labels != 0] + + for label in unique_labels: + binary_mask = np.zeros_like(slice_image) + binary_mask[slice_image == label] = 1.0 + + thick_edges = LabelToContour()(binary_mask) + contour_image[thick_edges > 0] = label + + # Convert the contour image back to a MetaTensor with the original metadata + contour_image_meta = MetaTensor(contour_image, meta=label_image.meta) # , affine=label_image.affine) + + # Store the contour MetaTensor in the output dictionary + d[key] = contour_image_meta + + return d + + +class OverlayImageLabeld(MapTransform): + def __init__( + self, + image_key: KeysCollection, + label_key: str, + overlay_key: str = "overlay", + alpha: float = 0.7, + allow_missing_keys: bool = False, + ): + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(image_key, allow_missing_keys) + + self.image_key = image_key + self.label_key = label_key + self.overlay_key = overlay_key + self.alpha = alpha + self.jet_colormap = cm.get_cmap("jet", 256) # Get the Jet colormap with 256 discrete colors + + def apply_jet_colormap(self, label_volume): + """ + Apply the Jet colormap to a 3D label volume using matplotlib's colormap. + """ + assert label_volume.ndim == 3, "Label volume should have 3 dimensions (H, W, D) after removing channel." + + label_volume_normalized = (label_volume / label_volume.max()) * 255.0 + label_volume_uint8 = label_volume_normalized.astype(np.uint8) + + # Apply the colormap to each label + label_rgb = self.jet_colormap(label_volume_uint8)[:, :, :, :3] # Only take the RGB channels + + label_rgb = (label_rgb * 255).astype(np.uint8) + # Rearrange axes to get (3, H, W, D) + label_rgb = np.transpose(label_rgb, (3, 0, 1, 2)) + + assert label_rgb.shape == ( + 3, + *label_volume.shape, + ), f"Label RGB shape should be (3,H, W, D) but got {label_rgb.shape}" + + return label_rgb + + def convert_to_rgb(self, image_volume): + """ + Convert a single-channel grayscale 3D image to an RGB 3D image. + """ + assert image_volume.ndim == 3, "Image volume should have 3 dimensions (H, W, D) after removing channel." + + image_volume_normalized = (image_volume - image_volume.min()) / (image_volume.max() - image_volume.min()) + image_rgb = np.stack([image_volume_normalized] * 3, axis=0) + image_rgb = (image_rgb * 255).astype(np.uint8) + + assert image_rgb.shape == ( + 3, + *image_volume.shape, + ), f"Image RGB shape should be (3,H, W, D) but got {image_rgb.shape}" + + return image_rgb + + def _create_overlay(self, image_volume, label_volume): + # Convert the image volume and label volume to RGB + image_rgb = self.convert_to_rgb(image_volume) + label_rgb = self.apply_jet_colormap(label_volume) + + # Create an alpha-blended overlay + overlay = image_rgb.copy() + mask = label_volume > 0 + + # Apply the overlay where the mask is present + for i in range(3): # For each color channel + overlay[i, mask] = (self.alpha * label_rgb[i, mask] + (1 - self.alpha) * overlay[i, mask]).astype(np.uint8) + + assert ( + overlay.shape == image_rgb.shape + ), f"Overlay shape should match image RGB shape: {overlay.shape} vs {image_rgb.shape}" + + return overlay + + def __call__(self, data): + d = dict(data) + + # Get the image and label tensors + image = d[self.image_key] # Expecting shape (1, H, W, D) + label = d[self.label_key] # Expecting shape (1, H, W, D) + + # uncomment when running pipeline with mask (non-contour) outputs, i.e. LabelToContourd transform absent + # if image.device.type == "cuda": + # image = image.cpu() + # d[self.image_key] = image + # if label.device.type == "cuda": + # label = label.cpu() + # d[self.label_key] = label + # # ----------------------- + + # Ensure that the input has the correct dimensions + assert image.shape[0] == 1 and label.shape[0] == 1, "Image and label must have a channel dimension of 1." + assert image.shape == label.shape, f"Image and label must have the same shape: {image.shape} vs {label.shape}" + + # Remove the channel dimension for processing + image_volume = image[0] # Shape: (H, W, D) + label_volume = label[0] # Shape: (H, W, D) + + # Convert to 3D overlay + overlay = self._create_overlay(image_volume, label_volume) + + # Add the channel dimension back + # d[self.overlay_key] = np.expand_dims(overlay, axis=0) # Shape: (1, H, W, D, 3) + d[self.overlay_key] = MetaTensor(overlay, meta=label.meta, affine=label.affine) # Shape: (3, H, W, D) + + # Assert the final output shape + # assert d[self.overlay_key].shape == (1, *image_volume.shape, 3), \ + # f"Final overlay shape should be (1, H, W, D, 3) but got {d[self.overlay_key].shape}" + + assert d[self.overlay_key].shape == ( + 3, + *image_volume.shape, + ), f"Final overlay shape should be (3, H, W, D) but got {d[self.overlay_key].shape}" + + # Log the overlay creation (debugging) + self._logger.info(f"Overlay created with shape: {overlay.shape}") + # self._logger.info(f"Dictionary keys: {d.keys()}") + + # self._logger.info('overlay_image shape: ', d[self.overlay_key].shape) + return d + + +class SaveData(MapTransform): + """ + Save the output dictionary into JSON files. + + The name of the saved file will be `{key}_{output_postfix}.json`. + + Args: + keys: keys of the corresponding items to be saved in the dictionary. + output_dir: directory to save the output files. + output_postfix: a string appended to all output file names, default is `data`. + separate_folder: whether to save each file in a separate folder. Default is `True`. + print_log: whether to print logs when saving. Default is `True`. + """ + + def __init__( + self, + keys: KeysCollection, + namekey: str = "image", + output_dir: str = "./", + output_postfix: str = "data", + separate_folder: bool = False, + print_log: bool = True, + allow_missing_keys: bool = False, + ): + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys, allow_missing_keys) + self.output_dir = output_dir + self.output_postfix = output_postfix + self.separate_folder = separate_folder + self.print_log = print_log + self.namekey = namekey + + def __call__(self, data): + d = dict(data) + image_name = os.path.basename(d[self.namekey].meta["filename_or_obj"]).split(".")[0] + for key in self.keys: + # Get the data + output_data = d[key] + + # Determine the file name + file_name = f"{image_name}_{self.output_postfix}.json" + if self.separate_folder: + file_path = os.path.join(self.output_dir, image_name, file_name) + os.makedirs(os.path.dirname(file_path), exist_ok=True) + else: + file_path = os.path.join(self.output_dir, file_name) + + # Save the dictionary as a JSON file + with open(file_path, "w") as f: + json.dump(output_data, f) + + if self.print_log: + self._logger.info(f"Saved data to {file_path}") + + return d + + +# custom transform (not in original post_transforms.py in bundle): +class ExtractVolumeToTextd(MapTransform): + """ + Custom transform to extract volume information from the segmentation results and format it as a textual summary. + Filters organ volumes based on output_labels for DICOM SR write, while including all organs for MongoDB write. + The upstream CalculateVolumeFromMaskd transform calculates organ volumes and stores them in the dictionary + under the pred_key + '_volumes' key. The input dictionary is outputted unchanged as to not affect downstream operators. + + Args: + keys: keys of the corresponding items to be saved in the dictionary. + label_names: dictionary mapping organ names to their corresponding label indices. + output_labels: list of target label indices for organs to include in the DICOM SR output. + """ + + def __init__( + self, + keys: KeysCollection, + label_names: dict, + output_labels: List[int], + allow_missing_keys: bool = False, + ): + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys, allow_missing_keys) + + self.label_names = label_names + self.output_labels = output_labels + + # create separate result_texts for DICOM SR write (target organs) and MongoDB write (all organs) + self.result_text_dicom_sr: str = "" + self.result_text_mongodb: str = "" + + def __call__(self, data): + d = dict(data) + # use the first key in `keys` to access the volume data (e.g., pred_key + '_volumes') + volumes_key = self.keys[0] + organ_volumes = d.get(volumes_key, None) + + if organ_volumes is None: + raise ValueError(f"Volume data not found for key {volumes_key}.") + + # create the volume text outputs + volume_text_dicom_sr = [] + volume_text_mongodb = [] + + # loop through calculated organ volumes + for organ, volume in organ_volumes.items(): + + # append all organ volumes for MongoDB entry + volume_entry = f"{organ.capitalize()} Volume: {volume} mL" + volume_text_mongodb.append(volume_entry) + + # if the organ's label index is in output_labels + label_index = self.label_names.get(organ, None) + if label_index in self.output_labels: + # append organ volume for DICOM SR entry + volume_text_dicom_sr.append(volume_entry) + + self.result_text_dicom_sr = "\n".join(volume_text_dicom_sr) + self.result_text_mongodb = "\n".join(volume_text_mongodb) + + # not adding result_text to dictionary; return dictionary unchanged as to not affect downstream operators + return d diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt b/examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt new file mode 100644 index 00000000..309428d7 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt @@ -0,0 +1,27 @@ +monai>=1.3.0 +torch>=1.12.0 +pytorch-ignite>=0.4.9 +fire>=0.4.0 +numpy>=1.22.2 +nibabel>=4.0.1 +# pydicom v3.0.0 removed pydicom._storage_sopclass_uids; don't meet or exceed this version +pydicom>=2.3.0,<3.0.0 +highdicom>=0.18.2 +itk>=5.3.0 +SimpleITK>=2.0.0 +scikit-image>=0.17.2 +Pillow>=8.0.0 +numpy-stl>=2.12.0 +trimesh>=3.8.11 +matplotlib>=3.7.2 +setuptools>=59.5.0 # for pkg_resources +python-dotenv>=1.0.1 + +# pymongo for MongoDB writing +pymongo>=4.10.1 + +# pytz for MongoDB Timestamp +pytz>=2024.1 + +# MONAI Deploy App SDK package installation +monai-deploy-app-sdk diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh new file mode 100755 index 00000000..d4302ad6 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh @@ -0,0 +1,29 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# build a MAP + +# check if the correct number of arguments are provided +if [ "$#" -ne 3 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 +sdk_version=$3 + +# load in environment variables +source .env + +# build MAP +monai-deploy package cchmc_ped_abd_ct_seg_app -m $HOLOSCAN_MODEL_PATH -c cchmc_ped_abd_ct_seg_app/app.yaml -t ${tag_prefix}:${image_version} --platform x64-workstation --sdk-version ${sdk_version} -l DEBUG diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh new file mode 100755 index 00000000..a87287cb --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh @@ -0,0 +1,31 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# display and extract MAP contents + +# check if the correct number of arguments are provided +if [ "$#" -ne 2 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 + +# display basic MAP manifests +docker run --rm ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} show + +# remove and subsequently create export folder +rm -rf `pwd`/export && mkdir -p `pwd`/export + +# extract MAP contents +docker run --rm -v `pwd`/export/:/var/run/holoscan/export/ ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} extract diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh new file mode 100755 index 00000000..f4d5251a --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh @@ -0,0 +1,31 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# execute MAP locally with MAR + +# check if the correct number of arguments are provided +if [ "$#" -ne 2 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 + +# load in environment variables +source .env + +# remove the output directory +rm -rf "$HOLOSCAN_OUTPUT_PATH" + +# execute MAP locally via MAR +monai-deploy run -i $HOLOSCAN_INPUT_PATH -o $HOLOSCAN_OUTPUT_PATH ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh new file mode 100755 index 00000000..422ae16e --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh @@ -0,0 +1,37 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# run an interactive MAP container + +# check if the correct number of arguments are provided +if [ "$#" -ne 2 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 + +# load in environment variables +source .env + +# remove the output directory +rm -rf "$HOLOSCAN_OUTPUT_PATH" + +# execute MAP locally via MAR and start interactive container +monai-deploy run -i $HOLOSCAN_INPUT_PATH -o $HOLOSCAN_OUTPUT_PATH ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} --terminal + +# # start interactive MAP container without MAR +# docker run -it --entrypoint /bin/bash ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} + +# # see dependencies installed in MAP +# pip freeze diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh new file mode 100755 index 00000000..6decca04 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh @@ -0,0 +1,21 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# execute model bundle locally (pythonically) + +# load in environment variables +source .env + +# remove the output directory +rm -rf "$HOLOSCAN_OUTPUT_PATH" + +# execute model bundle locally (pythonically) +python cchmc_ped_abd_ct_seg_app -i "$HOLOSCAN_INPUT_PATH" -o "$HOLOSCAN_OUTPUT_PATH" -m "$HOLOSCAN_MODEL_PATH" diff --git a/requirements-examples.txt b/requirements-examples.txt index 14756af7..56301f72 100644 --- a/requirements-examples.txt +++ b/requirements-examples.txt @@ -1,6 +1,7 @@ scikit-image>=0.17.2 pydicom>=2.3.0 PyPDF2>=2.11.1 +types-pytz>=2024.1.0.20240203 highdicom>=0.18.2 SimpleITK>=2.0.0 Pillow>=8.4.0 From cbbc7a4016e4289d0cbc18f6088038428ff09e89 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Thu, 10 Apr 2025 09:18:07 +0000 Subject: [PATCH 003/118] Fix meta_data handling in MonaiBundleInferenceOperator to ensure it defaults to an empty dict Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/monai_bundle_inference_operator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index 94c118e3..a27f9770 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -577,6 +577,7 @@ def compute(self, op_input, op_output, context): # value: NdarrayOrTensor # MyPy complaints value, meta_data = self._receive_input(name, op_input, context) value = convert_to_dst_type(value, dst=value)[0] + meta_data = meta_data or {} if not isinstance(meta_data, dict): raise ValueError("`meta_data` must be a dict.") value = MetaTensor.ensure_torch_and_prune_meta(value, meta_data) From d587183a329c6b486c9858d3a2042922a66ba851 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Wed, 16 Apr 2025 06:41:36 +0000 Subject: [PATCH 004/118] Update requirements and fix data shape handling in Monai nUNet Bundle Inference Operator Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/requirements.txt | 5 +++-- .../operators/monai_nnunet_bundle_inference_operator.py | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt index ebce84bd..fede9fba 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt +++ b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt @@ -7,5 +7,6 @@ numpy-stl>=2.12.0 trimesh>=3.8.11 nibabel>=3.2.1 torch>=1.12.0 -monai>=1.0.0 -nnunetv2>=2.5.1 +git+https://github.com/SimoneBendazzoli93/dynamic-network-architectures.git +git+https://github.com/SimoneBendazzoli93/MONAI.git@dev +git+https://github.com/SimoneBendazzoli93/nnUNet.git diff --git a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py index 3bedb448..954e12e6 100644 --- a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py @@ -75,7 +75,6 @@ def _init_config(self, config_names): super()._init_config(config_names) parser = get_bundle_config(str(self._bundle_path), config_names) - parser['bundle_root'] = str(Path(self._bundle_path).parent.parent.parent) self._parser = parser self._nnunet_predictor = parser.get_parsed_content("network_def") @@ -85,4 +84,6 @@ def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, .. self._nnunet_predictor.predictor.network = self._model_network #os.environ['nnUNet_def_n_proc'] = "1" - return self._nnunet_predictor(torch.unsqueeze(data, 0)) + if len(data.shape) == 4: + data = data[None] + return self._nnunet_predictor(data) From e2591dc44db87e81f6d46fb2e68157e424237f70 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Wed, 16 Apr 2025 15:23:08 +0000 Subject: [PATCH 005/118] Add NiftiDataWriter operator and update NiftiDataLoader to return SimpleITK image Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/__init__.py | 1 + .../monai_bundle_inference_operator.py | 12 +++ .../operators/nii_data_loader_operator.py | 3 +- .../operators/nii_data_writer_operator.py | 100 ++++++++++++++++++ 4 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 monai/deploy/operators/nii_data_writer_operator.py diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index c875eea8..4599048d 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -54,3 +54,4 @@ from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter +from .nii_data_writer_operator import NiftiDataWriter diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index a27f9770..c15b0b66 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -23,6 +23,8 @@ import numpy as np +import SimpleITK +from SimpleITK import Image as SimpleITKImage from monai.deploy.core import AppContext, Fragment, Image, IOType, OperatorSpec from monai.deploy.utils.importutil import optional_import @@ -703,6 +705,16 @@ def _receive_input(self, name: str, op_input, context): logging.debug(f"Metadata of the converted input image: {metadata}") elif isinstance(value, np.ndarray): value = torch.from_numpy(value).to(self._device) + elif isinstance(value, SimpleITKImage): + metadata = {} + metadata["pixdim"] = np.asarray(value.GetSpacing()) + metadata["origin"] = np.asarray(value.GetOrigin()) + metadata["direction"] = np.asarray(value.GetDirection()) + if len(value.GetSize()) == 3: + metadata["pixdim"] = np.insert(np.asarray(value.GetSpacing()), 0, 1.0) + value = np.transpose(SimpleITK.GetArrayFromImage(value), [2, 1, 0]) + else: + value = np.transpose(SimpleITK.GetArrayFromImage(value), [0, 3, 2, 1]) # else value is some other object from memory diff --git a/monai/deploy/operators/nii_data_loader_operator.py b/monai/deploy/operators/nii_data_loader_operator.py index 67b0e070..e886df24 100644 --- a/monai/deploy/operators/nii_data_loader_operator.py +++ b/monai/deploy/operators/nii_data_loader_operator.py @@ -80,8 +80,7 @@ def convert_and_save(self, nii_path): image_reader = SimpleITK.ImageFileReader() image_reader.SetFileName(str(nii_path)) image = image_reader.Execute() - image_np = np.transpose(SimpleITK.GetArrayFromImage(image), [2, 1, 0]) - return image_np + return image def test(): diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py new file mode 100644 index 00000000..003395ce --- /dev/null +++ b/monai/deploy/operators/nii_data_writer_operator.py @@ -0,0 +1,100 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import logging +from pathlib import Path + +import numpy as np + +from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec +from monai.deploy.utils.importutil import optional_import + +SimpleITK, _ = optional_import("SimpleITK") + + +# @md.env(pip_packages=["SimpleITK>=2.0.2"]) +class NiftiDataWriter(Operator): + + def __init__(self, fragment: Fragment, *args, output_file: Path, **kwargs) -> None: + """Creates an instance with the file path to load image from. + + Args: + fragment (Fragment): An instance of the Application class which is derived from Fragment. + input_path (Path): The file Path to read from, overridden by valid named input on compute. + """ + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + self.output_file = output_file + self.input_name_seg = "seg_image" + self.input_name_output_file = "output_file" + + # Need to call the base class constructor last + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + spec.input(self.input_name_seg) + spec.input(self.input_name_output_file).condition(ConditionType.NONE) # Optional input not requiring sender. + + def compute(self, op_input, op_output, context): + """Performs computation with the provided context.""" + + + seg_image = op_input.receive(self.input_name_seg) + + + # If the optional named input, output_folder, has content, use it instead of the one set on the object. + # Since this input is optional, must check if data present and if Path or str. + output_file = None + try: + output_file = op_input.receive(self.input_name_output_file) + except Exception: + pass + + if not output_file or not isinstance(output_file, (Path, str)): + output_file = self.output_file + + self.convert_and_save(seg_image, output_file) + + def convert_and_save(self, seg_image, nii_path): + """ + reads the nifti image and returns a numpy image array + """ + image_writer = SimpleITK.ImageFileWriter() + + image = SimpleITK.GetImageFromArray(seg_image._data) + image.SetSpacing(seg_image.metadata()["pixdim"]) + + if len(seg_image.metadata()["direction"]) == 16: + direction = [] + direction.extend(seg_image.metadata()["direction"][0:3]) + direction.extend(seg_image.metadata()["direction"][4:7]) + direction.extend(seg_image.metadata()["direction"][8:11]) + image.SetDirection(direction) + else: + image.SetDirection(seg_image.metadata()["direction"]) + + image.SetOrigin(seg_image.metadata()["origin"]) + + image_writer.SetFileName(nii_path) + image_writer.Execute(image) + + +def test(): + ... + + +def main(): + test() + + +if __name__ == "__main__": + main() From c2356912adc2953646406fef6e96ba34d6b34595 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 22 Apr 2025 09:52:09 +0000 Subject: [PATCH 006/118] Add nvflare to requirements for ai_spleen_nnunet_seg_app Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt index fede9fba..1d80987c 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt +++ b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt @@ -7,6 +7,7 @@ numpy-stl>=2.12.0 trimesh>=3.8.11 nibabel>=3.2.1 torch>=1.12.0 +nvflare git+https://github.com/SimoneBendazzoli93/dynamic-network-architectures.git git+https://github.com/SimoneBendazzoli93/MONAI.git@dev git+https://github.com/SimoneBendazzoli93/nnUNet.git From 54ef91b2bd540d0fde21b59f2f823c1c834e8685 Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:00:58 -0400 Subject: [PATCH 007/118] duplicate ipps non-loaded (#535) Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- .../operators/dicom_data_loader_operator.py | 123 +++++++++++++----- 1 file changed, 93 insertions(+), 30 deletions(-) diff --git a/monai/deploy/operators/dicom_data_loader_operator.py b/monai/deploy/operators/dicom_data_loader_operator.py index c31e1ef2..bc590cb6 100644 --- a/monai/deploy/operators/dicom_data_loader_operator.py +++ b/monai/deploy/operators/dicom_data_loader_operator.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -12,7 +12,9 @@ import logging import os from pathlib import Path -from typing import List +from typing import Dict, List, Optional, Tuple, cast + +from pydicom.dataset import Dataset from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec from monai.deploy.core.domain.dicom_series import DICOMSeries @@ -163,6 +165,7 @@ def _load_data(self, files: List[str]): study_dict = {} series_dict = {} sop_instances = [] + sop_map: Dict[Tuple[str, str], Dict[Optional[Tuple[float, float, float]], List[Dataset]]] = {} for file in files: try: @@ -171,34 +174,94 @@ def _load_data(self, files: List[str]): self._logger.warn(f"Ignored {file}, reason being: {ex}") for sop_instance in sop_instances: - study_instance_uid = sop_instance[0x0020, 0x000D].value.name # name is the UID as str - - # First need to eliminate the SOP instances whose SOP Class is to be ignored. - if "SOPInstanceUID" not in sop_instance: - self._logger.warn("Instance ignored due to missing SOP instance UID tag") - continue - sop_instance_uid = sop_instance["SOPInstanceUID"].value - if "SOPClassUID" not in sop_instance: - self._logger.warn(f"Instance ignored due to missing SOP Class UID tag, {sop_instance_uid}") - continue - if sop_instance["SOPClassUID"].value in DICOMDataLoaderOperator.SOP_CLASSES_TO_IGNORE: - self._logger.warn(f"Instance ignored for being in the ignored class, {sop_instance_uid}") - continue - - if study_instance_uid not in study_dict: - study = DICOMStudy(study_instance_uid) - self.populate_study_attributes(study, sop_instance) - study_dict[study_instance_uid] = study - - series_instance_uid = sop_instance[0x0020, 0x000E].value.name # name is the UID as str - - if series_instance_uid not in series_dict: - series = DICOMSeries(series_instance_uid) - series_dict[series_instance_uid] = series - self.populate_series_attributes(series, sop_instance) - study_dict[study_instance_uid].add_series(series) - - series_dict[series_instance_uid].add_sop_instance(sop_instance) + try: + study_instance_uid = sop_instance[0x0020, 0x000D].value.name # name is the UID as str + + # First need to eliminate the SOP instances whose SOP Class is to be ignored. + if "SOPInstanceUID" not in sop_instance: + self._logger.warn("Instance ignored due to missing SOP instance UID tag") + continue + sop_instance_uid = sop_instance["SOPInstanceUID"].value + if "SOPClassUID" not in sop_instance: + self._logger.warn(f"Instance ignored due to missing SOP Class UID tag, {sop_instance_uid}") + continue + if sop_instance["SOPClassUID"].value in DICOMDataLoaderOperator.SOP_CLASSES_TO_IGNORE: + self._logger.warn(f"Instance ignored for being in the ignored class, {sop_instance_uid}") + continue + + if study_instance_uid not in study_dict: + study = DICOMStudy(study_instance_uid) + self.populate_study_attributes(study, sop_instance) + study_dict[study_instance_uid] = study + + series_instance_uid = sop_instance[0x0020, 0x000E].value.name # name is the UID as str + + if series_instance_uid not in series_dict: + series = DICOMSeries(series_instance_uid) + series_dict[series_instance_uid] = series + self.populate_series_attributes(series, sop_instance) + study_dict[study_instance_uid].add_series(series) + + # Prepare sop_map entry + series_key = (study_instance_uid, series_instance_uid) + sop_map.setdefault(series_key, {}) + ipp = sop_instance.get("ImagePositionPatient", None) + if ipp is not None: + # Convert IPP to tuple + ipp_tuple = cast(Tuple[float, float, float], tuple(float(v) for v in ipp)) + else: + # Non-image files will be missing IPP; store SOP instance under "None" key, move on to next SOP instance + sop_map[series_key].setdefault(ipp, []).append(sop_instance) + continue + + sop_list = sop_map[series_key].setdefault(ipp_tuple, []) + + if not sop_list: + # First occurrence of this spatial position β€” store the SOP instance + sop_list.append(sop_instance) + else: + # Duplicate spatial location found β€” compare AcquisitionNumbers (if absent, set to -1) + exist = sop_list[0] + exist_acq_num = int(exist.get("AcquisitionNumber", -1)) + curr_acq_num = int(sop_instance.get("AcquisitionNumber", -1)) + if curr_acq_num > exist_acq_num: + # Current SOP instance AcquisitionNumber is greater - replace existing SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; removed SOP instance with lower AcquisitionNumber " + f"({curr_acq_num} < {exist_acq_num})" + ) + sop_list[0] = sop_instance + elif curr_acq_num < exist_acq_num: + # Existing SOP instance AcquisitionNumber is greater - don't store current SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; kept SOP instance with higher AcquisitionNumber " + f"({exist_acq_num} > {curr_acq_num})" + ) + elif curr_acq_num == -1: + # AcquisitionNumber tag is absent for compared SOP instances - don't store current SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; AcquisitionNumber tags are absent" + ) + else: + # AcquisitionNumber tag values are equal for compared SOP instances - don't store current SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; AcquisitionNumber tag values are equal " + f"({exist_acq_num} = {curr_acq_num})" + ) + + except Exception as ex: + self._logger.warn(f"Error parsing SOP Instance: {ex}") + + # Add unique SOPs to series_dict following potential duplication removal + for (_, series_uid), ipp_dict in sop_map.items(): + for _, sop_list in ipp_dict.items(): + for sop_instance in sop_list: + series_dict[series_uid].add_sop_instance(sop_instance) + return list(study_dict.values()) def populate_study_attributes(self, study, sop_instance): From aa93ce971655153a0dab2d7117315fec2f89270a Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Mon, 21 Apr 2025 15:05:10 -0400 Subject: [PATCH 008/118] ModelInfo arg added to DICOMSegWriterOp (#533) Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- .../operators/dicom_seg_writer_operator.py | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/dicom_seg_writer_operator.py b/monai/deploy/operators/dicom_seg_writer_operator.py index 1a39e644..e96490c1 100644 --- a/monai/deploy/operators/dicom_seg_writer_operator.py +++ b/monai/deploy/operators/dicom_seg_writer_operator.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -27,6 +27,7 @@ ImplicitVRLittleEndian, _ = optional_import("pydicom.uid", name="ImplicitVRLittleEndian") Dataset, _ = optional_import("pydicom.dataset", name="Dataset") FileDataset, _ = optional_import("pydicom.dataset", name="FileDataset") +PyDicomSequence, _ = optional_import("pydicom.sequence", name="Sequence") sitk, _ = optional_import("SimpleITK") codes, _ = optional_import("pydicom.sr.codedict", name="codes") if TYPE_CHECKING: @@ -39,6 +40,7 @@ from monai.deploy.core import ConditionType, Fragment, Image, Operator, OperatorSpec from monai.deploy.core.domain.dicom_series import DICOMSeries from monai.deploy.core.domain.dicom_series_selection import StudySelectedSeries +from monai.deploy.operators.dicom_utils import ModelInfo class SegmentDescription: @@ -183,6 +185,7 @@ def __init__( *args, segment_descriptions: List[SegmentDescription], output_folder: Path, + model_info: Optional[ModelInfo] = None, custom_tags: Optional[Dict[str, str]] = None, omit_empty_frames: bool = True, **kwargs, @@ -206,6 +209,7 @@ def __init__( Object encapsulating the description of each segment present in the segmentation. output_folder: Folder for file output, overridden by named input on compute. Defaults to current working dir's child folder, output. + model_info (ModelInfo, optional): Object encapsulating model creator, name, version and UID. custom_tags: Optional[Dict[str, str]], optional Dictionary for setting custom DICOM tags using Keywords and str values only omit_empty_frames: bool, optional @@ -217,6 +221,7 @@ def __init__( self._custom_tags = custom_tags self._omit_empty_frames = omit_empty_frames self.output_folder = output_folder if output_folder else DICOMSegmentationWriterOperator.DEFAULT_OUTPUT_FOLDER + self.model_info = model_info if model_info else ModelInfo() self.input_name_seg = "seg_image" self.input_name_series = "study_selected_series_list" @@ -356,6 +361,41 @@ def create_dicom_seg(self, image: np.ndarray, dicom_series: DICOMSeries, output_ # Best effort for now. logging.warning(f"Tag {k} was not written, due to {ex}") + # write model info + # code copied from write_common_modules method in monai.deploy.operators.dicom_utils + + # Contributing Equipment Sequence + # The Creator shall describe each algorithm that was used to generate the results in the + # Contributing Equipment Sequence (0018,A001). Multiple items may be included. The Creator + # shall encode the following details in the Contributing Equipment Sequence: + # β€’ Purpose of Reference Code Sequence (0040,A170) shall be (Newcode1, 99IHE, 1630 "Processing Algorithm") + # β€’ Manufacturer (0008,0070) + # β€’ Manufacturer’s Model Name (0008,1090) + # β€’ Software Versions (0018,1020) + # β€’ Device UID (0018,1002) + + if self.model_info: + # First create the Purpose of Reference Code Sequence + seq_purpose_of_reference_code = PyDicomSequence() + seg_purpose_of_reference_code = Dataset() + seg_purpose_of_reference_code.CodeValue = "Newcode1" + seg_purpose_of_reference_code.CodingSchemeDesignator = "99IHE" + seg_purpose_of_reference_code.CodeMeaning = '"Processing Algorithm' + seq_purpose_of_reference_code.append(seg_purpose_of_reference_code) + + seq_contributing_equipment = PyDicomSequence() + seg_contributing_equipment = Dataset() + seg_contributing_equipment.PurposeOfReferenceCodeSequence = seq_purpose_of_reference_code + # '(121014, DCM, β€œDevice Observer Manufacturer")' + seg_contributing_equipment.Manufacturer = self.model_info.creator + # u'(121015, DCM, β€œDevice Observer Model Name")' + seg_contributing_equipment.ManufacturerModelName = self.model_info.name + # u'(111003, DCM, β€œAlgorithm Version")' + seg_contributing_equipment.SoftwareVersions = self.model_info.version + seg_contributing_equipment.DeviceUID = self.model_info.uid # u'(121012, DCM, β€œDevice Observer UID")' + seq_contributing_equipment.append(seg_contributing_equipment) + seg.ContributingEquipmentSequence = seq_contributing_equipment + seg.save_as(output_path) try: From b4b87dcc82d344bd31859673156f917614fb4287 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Mon, 21 Apr 2025 16:46:46 -0700 Subject: [PATCH 009/118] Support remote inference on Triton Inference Server with ease of use (#536) * Adding requirements for Triton client impl Signed-off-by: M Q * Updated/added core classes to support Triton remote inference, and added a new example Signed-off-by: M Q * GitHub build server complains about conflicts for tritonclient[]>=2.54 for no specific reasons Signed-off-by: M Q * Fix flake8 complaints Signed-off-by: M Q * Fix pytype complaints by simplifying code Signed-off-by: M Q * Remove now unused imports Signed-off-by: M Q * Addressed all pytype and mypy complaint in new code in the dev env Signed-off-by: M Q * No complaint in local dev env, but on GitHub Signed-off-by: M Q * Add model confgi.pbtxt and example env settings Signed-off-by: M Q * Doc update Signed-off-by: M Q * update license dates Signed-off-by: M Q * Updated the copyright year of new files Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/source/getting_started/examples.md | 1 + examples/apps/ai_remote_infer_app/__main__.py | 15 + examples/apps/ai_remote_infer_app/app.py | 143 +++++++++ .../env_settings_example.sh | 17 ++ .../models_client_side/spleen_ct/config.pbtxt | 44 +++ .../spleen_seg_operator.py | 165 +++++++++++ monai/deploy/core/app_context.py | 22 +- monai/deploy/core/arg_parser.py | 10 +- monai/deploy/core/models/__init__.py | 4 +- monai/deploy/core/models/model.py | 4 +- monai/deploy/core/models/named_model.py | 22 +- monai/deploy/core/models/triton_model.py | 273 ++++++++++++++---- monai/deploy/core/runtime_env.py | 14 +- requirements.txt | 1 + 14 files changed, 666 insertions(+), 69 deletions(-) create mode 100644 examples/apps/ai_remote_infer_app/__main__.py create mode 100644 examples/apps/ai_remote_infer_app/app.py create mode 100755 examples/apps/ai_remote_infer_app/env_settings_example.sh create mode 100644 examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt create mode 100644 examples/apps/ai_remote_infer_app/spleen_seg_operator.py diff --git a/docs/source/getting_started/examples.md b/docs/source/getting_started/examples.md index 521a4e52..55134a6c 100644 --- a/docs/source/getting_started/examples.md +++ b/docs/source/getting_started/examples.md @@ -14,3 +14,4 @@ - dicom_series_to_image_app - breast_density_classifer_app - cchmc_ped_abd_ct_seg_app +- ai_remote_infer_app diff --git a/examples/apps/ai_remote_infer_app/__main__.py b/examples/apps/ai_remote_infer_app/__main__.py new file mode 100644 index 00000000..b7039967 --- /dev/null +++ b/examples/apps/ai_remote_infer_app/__main__.py @@ -0,0 +1,15 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from app import AIRemoteInferSpleenSegApp + +if __name__ == "__main__": + AIRemoteInferSpleenSegApp().run() diff --git a/examples/apps/ai_remote_infer_app/app.py b/examples/apps/ai_remote_infer_app/app.py new file mode 100644 index 00000000..facd1dc2 --- /dev/null +++ b/examples/apps/ai_remote_infer_app/app.py @@ -0,0 +1,143 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import logging +from pathlib import Path + +from pydicom.sr.codedict import codes # Required for setting SegmentDescription attributes. +from spleen_seg_operator import SpleenSegOperator + +from monai.deploy.conditions import CountCondition +from monai.deploy.core import Application +from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator +from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription +from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator +from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator +from monai.deploy.operators.stl_conversion_operator import STLConversionOperator + + +class AIRemoteInferSpleenSegApp(Application): + def __init__(self, *args, **kwargs): + """Creates an application instance.""" + + super().__init__(*args, **kwargs) + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + def run(self, *args, **kwargs): + # This method calls the base class to run. Can be omitted if simply calling through. + self._logger.info(f"Begin {self.run.__name__}") + super().run(*args, **kwargs) + self._logger.info(f"End {self.run.__name__}") + + def compose(self): + """Creates the app specific operators and chain them up in the processing DAG.""" + + # Use Commandline options over environment variables to init context. + app_context = Application.init_app_context(self.argv) + self._logger.debug(f"Begin {self.compose.__name__}") + app_input_path = Path(app_context.input_path) + app_output_path = Path(app_context.output_path) + model_path = Path(app_context.model_path) + + self._logger.info(f"App input and output path: {app_input_path}, {app_output_path}") + + # instantiates the SDK built-in operator(s). + study_loader_op = DICOMDataLoaderOperator( + self, CountCondition(self, 1), input_folder=app_input_path, name="dcm_loader_op" + ) + series_selector_op = DICOMSeriesSelectorOperator(self, rules=Sample_Rules_Text, name="series_selector_op") + series_to_vol_op = DICOMSeriesToVolumeOperator(self, name="series_to_vol_op") + + # Model specific inference operator, supporting MONAI transforms. + spleen_seg_op = SpleenSegOperator( + self, app_context=app_context, model_name="spleen_ct", model_path=model_path, name="seg_op" + ) + + # Create DICOM Seg writer providing the required segment description for each segment with + # the actual algorithm and the pertinent organ/tissue. + # The segment_label, algorithm_name, and algorithm_version are limited to 64 chars. + # https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html + # User can Look up SNOMED CT codes at, e.g. + # https://bioportal.bioontology.org/ontologies/SNOMEDCT + + _algorithm_name = "3D segmentation of the Spleen from a CT series" + _algorithm_family = codes.DCM.ArtificialIntelligence + _algorithm_version = "0.1.0" + + segment_descriptions = [ + SegmentDescription( + segment_label="Spleen", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Spleen, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + ] + + custom_tags = {"SeriesDescription": "AI generated Seg, not for clinical use."} + + dicom_seg_writer = DICOMSegmentationWriterOperator( + self, + segment_descriptions=segment_descriptions, + custom_tags=custom_tags, + output_folder=app_output_path, + name="dcm_seg_writer_op", + ) + + # Create the processing pipeline, by specifying the source and destination operators, and + # ensuring the output from the former matches the input of the latter, in both name and type. + self.add_flow(study_loader_op, series_selector_op, {("dicom_study_list", "dicom_study_list")}) + self.add_flow( + series_selector_op, series_to_vol_op, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(series_to_vol_op, spleen_seg_op, {("image", "image")}) + + # Note below the dicom_seg_writer requires two inputs, each coming from a source operator. + self.add_flow( + series_selector_op, dicom_seg_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(spleen_seg_op, dicom_seg_writer, {("seg_image", "seg_image")}) + + # Create the surface mesh STL conversion operator and add it to the app execution flow, if needed, by + # uncommenting the following couple lines. + stl_conversion_op = STLConversionOperator( + self, output_file=app_output_path.joinpath("stl/spleen.stl"), name="stl_conversion_op" + ) + self.add_flow(spleen_seg_op, stl_conversion_op, {("pred", "image")}) + + self._logger.debug(f"End {self.compose.__name__}") + + +# This is a sample series selection rule in JSON, simply selecting CT series. +# If the study has more than 1 CT series, then all of them will be selected. +# Please see more detail in DICOMSeriesSelectorOperator. +# For list of string values, e.g. "ImageType": ["PRIMARY", "ORIGINAL"], it is a match if all elements +# are all in the multi-value attribute of the DICOM series. + +Sample_Rules_Text = """ +{ + "selections": [ + { + "name": "CT Series", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "SeriesDescription": "(.*?)", + "ImageType": ["PRIMARY", "ORIGINAL"] + } + } + ] +} +""" + +if __name__ == "__main__": + # Creates the app and test it standalone. + AIRemoteInferSpleenSegApp().run() diff --git a/examples/apps/ai_remote_infer_app/env_settings_example.sh b/examples/apps/ai_remote_infer_app/env_settings_example.sh new file mode 100755 index 00000000..4581ce1b --- /dev/null +++ b/examples/apps/ai_remote_infer_app/env_settings_example.sh @@ -0,0 +1,17 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#!/bin/bash +export HOLOSCAN_INPUT_PATH="inputs/spleen_ct_tcia" +export HOLOSCAN_MODEL_PATH="examples/apps/ai_remote_infer_app/models_client_side" +export HOLOSCAN_OUTPUT_PATH="output_spleen" +export HOLOSCAN_LOG_LEVEL=DEBUG # TRACE can be used for verbose low-level logging +export TRITON_SERVER_NETLOC="localhost:8000" # Triton server network location, host:port diff --git a/examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt b/examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt new file mode 100644 index 00000000..6b5ecaeb --- /dev/null +++ b/examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt @@ -0,0 +1,44 @@ +platform: "pytorch_libtorch" + +max_batch_size: 16 # The maximum batch size. 0 for no batching with full shape in dims + +default_model_filename: "model_spleen_ct_segmentation_v1.ts" # The name of the TorchScript model file + +input [ + { + name: "INPUT_0" # The name of the input tensor (or should match the input tensor name in your model if used) + data_type: TYPE_FP32 # Data type is FP32 + dims: [ 1, 96, 96, 96 ] # Input dimensions: [channels, width, height, depth], to be stacked as a batch + } +] + +output [ + { + name: "OUTPUT_0" # The name of the output tensor (match this with your TorchScript model's output name) + data_type: TYPE_FP32 # Output is FP32 + dims: [ 2, 96, 96, 96 ] # Output dimensions: [channels, width, height, depth], stacked to match input batch size + } +] + +version_policy: { latest: { num_versions: 1}} # Only serve the latest version, which is the default + +instance_group [ + { + kind: KIND_GPU # Specify the hardware type (GPU in this case) + count: 1 # Number of instances created for each GPU listed in 'gpus' (adjust based on your resources) + } +] + +dynamic_batching { + preferred_batch_size: [ 4, 8, 16 ] # Preferred batch size(s) for dynamic batching. Matching the max_batch_size for sync calls. + max_queue_delay_microseconds: 1000 # Max delay before processing the batch. +} + +# The initial calls to a loaded TorchScript model take extremely long. +# Due to this longer model warmup issue, Triton allows execution of models without these optimizations. +parameters: { + key: "DISABLE_OPTIMIZED_EXECUTION" + value: { + string_value: "true" + } +} diff --git a/examples/apps/ai_remote_infer_app/spleen_seg_operator.py b/examples/apps/ai_remote_infer_app/spleen_seg_operator.py new file mode 100644 index 00000000..814feebb --- /dev/null +++ b/examples/apps/ai_remote_infer_app/spleen_seg_operator.py @@ -0,0 +1,165 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path + +from numpy import uint8 + +from monai.deploy.core import AppContext, ConditionType, Fragment, Operator, OperatorSpec +from monai.deploy.operators.monai_seg_inference_operator import InfererType, InMemImageReader, MonaiSegInferenceOperator +from monai.transforms import ( + Activationsd, + AsDiscreted, + Compose, + EnsureChannelFirstd, + EnsureTyped, + Invertd, + LoadImaged, + Orientationd, + SaveImaged, + ScaleIntensityRanged, + Spacingd, +) + + +class SpleenSegOperator(Operator): + """Performs Spleen segmentation with a 3D image converted from a DICOM CT series.""" + + DEFAULT_OUTPUT_FOLDER = Path.cwd() / "output/saved_images_folder" + + def __init__( + self, + fragment: Fragment, + *args, + app_context: AppContext, + model_path: Path, + model_name: str, + output_folder: Path = DEFAULT_OUTPUT_FOLDER, + **kwargs, + ): + + self.logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + self._input_dataset_key = "image" + self._pred_dataset_key = "pred" + + self.model_path = model_path + self.model_name = model_name + self.output_folder = output_folder + self.output_folder.mkdir(parents=True, exist_ok=True) + self.app_context = app_context + self.input_name_image = "image" + self.output_name_seg = "seg_image" + self.output_name_saved_images_folder = "saved_images_folder" + + # The base class has an attribute called fragment to hold the reference to the fragment object + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + spec.input(self.input_name_image) + spec.output(self.output_name_seg) + spec.output(self.output_name_saved_images_folder).condition( + ConditionType.NONE + ) # Output not requiring a receiver + + def compute(self, op_input, op_output, context): + input_image = op_input.receive(self.input_name_image) + if not input_image: + raise ValueError("Input image is not found.") + + # This operator gets an in-memory Image object, so a specialized ImageReader is needed. + _reader = InMemImageReader(input_image) + + pre_transforms = self.pre_process(_reader, str(self.output_folder)) + post_transforms = self.post_process(pre_transforms, str(self.output_folder)) + + # Delegates inference and saving output to the built-in operator. + infer_operator = MonaiSegInferenceOperator( + self.fragment, + roi_size=( + 96, + 96, + 96, + ), + pre_transforms=pre_transforms, + post_transforms=post_transforms, + overlap=0.6, + app_context=self.app_context, + model_name=self.model_name, + inferer=InfererType.SLIDING_WINDOW, + sw_batch_size=4, + model_path=self.model_path, + name="monai_seg_remote_inference_op", + ) + + # Setting the keys used in the dictionary based transforms may change. + infer_operator.input_dataset_key = self._input_dataset_key + infer_operator.pred_dataset_key = self._pred_dataset_key + + # Now emit data to the output ports of this operator + op_output.emit(infer_operator.compute_impl(input_image, context), self.output_name_seg) + op_output.emit(self.output_folder, self.output_name_saved_images_folder) + + def pre_process(self, img_reader, out_dir: str = "./input_images") -> Compose: + """Composes transforms for preprocessing input before predicting on a model.""" + + Path(out_dir).mkdir(parents=True, exist_ok=True) + my_key = self._input_dataset_key + + return Compose( + [ + LoadImaged(keys=my_key, reader=img_reader), + EnsureChannelFirstd(keys=my_key), + # The SaveImaged transform can be commented out to save 5 seconds. + # Uncompress NIfTI file, nii, is used favoring speed over size, but can be changed to nii.gz + SaveImaged( + keys=my_key, + output_dir=out_dir, + output_postfix="", + resample=False, + output_ext=".nii", + ), + Orientationd(keys=my_key, axcodes="RAS"), + Spacingd(keys=my_key, pixdim=[1.5, 1.5, 2.9], mode=["bilinear"]), + ScaleIntensityRanged(keys=my_key, a_min=-57, a_max=164, b_min=0.0, b_max=1.0, clip=True), + EnsureTyped(keys=my_key), + ] + ) + + def post_process(self, pre_transforms: Compose, out_dir: str = "./prediction_output") -> Compose: + """Composes transforms for postprocessing the prediction results.""" + + Path(out_dir).mkdir(parents=True, exist_ok=True) + pred_key = self._pred_dataset_key + + return Compose( + [ + Activationsd(keys=pred_key, softmax=True), + Invertd( + keys=pred_key, + transform=pre_transforms, + orig_keys=self._input_dataset_key, + nearest_interp=False, + to_tensor=True, + ), + AsDiscreted(keys=pred_key, argmax=True), + # The SaveImaged transform can be commented out to save 5 seconds. + # Uncompress NIfTI file, nii, is used favoring speed over size, but can be changed to nii.gz + SaveImaged( + keys=pred_key, + output_dir=out_dir, + output_postfix="seg", + output_dtype=uint8, + resample=False, + output_ext=".nii", + ), + ] + ) diff --git a/monai/deploy/core/app_context.py b/monai/deploy/core/app_context.py index fb6a7c24..12a4d879 100644 --- a/monai/deploy/core/app_context.py +++ b/monai/deploy/core/app_context.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -14,6 +14,7 @@ from typing import Dict, List, Optional from .arg_parser import parse_args, set_up_logging +from .models import TritonModel from .models.factory import ModelFactory from .models.model import Model from .runtime_env import RuntimeEnv @@ -45,6 +46,14 @@ def update(self, args: Dict[str, str]): # If model has not been loaded, or the model path has changed, get the path and load model(s) old_model_path = self.model_path self.model_path = args.get("model") or self.args.get("model") or self.runtime_env.model + + # This parameter must be set if models are hosted on the Triton Inference Server. + self.triton_server_netloc = ( + args.get("triton_server_netloc") + or self.args.get("triton_server_netloc") + or self.runtime_env.triton_server_netloc + ) + if old_model_path != self.model_path: self._model_loaded = False # path changed, reset the flag to re-load @@ -52,10 +61,19 @@ def update(self, args: Dict[str, str]): self.models: Optional[Model] = ModelFactory.create(abspath(self.model_path)) self._model_loaded = True + # TritonModel instances are just clients and must be connected to the Triton Inference Server + # at the provided network location. In-process hosting of Triton Inference Server is not supported. + if self.triton_server_netloc and self.models: + for _, model in self.models.items(): + if isinstance(model, TritonModel): + model.connect(self.triton_server_netloc, verbose=args.get("log_level", "INFO") == "DEBUG") + # Health check of the Triton Inference Server can be deferred. + logging.info(f"Model {model.name} set to connect to Triton server at {self.triton_server_netloc}") + def __repr__(self): return ( f"AppContext(input_path={self.input_path}, output_path={self.output_path}, " - f"model_path={self.model_path}, workdir={self.workdir})" + f"model_path={self.model_path}, workdir={self.workdir}), triton_server_netloc={self.triton_server_netloc}" ) diff --git a/monai/deploy/core/arg_parser.py b/monai/deploy/core/arg_parser.py index 97ecb127..fdab7dc0 100644 --- a/monai/deploy/core/arg_parser.py +++ b/monai/deploy/core/arg_parser.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -64,7 +64,15 @@ def parse_args(argv: Optional[List[str]] = None) -> argparse.Namespace: type=argparse_types.valid_dir_path, help="Path to workspace folder (default: A temporary '.monai_workdir' folder in the current folder)", ) + parser.add_argument( + "--triton-server-netloc", + "-t", + type=str, + default=None, + help="Triton server netloc, :. (default: None)", + ) + # triton_server_netloc args = parser.parse_args(argv[1:]) args.argv = argv # save argv for later use in runpy diff --git a/monai/deploy/core/models/__init__.py b/monai/deploy/core/models/__init__.py index d348af7f..aed4f7be 100644 --- a/monai/deploy/core/models/__init__.py +++ b/monai/deploy/core/models/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -23,6 +23,6 @@ from .model import Model from .named_model import NamedModel from .torch_model import TorchScriptModel -from .triton_model import TritonModel +from .triton_model import TritonModel, TritonRemoteModel Model.register([TritonModel, NamedModel, TorchScriptModel, Model]) diff --git a/monai/deploy/core/models/model.py b/monai/deploy/core/models/model.py index 218878dd..d69ebca5 100644 --- a/monai/deploy/core/models/model.py +++ b/monai/deploy/core/models/model.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -81,7 +81,7 @@ def __init__(self, path: str, name: str = ""): else: self._name = Path(path).stem - self._predictor = None + self._predictor: Any = None # Add self to the list of models self._items: Dict[str, Model] = {self.name: self} diff --git a/monai/deploy/core/models/named_model.py b/monai/deploy/core/models/named_model.py index 608d56af..be3f09a5 100644 --- a/monai/deploy/core/models/named_model.py +++ b/monai/deploy/core/models/named_model.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -12,9 +12,7 @@ import logging from pathlib import Path -from monai.deploy.core.models import ModelFactory - -from .model import Model +from monai.deploy.core.models import Model, ModelFactory logger = logging.getLogger(__name__) @@ -58,8 +56,12 @@ def __init__(self, path: str, name: str = ""): for model_folder in model_path.iterdir(): if model_folder.is_dir(): - # Pick one file (assume that only one file exists in the folder) + # Pick one file (assume that only one file exists in the folder), except for Triton model model_file = next(model_folder.iterdir()) + # If Triton model, then use the current folder + if (model_folder / "config.pbtxt").exists(): + model_file = model_folder + if model_file: # Recursive call to identify the model type model = ModelFactory.create(str(model_file), model_folder.name) @@ -81,10 +83,14 @@ def accept(cls, path: str): for model_folder in model_path.iterdir(): # 3) Each model folder must contain only one model definition file or folder. - if sum(1 for _ in model_folder.iterdir()) != 1: + # This would not be confused with Trion model repository which would have + # folders for named models which in turn contain at least one version folder + # and the config.pbtxt file. + # However, with detecting config.pbtxt, Triton model repository can also be accepted. + if sum(1 for _ in model_folder.iterdir()) != 1 and not (model_folder / "config.pbtxt").exists(): logger.warning( - f"Model repository {model_folder!r} contains more than one model definition file or folder " - "so not treated as NamedModel." + f"Model repository {model_folder!r} contains more than one model definition file or folder, " + "and is not a Triton model repository, so not treated as NamedModel." ) return False, None diff --git a/monai/deploy/core/models/triton_model.py b/monai/deploy/core/models/triton_model.py index f406877f..cb18f936 100644 --- a/monai/deploy/core/models/triton_model.py +++ b/monai/deploy/core/models/triton_model.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -9,10 +9,131 @@ # See the License for the specific language governing permissions and # limitations under the License. +import logging from pathlib import Path +from typing import Tuple + +import tritonclient.http as httpclient +from google.protobuf import text_format +from tritonclient.grpc.model_config_pb2 import DataType, ModelConfig + +from monai.deploy.utils.importutil import optional_import from .model import Model +torch, _ = optional_import("torch") + + +def parse_triton_config_pbtxt(pbtxt_path) -> ModelConfig: + """Parse a Triton model config.pbtxt file + + Args: + config_path: Path to the config.pbtxt file + + Returns: + ModelConfig object containing parsed configuration + + Raises: + ValueError: If config file is invalid or missing required fields + FileNotFoundError: If config file doesn't exist + """ + + if not pbtxt_path.exists(): + raise FileNotFoundError(f"Config file not found: {pbtxt_path}") + try: + # Read the config.pbtxt content + with open(pbtxt_path, "r") as f: + config_text = f.read() + # Parse using protobuf text_format + model_config = ModelConfig() + text_format.Parse(config_text, model_config) + return model_config + + except Exception as e: + raise ValueError(f"Failed to parse config file {pbtxt_path}") from e + + +class TritonRemoteModel: + """A remote model that is hosted on a Triton Inference Server. + + Args: + model_name (str): The name of the model. + netloc (str): The network location of the Triton Inference Server. + model_config (ModelConfig): The model config. + headers (dict): The headers to send to the Triton Inference Server. + """ + + def __init__(self, model_name, netloc, model_config, headers=None, **kwargs): + self._headers = headers + self._request_compression_algorithm = None + self._response_compression_algorithm = None + self._model_name = model_name + self._model_version = None + self._model_config = model_config + self._request_compression_algorithm = None + self._response_compression_algorithm = None + self._count = 0 + + try: + self._triton_client = httpclient.InferenceServerClient(url=netloc, verbose=kwargs.get("verbose", False)) + logging.info(f"Created triton client: {self._triton_client}") + except Exception as e: + logging.error("channel creation failed: " + str(e)) + raise + + def __call__(self, data, **kwds): + + self._count += 1 + logging.info(f"{self.__class__.__name__}.__call__: {self._model_name} count: {self._count}") + + inputs = [] + outputs = [] + + # For now support only one input and one output + input_name = self._model_config.input[0].name + input_type = str.split(DataType.Name(self._model_config.input[0].data_type), "_")[1] # remove the prefix + input_shape = list(self._model_config.input[0].dims) + data_shape = list(data.shape) + logging.info(f"Model config input data shape: {input_shape}") + logging.info(f"Actual input data shape: {data_shape}") + + # The server side will handle the batching, and with dynamic batching + # the model config does not have the batch size in the input dims. + logging.info(f"Effective input_name: {input_name}, input_type: {input_type}, input_shape: {data_shape}") + + inputs.append(httpclient.InferInput(input_name, data_shape, input_type)) + + # Move to tensor to CPU + input0_data_np = data.detach().cpu().numpy() + logging.debug(f"Input data shape: {input0_data_np.shape}") + + # Initialize the data + inputs[0].set_data_from_numpy(input0_data_np, binary_data=False) + + output_name = self._model_config.output[0].name + outputs.append(httpclient.InferRequestedOutput(output_name, binary_data=True)) + + query_params = {f"{self._model_name}_count": self._count} + results = self._triton_client.infer( + self._model_name, + inputs, + outputs=outputs, + query_params=query_params, + headers=self._headers, + request_compression_algorithm=self._request_compression_algorithm, + response_compression_algorithm=self._response_compression_algorithm, + ) + + logging.info(f"Got results{results.get_response()}") + output0_data = results.as_numpy(output_name) + logging.debug(f"as_numpy output0_data.shape: {output0_data.shape}") + logging.debug(f"as_numpy output0_data.dtype: {output0_data.dtype}") + + # Convert numpy array to torch tensor as expected by the anticipated clients, + # e.g. monai cliding window inference + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + return torch.as_tensor(output0_data).to(device) # from_numpy is fine too. + class TritonModel(Model): """Represents Triton models in the model repository. @@ -45,19 +166,23 @@ class TritonModel(Model): 1) The path should be a folder path. - 2) The directory should contain only sub folders (model folders). - - 3) Each model folder must contain a config.pbtxt file. + 2) The model folder must contain a config.pbtxt file. a. A config.pbtxt file may contain model name. In that case, model's name should match with the folder name. - 4) Each model folder must include one or more folders having a positive integer value as name. + 3) The model folder may include one or more folders having a positive integer value as version. + For the server side, the following is required, however, not required for the client side + which parses only the model config.pbtxt file. - a. Each such folder must contain a folder or file whose file name (without extension) is 'model'. + a. Each such folder must contain a folder or file whose file name (without extension) is 'model', + unless an attribute is used to specify model file name. - It currently doesn't identify which model version would be selected. + If no version policy is specified, the latest version of a model is loaded and served. Model items identified would have a folder path, not a specific model file path. + + This class encapuslates a single triton model. As such, the model repository folder + will first be parsed by the named_model class, and then each sub folder by this class. """ model_type: str = "triton" @@ -73,50 +198,96 @@ def __init__(self, path: str, name: str = ""): """ super().__init__(path, name) - # Clear existing model item and fill model items - self._items.clear() - model_path: Path = Path(path) + self._model_path: Path = Path(path) + self._name = self._model_path.stem + self._model_config = parse_triton_config_pbtxt(self._model_path / "config.pbtxt") + # The model name in the config.pbtxt, if present, must match the model folder name. + if self._model_config.name and self._model_config.name.casefold() != self._name.casefold(): + raise ValueError( + f"Model name in config.pbtxt ({self._model_config.name}) does not match the folder name ({self._name})." + ) + + self._netloc: str = "" + logging.info(f"Created Triton model: {self._name}") + + def connect(self, netloc: str, **kwargs): + """Connect to the Triton Inference Server at the network location. + + Args: + netloc (str): The network location of the Triton Inference Server. + """ + + if not netloc: + raise ValueError("Network location is required to connect to the Triton Inference Server.") + + if self._netloc and not self._netloc.casefold() == netloc.casefold(): + logging.warning(f"Reconnecting to a different Triton Inference Server at {netloc} from {self._netloc}.") - for model_folder in model_path.iterdir(): - if model_folder.is_dir(): - self._items[model_folder.name] = Model(str(model_folder), model_folder.name) + self._predictor = TritonRemoteModel(self._name, netloc, self._model_config, **kwargs) + self._netloc = netloc + + return self._predictor + + @property + def model_config(self): + return self._model_config + + @property + def net_loc(self): + """Get the network location of the Triton Inference Server, i.e. ":". + + Returns: + str: The network location of the Triton Inference Server. + """ + + return self._netloc + + @net_loc.setter + def net_loc(self, value: str): + """Set the network location of the Triton Inference Server, and causes re-connect.""" + if not value: + raise ValueError("Network location cannot be empty.") + self._netloc = value + # Reconnect to the Triton Inference Server at the new network location. + self.connect(value) + + @property + def predictor(self): + if not self._predictor: + raise ValueError("Model is not connected to the Triton Inference Server.") + return self._predictor + + @predictor.setter + def predictor(self, predictor: TritonRemoteModel): + if not isinstance(predictor, TritonRemoteModel): + raise ValueError("Predictor must be an instance of TritonRemoteModel.") + self._predictor = predictor @classmethod - def accept(cls, path: str): - model_path: Path = Path(path) - - # 1) The path should be a folder path. - if not model_path.is_dir(): - return False, None - - # 2) The directory should contain only sub folders (model folders). - if not all((p.is_dir() for p in model_path.iterdir())): - return False, None - - is_triton_model_repository = True - for model_folder in model_path.iterdir(): - # 3) Each model folder must contain a config.pbtxt file. - if not (model_folder / "config.pbtxt").exists(): - return False, None - # TODO(gigony): We do not check if the config.pbtxt file contains model name for now (3-1). - # We assume that the model name is the same as the folder name. - - # 4) Each model folder must include one or more folders having a positive integer value as name. - found_model = False - for version_folder in model_folder.iterdir(): - version_folder_name = version_folder.name - if version_folder.is_dir() and version_folder_name.isnumeric() and int(version_folder_name) > 0: - # 4-1) Each such folder must contain a folder or file whose file name (without extension) - # is 'model'. - # TODO(gigony): check config.pbtxt file to see actual model file if specified. - if any(version_folder.glob("model.*")): - found_model = True - else: - return False, None - if not found_model: - is_triton_model_repository = False - break - if is_triton_model_repository: - return True, cls.model_type - - return False, None + def accept(cls, path: str) -> Tuple[bool, str]: + model_folder: Path = Path(path) + + # The path should be a folder path, for an individual model, and must have the config.pbtxt file. + if not model_folder.is_dir() or not (model_folder / "config.pbtxt").exists(): + return False, "" + + # Delay parsing the config.pbtxt protobuf for model name, input and output information etc. + # Per convention, the model name is the same as the folder name, and the name in the config file, + # if specified, must match the folder name. + # For the server, each model folder must include one or more folders having a positive integer value as name, + # and each such folder must contain a folder or file for the model. + # At the client side, though there is no need to have the actual model file. + # So the following is not necessary at all, just checking for logging purpose. + found_model = False + for version_folder in model_folder.iterdir(): + version_folder_name = version_folder.name + if version_folder.is_dir() and version_folder_name.isnumeric() and int(version_folder_name) > 0: + # Each such folder must contain a folder or file whose file name (without extension) + # is 'model'. The config.pbtxt can specify the actual model file with an attribute. + if any(version_folder.glob("*")): + found_model = True + logging.info(f"Model {model_folder.name} version {version_folder_name} found in client workspace.") + if not found_model: + logging.info(f"Model {model_folder.name} only has config.pbtxt in client workspace.") + + return True, cls.model_type diff --git a/monai/deploy/core/runtime_env.py b/monai/deploy/core/runtime_env.py index f169e1c7..76a08cdf 100644 --- a/monai/deploy/core/runtime_env.py +++ b/monai/deploy/core/runtime_env.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -17,8 +17,10 @@ class RuntimeEnv(ABC): """Class responsible for managing run time settings. - The expected environment variables are the keys in the defaults dictionary, - and they can be set to override the defaults. + The expected variables can be set via the host env vars which override the + default values in the internal dictionary. + Selective overriding of variables can be done by passing a dictionary to the constructor, + which should have the same structure as the internal dictionary. """ ENV_DEFAULT: Dict[str, Tuple[str, ...]] = { @@ -26,15 +28,21 @@ class RuntimeEnv(ABC): "output": ("HOLOSCAN_OUTPUT_PATH", "output"), "model": ("HOLOSCAN_MODEL_PATH", "models"), "workdir": ("HOLOSCAN_WORKDIR", ""), + "triton_server_netloc": ("TRITON_SERVER_NETLOC", ""), } + # Place holders as the values will be set in the __init__ method input: str = "" output: str = "" model: str = "" workdir: str = "" + triton_server_netloc: str = "" # Triton server host:port def __init__(self, defaults: Optional[Dict[str, Tuple[str, ...]]] = None): if defaults is None: defaults = self.ENV_DEFAULT + else: + defaults = {**self.ENV_DEFAULT, **defaults} + for key, (env, default) in defaults.items(): self.__dict__[key] = os.environ.get(env, default) diff --git a/requirements.txt b/requirements.txt index 73a56030..99bbb796 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ holoscan~=2.0 numpy>=1.21.6 colorama>=0.4.1 +tritonclient[all] typeguard>=3.0.0 From 474ad6e368bedf84a3223c460fc808eab31c2ab8 Mon Sep 17 00:00:00 2001 From: WillButAgain <69763508+WillButAgain@users.noreply.github.com> Date: Mon, 21 Apr 2025 20:55:31 -0400 Subject: [PATCH 010/118] Fix DICOMSeriesToVolumeOperator casting bug (#529) * fix casting, add check Signed-off-by: will tepe * code review changes Signed-off-by: will tepe * fix fir slope as well --------- Signed-off-by: will tepe Co-authored-by: will tepe Signed-off-by: Simone Bendazzoli --- .../dicom_series_to_volume_operator.py | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/monai/deploy/operators/dicom_series_to_volume_operator.py b/monai/deploy/operators/dicom_series_to_volume_operator.py index 38b4beaf..d589354f 100644 --- a/monai/deploy/operators/dicom_series_to_volume_operator.py +++ b/monai/deploy/operators/dicom_series_to_volume_operator.py @@ -112,7 +112,8 @@ def generate_voxel_data(self, series): # with the NumPy array returned from the ITK GetArrayViewFromImage on the image # loaded from the same DICOM series. vol_data = np.stack([s.get_pixel_array() for s in slices], axis=0) - vol_data = vol_data.astype(np.int16) + if slices[0][0x0028,0x0103].value == 1: + vol_data = vol_data.astype(np.uint16) # For now we support monochrome image only, for which DICOM Photometric Interpretation # (0028,0004) has defined terms, MONOCHROME1 and MONOCHROME2, with the former being: @@ -154,11 +155,29 @@ def generate_voxel_data(self, series): except KeyError: slope = 1 + + # check if vol_data, intercept, and slope can be cast to uint16 without data loss + if np.can_cast(vol_data, np.uint16, casting='safe') and np.can_cast(intercept, np.uint16, casting='safe') and np.can_cast(slope, np.uint16, casting='safe'): + logging.info(f"Casting to uint16") + vol_data = np.array(vol_data, dtype=np.uint16) + intercept = np.uint16(intercept) + slope = np.uint16(slope) + elif np.can_cast(vol_data, np.float32, casting='safe') and np.can_cast(intercept, np.float32, casting='safe') and np.can_cast(slope, np.float32, casting='safe'): + logging.info(f"Casting to float32") + vol_data = np.array(vol_data, dtype=np.float32) + intercept = np.float32(intercept) + slope = np.float32(slope) + elif np.can_cast(vol_data, np.float64, casting='safe') and np.can_cast(intercept, np.float64, casting='safe') and np.can_cast(slope, np.float64, casting='safe'): + logging.info(f"Casting to float64") + vol_data = np.array(vol_data, dtype=np.float64) + intercept = np.float64(intercept) + slope = np.float64(slope) + if slope != 1: - vol_data = slope * vol_data.astype(np.float64) - vol_data = vol_data.astype(np.int16) - vol_data += np.int16(intercept) - return np.array(vol_data, dtype=np.int16) + vol_data = slope * vol_data + + vol_data += intercept + return vol_data def create_volumetric_image(self, vox_data, metadata): """Creates an instance of 3D image. From 3fc28cefd36481ab4bf41c0966eadd08fb81f750 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Mon, 21 Apr 2025 18:55:05 -0700 Subject: [PATCH 011/118] Formatting changes and tag value for unsigned int is 0 (#537) * The tag value for usinged int is 0 Signed-off-by: M Q * Fix formmating complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .../dicom_series_to_volume_operator.py | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/monai/deploy/operators/dicom_series_to_volume_operator.py b/monai/deploy/operators/dicom_series_to_volume_operator.py index d589354f..57c60c17 100644 --- a/monai/deploy/operators/dicom_series_to_volume_operator.py +++ b/monai/deploy/operators/dicom_series_to_volume_operator.py @@ -112,7 +112,9 @@ def generate_voxel_data(self, series): # with the NumPy array returned from the ITK GetArrayViewFromImage on the image # loaded from the same DICOM series. vol_data = np.stack([s.get_pixel_array() for s in slices], axis=0) - if slices[0][0x0028,0x0103].value == 1: + # The above get_pixel_array() already considers the PixelRepresentation attribute, + # 0 is unsigned int, 1 is signed int + if slices[0][0x0028, 0x0103].value == 0: vol_data = vol_data.astype(np.uint16) # For now we support monochrome image only, for which DICOM Photometric Interpretation @@ -155,24 +157,35 @@ def generate_voxel_data(self, series): except KeyError: slope = 1 - # check if vol_data, intercept, and slope can be cast to uint16 without data loss - if np.can_cast(vol_data, np.uint16, casting='safe') and np.can_cast(intercept, np.uint16, casting='safe') and np.can_cast(slope, np.uint16, casting='safe'): - logging.info(f"Casting to uint16") + if ( + np.can_cast(vol_data, np.uint16, casting="safe") + and np.can_cast(intercept, np.uint16, casting="safe") + and np.can_cast(slope, np.uint16, casting="safe") + ): + logging.info("Casting to uint16") vol_data = np.array(vol_data, dtype=np.uint16) intercept = np.uint16(intercept) slope = np.uint16(slope) - elif np.can_cast(vol_data, np.float32, casting='safe') and np.can_cast(intercept, np.float32, casting='safe') and np.can_cast(slope, np.float32, casting='safe'): - logging.info(f"Casting to float32") + elif ( + np.can_cast(vol_data, np.float32, casting="safe") + and np.can_cast(intercept, np.float32, casting="safe") + and np.can_cast(slope, np.float32, casting="safe") + ): + logging.info("Casting to float32") vol_data = np.array(vol_data, dtype=np.float32) intercept = np.float32(intercept) slope = np.float32(slope) - elif np.can_cast(vol_data, np.float64, casting='safe') and np.can_cast(intercept, np.float64, casting='safe') and np.can_cast(slope, np.float64, casting='safe'): - logging.info(f"Casting to float64") + elif ( + np.can_cast(vol_data, np.float64, casting="safe") + and np.can_cast(intercept, np.float64, casting="safe") + and np.can_cast(slope, np.float64, casting="safe") + ): + logging.info("Casting to float64") vol_data = np.array(vol_data, dtype=np.float64) intercept = np.float64(intercept) slope = np.float64(slope) - + if slope != 1: vol_data = slope * vol_data From 57c4dc24ac69bbef881f3d18365b02d98225d3bf Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 17:20:48 -0700 Subject: [PATCH 012/118] Prepared changes for releasing v3 (#538) * Prepared changes for releasing v3 Signed-off-by: M Q * Bump the required version to 3.9 Signed-off-by: M Q * Update Python version references to 3.9 in documentation and configuration files - Updated .gitignore to include new input and test directories. - Changed Python version from 3.8 to 3.9 in .readthedocs.yml, setup.cfg, and run script. - Updated documentation to reflect the use of Python 3.9 in various tutorials. Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 4 +- .readthedocs.yml | 2 +- CONTRIBUTING.md | 2 +- README.md | 16 +- docs/requirements.txt | 2 +- .../developing_with_sdk/packaging_app.md | 8 +- .../getting_started/tutorials/mednist_app.md | 6 +- .../tutorials/monai_bundle_app.md | 8 +- .../tutorials/multi_model_app.md | 6 +- .../tutorials/segmentation_app.md | 6 +- .../tutorials/segmentation_clara-viz_app.md | 4 +- .../getting_started/tutorials/simple_app.md | 6 +- docs/source/release_notes/index.md | 7 + docs/source/release_notes/v3.0.0.md | 29 + notebooks/tutorials/01_simple_app.ipynb | 737 +++------ .../tutorials/02_mednist_app-prebuilt.ipynb | 954 +++--------- notebooks/tutorials/02_mednist_app.ipynb | 9 +- notebooks/tutorials/03_segmentation_app.ipynb | 1357 +++++++++-------- notebooks/tutorials/04_monai_bundle_app.ipynb | 1271 +++++++-------- notebooks/tutorials/05_multi_model_app.ipynb | 989 +++++------- requirements.txt | 5 +- run | 6 +- setup.cfg | 6 +- 23 files changed, 2338 insertions(+), 3102 deletions(-) create mode 100644 docs/source/release_notes/v3.0.0.md diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index edd0fa5c..3ab1eb59 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -14,10 +14,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.9 uses: actions/setup-python@v2 with: - python-version: "3.8" + python-version: "3.9" - name: Setup Dev Environment run: | pip install virtualenv diff --git a/.readthedocs.yml b/.readthedocs.yml index 6c872c8b..59c6d31c 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -8,7 +8,7 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.8" + python: "3.9" # You can also specify other tool versions: # nodejs: "20" # rust: "1.70" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 535231d7..eaab3990 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -138,7 +138,7 @@ MONAI Deploy App SDK's code coverage report is available at [CodeCov](https://co #### Building the documentation :::{note} -Please note that the documentation builds successfully in Python 3.8 environment, but fails with Python 3.10. +Please note that the documentation builds successfully in Python 3.9 environment, but fails with Python 3.10. ::: MONAI's documentation is located at `docs/`. diff --git a/README.md b/README.md index 016fa9e1..956541fe 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ MONAI Deploy App SDK offers a framework and associated tools to design, develop - Build medical imaging inference applications using a flexible, extensible & usable Pythonic API - Easy management of inference applications via programmable Directed Acyclic Graphs (DAGs) - Built-in operators to load DICOM data to be ingested in an inference app -- Out-of-the-box support for in-proc PyTorch based inference +- Out-of-the-box support for in-proc PyTorch based inference, as well as remote inference via Triton Inference Server - Easy incorporation of MONAI based pre and post transformations in the inference application - Package inference application with a single command into a portable MONAI Application Package - Locally run and debug your inference application using App Runner @@ -33,7 +33,7 @@ If you have used MONAI in your research, please cite us! The citation can be exp To install [the current release](https://pypi.org/project/monai-deploy-app-sdk/), you can simply run: ```bash -pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. +pip install monai-deploy-app-sdk ``` ### Prerequisites @@ -48,7 +48,7 @@ pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. Getting started guide is available at [here](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/getting_started/index.html). ```bash -pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. +pip install monai-deploy-app-sdk # Clone monai-deploy-app-sdk repository for accessing examples. git clone https://github.com/Project-MONAI/monai-deploy-app-sdk.git @@ -62,7 +62,7 @@ python examples/apps/simple_imaging_app/app.py -i examples/apps/simple_imaging_a # Package app (creating MAP Docker image), using `-l DEBUG` option to see progress. # Also please note that postfix will be added to user supplied tag for identifying CPU architecture and GPU type etc. -monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x64-workstation -l DEBUG +monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x86_64 -l DEBUG # Run the app with docker image and an input file locally ## Copy a test input file to 'input' folder @@ -86,7 +86,7 @@ YouTube Video (to be updated with the new version): ### [3) Creating a Segmentation app](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/getting_started/tutorials/segmentation_app.html) -YouTube Video (to be updated with the new version): +YouTube Video (demonstrating the previous version of the App SDK): - [Spleen Organ Segmentation - Jupyter Notebook Tutorial](https://www.youtube.com/watch?v=cqDVxzYt9lY) - [Spleen Organ Segmentation - Deep Dive](https://www.youtube.com/watch?v=nivgfD4pwWE) @@ -97,14 +97,16 @@ YouTube Video (to be updated with the new version): ### [Examples](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/getting_started/examples.html) - has example apps that you can see. + has example apps that you can see, to name but a few +- simple_imaging_app - ai_livertumor_seg_app - ai_spleen_seg_app - ai_unetr_seg_app - dicom_series_to_image_app - mednist_classifier_monaideploy -- simple_imaging_app +- ai_remote_infer_app + ## Contributing diff --git a/docs/requirements.txt b/docs/requirements.txt index 3f64ba34..6f6372db 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,6 +1,6 @@ Sphinx==4.1.2 sphinx-autobuild==2021.3.14 -myst-nb==0.17.2 # this version is fine in python 3.8 and avoids pulling in multiple nbformat packages +myst-nb==0.17.2 # this version is fine in python 3.9 and avoids pulling in multiple nbformat packages myst-parser==0.18.0 lxml_html_clean # needed by myst-nb linkify-it-py==1.0.1 # https://myst-parser.readthedocs.io/en/latest/syntax/optional.html?highlight=linkify#linkify diff --git a/docs/source/developing_with_sdk/packaging_app.md b/docs/source/developing_with_sdk/packaging_app.md index a46327ec..f4e7ee0f 100644 --- a/docs/source/developing_with_sdk/packaging_app.md +++ b/docs/source/developing_with_sdk/packaging_app.md @@ -13,7 +13,7 @@ It is required that the application configuration yaml file as well as the depen ### Basic Usage of MONAI Application Packager ```bash -monai-deploy package --config --tag --platform [--models ] [--log-level ] [-h] +monai-deploy package --config --tag --platform [--models ] [--log-level ] [-h] ``` #### Required Arguments @@ -21,7 +21,7 @@ monai-deploy package --config --tag --platform `: A path to MONAI Deploy Application folder or main code. * `--config, -c `: Path to the application configuration file. * `--tag, -t `: A MAP name and optionally a tag in the 'name:tag' format. -* `--platform `: Platform type of the container image, must be `x64-workstation` for x86-64 system. +* `--platform `: Platform type of the container image, must be `x86_64` for x86-64 system. :::{note} If `` refers to a python code (such as `./my_app.py`), the whole parent folder of the file would be packaged into the MAP container image, effectively the same as specifying the application folder path which includes `__main__.py` file. In both cases, the image's environment variable, `HOLOSCAN_APPLICATION` will be set with the path of the application folder in the image, i.e. `HOLOSCAN_APPLICATION=/opt/holoscan/app`. So, it is essential to provide the `__main__.py` file in the application folder, which usually would look like below: @@ -54,7 +54,7 @@ The following lists a few most likely used [optional arguments](https://docs.nvi Given an example MONAI Deploy App SDK application with its code residing in a directory `./my_app`, packaging this application with the Packager to create a Docker image tagged `my_app:latest` would look like this: ```bash -$ monai-deploy package ./my_app -c --config ./my_app/app.yaml -t my_app:latest --models ./model.ts --platform x64-workstation +$ monai-deploy package ./my_app -c --config ./my_app/app.yaml -t my_app:latest --models ./model.ts --platform x86_64 Building MONAI Application Package... Successfully built my_app:latest @@ -65,7 +65,7 @@ The MAP image name will be postfixed with the platform info to become `my_app-x6 :::{note} * The current implementation of the Packager **ONLY** supports a set of [platform](https://docs.nvidia.com/holoscan/sdk-user-guide/cli/package.html#platform-platform) specific base images from `nvcr.io` as base images for the MAP. -* To package a MAP to run on ARMv8 AArch64 on Linux with discrete GPU, replace the commandline option `--platform x64-workstation` with `--platform igx-orin-devkit --platform-config dgpu`. It has been tested on [NVIDIA IGX Orin](https://www.nvidia.com/en-us/edge-computing/products/igx/). +* To package a MAP to run on ARMv8 AArch64 on Linux with discrete GPU, replace the commandline option `--platform x86_64` with `--platform igx-dgpu`. It has been tested on [NVIDIA IGX Orin](https://www.nvidia.com/en-us/edge-computing/products/igx/). ::: ## Next Step diff --git a/docs/source/getting_started/tutorials/mednist_app.md b/docs/source/getting_started/tutorials/mednist_app.md index 63809ae2..d762d917 100644 --- a/docs/source/getting_started/tutorials/mednist_app.md +++ b/docs/source/getting_started/tutorials/mednist_app.md @@ -5,9 +5,9 @@ This tutorial demos the process of packaging up a trained model using MONAI Depl ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n mednist python=3.8 pytorch jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n mednist python=3.9 pytorch jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate mednist # Launch JupyterLab if you want to work on Jupyter Notebook @@ -98,7 +98,7 @@ monai-deploy package examples/apps/mednist_classifier_monaideploy/mednist_classi --config examples/apps/mednist_classifier_monaideploy/app.yaml \ --tag mednist_app:latest \ --models mednist_model/classifier.zip \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/monai_bundle_app.md b/docs/source/getting_started/tutorials/monai_bundle_app.md index 326b868a..c259a947 100644 --- a/docs/source/getting_started/tutorials/monai_bundle_app.md +++ b/docs/source/getting_started/tutorials/monai_bundle_app.md @@ -5,9 +5,9 @@ This tutorial shows how to create an organ segmentation application for a PyTorc ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -38,7 +38,7 @@ jupyter-lab ```{raw} html

- + Download 04_monai_bundle_app.ipynb

@@ -86,7 +86,7 @@ monai-deploy package examples/apps/ai_spleen_seg_app \ --config examples/apps/ai_spleen_seg_app/app.yaml \ --tag seg_app:latest \ --models spleen_model/model.ts \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/multi_model_app.md b/docs/source/getting_started/tutorials/multi_model_app.md index 801aec20..515e88b8 100644 --- a/docs/source/getting_started/tutorials/multi_model_app.md +++ b/docs/source/getting_started/tutorials/multi_model_app.md @@ -7,9 +7,9 @@ The models used in this example are trained with MONAI, and are packaged in the ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -70,7 +70,7 @@ monai-deploy package examples/apps/ai_multi_ai_app \ --tag multi_model_app:latest \ --config examples/apps/ai_multi_ai_app/app.yaml \ --models multi_models \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/segmentation_app.md b/docs/source/getting_started/tutorials/segmentation_app.md index 6497c874..4493bc0e 100644 --- a/docs/source/getting_started/tutorials/segmentation_app.md +++ b/docs/source/getting_started/tutorials/segmentation_app.md @@ -7,9 +7,9 @@ Please note that the following steps are for demonstration purpose. The code pul ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -72,7 +72,7 @@ monai-deploy package examples/apps/ai_spleen_seg_app \ --config examples/apps/ai_spleen_seg_app/app.yaml \ --tag seg_app:latest \ --models spleen_model/model.ts \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md b/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md index 1ce87b5a..6c9f3b44 100644 --- a/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md +++ b/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md @@ -5,9 +5,9 @@ This tutorial shows how to create an organ segmentation application for a PyTorc ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook diff --git a/docs/source/getting_started/tutorials/simple_app.md b/docs/source/getting_started/tutorials/simple_app.md index d43fca0c..77dcd4bc 100644 --- a/docs/source/getting_started/tutorials/simple_app.md +++ b/docs/source/getting_started/tutorials/simple_app.md @@ -5,9 +5,9 @@ This tutorial shows how a simple image processing application can be created wit ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -69,7 +69,7 @@ ls output # This assumes that nvidia docker is installed in the local machine. # Please see https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker to install nvidia-docker2. -monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x64-workstation -l DEBUG +monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x86_64 -l DEBUG # Show the application and package manifest files of the MONAI Application Package diff --git a/docs/source/release_notes/index.md b/docs/source/release_notes/index.md index fdb10dfc..84965f23 100644 --- a/docs/source/release_notes/index.md +++ b/docs/source/release_notes/index.md @@ -4,6 +4,13 @@ :hidden: :maxdepth: 2 +``` +## Version 3.0 + +```{toctree} +:maxdepth: 1 + +v3.0.0 ``` ## Version 2.0 diff --git a/docs/source/release_notes/v3.0.0.md b/docs/source/release_notes/v3.0.0.md new file mode 100644 index 00000000..2d229404 --- /dev/null +++ b/docs/source/release_notes/v3.0.0.md @@ -0,0 +1,29 @@ +# Version 2.0.0 (April 24th, 2024) + +## What's new in 3.0.0 + +- This version of the App SDK is based on the newly released [Holoscan SDK v3](https://pypi.org/project/holoscan/), and is expected to be so with future minor releases of Holoscan SDK v3. + +- Starting with version 3.0.0, [Holoscan SDK](https://pypi.org/project/holoscan/) and [Holoscan CLI](https://pypi.org/project/holoscan-cli/) are released in separate packages, and as such, this version of the MONAI Deploy App SDK has both as dependencies. As of now, version 3 of both packages are compatible. + +- Remote inference on [Triton Inference Server](https://github.com/triton-inference-server) is now supported. Effort was made to make it user-friendly so existing example applications can be easily converted to use this feature by simply providing the network location of the server as well as the [Triton model configuration file](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md) sans the actual model files. [An example application](https://github.com/Project-MONAI/monai-deploy-app-sdk/tree/main/examples/apps/ai_remote_infer_app) has been provided to demonstrate such use case. + +### Key changes + +- [Cincinnati Children's Hospital Medical Cente](https://www.cincinnatichildrens.org/) researchers, @[Bryan](https://github.com/bluna301) @[Will](https://github.com/WillButAgain) and Elan, contributed numerous enhancements from experience developing and deploying MONAI based AI applications in clinical environments, to name but a few + + - Enhanced the DICOM data loader to handle multi-phase DICOM series where multiple acquisitions exist and some DICOM SOP instances have the same image pospositiontion patient. + + - Enahnced the DICOM series to volume operator to better handle the data types of the converted volume image for improved efficiency and memory usage. + + - Enhanced the DICOM Segmentation operator to populate DICOM tags with AI model information which are consistent with other DICOM writers in the SDK. + + +Please also see the closed issues on Github and the closed pull requests on Github. + +## Additional information +Please visit [GETTING STARTED](/getting_started/index) guide and follow the tutorials. + +You can learn more about SDK usage through [DEVELOPING WITH SDK](/developing_with_sdk/index). + +Please let us know how you like it and what could be improved by [submitting an issue](https://github.com/Project-MONAI/monai-deploy-app-sdk/issues/new/choose) or [asking questions](https://github.com/Project-MONAI/monai-deploy-app-sdk/discussions) \ No newline at end of file diff --git a/notebooks/tutorials/01_simple_app.ipynb b/notebooks/tutorials/01_simple_app.ipynb index 8da2f1c1..beaf5a53 100644 --- a/notebooks/tutorials/01_simple_app.ipynb +++ b/notebooks/tutorials/01_simple_app.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 82, "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 83, "metadata": {}, "outputs": [ { @@ -96,23 +96,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/2727006292.py:16: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/2727006292.py:16: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(test_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 2, + "execution_count": 83, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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kZgjRPUIx7E+CMexPgjHsX4Ix7I+8BvHIJovUVMijhAhQoQIESJEdQgJOESIECFChNgAbFoCbmlpwWOPPRZm0KoR4TjWB+E41gfhONYP4VjWB5dyHDdlEFaIECFChAix2bFpNeAQIUKECBFiMyMk4BAhQoQIEWIDEBJwiBAhQoQIsQEICThEiBAhQoTYAIQEHCJEiBAhQmwANiUB/8M//AO2b9+OWCyGgwcP4sc//vFGd+mKwv/8z//g/e9/PwYGBhCJRPDkk09WfO84Dv70T/8U/f39iMfjOHz4ME6cOFFRZmZmBo888giSySTS6TQ+9rGPYX5+/jLexcbj8ccfxx133IH29nb09PTgl3/5l3H8+PGKMktLS3j00UfR2dmJtrY2fOhDH8LExERFmdHRUTz00ENobW1FT08PPve5z2F1dfVy3sqG4stf/jL27t2rMgkdOnQITz31lPo+HMPq8KUvfQmRSASf/vSn1WfhWNrhi1/8ojrFjD+7d+9W31+2cXQ2GZ544gmnubnZ+dd//Vfntddec37rt37LSafTzsTExEZ37YrBd77zHeeP/uiPnP/8z/90ADjf+MY3Kr7/0pe+5KRSKefJJ590Xn75ZeeXfumXnB07djilUkmVee973+vs27fPef75553//d//da6//nrn4Ycfvsx3srF44IEHnK985SvOsWPHnKNHjzq/+Iu/6Gzbts2Zn59XZT7+8Y87W7dudZ555hnnpz/9qXPXXXc5d999t/p+dXXVueWWW5zDhw87L730kvOd73zH6erqcr7whS9sxC1tCL75zW863/72t5233nrLOX78uPOHf/iHTlNTk3Ps2DHHccIxrAY//vGPne3btzt79+51PvWpT6nPw7G0w2OPPebcfPPNzvj4uPrJ5XLq+8s1jpuOgO+8807n0UcfVf+vra05AwMDzuOPP76BvbpyoRPw+vq609fX5/zVX/2V+mxubs5paWlx/v3f/91xHMd5/fXXHQDOT37yE1XmqaeeciKRiHP27NnL1vcrDZOTkw4A59lnn3Uc5/y4NTU1OV//+tdVmTfeeMMB4Bw5csRxnPPCUDQadbLZrCrz5S9/2Ukmk87y8vLlvYErCJlMxvmXf/mXcAyrQLFYdHbt2uU8/fTTzn333acIOBxLezz22GPOvn37jN9dznHcVCbocrmMF198EYcPH1afRaNRHD58GEeOHNnAnm0eDA8PI5vNVoxhKpXCwYMH1RgeOXIE6XQaBw4cUGUOHz6MaDSKF1544bL3+UpBPp8HAHR0dAAAXnzxRaysrFSM5e7du7Ft27aKsbz11lvR29uryjzwwAMoFAp47bXXLmPvrwysra3hiSeewMLCAg4dOhSOYRV49NFH8dBDD1WMGRDOx6A4ceIEBgYGcN111+GRRx7B6OgogMs7jpvqNKSpqSmsra1V3DQA9Pb24s0339ygXm0uZLNZADCOIb/LZrPo6emp+L6xsREdHR2qzLWG9fV1fPrTn8Y999yDW265BcD5cWpubkY6na4oq4+laaz53bWCV199FYcOHcLS0hLa2trwjW98AzfddBOOHj0ajmEAPPHEE/jZz36Gn/zkJxd9F85Hexw8eBBf/epXceONN2J8fBx/9md/hnvvvRfHjh27rOO4qQg4RIiNwqOPPopjx47hueee2+iubErceOONOHr0KPL5PP7jP/4DH/nIR/Dss89udLc2Fc6cOYNPfepTePrppxGLxTa6O5saDz74oPp77969OHjwIIaGhvC1r30N8Xj8svVjU5mgu7q60NDQcFE02sTEBPr6+jaoV5sLHCevMezr68Pk5GTF96urq5iZmbkmx/mTn/wkvvWtb+EHP/gBBgcH1ed9fX0ol8uYm5urKK+PpWms+d21gubmZlx//fXYv38/Hn/8cezbtw9/+7d/G45hALz44ouYnJzE7bffjsbGRjQ2NuLZZ5/F3/3d36GxsRG9vb3hWFaJdDqNG264ASdPnrysc3JTEXBzczP279+PZ555Rn22vr6OZ555BocOHdrAnm0e7NixA319fRVjWCgU8MILL6gxPHToEObm5vDiiy+qMt///vexvr6OgwcPXvY+bxQcx8EnP/lJfOMb38D3v/997Nixo+L7/fv3o6mpqWIsjx8/jtHR0YqxfPXVVysEmqeffhrJZBI33XTT5bmRKxDr6+tYXl4OxzAA3vOe9+DVV1/F0aNH1c+BAwfwyCOPqL/DsawO8/PzOHXqFPr7+y/vnKwqhGwD8cQTTzgtLS3OV7/6Vef11193fvu3f9tJp9MV0WjXOorFovPSSy85L730kgPA+eu//mvnpZdeckZGRhzHOb8NKZ1OO//1X//lvPLKK84HPvAB4zak2267zXnhhRec5557ztm1a9c1tw3pE5/4hJNKpZwf/vCHFdsVFhcXVZmPf/zjzrZt25zvf//7zk9/+lPn0KFDzqFDh9T33K5w//33O0ePHnW++93vOt3d3dfUto/Pf/7zzrPPPusMDw87r7zyivP5z3/eiUQizve+9z3HccIxrAUyCtpxwrG0xWc/+1nnhz/8oTM8POz86Ec/cg4fPux0dXU5k5OTjuNcvnHcdATsOI7z93//9862bduc5uZm584773Sef/75je7SFYUf/OAHDoCLfj7ykY84jnN+K9Kf/MmfOL29vU5LS4vznve8xzl+/HhFHdPT087DDz/stLW1Oclk0vnoRz/qFIvFDbibjYNpDAE4X/nKV1SZUqnk/M7v/I6TyWSc1tZW54Mf/KAzPj5eUc/bb7/tPPjgg048Hne6urqcz372s87KysplvpuNw2/+5m86Q0NDTnNzs9Pd3e285z3vUeTrOOEY1gKdgMOxtMOHP/xhp7+/32lubna2bNnifPjDH3ZOnjypvr9c4xieBxwiRIgQIUJsADaVDzhEiBAhQoS4WhAScIgQIUKECLEBCAk4RIgQIUKE2ACEBBwiRIgQIUJsAEICDhEiRIgQITYAIQGHCBEiRIgQG4CQgEOECBEiRIgNQEjAIUKECBEixAYgJOAQIUKECBFiAxAScIgQIUKECLEBCAk4RIgQIUKE2AD8Pz66mQm41jf1AAAAAElFTkSuQmCC", + "image/png": "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kZgjRPUIx7E+CMexPgjHsX4Ix7I+8BvHIJovUVMijhAhQoQIESJEdQgJOESIECFChNgAbFoCbmlpwWOPPRZm0KoR4TjWB+E41gfhONYP4VjWB5dyHDdlEFaIECFChAix2bFpNeAQIUKECBFiMyMk4BAhQoQIEWIDEBJwiBAhQoQIsQEICThEiBAhQoTYAIQEHCJEiBAhQmwANiUB/8M//AO2b9+OWCyGgwcP4sc//vFGd+mKwv/8z//g/e9/PwYGBhCJRPDkk09WfO84Dv70T/8U/f39iMfjOHz4ME6cOFFRZmZmBo888giSySTS6TQ+9rGPYX5+/jLexcbj8ccfxx133IH29nb09PTgl3/5l3H8+PGKMktLS3j00UfR2dmJtrY2fOhDH8LExERFmdHRUTz00ENobW1FT08PPve5z2F1dfVy3sqG4stf/jL27t2rMgkdOnQITz31lPo+HMPq8KUvfQmRSASf/vSn1WfhWNrhi1/8ojrFjD+7d+9W31+2cXQ2GZ544gmnubnZ+dd//Vfntddec37rt37LSafTzsTExEZ37YrBd77zHeeP/uiPnP/8z/90ADjf+MY3Kr7/0pe+5KRSKefJJ590Xn75ZeeXfumXnB07djilUkmVee973+vs27fPef75553//d//da6//nrn4Ycfvsx3srF44IEHnK985SvOsWPHnKNHjzq/+Iu/6Gzbts2Zn59XZT7+8Y87W7dudZ555hnnpz/9qXPXXXc5d999t/p+dXXVueWWW5zDhw87L730kvOd73zH6erqcr7whS9sxC1tCL75zW863/72t5233nrLOX78uPOHf/iHTlNTk3Ps2DHHccIxrAY//vGPne3btzt79+51PvWpT6nPw7G0w2OPPebcfPPNzvj4uPrJ5XLq+8s1jpuOgO+8807n0UcfVf+vra05AwMDzuOPP76BvbpyoRPw+vq609fX5/zVX/2V+mxubs5paWlx/v3f/91xHMd5/fXXHQDOT37yE1XmqaeeciKRiHP27NnL1vcrDZOTkw4A59lnn3Uc5/y4NTU1OV//+tdVmTfeeMMB4Bw5csRxnPPCUDQadbLZrCrz5S9/2Ukmk87y8vLlvYErCJlMxvmXf/mXcAyrQLFYdHbt2uU8/fTTzn333acIOBxLezz22GPOvn37jN9dznHcVCbocrmMF198EYcPH1afRaNRHD58GEeOHNnAnm0eDA8PI5vNVoxhKpXCwYMH1RgeOXIE6XQaBw4cUGUOHz6MaDSKF1544bL3+UpBPp8HAHR0dAAAXnzxRaysrFSM5e7du7Ft27aKsbz11lvR29uryjzwwAMoFAp47bXXLmPvrwysra3hiSeewMLCAg4dOhSOYRV49NFH8dBDD1WMGRDOx6A4ceIEBgYGcN111+GRRx7B6OgogMs7jpvqNKSpqSmsra1V3DQA9Pb24s0339ygXm0uZLNZADCOIb/LZrPo6emp+L6xsREdHR2qzLWG9fV1fPrTn8Y999yDW265BcD5cWpubkY6na4oq4+laaz53bWCV199FYcOHcLS0hLa2trwjW98AzfddBOOHj0ajmEAPPHEE/jZz36Gn/zkJxd9F85Hexw8eBBf/epXceONN2J8fBx/9md/hnvvvRfHjh27rOO4qQg4RIiNwqOPPopjx47hueee2+iubErceOONOHr0KPL5PP7jP/4DH/nIR/Dss89udLc2Fc6cOYNPfepTePrppxGLxTa6O5saDz74oPp77969OHjwIIaGhvC1r30N8Xj8svVjU5mgu7q60NDQcFE02sTEBPr6+jaoV5sLHCevMezr68Pk5GTF96urq5iZmbkmx/mTn/wkvvWtb+EHP/gBBgcH1ed9fX0ol8uYm5urKK+PpWms+d21gubmZlx//fXYv38/Hn/8cezbtw9/+7d/G45hALz44ouYnJzE7bffjsbGRjQ2NuLZZ5/F3/3d36GxsRG9vb3hWFaJdDqNG264ASdPnrysc3JTEXBzczP279+PZ555Rn22vr6OZ555BocOHdrAnm0e7NixA319fRVjWCgU8MILL6gxPHToEObm5vDiiy+qMt///vexvr6OgwcPXvY+bxQcx8EnP/lJfOMb38D3v/997Nixo+L7/fv3o6mpqWIsjx8/jtHR0YqxfPXVVysEmqeffhrJZBI33XTT5bmRKxDr6+tYXl4OxzAA3vOe9+DVV1/F0aNH1c+BAwfwyCOPqL/DsawO8/PzOHXqFPr7+y/vnKwqhGwD8cQTTzgtLS3OV7/6Vef11193fvu3f9tJp9MV0WjXOorFovPSSy85L730kgPA+eu//mvnpZdeckZGRhzHOb8NKZ1OO//1X//lvPLKK84HPvAB4zak2267zXnhhRec5557ztm1a9c1tw3pE5/4hJNKpZwf/vCHFdsVFhcXVZmPf/zjzrZt25zvf//7zk9/+lPn0KFDzqFDh9T33K5w//33O0ePHnW++93vOt3d3dfUto/Pf/7zzrPPPusMDw87r7zyivP5z3/eiUQizve+9z3HccIxrAUyCtpxwrG0xWc/+1nnhz/8oTM8POz86Ec/cg4fPux0dXU5k5OTjuNcvnHcdATsOI7z93//9862bduc5uZm584773Sef/75je7SFYUf/OAHDoCLfj7ykY84jnN+K9Kf/MmfOL29vU5LS4vznve8xzl+/HhFHdPT087DDz/stLW1Oclk0vnoRz/qFIvFDbibjYNpDAE4X/nKV1SZUqnk/M7v/I6TyWSc1tZW54Mf/KAzPj5eUc/bb7/tPPjgg048Hne6urqcz372s87KysplvpuNw2/+5m86Q0NDTnNzs9Pd3e285z3vUeTrOOEY1gKdgMOxtMOHP/xhp7+/32lubna2bNnifPjDH3ZOnjypvr9c4xieBxwiRIgQIUJsADaVDzhEiBAhQoS4WhAScIgQIUKECLEBCAk4RIgQIUKE2ACEBBwiRIgQIUJsAEICDhEiRIgQITYAIQGHCBEiRIgQG4CQgEOECBEiRIgNQEjAIUKECBEixAYgJOAQIUKECBFiAxAScIgQIUKECLEBCAk4RIgQIUKE2AD8Pz66mQm41jf1AAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -153,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 84, "metadata": {}, "outputs": [ { @@ -187,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 85, "metadata": {}, "outputs": [], "source": [ @@ -220,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 86, "metadata": {}, "outputs": [], "source": [ @@ -291,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 87, "metadata": {}, "outputs": [], "source": [ @@ -343,7 +343,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 88, "metadata": {}, "outputs": [], "source": [ @@ -436,7 +436,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 89, "metadata": {}, "outputs": [ { @@ -515,16 +515,16 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 90, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:08:18,760] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 12:08:18,775] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:03:07,039] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 12:03:07,047] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=), triton_server_netloc=\n" ] }, { @@ -540,12 +540,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n" ] }, @@ -565,9 +563,9 @@ "text": [ "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[info] [gxf_executor.cpp:294] Destroying context\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[info] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -578,7 +576,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 91, "metadata": {}, "outputs": [ { @@ -595,30 +593,30 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 92, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/1643627018.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/1643627018.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 11, + "execution_count": 92, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -659,7 +657,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 93, "metadata": {}, "outputs": [], "source": [ @@ -677,14 +675,14 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/sobel_operator.py\n" + "Overwriting simple_imaging_app/sobel_operator.py\n" ] } ], @@ -757,14 +755,14 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 95, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/median_operator.py\n" + "Overwriting simple_imaging_app/median_operator.py\n" ] } ], @@ -819,14 +817,14 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 96, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/gaussian_operator.py\n" + "Overwriting simple_imaging_app/gaussian_operator.py\n" ] } ], @@ -894,7 +892,7 @@ " # Some details can be found at https://stackoverflow.com/questions/55319949/pil-typeerror-cannot-handle-this-data-type\n", " print(f\"Data type of output: {type(data_out)!r}, max = {np.max(data_out)!r}\")\n", " if np.max(data_out) <= 1:\n", - " data_out = (data_out*255).astype(np.uint8)\n", + " data_out = (data_out * 255).astype(np.uint8)\n", " print(f\"Data type of output post conversion: {type(data_out)!r}, max = {np.max(data_out)!r}\")\n", "\n", " # For now, use attribute of self to find the output path.\n", @@ -915,14 +913,14 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 97, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/app.py\n" + "Overwriting simple_imaging_app/app.py\n" ] } ], @@ -936,7 +934,7 @@ "from sobel_operator import SobelOperator\n", "\n", "from monai.deploy.conditions import CountCondition\n", - "from monai.deploy.core import AppContext, Application\n", + "from monai.deploy.core import Application\n", "\n", "\n", "# Decorator support is not available in this version of the SDK, to be re-introduced later\n", @@ -1017,14 +1015,14 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 98, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/__main__.py\n" + "Overwriting simple_imaging_app/__main__.py\n" ] } ], @@ -1038,15 +1036,15 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 99, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "app.py\t\t __main__.py\t sobel_operator.py\n", - "gaussian_operator.py median_operator.py\n" + "app.py\t gaussian_operator.py\tmedian_operator.py requirements.txt\n", + "app.yaml __main__.py\t\t__pycache__\t sobel_operator.py\n" ] } ], @@ -1068,94 +1066,92 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 100, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:08:26,105] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", - "[2025-01-29 12:08:26,111] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", - "[2025-01-29 12:08:26,111] [INFO] (root) - sample_data_path: /tmp/simple_app\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:03:12,662] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, triton_server_netloc=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", + "[2025-04-22 12:03:12,666] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 12:03:12,666] [INFO] (root) - sample_data_path: /tmp/simple_app\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "Input from: /tmp/simple_app, whose absolute path: /tmp/simple_app\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2025-01-29 12:08:26,149] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", + "[2025-04-22 12:03:12,705] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", "Number of times operator median_op whose class is defined in median_operator called: 1\n", "Number of times operator gaussian_op whose class is defined in gaussian_operator called: 1\n", "Data type of output: , max = 0.35821119421406195\n", "Data type of output post conversion: , max = 91\n", - "[2025-01-29 12:08:26,378] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", - "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", - "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", - "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", - "[2025-01-29 12:08:26,380] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", - "[2025-01-29 12:08:26,380] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", - "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", - "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", - "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", - "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", - "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", - "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", - "[2025-01-29 12:08:26,387] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", - "[2025-01-29 12:08:26,387] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", - "[2025-01-29 12:08:26,388] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", - "[2025-01-29 12:08:26,388] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", - "[2025-01-29 12:08:26,390] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", - "[2025-01-29 12:08:26,391] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", - "[2025-01-29 12:08:26,391] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", - "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", - "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", - "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", - "[2025-01-29 12:08:26,397] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", - "[2025-01-29 12:08:26,397] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", - "[2025-01-29 12:08:26,401] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", - "[2025-01-29 12:08:26,401] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", - "[2025-01-29 12:08:26,402] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", - "[2025-01-29 12:08:26,402] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", + "[2025-04-22 12:03:12,985] [DEBUG] (PIL.Image) - Importing AvifImagePlugin\n", + "[2025-04-22 12:03:12,986] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", + "[2025-04-22 12:03:12,990] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", + "[2025-04-22 12:03:12,993] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", + "[2025-04-22 12:03:12,993] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", + "[2025-04-22 12:03:12,995] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", + "[2025-04-22 12:03:12,995] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", + "[2025-04-22 12:03:12,995] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", + "[2025-04-22 12:03:12,996] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", + "[2025-04-22 12:03:12,996] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", + "[2025-04-22 12:03:12,997] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", + "[2025-04-22 12:03:12,997] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", + "[2025-04-22 12:03:12,997] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", + "[2025-04-22 12:03:13,001] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", + "[2025-04-22 12:03:13,003] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", + "[2025-04-22 12:03:13,003] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", + "[2025-04-22 12:03:13,003] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", + "[2025-04-22 12:03:13,004] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", + "[2025-04-22 12:03:13,004] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", + "[2025-04-22 12:03:13,006] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", + "[2025-04-22 12:03:13,006] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1166,30 +1162,30 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 101, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 20, + "execution_count": 101, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1212,13 +1208,6 @@ "## Packaging app" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "attachments": {}, "cell_type": "markdown", @@ -1231,14 +1220,14 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 102, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/app.yaml\n" + "Overwriting simple_imaging_app/app.yaml\n" ] } ], @@ -1261,22 +1250,21 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 103, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/requirements.txt\n" + "Overwriting simple_imaging_app/requirements.txt\n" ] } ], "source": [ "%%writefile simple_imaging_app/requirements.txt\n", "scikit-image\n", - "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue\n" + "setuptools>=59.5.0 # for pkg_resources\n" ] }, { @@ -1288,21 +1276,21 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 104, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:08:28,758] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 12:08:29,206] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 12:08:29,206] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", - "[2025-01-29 12:08:29,207] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 12:08:29,207] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", - "[2025-01-29 12:08:29,212] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 12:08:29,213] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 12:08:29,217] [DEBUG] (common) - \n", + "[2025-04-22 12:03:14,884] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 12:03:14,921] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 12:03:14,922] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", + "[2025-04-22 12:03:14,922] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 12:03:14,922] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", + "[2025-04-22 12:03:14,927] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 12:03:14,928] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 12:03:14,932] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1330,14 +1318,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"3.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 12:08:29,218] [DEBUG] (common) - \n", + "[2025-04-22 12:03:14,933] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1355,7 +1343,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 12:08:29,222] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:03:14,938] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml'),\n", @@ -1373,13 +1361,13 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '3.0.0',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1396,7 +1384,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 12:08:29,222] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:03:14,939] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -1406,15 +1394,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'simple_imaging_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 12:08:29,246] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:03:14,964] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1478,9 +1466,9 @@ "LABEL tag=\"simple_imaging_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Simple Imaging App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"3.0.0\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1493,7 +1481,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1552,7 +1540,7 @@ "# Install MONAI Deploy App SDK\n", "\n", "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", + "RUN pip install monai-deploy-app-sdk==3.0.0\n", "\n", "\n", "\n", @@ -1567,7 +1555,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 12:08:29,246] [INFO] (packager.builder) - \n", + "[2025-04-22 12:03:14,964] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1575,335 +1563,120 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", + " Holoscan SDK Package: 3.1.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 12:08:29,559] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 12:08:29,559] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 12:03:15,380] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 12:03:15,380] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", "#1 transferring dockerfile: 4.53kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", - "#2 DONE 0.0s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#2 DONE 0.1s\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#3 DONE 0.5s\n", + "#3 [internal] load .dockerignore\n", + "#3 transferring context: 1.80kB done\n", + "#3 DONE 0.1s\n", "\n", - "#4 [internal] load .dockerignore\n", - "#4 transferring context: 1.80kB done\n", - "#4 DONE 0.1s\n", + "#4 [internal] load build context\n", + "#4 DONE 0.0s\n", "\n", - "#5 [internal] load build context\n", + "#5 importing cache manifest from local:2851983977013277839\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", "#6 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", "#6 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#6 DONE 0.0s\n", + "#6 DONE 0.1s\n", "\n", - "#7 importing cache manifest from local:930277721408013411\n", - "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", - "#7 DONE 0.0s\n", + "#7 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#7 DONE 0.3s\n", "\n", - "#8 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#8 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#8 DONE 0.7s\n", + "#4 [internal] load build context\n", + "#4 transferring context: 24.82kB 0.0s done\n", + "#4 DONE 0.1s\n", "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 24.94kB 0.0s done\n", - "#5 DONE 0.1s\n", + "#8 [release 9/17] WORKDIR /var/holoscan\n", + "#8 CACHED\n", "\n", - "#9 [release 7/17] COPY ./tools /var/holoscan/tools\n", + "#9 [release 2/17] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#9 CACHED\n", "\n", - "#10 [release 5/17] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#10 CACHED\n", "\n", - "#11 [release 6/17] WORKDIR /var/holoscan\n", + "#11 [release 5/17] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#11 CACHED\n", "\n", - "#12 [release 2/17] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#12 [release 8/17] RUN chmod +x /var/holoscan/tools\n", "#12 CACHED\n", "\n", - "#13 [release 3/17] RUN groupadd -f -g 1000 holoscan\n", + "#13 [release 10/17] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#13 CACHED\n", "\n", - "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#14 [release 6/17] WORKDIR /var/holoscan\n", "#14 CACHED\n", "\n", "#15 [release 4/17] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#15 CACHED\n", "\n", - "#16 [release 8/17] RUN chmod +x /var/holoscan/tools\n", + "#16 [release 11/17] RUN pip install --upgrade pip\n", "#16 CACHED\n", "\n", "#17 [release 1/17] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#17 CACHED\n", "\n", - "#18 [release 9/17] WORKDIR /var/holoscan\n", + "#18 [release 7/17] COPY ./tools /var/holoscan/tools\n", "#18 CACHED\n", "\n", - "#19 [release 10/17] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#19 DONE 0.1s\n", - "\n", - "#20 [release 11/17] RUN pip install --upgrade pip\n", - "#20 0.754 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 0.787 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 0.944 Collecting pip\n", - "#20 1.016 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#20 1.091 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 27.0 MB/s eta 0:00:00\n", - "#20 1.121 Installing collected packages: pip\n", - "#20 1.914 Successfully installed pip-25.0\n", - "#20 DONE 2.1s\n", - "\n", - "#21 [release 12/17] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.746 Collecting scikit-image (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.765 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", - "#21 0.783 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 2)) (59.6.0)\n", - "#21 0.866 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 3))\n", - "#21 0.873 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.134 Collecting numpy>=1.24 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.139 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.257 Collecting scipy>=1.11.2 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.261 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.285 Collecting networkx>=3.0 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.290 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 1.462 Collecting pillow>=10.1 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.468 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.510 Collecting imageio!=2.35.0,>=2.33 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.514 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", - "#21 1.568 Collecting tifffile>=2022.8.12 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.572 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", - "#21 1.601 Collecting packaging>=21 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.605 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 1.618 Collecting lazy-loader>=0.4 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.622 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", - "#21 1.629 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3)) (25.0)\n", - "#21 1.650 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.655 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 1.674 Collecting numpy>=1.24 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.678 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.690 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.694 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 1.718 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.722 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.734 Collecting Jinja2<4.0,>=3.1.3 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.738 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 1.795 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.799 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 1.824 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.828 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 1.884 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.888 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 1.967 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.976 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.022 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.027 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.112 Collecting MarkupSafe>=2.0 (from Jinja2<4.0,>=3.1.3->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.116 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.265 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.269 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 2.282 Collecting typing-extensions (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.286 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 2.354 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.358 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 2.369 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.376 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 2.437 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.441 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 2.457 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.460 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 2.489 Collecting filelock (from wheel-axle-runtime<1.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.492 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 2.507 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.511 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 3.029 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 3.033 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 3.055 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", - "#21 3.185 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 120.3 MB/s eta 0:00:00\n", - "#21 3.193 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 3.660 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 89.5 MB/s eta 0:00:00\n", - "#21 3.668 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 3.677 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 4.557 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 103.5 MB/s eta 0:00:00\n", - "#21 4.566 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", - "#21 4.576 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 4.582 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", - "#21 4.589 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 4.605 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 124.4 MB/s eta 0:00:00\n", - "#21 4.610 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 4.771 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.4 MB/s eta 0:00:00\n", - "#21 4.778 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 4.785 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 4.825 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 116.1 MB/s eta 0:00:00\n", - "#21 4.830 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 4.840 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 4.849 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 4.859 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 124.1 MB/s eta 0:00:00\n", - "#21 4.865 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 4.870 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", - "#21 5.265 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 103.7 MB/s eta 0:00:00\n", - "#21 5.273 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", - "#21 5.280 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 5.286 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 5.291 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 5.299 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 5.304 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 5.309 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 5.315 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 5.323 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 5.344 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 110.5 MB/s eta 0:00:00\n", - "#21 5.352 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 5.357 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 5.363 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 5.370 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 6.034 Installing collected packages: fastrlock, urllib3, typing-extensions, pyyaml, psutil, pillow, packaging, numpy, networkx, MarkupSafe, idna, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, tifffile, scipy, requests, pydantic-core, lazy-loader, Jinja2, imageio, cupy-cuda12x, scikit-image, pydantic, python-on-whales, holoscan\n", - "#21 17.54 Successfully installed Jinja2-3.1.5 MarkupSafe-3.0.2 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 holoscan-2.9.0 idna-3.10 imageio-2.37.0 lazy-loader-0.4 networkx-3.4.2 numpy-1.26.4 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 scikit-image-0.25.1 scipy-1.15.1 tifffile-2025.1.10 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 19.4s\n", - "\n", - "#22 [release 13/17] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 0.791 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.999 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.009 WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))': /packages/fa/5a/e4bc7bad613a21b80d0d2835598af5ad82083cc076fec6f4d14c455d23eb/monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata\n", - "#22 1.021 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.039 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.041 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.079 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.089 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.176 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.181 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.206 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", - "#22 1.208 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.209 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.209 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.210 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.211 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.212 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.213 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.214 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.214 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.219 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.227 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.231 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.242 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 1.247 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.248 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.250 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.250 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.253 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 1.265 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 1.266 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 1.285 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.306 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.325 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 1.453 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 1.652 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.0s\n", - "\n", - "#23 [release 14/17] COPY ./map/app.json /etc/holoscan/app.json\n", - "#23 DONE 0.1s\n", - "\n", - "#24 [release 15/17] COPY ./app.config /var/holoscan/app.yaml\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/17] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#25 DONE 0.1s\n", - "\n", - "#26 [release 17/17] COPY ./app /opt/holoscan/app\n", - "#26 DONE 0.1s\n", - "\n", - "#27 exporting to docker image format\n", - "#27 exporting layers\n", - "#27 exporting layers 21.8s done\n", - "#27 exporting manifest sha256:53ff7da31e7d5c6946b56e187e574f38dcf580354efae32e00d50b4986bb3ea0 0.0s done\n", - "#27 exporting config sha256:a00c56131135404d07ea4a88014855a80f5a306b51d023abfe17aecad923f4f8 0.0s done\n", - "#27 sending tarball\n", - "#27 ...\n", - "\n", - "#28 importing to docker\n", - "#28 loading layer 9d60bef8e444 230B / 230B\n", - "#28 loading layer c90115fa1f34 65.54kB / 5.10MB\n", - "#28 loading layer 8c9e9b65f01e 557.06kB / 230.97MB\n", - "#28 loading layer 8c9e9b65f01e 42.89MB / 230.97MB 2.1s\n", - "#28 loading layer 8c9e9b65f01e 111.41MB / 230.97MB 4.1s\n", - "#28 loading layer 8c9e9b65f01e 145.95MB / 230.97MB 6.1s\n", - "#28 loading layer 8c9e9b65f01e 175.47MB / 230.97MB 8.2s\n", - "#28 loading layer 8c9e9b65f01e 213.91MB / 230.97MB 10.2s\n", - "#28 loading layer 78921c5c83a7 32.77kB / 578.02kB\n", - "#28 loading layer 2b15b8f81b52 491B / 491B\n", - "#28 loading layer 5b542f78e0ea 314B / 314B\n", - "#28 loading layer 59edd496942a 294B / 294B\n", - "#28 loading layer 318a06f5a29c 3.20kB / 3.20kB\n", - "#28 loading layer 318a06f5a29c 3.20kB / 3.20kB 0.2s done\n", - "#28 loading layer 9d60bef8e444 230B / 230B 12.6s done\n", - "#28 loading layer c90115fa1f34 65.54kB / 5.10MB 12.6s done\n", - "#28 loading layer 8c9e9b65f01e 213.91MB / 230.97MB 11.9s done\n", - "#28 loading layer 78921c5c83a7 32.77kB / 578.02kB 0.7s done\n", - "#28 loading layer 2b15b8f81b52 491B / 491B 0.5s done\n", - "#28 loading layer 5b542f78e0ea 314B / 314B 0.4s done\n", - "#28 loading layer 59edd496942a 294B / 294B 0.3s done\n", - "#28 DONE 12.6s\n", - "\n", - "#27 exporting to docker image format\n", - "#27 sending tarball 27.3s done\n", - "#27 DONE 49.1s\n", - "\n", - "#29 exporting cache to client directory\n", - "#29 preparing build cache for export\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#29 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#29 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#29 writing layer sha256:310210c018e9123f7e4dd12747f657a167962dc86770b58db1309651c1e4fff0 0.1s done\n", - "#29 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#29 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#29 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#29 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#29 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#29 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#29 writing layer sha256:6b55a0ece27da2213382510598c60a658a0090ecc1b77924381aa52e03dde663 0.0s done\n", - "#29 writing layer sha256:765c241f999d7e08875cebc322e3685bc995f5bcd51b1ae00e7a8d37d580c6d0\n", - "#29 writing layer sha256:765c241f999d7e08875cebc322e3685bc995f5bcd51b1ae00e7a8d37d580c6d0 4.1s done\n", - "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885\n", - "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#29 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#29 writing layer sha256:b6b7f5fd2c4d2a1139bf709d79900ce0959f21bbf09cd203ddf5a01540ca11cb 0.0s done\n", - "#29 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#29 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#29 writing layer sha256:c6e43c0a1312306b0a277e2331a8040cbcb07a7dd18c1818cab4890b7ea6d1fd 0.0s done\n", - "#29 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#29 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#29 writing layer sha256:d7bc8c1388631bfc461cb46725c245871c4e7c8b55d39dbcabe50c11e67ee6d8 0.0s done\n", - "#29 writing layer sha256:dcea0ee16845c3ea8a82f6e3ff8448f3ab26316873f456d68d26d1ea1cc48cae 0.0s done\n", - "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31\n", - "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#29 writing layer sha256:f22f9b836cbd9aef6d19af4591090720cabcc90d50397bde4bfb5df30c3c0074 0.1s done\n", - "#29 preparing build cache for export 4.7s done\n", - "#29 writing config sha256:a4f75b166426c5bb67adf94166174f47e6bbad714871ff611d617fc530aa5585 0.0s done\n", - "#29 writing cache manifest sha256:7f136b3980378eddd091fe709e3147397eee5acd8a045ed9aa3e46e605540a0d 0.0s done\n", - "#29 DONE 4.7s\n", - "[2025-01-29 12:09:49,701] [INFO] (packager) - Build Summary:\n", + "#19 [release 3/17] RUN groupadd -f -g 1000 holoscan\n", + "#19 CACHED\n", + "\n", + "#20 [release 12/17] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#20 CACHED\n", + "\n", + "#21 [release 13/17] RUN pip install monai-deploy-app-sdk==3.0.0\n", + "#21 0.756 Defaulting to user installation because normal site-packages is not writeable\n", + "#21 0.918 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "#21 1.066 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "#21 ERROR: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "------\n", + " > [release 13/17] RUN pip install monai-deploy-app-sdk==3.0.0:\n", + "0.756 Defaulting to user installation because normal site-packages is not writeable\n", + "0.918 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "1.066 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "------\n", + "Dockerfile:137\n", + "--------------------\n", + " 135 | \n", + " 136 | # Install MONAI Deploy from PyPI org\n", + " 137 | >>> RUN pip install monai-deploy-app-sdk==3.0.0\n", + " 138 | \n", + " 139 | \n", + "--------------------\n", + "ERROR: failed to solve: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "[2025-04-22 12:03:17,946] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", - " Status: Succeeded\n", - " Docker Tag: simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Tarball: None\n" + " Status: Failure\n", + " Error: Error building image: see Docker output for additional details.\n", + " \n" ] } ], "source": [ "tag_prefix = \"simple_imaging_app\"\n", "\n", - "!monai-deploy package simple_imaging_app -c simple_imaging_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package simple_imaging_app -c simple_imaging_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -1921,14 +1694,14 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 105, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 a00c56131135 55 seconds ago 2.98GB\n" + "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 ffe41584f515 2 hours ago 3.49GB\n" ] } ], @@ -1950,7 +1723,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 106, "metadata": {}, "outputs": [ { @@ -1986,7 +1759,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -2008,17 +1781,17 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-04-22 19:03:20 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 20:09:54 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 20:09:54 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-04-22 19:03:20 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-04-22 19:03:20 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-04-22 19:03:20 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", - "2025-01-29 20:09:54 [INFO] '/opt/holoscan/models' cannot be found.\n", + "2025-04-22 19:03:20 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-04-22 19:03:20 [INFO] '/opt/holoscan/models' cannot be found.\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 20:09:54 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-04-22 19:03:20 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-04-22 19:03:20 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config\n" ] @@ -2045,30 +1818,30 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 107, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:09:56,049] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 12:09:56,111] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpvqx0u9zd/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpvqx0u9zd/pkg.json\n", - "d89d96d29bdf06ffe093ea7a304454c174b70705e522d5cc48fcdc332533b32c\n", - "[2025-01-29 12:09:56,396] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 12:03:21,668] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmp743z7364/app.json\n", + "Successfully copied 2.05kB to /tmp/tmp743z7364/pkg.json\n", + "a1173c75c310b2aad23825b7ac8ec738134ee182f68590011dc0c8f3d3fb2853\n", + "[2025-04-22 12:03:21,918] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 12:09:56,396] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 12:03:21,918] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 12:09:56,655] [INFO] (common) - Launching container (cdaa371aba2f) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: zealous_bohr\n", + "[2025-04-22 12:03:22,256] [INFO] (common) - Launching container (652dede999f5) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: frosty_hofstadter\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2078,27 +1851,23 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 20:09:57 [INFO] Launching application python3 /opt/holoscan/app ...\n", - "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "2025-04-22 19:03:22 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2025-01-29 20:09:57,994] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[2025-01-29 20:09:57,995] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 20:09:57,995] [INFO] (root) - sample_data_path: /var/holoscan/input\n", + "[2025-04-22 19:03:23,790] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", + "[2025-04-22 19:03:23,790] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", + "[2025-04-22 19:03:23,790] [INFO] (root) - sample_data_path: /var/holoscan/input\n", "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "\n", @@ -2106,11 +1875,11 @@ "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[info] [gxf_executor.cpp:294] Destroying context\n", + "[info] [gxf_executor.cpp:295] Destroying context\n", "\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "\n", @@ -2124,7 +1893,7 @@ "\n", "Data type of output post conversion: , max = 91\n", "\n", - "[2025-01-29 12:09:58,979] [INFO] (common) - Container 'zealous_bohr'(cdaa371aba2f) exited.\n" + "[2025-04-22 12:03:24,743] [INFO] (common) - Container 'frosty_hofstadter'(652dede999f5) exited.\n" ] } ], @@ -2136,30 +1905,30 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 108, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 27, + "execution_count": 108, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] diff --git a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb index ef574499..eebaf896 100644 --- a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb +++ b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -28,12 +28,12 @@ "output_type": "stream", "text": [ "Cloning into 'source'...\n", - "remote: Enumerating objects: 281, done.\u001b[K\n", - "remote: Counting objects: 100% (281/281), done.\u001b[K\n", - "remote: Compressing objects: 100% (229/229), done.\u001b[K\n", - "remote: Total 281 (delta 59), reused 149 (delta 30), pack-reused 0 (from 0)\u001b[K\n", - "Receiving objects: 100% (281/281), 1.40 MiB | 13.06 MiB/s, done.\n", - "Resolving deltas: 100% (59/59), done.\n" + "remote: Enumerating objects: 314, done.\u001b[K\n", + "remote: Counting objects: 100% (314/314), done.\u001b[K\n", + "remote: Compressing objects: 100% (254/254), done.\u001b[K\n", + "remote: Total 314 (delta 71), reused 184 (delta 36), pack-reused 0 (from 0)\u001b[K\n", + "Receiving objects: 100% (314/314), 1.47 MiB | 3.95 MiB/s, done.\n", + "Resolving deltas: 100% (71/71), done.\n" ] } ], @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -70,45 +70,68 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (2.0.0)\n", + "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (0.5.1+37.g96f7e31.dirty)\n", "Requirement already satisfied: numpy>=1.21.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (1.26.4)\n", - "Requirement already satisfied: holoscan~=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (2.9.0)\n", + "Requirement already satisfied: holoscan~=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (3.1.0)\n", + "Requirement already satisfied: holoscan-cli~=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (3.1.0)\n", "Requirement already satisfied: colorama>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (0.4.6)\n", - "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.4.1)\n", - "Requirement already satisfied: pip>22.0.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (25.0)\n", - "Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (13.3.0)\n", - "Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.1)\n", - "Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.60.1)\n", - "Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.5)\n", - "Requirement already satisfied: packaging>=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (24.2)\n", - "Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.0.2)\n", - "Requirement already satisfied: requests<3.0,>=2.31.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (2.32.3)\n", - "Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.1.1)\n", - "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.0.6)\n", - "Requirement already satisfied: typing-extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.12.2)\n", - "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk) (0.8.3)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk) (3.0.2)\n", - "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.10.21)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (4.67.1)\n", - "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.15.1)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.4.1)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.10)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2.3.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2024.12.14)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk) (3.17.0)\n", - "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (8.1.8)\n", - "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.5.4)\n", - "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (13.9.4)\n", - "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (3.0.0)\n", - "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (2.19.1)\n", - "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.1.2)\n" + "Requirement already satisfied: tritonclient>=2.53.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.56.0)\n", + "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.4.2)\n", + "Requirement already satisfied: pip>22.0.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (25.0.1)\n", + "Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (13.4.1)\n", + "Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (3.1.1)\n", + "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (0.0.6)\n", + "Requirement already satisfied: Jinja2<4.0.0,>=3.1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (3.1.6)\n", + "Requirement already satisfied: packaging<24.0,>=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (23.2)\n", + "Requirement already satisfied: psutil<7.0.0,>=6.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (6.1.1)\n", + "Requirement already satisfied: python-on-whales<0.61.0,>=0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (0.60.1)\n", + "Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (6.0.2)\n", + "Requirement already satisfied: requests<3.0.0,>=2.31.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (2.32.3)\n", + "Requirement already satisfied: python-rapidjson>=0.9.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.20)\n", + "Requirement already satisfied: urllib3>=2.0.7 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.4.0)\n", + "Requirement already satisfied: aiohttp<4.0.0,>=3.8.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (3.11.18)\n", + "Requirement already satisfied: cuda-python in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (12.8.0)\n", + "Requirement already satisfied: geventhttpclient>=2.3.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.3.3)\n", + "Requirement already satisfied: grpcio<1.68,>=1.63.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.67.1)\n", + "Requirement already satisfied: protobuf<6.0dev,>=5.26.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (5.29.4)\n", + "Requirement already satisfied: typing_extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.13.2)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.6.1)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.3.2)\n", + "Requirement already satisfied: async-timeout<6.0,>=4.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (5.0.1)\n", + "Requirement already satisfied: attrs>=17.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (25.3.0)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.6.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (6.4.3)\n", + "Requirement already satisfied: propcache>=0.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (0.3.1)\n", + "Requirement already satisfied: yarl<2.0,>=1.17.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.20.0)\n", + "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=3.0->monai-deploy-app-sdk) (0.8.3)\n", + "Requirement already satisfied: gevent in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (25.4.1)\n", + "Requirement already satisfied: certifi in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2025.1.31)\n", + "Requirement already satisfied: brotli in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.1.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2<4.0.0,>=3.1.5->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.0.2)\n", + "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (1.10.21)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (4.67.1)\n", + "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (0.15.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.4.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.10)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=3.0->monai-deploy-app-sdk) (3.18.0)\n", + "Requirement already satisfied: cuda-bindings~=12.8.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cuda-python->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (12.8.0)\n", + "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (8.1.8)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (1.5.4)\n", + "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (14.0.0)\n", + "Requirement already satisfied: greenlet>=3.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (3.2.0)\n", + "Requirement already satisfied: zope.event in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (5.0)\n", + "Requirement already satisfied: zope.interface in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (7.2)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (2.19.1)\n", + "Requirement already satisfied: setuptools in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from zope.event->gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (79.0.0)\n", + "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (0.1.2)\n" ] } ], @@ -126,7 +149,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -134,14 +157,14 @@ "output_type": "stream", "text": [ "Requirement already satisfied: monai in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (1.4.0)\n", - "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (11.1.0)\n", + "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (11.2.1)\n", "Requirement already satisfied: numpy<2.0,>=1.24 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (1.26.4)\n", - "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.5.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.17.0)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.12.2)\n", + "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.6.0)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.18.0)\n", + "Requirement already satisfied: typing-extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.13.2)\n", "Requirement already satisfied: networkx in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.4.2)\n", - "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.5)\n", - "Requirement already satisfied: fsspec in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2024.12.0)\n", + "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.6)\n", + "Requirement already satisfied: fsspec in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2025.3.2)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", @@ -151,10 +174,11 @@ "Requirement already satisfied: nvidia-curand-cu12==10.3.5.147 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (10.3.5.147)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.6.1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.6.1.9)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.3.1.170 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.3.1.170)\n", + "Requirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (0.6.2)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2.21.5)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", - "Requirement already satisfied: triton==3.1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.0)\n", + "Requirement already satisfied: triton==3.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.2.0)\n", "Requirement already satisfied: sympy==1.13.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (1.13.1)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from sympy==1.13.1->torch>=1.9->monai) (1.3.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from jinja2->torch>=1.9->monai) (3.0.2)\n" @@ -179,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -193,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -233,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -269,456 +293,30 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:12:36,857] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 12:12:36,871] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 12:12:36,871] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", - "[2025-01-29 12:12:36,871] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2025-01-29 12:12:36,871] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-29 12:12:36,871] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-29 12:12:36,872] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", - "[2025-01-29 12:12:36,874] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 12:12:36,874] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 12:12:36,876] [DEBUG] (common) - \n", - "=============== Begin app.json ===============\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"command\": \"[\\\"python3\\\", \\\"/opt/holoscan/app/mednist_classifier_monaideploy.py\\\"]\",\n", - " \"environment\": {\n", - " \"HOLOSCAN_APPLICATION\": \"/opt/holoscan/app\",\n", - " \"HOLOSCAN_INPUT_PATH\": \"input/\",\n", - " \"HOLOSCAN_OUTPUT_PATH\": \"output/\",\n", - " \"HOLOSCAN_WORKDIR\": \"/var/holoscan\",\n", - " \"HOLOSCAN_MODEL_PATH\": \"/opt/holoscan/models\",\n", - " \"HOLOSCAN_CONFIG_PATH\": \"/var/holoscan/app.yaml\",\n", - " \"HOLOSCAN_APP_MANIFEST_PATH\": \"/etc/holoscan/app.json\",\n", - " \"HOLOSCAN_PKG_MANIFEST_PATH\": \"/etc/holoscan/pkg.json\",\n", - " \"HOLOSCAN_DOCS_PATH\": \"/opt/holoscan/docs\",\n", - " \"HOLOSCAN_LOGS_PATH\": \"/var/holoscan/logs\"\n", - " },\n", - " \"input\": {\n", - " \"path\": \"input/\",\n", - " \"formats\": null\n", - " },\n", - " \"liveness\": null,\n", - " \"output\": {\n", - " \"path\": \"output/\",\n", - " \"formats\": null\n", - " },\n", - " \"readiness\": null,\n", - " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", - " \"timeout\": 0,\n", - " \"version\": 1.0,\n", - " \"workingDirectory\": \"/var/holoscan\"\n", - "}\n", - "================ End app.json ================\n", - " \n", - "[2025-01-29 12:12:36,876] [DEBUG] (common) - \n", - "=============== Begin pkg.json ===============\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"applicationRoot\": \"/opt/holoscan/app\",\n", - " \"modelRoot\": \"/opt/holoscan/models\",\n", - " \"models\": {\n", - " \"model\": \"/opt/holoscan/models/model\"\n", - " },\n", - " \"resources\": {\n", - " \"cpu\": 1,\n", - " \"gpu\": 1,\n", - " \"memory\": \"1Gi\",\n", - " \"gpuMemory\": \"1Gi\"\n", - " },\n", - " \"version\": 1.0,\n", - " \"platformConfig\": \"dgpu\"\n", - "}\n", - "================ End pkg.json ================\n", - " \n", - "[2025-01-29 12:12:36,901] [DEBUG] (packager.builder) - \n", - "========== Begin Build Parameters ==========\n", - "{'additional_lib_paths': '',\n", - " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml'),\n", - " 'app_dir': PosixPath('/opt/holoscan/app'),\n", - " 'app_json': '/etc/holoscan/app.json',\n", - " 'application': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py'),\n", - " 'application_directory': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy'),\n", - " 'application_type': 'PythonFile',\n", - " 'build_cache': PosixPath('/home/mqin/.holoscan_build_cache'),\n", - " 'cmake_args': '',\n", - " 'command': '[\"python3\", '\n", - " '\"/opt/holoscan/app/mednist_classifier_monaideploy.py\"]',\n", - " 'command_filename': 'mednist_classifier_monaideploy.py',\n", - " 'config_file_path': PosixPath('/var/holoscan/app.yaml'),\n", - " 'docs_dir': PosixPath('/opt/holoscan/docs'),\n", - " 'full_input_path': PosixPath('/var/holoscan/input'),\n", - " 'full_output_path': PosixPath('/var/holoscan/output'),\n", - " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", - " 'includes': [],\n", - " 'input_dir': 'input/',\n", - " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", - " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", - " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", - " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", - " 'no_cache': False,\n", - " 'output_dir': 'output/',\n", - " 'pip_packages': None,\n", - " 'pkg_json': '/etc/holoscan/pkg.json',\n", - " 'requirements_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/requirements.txt'),\n", - " 'sdk': ,\n", - " 'sdk_type': 'monai-deploy',\n", - " 'tarball_output': None,\n", - " 'timeout': 0,\n", - " 'title': 'MONAI Deploy App Package - MedNIST Classifier App',\n", - " 'uid': 1000,\n", - " 'username': 'holoscan',\n", - " 'version': 1.0,\n", - " 'working_dir': PosixPath('/var/holoscan')}\n", - "=========== End Build Parameters ===========\n", - "\n", - "[2025-01-29 12:12:36,902] [DEBUG] (packager.builder) - \n", - "========== Begin Platform Parameters ==========\n", - "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", - " 'build_image': None,\n", - " 'cuda_deb_arch': 'x86_64',\n", - " 'custom_base_image': False,\n", - " 'custom_holoscan_sdk': False,\n", - " 'custom_monai_deploy_sdk': False,\n", - " 'gpu_type': 'dgpu',\n", - " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", - " 'monai_deploy_sdk_file': None,\n", - " 'monai_deploy_sdk_filename': None,\n", - " 'tag': 'mednist_app:1.0',\n", - " 'target_arch': 'x86_64'}\n", - "=========== End Platform Parameters ===========\n", - "\n", - "[2025-01-29 12:12:36,919] [DEBUG] (packager.builder) - \n", - "========== Begin Dockerfile ==========\n", - "\n", - "ARG GPU_TYPE=dgpu\n", - "\n", - "\n", - "\n", - "\n", - "FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04 AS base\n", - "\n", - "RUN apt-get update \\\n", - " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", - " curl \\\n", - " jq \\\n", - " && rm -rf /var/lib/apt/lists/*\n", - "\n", - "\n", - "\n", - "\n", - "# FROM base AS mofed-installer\n", - "# ARG MOFED_VERSION=23.10-2.1.3.1\n", - "\n", - "# # In a container, we only need to install the user space libraries, though the drivers are still\n", - "# # needed on the host.\n", - "# # Note: MOFED's installation is not easily portable, so we can't copy the output of this stage\n", - "# # to our final stage, but must inherit from it. For that reason, we keep track of the build/install\n", - "# # only dependencies in the `MOFED_DEPS` variable (parsing the output of `--check-deps-only`) to\n", - "# # remove them in that same layer, to ensure they are not propagated in the final image.\n", - "# WORKDIR /opt/nvidia/mofed\n", - "# ARG MOFED_INSTALL_FLAGS=\"--dpdk --with-mft --user-space-only --force --without-fw-update\"\n", - "# RUN UBUNTU_VERSION=$(cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d= -f2) \\\n", - "# && OFED_PACKAGE=\"MLNX_OFED_LINUX-${MOFED_VERSION}-ubuntu${UBUNTU_VERSION}-$(uname -m)\" \\\n", - "# && curl -S -# -o ${OFED_PACKAGE}.tgz -L \\\n", - "# https://www.mellanox.com/downloads/ofed/MLNX_OFED-${MOFED_VERSION}/${OFED_PACKAGE}.tgz \\\n", - "# && tar xf ${OFED_PACKAGE}.tgz \\\n", - "# && MOFED_INSTALLER=$(find . -name mlnxofedinstall -type f -executable -print) \\\n", - "# && MOFED_DEPS=$(${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} --check-deps-only 2>/dev/null | tail -n1 | cut -d' ' -f3-) \\\n", - "# && apt-get update \\\n", - "# && apt-get install --no-install-recommends -y ${MOFED_DEPS} \\\n", - "# && ${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} \\\n", - "# && rm -r * \\\n", - "# && apt-get remove -y ${MOFED_DEPS} && apt-get autoremove -y \\\n", - "# && rm -rf /var/lib/apt/lists/*\n", - "\n", - "FROM base AS release\n", - "ENV DEBIAN_FRONTEND=noninteractive\n", - "ENV TERM=xterm-256color\n", - "\n", - "ARG GPU_TYPE\n", - "ARG UNAME\n", - "ARG UID\n", - "ARG GID\n", - "\n", - "RUN mkdir -p /etc/holoscan/ \\\n", - " && mkdir -p /opt/holoscan/ \\\n", - " && mkdir -p /var/holoscan \\\n", - " && mkdir -p /opt/holoscan/app \\\n", - " && mkdir -p /var/holoscan/input \\\n", - " && mkdir -p /var/holoscan/output\n", - "\n", - "LABEL base=\"nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\"\n", - "LABEL tag=\"mednist_app:1.0\"\n", - "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", - "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", - "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", - "\n", - "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", - "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", - "ENV HOLOSCAN_WORKDIR=/var/holoscan\n", - "ENV HOLOSCAN_APPLICATION=/opt/holoscan/app\n", - "ENV HOLOSCAN_TIMEOUT=0\n", - "ENV HOLOSCAN_MODEL_PATH=/opt/holoscan/models\n", - "ENV HOLOSCAN_DOCS_PATH=/opt/holoscan/docs\n", - "ENV HOLOSCAN_CONFIG_PATH=/var/holoscan/app.yaml\n", - "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", - "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", - "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "# If torch is installed, we can skip installing Python\n", - "ENV PYTHON_VERSION=3.10.6-1~22.04\n", - "ENV PYTHON_PIP_VERSION=22.0.2+dfsg-*\n", - "\n", - "RUN apt update \\\n", - " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", - " python3-minimal=${PYTHON_VERSION} \\\n", - " libpython3-stdlib=${PYTHON_VERSION} \\\n", - " python3=${PYTHON_VERSION} \\\n", - " python3-venv=${PYTHON_VERSION} \\\n", - " python3-pip=${PYTHON_PIP_VERSION} \\\n", - " && rm -rf /var/lib/apt/lists/*\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "RUN groupadd -f -g $GID $UNAME\n", - "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", - "RUN chown -R holoscan /var/holoscan && \\\n", - " chown -R holoscan /var/holoscan/input && \\\n", - " chown -R holoscan /var/holoscan/output\n", - "\n", - "# Set the working directory\n", - "WORKDIR /var/holoscan\n", - "\n", - "# Copy HAP/MAP tool script\n", - "COPY ./tools /var/holoscan/tools\n", - "RUN chmod +x /var/holoscan/tools\n", - "\n", - "# Set the working directory\n", - "WORKDIR /var/holoscan\n", - "\n", - "USER $UNAME\n", - "\n", - "ENV PATH=/home/${UNAME}/.local/bin:/opt/nvidia/holoscan/bin:$PATH\n", - "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/${UNAME}/.local/lib/python3.10/site-packages/holoscan/lib\n", - "\n", - "COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "\n", - "RUN pip install --upgrade pip\n", - "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "\n", - "\n", - "# Install MONAI Deploy App SDK\n", - "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", - "\n", - "\n", - "COPY ./models /opt/holoscan/models\n", - "\n", - "\n", - "COPY ./map/app.json /etc/holoscan/app.json\n", - "COPY ./app.config /var/holoscan/app.yaml\n", - "COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "\n", - "COPY ./app /opt/holoscan/app\n", - "\n", - "\n", - "ENTRYPOINT [\"/var/holoscan/tools\"]\n", - "=========== End Dockerfile ===========\n", - "\n", - "[2025-01-29 12:12:36,920] [INFO] (packager.builder) - \n", - "===============================================================================\n", - "Building image for: x64-workstation\n", - " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - " Build Image: N/A\n", - " Cache: Enabled\n", - " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", - " MONAI Deploy App SDK Package: N/A\n", - " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", - " SDK: monai-deploy\n", - " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Included features/dependencies: N/A\n", - " \n", - "[2025-01-29 12:12:37,236] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 12:12:37,236] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", - "\n", - "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 4.57kB done\n", - "#1 DONE 0.1s\n", - "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 DONE 0.1s\n", - "\n", - "#3 [internal] load .dockerignore\n", - "#3 transferring context: 1.80kB done\n", - "#3 DONE 0.1s\n", - "\n", - "#4 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#4 ...\n", - "\n", - "#5 [internal] load build context\n", - "#5 DONE 0.0s\n", - "\n", - "#6 importing cache manifest from local:16465729945619348226\n", - "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#7 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#7 DONE 0.0s\n", - "\n", - "#4 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#4 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#4 DONE 0.4s\n", - "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 28.60MB 0.2s done\n", - "#5 DONE 0.3s\n", - "\n", - "#8 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", - "#8 CACHED\n", - "\n", - "#9 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#9 CACHED\n", - "\n", - "#10 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", - "#10 CACHED\n", - "\n", - "#11 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#11 CACHED\n", - "\n", - "#12 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#12 CACHED\n", - "\n", - "#13 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", - "#13 CACHED\n", - "\n", - "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", - "#14 CACHED\n", - "\n", - "#15 [release 9/18] WORKDIR /var/holoscan\n", - "#15 CACHED\n", - "\n", - "#16 [release 7/18] COPY ./tools /var/holoscan/tools\n", - "#16 CACHED\n", - "\n", - "#17 [release 6/18] WORKDIR /var/holoscan\n", - "#17 CACHED\n", - "\n", - "#18 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", - "#18 CACHED\n", - "\n", - "#19 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#19 CACHED\n", - "\n", - "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 CACHED\n", - "\n", - "#21 [release 8/18] RUN chmod +x /var/holoscan/tools\n", - "#21 CACHED\n", - "\n", - "#22 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#22 CACHED\n", - "\n", - "#23 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", - "#23 CACHED\n", - "\n", - "#24 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#24 CACHED\n", - "\n", - "#25 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", - "#25 CACHED\n", - "\n", - "#26 [release 18/18] COPY ./app /opt/holoscan/app\n", - "#26 CACHED\n", - "\n", - "#27 exporting to docker image format\n", - "#27 exporting layers done\n", - "#27 exporting manifest sha256:0b41598c260304f5f4973c45507027d6f6d311cf96b376966f1bb76389f67124 0.0s done\n", - "#27 exporting config sha256:709aec1f6ab81acd9aca94f56c56022d894fd418e507ce39c07cfa36c5d1df5e 0.0s done\n", - "#27 sending tarball\n", - "#27 ...\n", - "\n", - "#28 importing to docker\n", - "#28 DONE 0.3s\n", - "\n", - "#27 exporting to docker image format\n", - "#27 sending tarball 42.6s done\n", - "#27 DONE 42.6s\n", - "\n", - "#29 exporting cache to client directory\n", - "#29 preparing build cache for export\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", - "#29 preparing build cache for export 0.2s done\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#29 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#29 writing layer sha256:1aec4523578214a9e9ce44e1d35ef14baaa0adc445ee1d6c04b7a1410286be38 done\n", - "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#29 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#29 writing layer sha256:2662727f69a3c4fe16ed7b9563dc330c8e3d78c0e96c6f7452c9feebf4240230 done\n", - "#29 writing layer sha256:2c27de1203ae9e9310d46119db6142d91f2dc9f3696febdeda1f19fc94cc322e done\n", - "#29 writing layer sha256:2eab43e0230c8932e1ecc65ee0bfb04e09997d2fe628464a9aeee2e7c3342e70 done\n", - "#29 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#29 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#29 writing layer sha256:3d39307d2f870435b87759c9c8fc19aef39983c9770bacebcfcffe4995566ace done\n", - "#29 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#29 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#29 writing layer sha256:661c1acfe226bb081b6c704a60812b6478d91d96b5fd54809955559a13e1de7a done\n", - "#29 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#29 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#29 writing layer sha256:9c13069733b0b63267a044a5a9096728e6abacbc29bc2c95c5f612d18fddd5c0 done\n", - "#29 writing layer sha256:a86de304afb6316ba8fdb2348e518ea07b80a2bae0094710c44433a2f21f0179 done\n", - "#29 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#29 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#29 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#29 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#29 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#29 writing layer sha256:db35cf0f285944390b7654050f2f598898d655184084cf06a69ec9b97ce0aef7 done\n", - "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#29 writing config sha256:5dc9836ff3abdef93b2f148be23a0b066d0a7a2852c914b765917464c3015748 done\n", - "#29 writing cache manifest sha256:1010d1046d6cbc0e3d13f82a6ae20739105dc9f11c703119f1961a90c2f5851e done\n", - "#29 DONE 0.2s\n", - "[2025-01-29 12:13:21,748] [INFO] (packager) - Build Summary:\n", - "\n", - "Platform: x64-workstation/dgpu\n", - " Status: Succeeded\n", - " Docker Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Tarball: None\n" + "usage: monai-deploy package [-h] [-l {DEBUG,INFO,WARN,ERROR,CRITICAL}]\n", + " --config CONFIG [--docs DOCS] [--models MODELS]\n", + " --platform PLATFORM [--add ADDITIONAL_LIBS]\n", + " [--timeout TIMEOUT] [--version VERSION]\n", + " [--base-image BASE_IMAGE]\n", + " [--build-image BUILD_IMAGE]\n", + " [--includes [{debug,holoviz,torch,onnx} ...]]\n", + " [--build-cache BUILD_CACHE]\n", + " [--cmake-args CMAKE_ARGS]\n", + " [--holoscan-sdk-file HOLOSCAN_SDK_FILE]\n", + " [--monai-deploy-sdk-file MONAI_DEPLOY_SDK_FILE]\n", + " [--no-cache] [--sdk SDK] [--source SOURCE]\n", + " [--sdk-version SDK_VERSION] [--output OUTPUT]\n", + " --tag TAG [--username USERNAME] [--uid UID]\n", + " [--gid GID]\n", + " application\n", + "monai-deploy package: error: argument --platform: x64-workstation is not a valid option for --platforms.\n" ] } ], @@ -737,17 +335,9 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 9, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 709aec1f6ab8 19 hours ago 8.62GB\n" - ] - } - ], + "outputs": [], "source": [ "!docker image ls | grep {tag_prefix}" ] @@ -766,7 +356,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -774,70 +364,14 @@ "output_type": "stream", "text": [ "Display manifests and extract MAP contents to the host folder, ./export\n", + "Unable to find image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0' locally\n", + "docker: Error response from daemon: pull access denied for mednist_app-x64-workstation-dgpu-linux-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n", "\n", - "============================== app.json ==============================\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"command\": \"[\\\"python3\\\", \\\"/opt/holoscan/app/mednist_classifier_monaideploy.py\\\"]\",\n", - " \"environment\": {\n", - " \"HOLOSCAN_APPLICATION\": \"/opt/holoscan/app\",\n", - " \"HOLOSCAN_INPUT_PATH\": \"input/\",\n", - " \"HOLOSCAN_OUTPUT_PATH\": \"output/\",\n", - " \"HOLOSCAN_WORKDIR\": \"/var/holoscan\",\n", - " \"HOLOSCAN_MODEL_PATH\": \"/opt/holoscan/models\",\n", - " \"HOLOSCAN_CONFIG_PATH\": \"/var/holoscan/app.yaml\",\n", - " \"HOLOSCAN_APP_MANIFEST_PATH\": \"/etc/holoscan/app.json\",\n", - " \"HOLOSCAN_PKG_MANIFEST_PATH\": \"/etc/holoscan/pkg.json\",\n", - " \"HOLOSCAN_DOCS_PATH\": \"/opt/holoscan/docs\",\n", - " \"HOLOSCAN_LOGS_PATH\": \"/var/holoscan/logs\"\n", - " },\n", - " \"input\": {\n", - " \"path\": \"input/\",\n", - " \"formats\": null\n", - " },\n", - " \"liveness\": null,\n", - " \"output\": {\n", - " \"path\": \"output/\",\n", - " \"formats\": null\n", - " },\n", - " \"readiness\": null,\n", - " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", - " \"timeout\": 0,\n", - " \"version\": 1,\n", - " \"workingDirectory\": \"/var/holoscan\"\n", - "}\n", - "\n", - "============================== pkg.json ==============================\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"applicationRoot\": \"/opt/holoscan/app\",\n", - " \"modelRoot\": \"/opt/holoscan/models\",\n", - " \"models\": {\n", - " \"model\": \"/opt/holoscan/models/model\"\n", - " },\n", - " \"resources\": {\n", - " \"cpu\": 1,\n", - " \"gpu\": 1,\n", - " \"memory\": \"1Gi\",\n", - " \"gpuMemory\": \"1Gi\"\n", - " },\n", - " \"version\": 1,\n", - " \"platformConfig\": \"dgpu\"\n", - "}\n", - "\n", - "2025-01-29 20:13:24 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "Run 'docker run --help' for more information\n", + "Unable to find image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0' locally\n", + "docker: Error response from daemon: pull access denied for mednist_app-x64-workstation-dgpu-linux-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n", "\n", - "2025-01-29 20:13:24 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 20:13:24 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 20:13:24 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", - "\n", - "2025-01-29 20:13:24 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", - "\n", - "2025-01-29 20:13:24 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 20:13:24 [INFO] '/opt/holoscan/docs/' cannot be found.\n", - "\n", - "app config models\n" + "Run 'docker run --help' for more information\n" ] } ], @@ -860,92 +394,28 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:13:26,378] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", - "\n", - "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", - "\n", - "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", - "\n", - "[2025-01-29 12:13:26,457] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmp37cky0tg/app.json\n", - "Successfully copied 2.05kB to /tmp/tmp37cky0tg/pkg.json\n", - "8b09681d6e2452afa9a9506bd30dc868461412ea13e53a3913f9054fe877e4e0\n", - "[2025-01-29 12:13:26,739] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", - "\n", - "[2025-01-29 12:13:26,739] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", - "\n", - "[2025-01-29 12:13:27,109] [INFO] (common) - Launching container (6900c4ea8775) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: frosty_gould\n", - " host name: mingq-dt\n", - " network: host\n", - " user: 1000:1000\n", - " ulimits: memlock=-1:-1, stack=67108864:67108864\n", - " cap_add: CAP_SYS_PTRACE\n", - " ipc mode: host\n", - " shared memory size: 67108864\n", - " devices: \n", - " group_add: 44\n", - "2025-01-29 20:13:27 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + "[2025-04-22 10:01:00,178] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 10:01:00,178] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-04-22 10:01:00,179] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "[2025-04-22 10:01:00,179] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 20:13:32,718] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'])\n", - "\n", - "[2025-01-29 20:13:32,723] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", - "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", - "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", - "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - "\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", - "\n", - "[2025-01-29 20:13:34,583] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "\n", - "[2025-01-29 20:13:34,583] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "\n", - "[2025-01-29 20:13:34,586] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "\n", - "[2025-01-29 20:13:34,589] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.31374249995216483316246551805036524135.dcm\n", - "\n", - "[2025-01-29 20:13:34,590] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.31374249995216483316246551805036524135.dcm\n", - "\n", - "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "\n", - "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "\n", - "[info] [gxf_executor.cpp:294] Destroying context\n", - "\n", - "AbdomenCT\n", - "\n", - "[2025-01-29 12:13:35,983] [INFO] (common) - Container 'frosty_gould'(6900c4ea8775) exited.\n" + "[2025-04-22 10:01:00,206] [INFO] (common) - Attempting to pull image mednist_app-x64-workstation-dgpu-linux-amd64:1.0..\n", + "Error response from daemon: pull access denied for mednist_app-x64-workstation-dgpu-linux-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n", + "[2025-04-22 10:01:01,166] [ERROR] (common) - The docker command executed was `/usr/bin/docker image pull mednist_app-x64-workstation-dgpu-linux-amd64:1.0`.\n", + "It returned with code 1\n", + "The content of stdout can be found above the stacktrace (it wasn't captured).\n", + "The content of stderr can be found above the stacktrace (it wasn't captured).\n", + "[2025-04-22 10:01:01,166] [ERROR] (runner) - Unable to fetch required image.\n", + "[2025-04-22 10:01:01,167] [ERROR] (runner) - Execution Aborted\n" ] } ], @@ -957,14 +427,14 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\"AbdomenCT\"" + "cat: output/output.json: No such file or directory\n" ] } ], @@ -1010,7 +480,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -1041,7 +511,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -1112,7 +582,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -1251,7 +721,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -1302,31 +772,31 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:13:36,663] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 12:13:36,682] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:01:06,211] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 10:01:06,224] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", - "[2025-01-29 12:13:37,924] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:37,926] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:37,928] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - "[2025-01-29 12:13:37,936] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "[2025-01-29 12:13:37,945] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.73614944052626475782727074691876362838.dcm\n", - "[2025-01-29 12:13:37,958] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.73614944052626475782727074691876362838.dcm\n" + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:203.)\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", + "[2025-04-22 10:01:07,561] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:07,562] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:07,565] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + " warn_and_log(msg)\n", + "[2025-04-22 10:01:07,575] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-04-22 10:01:07,581] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.59762034317112105131069375575619402726.dcm\n", + "[2025-04-22 10:01:07,585] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.59762034317112105131069375575619402726.dcm\n" ] }, { @@ -1342,9 +812,9 @@ "text": [ "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[info] [gxf_executor.cpp:294] Destroying context\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[info] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1355,7 +825,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1389,7 +859,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -1399,7 +869,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -1664,63 +1134,59 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:13:46,068] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", - "[2025-01-29 12:13:46,073] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:01:12,273] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, triton_server_netloc=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", + "[2025-04-22 10:01:12,278] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=), triton_server_netloc=\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:203.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", - "[2025-01-29 12:13:47,618] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", + "[2025-04-22 10:01:13,572] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", "\n", - "[2025-01-29 12:13:47,618] [DEBUG] (root) - Writing DICOM common modules...\n", - "[2025-01-29 12:13:47,619] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:47,619] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:47,620] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "[2025-04-22 10:01:13,572] [DEBUG] (root) - Writing DICOM common modules...\n", + "[2025-04-22 10:01:13,573] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:13,573] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:13,574] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warn_and_log(msg)\n", - "[2025-01-29 12:13:47,626] [DEBUG] (root) - DICOM common modules written:\n", + "[2025-04-22 10:01:13,576] [DEBUG] (root) - DICOM common modules written:\n", "Dataset.file_meta -------------------------------\n", "(0002,0000) File Meta Information Group Length UL: 198\n", "(0002,0001) File Meta Information Version OB: b'01'\n", "(0002,0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", + "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", "(0002,0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002,0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002,0013) Implementation Version Name SH: '2.0.0'\n", + "(0002,0013) Implementation Version Name SH: '0.5.1+37.g96f7e'\n", "-------------------------------------------------\n", "(0008,0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008,0012) Instance Creation Date DA: '20250129'\n", - "(0008,0013) Instance Creation Time TM: '121347'\n", + "(0008,0012) Instance Creation Date DA: '20250422'\n", + "(0008,0013) Instance Creation Time TM: '100113'\n", "(0008,0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", - "(0008,0020) Study Date DA: '20250129'\n", - "(0008,0021) Series Date DA: '20250129'\n", - "(0008,0023) Content Date DA: '20250129'\n", - "(0008,002A) Acquisition DateTime DT: '20250129121347'\n", - "(0008,0030) Study Time TM: '121347'\n", - "(0008,0031) Series Time TM: '121347'\n", - "(0008,0033) Content Time TM: '121347'\n", + "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", + "(0008,0020) Study Date DA: '20250422'\n", + "(0008,0021) Series Date DA: '20250422'\n", + "(0008,0023) Content Date DA: '20250422'\n", + "(0008,002A) Acquisition DateTime DT: '20250422100113'\n", + "(0008,0030) Study Time TM: '100113'\n", + "(0008,0031) Series Time TM: '100113'\n", + "(0008,0033) Content Time TM: '100113'\n", "(0008,0050) Accession Number SH: ''\n", "(0008,0060) Modality CS: 'SR'\n", "(0008,0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", "(0008,0090) Referring Physician's Name PN: ''\n", - "(0008,0201) Timezone Offset From UTC SH: '-0800'\n", + "(0008,0201) Timezone Offset From UTC SH: '-0700'\n", "(0008,1030) Study Description LO: 'AI results.'\n", "(0008,103E) Series Description LO: 'CAUTION: Not for Diagnostic Use, for research use only.'\n", "(0008,1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", @@ -1730,7 +1196,7 @@ "(0010,0030) Patient's Birth Date DA: ''\n", "(0010,0040) Patient's Sex CS: ''\n", "(0018,0015) Body Part Examined CS: ''\n", - "(0018,1020) Software Versions LO: '2.0.0'\n", + "(0018,1020) Software Versions LO: '0.5.1+37.g96f7e'\n", "(0018,A001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008,0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008,1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1742,38 +1208,38 @@ " (0008,0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.46747993953820320366351594900569871942\n", - "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.86323530137357157956886829965721763612\n", + "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.21427650624285250793329047854027764031\n", + "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.53141607669515853472048821908030378483\n", "(0020,0010) Study ID SH: '1'\n", - "(0020,0011) Series Number IS: '5312'\n", + "(0020,0011) Series Number IS: '1679'\n", "(0020,0013) Instance Number IS: '1'\n", "(0040,1001) Requested Procedure ID SH: ''\n", - "[2025-01-29 12:13:47,627] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", + "[2025-04-22 10:01:13,577] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", "(0002,0000) File Meta Information Group Length UL: 198\n", "(0002,0001) File Meta Information Version OB: b'01'\n", "(0002,0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", + "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", "(0002,0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002,0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002,0013) Implementation Version Name SH: '2.0.0'\n", + "(0002,0013) Implementation Version Name SH: '0.5.1+37.g96f7e'\n", "-------------------------------------------------\n", "(0008,0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008,0012) Instance Creation Date DA: '20250129'\n", - "(0008,0013) Instance Creation Time TM: '121347'\n", + "(0008,0012) Instance Creation Date DA: '20250422'\n", + "(0008,0013) Instance Creation Time TM: '100113'\n", "(0008,0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", - "(0008,0020) Study Date DA: '20250129'\n", - "(0008,0021) Series Date DA: '20250129'\n", - "(0008,0023) Content Date DA: '20250129'\n", - "(0008,002A) Acquisition DateTime DT: '20250129121347'\n", - "(0008,0030) Study Time TM: '121347'\n", - "(0008,0031) Series Time TM: '121347'\n", - "(0008,0033) Content Time TM: '121347'\n", + "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", + "(0008,0020) Study Date DA: '20250422'\n", + "(0008,0021) Series Date DA: '20250422'\n", + "(0008,0023) Content Date DA: '20250422'\n", + "(0008,002A) Acquisition DateTime DT: '20250422100113'\n", + "(0008,0030) Study Time TM: '100113'\n", + "(0008,0031) Series Time TM: '100113'\n", + "(0008,0033) Content Time TM: '100113'\n", "(0008,0050) Accession Number SH: ''\n", "(0008,0060) Modality CS: 'SR'\n", "(0008,0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", "(0008,0090) Referring Physician's Name PN: ''\n", - "(0008,0201) Timezone Offset From UTC SH: '-0800'\n", + "(0008,0201) Timezone Offset From UTC SH: '-0700'\n", "(0008,1030) Study Description LO: 'AI results.'\n", "(0008,103E) Series Description LO: 'Not for clinical use. The result is for research use only.'\n", "(0008,1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", @@ -1783,7 +1249,7 @@ "(0010,0030) Patient's Birth Date DA: ''\n", "(0010,0040) Patient's Sex CS: ''\n", "(0018,0015) Body Part Examined CS: ''\n", - "(0018,1020) Software Versions LO: '2.0.0'\n", + "(0018,1020) Software Versions LO: '0.5.1+37.g96f7e'\n", "(0018,A001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008,0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008,1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1795,10 +1261,10 @@ " (0008,0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.46747993953820320366351594900569871942\n", - "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.86323530137357157956886829965721763612\n", + "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.21427650624285250793329047854027764031\n", + "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.53141607669515853472048821908030378483\n", "(0020,0010) Study ID SH: '1'\n", - "(0020,0011) Series Number IS: '5312'\n", + "(0020,0011) Series Number IS: '1679'\n", "(0020,0013) Instance Number IS: '1'\n", "(0040,1001) Requested Procedure ID SH: ''\n", "(0040,A040) Value Type CS: 'CONTAINER'\n", @@ -1819,14 +1285,14 @@ " ---------\n", " (0040,A160) Text Value UT: 'AbdomenCT'\n", " ---------\n", - "[2025-01-29 12:13:47,627] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "[2025-01-29 12:13:47,635] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428.dcm\n", - "[2025-01-29 12:13:47,636] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428.dcm\n", + "[2025-04-22 10:01:13,577] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-04-22 10:01:13,580] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229.dcm\n", + "[2025-04-22 10:01:13,581] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229.dcm\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1836,7 +1302,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1863,7 +1329,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -1893,7 +1359,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -1902,17 +1368,6 @@ "text": [ "Writing mednist_app/requirements.txt\n" ] - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", - "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", - "\u001b[1;31mClick here for more info. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -1922,8 +1377,7 @@ "pydicom>=2.3.0\n", "highdicom>=0.18.2\n", "SimpleITK>=2.0.0\n", - "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "setuptools>=59.5.0 # for pkg_resources\n" ] }, { diff --git a/notebooks/tutorials/02_mednist_app.ipynb b/notebooks/tutorials/02_mednist_app.ipynb index cb2371ae..f2ef775d 100644 --- a/notebooks/tutorials/02_mednist_app.ipynb +++ b/notebooks/tutorials/02_mednist_app.ipynb @@ -1201,7 +1201,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1219,13 +1219,12 @@ "pydicom>=2.3.0\n", "highdicom>=0.18.2\n", "SimpleITK>=2.0.0\n", - "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "setuptools>=59.5.0 # for pkg_resources\n" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1945,7 +1944,7 @@ "source": [ "tag_prefix = \"mednist_app\"\n", "\n", - "!monai-deploy package \"mednist_app/mednist_classifier_monaideploy.py\" -m {models_folder} -c \"mednist_app/app.yaml\" -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package \"mednist_app/mednist_classifier_monaideploy.py\" -m {models_folder} -c \"mednist_app/app.yaml\" -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { diff --git a/notebooks/tutorials/03_segmentation_app.ipynb b/notebooks/tutorials/03_segmentation_app.ipynb index ab0b9031..57886cc8 100644 --- a/notebooks/tutorials/03_segmentation_app.ipynb +++ b/notebooks/tutorials/03_segmentation_app.ipynb @@ -730,100 +730,113 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:30:17,208] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 14:30:17,220] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-29 14:30:17,222] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:06:42,869] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 10:06:42,879] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:06:42,880] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", - "[2025-01-29 14:30:17,274] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:30:17,612] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:30:17,613] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:06:42,916] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:06:43,413] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:06:43,414] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:30:17,614] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:17,614] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:17,615] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:30:17,616] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:17,617] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:30:17,618] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:30:17,619] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:17,620] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:17,622] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:30:17,623] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:17,624] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2025-01-29 14:30:17,625] [INFO] (root) - Series attribute ImageType value: None\n", - "[2025-01-29 14:30:17,626] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:18,261] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2025-01-29 14:30:18,262] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2025-01-29 14:30:18,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2025-01-29 14:30:18,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2025-01-29 14:30:18,265] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2025-01-29 14:30:18,266] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2025-01-29 14:30:18,268] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2025-01-29 14:30:18,269] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2025-01-29 14:30:18,271] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:18,272] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:18,273] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2025-01-29 14:30:18,275] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2025-01-29 14:30:18,276] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2025-01-29 14:30:18,277] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2025-01-29 14:30:18,279] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-04-22 10:06:43,416] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:43,417] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:43,418] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:06:43,420] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:43,421] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:06:43,422] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:06:43,426] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:43,427] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:43,429] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:43,430] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:43,432] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-04-22 10:06:43,434] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-04-22 10:06:43,436] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:43,437] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:06:43,438] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:43,438] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:43,669] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:06:43,735] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-04-22 10:06:43,737] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-04-22 10:06:43,737] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-04-22 10:06:43,738] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-04-22 10:06:43,739] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-04-22 10:06:43,739] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-04-22 10:06:43,740] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-04-22 10:06:43,740] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-04-22 10:06:43,741] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:43,742] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:43,743] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-04-22 10:06:43,744] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-04-22 10:06:43,745] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-04-22 10:06:43,746] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-04-22 10:06:43,747] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:18,282] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-04-22 10:06:43,749] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:18,283] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2025-01-29 14:30:18,284] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2025-01-29 14:30:18,285] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2025-01-29 14:30:18,286] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2025-01-29 14:30:18,290] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2025-01-29 14:30:18,291] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2025-01-29 14:30:18,292] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" + "[2025-04-22 10:06:43,750] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-04-22 10:06:43,751] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-04-22 10:06:43,754] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-04-22 10:06:43,755] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-04-22 10:06:43,756] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-04-22 10:06:43,757] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-04-22 10:06:43,758] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2025-01-29 14:30:19,501 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2025-01-29 14:30:23,998 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" + "2025-04-22 10:06:44,648 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[2025-01-29 14:30:26,134] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2025-01-29 14:30:26,142] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-04-22 10:06:46,578] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Input of shape: torch.Size([1, 1, 270, 270, 106])\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2025-04-22 10:06:47,732 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-04-22 10:06:49,272] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform length/batch size of output: 1\n", + "[2025-04-22 10:06:49,277] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pixel spacings for pred: tensor([0.7891, 0.7891, 1.5000], dtype=torch.float64)\n", + "[2025-04-22 10:06:49,408] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pred of shape: (1, 512, 512, 204)\n", + "[2025-04-22 10:06:49,448] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array of type shape: (204, 512, 512)\n", + "[2025-04-22 10:06:49,453] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:30:28,033] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:28,034] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:30:28,035] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:28,036] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:30:28,038] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:30:28,040] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:28,041] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:30:28,042] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:30:28,044] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:06:50,720] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:06:50,721] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:06:50,722] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:06:50,723] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:06:50,725] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:06:50,726] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:06:50,727] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:06:50,728] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:06:50,730] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:30:28,156] [INFO] (__main__.AISpleenSegApp) - End run\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:06:50,833] [INFO] (__main__.AISpleenSegApp) - End run\n" ] } ], @@ -1262,89 +1275,90 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:30:34,908] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2025-01-29 14:30:34,910] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-29 14:30:34,910] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:06:55,953] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['my_app'])\n", + "[2025-04-22 10:06:55,955] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:06:55,955] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", - "[2025-01-29 14:30:34,938] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:06:55,974] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:06:56,476] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:35,858] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2025-01-29 14:30:35,858] [INFO] (root) - Series attribute ImageType value: None\n", - "[2025-01-29 14:30:35,858] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:56,909] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", - "2025-01-29 14:30:37,548 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2025-01-29 14:30:41,063 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", - "[2025-01-29 14:30:42,975] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2025-01-29 14:30:42,981] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "2025-04-22 10:06:57,920 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "[2025-04-22 10:06:59,901] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Input of shape: torch.Size([1, 1, 270, 270, 106])\n", + "2025-04-22 10:07:00,973 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "[2025-04-22 10:07:02,569] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform length/batch size of output: 1\n", + "[2025-04-22 10:07:02,570] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pixel spacings for pred: tensor([0.7891, 0.7891, 1.5000], dtype=torch.float64)\n", + "[2025-04-22 10:07:02,697] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pred of shape: (1, 512, 512, 204)\n", + "[2025-04-22 10:07:02,820] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array of type shape: (204, 512, 512)\n", + "[2025-04-22 10:07:02,825] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:30:44,748] [INFO] (app.AISpleenSegApp) - End run\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:07:04,175] [INFO] (app.AISpleenSegApp) - End run\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1363,7 +1377,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.51643712983429462828738370758191766.dcm\n", + "1.2.826.0.1.3680043.10.511.3.17902633705887989912813743024111302.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", @@ -1447,8 +1461,7 @@ "pydicom>=2.3.0\n", "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", - "torch>=1.12.0\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "torch>=1.12.0\n" ] }, { @@ -1471,16 +1484,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 14:30:47,335] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 14:30:47,539] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 14:30:47,539] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-29 14:30:47,540] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 14:30:47,540] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-29 14:30:47,540] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-29 14:30:47,540] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-29 14:30:47,544] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 14:30:47,544] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 14:30:47,549] [DEBUG] (common) - \n", + "[2025-04-22 10:07:06,268] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 10:07:06,478] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 10:07:06,478] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-04-22 10:07:06,478] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 10:07:06,478] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-04-22 10:07:06,478] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-04-22 10:07:06,478] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-04-22 10:07:06,480] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 10:07:06,481] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 10:07:06,483] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1508,14 +1521,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 14:30:47,550] [DEBUG] (common) - \n", + "[2025-04-22 10:07:06,484] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1535,7 +1548,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 14:30:47,581] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:07:06,504] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1553,14 +1566,14 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '0.5.1',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1577,25 +1590,25 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 14:30:47,581] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:07:06,504] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", " 'cuda_deb_arch': 'x86_64',\n", " 'custom_base_image': False,\n", " 'custom_holoscan_sdk': False,\n", - " 'custom_monai_deploy_sdk': False,\n", + " 'custom_monai_deploy_sdk': True,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", - " 'monai_deploy_sdk_file': None,\n", - " 'monai_deploy_sdk_filename': None,\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", + " 'monai_deploy_sdk_file': PosixPath('/home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl'),\n", + " 'monai_deploy_sdk_filename': 'monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl',\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 14:30:47,602] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:07:06,521] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1659,9 +1672,9 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1674,7 +1687,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1731,10 +1744,9 @@ "\n", "\n", "# Install MONAI Deploy App SDK\n", - "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", - "\n", + "# Copy user-specified MONAI Deploy SDK file\n", + "COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", "\n", "COPY ./models /opt/holoscan/models\n", "\n", @@ -1749,7 +1761,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 14:30:47,602] [INFO] (packager.builder) - \n", + "[2025-04-22 10:07:06,522] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1757,27 +1769,27 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", - " MONAI Deploy App SDK Package: N/A\n", + " Holoscan SDK Package: 3.1.0\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 14:30:48,162] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 14:30:48,163] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 10:07:06,841] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 10:07:06,841] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 4.56kB done\n", + "#1 transferring dockerfile: 4.74kB done\n", "#1 DONE 0.1s\n", "\n", "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", "#2 DONE 0.0s\n", "\n", "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#3 DONE 0.5s\n", + "#3 DONE 0.4s\n", "\n", "#4 [internal] load .dockerignore\n", "#4 transferring context: 1.80kB done\n", @@ -1789,394 +1801,491 @@ "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from local:9689312761338090214\n", + "#7 importing cache manifest from local:9106061615573359344\n", "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#7 DONE 0.0s\n", "\n", "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#8 DONE 0.0s\n", + "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.1s done\n", + "#8 DONE 0.1s\n", "\n", "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#5 DONE 0.4s\n", + "#5 DONE 0.3s\n", "\n", "#6 [internal] load build context\n", - "#6 transferring context: 19.43MB 0.2s done\n", + "#6 transferring context: 19.58MB 0.1s done\n", "#6 DONE 0.3s\n", "\n", - "#9 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#9 [release 4/19] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#9 CACHED\n", "\n", - "#10 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#10 [release 5/19] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#11 [release 2/19] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#11 CACHED\n", "\n", - "#12 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#12 [release 3/19] RUN groupadd -f -g 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 6/18] WORKDIR /var/holoscan\n", + "#13 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#13 CACHED\n", "\n", - "#14 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#14 [release 1/19] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#14 CACHED\n", "\n", - "#15 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#15 [release 6/19] WORKDIR /var/holoscan\n", "#15 CACHED\n", "\n", - "#16 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#16 [release 7/19] COPY ./tools /var/holoscan/tools\n", "#16 CACHED\n", "\n", - "#17 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#17 [release 8/19] RUN chmod +x /var/holoscan/tools\n", "#17 CACHED\n", "\n", - "#18 [release 9/18] WORKDIR /var/holoscan\n", + "#18 [release 9/19] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#19 DONE 0.8s\n", - "\n", - "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 0.933 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 0.985 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 1.141 Collecting pip\n", - "#20 1.201 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#20 1.272 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 27.4 MB/s eta 0:00:00\n", - "#20 1.298 Installing collected packages: pip\n", - "#20 2.043 Successfully installed pip-25.0\n", + "#19 [release 10/19] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 DONE 1.4s\n", + "\n", + "#20 [release 11/19] RUN pip install --upgrade pip\n", + "#20 0.781 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.831 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 0.968 Collecting pip\n", + "#20 1.063 Downloading pip-25.0.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.220 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 12.3 MB/s eta 0:00:00\n", + "#20 1.247 Installing collected packages: pip\n", + "#20 1.992 Successfully installed pip-25.0.1\n", "#20 DONE 2.2s\n", "\n", - "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.735 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.749 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", - "#21 0.838 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 0.844 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 0.927 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 0.932 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.065 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.069 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.101 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.106 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.114 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.144 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.148 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.180 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.184 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.204 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.209 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.369 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.374 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.475 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.481 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 1.498 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.502 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 1.513 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.518 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.543 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.547 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 1.671 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.674 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 1.707 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.712 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 1.758 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.763 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 1.792 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.797 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 1.824 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.828 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 1.905 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.910 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 1.923 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.927 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 1.943 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.948 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 1.963 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.968 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 1.981 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.985 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 1.998 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.003 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.015 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.020 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.032 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.036 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.050 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.055 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.068 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.074 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", - "#21 2.085 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.090 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 2.103 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.107 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 2.119 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.123 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.141 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.147 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#21 2.169 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.174 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 2.211 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.215 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 2.224 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9)) (25.0)\n", - "#21 2.240 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.246 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 2.284 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.288 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 2.314 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.320 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 2.366 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.371 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 2.397 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.401 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.485 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.489 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 2.564 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.572 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.614 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.619 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.659 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.662 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.676 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 2.677 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 2.683 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 2.693 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 2.827 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.832 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 2.950 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.953 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 2.967 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.971 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 3.000 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.005 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 3.029 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.033 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.056 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.060 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 3.675 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.679 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 3.702 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", - "#21 3.720 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 91.2 MB/s eta 0:00:00\n", - "#21 3.727 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 3.742 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 133.6 MB/s eta 0:00:00\n", - "#21 3.748 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 3.779 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 118.0 MB/s eta 0:00:00\n", - "#21 3.787 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 3.945 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.2 MB/s eta 0:00:00\n", - "#21 3.955 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 3.979 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 116.7 MB/s eta 0:00:00\n", - "#21 3.988 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 4.526 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 98.5 MB/s eta 0:00:00\n", - "#21 4.536 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", - "#21 12.90 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 88.0 MB/s eta 0:00:00\n", - "#21 12.91 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 16.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 92.2 MB/s eta 0:00:00\n", - "#21 16.69 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 16.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 111.5 MB/s eta 0:00:00\n", - "#21 16.83 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 17.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 116.7 MB/s eta 0:00:00\n", - "#21 17.05 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 17.06 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 123.2 MB/s eta 0:00:00\n", - "#21 17.07 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 23.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 111.9 MB/s eta 0:00:00\n", - "#21 23.63 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 28.53 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 43.2 MB/s eta 0:00:00\n", - "#21 28.54 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 29.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 60.0 MB/s eta 0:00:00\n", - "#21 29.49 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 31.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 79.9 MB/s eta 0:00:00\n", - "#21 31.10 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 33.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 89.2 MB/s eta 0:00:00\n", - "#21 33.44 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", - "#21 34.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 111.4 MB/s eta 0:00:00\n", - "#21 34.80 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 36.81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 94.3 MB/s eta 0:00:00\n", - "#21 36.82 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 37.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 95.0 MB/s eta 0:00:00\n", - "#21 37.05 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 37.06 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 37.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 105.9 MB/s eta 0:00:00\n", - "#21 37.13 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", - "#21 40.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 82.0 MB/s eta 0:00:00\n", - "#21 40.23 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 40.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 113.5 MB/s eta 0:00:00\n", - "#21 40.60 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 40.61 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 41.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 104.0 MB/s eta 0:00:00\n", - "#21 41.49 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 41.50 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 41.51 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 41.51 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 41.56 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 117.2 MB/s eta 0:00:00\n", - "#21 41.56 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 41.58 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 41.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 114.3 MB/s eta 0:00:00\n", - "#21 41.62 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 41.63 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 41.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 153.4 MB/s eta 0:00:00\n", - "#21 41.64 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 41.65 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 41.66 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 41.67 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 41.67 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 41.68 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 41.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 124.5 MB/s eta 0:00:00\n", - "#21 41.71 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 41.72 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 41.72 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 41.73 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 41.73 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 41.74 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 41.75 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 116.8 MB/s eta 0:00:00\n", - "#21 41.75 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 41.76 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 41.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 116.5 MB/s eta 0:00:00\n", - "#21 41.78 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 41.79 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 54.16 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, requests, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, cupy-cuda12x, pydantic, nvidia-cusolver-cu12, highdicom, torch, python-on-whales, monai, holoscan\n", - "#21 123.1 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 importlib-resources-6.5.2 jinja2-3.1.5 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 124.4s\n", - "\n", - "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.361 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.564 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.579 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.602 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.604 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.647 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.652 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.725 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.731 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.768 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", - "#22 1.769 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.770 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.771 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.772 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.773 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.774 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.776 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.776 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.777 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.781 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.788 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.789 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.799 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 1.804 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.805 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.805 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.806 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.811 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 1.830 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 1.831 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 1.849 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.872 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.894 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 2.064 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 2.201 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.6s\n", - "\n", - "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.2s\n", - "\n", - "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", + "#21 [release 12/19] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 0.752 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.790 Downloading highdicom-0.25.1-py3-none-any.whl.metadata (5.0 kB)\n", + "#21 0.829 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.842 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.945 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.956 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.134 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.144 Downloading numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.183 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.195 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.203 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.236 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.247 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.295 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.307 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.462 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.474 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (8.9 kB)\n", + "#21 1.580 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.658 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.694 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.706 Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.723 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.734 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.773 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.784 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.865 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.876 Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 1.922 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.932 Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 1.984 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.995 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 2.036 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.046 Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.076 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.087 Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.150 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.163 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.182 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.194 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.220 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.232 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.266 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.277 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.303 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.316 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.343 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.355 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.376 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.389 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.415 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.427 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.455 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.467 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.486 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.499 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.522 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.535 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.561 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.574 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.599 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.612 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.640 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.653 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 2.688 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.699 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 2.734 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.745 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 2.771 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 2.771 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 2.783 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.798 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.868 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.879 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.896 Downloading highdicom-0.25.1-py3-none-any.whl (1.1 MB)\n", + "#21 2.925 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 52.9 MB/s eta 0:00:00\n", + "#21 2.944 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 2.962 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 125.9 MB/s eta 0:00:00\n", + "#21 2.976 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.029 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 70.7 MB/s eta 0:00:00\n", + "#21 3.043 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 3.293 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 74.5 MB/s eta 0:00:00\n", + "#21 3.311 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 3.347 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 74.4 MB/s eta 0:00:00\n", + "#21 3.360 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 4.004 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 81.9 MB/s eta 0:00:00\n", + "#21 4.020 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 11.28 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 102.9 MB/s eta 0:00:00\n", + "#21 11.30 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 15.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 102.0 MB/s eta 0:00:00\n", + "#21 15.10 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 15.23 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 113.9 MB/s eta 0:00:00\n", + "#21 15.25 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 15.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 115.1 MB/s eta 0:00:00\n", + "#21 15.48 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 15.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 240.5 MB/s eta 0:00:00\n", + "#21 15.51 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 21.44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 116.6 MB/s eta 0:00:00\n", + "#21 21.46 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 23.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 105.6 MB/s eta 0:00:00\n", + "#21 23.48 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 23.98 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 114.1 MB/s eta 0:00:00\n", + "#21 23.99 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 25.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 116.7 MB/s eta 0:00:00\n", + "#21 25.11 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 27.11 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 104.4 MB/s eta 0:00:00\n", + "#21 27.13 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 28.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 110.5 MB/s eta 0:00:00\n", + "#21 28.50 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 30.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 117.2 MB/s eta 0:00:00\n", + "#21 30.13 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 30.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 100.3 MB/s eta 0:00:00\n", + "#21 30.37 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 30.38 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 30.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 97.0 MB/s eta 0:00:00\n", + "#21 30.47 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 33.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 88.9 MB/s eta 0:00:00\n", + "#21 33.34 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 33.35 Downloading packaging-25.0-py3-none-any.whl (66 kB)\n", + "#21 33.37 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.6 MB)\n", + "#21 33.42 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 83.5 MB/s eta 0:00:00\n", + "#21 33.44 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 33.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 94.7 MB/s eta 0:00:00\n", + "#21 33.48 Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)\n", + "#21 33.50 Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n", + "#21 33.51 Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n", + "#21 33.53 Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "#21 33.54 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 33.56 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 91.2 MB/s eta 0:00:00\n", + "#21 33.58 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 33.59 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 33.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 126.9 MB/s eta 0:00:00\n", + "#21 40.78 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, typing-extensions, sympy, pydicom, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, fsspec, filelock, pyjpegls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, nvidia-cusolver-cu12, highdicom, torch, monai\n", + "#21 93.44 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 filelock-3.18.0 fsspec-2025.3.2 highdicom-0.25.1 importlib-resources-6.5.2 jinja2-3.1.6 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-25.0 pillow-11.2.1 pydicom-3.0.1 pyjpegls-1.4.0 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.13.2\n", + "#21 DONE 98.6s\n", + "\n", + "#22 [release 13/19] COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#22 DONE 0.3s\n", + "\n", + "#23 [release 14/19] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.726 Defaulting to user installation because normal site-packages is not writeable\n", + "#23 0.853 Processing /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.864 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (1.26.4)\n", + "#23 1.007 Collecting holoscan~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.044 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.0 kB)\n", + "#23 1.097 Collecting holoscan-cli~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.111 Downloading holoscan_cli-3.1.0-py3-none-any.whl.metadata (4.0 kB)\n", + "#23 1.185 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.196 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#23 1.272 Collecting tritonclient>=2.53.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.283 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl.metadata (2.8 kB)\n", + "#23 1.381 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.395 Downloading typeguard-4.4.2-py3-none-any.whl.metadata (3.8 kB)\n", + "#23 1.423 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (25.0.1)\n", + "#23 1.468 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.483 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", + "#23 1.553 Collecting cloudpickle<4.0,>=3.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.566 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#23 1.687 Collecting wheel-axle-runtime<1.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.702 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#23 1.726 Requirement already satisfied: Jinja2<4.0.0,>=3.1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.1.6)\n", + "#23 1.775 Collecting packaging<24.0,>=23.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.788 Downloading packaging-23.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#23 1.916 Collecting psutil<7.0.0,>=6.0.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.927 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 2.013 Collecting python-on-whales<0.61.0,>=0.60.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.025 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", + "#23 2.113 Collecting pyyaml<7.0,>=6.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.124 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#23 2.202 Collecting requests<3.0.0,>=2.31.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.213 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#23 2.352 Collecting python-rapidjson>=0.9.1 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.364 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 2.445 Collecting urllib3>=2.0.7 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.456 Downloading urllib3-2.4.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#23 2.887 Collecting aiohttp<4.0.0,>=3.8.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.898 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)\n", + "#23 2.991 Collecting cuda-python (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.002 Downloading cuda_python-12.8.0-py3-none-any.whl.metadata (15 kB)\n", + "#23 3.159 Collecting geventhttpclient>=2.3.3 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.170 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.7 kB)\n", + "#23 3.657 Collecting grpcio<1.68,>=1.63.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.669 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.9 kB)\n", + "#23 3.979 Collecting protobuf<6.0dev,>=5.26.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.990 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl.metadata (592 bytes)\n", + "#23 4.008 Requirement already satisfied: typing_extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (4.13.2)\n", + "#23 4.054 Collecting aiohappyeyeballs>=2.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.067 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)\n", + "#23 4.125 Collecting aiosignal>=1.1.2 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.138 Downloading aiosignal-1.3.2-py2.py3-none-any.whl.metadata (3.8 kB)\n", + "#23 4.199 Collecting async-timeout<6.0,>=4.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.212 Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)\n", + "#23 4.277 Collecting attrs>=17.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.289 Downloading attrs-25.3.0-py3-none-any.whl.metadata (10 kB)\n", + "#23 4.407 Collecting frozenlist>=1.1.1 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.417 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (16 kB)\n", + "#23 4.625 Collecting multidict<7.0,>=4.5 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.636 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.3 kB)\n", + "#23 4.722 Collecting propcache>=0.2.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.733 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (10 kB)\n", + "#23 5.044 Collecting yarl<2.0,>=1.17.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.055 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (72 kB)\n", + "#23 5.139 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.150 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#23 5.306 Collecting gevent (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.317 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 5.398 Collecting certifi (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.411 Downloading certifi-2025.1.31-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 5.486 Collecting brotli (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.498 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (5.5 kB)\n", + "#23 5.527 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0.0,>=3.1.5->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.0.2)\n", + "#23 5.679 Collecting pydantic<2,>=1.5 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.691 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", + "#23 5.793 Collecting tqdm (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.804 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "#23 5.917 Collecting typer>=0.4.1 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.928 Downloading typer-0.15.2-py3-none-any.whl.metadata (15 kB)\n", + "#23 6.053 Collecting charset-normalizer<4,>=2 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.064 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#23 6.138 Collecting idna<4,>=2.5 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.150 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#23 6.201 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.18.0)\n", + "#23 6.232 Collecting cuda-bindings~=12.8.0 (from cuda-python->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.247 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 6.352 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.363 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", + "#23 6.427 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.438 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "#23 6.530 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.540 Downloading rich-14.0.0-py3-none-any.whl.metadata (18 kB)\n", + "#23 6.781 Collecting greenlet>=3.2.0 (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.792 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (4.1 kB)\n", + "#23 6.843 Collecting zope.event (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.855 Downloading zope.event-5.0-py3-none-any.whl.metadata (4.4 kB)\n", + "#23 7.003 Collecting zope.interface (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.014 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (44 kB)\n", + "#23 7.104 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.116 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", + "#23 7.189 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.200 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 7.227 Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from zope.event->gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (59.6.0)\n", + "#23 7.259 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.271 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "#23 7.320 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#23 7.349 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl (39.8 MB)\n", + "#23 8.075 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 39.8/39.8 MB 55.3 MB/s eta 0:00:00\n", + "#23 8.089 Downloading holoscan_cli-3.1.0-py3-none-any.whl (72 kB)\n", + "#23 8.123 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl (14.4 MB)\n", + "#23 8.397 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.4/14.4 MB 53.1 MB/s eta 0:00:00\n", + "#23 8.411 Downloading typeguard-4.4.2-py3-none-any.whl (35 kB)\n", + "#23 8.442 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB)\n", + "#23 8.495 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 29.5 MB/s eta 0:00:00\n", + "#23 8.509 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#23 8.541 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl (104.6 MB)\n", + "#23 10.27 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.6/104.6 MB 60.5 MB/s eta 0:00:00\n", + "#23 10.28 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (112 kB)\n", + "#23 10.32 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)\n", + "#23 10.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.9/5.9 MB 53.1 MB/s eta 0:00:00\n", + "#23 10.44 Downloading packaging-23.2-py3-none-any.whl (53 kB)\n", + "#23 10.47 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl (319 kB)\n", + "#23 10.51 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 10.54 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", + "#23 10.57 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)\n", + "#23 10.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 33.7 MB/s eta 0:00:00\n", + "#23 10.63 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#23 10.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 18.4 MB/s eta 0:00:00\n", + "#23 10.68 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#23 10.71 Downloading urllib3-2.4.0-py3-none-any.whl (128 kB)\n", + "#23 10.74 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#23 10.77 Downloading cuda_python-12.8.0-py3-none-any.whl (11 kB)\n", + "#23 10.80 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)\n", + "#23 10.83 Downloading aiosignal-1.3.2-py2.py3-none-any.whl (7.6 kB)\n", + "#23 10.87 Downloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)\n", + "#23 10.90 Downloading attrs-25.3.0-py3-none-any.whl (63 kB)\n", + "#23 10.93 Downloading certifi-2025.1.31-py3-none-any.whl (166 kB)\n", + "#23 10.97 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#23 11.00 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB)\n", + "#23 11.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 57.7 MB/s eta 0:00:00\n", + "#23 11.22 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#23 11.25 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 11.29 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#23 11.32 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (219 kB)\n", + "#23 11.35 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206 kB)\n", + "#23 11.39 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", + "#23 11.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 45.0 MB/s eta 0:00:00\n", + "#23 11.48 Downloading typer-0.15.2-py3-none-any.whl (45 kB)\n", + "#23 11.51 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (333 kB)\n", + "#23 11.54 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (3.0 MB)\n", + "#23 11.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 45.0 MB/s eta 0:00:00\n", + "#23 11.63 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB)\n", + "#23 11.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 39.6 MB/s eta 0:00:00\n", + "#23 11.70 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "#23 11.73 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", + "#23 11.77 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (580 kB)\n", + "#23 11.80 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 580.6/580.6 kB 14.2 MB/s eta 0:00:00\n", + "#23 11.81 Downloading rich-14.0.0-py3-none-any.whl (243 kB)\n", + "#23 11.85 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", + "#23 11.88 Downloading zope.event-5.0-py3-none-any.whl (6.8 kB)\n", + "#23 11.91 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254 kB)\n", + "#23 11.94 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", + "#23 11.97 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", + "#23 12.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 28.2 MB/s eta 0:00:00\n", + "#23 12.03 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "#23 12.84 Installing collected packages: fastrlock, cuda-bindings, brotli, zope.interface, zope.event, wheel-axle-runtime, urllib3, typeguard, tqdm, shellingham, pyyaml, python-rapidjson, pygments, pydantic, psutil, protobuf, propcache, packaging, multidict, mdurl, idna, grpcio, greenlet, frozenlist, cupy-cuda12x, cuda-python, colorama, cloudpickle, click, charset-normalizer, certifi, attrs, async-timeout, aiohappyeyeballs, yarl, tritonclient, requests, markdown-it-py, holoscan, gevent, aiosignal, rich, geventhttpclient, aiohttp, typer, python-on-whales, holoscan-cli, monai-deploy-app-sdk\n", + "#23 14.78 Attempting uninstall: packaging\n", + "#23 14.78 Found existing installation: packaging 25.0\n", + "#23 14.79 Uninstalling packaging-25.0:\n", + "#23 14.81 Successfully uninstalled packaging-25.0\n", + "#23 19.62 Successfully installed aiohappyeyeballs-2.6.1 aiohttp-3.11.18 aiosignal-1.3.2 async-timeout-5.0.1 attrs-25.3.0 brotli-1.1.0 certifi-2025.1.31 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-3.1.1 colorama-0.4.6 cuda-bindings-12.8.0 cuda-python-12.8.0 cupy-cuda12x-13.4.1 fastrlock-0.8.3 frozenlist-1.6.0 gevent-25.4.1 geventhttpclient-2.3.3 greenlet-3.2.1 grpcio-1.67.1 holoscan-3.1.0 holoscan-cli-3.1.0 idna-3.10 markdown-it-py-3.0.0 mdurl-0.1.2 monai-deploy-app-sdk-0.5.1+37.g96f7e31.dirty multidict-6.4.3 packaging-23.2 propcache-0.3.1 protobuf-5.29.4 psutil-6.1.1 pydantic-1.10.21 pygments-2.19.1 python-on-whales-0.60.1 python-rapidjson-1.20 pyyaml-6.0.2 requests-2.32.3 rich-14.0.0 shellingham-1.5.4 tqdm-4.67.1 tritonclient-2.56.0 typeguard-4.4.2 typer-0.15.2 urllib3-2.4.0 wheel-axle-runtime-0.0.6 yarl-1.20.0 zope.event-5.0 zope.interface-7.2\n", + "#23 DONE 21.6s\n", + "\n", + "#24 [release 15/19] COPY ./models /opt/holoscan/models\n", + "#24 DONE 0.3s\n", + "\n", + "#25 [release 16/19] COPY ./map/app.json /etc/holoscan/app.json\n", "#25 DONE 0.1s\n", "\n", - "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 [release 17/19] COPY ./app.config /var/holoscan/app.yaml\n", "#26 DONE 0.1s\n", "\n", - "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", + "#27 [release 18/19] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#27 DONE 0.1s\n", "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 203.4s done\n", - "#28 exporting manifest sha256:089e3612567f5b5a28edd5e2ffd6ddf01264ddbcdc641694b12620fdbfa40828 0.0s done\n", - "#28 exporting config sha256:a863c524e0de40b25e7e8b519c4009196f543dc45dde5399124c1f9317a67b4e 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer 4dfc251f5c56 289B / 289B\n", - "#29 loading layer 74089dc02aa9 65.54kB / 5.10MB\n", - "#29 loading layer efdd29e523f7 557.06kB / 3.34GB\n", - "#29 loading layer efdd29e523f7 159.32MB / 3.34GB 6.4s\n", - "#29 loading layer efdd29e523f7 330.33MB / 3.34GB 10.4s\n", - "#29 loading layer efdd29e523f7 557.06MB / 3.34GB 16.6s\n", - "#29 loading layer efdd29e523f7 797.70MB / 3.34GB 20.7s\n", - "#29 loading layer efdd29e523f7 1.01GB / 3.34GB 24.7s\n", - "#29 loading layer efdd29e523f7 1.25GB / 3.34GB 28.9s\n", - "#29 loading layer efdd29e523f7 1.45GB / 3.34GB 33.0s\n", - "#29 loading layer efdd29e523f7 1.74GB / 3.34GB 37.1s\n", - "#29 loading layer efdd29e523f7 1.95GB / 3.34GB 41.1s\n", - "#29 loading layer efdd29e523f7 2.17GB / 3.34GB 45.2s\n", - "#29 loading layer efdd29e523f7 2.31GB / 3.34GB 51.9s\n", - "#29 loading layer efdd29e523f7 2.53GB / 3.34GB 58.0s\n", - "#29 loading layer efdd29e523f7 2.74GB / 3.34GB 62.1s\n", - "#29 loading layer efdd29e523f7 3.03GB / 3.34GB 66.3s\n", - "#29 loading layer efdd29e523f7 3.21GB / 3.34GB 72.4s\n", - "#29 loading layer 47536db86449 32.77kB / 578.01kB\n", - "#29 loading layer 56926067dc15 196.61kB / 17.81MB\n", - "#29 loading layer a90406bd7fe1 492B / 492B\n", - "#29 loading layer 04571d3d4439 315B / 315B\n", - "#29 loading layer 6f5c809ef192 302B / 302B\n", - "#29 loading layer b97e5e112e3f 3.94kB / 3.94kB\n", - "#29 loading layer 04571d3d4439 315B / 315B 0.5s done\n", - "#29 loading layer 4dfc251f5c56 289B / 289B 78.7s done\n", - "#29 loading layer 74089dc02aa9 65.54kB / 5.10MB 78.6s done\n", - "#29 loading layer efdd29e523f7 3.25GB / 3.34GB 78.1s done\n", - "#29 loading layer 47536db86449 32.77kB / 578.01kB 1.2s done\n", - "#29 loading layer 56926067dc15 196.61kB / 17.81MB 0.9s done\n", - "#29 loading layer a90406bd7fe1 492B / 492B 0.6s done\n", - "#29 loading layer 6f5c809ef192 302B / 302B 0.4s done\n", - "#29 loading layer b97e5e112e3f 3.94kB / 3.94kB 0.4s done\n", - "#29 DONE 78.7s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 123.2s done\n", - "#28 DONE 326.7s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:05b02574544ba690caa3ab6304a23e2eb00610e44ca586c3f6045abe235d4886\n", - "#30 writing layer sha256:05b02574544ba690caa3ab6304a23e2eb00610e44ca586c3f6045abe235d4886 0.0s done\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#30 writing layer sha256:0e0b90cb6cbd645ccffb017000cd0ff199c69273a69425adf3ccd1ebb3f573aa 0.0s done\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#30 writing layer sha256:69f904b6c73e074809a57dc05803a5c6c37f5baf25e7fb407edc341511a2f9ba\n", - "#30 writing layer sha256:69f904b6c73e074809a57dc05803a5c6c37f5baf25e7fb407edc341511a2f9ba 49.2s done\n", - "#30 writing layer sha256:7420a5aefb199de2dd8aa67797672d53bafd18356d3bf7a2f1aec1f67f86020b\n", - "#30 writing layer sha256:7420a5aefb199de2dd8aa67797672d53bafd18356d3bf7a2f1aec1f67f86020b 0.0s done\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:a7292bbf42d93ed9fca9e2ff7e5283d2e7f737dad14092919db7645628bb0838 0.0s done\n", - "#30 writing layer sha256:a8560dc90723760d8d4daf42b22f7760b034c87e9348697c113118b992d830ca 0.1s done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:b2d7a44feb1d1dd34b73842e1048b1b2ee32c381943f40f9ee7d3945b9818b09 0.0s done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:bdb033062d61ab2282e08a5a8fcaee9d08e5c93b46d0b1d9b5f378b458e4ea07 0.0s done\n", - "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing layer sha256:fa35667ed3d919e87dc31994d8dfd51eab483c48ae72fb0ad2ab83e2b544c7c3\n", - "#30 writing layer sha256:fa35667ed3d919e87dc31994d8dfd51eab483c48ae72fb0ad2ab83e2b544c7c3 0.3s done\n", - "#30 preparing build cache for export 50.1s done\n", - "#30 writing config sha256:dff8a5cdb36509e072452e50bce7b5a26df3d17fd6570f7f4ab9dc79ea47e02e 0.0s done\n", - "#30 writing cache manifest sha256:bf6b0dabb704fd0021d37ae93daa4ad6ff38ef9d7b58d131e90451dbbcdcd709 0.0s done\n", - "#30 DONE 50.1s\n", - "[2025-01-29 14:39:18,007] [INFO] (packager) - Build Summary:\n", + "#28 [release 19/19] COPY ./app /opt/holoscan/app\n", + "#28 DONE 0.1s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 exporting layers\n", + "#29 exporting layers 175.3s done\n", + "#29 exporting manifest sha256:f63297f6525a89f74b13e561b30821ab4985a18db4b815eb995ac1aed030557b 0.0s done\n", + "#29 exporting config sha256:7266e968de607504eff9dfbb7c4e0c00adf190678ce9232099aab9c0d2d1cb24 0.0s done\n", + "#29 sending tarball\n", + "#29 ...\n", + "\n", + "#30 importing to docker\n", + "#30 loading layer 481caafed616 251B / 251B\n", + "#30 loading layer e39cf4d7d38e 65.54kB / 5.09MB\n", + "#30 loading layer 3795307a2740 557.06kB / 3.20GB\n", + "#30 loading layer 3795307a2740 130.91MB / 3.20GB 6.2s\n", + "#30 loading layer 3795307a2740 278.53MB / 3.20GB 12.4s\n", + "#30 loading layer 3795307a2740 483.52MB / 3.20GB 16.5s\n", + "#30 loading layer 3795307a2740 677.94MB / 3.20GB 20.7s\n", + "#30 loading layer 3795307a2740 851.18MB / 3.20GB 24.8s\n", + "#30 loading layer 3795307a2740 1.06GB / 3.20GB 31.0s\n", + "#30 loading layer 3795307a2740 1.25GB / 3.20GB 35.1s\n", + "#30 loading layer 3795307a2740 1.48GB / 3.20GB 39.2s\n", + "#30 loading layer 3795307a2740 1.70GB / 3.20GB 43.3s\n", + "#30 loading layer 3795307a2740 1.91GB / 3.20GB 47.5s\n", + "#30 loading layer 3795307a2740 2.07GB / 3.20GB 51.6s\n", + "#30 loading layer 3795307a2740 2.17GB / 3.20GB 57.8s\n", + "#30 loading layer 3795307a2740 2.25GB / 3.20GB 64.8s\n", + "#30 loading layer 3795307a2740 2.49GB / 3.20GB 71.1s\n", + "#30 loading layer 3795307a2740 2.70GB / 3.20GB 75.2s\n", + "#30 loading layer 3795307a2740 2.88GB / 3.20GB 81.4s\n", + "#30 loading layer 3795307a2740 3.05GB / 3.20GB 87.4s\n", + "#30 loading layer 14bfd28d96ba 32.77kB / 144.30kB\n", + "#30 loading layer 643060716c54 557.06kB / 398.53MB\n", + "#30 loading layer 643060716c54 155.42MB / 398.53MB 2.1s\n", + "#30 loading layer 643060716c54 223.38MB / 398.53MB 4.2s\n", + "#30 loading layer 643060716c54 259.59MB / 398.53MB 6.2s\n", + "#30 loading layer 643060716c54 338.13MB / 398.53MB 8.4s\n", + "#30 loading layer 643060716c54 391.61MB / 398.53MB 10.5s\n", + "#30 loading layer bccb4e460f68 196.61kB / 17.81MB\n", + "#30 loading layer 61be03e60d84 492B / 492B\n", + "#30 loading layer aeec4a674fef 315B / 315B\n", + "#30 loading layer 54cba3cb0592 301B / 301B\n", + "#30 loading layer 462f716907a1 3.91kB / 3.91kB\n", + "#30 loading layer 462f716907a1 3.91kB / 3.91kB 0.4s done\n", + "#30 loading layer 481caafed616 251B / 251B 105.8s done\n", + "#30 loading layer e39cf4d7d38e 5.09MB / 5.09MB 105.7s done\n", + "#30 loading layer 3795307a2740 3.20GB / 3.20GB 105.1s done\n", + "#30 loading layer 14bfd28d96ba 144.30kB / 144.30kB 12.5s done\n", + "#30 loading layer 643060716c54 398.53MB / 398.53MB 12.4s done\n", + "#30 loading layer bccb4e460f68 17.81MB / 17.81MB 0.9s done\n", + "#30 loading layer 61be03e60d84 492B / 492B 0.6s done\n", + "#30 loading layer aeec4a674fef 315B / 315B 0.5s done\n", + "#30 loading layer 54cba3cb0592 301B / 301B 0.4s done\n", + "#30 DONE 105.8s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 sending tarball 135.1s done\n", + "#29 DONE 310.5s\n", + "\n", + "#31 exporting cache to client directory\n", + "#31 preparing build cache for export\n", + "#31 writing layer sha256:0081cdb9958a9d50332b830133ae001192a5065ac4f0e3c095b3a1d5d5ff0265\n", + "#31 writing layer sha256:0081cdb9958a9d50332b830133ae001192a5065ac4f0e3c095b3a1d5d5ff0265 0.0s done\n", + "#31 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#31 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#31 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#31 writing layer sha256:287e630d01a5fdd05d03906401ef55472af7d087036f46dbc2bd8e3922500d1a 0.0s done\n", + "#31 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#31 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#31 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", + "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#31 writing layer sha256:5b90b93bdc8509aa597670e5542315cfcf5e462fd5f032cd9f20105de9574874\n", + "#31 writing layer sha256:5b90b93bdc8509aa597670e5542315cfcf5e462fd5f032cd9f20105de9574874 50.6s done\n", + "#31 writing layer sha256:60aea8801e5272305832cc3e60cd84c63f0d58d80a872b7357356957d261c574\n", + "#31 writing layer sha256:60aea8801e5272305832cc3e60cd84c63f0d58d80a872b7357356957d261c574 0.0s done\n", + "#31 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#31 writing layer sha256:78f2accaffaf576042c7ebead20caa88db32984713ae7e35691a3be4f3301d0c\n", + "#31 writing layer sha256:78f2accaffaf576042c7ebead20caa88db32984713ae7e35691a3be4f3301d0c 7.9s done\n", + "#31 writing layer sha256:7f9be78d50c54946e6e71991e35dd38adb2967f404f207bcc854e528571f923c\n", + "#31 writing layer sha256:7f9be78d50c54946e6e71991e35dd38adb2967f404f207bcc854e528571f923c 0.0s done\n", + "#31 writing layer sha256:935b4cb3480886ca00a46c28cd98797870cfc7389818c85cd243869f4548fda4 done\n", + "#31 writing layer sha256:95dbda2f5f8116a35367b28d397faae7d34bd4a713aefe01ccfe5e326b0b0250 done\n", + "#31 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#31 writing layer sha256:9ebe27a7cf7d039e6f4d4b82e9f34985c02f5dca091fa01f4585191f6facaec1 0.0s done\n", + "#31 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#31 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#31 writing layer sha256:d0b9db5eaf93e490f07bab8abb1ac5475febcf822c25f2e1d1c82ff4273a7d0d done\n", + "#31 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#31 writing layer sha256:da44fb0aa6d6f7c651c7eec8e11510c9c048b066b2ba36b261cefea12ff5ee3e done\n", + "#31 writing layer sha256:dd250fa54efc49bc2c03cccb8d3a56ebf8ce96ad291d924e6ead2036c0d251da\n", + "#31 writing layer sha256:dd250fa54efc49bc2c03cccb8d3a56ebf8ce96ad291d924e6ead2036c0d251da 0.4s done\n", + "#31 writing layer sha256:dec17c052060552bd6c5810c57aa0195e7c9776da97eeb16984d2f31a35d816b\n", + "#31 writing layer sha256:dec17c052060552bd6c5810c57aa0195e7c9776da97eeb16984d2f31a35d816b 0.0s done\n", + "#31 writing layer sha256:e7cb8fb70ca3287e6c873a5263dfc4f8e333b6f965e6027a24a5f4b6fdc89a69 0.1s done\n", + "#31 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31\n", + "#31 preparing build cache for export 59.4s done\n", + "#31 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#31 writing layer sha256:f3af93a430a247328c59fb2228f6fa43a0ce742b03464db94acf7c45311e31cd done\n", + "#31 writing config sha256:ae0dee53261b5588107aa98a4ac08135ba44a7551d5ee93e258b0bbe7f352c58 0.0s done\n", + "#31 writing cache manifest sha256:c2e62667fa04d787de4d2de795baa75004e61b473a5ab4129713ad2d397c78b8 0.0s done\n", + "#31 DONE 59.4s\n", + "[2025-04-22 10:15:23,826] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -2188,7 +2297,7 @@ "source": [ "tag_prefix = \"my_app\"\n", "\n", - "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -2209,7 +2318,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 a863c524e0de 6 minutes ago 8.63GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 7266e968de60 6 minutes ago 9.07GB\n" ] } ], @@ -2237,23 +2346,23 @@ "text": [ "output\n", "dcm\n", - "[2025-01-29 14:39:20,640] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 10:15:26,072] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 10:15:26,072] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 10:15:26,074] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 10:15:26,074] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 14:39:20,713] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpguo6yiqf/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpguo6yiqf/pkg.json\n", - "2f1c2c8df19c8ecc58cc0d8136bdd27b4143e88c67da72b5340f86b49eec22bb\n", - "[2025-01-29 14:39:21,151] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 10:15:26,152] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpxd644i6e/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpxd644i6e/pkg.json\n", + "3e8dc45282382e26bf37bf8ab8bafbfe8a12c219cfb364cc1a38bc3c645bcbf8\n", + "[2025-04-22 10:15:26,569] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 14:39:21,152] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 10:15:26,579] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 14:39:21,443] [INFO] (common) - Launching container (d6429624e9ee) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: relaxed_zhukovsky\n", + "[2025-04-22 10:15:27,009] [INFO] (common) - Launching container (81398038b14f) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: youthful_pare\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2263,103 +2372,97 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 22:39:22 [INFO] Launching application python3 /opt/holoscan/app ...\n", - "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "2025-04-22 17:15:27 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2025-01-29 22:39:28,954] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[2025-01-29 22:39:28,960] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 22:39:28,961] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", + "[2025-04-22 17:15:33,511] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[2025-04-22 17:15:33,514] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[2025-04-22 17:15:33,514] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[2025-04-22 17:15:33,524] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", + " # of series: 1\n", "\n", - "[2025-01-29 22:39:29,005] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - " # of series: 1\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute ImageType value: None\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series Selection finalized.\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:39:29,929] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:15:34,270] [INFO] (root) - Casting to float32\n", "\n", - "[2025-01-29 22:39:30,619] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", "\n", " [ 0. 0.7890625 0. -398.60547 ]\n", "\n", @@ -2367,7 +2470,7 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", "\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", "\n", @@ -2375,63 +2478,71 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "2025-04-22 17:15:35,292 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-04-22 17:15:37,261] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Input of shape: torch.Size([1, 1, 270, 270, 106])\n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "2025-04-22 17:15:39,032 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "[2025-04-22 17:15:40,582] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform length/batch size of output: 1\n", "\n", - "2025-01-29 22:39:31,772 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "[2025-04-22 17:15:40,587] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pixel spacings for pred: tensor([0.7891, 0.7891, 1.5000], dtype=torch.float64)\n", "\n", - "2025-01-29 22:39:36,704 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "[2025-04-22 17:15:40,719] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pred of shape: (1, 512, 512, 204)\n", "\n", - "[2025-01-29 22:39:38,595] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2025-04-22 17:15:40,758] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array of type shape: (204, 512, 512)\n", "\n", - "[2025-01-29 22:39:38,601] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-04-22 17:15:40,763] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " check_person_name(patient_name)\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-29 22:39:40,099] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 17:15:41,999] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[2025-01-29 22:39:40,203] [INFO] (app.AISpleenSegApp) - End run\n", + "[2025-04-22 17:15:42,103] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[info] [gxf_executor.cpp:294] Destroying context\n", + "[info] [gxf_executor.cpp:295] Destroying context\n", "\n", - "[2025-01-29 14:39:42,029] [INFO] (common) - Container 'relaxed_zhukovsky'(d6429624e9ee) exited.\n" + "[2025-04-22 10:15:44,346] [INFO] (common) - Container 'youthful_pare'(81398038b14f) exited.\n" ] } ], @@ -2453,7 +2564,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.9998962080747738621710125447135664.dcm\n", + "1.2.826.0.1.3680043.10.511.3.89222091780069825813597121405605044.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", diff --git a/notebooks/tutorials/04_monai_bundle_app.ipynb b/notebooks/tutorials/04_monai_bundle_app.ipynb index 4dccc832..671377ce 100644 --- a/notebooks/tutorials/04_monai_bundle_app.ipynb +++ b/notebooks/tutorials/04_monai_bundle_app.ipynb @@ -612,62 +612,57 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:44:44,206] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 14:44:44,212] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-29 14:44:44,222] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:18:02,158] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 10:18:02,166] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:18:02,176] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", - "[2025-01-29 14:44:44,263] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:44:44,616] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:44:44,617] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:18:02,203] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:18:02,743] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:18:02,744] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:44:44,618] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:44:44,618] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:44:44,619] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:44:44,620] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:44:44,621] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:44:44,622] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:44:44,623] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:44:44,627] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:44:44,629] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:44:44,630] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:44:44,632] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:44:45,069] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2025-04-22 10:18:02,745] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:02,746] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:02,746] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:18:02,747] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:02,748] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:18:02,748] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:18:02,749] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:02,750] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:02,751] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:02,752] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:02,753] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:02,753] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:18:02,754] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:02,755] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:02,968] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:18:03,025] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 14:44:48,663] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2025-01-29 14:44:50,440] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2025-01-29 14:44:50,441] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-04-22 10:18:06,025] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2025-04-22 10:18:07,405] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-04-22 10:18:07,406] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:45:02,816] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:02,817] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:45:02,819] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:02,821] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:45:02,824] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:45:02,827] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:02,829] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:45:02,832] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:45:02,836] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:18:17,835] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:17,836] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:18:17,837] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:17,838] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:18:17,839] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:18:17,839] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:17,840] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:18:17,841] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:18:17,842] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:45:03,007] [INFO] (__main__.AISpleenSegApp) - End run\n", - "[2025-01-29 14:45:03,009] [INFO] (root) - End __main__\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:18:17,958] [INFO] (__main__.AISpleenSegApp) - End run\n", + "[2025-04-22 10:18:17,960] [INFO] (root) - End __main__\n" ] } ], @@ -968,61 +963,56 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:45:09,784] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", - "[2025-01-29 14:45:09,786] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[2025-01-29 14:45:09,788] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:18:22,991] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, triton_server_netloc=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", + "[2025-04-22 10:18:22,993] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:18:22,994] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", - "[2025-01-29 14:45:09,806] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:45:10,337] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:18:23,011] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:45:10,638] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:23,535] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:18:23,592] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 14:45:14,192] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", - "[2025-01-29 14:45:15,947] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2025-01-29 14:45:15,947] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-04-22 10:18:26,690] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", + "[2025-04-22 10:18:28,072] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-04-22 10:18:28,072] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:45:28,464] [INFO] (app.AISpleenSegApp) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:18:38,554] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1040,7 +1030,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.48925922417984937382434580199910089.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.141985674848102250562862177103472.dcm stl\n" ] } ], @@ -1114,10 +1104,14 @@ "scikit-image>=0.17.2\n", "numpy-stl>=2.12.0\n", "trimesh>=3.8.11\n", - "torch>=1.12.0\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "torch>=1.12.0\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -1138,16 +1132,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 14:45:31,019] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 14:45:31,266] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 14:45:31,267] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-29 14:45:31,267] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 14:45:31,267] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-29 14:45:31,267] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-29 14:45:31,267] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-29 14:45:31,271] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 14:45:31,271] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 14:45:31,277] [DEBUG] (common) - \n", + "[2025-04-22 10:18:40,556] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 10:18:40,770] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 10:18:40,771] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-04-22 10:18:40,771] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 10:18:40,771] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-04-22 10:18:40,772] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-04-22 10:18:40,772] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-04-22 10:18:40,776] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 10:18:40,776] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 10:18:40,780] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1175,14 +1169,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 14:45:31,278] [DEBUG] (common) - \n", + "[2025-04-22 10:18:40,781] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1202,7 +1196,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 14:45:31,305] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:18:40,804] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1220,14 +1214,14 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '0.5.1',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1244,25 +1238,25 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 14:45:31,305] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:18:40,805] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", " 'cuda_deb_arch': 'x86_64',\n", " 'custom_base_image': False,\n", " 'custom_holoscan_sdk': False,\n", - " 'custom_monai_deploy_sdk': False,\n", + " 'custom_monai_deploy_sdk': True,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", - " 'monai_deploy_sdk_file': None,\n", - " 'monai_deploy_sdk_filename': None,\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", + " 'monai_deploy_sdk_file': PosixPath('/home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl'),\n", + " 'monai_deploy_sdk_filename': 'monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl',\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 14:45:31,336] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:18:40,822] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1326,9 +1320,9 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1341,7 +1335,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1398,10 +1392,9 @@ "\n", "\n", "# Install MONAI Deploy App SDK\n", - "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", - "\n", + "# Copy user-specified MONAI Deploy SDK file\n", + "COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", "\n", "COPY ./models /opt/holoscan/models\n", "\n", @@ -1416,7 +1409,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 14:45:31,336] [INFO] (packager.builder) - \n", + "[2025-04-22 10:18:40,822] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1424,40 +1417,37 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", - " MONAI Deploy App SDK Package: N/A\n", + " Holoscan SDK Package: 3.1.0\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 14:45:31,944] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 14:45:31,944] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 10:18:41,210] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 10:18:41,210] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 4.56kB done\n", + "#1 transferring dockerfile: 4.74kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 ...\n", + "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#2 DONE 0.0s\n", "\n", - "#3 [auth] nvidia/cuda:pull token for nvcr.io\n", - "#3 DONE 0.0s\n", - "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 DONE 0.5s\n", + "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#3 DONE 0.5s\n", "\n", "#4 [internal] load .dockerignore\n", "#4 transferring context: 1.80kB done\n", "#4 DONE 0.1s\n", "\n", - "#5 [internal] load build context\n", + "#5 importing cache manifest from local:3932312145486245041\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 importing cache manifest from local:6099231199924646769\n", - "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", @@ -1468,410 +1458,505 @@ "#8 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", "#8 DONE 0.3s\n", "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 19.43MB 0.2s done\n", - "#5 DONE 0.5s\n", + "#6 [internal] load build context\n", + "#6 transferring context: 19.58MB 0.1s done\n", + "#6 DONE 0.5s\n", "\n", - "#9 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#9 [release 4/19] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#9 CACHED\n", "\n", - "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#10 [release 5/19] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#11 [release 3/19] RUN groupadd -f -g 1000 holoscan\n", "#11 CACHED\n", "\n", - "#12 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#12 [release 6/19] WORKDIR /var/holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#13 [release 7/19] COPY ./tools /var/holoscan/tools\n", "#13 CACHED\n", "\n", - "#14 [release 6/18] WORKDIR /var/holoscan\n", + "#14 [release 8/19] RUN chmod +x /var/holoscan/tools\n", "#14 CACHED\n", "\n", - "#15 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#15 [release 1/19] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#15 CACHED\n", "\n", - "#16 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#16 [release 2/19] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#16 CACHED\n", "\n", - "#17 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#17 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#17 CACHED\n", "\n", - "#18 [release 9/18] WORKDIR /var/holoscan\n", + "#18 [release 9/19] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 [release 10/19] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#19 DONE 0.2s\n", "\n", - "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 1.108 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 1.137 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 1.383 Collecting pip\n", - "#20 1.456 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#20 1.577 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 15.8 MB/s eta 0:00:00\n", - "#20 1.600 Installing collected packages: pip\n", - "#20 2.543 Successfully installed pip-25.0\n", - "#20 DONE 2.8s\n", - "\n", - "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.685 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.699 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", - "#21 0.720 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 0.725 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 0.855 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 0.914 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.079 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.083 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.099 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.105 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.110 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.137 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.141 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.200 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.205 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", - "#21 1.235 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.239 Downloading numpy_stl-3.2.0-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.324 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", - "#21 1.330 Downloading trimesh-4.6.0-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.385 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", - "#21 1.389 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.407 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 12))\n", - "#21 1.412 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.583 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.587 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.607 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.612 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 1.624 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.628 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 1.640 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.644 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.675 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.680 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 1.725 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.731 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 1.831 Collecting scipy>=1.11.2 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.836 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.860 Collecting networkx>=3.0 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.864 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 1.891 Collecting imageio!=2.35.0,>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.896 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", - "#21 1.950 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.953 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", - "#21 1.970 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.974 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", - "#21 1.992 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", - "#21 1.997 Downloading python_utils-3.9.1-py2.py3-none-any.whl.metadata (9.8 kB)\n", - "#21 2.029 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.033 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 2.050 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.054 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 2.074 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.078 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 2.125 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.129 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.140 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.144 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.155 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.158 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.170 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.174 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.183 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.187 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.198 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.202 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.212 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.216 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.227 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.230 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.242 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.246 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.255 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.258 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", - "#21 2.272 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.276 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 2.293 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.301 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 2.317 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.322 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.333 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.337 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#21 2.352 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.355 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 2.380 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.384 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 2.391 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12)) (25.0)\n", - "#21 2.403 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.407 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 2.475 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.479 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 2.500 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.504 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 2.580 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.585 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 2.636 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.640 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.746 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.750 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 2.761 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.765 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.804 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.810 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.856 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.860 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.884 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 2.885 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 2.889 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 2.896 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.012 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.017 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 3.106 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.110 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 3.124 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.129 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 3.155 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.159 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 3.184 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.189 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.226 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.230 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 3.817 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.822 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 3.848 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", - "#21 3.863 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 104.9 MB/s eta 0:00:00\n", - "#21 3.868 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 3.886 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 115.5 MB/s eta 0:00:00\n", - "#21 3.896 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 3.928 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 116.2 MB/s eta 0:00:00\n", - "#21 3.934 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 4.103 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 112.1 MB/s eta 0:00:00\n", - "#21 4.112 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 4.141 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 95.7 MB/s eta 0:00:00\n", - "#21 4.151 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 4.640 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 108.5 MB/s eta 0:00:00\n", - "#21 4.649 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", - "#21 4.803 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 98.1 MB/s eta 0:00:00\n", - "#21 4.811 Downloading numpy_stl-3.2.0-py3-none-any.whl (20 kB)\n", - "#21 4.816 Downloading trimesh-4.6.0-py3-none-any.whl (706 kB)\n", - "#21 4.826 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 707.0/707.0 kB 141.2 MB/s eta 0:00:00\n", - "#21 4.833 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", - "#21 12.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 84.6 MB/s eta 0:00:00\n", - "#21 12.83 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 15.99 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 114.6 MB/s eta 0:00:00\n", - "#21 15.99 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 16.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.7 MB/s eta 0:00:00\n", - "#21 16.13 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 16.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.6 MB/s eta 0:00:00\n", - "#21 16.34 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 16.36 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 127.5 MB/s eta 0:00:00\n", - "#21 16.36 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 22.23 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 109.9 MB/s eta 0:00:00\n", - "#21 22.24 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 24.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 104.8 MB/s eta 0:00:00\n", - "#21 24.27 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 24.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 114.1 MB/s eta 0:00:00\n", - "#21 24.77 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 25.91 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 112.5 MB/s eta 0:00:00\n", - "#21 25.92 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 27.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 115.7 MB/s eta 0:00:00\n", - "#21 27.73 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", - "#21 29.05 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 114.0 MB/s eta 0:00:00\n", - "#21 29.06 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 30.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 116.5 MB/s eta 0:00:00\n", - "#21 30.69 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 30.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.2 MB/s eta 0:00:00\n", - "#21 30.89 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 30.89 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 30.95 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 116.5 MB/s eta 0:00:00\n", - "#21 30.96 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", - "#21 33.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 100.3 MB/s eta 0:00:00\n", - "#21 33.50 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 33.96 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 89.8 MB/s eta 0:00:00\n", - "#21 33.96 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 33.97 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 35.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 86.0 MB/s eta 0:00:00\n", - "#21 35.03 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", - "#21 35.04 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 35.05 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 35.05 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", - "#21 35.06 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 35.08 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 121.0 MB/s eta 0:00:00\n", - "#21 35.08 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 35.09 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 35.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 117.8 MB/s eta 0:00:00\n", - "#21 35.14 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 35.15 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 35.18 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 117.6 MB/s eta 0:00:00\n", - "#21 35.19 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 35.19 Downloading python_utils-3.9.1-py2.py3-none-any.whl (32 kB)\n", - "#21 35.20 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 35.21 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 148.8 MB/s eta 0:00:00\n", - "#21 35.21 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 35.22 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", - "#21 35.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 117.2 MB/s eta 0:00:00\n", - "#21 35.57 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", - "#21 35.58 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 35.59 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 35.59 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 35.60 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 35.60 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 35.61 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 35.62 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 35.62 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 35.63 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 35.63 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 35.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 117.8 MB/s eta 0:00:00\n", - "#21 35.64 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 35.65 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 35.67 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 110.5 MB/s eta 0:00:00\n", - "#21 35.68 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 35.68 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 43.57 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, trimesh, tifffile, scipy, requests, python-utils, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, lazy-loader, jinja2, imageio, cupy-cuda12x, scikit-image, pydantic, nvidia-cusolver-cu12, numpy-stl, highdicom, torch, python-on-whales, monai, holoscan\n", - "#21 112.3 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 imageio-2.37.0 importlib-resources-6.5.2 jinja2-3.1.5 lazy-loader-0.4 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 numpy-stl-3.2.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 python-utils-3.9.1 pyyaml-6.0.2 requests-2.32.3 scikit-image-0.25.1 scipy-1.15.1 sympy-1.13.1 tifffile-2025.1.10 torch-2.6.0 trimesh-4.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 114.1s\n", - "\n", - "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.281 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.447 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.474 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.501 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.503 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.544 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.549 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.627 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.632 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.655 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", - "#22 1.656 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.658 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.659 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.660 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.661 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.662 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.662 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.663 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.664 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.670 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.678 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.680 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.687 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 1.692 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.693 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.694 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.694 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.697 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 1.713 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 1.715 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 1.734 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.762 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.784 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 2.132 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 2.316 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.7s\n", - "\n", - "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.2s\n", - "\n", - "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", + "#20 [release 11/19] RUN pip install --upgrade pip\n", + "#20 0.826 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.854 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.009 Collecting pip\n", + "#20 1.083 Downloading pip-25.0.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.257 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 10.9 MB/s eta 0:00:00\n", + "#20 1.288 Installing collected packages: pip\n", + "#20 2.028 Successfully installed pip-25.0.1\n", + "#20 DONE 2.2s\n", + "\n", + "#21 [release 12/19] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 0.646 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.682 Downloading highdicom-0.25.1-py3-none-any.whl.metadata (5.0 kB)\n", + "#21 0.718 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.731 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.833 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.845 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.074 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.085 Downloading numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.122 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.136 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.144 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.183 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.193 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.259 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.270 Downloading scikit_image-0.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", + "#21 1.303 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", + "#21 1.315 Downloading numpy_stl-3.2.0-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.414 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", + "#21 1.425 Downloading trimesh-4.6.8-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.477 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", + "#21 1.488 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.650 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.662 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (8.9 kB)\n", + "#21 1.711 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.724 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.757 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.771 Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.797 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.819 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.859 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.871 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.923 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.934 Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 2.041 Collecting scipy>=1.11.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.052 Downloading scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 2.086 Collecting networkx>=3.0 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.097 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 2.139 Collecting imageio!=2.35.0,>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.151 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", + "#21 2.212 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.224 Downloading tifffile-2025.3.30-py3-none-any.whl.metadata (32 kB)\n", + "#21 2.248 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.259 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", + "#21 2.293 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.305 Downloading python_utils-3.9.1-py2.py3-none-any.whl.metadata (9.8 kB)\n", + "#21 2.367 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.378 Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.412 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.423 Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.457 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.468 Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.550 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.561 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.581 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.592 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.612 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.623 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.642 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.653 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.672 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.683 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.702 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.714 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.733 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.743 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.762 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.773 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.804 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.815 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.831 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.842 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.861 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.872 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.895 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.907 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.930 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.941 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.960 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.972 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 3.045 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 3.055 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 3.090 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 3.102 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 3.144 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 3.145 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 3.156 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.170 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.252 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 3.263 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 3.280 Downloading highdicom-0.25.1-py3-none-any.whl (1.1 MB)\n", + "#21 3.313 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 51.4 MB/s eta 0:00:00\n", + "#21 3.328 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 3.349 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 89.2 MB/s eta 0:00:00\n", + "#21 3.364 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.416 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 67.6 MB/s eta 0:00:00\n", + "#21 3.431 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 3.685 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 73.4 MB/s eta 0:00:00\n", + "#21 3.700 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 3.736 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 75.0 MB/s eta 0:00:00\n", + "#21 3.751 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 4.363 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 86.5 MB/s eta 0:00:00\n", + "#21 4.377 Downloading scikit_image-0.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", + "#21 4.533 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 97.9 MB/s eta 0:00:00\n", + "#21 4.556 Downloading numpy_stl-3.2.0-py3-none-any.whl (20 kB)\n", + "#21 4.571 Downloading trimesh-4.6.8-py3-none-any.whl (709 kB)\n", + "#21 4.581 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 709.3/709.3 kB 201.3 MB/s eta 0:00:00\n", + "#21 4.598 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 11.67 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 106.7 MB/s eta 0:00:00\n", + "#21 11.69 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 14.89 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 115.9 MB/s eta 0:00:00\n", + "#21 14.90 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 15.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 100.5 MB/s eta 0:00:00\n", + "#21 15.06 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 15.31 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 98.3 MB/s eta 0:00:00\n", + "#21 15.32 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 15.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 95.7 MB/s eta 0:00:00\n", + "#21 15.35 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 21.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 109.3 MB/s eta 0:00:00\n", + "#21 21.34 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 23.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 116.0 MB/s eta 0:00:00\n", + "#21 23.19 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 23.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 95.6 MB/s eta 0:00:00\n", + "#21 23.80 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 25.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 103.4 MB/s eta 0:00:00\n", + "#21 25.05 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 26.90 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 112.6 MB/s eta 0:00:00\n", + "#21 26.92 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 28.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 112.3 MB/s eta 0:00:00\n", + "#21 28.27 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 30.00 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 109.4 MB/s eta 0:00:00\n", + "#21 30.01 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 30.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 113.9 MB/s eta 0:00:00\n", + "#21 30.21 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 30.23 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 30.29 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 119.1 MB/s eta 0:00:00\n", + "#21 30.30 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 32.93 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 96.3 MB/s eta 0:00:00\n", + "#21 32.95 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", + "#21 32.96 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 32.98 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", + "#21 32.99 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 33.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 113.8 MB/s eta 0:00:00\n", + "#21 33.02 Downloading packaging-25.0-py3-none-any.whl (66 kB)\n", + "#21 33.04 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.6 MB)\n", + "#21 33.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 107.2 MB/s eta 0:00:00\n", + "#21 33.10 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 33.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 104.8 MB/s eta 0:00:00\n", + "#21 33.14 Downloading python_utils-3.9.1-py2.py3-none-any.whl (32 kB)\n", + "#21 33.15 Downloading scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.6 MB)\n", + "#21 33.50 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 37.6/37.6 MB 111.2 MB/s eta 0:00:00\n", + "#21 33.51 Downloading tifffile-2025.3.30-py3-none-any.whl (226 kB)\n", + "#21 33.53 Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)\n", + "#21 33.54 Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n", + "#21 33.56 Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n", + "#21 33.57 Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "#21 33.59 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 33.60 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 33.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 201.5 MB/s eta 0:00:00\n", + "#21 41.09 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, typing-extensions, sympy, pydicom, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, fsspec, filelock, trimesh, tifffile, scipy, python-utils, pyjpegls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, lazy-loader, jinja2, imageio, scikit-image, nvidia-cusolver-cu12, numpy-stl, highdicom, torch, monai\n", + "#21 113.8 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 filelock-3.18.0 fsspec-2025.3.2 highdicom-0.25.1 imageio-2.37.0 importlib-resources-6.5.2 jinja2-3.1.6 lazy-loader-0.4 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 numpy-stl-3.2.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-25.0 pillow-11.2.1 pydicom-3.0.1 pyjpegls-1.4.0 python-utils-3.9.1 scikit-image-0.25.2 scipy-1.15.2 sympy-1.13.1 tifffile-2025.3.30 torch-2.6.0 trimesh-4.6.8 triton-3.2.0 typing-extensions-4.13.2\n", + "#21 DONE 117.7s\n", + "\n", + "#22 [release 13/19] COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#22 DONE 0.5s\n", + "\n", + "#23 [release 14/19] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.662 Defaulting to user installation because normal site-packages is not writeable\n", + "#23 0.785 Processing /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.794 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (1.26.4)\n", + "#23 0.876 Collecting holoscan~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 0.901 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.0 kB)\n", + "#23 0.960 Collecting holoscan-cli~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 0.967 Downloading holoscan_cli-3.1.0-py3-none-any.whl.metadata (4.0 kB)\n", + "#23 1.037 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.043 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#23 1.119 Collecting tritonclient>=2.53.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.124 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl.metadata (2.8 kB)\n", + "#23 1.217 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.222 Downloading typeguard-4.4.2-py3-none-any.whl.metadata (3.8 kB)\n", + "#23 1.252 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (25.0.1)\n", + "#23 1.303 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.308 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", + "#23 1.380 Collecting cloudpickle<4.0,>=3.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.385 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#23 1.439 Collecting wheel-axle-runtime<1.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.445 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#23 1.467 Requirement already satisfied: Jinja2<4.0.0,>=3.1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.1.6)\n", + "#23 1.515 Collecting packaging<24.0,>=23.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.520 Downloading packaging-23.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#23 1.646 Collecting psutil<7.0.0,>=6.0.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.650 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 1.724 Collecting python-on-whales<0.61.0,>=0.60.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.731 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", + "#23 1.816 Collecting pyyaml<7.0,>=6.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.820 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#23 1.904 Collecting requests<3.0.0,>=2.31.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.908 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#23 2.039 Collecting python-rapidjson>=0.9.1 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.044 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 2.122 Collecting urllib3>=2.0.7 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.126 Downloading urllib3-2.4.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#23 2.575 Collecting aiohttp<4.0.0,>=3.8.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.579 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)\n", + "#23 2.661 Collecting cuda-python (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.665 Downloading cuda_python-12.8.0-py3-none-any.whl.metadata (15 kB)\n", + "#23 2.815 Collecting geventhttpclient>=2.3.3 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.825 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.7 kB)\n", + "#23 3.334 Collecting grpcio<1.68,>=1.63.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.339 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.9 kB)\n", + "#23 3.555 Collecting protobuf<6.0dev,>=5.26.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.559 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl.metadata (592 bytes)\n", + "#23 3.577 Requirement already satisfied: typing_extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (4.13.2)\n", + "#23 3.626 Collecting aiohappyeyeballs>=2.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.632 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)\n", + "#23 3.676 Collecting aiosignal>=1.1.2 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.681 Downloading aiosignal-1.3.2-py2.py3-none-any.whl.metadata (3.8 kB)\n", + "#23 3.748 Collecting async-timeout<6.0,>=4.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.753 Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)\n", + "#23 3.817 Collecting attrs>=17.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.823 Downloading attrs-25.3.0-py3-none-any.whl.metadata (10 kB)\n", + "#23 3.935 Collecting frozenlist>=1.1.1 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.940 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (16 kB)\n", + "#23 4.201 Collecting multidict<7.0,>=4.5 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.205 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.3 kB)\n", + "#23 4.297 Collecting propcache>=0.2.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.301 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (10 kB)\n", + "#23 4.611 Collecting yarl<2.0,>=1.17.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.615 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (72 kB)\n", + "#23 4.699 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.704 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#23 4.843 Collecting gevent (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.847 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 4.925 Collecting certifi (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.929 Downloading certifi-2025.1.31-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 5.003 Collecting brotli (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.007 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (5.5 kB)\n", + "#23 5.027 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0.0,>=3.1.5->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.0.2)\n", + "#23 5.170 Collecting pydantic<2,>=1.5 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.175 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", + "#23 5.306 Collecting tqdm (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.310 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "#23 5.387 Collecting typer>=0.4.1 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.393 Downloading typer-0.15.2-py3-none-any.whl.metadata (15 kB)\n", + "#23 5.514 Collecting charset-normalizer<4,>=2 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.558 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#23 5.628 Collecting idna<4,>=2.5 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.633 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#23 5.678 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.18.0)\n", + "#23 5.710 Collecting cuda-bindings~=12.8.0 (from cuda-python->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.716 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 5.807 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.812 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", + "#23 5.872 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.878 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "#23 5.971 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.975 Downloading rich-14.0.0-py3-none-any.whl.metadata (18 kB)\n", + "#23 6.146 Collecting greenlet>=3.2.0 (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.150 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (4.1 kB)\n", + "#23 6.201 Collecting zope.event (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.208 Downloading zope.event-5.0-py3-none-any.whl.metadata (4.4 kB)\n", + "#23 6.362 Collecting zope.interface (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.367 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (44 kB)\n", + "#23 6.448 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.453 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", + "#23 6.524 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.529 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 6.548 Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from zope.event->gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (59.6.0)\n", + "#23 6.591 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.598 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "#23 6.645 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#23 6.667 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl (39.8 MB)\n", + "#23 8.166 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 39.8/39.8 MB 26.6 MB/s eta 0:00:00\n", + "#23 8.172 Downloading holoscan_cli-3.1.0-py3-none-any.whl (72 kB)\n", + "#23 8.194 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl (14.4 MB)\n", + "#23 8.442 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.4/14.4 MB 59.4 MB/s eta 0:00:00\n", + "#23 8.449 Downloading typeguard-4.4.2-py3-none-any.whl (35 kB)\n", + "#23 8.477 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB)\n", + "#23 8.516 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 39.9 MB/s eta 0:00:00\n", + "#23 8.522 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#23 8.545 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl (104.6 MB)\n", + "#23 10.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.6/104.6 MB 67.4 MB/s eta 0:00:00\n", + "#23 10.11 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (112 kB)\n", + "#23 10.14 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)\n", + "#23 10.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.9/5.9 MB 54.0 MB/s eta 0:00:00\n", + "#23 10.26 Downloading packaging-23.2-py3-none-any.whl (53 kB)\n", + "#23 10.28 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl (319 kB)\n", + "#23 10.31 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 10.34 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", + "#23 10.36 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)\n", + "#23 10.41 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 37.3 MB/s eta 0:00:00\n", + "#23 10.41 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#23 10.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 18.5 MB/s eta 0:00:00\n", + "#23 10.45 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#23 10.48 Downloading urllib3-2.4.0-py3-none-any.whl (128 kB)\n", + "#23 10.50 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#23 10.53 Downloading cuda_python-12.8.0-py3-none-any.whl (11 kB)\n", + "#23 10.55 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)\n", + "#23 10.57 Downloading aiosignal-1.3.2-py2.py3-none-any.whl (7.6 kB)\n", + "#23 10.59 Downloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)\n", + "#23 10.62 Downloading attrs-25.3.0-py3-none-any.whl (63 kB)\n", + "#23 10.64 Downloading certifi-2025.1.31-py3-none-any.whl (166 kB)\n", + "#23 10.67 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#23 10.69 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB)\n", + "#23 10.89 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 59.7 MB/s eta 0:00:00\n", + "#23 10.90 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#23 10.92 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 10.95 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#23 10.97 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (219 kB)\n", + "#23 10.99 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206 kB)\n", + "#23 11.02 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", + "#23 11.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 49.4 MB/s eta 0:00:00\n", + "#23 11.10 Downloading typer-0.15.2-py3-none-any.whl (45 kB)\n", + "#23 11.13 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (333 kB)\n", + "#23 11.16 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (3.0 MB)\n", + "#23 11.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 51.6 MB/s eta 0:00:00\n", + "#23 11.22 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB)\n", + "#23 11.27 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 44.4 MB/s eta 0:00:00\n", + "#23 11.28 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "#23 11.31 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", + "#23 11.34 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (580 kB)\n", + "#23 11.37 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 580.6/580.6 kB 15.5 MB/s eta 0:00:00\n", + "#23 11.37 Downloading rich-14.0.0-py3-none-any.whl (243 kB)\n", + "#23 11.40 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", + "#23 11.42 Downloading zope.event-5.0-py3-none-any.whl (6.8 kB)\n", + "#23 11.45 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254 kB)\n", + "#23 11.47 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", + "#23 11.50 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", + "#23 11.54 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 31.5 MB/s eta 0:00:00\n", + "#23 11.54 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "#23 12.43 Installing collected packages: fastrlock, cuda-bindings, brotli, zope.interface, zope.event, wheel-axle-runtime, urllib3, typeguard, tqdm, shellingham, pyyaml, python-rapidjson, pygments, pydantic, psutil, protobuf, propcache, packaging, multidict, mdurl, idna, grpcio, greenlet, frozenlist, cupy-cuda12x, cuda-python, colorama, cloudpickle, click, charset-normalizer, certifi, attrs, async-timeout, aiohappyeyeballs, yarl, tritonclient, requests, markdown-it-py, holoscan, gevent, aiosignal, rich, geventhttpclient, aiohttp, typer, python-on-whales, holoscan-cli, monai-deploy-app-sdk\n", + "#23 14.37 Attempting uninstall: packaging\n", + "#23 14.37 Found existing installation: packaging 25.0\n", + "#23 14.38 Uninstalling packaging-25.0:\n", + "#23 14.40 Successfully uninstalled packaging-25.0\n", + "#23 19.15 Successfully installed aiohappyeyeballs-2.6.1 aiohttp-3.11.18 aiosignal-1.3.2 async-timeout-5.0.1 attrs-25.3.0 brotli-1.1.0 certifi-2025.1.31 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-3.1.1 colorama-0.4.6 cuda-bindings-12.8.0 cuda-python-12.8.0 cupy-cuda12x-13.4.1 fastrlock-0.8.3 frozenlist-1.6.0 gevent-25.4.1 geventhttpclient-2.3.3 greenlet-3.2.1 grpcio-1.67.1 holoscan-3.1.0 holoscan-cli-3.1.0 idna-3.10 markdown-it-py-3.0.0 mdurl-0.1.2 monai-deploy-app-sdk-0.5.1+37.g96f7e31.dirty multidict-6.4.3 packaging-23.2 propcache-0.3.1 protobuf-5.29.4 psutil-6.1.1 pydantic-1.10.21 pygments-2.19.1 python-on-whales-0.60.1 python-rapidjson-1.20 pyyaml-6.0.2 requests-2.32.3 rich-14.0.0 shellingham-1.5.4 tqdm-4.67.1 tritonclient-2.56.0 typeguard-4.4.2 typer-0.15.2 urllib3-2.4.0 wheel-axle-runtime-0.0.6 yarl-1.20.0 zope.event-5.0 zope.interface-7.2\n", + "#23 DONE 22.0s\n", + "\n", + "#24 [release 15/19] COPY ./models /opt/holoscan/models\n", + "#24 DONE 0.3s\n", + "\n", + "#25 [release 16/19] COPY ./map/app.json /etc/holoscan/app.json\n", "#25 DONE 0.1s\n", "\n", - "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 [release 17/19] COPY ./app.config /var/holoscan/app.yaml\n", "#26 DONE 0.1s\n", "\n", - "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", + "#27 [release 18/19] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#27 DONE 0.1s\n", "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 211.4s done\n", - "#28 exporting manifest sha256:9912b1b79735694e28133b372df9befe4a729581a452a6ab2ad63b786c87a253 0.0s done\n", - "#28 exporting config sha256:fa77b2f3975cd2da99ca7aabe147114e6dd897a3c7e6f129d44599b80cb260b6 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer f1af28197cc7 320B / 320B\n", - "#29 loading layer 20850dd17414 65.54kB / 5.10MB\n", - "#29 loading layer b9f62cf91cea 557.06kB / 3.40GB\n", - "#29 loading layer b9f62cf91cea 144.83MB / 3.40GB 6.4s\n", - "#29 loading layer b9f62cf91cea 353.17MB / 3.40GB 12.6s\n", - "#29 loading layer b9f62cf91cea 531.43MB / 3.40GB 16.7s\n", - "#29 loading layer b9f62cf91cea 759.27MB / 3.40GB 20.7s\n", - "#29 loading layer b9f62cf91cea 964.82MB / 3.40GB 24.8s\n", - "#29 loading layer b9f62cf91cea 1.20GB / 3.40GB 28.8s\n", - "#29 loading layer b9f62cf91cea 1.40GB / 3.40GB 33.0s\n", - "#29 loading layer b9f62cf91cea 1.66GB / 3.40GB 37.1s\n", - "#29 loading layer b9f62cf91cea 1.86GB / 3.40GB 41.2s\n", - "#29 loading layer b9f62cf91cea 2.17GB / 3.40GB 45.4s\n", - "#29 loading layer b9f62cf91cea 2.35GB / 3.40GB 51.7s\n", - "#29 loading layer b9f62cf91cea 2.38GB / 3.40GB 56.8s\n", - "#29 loading layer b9f62cf91cea 2.62GB / 3.40GB 63.0s\n", - "#29 loading layer b9f62cf91cea 2.88GB / 3.40GB 67.1s\n", - "#29 loading layer b9f62cf91cea 3.13GB / 3.40GB 71.4s\n", - "#29 loading layer b9f62cf91cea 3.31GB / 3.40GB 77.5s\n", - "#29 loading layer 00a02d1497ac 32.77kB / 578.05kB\n", - "#29 loading layer c39f31c9dcbe 196.61kB / 17.81MB\n", - "#29 loading layer c27d336afe81 492B / 492B\n", - "#29 loading layer ad1723897556 315B / 315B\n", - "#29 loading layer c4a750e42b61 302B / 302B\n", - "#29 loading layer 8d8c67a7dde8 3.36kB / 3.36kB\n", - "#29 loading layer f1af28197cc7 320B / 320B 81.6s done\n", - "#29 loading layer 20850dd17414 65.54kB / 5.10MB 81.5s done\n", - "#29 loading layer b9f62cf91cea 3.31GB / 3.40GB 80.9s done\n", - "#29 loading layer 00a02d1497ac 32.77kB / 578.05kB 1.0s done\n", - "#29 loading layer c39f31c9dcbe 196.61kB / 17.81MB 0.8s done\n", - "#29 loading layer c27d336afe81 492B / 492B 0.5s done\n", - "#29 loading layer ad1723897556 315B / 315B 0.5s done\n", - "#29 loading layer c4a750e42b61 302B / 302B 0.4s done\n", - "#29 loading layer 8d8c67a7dde8 3.36kB / 3.36kB 0.4s done\n", - "#29 DONE 81.6s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 124.3s done\n", - "#28 DONE 335.8s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:0514616033bece7aa07be14e038e2deaff1febaded164a7df509159ddeb68afb\n", - "#30 writing layer sha256:0514616033bece7aa07be14e038e2deaff1febaded164a7df509159ddeb68afb 0.0s done\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#30 writing layer sha256:10dca05c4c1d17a0351e6109694f44743a7fab7484c2096ac9e4e6f83d455964 0.1s done\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:400106ccc6c0e4c57943fea0ee16adf7d7f37bc155b2a8a704b41ad227590e75 0.1s done\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#30 writing layer sha256:4d62fb97f3e572427881e00c0d7d2424446cf788a2ff1e7a5864b790880d37bc 0.0s done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#30 writing layer sha256:8e8eda206fe85e2e966fe8e06f6acba89eaf2e6b6cddb66e3e84fc0efc9c6906 0.0s done\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:a8fe21bec5ef4d30051879815a94c399cea9a8a7c5e62d0b2d8dc6ab35851f40\n", - "#30 writing layer sha256:a8fe21bec5ef4d30051879815a94c399cea9a8a7c5e62d0b2d8dc6ab35851f40 0.3s done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:dbe5a881b951fb16a98081093b857b9127105681762f778e9ff16b31ffb07055 0.0s done\n", - "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing layer sha256:f734d777b5a1efc673bfc51bbe4634866e8b0c1735a3ba60913a1c95b8f85844 0.0s done\n", - "#30 writing layer sha256:fcc4d28973337beed9179216a0a6c14235ef3508532b9ebe1f727a9f684c5ab5\n", - "#30 writing layer sha256:fcc4d28973337beed9179216a0a6c14235ef3508532b9ebe1f727a9f684c5ab5 49.9s done\n", - "#30 preparing build cache for export 50.7s done\n", - "#30 writing config sha256:fb02d957d3bc2e55f202f36038ebe4b6dd16cd559d9a96a331e39ae6f5e63b3c 0.0s done\n", - "#30 writing cache manifest sha256:a97d212bf82fe3968fa658499603f14288678605e74c4bf6a3ae8e306dd1f1ff 0.0s done\n", - "#30 DONE 50.7s\n", - "[2025-01-29 14:54:01,342] [INFO] (packager) - Build Summary:\n", + "#28 [release 19/19] COPY ./app /opt/holoscan/app\n", + "#28 DONE 0.1s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 exporting layers\n", + "#29 exporting layers 187.0s done\n", + "#29 exporting manifest sha256:cac1ac4d69726995d3c9e061377448492061d466def990799cc72e811e162e90 0.0s done\n", + "#29 exporting config sha256:aacceda07071b8e9c4e0b360fd0b819d987eef71230c11c95f76c3053bfbd861 0.0s done\n", + "#29 sending tarball\n", + "#29 ...\n", + "\n", + "#30 importing to docker\n", + "#30 loading layer 49b545b4149c 283B / 283B\n", + "#30 loading layer c44b5ca75fdc 65.54kB / 5.09MB\n", + "#30 loading layer 3370fbb67e83 557.06kB / 3.26GB\n", + "#30 loading layer 3370fbb67e83 210.01MB / 3.26GB 6.3s\n", + "#30 loading layer 3370fbb67e83 337.02MB / 3.26GB 12.5s\n", + "#30 loading layer 3370fbb67e83 550.37MB / 3.26GB 18.7s\n", + "#30 loading layer 3370fbb67e83 735.31MB / 3.26GB 22.8s\n", + "#30 loading layer 3370fbb67e83 963.15MB / 3.26GB 27.0s\n", + "#30 loading layer 3370fbb67e83 1.18GB / 3.26GB 31.0s\n", + "#30 loading layer 3370fbb67e83 1.33GB / 3.26GB 37.2s\n", + "#30 loading layer 3370fbb67e83 1.56GB / 3.26GB 41.3s\n", + "#30 loading layer 3370fbb67e83 1.75GB / 3.26GB 45.4s\n", + "#30 loading layer 3370fbb67e83 2.02GB / 3.26GB 49.4s\n", + "#30 loading layer 3370fbb67e83 2.19GB / 3.26GB 55.6s\n", + "#30 loading layer 3370fbb67e83 2.24GB / 3.26GB 62.9s\n", + "#30 loading layer 3370fbb67e83 2.36GB / 3.26GB 69.0s\n", + "#30 loading layer 3370fbb67e83 2.56GB / 3.26GB 73.1s\n", + "#30 loading layer 3370fbb67e83 2.75GB / 3.26GB 77.1s\n", + "#30 loading layer 3370fbb67e83 2.93GB / 3.26GB 83.3s\n", + "#30 loading layer 3370fbb67e83 3.10GB / 3.26GB 89.5s\n", + "#30 loading layer af8c5ba7bee3 32.77kB / 144.30kB\n", + "#30 loading layer 8f8123670c0a 557.06kB / 398.53MB\n", + "#30 loading layer 8f8123670c0a 197.20MB / 398.53MB 2.1s\n", + "#30 loading layer 8f8123670c0a 228.95MB / 398.53MB 4.1s\n", + "#30 loading layer 8f8123670c0a 270.73MB / 398.53MB 6.2s\n", + "#30 loading layer 8f8123670c0a 334.23MB / 398.53MB 8.2s\n", + "#30 loading layer 8f8123670c0a 368.21MB / 398.53MB 10.3s\n", + "#30 loading layer c277737c154f 196.61kB / 17.81MB\n", + "#30 loading layer 01f35eabeadd 493B / 493B\n", + "#30 loading layer 21a6f7132dd0 316B / 316B\n", + "#30 loading layer 22aecd36f9de 302B / 302B\n", + "#30 loading layer ab9d985fcc93 3.33kB / 3.33kB\n", + "#30 loading layer 8f8123670c0a 398.53MB / 398.53MB 13.6s done\n", + "#30 loading layer 49b545b4149c 283B / 283B 109.9s done\n", + "#30 loading layer c44b5ca75fdc 5.09MB / 5.09MB 109.9s done\n", + "#30 loading layer 3370fbb67e83 3.26GB / 3.26GB 109.2s done\n", + "#30 loading layer af8c5ba7bee3 144.30kB / 144.30kB 13.7s done\n", + "#30 loading layer c277737c154f 17.81MB / 17.81MB 1.1s done\n", + "#30 loading layer 01f35eabeadd 493B / 493B 0.7s done\n", + "#30 loading layer 21a6f7132dd0 316B / 316B 0.6s done\n", + "#30 loading layer 22aecd36f9de 302B / 302B 0.5s done\n", + "#30 loading layer ab9d985fcc93 3.33kB / 3.33kB 0.5s done\n", + "#30 DONE 109.9s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 sending tarball 147.3s done\n", + "#29 DONE 334.4s\n", + "\n", + "#31 exporting cache to client directory\n", + "#31 preparing build cache for export\n", + "#31 writing layer sha256:000344a04deee760c0681e29294ee3f527b8299026aef2cfc3fa93e327c63df7\n", + "#31 writing layer sha256:000344a04deee760c0681e29294ee3f527b8299026aef2cfc3fa93e327c63df7 0.1s done\n", + "#31 writing layer sha256:048e6a80d9e1847dcc9526191c8d16c8bdda32e8440cb0e287ba48983787b2ea 0.0s done\n", + "#31 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#31 writing layer sha256:21ef12df128643f4e171d286035dc9c1a1e744f0ff52681473844fa3ebf148f9\n", + "#31 writing layer sha256:21ef12df128643f4e171d286035dc9c1a1e744f0ff52681473844fa3ebf148f9 51.1s done\n", + "#31 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24\n", + "#31 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#31 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#31 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#31 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#31 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", + "#31 writing layer sha256:4984bf91ddd07bd551024b1b6bda153f7d4f5a5caf35d9e2ca01c95afb531638 0.0s done\n", + "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#31 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#31 writing layer sha256:76cf1f2adf6fbbaa3d9ff2c120fc0ccf97b4b5388ee0a0dee82f894ea811caf8 0.1s done\n", + "#31 writing layer sha256:8a18a20487f64bf7fe1ac7ead38280d387b11f3d714179e19b4ecfba68a09f93\n", + "#31 writing layer sha256:8a18a20487f64bf7fe1ac7ead38280d387b11f3d714179e19b4ecfba68a09f93 0.0s done\n", + "#31 writing layer sha256:935b4cb3480886ca00a46c28cd98797870cfc7389818c85cd243869f4548fda4 done\n", + "#31 writing layer sha256:95dbda2f5f8116a35367b28d397faae7d34bd4a713aefe01ccfe5e326b0b0250 done\n", + "#31 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#31 writing layer sha256:9897f28322ebd7b633908503d8877b342e03a47293fcacdc8206b2e5d9f20923\n", + "#31 writing layer sha256:9897f28322ebd7b633908503d8877b342e03a47293fcacdc8206b2e5d9f20923 0.4s done\n", + "#31 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", + "#31 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#31 writing layer sha256:b0436fe850f9a3fce99cc083d570eb3393b83444edf2dc04800a8e4d050d2d83 0.0s done\n", + "#31 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#31 writing layer sha256:d0b9db5eaf93e490f07bab8abb1ac5475febcf822c25f2e1d1c82ff4273a7d0d done\n", + "#31 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#31 writing layer sha256:da44fb0aa6d6f7c651c7eec8e11510c9c048b066b2ba36b261cefea12ff5ee3e done\n", + "#31 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#31 writing layer sha256:f1e6c0e7271e4ce12dd1113858066e0d41d50b338596aea2c15a21da034a7d3d 0.0s done\n", + "#31 writing layer sha256:f3af93a430a247328c59fb2228f6fa43a0ce742b03464db94acf7c45311e31cd done\n", + "#31 writing layer sha256:ff7fc9bdba2b206dc4eb678f49b36a99daf566bf71753dc2cec30a0195f7a41a\n", + "#31 writing layer sha256:ff7fc9bdba2b206dc4eb678f49b36a99daf566bf71753dc2cec30a0195f7a41a 6.8s done\n", + "#31 preparing build cache for export 58.8s done\n", + "#31 writing config sha256:1401476261a3e0a96b4b64a3270960c3fa51a70d62e0cd7a30991c3da24af97e 0.0s done\n", + "#31 writing cache manifest sha256:b4e7496beec087df8709332743a34f2f69a9993f4fdf0ac0d1871c03d8664448 0.0s done\n", + "#31 DONE 58.8s\n", + "[2025-04-22 10:27:40,090] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1883,7 +1968,7 @@ "source": [ "tag_prefix = \"my_app\"\n", "\n", - "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -1902,7 +1987,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 fa77b2f3975c 6 minutes ago 8.82GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 aacceda07071 6 minutes ago 9.25GB\n" ] } ], @@ -1960,7 +2045,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -1984,16 +2069,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-04-22 17:27:43 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 22:54:05 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 22:54:05 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-04-22 17:27:43 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-04-22 17:27:43 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-04-22 17:27:43 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-04-22 17:27:43 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 22:54:05 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-04-22 17:27:43 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-04-22 17:27:43 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -2025,23 +2110,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 14:54:07,456] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 14:54:07,456] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 10:27:44,899] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 10:27:44,899] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 14:54:07,457] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 10:27:44,899] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 14:54:07,457] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 10:27:44,900] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 14:54:07,521] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpieorgxpy/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpieorgxpy/pkg.json\n", - "969dfb951c65e83ccab09c48eaad70245f27a19206b7c42f68cf2020047ab48a\n", - "[2025-01-29 14:54:07,774] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 10:27:44,977] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpmnebv7ra/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpmnebv7ra/pkg.json\n", + "bb0cf20f8662e86bcda22ed7a5faae90e0b66cdd38d6f64a8e2ceb4e95a0ebca\n", + "[2025-04-22 10:27:45,406] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 14:54:07,774] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 10:27:45,407] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 14:54:08,049] [INFO] (common) - Launching container (b7f0dfdee19f) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: peaceful_bose\n", + "[2025-04-22 10:27:45,714] [INFO] (common) - Launching container (21c6001bf0ef) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: youthful_jepsen\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2051,119 +2136,109 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 22:54:08 [INFO] Launching application python3 /opt/holoscan/app ...\n", - "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "2025-04-22 17:27:46 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[2025-01-29 22:54:16,150] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 22:54:16,156] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2025-04-22 17:27:53,854] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2025-01-29 22:54:16,159] [INFO] (root) - End compose\n", + "[2025-04-22 17:27:53,858] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[2025-04-22 17:27:53,860] [INFO] (root) - End compose\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[2025-04-22 17:27:53,886] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", + " # of series: 1\n", "\n", - "[2025-01-29 22:54:16,194] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:54:17,214] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:54:17,214] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - " # of series: 1\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:54:17,214] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series Selection finalized.\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:27:55,081] [INFO] (root) - Casting to float32\n", "\n", - "[2025-01-29 22:54:18,043] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", + "[2025-04-22 17:27:55,383] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", "\n", " warnings.warn(\n", "\n", - "[2025-01-29 22:54:21,728] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", + "[2025-04-22 17:27:59,716] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", "\n", - "[2025-01-29 22:54:23,417] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-04-22 17:28:01,195] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", "\n", - "[2025-01-29 22:54:23,417] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-04-22 17:28:01,196] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " check_person_name(patient_name)\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 17:28:12,578] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[2025-01-29 22:54:38,864] [INFO] (app.AISpleenSegApp) - End run\n", + "[2025-04-22 17:28:12,698] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[2025-01-29 14:54:40,627] [INFO] (common) - Container 'peaceful_bose'(b7f0dfdee19f) exited.\n" + "[2025-04-22 10:28:14,349] [INFO] (common) - Container 'youthful_jepsen'(21c6001bf0ef) exited.\n" ] } ], @@ -2182,7 +2257,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.91779897402861840368941310038395885.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.36310308785029269065941040056862019.dcm stl\n" ] } ], diff --git a/notebooks/tutorials/05_multi_model_app.ipynb b/notebooks/tutorials/05_multi_model_app.ipynb index 0edc6d75..f87b8d35 100644 --- a/notebooks/tutorials/05_multi_model_app.ipynb +++ b/notebooks/tutorials/05_multi_model_app.ipynb @@ -730,70 +730,63 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:58:28,687] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 14:58:28,703] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2025-01-29 14:58:28,709] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:14:06,240] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 12:14:06,259] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=), triton_server_netloc=\n", + "[2025-04-22 12:14:06,266] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", - "[2025-01-29 14:58:28,793] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:58:29,154] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:58:29,155] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 12:14:06,293] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 12:14:06,864] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 12:14:06,865] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:58:29,156] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:58:29,157] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:58:29,157] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:58:29,158] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:58:29,159] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:58:29,160] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:58:29,160] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:58:29,161] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:58:29,163] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:58:29,164] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:58:29,165] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:58:29,932] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2025-04-22 12:14:06,866] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:06,866] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:06,867] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 12:14:06,867] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:06,868] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 12:14:06,868] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 12:14:06,869] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:06,869] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:06,871] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:06,871] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:06,872] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:06,872] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 12:14:06,873] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:06,873] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:07,392] [INFO] (root) - Casting to float32\n", + "[2025-04-22 12:14:07,618] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 14:59:07,045] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "[2025-04-22 12:14:45,024] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:59:11,588] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:11,589] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:59:11,590] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:11,591] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:59:11,592] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:59:11,593] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:11,594] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:59:11,596] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:59:11,599] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2025-01-29 14:59:12,924] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:12,925] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:59:12,926] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:12,926] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:59:12,928] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:59:12,930] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:12,932] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:59:12,934] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:59:12,936] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:14:48,476] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:48,477] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:14:48,478] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:48,478] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:14:48,479] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:14:48,480] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:48,480] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:14:48,481] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:14:48,482] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:14:49,557] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:49,559] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:14:49,560] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:49,561] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:14:49,561] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:14:49,562] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:49,563] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:14:49,564] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:14:49,564] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:59:13,097] [INFO] (__main__.App) - End run\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 12:14:49,692] [INFO] (__main__.App) - End run\n" ] } ], @@ -1165,70 +1158,63 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:59:22,117] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2025-01-29 14:59:22,124] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2025-01-29 14:59:22,127] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:14:54,730] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['my_app'])\n", + "[2025-04-22 12:14:54,735] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=), triton_server_netloc=\n", + "[2025-04-22 12:14:54,737] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", - "[2025-01-29 14:59:22,158] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:59:23,236] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 12:14:54,756] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:59:23,521] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:55,815] [INFO] (root) - Casting to float32\n", + "[2025-04-22 12:14:55,872] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 15:00:02,766] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "[2025-04-22 12:15:29,019] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 15:00:08,663] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 15:00:08,663] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:15:32,361] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:15:32,363] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:15:33,347] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:15:33,347] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 15:00:08,802] [INFO] (app.App) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 12:15:33,435] [INFO] (app.App) - End run\n" ] } ], @@ -1246,8 +1232,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.6770039896233970278223165829656417.dcm\n", - "1.2.826.0.1.3680043.10.511.3.99914275872478204692034716344119025.dcm\n" + "1.2.826.0.1.3680043.10.511.3.34841928451888108286361340675987576.dcm\n", + "1.2.826.0.1.3680043.10.511.3.36403385704959959901485544349934328.dcm\n" ] } ], @@ -1324,8 +1310,7 @@ "pydicom>=2.3.0\n", "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", - "torch>=1.12.0\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue\n" + "torch>=1.12.0\n" ] }, { @@ -1348,17 +1333,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 15:00:11,881] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 15:00:12,062] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 15:00:12,063] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-29 15:00:12,063] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 15:00:12,064] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", - "[2025-01-29 15:00:12,064] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", - "[2025-01-29 15:00:12,064] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", - "[2025-01-29 15:00:12,064] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-29 15:00:12,071] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 15:00:12,071] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 15:00:12,075] [DEBUG] (common) - \n", + "[2025-04-22 12:15:35,532] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 12:15:35,793] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 12:15:35,794] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-04-22 12:15:35,794] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 12:15:35,794] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", + "[2025-04-22 12:15:35,795] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", + "[2025-04-22 12:15:35,795] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", + "[2025-04-22 12:15:35,795] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-04-22 12:15:35,798] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 12:15:35,798] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 12:15:35,804] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1386,14 +1371,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"3.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 15:00:12,076] [DEBUG] (common) - \n", + "[2025-04-22 12:15:35,804] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1414,7 +1399,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 15:00:12,629] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:15:36,273] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1432,7 +1417,7 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", @@ -1440,7 +1425,7 @@ " 'models': {'pancreas_ct_dints': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints'),\n", " 'spleen_ct': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct')},\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '3.0.0',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1457,7 +1442,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 15:00:12,629] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:15:36,273] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -1467,15 +1452,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 15:00:12,672] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:15:36,293] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1539,9 +1524,9 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Multi Model App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"3.0.0\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1554,7 +1539,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1613,7 +1598,7 @@ "# Install MONAI Deploy App SDK\n", "\n", "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", + "RUN pip install monai-deploy-app-sdk==3.0.0\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", @@ -1629,7 +1614,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 15:00:12,672] [INFO] (packager.builder) - \n", + "[2025-04-22 12:15:36,294] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1637,22 +1622,21 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", + " Holoscan SDK Package: 3.1.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 15:00:13,368] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 15:00:13,368] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 12:15:36,708] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 12:15:36,708] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile:\n", - "#1 transferring dockerfile: 4.55kB 0.0s done\n", - "#1 DONE 0.4s\n", + "#1 transferring dockerfile: 4.55kB done\n", + "#1 DONE 0.1s\n", "\n", "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", "#2 DONE 0.0s\n", @@ -1670,401 +1654,234 @@ "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from local:16203137030623613086\n", + "#7 importing cache manifest from local:2851983977013277839\n", "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#7 DONE 0.0s\n", "\n", "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#8 DONE 0.0s\n", + "#8 DONE 0.1s\n", "\n", "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#5 DONE 0.4s\n", + "#5 DONE 0.7s\n", "\n", "#6 [internal] load build context\n", - "#6 transferring context: 635.92MB 4.4s done\n", - "#6 DONE 4.6s\n", + "#6 transferring context: 635.92MB 3.7s done\n", + "#6 DONE 3.7s\n", "\n", - "#9 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#9 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#9 CACHED\n", "\n", - "#10 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#10 CACHED\n", "\n", - "#11 [release 6/18] WORKDIR /var/holoscan\n", + "#11 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#11 CACHED\n", "\n", "#12 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#13 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#13 CACHED\n", "\n", - "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#14 [release 6/18] WORKDIR /var/holoscan\n", "#14 CACHED\n", "\n", - "#15 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#15 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#15 CACHED\n", "\n", - "#16 [release 9/18] WORKDIR /var/holoscan\n", + "#16 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#16 CACHED\n", "\n", - "#17 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#17 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#17 CACHED\n", "\n", - "#18 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#18 [release 9/18] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", - "#19 CACHED\n", + "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 DONE 4.0s\n", "\n", "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 CACHED\n", + "#20 0.851 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.897 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.075 Collecting pip\n", + "#20 1.173 Downloading pip-25.0.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.340 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 11.4 MB/s eta 0:00:00\n", + "#20 1.372 Installing collected packages: pip\n", + "#20 2.121 Successfully installed pip-25.0.1\n", + "#20 DONE 2.3s\n", "\n", "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 1.022 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 1.037 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", - "#21 1.121 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 1.127 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 1.262 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 1.267 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.541 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.546 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.564 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.570 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.579 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.627 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.631 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.662 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.667 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.682 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.686 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.823 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.827 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.847 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.852 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 1.871 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.874 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 1.883 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.886 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.917 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.922 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 1.982 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.986 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 2.023 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.027 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 2.066 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.071 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 2.103 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.110 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 2.137 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.141 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 2.219 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.223 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.235 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.240 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.247 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.251 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.271 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.276 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.287 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.291 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.301 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.304 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.313 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.317 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.325 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.328 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.339 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.342 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.348 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.351 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", - "#21 2.359 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.363 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 2.377 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.382 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 2.396 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.401 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.418 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.423 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#21 2.445 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.450 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 2.488 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.492 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 2.502 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9)) (25.0)\n", - "#21 2.517 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.523 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 2.564 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.568 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 2.669 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.673 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 2.707 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.711 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 2.742 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.748 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.862 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.867 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 2.884 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.889 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.939 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.946 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 3.034 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.040 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 3.057 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 3.058 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 3.064 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.074 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.266 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.271 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 3.394 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.398 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 3.417 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.426 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 3.479 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.484 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 3.515 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.520 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.578 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.583 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 4.171 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 4.175 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 4.199 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", - "#21 4.216 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 99.0 MB/s eta 0:00:00\n", - "#21 4.222 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 4.240 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 106.6 MB/s eta 0:00:00\n", - "#21 4.246 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 4.277 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 116.6 MB/s eta 0:00:00\n", - "#21 4.284 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 4.443 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.0 MB/s eta 0:00:00\n", - "#21 4.453 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 4.475 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 119.4 MB/s eta 0:00:00\n", - "#21 4.482 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 5.193 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 74.2 MB/s eta 0:00:00\n", - "#21 5.203 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", - "#21 12.95 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 95.8 MB/s eta 0:00:00\n", - "#21 12.96 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 16.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 106.8 MB/s eta 0:00:00\n", - "#21 16.34 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 16.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.7 MB/s eta 0:00:00\n", - "#21 16.47 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 16.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.0 MB/s eta 0:00:00\n", - "#21 16.69 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 16.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 148.8 MB/s eta 0:00:00\n", - "#21 16.71 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 23.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 104.7 MB/s eta 0:00:00\n", - "#21 23.30 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 25.14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 115.6 MB/s eta 0:00:00\n", - "#21 25.14 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 25.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 116.8 MB/s eta 0:00:00\n", - "#21 25.64 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 26.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 114.0 MB/s eta 0:00:00\n", - "#21 26.77 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 28.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 110.3 MB/s eta 0:00:00\n", - "#21 28.66 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", - "#21 30.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 78.8 MB/s eta 0:00:00\n", - "#21 30.58 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 32.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 117.2 MB/s eta 0:00:00\n", - "#21 32.20 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 32.39 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.1 MB/s eta 0:00:00\n", - "#21 32.39 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 32.40 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 32.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 113.4 MB/s eta 0:00:00\n", - "#21 32.47 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", - "#21 35.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 92.7 MB/s eta 0:00:00\n", - "#21 35.21 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 35.74 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 77.7 MB/s eta 0:00:00\n", - "#21 35.75 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 35.76 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 37.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 68.2 MB/s eta 0:00:00\n", - "#21 37.10 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 37.10 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 37.11 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 37.11 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 37.16 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 116.4 MB/s eta 0:00:00\n", - "#21 37.16 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 37.17 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 37.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 119.3 MB/s eta 0:00:00\n", - "#21 37.21 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 37.22 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 37.24 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 115.0 MB/s eta 0:00:00\n", - "#21 37.25 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 37.25 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 37.26 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 37.26 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 37.27 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 37.28 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 37.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 118.4 MB/s eta 0:00:00\n", - "#21 37.30 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 37.31 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 37.31 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 37.32 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 37.32 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 37.33 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 37.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 168.9 MB/s eta 0:00:00\n", - "#21 37.34 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 37.35 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 37.37 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 123.9 MB/s eta 0:00:00\n", - "#21 37.38 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 37.38 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 50.73 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, requests, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, cupy-cuda12x, pydantic, nvidia-cusolver-cu12, highdicom, torch, python-on-whales, monai, holoscan\n", - "#21 120.9 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 importlib-resources-6.5.2 jinja2-3.1.5 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 122.3s\n", - "\n", - "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.371 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.566 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.620 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.653 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.6/132.6 KB 4.9 MB/s eta 0:00:00\n", - "#22 1.673 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.735 Collecting colorama>=0.4.1\n", - "#22 1.742 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.803 Collecting typeguard>=3.0.0\n", - "#22 1.807 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 1.817 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.833 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.834 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.835 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.836 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.837 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.838 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.839 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.839 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.840 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.911 Collecting pip>22.0.2\n", - "#22 1.924 Using cached pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#22 1.949 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.964 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.968 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.994 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 2.005 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 2.007 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 2.008 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 2.009 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 2.018 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 2.044 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 2.045 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 2.491 Installing collected packages: typeguard, pip, colorama, monai-deploy-app-sdk\n", - "#22 3.518 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 pip-25.0 typeguard-4.4.1\n", - "#22 DONE 3.7s\n", - "\n", - "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 2.4s\n", - "\n", - "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", - "#25 DONE 0.1s\n", - "\n", - "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#26 DONE 0.1s\n", - "\n", - "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", - "#27 DONE 0.1s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 206.4s done\n", - "#28 exporting manifest sha256:7796b1f150f7b83d9b887b3a8fc46ac5edde925a0aae4b3502d7637952da2aca 0.0s done\n", - "#28 exporting config sha256:b9c42a576652b4a8d6579e9068e22d8fd09cdc9906a5b6d514c7e958be6f7862 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer 4e7654462151 557.06kB / 3.34GB\n", - "#29 loading layer 4e7654462151 140.38MB / 3.34GB 6.4s\n", - "#29 loading layer 4e7654462151 350.39MB / 3.34GB 12.7s\n", - "#29 loading layer 4e7654462151 549.26MB / 3.34GB 18.9s\n", - "#29 loading layer 4e7654462151 783.78MB / 3.34GB 23.1s\n", - "#29 loading layer 4e7654462151 968.16MB / 3.34GB 27.2s\n", - "#29 loading layer 4e7654462151 1.19GB / 3.34GB 31.3s\n", - "#29 loading layer 4e7654462151 1.37GB / 3.34GB 35.3s\n", - "#29 loading layer 4e7654462151 1.55GB / 3.34GB 39.4s\n", - "#29 loading layer 4e7654462151 1.80GB / 3.34GB 43.4s\n", - "#29 loading layer 4e7654462151 2.02GB / 3.34GB 47.5s\n", - "#29 loading layer 4e7654462151 2.27GB / 3.34GB 51.6s\n", - "#29 loading layer 4e7654462151 2.31GB / 3.34GB 58.3s\n", - "#29 loading layer 4e7654462151 2.43GB / 3.34GB 64.7s\n", - "#29 loading layer 4e7654462151 2.62GB / 3.34GB 68.7s\n", - "#29 loading layer 4e7654462151 2.86GB / 3.34GB 72.9s\n", - "#29 loading layer 4e7654462151 3.04GB / 3.34GB 77.0s\n", - "#29 loading layer 4e7654462151 3.23GB / 3.34GB 83.2s\n", - "#29 loading layer 23ba8544cc7e 65.54kB / 3.82MB\n", - "#29 loading layer 2a706ddec870 557.06kB / 584.49MB\n", - "#29 loading layer 2a706ddec870 100.83MB / 584.49MB 2.1s\n", - "#29 loading layer 2a706ddec870 289.11MB / 584.49MB 4.1s\n", - "#29 loading layer 2a706ddec870 445.64MB / 584.49MB 6.2s\n", - "#29 loading layer 2a706ddec870 584.49MB / 584.49MB 8.3s\n", - "#29 loading layer 14707cfba07c 492B / 492B\n", - "#29 loading layer d97f86cb4552 313B / 313B\n", - "#29 loading layer 1684cea86f9e 324B / 324B\n", - "#29 loading layer 6a14ef597340 4.04kB / 4.04kB\n", - "#29 loading layer d97f86cb4552 313B / 313B 0.5s done\n", - "#29 loading layer 4e7654462151 3.29GB / 3.34GB 96.8s done\n", - "#29 loading layer 23ba8544cc7e 65.54kB / 3.82MB 9.6s done\n", - "#29 loading layer 2a706ddec870 584.49MB / 584.49MB 8.9s done\n", - "#29 loading layer 14707cfba07c 492B / 492B 0.5s done\n", - "#29 loading layer 1684cea86f9e 324B / 324B 0.4s done\n", - "#29 loading layer 6a14ef597340 4.04kB / 4.04kB 0.3s done\n", - "#29 DONE 96.8s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 144.5s done\n", - "#28 DONE 351.0s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#30 writing layer sha256:4ef542fe09116c53da73effaa3b0ebc83c3619f95ecea3bdd81b29c92ad0337f 0.0s done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:53d193b4273e718bc4bed3199afbc347e3e9e143091139ed90456d0377788704\n", - "#30 writing layer sha256:53d193b4273e718bc4bed3199afbc347e3e9e143091139ed90456d0377788704 53.5s done\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#30 writing layer sha256:70d632523e65ac9d5b79c4b1edf7ded894919e27b1af66b6fed294a414b875ab 0.0s done\n", - "#30 writing layer sha256:90d2434bd2896a650e2f9268e355424f72f461e002af093a3e88f9ab55e8e980 0.0s done\n", - "#30 writing layer sha256:9206dd7b04116a7dc5c43818efa3d57c3d9c2bab68366d1098eac0743dbd231b\n", - "#30 writing layer sha256:9206dd7b04116a7dc5c43818efa3d57c3d9c2bab68366d1098eac0743dbd231b 10.4s done\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:9f4298c73aaf415f67893215f4cfc6af9688163dfd98172a08fb2d13177eb027 0.0s done\n", - "#30 writing layer sha256:a7292bbf42d93ed9fca9e2ff7e5283d2e7f737dad14092919db7645628bb0838 done\n", - "#30 writing layer sha256:a8560dc90723760d8d4daf42b22f7760b034c87e9348697c113118b992d830ca done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#30 writing layer sha256:c44760856749b1b70a3f10d166baa2075f84fe4147e20efdc97ae6b8373575b0 0.1s done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd\n", - "#30 preparing build cache for export 64.3s done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing config sha256:826f5efd34c54c319233472ed2d0b701e48d72c65ac5340a90c4583be4465fa7 0.0s done\n", - "#30 writing cache manifest sha256:b26c61f9f724af74f9758287216e114370ea6a82f8f653c7988e3f6dae5b164d 0.0s done\n", - "#30 DONE 64.3s\n", - "[2025-01-29 15:09:25,383] [INFO] (packager) - Build Summary:\n", + "#21 0.675 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.728 Downloading highdicom-0.25.1-py3-none-any.whl.metadata (5.0 kB)\n", + "#21 0.822 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.835 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.931 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.961 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.149 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.161 Downloading numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.211 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.224 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.233 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.259 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.272 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.310 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.323 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.489 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.500 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (8.9 kB)\n", + "#21 1.605 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.619 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.641 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.652 Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.670 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.681 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.746 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.759 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.817 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.828 Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 1.857 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.869 Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 1.897 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.909 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 1.929 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.940 Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 1.966 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.979 Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.031 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.044 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.060 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.073 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.097 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.111 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.126 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.140 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.160 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.212 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.232 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.245 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.268 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.282 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.298 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.312 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.331 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.344 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.359 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.373 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.387 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.399 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.416 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.429 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.445 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.457 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.483 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.497 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 2.525 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.537 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 2.566 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.577 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 2.597 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 2.597 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 2.609 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.622 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.679 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.690 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.717 Downloading highdicom-0.25.1-py3-none-any.whl (1.1 MB)\n", + "#21 3.009 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 4.1 MB/s eta 0:00:00\n", + "#21 3.027 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 3.342 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 5.3 MB/s eta 0:00:00\n", + "#21 3.356 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.851 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 6.7 MB/s eta 0:00:00\n", + "#21 3.867 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 5.943 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 8.8 MB/s eta 0:00:00\n", + "#21 5.957 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 6.217 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 9.5 MB/s eta 0:00:00\n", + "#21 6.232 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 16.76 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 5.0 MB/s eta 0:00:00\n", + "#21 16.77 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 30.05 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 106.7 MB/s eta 0:00:00\n", + "#21 30.07 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 33.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 109.6 MB/s eta 0:00:00\n", + "#21 33.34 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 33.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 113.6 MB/s eta 0:00:00\n", + "#21 33.48 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 33.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 113.8 MB/s eta 0:00:00\n", + "#21 33.71 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 33.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 194.7 MB/s eta 0:00:00\n", + "#21 33.74 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 43.59 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 77.9 MB/s eta 0:00:00\n", + "#21 43.61 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 45.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 96.9 MB/s eta 0:00:00\n", + "#21 45.81 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 46.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 109.8 MB/s eta 0:00:00\n", + "#21 46.34 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 47.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 116.1 MB/s eta 0:00:00\n", + "#21 47.46 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 49.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 111.0 MB/s eta 0:00:00\n", + "#21 49.35 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 50.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 112.2 MB/s eta 0:00:00\n", + "#21 50.70 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 52.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 117.0 MB/s eta 0:00:00\n", + "#21 52.34 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 52.52 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.9 MB/s eta 0:00:00\n", + "#21 52.53 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 52.54 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 52.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 122.9 MB/s eta 0:00:00\n", + "#21 52.62 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 55.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 101.2 MB/s eta 0:00:00\n", + "#21 55.14 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 55.15 Downloading packaging-25.0-py3-none-any.whl (66 kB)\n", + "#21 55.17 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.6 MB)\n", + "#21 55.21 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 113.8 MB/s eta 0:00:00\n", + "#21 55.30 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 55.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 112.6 MB/s eta 0:00:00\n", + "#21 55.34 Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)\n", + "#21 55.35 Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n", + "#21 55.37 Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n", + "#21 55.38 Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "#21 55.40 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 55.42 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 115.7 MB/s eta 0:00:00\n", + "#21 55.43 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 55.45 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 55.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 183.2 MB/s eta 0:00:00\n", + "#21 63.66 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, typing-extensions, sympy, pydicom, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, fsspec, filelock, pyjpegls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, nvidia-cusolver-cu12, highdicom, torch, monai\n", + "#21 126.4 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 filelock-3.18.0 fsspec-2025.3.2 highdicom-0.25.1 importlib-resources-6.5.2 jinja2-3.1.6 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-25.0 pillow-11.2.1 pydicom-3.0.1 pyjpegls-1.4.0 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.13.2\n", + "#21 DONE 127.8s\n", + "\n", + "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==3.0.0\n", + "#22 0.957 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 1.121 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "#22 1.240 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "#22 ERROR: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "------\n", + " > [release 13/18] RUN pip install monai-deploy-app-sdk==3.0.0:\n", + "0.957 Defaulting to user installation because normal site-packages is not writeable\n", + "1.121 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "1.240 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "------\n", + "Dockerfile:137\n", + "--------------------\n", + " 135 | \n", + " 136 | # Install MONAI Deploy from PyPI org\n", + " 137 | >>> RUN pip install monai-deploy-app-sdk==3.0.0\n", + " 138 | \n", + " 139 | \n", + "--------------------\n", + "ERROR: failed to solve: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "[2025-04-22 12:17:58,073] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", - " Status: Succeeded\n", - " Docker Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Tarball: None\n" + " Status: Failure\n", + " Error: Error building image: see Docker output for additional details.\n", + " \n" ] } ], "source": [ "tag_prefix = \"my_app\"\n", "\n", - "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -2083,7 +1900,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 b9c42a576652 6 minutes ago 9.26GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 aacceda07071 2 hours ago 9.25GB\n" ] } ], @@ -2141,7 +1958,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -2153,29 +1970,28 @@ " \"applicationRoot\": \"/opt/holoscan/app\",\n", " \"modelRoot\": \"/opt/holoscan/models\",\n", " \"models\": {\n", - " \"spleen_ct\": \"/opt/holoscan/models/spleen_ct\",\n", - " \"pancreas_ct_dints\": \"/opt/holoscan/models/pancreas_ct_dints\"\n", + " \"model\": \"/opt/holoscan/models/model\"\n", " },\n", " \"resources\": {\n", " \"cpu\": 1,\n", " \"gpu\": 1,\n", " \"memory\": \"1Gi\",\n", - " \"gpuMemory\": \"10Gi\"\n", + " \"gpuMemory\": \"6Gi\"\n", " },\n", " \"version\": 1,\n", " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-29 23:09:29 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-04-22 19:18:00 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-29 23:09:29 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 23:09:29 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 23:09:29 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-04-22 19:18:00 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-04-22 19:18:00 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-04-22 19:18:00 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-29 23:09:29 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-04-22 19:18:00 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2025-01-29 23:09:31 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 23:09:31 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-04-22 19:18:00 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-04-22 19:18:00 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -2207,23 +2023,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 15:09:34,608] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 12:18:02,444] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 12:18:02,444] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 12:18:02,445] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 12:18:02,445] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 15:09:34,693] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpy9h8ea88/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpy9h8ea88/pkg.json\n", - "2e87441a06e4a01c5fdfaff50540f53f482fd9eed91ae31153adafbd852300e0\n", - "[2025-01-29 15:09:34,990] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 12:18:02,523] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmprw2gvfwr/app.json\n", + "Successfully copied 2.05kB to /tmp/tmprw2gvfwr/pkg.json\n", + "991136f12d4255c8e8f7bdbf80acfad80770e774a5441551832ddc3d52c5c4cf\n", + "[2025-04-22 12:18:02,786] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 15:09:34,991] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 12:18:02,787] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 15:09:35,353] [INFO] (common) - Launching container (65c9ea7f2024) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: busy_buck\n", + "[2025-04-22 12:18:03,056] [INFO] (common) - Launching container (4ba4a525283c) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: zealous_mclaren\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2233,137 +2049,109 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 23:09:36 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-04-22 19:18:03 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 23:09:42,422] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2025-04-22 19:18:11,324] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2025-01-29 23:09:42,436] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2025-04-22 19:18:11,326] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[2025-01-29 23:09:42,440] [INFO] (root) - End compose\n", + "[2025-04-22 19:18:11,329] [INFO] (root) - End compose\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[2025-04-22 19:18:11,356] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[2025-04-22 19:18:12,402] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + " # of series: 1\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 23:09:42,481] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - " # of series: 1\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series Selection finalized.\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 19:18:12,611] [INFO] (root) - Casting to float32\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "\n", - "[2025-01-29 23:09:44,150] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", + "[2025-04-22 19:18:12,667] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", "\n", " warnings.warn(\n", "\n", - "[2025-01-29 23:10:20,945] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", + "[2025-04-22 19:18:16,253] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2025-04-22 19:18:17,650] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", "\n", - " check_person_name(patient_name)\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 19:18:17,650] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + " check_person_name(patient_name)\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 19:18:28,325] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 19:18:28,325] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[2025-01-29 23:10:26,371] [INFO] (app.App) - End run\n", + "[2025-04-22 19:18:28,421] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[2025-01-29 15:10:28,142] [INFO] (common) - Container 'busy_buck'(65c9ea7f2024) exited.\n" + "[2025-04-22 12:18:29,792] [INFO] (common) - Container 'zealous_mclaren'(4ba4a525283c) exited.\n" ] } ], @@ -2389,8 +2177,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.64688317802311184609213362007999742.dcm\n", - "1.2.826.0.1.3680043.10.511.3.94198214068593573417987012030437034.dcm\n" + "1.2.826.0.1.3680043.10.511.3.11413742162001654228707576103547421.dcm stl\n" ] } ], diff --git a/requirements.txt b/requirements.txt index 99bbb796..ff677186 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ -holoscan~=2.0 +holoscan~=3.0 +holoscan-cli~=3.0 numpy>=1.21.6 colorama>=0.4.1 -tritonclient[all] +tritonclient[all]>=2.53.0 typeguard>=3.0.0 diff --git a/run b/run index d391ef44..4ef9e042 100755 --- a/run +++ b/run @@ -344,10 +344,10 @@ install_python_dev_deps() { # Copy the cuda runtime library to the fixed location (workaround for readthedocs) so that # we can leverage the existing LD_LIBRARY_PATH (configured by the readthedocs UI) to locate the cuda runtime library. # (LD_LIBRARY_PATH is set to /home/docs/ for that purpose) - # Note that 'python3.8' is hard-coded here, it should be updated if the Python version changes by + # Note that 'python3.9' is hard-coded here, it should be updated if the Python version changes by # .readthedocs.yml or other configurations. - run_command ls -al /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.8/site-packages/nvidia/cuda_runtime/lib/ - run_command cp /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.8/site-packages/nvidia/cuda_runtime/lib/*.so* /home/docs/ + run_command ls -al /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.9/site-packages/nvidia/cuda_runtime/lib/ + run_command cp /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.9/site-packages/nvidia/cuda_runtime/lib/*.so* /home/docs/ run_command ls -al /home/docs/ fi } diff --git a/setup.cfg b/setup.cfg index 80a51572..e07a9ab4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -16,7 +16,7 @@ project_urls = Source Code=https://github.com/Project-MONAI/monai-deploy-app-sdk [options] -python_requires = >= 3.8 +python_requires = >= 3.9 # for compiling and develop setup only # no need to specify the versions so that we could # compile for multiple targeted versions. @@ -24,8 +24,10 @@ python_requires = >= 3.8 # cucim install_requires = numpy>=1.21.6 - holoscan~=2.0 + holoscan~=3.0 + holoscan-cli~=3.0 colorama>=0.4.1 + tritonclient[all]>=2.53.0 typeguard>=3.0.0 [options.extras_require] From b49964db5363ce039080de61f4c92922e120d6d5 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:08:16 -0700 Subject: [PATCH 013/118] Fix _version.py and various version-related issues (#539) - Removed unnecessary logic in setup.py - Fix versioneer issues Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/source/release_notes/v3.0.0.md | 2 +- monai/deploy/__init__.py | 3 + monai/deploy/_version.py | 632 +++++++++++++++++++++++++++- setup.py | 66 +-- 4 files changed, 622 insertions(+), 81 deletions(-) diff --git a/docs/source/release_notes/v3.0.0.md b/docs/source/release_notes/v3.0.0.md index 2d229404..9c33ad22 100644 --- a/docs/source/release_notes/v3.0.0.md +++ b/docs/source/release_notes/v3.0.0.md @@ -1,4 +1,4 @@ -# Version 2.0.0 (April 24th, 2024) +# Version 3.0.0 (April 22nd, 2025) ## What's new in 3.0.0 diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 05090b52..415119da 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,3 +23,6 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] + +from . import _version +__version__ = _version.get_versions()['version'] diff --git a/monai/deploy/_version.py b/monai/deploy/_version.py index f1502cc2..9eeaaf17 100644 --- a/monai/deploy/_version.py +++ b/monai/deploy/_version.py @@ -1,21 +1,623 @@ -# This file was generated by 'versioneer.py' (0.19) from -# revision-control system data, or from the parent directory name of an -# unpacked source archive. Distribution tarballs contain a pre-generated copy -# of this file. +# This file helps to compute a version number in source trees obtained from +# git-archive tarball (such as those provided by githubs download-from-tag +# feature). Distribution tarballs (built by setup.py sdist) and build +# directories (produced by setup.py build) will contain a much shorter file +# that just contains the computed version number. -import json +# This file is released into the public domain. Generated by +# versioneer-0.20 (https://github.com/python-versioneer/python-versioneer) -version_json = ''' -{ - "date": "2024-04-24T16:20:37-0700", - "dirty": false, - "error": null, - "full-revisionid": "d0760904a1248ce316ae0237c8a1127ac5673d7f", - "version": "2.0.0" -} -''' # END VERSION_JSON +"""Git implementation of _version.py.""" + +import errno +import os +import re +import subprocess +import sys + + +def get_keywords(): + """Get the keywords needed to look up the version information.""" + # these strings will be replaced by git during git-archive. + # setup.py/versioneer.py will grep for the variable names, so they must + # each be defined on a line of their own. _version.py will just call + # get_keywords(). + git_refnames = "$Format:%d$" + git_full = "$Format:%H$" + git_date = "$Format:%ci$" + keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} + return keywords + + +class VersioneerConfig: # pylint: disable=too-few-public-methods + """Container for Versioneer configuration parameters.""" + + +def get_config(): + """Create, populate and return the VersioneerConfig() object.""" + # these strings are filled in when 'setup.py versioneer' creates + # _version.py + cfg = VersioneerConfig() + cfg.VCS = "git" + cfg.style = "pep440" + cfg.tag_prefix = "" + cfg.parentdir_prefix = "" + cfg.versionfile_source = "monai/deploy/_version.py" + cfg.verbose = False + return cfg + + +class NotThisMethod(Exception): + """Exception raised if a method is not valid for the current scenario.""" + + +LONG_VERSION_PY = {} +HANDLERS = {} + + +def register_vcs_handler(vcs, method): # decorator + """Create decorator to mark a method as the handler of a VCS.""" + def decorate(f): + """Store f in HANDLERS[vcs][method].""" + if vcs not in HANDLERS: + HANDLERS[vcs] = {} + HANDLERS[vcs][method] = f + return f + return decorate + + +# pylint:disable=too-many-arguments,consider-using-with # noqa +def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, + env=None): + """Call the given command(s).""" + assert isinstance(commands, list) + process = None + for command in commands: + try: + dispcmd = str([command] + args) + # remember shell=False, so use git.cmd on windows, not just git + process = subprocess.Popen([command] + args, cwd=cwd, env=env, + stdout=subprocess.PIPE, + stderr=(subprocess.PIPE if hide_stderr + else None)) + break + except EnvironmentError: + e = sys.exc_info()[1] + if e.errno == errno.ENOENT: + continue + if verbose: + print("unable to run %s" % dispcmd) + print(e) + return None, None + else: + if verbose: + print("unable to find command, tried %s" % (commands,)) + return None, None + stdout = process.communicate()[0].strip().decode() + if process.returncode != 0: + if verbose: + print("unable to run %s (error)" % dispcmd) + print("stdout was %s" % stdout) + return None, process.returncode + return stdout, process.returncode + + +def versions_from_parentdir(parentdir_prefix, root, verbose): + """Try to determine the version from the parent directory name. + + Source tarballs conventionally unpack into a directory that includes both + the project name and a version string. We will also support searching up + two directory levels for an appropriately named parent directory + """ + rootdirs = [] + + for _ in range(3): + dirname = os.path.basename(root) + if dirname.startswith(parentdir_prefix): + return {"version": dirname[len(parentdir_prefix):], + "full-revisionid": None, + "dirty": False, "error": None, "date": None} + rootdirs.append(root) + root = os.path.dirname(root) # up a level + + if verbose: + print("Tried directories %s but none started with prefix %s" % + (str(rootdirs), parentdir_prefix)) + raise NotThisMethod("rootdir doesn't start with parentdir_prefix") + + +@register_vcs_handler("git", "get_keywords") +def git_get_keywords(versionfile_abs): + """Extract version information from the given file.""" + # the code embedded in _version.py can just fetch the value of these + # keywords. When used from setup.py, we don't want to import _version.py, + # so we do it with a regexp instead. This function is not used from + # _version.py. + keywords = {} + try: + with open(versionfile_abs, "r") as fobj: + for line in fobj: + if line.strip().startswith("git_refnames ="): + mo = re.search(r'=\s*"(.*)"', line) + if mo: + keywords["refnames"] = mo.group(1) + if line.strip().startswith("git_full ="): + mo = re.search(r'=\s*"(.*)"', line) + if mo: + keywords["full"] = mo.group(1) + if line.strip().startswith("git_date ="): + mo = re.search(r'=\s*"(.*)"', line) + if mo: + keywords["date"] = mo.group(1) + except EnvironmentError: + pass + return keywords + + +@register_vcs_handler("git", "keywords") +def git_versions_from_keywords(keywords, tag_prefix, verbose): + """Get version information from git keywords.""" + if "refnames" not in keywords: + raise NotThisMethod("Short version file found") + date = keywords.get("date") + if date is not None: + # Use only the last line. Previous lines may contain GPG signature + # information. + date = date.splitlines()[-1] + + # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant + # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 + # -like" string, which we must then edit to make compliant), because + # it's been around since git-1.5.3, and it's too difficult to + # discover which version we're using, or to work around using an + # older one. + date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) + refnames = keywords["refnames"].strip() + if refnames.startswith("$Format"): + if verbose: + print("keywords are unexpanded, not using") + raise NotThisMethod("unexpanded keywords, not a git-archive tarball") + refs = {r.strip() for r in refnames.strip("()").split(",")} + # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of + # just "foo-1.0". If we see a "tag: " prefix, prefer those. + TAG = "tag: " + tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} + if not tags: + # Either we're using git < 1.8.3, or there really are no tags. We use + # a heuristic: assume all version tags have a digit. The old git %d + # expansion behaves like git log --decorate=short and strips out the + # refs/heads/ and refs/tags/ prefixes that would let us distinguish + # between branches and tags. By ignoring refnames without digits, we + # filter out many common branch names like "release" and + # "stabilization", as well as "HEAD" and "master". + tags = {r for r in refs if re.search(r'\d', r)} + if verbose: + print("discarding '%s', no digits" % ",".join(refs - tags)) + if verbose: + print("likely tags: %s" % ",".join(sorted(tags))) + for ref in sorted(tags): + # sorting will prefer e.g. "2.0" over "2.0rc1" + if ref.startswith(tag_prefix): + r = ref[len(tag_prefix):] + # Filter out refs that exactly match prefix or that don't start + # with a number once the prefix is stripped (mostly a concern + # when prefix is '') + if not re.match(r'\d', r): + continue + if verbose: + print("picking %s" % r) + return {"version": r, + "full-revisionid": keywords["full"].strip(), + "dirty": False, "error": None, + "date": date} + # no suitable tags, so version is "0+unknown", but full hex is still there + if verbose: + print("no suitable tags, using unknown + full revision id") + return {"version": "0+unknown", + "full-revisionid": keywords["full"].strip(), + "dirty": False, "error": "no suitable tags", "date": None} + + +@register_vcs_handler("git", "pieces_from_vcs") +def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): + """Get version from 'git describe' in the root of the source tree. + + This only gets called if the git-archive 'subst' keywords were *not* + expanded, and _version.py hasn't already been rewritten with a short + version string, meaning we're inside a checked out source tree. + """ + GITS = ["git"] + if sys.platform == "win32": + GITS = ["git.cmd", "git.exe"] + + _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, + hide_stderr=True) + if rc != 0: + if verbose: + print("Directory %s not under git control" % root) + raise NotThisMethod("'git rev-parse --git-dir' returned error") + + # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] + # if there isn't one, this yields HEX[-dirty] (no NUM) + describe_out, rc = runner(GITS, ["describe", "--tags", "--dirty", + "--always", "--long", + "--match", "%s*" % tag_prefix], + cwd=root) + # --long was added in git-1.5.5 + if describe_out is None: + raise NotThisMethod("'git describe' failed") + describe_out = describe_out.strip() + full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) + if full_out is None: + raise NotThisMethod("'git rev-parse' failed") + full_out = full_out.strip() + + pieces = {} + pieces["long"] = full_out + pieces["short"] = full_out[:7] # maybe improved later + pieces["error"] = None + + branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], + cwd=root) + # --abbrev-ref was added in git-1.6.3 + if rc != 0 or branch_name is None: + raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") + branch_name = branch_name.strip() + + if branch_name == "HEAD": + # If we aren't exactly on a branch, pick a branch which represents + # the current commit. If all else fails, we are on a branchless + # commit. + branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) + # --contains was added in git-1.5.4 + if rc != 0 or branches is None: + raise NotThisMethod("'git branch --contains' returned error") + branches = branches.split("\n") + + # Remove the first line if we're running detached + if "(" in branches[0]: + branches.pop(0) + + # Strip off the leading "* " from the list of branches. + branches = [branch[2:] for branch in branches] + if "master" in branches: + branch_name = "master" + elif not branches: + branch_name = None + else: + # Pick the first branch that is returned. Good or bad. + branch_name = branches[0] + + pieces["branch"] = branch_name + + # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] + # TAG might have hyphens. + git_describe = describe_out + + # look for -dirty suffix + dirty = git_describe.endswith("-dirty") + pieces["dirty"] = dirty + if dirty: + git_describe = git_describe[:git_describe.rindex("-dirty")] + + # now we have TAG-NUM-gHEX or HEX + + if "-" in git_describe: + # TAG-NUM-gHEX + mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) + if not mo: + # unparseable. Maybe git-describe is misbehaving? + pieces["error"] = ("unable to parse git-describe output: '%s'" + % describe_out) + return pieces + + # tag + full_tag = mo.group(1) + if not full_tag.startswith(tag_prefix): + if verbose: + fmt = "tag '%s' doesn't start with prefix '%s'" + print(fmt % (full_tag, tag_prefix)) + pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" + % (full_tag, tag_prefix)) + return pieces + pieces["closest-tag"] = full_tag[len(tag_prefix):] + + # distance: number of commits since tag + pieces["distance"] = int(mo.group(2)) + + # commit: short hex revision ID + pieces["short"] = mo.group(3) + + else: + # HEX: no tags + pieces["closest-tag"] = None + count_out, rc = runner(GITS, ["rev-list", "HEAD", "--count"], cwd=root) + pieces["distance"] = int(count_out) # total number of commits + + # commit date: see ISO-8601 comment in git_versions_from_keywords() + date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() + # Use only the last line. Previous lines may contain GPG signature + # information. + date = date.splitlines()[-1] + pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) + + return pieces + + +def plus_or_dot(pieces): + """Return a + if we don't already have one, else return a .""" + if "+" in pieces.get("closest-tag", ""): + return "." + return "+" + + +def render_pep440(pieces): + """Build up version string, with post-release "local version identifier". + + Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you + get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty + + Exceptions: + 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += plus_or_dot(pieces) + rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + else: + # exception #1 + rendered = "0+untagged.%d.g%s" % (pieces["distance"], + pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + return rendered + + +def render_pep440_branch(pieces): + """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . + + The ".dev0" means not master branch. Note that .dev0 sorts backwards + (a feature branch will appear "older" than the master branch). + + Exceptions: + 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += plus_or_dot(pieces) + rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + else: + # exception #1 + rendered = "0" + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += "+untagged.%d.g%s" % (pieces["distance"], + pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + return rendered + + +def render_pep440_pre(pieces): + """TAG[.post0.devDISTANCE] -- No -dirty. + + Exceptions: + 1: no tags. 0.post0.devDISTANCE + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"]: + rendered += ".post0.dev%d" % pieces["distance"] + else: + # exception #1 + rendered = "0.post0.dev%d" % pieces["distance"] + return rendered + + +def render_pep440_post(pieces): + """TAG[.postDISTANCE[.dev0]+gHEX] . + + The ".dev0" means dirty. Note that .dev0 sorts backwards + (a dirty tree will appear "older" than the corresponding clean one), + but you shouldn't be releasing software with -dirty anyways. + + Exceptions: + 1: no tags. 0.postDISTANCE[.dev0] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += ".post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + rendered += plus_or_dot(pieces) + rendered += "g%s" % pieces["short"] + else: + # exception #1 + rendered = "0.post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + rendered += "+g%s" % pieces["short"] + return rendered + + +def render_pep440_post_branch(pieces): + """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . + + The ".dev0" means not master branch. + + Exceptions: + 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += ".post%d" % pieces["distance"] + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += plus_or_dot(pieces) + rendered += "g%s" % pieces["short"] + if pieces["dirty"]: + rendered += ".dirty" + else: + # exception #1 + rendered = "0.post%d" % pieces["distance"] + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += "+g%s" % pieces["short"] + if pieces["dirty"]: + rendered += ".dirty" + return rendered + + +def render_pep440_old(pieces): + """TAG[.postDISTANCE[.dev0]] . + + The ".dev0" means dirty. + + Exceptions: + 1: no tags. 0.postDISTANCE[.dev0] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += ".post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + else: + # exception #1 + rendered = "0.post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + return rendered + + +def render_git_describe(pieces): + """TAG[-DISTANCE-gHEX][-dirty]. + + Like 'git describe --tags --dirty --always'. + + Exceptions: + 1: no tags. HEX[-dirty] (note: no 'g' prefix) + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"]: + rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) + else: + # exception #1 + rendered = pieces["short"] + if pieces["dirty"]: + rendered += "-dirty" + return rendered + + +def render_git_describe_long(pieces): + """TAG-DISTANCE-gHEX[-dirty]. + + Like 'git describe --tags --dirty --always -long'. + The distance/hash is unconditional. + + Exceptions: + 1: no tags. HEX[-dirty] (note: no 'g' prefix) + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) + else: + # exception #1 + rendered = pieces["short"] + if pieces["dirty"]: + rendered += "-dirty" + return rendered + + +def render(pieces, style): + """Render the given version pieces into the requested style.""" + if pieces["error"]: + return {"version": "unknown", + "full-revisionid": pieces.get("long"), + "dirty": None, + "error": pieces["error"], + "date": None} + + if not style or style == "default": + style = "pep440" # the default + + if style == "pep440": + rendered = render_pep440(pieces) + elif style == "pep440-branch": + rendered = render_pep440_branch(pieces) + elif style == "pep440-pre": + rendered = render_pep440_pre(pieces) + elif style == "pep440-post": + rendered = render_pep440_post(pieces) + elif style == "pep440-post-branch": + rendered = render_pep440_post_branch(pieces) + elif style == "pep440-old": + rendered = render_pep440_old(pieces) + elif style == "git-describe": + rendered = render_git_describe(pieces) + elif style == "git-describe-long": + rendered = render_git_describe_long(pieces) + else: + raise ValueError("unknown style '%s'" % style) + + return {"version": rendered, "full-revisionid": pieces["long"], + "dirty": pieces["dirty"], "error": None, + "date": pieces.get("date")} def get_versions(): - return json.loads(version_json) + """Get version information or return default if unable to do so.""" + # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have + # __file__, we can work backwards from there to the root. Some + # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which + # case we can only use expanded keywords. + + cfg = get_config() + verbose = cfg.verbose + + try: + return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, + verbose) + except NotThisMethod: + pass + + try: + root = os.path.realpath(__file__) + # versionfile_source is the relative path from the top of the source + # tree (where the .git directory might live) to this file. Invert + # this to find the root from __file__. + for _ in cfg.versionfile_source.split('/'): + root = os.path.dirname(root) + except NameError: + return {"version": "0+unknown", "full-revisionid": None, + "dirty": None, + "error": "unable to find root of source tree", + "date": None} + + try: + pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) + return render(pieces, cfg.style) + except NotThisMethod: + pass + + try: + if cfg.parentdir_prefix: + return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) + except NotThisMethod: + pass + + return {"version": "0+unknown", "full-revisionid": None, + "dirty": None, + "error": "unable to compute version", "date": None} diff --git a/setup.py b/setup.py index 74bfd8c9..0f4a71f3 100644 --- a/setup.py +++ b/setup.py @@ -24,73 +24,9 @@ # (https://github.com/pypa/pip/issues/7953#issuecomment-645133255) site.ENABLE_USER_SITE = "--user" in sys.argv[1:] - -class PostInstallCommand(install): - """Contains post install actions.""" - - def __init__(self, *args, **kwargs): - super(PostInstallCommand, self).__init__(*args, **kwargs) - atexit.register(PostInstallCommand.patch_holoscan) - - @staticmethod - def patch_holoscan(): - """Patch Holoscan for its known issue of missing one import.""" - - import importlib.util - from pathlib import Path - - def needed_to_patch(): - from importlib.metadata import version - - try: - version = version("holoscan") - # This issue exists in the following versions - if "2.7" in version or "2.8" in version: - print("Need to patch holoscan v2.7 and 2.8.") - return True - except Exception: - pass - - return False - - if not needed_to_patch(): - return - - print("Patching holoscan as needed...") - spec = importlib.util.find_spec("holoscan") - if spec: - # holoscan core misses one class in its import in __init__.py - module_to_add = " MultiMessageConditionInfo," - module_path = Path(str(spec.origin)).parent.joinpath("core/__init__.py") - print(f"Patching file {module_path}") - if module_path.exists(): - lines_r = [] - existed = False - with module_path.open("r") as f_to_patch: - in_block = False - for line_r in f_to_patch.readlines(): - if "from ._core import (\n" in line_r: - in_block = True - elif in_block and module_to_add.strip() in line_r: - existed = True - break - elif in_block and ")\n" in line_r: - # Need to add the missing class. - line_r = f"{module_to_add}\n{line_r}" - in_block = False - print("Added missing module in holoscan.") - - lines_r.append(line_r) - - if not existed: - with module_path.open("w") as f_w: - f_w.writelines(lines_r) - print("Completed patching holoscan.") - - setup( version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass({"install": PostInstallCommand}), + cmdclass=versioneer.get_cmdclass(), packages=find_namespace_packages(include=["monai.*"]), include_package_data=True, zip_safe=False, From 62fafaa7be028c7c36c016cf88d2e48012558379 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 21:00:44 -0700 Subject: [PATCH 014/118] =?UTF-8?q?Bump=20version:=202.0.0=20=E2=86=92=203?= =?UTF-8?q?.0.0=20(#540)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump version: 2.0.0 β†’ 3.0.0 Signed-off-by: M Q * Bump version: 2.0.0 -> 3.0.0 with __init__.py fix Signed-off-by: M Q * Remove blank line complained by black Signed-off-by: M Q * Fix more formatting complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .bumpversion.cfg | 2 +- monai/deploy/__init__.py | 3 - setup.py | 2 - versioneer.py | 247 +++++++++++++++++++++------------------ 4 files changed, 137 insertions(+), 117 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 646aa46b..a2048e4c 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.0.0 +current_version = 3.0.0 parse = (?P\d+)\.(?P\d+)\.(?P\d+)((?Pa|b|rc)(?P\d+))? serialize = {major}.{minor}.{patch}{release}{build} diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 415119da..05090b52 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,6 +23,3 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] - -from . import _version -__version__ = _version.get_versions()['version'] diff --git a/setup.py b/setup.py index 0f4a71f3..e1720bc8 100644 --- a/setup.py +++ b/setup.py @@ -10,12 +10,10 @@ # limitations under the License. -import atexit import site import sys from setuptools import find_namespace_packages, setup -from setuptools.command.install import install import versioneer diff --git a/versioneer.py b/versioneer.py index 97130070..41ab6a21 100644 --- a/versioneer.py +++ b/versioneer.py @@ -1,4 +1,3 @@ - # Version: 0.20 """The Versioneer - like a rocketeer, but for versions. @@ -303,11 +302,13 @@ def get_root(): setup_py = os.path.join(root, "setup.py") versioneer_py = os.path.join(root, "versioneer.py") if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - err = ("Versioneer was unable to run the project root directory. " - "Versioneer requires setup.py to be executed from " - "its immediate directory (like 'python setup.py COMMAND'), " - "or in a way that lets it use sys.argv[0] to find the root " - "(like 'python path/to/setup.py COMMAND').") + err = ( + "Versioneer was unable to run the project root directory. " + "Versioneer requires setup.py to be executed from " + "its immediate directory (like 'python setup.py COMMAND'), " + "or in a way that lets it use sys.argv[0] to find the root " + "(like 'python path/to/setup.py COMMAND')." + ) raise VersioneerBadRootError(err) try: # Certain runtime workflows (setup.py install/develop in a setuptools @@ -320,8 +321,7 @@ def get_root(): me_dir = os.path.normcase(os.path.splitext(my_path)[0]) vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0]) if me_dir != vsr_dir: - print("Warning: build in %s is using versioneer.py from %s" - % (os.path.dirname(my_path), versioneer_py)) + print("Warning: build in %s is using versioneer.py from %s" % (os.path.dirname(my_path), versioneer_py)) except NameError: pass return root @@ -367,16 +367,17 @@ class NotThisMethod(Exception): def register_vcs_handler(vcs, method): # decorator """Create decorator to mark a method as the handler of a VCS.""" + def decorate(f): """Store f in HANDLERS[vcs][method].""" HANDLERS.setdefault(vcs, {})[method] = f return f + return decorate # pylint:disable=too-many-arguments,consider-using-with # noqa -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, - env=None): +def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): """Call the given command(s).""" assert isinstance(commands, list) process = None @@ -384,10 +385,13 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, try: dispcmd = str([command] + args) # remember shell=False, so use git.cmd on windows, not just git - process = subprocess.Popen([command] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None)) + process = subprocess.Popen( + [command] + args, + cwd=cwd, + env=env, + stdout=subprocess.PIPE, + stderr=(subprocess.PIPE if hide_stderr else None), + ) break except EnvironmentError: e = sys.exc_info()[1] @@ -410,7 +414,9 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, return stdout, process.returncode -LONG_VERSION_PY['git'] = r''' +LONG_VERSION_PY[ + "git" +] = r''' # This file helps to compute a version number in source trees obtained from # git-archive tarball (such as those provided by githubs download-from-tag # feature). Distribution tarballs (built by setup.py sdist) and build @@ -1091,7 +1097,7 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of # just "foo-1.0". If we see a "tag: " prefix, prefer those. TAG = "tag: " - tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} + tags = {r[len(TAG) :] for r in refs if r.startswith(TAG)} if not tags: # Either we're using git < 1.8.3, or there really are no tags. We use # a heuristic: assume all version tags have a digit. The old git %d @@ -1100,7 +1106,7 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): # between branches and tags. By ignoring refnames without digits, we # filter out many common branch names like "release" and # "stabilization", as well as "HEAD" and "master". - tags = {r for r in refs if re.search(r'\d', r)} + tags = {r for r in refs if re.search(r"\d", r)} if verbose: print("discarding '%s', no digits" % ",".join(refs - tags)) if verbose: @@ -1108,24 +1114,31 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): for ref in sorted(tags): # sorting will prefer e.g. "2.0" over "2.0rc1" if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] + r = ref[len(tag_prefix) :] # Filter out refs that exactly match prefix or that don't start # with a number once the prefix is stripped (mostly a concern # when prefix is '') - if not re.match(r'\d', r): + if not re.match(r"\d", r): continue if verbose: print("picking %s" % r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} + return { + "version": r, + "full-revisionid": keywords["full"].strip(), + "dirty": False, + "error": None, + "date": date, + } # no suitable tags, so version is "0+unknown", but full hex is still there if verbose: print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} + return { + "version": "0+unknown", + "full-revisionid": keywords["full"].strip(), + "dirty": False, + "error": "no suitable tags", + "date": None, + } @register_vcs_handler("git", "pieces_from_vcs") @@ -1140,8 +1153,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): if sys.platform == "win32": GITS = ["git.cmd", "git.exe"] - _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=True) + _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) if rc != 0: if verbose: print("Directory %s not under git control" % root) @@ -1149,10 +1161,9 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = runner(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", - "--match", "%s*" % tag_prefix], - cwd=root) + describe_out, rc = runner( + GITS, ["describe", "--tags", "--dirty", "--always", "--long", "--match", "%s*" % tag_prefix], cwd=root + ) # --long was added in git-1.5.5 if describe_out is None: raise NotThisMethod("'git describe' failed") @@ -1167,8 +1178,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): pieces["short"] = full_out[:7] # maybe improved later pieces["error"] = None - branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], - cwd=root) + branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], cwd=root) # --abbrev-ref was added in git-1.6.3 if rc != 0 or branch_name is None: raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") @@ -1208,17 +1218,16 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): dirty = git_describe.endswith("-dirty") pieces["dirty"] = dirty if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] + git_describe = git_describe[: git_describe.rindex("-dirty")] # now we have TAG-NUM-gHEX or HEX if "-" in git_describe: # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) + mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe) if not mo: # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%s'" - % describe_out) + pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out return pieces # tag @@ -1227,10 +1236,9 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): if verbose: fmt = "tag '%s' doesn't start with prefix '%s'" print(fmt % (full_tag, tag_prefix)) - pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" - % (full_tag, tag_prefix)) + pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % (full_tag, tag_prefix) return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] + pieces["closest-tag"] = full_tag[len(tag_prefix) :] # distance: number of commits since tag pieces["distance"] = int(mo.group(2)) @@ -1303,15 +1311,18 @@ def versions_from_parentdir(parentdir_prefix, root, verbose): for _ in range(3): dirname = os.path.basename(root) if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} + return { + "version": dirname[len(parentdir_prefix) :], + "full-revisionid": None, + "dirty": False, + "error": None, + "date": None, + } rootdirs.append(root) root = os.path.dirname(root) # up a level if verbose: - print("Tried directories %s but none started with prefix %s" % - (str(rootdirs), parentdir_prefix)) + print("Tried directories %s but none started with prefix %s" % (str(rootdirs), parentdir_prefix)) raise NotThisMethod("rootdir doesn't start with parentdir_prefix") @@ -1340,11 +1351,9 @@ def versions_from_file(filename): contents = f.read() except EnvironmentError: raise NotThisMethod("unable to read _version.py") - mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) + mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON", contents, re.M | re.S) if not mo: - mo = re.search(r"version_json = '''\r\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) + mo = re.search(r"version_json = '''\r\n(.*)''' # END VERSION_JSON", contents, re.M | re.S) if not mo: raise NotThisMethod("no version_json in _version.py") return json.loads(mo.group(1)) @@ -1353,8 +1362,7 @@ def versions_from_file(filename): def write_to_version_file(filename, versions): """Write the given version number to the given _version.py file.""" os.unlink(filename) - contents = json.dumps(versions, sort_keys=True, - indent=1, separators=(",", ": ")) + contents = json.dumps(versions, sort_keys=True, indent=1, separators=(",", ": ")) with open(filename, "w") as f: f.write(SHORT_VERSION_PY % contents) @@ -1386,8 +1394,7 @@ def render_pep440(pieces): rendered += ".dirty" else: # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) + rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered @@ -1416,8 +1423,7 @@ def render_pep440_branch(pieces): rendered = "0" if pieces["branch"] != "master": rendered += ".dev0" - rendered += "+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) + rendered += "+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered @@ -1560,11 +1566,13 @@ def render_git_describe_long(pieces): def render(pieces, style): """Render the given version pieces into the requested style.""" if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} + return { + "version": "unknown", + "full-revisionid": pieces.get("long"), + "dirty": None, + "error": pieces["error"], + "date": None, + } if not style or style == "default": style = "pep440" # the default @@ -1588,9 +1596,13 @@ def render(pieces, style): else: raise ValueError("unknown style '%s'" % style) - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} + return { + "version": rendered, + "full-revisionid": pieces["long"], + "dirty": pieces["dirty"], + "error": None, + "date": pieces.get("date"), + } class VersioneerBadRootError(Exception): @@ -1613,8 +1625,7 @@ def get_versions(verbose=False): handlers = HANDLERS.get(cfg.VCS) assert handlers, "unrecognized VCS '%s'" % cfg.VCS verbose = verbose or cfg.verbose - assert cfg.versionfile_source is not None, \ - "please set versioneer.versionfile_source" + assert cfg.versionfile_source is not None, "please set versioneer.versionfile_source" assert cfg.tag_prefix is not None, "please set versioneer.tag_prefix" versionfile_abs = os.path.join(root, cfg.versionfile_source) @@ -1668,9 +1679,13 @@ def get_versions(verbose=False): if verbose: print("unable to compute version") - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, "error": "unable to compute version", - "date": None} + return { + "version": "0+unknown", + "full-revisionid": None, + "dirty": None, + "error": "unable to compute version", + "date": None, + } def get_version(): @@ -1723,6 +1738,7 @@ def run(self): print(" date: %s" % vers.get("date")) if vers["error"]: print(" error: %s" % vers["error"]) + cmds["version"] = cmd_version # we override "build_py" in both distutils and setuptools @@ -1741,8 +1757,8 @@ def run(self): # setup.py egg_info -> ? # we override different "build_py" commands for both environments - if 'build_py' in cmds: - _build_py = cmds['build_py'] + if "build_py" in cmds: + _build_py = cmds["build_py"] elif "setuptools" in sys.modules: from setuptools.command.build_py import build_py as _build_py else: @@ -1757,14 +1773,14 @@ def run(self): # now locate _version.py in the new build/ directory and replace # it with an updated value if cfg.versionfile_build: - target_versionfile = os.path.join(self.build_lib, - cfg.versionfile_build) + target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) + cmds["build_py"] = cmd_build_py - if 'build_ext' in cmds: - _build_ext = cmds['build_ext'] + if "build_ext" in cmds: + _build_ext = cmds["build_ext"] elif "setuptools" in sys.modules: from setuptools.command.build_ext import build_ext as _build_ext else: @@ -1784,14 +1800,15 @@ def run(self): return # now locate _version.py in the new build/ directory and replace # it with an updated value - target_versionfile = os.path.join(self.build_lib, - cfg.versionfile_build) + target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) + cmds["build_ext"] = cmd_build_ext if "cx_Freeze" in sys.modules: # cx_freeze enabled? from cx_Freeze.dist import build_exe as _build_exe + # nczeczulin reports that py2exe won't like the pep440-style string # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g. # setup(console=[{ @@ -1812,17 +1829,21 @@ def run(self): os.unlink(target_versionfile) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) + f.write( + LONG + % { + "DOLLAR": "$", + "STYLE": cfg.style, + "TAG_PREFIX": cfg.tag_prefix, + "PARENTDIR_PREFIX": cfg.parentdir_prefix, + "VERSIONFILE_SOURCE": cfg.versionfile_source, + } + ) + cmds["build_exe"] = cmd_build_exe del cmds["build_py"] - if 'py2exe' in sys.modules: # py2exe enabled? + if "py2exe" in sys.modules: # py2exe enabled? from py2exe.distutils_buildexe import py2exe as _py2exe class cmd_py2exe(_py2exe): @@ -1838,18 +1859,22 @@ def run(self): os.unlink(target_versionfile) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) + f.write( + LONG + % { + "DOLLAR": "$", + "STYLE": cfg.style, + "TAG_PREFIX": cfg.tag_prefix, + "PARENTDIR_PREFIX": cfg.parentdir_prefix, + "VERSIONFILE_SOURCE": cfg.versionfile_source, + } + ) + cmds["py2exe"] = cmd_py2exe # we override different "sdist" commands for both environments - if 'sdist' in cmds: - _sdist = cmds['sdist'] + if "sdist" in cmds: + _sdist = cmds["sdist"] elif "setuptools" in sys.modules: from setuptools.command.sdist import sdist as _sdist else: @@ -1874,8 +1899,8 @@ def make_release_tree(self, base_dir, files): # updated value target_versionfile = os.path.join(base_dir, cfg.versionfile_source) print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, - self._versioneer_generated_versions) + write_to_version_file(target_versionfile, self._versioneer_generated_versions) + cmds["sdist"] = cmd_sdist return cmds @@ -1935,11 +1960,9 @@ def do_setup(): root = get_root() try: cfg = get_config_from_root(root) - except (EnvironmentError, configparser.NoSectionError, - configparser.NoOptionError) as e: + except (EnvironmentError, configparser.NoSectionError, configparser.NoOptionError) as e: if isinstance(e, (EnvironmentError, configparser.NoSectionError)): - print("Adding sample versioneer config to setup.cfg", - file=sys.stderr) + print("Adding sample versioneer config to setup.cfg", file=sys.stderr) with open(os.path.join(root, "setup.cfg"), "a") as f: f.write(SAMPLE_CONFIG) print(CONFIG_ERROR, file=sys.stderr) @@ -1948,15 +1971,18 @@ def do_setup(): print(" creating %s" % cfg.versionfile_source) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - - ipy = os.path.join(os.path.dirname(cfg.versionfile_source), - "__init__.py") + f.write( + LONG + % { + "DOLLAR": "$", + "STYLE": cfg.style, + "TAG_PREFIX": cfg.tag_prefix, + "PARENTDIR_PREFIX": cfg.parentdir_prefix, + "VERSIONFILE_SOURCE": cfg.versionfile_source, + } + ) + + ipy = os.path.join(os.path.dirname(cfg.versionfile_source), "__init__.py") if os.path.exists(ipy): try: with open(ipy, "r") as f: @@ -2004,8 +2030,7 @@ def do_setup(): else: print(" 'versioneer.py' already in MANIFEST.in") if cfg.versionfile_source not in simple_includes: - print(" appending versionfile_source ('%s') to MANIFEST.in" % - cfg.versionfile_source) + print(" appending versionfile_source ('%s') to MANIFEST.in" % cfg.versionfile_source) with open(manifest_in, "a") as f: f.write("include %s\n" % cfg.versionfile_source) else: From ebfe2ea269b62054a55715ca3a27f0857e63c7be Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Mon, 12 May 2025 20:12:56 +0000 Subject: [PATCH 015/118] Fix NiftiDataWriter spacing handling for 1mm pixel dimensions Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/nii_data_writer_operator.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py index 003395ce..ed717c05 100644 --- a/monai/deploy/operators/nii_data_writer_operator.py +++ b/monai/deploy/operators/nii_data_writer_operator.py @@ -70,8 +70,11 @@ def convert_and_save(self, seg_image, nii_path): """ image_writer = SimpleITK.ImageFileWriter() + pixdim = seg_image.metadata()["pixdim"] + if pixdim[0] == 1: + pixdim = np.array(pixdim[1:4]) image = SimpleITK.GetImageFromArray(seg_image._data) - image.SetSpacing(seg_image.metadata()["pixdim"]) + image.SetSpacing(pixdim) if len(seg_image.metadata()["direction"]) == 16: direction = [] From 7d4fb4e93d5bebce6004be902c9eaced337c5a98 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:22:11 +0000 Subject: [PATCH 016/118] Refactor nnUNet bundle inference operator to MONetBundleInferenceOperator and add implementation Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 4 ++-- monai/deploy/operators/__init__.py | 2 +- ...rence_operator.py => monet_bundle_inference_operator.py} | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename monai/deploy/operators/{monai_nnunet_bundle_inference_operator.py => monet_bundle_inference_operator.py} (96%) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 60b09fb2..37b86f09 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -27,7 +27,7 @@ IOMapping, ) -from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator +from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MONetBundleInferenceOperator from monai.deploy.operators.stl_conversion_operator import STLConversionOperator @@ -87,7 +87,7 @@ def compose(self): config_names = BundleConfigNames(config_names=["inference"]) # Same as the default - bundle_spleen_seg_op = MonainnUNetBundleInferenceOperator( + bundle_spleen_seg_op = MONetBundleInferenceOperator( self, input_mapping=[IOMapping("image", Image, IOType.IN_MEMORY)], output_mapping=[IOMapping("pred", Image, IOType.IN_MEMORY)], diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 4599048d..53f8c2c4 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -48,7 +48,7 @@ from .dicom_utils import EquipmentInfo, ModelInfo, random_with_n_digits, save_dcm_file, write_common_modules from .inference_operator import InferenceOperator from .monai_bundle_inference_operator import BundleConfigNames, IOMapping, MonaiBundleInferenceOperator -from .monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator +from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .monai_seg_inference_operator import MonaiSegInferenceOperator from .nii_data_loader_operator import NiftiDataLoader from .png_converter_operator import PNGConverterOperator diff --git a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py similarity index 96% rename from monai/deploy/operators/monai_nnunet_bundle_inference_operator.py rename to monai/deploy/operators/monet_bundle_inference_operator.py index 954e12e6..d1c4bbbf 100644 --- a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -13,7 +13,7 @@ from monai.deploy.utils.importutil import optional_import from typing import Any, Dict, Tuple, Union from monai.deploy.core import Image -from pathlib import Path + MONAI_UTILS = "monai.utils" nibabel, _ = optional_import("nibabel", "3.2.1") torch, _ = optional_import("torch", "1.10.2") @@ -35,10 +35,10 @@ Compose: Any = Compose_ MapTransform: Any = MapTransform_ ConfigParser: Any = ConfigParser_ -__all__ = ["MonainnUNetBundleInferenceOperator"] +__all__ = ["MONetBundleInferenceOperator"] -class MonainnUNetBundleInferenceOperator(MonaiBundleInferenceOperator): +class MONetBundleInferenceOperator(MonaiBundleInferenceOperator): """ A specialized operator for performing inference using the MONAI nnUNet bundle. This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific From a7ba89fafa071178c39bf4ea4beb6487cd2db2f1 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:27:50 +0000 Subject: [PATCH 017/118] Update documentation to reflect changes from nnUNet to MONet Bundle inference operator Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 18 ++++-------------- .../monet_bundle_inference_operator.py | 2 +- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 37b86f09..8b3d1227 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -35,10 +35,10 @@ # pip_packages can be a string that is a path(str) to requirements.txt file or a list of packages. # The monai pkg is not required by this class, instead by the included operators. class AISpleennnUNetSegApp(Application): - """Demonstrates inference with built-in MONAI nnUNet Bundle inference operator with DICOM files as input/output + """Demonstrates inference with built-in MONet Bundle inference operator with DICOM files as input/output This application loads a set of DICOM instances, select the appropriate series, converts the series to - 3D volume image, performs inference with the built-in MONAI nnUNet Bundle inference operator, including pre-processing + 3D volume image, performs inference with the built-in MONet Bundle inference operator, including nnUNet resampling,pre-processing and post-processing, save the segmentation image in a DICOM Seg OID in an instance file, and optionally the surface mesh in STL format. @@ -46,8 +46,8 @@ class AISpleennnUNetSegApp(Application): Execution Time Estimate: - With a Nvidia RTXA600 48GB GPU, for an input DICOM Series of 139 instances, the execution time is around - 75 seconds with saving both DICOM Seg and surface mesh STL file. + With a Nvidia RTXA600 48GB GPU, for an input DICOM Series of size 106x415x415 and patches of size 64x192x160, the execution time is around + 50 seconds with saving both DICOM Seg and surface mesh STL file. """ def __init__(self, *args, **kwargs): @@ -162,16 +162,6 @@ def compose(self): """ if __name__ == "__main__": - # Creates the app and test it standalone. When running is this mode, please note the following: - # -m , for model file path - # -i , for input DICOM CT series folder - # -o , for the output folder, default $PWD/output - # e.g. - # monai-deploy exec app.py -i input -m model/model.ts - # - # export HOLOSCAN_INPUT_PATH=dcm - # export HOLOSCAN_MODEL_PATH=spleen_model/model.ts - # export HOLOSCAN_OUTPUT_PATH="output" logging.info(f"Begin {__name__}") AISpleennnUNetSegApp().run() logging.info(f"End {__name__}") diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index d1c4bbbf..9b926a64 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -40,7 +40,7 @@ class MONetBundleInferenceOperator(MonaiBundleInferenceOperator): """ - A specialized operator for performing inference using the MONAI nnUNet bundle. + A specialized operator for performing inference using the MONet bundle. This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific configurations and prediction logic. It initializes the nnUNet predictor and provides a method for performing inference on input data. From 3511186433fbed011c567a5d4b5c49761d0bb760 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:32:56 +0000 Subject: [PATCH 018/118] Refactor import statements in app.py and monet_bundle_inference_operator.py for clarity Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 6 +---- .../monet_bundle_inference_operator.py | 23 +++++++++---------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 8b3d1227..71a59f93 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -22,11 +22,7 @@ from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator -from monai.deploy.operators.monai_bundle_inference_operator import ( - BundleConfigNames, - IOMapping, - -) +from monai.deploy.operators.monai_bundle_inference_operator import BundleConfigNames, IOMapping from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MONetBundleInferenceOperator from monai.deploy.operators.stl_conversion_operator import STLConversionOperator diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index 9b926a64..811c439f 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -9,10 +9,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config -from monai.deploy.utils.importutil import optional_import from typing import Any, Dict, Tuple, Union + from monai.deploy.core import Image +from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config +from monai.deploy.utils.importutil import optional_import MONAI_UTILS = "monai.utils" nibabel, _ = optional_import("nibabel", "3.2.1") @@ -44,12 +45,12 @@ class MONetBundleInferenceOperator(MonaiBundleInferenceOperator): This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific configurations and prediction logic. It initializes the nnUNet predictor and provides a method for performing inference on input data. - + Attributes ---------- _nnunet_predictor : torch.nn.Module The nnUNet predictor module used for inference. - + Methods ------- _init_config(config_names) @@ -65,16 +66,14 @@ def __init__( **kwargs, ): - super().__init__(*args, **kwargs) - - self._nnunet_predictor : torch.nn.Module = None - - - def _init_config(self, config_names): + + self._nnunet_predictor: torch.nn.Module = None + + def _init_config(self, config_names): super()._init_config(config_names) - parser = get_bundle_config(str(self._bundle_path), config_names) + parser = get_bundle_config(str(self._bundle_path), config_names) self._parser = parser self._nnunet_predictor = parser.get_parsed_content("network_def") @@ -83,7 +82,7 @@ def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, .. """Predicts output using the inferer.""" self._nnunet_predictor.predictor.network = self._model_network - #os.environ['nnUNet_def_n_proc'] = "1" + # os.environ['nnUNet_def_n_proc'] = "1" if len(data.shape) == 4: data = data[None] return self._nnunet_predictor(data) From 9b018628dc7da2afca116eb306ddcf52831a5c73 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:38:33 +0000 Subject: [PATCH 019/118] Update application title and fix operator name in imports for MONet Bundle Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.yaml | 2 +- monai/deploy/operators/__init__.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.yaml b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml index 62636118..9f65281c 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.yaml +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml @@ -15,7 +15,7 @@ # limitations under the License. --- application: - title: MONAI Deploy App Package - Spleen nnUNet Seg Inference + title: MONAI Deploy App Package - Spleen MONet Seg Inference version: 1.0 inputFormats: ["file"] outputFormats: ["file"] diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 53f8c2c4..18bc61a7 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -25,7 +25,7 @@ IOMapping ModelInfo MonaiBundleInferenceOperator - MonainnUNetBundleInferenceOperator + MONetBundleInferenceOperator MonaiSegInferenceOperator PNGConverterOperator PublisherOperator @@ -48,10 +48,10 @@ from .dicom_utils import EquipmentInfo, ModelInfo, random_with_n_digits, save_dcm_file, write_common_modules from .inference_operator import InferenceOperator from .monai_bundle_inference_operator import BundleConfigNames, IOMapping, MonaiBundleInferenceOperator -from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .monai_seg_inference_operator import MonaiSegInferenceOperator +from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .nii_data_loader_operator import NiftiDataLoader +from .nii_data_writer_operator import NiftiDataWriter from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter -from .nii_data_writer_operator import NiftiDataWriter From 25e9a8590d48bb3ea18924cb554a7aac2145aca0 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:39:56 +0000 Subject: [PATCH 020/118] Refactor NiftiDataLoader to return transposed numpy array from NIfTI image Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/nii_data_loader_operator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/nii_data_loader_operator.py b/monai/deploy/operators/nii_data_loader_operator.py index e886df24..67b0e070 100644 --- a/monai/deploy/operators/nii_data_loader_operator.py +++ b/monai/deploy/operators/nii_data_loader_operator.py @@ -80,7 +80,8 @@ def convert_and_save(self, nii_path): image_reader = SimpleITK.ImageFileReader() image_reader.SetFileName(str(nii_path)) image = image_reader.Execute() - return image + image_np = np.transpose(SimpleITK.GetArrayFromImage(image), [2, 1, 0]) + return image_np def test(): From 6496e55be35a47ea3a947a141ed684d2dd3c9d41 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:42:28 +0000 Subject: [PATCH 021/118] Remove NiftiDataWriter operator and clean up imports in __init__.py Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/__init__.py | 1 - .../operators/nii_data_writer_operator.py | 103 ------------------ 2 files changed, 104 deletions(-) delete mode 100644 monai/deploy/operators/nii_data_writer_operator.py diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 18bc61a7..bd9de71a 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -51,7 +51,6 @@ from .monai_seg_inference_operator import MonaiSegInferenceOperator from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .nii_data_loader_operator import NiftiDataLoader -from .nii_data_writer_operator import NiftiDataWriter from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py deleted file mode 100644 index ed717c05..00000000 --- a/monai/deploy/operators/nii_data_writer_operator.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright 2021-2023 MONAI Consortium -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import logging -from pathlib import Path - -import numpy as np - -from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec -from monai.deploy.utils.importutil import optional_import - -SimpleITK, _ = optional_import("SimpleITK") - - -# @md.env(pip_packages=["SimpleITK>=2.0.2"]) -class NiftiDataWriter(Operator): - - def __init__(self, fragment: Fragment, *args, output_file: Path, **kwargs) -> None: - """Creates an instance with the file path to load image from. - - Args: - fragment (Fragment): An instance of the Application class which is derived from Fragment. - input_path (Path): The file Path to read from, overridden by valid named input on compute. - """ - self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) - - self.output_file = output_file - self.input_name_seg = "seg_image" - self.input_name_output_file = "output_file" - - # Need to call the base class constructor last - super().__init__(fragment, *args, **kwargs) - - def setup(self, spec: OperatorSpec): - spec.input(self.input_name_seg) - spec.input(self.input_name_output_file).condition(ConditionType.NONE) # Optional input not requiring sender. - - def compute(self, op_input, op_output, context): - """Performs computation with the provided context.""" - - - seg_image = op_input.receive(self.input_name_seg) - - - # If the optional named input, output_folder, has content, use it instead of the one set on the object. - # Since this input is optional, must check if data present and if Path or str. - output_file = None - try: - output_file = op_input.receive(self.input_name_output_file) - except Exception: - pass - - if not output_file or not isinstance(output_file, (Path, str)): - output_file = self.output_file - - self.convert_and_save(seg_image, output_file) - - def convert_and_save(self, seg_image, nii_path): - """ - reads the nifti image and returns a numpy image array - """ - image_writer = SimpleITK.ImageFileWriter() - - pixdim = seg_image.metadata()["pixdim"] - if pixdim[0] == 1: - pixdim = np.array(pixdim[1:4]) - image = SimpleITK.GetImageFromArray(seg_image._data) - image.SetSpacing(pixdim) - - if len(seg_image.metadata()["direction"]) == 16: - direction = [] - direction.extend(seg_image.metadata()["direction"][0:3]) - direction.extend(seg_image.metadata()["direction"][4:7]) - direction.extend(seg_image.metadata()["direction"][8:11]) - image.SetDirection(direction) - else: - image.SetDirection(seg_image.metadata()["direction"]) - - image.SetOrigin(seg_image.metadata()["origin"]) - - image_writer.SetFileName(nii_path) - image_writer.Execute(image) - - -def test(): - ... - - -def main(): - test() - - -if __name__ == "__main__": - main() From b01a3a87b889acf5c5be4b43e02bd1f532bee735 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:44:11 +0000 Subject: [PATCH 022/118] Remove SimpleITK image handling from MonaiBundleInferenceOperator Signed-off-by: Simone Bendazzoli --- .../operators/monai_bundle_inference_operator.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index c15b0b66..d5aa9ee3 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -22,9 +22,9 @@ from typing import Any, Dict, List, Optional, Tuple, Type, Union import numpy as np - import SimpleITK from SimpleITK import Image as SimpleITKImage + from monai.deploy.core import AppContext, Fragment, Image, IOType, OperatorSpec from monai.deploy.utils.importutil import optional_import @@ -705,16 +705,6 @@ def _receive_input(self, name: str, op_input, context): logging.debug(f"Metadata of the converted input image: {metadata}") elif isinstance(value, np.ndarray): value = torch.from_numpy(value).to(self._device) - elif isinstance(value, SimpleITKImage): - metadata = {} - metadata["pixdim"] = np.asarray(value.GetSpacing()) - metadata["origin"] = np.asarray(value.GetOrigin()) - metadata["direction"] = np.asarray(value.GetDirection()) - if len(value.GetSize()) == 3: - metadata["pixdim"] = np.insert(np.asarray(value.GetSpacing()), 0, 1.0) - value = np.transpose(SimpleITK.GetArrayFromImage(value), [2, 1, 0]) - else: - value = np.transpose(SimpleITK.GetArrayFromImage(value), [0, 3, 2, 1]) # else value is some other object from memory From 7418c936a1a09337e02c9a3b1f8a654c8241bb26 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 24 Jun 2025 15:03:51 +0000 Subject: [PATCH 023/118] Fix import statement for MONetBundleInferenceOperator to use the correct module path --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 71a59f93..dfb2aa37 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -23,7 +23,7 @@ from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator from monai.deploy.operators.monai_bundle_inference_operator import BundleConfigNames, IOMapping -from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MONetBundleInferenceOperator +from monai.deploy.operators.monet_bundle_inference_operator import MONetBundleInferenceOperator from monai.deploy.operators.stl_conversion_operator import STLConversionOperator From 19539a174462ad64ae7aadd9366b11b935447d8f Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Thu, 26 Jun 2025 19:35:13 +0000 Subject: [PATCH 024/118] Fix formatting in docstring and remove unused import statements in MONetBundleInferenceOperator --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 2 +- .../monet_bundle_inference_operator.py | 21 +------------------ 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index dfb2aa37..9402e233 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -34,7 +34,7 @@ class AISpleennnUNetSegApp(Application): """Demonstrates inference with built-in MONet Bundle inference operator with DICOM files as input/output This application loads a set of DICOM instances, select the appropriate series, converts the series to - 3D volume image, performs inference with the built-in MONet Bundle inference operator, including nnUNet resampling,pre-processing + 3D volume image, performs inference with the built-in MONet Bundle inference operator, including nnUNet resampling, pre-processing and post-processing, save the segmentation image in a DICOM Seg OID in an instance file, and optionally the surface mesh in STL format. diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index 811c439f..575c23e6 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -15,27 +15,8 @@ from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config from monai.deploy.utils.importutil import optional_import -MONAI_UTILS = "monai.utils" -nibabel, _ = optional_import("nibabel", "3.2.1") torch, _ = optional_import("torch", "1.10.2") -NdarrayOrTensor, _ = optional_import("monai.config", name="NdarrayOrTensor") -MetaTensor, _ = optional_import("monai.data.meta_tensor", name="MetaTensor") -PostFix, _ = optional_import("monai.utils.enums", name="PostFix") # For the default meta_key_postfix -first, _ = optional_import("monai.utils.misc", name="first") -ensure_tuple, _ = optional_import(MONAI_UTILS, name="ensure_tuple") -convert_to_dst_type, _ = optional_import(MONAI_UTILS, name="convert_to_dst_type") -Key, _ = optional_import(MONAI_UTILS, name="ImageMetaKey") -MetaKeys, _ = optional_import(MONAI_UTILS, name="MetaKeys") -SpaceKeys, _ = optional_import(MONAI_UTILS, name="SpaceKeys") -Compose_, _ = optional_import("monai.transforms", name="Compose") -ConfigParser_, _ = optional_import("monai.bundle", name="ConfigParser") -MapTransform_, _ = optional_import("monai.transforms", name="MapTransform") -SimpleInferer, _ = optional_import("monai.inferers", name="SimpleInferer") - -Compose: Any = Compose_ -MapTransform: Any = MapTransform_ -ConfigParser: Any = ConfigParser_ __all__ = ["MONetBundleInferenceOperator"] @@ -82,7 +63,7 @@ def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, .. """Predicts output using the inferer.""" self._nnunet_predictor.predictor.network = self._model_network - # os.environ['nnUNet_def_n_proc'] = "1" + if len(data.shape) == 4: data = data[None] return self._nnunet_predictor(data) From 3ec21a000f3ec7855d6bdc861dce7580ea242c9f Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Thu, 26 Jun 2025 19:39:29 +0000 Subject: [PATCH 025/118] Enhance predict method to support multimodal data concatenation and update docstring --- .../operators/monet_bundle_inference_operator.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index 575c23e6..ef567c90 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -14,9 +14,10 @@ from monai.deploy.core import Image from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config from monai.deploy.utils.importutil import optional_import +from monai.transforms import ConcatItemsd, ResampleToMatch torch, _ = optional_import("torch", "1.10.2") - +MetaTensor, _ = optional_import("monai.data.meta_tensor", name="MetaTensor") __all__ = ["MONetBundleInferenceOperator"] @@ -60,10 +61,18 @@ def _init_config(self, config_names): self._nnunet_predictor = parser.get_parsed_content("network_def") def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, ...], Dict[Any, Any]]: - """Predicts output using the inferer.""" + """Predicts output using the inferer. If multimodal data is provided as keyword arguments, + it concatenates the data with the main input data.""" self._nnunet_predictor.predictor.network = self._model_network + if len(kwargs) > 0: + multimodal_data = {"image": data} + for key in kwargs.keys(): + if isinstance(kwargs[key], MetaTensor): + multimodal_data[key] = ResampleToMatch(mode="bilinear")(kwargs[key], img_dst=data + ) + data = ConcatItemsd(keys=list(multimodal_data.keys()),name="image")(multimodal_data)["image"] if len(data.shape) == 4: data = data[None] return self._nnunet_predictor(data) From e807d17b8d8db535002e673b750f3eaa4b26bf24 Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Mon, 24 Feb 2025 20:42:56 -0500 Subject: [PATCH 026/118] slice removal fix (#527) Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- .../operators/dicom_series_to_volume_operator.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/monai/deploy/operators/dicom_series_to_volume_operator.py b/monai/deploy/operators/dicom_series_to_volume_operator.py index 6beb0e35..38b4beaf 100644 --- a/monai/deploy/operators/dicom_series_to_volume_operator.py +++ b/monai/deploy/operators/dicom_series_to_volume_operator.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -234,11 +234,17 @@ def prepare_series(self, series): series._sop_instances[slice_index].distance = distance series._sop_instances[slice_index].first_pixel_on_slice_normal = point else: - print("going to removing slice ", slice_index) + logging.debug(f"Slice index to remove: {slice_index}") slice_indices_to_be_removed.append(slice_index) - for sl_index, _ in enumerate(slice_indices_to_be_removed): + logging.debug(f"Total slices before removal (if applicable): {len(series._sop_instances)}") + + # iterate in reverse order to avoid affecting subsequent indices after a deletion + for sl_index in sorted(slice_indices_to_be_removed, reverse=True): del series._sop_instances[sl_index] + logging.info(f"Removed slice index: {sl_index}") + + logging.debug(f"Total slices after removal (if applicable): {len(series._sop_instances)}") series._sop_instances = sorted(series._sop_instances, key=lambda s: s.distance) series.depth_direction_cosine = copy.deepcopy(last_slice_normal) From 91e645c390834cb3fa95bf1aeb2be03bddbad5b4 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Wed, 2 Apr 2025 15:00:47 +0000 Subject: [PATCH 027/118] Add nnUNet segmentation application and dependencies Signed-off-by: Simone Bendazzoli --- .../apps/ai_spleen_nnunet_seg_app/__init__.py | 18 ++ .../apps/ai_spleen_nnunet_seg_app/__main__.py | 19 ++ examples/apps/ai_spleen_nnunet_seg_app/app.py | 177 ++++++++++++++++++ .../apps/ai_spleen_nnunet_seg_app/app.yaml | 27 +++ .../ai_spleen_nnunet_seg_app/requirements.txt | 11 ++ monai/deploy/operators/__init__.py | 2 + .../monai_bundle_inference_operator.py | 4 +- .../monai_nnunet_bundle_inference_operator.py | 88 +++++++++ 8 files changed, 344 insertions(+), 2 deletions(-) create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/__init__.py create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/__main__.py create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/app.py create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/app.yaml create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/requirements.txt create mode 100644 monai/deploy/operators/monai_nnunet_bundle_inference_operator.py diff --git a/examples/apps/ai_spleen_nnunet_seg_app/__init__.py b/examples/apps/ai_spleen_nnunet_seg_app/__init__.py new file mode 100644 index 00000000..526cee59 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/__init__.py @@ -0,0 +1,18 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys + +_current_dir = os.path.abspath(os.path.dirname(__file__)) +if sys.path and os.path.abspath(sys.path[0]) != _current_dir: + sys.path.insert(0, _current_dir) +del _current_dir diff --git a/examples/apps/ai_spleen_nnunet_seg_app/__main__.py b/examples/apps/ai_spleen_nnunet_seg_app/__main__.py new file mode 100644 index 00000000..07fe20a4 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/__main__.py @@ -0,0 +1,19 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging + +from app import AISpleennnUNetSegApp + +if __name__ == "__main__": + logging.info(f"Begin {__name__}") + AISpleennnUNetSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py new file mode 100644 index 00000000..60b09fb2 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -0,0 +1,177 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path + +from pydicom.sr.codedict import codes + +from monai.deploy.conditions import CountCondition +from monai.deploy.core import AppContext, Application +from monai.deploy.core.domain import Image +from monai.deploy.core.io_type import IOType +from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator +from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription +from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator +from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator +from monai.deploy.operators.monai_bundle_inference_operator import ( + BundleConfigNames, + IOMapping, + +) +from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator +from monai.deploy.operators.stl_conversion_operator import STLConversionOperator + + +# @resource(cpu=1, gpu=1, memory="7Gi") +# pip_packages can be a string that is a path(str) to requirements.txt file or a list of packages. +# The monai pkg is not required by this class, instead by the included operators. +class AISpleennnUNetSegApp(Application): + """Demonstrates inference with built-in MONAI nnUNet Bundle inference operator with DICOM files as input/output + + This application loads a set of DICOM instances, select the appropriate series, converts the series to + 3D volume image, performs inference with the built-in MONAI nnUNet Bundle inference operator, including pre-processing + and post-processing, save the segmentation image in a DICOM Seg OID in an instance file, and optionally the + surface mesh in STL format. + + Pertinent nnUNet MONAI Bundle: + + + Execution Time Estimate: + With a Nvidia RTXA600 48GB GPU, for an input DICOM Series of 139 instances, the execution time is around + 75 seconds with saving both DICOM Seg and surface mesh STL file. + """ + + def __init__(self, *args, **kwargs): + """Creates an application instance.""" + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + super().__init__(*args, **kwargs) + + def run(self, *args, **kwargs): + # This method calls the base class to run. Can be omitted if simply calling through. + self._logger.info(f"Begin {self.run.__name__}") + super().run(*args, **kwargs) + self._logger.info(f"End {self.run.__name__}") + + def compose(self): + """Creates the app specific operators and chain them up in the processing DAG.""" + + logging.info(f"Begin {self.compose.__name__}") + + # Use Commandline options over environment variables to init context. + app_context: AppContext = Application.init_app_context(self.argv) + app_input_path = Path(app_context.input_path) + app_output_path = Path(app_context.output_path) + + # Create the custom operator(s) as well as SDK built-in operator(s). + study_loader_op = DICOMDataLoaderOperator( + self, CountCondition(self, 1), input_folder=app_input_path, name="study_loader_op" + ) + series_selector_op = DICOMSeriesSelectorOperator(self, rules=Sample_Rules_Text, name="series_selector_op") + series_to_vol_op = DICOMSeriesToVolumeOperator(self, name="series_to_vol_op") + + # Create the inference operator that supports MONAI Bundle and automates the inference. + # The IOMapping labels match the input and prediction keys in the pre and post processing. + # The model_name is optional when the app has only one model. + # The bundle_path argument optionally can be set to an accessible bundle file path in the dev + # environment, so when the app is packaged into a MAP, the operator can complete the bundle parsing + # during init. + + config_names = BundleConfigNames(config_names=["inference"]) # Same as the default + + bundle_spleen_seg_op = MonainnUNetBundleInferenceOperator( + self, + input_mapping=[IOMapping("image", Image, IOType.IN_MEMORY)], + output_mapping=[IOMapping("pred", Image, IOType.IN_MEMORY)], + app_context=app_context, + bundle_config_names=config_names, + name="nnunet_bundle_spleen_seg_op", + ) + + # Create DICOM Seg writer providing the required segment description for each segment with + # the actual algorithm and the pertinent organ/tissue. The segment_label, algorithm_name, + # and algorithm_version are of DICOM VR LO type, limited to 64 chars. + # https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html + segment_descriptions = [ + SegmentDescription( + segment_label="Spleen", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Spleen, + algorithm_name="volumetric (3D) segmentation of the spleen from CT image", + algorithm_family=codes.DCM.ArtificialIntelligence, + algorithm_version="0.3.2", + ) + ] + + custom_tags = {"SeriesDescription": "AI generated Seg, not for clinical use."} + + dicom_seg_writer = DICOMSegmentationWriterOperator( + self, + segment_descriptions=segment_descriptions, + custom_tags=custom_tags, + output_folder=app_output_path, + name="dicom_seg_writer", + ) + + # Create the processing pipeline, by specifying the source and destination operators, and + # ensuring the output from the former matches the input of the latter, in both name and type. + self.add_flow(study_loader_op, series_selector_op, {("dicom_study_list", "dicom_study_list")}) + self.add_flow( + series_selector_op, series_to_vol_op, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(series_to_vol_op, bundle_spleen_seg_op, {("image", "image")}) + # Note below the dicom_seg_writer requires two inputs, each coming from a source operator. + self.add_flow( + series_selector_op, dicom_seg_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(bundle_spleen_seg_op, dicom_seg_writer, {("pred", "seg_image")}) + # Create the surface mesh STL conversion operator and add it to the app execution flow, if needed, by + # uncommenting the following couple lines. + stl_conversion_op = STLConversionOperator( + self, output_file=app_output_path.joinpath("stl/spleen.stl"), name="stl_conversion_op" + ) + self.add_flow(bundle_spleen_seg_op, stl_conversion_op, {("pred", "image")}) + + logging.info(f"End {self.compose.__name__}") + + +# This is a sample series selection rule in JSON, simply selecting CT series. +# If the study has more than 1 CT series, then all of them will be selected. +# Please see more detail in DICOMSeriesSelectorOperator. +Sample_Rules_Text = """ +{ + "selections": [ + { + "name": "CT Series", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "SeriesDescription": "(.*?)" + } + } + ] +} +""" + +if __name__ == "__main__": + # Creates the app and test it standalone. When running is this mode, please note the following: + # -m , for model file path + # -i , for input DICOM CT series folder + # -o , for the output folder, default $PWD/output + # e.g. + # monai-deploy exec app.py -i input -m model/model.ts + # + # export HOLOSCAN_INPUT_PATH=dcm + # export HOLOSCAN_MODEL_PATH=spleen_model/model.ts + # export HOLOSCAN_OUTPUT_PATH="output" + logging.info(f"Begin {__name__}") + AISpleennnUNetSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.yaml b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml new file mode 100644 index 00000000..62636118 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml @@ -0,0 +1,27 @@ +%YAML 1.2 +# SPDX-FileCopyrightText: Copyright (c) 2022-2023 MONAI. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +application: + title: MONAI Deploy App Package - Spleen nnUNet Seg Inference + version: 1.0 + inputFormats: ["file"] + outputFormats: ["file"] + +resources: + cpu: 1 + gpu: 1 + memory: 1Gi + gpuMemory: 7Gi diff --git a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt new file mode 100644 index 00000000..ebce84bd --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt @@ -0,0 +1,11 @@ +scikit-image>=0.17.2 +pydicom>=2.3.0 +highdicom>=0.18.2 +SimpleITK>=2.0.0 +Pillow>=8.0.0 +numpy-stl>=2.12.0 +trimesh>=3.8.11 +nibabel>=3.2.1 +torch>=1.12.0 +monai>=1.0.0 +nnunetv2>=2.5.1 diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 75176dab..c875eea8 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -25,6 +25,7 @@ IOMapping ModelInfo MonaiBundleInferenceOperator + MonainnUNetBundleInferenceOperator MonaiSegInferenceOperator PNGConverterOperator PublisherOperator @@ -47,6 +48,7 @@ from .dicom_utils import EquipmentInfo, ModelInfo, random_with_n_digits, save_dcm_file, write_common_modules from .inference_operator import InferenceOperator from .monai_bundle_inference_operator import BundleConfigNames, IOMapping, MonaiBundleInferenceOperator +from .monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator from .monai_seg_inference_operator import MonaiSegInferenceOperator from .nii_data_loader_operator import NiftiDataLoader from .png_converter_operator import PNGConverterOperator diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index 7ae4db4d..94c118e3 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -60,7 +60,7 @@ def get_bundle_config(bundle_path, config_names): Gets the configuration parser from the specified Torchscript bundle file path. """ - bundle_suffixes = (".json", ".yaml", "yml") # The only supported file ext(s) + bundle_suffixes = (".json", ".yaml", ".yml") # The only supported file ext(s) config_folder = "extra" def _read_from_archive(archive, root_name: str, config_name: str, do_search=True): @@ -90,7 +90,7 @@ def _read_from_archive(archive, root_name: str, config_name: str, do_search=True name_list = archive.namelist() for suffix in bundle_suffixes: for n in name_list: - if (f"{config_name}{suffix}").casefold in n.casefold(): + if (f"{config_name}{suffix}").casefold() in n.casefold(): logging.debug(f"Trying to read content of config {config_name!r} from {n!r}.") content_text = archive.read(n) break diff --git a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py new file mode 100644 index 00000000..3bedb448 --- /dev/null +++ b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py @@ -0,0 +1,88 @@ +# Copyright 2002 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config +from monai.deploy.utils.importutil import optional_import +from typing import Any, Dict, Tuple, Union +from monai.deploy.core import Image +from pathlib import Path +MONAI_UTILS = "monai.utils" +nibabel, _ = optional_import("nibabel", "3.2.1") +torch, _ = optional_import("torch", "1.10.2") + +NdarrayOrTensor, _ = optional_import("monai.config", name="NdarrayOrTensor") +MetaTensor, _ = optional_import("monai.data.meta_tensor", name="MetaTensor") +PostFix, _ = optional_import("monai.utils.enums", name="PostFix") # For the default meta_key_postfix +first, _ = optional_import("monai.utils.misc", name="first") +ensure_tuple, _ = optional_import(MONAI_UTILS, name="ensure_tuple") +convert_to_dst_type, _ = optional_import(MONAI_UTILS, name="convert_to_dst_type") +Key, _ = optional_import(MONAI_UTILS, name="ImageMetaKey") +MetaKeys, _ = optional_import(MONAI_UTILS, name="MetaKeys") +SpaceKeys, _ = optional_import(MONAI_UTILS, name="SpaceKeys") +Compose_, _ = optional_import("monai.transforms", name="Compose") +ConfigParser_, _ = optional_import("monai.bundle", name="ConfigParser") +MapTransform_, _ = optional_import("monai.transforms", name="MapTransform") +SimpleInferer, _ = optional_import("monai.inferers", name="SimpleInferer") + +Compose: Any = Compose_ +MapTransform: Any = MapTransform_ +ConfigParser: Any = ConfigParser_ +__all__ = ["MonainnUNetBundleInferenceOperator"] + + +class MonainnUNetBundleInferenceOperator(MonaiBundleInferenceOperator): + """ + A specialized operator for performing inference using the MONAI nnUNet bundle. + This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific + configurations and prediction logic. It initializes the nnUNet predictor and provides + a method for performing inference on input data. + + Attributes + ---------- + _nnunet_predictor : torch.nn.Module + The nnUNet predictor module used for inference. + + Methods + ------- + _init_config(config_names) + Initializes the configuration for the nnUNet bundle, including parsing the bundle + configuration and setting up the nnUNet predictor. + predict(data, *args, **kwargs) + Performs inference on the input data using the nnUNet predictor. + """ + + def __init__( + self, + *args, + **kwargs, + ): + + + super().__init__(*args, **kwargs) + + self._nnunet_predictor : torch.nn.Module = None + + + def _init_config(self, config_names): + + super()._init_config(config_names) + parser = get_bundle_config(str(self._bundle_path), config_names) + parser['bundle_root'] = str(Path(self._bundle_path).parent.parent.parent) + self._parser = parser + + self._nnunet_predictor = parser.get_parsed_content("network_def") + + def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, ...], Dict[Any, Any]]: + """Predicts output using the inferer.""" + + self._nnunet_predictor.predictor.network = self._model_network + #os.environ['nnUNet_def_n_proc'] = "1" + return self._nnunet_predictor(torch.unsqueeze(data, 0)) From 8c8c4bf7578bb9cad7025cda97b4b1c65e3e7c6e Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Thu, 27 Mar 2025 03:02:29 -0400 Subject: [PATCH 028/118] CCHMC Ped Abd CT Seg Example App (#525) * hugging_face_integration_app dependency cleanup Signed-off-by: bluna301 * cchmc_ped_abd_ct_seg example app Signed-off-by: bluna301 * license update + code optimizations Signed-off-by: bluna301 * cleanup Signed-off-by: bluna301 * spelling + dependency cleanup Signed-off-by: bluna301 * model DICOM tag cleanup Signed-off-by: bluna301 --------- Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- docs/source/getting_started/examples.md | 1 + .../apps/cchmc_ped_abd_ct_seg_app/README.md | 40 ++ .../apps/cchmc_ped_abd_ct_seg_app/__init__.py | 29 ++ .../apps/cchmc_ped_abd_ct_seg_app/__main__.py | 26 ++ .../abdomen_seg_operator.py | 294 +++++++++++++ examples/apps/cchmc_ped_abd_ct_seg_app/app.py | 281 +++++++++++++ .../apps/cchmc_ped_abd_ct_seg_app/app.yaml | 32 ++ .../dicom_sc_writer_operator.py | 253 ++++++++++++ .../mongodb_entry_creator_operator.py | 349 ++++++++++++++++ .../mongodb_writer_operator.py | 235 +++++++++++ .../post_transforms.py | 387 ++++++++++++++++++ .../cchmc_ped_abd_ct_seg_app/requirements.txt | 27 ++ .../scripts/map_build.sh | 29 ++ .../scripts/map_extract.sh | 31 ++ .../scripts/map_run.sh | 31 ++ .../scripts/map_run_interactive.sh | 37 ++ .../scripts/model_run.sh | 21 + requirements-examples.txt | 1 + 18 files changed, 2104 insertions(+) create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/README.md create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/app.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh diff --git a/docs/source/getting_started/examples.md b/docs/source/getting_started/examples.md index e16873c3..521a4e52 100644 --- a/docs/source/getting_started/examples.md +++ b/docs/source/getting_started/examples.md @@ -13,3 +13,4 @@ - ai_unetr_seg_app - dicom_series_to_image_app - breast_density_classifer_app +- cchmc_ped_abd_ct_seg_app diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/README.md b/examples/apps/cchmc_ped_abd_ct_seg_app/README.md new file mode 100644 index 00000000..5e1a8a21 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/README.md @@ -0,0 +1,40 @@ +# MONAI Application Package (MAP) for CCHMC Pediatric Abdominal CT Segmentation MONAI Bundle + +This MAP is based on the [CCHMC Pediatric Abdominal CT Segmentation MONAI Bundle](https://github.com/cchmc-dll/pediatric_abdominal_segmentation_bundle/tree/original). This model was developed at Cincinnati Children's Hospital Medical Center by the Department of Radiology. + +The PyTorch and TorchScript DynUNet models can be downloaded from the [MONAI Bundle Repository](https://github.com/cchmc-dll/pediatric_abdominal_segmentation_bundle/tree/original/models). + +For questions, please feel free to contact Elan Somasundaram (Elanchezhian.Somasundaram@cchmc.org) and Bryan Luna (Bryan.Luna@cchmc.org). + +## Unique Features + +Some unique features of this MAP pipeline include: +- **Custom Inference Operator:** custom `AbdomenSegOperator` enables either PyTorch or TorchScript model loading +- **DICOM Secondary Capture Output:** custom `DICOMSecondaryCaptureWriterOperator` writes a DICOM SC with organ contours +- **Output Filtering:** model produces Liver-Spleen-Pancreas segmentations, but seg visibility in the outputs (DICOM SEG, SC, SR) can be controlled in `app.py` +- **MONAI Deploy Express MongoDB Write:** custom operators (`MongoDBEntryCreatorOperator` and `MongoDBWriterOperator`) allow for writing to the MongoDB database associated with MONAI Deploy Express + +## Scripts +Several scripts have been compiled that quickly execute useful actions (such as running the app code locally with Python interpreter, MAP packaging, MAP execution, etc.). Some scripts require the input of command line arguments; review the `scripts` folder for more details. + +## Notes +The DICOM Series selection criteria has been customized based on the model's training and CCHMC use cases. By default, Axial CT series with Slice Thickness between 3.0 - 5.0 mm (inclusive) will be selected for. + +If MongoDB writing is not desired, please comment out the relevant sections in `app.py` and the `AbdomenSegOperator`. + +To execute the pipeline with MongoDB writing enabled, it is best to create a `.env` file that the `MongoDBWriterOperator` can load in. Below is an example `.env` file that follows the format outlined in this operator; note that these values are the default variable values as defined in the [.env](https://github.com/Project-MONAI/monai-deploy/blob/main/deploy/monai-deploy-express/.env) and [docker-compose.yaml](https://github.com/Project-MONAI/monai-deploy/blob/main/deploy/monai-deploy-express/docker-compose.yml) files of v0.6.0 of MONAI Deploy Express: + +```dotenv +MONGODB_USERNAME=root +MONGODB_PASSWORD=rootpassword +MONGODB_PORT=27017 +MONGODB_IP_DOCKER=172.17.0.1 # default Docker bridge network IP +``` + +Prior to packaging into a MAP, the MongoDB credentials should be hardcoded into the `MongoDBWriterOperator`. + +The MONAI Deploy Express MongoDB Docker container (`mdl-mongodb`) needs to be connected to the Docker bridge network in order for the MongoDB write to be successful. Executing the following command in a MONAI Deploy Express terminal will establish this connection: + +```bash +docker network connect bridge mdl-mongodb +``` diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py b/examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py new file mode 100644 index 00000000..06014cc7 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py @@ -0,0 +1,29 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# __init__.py is used to initialize a Python package +# ensures that the directory __init__.py resides in is included at the start of the sys.path +# this is useful when you want to import modules from this directory, even if it’s not the +# directory where your Python script is running. + +# give access to operating system and Python interpreter +import os +import sys + +# grab absolute path of directory containing __init__.py +_current_dir = os.path.abspath(os.path.dirname(__file__)) + +# if sys.path is not the same as the directory containing the __init__.py file +if sys.path and os.path.abspath(sys.path[0]) != _current_dir: + # insert directory containing __init__.py file at the beginning of sys.path + sys.path.insert(0, _current_dir) +# delete variable +del _current_dir diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py b/examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py new file mode 100644 index 00000000..80cca2fa --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py @@ -0,0 +1,26 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# __main__.py is needed for MONAI Application Packager to detect the main app code (app.py) when +# app.py is executed in the application folder path +# e.g., python my_app + +import logging + +# import AIAbdomenSegApp class from app.py +from app import AIAbdomenSegApp + +# if __main__.py is being run directly +if __name__ == "__main__": + logging.info(f"Begin {__name__}") + # create and run an instance of AIAbdomenSegApp + AIAbdomenSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py new file mode 100644 index 00000000..2f412f14 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py @@ -0,0 +1,294 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path +from typing import List + +import torch +from numpy import float32, int16 + +# import custom transforms from post_transforms.py +from post_transforms import CalculateVolumeFromMaskd, ExtractVolumeToTextd, LabelToContourd, OverlayImageLabeld + +import monai +from monai.deploy.core import AppContext, Fragment, Model, Operator, OperatorSpec +from monai.deploy.operators.monai_seg_inference_operator import InfererType, InMemImageReader, MonaiSegInferenceOperator +from monai.transforms import ( + Activationsd, + AsDiscreted, + CastToTyped, + Compose, + CropForegroundd, + EnsureChannelFirstd, + EnsureTyped, + Invertd, + LoadImaged, + Orientationd, + SaveImaged, + ScaleIntensityRanged, + Spacingd, +) + + +# this operator performs inference with the new version of the bundle +class AbdomenSegOperator(Operator): + """Performs segmentation inference with a custom model architecture.""" + + DEFAULT_OUTPUT_FOLDER = Path.cwd() / "output" + + def __init__( + self, + fragment: Fragment, + *args, + app_context: AppContext, + model_path: Path, + output_folder: Path = DEFAULT_OUTPUT_FOLDER, + output_labels: List[int], + **kwargs, + ): + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + self._input_dataset_key = "image" + self._pred_dataset_key = "pred" + + # self.model_path is compatible with TorchScript and PyTorch model workflows (pythonic and MAP) + self.model_path = self._find_model_file_path(model_path) + + self.output_folder = output_folder + self.output_folder.mkdir(parents=True, exist_ok=True) + self.output_labels = output_labels + self.app_context = app_context + self.input_name_image = "image" + self.output_name_seg = "seg_image" + self.output_name_text_dicom_sr = "result_text_dicom_sr" + self.output_name_text_mongodb = "result_text_mongodb" + self.output_name_sc_path = "dicom_sc_dir" + + # the base class has an attribute called fragment to hold the reference to the fragment object + super().__init__(fragment, *args, **kwargs) + + # find model path; supports TorchScript and PyTorch model workflows (pythonic and MAP) + def _find_model_file_path(self, model_path: Path): + # when executing pythonically, model_path is a file + # when executing as MAP, model_path is a directory (/opt/holoscan/models) + # torch.load() from PyTorch workflow needs file path; can't load model from directory + # returns first found file in directory in this case + if model_path: + if model_path.is_file(): + return model_path + elif model_path.is_dir(): + for file in model_path.rglob("*"): + if file.is_file(): + return file + + raise ValueError(f"Model file not found in the provided path: {model_path}") + + # load a PyTorch model and register it in app_context + def _load_pytorch_model(self): + + _device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + _kernel_size: tuple = (3, 3, 3, 3, 3, 3) + _strides: tuple = (1, 2, 2, 2, 2, (2, 2, 1)) + _upsample_kernel_size: tuple = (2, 2, 2, 2, (2, 2, 1)) + + # create DynUNet model with the specified architecture parameters + move to computational device (GPU or CPU) + # parameters pulled from inference.yaml file of the MONAI bundle + model = monai.networks.nets.dynunet.DynUNet( + spatial_dims=3, + in_channels=1, + out_channels=4, + kernel_size=_kernel_size, + strides=_strides, + upsample_kernel_size=_upsample_kernel_size, + norm_name="INSTANCE", + deep_supervision=False, + res_block=True, + ).to(_device) + + # load model state dictionary (i.e. mapping param names to tensors) via torch.load + # weights_only=True to avoid arbitrary code execution during unpickling + state_dict = torch.load(self.model_path, weights_only=True) + + # assign loaded weights to model architecture via load_state_dict + model.load_state_dict(state_dict) + + # set model in evaluation (inference) mode + model.eval() + + # create a MONAI Model object to encapsulate the PyTorch model and metadata + loaded_model = Model(self.model_path, name="ped_abd_ct_seg") + + # assign loaded PyTorch model as the predictor for the Model object + loaded_model.predictor = model + + # register the loaded Model object in the application context so other operators can access it + # MonaiSegInferenceOperator uses _get_model method to load models; looks at app_context.models first + self.app_context.models = loaded_model + + def setup(self, spec: OperatorSpec): + spec.input(self.input_name_image) + + # DICOM SEG + spec.output(self.output_name_seg) + + # DICOM SR + spec.output(self.output_name_text_dicom_sr) + + # MongoDB + spec.output(self.output_name_text_mongodb) + + # DICOM SC + spec.output(self.output_name_sc_path) + + def compute(self, op_input, op_output, context): + input_image = op_input.receive(self.input_name_image) + if not input_image: + raise ValueError("Input image is not found.") + + # this operator gets an in-memory Image object, so a specialized ImageReader is needed. + _reader = InMemImageReader(input_image) + + # preprocessing and postprocessing + pre_transforms = self.pre_process(_reader) + post_transforms = self.post_process(pre_transforms) + + # if PyTorch model + if self.model_path.suffix.lower() == ".pt": + # load the PyTorch model + self._logger.info("PyTorch model detected") + self._load_pytorch_model() + # else, we have TorchScript model + else: + self._logger.info("TorchScript model detected") + + # delegates inference and saving output to the built-in operator. + infer_operator = MonaiSegInferenceOperator( + self.fragment, + roi_size=(96, 96, 96), + pre_transforms=pre_transforms, + post_transforms=post_transforms, + overlap=0.75, + app_context=self.app_context, + model_name="", + inferer=InfererType.SLIDING_WINDOW, + sw_batch_size=4, + model_path=self.model_path, + name="monai_seg_inference_op", + ) + + # setting the keys used in the dictionary-based transforms + infer_operator.input_dataset_key = self._input_dataset_key + infer_operator.pred_dataset_key = self._pred_dataset_key + + seg_image = infer_operator.compute_impl(input_image, context) + + # DICOM SEG + op_output.emit(seg_image, self.output_name_seg) + + # grab result_text_dicom_sr and result_text_mongodb from ExractVolumeToTextd transform + result_text_dicom_sr, result_text_mongodb = self.get_result_text_from_transforms(post_transforms) + if not result_text_dicom_sr or not result_text_mongodb: + raise ValueError("Result text could not be generated.") + + # only log volumes for target organs so logs reflect MAP behavior + self._logger.info(f"Calculated Organ Volumes: {result_text_dicom_sr}") + + # DICOM SR + op_output.emit(result_text_dicom_sr, self.output_name_text_dicom_sr) + + # MongoDB + op_output.emit(result_text_mongodb, self.output_name_text_mongodb) + + # DICOM SC + # temporary DICOM SC (w/o source DICOM metadata) saved in output_folder / temp directory + dicom_sc_dir = self.output_folder / "temp" + + self._logger.info(f"Temporary DICOM SC saved at: {dicom_sc_dir}") + + op_output.emit(dicom_sc_dir, self.output_name_sc_path) + + def pre_process(self, img_reader) -> Compose: + """Composes transforms for preprocessing the input image before predicting on a model.""" + + my_key = self._input_dataset_key + + return Compose( + [ + # img_reader: specialized InMemImageReader, derived from MONAI ImageReader + LoadImaged(keys=my_key, reader=img_reader), + EnsureChannelFirstd(keys=my_key), + Orientationd(keys=my_key, axcodes="RAS"), + Spacingd(keys=my_key, pixdim=[1.5, 1.5, 3.0], mode=["bilinear"]), + ScaleIntensityRanged(keys=my_key, a_min=-250, a_max=400, b_min=0.0, b_max=1.0, clip=True), + CropForegroundd(keys=my_key, source_key=my_key, mode="minimum"), + EnsureTyped(keys=my_key), + CastToTyped(keys=my_key, dtype=float32), + ] + ) + + def post_process(self, pre_transforms: Compose) -> Compose: + """Composes transforms for postprocessing the prediction results.""" + + pred_key = self._pred_dataset_key + + labels = {"background": 0, "liver": 1, "spleen": 2, "pancreas": 3} + + return Compose( + [ + Activationsd(keys=pred_key, softmax=True), + Invertd( + keys=[pred_key, self._input_dataset_key], + transform=pre_transforms, + orig_keys=[self._input_dataset_key, self._input_dataset_key], + meta_key_postfix="meta_dict", + nearest_interp=[False, False], + to_tensor=True, + ), + AsDiscreted(keys=pred_key, argmax=True), + # custom post-processing steps + CalculateVolumeFromMaskd(keys=pred_key, label_names=labels), + # optional code for saving segmentation masks as a NIfTI + # SaveImaged( + # keys=pred_key, + # output_ext=".nii.gz", + # output_dir=self.output_folder / "NIfTI", + # meta_keys="pred_meta_dict", + # separate_folder=False, + # output_dtype=int16 + # ), + # volume data stored in dictionary under pred_key + '_volumes' key + ExtractVolumeToTextd( + keys=[pred_key + "_volumes"], label_names=labels, output_labels=self.output_labels + ), + # comment out LabelToContourd for seg masks instead of contours; organ filtering will be lost + LabelToContourd(keys=pred_key, output_labels=self.output_labels), + OverlayImageLabeld(image_key=self._input_dataset_key, label_key=pred_key, overlay_key="overlay"), + SaveImaged( + keys="overlay", + output_ext=".dcm", + # save temporary DICOM SC (w/o source DICOM metadata) in output_folder / temp directory + output_dir=self.output_folder / "temp", + separate_folder=False, + output_dtype=int16, + ), + ] + ) + + # grab volume data from ExtractVolumeToTextd transform + def get_result_text_from_transforms(self, post_transforms: Compose): + """Extracts the result_text variables from post-processing transforms output.""" + + # grab the result_text variables from ExractVolumeToTextd transfor + for transform in post_transforms.transforms: + if isinstance(transform, ExtractVolumeToTextd): + return transform.result_text_dicom_sr, transform.result_text_mongodb + return None diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/app.py b/examples/apps/cchmc_ped_abd_ct_seg_app/app.py new file mode 100644 index 00000000..845954b0 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/app.py @@ -0,0 +1,281 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path + +# custom inference operator +from abdomen_seg_operator import AbdomenSegOperator + +# custom DICOM Secondary Capture (SC) writer operator +from dicom_sc_writer_operator import DICOMSCWriterOperator + +# custom MongoDB operators +from mongodb_entry_creator_operator import MongoDBEntryCreatorOperator +from mongodb_writer_operator import MongoDBWriterOperator + +# required for setting SegmentDescription attributes +# direct import as this is not part of App SDK package +from pydicom.sr.codedict import codes + +from monai.deploy.conditions import CountCondition +from monai.deploy.core import Application +from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator +from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription +from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator +from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator +from monai.deploy.operators.dicom_text_sr_writer_operator import DICOMTextSRWriterOperator, EquipmentInfo, ModelInfo + + +# inherit new Application class instance, AIAbdomenSegApp, from MONAI Application base class +# base class provides support for chaining up operators and executing application +class AIAbdomenSegApp(Application): + """Demonstrates inference with customized CCHMC pediatric abdominal segmentation bundle inference operator, with + DICOM files as input/output + + This application loads a set of DICOM instances, selects the appropriate series, converts the series to + 3D volume image, performs inference with a custom inference operator, including pre-processing + and post-processing, saves a DICOM SEG (organ contours), a DICOM Secondary Capture (organ contours overlay), + and a DICOM SR (organ volumes), and writes organ volumes and relevant DICOM tags to the MONAI Deploy Express + MongoDB database (optional). + + Pertinent MONAI Bundle: + https://github.com/cchmc-dll/pediatric_abdominal_segmentation_bundle/tree/original + + Execution Time Estimate: + With a NVIDIA GeForce RTX 3090 24GB GPU, for an input DICOM Series of 204 instances, the execution time is around + 25 seconds for DICOM SEG, DICOM SC, and DICOM SR outputs, as well as the MDE MongoDB database write. + """ + + def __init__(self, *args, **kwargs): + """Creates an application instance.""" + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + super().__init__(*args, **kwargs) + + def run(self, *args, **kwargs): + # this method calls the base class to run; can be omitted if simply calling through + self._logger.info(f"Begin {self.run.__name__}") + super().run(*args, **kwargs) + self._logger.info(f"End {self.run.__name__}") + + # use compose method to instantiate operators and connect them to form a Directed Acyclic Graph (DAG) + def compose(self): + """Creates the app specific operators and chain them up in the processing DAG.""" + + logging.info(f"Begin {self.compose.__name__}") + + # use Commandline options over environment variables to init context + app_context = Application.init_app_context(self.argv) + app_input_path = Path(app_context.input_path) + app_output_path = Path(app_context.output_path) + model_path = Path(app_context.model_path) + + # create the custom operator(s) as well as SDK built-in operator(s) + # DICOM Data Loader op + study_loader_op = DICOMDataLoaderOperator( + self, CountCondition(self, 1), input_folder=app_input_path, name="study_loader_op" + ) + + # custom DICOM Series Selector op + # all_matched and sort_by_sop_instance_count = True; want all series that meet the selection criteria + # to be matched, and SOP sorting + series_selector_op = DICOMSeriesSelectorOperator( + self, rules=Sample_Rules_Text, all_matched=True, sort_by_sop_instance_count=True, name="series_selector_op" + ) + + # DICOM Series to Volume op + series_to_vol_op = DICOMSeriesToVolumeOperator(self, name="series_to_vol_op") + + # custom inference op + # output_labels specifies which of the organ segmentations are desired in the DICOM SEG, DICOM SC, and DICOM SR outputs + # 1 = Liver, 2 = Spleen, 3 = Pancreas; all segmentations performed, but visibility in outputs (SEG, SC, SR) controlled here + # all organ volumes will be written to MongoDB + output_labels = [1, 2, 3] + abd_seg_op = AbdomenSegOperator( + self, app_context=app_context, model_path=model_path, output_labels=output_labels, name="abd_seg_op" + ) + + # create DICOM Seg writer providing the required segment description for each segment with + # the actual algorithm and the pertinent organ/tissue; the segment_label, algorithm_name, + # and algorithm_version are of DICOM VR LO type, limited to 64 chars + # https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html + + # general algorithm information + _algorithm_name = "CCHMC Pediatric CT Abdominal Segmentation" + _algorithm_family = codes.DCM.ArtificialIntelligence + _algorithm_version = "0.4.3" + + segment_descriptions = [ + SegmentDescription( + segment_label="Liver", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Liver, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + SegmentDescription( + segment_label="Spleen", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Spleen, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + SegmentDescription( + segment_label="Pancreas", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Pancreas, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + ] + + # custom tags - add Device UID to DICOM SEG to match SR and SC tags + custom_tags_seg = {"SeriesDescription": "AI Generated DICOM SEG; Not for Clinical Use.", "DeviceUID": "0.0.1"} + custom_tags_sr = {"SeriesDescription": "AI Generated DICOM SR; Not for Clinical Use."} + custom_tags_sc = {"SeriesDescription": "AI Generated DICOM Secondary Capture; Not for Clinical Use."} + + # DICOM SEG Writer op writes content from segment_descriptions to output DICOM images as DICOM tags + dicom_seg_writer = DICOMSegmentationWriterOperator( + self, + segment_descriptions=segment_descriptions, + custom_tags=custom_tags_seg, + # store DICOM SEG in SEG subdirectory; necessary for routing in CCHMC MDE workflow definition + output_folder=app_output_path / "SEG", + # omit_empty_frames is a default parameteter (type bool) of DICOMSegmentationWriterOperator + # dictates whether or not to omit frames that contain no segmented pixels from the output segmentation + # default value is True; changed to False to ensure input and output DICOM series #'s match + omit_empty_frames=False, + name="dicom_seg_writer", + ) + + # model and equipment info + my_model_info = ModelInfo("CCHMC CAIIR", "CCHMC Pediatric CT Abdominal Segmentation", "0.4.3", "0.0.1") + my_equipment = EquipmentInfo(manufacturer="The MONAI Consortium", manufacturer_model="MONAI Deploy App SDK") + + # DICOM SR Writer op + dicom_sr_writer = DICOMTextSRWriterOperator( + self, + # copy_tags is a default parameteter (type bool) of DICOMTextSRWriterOperator; default value is True + # dictates whether or not to copy DICOM attributes from the selected DICOM series + # changed to True to copy DICOM attributes so DICOM SR has same Study UID + copy_tags=True, + model_info=my_model_info, + equipment_info=my_equipment, + custom_tags=custom_tags_sr, + # store DICOM SR in SR subdirectory; necessary for routing in CCHMC MDE workflow definition + output_folder=app_output_path / "SR", + ) + + # custom DICOM SC Writer op + dicom_sc_writer = DICOMSCWriterOperator( + self, + model_info=my_model_info, + equipment_info=my_equipment, + custom_tags=custom_tags_sc, + # store DICOM SC in SC subdirectory; necessary for routing in CCHMC MDE workflow definition + output_folder=app_output_path / "SC", + ) + + # MongoDB database, collection, and MAP version info + database_name = "CTLiverSpleenSegPredictions" + collection_name = "OrganVolumes" + map_version = "0.0.1" + + # custom MongoDB Entry Creator op + mongodb_entry_creator = MongoDBEntryCreatorOperator(self, map_version=map_version) + + # custom MongoDB Writer op + mongodb_writer = MongoDBWriterOperator(self, database_name=database_name, collection_name=collection_name) + + # create the processing pipeline, by specifying the source and destination operators, and + # ensuring the output from the former matches the input of the latter, in both name and type + # instantiate and connect operators using self.add_flow(); specify current operator, next operator, and tuple to match I/O + self.add_flow(study_loader_op, series_selector_op, {("dicom_study_list", "dicom_study_list")}) + self.add_flow( + series_selector_op, series_to_vol_op, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(series_to_vol_op, abd_seg_op, {("image", "image")}) + + # note below the dicom_seg_writer, dicom_sr_writer, dicom_sc_writer, and mongodb_entry_creator each require + # two inputs, each coming from a source operator + + # DICOM SEG + self.add_flow( + series_selector_op, dicom_seg_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, dicom_seg_writer, {("seg_image", "seg_image")}) + + # DICOM SR + self.add_flow( + series_selector_op, dicom_sr_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, dicom_sr_writer, {("result_text_dicom_sr", "text")}) + + # DICOM SC + self.add_flow( + series_selector_op, dicom_sc_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, dicom_sc_writer, {("dicom_sc_dir", "dicom_sc_dir")}) + + # MongoDB + self.add_flow( + series_selector_op, mongodb_entry_creator, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, mongodb_entry_creator, {("result_text_mongodb", "text")}) + self.add_flow(mongodb_entry_creator, mongodb_writer, {("mongodb_database_entry", "mongodb_database_entry")}) + + logging.info(f"End {self.compose.__name__}") + + +# series selection rule in JSON, which selects for axial CT series; flexible ST choices: +# StudyDescription: matches any value +# Modality: matches "CT" value (case-insensitive); filters out non-CT modalities +# ImageType: matches value that contains "PRIMARY", "ORIGINAL", and "AXIAL"; filters out most cor and sag views +# SeriesDescription: matches any values that do not contain "cor" or "sag" (case-insensitive); filters out cor and sag views +# SliceThickness: supports list, string, and numerical matching: +# [3, 5]: matches ST values between 3 and 5 +# "^(5(\\\\.0+)?|5)$": RegEx; matches ST values of 5, 5.0, 5.00, etc. +# 5: matches ST values of 5, 5.0, 5.00, etc. +# all valid series will be selected; downstream operators only perform inference and write outputs for 1st selected series +# please see more detail in DICOMSeriesSelectorOperator + +Sample_Rules_Text = """ +{ + "selections": [ + { + "name": "Axial CT Series", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "ImageType": ["PRIMARY", "ORIGINAL", "AXIAL"], + "SeriesDescription": "(?i)^(?!.*(cor|sag)).*$", + "SliceThickness": [3, 5] + } + } + ] +} +""" + +# if executing application code using python interpreter: +if __name__ == "__main__": + # creates the app and test it standalone; when running is this mode, please note the following: + # -m , for model file path + # -i , for input DICOM CT series folder + # -o , for the output folder, default $PWD/output + # e.g. + # monai-deploy exec app.py -i input -m model/dynunet_FT.ts + # + logging.info(f"Begin {__name__}") + AIAbdomenSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml b/examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml new file mode 100644 index 00000000..badfac7c --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml @@ -0,0 +1,32 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +# app.yaml is a configuration file that specifies MAP settings +# used by MONAI App SDK to understand how to run our app in a MAP and what resources it needs + +# specifies high-level information about our app +application: + title: MONAI Deploy App Package - CCHMC Pediatric CT Abdominal Segmentation + version: 0.0.1 + inputFormats: ["file"] + outputFormats: ["file"] + +# specifies the resources our app needs to run +# per MONAI docs (https://docs.monai.io/projects/monai-deploy-app-sdk/en/latest/developing_with_sdk/executing_packaged_app_locally.html) +# MAR does not validate all of the resource requirements embedded in the MAP to ensure they are met in host system +# e.g, MAR will throw an error if gpu requirement is not met on host system; however, gpuMemory parameter doesn't appear to be validated +resources: + cpu: 1 + gpu: 1 + memory: 1Gi + # during MAP execution, for an input DICOM Series of 204 instances, GPU usage peaks at just under 8900 MiB ~= 9.3 GB ~= 8.7 Gi + gpuMemory: 9Gi diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py new file mode 100644 index 00000000..9479485e --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py @@ -0,0 +1,253 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os +from pathlib import Path +from typing import Dict, Optional, Union + +import pydicom + +from monai.deploy.core import Fragment, Operator, OperatorSpec +from monai.deploy.core.domain.dicom_series import DICOMSeries +from monai.deploy.core.domain.dicom_series_selection import StudySelectedSeries +from monai.deploy.operators.dicom_utils import EquipmentInfo, ModelInfo, write_common_modules +from monai.deploy.utils.importutil import optional_import +from monai.deploy.utils.version import get_sdk_semver + +dcmread, _ = optional_import("pydicom", name="dcmread") +dcmwrite, _ = optional_import("pydicom.filewriter", name="dcmwrite") +generate_uid, _ = optional_import("pydicom.uid", name="generate_uid") +ImplicitVRLittleEndian, _ = optional_import("pydicom.uid", name="ImplicitVRLittleEndian") +Dataset, _ = optional_import("pydicom.dataset", name="Dataset") +FileDataset, _ = optional_import("pydicom.dataset", name="FileDataset") +Sequence, _ = optional_import("pydicom.sequence", name="Sequence") + + +class DICOMSCWriterOperator(Operator): + """Class to write a new DICOM Secondary Capture (DICOM SC) instance with source DICOM Series metadata included. + + Named inputs: + dicom_sc_dir: file path of temporary DICOM SC (w/o source DICOM Series metadata). + study_selected_series_list: DICOM Series for copying metadata from. + + Named output: + None. + + File output: + New, updated DICOM SC file (with source DICOM Series metadata) in the provided output folder. + """ + + # file extension for the generated DICOM Part 10 file + DCM_EXTENSION = ".dcm" + # the default output folder for saving the generated DICOM instance file + # DEFAULT_OUTPUT_FOLDER = Path(os.path.join(os.path.dirname(__file__))) / "output" + DEFAULT_OUTPUT_FOLDER = Path.cwd() / "output" + + def __init__( + self, + fragment: Fragment, + *args, + output_folder: Union[str, Path], + model_info: ModelInfo, + equipment_info: Optional[EquipmentInfo] = None, + custom_tags: Optional[Dict[str, str]] = None, + **kwargs, + ): + """Class to write a new DICOM Secondary Capture (DICOM SC) instance with source DICOM Series metadata. + + Args: + output_folder (str or Path): The folder for saving the generated DICOM SC instance file. + model_info (ModelInfo): Object encapsulating model creator, name, version and UID. + equipment_info (EquipmentInfo, optional): Object encapsulating info for DICOM Equipment Module. + Defaults to None. + custom_tags (Dict[str, str], optional): Dictionary for setting custom DICOM tags using Keywords and str values only. + Defaults to None. + + Raises: + ValueError: If result cannot be found either in memory or from file. + """ + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + + # need to init the output folder until the execution context supports dynamic FS path + # not trying to create the folder to avoid exception on init + self.output_folder = Path(output_folder) if output_folder else DICOMSCWriterOperator.DEFAULT_OUTPUT_FOLDER + self.input_name_sc_dir = "dicom_sc_dir" + self.input_name_study_series = "study_selected_series_list" + + # for copying DICOM attributes from a provided DICOMSeries + # required input for write_common_modules; will always be True for this implementation + self.copy_tags = True + + self.model_info = model_info if model_info else ModelInfo() + self.equipment_info = equipment_info if equipment_info else EquipmentInfo() + self.custom_tags = custom_tags + + # set own Modality and SOP Class UID + # Standard SOP Classes: https://dicom.nema.org/dicom/2013/output/chtml/part04/sect_B.5.html + # Modality, e.g., + # "OT" for PDF + # "SR" for Structured Report. + # Media Storage SOP Class UID, e.g., + # "1.2.840.10008.5.1.4.1.1.88.11" for Basic Text SR Storage + # "1.2.840.10008.5.1.4.1.1.104.1" for Encapsulated PDF Storage, + # "1.2.840.10008.5.1.4.1.1.88.34" for Comprehensive 3D SR IOD + # "1.2.840.10008.5.1.4.1.1.66.4" for Segmentation Storage + self.modality_type = "OT" # OT Modality for Secondary Capture + self.sop_class_uid = ( + "1.2.840.10008.5.1.4.1.1.7.4" # SOP Class UID for Multi-frame True Color Secondary Capture Image Storage + ) + # custom OverlayImageLabeld post-processing transform creates an RBG overlay + + # equipment version may be different from contributing equipment version + try: + self.software_version_number = get_sdk_semver() # SDK Version + except Exception: + self.software_version_number = "" + self.operators_name = f"AI Algorithm {self.model_info.name}" + + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + """Set up the named input(s), and output(s) if applicable. + + This operator does not have an output for the next operator, rather file output only. + + Args: + spec (OperatorSpec): The Operator specification for inputs and outputs etc. + """ + + spec.input(self.input_name_sc_dir) + spec.input(self.input_name_study_series) + + def compute(self, op_input, op_output, context): + """Performs computation for this operator and handles I/O. + + For now, only a single result content is supported, which could be in memory or an accessible file. + The DICOM Series used during inference is required (and copy_tags is hardcoded to True). + + When there are multiple selected series in the input, the first series' containing study will + be used for retrieving DICOM Study module attributes, e.g. StudyInstanceUID. + + Raises: + NotADirectoryError: When temporary DICOM SC path is not a directory. + FileNotFoundError: When result object not in the input, and result file not found either. + ValueError: Content object and file path not in the inputs, or no DICOM series provided. + IOError: If the input content is blank. + """ + + # receive the temporary DICOM SC file path and study selected series list + dicom_sc_dir = Path(op_input.receive(self.input_name_sc_dir)) + if not dicom_sc_dir: + raise IOError("Temporary DICOM SC path is read but blank.") + if not dicom_sc_dir.is_dir(): + raise NotADirectoryError(f"Provided temporary DICOM SC path is not a directory: {dicom_sc_dir}") + self._logger.info(f"Received temporary DICOM SC path: {dicom_sc_dir}") + + study_selected_series_list = op_input.receive(self.input_name_study_series) + if not study_selected_series_list or len(study_selected_series_list) < 1: + raise ValueError("Missing input, list of 'StudySelectedSeries'.") + + # retrieve the DICOM Series used during inference in order to grab appropriate study/series level tags + # this will be the 1st Series in study_selected_series_list + dicom_series = None + for study_selected_series in study_selected_series_list: + if not isinstance(study_selected_series, StudySelectedSeries): + raise ValueError(f"Element in input is not expected type, {StudySelectedSeries}.") + selected_series = study_selected_series.selected_series[0] + dicom_series = selected_series.series + break + + # log basic DICOM metadata for the retrieved DICOM Series + self._logger.debug(f"Dicom Series: {dicom_series}") + + # the output folder should come from the execution context when it is supported + self.output_folder.mkdir(parents=True, exist_ok=True) + + # write the new DICOM SC instance + self.write(dicom_sc_dir, dicom_series, self.output_folder) + + def write(self, dicom_sc_dir, dicom_series: DICOMSeries, output_dir: Path): + """Writes a new, updated DICOM SC instance and deletes the temporary DICOM SC instance. + The new, updated DICOM SC instance is the temporary DICOM SC instance with source + DICOM Series metadata copied. + + Args: + dicom_sc_dir: temporary DICOM SC file path. + dicom_series (DICOMSeries): DICOMSeries object encapsulating the original series. + + Returns: + None + + File output: + New, updated DICOM SC file (with source DICOM Series metadata) in the provided output folder. + """ + + if not isinstance(output_dir, Path): + raise ValueError("output_dir is not a valid Path.") + + output_dir.mkdir(parents=True, exist_ok=True) # just in case + + # find the temporary DICOM SC file in the directory; there should only be one .dcm file present + dicom_files = list(dicom_sc_dir.glob("*.dcm")) + dicom_sc_file = dicom_files[0] + + # load the temporary DICOM SC file using pydicom + dicom_sc_dataset = pydicom.dcmread(dicom_sc_file) + self._logger.info(f"Loaded temporary DICOM SC file: {dicom_sc_file}") + + # use write_common_modules to copy metadata from dicom_series + # this will copy metadata and return an updated Dataset + ds = write_common_modules( + dicom_series, + self.copy_tags, # always True for this implementation + self.modality_type, + self.sop_class_uid, + self.model_info, + self.equipment_info, + ) + + # Secondary Capture specific tags + ds.ImageType = ["DERIVED", "SECONDARY"] + + # for now, only allow str Keywords and str value + if self.custom_tags: + for k, v in self.custom_tags.items(): + if isinstance(k, str) and isinstance(v, str): + try: + ds.update({k: v}) + except Exception as ex: + # best effort for now + logging.warning(f"Tag {k} was not written, due to {ex}") + + # merge the copied metadata into the loaded temporary DICOM SC file (dicom_sc_dataset) + for tag, value in ds.items(): + dicom_sc_dataset[tag] = value + + # save the updated DICOM SC file to the output folder + # instance file name is the same as the new SOP instance UID + output_file_path = self.output_folder.joinpath( + f"{dicom_sc_dataset.SOPInstanceUID}{DICOMSCWriterOperator.DCM_EXTENSION}" + ) + dicom_sc_dataset.save_as(output_file_path) + self._logger.info(f"Saved updated DICOM SC file at: {output_file_path}") + + # remove the temporary DICOM SC file + os.remove(dicom_sc_file) + self._logger.info(f"Removed temporary DICOM SC file: {dicom_sc_file}") + + # check if the temp directory is empty, then delete it + if not any(dicom_sc_dir.iterdir()): + os.rmdir(dicom_sc_dir) + self._logger.info(f"Removed temporary directory: {dicom_sc_dir}") + else: + self._logger.warning(f"Temporary directory {dicom_sc_dir} is not empty, skipping removal.") diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py new file mode 100644 index 00000000..4f2f275c --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py @@ -0,0 +1,349 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from datetime import datetime +from typing import Any, Dict, Union + +import pydicom +import pytz + +from monai.deploy.core import Fragment, Operator, OperatorSpec +from monai.deploy.core.domain.dicom_series import DICOMSeries +from monai.deploy.core.domain.dicom_series_selection import StudySelectedSeries + + +class MongoDBEntryCreatorOperator(Operator): + """Class to create a database entry for downstream MONAI Deploy Express MongoDB database writing. + Provided text input and source DICOM Series DICOM tags are used to create the entry. + + Named inputs: + text: text content to be included in the database entry. + study_selected_series_list: DICOM series for copying metadata from. + + Named output: + mongodb_database_entry: formatted MongoDB database entry. Downstream receiver MongoDBWriterOperator will write + the entry to the MONAI Deploy Express MongoDB database. + """ + + def __init__(self, fragment: Fragment, *args, map_version: str, **kwargs): + """Class to create a MONAI Deploy Express MongoDB database entry. Provided text input and + source DICOM Series DICOM tags are used to create the entry. + + Args: + map_version (str): version of the MAP. + + Raises: + ValueError: If result cannot be found either in memory or from file. + """ + + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + self.map_version = map_version + + self.input_name_text = "text" + self.input_name_dcm_series = "study_selected_series_list" + + self.output_name_db_entry = "mongodb_database_entry" + + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + """Set up the named input(s), and output(s). + + Args: + spec (OperatorSpec): The Operator specification for inputs and outputs etc. + """ + + spec.input(self.input_name_text) + spec.input(self.input_name_dcm_series) + + spec.output(self.output_name_db_entry) + + def compute(self, op_input, op_output, context): + """Performs computation for this operator and handles I/O. + + For now, only a single result content is supported, which could be in memory or an accessible file. + The DICOM Series used during inference is required. + + When there are multiple selected series in the input, the first series' containing study will + be used for retrieving DICOM Study module attributes, e.g. StudyInstanceUID. + + Raises: + FileNotFoundError: When result object not in the input, and result file not found either. + ValueError: Content object and file path not in the inputs, or no DICOM series provided. + IOError: If the input content is blank. + """ + + # receive the result text and study selected series list + result_text = str(op_input.receive(self.input_name_text)).strip() + if not result_text: + raise IOError("Input is read but blank.") + + study_selected_series_list = None + try: + study_selected_series_list = op_input.receive(self.input_name_dcm_series) + except Exception: + pass + if not study_selected_series_list or len(study_selected_series_list) < 1: + raise ValueError("Missing input, list of 'StudySelectedSeries'.") + + # retrieve the DICOM Series used during inference in order to grab appropriate Study/Series level tags + # this will be the 1st Series in study_selected_series_list + dicom_series = None + for study_selected_series in study_selected_series_list: + if not isinstance(study_selected_series, StudySelectedSeries): + raise ValueError(f"Element in input is not expected type, {StudySelectedSeries}.") + selected_series = study_selected_series.selected_series[0] + dicom_series = selected_series.series + break + + # create MongoDB entry + mongodb_database_entry = self.create_entry(result_text, dicom_series, self.map_version) + + # emit MongoDB entry + op_output.emit(mongodb_database_entry, self.output_name_db_entry) + + def create_entry(self, result_text: str, dicom_series: DICOMSeries, map_version: str): + """Creates the MONAI Deploy Express MongoDB database entry. + + Args: + result_text (str): text content to be included in the database entry. + dicom_series (DICOMSeries): DICOMSeries object encapsulating the original series. + map_version (str): version of the MAP. + + Returns: + mongodb_database_entry: formatted MongoDB database entry. + """ + + if not result_text or not len(result_text.strip()): + raise ValueError("Content is empty.") + + # get one of the SOP instance's native sop instance dataset + # we will pull Study level (and some Series level) DICOM tags from this SOP instance + # this same strategy is employed by write_common_modules + orig_ds = dicom_series.get_sop_instances()[0].get_native_sop_instance() + + # # loop through dicom series tags; look for discrepancies from SOP instances + # for sop_instance in dicom_series.get_sop_instances(): + # # get the native SOP instance dataset + # dicom_image = sop_instance.get_native_sop_instance() + + # # check if the tag is present in the dataset + # if hasattr(dicom_image, 'Exposure'): + # tag = dicom_image.Exposure + # print(f"Exposure: {tag}") + # else: + # print("Exposure tag not found in this SOP instance.") + + # DICOM TAG WRITING TO MONGODB + # edge cases addressed by looking at DICOM tag Type, Value Representation (VR), + # and Value Multiplicity (VM) specifically for the CT Image CIOD + # https://dicom.innolitics.com/ciods/ct-image + + # define Tag Absent variable + tag_absent = "Tag Absent" + + # STUDY AND SERIES LEVEL DICOM TAGS + + # AccessionNumber - Type: Required (2), VR: SH, VM: 1 + accession_number = orig_ds.AccessionNumber + + # StudyInstanceUID - Type: Required (1), VR: UI, VM: 1 + study_instance_uid = orig_ds.StudyInstanceUID + + # StudyDescription: Type: Optional (3), VR: LO, VM: 1 + # while Optional, only studies with this tag will be routed from Compass and MAP launched per workflow def + study_description = orig_ds.get("StudyDescription", tag_absent) + + # SeriesInstanceUID: Type: Required (1), VR: UI, VM: 1 + series_instance_uid = dicom_series._series_instance_uid + + # SeriesDescription: Type: Optional (3), VR: LO, VM: 1 + series_description = orig_ds.get("SeriesDescription", tag_absent) + + # sop instances should always be available on the MONAI DICOM Series object + series_sop_instances = len(dicom_series._sop_instances) + + # PATIENT DETAIL DICOM TAGS + + # PatientID - Type: Required (2), VR: LO, VM: 1 + patient_id = orig_ds.PatientID + + # PatientName - Type: Required (2), VR: PN, VM: 1 + # need to convert to str; pydicom can't encode PersonName object + patient_name = str(orig_ds.PatientName) + + # PatientSex - Type: Required (2), VR: CS, VM: 1 + patient_sex = orig_ds.PatientSex + + # PatientBirthDate - Type: Required (2), VR: DA, VM: 1 + patient_birth_date = orig_ds.PatientBirthDate + + # PatientAge - Type: Optional (3), VR: AS, VM: 1 + patient_age = orig_ds.get("PatientAge", tag_absent) + + # EthnicGroup - Type: Optional (3), VR: SH, VM: 1 + ethnic_group = orig_ds.get("EthnicGroup", tag_absent) + + # SCAN ACQUISITION PARAMETER DICOM TAGS + + # on CCHMC test cases, the following tags had consistent values for all SOP instances + + # Manufacturer - Type: Required (2), VR: LO, VM: 1 + manufacturer = orig_ds.Manufacturer + + # ManufacturerModelName - Type: Optional (3), VR: LO, VM: 1 + manufacturer_model_name = orig_ds.get("ManufacturerModelName", tag_absent) + + # BodyPartExamined - Type: Optional (3), VR: CS, VM: 1 + body_part_examined = orig_ds.get("BodyPartExamined", tag_absent) + + # row and column pixel spacing are derived from PixelSpacing + # PixelSpacing - Type: Required (1), VR: DS, VM: 2 (handled by MONAI) + row_pixel_spacing = dicom_series._row_pixel_spacing + column_pixel_spacing = dicom_series._col_pixel_spacing + + # per DICOMSeriesToVolumeOperator, depth pixel spacing will always be defined + depth_pixel_spacing = dicom_series._depth_pixel_spacing + + # SliceThickness - Type: Required (2), VR: DS, VM: 1 + slice_thickness = orig_ds.SliceThickness + + # PixelRepresentation - Type: Required (1), VR: US, VM: 1 + pixel_representation = orig_ds.PixelRepresentation + + # BitsStored - Type: Required (1), VR: US, VM: 1 + bits_stored = orig_ds.BitsStored + + # WindowWidth - Type: Conditionally Required (1C), VR: DS, VM: 1-n + window_width = orig_ds.get("WindowWidth", tag_absent) + # for MultiValue case: + if isinstance(window_width, pydicom.multival.MultiValue): + # join multiple values into a single string separated by a | + # convert DSfloat objects to strs to allow joining + window_width = " | ".join([str(window) for window in window_width]) + + # RevolutionTime - Type: Optional (3), VR: FD, VM: 1 + revolution_time = orig_ds.get("RevolutionTime", tag_absent) + + # FocalSpots - Type: Optional (3), VR: DS, VM: 1-n + focal_spots = orig_ds.get("FocalSpots", tag_absent) + # for MultiValue case: + if isinstance(focal_spots, pydicom.multival.MultiValue): + # join multiple values into a single string separated by a | + # convert DSfloat objects to strs to allow joining + focal_spots = " | ".join([str(spot) for spot in focal_spots]) + + # SpiralPitchFactor - Type: Optional (3), VR: FD, VM: 1 + spiral_pitch_factor = orig_ds.get("SpiralPitchFactor", tag_absent) + + # ConvolutionKernel - Type: Optional (3), VR: SH, VM: 1-n + convolution_kernel = orig_ds.get("ConvolutionKernel", tag_absent) + # for MultiValue case: + if isinstance(convolution_kernel, pydicom.multival.MultiValue): + # join multiple values into a single string separated by a | + convolution_kernel = " | ".join(convolution_kernel) + + # ReconstructionDiameter - Type: Optional (3), VR: DS, VM: 1 + reconstruction_diameter = orig_ds.get("ReconstructionDiameter", tag_absent) + + # KVP - Type: Required (2), VR: DS, VM: 1 + kvp = orig_ds.KVP + + # on CCHMC test cases, the following tags did NOT have consistent values for all SOP instances + # as such, if the tag value exists, it will be averaged over all SOP instances + + # initialize an averaged values dictionary + averaged_values: Dict[str, Union[float, str]] = {} + + # tags to check and average + tags_to_average = { + "XRayTubeCurrent": tag_absent, # Type: Optional (3), VR: IS, VM: 1 + "Exposure": tag_absent, # Type: Optional (3), VR: IS, VM: 1 + "CTDIvol": tag_absent, # Type: Optional (3), VR: FD, VM: 1 + } + + # check which tags are present on the 1st SOP instance + for tag, default_value in tags_to_average.items(): + # if the tag exists + if tag in orig_ds: + # loop through SOP instances, grab tag values + values = [] + for sop_instance in dicom_series.get_sop_instances(): + ds = sop_instance.get_native_sop_instance() + value = ds.get(tag, default_value) + # if tag is present on current SOP instance + if value != default_value: + # add tag value to values; convert to float for averaging + values.append(float(value)) + # compute the average if values were collected + if values: + averaged_values[tag] = round(sum(values) / len(values), 3) + else: + averaged_values[tag] = default_value + else: + # if the tag is absent in the first SOP instance, keep the default value + averaged_values[tag] = default_value + + # parse result_text (i.e. predicted organ volumes) and format + map_results = {} + for line in result_text.split("\n"): + if ":" in line: + key, value = line.split(":") + key = key.replace(" ", "") + map_results[key] = value.strip() + + # create the MongoDB database entry + mongodb_database_entry: Dict[str, Any] = { + "Timestamp": datetime.now(pytz.UTC), # timestamp in UTC + "MAPVersion": map_version, + "DICOMSeriesDetails": { + "AccessionNumber": accession_number, + "StudyInstanceUID": study_instance_uid, + "StudyDescription": study_description, + "SeriesInstanceUID": series_instance_uid, + "SeriesDescription": series_description, + "SeriesFileCount": series_sop_instances, + }, + "PatientDetails": { + "PatientID": patient_id, + "PatientName": patient_name, + "PatientSex": patient_sex, + "PatientBirthDate": patient_birth_date, + "PatientAge": patient_age, + "EthnicGroup": ethnic_group, + }, + "ScanAcquisitionDetails": { + "Manufacturer": manufacturer, + "ManufacturerModelName": manufacturer_model_name, + "BodyPartExamined": body_part_examined, + "RowPixelSpacing": row_pixel_spacing, + "ColumnPixelSpacing": column_pixel_spacing, + "DepthPixelSpacing": depth_pixel_spacing, + "SliceThickness": slice_thickness, + "PixelRepresentation": pixel_representation, + "BitsStored": bits_stored, + "WindowWidth": window_width, + "RevolutionTime": revolution_time, + "FocalSpots": focal_spots, + "SpiralPitchFactor": spiral_pitch_factor, + "ConvolutionKernel": convolution_kernel, + "ReconstructionDiameter": reconstruction_diameter, + "KVP": kvp, + }, + "MAPResults": map_results, + } + + # integrate averaged tags into MongoDB entry: + mongodb_database_entry["ScanAcquisitionDetails"].update(averaged_values) + + return mongodb_database_entry diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py new file mode 100644 index 00000000..6d18e395 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py @@ -0,0 +1,235 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os + +from dotenv import load_dotenv + +load_dotenv() + +from pymongo import MongoClient, errors + +from monai.deploy.core import Fragment, Operator, OperatorSpec + + +class MongoDBWriterOperator(Operator): + """Class to write the MONAI Deploy Express MongoDB database with provided database entry. + + Named inputs: + mongodb_database_entry: formatted MongoDB database entry. + + Named output: + None + + Result: + MONAI Deploy Express MongoDB database write of the database entry. + """ + + def __init__(self, fragment: Fragment, *args, database_name: str, collection_name: str, **kwargs): + """Class to write the MONAI Deploy Express MongoDB database with provided database entry. + + Args: + database_name (str): name of the MongoDB database that will be written. + collection_name (str): name of the MongoDB collection that will be written. + + Raises: + Relevant MongoDB errors if database writing is unsuccessful. + """ + + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + self.database_name = database_name + self.collection_name = collection_name + + self.input_name_db_entry = "mongodb_database_entry" + + # MongoDB credentials + self.mongodb_username = os.environ.get("MONGODB_USERNAME") + self.mongodb_password = os.environ.get("MONGODB_PASSWORD") + self.mongodb_port = os.environ.get("MONGODB_PORT") + self.docker_mongodb_ip = os.environ.get("MONGODB_IP_DOCKER") + + # determine the MongoDB IP address based on execution environment + self.mongo_ip = self._get_mongo_ip() + self._logger.info(f"Using MongoDB IP: {self.mongo_ip}") + + # connect to the MongoDB database + self.client = None + + try: + self.client = MongoClient( + f"mongodb://{self.mongodb_username}:{self.mongodb_password}@{self.mongo_ip}:{self.mongodb_port}/?authSource=admin", + serverSelectionTimeoutMS=10000, # 10s timeout for testing connection; 20s by default + ) + if self.client is None: + raise RuntimeError("MongoClient was not created successfully") + ping_response = self.client.admin.command("ping") + self._logger.info( + f"Successfully connected to MongoDB at: {self.client.address}. Ping response: {ping_response}" + ) + self.db = self.client[self.database_name] + self.collection = self.db[self.collection_name] + except errors.ServerSelectionTimeoutError as e: + self._logger.error("Failed to connect to MongoDB: Server selection timeout.") + self._logger.debug(f"Detailed error: {e}") + raise + except errors.ConnectionFailure as e: + self._logger.error("Failed to connect to MongoDB: Connection failure.") + self._logger.debug(f"Detailed error: {e}") + raise + except errors.OperationFailure as e: + self._logger.error("Failed to authenticate with MongoDB.") + self._logger.debug(f"Detailed error: {e}") + raise + except Exception as e: + self._logger.error("Unexpected error occurred while connecting to MongoDB.") + self._logger.debug(f"Detailed error: {e}") + raise + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + """Set up the named input(s), and output(s) if applicable. + + This operator does not have an output for the next operator - MongoDB write only. + + Args: + spec (OperatorSpec): The Operator specification for inputs and outputs etc. + """ + + spec.input(self.input_name_db_entry) + + def compute(self, op_input, op_output, context): + """Performs computation for this operator""" + + mongodb_database_entry = op_input.receive(self.input_name_db_entry) + + # write to MongoDB + self.write(mongodb_database_entry) + + def write(self, mongodb_database_entry): + """Writes the database entry to the MONAI Deploy Express MongoDB database. + + Args: + mongodb_database_entry: formatted MongoDB database entry. + + Returns: + None + """ + + # MongoDB writing + try: + insert_result = self.collection.insert_one(mongodb_database_entry) + if insert_result.acknowledged: + self._logger.info(f"Document inserted with ID: {insert_result.inserted_id}") + else: + self._logger.error("Failed to write document to MongoDB.") + except errors.PyMongoError as e: + self._logger.error("Failed to insert document into MongoDB.") + self._logger.debug(f"Detailed error: {e}") + raise + + def _get_mongo_ip(self): + """Determine the MongoDB IP based on the execution environment. + + If the pipeline is being run pythonically, use localhost. + + If MAP is being run via MAR or MONAI Deploy Express, use Docker bridge network IP. + """ + + # if running in a Docker container (/.dockerenv file present) + if os.path.exists("/.dockerenv"): + self._logger.info("Detected Docker environment") + return self.docker_mongodb_ip + + # if not executing as Docker container, we are executing pythonically + self._logger.info("Detected local environment (pythonic execution)") + return "localhost" + + +# Module function (helper function) +def test(): + """Test writing to and deleting from the MDE MongoDB instance locally""" + + # MongoDB credentials + mongodb_username = os.environ.get("MONGODB_USERNAME") + mongodb_password = os.environ.get("MONGODB_PASSWORD") + mongodb_port = os.environ.get("MONGODB_PORT") + + # sample information + database_name = "CTLiverSpleenSegPredictions" + collection_name = "OrganVolumes" + test_entry = {"test_key": "test_value"} + + # connect to MongoDB instance (localhost as we are testing locally) + try: + client = MongoClient( + f"mongodb://{mongodb_username}:{mongodb_password}@localhost:{mongodb_port}/?authSource=admin", + serverSelectionTimeoutMS=10000, # 10s timeout for testing connection; 20s by default + ) + if client is None: + raise RuntimeError("MongoClient was not created successfully") + ping_response = client.admin.command("ping") + print(f"Successfully connected to MongoDB at: {client.address}. Ping response: {ping_response}") + db = client[database_name] + collection = db[collection_name] + except errors.ServerSelectionTimeoutError as e: + print("Failed to connect to MongoDB: Server selection timeout.") + print(f"Detailed error: {e}") + raise + except errors.ConnectionFailure as e: + print("Failed to connect to MongoDB: Connection failure.") + print(f"Detailed error: {e}") + raise + except errors.OperationFailure as e: + print("Failed to authenticate with MongoDB.") + print(f"Detailed error: {e}") + raise + except Exception as e: + print("Unexpected error occurred while connecting to MongoDB.") + print(f"Detailed error: {e}") + raise + + # insert document + try: + insert_result = collection.insert_one(test_entry) + if insert_result.acknowledged: + print(f"Document inserted with ID: {insert_result.inserted_id}") + else: + print("Failed to write document to MongoDB.") + except errors.PyMongoError as e: + print("Failed to insert document into MongoDB.") + print(f"Detailed error: {e}") + raise + + # verify the inserted document + try: + inserted_doc = collection.find_one({"_id": insert_result.inserted_id}) + if inserted_doc: + print(f"Inserted document: {inserted_doc}") + else: + print("Document not found in the collection after insertion.") + except errors.PyMongoError as e: + print("Failed to retrieve the inserted document from MongoDB.") + print(f"Detailed error: {e}") + return + + # # delete a database + # try: + # client.drop_database(database_name) + # print(f"Test database '{database_name}' deleted successfully.") + # except errors.PyMongoError as e: + # print("Failed to delete the test database.") + # print(f"Detailed error: {e}") + + +if __name__ == "__main__": + test() diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py b/examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py new file mode 100644 index 00000000..607bcd47 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py @@ -0,0 +1,387 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json +import logging +import os +from typing import List + +import matplotlib.cm as cm +import numpy as np + +from monai.config import KeysCollection +from monai.data import MetaTensor +from monai.transforms import LabelToContour, MapTransform + + +# Calculate segmentation volumes in ml +class CalculateVolumeFromMaskd(MapTransform): + """ + Dictionary-based transform to calculate the volume of predicted organ masks. + + Args: + keys (list): The keys corresponding to the predicted organ masks in the dictionary. + label_names (list): The list of organ names corresponding to the masks. + """ + + def __init__(self, keys, label_names): + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys) + self.label_names = label_names + + def __call__(self, data): + # Initialize a dictionary to store the volumes of each organ + pred_volumes = {} + + for key in self.keys: + for label_name in self.label_names.keys(): + # self._logger.info('Key: ', key, ' organ_name: ', label_name) + if label_name != "background": + # Get the predicted mask from the dictionary + pred_mask = data[key] + # Calculate the voxel size in cubic millimeters (voxel size should be in the metadata) + # Assuming the metadata contains 'spatial_shape' with voxel dimensions in mm + if hasattr(pred_mask, "affine"): + voxel_size = np.abs(np.linalg.det(pred_mask.affine[:3, :3])) + else: + raise ValueError("Affine transformation matrix with voxel spacing information is required.") + + # Calculate the volume in cubic millimeters + label_volume_mm3 = np.sum(pred_mask == self.label_names[label_name]) * voxel_size + + # Convert to milliliters (1 ml = 1000 mm^3) + label_volume_ml = label_volume_mm3 / 1000.0 + + # Store the result in the pred_volumes dictionary + # convert to int - radiologists prefer whole number with no decimals + pred_volumes[label_name] = int(round(label_volume_ml, 0)) + + # Add the calculated volumes to the data dictionary + key_name = key + "_volumes" + + data[key_name] = pred_volumes + # self._logger.info('pred_volumes: ', pred_volumes) + return data + + +class LabelToContourd(MapTransform): + def __init__(self, keys: KeysCollection, output_labels: list, allow_missing_keys: bool = False): + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys, allow_missing_keys) + + self.output_labels = output_labels + + def __call__(self, data): + d = dict(data) + for key in self.keys: + label_image = d[key] + assert isinstance(label_image, MetaTensor), "Input image must be a MetaTensor." + + # Initialize the contour image with the same shape as the label image + contour_image = np.zeros_like(label_image.cpu().numpy()) + + if label_image.ndim == 4: # Check if the label image is 4D with a channel dimension + # Process each 2D slice independently along the last axis (z-axis) + for i in range(label_image.shape[-1]): + slice_image = label_image[:, :, :, i].cpu().numpy() + + # Extract unique labels excluding background (assumed to be 0) + unique_labels = np.unique(slice_image) + unique_labels = unique_labels[unique_labels != 0] + + slice_contour = np.zeros_like(slice_image) + + # Generate contours for each label in the slice + for label in unique_labels: + # skip contour generation for labels that are not in output_labels + if label not in self.output_labels: + continue + + # Create a binary mask for the current label + binary_mask = np.zeros_like(slice_image) + binary_mask[slice_image == label] = 1.0 + + # Apply LabelToContour to the 2D slice (replace this with actual contour logic) + thick_edges = LabelToContour()(binary_mask) + + # Assign the label value to the contour image at the edge positions + slice_contour[thick_edges > 0] = label + + # Stack the processed slice back into the 4D contour image + contour_image[:, :, :, i] = slice_contour + else: + # If the label image is not 4D, process it directly + slice_image = label_image.cpu().numpy() + unique_labels = np.unique(slice_image) + unique_labels = unique_labels[unique_labels != 0] + + for label in unique_labels: + binary_mask = np.zeros_like(slice_image) + binary_mask[slice_image == label] = 1.0 + + thick_edges = LabelToContour()(binary_mask) + contour_image[thick_edges > 0] = label + + # Convert the contour image back to a MetaTensor with the original metadata + contour_image_meta = MetaTensor(contour_image, meta=label_image.meta) # , affine=label_image.affine) + + # Store the contour MetaTensor in the output dictionary + d[key] = contour_image_meta + + return d + + +class OverlayImageLabeld(MapTransform): + def __init__( + self, + image_key: KeysCollection, + label_key: str, + overlay_key: str = "overlay", + alpha: float = 0.7, + allow_missing_keys: bool = False, + ): + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(image_key, allow_missing_keys) + + self.image_key = image_key + self.label_key = label_key + self.overlay_key = overlay_key + self.alpha = alpha + self.jet_colormap = cm.get_cmap("jet", 256) # Get the Jet colormap with 256 discrete colors + + def apply_jet_colormap(self, label_volume): + """ + Apply the Jet colormap to a 3D label volume using matplotlib's colormap. + """ + assert label_volume.ndim == 3, "Label volume should have 3 dimensions (H, W, D) after removing channel." + + label_volume_normalized = (label_volume / label_volume.max()) * 255.0 + label_volume_uint8 = label_volume_normalized.astype(np.uint8) + + # Apply the colormap to each label + label_rgb = self.jet_colormap(label_volume_uint8)[:, :, :, :3] # Only take the RGB channels + + label_rgb = (label_rgb * 255).astype(np.uint8) + # Rearrange axes to get (3, H, W, D) + label_rgb = np.transpose(label_rgb, (3, 0, 1, 2)) + + assert label_rgb.shape == ( + 3, + *label_volume.shape, + ), f"Label RGB shape should be (3,H, W, D) but got {label_rgb.shape}" + + return label_rgb + + def convert_to_rgb(self, image_volume): + """ + Convert a single-channel grayscale 3D image to an RGB 3D image. + """ + assert image_volume.ndim == 3, "Image volume should have 3 dimensions (H, W, D) after removing channel." + + image_volume_normalized = (image_volume - image_volume.min()) / (image_volume.max() - image_volume.min()) + image_rgb = np.stack([image_volume_normalized] * 3, axis=0) + image_rgb = (image_rgb * 255).astype(np.uint8) + + assert image_rgb.shape == ( + 3, + *image_volume.shape, + ), f"Image RGB shape should be (3,H, W, D) but got {image_rgb.shape}" + + return image_rgb + + def _create_overlay(self, image_volume, label_volume): + # Convert the image volume and label volume to RGB + image_rgb = self.convert_to_rgb(image_volume) + label_rgb = self.apply_jet_colormap(label_volume) + + # Create an alpha-blended overlay + overlay = image_rgb.copy() + mask = label_volume > 0 + + # Apply the overlay where the mask is present + for i in range(3): # For each color channel + overlay[i, mask] = (self.alpha * label_rgb[i, mask] + (1 - self.alpha) * overlay[i, mask]).astype(np.uint8) + + assert ( + overlay.shape == image_rgb.shape + ), f"Overlay shape should match image RGB shape: {overlay.shape} vs {image_rgb.shape}" + + return overlay + + def __call__(self, data): + d = dict(data) + + # Get the image and label tensors + image = d[self.image_key] # Expecting shape (1, H, W, D) + label = d[self.label_key] # Expecting shape (1, H, W, D) + + # uncomment when running pipeline with mask (non-contour) outputs, i.e. LabelToContourd transform absent + # if image.device.type == "cuda": + # image = image.cpu() + # d[self.image_key] = image + # if label.device.type == "cuda": + # label = label.cpu() + # d[self.label_key] = label + # # ----------------------- + + # Ensure that the input has the correct dimensions + assert image.shape[0] == 1 and label.shape[0] == 1, "Image and label must have a channel dimension of 1." + assert image.shape == label.shape, f"Image and label must have the same shape: {image.shape} vs {label.shape}" + + # Remove the channel dimension for processing + image_volume = image[0] # Shape: (H, W, D) + label_volume = label[0] # Shape: (H, W, D) + + # Convert to 3D overlay + overlay = self._create_overlay(image_volume, label_volume) + + # Add the channel dimension back + # d[self.overlay_key] = np.expand_dims(overlay, axis=0) # Shape: (1, H, W, D, 3) + d[self.overlay_key] = MetaTensor(overlay, meta=label.meta, affine=label.affine) # Shape: (3, H, W, D) + + # Assert the final output shape + # assert d[self.overlay_key].shape == (1, *image_volume.shape, 3), \ + # f"Final overlay shape should be (1, H, W, D, 3) but got {d[self.overlay_key].shape}" + + assert d[self.overlay_key].shape == ( + 3, + *image_volume.shape, + ), f"Final overlay shape should be (3, H, W, D) but got {d[self.overlay_key].shape}" + + # Log the overlay creation (debugging) + self._logger.info(f"Overlay created with shape: {overlay.shape}") + # self._logger.info(f"Dictionary keys: {d.keys()}") + + # self._logger.info('overlay_image shape: ', d[self.overlay_key].shape) + return d + + +class SaveData(MapTransform): + """ + Save the output dictionary into JSON files. + + The name of the saved file will be `{key}_{output_postfix}.json`. + + Args: + keys: keys of the corresponding items to be saved in the dictionary. + output_dir: directory to save the output files. + output_postfix: a string appended to all output file names, default is `data`. + separate_folder: whether to save each file in a separate folder. Default is `True`. + print_log: whether to print logs when saving. Default is `True`. + """ + + def __init__( + self, + keys: KeysCollection, + namekey: str = "image", + output_dir: str = "./", + output_postfix: str = "data", + separate_folder: bool = False, + print_log: bool = True, + allow_missing_keys: bool = False, + ): + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys, allow_missing_keys) + self.output_dir = output_dir + self.output_postfix = output_postfix + self.separate_folder = separate_folder + self.print_log = print_log + self.namekey = namekey + + def __call__(self, data): + d = dict(data) + image_name = os.path.basename(d[self.namekey].meta["filename_or_obj"]).split(".")[0] + for key in self.keys: + # Get the data + output_data = d[key] + + # Determine the file name + file_name = f"{image_name}_{self.output_postfix}.json" + if self.separate_folder: + file_path = os.path.join(self.output_dir, image_name, file_name) + os.makedirs(os.path.dirname(file_path), exist_ok=True) + else: + file_path = os.path.join(self.output_dir, file_name) + + # Save the dictionary as a JSON file + with open(file_path, "w") as f: + json.dump(output_data, f) + + if self.print_log: + self._logger.info(f"Saved data to {file_path}") + + return d + + +# custom transform (not in original post_transforms.py in bundle): +class ExtractVolumeToTextd(MapTransform): + """ + Custom transform to extract volume information from the segmentation results and format it as a textual summary. + Filters organ volumes based on output_labels for DICOM SR write, while including all organs for MongoDB write. + The upstream CalculateVolumeFromMaskd transform calculates organ volumes and stores them in the dictionary + under the pred_key + '_volumes' key. The input dictionary is outputted unchanged as to not affect downstream operators. + + Args: + keys: keys of the corresponding items to be saved in the dictionary. + label_names: dictionary mapping organ names to their corresponding label indices. + output_labels: list of target label indices for organs to include in the DICOM SR output. + """ + + def __init__( + self, + keys: KeysCollection, + label_names: dict, + output_labels: List[int], + allow_missing_keys: bool = False, + ): + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys, allow_missing_keys) + + self.label_names = label_names + self.output_labels = output_labels + + # create separate result_texts for DICOM SR write (target organs) and MongoDB write (all organs) + self.result_text_dicom_sr: str = "" + self.result_text_mongodb: str = "" + + def __call__(self, data): + d = dict(data) + # use the first key in `keys` to access the volume data (e.g., pred_key + '_volumes') + volumes_key = self.keys[0] + organ_volumes = d.get(volumes_key, None) + + if organ_volumes is None: + raise ValueError(f"Volume data not found for key {volumes_key}.") + + # create the volume text outputs + volume_text_dicom_sr = [] + volume_text_mongodb = [] + + # loop through calculated organ volumes + for organ, volume in organ_volumes.items(): + + # append all organ volumes for MongoDB entry + volume_entry = f"{organ.capitalize()} Volume: {volume} mL" + volume_text_mongodb.append(volume_entry) + + # if the organ's label index is in output_labels + label_index = self.label_names.get(organ, None) + if label_index in self.output_labels: + # append organ volume for DICOM SR entry + volume_text_dicom_sr.append(volume_entry) + + self.result_text_dicom_sr = "\n".join(volume_text_dicom_sr) + self.result_text_mongodb = "\n".join(volume_text_mongodb) + + # not adding result_text to dictionary; return dictionary unchanged as to not affect downstream operators + return d diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt b/examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt new file mode 100644 index 00000000..309428d7 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt @@ -0,0 +1,27 @@ +monai>=1.3.0 +torch>=1.12.0 +pytorch-ignite>=0.4.9 +fire>=0.4.0 +numpy>=1.22.2 +nibabel>=4.0.1 +# pydicom v3.0.0 removed pydicom._storage_sopclass_uids; don't meet or exceed this version +pydicom>=2.3.0,<3.0.0 +highdicom>=0.18.2 +itk>=5.3.0 +SimpleITK>=2.0.0 +scikit-image>=0.17.2 +Pillow>=8.0.0 +numpy-stl>=2.12.0 +trimesh>=3.8.11 +matplotlib>=3.7.2 +setuptools>=59.5.0 # for pkg_resources +python-dotenv>=1.0.1 + +# pymongo for MongoDB writing +pymongo>=4.10.1 + +# pytz for MongoDB Timestamp +pytz>=2024.1 + +# MONAI Deploy App SDK package installation +monai-deploy-app-sdk diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh new file mode 100755 index 00000000..d4302ad6 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh @@ -0,0 +1,29 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# build a MAP + +# check if the correct number of arguments are provided +if [ "$#" -ne 3 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 +sdk_version=$3 + +# load in environment variables +source .env + +# build MAP +monai-deploy package cchmc_ped_abd_ct_seg_app -m $HOLOSCAN_MODEL_PATH -c cchmc_ped_abd_ct_seg_app/app.yaml -t ${tag_prefix}:${image_version} --platform x64-workstation --sdk-version ${sdk_version} -l DEBUG diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh new file mode 100755 index 00000000..a87287cb --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh @@ -0,0 +1,31 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# display and extract MAP contents + +# check if the correct number of arguments are provided +if [ "$#" -ne 2 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 + +# display basic MAP manifests +docker run --rm ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} show + +# remove and subsequently create export folder +rm -rf `pwd`/export && mkdir -p `pwd`/export + +# extract MAP contents +docker run --rm -v `pwd`/export/:/var/run/holoscan/export/ ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} extract diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh new file mode 100755 index 00000000..f4d5251a --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh @@ -0,0 +1,31 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# execute MAP locally with MAR + +# check if the correct number of arguments are provided +if [ "$#" -ne 2 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 + +# load in environment variables +source .env + +# remove the output directory +rm -rf "$HOLOSCAN_OUTPUT_PATH" + +# execute MAP locally via MAR +monai-deploy run -i $HOLOSCAN_INPUT_PATH -o $HOLOSCAN_OUTPUT_PATH ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh new file mode 100755 index 00000000..422ae16e --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh @@ -0,0 +1,37 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# run an interactive MAP container + +# check if the correct number of arguments are provided +if [ "$#" -ne 2 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 + +# load in environment variables +source .env + +# remove the output directory +rm -rf "$HOLOSCAN_OUTPUT_PATH" + +# execute MAP locally via MAR and start interactive container +monai-deploy run -i $HOLOSCAN_INPUT_PATH -o $HOLOSCAN_OUTPUT_PATH ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} --terminal + +# # start interactive MAP container without MAR +# docker run -it --entrypoint /bin/bash ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} + +# # see dependencies installed in MAP +# pip freeze diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh new file mode 100755 index 00000000..6decca04 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh @@ -0,0 +1,21 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# execute model bundle locally (pythonically) + +# load in environment variables +source .env + +# remove the output directory +rm -rf "$HOLOSCAN_OUTPUT_PATH" + +# execute model bundle locally (pythonically) +python cchmc_ped_abd_ct_seg_app -i "$HOLOSCAN_INPUT_PATH" -o "$HOLOSCAN_OUTPUT_PATH" -m "$HOLOSCAN_MODEL_PATH" diff --git a/requirements-examples.txt b/requirements-examples.txt index 14756af7..56301f72 100644 --- a/requirements-examples.txt +++ b/requirements-examples.txt @@ -1,6 +1,7 @@ scikit-image>=0.17.2 pydicom>=2.3.0 PyPDF2>=2.11.1 +types-pytz>=2024.1.0.20240203 highdicom>=0.18.2 SimpleITK>=2.0.0 Pillow>=8.4.0 From 613e59a826cc06c0e78efec1fc26f4df3a571567 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Thu, 10 Apr 2025 09:18:07 +0000 Subject: [PATCH 029/118] Fix meta_data handling in MonaiBundleInferenceOperator to ensure it defaults to an empty dict Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/monai_bundle_inference_operator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index 94c118e3..a27f9770 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -577,6 +577,7 @@ def compute(self, op_input, op_output, context): # value: NdarrayOrTensor # MyPy complaints value, meta_data = self._receive_input(name, op_input, context) value = convert_to_dst_type(value, dst=value)[0] + meta_data = meta_data or {} if not isinstance(meta_data, dict): raise ValueError("`meta_data` must be a dict.") value = MetaTensor.ensure_torch_and_prune_meta(value, meta_data) From 48acf15ccc458ba574913b4e4ee86dee90bd9d96 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Wed, 16 Apr 2025 06:41:36 +0000 Subject: [PATCH 030/118] Update requirements and fix data shape handling in Monai nUNet Bundle Inference Operator Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/requirements.txt | 5 +++-- .../operators/monai_nnunet_bundle_inference_operator.py | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt index ebce84bd..fede9fba 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt +++ b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt @@ -7,5 +7,6 @@ numpy-stl>=2.12.0 trimesh>=3.8.11 nibabel>=3.2.1 torch>=1.12.0 -monai>=1.0.0 -nnunetv2>=2.5.1 +git+https://github.com/SimoneBendazzoli93/dynamic-network-architectures.git +git+https://github.com/SimoneBendazzoli93/MONAI.git@dev +git+https://github.com/SimoneBendazzoli93/nnUNet.git diff --git a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py index 3bedb448..954e12e6 100644 --- a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py @@ -75,7 +75,6 @@ def _init_config(self, config_names): super()._init_config(config_names) parser = get_bundle_config(str(self._bundle_path), config_names) - parser['bundle_root'] = str(Path(self._bundle_path).parent.parent.parent) self._parser = parser self._nnunet_predictor = parser.get_parsed_content("network_def") @@ -85,4 +84,6 @@ def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, .. self._nnunet_predictor.predictor.network = self._model_network #os.environ['nnUNet_def_n_proc'] = "1" - return self._nnunet_predictor(torch.unsqueeze(data, 0)) + if len(data.shape) == 4: + data = data[None] + return self._nnunet_predictor(data) From 6a0fcb888046131790178c5774709a98bc8acf14 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Wed, 16 Apr 2025 15:23:08 +0000 Subject: [PATCH 031/118] Add NiftiDataWriter operator and update NiftiDataLoader to return SimpleITK image Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/__init__.py | 1 + .../monai_bundle_inference_operator.py | 12 +++ .../operators/nii_data_loader_operator.py | 3 +- .../operators/nii_data_writer_operator.py | 100 ++++++++++++++++++ 4 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 monai/deploy/operators/nii_data_writer_operator.py diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index c875eea8..4599048d 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -54,3 +54,4 @@ from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter +from .nii_data_writer_operator import NiftiDataWriter diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index a27f9770..c15b0b66 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -23,6 +23,8 @@ import numpy as np +import SimpleITK +from SimpleITK import Image as SimpleITKImage from monai.deploy.core import AppContext, Fragment, Image, IOType, OperatorSpec from monai.deploy.utils.importutil import optional_import @@ -703,6 +705,16 @@ def _receive_input(self, name: str, op_input, context): logging.debug(f"Metadata of the converted input image: {metadata}") elif isinstance(value, np.ndarray): value = torch.from_numpy(value).to(self._device) + elif isinstance(value, SimpleITKImage): + metadata = {} + metadata["pixdim"] = np.asarray(value.GetSpacing()) + metadata["origin"] = np.asarray(value.GetOrigin()) + metadata["direction"] = np.asarray(value.GetDirection()) + if len(value.GetSize()) == 3: + metadata["pixdim"] = np.insert(np.asarray(value.GetSpacing()), 0, 1.0) + value = np.transpose(SimpleITK.GetArrayFromImage(value), [2, 1, 0]) + else: + value = np.transpose(SimpleITK.GetArrayFromImage(value), [0, 3, 2, 1]) # else value is some other object from memory diff --git a/monai/deploy/operators/nii_data_loader_operator.py b/monai/deploy/operators/nii_data_loader_operator.py index 67b0e070..e886df24 100644 --- a/monai/deploy/operators/nii_data_loader_operator.py +++ b/monai/deploy/operators/nii_data_loader_operator.py @@ -80,8 +80,7 @@ def convert_and_save(self, nii_path): image_reader = SimpleITK.ImageFileReader() image_reader.SetFileName(str(nii_path)) image = image_reader.Execute() - image_np = np.transpose(SimpleITK.GetArrayFromImage(image), [2, 1, 0]) - return image_np + return image def test(): diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py new file mode 100644 index 00000000..003395ce --- /dev/null +++ b/monai/deploy/operators/nii_data_writer_operator.py @@ -0,0 +1,100 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import logging +from pathlib import Path + +import numpy as np + +from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec +from monai.deploy.utils.importutil import optional_import + +SimpleITK, _ = optional_import("SimpleITK") + + +# @md.env(pip_packages=["SimpleITK>=2.0.2"]) +class NiftiDataWriter(Operator): + + def __init__(self, fragment: Fragment, *args, output_file: Path, **kwargs) -> None: + """Creates an instance with the file path to load image from. + + Args: + fragment (Fragment): An instance of the Application class which is derived from Fragment. + input_path (Path): The file Path to read from, overridden by valid named input on compute. + """ + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + self.output_file = output_file + self.input_name_seg = "seg_image" + self.input_name_output_file = "output_file" + + # Need to call the base class constructor last + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + spec.input(self.input_name_seg) + spec.input(self.input_name_output_file).condition(ConditionType.NONE) # Optional input not requiring sender. + + def compute(self, op_input, op_output, context): + """Performs computation with the provided context.""" + + + seg_image = op_input.receive(self.input_name_seg) + + + # If the optional named input, output_folder, has content, use it instead of the one set on the object. + # Since this input is optional, must check if data present and if Path or str. + output_file = None + try: + output_file = op_input.receive(self.input_name_output_file) + except Exception: + pass + + if not output_file or not isinstance(output_file, (Path, str)): + output_file = self.output_file + + self.convert_and_save(seg_image, output_file) + + def convert_and_save(self, seg_image, nii_path): + """ + reads the nifti image and returns a numpy image array + """ + image_writer = SimpleITK.ImageFileWriter() + + image = SimpleITK.GetImageFromArray(seg_image._data) + image.SetSpacing(seg_image.metadata()["pixdim"]) + + if len(seg_image.metadata()["direction"]) == 16: + direction = [] + direction.extend(seg_image.metadata()["direction"][0:3]) + direction.extend(seg_image.metadata()["direction"][4:7]) + direction.extend(seg_image.metadata()["direction"][8:11]) + image.SetDirection(direction) + else: + image.SetDirection(seg_image.metadata()["direction"]) + + image.SetOrigin(seg_image.metadata()["origin"]) + + image_writer.SetFileName(nii_path) + image_writer.Execute(image) + + +def test(): + ... + + +def main(): + test() + + +if __name__ == "__main__": + main() From 3121629204effa4aaad003263b2ae7c918045a9b Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 22 Apr 2025 09:52:09 +0000 Subject: [PATCH 032/118] Add nvflare to requirements for ai_spleen_nnunet_seg_app Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt index fede9fba..1d80987c 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt +++ b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt @@ -7,6 +7,7 @@ numpy-stl>=2.12.0 trimesh>=3.8.11 nibabel>=3.2.1 torch>=1.12.0 +nvflare git+https://github.com/SimoneBendazzoli93/dynamic-network-architectures.git git+https://github.com/SimoneBendazzoli93/MONAI.git@dev git+https://github.com/SimoneBendazzoli93/nnUNet.git From c5cc1bf1752de20217aec5884f2f95d32d42c0e5 Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:00:58 -0400 Subject: [PATCH 033/118] duplicate ipps non-loaded (#535) Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- .../operators/dicom_data_loader_operator.py | 123 +++++++++++++----- 1 file changed, 93 insertions(+), 30 deletions(-) diff --git a/monai/deploy/operators/dicom_data_loader_operator.py b/monai/deploy/operators/dicom_data_loader_operator.py index c31e1ef2..bc590cb6 100644 --- a/monai/deploy/operators/dicom_data_loader_operator.py +++ b/monai/deploy/operators/dicom_data_loader_operator.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -12,7 +12,9 @@ import logging import os from pathlib import Path -from typing import List +from typing import Dict, List, Optional, Tuple, cast + +from pydicom.dataset import Dataset from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec from monai.deploy.core.domain.dicom_series import DICOMSeries @@ -163,6 +165,7 @@ def _load_data(self, files: List[str]): study_dict = {} series_dict = {} sop_instances = [] + sop_map: Dict[Tuple[str, str], Dict[Optional[Tuple[float, float, float]], List[Dataset]]] = {} for file in files: try: @@ -171,34 +174,94 @@ def _load_data(self, files: List[str]): self._logger.warn(f"Ignored {file}, reason being: {ex}") for sop_instance in sop_instances: - study_instance_uid = sop_instance[0x0020, 0x000D].value.name # name is the UID as str - - # First need to eliminate the SOP instances whose SOP Class is to be ignored. - if "SOPInstanceUID" not in sop_instance: - self._logger.warn("Instance ignored due to missing SOP instance UID tag") - continue - sop_instance_uid = sop_instance["SOPInstanceUID"].value - if "SOPClassUID" not in sop_instance: - self._logger.warn(f"Instance ignored due to missing SOP Class UID tag, {sop_instance_uid}") - continue - if sop_instance["SOPClassUID"].value in DICOMDataLoaderOperator.SOP_CLASSES_TO_IGNORE: - self._logger.warn(f"Instance ignored for being in the ignored class, {sop_instance_uid}") - continue - - if study_instance_uid not in study_dict: - study = DICOMStudy(study_instance_uid) - self.populate_study_attributes(study, sop_instance) - study_dict[study_instance_uid] = study - - series_instance_uid = sop_instance[0x0020, 0x000E].value.name # name is the UID as str - - if series_instance_uid not in series_dict: - series = DICOMSeries(series_instance_uid) - series_dict[series_instance_uid] = series - self.populate_series_attributes(series, sop_instance) - study_dict[study_instance_uid].add_series(series) - - series_dict[series_instance_uid].add_sop_instance(sop_instance) + try: + study_instance_uid = sop_instance[0x0020, 0x000D].value.name # name is the UID as str + + # First need to eliminate the SOP instances whose SOP Class is to be ignored. + if "SOPInstanceUID" not in sop_instance: + self._logger.warn("Instance ignored due to missing SOP instance UID tag") + continue + sop_instance_uid = sop_instance["SOPInstanceUID"].value + if "SOPClassUID" not in sop_instance: + self._logger.warn(f"Instance ignored due to missing SOP Class UID tag, {sop_instance_uid}") + continue + if sop_instance["SOPClassUID"].value in DICOMDataLoaderOperator.SOP_CLASSES_TO_IGNORE: + self._logger.warn(f"Instance ignored for being in the ignored class, {sop_instance_uid}") + continue + + if study_instance_uid not in study_dict: + study = DICOMStudy(study_instance_uid) + self.populate_study_attributes(study, sop_instance) + study_dict[study_instance_uid] = study + + series_instance_uid = sop_instance[0x0020, 0x000E].value.name # name is the UID as str + + if series_instance_uid not in series_dict: + series = DICOMSeries(series_instance_uid) + series_dict[series_instance_uid] = series + self.populate_series_attributes(series, sop_instance) + study_dict[study_instance_uid].add_series(series) + + # Prepare sop_map entry + series_key = (study_instance_uid, series_instance_uid) + sop_map.setdefault(series_key, {}) + ipp = sop_instance.get("ImagePositionPatient", None) + if ipp is not None: + # Convert IPP to tuple + ipp_tuple = cast(Tuple[float, float, float], tuple(float(v) for v in ipp)) + else: + # Non-image files will be missing IPP; store SOP instance under "None" key, move on to next SOP instance + sop_map[series_key].setdefault(ipp, []).append(sop_instance) + continue + + sop_list = sop_map[series_key].setdefault(ipp_tuple, []) + + if not sop_list: + # First occurrence of this spatial position β€” store the SOP instance + sop_list.append(sop_instance) + else: + # Duplicate spatial location found β€” compare AcquisitionNumbers (if absent, set to -1) + exist = sop_list[0] + exist_acq_num = int(exist.get("AcquisitionNumber", -1)) + curr_acq_num = int(sop_instance.get("AcquisitionNumber", -1)) + if curr_acq_num > exist_acq_num: + # Current SOP instance AcquisitionNumber is greater - replace existing SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; removed SOP instance with lower AcquisitionNumber " + f"({curr_acq_num} < {exist_acq_num})" + ) + sop_list[0] = sop_instance + elif curr_acq_num < exist_acq_num: + # Existing SOP instance AcquisitionNumber is greater - don't store current SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; kept SOP instance with higher AcquisitionNumber " + f"({exist_acq_num} > {curr_acq_num})" + ) + elif curr_acq_num == -1: + # AcquisitionNumber tag is absent for compared SOP instances - don't store current SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; AcquisitionNumber tags are absent" + ) + else: + # AcquisitionNumber tag values are equal for compared SOP instances - don't store current SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; AcquisitionNumber tag values are equal " + f"({exist_acq_num} = {curr_acq_num})" + ) + + except Exception as ex: + self._logger.warn(f"Error parsing SOP Instance: {ex}") + + # Add unique SOPs to series_dict following potential duplication removal + for (_, series_uid), ipp_dict in sop_map.items(): + for _, sop_list in ipp_dict.items(): + for sop_instance in sop_list: + series_dict[series_uid].add_sop_instance(sop_instance) + return list(study_dict.values()) def populate_study_attributes(self, study, sop_instance): From 0008024d31dcfcf04d837889bc5170dbda520b99 Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Mon, 21 Apr 2025 15:05:10 -0400 Subject: [PATCH 034/118] ModelInfo arg added to DICOMSegWriterOp (#533) Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- .../operators/dicom_seg_writer_operator.py | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/dicom_seg_writer_operator.py b/monai/deploy/operators/dicom_seg_writer_operator.py index 1a39e644..e96490c1 100644 --- a/monai/deploy/operators/dicom_seg_writer_operator.py +++ b/monai/deploy/operators/dicom_seg_writer_operator.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -27,6 +27,7 @@ ImplicitVRLittleEndian, _ = optional_import("pydicom.uid", name="ImplicitVRLittleEndian") Dataset, _ = optional_import("pydicom.dataset", name="Dataset") FileDataset, _ = optional_import("pydicom.dataset", name="FileDataset") +PyDicomSequence, _ = optional_import("pydicom.sequence", name="Sequence") sitk, _ = optional_import("SimpleITK") codes, _ = optional_import("pydicom.sr.codedict", name="codes") if TYPE_CHECKING: @@ -39,6 +40,7 @@ from monai.deploy.core import ConditionType, Fragment, Image, Operator, OperatorSpec from monai.deploy.core.domain.dicom_series import DICOMSeries from monai.deploy.core.domain.dicom_series_selection import StudySelectedSeries +from monai.deploy.operators.dicom_utils import ModelInfo class SegmentDescription: @@ -183,6 +185,7 @@ def __init__( *args, segment_descriptions: List[SegmentDescription], output_folder: Path, + model_info: Optional[ModelInfo] = None, custom_tags: Optional[Dict[str, str]] = None, omit_empty_frames: bool = True, **kwargs, @@ -206,6 +209,7 @@ def __init__( Object encapsulating the description of each segment present in the segmentation. output_folder: Folder for file output, overridden by named input on compute. Defaults to current working dir's child folder, output. + model_info (ModelInfo, optional): Object encapsulating model creator, name, version and UID. custom_tags: Optional[Dict[str, str]], optional Dictionary for setting custom DICOM tags using Keywords and str values only omit_empty_frames: bool, optional @@ -217,6 +221,7 @@ def __init__( self._custom_tags = custom_tags self._omit_empty_frames = omit_empty_frames self.output_folder = output_folder if output_folder else DICOMSegmentationWriterOperator.DEFAULT_OUTPUT_FOLDER + self.model_info = model_info if model_info else ModelInfo() self.input_name_seg = "seg_image" self.input_name_series = "study_selected_series_list" @@ -356,6 +361,41 @@ def create_dicom_seg(self, image: np.ndarray, dicom_series: DICOMSeries, output_ # Best effort for now. logging.warning(f"Tag {k} was not written, due to {ex}") + # write model info + # code copied from write_common_modules method in monai.deploy.operators.dicom_utils + + # Contributing Equipment Sequence + # The Creator shall describe each algorithm that was used to generate the results in the + # Contributing Equipment Sequence (0018,A001). Multiple items may be included. The Creator + # shall encode the following details in the Contributing Equipment Sequence: + # β€’ Purpose of Reference Code Sequence (0040,A170) shall be (Newcode1, 99IHE, 1630 "Processing Algorithm") + # β€’ Manufacturer (0008,0070) + # β€’ Manufacturer’s Model Name (0008,1090) + # β€’ Software Versions (0018,1020) + # β€’ Device UID (0018,1002) + + if self.model_info: + # First create the Purpose of Reference Code Sequence + seq_purpose_of_reference_code = PyDicomSequence() + seg_purpose_of_reference_code = Dataset() + seg_purpose_of_reference_code.CodeValue = "Newcode1" + seg_purpose_of_reference_code.CodingSchemeDesignator = "99IHE" + seg_purpose_of_reference_code.CodeMeaning = '"Processing Algorithm' + seq_purpose_of_reference_code.append(seg_purpose_of_reference_code) + + seq_contributing_equipment = PyDicomSequence() + seg_contributing_equipment = Dataset() + seg_contributing_equipment.PurposeOfReferenceCodeSequence = seq_purpose_of_reference_code + # '(121014, DCM, β€œDevice Observer Manufacturer")' + seg_contributing_equipment.Manufacturer = self.model_info.creator + # u'(121015, DCM, β€œDevice Observer Model Name")' + seg_contributing_equipment.ManufacturerModelName = self.model_info.name + # u'(111003, DCM, β€œAlgorithm Version")' + seg_contributing_equipment.SoftwareVersions = self.model_info.version + seg_contributing_equipment.DeviceUID = self.model_info.uid # u'(121012, DCM, β€œDevice Observer UID")' + seq_contributing_equipment.append(seg_contributing_equipment) + seg.ContributingEquipmentSequence = seq_contributing_equipment + seg.save_as(output_path) try: From c61ffb4cf74622a5d1dc99a23b8abcbeb6a6de42 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Mon, 21 Apr 2025 16:46:46 -0700 Subject: [PATCH 035/118] Support remote inference on Triton Inference Server with ease of use (#536) * Adding requirements for Triton client impl Signed-off-by: M Q * Updated/added core classes to support Triton remote inference, and added a new example Signed-off-by: M Q * GitHub build server complains about conflicts for tritonclient[]>=2.54 for no specific reasons Signed-off-by: M Q * Fix flake8 complaints Signed-off-by: M Q * Fix pytype complaints by simplifying code Signed-off-by: M Q * Remove now unused imports Signed-off-by: M Q * Addressed all pytype and mypy complaint in new code in the dev env Signed-off-by: M Q * No complaint in local dev env, but on GitHub Signed-off-by: M Q * Add model confgi.pbtxt and example env settings Signed-off-by: M Q * Doc update Signed-off-by: M Q * update license dates Signed-off-by: M Q * Updated the copyright year of new files Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/source/getting_started/examples.md | 1 + examples/apps/ai_remote_infer_app/__main__.py | 15 + examples/apps/ai_remote_infer_app/app.py | 143 +++++++++ .../env_settings_example.sh | 17 ++ .../models_client_side/spleen_ct/config.pbtxt | 44 +++ .../spleen_seg_operator.py | 165 +++++++++++ monai/deploy/core/app_context.py | 22 +- monai/deploy/core/arg_parser.py | 10 +- monai/deploy/core/models/__init__.py | 4 +- monai/deploy/core/models/model.py | 4 +- monai/deploy/core/models/named_model.py | 22 +- monai/deploy/core/models/triton_model.py | 273 ++++++++++++++---- monai/deploy/core/runtime_env.py | 14 +- requirements.txt | 1 + 14 files changed, 666 insertions(+), 69 deletions(-) create mode 100644 examples/apps/ai_remote_infer_app/__main__.py create mode 100644 examples/apps/ai_remote_infer_app/app.py create mode 100755 examples/apps/ai_remote_infer_app/env_settings_example.sh create mode 100644 examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt create mode 100644 examples/apps/ai_remote_infer_app/spleen_seg_operator.py diff --git a/docs/source/getting_started/examples.md b/docs/source/getting_started/examples.md index 521a4e52..55134a6c 100644 --- a/docs/source/getting_started/examples.md +++ b/docs/source/getting_started/examples.md @@ -14,3 +14,4 @@ - dicom_series_to_image_app - breast_density_classifer_app - cchmc_ped_abd_ct_seg_app +- ai_remote_infer_app diff --git a/examples/apps/ai_remote_infer_app/__main__.py b/examples/apps/ai_remote_infer_app/__main__.py new file mode 100644 index 00000000..b7039967 --- /dev/null +++ b/examples/apps/ai_remote_infer_app/__main__.py @@ -0,0 +1,15 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from app import AIRemoteInferSpleenSegApp + +if __name__ == "__main__": + AIRemoteInferSpleenSegApp().run() diff --git a/examples/apps/ai_remote_infer_app/app.py b/examples/apps/ai_remote_infer_app/app.py new file mode 100644 index 00000000..facd1dc2 --- /dev/null +++ b/examples/apps/ai_remote_infer_app/app.py @@ -0,0 +1,143 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import logging +from pathlib import Path + +from pydicom.sr.codedict import codes # Required for setting SegmentDescription attributes. +from spleen_seg_operator import SpleenSegOperator + +from monai.deploy.conditions import CountCondition +from monai.deploy.core import Application +from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator +from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription +from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator +from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator +from monai.deploy.operators.stl_conversion_operator import STLConversionOperator + + +class AIRemoteInferSpleenSegApp(Application): + def __init__(self, *args, **kwargs): + """Creates an application instance.""" + + super().__init__(*args, **kwargs) + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + def run(self, *args, **kwargs): + # This method calls the base class to run. Can be omitted if simply calling through. + self._logger.info(f"Begin {self.run.__name__}") + super().run(*args, **kwargs) + self._logger.info(f"End {self.run.__name__}") + + def compose(self): + """Creates the app specific operators and chain them up in the processing DAG.""" + + # Use Commandline options over environment variables to init context. + app_context = Application.init_app_context(self.argv) + self._logger.debug(f"Begin {self.compose.__name__}") + app_input_path = Path(app_context.input_path) + app_output_path = Path(app_context.output_path) + model_path = Path(app_context.model_path) + + self._logger.info(f"App input and output path: {app_input_path}, {app_output_path}") + + # instantiates the SDK built-in operator(s). + study_loader_op = DICOMDataLoaderOperator( + self, CountCondition(self, 1), input_folder=app_input_path, name="dcm_loader_op" + ) + series_selector_op = DICOMSeriesSelectorOperator(self, rules=Sample_Rules_Text, name="series_selector_op") + series_to_vol_op = DICOMSeriesToVolumeOperator(self, name="series_to_vol_op") + + # Model specific inference operator, supporting MONAI transforms. + spleen_seg_op = SpleenSegOperator( + self, app_context=app_context, model_name="spleen_ct", model_path=model_path, name="seg_op" + ) + + # Create DICOM Seg writer providing the required segment description for each segment with + # the actual algorithm and the pertinent organ/tissue. + # The segment_label, algorithm_name, and algorithm_version are limited to 64 chars. + # https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html + # User can Look up SNOMED CT codes at, e.g. + # https://bioportal.bioontology.org/ontologies/SNOMEDCT + + _algorithm_name = "3D segmentation of the Spleen from a CT series" + _algorithm_family = codes.DCM.ArtificialIntelligence + _algorithm_version = "0.1.0" + + segment_descriptions = [ + SegmentDescription( + segment_label="Spleen", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Spleen, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + ] + + custom_tags = {"SeriesDescription": "AI generated Seg, not for clinical use."} + + dicom_seg_writer = DICOMSegmentationWriterOperator( + self, + segment_descriptions=segment_descriptions, + custom_tags=custom_tags, + output_folder=app_output_path, + name="dcm_seg_writer_op", + ) + + # Create the processing pipeline, by specifying the source and destination operators, and + # ensuring the output from the former matches the input of the latter, in both name and type. + self.add_flow(study_loader_op, series_selector_op, {("dicom_study_list", "dicom_study_list")}) + self.add_flow( + series_selector_op, series_to_vol_op, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(series_to_vol_op, spleen_seg_op, {("image", "image")}) + + # Note below the dicom_seg_writer requires two inputs, each coming from a source operator. + self.add_flow( + series_selector_op, dicom_seg_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(spleen_seg_op, dicom_seg_writer, {("seg_image", "seg_image")}) + + # Create the surface mesh STL conversion operator and add it to the app execution flow, if needed, by + # uncommenting the following couple lines. + stl_conversion_op = STLConversionOperator( + self, output_file=app_output_path.joinpath("stl/spleen.stl"), name="stl_conversion_op" + ) + self.add_flow(spleen_seg_op, stl_conversion_op, {("pred", "image")}) + + self._logger.debug(f"End {self.compose.__name__}") + + +# This is a sample series selection rule in JSON, simply selecting CT series. +# If the study has more than 1 CT series, then all of them will be selected. +# Please see more detail in DICOMSeriesSelectorOperator. +# For list of string values, e.g. "ImageType": ["PRIMARY", "ORIGINAL"], it is a match if all elements +# are all in the multi-value attribute of the DICOM series. + +Sample_Rules_Text = """ +{ + "selections": [ + { + "name": "CT Series", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "SeriesDescription": "(.*?)", + "ImageType": ["PRIMARY", "ORIGINAL"] + } + } + ] +} +""" + +if __name__ == "__main__": + # Creates the app and test it standalone. + AIRemoteInferSpleenSegApp().run() diff --git a/examples/apps/ai_remote_infer_app/env_settings_example.sh b/examples/apps/ai_remote_infer_app/env_settings_example.sh new file mode 100755 index 00000000..4581ce1b --- /dev/null +++ b/examples/apps/ai_remote_infer_app/env_settings_example.sh @@ -0,0 +1,17 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#!/bin/bash +export HOLOSCAN_INPUT_PATH="inputs/spleen_ct_tcia" +export HOLOSCAN_MODEL_PATH="examples/apps/ai_remote_infer_app/models_client_side" +export HOLOSCAN_OUTPUT_PATH="output_spleen" +export HOLOSCAN_LOG_LEVEL=DEBUG # TRACE can be used for verbose low-level logging +export TRITON_SERVER_NETLOC="localhost:8000" # Triton server network location, host:port diff --git a/examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt b/examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt new file mode 100644 index 00000000..6b5ecaeb --- /dev/null +++ b/examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt @@ -0,0 +1,44 @@ +platform: "pytorch_libtorch" + +max_batch_size: 16 # The maximum batch size. 0 for no batching with full shape in dims + +default_model_filename: "model_spleen_ct_segmentation_v1.ts" # The name of the TorchScript model file + +input [ + { + name: "INPUT_0" # The name of the input tensor (or should match the input tensor name in your model if used) + data_type: TYPE_FP32 # Data type is FP32 + dims: [ 1, 96, 96, 96 ] # Input dimensions: [channels, width, height, depth], to be stacked as a batch + } +] + +output [ + { + name: "OUTPUT_0" # The name of the output tensor (match this with your TorchScript model's output name) + data_type: TYPE_FP32 # Output is FP32 + dims: [ 2, 96, 96, 96 ] # Output dimensions: [channels, width, height, depth], stacked to match input batch size + } +] + +version_policy: { latest: { num_versions: 1}} # Only serve the latest version, which is the default + +instance_group [ + { + kind: KIND_GPU # Specify the hardware type (GPU in this case) + count: 1 # Number of instances created for each GPU listed in 'gpus' (adjust based on your resources) + } +] + +dynamic_batching { + preferred_batch_size: [ 4, 8, 16 ] # Preferred batch size(s) for dynamic batching. Matching the max_batch_size for sync calls. + max_queue_delay_microseconds: 1000 # Max delay before processing the batch. +} + +# The initial calls to a loaded TorchScript model take extremely long. +# Due to this longer model warmup issue, Triton allows execution of models without these optimizations. +parameters: { + key: "DISABLE_OPTIMIZED_EXECUTION" + value: { + string_value: "true" + } +} diff --git a/examples/apps/ai_remote_infer_app/spleen_seg_operator.py b/examples/apps/ai_remote_infer_app/spleen_seg_operator.py new file mode 100644 index 00000000..814feebb --- /dev/null +++ b/examples/apps/ai_remote_infer_app/spleen_seg_operator.py @@ -0,0 +1,165 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path + +from numpy import uint8 + +from monai.deploy.core import AppContext, ConditionType, Fragment, Operator, OperatorSpec +from monai.deploy.operators.monai_seg_inference_operator import InfererType, InMemImageReader, MonaiSegInferenceOperator +from monai.transforms import ( + Activationsd, + AsDiscreted, + Compose, + EnsureChannelFirstd, + EnsureTyped, + Invertd, + LoadImaged, + Orientationd, + SaveImaged, + ScaleIntensityRanged, + Spacingd, +) + + +class SpleenSegOperator(Operator): + """Performs Spleen segmentation with a 3D image converted from a DICOM CT series.""" + + DEFAULT_OUTPUT_FOLDER = Path.cwd() / "output/saved_images_folder" + + def __init__( + self, + fragment: Fragment, + *args, + app_context: AppContext, + model_path: Path, + model_name: str, + output_folder: Path = DEFAULT_OUTPUT_FOLDER, + **kwargs, + ): + + self.logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + self._input_dataset_key = "image" + self._pred_dataset_key = "pred" + + self.model_path = model_path + self.model_name = model_name + self.output_folder = output_folder + self.output_folder.mkdir(parents=True, exist_ok=True) + self.app_context = app_context + self.input_name_image = "image" + self.output_name_seg = "seg_image" + self.output_name_saved_images_folder = "saved_images_folder" + + # The base class has an attribute called fragment to hold the reference to the fragment object + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + spec.input(self.input_name_image) + spec.output(self.output_name_seg) + spec.output(self.output_name_saved_images_folder).condition( + ConditionType.NONE + ) # Output not requiring a receiver + + def compute(self, op_input, op_output, context): + input_image = op_input.receive(self.input_name_image) + if not input_image: + raise ValueError("Input image is not found.") + + # This operator gets an in-memory Image object, so a specialized ImageReader is needed. + _reader = InMemImageReader(input_image) + + pre_transforms = self.pre_process(_reader, str(self.output_folder)) + post_transforms = self.post_process(pre_transforms, str(self.output_folder)) + + # Delegates inference and saving output to the built-in operator. + infer_operator = MonaiSegInferenceOperator( + self.fragment, + roi_size=( + 96, + 96, + 96, + ), + pre_transforms=pre_transforms, + post_transforms=post_transforms, + overlap=0.6, + app_context=self.app_context, + model_name=self.model_name, + inferer=InfererType.SLIDING_WINDOW, + sw_batch_size=4, + model_path=self.model_path, + name="monai_seg_remote_inference_op", + ) + + # Setting the keys used in the dictionary based transforms may change. + infer_operator.input_dataset_key = self._input_dataset_key + infer_operator.pred_dataset_key = self._pred_dataset_key + + # Now emit data to the output ports of this operator + op_output.emit(infer_operator.compute_impl(input_image, context), self.output_name_seg) + op_output.emit(self.output_folder, self.output_name_saved_images_folder) + + def pre_process(self, img_reader, out_dir: str = "./input_images") -> Compose: + """Composes transforms for preprocessing input before predicting on a model.""" + + Path(out_dir).mkdir(parents=True, exist_ok=True) + my_key = self._input_dataset_key + + return Compose( + [ + LoadImaged(keys=my_key, reader=img_reader), + EnsureChannelFirstd(keys=my_key), + # The SaveImaged transform can be commented out to save 5 seconds. + # Uncompress NIfTI file, nii, is used favoring speed over size, but can be changed to nii.gz + SaveImaged( + keys=my_key, + output_dir=out_dir, + output_postfix="", + resample=False, + output_ext=".nii", + ), + Orientationd(keys=my_key, axcodes="RAS"), + Spacingd(keys=my_key, pixdim=[1.5, 1.5, 2.9], mode=["bilinear"]), + ScaleIntensityRanged(keys=my_key, a_min=-57, a_max=164, b_min=0.0, b_max=1.0, clip=True), + EnsureTyped(keys=my_key), + ] + ) + + def post_process(self, pre_transforms: Compose, out_dir: str = "./prediction_output") -> Compose: + """Composes transforms for postprocessing the prediction results.""" + + Path(out_dir).mkdir(parents=True, exist_ok=True) + pred_key = self._pred_dataset_key + + return Compose( + [ + Activationsd(keys=pred_key, softmax=True), + Invertd( + keys=pred_key, + transform=pre_transforms, + orig_keys=self._input_dataset_key, + nearest_interp=False, + to_tensor=True, + ), + AsDiscreted(keys=pred_key, argmax=True), + # The SaveImaged transform can be commented out to save 5 seconds. + # Uncompress NIfTI file, nii, is used favoring speed over size, but can be changed to nii.gz + SaveImaged( + keys=pred_key, + output_dir=out_dir, + output_postfix="seg", + output_dtype=uint8, + resample=False, + output_ext=".nii", + ), + ] + ) diff --git a/monai/deploy/core/app_context.py b/monai/deploy/core/app_context.py index fb6a7c24..12a4d879 100644 --- a/monai/deploy/core/app_context.py +++ b/monai/deploy/core/app_context.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -14,6 +14,7 @@ from typing import Dict, List, Optional from .arg_parser import parse_args, set_up_logging +from .models import TritonModel from .models.factory import ModelFactory from .models.model import Model from .runtime_env import RuntimeEnv @@ -45,6 +46,14 @@ def update(self, args: Dict[str, str]): # If model has not been loaded, or the model path has changed, get the path and load model(s) old_model_path = self.model_path self.model_path = args.get("model") or self.args.get("model") or self.runtime_env.model + + # This parameter must be set if models are hosted on the Triton Inference Server. + self.triton_server_netloc = ( + args.get("triton_server_netloc") + or self.args.get("triton_server_netloc") + or self.runtime_env.triton_server_netloc + ) + if old_model_path != self.model_path: self._model_loaded = False # path changed, reset the flag to re-load @@ -52,10 +61,19 @@ def update(self, args: Dict[str, str]): self.models: Optional[Model] = ModelFactory.create(abspath(self.model_path)) self._model_loaded = True + # TritonModel instances are just clients and must be connected to the Triton Inference Server + # at the provided network location. In-process hosting of Triton Inference Server is not supported. + if self.triton_server_netloc and self.models: + for _, model in self.models.items(): + if isinstance(model, TritonModel): + model.connect(self.triton_server_netloc, verbose=args.get("log_level", "INFO") == "DEBUG") + # Health check of the Triton Inference Server can be deferred. + logging.info(f"Model {model.name} set to connect to Triton server at {self.triton_server_netloc}") + def __repr__(self): return ( f"AppContext(input_path={self.input_path}, output_path={self.output_path}, " - f"model_path={self.model_path}, workdir={self.workdir})" + f"model_path={self.model_path}, workdir={self.workdir}), triton_server_netloc={self.triton_server_netloc}" ) diff --git a/monai/deploy/core/arg_parser.py b/monai/deploy/core/arg_parser.py index 97ecb127..fdab7dc0 100644 --- a/monai/deploy/core/arg_parser.py +++ b/monai/deploy/core/arg_parser.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -64,7 +64,15 @@ def parse_args(argv: Optional[List[str]] = None) -> argparse.Namespace: type=argparse_types.valid_dir_path, help="Path to workspace folder (default: A temporary '.monai_workdir' folder in the current folder)", ) + parser.add_argument( + "--triton-server-netloc", + "-t", + type=str, + default=None, + help="Triton server netloc, :. (default: None)", + ) + # triton_server_netloc args = parser.parse_args(argv[1:]) args.argv = argv # save argv for later use in runpy diff --git a/monai/deploy/core/models/__init__.py b/monai/deploy/core/models/__init__.py index d348af7f..aed4f7be 100644 --- a/monai/deploy/core/models/__init__.py +++ b/monai/deploy/core/models/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -23,6 +23,6 @@ from .model import Model from .named_model import NamedModel from .torch_model import TorchScriptModel -from .triton_model import TritonModel +from .triton_model import TritonModel, TritonRemoteModel Model.register([TritonModel, NamedModel, TorchScriptModel, Model]) diff --git a/monai/deploy/core/models/model.py b/monai/deploy/core/models/model.py index 218878dd..d69ebca5 100644 --- a/monai/deploy/core/models/model.py +++ b/monai/deploy/core/models/model.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -81,7 +81,7 @@ def __init__(self, path: str, name: str = ""): else: self._name = Path(path).stem - self._predictor = None + self._predictor: Any = None # Add self to the list of models self._items: Dict[str, Model] = {self.name: self} diff --git a/monai/deploy/core/models/named_model.py b/monai/deploy/core/models/named_model.py index 608d56af..be3f09a5 100644 --- a/monai/deploy/core/models/named_model.py +++ b/monai/deploy/core/models/named_model.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -12,9 +12,7 @@ import logging from pathlib import Path -from monai.deploy.core.models import ModelFactory - -from .model import Model +from monai.deploy.core.models import Model, ModelFactory logger = logging.getLogger(__name__) @@ -58,8 +56,12 @@ def __init__(self, path: str, name: str = ""): for model_folder in model_path.iterdir(): if model_folder.is_dir(): - # Pick one file (assume that only one file exists in the folder) + # Pick one file (assume that only one file exists in the folder), except for Triton model model_file = next(model_folder.iterdir()) + # If Triton model, then use the current folder + if (model_folder / "config.pbtxt").exists(): + model_file = model_folder + if model_file: # Recursive call to identify the model type model = ModelFactory.create(str(model_file), model_folder.name) @@ -81,10 +83,14 @@ def accept(cls, path: str): for model_folder in model_path.iterdir(): # 3) Each model folder must contain only one model definition file or folder. - if sum(1 for _ in model_folder.iterdir()) != 1: + # This would not be confused with Trion model repository which would have + # folders for named models which in turn contain at least one version folder + # and the config.pbtxt file. + # However, with detecting config.pbtxt, Triton model repository can also be accepted. + if sum(1 for _ in model_folder.iterdir()) != 1 and not (model_folder / "config.pbtxt").exists(): logger.warning( - f"Model repository {model_folder!r} contains more than one model definition file or folder " - "so not treated as NamedModel." + f"Model repository {model_folder!r} contains more than one model definition file or folder, " + "and is not a Triton model repository, so not treated as NamedModel." ) return False, None diff --git a/monai/deploy/core/models/triton_model.py b/monai/deploy/core/models/triton_model.py index f406877f..cb18f936 100644 --- a/monai/deploy/core/models/triton_model.py +++ b/monai/deploy/core/models/triton_model.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -9,10 +9,131 @@ # See the License for the specific language governing permissions and # limitations under the License. +import logging from pathlib import Path +from typing import Tuple + +import tritonclient.http as httpclient +from google.protobuf import text_format +from tritonclient.grpc.model_config_pb2 import DataType, ModelConfig + +from monai.deploy.utils.importutil import optional_import from .model import Model +torch, _ = optional_import("torch") + + +def parse_triton_config_pbtxt(pbtxt_path) -> ModelConfig: + """Parse a Triton model config.pbtxt file + + Args: + config_path: Path to the config.pbtxt file + + Returns: + ModelConfig object containing parsed configuration + + Raises: + ValueError: If config file is invalid or missing required fields + FileNotFoundError: If config file doesn't exist + """ + + if not pbtxt_path.exists(): + raise FileNotFoundError(f"Config file not found: {pbtxt_path}") + try: + # Read the config.pbtxt content + with open(pbtxt_path, "r") as f: + config_text = f.read() + # Parse using protobuf text_format + model_config = ModelConfig() + text_format.Parse(config_text, model_config) + return model_config + + except Exception as e: + raise ValueError(f"Failed to parse config file {pbtxt_path}") from e + + +class TritonRemoteModel: + """A remote model that is hosted on a Triton Inference Server. + + Args: + model_name (str): The name of the model. + netloc (str): The network location of the Triton Inference Server. + model_config (ModelConfig): The model config. + headers (dict): The headers to send to the Triton Inference Server. + """ + + def __init__(self, model_name, netloc, model_config, headers=None, **kwargs): + self._headers = headers + self._request_compression_algorithm = None + self._response_compression_algorithm = None + self._model_name = model_name + self._model_version = None + self._model_config = model_config + self._request_compression_algorithm = None + self._response_compression_algorithm = None + self._count = 0 + + try: + self._triton_client = httpclient.InferenceServerClient(url=netloc, verbose=kwargs.get("verbose", False)) + logging.info(f"Created triton client: {self._triton_client}") + except Exception as e: + logging.error("channel creation failed: " + str(e)) + raise + + def __call__(self, data, **kwds): + + self._count += 1 + logging.info(f"{self.__class__.__name__}.__call__: {self._model_name} count: {self._count}") + + inputs = [] + outputs = [] + + # For now support only one input and one output + input_name = self._model_config.input[0].name + input_type = str.split(DataType.Name(self._model_config.input[0].data_type), "_")[1] # remove the prefix + input_shape = list(self._model_config.input[0].dims) + data_shape = list(data.shape) + logging.info(f"Model config input data shape: {input_shape}") + logging.info(f"Actual input data shape: {data_shape}") + + # The server side will handle the batching, and with dynamic batching + # the model config does not have the batch size in the input dims. + logging.info(f"Effective input_name: {input_name}, input_type: {input_type}, input_shape: {data_shape}") + + inputs.append(httpclient.InferInput(input_name, data_shape, input_type)) + + # Move to tensor to CPU + input0_data_np = data.detach().cpu().numpy() + logging.debug(f"Input data shape: {input0_data_np.shape}") + + # Initialize the data + inputs[0].set_data_from_numpy(input0_data_np, binary_data=False) + + output_name = self._model_config.output[0].name + outputs.append(httpclient.InferRequestedOutput(output_name, binary_data=True)) + + query_params = {f"{self._model_name}_count": self._count} + results = self._triton_client.infer( + self._model_name, + inputs, + outputs=outputs, + query_params=query_params, + headers=self._headers, + request_compression_algorithm=self._request_compression_algorithm, + response_compression_algorithm=self._response_compression_algorithm, + ) + + logging.info(f"Got results{results.get_response()}") + output0_data = results.as_numpy(output_name) + logging.debug(f"as_numpy output0_data.shape: {output0_data.shape}") + logging.debug(f"as_numpy output0_data.dtype: {output0_data.dtype}") + + # Convert numpy array to torch tensor as expected by the anticipated clients, + # e.g. monai cliding window inference + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + return torch.as_tensor(output0_data).to(device) # from_numpy is fine too. + class TritonModel(Model): """Represents Triton models in the model repository. @@ -45,19 +166,23 @@ class TritonModel(Model): 1) The path should be a folder path. - 2) The directory should contain only sub folders (model folders). - - 3) Each model folder must contain a config.pbtxt file. + 2) The model folder must contain a config.pbtxt file. a. A config.pbtxt file may contain model name. In that case, model's name should match with the folder name. - 4) Each model folder must include one or more folders having a positive integer value as name. + 3) The model folder may include one or more folders having a positive integer value as version. + For the server side, the following is required, however, not required for the client side + which parses only the model config.pbtxt file. - a. Each such folder must contain a folder or file whose file name (without extension) is 'model'. + a. Each such folder must contain a folder or file whose file name (without extension) is 'model', + unless an attribute is used to specify model file name. - It currently doesn't identify which model version would be selected. + If no version policy is specified, the latest version of a model is loaded and served. Model items identified would have a folder path, not a specific model file path. + + This class encapuslates a single triton model. As such, the model repository folder + will first be parsed by the named_model class, and then each sub folder by this class. """ model_type: str = "triton" @@ -73,50 +198,96 @@ def __init__(self, path: str, name: str = ""): """ super().__init__(path, name) - # Clear existing model item and fill model items - self._items.clear() - model_path: Path = Path(path) + self._model_path: Path = Path(path) + self._name = self._model_path.stem + self._model_config = parse_triton_config_pbtxt(self._model_path / "config.pbtxt") + # The model name in the config.pbtxt, if present, must match the model folder name. + if self._model_config.name and self._model_config.name.casefold() != self._name.casefold(): + raise ValueError( + f"Model name in config.pbtxt ({self._model_config.name}) does not match the folder name ({self._name})." + ) + + self._netloc: str = "" + logging.info(f"Created Triton model: {self._name}") + + def connect(self, netloc: str, **kwargs): + """Connect to the Triton Inference Server at the network location. + + Args: + netloc (str): The network location of the Triton Inference Server. + """ + + if not netloc: + raise ValueError("Network location is required to connect to the Triton Inference Server.") + + if self._netloc and not self._netloc.casefold() == netloc.casefold(): + logging.warning(f"Reconnecting to a different Triton Inference Server at {netloc} from {self._netloc}.") - for model_folder in model_path.iterdir(): - if model_folder.is_dir(): - self._items[model_folder.name] = Model(str(model_folder), model_folder.name) + self._predictor = TritonRemoteModel(self._name, netloc, self._model_config, **kwargs) + self._netloc = netloc + + return self._predictor + + @property + def model_config(self): + return self._model_config + + @property + def net_loc(self): + """Get the network location of the Triton Inference Server, i.e. ":". + + Returns: + str: The network location of the Triton Inference Server. + """ + + return self._netloc + + @net_loc.setter + def net_loc(self, value: str): + """Set the network location of the Triton Inference Server, and causes re-connect.""" + if not value: + raise ValueError("Network location cannot be empty.") + self._netloc = value + # Reconnect to the Triton Inference Server at the new network location. + self.connect(value) + + @property + def predictor(self): + if not self._predictor: + raise ValueError("Model is not connected to the Triton Inference Server.") + return self._predictor + + @predictor.setter + def predictor(self, predictor: TritonRemoteModel): + if not isinstance(predictor, TritonRemoteModel): + raise ValueError("Predictor must be an instance of TritonRemoteModel.") + self._predictor = predictor @classmethod - def accept(cls, path: str): - model_path: Path = Path(path) - - # 1) The path should be a folder path. - if not model_path.is_dir(): - return False, None - - # 2) The directory should contain only sub folders (model folders). - if not all((p.is_dir() for p in model_path.iterdir())): - return False, None - - is_triton_model_repository = True - for model_folder in model_path.iterdir(): - # 3) Each model folder must contain a config.pbtxt file. - if not (model_folder / "config.pbtxt").exists(): - return False, None - # TODO(gigony): We do not check if the config.pbtxt file contains model name for now (3-1). - # We assume that the model name is the same as the folder name. - - # 4) Each model folder must include one or more folders having a positive integer value as name. - found_model = False - for version_folder in model_folder.iterdir(): - version_folder_name = version_folder.name - if version_folder.is_dir() and version_folder_name.isnumeric() and int(version_folder_name) > 0: - # 4-1) Each such folder must contain a folder or file whose file name (without extension) - # is 'model'. - # TODO(gigony): check config.pbtxt file to see actual model file if specified. - if any(version_folder.glob("model.*")): - found_model = True - else: - return False, None - if not found_model: - is_triton_model_repository = False - break - if is_triton_model_repository: - return True, cls.model_type - - return False, None + def accept(cls, path: str) -> Tuple[bool, str]: + model_folder: Path = Path(path) + + # The path should be a folder path, for an individual model, and must have the config.pbtxt file. + if not model_folder.is_dir() or not (model_folder / "config.pbtxt").exists(): + return False, "" + + # Delay parsing the config.pbtxt protobuf for model name, input and output information etc. + # Per convention, the model name is the same as the folder name, and the name in the config file, + # if specified, must match the folder name. + # For the server, each model folder must include one or more folders having a positive integer value as name, + # and each such folder must contain a folder or file for the model. + # At the client side, though there is no need to have the actual model file. + # So the following is not necessary at all, just checking for logging purpose. + found_model = False + for version_folder in model_folder.iterdir(): + version_folder_name = version_folder.name + if version_folder.is_dir() and version_folder_name.isnumeric() and int(version_folder_name) > 0: + # Each such folder must contain a folder or file whose file name (without extension) + # is 'model'. The config.pbtxt can specify the actual model file with an attribute. + if any(version_folder.glob("*")): + found_model = True + logging.info(f"Model {model_folder.name} version {version_folder_name} found in client workspace.") + if not found_model: + logging.info(f"Model {model_folder.name} only has config.pbtxt in client workspace.") + + return True, cls.model_type diff --git a/monai/deploy/core/runtime_env.py b/monai/deploy/core/runtime_env.py index f169e1c7..76a08cdf 100644 --- a/monai/deploy/core/runtime_env.py +++ b/monai/deploy/core/runtime_env.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -17,8 +17,10 @@ class RuntimeEnv(ABC): """Class responsible for managing run time settings. - The expected environment variables are the keys in the defaults dictionary, - and they can be set to override the defaults. + The expected variables can be set via the host env vars which override the + default values in the internal dictionary. + Selective overriding of variables can be done by passing a dictionary to the constructor, + which should have the same structure as the internal dictionary. """ ENV_DEFAULT: Dict[str, Tuple[str, ...]] = { @@ -26,15 +28,21 @@ class RuntimeEnv(ABC): "output": ("HOLOSCAN_OUTPUT_PATH", "output"), "model": ("HOLOSCAN_MODEL_PATH", "models"), "workdir": ("HOLOSCAN_WORKDIR", ""), + "triton_server_netloc": ("TRITON_SERVER_NETLOC", ""), } + # Place holders as the values will be set in the __init__ method input: str = "" output: str = "" model: str = "" workdir: str = "" + triton_server_netloc: str = "" # Triton server host:port def __init__(self, defaults: Optional[Dict[str, Tuple[str, ...]]] = None): if defaults is None: defaults = self.ENV_DEFAULT + else: + defaults = {**self.ENV_DEFAULT, **defaults} + for key, (env, default) in defaults.items(): self.__dict__[key] = os.environ.get(env, default) diff --git a/requirements.txt b/requirements.txt index 73a56030..99bbb796 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ holoscan~=2.0 numpy>=1.21.6 colorama>=0.4.1 +tritonclient[all] typeguard>=3.0.0 From 45c4de1602e2d6fe062568e000b965b6f8552581 Mon Sep 17 00:00:00 2001 From: WillButAgain <69763508+WillButAgain@users.noreply.github.com> Date: Mon, 21 Apr 2025 20:55:31 -0400 Subject: [PATCH 036/118] Fix DICOMSeriesToVolumeOperator casting bug (#529) * fix casting, add check Signed-off-by: will tepe * code review changes Signed-off-by: will tepe * fix fir slope as well --------- Signed-off-by: will tepe Co-authored-by: will tepe Signed-off-by: Simone Bendazzoli --- .../dicom_series_to_volume_operator.py | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/monai/deploy/operators/dicom_series_to_volume_operator.py b/monai/deploy/operators/dicom_series_to_volume_operator.py index 38b4beaf..d589354f 100644 --- a/monai/deploy/operators/dicom_series_to_volume_operator.py +++ b/monai/deploy/operators/dicom_series_to_volume_operator.py @@ -112,7 +112,8 @@ def generate_voxel_data(self, series): # with the NumPy array returned from the ITK GetArrayViewFromImage on the image # loaded from the same DICOM series. vol_data = np.stack([s.get_pixel_array() for s in slices], axis=0) - vol_data = vol_data.astype(np.int16) + if slices[0][0x0028,0x0103].value == 1: + vol_data = vol_data.astype(np.uint16) # For now we support monochrome image only, for which DICOM Photometric Interpretation # (0028,0004) has defined terms, MONOCHROME1 and MONOCHROME2, with the former being: @@ -154,11 +155,29 @@ def generate_voxel_data(self, series): except KeyError: slope = 1 + + # check if vol_data, intercept, and slope can be cast to uint16 without data loss + if np.can_cast(vol_data, np.uint16, casting='safe') and np.can_cast(intercept, np.uint16, casting='safe') and np.can_cast(slope, np.uint16, casting='safe'): + logging.info(f"Casting to uint16") + vol_data = np.array(vol_data, dtype=np.uint16) + intercept = np.uint16(intercept) + slope = np.uint16(slope) + elif np.can_cast(vol_data, np.float32, casting='safe') and np.can_cast(intercept, np.float32, casting='safe') and np.can_cast(slope, np.float32, casting='safe'): + logging.info(f"Casting to float32") + vol_data = np.array(vol_data, dtype=np.float32) + intercept = np.float32(intercept) + slope = np.float32(slope) + elif np.can_cast(vol_data, np.float64, casting='safe') and np.can_cast(intercept, np.float64, casting='safe') and np.can_cast(slope, np.float64, casting='safe'): + logging.info(f"Casting to float64") + vol_data = np.array(vol_data, dtype=np.float64) + intercept = np.float64(intercept) + slope = np.float64(slope) + if slope != 1: - vol_data = slope * vol_data.astype(np.float64) - vol_data = vol_data.astype(np.int16) - vol_data += np.int16(intercept) - return np.array(vol_data, dtype=np.int16) + vol_data = slope * vol_data + + vol_data += intercept + return vol_data def create_volumetric_image(self, vox_data, metadata): """Creates an instance of 3D image. From 06df706748ec7bd669842befcc3268bc7d9e16d5 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Mon, 21 Apr 2025 18:55:05 -0700 Subject: [PATCH 037/118] Formatting changes and tag value for unsigned int is 0 (#537) * The tag value for usinged int is 0 Signed-off-by: M Q * Fix formmating complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .../dicom_series_to_volume_operator.py | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/monai/deploy/operators/dicom_series_to_volume_operator.py b/monai/deploy/operators/dicom_series_to_volume_operator.py index d589354f..57c60c17 100644 --- a/monai/deploy/operators/dicom_series_to_volume_operator.py +++ b/monai/deploy/operators/dicom_series_to_volume_operator.py @@ -112,7 +112,9 @@ def generate_voxel_data(self, series): # with the NumPy array returned from the ITK GetArrayViewFromImage on the image # loaded from the same DICOM series. vol_data = np.stack([s.get_pixel_array() for s in slices], axis=0) - if slices[0][0x0028,0x0103].value == 1: + # The above get_pixel_array() already considers the PixelRepresentation attribute, + # 0 is unsigned int, 1 is signed int + if slices[0][0x0028, 0x0103].value == 0: vol_data = vol_data.astype(np.uint16) # For now we support monochrome image only, for which DICOM Photometric Interpretation @@ -155,24 +157,35 @@ def generate_voxel_data(self, series): except KeyError: slope = 1 - # check if vol_data, intercept, and slope can be cast to uint16 without data loss - if np.can_cast(vol_data, np.uint16, casting='safe') and np.can_cast(intercept, np.uint16, casting='safe') and np.can_cast(slope, np.uint16, casting='safe'): - logging.info(f"Casting to uint16") + if ( + np.can_cast(vol_data, np.uint16, casting="safe") + and np.can_cast(intercept, np.uint16, casting="safe") + and np.can_cast(slope, np.uint16, casting="safe") + ): + logging.info("Casting to uint16") vol_data = np.array(vol_data, dtype=np.uint16) intercept = np.uint16(intercept) slope = np.uint16(slope) - elif np.can_cast(vol_data, np.float32, casting='safe') and np.can_cast(intercept, np.float32, casting='safe') and np.can_cast(slope, np.float32, casting='safe'): - logging.info(f"Casting to float32") + elif ( + np.can_cast(vol_data, np.float32, casting="safe") + and np.can_cast(intercept, np.float32, casting="safe") + and np.can_cast(slope, np.float32, casting="safe") + ): + logging.info("Casting to float32") vol_data = np.array(vol_data, dtype=np.float32) intercept = np.float32(intercept) slope = np.float32(slope) - elif np.can_cast(vol_data, np.float64, casting='safe') and np.can_cast(intercept, np.float64, casting='safe') and np.can_cast(slope, np.float64, casting='safe'): - logging.info(f"Casting to float64") + elif ( + np.can_cast(vol_data, np.float64, casting="safe") + and np.can_cast(intercept, np.float64, casting="safe") + and np.can_cast(slope, np.float64, casting="safe") + ): + logging.info("Casting to float64") vol_data = np.array(vol_data, dtype=np.float64) intercept = np.float64(intercept) slope = np.float64(slope) - + if slope != 1: vol_data = slope * vol_data From 35a1be195a0152b481a7795b2e34e505e94636d8 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 17:20:48 -0700 Subject: [PATCH 038/118] Prepared changes for releasing v3 (#538) * Prepared changes for releasing v3 Signed-off-by: M Q * Bump the required version to 3.9 Signed-off-by: M Q * Update Python version references to 3.9 in documentation and configuration files - Updated .gitignore to include new input and test directories. - Changed Python version from 3.8 to 3.9 in .readthedocs.yml, setup.cfg, and run script. - Updated documentation to reflect the use of Python 3.9 in various tutorials. Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 4 +- .readthedocs.yml | 2 +- CONTRIBUTING.md | 2 +- README.md | 16 +- docs/requirements.txt | 2 +- .../developing_with_sdk/packaging_app.md | 8 +- .../getting_started/tutorials/mednist_app.md | 6 +- .../tutorials/monai_bundle_app.md | 8 +- .../tutorials/multi_model_app.md | 6 +- .../tutorials/segmentation_app.md | 6 +- .../tutorials/segmentation_clara-viz_app.md | 4 +- .../getting_started/tutorials/simple_app.md | 6 +- docs/source/release_notes/index.md | 7 + docs/source/release_notes/v3.0.0.md | 29 + notebooks/tutorials/01_simple_app.ipynb | 737 +++------ .../tutorials/02_mednist_app-prebuilt.ipynb | 954 +++--------- notebooks/tutorials/02_mednist_app.ipynb | 9 +- notebooks/tutorials/03_segmentation_app.ipynb | 1357 +++++++++-------- notebooks/tutorials/04_monai_bundle_app.ipynb | 1271 +++++++-------- notebooks/tutorials/05_multi_model_app.ipynb | 989 +++++------- requirements.txt | 5 +- run | 6 +- setup.cfg | 6 +- 23 files changed, 2338 insertions(+), 3102 deletions(-) create mode 100644 docs/source/release_notes/v3.0.0.md diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index edd0fa5c..3ab1eb59 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -14,10 +14,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.9 uses: actions/setup-python@v2 with: - python-version: "3.8" + python-version: "3.9" - name: Setup Dev Environment run: | pip install virtualenv diff --git a/.readthedocs.yml b/.readthedocs.yml index 6c872c8b..59c6d31c 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -8,7 +8,7 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.8" + python: "3.9" # You can also specify other tool versions: # nodejs: "20" # rust: "1.70" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 535231d7..eaab3990 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -138,7 +138,7 @@ MONAI Deploy App SDK's code coverage report is available at [CodeCov](https://co #### Building the documentation :::{note} -Please note that the documentation builds successfully in Python 3.8 environment, but fails with Python 3.10. +Please note that the documentation builds successfully in Python 3.9 environment, but fails with Python 3.10. ::: MONAI's documentation is located at `docs/`. diff --git a/README.md b/README.md index 016fa9e1..956541fe 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ MONAI Deploy App SDK offers a framework and associated tools to design, develop - Build medical imaging inference applications using a flexible, extensible & usable Pythonic API - Easy management of inference applications via programmable Directed Acyclic Graphs (DAGs) - Built-in operators to load DICOM data to be ingested in an inference app -- Out-of-the-box support for in-proc PyTorch based inference +- Out-of-the-box support for in-proc PyTorch based inference, as well as remote inference via Triton Inference Server - Easy incorporation of MONAI based pre and post transformations in the inference application - Package inference application with a single command into a portable MONAI Application Package - Locally run and debug your inference application using App Runner @@ -33,7 +33,7 @@ If you have used MONAI in your research, please cite us! The citation can be exp To install [the current release](https://pypi.org/project/monai-deploy-app-sdk/), you can simply run: ```bash -pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. +pip install monai-deploy-app-sdk ``` ### Prerequisites @@ -48,7 +48,7 @@ pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. Getting started guide is available at [here](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/getting_started/index.html). ```bash -pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. +pip install monai-deploy-app-sdk # Clone monai-deploy-app-sdk repository for accessing examples. git clone https://github.com/Project-MONAI/monai-deploy-app-sdk.git @@ -62,7 +62,7 @@ python examples/apps/simple_imaging_app/app.py -i examples/apps/simple_imaging_a # Package app (creating MAP Docker image), using `-l DEBUG` option to see progress. # Also please note that postfix will be added to user supplied tag for identifying CPU architecture and GPU type etc. -monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x64-workstation -l DEBUG +monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x86_64 -l DEBUG # Run the app with docker image and an input file locally ## Copy a test input file to 'input' folder @@ -86,7 +86,7 @@ YouTube Video (to be updated with the new version): ### [3) Creating a Segmentation app](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/getting_started/tutorials/segmentation_app.html) -YouTube Video (to be updated with the new version): +YouTube Video (demonstrating the previous version of the App SDK): - [Spleen Organ Segmentation - Jupyter Notebook Tutorial](https://www.youtube.com/watch?v=cqDVxzYt9lY) - [Spleen Organ Segmentation - Deep Dive](https://www.youtube.com/watch?v=nivgfD4pwWE) @@ -97,14 +97,16 @@ YouTube Video (to be updated with the new version): ### [Examples](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/getting_started/examples.html) - has example apps that you can see. + has example apps that you can see, to name but a few +- simple_imaging_app - ai_livertumor_seg_app - ai_spleen_seg_app - ai_unetr_seg_app - dicom_series_to_image_app - mednist_classifier_monaideploy -- simple_imaging_app +- ai_remote_infer_app + ## Contributing diff --git a/docs/requirements.txt b/docs/requirements.txt index 3f64ba34..6f6372db 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,6 +1,6 @@ Sphinx==4.1.2 sphinx-autobuild==2021.3.14 -myst-nb==0.17.2 # this version is fine in python 3.8 and avoids pulling in multiple nbformat packages +myst-nb==0.17.2 # this version is fine in python 3.9 and avoids pulling in multiple nbformat packages myst-parser==0.18.0 lxml_html_clean # needed by myst-nb linkify-it-py==1.0.1 # https://myst-parser.readthedocs.io/en/latest/syntax/optional.html?highlight=linkify#linkify diff --git a/docs/source/developing_with_sdk/packaging_app.md b/docs/source/developing_with_sdk/packaging_app.md index a46327ec..f4e7ee0f 100644 --- a/docs/source/developing_with_sdk/packaging_app.md +++ b/docs/source/developing_with_sdk/packaging_app.md @@ -13,7 +13,7 @@ It is required that the application configuration yaml file as well as the depen ### Basic Usage of MONAI Application Packager ```bash -monai-deploy package --config --tag --platform [--models ] [--log-level ] [-h] +monai-deploy package --config --tag --platform [--models ] [--log-level ] [-h] ``` #### Required Arguments @@ -21,7 +21,7 @@ monai-deploy package --config --tag --platform `: A path to MONAI Deploy Application folder or main code. * `--config, -c `: Path to the application configuration file. * `--tag, -t `: A MAP name and optionally a tag in the 'name:tag' format. -* `--platform `: Platform type of the container image, must be `x64-workstation` for x86-64 system. +* `--platform `: Platform type of the container image, must be `x86_64` for x86-64 system. :::{note} If `` refers to a python code (such as `./my_app.py`), the whole parent folder of the file would be packaged into the MAP container image, effectively the same as specifying the application folder path which includes `__main__.py` file. In both cases, the image's environment variable, `HOLOSCAN_APPLICATION` will be set with the path of the application folder in the image, i.e. `HOLOSCAN_APPLICATION=/opt/holoscan/app`. So, it is essential to provide the `__main__.py` file in the application folder, which usually would look like below: @@ -54,7 +54,7 @@ The following lists a few most likely used [optional arguments](https://docs.nvi Given an example MONAI Deploy App SDK application with its code residing in a directory `./my_app`, packaging this application with the Packager to create a Docker image tagged `my_app:latest` would look like this: ```bash -$ monai-deploy package ./my_app -c --config ./my_app/app.yaml -t my_app:latest --models ./model.ts --platform x64-workstation +$ monai-deploy package ./my_app -c --config ./my_app/app.yaml -t my_app:latest --models ./model.ts --platform x86_64 Building MONAI Application Package... Successfully built my_app:latest @@ -65,7 +65,7 @@ The MAP image name will be postfixed with the platform info to become `my_app-x6 :::{note} * The current implementation of the Packager **ONLY** supports a set of [platform](https://docs.nvidia.com/holoscan/sdk-user-guide/cli/package.html#platform-platform) specific base images from `nvcr.io` as base images for the MAP. -* To package a MAP to run on ARMv8 AArch64 on Linux with discrete GPU, replace the commandline option `--platform x64-workstation` with `--platform igx-orin-devkit --platform-config dgpu`. It has been tested on [NVIDIA IGX Orin](https://www.nvidia.com/en-us/edge-computing/products/igx/). +* To package a MAP to run on ARMv8 AArch64 on Linux with discrete GPU, replace the commandline option `--platform x86_64` with `--platform igx-dgpu`. It has been tested on [NVIDIA IGX Orin](https://www.nvidia.com/en-us/edge-computing/products/igx/). ::: ## Next Step diff --git a/docs/source/getting_started/tutorials/mednist_app.md b/docs/source/getting_started/tutorials/mednist_app.md index 63809ae2..d762d917 100644 --- a/docs/source/getting_started/tutorials/mednist_app.md +++ b/docs/source/getting_started/tutorials/mednist_app.md @@ -5,9 +5,9 @@ This tutorial demos the process of packaging up a trained model using MONAI Depl ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n mednist python=3.8 pytorch jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n mednist python=3.9 pytorch jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate mednist # Launch JupyterLab if you want to work on Jupyter Notebook @@ -98,7 +98,7 @@ monai-deploy package examples/apps/mednist_classifier_monaideploy/mednist_classi --config examples/apps/mednist_classifier_monaideploy/app.yaml \ --tag mednist_app:latest \ --models mednist_model/classifier.zip \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/monai_bundle_app.md b/docs/source/getting_started/tutorials/monai_bundle_app.md index 326b868a..c259a947 100644 --- a/docs/source/getting_started/tutorials/monai_bundle_app.md +++ b/docs/source/getting_started/tutorials/monai_bundle_app.md @@ -5,9 +5,9 @@ This tutorial shows how to create an organ segmentation application for a PyTorc ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -38,7 +38,7 @@ jupyter-lab ```{raw} html

- + Download 04_monai_bundle_app.ipynb

@@ -86,7 +86,7 @@ monai-deploy package examples/apps/ai_spleen_seg_app \ --config examples/apps/ai_spleen_seg_app/app.yaml \ --tag seg_app:latest \ --models spleen_model/model.ts \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/multi_model_app.md b/docs/source/getting_started/tutorials/multi_model_app.md index 801aec20..515e88b8 100644 --- a/docs/source/getting_started/tutorials/multi_model_app.md +++ b/docs/source/getting_started/tutorials/multi_model_app.md @@ -7,9 +7,9 @@ The models used in this example are trained with MONAI, and are packaged in the ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -70,7 +70,7 @@ monai-deploy package examples/apps/ai_multi_ai_app \ --tag multi_model_app:latest \ --config examples/apps/ai_multi_ai_app/app.yaml \ --models multi_models \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/segmentation_app.md b/docs/source/getting_started/tutorials/segmentation_app.md index 6497c874..4493bc0e 100644 --- a/docs/source/getting_started/tutorials/segmentation_app.md +++ b/docs/source/getting_started/tutorials/segmentation_app.md @@ -7,9 +7,9 @@ Please note that the following steps are for demonstration purpose. The code pul ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -72,7 +72,7 @@ monai-deploy package examples/apps/ai_spleen_seg_app \ --config examples/apps/ai_spleen_seg_app/app.yaml \ --tag seg_app:latest \ --models spleen_model/model.ts \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md b/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md index 1ce87b5a..6c9f3b44 100644 --- a/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md +++ b/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md @@ -5,9 +5,9 @@ This tutorial shows how to create an organ segmentation application for a PyTorc ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook diff --git a/docs/source/getting_started/tutorials/simple_app.md b/docs/source/getting_started/tutorials/simple_app.md index d43fca0c..77dcd4bc 100644 --- a/docs/source/getting_started/tutorials/simple_app.md +++ b/docs/source/getting_started/tutorials/simple_app.md @@ -5,9 +5,9 @@ This tutorial shows how a simple image processing application can be created wit ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -69,7 +69,7 @@ ls output # This assumes that nvidia docker is installed in the local machine. # Please see https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker to install nvidia-docker2. -monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x64-workstation -l DEBUG +monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x86_64 -l DEBUG # Show the application and package manifest files of the MONAI Application Package diff --git a/docs/source/release_notes/index.md b/docs/source/release_notes/index.md index fdb10dfc..84965f23 100644 --- a/docs/source/release_notes/index.md +++ b/docs/source/release_notes/index.md @@ -4,6 +4,13 @@ :hidden: :maxdepth: 2 +``` +## Version 3.0 + +```{toctree} +:maxdepth: 1 + +v3.0.0 ``` ## Version 2.0 diff --git a/docs/source/release_notes/v3.0.0.md b/docs/source/release_notes/v3.0.0.md new file mode 100644 index 00000000..2d229404 --- /dev/null +++ b/docs/source/release_notes/v3.0.0.md @@ -0,0 +1,29 @@ +# Version 2.0.0 (April 24th, 2024) + +## What's new in 3.0.0 + +- This version of the App SDK is based on the newly released [Holoscan SDK v3](https://pypi.org/project/holoscan/), and is expected to be so with future minor releases of Holoscan SDK v3. + +- Starting with version 3.0.0, [Holoscan SDK](https://pypi.org/project/holoscan/) and [Holoscan CLI](https://pypi.org/project/holoscan-cli/) are released in separate packages, and as such, this version of the MONAI Deploy App SDK has both as dependencies. As of now, version 3 of both packages are compatible. + +- Remote inference on [Triton Inference Server](https://github.com/triton-inference-server) is now supported. Effort was made to make it user-friendly so existing example applications can be easily converted to use this feature by simply providing the network location of the server as well as the [Triton model configuration file](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md) sans the actual model files. [An example application](https://github.com/Project-MONAI/monai-deploy-app-sdk/tree/main/examples/apps/ai_remote_infer_app) has been provided to demonstrate such use case. + +### Key changes + +- [Cincinnati Children's Hospital Medical Cente](https://www.cincinnatichildrens.org/) researchers, @[Bryan](https://github.com/bluna301) @[Will](https://github.com/WillButAgain) and Elan, contributed numerous enhancements from experience developing and deploying MONAI based AI applications in clinical environments, to name but a few + + - Enhanced the DICOM data loader to handle multi-phase DICOM series where multiple acquisitions exist and some DICOM SOP instances have the same image pospositiontion patient. + + - Enahnced the DICOM series to volume operator to better handle the data types of the converted volume image for improved efficiency and memory usage. + + - Enhanced the DICOM Segmentation operator to populate DICOM tags with AI model information which are consistent with other DICOM writers in the SDK. + + +Please also see the closed issues on Github and the closed pull requests on Github. + +## Additional information +Please visit [GETTING STARTED](/getting_started/index) guide and follow the tutorials. + +You can learn more about SDK usage through [DEVELOPING WITH SDK](/developing_with_sdk/index). + +Please let us know how you like it and what could be improved by [submitting an issue](https://github.com/Project-MONAI/monai-deploy-app-sdk/issues/new/choose) or [asking questions](https://github.com/Project-MONAI/monai-deploy-app-sdk/discussions) \ No newline at end of file diff --git a/notebooks/tutorials/01_simple_app.ipynb b/notebooks/tutorials/01_simple_app.ipynb index 8da2f1c1..beaf5a53 100644 --- a/notebooks/tutorials/01_simple_app.ipynb +++ b/notebooks/tutorials/01_simple_app.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 82, "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 83, "metadata": {}, "outputs": [ { @@ -96,23 +96,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/2727006292.py:16: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/2727006292.py:16: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(test_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 2, + "execution_count": 83, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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kZgjRPUIx7E+CMexPgjHsX4Ix7I+8BvHIJovUVMijhAhQoQIESJEdQgJOESIECFChNgAbFoCbmlpwWOPPRZm0KoR4TjWB+E41gfhONYP4VjWB5dyHDdlEFaIECFChAix2bFpNeAQIUKECBFiMyMk4BAhQoQIEWIDEBJwiBAhQoQIsQEICThEiBAhQoTYAIQEHCJEiBAhQmwANiUB/8M//AO2b9+OWCyGgwcP4sc//vFGd+mKwv/8z//g/e9/PwYGBhCJRPDkk09WfO84Dv70T/8U/f39iMfjOHz4ME6cOFFRZmZmBo888giSySTS6TQ+9rGPYX5+/jLexcbj8ccfxx133IH29nb09PTgl3/5l3H8+PGKMktLS3j00UfR2dmJtrY2fOhDH8LExERFmdHRUTz00ENobW1FT08PPve5z2F1dfVy3sqG4stf/jL27t2rMgkdOnQITz31lPo+HMPq8KUvfQmRSASf/vSn1WfhWNrhi1/8ojrFjD+7d+9W31+2cXQ2GZ544gmnubnZ+dd//Vfntddec37rt37LSafTzsTExEZ37YrBd77zHeeP/uiPnP/8z/90ADjf+MY3Kr7/0pe+5KRSKefJJ590Xn75ZeeXfumXnB07djilUkmVee973+vs27fPef75553//d//da6//nrn4Ycfvsx3srF44IEHnK985SvOsWPHnKNHjzq/+Iu/6Gzbts2Zn59XZT7+8Y87W7dudZ555hnnpz/9qXPXXXc5d999t/p+dXXVueWWW5zDhw87L730kvOd73zH6erqcr7whS9sxC1tCL75zW863/72t5233nrLOX78uPOHf/iHTlNTk3Ps2DHHccIxrAY//vGPne3btzt79+51PvWpT6nPw7G0w2OPPebcfPPNzvj4uPrJ5XLq+8s1jpuOgO+8807n0UcfVf+vra05AwMDzuOPP76BvbpyoRPw+vq609fX5/zVX/2V+mxubs5paWlx/v3f/91xHMd5/fXXHQDOT37yE1XmqaeeciKRiHP27NnL1vcrDZOTkw4A59lnn3Uc5/y4NTU1OV//+tdVmTfeeMMB4Bw5csRxnPPCUDQadbLZrCrz5S9/2Ukmk87y8vLlvYErCJlMxvmXf/mXcAyrQLFYdHbt2uU8/fTTzn333acIOBxLezz22GPOvn37jN9dznHcVCbocrmMF198EYcPH1afRaNRHD58GEeOHNnAnm0eDA8PI5vNVoxhKpXCwYMH1RgeOXIE6XQaBw4cUGUOHz6MaDSKF1544bL3+UpBPp8HAHR0dAAAXnzxRaysrFSM5e7du7Ft27aKsbz11lvR29uryjzwwAMoFAp47bXXLmPvrwysra3hiSeewMLCAg4dOhSOYRV49NFH8dBDD1WMGRDOx6A4ceIEBgYGcN111+GRRx7B6OgogMs7jpvqNKSpqSmsra1V3DQA9Pb24s0339ygXm0uZLNZADCOIb/LZrPo6emp+L6xsREdHR2qzLWG9fV1fPrTn8Y999yDW265BcD5cWpubkY6na4oq4+laaz53bWCV199FYcOHcLS0hLa2trwjW98AzfddBOOHj0ajmEAPPHEE/jZz36Gn/zkJxd9F85Hexw8eBBf/epXceONN2J8fBx/9md/hnvvvRfHjh27rOO4qQg4RIiNwqOPPopjx47hueee2+iubErceOONOHr0KPL5PP7jP/4DH/nIR/Dss89udLc2Fc6cOYNPfepTePrppxGLxTa6O5saDz74oPp77969OHjwIIaGhvC1r30N8Xj8svVjU5mgu7q60NDQcFE02sTEBPr6+jaoV5sLHCevMezr68Pk5GTF96urq5iZmbkmx/mTn/wkvvWtb+EHP/gBBgcH1ed9fX0ol8uYm5urKK+PpWms+d21gubmZlx//fXYv38/Hn/8cezbtw9/+7d/G45hALz44ouYnJzE7bffjsbGRjQ2NuLZZ5/F3/3d36GxsRG9vb3hWFaJdDqNG264ASdPnrysc3JTEXBzczP279+PZ555Rn22vr6OZ555BocOHdrAnm0e7NixA319fRVjWCgU8MILL6gxPHToEObm5vDiiy+qMt///vexvr6OgwcPXvY+bxQcx8EnP/lJfOMb38D3v/997Nixo+L7/fv3o6mpqWIsjx8/jtHR0YqxfPXVVysEmqeffhrJZBI33XTT5bmRKxDr6+tYXl4OxzAA3vOe9+DVV1/F0aNH1c+BAwfwyCOPqL/DsawO8/PzOHXqFPr7+y/vnKwqhGwD8cQTTzgtLS3OV7/6Vef11193fvu3f9tJp9MV0WjXOorFovPSSy85L730kgPA+eu//mvnpZdeckZGRhzHOb8NKZ1OO//1X//lvPLKK84HPvAB4zak2267zXnhhRec5557ztm1a9c1tw3pE5/4hJNKpZwf/vCHFdsVFhcXVZmPf/zjzrZt25zvf//7zk9/+lPn0KFDzqFDh9T33K5w//33O0ePHnW++93vOt3d3dfUto/Pf/7zzrPPPusMDw87r7zyivP5z3/eiUQizve+9z3HccIxrAUyCtpxwrG0xWc/+1nnhz/8oTM8POz86Ec/cg4fPux0dXU5k5OTjuNcvnHcdATsOI7z93//9862bduc5uZm584773Sef/75je7SFYUf/OAHDoCLfj7ykY84jnN+K9Kf/MmfOL29vU5LS4vznve8xzl+/HhFHdPT087DDz/stLW1Oclk0vnoRz/qFIvFDbibjYNpDAE4X/nKV1SZUqnk/M7v/I6TyWSc1tZW54Mf/KAzPj5eUc/bb7/tPPjgg048Hne6urqcz372s87KysplvpuNw2/+5m86Q0NDTnNzs9Pd3e285z3vUeTrOOEY1gKdgMOxtMOHP/xhp7+/32lubna2bNnifPjDH3ZOnjypvr9c4xieBxwiRIgQIUJsADaVDzhEiBAhQoS4WhAScIgQIUKECLEBCAk4RIgQIUKE2ACEBBwiRIgQIUJsAEICDhEiRIgQITYAIQGHCBEiRIgQG4CQgEOECBEiRIgNQEjAIUKECBEixAYgJOAQIUKECBFiAxAScIgQIUKECLEBCAk4RIgQIUKE2AD8Pz66mQm41jf1AAAAAElFTkSuQmCC", + "image/png": "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kZgjRPUIx7E+CMexPgjHsX4Ix7I+8BvHIJovUVMijhAhQoQIESJEdQgJOESIECFChNgAbFoCbmlpwWOPPRZm0KoR4TjWB+E41gfhONYP4VjWB5dyHDdlEFaIECFChAix2bFpNeAQIUKECBFiMyMk4BAhQoQIEWIDEBJwiBAhQoQIsQEICThEiBAhQoTYAIQEHCJEiBAhQmwANiUB/8M//AO2b9+OWCyGgwcP4sc//vFGd+mKwv/8z//g/e9/PwYGBhCJRPDkk09WfO84Dv70T/8U/f39iMfjOHz4ME6cOFFRZmZmBo888giSySTS6TQ+9rGPYX5+/jLexcbj8ccfxx133IH29nb09PTgl3/5l3H8+PGKMktLS3j00UfR2dmJtrY2fOhDH8LExERFmdHRUTz00ENobW1FT08PPve5z2F1dfVy3sqG4stf/jL27t2rMgkdOnQITz31lPo+HMPq8KUvfQmRSASf/vSn1WfhWNrhi1/8ojrFjD+7d+9W31+2cXQ2GZ544gmnubnZ+dd//Vfntddec37rt37LSafTzsTExEZ37YrBd77zHeeP/uiPnP/8z/90ADjf+MY3Kr7/0pe+5KRSKefJJ590Xn75ZeeXfumXnB07djilUkmVee973+vs27fPef75553//d//da6//nrn4Ycfvsx3srF44IEHnK985SvOsWPHnKNHjzq/+Iu/6Gzbts2Zn59XZT7+8Y87W7dudZ555hnnpz/9qXPXXXc5d999t/p+dXXVueWWW5zDhw87L730kvOd73zH6erqcr7whS9sxC1tCL75zW863/72t5233nrLOX78uPOHf/iHTlNTk3Ps2DHHccIxrAY//vGPne3btzt79+51PvWpT6nPw7G0w2OPPebcfPPNzvj4uPrJ5XLq+8s1jpuOgO+8807n0UcfVf+vra05AwMDzuOPP76BvbpyoRPw+vq609fX5/zVX/2V+mxubs5paWlx/v3f/91xHMd5/fXXHQDOT37yE1XmqaeeciKRiHP27NnL1vcrDZOTkw4A59lnn3Uc5/y4NTU1OV//+tdVmTfeeMMB4Bw5csRxnPPCUDQadbLZrCrz5S9/2Ukmk87y8vLlvYErCJlMxvmXf/mXcAyrQLFYdHbt2uU8/fTTzn333acIOBxLezz22GPOvn37jN9dznHcVCbocrmMF198EYcPH1afRaNRHD58GEeOHNnAnm0eDA8PI5vNVoxhKpXCwYMH1RgeOXIE6XQaBw4cUGUOHz6MaDSKF1544bL3+UpBPp8HAHR0dAAAXnzxRaysrFSM5e7du7Ft27aKsbz11lvR29uryjzwwAMoFAp47bXXLmPvrwysra3hiSeewMLCAg4dOhSOYRV49NFH8dBDD1WMGRDOx6A4ceIEBgYGcN111+GRRx7B6OgogMs7jpvqNKSpqSmsra1V3DQA9Pb24s0339ygXm0uZLNZADCOIb/LZrPo6emp+L6xsREdHR2qzLWG9fV1fPrTn8Y999yDW265BcD5cWpubkY6na4oq4+laaz53bWCV199FYcOHcLS0hLa2trwjW98AzfddBOOHj0ajmEAPPHEE/jZz36Gn/zkJxd9F85Hexw8eBBf/epXceONN2J8fBx/9md/hnvvvRfHjh27rOO4qQg4RIiNwqOPPopjx47hueee2+iubErceOONOHr0KPL5PP7jP/4DH/nIR/Dss89udLc2Fc6cOYNPfepTePrppxGLxTa6O5saDz74oPp77969OHjwIIaGhvC1r30N8Xj8svVjU5mgu7q60NDQcFE02sTEBPr6+jaoV5sLHCevMezr68Pk5GTF96urq5iZmbkmx/mTn/wkvvWtb+EHP/gBBgcH1ed9fX0ol8uYm5urKK+PpWms+d21gubmZlx//fXYv38/Hn/8cezbtw9/+7d/G45hALz44ouYnJzE7bffjsbGRjQ2NuLZZ5/F3/3d36GxsRG9vb3hWFaJdDqNG264ASdPnrysc3JTEXBzczP279+PZ555Rn22vr6OZ555BocOHdrAnm0e7NixA319fRVjWCgU8MILL6gxPHToEObm5vDiiy+qMt///vexvr6OgwcPXvY+bxQcx8EnP/lJfOMb38D3v/997Nixo+L7/fv3o6mpqWIsjx8/jtHR0YqxfPXVVysEmqeffhrJZBI33XTT5bmRKxDr6+tYXl4OxzAA3vOe9+DVV1/F0aNH1c+BAwfwyCOPqL/DsawO8/PzOHXqFPr7+y/vnKwqhGwD8cQTTzgtLS3OV7/6Vef11193fvu3f9tJp9MV0WjXOorFovPSSy85L730kgPA+eu//mvnpZdeckZGRhzHOb8NKZ1OO//1X//lvPLKK84HPvAB4zak2267zXnhhRec5557ztm1a9c1tw3pE5/4hJNKpZwf/vCHFdsVFhcXVZmPf/zjzrZt25zvf//7zk9/+lPn0KFDzqFDh9T33K5w//33O0ePHnW++93vOt3d3dfUto/Pf/7zzrPPPusMDw87r7zyivP5z3/eiUQizve+9z3HccIxrAUyCtpxwrG0xWc/+1nnhz/8oTM8POz86Ec/cg4fPux0dXU5k5OTjuNcvnHcdATsOI7z93//9862bduc5uZm584773Sef/75je7SFYUf/OAHDoCLfj7ykY84jnN+K9Kf/MmfOL29vU5LS4vznve8xzl+/HhFHdPT087DDz/stLW1Oclk0vnoRz/qFIvFDbibjYNpDAE4X/nKV1SZUqnk/M7v/I6TyWSc1tZW54Mf/KAzPj5eUc/bb7/tPPjgg048Hne6urqcz372s87KysplvpuNw2/+5m86Q0NDTnNzs9Pd3e285z3vUeTrOOEY1gKdgMOxtMOHP/xhp7+/32lubna2bNnifPjDH3ZOnjypvr9c4xieBxwiRIgQIUJsADaVDzhEiBAhQoS4WhAScIgQIUKECLEBCAk4RIgQIUKE2ACEBBwiRIgQIUJsAEICDhEiRIgQITYAIQGHCBEiRIgQG4CQgEOECBEiRIgNQEjAIUKECBEixAYgJOAQIUKECBFiAxAScIgQIUKECLEBCAk4RIgQIUKE2AD8Pz66mQm41jf1AAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -153,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 84, "metadata": {}, "outputs": [ { @@ -187,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 85, "metadata": {}, "outputs": [], "source": [ @@ -220,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 86, "metadata": {}, "outputs": [], "source": [ @@ -291,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 87, "metadata": {}, "outputs": [], "source": [ @@ -343,7 +343,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 88, "metadata": {}, "outputs": [], "source": [ @@ -436,7 +436,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 89, "metadata": {}, "outputs": [ { @@ -515,16 +515,16 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 90, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:08:18,760] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 12:08:18,775] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:03:07,039] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 12:03:07,047] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=), triton_server_netloc=\n" ] }, { @@ -540,12 +540,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n" ] }, @@ -565,9 +563,9 @@ "text": [ "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[info] [gxf_executor.cpp:294] Destroying context\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[info] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -578,7 +576,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 91, "metadata": {}, "outputs": [ { @@ -595,30 +593,30 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 92, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/1643627018.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/1643627018.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 11, + "execution_count": 92, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -659,7 +657,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 93, "metadata": {}, "outputs": [], "source": [ @@ -677,14 +675,14 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/sobel_operator.py\n" + "Overwriting simple_imaging_app/sobel_operator.py\n" ] } ], @@ -757,14 +755,14 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 95, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/median_operator.py\n" + "Overwriting simple_imaging_app/median_operator.py\n" ] } ], @@ -819,14 +817,14 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 96, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/gaussian_operator.py\n" + "Overwriting simple_imaging_app/gaussian_operator.py\n" ] } ], @@ -894,7 +892,7 @@ " # Some details can be found at https://stackoverflow.com/questions/55319949/pil-typeerror-cannot-handle-this-data-type\n", " print(f\"Data type of output: {type(data_out)!r}, max = {np.max(data_out)!r}\")\n", " if np.max(data_out) <= 1:\n", - " data_out = (data_out*255).astype(np.uint8)\n", + " data_out = (data_out * 255).astype(np.uint8)\n", " print(f\"Data type of output post conversion: {type(data_out)!r}, max = {np.max(data_out)!r}\")\n", "\n", " # For now, use attribute of self to find the output path.\n", @@ -915,14 +913,14 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 97, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/app.py\n" + "Overwriting simple_imaging_app/app.py\n" ] } ], @@ -936,7 +934,7 @@ "from sobel_operator import SobelOperator\n", "\n", "from monai.deploy.conditions import CountCondition\n", - "from monai.deploy.core import AppContext, Application\n", + "from monai.deploy.core import Application\n", "\n", "\n", "# Decorator support is not available in this version of the SDK, to be re-introduced later\n", @@ -1017,14 +1015,14 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 98, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/__main__.py\n" + "Overwriting simple_imaging_app/__main__.py\n" ] } ], @@ -1038,15 +1036,15 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 99, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "app.py\t\t __main__.py\t sobel_operator.py\n", - "gaussian_operator.py median_operator.py\n" + "app.py\t gaussian_operator.py\tmedian_operator.py requirements.txt\n", + "app.yaml __main__.py\t\t__pycache__\t sobel_operator.py\n" ] } ], @@ -1068,94 +1066,92 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 100, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:08:26,105] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", - "[2025-01-29 12:08:26,111] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", - "[2025-01-29 12:08:26,111] [INFO] (root) - sample_data_path: /tmp/simple_app\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:03:12,662] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, triton_server_netloc=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", + "[2025-04-22 12:03:12,666] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 12:03:12,666] [INFO] (root) - sample_data_path: /tmp/simple_app\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "Input from: /tmp/simple_app, whose absolute path: /tmp/simple_app\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2025-01-29 12:08:26,149] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", + "[2025-04-22 12:03:12,705] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", "Number of times operator median_op whose class is defined in median_operator called: 1\n", "Number of times operator gaussian_op whose class is defined in gaussian_operator called: 1\n", "Data type of output: , max = 0.35821119421406195\n", "Data type of output post conversion: , max = 91\n", - "[2025-01-29 12:08:26,378] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", - "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", - "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", - "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", - "[2025-01-29 12:08:26,380] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", - "[2025-01-29 12:08:26,380] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", - "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", - "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", - "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", - "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", - "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", - "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", - "[2025-01-29 12:08:26,387] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", - "[2025-01-29 12:08:26,387] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", - "[2025-01-29 12:08:26,388] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", - "[2025-01-29 12:08:26,388] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", - "[2025-01-29 12:08:26,390] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", - "[2025-01-29 12:08:26,391] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", - "[2025-01-29 12:08:26,391] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", - "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", - "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", - "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", - "[2025-01-29 12:08:26,397] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", - "[2025-01-29 12:08:26,397] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", - "[2025-01-29 12:08:26,401] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", - "[2025-01-29 12:08:26,401] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", - "[2025-01-29 12:08:26,402] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", - "[2025-01-29 12:08:26,402] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", + "[2025-04-22 12:03:12,985] [DEBUG] (PIL.Image) - Importing AvifImagePlugin\n", + "[2025-04-22 12:03:12,986] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", + "[2025-04-22 12:03:12,990] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", + "[2025-04-22 12:03:12,993] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", + "[2025-04-22 12:03:12,993] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", + "[2025-04-22 12:03:12,995] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", + "[2025-04-22 12:03:12,995] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", + "[2025-04-22 12:03:12,995] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", + "[2025-04-22 12:03:12,996] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", + "[2025-04-22 12:03:12,996] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", + "[2025-04-22 12:03:12,997] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", + "[2025-04-22 12:03:12,997] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", + "[2025-04-22 12:03:12,997] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", + "[2025-04-22 12:03:13,001] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", + "[2025-04-22 12:03:13,003] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", + "[2025-04-22 12:03:13,003] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", + "[2025-04-22 12:03:13,003] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", + "[2025-04-22 12:03:13,004] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", + "[2025-04-22 12:03:13,004] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", + "[2025-04-22 12:03:13,006] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", + "[2025-04-22 12:03:13,006] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1166,30 +1162,30 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 101, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 20, + "execution_count": 101, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1212,13 +1208,6 @@ "## Packaging app" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "attachments": {}, "cell_type": "markdown", @@ -1231,14 +1220,14 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 102, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/app.yaml\n" + "Overwriting simple_imaging_app/app.yaml\n" ] } ], @@ -1261,22 +1250,21 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 103, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/requirements.txt\n" + "Overwriting simple_imaging_app/requirements.txt\n" ] } ], "source": [ "%%writefile simple_imaging_app/requirements.txt\n", "scikit-image\n", - "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue\n" + "setuptools>=59.5.0 # for pkg_resources\n" ] }, { @@ -1288,21 +1276,21 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 104, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:08:28,758] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 12:08:29,206] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 12:08:29,206] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", - "[2025-01-29 12:08:29,207] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 12:08:29,207] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", - "[2025-01-29 12:08:29,212] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 12:08:29,213] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 12:08:29,217] [DEBUG] (common) - \n", + "[2025-04-22 12:03:14,884] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 12:03:14,921] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 12:03:14,922] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", + "[2025-04-22 12:03:14,922] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 12:03:14,922] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", + "[2025-04-22 12:03:14,927] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 12:03:14,928] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 12:03:14,932] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1330,14 +1318,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"3.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 12:08:29,218] [DEBUG] (common) - \n", + "[2025-04-22 12:03:14,933] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1355,7 +1343,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 12:08:29,222] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:03:14,938] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml'),\n", @@ -1373,13 +1361,13 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '3.0.0',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1396,7 +1384,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 12:08:29,222] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:03:14,939] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -1406,15 +1394,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'simple_imaging_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 12:08:29,246] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:03:14,964] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1478,9 +1466,9 @@ "LABEL tag=\"simple_imaging_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Simple Imaging App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"3.0.0\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1493,7 +1481,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1552,7 +1540,7 @@ "# Install MONAI Deploy App SDK\n", "\n", "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", + "RUN pip install monai-deploy-app-sdk==3.0.0\n", "\n", "\n", "\n", @@ -1567,7 +1555,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 12:08:29,246] [INFO] (packager.builder) - \n", + "[2025-04-22 12:03:14,964] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1575,335 +1563,120 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", + " Holoscan SDK Package: 3.1.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 12:08:29,559] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 12:08:29,559] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 12:03:15,380] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 12:03:15,380] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", "#1 transferring dockerfile: 4.53kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", - "#2 DONE 0.0s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#2 DONE 0.1s\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#3 DONE 0.5s\n", + "#3 [internal] load .dockerignore\n", + "#3 transferring context: 1.80kB done\n", + "#3 DONE 0.1s\n", "\n", - "#4 [internal] load .dockerignore\n", - "#4 transferring context: 1.80kB done\n", - "#4 DONE 0.1s\n", + "#4 [internal] load build context\n", + "#4 DONE 0.0s\n", "\n", - "#5 [internal] load build context\n", + "#5 importing cache manifest from local:2851983977013277839\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", "#6 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", "#6 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#6 DONE 0.0s\n", + "#6 DONE 0.1s\n", "\n", - "#7 importing cache manifest from local:930277721408013411\n", - "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", - "#7 DONE 0.0s\n", + "#7 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#7 DONE 0.3s\n", "\n", - "#8 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#8 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#8 DONE 0.7s\n", + "#4 [internal] load build context\n", + "#4 transferring context: 24.82kB 0.0s done\n", + "#4 DONE 0.1s\n", "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 24.94kB 0.0s done\n", - "#5 DONE 0.1s\n", + "#8 [release 9/17] WORKDIR /var/holoscan\n", + "#8 CACHED\n", "\n", - "#9 [release 7/17] COPY ./tools /var/holoscan/tools\n", + "#9 [release 2/17] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#9 CACHED\n", "\n", - "#10 [release 5/17] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#10 CACHED\n", "\n", - "#11 [release 6/17] WORKDIR /var/holoscan\n", + "#11 [release 5/17] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#11 CACHED\n", "\n", - "#12 [release 2/17] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#12 [release 8/17] RUN chmod +x /var/holoscan/tools\n", "#12 CACHED\n", "\n", - "#13 [release 3/17] RUN groupadd -f -g 1000 holoscan\n", + "#13 [release 10/17] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#13 CACHED\n", "\n", - "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#14 [release 6/17] WORKDIR /var/holoscan\n", "#14 CACHED\n", "\n", "#15 [release 4/17] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#15 CACHED\n", "\n", - "#16 [release 8/17] RUN chmod +x /var/holoscan/tools\n", + "#16 [release 11/17] RUN pip install --upgrade pip\n", "#16 CACHED\n", "\n", "#17 [release 1/17] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#17 CACHED\n", "\n", - "#18 [release 9/17] WORKDIR /var/holoscan\n", + "#18 [release 7/17] COPY ./tools /var/holoscan/tools\n", "#18 CACHED\n", "\n", - "#19 [release 10/17] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#19 DONE 0.1s\n", - "\n", - "#20 [release 11/17] RUN pip install --upgrade pip\n", - "#20 0.754 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 0.787 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 0.944 Collecting pip\n", - "#20 1.016 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#20 1.091 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 27.0 MB/s eta 0:00:00\n", - "#20 1.121 Installing collected packages: pip\n", - "#20 1.914 Successfully installed pip-25.0\n", - "#20 DONE 2.1s\n", - "\n", - "#21 [release 12/17] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.746 Collecting scikit-image (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.765 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", - "#21 0.783 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 2)) (59.6.0)\n", - "#21 0.866 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 3))\n", - "#21 0.873 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.134 Collecting numpy>=1.24 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.139 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.257 Collecting scipy>=1.11.2 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.261 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.285 Collecting networkx>=3.0 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.290 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 1.462 Collecting pillow>=10.1 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.468 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.510 Collecting imageio!=2.35.0,>=2.33 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.514 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", - "#21 1.568 Collecting tifffile>=2022.8.12 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.572 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", - "#21 1.601 Collecting packaging>=21 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.605 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 1.618 Collecting lazy-loader>=0.4 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.622 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", - "#21 1.629 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3)) (25.0)\n", - "#21 1.650 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.655 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 1.674 Collecting numpy>=1.24 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.678 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.690 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.694 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 1.718 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.722 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.734 Collecting Jinja2<4.0,>=3.1.3 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.738 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 1.795 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.799 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 1.824 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.828 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 1.884 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.888 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 1.967 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.976 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.022 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.027 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.112 Collecting MarkupSafe>=2.0 (from Jinja2<4.0,>=3.1.3->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.116 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.265 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.269 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 2.282 Collecting typing-extensions (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.286 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 2.354 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.358 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 2.369 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.376 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 2.437 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.441 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 2.457 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.460 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 2.489 Collecting filelock (from wheel-axle-runtime<1.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.492 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 2.507 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.511 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 3.029 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 3.033 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 3.055 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", - "#21 3.185 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 120.3 MB/s eta 0:00:00\n", - "#21 3.193 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 3.660 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 89.5 MB/s eta 0:00:00\n", - "#21 3.668 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 3.677 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 4.557 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 103.5 MB/s eta 0:00:00\n", - "#21 4.566 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", - "#21 4.576 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 4.582 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", - "#21 4.589 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 4.605 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 124.4 MB/s eta 0:00:00\n", - "#21 4.610 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 4.771 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.4 MB/s eta 0:00:00\n", - "#21 4.778 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 4.785 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 4.825 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 116.1 MB/s eta 0:00:00\n", - "#21 4.830 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 4.840 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 4.849 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 4.859 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 124.1 MB/s eta 0:00:00\n", - "#21 4.865 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 4.870 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", - "#21 5.265 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 103.7 MB/s eta 0:00:00\n", - "#21 5.273 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", - "#21 5.280 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 5.286 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 5.291 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 5.299 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 5.304 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 5.309 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 5.315 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 5.323 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 5.344 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 110.5 MB/s eta 0:00:00\n", - "#21 5.352 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 5.357 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 5.363 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 5.370 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 6.034 Installing collected packages: fastrlock, urllib3, typing-extensions, pyyaml, psutil, pillow, packaging, numpy, networkx, MarkupSafe, idna, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, tifffile, scipy, requests, pydantic-core, lazy-loader, Jinja2, imageio, cupy-cuda12x, scikit-image, pydantic, python-on-whales, holoscan\n", - "#21 17.54 Successfully installed Jinja2-3.1.5 MarkupSafe-3.0.2 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 holoscan-2.9.0 idna-3.10 imageio-2.37.0 lazy-loader-0.4 networkx-3.4.2 numpy-1.26.4 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 scikit-image-0.25.1 scipy-1.15.1 tifffile-2025.1.10 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 19.4s\n", - "\n", - "#22 [release 13/17] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 0.791 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.999 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.009 WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))': /packages/fa/5a/e4bc7bad613a21b80d0d2835598af5ad82083cc076fec6f4d14c455d23eb/monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata\n", - "#22 1.021 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.039 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.041 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.079 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.089 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.176 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.181 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.206 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", - "#22 1.208 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.209 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.209 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.210 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.211 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.212 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.213 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.214 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.214 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.219 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.227 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.231 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.242 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 1.247 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.248 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.250 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.250 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.253 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 1.265 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 1.266 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 1.285 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.306 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.325 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 1.453 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 1.652 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.0s\n", - "\n", - "#23 [release 14/17] COPY ./map/app.json /etc/holoscan/app.json\n", - "#23 DONE 0.1s\n", - "\n", - "#24 [release 15/17] COPY ./app.config /var/holoscan/app.yaml\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/17] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#25 DONE 0.1s\n", - "\n", - "#26 [release 17/17] COPY ./app /opt/holoscan/app\n", - "#26 DONE 0.1s\n", - "\n", - "#27 exporting to docker image format\n", - "#27 exporting layers\n", - "#27 exporting layers 21.8s done\n", - "#27 exporting manifest sha256:53ff7da31e7d5c6946b56e187e574f38dcf580354efae32e00d50b4986bb3ea0 0.0s done\n", - "#27 exporting config sha256:a00c56131135404d07ea4a88014855a80f5a306b51d023abfe17aecad923f4f8 0.0s done\n", - "#27 sending tarball\n", - "#27 ...\n", - "\n", - "#28 importing to docker\n", - "#28 loading layer 9d60bef8e444 230B / 230B\n", - "#28 loading layer c90115fa1f34 65.54kB / 5.10MB\n", - "#28 loading layer 8c9e9b65f01e 557.06kB / 230.97MB\n", - "#28 loading layer 8c9e9b65f01e 42.89MB / 230.97MB 2.1s\n", - "#28 loading layer 8c9e9b65f01e 111.41MB / 230.97MB 4.1s\n", - "#28 loading layer 8c9e9b65f01e 145.95MB / 230.97MB 6.1s\n", - "#28 loading layer 8c9e9b65f01e 175.47MB / 230.97MB 8.2s\n", - "#28 loading layer 8c9e9b65f01e 213.91MB / 230.97MB 10.2s\n", - "#28 loading layer 78921c5c83a7 32.77kB / 578.02kB\n", - "#28 loading layer 2b15b8f81b52 491B / 491B\n", - "#28 loading layer 5b542f78e0ea 314B / 314B\n", - "#28 loading layer 59edd496942a 294B / 294B\n", - "#28 loading layer 318a06f5a29c 3.20kB / 3.20kB\n", - "#28 loading layer 318a06f5a29c 3.20kB / 3.20kB 0.2s done\n", - "#28 loading layer 9d60bef8e444 230B / 230B 12.6s done\n", - "#28 loading layer c90115fa1f34 65.54kB / 5.10MB 12.6s done\n", - "#28 loading layer 8c9e9b65f01e 213.91MB / 230.97MB 11.9s done\n", - "#28 loading layer 78921c5c83a7 32.77kB / 578.02kB 0.7s done\n", - "#28 loading layer 2b15b8f81b52 491B / 491B 0.5s done\n", - "#28 loading layer 5b542f78e0ea 314B / 314B 0.4s done\n", - "#28 loading layer 59edd496942a 294B / 294B 0.3s done\n", - "#28 DONE 12.6s\n", - "\n", - "#27 exporting to docker image format\n", - "#27 sending tarball 27.3s done\n", - "#27 DONE 49.1s\n", - "\n", - "#29 exporting cache to client directory\n", - "#29 preparing build cache for export\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#29 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#29 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#29 writing layer sha256:310210c018e9123f7e4dd12747f657a167962dc86770b58db1309651c1e4fff0 0.1s done\n", - "#29 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#29 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#29 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#29 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#29 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#29 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#29 writing layer sha256:6b55a0ece27da2213382510598c60a658a0090ecc1b77924381aa52e03dde663 0.0s done\n", - "#29 writing layer sha256:765c241f999d7e08875cebc322e3685bc995f5bcd51b1ae00e7a8d37d580c6d0\n", - "#29 writing layer sha256:765c241f999d7e08875cebc322e3685bc995f5bcd51b1ae00e7a8d37d580c6d0 4.1s done\n", - "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885\n", - "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#29 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#29 writing layer sha256:b6b7f5fd2c4d2a1139bf709d79900ce0959f21bbf09cd203ddf5a01540ca11cb 0.0s done\n", - "#29 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#29 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#29 writing layer sha256:c6e43c0a1312306b0a277e2331a8040cbcb07a7dd18c1818cab4890b7ea6d1fd 0.0s done\n", - "#29 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#29 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#29 writing layer sha256:d7bc8c1388631bfc461cb46725c245871c4e7c8b55d39dbcabe50c11e67ee6d8 0.0s done\n", - "#29 writing layer sha256:dcea0ee16845c3ea8a82f6e3ff8448f3ab26316873f456d68d26d1ea1cc48cae 0.0s done\n", - "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31\n", - "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#29 writing layer sha256:f22f9b836cbd9aef6d19af4591090720cabcc90d50397bde4bfb5df30c3c0074 0.1s done\n", - "#29 preparing build cache for export 4.7s done\n", - "#29 writing config sha256:a4f75b166426c5bb67adf94166174f47e6bbad714871ff611d617fc530aa5585 0.0s done\n", - "#29 writing cache manifest sha256:7f136b3980378eddd091fe709e3147397eee5acd8a045ed9aa3e46e605540a0d 0.0s done\n", - "#29 DONE 4.7s\n", - "[2025-01-29 12:09:49,701] [INFO] (packager) - Build Summary:\n", + "#19 [release 3/17] RUN groupadd -f -g 1000 holoscan\n", + "#19 CACHED\n", + "\n", + "#20 [release 12/17] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#20 CACHED\n", + "\n", + "#21 [release 13/17] RUN pip install monai-deploy-app-sdk==3.0.0\n", + "#21 0.756 Defaulting to user installation because normal site-packages is not writeable\n", + "#21 0.918 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "#21 1.066 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "#21 ERROR: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "------\n", + " > [release 13/17] RUN pip install monai-deploy-app-sdk==3.0.0:\n", + "0.756 Defaulting to user installation because normal site-packages is not writeable\n", + "0.918 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "1.066 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "------\n", + "Dockerfile:137\n", + "--------------------\n", + " 135 | \n", + " 136 | # Install MONAI Deploy from PyPI org\n", + " 137 | >>> RUN pip install monai-deploy-app-sdk==3.0.0\n", + " 138 | \n", + " 139 | \n", + "--------------------\n", + "ERROR: failed to solve: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "[2025-04-22 12:03:17,946] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", - " Status: Succeeded\n", - " Docker Tag: simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Tarball: None\n" + " Status: Failure\n", + " Error: Error building image: see Docker output for additional details.\n", + " \n" ] } ], "source": [ "tag_prefix = \"simple_imaging_app\"\n", "\n", - "!monai-deploy package simple_imaging_app -c simple_imaging_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package simple_imaging_app -c simple_imaging_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -1921,14 +1694,14 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 105, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 a00c56131135 55 seconds ago 2.98GB\n" + "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 ffe41584f515 2 hours ago 3.49GB\n" ] } ], @@ -1950,7 +1723,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 106, "metadata": {}, "outputs": [ { @@ -1986,7 +1759,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -2008,17 +1781,17 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-04-22 19:03:20 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 20:09:54 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 20:09:54 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-04-22 19:03:20 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-04-22 19:03:20 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-04-22 19:03:20 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", - "2025-01-29 20:09:54 [INFO] '/opt/holoscan/models' cannot be found.\n", + "2025-04-22 19:03:20 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-04-22 19:03:20 [INFO] '/opt/holoscan/models' cannot be found.\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 20:09:54 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-04-22 19:03:20 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-04-22 19:03:20 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config\n" ] @@ -2045,30 +1818,30 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 107, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:09:56,049] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 12:09:56,111] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpvqx0u9zd/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpvqx0u9zd/pkg.json\n", - "d89d96d29bdf06ffe093ea7a304454c174b70705e522d5cc48fcdc332533b32c\n", - "[2025-01-29 12:09:56,396] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 12:03:21,668] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmp743z7364/app.json\n", + "Successfully copied 2.05kB to /tmp/tmp743z7364/pkg.json\n", + "a1173c75c310b2aad23825b7ac8ec738134ee182f68590011dc0c8f3d3fb2853\n", + "[2025-04-22 12:03:21,918] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 12:09:56,396] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 12:03:21,918] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 12:09:56,655] [INFO] (common) - Launching container (cdaa371aba2f) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: zealous_bohr\n", + "[2025-04-22 12:03:22,256] [INFO] (common) - Launching container (652dede999f5) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: frosty_hofstadter\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2078,27 +1851,23 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 20:09:57 [INFO] Launching application python3 /opt/holoscan/app ...\n", - "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "2025-04-22 19:03:22 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2025-01-29 20:09:57,994] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[2025-01-29 20:09:57,995] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 20:09:57,995] [INFO] (root) - sample_data_path: /var/holoscan/input\n", + "[2025-04-22 19:03:23,790] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", + "[2025-04-22 19:03:23,790] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", + "[2025-04-22 19:03:23,790] [INFO] (root) - sample_data_path: /var/holoscan/input\n", "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "\n", @@ -2106,11 +1875,11 @@ "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[info] [gxf_executor.cpp:294] Destroying context\n", + "[info] [gxf_executor.cpp:295] Destroying context\n", "\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "\n", @@ -2124,7 +1893,7 @@ "\n", "Data type of output post conversion: , max = 91\n", "\n", - "[2025-01-29 12:09:58,979] [INFO] (common) - Container 'zealous_bohr'(cdaa371aba2f) exited.\n" + "[2025-04-22 12:03:24,743] [INFO] (common) - Container 'frosty_hofstadter'(652dede999f5) exited.\n" ] } ], @@ -2136,30 +1905,30 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 108, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 27, + "execution_count": 108, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] diff --git a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb index ef574499..eebaf896 100644 --- a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb +++ b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -28,12 +28,12 @@ "output_type": "stream", "text": [ "Cloning into 'source'...\n", - "remote: Enumerating objects: 281, done.\u001b[K\n", - "remote: Counting objects: 100% (281/281), done.\u001b[K\n", - "remote: Compressing objects: 100% (229/229), done.\u001b[K\n", - "remote: Total 281 (delta 59), reused 149 (delta 30), pack-reused 0 (from 0)\u001b[K\n", - "Receiving objects: 100% (281/281), 1.40 MiB | 13.06 MiB/s, done.\n", - "Resolving deltas: 100% (59/59), done.\n" + "remote: Enumerating objects: 314, done.\u001b[K\n", + "remote: Counting objects: 100% (314/314), done.\u001b[K\n", + "remote: Compressing objects: 100% (254/254), done.\u001b[K\n", + "remote: Total 314 (delta 71), reused 184 (delta 36), pack-reused 0 (from 0)\u001b[K\n", + "Receiving objects: 100% (314/314), 1.47 MiB | 3.95 MiB/s, done.\n", + "Resolving deltas: 100% (71/71), done.\n" ] } ], @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -70,45 +70,68 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (2.0.0)\n", + "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (0.5.1+37.g96f7e31.dirty)\n", "Requirement already satisfied: numpy>=1.21.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (1.26.4)\n", - "Requirement already satisfied: holoscan~=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (2.9.0)\n", + "Requirement already satisfied: holoscan~=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (3.1.0)\n", + "Requirement already satisfied: holoscan-cli~=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (3.1.0)\n", "Requirement already satisfied: colorama>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (0.4.6)\n", - "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.4.1)\n", - "Requirement already satisfied: pip>22.0.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (25.0)\n", - "Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (13.3.0)\n", - "Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.1)\n", - "Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.60.1)\n", - "Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.5)\n", - "Requirement already satisfied: packaging>=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (24.2)\n", - "Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.0.2)\n", - "Requirement already satisfied: requests<3.0,>=2.31.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (2.32.3)\n", - "Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.1.1)\n", - "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.0.6)\n", - "Requirement already satisfied: typing-extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.12.2)\n", - "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk) (0.8.3)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk) (3.0.2)\n", - "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.10.21)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (4.67.1)\n", - "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.15.1)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.4.1)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.10)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2.3.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2024.12.14)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk) (3.17.0)\n", - "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (8.1.8)\n", - "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.5.4)\n", - "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (13.9.4)\n", - "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (3.0.0)\n", - "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (2.19.1)\n", - "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.1.2)\n" + "Requirement already satisfied: tritonclient>=2.53.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.56.0)\n", + "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.4.2)\n", + "Requirement already satisfied: pip>22.0.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (25.0.1)\n", + "Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (13.4.1)\n", + "Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (3.1.1)\n", + "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (0.0.6)\n", + "Requirement already satisfied: Jinja2<4.0.0,>=3.1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (3.1.6)\n", + "Requirement already satisfied: packaging<24.0,>=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (23.2)\n", + "Requirement already satisfied: psutil<7.0.0,>=6.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (6.1.1)\n", + "Requirement already satisfied: python-on-whales<0.61.0,>=0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (0.60.1)\n", + "Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (6.0.2)\n", + "Requirement already satisfied: requests<3.0.0,>=2.31.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (2.32.3)\n", + "Requirement already satisfied: python-rapidjson>=0.9.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.20)\n", + "Requirement already satisfied: urllib3>=2.0.7 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.4.0)\n", + "Requirement already satisfied: aiohttp<4.0.0,>=3.8.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (3.11.18)\n", + "Requirement already satisfied: cuda-python in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (12.8.0)\n", + "Requirement already satisfied: geventhttpclient>=2.3.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.3.3)\n", + "Requirement already satisfied: grpcio<1.68,>=1.63.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.67.1)\n", + "Requirement already satisfied: protobuf<6.0dev,>=5.26.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (5.29.4)\n", + "Requirement already satisfied: typing_extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.13.2)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.6.1)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.3.2)\n", + "Requirement already satisfied: async-timeout<6.0,>=4.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (5.0.1)\n", + "Requirement already satisfied: attrs>=17.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (25.3.0)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.6.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (6.4.3)\n", + "Requirement already satisfied: propcache>=0.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (0.3.1)\n", + "Requirement already satisfied: yarl<2.0,>=1.17.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.20.0)\n", + "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=3.0->monai-deploy-app-sdk) (0.8.3)\n", + "Requirement already satisfied: gevent in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (25.4.1)\n", + "Requirement already satisfied: certifi in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2025.1.31)\n", + "Requirement already satisfied: brotli in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.1.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2<4.0.0,>=3.1.5->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.0.2)\n", + "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (1.10.21)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (4.67.1)\n", + "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (0.15.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.4.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.10)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=3.0->monai-deploy-app-sdk) (3.18.0)\n", + "Requirement already satisfied: cuda-bindings~=12.8.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cuda-python->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (12.8.0)\n", + "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (8.1.8)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (1.5.4)\n", + "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (14.0.0)\n", + "Requirement already satisfied: greenlet>=3.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (3.2.0)\n", + "Requirement already satisfied: zope.event in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (5.0)\n", + "Requirement already satisfied: zope.interface in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (7.2)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (2.19.1)\n", + "Requirement already satisfied: setuptools in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from zope.event->gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (79.0.0)\n", + "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (0.1.2)\n" ] } ], @@ -126,7 +149,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -134,14 +157,14 @@ "output_type": "stream", "text": [ "Requirement already satisfied: monai in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (1.4.0)\n", - "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (11.1.0)\n", + "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (11.2.1)\n", "Requirement already satisfied: numpy<2.0,>=1.24 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (1.26.4)\n", - "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.5.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.17.0)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.12.2)\n", + "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.6.0)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.18.0)\n", + "Requirement already satisfied: typing-extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.13.2)\n", "Requirement already satisfied: networkx in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.4.2)\n", - "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.5)\n", - "Requirement already satisfied: fsspec in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2024.12.0)\n", + "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.6)\n", + "Requirement already satisfied: fsspec in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2025.3.2)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", @@ -151,10 +174,11 @@ "Requirement already satisfied: nvidia-curand-cu12==10.3.5.147 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (10.3.5.147)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.6.1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.6.1.9)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.3.1.170 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.3.1.170)\n", + "Requirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (0.6.2)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2.21.5)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", - "Requirement already satisfied: triton==3.1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.0)\n", + "Requirement already satisfied: triton==3.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.2.0)\n", "Requirement already satisfied: sympy==1.13.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (1.13.1)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from sympy==1.13.1->torch>=1.9->monai) (1.3.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from jinja2->torch>=1.9->monai) (3.0.2)\n" @@ -179,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -193,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -233,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -269,456 +293,30 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:12:36,857] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 12:12:36,871] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 12:12:36,871] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", - "[2025-01-29 12:12:36,871] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2025-01-29 12:12:36,871] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-29 12:12:36,871] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-29 12:12:36,872] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", - "[2025-01-29 12:12:36,874] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 12:12:36,874] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 12:12:36,876] [DEBUG] (common) - \n", - "=============== Begin app.json ===============\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"command\": \"[\\\"python3\\\", \\\"/opt/holoscan/app/mednist_classifier_monaideploy.py\\\"]\",\n", - " \"environment\": {\n", - " \"HOLOSCAN_APPLICATION\": \"/opt/holoscan/app\",\n", - " \"HOLOSCAN_INPUT_PATH\": \"input/\",\n", - " \"HOLOSCAN_OUTPUT_PATH\": \"output/\",\n", - " \"HOLOSCAN_WORKDIR\": \"/var/holoscan\",\n", - " \"HOLOSCAN_MODEL_PATH\": \"/opt/holoscan/models\",\n", - " \"HOLOSCAN_CONFIG_PATH\": \"/var/holoscan/app.yaml\",\n", - " \"HOLOSCAN_APP_MANIFEST_PATH\": \"/etc/holoscan/app.json\",\n", - " \"HOLOSCAN_PKG_MANIFEST_PATH\": \"/etc/holoscan/pkg.json\",\n", - " \"HOLOSCAN_DOCS_PATH\": \"/opt/holoscan/docs\",\n", - " \"HOLOSCAN_LOGS_PATH\": \"/var/holoscan/logs\"\n", - " },\n", - " \"input\": {\n", - " \"path\": \"input/\",\n", - " \"formats\": null\n", - " },\n", - " \"liveness\": null,\n", - " \"output\": {\n", - " \"path\": \"output/\",\n", - " \"formats\": null\n", - " },\n", - " \"readiness\": null,\n", - " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", - " \"timeout\": 0,\n", - " \"version\": 1.0,\n", - " \"workingDirectory\": \"/var/holoscan\"\n", - "}\n", - "================ End app.json ================\n", - " \n", - "[2025-01-29 12:12:36,876] [DEBUG] (common) - \n", - "=============== Begin pkg.json ===============\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"applicationRoot\": \"/opt/holoscan/app\",\n", - " \"modelRoot\": \"/opt/holoscan/models\",\n", - " \"models\": {\n", - " \"model\": \"/opt/holoscan/models/model\"\n", - " },\n", - " \"resources\": {\n", - " \"cpu\": 1,\n", - " \"gpu\": 1,\n", - " \"memory\": \"1Gi\",\n", - " \"gpuMemory\": \"1Gi\"\n", - " },\n", - " \"version\": 1.0,\n", - " \"platformConfig\": \"dgpu\"\n", - "}\n", - "================ End pkg.json ================\n", - " \n", - "[2025-01-29 12:12:36,901] [DEBUG] (packager.builder) - \n", - "========== Begin Build Parameters ==========\n", - "{'additional_lib_paths': '',\n", - " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml'),\n", - " 'app_dir': PosixPath('/opt/holoscan/app'),\n", - " 'app_json': '/etc/holoscan/app.json',\n", - " 'application': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py'),\n", - " 'application_directory': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy'),\n", - " 'application_type': 'PythonFile',\n", - " 'build_cache': PosixPath('/home/mqin/.holoscan_build_cache'),\n", - " 'cmake_args': '',\n", - " 'command': '[\"python3\", '\n", - " '\"/opt/holoscan/app/mednist_classifier_monaideploy.py\"]',\n", - " 'command_filename': 'mednist_classifier_monaideploy.py',\n", - " 'config_file_path': PosixPath('/var/holoscan/app.yaml'),\n", - " 'docs_dir': PosixPath('/opt/holoscan/docs'),\n", - " 'full_input_path': PosixPath('/var/holoscan/input'),\n", - " 'full_output_path': PosixPath('/var/holoscan/output'),\n", - " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", - " 'includes': [],\n", - " 'input_dir': 'input/',\n", - " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", - " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", - " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", - " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", - " 'no_cache': False,\n", - " 'output_dir': 'output/',\n", - " 'pip_packages': None,\n", - " 'pkg_json': '/etc/holoscan/pkg.json',\n", - " 'requirements_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/requirements.txt'),\n", - " 'sdk': ,\n", - " 'sdk_type': 'monai-deploy',\n", - " 'tarball_output': None,\n", - " 'timeout': 0,\n", - " 'title': 'MONAI Deploy App Package - MedNIST Classifier App',\n", - " 'uid': 1000,\n", - " 'username': 'holoscan',\n", - " 'version': 1.0,\n", - " 'working_dir': PosixPath('/var/holoscan')}\n", - "=========== End Build Parameters ===========\n", - "\n", - "[2025-01-29 12:12:36,902] [DEBUG] (packager.builder) - \n", - "========== Begin Platform Parameters ==========\n", - "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", - " 'build_image': None,\n", - " 'cuda_deb_arch': 'x86_64',\n", - " 'custom_base_image': False,\n", - " 'custom_holoscan_sdk': False,\n", - " 'custom_monai_deploy_sdk': False,\n", - " 'gpu_type': 'dgpu',\n", - " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", - " 'monai_deploy_sdk_file': None,\n", - " 'monai_deploy_sdk_filename': None,\n", - " 'tag': 'mednist_app:1.0',\n", - " 'target_arch': 'x86_64'}\n", - "=========== End Platform Parameters ===========\n", - "\n", - "[2025-01-29 12:12:36,919] [DEBUG] (packager.builder) - \n", - "========== Begin Dockerfile ==========\n", - "\n", - "ARG GPU_TYPE=dgpu\n", - "\n", - "\n", - "\n", - "\n", - "FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04 AS base\n", - "\n", - "RUN apt-get update \\\n", - " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", - " curl \\\n", - " jq \\\n", - " && rm -rf /var/lib/apt/lists/*\n", - "\n", - "\n", - "\n", - "\n", - "# FROM base AS mofed-installer\n", - "# ARG MOFED_VERSION=23.10-2.1.3.1\n", - "\n", - "# # In a container, we only need to install the user space libraries, though the drivers are still\n", - "# # needed on the host.\n", - "# # Note: MOFED's installation is not easily portable, so we can't copy the output of this stage\n", - "# # to our final stage, but must inherit from it. For that reason, we keep track of the build/install\n", - "# # only dependencies in the `MOFED_DEPS` variable (parsing the output of `--check-deps-only`) to\n", - "# # remove them in that same layer, to ensure they are not propagated in the final image.\n", - "# WORKDIR /opt/nvidia/mofed\n", - "# ARG MOFED_INSTALL_FLAGS=\"--dpdk --with-mft --user-space-only --force --without-fw-update\"\n", - "# RUN UBUNTU_VERSION=$(cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d= -f2) \\\n", - "# && OFED_PACKAGE=\"MLNX_OFED_LINUX-${MOFED_VERSION}-ubuntu${UBUNTU_VERSION}-$(uname -m)\" \\\n", - "# && curl -S -# -o ${OFED_PACKAGE}.tgz -L \\\n", - "# https://www.mellanox.com/downloads/ofed/MLNX_OFED-${MOFED_VERSION}/${OFED_PACKAGE}.tgz \\\n", - "# && tar xf ${OFED_PACKAGE}.tgz \\\n", - "# && MOFED_INSTALLER=$(find . -name mlnxofedinstall -type f -executable -print) \\\n", - "# && MOFED_DEPS=$(${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} --check-deps-only 2>/dev/null | tail -n1 | cut -d' ' -f3-) \\\n", - "# && apt-get update \\\n", - "# && apt-get install --no-install-recommends -y ${MOFED_DEPS} \\\n", - "# && ${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} \\\n", - "# && rm -r * \\\n", - "# && apt-get remove -y ${MOFED_DEPS} && apt-get autoremove -y \\\n", - "# && rm -rf /var/lib/apt/lists/*\n", - "\n", - "FROM base AS release\n", - "ENV DEBIAN_FRONTEND=noninteractive\n", - "ENV TERM=xterm-256color\n", - "\n", - "ARG GPU_TYPE\n", - "ARG UNAME\n", - "ARG UID\n", - "ARG GID\n", - "\n", - "RUN mkdir -p /etc/holoscan/ \\\n", - " && mkdir -p /opt/holoscan/ \\\n", - " && mkdir -p /var/holoscan \\\n", - " && mkdir -p /opt/holoscan/app \\\n", - " && mkdir -p /var/holoscan/input \\\n", - " && mkdir -p /var/holoscan/output\n", - "\n", - "LABEL base=\"nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\"\n", - "LABEL tag=\"mednist_app:1.0\"\n", - "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", - "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", - "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", - "\n", - "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", - "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", - "ENV HOLOSCAN_WORKDIR=/var/holoscan\n", - "ENV HOLOSCAN_APPLICATION=/opt/holoscan/app\n", - "ENV HOLOSCAN_TIMEOUT=0\n", - "ENV HOLOSCAN_MODEL_PATH=/opt/holoscan/models\n", - "ENV HOLOSCAN_DOCS_PATH=/opt/holoscan/docs\n", - "ENV HOLOSCAN_CONFIG_PATH=/var/holoscan/app.yaml\n", - "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", - "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", - "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "# If torch is installed, we can skip installing Python\n", - "ENV PYTHON_VERSION=3.10.6-1~22.04\n", - "ENV PYTHON_PIP_VERSION=22.0.2+dfsg-*\n", - "\n", - "RUN apt update \\\n", - " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", - " python3-minimal=${PYTHON_VERSION} \\\n", - " libpython3-stdlib=${PYTHON_VERSION} \\\n", - " python3=${PYTHON_VERSION} \\\n", - " python3-venv=${PYTHON_VERSION} \\\n", - " python3-pip=${PYTHON_PIP_VERSION} \\\n", - " && rm -rf /var/lib/apt/lists/*\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "RUN groupadd -f -g $GID $UNAME\n", - "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", - "RUN chown -R holoscan /var/holoscan && \\\n", - " chown -R holoscan /var/holoscan/input && \\\n", - " chown -R holoscan /var/holoscan/output\n", - "\n", - "# Set the working directory\n", - "WORKDIR /var/holoscan\n", - "\n", - "# Copy HAP/MAP tool script\n", - "COPY ./tools /var/holoscan/tools\n", - "RUN chmod +x /var/holoscan/tools\n", - "\n", - "# Set the working directory\n", - "WORKDIR /var/holoscan\n", - "\n", - "USER $UNAME\n", - "\n", - "ENV PATH=/home/${UNAME}/.local/bin:/opt/nvidia/holoscan/bin:$PATH\n", - "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/${UNAME}/.local/lib/python3.10/site-packages/holoscan/lib\n", - "\n", - "COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "\n", - "RUN pip install --upgrade pip\n", - "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "\n", - "\n", - "# Install MONAI Deploy App SDK\n", - "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", - "\n", - "\n", - "COPY ./models /opt/holoscan/models\n", - "\n", - "\n", - "COPY ./map/app.json /etc/holoscan/app.json\n", - "COPY ./app.config /var/holoscan/app.yaml\n", - "COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "\n", - "COPY ./app /opt/holoscan/app\n", - "\n", - "\n", - "ENTRYPOINT [\"/var/holoscan/tools\"]\n", - "=========== End Dockerfile ===========\n", - "\n", - "[2025-01-29 12:12:36,920] [INFO] (packager.builder) - \n", - "===============================================================================\n", - "Building image for: x64-workstation\n", - " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - " Build Image: N/A\n", - " Cache: Enabled\n", - " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", - " MONAI Deploy App SDK Package: N/A\n", - " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", - " SDK: monai-deploy\n", - " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Included features/dependencies: N/A\n", - " \n", - "[2025-01-29 12:12:37,236] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 12:12:37,236] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", - "\n", - "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 4.57kB done\n", - "#1 DONE 0.1s\n", - "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 DONE 0.1s\n", - "\n", - "#3 [internal] load .dockerignore\n", - "#3 transferring context: 1.80kB done\n", - "#3 DONE 0.1s\n", - "\n", - "#4 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#4 ...\n", - "\n", - "#5 [internal] load build context\n", - "#5 DONE 0.0s\n", - "\n", - "#6 importing cache manifest from local:16465729945619348226\n", - "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#7 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#7 DONE 0.0s\n", - "\n", - "#4 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#4 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#4 DONE 0.4s\n", - "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 28.60MB 0.2s done\n", - "#5 DONE 0.3s\n", - "\n", - "#8 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", - "#8 CACHED\n", - "\n", - "#9 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#9 CACHED\n", - "\n", - "#10 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", - "#10 CACHED\n", - "\n", - "#11 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#11 CACHED\n", - "\n", - "#12 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#12 CACHED\n", - "\n", - "#13 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", - "#13 CACHED\n", - "\n", - "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", - "#14 CACHED\n", - "\n", - "#15 [release 9/18] WORKDIR /var/holoscan\n", - "#15 CACHED\n", - "\n", - "#16 [release 7/18] COPY ./tools /var/holoscan/tools\n", - "#16 CACHED\n", - "\n", - "#17 [release 6/18] WORKDIR /var/holoscan\n", - "#17 CACHED\n", - "\n", - "#18 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", - "#18 CACHED\n", - "\n", - "#19 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#19 CACHED\n", - "\n", - "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 CACHED\n", - "\n", - "#21 [release 8/18] RUN chmod +x /var/holoscan/tools\n", - "#21 CACHED\n", - "\n", - "#22 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#22 CACHED\n", - "\n", - "#23 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", - "#23 CACHED\n", - "\n", - "#24 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#24 CACHED\n", - "\n", - "#25 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", - "#25 CACHED\n", - "\n", - "#26 [release 18/18] COPY ./app /opt/holoscan/app\n", - "#26 CACHED\n", - "\n", - "#27 exporting to docker image format\n", - "#27 exporting layers done\n", - "#27 exporting manifest sha256:0b41598c260304f5f4973c45507027d6f6d311cf96b376966f1bb76389f67124 0.0s done\n", - "#27 exporting config sha256:709aec1f6ab81acd9aca94f56c56022d894fd418e507ce39c07cfa36c5d1df5e 0.0s done\n", - "#27 sending tarball\n", - "#27 ...\n", - "\n", - "#28 importing to docker\n", - "#28 DONE 0.3s\n", - "\n", - "#27 exporting to docker image format\n", - "#27 sending tarball 42.6s done\n", - "#27 DONE 42.6s\n", - "\n", - "#29 exporting cache to client directory\n", - "#29 preparing build cache for export\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", - "#29 preparing build cache for export 0.2s done\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#29 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#29 writing layer sha256:1aec4523578214a9e9ce44e1d35ef14baaa0adc445ee1d6c04b7a1410286be38 done\n", - "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#29 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#29 writing layer sha256:2662727f69a3c4fe16ed7b9563dc330c8e3d78c0e96c6f7452c9feebf4240230 done\n", - "#29 writing layer sha256:2c27de1203ae9e9310d46119db6142d91f2dc9f3696febdeda1f19fc94cc322e done\n", - "#29 writing layer sha256:2eab43e0230c8932e1ecc65ee0bfb04e09997d2fe628464a9aeee2e7c3342e70 done\n", - "#29 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#29 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#29 writing layer sha256:3d39307d2f870435b87759c9c8fc19aef39983c9770bacebcfcffe4995566ace done\n", - "#29 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#29 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#29 writing layer sha256:661c1acfe226bb081b6c704a60812b6478d91d96b5fd54809955559a13e1de7a done\n", - "#29 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#29 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#29 writing layer sha256:9c13069733b0b63267a044a5a9096728e6abacbc29bc2c95c5f612d18fddd5c0 done\n", - "#29 writing layer sha256:a86de304afb6316ba8fdb2348e518ea07b80a2bae0094710c44433a2f21f0179 done\n", - "#29 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#29 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#29 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#29 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#29 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#29 writing layer sha256:db35cf0f285944390b7654050f2f598898d655184084cf06a69ec9b97ce0aef7 done\n", - "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#29 writing config sha256:5dc9836ff3abdef93b2f148be23a0b066d0a7a2852c914b765917464c3015748 done\n", - "#29 writing cache manifest sha256:1010d1046d6cbc0e3d13f82a6ae20739105dc9f11c703119f1961a90c2f5851e done\n", - "#29 DONE 0.2s\n", - "[2025-01-29 12:13:21,748] [INFO] (packager) - Build Summary:\n", - "\n", - "Platform: x64-workstation/dgpu\n", - " Status: Succeeded\n", - " Docker Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Tarball: None\n" + "usage: monai-deploy package [-h] [-l {DEBUG,INFO,WARN,ERROR,CRITICAL}]\n", + " --config CONFIG [--docs DOCS] [--models MODELS]\n", + " --platform PLATFORM [--add ADDITIONAL_LIBS]\n", + " [--timeout TIMEOUT] [--version VERSION]\n", + " [--base-image BASE_IMAGE]\n", + " [--build-image BUILD_IMAGE]\n", + " [--includes [{debug,holoviz,torch,onnx} ...]]\n", + " [--build-cache BUILD_CACHE]\n", + " [--cmake-args CMAKE_ARGS]\n", + " [--holoscan-sdk-file HOLOSCAN_SDK_FILE]\n", + " [--monai-deploy-sdk-file MONAI_DEPLOY_SDK_FILE]\n", + " [--no-cache] [--sdk SDK] [--source SOURCE]\n", + " [--sdk-version SDK_VERSION] [--output OUTPUT]\n", + " --tag TAG [--username USERNAME] [--uid UID]\n", + " [--gid GID]\n", + " application\n", + "monai-deploy package: error: argument --platform: x64-workstation is not a valid option for --platforms.\n" ] } ], @@ -737,17 +335,9 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 9, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 709aec1f6ab8 19 hours ago 8.62GB\n" - ] - } - ], + "outputs": [], "source": [ "!docker image ls | grep {tag_prefix}" ] @@ -766,7 +356,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -774,70 +364,14 @@ "output_type": "stream", "text": [ "Display manifests and extract MAP contents to the host folder, ./export\n", + "Unable to find image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0' locally\n", + "docker: Error response from daemon: pull access denied for mednist_app-x64-workstation-dgpu-linux-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n", "\n", - "============================== app.json ==============================\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"command\": \"[\\\"python3\\\", \\\"/opt/holoscan/app/mednist_classifier_monaideploy.py\\\"]\",\n", - " \"environment\": {\n", - " \"HOLOSCAN_APPLICATION\": \"/opt/holoscan/app\",\n", - " \"HOLOSCAN_INPUT_PATH\": \"input/\",\n", - " \"HOLOSCAN_OUTPUT_PATH\": \"output/\",\n", - " \"HOLOSCAN_WORKDIR\": \"/var/holoscan\",\n", - " \"HOLOSCAN_MODEL_PATH\": \"/opt/holoscan/models\",\n", - " \"HOLOSCAN_CONFIG_PATH\": \"/var/holoscan/app.yaml\",\n", - " \"HOLOSCAN_APP_MANIFEST_PATH\": \"/etc/holoscan/app.json\",\n", - " \"HOLOSCAN_PKG_MANIFEST_PATH\": \"/etc/holoscan/pkg.json\",\n", - " \"HOLOSCAN_DOCS_PATH\": \"/opt/holoscan/docs\",\n", - " \"HOLOSCAN_LOGS_PATH\": \"/var/holoscan/logs\"\n", - " },\n", - " \"input\": {\n", - " \"path\": \"input/\",\n", - " \"formats\": null\n", - " },\n", - " \"liveness\": null,\n", - " \"output\": {\n", - " \"path\": \"output/\",\n", - " \"formats\": null\n", - " },\n", - " \"readiness\": null,\n", - " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", - " \"timeout\": 0,\n", - " \"version\": 1,\n", - " \"workingDirectory\": \"/var/holoscan\"\n", - "}\n", - "\n", - "============================== pkg.json ==============================\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"applicationRoot\": \"/opt/holoscan/app\",\n", - " \"modelRoot\": \"/opt/holoscan/models\",\n", - " \"models\": {\n", - " \"model\": \"/opt/holoscan/models/model\"\n", - " },\n", - " \"resources\": {\n", - " \"cpu\": 1,\n", - " \"gpu\": 1,\n", - " \"memory\": \"1Gi\",\n", - " \"gpuMemory\": \"1Gi\"\n", - " },\n", - " \"version\": 1,\n", - " \"platformConfig\": \"dgpu\"\n", - "}\n", - "\n", - "2025-01-29 20:13:24 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "Run 'docker run --help' for more information\n", + "Unable to find image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0' locally\n", + "docker: Error response from daemon: pull access denied for mednist_app-x64-workstation-dgpu-linux-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n", "\n", - "2025-01-29 20:13:24 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 20:13:24 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 20:13:24 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", - "\n", - "2025-01-29 20:13:24 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", - "\n", - "2025-01-29 20:13:24 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 20:13:24 [INFO] '/opt/holoscan/docs/' cannot be found.\n", - "\n", - "app config models\n" + "Run 'docker run --help' for more information\n" ] } ], @@ -860,92 +394,28 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:13:26,378] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", - "\n", - "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", - "\n", - "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", - "\n", - "[2025-01-29 12:13:26,457] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmp37cky0tg/app.json\n", - "Successfully copied 2.05kB to /tmp/tmp37cky0tg/pkg.json\n", - "8b09681d6e2452afa9a9506bd30dc868461412ea13e53a3913f9054fe877e4e0\n", - "[2025-01-29 12:13:26,739] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", - "\n", - "[2025-01-29 12:13:26,739] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", - "\n", - "[2025-01-29 12:13:27,109] [INFO] (common) - Launching container (6900c4ea8775) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: frosty_gould\n", - " host name: mingq-dt\n", - " network: host\n", - " user: 1000:1000\n", - " ulimits: memlock=-1:-1, stack=67108864:67108864\n", - " cap_add: CAP_SYS_PTRACE\n", - " ipc mode: host\n", - " shared memory size: 67108864\n", - " devices: \n", - " group_add: 44\n", - "2025-01-29 20:13:27 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + "[2025-04-22 10:01:00,178] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 10:01:00,178] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-04-22 10:01:00,179] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "[2025-04-22 10:01:00,179] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 20:13:32,718] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'])\n", - "\n", - "[2025-01-29 20:13:32,723] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", - "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", - "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", - "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - "\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", - "\n", - "[2025-01-29 20:13:34,583] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "\n", - "[2025-01-29 20:13:34,583] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "\n", - "[2025-01-29 20:13:34,586] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "\n", - "[2025-01-29 20:13:34,589] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.31374249995216483316246551805036524135.dcm\n", - "\n", - "[2025-01-29 20:13:34,590] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.31374249995216483316246551805036524135.dcm\n", - "\n", - "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "\n", - "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "\n", - "[info] [gxf_executor.cpp:294] Destroying context\n", - "\n", - "AbdomenCT\n", - "\n", - "[2025-01-29 12:13:35,983] [INFO] (common) - Container 'frosty_gould'(6900c4ea8775) exited.\n" + "[2025-04-22 10:01:00,206] [INFO] (common) - Attempting to pull image mednist_app-x64-workstation-dgpu-linux-amd64:1.0..\n", + "Error response from daemon: pull access denied for mednist_app-x64-workstation-dgpu-linux-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n", + "[2025-04-22 10:01:01,166] [ERROR] (common) - The docker command executed was `/usr/bin/docker image pull mednist_app-x64-workstation-dgpu-linux-amd64:1.0`.\n", + "It returned with code 1\n", + "The content of stdout can be found above the stacktrace (it wasn't captured).\n", + "The content of stderr can be found above the stacktrace (it wasn't captured).\n", + "[2025-04-22 10:01:01,166] [ERROR] (runner) - Unable to fetch required image.\n", + "[2025-04-22 10:01:01,167] [ERROR] (runner) - Execution Aborted\n" ] } ], @@ -957,14 +427,14 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\"AbdomenCT\"" + "cat: output/output.json: No such file or directory\n" ] } ], @@ -1010,7 +480,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -1041,7 +511,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -1112,7 +582,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -1251,7 +721,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -1302,31 +772,31 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:13:36,663] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 12:13:36,682] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:01:06,211] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 10:01:06,224] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", - "[2025-01-29 12:13:37,924] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:37,926] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:37,928] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - "[2025-01-29 12:13:37,936] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "[2025-01-29 12:13:37,945] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.73614944052626475782727074691876362838.dcm\n", - "[2025-01-29 12:13:37,958] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.73614944052626475782727074691876362838.dcm\n" + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:203.)\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", + "[2025-04-22 10:01:07,561] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:07,562] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:07,565] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + " warn_and_log(msg)\n", + "[2025-04-22 10:01:07,575] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-04-22 10:01:07,581] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.59762034317112105131069375575619402726.dcm\n", + "[2025-04-22 10:01:07,585] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.59762034317112105131069375575619402726.dcm\n" ] }, { @@ -1342,9 +812,9 @@ "text": [ "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[info] [gxf_executor.cpp:294] Destroying context\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[info] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1355,7 +825,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1389,7 +859,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -1399,7 +869,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -1664,63 +1134,59 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:13:46,068] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", - "[2025-01-29 12:13:46,073] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:01:12,273] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, triton_server_netloc=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", + "[2025-04-22 10:01:12,278] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=), triton_server_netloc=\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:203.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", - "[2025-01-29 12:13:47,618] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", + "[2025-04-22 10:01:13,572] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", "\n", - "[2025-01-29 12:13:47,618] [DEBUG] (root) - Writing DICOM common modules...\n", - "[2025-01-29 12:13:47,619] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:47,619] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:47,620] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "[2025-04-22 10:01:13,572] [DEBUG] (root) - Writing DICOM common modules...\n", + "[2025-04-22 10:01:13,573] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:13,573] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:13,574] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warn_and_log(msg)\n", - "[2025-01-29 12:13:47,626] [DEBUG] (root) - DICOM common modules written:\n", + "[2025-04-22 10:01:13,576] [DEBUG] (root) - DICOM common modules written:\n", "Dataset.file_meta -------------------------------\n", "(0002,0000) File Meta Information Group Length UL: 198\n", "(0002,0001) File Meta Information Version OB: b'01'\n", "(0002,0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", + "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", "(0002,0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002,0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002,0013) Implementation Version Name SH: '2.0.0'\n", + "(0002,0013) Implementation Version Name SH: '0.5.1+37.g96f7e'\n", "-------------------------------------------------\n", "(0008,0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008,0012) Instance Creation Date DA: '20250129'\n", - "(0008,0013) Instance Creation Time TM: '121347'\n", + "(0008,0012) Instance Creation Date DA: '20250422'\n", + "(0008,0013) Instance Creation Time TM: '100113'\n", "(0008,0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", - "(0008,0020) Study Date DA: '20250129'\n", - "(0008,0021) Series Date DA: '20250129'\n", - "(0008,0023) Content Date DA: '20250129'\n", - "(0008,002A) Acquisition DateTime DT: '20250129121347'\n", - "(0008,0030) Study Time TM: '121347'\n", - "(0008,0031) Series Time TM: '121347'\n", - "(0008,0033) Content Time TM: '121347'\n", + "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", + "(0008,0020) Study Date DA: '20250422'\n", + "(0008,0021) Series Date DA: '20250422'\n", + "(0008,0023) Content Date DA: '20250422'\n", + "(0008,002A) Acquisition DateTime DT: '20250422100113'\n", + "(0008,0030) Study Time TM: '100113'\n", + "(0008,0031) Series Time TM: '100113'\n", + "(0008,0033) Content Time TM: '100113'\n", "(0008,0050) Accession Number SH: ''\n", "(0008,0060) Modality CS: 'SR'\n", "(0008,0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", "(0008,0090) Referring Physician's Name PN: ''\n", - "(0008,0201) Timezone Offset From UTC SH: '-0800'\n", + "(0008,0201) Timezone Offset From UTC SH: '-0700'\n", "(0008,1030) Study Description LO: 'AI results.'\n", "(0008,103E) Series Description LO: 'CAUTION: Not for Diagnostic Use, for research use only.'\n", "(0008,1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", @@ -1730,7 +1196,7 @@ "(0010,0030) Patient's Birth Date DA: ''\n", "(0010,0040) Patient's Sex CS: ''\n", "(0018,0015) Body Part Examined CS: ''\n", - "(0018,1020) Software Versions LO: '2.0.0'\n", + "(0018,1020) Software Versions LO: '0.5.1+37.g96f7e'\n", "(0018,A001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008,0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008,1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1742,38 +1208,38 @@ " (0008,0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.46747993953820320366351594900569871942\n", - "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.86323530137357157956886829965721763612\n", + "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.21427650624285250793329047854027764031\n", + "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.53141607669515853472048821908030378483\n", "(0020,0010) Study ID SH: '1'\n", - "(0020,0011) Series Number IS: '5312'\n", + "(0020,0011) Series Number IS: '1679'\n", "(0020,0013) Instance Number IS: '1'\n", "(0040,1001) Requested Procedure ID SH: ''\n", - "[2025-01-29 12:13:47,627] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", + "[2025-04-22 10:01:13,577] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", "(0002,0000) File Meta Information Group Length UL: 198\n", "(0002,0001) File Meta Information Version OB: b'01'\n", "(0002,0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", + "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", "(0002,0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002,0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002,0013) Implementation Version Name SH: '2.0.0'\n", + "(0002,0013) Implementation Version Name SH: '0.5.1+37.g96f7e'\n", "-------------------------------------------------\n", "(0008,0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008,0012) Instance Creation Date DA: '20250129'\n", - "(0008,0013) Instance Creation Time TM: '121347'\n", + "(0008,0012) Instance Creation Date DA: '20250422'\n", + "(0008,0013) Instance Creation Time TM: '100113'\n", "(0008,0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", - "(0008,0020) Study Date DA: '20250129'\n", - "(0008,0021) Series Date DA: '20250129'\n", - "(0008,0023) Content Date DA: '20250129'\n", - "(0008,002A) Acquisition DateTime DT: '20250129121347'\n", - "(0008,0030) Study Time TM: '121347'\n", - "(0008,0031) Series Time TM: '121347'\n", - "(0008,0033) Content Time TM: '121347'\n", + "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", + "(0008,0020) Study Date DA: '20250422'\n", + "(0008,0021) Series Date DA: '20250422'\n", + "(0008,0023) Content Date DA: '20250422'\n", + "(0008,002A) Acquisition DateTime DT: '20250422100113'\n", + "(0008,0030) Study Time TM: '100113'\n", + "(0008,0031) Series Time TM: '100113'\n", + "(0008,0033) Content Time TM: '100113'\n", "(0008,0050) Accession Number SH: ''\n", "(0008,0060) Modality CS: 'SR'\n", "(0008,0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", "(0008,0090) Referring Physician's Name PN: ''\n", - "(0008,0201) Timezone Offset From UTC SH: '-0800'\n", + "(0008,0201) Timezone Offset From UTC SH: '-0700'\n", "(0008,1030) Study Description LO: 'AI results.'\n", "(0008,103E) Series Description LO: 'Not for clinical use. The result is for research use only.'\n", "(0008,1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", @@ -1783,7 +1249,7 @@ "(0010,0030) Patient's Birth Date DA: ''\n", "(0010,0040) Patient's Sex CS: ''\n", "(0018,0015) Body Part Examined CS: ''\n", - "(0018,1020) Software Versions LO: '2.0.0'\n", + "(0018,1020) Software Versions LO: '0.5.1+37.g96f7e'\n", "(0018,A001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008,0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008,1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1795,10 +1261,10 @@ " (0008,0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.46747993953820320366351594900569871942\n", - "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.86323530137357157956886829965721763612\n", + "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.21427650624285250793329047854027764031\n", + "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.53141607669515853472048821908030378483\n", "(0020,0010) Study ID SH: '1'\n", - "(0020,0011) Series Number IS: '5312'\n", + "(0020,0011) Series Number IS: '1679'\n", "(0020,0013) Instance Number IS: '1'\n", "(0040,1001) Requested Procedure ID SH: ''\n", "(0040,A040) Value Type CS: 'CONTAINER'\n", @@ -1819,14 +1285,14 @@ " ---------\n", " (0040,A160) Text Value UT: 'AbdomenCT'\n", " ---------\n", - "[2025-01-29 12:13:47,627] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "[2025-01-29 12:13:47,635] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428.dcm\n", - "[2025-01-29 12:13:47,636] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428.dcm\n", + "[2025-04-22 10:01:13,577] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-04-22 10:01:13,580] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229.dcm\n", + "[2025-04-22 10:01:13,581] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229.dcm\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1836,7 +1302,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1863,7 +1329,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -1893,7 +1359,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -1902,17 +1368,6 @@ "text": [ "Writing mednist_app/requirements.txt\n" ] - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", - "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", - "\u001b[1;31mClick here for more info. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -1922,8 +1377,7 @@ "pydicom>=2.3.0\n", "highdicom>=0.18.2\n", "SimpleITK>=2.0.0\n", - "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "setuptools>=59.5.0 # for pkg_resources\n" ] }, { diff --git a/notebooks/tutorials/02_mednist_app.ipynb b/notebooks/tutorials/02_mednist_app.ipynb index cb2371ae..f2ef775d 100644 --- a/notebooks/tutorials/02_mednist_app.ipynb +++ b/notebooks/tutorials/02_mednist_app.ipynb @@ -1201,7 +1201,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1219,13 +1219,12 @@ "pydicom>=2.3.0\n", "highdicom>=0.18.2\n", "SimpleITK>=2.0.0\n", - "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "setuptools>=59.5.0 # for pkg_resources\n" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1945,7 +1944,7 @@ "source": [ "tag_prefix = \"mednist_app\"\n", "\n", - "!monai-deploy package \"mednist_app/mednist_classifier_monaideploy.py\" -m {models_folder} -c \"mednist_app/app.yaml\" -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package \"mednist_app/mednist_classifier_monaideploy.py\" -m {models_folder} -c \"mednist_app/app.yaml\" -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { diff --git a/notebooks/tutorials/03_segmentation_app.ipynb b/notebooks/tutorials/03_segmentation_app.ipynb index ab0b9031..57886cc8 100644 --- a/notebooks/tutorials/03_segmentation_app.ipynb +++ b/notebooks/tutorials/03_segmentation_app.ipynb @@ -730,100 +730,113 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:30:17,208] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 14:30:17,220] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-29 14:30:17,222] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:06:42,869] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 10:06:42,879] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:06:42,880] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", - "[2025-01-29 14:30:17,274] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:30:17,612] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:30:17,613] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:06:42,916] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:06:43,413] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:06:43,414] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:30:17,614] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:17,614] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:17,615] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:30:17,616] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:17,617] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:30:17,618] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:30:17,619] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:17,620] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:17,622] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:30:17,623] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:17,624] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2025-01-29 14:30:17,625] [INFO] (root) - Series attribute ImageType value: None\n", - "[2025-01-29 14:30:17,626] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:18,261] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2025-01-29 14:30:18,262] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2025-01-29 14:30:18,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2025-01-29 14:30:18,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2025-01-29 14:30:18,265] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2025-01-29 14:30:18,266] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2025-01-29 14:30:18,268] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2025-01-29 14:30:18,269] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2025-01-29 14:30:18,271] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:18,272] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:18,273] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2025-01-29 14:30:18,275] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2025-01-29 14:30:18,276] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2025-01-29 14:30:18,277] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2025-01-29 14:30:18,279] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-04-22 10:06:43,416] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:43,417] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:43,418] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:06:43,420] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:43,421] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:06:43,422] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:06:43,426] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:43,427] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:43,429] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:43,430] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:43,432] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-04-22 10:06:43,434] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-04-22 10:06:43,436] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:43,437] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:06:43,438] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:43,438] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:43,669] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:06:43,735] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-04-22 10:06:43,737] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-04-22 10:06:43,737] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-04-22 10:06:43,738] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-04-22 10:06:43,739] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-04-22 10:06:43,739] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-04-22 10:06:43,740] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-04-22 10:06:43,740] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-04-22 10:06:43,741] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:43,742] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:43,743] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-04-22 10:06:43,744] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-04-22 10:06:43,745] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-04-22 10:06:43,746] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-04-22 10:06:43,747] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:18,282] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-04-22 10:06:43,749] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:18,283] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2025-01-29 14:30:18,284] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2025-01-29 14:30:18,285] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2025-01-29 14:30:18,286] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2025-01-29 14:30:18,290] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2025-01-29 14:30:18,291] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2025-01-29 14:30:18,292] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" + "[2025-04-22 10:06:43,750] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-04-22 10:06:43,751] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-04-22 10:06:43,754] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-04-22 10:06:43,755] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-04-22 10:06:43,756] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-04-22 10:06:43,757] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-04-22 10:06:43,758] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2025-01-29 14:30:19,501 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2025-01-29 14:30:23,998 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" + "2025-04-22 10:06:44,648 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[2025-01-29 14:30:26,134] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2025-01-29 14:30:26,142] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-04-22 10:06:46,578] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Input of shape: torch.Size([1, 1, 270, 270, 106])\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2025-04-22 10:06:47,732 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-04-22 10:06:49,272] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform length/batch size of output: 1\n", + "[2025-04-22 10:06:49,277] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pixel spacings for pred: tensor([0.7891, 0.7891, 1.5000], dtype=torch.float64)\n", + "[2025-04-22 10:06:49,408] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pred of shape: (1, 512, 512, 204)\n", + "[2025-04-22 10:06:49,448] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array of type shape: (204, 512, 512)\n", + "[2025-04-22 10:06:49,453] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:30:28,033] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:28,034] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:30:28,035] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:28,036] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:30:28,038] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:30:28,040] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:28,041] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:30:28,042] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:30:28,044] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:06:50,720] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:06:50,721] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:06:50,722] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:06:50,723] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:06:50,725] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:06:50,726] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:06:50,727] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:06:50,728] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:06:50,730] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:30:28,156] [INFO] (__main__.AISpleenSegApp) - End run\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:06:50,833] [INFO] (__main__.AISpleenSegApp) - End run\n" ] } ], @@ -1262,89 +1275,90 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:30:34,908] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2025-01-29 14:30:34,910] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-29 14:30:34,910] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:06:55,953] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['my_app'])\n", + "[2025-04-22 10:06:55,955] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:06:55,955] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", - "[2025-01-29 14:30:34,938] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:06:55,974] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:06:56,476] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:35,858] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2025-01-29 14:30:35,858] [INFO] (root) - Series attribute ImageType value: None\n", - "[2025-01-29 14:30:35,858] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:56,909] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", - "2025-01-29 14:30:37,548 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2025-01-29 14:30:41,063 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", - "[2025-01-29 14:30:42,975] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2025-01-29 14:30:42,981] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "2025-04-22 10:06:57,920 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "[2025-04-22 10:06:59,901] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Input of shape: torch.Size([1, 1, 270, 270, 106])\n", + "2025-04-22 10:07:00,973 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "[2025-04-22 10:07:02,569] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform length/batch size of output: 1\n", + "[2025-04-22 10:07:02,570] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pixel spacings for pred: tensor([0.7891, 0.7891, 1.5000], dtype=torch.float64)\n", + "[2025-04-22 10:07:02,697] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pred of shape: (1, 512, 512, 204)\n", + "[2025-04-22 10:07:02,820] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array of type shape: (204, 512, 512)\n", + "[2025-04-22 10:07:02,825] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:30:44,748] [INFO] (app.AISpleenSegApp) - End run\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:07:04,175] [INFO] (app.AISpleenSegApp) - End run\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1363,7 +1377,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.51643712983429462828738370758191766.dcm\n", + "1.2.826.0.1.3680043.10.511.3.17902633705887989912813743024111302.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", @@ -1447,8 +1461,7 @@ "pydicom>=2.3.0\n", "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", - "torch>=1.12.0\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "torch>=1.12.0\n" ] }, { @@ -1471,16 +1484,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 14:30:47,335] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 14:30:47,539] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 14:30:47,539] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-29 14:30:47,540] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 14:30:47,540] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-29 14:30:47,540] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-29 14:30:47,540] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-29 14:30:47,544] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 14:30:47,544] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 14:30:47,549] [DEBUG] (common) - \n", + "[2025-04-22 10:07:06,268] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 10:07:06,478] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 10:07:06,478] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-04-22 10:07:06,478] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 10:07:06,478] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-04-22 10:07:06,478] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-04-22 10:07:06,478] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-04-22 10:07:06,480] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 10:07:06,481] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 10:07:06,483] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1508,14 +1521,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 14:30:47,550] [DEBUG] (common) - \n", + "[2025-04-22 10:07:06,484] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1535,7 +1548,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 14:30:47,581] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:07:06,504] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1553,14 +1566,14 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '0.5.1',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1577,25 +1590,25 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 14:30:47,581] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:07:06,504] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", " 'cuda_deb_arch': 'x86_64',\n", " 'custom_base_image': False,\n", " 'custom_holoscan_sdk': False,\n", - " 'custom_monai_deploy_sdk': False,\n", + " 'custom_monai_deploy_sdk': True,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", - " 'monai_deploy_sdk_file': None,\n", - " 'monai_deploy_sdk_filename': None,\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", + " 'monai_deploy_sdk_file': PosixPath('/home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl'),\n", + " 'monai_deploy_sdk_filename': 'monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl',\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 14:30:47,602] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:07:06,521] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1659,9 +1672,9 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1674,7 +1687,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1731,10 +1744,9 @@ "\n", "\n", "# Install MONAI Deploy App SDK\n", - "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", - "\n", + "# Copy user-specified MONAI Deploy SDK file\n", + "COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", "\n", "COPY ./models /opt/holoscan/models\n", "\n", @@ -1749,7 +1761,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 14:30:47,602] [INFO] (packager.builder) - \n", + "[2025-04-22 10:07:06,522] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1757,27 +1769,27 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", - " MONAI Deploy App SDK Package: N/A\n", + " Holoscan SDK Package: 3.1.0\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 14:30:48,162] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 14:30:48,163] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 10:07:06,841] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 10:07:06,841] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 4.56kB done\n", + "#1 transferring dockerfile: 4.74kB done\n", "#1 DONE 0.1s\n", "\n", "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", "#2 DONE 0.0s\n", "\n", "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#3 DONE 0.5s\n", + "#3 DONE 0.4s\n", "\n", "#4 [internal] load .dockerignore\n", "#4 transferring context: 1.80kB done\n", @@ -1789,394 +1801,491 @@ "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from local:9689312761338090214\n", + "#7 importing cache manifest from local:9106061615573359344\n", "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#7 DONE 0.0s\n", "\n", "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#8 DONE 0.0s\n", + "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.1s done\n", + "#8 DONE 0.1s\n", "\n", "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#5 DONE 0.4s\n", + "#5 DONE 0.3s\n", "\n", "#6 [internal] load build context\n", - "#6 transferring context: 19.43MB 0.2s done\n", + "#6 transferring context: 19.58MB 0.1s done\n", "#6 DONE 0.3s\n", "\n", - "#9 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#9 [release 4/19] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#9 CACHED\n", "\n", - "#10 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#10 [release 5/19] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#11 [release 2/19] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#11 CACHED\n", "\n", - "#12 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#12 [release 3/19] RUN groupadd -f -g 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 6/18] WORKDIR /var/holoscan\n", + "#13 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#13 CACHED\n", "\n", - "#14 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#14 [release 1/19] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#14 CACHED\n", "\n", - "#15 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#15 [release 6/19] WORKDIR /var/holoscan\n", "#15 CACHED\n", "\n", - "#16 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#16 [release 7/19] COPY ./tools /var/holoscan/tools\n", "#16 CACHED\n", "\n", - "#17 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#17 [release 8/19] RUN chmod +x /var/holoscan/tools\n", "#17 CACHED\n", "\n", - "#18 [release 9/18] WORKDIR /var/holoscan\n", + "#18 [release 9/19] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#19 DONE 0.8s\n", - "\n", - "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 0.933 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 0.985 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 1.141 Collecting pip\n", - "#20 1.201 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#20 1.272 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 27.4 MB/s eta 0:00:00\n", - "#20 1.298 Installing collected packages: pip\n", - "#20 2.043 Successfully installed pip-25.0\n", + "#19 [release 10/19] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 DONE 1.4s\n", + "\n", + "#20 [release 11/19] RUN pip install --upgrade pip\n", + "#20 0.781 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.831 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 0.968 Collecting pip\n", + "#20 1.063 Downloading pip-25.0.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.220 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 12.3 MB/s eta 0:00:00\n", + "#20 1.247 Installing collected packages: pip\n", + "#20 1.992 Successfully installed pip-25.0.1\n", "#20 DONE 2.2s\n", "\n", - "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.735 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.749 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", - "#21 0.838 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 0.844 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 0.927 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 0.932 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.065 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.069 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.101 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.106 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.114 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.144 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.148 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.180 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.184 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.204 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.209 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.369 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.374 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.475 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.481 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 1.498 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.502 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 1.513 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.518 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.543 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.547 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 1.671 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.674 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 1.707 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.712 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 1.758 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.763 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 1.792 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.797 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 1.824 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.828 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 1.905 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.910 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 1.923 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.927 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 1.943 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.948 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 1.963 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.968 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 1.981 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.985 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 1.998 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.003 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.015 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.020 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.032 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.036 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.050 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.055 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.068 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.074 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", - "#21 2.085 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.090 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 2.103 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.107 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 2.119 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.123 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.141 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.147 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#21 2.169 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.174 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 2.211 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.215 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 2.224 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9)) (25.0)\n", - "#21 2.240 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.246 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 2.284 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.288 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 2.314 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.320 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 2.366 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.371 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 2.397 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.401 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.485 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.489 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 2.564 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.572 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.614 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.619 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.659 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.662 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.676 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 2.677 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 2.683 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 2.693 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 2.827 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.832 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 2.950 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.953 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 2.967 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.971 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 3.000 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.005 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 3.029 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.033 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.056 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.060 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 3.675 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.679 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 3.702 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", - "#21 3.720 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 91.2 MB/s eta 0:00:00\n", - "#21 3.727 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 3.742 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 133.6 MB/s eta 0:00:00\n", - "#21 3.748 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 3.779 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 118.0 MB/s eta 0:00:00\n", - "#21 3.787 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 3.945 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.2 MB/s eta 0:00:00\n", - "#21 3.955 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 3.979 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 116.7 MB/s eta 0:00:00\n", - "#21 3.988 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 4.526 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 98.5 MB/s eta 0:00:00\n", - "#21 4.536 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", - "#21 12.90 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 88.0 MB/s eta 0:00:00\n", - "#21 12.91 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 16.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 92.2 MB/s eta 0:00:00\n", - "#21 16.69 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 16.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 111.5 MB/s eta 0:00:00\n", - "#21 16.83 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 17.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 116.7 MB/s eta 0:00:00\n", - "#21 17.05 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 17.06 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 123.2 MB/s eta 0:00:00\n", - "#21 17.07 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 23.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 111.9 MB/s eta 0:00:00\n", - "#21 23.63 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 28.53 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 43.2 MB/s eta 0:00:00\n", - "#21 28.54 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 29.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 60.0 MB/s eta 0:00:00\n", - "#21 29.49 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 31.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 79.9 MB/s eta 0:00:00\n", - "#21 31.10 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 33.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 89.2 MB/s eta 0:00:00\n", - "#21 33.44 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", - "#21 34.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 111.4 MB/s eta 0:00:00\n", - "#21 34.80 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 36.81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 94.3 MB/s eta 0:00:00\n", - "#21 36.82 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 37.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 95.0 MB/s eta 0:00:00\n", - "#21 37.05 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 37.06 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 37.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 105.9 MB/s eta 0:00:00\n", - "#21 37.13 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", - "#21 40.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 82.0 MB/s eta 0:00:00\n", - "#21 40.23 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 40.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 113.5 MB/s eta 0:00:00\n", - "#21 40.60 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 40.61 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 41.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 104.0 MB/s eta 0:00:00\n", - "#21 41.49 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 41.50 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 41.51 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 41.51 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 41.56 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 117.2 MB/s eta 0:00:00\n", - "#21 41.56 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 41.58 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 41.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 114.3 MB/s eta 0:00:00\n", - "#21 41.62 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 41.63 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 41.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 153.4 MB/s eta 0:00:00\n", - "#21 41.64 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 41.65 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 41.66 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 41.67 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 41.67 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 41.68 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 41.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 124.5 MB/s eta 0:00:00\n", - "#21 41.71 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 41.72 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 41.72 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 41.73 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 41.73 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 41.74 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 41.75 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 116.8 MB/s eta 0:00:00\n", - "#21 41.75 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 41.76 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 41.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 116.5 MB/s eta 0:00:00\n", - "#21 41.78 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 41.79 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 54.16 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, requests, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, cupy-cuda12x, pydantic, nvidia-cusolver-cu12, highdicom, torch, python-on-whales, monai, holoscan\n", - "#21 123.1 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 importlib-resources-6.5.2 jinja2-3.1.5 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 124.4s\n", - "\n", - "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.361 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.564 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.579 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.602 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.604 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.647 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.652 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.725 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.731 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.768 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", - "#22 1.769 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.770 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.771 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.772 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.773 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.774 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.776 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.776 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.777 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.781 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.788 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.789 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.799 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 1.804 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.805 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.805 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.806 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.811 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 1.830 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 1.831 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 1.849 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.872 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.894 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 2.064 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 2.201 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.6s\n", - "\n", - "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.2s\n", - "\n", - "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", + "#21 [release 12/19] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 0.752 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.790 Downloading highdicom-0.25.1-py3-none-any.whl.metadata (5.0 kB)\n", + "#21 0.829 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.842 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.945 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.956 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.134 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.144 Downloading numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.183 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.195 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.203 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.236 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.247 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.295 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.307 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.462 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.474 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (8.9 kB)\n", + "#21 1.580 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.658 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.694 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.706 Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.723 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.734 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.773 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.784 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.865 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.876 Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 1.922 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.932 Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 1.984 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.995 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 2.036 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.046 Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.076 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.087 Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.150 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.163 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.182 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.194 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.220 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.232 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.266 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.277 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.303 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.316 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.343 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.355 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.376 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.389 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.415 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.427 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.455 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.467 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.486 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.499 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.522 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.535 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.561 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.574 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.599 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.612 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.640 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.653 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 2.688 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.699 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 2.734 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.745 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 2.771 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 2.771 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 2.783 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.798 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.868 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.879 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.896 Downloading highdicom-0.25.1-py3-none-any.whl (1.1 MB)\n", + "#21 2.925 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 52.9 MB/s eta 0:00:00\n", + "#21 2.944 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 2.962 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 125.9 MB/s eta 0:00:00\n", + "#21 2.976 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.029 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 70.7 MB/s eta 0:00:00\n", + "#21 3.043 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 3.293 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 74.5 MB/s eta 0:00:00\n", + "#21 3.311 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 3.347 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 74.4 MB/s eta 0:00:00\n", + "#21 3.360 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 4.004 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 81.9 MB/s eta 0:00:00\n", + "#21 4.020 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 11.28 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 102.9 MB/s eta 0:00:00\n", + "#21 11.30 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 15.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 102.0 MB/s eta 0:00:00\n", + "#21 15.10 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 15.23 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 113.9 MB/s eta 0:00:00\n", + "#21 15.25 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 15.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 115.1 MB/s eta 0:00:00\n", + "#21 15.48 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 15.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 240.5 MB/s eta 0:00:00\n", + "#21 15.51 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 21.44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 116.6 MB/s eta 0:00:00\n", + "#21 21.46 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 23.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 105.6 MB/s eta 0:00:00\n", + "#21 23.48 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 23.98 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 114.1 MB/s eta 0:00:00\n", + "#21 23.99 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 25.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 116.7 MB/s eta 0:00:00\n", + "#21 25.11 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 27.11 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 104.4 MB/s eta 0:00:00\n", + "#21 27.13 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 28.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 110.5 MB/s eta 0:00:00\n", + "#21 28.50 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 30.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 117.2 MB/s eta 0:00:00\n", + "#21 30.13 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 30.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 100.3 MB/s eta 0:00:00\n", + "#21 30.37 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 30.38 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 30.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 97.0 MB/s eta 0:00:00\n", + "#21 30.47 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 33.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 88.9 MB/s eta 0:00:00\n", + "#21 33.34 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 33.35 Downloading packaging-25.0-py3-none-any.whl (66 kB)\n", + "#21 33.37 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.6 MB)\n", + "#21 33.42 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 83.5 MB/s eta 0:00:00\n", + "#21 33.44 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 33.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 94.7 MB/s eta 0:00:00\n", + "#21 33.48 Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)\n", + "#21 33.50 Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n", + "#21 33.51 Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n", + "#21 33.53 Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "#21 33.54 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 33.56 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 91.2 MB/s eta 0:00:00\n", + "#21 33.58 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 33.59 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 33.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 126.9 MB/s eta 0:00:00\n", + "#21 40.78 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, typing-extensions, sympy, pydicom, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, fsspec, filelock, pyjpegls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, nvidia-cusolver-cu12, highdicom, torch, monai\n", + "#21 93.44 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 filelock-3.18.0 fsspec-2025.3.2 highdicom-0.25.1 importlib-resources-6.5.2 jinja2-3.1.6 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-25.0 pillow-11.2.1 pydicom-3.0.1 pyjpegls-1.4.0 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.13.2\n", + "#21 DONE 98.6s\n", + "\n", + "#22 [release 13/19] COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#22 DONE 0.3s\n", + "\n", + "#23 [release 14/19] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.726 Defaulting to user installation because normal site-packages is not writeable\n", + "#23 0.853 Processing /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.864 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (1.26.4)\n", + "#23 1.007 Collecting holoscan~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.044 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.0 kB)\n", + "#23 1.097 Collecting holoscan-cli~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.111 Downloading holoscan_cli-3.1.0-py3-none-any.whl.metadata (4.0 kB)\n", + "#23 1.185 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.196 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#23 1.272 Collecting tritonclient>=2.53.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.283 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl.metadata (2.8 kB)\n", + "#23 1.381 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.395 Downloading typeguard-4.4.2-py3-none-any.whl.metadata (3.8 kB)\n", + "#23 1.423 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (25.0.1)\n", + "#23 1.468 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.483 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", + "#23 1.553 Collecting cloudpickle<4.0,>=3.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.566 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#23 1.687 Collecting wheel-axle-runtime<1.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.702 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#23 1.726 Requirement already satisfied: Jinja2<4.0.0,>=3.1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.1.6)\n", + "#23 1.775 Collecting packaging<24.0,>=23.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.788 Downloading packaging-23.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#23 1.916 Collecting psutil<7.0.0,>=6.0.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.927 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 2.013 Collecting python-on-whales<0.61.0,>=0.60.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.025 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", + "#23 2.113 Collecting pyyaml<7.0,>=6.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.124 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#23 2.202 Collecting requests<3.0.0,>=2.31.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.213 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#23 2.352 Collecting python-rapidjson>=0.9.1 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.364 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 2.445 Collecting urllib3>=2.0.7 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.456 Downloading urllib3-2.4.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#23 2.887 Collecting aiohttp<4.0.0,>=3.8.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.898 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)\n", + "#23 2.991 Collecting cuda-python (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.002 Downloading cuda_python-12.8.0-py3-none-any.whl.metadata (15 kB)\n", + "#23 3.159 Collecting geventhttpclient>=2.3.3 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.170 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.7 kB)\n", + "#23 3.657 Collecting grpcio<1.68,>=1.63.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.669 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.9 kB)\n", + "#23 3.979 Collecting protobuf<6.0dev,>=5.26.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.990 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl.metadata (592 bytes)\n", + "#23 4.008 Requirement already satisfied: typing_extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (4.13.2)\n", + "#23 4.054 Collecting aiohappyeyeballs>=2.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.067 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)\n", + "#23 4.125 Collecting aiosignal>=1.1.2 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.138 Downloading aiosignal-1.3.2-py2.py3-none-any.whl.metadata (3.8 kB)\n", + "#23 4.199 Collecting async-timeout<6.0,>=4.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.212 Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)\n", + "#23 4.277 Collecting attrs>=17.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.289 Downloading attrs-25.3.0-py3-none-any.whl.metadata (10 kB)\n", + "#23 4.407 Collecting frozenlist>=1.1.1 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.417 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (16 kB)\n", + "#23 4.625 Collecting multidict<7.0,>=4.5 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.636 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.3 kB)\n", + "#23 4.722 Collecting propcache>=0.2.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.733 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (10 kB)\n", + "#23 5.044 Collecting yarl<2.0,>=1.17.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.055 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (72 kB)\n", + "#23 5.139 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.150 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#23 5.306 Collecting gevent (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.317 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 5.398 Collecting certifi (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.411 Downloading certifi-2025.1.31-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 5.486 Collecting brotli (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.498 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (5.5 kB)\n", + "#23 5.527 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0.0,>=3.1.5->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.0.2)\n", + "#23 5.679 Collecting pydantic<2,>=1.5 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.691 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", + "#23 5.793 Collecting tqdm (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.804 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "#23 5.917 Collecting typer>=0.4.1 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.928 Downloading typer-0.15.2-py3-none-any.whl.metadata (15 kB)\n", + "#23 6.053 Collecting charset-normalizer<4,>=2 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.064 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#23 6.138 Collecting idna<4,>=2.5 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.150 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#23 6.201 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.18.0)\n", + "#23 6.232 Collecting cuda-bindings~=12.8.0 (from cuda-python->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.247 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 6.352 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.363 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", + "#23 6.427 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.438 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "#23 6.530 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.540 Downloading rich-14.0.0-py3-none-any.whl.metadata (18 kB)\n", + "#23 6.781 Collecting greenlet>=3.2.0 (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.792 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (4.1 kB)\n", + "#23 6.843 Collecting zope.event (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.855 Downloading zope.event-5.0-py3-none-any.whl.metadata (4.4 kB)\n", + "#23 7.003 Collecting zope.interface (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.014 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (44 kB)\n", + "#23 7.104 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.116 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", + "#23 7.189 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.200 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 7.227 Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from zope.event->gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (59.6.0)\n", + "#23 7.259 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.271 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "#23 7.320 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#23 7.349 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl (39.8 MB)\n", + "#23 8.075 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 39.8/39.8 MB 55.3 MB/s eta 0:00:00\n", + "#23 8.089 Downloading holoscan_cli-3.1.0-py3-none-any.whl (72 kB)\n", + "#23 8.123 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl (14.4 MB)\n", + "#23 8.397 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.4/14.4 MB 53.1 MB/s eta 0:00:00\n", + "#23 8.411 Downloading typeguard-4.4.2-py3-none-any.whl (35 kB)\n", + "#23 8.442 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB)\n", + "#23 8.495 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 29.5 MB/s eta 0:00:00\n", + "#23 8.509 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#23 8.541 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl (104.6 MB)\n", + "#23 10.27 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.6/104.6 MB 60.5 MB/s eta 0:00:00\n", + "#23 10.28 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (112 kB)\n", + "#23 10.32 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)\n", + "#23 10.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.9/5.9 MB 53.1 MB/s eta 0:00:00\n", + "#23 10.44 Downloading packaging-23.2-py3-none-any.whl (53 kB)\n", + "#23 10.47 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl (319 kB)\n", + "#23 10.51 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 10.54 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", + "#23 10.57 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)\n", + "#23 10.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 33.7 MB/s eta 0:00:00\n", + "#23 10.63 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#23 10.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 18.4 MB/s eta 0:00:00\n", + "#23 10.68 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#23 10.71 Downloading urllib3-2.4.0-py3-none-any.whl (128 kB)\n", + "#23 10.74 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#23 10.77 Downloading cuda_python-12.8.0-py3-none-any.whl (11 kB)\n", + "#23 10.80 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)\n", + "#23 10.83 Downloading aiosignal-1.3.2-py2.py3-none-any.whl (7.6 kB)\n", + "#23 10.87 Downloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)\n", + "#23 10.90 Downloading attrs-25.3.0-py3-none-any.whl (63 kB)\n", + "#23 10.93 Downloading certifi-2025.1.31-py3-none-any.whl (166 kB)\n", + "#23 10.97 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#23 11.00 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB)\n", + "#23 11.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 57.7 MB/s eta 0:00:00\n", + "#23 11.22 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#23 11.25 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 11.29 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#23 11.32 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (219 kB)\n", + "#23 11.35 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206 kB)\n", + "#23 11.39 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", + "#23 11.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 45.0 MB/s eta 0:00:00\n", + "#23 11.48 Downloading typer-0.15.2-py3-none-any.whl (45 kB)\n", + "#23 11.51 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (333 kB)\n", + "#23 11.54 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (3.0 MB)\n", + "#23 11.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 45.0 MB/s eta 0:00:00\n", + "#23 11.63 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB)\n", + "#23 11.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 39.6 MB/s eta 0:00:00\n", + "#23 11.70 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "#23 11.73 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", + "#23 11.77 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (580 kB)\n", + "#23 11.80 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 580.6/580.6 kB 14.2 MB/s eta 0:00:00\n", + "#23 11.81 Downloading rich-14.0.0-py3-none-any.whl (243 kB)\n", + "#23 11.85 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", + "#23 11.88 Downloading zope.event-5.0-py3-none-any.whl (6.8 kB)\n", + "#23 11.91 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254 kB)\n", + "#23 11.94 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", + "#23 11.97 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", + "#23 12.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 28.2 MB/s eta 0:00:00\n", + "#23 12.03 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "#23 12.84 Installing collected packages: fastrlock, cuda-bindings, brotli, zope.interface, zope.event, wheel-axle-runtime, urllib3, typeguard, tqdm, shellingham, pyyaml, python-rapidjson, pygments, pydantic, psutil, protobuf, propcache, packaging, multidict, mdurl, idna, grpcio, greenlet, frozenlist, cupy-cuda12x, cuda-python, colorama, cloudpickle, click, charset-normalizer, certifi, attrs, async-timeout, aiohappyeyeballs, yarl, tritonclient, requests, markdown-it-py, holoscan, gevent, aiosignal, rich, geventhttpclient, aiohttp, typer, python-on-whales, holoscan-cli, monai-deploy-app-sdk\n", + "#23 14.78 Attempting uninstall: packaging\n", + "#23 14.78 Found existing installation: packaging 25.0\n", + "#23 14.79 Uninstalling packaging-25.0:\n", + "#23 14.81 Successfully uninstalled packaging-25.0\n", + "#23 19.62 Successfully installed aiohappyeyeballs-2.6.1 aiohttp-3.11.18 aiosignal-1.3.2 async-timeout-5.0.1 attrs-25.3.0 brotli-1.1.0 certifi-2025.1.31 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-3.1.1 colorama-0.4.6 cuda-bindings-12.8.0 cuda-python-12.8.0 cupy-cuda12x-13.4.1 fastrlock-0.8.3 frozenlist-1.6.0 gevent-25.4.1 geventhttpclient-2.3.3 greenlet-3.2.1 grpcio-1.67.1 holoscan-3.1.0 holoscan-cli-3.1.0 idna-3.10 markdown-it-py-3.0.0 mdurl-0.1.2 monai-deploy-app-sdk-0.5.1+37.g96f7e31.dirty multidict-6.4.3 packaging-23.2 propcache-0.3.1 protobuf-5.29.4 psutil-6.1.1 pydantic-1.10.21 pygments-2.19.1 python-on-whales-0.60.1 python-rapidjson-1.20 pyyaml-6.0.2 requests-2.32.3 rich-14.0.0 shellingham-1.5.4 tqdm-4.67.1 tritonclient-2.56.0 typeguard-4.4.2 typer-0.15.2 urllib3-2.4.0 wheel-axle-runtime-0.0.6 yarl-1.20.0 zope.event-5.0 zope.interface-7.2\n", + "#23 DONE 21.6s\n", + "\n", + "#24 [release 15/19] COPY ./models /opt/holoscan/models\n", + "#24 DONE 0.3s\n", + "\n", + "#25 [release 16/19] COPY ./map/app.json /etc/holoscan/app.json\n", "#25 DONE 0.1s\n", "\n", - "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 [release 17/19] COPY ./app.config /var/holoscan/app.yaml\n", "#26 DONE 0.1s\n", "\n", - "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", + "#27 [release 18/19] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#27 DONE 0.1s\n", "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 203.4s done\n", - "#28 exporting manifest sha256:089e3612567f5b5a28edd5e2ffd6ddf01264ddbcdc641694b12620fdbfa40828 0.0s done\n", - "#28 exporting config sha256:a863c524e0de40b25e7e8b519c4009196f543dc45dde5399124c1f9317a67b4e 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer 4dfc251f5c56 289B / 289B\n", - "#29 loading layer 74089dc02aa9 65.54kB / 5.10MB\n", - "#29 loading layer efdd29e523f7 557.06kB / 3.34GB\n", - "#29 loading layer efdd29e523f7 159.32MB / 3.34GB 6.4s\n", - "#29 loading layer efdd29e523f7 330.33MB / 3.34GB 10.4s\n", - "#29 loading layer efdd29e523f7 557.06MB / 3.34GB 16.6s\n", - "#29 loading layer efdd29e523f7 797.70MB / 3.34GB 20.7s\n", - "#29 loading layer efdd29e523f7 1.01GB / 3.34GB 24.7s\n", - "#29 loading layer efdd29e523f7 1.25GB / 3.34GB 28.9s\n", - "#29 loading layer efdd29e523f7 1.45GB / 3.34GB 33.0s\n", - "#29 loading layer efdd29e523f7 1.74GB / 3.34GB 37.1s\n", - "#29 loading layer efdd29e523f7 1.95GB / 3.34GB 41.1s\n", - "#29 loading layer efdd29e523f7 2.17GB / 3.34GB 45.2s\n", - "#29 loading layer efdd29e523f7 2.31GB / 3.34GB 51.9s\n", - "#29 loading layer efdd29e523f7 2.53GB / 3.34GB 58.0s\n", - "#29 loading layer efdd29e523f7 2.74GB / 3.34GB 62.1s\n", - "#29 loading layer efdd29e523f7 3.03GB / 3.34GB 66.3s\n", - "#29 loading layer efdd29e523f7 3.21GB / 3.34GB 72.4s\n", - "#29 loading layer 47536db86449 32.77kB / 578.01kB\n", - "#29 loading layer 56926067dc15 196.61kB / 17.81MB\n", - "#29 loading layer a90406bd7fe1 492B / 492B\n", - "#29 loading layer 04571d3d4439 315B / 315B\n", - "#29 loading layer 6f5c809ef192 302B / 302B\n", - "#29 loading layer b97e5e112e3f 3.94kB / 3.94kB\n", - "#29 loading layer 04571d3d4439 315B / 315B 0.5s done\n", - "#29 loading layer 4dfc251f5c56 289B / 289B 78.7s done\n", - "#29 loading layer 74089dc02aa9 65.54kB / 5.10MB 78.6s done\n", - "#29 loading layer efdd29e523f7 3.25GB / 3.34GB 78.1s done\n", - "#29 loading layer 47536db86449 32.77kB / 578.01kB 1.2s done\n", - "#29 loading layer 56926067dc15 196.61kB / 17.81MB 0.9s done\n", - "#29 loading layer a90406bd7fe1 492B / 492B 0.6s done\n", - "#29 loading layer 6f5c809ef192 302B / 302B 0.4s done\n", - "#29 loading layer b97e5e112e3f 3.94kB / 3.94kB 0.4s done\n", - "#29 DONE 78.7s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 123.2s done\n", - "#28 DONE 326.7s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:05b02574544ba690caa3ab6304a23e2eb00610e44ca586c3f6045abe235d4886\n", - "#30 writing layer sha256:05b02574544ba690caa3ab6304a23e2eb00610e44ca586c3f6045abe235d4886 0.0s done\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#30 writing layer sha256:0e0b90cb6cbd645ccffb017000cd0ff199c69273a69425adf3ccd1ebb3f573aa 0.0s done\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#30 writing layer sha256:69f904b6c73e074809a57dc05803a5c6c37f5baf25e7fb407edc341511a2f9ba\n", - "#30 writing layer sha256:69f904b6c73e074809a57dc05803a5c6c37f5baf25e7fb407edc341511a2f9ba 49.2s done\n", - "#30 writing layer sha256:7420a5aefb199de2dd8aa67797672d53bafd18356d3bf7a2f1aec1f67f86020b\n", - "#30 writing layer sha256:7420a5aefb199de2dd8aa67797672d53bafd18356d3bf7a2f1aec1f67f86020b 0.0s done\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:a7292bbf42d93ed9fca9e2ff7e5283d2e7f737dad14092919db7645628bb0838 0.0s done\n", - "#30 writing layer sha256:a8560dc90723760d8d4daf42b22f7760b034c87e9348697c113118b992d830ca 0.1s done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:b2d7a44feb1d1dd34b73842e1048b1b2ee32c381943f40f9ee7d3945b9818b09 0.0s done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:bdb033062d61ab2282e08a5a8fcaee9d08e5c93b46d0b1d9b5f378b458e4ea07 0.0s done\n", - "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing layer sha256:fa35667ed3d919e87dc31994d8dfd51eab483c48ae72fb0ad2ab83e2b544c7c3\n", - "#30 writing layer sha256:fa35667ed3d919e87dc31994d8dfd51eab483c48ae72fb0ad2ab83e2b544c7c3 0.3s done\n", - "#30 preparing build cache for export 50.1s done\n", - "#30 writing config sha256:dff8a5cdb36509e072452e50bce7b5a26df3d17fd6570f7f4ab9dc79ea47e02e 0.0s done\n", - "#30 writing cache manifest sha256:bf6b0dabb704fd0021d37ae93daa4ad6ff38ef9d7b58d131e90451dbbcdcd709 0.0s done\n", - "#30 DONE 50.1s\n", - "[2025-01-29 14:39:18,007] [INFO] (packager) - Build Summary:\n", + "#28 [release 19/19] COPY ./app /opt/holoscan/app\n", + "#28 DONE 0.1s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 exporting layers\n", + "#29 exporting layers 175.3s done\n", + "#29 exporting manifest sha256:f63297f6525a89f74b13e561b30821ab4985a18db4b815eb995ac1aed030557b 0.0s done\n", + "#29 exporting config sha256:7266e968de607504eff9dfbb7c4e0c00adf190678ce9232099aab9c0d2d1cb24 0.0s done\n", + "#29 sending tarball\n", + "#29 ...\n", + "\n", + "#30 importing to docker\n", + "#30 loading layer 481caafed616 251B / 251B\n", + "#30 loading layer e39cf4d7d38e 65.54kB / 5.09MB\n", + "#30 loading layer 3795307a2740 557.06kB / 3.20GB\n", + "#30 loading layer 3795307a2740 130.91MB / 3.20GB 6.2s\n", + "#30 loading layer 3795307a2740 278.53MB / 3.20GB 12.4s\n", + "#30 loading layer 3795307a2740 483.52MB / 3.20GB 16.5s\n", + "#30 loading layer 3795307a2740 677.94MB / 3.20GB 20.7s\n", + "#30 loading layer 3795307a2740 851.18MB / 3.20GB 24.8s\n", + "#30 loading layer 3795307a2740 1.06GB / 3.20GB 31.0s\n", + "#30 loading layer 3795307a2740 1.25GB / 3.20GB 35.1s\n", + "#30 loading layer 3795307a2740 1.48GB / 3.20GB 39.2s\n", + "#30 loading layer 3795307a2740 1.70GB / 3.20GB 43.3s\n", + "#30 loading layer 3795307a2740 1.91GB / 3.20GB 47.5s\n", + "#30 loading layer 3795307a2740 2.07GB / 3.20GB 51.6s\n", + "#30 loading layer 3795307a2740 2.17GB / 3.20GB 57.8s\n", + "#30 loading layer 3795307a2740 2.25GB / 3.20GB 64.8s\n", + "#30 loading layer 3795307a2740 2.49GB / 3.20GB 71.1s\n", + "#30 loading layer 3795307a2740 2.70GB / 3.20GB 75.2s\n", + "#30 loading layer 3795307a2740 2.88GB / 3.20GB 81.4s\n", + "#30 loading layer 3795307a2740 3.05GB / 3.20GB 87.4s\n", + "#30 loading layer 14bfd28d96ba 32.77kB / 144.30kB\n", + "#30 loading layer 643060716c54 557.06kB / 398.53MB\n", + "#30 loading layer 643060716c54 155.42MB / 398.53MB 2.1s\n", + "#30 loading layer 643060716c54 223.38MB / 398.53MB 4.2s\n", + "#30 loading layer 643060716c54 259.59MB / 398.53MB 6.2s\n", + "#30 loading layer 643060716c54 338.13MB / 398.53MB 8.4s\n", + "#30 loading layer 643060716c54 391.61MB / 398.53MB 10.5s\n", + "#30 loading layer bccb4e460f68 196.61kB / 17.81MB\n", + "#30 loading layer 61be03e60d84 492B / 492B\n", + "#30 loading layer aeec4a674fef 315B / 315B\n", + "#30 loading layer 54cba3cb0592 301B / 301B\n", + "#30 loading layer 462f716907a1 3.91kB / 3.91kB\n", + "#30 loading layer 462f716907a1 3.91kB / 3.91kB 0.4s done\n", + "#30 loading layer 481caafed616 251B / 251B 105.8s done\n", + "#30 loading layer e39cf4d7d38e 5.09MB / 5.09MB 105.7s done\n", + "#30 loading layer 3795307a2740 3.20GB / 3.20GB 105.1s done\n", + "#30 loading layer 14bfd28d96ba 144.30kB / 144.30kB 12.5s done\n", + "#30 loading layer 643060716c54 398.53MB / 398.53MB 12.4s done\n", + "#30 loading layer bccb4e460f68 17.81MB / 17.81MB 0.9s done\n", + "#30 loading layer 61be03e60d84 492B / 492B 0.6s done\n", + "#30 loading layer aeec4a674fef 315B / 315B 0.5s done\n", + "#30 loading layer 54cba3cb0592 301B / 301B 0.4s done\n", + "#30 DONE 105.8s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 sending tarball 135.1s done\n", + "#29 DONE 310.5s\n", + "\n", + "#31 exporting cache to client directory\n", + "#31 preparing build cache for export\n", + "#31 writing layer sha256:0081cdb9958a9d50332b830133ae001192a5065ac4f0e3c095b3a1d5d5ff0265\n", + "#31 writing layer sha256:0081cdb9958a9d50332b830133ae001192a5065ac4f0e3c095b3a1d5d5ff0265 0.0s done\n", + "#31 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#31 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#31 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#31 writing layer sha256:287e630d01a5fdd05d03906401ef55472af7d087036f46dbc2bd8e3922500d1a 0.0s done\n", + "#31 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#31 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#31 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", + "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#31 writing layer sha256:5b90b93bdc8509aa597670e5542315cfcf5e462fd5f032cd9f20105de9574874\n", + "#31 writing layer sha256:5b90b93bdc8509aa597670e5542315cfcf5e462fd5f032cd9f20105de9574874 50.6s done\n", + "#31 writing layer sha256:60aea8801e5272305832cc3e60cd84c63f0d58d80a872b7357356957d261c574\n", + "#31 writing layer sha256:60aea8801e5272305832cc3e60cd84c63f0d58d80a872b7357356957d261c574 0.0s done\n", + "#31 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#31 writing layer sha256:78f2accaffaf576042c7ebead20caa88db32984713ae7e35691a3be4f3301d0c\n", + "#31 writing layer sha256:78f2accaffaf576042c7ebead20caa88db32984713ae7e35691a3be4f3301d0c 7.9s done\n", + "#31 writing layer sha256:7f9be78d50c54946e6e71991e35dd38adb2967f404f207bcc854e528571f923c\n", + "#31 writing layer sha256:7f9be78d50c54946e6e71991e35dd38adb2967f404f207bcc854e528571f923c 0.0s done\n", + "#31 writing layer sha256:935b4cb3480886ca00a46c28cd98797870cfc7389818c85cd243869f4548fda4 done\n", + "#31 writing layer sha256:95dbda2f5f8116a35367b28d397faae7d34bd4a713aefe01ccfe5e326b0b0250 done\n", + "#31 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#31 writing layer sha256:9ebe27a7cf7d039e6f4d4b82e9f34985c02f5dca091fa01f4585191f6facaec1 0.0s done\n", + "#31 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#31 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#31 writing layer sha256:d0b9db5eaf93e490f07bab8abb1ac5475febcf822c25f2e1d1c82ff4273a7d0d done\n", + "#31 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#31 writing layer sha256:da44fb0aa6d6f7c651c7eec8e11510c9c048b066b2ba36b261cefea12ff5ee3e done\n", + "#31 writing layer sha256:dd250fa54efc49bc2c03cccb8d3a56ebf8ce96ad291d924e6ead2036c0d251da\n", + "#31 writing layer sha256:dd250fa54efc49bc2c03cccb8d3a56ebf8ce96ad291d924e6ead2036c0d251da 0.4s done\n", + "#31 writing layer sha256:dec17c052060552bd6c5810c57aa0195e7c9776da97eeb16984d2f31a35d816b\n", + "#31 writing layer sha256:dec17c052060552bd6c5810c57aa0195e7c9776da97eeb16984d2f31a35d816b 0.0s done\n", + "#31 writing layer sha256:e7cb8fb70ca3287e6c873a5263dfc4f8e333b6f965e6027a24a5f4b6fdc89a69 0.1s done\n", + "#31 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31\n", + "#31 preparing build cache for export 59.4s done\n", + "#31 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#31 writing layer sha256:f3af93a430a247328c59fb2228f6fa43a0ce742b03464db94acf7c45311e31cd done\n", + "#31 writing config sha256:ae0dee53261b5588107aa98a4ac08135ba44a7551d5ee93e258b0bbe7f352c58 0.0s done\n", + "#31 writing cache manifest sha256:c2e62667fa04d787de4d2de795baa75004e61b473a5ab4129713ad2d397c78b8 0.0s done\n", + "#31 DONE 59.4s\n", + "[2025-04-22 10:15:23,826] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -2188,7 +2297,7 @@ "source": [ "tag_prefix = \"my_app\"\n", "\n", - "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -2209,7 +2318,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 a863c524e0de 6 minutes ago 8.63GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 7266e968de60 6 minutes ago 9.07GB\n" ] } ], @@ -2237,23 +2346,23 @@ "text": [ "output\n", "dcm\n", - "[2025-01-29 14:39:20,640] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 10:15:26,072] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 10:15:26,072] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 10:15:26,074] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 10:15:26,074] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 14:39:20,713] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpguo6yiqf/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpguo6yiqf/pkg.json\n", - "2f1c2c8df19c8ecc58cc0d8136bdd27b4143e88c67da72b5340f86b49eec22bb\n", - "[2025-01-29 14:39:21,151] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 10:15:26,152] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpxd644i6e/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpxd644i6e/pkg.json\n", + "3e8dc45282382e26bf37bf8ab8bafbfe8a12c219cfb364cc1a38bc3c645bcbf8\n", + "[2025-04-22 10:15:26,569] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 14:39:21,152] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 10:15:26,579] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 14:39:21,443] [INFO] (common) - Launching container (d6429624e9ee) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: relaxed_zhukovsky\n", + "[2025-04-22 10:15:27,009] [INFO] (common) - Launching container (81398038b14f) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: youthful_pare\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2263,103 +2372,97 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 22:39:22 [INFO] Launching application python3 /opt/holoscan/app ...\n", - "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "2025-04-22 17:15:27 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2025-01-29 22:39:28,954] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[2025-01-29 22:39:28,960] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 22:39:28,961] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", + "[2025-04-22 17:15:33,511] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[2025-04-22 17:15:33,514] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[2025-04-22 17:15:33,514] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[2025-04-22 17:15:33,524] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", + " # of series: 1\n", "\n", - "[2025-01-29 22:39:29,005] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - " # of series: 1\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute ImageType value: None\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series Selection finalized.\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:39:29,929] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:15:34,270] [INFO] (root) - Casting to float32\n", "\n", - "[2025-01-29 22:39:30,619] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", "\n", " [ 0. 0.7890625 0. -398.60547 ]\n", "\n", @@ -2367,7 +2470,7 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", "\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", "\n", @@ -2375,63 +2478,71 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "2025-04-22 17:15:35,292 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-04-22 17:15:37,261] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Input of shape: torch.Size([1, 1, 270, 270, 106])\n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "2025-04-22 17:15:39,032 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "[2025-04-22 17:15:40,582] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform length/batch size of output: 1\n", "\n", - "2025-01-29 22:39:31,772 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "[2025-04-22 17:15:40,587] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pixel spacings for pred: tensor([0.7891, 0.7891, 1.5000], dtype=torch.float64)\n", "\n", - "2025-01-29 22:39:36,704 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "[2025-04-22 17:15:40,719] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pred of shape: (1, 512, 512, 204)\n", "\n", - "[2025-01-29 22:39:38,595] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2025-04-22 17:15:40,758] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array of type shape: (204, 512, 512)\n", "\n", - "[2025-01-29 22:39:38,601] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-04-22 17:15:40,763] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " check_person_name(patient_name)\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-29 22:39:40,099] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 17:15:41,999] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[2025-01-29 22:39:40,203] [INFO] (app.AISpleenSegApp) - End run\n", + "[2025-04-22 17:15:42,103] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[info] [gxf_executor.cpp:294] Destroying context\n", + "[info] [gxf_executor.cpp:295] Destroying context\n", "\n", - "[2025-01-29 14:39:42,029] [INFO] (common) - Container 'relaxed_zhukovsky'(d6429624e9ee) exited.\n" + "[2025-04-22 10:15:44,346] [INFO] (common) - Container 'youthful_pare'(81398038b14f) exited.\n" ] } ], @@ -2453,7 +2564,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.9998962080747738621710125447135664.dcm\n", + "1.2.826.0.1.3680043.10.511.3.89222091780069825813597121405605044.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", diff --git a/notebooks/tutorials/04_monai_bundle_app.ipynb b/notebooks/tutorials/04_monai_bundle_app.ipynb index 4dccc832..671377ce 100644 --- a/notebooks/tutorials/04_monai_bundle_app.ipynb +++ b/notebooks/tutorials/04_monai_bundle_app.ipynb @@ -612,62 +612,57 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:44:44,206] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 14:44:44,212] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-29 14:44:44,222] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:18:02,158] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 10:18:02,166] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:18:02,176] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", - "[2025-01-29 14:44:44,263] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:44:44,616] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:44:44,617] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:18:02,203] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:18:02,743] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:18:02,744] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:44:44,618] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:44:44,618] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:44:44,619] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:44:44,620] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:44:44,621] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:44:44,622] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:44:44,623] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:44:44,627] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:44:44,629] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:44:44,630] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:44:44,632] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:44:45,069] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2025-04-22 10:18:02,745] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:02,746] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:02,746] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:18:02,747] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:02,748] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:18:02,748] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:18:02,749] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:02,750] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:02,751] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:02,752] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:02,753] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:02,753] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:18:02,754] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:02,755] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:02,968] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:18:03,025] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 14:44:48,663] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2025-01-29 14:44:50,440] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2025-01-29 14:44:50,441] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-04-22 10:18:06,025] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2025-04-22 10:18:07,405] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-04-22 10:18:07,406] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:45:02,816] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:02,817] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:45:02,819] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:02,821] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:45:02,824] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:45:02,827] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:02,829] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:45:02,832] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:45:02,836] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:18:17,835] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:17,836] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:18:17,837] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:17,838] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:18:17,839] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:18:17,839] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:17,840] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:18:17,841] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:18:17,842] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:45:03,007] [INFO] (__main__.AISpleenSegApp) - End run\n", - "[2025-01-29 14:45:03,009] [INFO] (root) - End __main__\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:18:17,958] [INFO] (__main__.AISpleenSegApp) - End run\n", + "[2025-04-22 10:18:17,960] [INFO] (root) - End __main__\n" ] } ], @@ -968,61 +963,56 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:45:09,784] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", - "[2025-01-29 14:45:09,786] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[2025-01-29 14:45:09,788] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:18:22,991] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, triton_server_netloc=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", + "[2025-04-22 10:18:22,993] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:18:22,994] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", - "[2025-01-29 14:45:09,806] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:45:10,337] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:18:23,011] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:45:10,638] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:23,535] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:18:23,592] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 14:45:14,192] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", - "[2025-01-29 14:45:15,947] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2025-01-29 14:45:15,947] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-04-22 10:18:26,690] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", + "[2025-04-22 10:18:28,072] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-04-22 10:18:28,072] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:45:28,464] [INFO] (app.AISpleenSegApp) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:18:38,554] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1040,7 +1030,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.48925922417984937382434580199910089.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.141985674848102250562862177103472.dcm stl\n" ] } ], @@ -1114,10 +1104,14 @@ "scikit-image>=0.17.2\n", "numpy-stl>=2.12.0\n", "trimesh>=3.8.11\n", - "torch>=1.12.0\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "torch>=1.12.0\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -1138,16 +1132,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 14:45:31,019] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 14:45:31,266] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 14:45:31,267] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-29 14:45:31,267] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 14:45:31,267] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-29 14:45:31,267] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-29 14:45:31,267] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-29 14:45:31,271] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 14:45:31,271] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 14:45:31,277] [DEBUG] (common) - \n", + "[2025-04-22 10:18:40,556] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 10:18:40,770] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 10:18:40,771] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-04-22 10:18:40,771] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 10:18:40,771] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-04-22 10:18:40,772] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-04-22 10:18:40,772] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-04-22 10:18:40,776] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 10:18:40,776] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 10:18:40,780] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1175,14 +1169,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 14:45:31,278] [DEBUG] (common) - \n", + "[2025-04-22 10:18:40,781] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1202,7 +1196,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 14:45:31,305] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:18:40,804] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1220,14 +1214,14 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '0.5.1',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1244,25 +1238,25 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 14:45:31,305] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:18:40,805] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", " 'cuda_deb_arch': 'x86_64',\n", " 'custom_base_image': False,\n", " 'custom_holoscan_sdk': False,\n", - " 'custom_monai_deploy_sdk': False,\n", + " 'custom_monai_deploy_sdk': True,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", - " 'monai_deploy_sdk_file': None,\n", - " 'monai_deploy_sdk_filename': None,\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", + " 'monai_deploy_sdk_file': PosixPath('/home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl'),\n", + " 'monai_deploy_sdk_filename': 'monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl',\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 14:45:31,336] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:18:40,822] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1326,9 +1320,9 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1341,7 +1335,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1398,10 +1392,9 @@ "\n", "\n", "# Install MONAI Deploy App SDK\n", - "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", - "\n", + "# Copy user-specified MONAI Deploy SDK file\n", + "COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", "\n", "COPY ./models /opt/holoscan/models\n", "\n", @@ -1416,7 +1409,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 14:45:31,336] [INFO] (packager.builder) - \n", + "[2025-04-22 10:18:40,822] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1424,40 +1417,37 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", - " MONAI Deploy App SDK Package: N/A\n", + " Holoscan SDK Package: 3.1.0\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 14:45:31,944] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 14:45:31,944] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 10:18:41,210] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 10:18:41,210] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 4.56kB done\n", + "#1 transferring dockerfile: 4.74kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 ...\n", + "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#2 DONE 0.0s\n", "\n", - "#3 [auth] nvidia/cuda:pull token for nvcr.io\n", - "#3 DONE 0.0s\n", - "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 DONE 0.5s\n", + "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#3 DONE 0.5s\n", "\n", "#4 [internal] load .dockerignore\n", "#4 transferring context: 1.80kB done\n", "#4 DONE 0.1s\n", "\n", - "#5 [internal] load build context\n", + "#5 importing cache manifest from local:3932312145486245041\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 importing cache manifest from local:6099231199924646769\n", - "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", @@ -1468,410 +1458,505 @@ "#8 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", "#8 DONE 0.3s\n", "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 19.43MB 0.2s done\n", - "#5 DONE 0.5s\n", + "#6 [internal] load build context\n", + "#6 transferring context: 19.58MB 0.1s done\n", + "#6 DONE 0.5s\n", "\n", - "#9 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#9 [release 4/19] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#9 CACHED\n", "\n", - "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#10 [release 5/19] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#11 [release 3/19] RUN groupadd -f -g 1000 holoscan\n", "#11 CACHED\n", "\n", - "#12 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#12 [release 6/19] WORKDIR /var/holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#13 [release 7/19] COPY ./tools /var/holoscan/tools\n", "#13 CACHED\n", "\n", - "#14 [release 6/18] WORKDIR /var/holoscan\n", + "#14 [release 8/19] RUN chmod +x /var/holoscan/tools\n", "#14 CACHED\n", "\n", - "#15 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#15 [release 1/19] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#15 CACHED\n", "\n", - "#16 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#16 [release 2/19] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#16 CACHED\n", "\n", - "#17 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#17 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#17 CACHED\n", "\n", - "#18 [release 9/18] WORKDIR /var/holoscan\n", + "#18 [release 9/19] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 [release 10/19] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#19 DONE 0.2s\n", "\n", - "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 1.108 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 1.137 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 1.383 Collecting pip\n", - "#20 1.456 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#20 1.577 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 15.8 MB/s eta 0:00:00\n", - "#20 1.600 Installing collected packages: pip\n", - "#20 2.543 Successfully installed pip-25.0\n", - "#20 DONE 2.8s\n", - "\n", - "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.685 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.699 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", - "#21 0.720 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 0.725 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 0.855 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 0.914 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.079 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.083 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.099 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.105 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.110 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.137 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.141 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.200 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.205 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", - "#21 1.235 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.239 Downloading numpy_stl-3.2.0-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.324 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", - "#21 1.330 Downloading trimesh-4.6.0-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.385 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", - "#21 1.389 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.407 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 12))\n", - "#21 1.412 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.583 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.587 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.607 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.612 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 1.624 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.628 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 1.640 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.644 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.675 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.680 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 1.725 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.731 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 1.831 Collecting scipy>=1.11.2 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.836 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.860 Collecting networkx>=3.0 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.864 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 1.891 Collecting imageio!=2.35.0,>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.896 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", - "#21 1.950 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.953 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", - "#21 1.970 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.974 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", - "#21 1.992 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", - "#21 1.997 Downloading python_utils-3.9.1-py2.py3-none-any.whl.metadata (9.8 kB)\n", - "#21 2.029 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.033 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 2.050 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.054 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 2.074 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.078 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 2.125 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.129 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.140 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.144 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.155 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.158 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.170 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.174 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.183 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.187 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.198 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.202 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.212 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.216 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.227 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.230 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.242 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.246 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.255 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.258 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", - "#21 2.272 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.276 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 2.293 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.301 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 2.317 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.322 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.333 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.337 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#21 2.352 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.355 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 2.380 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.384 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 2.391 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12)) (25.0)\n", - "#21 2.403 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.407 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 2.475 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.479 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 2.500 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.504 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 2.580 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.585 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 2.636 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.640 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.746 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.750 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 2.761 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.765 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.804 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.810 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.856 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.860 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.884 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 2.885 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 2.889 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 2.896 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.012 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.017 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 3.106 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.110 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 3.124 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.129 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 3.155 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.159 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 3.184 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.189 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.226 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.230 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 3.817 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.822 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 3.848 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", - "#21 3.863 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 104.9 MB/s eta 0:00:00\n", - "#21 3.868 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 3.886 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 115.5 MB/s eta 0:00:00\n", - "#21 3.896 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 3.928 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 116.2 MB/s eta 0:00:00\n", - "#21 3.934 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 4.103 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 112.1 MB/s eta 0:00:00\n", - "#21 4.112 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 4.141 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 95.7 MB/s eta 0:00:00\n", - "#21 4.151 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 4.640 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 108.5 MB/s eta 0:00:00\n", - "#21 4.649 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", - "#21 4.803 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 98.1 MB/s eta 0:00:00\n", - "#21 4.811 Downloading numpy_stl-3.2.0-py3-none-any.whl (20 kB)\n", - "#21 4.816 Downloading trimesh-4.6.0-py3-none-any.whl (706 kB)\n", - "#21 4.826 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 707.0/707.0 kB 141.2 MB/s eta 0:00:00\n", - "#21 4.833 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", - "#21 12.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 84.6 MB/s eta 0:00:00\n", - "#21 12.83 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 15.99 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 114.6 MB/s eta 0:00:00\n", - "#21 15.99 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 16.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.7 MB/s eta 0:00:00\n", - "#21 16.13 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 16.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.6 MB/s eta 0:00:00\n", - "#21 16.34 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 16.36 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 127.5 MB/s eta 0:00:00\n", - "#21 16.36 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 22.23 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 109.9 MB/s eta 0:00:00\n", - "#21 22.24 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 24.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 104.8 MB/s eta 0:00:00\n", - "#21 24.27 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 24.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 114.1 MB/s eta 0:00:00\n", - "#21 24.77 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 25.91 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 112.5 MB/s eta 0:00:00\n", - "#21 25.92 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 27.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 115.7 MB/s eta 0:00:00\n", - "#21 27.73 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", - "#21 29.05 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 114.0 MB/s eta 0:00:00\n", - "#21 29.06 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 30.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 116.5 MB/s eta 0:00:00\n", - "#21 30.69 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 30.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.2 MB/s eta 0:00:00\n", - "#21 30.89 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 30.89 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 30.95 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 116.5 MB/s eta 0:00:00\n", - "#21 30.96 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", - "#21 33.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 100.3 MB/s eta 0:00:00\n", - "#21 33.50 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 33.96 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 89.8 MB/s eta 0:00:00\n", - "#21 33.96 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 33.97 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 35.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 86.0 MB/s eta 0:00:00\n", - "#21 35.03 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", - "#21 35.04 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 35.05 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 35.05 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", - "#21 35.06 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 35.08 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 121.0 MB/s eta 0:00:00\n", - "#21 35.08 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 35.09 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 35.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 117.8 MB/s eta 0:00:00\n", - "#21 35.14 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 35.15 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 35.18 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 117.6 MB/s eta 0:00:00\n", - "#21 35.19 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 35.19 Downloading python_utils-3.9.1-py2.py3-none-any.whl (32 kB)\n", - "#21 35.20 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 35.21 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 148.8 MB/s eta 0:00:00\n", - "#21 35.21 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 35.22 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", - "#21 35.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 117.2 MB/s eta 0:00:00\n", - "#21 35.57 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", - "#21 35.58 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 35.59 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 35.59 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 35.60 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 35.60 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 35.61 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 35.62 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 35.62 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 35.63 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 35.63 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 35.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 117.8 MB/s eta 0:00:00\n", - "#21 35.64 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 35.65 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 35.67 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 110.5 MB/s eta 0:00:00\n", - "#21 35.68 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 35.68 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 43.57 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, trimesh, tifffile, scipy, requests, python-utils, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, lazy-loader, jinja2, imageio, cupy-cuda12x, scikit-image, pydantic, nvidia-cusolver-cu12, numpy-stl, highdicom, torch, python-on-whales, monai, holoscan\n", - "#21 112.3 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 imageio-2.37.0 importlib-resources-6.5.2 jinja2-3.1.5 lazy-loader-0.4 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 numpy-stl-3.2.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 python-utils-3.9.1 pyyaml-6.0.2 requests-2.32.3 scikit-image-0.25.1 scipy-1.15.1 sympy-1.13.1 tifffile-2025.1.10 torch-2.6.0 trimesh-4.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 114.1s\n", - "\n", - "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.281 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.447 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.474 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.501 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.503 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.544 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.549 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.627 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.632 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.655 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", - "#22 1.656 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.658 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.659 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.660 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.661 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.662 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.662 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.663 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.664 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.670 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.678 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.680 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.687 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 1.692 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.693 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.694 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.694 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.697 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 1.713 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 1.715 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 1.734 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.762 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.784 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 2.132 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 2.316 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.7s\n", - "\n", - "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.2s\n", - "\n", - "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", + "#20 [release 11/19] RUN pip install --upgrade pip\n", + "#20 0.826 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.854 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.009 Collecting pip\n", + "#20 1.083 Downloading pip-25.0.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.257 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 10.9 MB/s eta 0:00:00\n", + "#20 1.288 Installing collected packages: pip\n", + "#20 2.028 Successfully installed pip-25.0.1\n", + "#20 DONE 2.2s\n", + "\n", + "#21 [release 12/19] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 0.646 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.682 Downloading highdicom-0.25.1-py3-none-any.whl.metadata (5.0 kB)\n", + "#21 0.718 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.731 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.833 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.845 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.074 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.085 Downloading numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.122 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.136 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.144 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.183 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.193 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.259 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.270 Downloading scikit_image-0.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", + "#21 1.303 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", + "#21 1.315 Downloading numpy_stl-3.2.0-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.414 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", + "#21 1.425 Downloading trimesh-4.6.8-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.477 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", + "#21 1.488 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.650 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.662 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (8.9 kB)\n", + "#21 1.711 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.724 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.757 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.771 Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.797 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.819 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.859 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.871 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.923 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.934 Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 2.041 Collecting scipy>=1.11.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.052 Downloading scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 2.086 Collecting networkx>=3.0 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.097 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 2.139 Collecting imageio!=2.35.0,>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.151 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", + "#21 2.212 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.224 Downloading tifffile-2025.3.30-py3-none-any.whl.metadata (32 kB)\n", + "#21 2.248 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.259 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", + "#21 2.293 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.305 Downloading python_utils-3.9.1-py2.py3-none-any.whl.metadata (9.8 kB)\n", + "#21 2.367 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.378 Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.412 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.423 Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.457 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.468 Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.550 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.561 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.581 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.592 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.612 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.623 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.642 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.653 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.672 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.683 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.702 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.714 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.733 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.743 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.762 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.773 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.804 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.815 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.831 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.842 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.861 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.872 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.895 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.907 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.930 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.941 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.960 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.972 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 3.045 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 3.055 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 3.090 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 3.102 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 3.144 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 3.145 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 3.156 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.170 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.252 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 3.263 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 3.280 Downloading highdicom-0.25.1-py3-none-any.whl (1.1 MB)\n", + "#21 3.313 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 51.4 MB/s eta 0:00:00\n", + "#21 3.328 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 3.349 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 89.2 MB/s eta 0:00:00\n", + "#21 3.364 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.416 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 67.6 MB/s eta 0:00:00\n", + "#21 3.431 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 3.685 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 73.4 MB/s eta 0:00:00\n", + "#21 3.700 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 3.736 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 75.0 MB/s eta 0:00:00\n", + "#21 3.751 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 4.363 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 86.5 MB/s eta 0:00:00\n", + "#21 4.377 Downloading scikit_image-0.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", + "#21 4.533 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 97.9 MB/s eta 0:00:00\n", + "#21 4.556 Downloading numpy_stl-3.2.0-py3-none-any.whl (20 kB)\n", + "#21 4.571 Downloading trimesh-4.6.8-py3-none-any.whl (709 kB)\n", + "#21 4.581 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 709.3/709.3 kB 201.3 MB/s eta 0:00:00\n", + "#21 4.598 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 11.67 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 106.7 MB/s eta 0:00:00\n", + "#21 11.69 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 14.89 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 115.9 MB/s eta 0:00:00\n", + "#21 14.90 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 15.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 100.5 MB/s eta 0:00:00\n", + "#21 15.06 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 15.31 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 98.3 MB/s eta 0:00:00\n", + "#21 15.32 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 15.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 95.7 MB/s eta 0:00:00\n", + "#21 15.35 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 21.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 109.3 MB/s eta 0:00:00\n", + "#21 21.34 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 23.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 116.0 MB/s eta 0:00:00\n", + "#21 23.19 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 23.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 95.6 MB/s eta 0:00:00\n", + "#21 23.80 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 25.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 103.4 MB/s eta 0:00:00\n", + "#21 25.05 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 26.90 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 112.6 MB/s eta 0:00:00\n", + "#21 26.92 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 28.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 112.3 MB/s eta 0:00:00\n", + "#21 28.27 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 30.00 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 109.4 MB/s eta 0:00:00\n", + "#21 30.01 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 30.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 113.9 MB/s eta 0:00:00\n", + "#21 30.21 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 30.23 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 30.29 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 119.1 MB/s eta 0:00:00\n", + "#21 30.30 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 32.93 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 96.3 MB/s eta 0:00:00\n", + "#21 32.95 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", + "#21 32.96 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 32.98 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", + "#21 32.99 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 33.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 113.8 MB/s eta 0:00:00\n", + "#21 33.02 Downloading packaging-25.0-py3-none-any.whl (66 kB)\n", + "#21 33.04 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.6 MB)\n", + "#21 33.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 107.2 MB/s eta 0:00:00\n", + "#21 33.10 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 33.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 104.8 MB/s eta 0:00:00\n", + "#21 33.14 Downloading python_utils-3.9.1-py2.py3-none-any.whl (32 kB)\n", + "#21 33.15 Downloading scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.6 MB)\n", + "#21 33.50 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 37.6/37.6 MB 111.2 MB/s eta 0:00:00\n", + "#21 33.51 Downloading tifffile-2025.3.30-py3-none-any.whl (226 kB)\n", + "#21 33.53 Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)\n", + "#21 33.54 Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n", + "#21 33.56 Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n", + "#21 33.57 Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "#21 33.59 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 33.60 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 33.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 201.5 MB/s eta 0:00:00\n", + "#21 41.09 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, typing-extensions, sympy, pydicom, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, fsspec, filelock, trimesh, tifffile, scipy, python-utils, pyjpegls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, lazy-loader, jinja2, imageio, scikit-image, nvidia-cusolver-cu12, numpy-stl, highdicom, torch, monai\n", + "#21 113.8 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 filelock-3.18.0 fsspec-2025.3.2 highdicom-0.25.1 imageio-2.37.0 importlib-resources-6.5.2 jinja2-3.1.6 lazy-loader-0.4 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 numpy-stl-3.2.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-25.0 pillow-11.2.1 pydicom-3.0.1 pyjpegls-1.4.0 python-utils-3.9.1 scikit-image-0.25.2 scipy-1.15.2 sympy-1.13.1 tifffile-2025.3.30 torch-2.6.0 trimesh-4.6.8 triton-3.2.0 typing-extensions-4.13.2\n", + "#21 DONE 117.7s\n", + "\n", + "#22 [release 13/19] COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#22 DONE 0.5s\n", + "\n", + "#23 [release 14/19] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.662 Defaulting to user installation because normal site-packages is not writeable\n", + "#23 0.785 Processing /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.794 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (1.26.4)\n", + "#23 0.876 Collecting holoscan~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 0.901 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.0 kB)\n", + "#23 0.960 Collecting holoscan-cli~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 0.967 Downloading holoscan_cli-3.1.0-py3-none-any.whl.metadata (4.0 kB)\n", + "#23 1.037 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.043 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#23 1.119 Collecting tritonclient>=2.53.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.124 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl.metadata (2.8 kB)\n", + "#23 1.217 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.222 Downloading typeguard-4.4.2-py3-none-any.whl.metadata (3.8 kB)\n", + "#23 1.252 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (25.0.1)\n", + "#23 1.303 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.308 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", + "#23 1.380 Collecting cloudpickle<4.0,>=3.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.385 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#23 1.439 Collecting wheel-axle-runtime<1.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.445 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#23 1.467 Requirement already satisfied: Jinja2<4.0.0,>=3.1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.1.6)\n", + "#23 1.515 Collecting packaging<24.0,>=23.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.520 Downloading packaging-23.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#23 1.646 Collecting psutil<7.0.0,>=6.0.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.650 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 1.724 Collecting python-on-whales<0.61.0,>=0.60.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.731 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", + "#23 1.816 Collecting pyyaml<7.0,>=6.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.820 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#23 1.904 Collecting requests<3.0.0,>=2.31.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.908 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#23 2.039 Collecting python-rapidjson>=0.9.1 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.044 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 2.122 Collecting urllib3>=2.0.7 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.126 Downloading urllib3-2.4.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#23 2.575 Collecting aiohttp<4.0.0,>=3.8.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.579 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)\n", + "#23 2.661 Collecting cuda-python (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.665 Downloading cuda_python-12.8.0-py3-none-any.whl.metadata (15 kB)\n", + "#23 2.815 Collecting geventhttpclient>=2.3.3 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.825 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.7 kB)\n", + "#23 3.334 Collecting grpcio<1.68,>=1.63.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.339 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.9 kB)\n", + "#23 3.555 Collecting protobuf<6.0dev,>=5.26.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.559 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl.metadata (592 bytes)\n", + "#23 3.577 Requirement already satisfied: typing_extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (4.13.2)\n", + "#23 3.626 Collecting aiohappyeyeballs>=2.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.632 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)\n", + "#23 3.676 Collecting aiosignal>=1.1.2 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.681 Downloading aiosignal-1.3.2-py2.py3-none-any.whl.metadata (3.8 kB)\n", + "#23 3.748 Collecting async-timeout<6.0,>=4.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.753 Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)\n", + "#23 3.817 Collecting attrs>=17.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.823 Downloading attrs-25.3.0-py3-none-any.whl.metadata (10 kB)\n", + "#23 3.935 Collecting frozenlist>=1.1.1 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.940 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (16 kB)\n", + "#23 4.201 Collecting multidict<7.0,>=4.5 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.205 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.3 kB)\n", + "#23 4.297 Collecting propcache>=0.2.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.301 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (10 kB)\n", + "#23 4.611 Collecting yarl<2.0,>=1.17.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.615 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (72 kB)\n", + "#23 4.699 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.704 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#23 4.843 Collecting gevent (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.847 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 4.925 Collecting certifi (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.929 Downloading certifi-2025.1.31-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 5.003 Collecting brotli (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.007 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (5.5 kB)\n", + "#23 5.027 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0.0,>=3.1.5->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.0.2)\n", + "#23 5.170 Collecting pydantic<2,>=1.5 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.175 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", + "#23 5.306 Collecting tqdm (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.310 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "#23 5.387 Collecting typer>=0.4.1 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.393 Downloading typer-0.15.2-py3-none-any.whl.metadata (15 kB)\n", + "#23 5.514 Collecting charset-normalizer<4,>=2 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.558 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#23 5.628 Collecting idna<4,>=2.5 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.633 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#23 5.678 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.18.0)\n", + "#23 5.710 Collecting cuda-bindings~=12.8.0 (from cuda-python->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.716 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 5.807 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.812 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", + "#23 5.872 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.878 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "#23 5.971 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.975 Downloading rich-14.0.0-py3-none-any.whl.metadata (18 kB)\n", + "#23 6.146 Collecting greenlet>=3.2.0 (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.150 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (4.1 kB)\n", + "#23 6.201 Collecting zope.event (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.208 Downloading zope.event-5.0-py3-none-any.whl.metadata (4.4 kB)\n", + "#23 6.362 Collecting zope.interface (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.367 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (44 kB)\n", + "#23 6.448 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.453 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", + "#23 6.524 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.529 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 6.548 Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from zope.event->gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (59.6.0)\n", + "#23 6.591 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.598 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "#23 6.645 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#23 6.667 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl (39.8 MB)\n", + "#23 8.166 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 39.8/39.8 MB 26.6 MB/s eta 0:00:00\n", + "#23 8.172 Downloading holoscan_cli-3.1.0-py3-none-any.whl (72 kB)\n", + "#23 8.194 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl (14.4 MB)\n", + "#23 8.442 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.4/14.4 MB 59.4 MB/s eta 0:00:00\n", + "#23 8.449 Downloading typeguard-4.4.2-py3-none-any.whl (35 kB)\n", + "#23 8.477 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB)\n", + "#23 8.516 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 39.9 MB/s eta 0:00:00\n", + "#23 8.522 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#23 8.545 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl (104.6 MB)\n", + "#23 10.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.6/104.6 MB 67.4 MB/s eta 0:00:00\n", + "#23 10.11 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (112 kB)\n", + "#23 10.14 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)\n", + "#23 10.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.9/5.9 MB 54.0 MB/s eta 0:00:00\n", + "#23 10.26 Downloading packaging-23.2-py3-none-any.whl (53 kB)\n", + "#23 10.28 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl (319 kB)\n", + "#23 10.31 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 10.34 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", + "#23 10.36 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)\n", + "#23 10.41 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 37.3 MB/s eta 0:00:00\n", + "#23 10.41 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#23 10.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 18.5 MB/s eta 0:00:00\n", + "#23 10.45 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#23 10.48 Downloading urllib3-2.4.0-py3-none-any.whl (128 kB)\n", + "#23 10.50 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#23 10.53 Downloading cuda_python-12.8.0-py3-none-any.whl (11 kB)\n", + "#23 10.55 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)\n", + "#23 10.57 Downloading aiosignal-1.3.2-py2.py3-none-any.whl (7.6 kB)\n", + "#23 10.59 Downloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)\n", + "#23 10.62 Downloading attrs-25.3.0-py3-none-any.whl (63 kB)\n", + "#23 10.64 Downloading certifi-2025.1.31-py3-none-any.whl (166 kB)\n", + "#23 10.67 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#23 10.69 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB)\n", + "#23 10.89 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 59.7 MB/s eta 0:00:00\n", + "#23 10.90 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#23 10.92 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 10.95 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#23 10.97 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (219 kB)\n", + "#23 10.99 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206 kB)\n", + "#23 11.02 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", + "#23 11.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 49.4 MB/s eta 0:00:00\n", + "#23 11.10 Downloading typer-0.15.2-py3-none-any.whl (45 kB)\n", + "#23 11.13 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (333 kB)\n", + "#23 11.16 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (3.0 MB)\n", + "#23 11.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 51.6 MB/s eta 0:00:00\n", + "#23 11.22 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB)\n", + "#23 11.27 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 44.4 MB/s eta 0:00:00\n", + "#23 11.28 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "#23 11.31 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", + "#23 11.34 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (580 kB)\n", + "#23 11.37 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 580.6/580.6 kB 15.5 MB/s eta 0:00:00\n", + "#23 11.37 Downloading rich-14.0.0-py3-none-any.whl (243 kB)\n", + "#23 11.40 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", + "#23 11.42 Downloading zope.event-5.0-py3-none-any.whl (6.8 kB)\n", + "#23 11.45 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254 kB)\n", + "#23 11.47 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", + "#23 11.50 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", + "#23 11.54 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 31.5 MB/s eta 0:00:00\n", + "#23 11.54 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "#23 12.43 Installing collected packages: fastrlock, cuda-bindings, brotli, zope.interface, zope.event, wheel-axle-runtime, urllib3, typeguard, tqdm, shellingham, pyyaml, python-rapidjson, pygments, pydantic, psutil, protobuf, propcache, packaging, multidict, mdurl, idna, grpcio, greenlet, frozenlist, cupy-cuda12x, cuda-python, colorama, cloudpickle, click, charset-normalizer, certifi, attrs, async-timeout, aiohappyeyeballs, yarl, tritonclient, requests, markdown-it-py, holoscan, gevent, aiosignal, rich, geventhttpclient, aiohttp, typer, python-on-whales, holoscan-cli, monai-deploy-app-sdk\n", + "#23 14.37 Attempting uninstall: packaging\n", + "#23 14.37 Found existing installation: packaging 25.0\n", + "#23 14.38 Uninstalling packaging-25.0:\n", + "#23 14.40 Successfully uninstalled packaging-25.0\n", + "#23 19.15 Successfully installed aiohappyeyeballs-2.6.1 aiohttp-3.11.18 aiosignal-1.3.2 async-timeout-5.0.1 attrs-25.3.0 brotli-1.1.0 certifi-2025.1.31 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-3.1.1 colorama-0.4.6 cuda-bindings-12.8.0 cuda-python-12.8.0 cupy-cuda12x-13.4.1 fastrlock-0.8.3 frozenlist-1.6.0 gevent-25.4.1 geventhttpclient-2.3.3 greenlet-3.2.1 grpcio-1.67.1 holoscan-3.1.0 holoscan-cli-3.1.0 idna-3.10 markdown-it-py-3.0.0 mdurl-0.1.2 monai-deploy-app-sdk-0.5.1+37.g96f7e31.dirty multidict-6.4.3 packaging-23.2 propcache-0.3.1 protobuf-5.29.4 psutil-6.1.1 pydantic-1.10.21 pygments-2.19.1 python-on-whales-0.60.1 python-rapidjson-1.20 pyyaml-6.0.2 requests-2.32.3 rich-14.0.0 shellingham-1.5.4 tqdm-4.67.1 tritonclient-2.56.0 typeguard-4.4.2 typer-0.15.2 urllib3-2.4.0 wheel-axle-runtime-0.0.6 yarl-1.20.0 zope.event-5.0 zope.interface-7.2\n", + "#23 DONE 22.0s\n", + "\n", + "#24 [release 15/19] COPY ./models /opt/holoscan/models\n", + "#24 DONE 0.3s\n", + "\n", + "#25 [release 16/19] COPY ./map/app.json /etc/holoscan/app.json\n", "#25 DONE 0.1s\n", "\n", - "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 [release 17/19] COPY ./app.config /var/holoscan/app.yaml\n", "#26 DONE 0.1s\n", "\n", - "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", + "#27 [release 18/19] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#27 DONE 0.1s\n", "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 211.4s done\n", - "#28 exporting manifest sha256:9912b1b79735694e28133b372df9befe4a729581a452a6ab2ad63b786c87a253 0.0s done\n", - "#28 exporting config sha256:fa77b2f3975cd2da99ca7aabe147114e6dd897a3c7e6f129d44599b80cb260b6 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer f1af28197cc7 320B / 320B\n", - "#29 loading layer 20850dd17414 65.54kB / 5.10MB\n", - "#29 loading layer b9f62cf91cea 557.06kB / 3.40GB\n", - "#29 loading layer b9f62cf91cea 144.83MB / 3.40GB 6.4s\n", - "#29 loading layer b9f62cf91cea 353.17MB / 3.40GB 12.6s\n", - "#29 loading layer b9f62cf91cea 531.43MB / 3.40GB 16.7s\n", - "#29 loading layer b9f62cf91cea 759.27MB / 3.40GB 20.7s\n", - "#29 loading layer b9f62cf91cea 964.82MB / 3.40GB 24.8s\n", - "#29 loading layer b9f62cf91cea 1.20GB / 3.40GB 28.8s\n", - "#29 loading layer b9f62cf91cea 1.40GB / 3.40GB 33.0s\n", - "#29 loading layer b9f62cf91cea 1.66GB / 3.40GB 37.1s\n", - "#29 loading layer b9f62cf91cea 1.86GB / 3.40GB 41.2s\n", - "#29 loading layer b9f62cf91cea 2.17GB / 3.40GB 45.4s\n", - "#29 loading layer b9f62cf91cea 2.35GB / 3.40GB 51.7s\n", - "#29 loading layer b9f62cf91cea 2.38GB / 3.40GB 56.8s\n", - "#29 loading layer b9f62cf91cea 2.62GB / 3.40GB 63.0s\n", - "#29 loading layer b9f62cf91cea 2.88GB / 3.40GB 67.1s\n", - "#29 loading layer b9f62cf91cea 3.13GB / 3.40GB 71.4s\n", - "#29 loading layer b9f62cf91cea 3.31GB / 3.40GB 77.5s\n", - "#29 loading layer 00a02d1497ac 32.77kB / 578.05kB\n", - "#29 loading layer c39f31c9dcbe 196.61kB / 17.81MB\n", - "#29 loading layer c27d336afe81 492B / 492B\n", - "#29 loading layer ad1723897556 315B / 315B\n", - "#29 loading layer c4a750e42b61 302B / 302B\n", - "#29 loading layer 8d8c67a7dde8 3.36kB / 3.36kB\n", - "#29 loading layer f1af28197cc7 320B / 320B 81.6s done\n", - "#29 loading layer 20850dd17414 65.54kB / 5.10MB 81.5s done\n", - "#29 loading layer b9f62cf91cea 3.31GB / 3.40GB 80.9s done\n", - "#29 loading layer 00a02d1497ac 32.77kB / 578.05kB 1.0s done\n", - "#29 loading layer c39f31c9dcbe 196.61kB / 17.81MB 0.8s done\n", - "#29 loading layer c27d336afe81 492B / 492B 0.5s done\n", - "#29 loading layer ad1723897556 315B / 315B 0.5s done\n", - "#29 loading layer c4a750e42b61 302B / 302B 0.4s done\n", - "#29 loading layer 8d8c67a7dde8 3.36kB / 3.36kB 0.4s done\n", - "#29 DONE 81.6s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 124.3s done\n", - "#28 DONE 335.8s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:0514616033bece7aa07be14e038e2deaff1febaded164a7df509159ddeb68afb\n", - "#30 writing layer sha256:0514616033bece7aa07be14e038e2deaff1febaded164a7df509159ddeb68afb 0.0s done\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#30 writing layer sha256:10dca05c4c1d17a0351e6109694f44743a7fab7484c2096ac9e4e6f83d455964 0.1s done\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:400106ccc6c0e4c57943fea0ee16adf7d7f37bc155b2a8a704b41ad227590e75 0.1s done\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#30 writing layer sha256:4d62fb97f3e572427881e00c0d7d2424446cf788a2ff1e7a5864b790880d37bc 0.0s done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#30 writing layer sha256:8e8eda206fe85e2e966fe8e06f6acba89eaf2e6b6cddb66e3e84fc0efc9c6906 0.0s done\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:a8fe21bec5ef4d30051879815a94c399cea9a8a7c5e62d0b2d8dc6ab35851f40\n", - "#30 writing layer sha256:a8fe21bec5ef4d30051879815a94c399cea9a8a7c5e62d0b2d8dc6ab35851f40 0.3s done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:dbe5a881b951fb16a98081093b857b9127105681762f778e9ff16b31ffb07055 0.0s done\n", - "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing layer sha256:f734d777b5a1efc673bfc51bbe4634866e8b0c1735a3ba60913a1c95b8f85844 0.0s done\n", - "#30 writing layer sha256:fcc4d28973337beed9179216a0a6c14235ef3508532b9ebe1f727a9f684c5ab5\n", - "#30 writing layer sha256:fcc4d28973337beed9179216a0a6c14235ef3508532b9ebe1f727a9f684c5ab5 49.9s done\n", - "#30 preparing build cache for export 50.7s done\n", - "#30 writing config sha256:fb02d957d3bc2e55f202f36038ebe4b6dd16cd559d9a96a331e39ae6f5e63b3c 0.0s done\n", - "#30 writing cache manifest sha256:a97d212bf82fe3968fa658499603f14288678605e74c4bf6a3ae8e306dd1f1ff 0.0s done\n", - "#30 DONE 50.7s\n", - "[2025-01-29 14:54:01,342] [INFO] (packager) - Build Summary:\n", + "#28 [release 19/19] COPY ./app /opt/holoscan/app\n", + "#28 DONE 0.1s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 exporting layers\n", + "#29 exporting layers 187.0s done\n", + "#29 exporting manifest sha256:cac1ac4d69726995d3c9e061377448492061d466def990799cc72e811e162e90 0.0s done\n", + "#29 exporting config sha256:aacceda07071b8e9c4e0b360fd0b819d987eef71230c11c95f76c3053bfbd861 0.0s done\n", + "#29 sending tarball\n", + "#29 ...\n", + "\n", + "#30 importing to docker\n", + "#30 loading layer 49b545b4149c 283B / 283B\n", + "#30 loading layer c44b5ca75fdc 65.54kB / 5.09MB\n", + "#30 loading layer 3370fbb67e83 557.06kB / 3.26GB\n", + "#30 loading layer 3370fbb67e83 210.01MB / 3.26GB 6.3s\n", + "#30 loading layer 3370fbb67e83 337.02MB / 3.26GB 12.5s\n", + "#30 loading layer 3370fbb67e83 550.37MB / 3.26GB 18.7s\n", + "#30 loading layer 3370fbb67e83 735.31MB / 3.26GB 22.8s\n", + "#30 loading layer 3370fbb67e83 963.15MB / 3.26GB 27.0s\n", + "#30 loading layer 3370fbb67e83 1.18GB / 3.26GB 31.0s\n", + "#30 loading layer 3370fbb67e83 1.33GB / 3.26GB 37.2s\n", + "#30 loading layer 3370fbb67e83 1.56GB / 3.26GB 41.3s\n", + "#30 loading layer 3370fbb67e83 1.75GB / 3.26GB 45.4s\n", + "#30 loading layer 3370fbb67e83 2.02GB / 3.26GB 49.4s\n", + "#30 loading layer 3370fbb67e83 2.19GB / 3.26GB 55.6s\n", + "#30 loading layer 3370fbb67e83 2.24GB / 3.26GB 62.9s\n", + "#30 loading layer 3370fbb67e83 2.36GB / 3.26GB 69.0s\n", + "#30 loading layer 3370fbb67e83 2.56GB / 3.26GB 73.1s\n", + "#30 loading layer 3370fbb67e83 2.75GB / 3.26GB 77.1s\n", + "#30 loading layer 3370fbb67e83 2.93GB / 3.26GB 83.3s\n", + "#30 loading layer 3370fbb67e83 3.10GB / 3.26GB 89.5s\n", + "#30 loading layer af8c5ba7bee3 32.77kB / 144.30kB\n", + "#30 loading layer 8f8123670c0a 557.06kB / 398.53MB\n", + "#30 loading layer 8f8123670c0a 197.20MB / 398.53MB 2.1s\n", + "#30 loading layer 8f8123670c0a 228.95MB / 398.53MB 4.1s\n", + "#30 loading layer 8f8123670c0a 270.73MB / 398.53MB 6.2s\n", + "#30 loading layer 8f8123670c0a 334.23MB / 398.53MB 8.2s\n", + "#30 loading layer 8f8123670c0a 368.21MB / 398.53MB 10.3s\n", + "#30 loading layer c277737c154f 196.61kB / 17.81MB\n", + "#30 loading layer 01f35eabeadd 493B / 493B\n", + "#30 loading layer 21a6f7132dd0 316B / 316B\n", + "#30 loading layer 22aecd36f9de 302B / 302B\n", + "#30 loading layer ab9d985fcc93 3.33kB / 3.33kB\n", + "#30 loading layer 8f8123670c0a 398.53MB / 398.53MB 13.6s done\n", + "#30 loading layer 49b545b4149c 283B / 283B 109.9s done\n", + "#30 loading layer c44b5ca75fdc 5.09MB / 5.09MB 109.9s done\n", + "#30 loading layer 3370fbb67e83 3.26GB / 3.26GB 109.2s done\n", + "#30 loading layer af8c5ba7bee3 144.30kB / 144.30kB 13.7s done\n", + "#30 loading layer c277737c154f 17.81MB / 17.81MB 1.1s done\n", + "#30 loading layer 01f35eabeadd 493B / 493B 0.7s done\n", + "#30 loading layer 21a6f7132dd0 316B / 316B 0.6s done\n", + "#30 loading layer 22aecd36f9de 302B / 302B 0.5s done\n", + "#30 loading layer ab9d985fcc93 3.33kB / 3.33kB 0.5s done\n", + "#30 DONE 109.9s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 sending tarball 147.3s done\n", + "#29 DONE 334.4s\n", + "\n", + "#31 exporting cache to client directory\n", + "#31 preparing build cache for export\n", + "#31 writing layer sha256:000344a04deee760c0681e29294ee3f527b8299026aef2cfc3fa93e327c63df7\n", + "#31 writing layer sha256:000344a04deee760c0681e29294ee3f527b8299026aef2cfc3fa93e327c63df7 0.1s done\n", + "#31 writing layer sha256:048e6a80d9e1847dcc9526191c8d16c8bdda32e8440cb0e287ba48983787b2ea 0.0s done\n", + "#31 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#31 writing layer sha256:21ef12df128643f4e171d286035dc9c1a1e744f0ff52681473844fa3ebf148f9\n", + "#31 writing layer sha256:21ef12df128643f4e171d286035dc9c1a1e744f0ff52681473844fa3ebf148f9 51.1s done\n", + "#31 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24\n", + "#31 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#31 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#31 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#31 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#31 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", + "#31 writing layer sha256:4984bf91ddd07bd551024b1b6bda153f7d4f5a5caf35d9e2ca01c95afb531638 0.0s done\n", + "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#31 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#31 writing layer sha256:76cf1f2adf6fbbaa3d9ff2c120fc0ccf97b4b5388ee0a0dee82f894ea811caf8 0.1s done\n", + "#31 writing layer sha256:8a18a20487f64bf7fe1ac7ead38280d387b11f3d714179e19b4ecfba68a09f93\n", + "#31 writing layer sha256:8a18a20487f64bf7fe1ac7ead38280d387b11f3d714179e19b4ecfba68a09f93 0.0s done\n", + "#31 writing layer sha256:935b4cb3480886ca00a46c28cd98797870cfc7389818c85cd243869f4548fda4 done\n", + "#31 writing layer sha256:95dbda2f5f8116a35367b28d397faae7d34bd4a713aefe01ccfe5e326b0b0250 done\n", + "#31 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#31 writing layer sha256:9897f28322ebd7b633908503d8877b342e03a47293fcacdc8206b2e5d9f20923\n", + "#31 writing layer sha256:9897f28322ebd7b633908503d8877b342e03a47293fcacdc8206b2e5d9f20923 0.4s done\n", + "#31 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", + "#31 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#31 writing layer sha256:b0436fe850f9a3fce99cc083d570eb3393b83444edf2dc04800a8e4d050d2d83 0.0s done\n", + "#31 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#31 writing layer sha256:d0b9db5eaf93e490f07bab8abb1ac5475febcf822c25f2e1d1c82ff4273a7d0d done\n", + "#31 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#31 writing layer sha256:da44fb0aa6d6f7c651c7eec8e11510c9c048b066b2ba36b261cefea12ff5ee3e done\n", + "#31 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#31 writing layer sha256:f1e6c0e7271e4ce12dd1113858066e0d41d50b338596aea2c15a21da034a7d3d 0.0s done\n", + "#31 writing layer sha256:f3af93a430a247328c59fb2228f6fa43a0ce742b03464db94acf7c45311e31cd done\n", + "#31 writing layer sha256:ff7fc9bdba2b206dc4eb678f49b36a99daf566bf71753dc2cec30a0195f7a41a\n", + "#31 writing layer sha256:ff7fc9bdba2b206dc4eb678f49b36a99daf566bf71753dc2cec30a0195f7a41a 6.8s done\n", + "#31 preparing build cache for export 58.8s done\n", + "#31 writing config sha256:1401476261a3e0a96b4b64a3270960c3fa51a70d62e0cd7a30991c3da24af97e 0.0s done\n", + "#31 writing cache manifest sha256:b4e7496beec087df8709332743a34f2f69a9993f4fdf0ac0d1871c03d8664448 0.0s done\n", + "#31 DONE 58.8s\n", + "[2025-04-22 10:27:40,090] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1883,7 +1968,7 @@ "source": [ "tag_prefix = \"my_app\"\n", "\n", - "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -1902,7 +1987,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 fa77b2f3975c 6 minutes ago 8.82GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 aacceda07071 6 minutes ago 9.25GB\n" ] } ], @@ -1960,7 +2045,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -1984,16 +2069,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-04-22 17:27:43 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 22:54:05 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 22:54:05 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-04-22 17:27:43 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-04-22 17:27:43 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-04-22 17:27:43 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-04-22 17:27:43 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 22:54:05 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-04-22 17:27:43 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-04-22 17:27:43 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -2025,23 +2110,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 14:54:07,456] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 14:54:07,456] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 10:27:44,899] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 10:27:44,899] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 14:54:07,457] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 10:27:44,899] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 14:54:07,457] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 10:27:44,900] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 14:54:07,521] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpieorgxpy/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpieorgxpy/pkg.json\n", - "969dfb951c65e83ccab09c48eaad70245f27a19206b7c42f68cf2020047ab48a\n", - "[2025-01-29 14:54:07,774] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 10:27:44,977] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpmnebv7ra/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpmnebv7ra/pkg.json\n", + "bb0cf20f8662e86bcda22ed7a5faae90e0b66cdd38d6f64a8e2ceb4e95a0ebca\n", + "[2025-04-22 10:27:45,406] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 14:54:07,774] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 10:27:45,407] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 14:54:08,049] [INFO] (common) - Launching container (b7f0dfdee19f) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: peaceful_bose\n", + "[2025-04-22 10:27:45,714] [INFO] (common) - Launching container (21c6001bf0ef) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: youthful_jepsen\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2051,119 +2136,109 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 22:54:08 [INFO] Launching application python3 /opt/holoscan/app ...\n", - "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "2025-04-22 17:27:46 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[2025-01-29 22:54:16,150] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 22:54:16,156] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2025-04-22 17:27:53,854] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2025-01-29 22:54:16,159] [INFO] (root) - End compose\n", + "[2025-04-22 17:27:53,858] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[2025-04-22 17:27:53,860] [INFO] (root) - End compose\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[2025-04-22 17:27:53,886] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", + " # of series: 1\n", "\n", - "[2025-01-29 22:54:16,194] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:54:17,214] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:54:17,214] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - " # of series: 1\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:54:17,214] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series Selection finalized.\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:27:55,081] [INFO] (root) - Casting to float32\n", "\n", - "[2025-01-29 22:54:18,043] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", + "[2025-04-22 17:27:55,383] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", "\n", " warnings.warn(\n", "\n", - "[2025-01-29 22:54:21,728] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", + "[2025-04-22 17:27:59,716] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", "\n", - "[2025-01-29 22:54:23,417] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-04-22 17:28:01,195] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", "\n", - "[2025-01-29 22:54:23,417] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-04-22 17:28:01,196] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " check_person_name(patient_name)\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 17:28:12,578] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[2025-01-29 22:54:38,864] [INFO] (app.AISpleenSegApp) - End run\n", + "[2025-04-22 17:28:12,698] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[2025-01-29 14:54:40,627] [INFO] (common) - Container 'peaceful_bose'(b7f0dfdee19f) exited.\n" + "[2025-04-22 10:28:14,349] [INFO] (common) - Container 'youthful_jepsen'(21c6001bf0ef) exited.\n" ] } ], @@ -2182,7 +2257,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.91779897402861840368941310038395885.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.36310308785029269065941040056862019.dcm stl\n" ] } ], diff --git a/notebooks/tutorials/05_multi_model_app.ipynb b/notebooks/tutorials/05_multi_model_app.ipynb index 0edc6d75..f87b8d35 100644 --- a/notebooks/tutorials/05_multi_model_app.ipynb +++ b/notebooks/tutorials/05_multi_model_app.ipynb @@ -730,70 +730,63 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:58:28,687] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 14:58:28,703] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2025-01-29 14:58:28,709] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:14:06,240] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 12:14:06,259] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=), triton_server_netloc=\n", + "[2025-04-22 12:14:06,266] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", - "[2025-01-29 14:58:28,793] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:58:29,154] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:58:29,155] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 12:14:06,293] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 12:14:06,864] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 12:14:06,865] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:58:29,156] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:58:29,157] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:58:29,157] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:58:29,158] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:58:29,159] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:58:29,160] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:58:29,160] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:58:29,161] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:58:29,163] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:58:29,164] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:58:29,165] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:58:29,932] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2025-04-22 12:14:06,866] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:06,866] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:06,867] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 12:14:06,867] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:06,868] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 12:14:06,868] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 12:14:06,869] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:06,869] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:06,871] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:06,871] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:06,872] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:06,872] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 12:14:06,873] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:06,873] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:07,392] [INFO] (root) - Casting to float32\n", + "[2025-04-22 12:14:07,618] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 14:59:07,045] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "[2025-04-22 12:14:45,024] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:59:11,588] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:11,589] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:59:11,590] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:11,591] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:59:11,592] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:59:11,593] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:11,594] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:59:11,596] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:59:11,599] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2025-01-29 14:59:12,924] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:12,925] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:59:12,926] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:12,926] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:59:12,928] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:59:12,930] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:12,932] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:59:12,934] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:59:12,936] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:14:48,476] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:48,477] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:14:48,478] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:48,478] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:14:48,479] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:14:48,480] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:48,480] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:14:48,481] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:14:48,482] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:14:49,557] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:49,559] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:14:49,560] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:49,561] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:14:49,561] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:14:49,562] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:49,563] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:14:49,564] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:14:49,564] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:59:13,097] [INFO] (__main__.App) - End run\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 12:14:49,692] [INFO] (__main__.App) - End run\n" ] } ], @@ -1165,70 +1158,63 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:59:22,117] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2025-01-29 14:59:22,124] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2025-01-29 14:59:22,127] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:14:54,730] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['my_app'])\n", + "[2025-04-22 12:14:54,735] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=), triton_server_netloc=\n", + "[2025-04-22 12:14:54,737] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", - "[2025-01-29 14:59:22,158] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:59:23,236] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 12:14:54,756] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:59:23,521] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:55,815] [INFO] (root) - Casting to float32\n", + "[2025-04-22 12:14:55,872] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 15:00:02,766] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "[2025-04-22 12:15:29,019] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 15:00:08,663] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 15:00:08,663] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:15:32,361] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:15:32,363] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:15:33,347] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:15:33,347] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 15:00:08,802] [INFO] (app.App) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 12:15:33,435] [INFO] (app.App) - End run\n" ] } ], @@ -1246,8 +1232,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.6770039896233970278223165829656417.dcm\n", - "1.2.826.0.1.3680043.10.511.3.99914275872478204692034716344119025.dcm\n" + "1.2.826.0.1.3680043.10.511.3.34841928451888108286361340675987576.dcm\n", + "1.2.826.0.1.3680043.10.511.3.36403385704959959901485544349934328.dcm\n" ] } ], @@ -1324,8 +1310,7 @@ "pydicom>=2.3.0\n", "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", - "torch>=1.12.0\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue\n" + "torch>=1.12.0\n" ] }, { @@ -1348,17 +1333,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 15:00:11,881] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 15:00:12,062] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 15:00:12,063] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-29 15:00:12,063] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 15:00:12,064] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", - "[2025-01-29 15:00:12,064] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", - "[2025-01-29 15:00:12,064] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", - "[2025-01-29 15:00:12,064] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-29 15:00:12,071] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 15:00:12,071] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 15:00:12,075] [DEBUG] (common) - \n", + "[2025-04-22 12:15:35,532] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 12:15:35,793] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 12:15:35,794] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-04-22 12:15:35,794] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 12:15:35,794] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", + "[2025-04-22 12:15:35,795] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", + "[2025-04-22 12:15:35,795] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", + "[2025-04-22 12:15:35,795] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-04-22 12:15:35,798] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 12:15:35,798] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 12:15:35,804] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1386,14 +1371,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"3.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 15:00:12,076] [DEBUG] (common) - \n", + "[2025-04-22 12:15:35,804] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1414,7 +1399,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 15:00:12,629] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:15:36,273] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1432,7 +1417,7 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", @@ -1440,7 +1425,7 @@ " 'models': {'pancreas_ct_dints': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints'),\n", " 'spleen_ct': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct')},\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '3.0.0',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1457,7 +1442,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 15:00:12,629] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:15:36,273] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -1467,15 +1452,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 15:00:12,672] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:15:36,293] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1539,9 +1524,9 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Multi Model App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"3.0.0\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1554,7 +1539,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1613,7 +1598,7 @@ "# Install MONAI Deploy App SDK\n", "\n", "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", + "RUN pip install monai-deploy-app-sdk==3.0.0\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", @@ -1629,7 +1614,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 15:00:12,672] [INFO] (packager.builder) - \n", + "[2025-04-22 12:15:36,294] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1637,22 +1622,21 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", + " Holoscan SDK Package: 3.1.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 15:00:13,368] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 15:00:13,368] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 12:15:36,708] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 12:15:36,708] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile:\n", - "#1 transferring dockerfile: 4.55kB 0.0s done\n", - "#1 DONE 0.4s\n", + "#1 transferring dockerfile: 4.55kB done\n", + "#1 DONE 0.1s\n", "\n", "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", "#2 DONE 0.0s\n", @@ -1670,401 +1654,234 @@ "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from local:16203137030623613086\n", + "#7 importing cache manifest from local:2851983977013277839\n", "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#7 DONE 0.0s\n", "\n", "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#8 DONE 0.0s\n", + "#8 DONE 0.1s\n", "\n", "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#5 DONE 0.4s\n", + "#5 DONE 0.7s\n", "\n", "#6 [internal] load build context\n", - "#6 transferring context: 635.92MB 4.4s done\n", - "#6 DONE 4.6s\n", + "#6 transferring context: 635.92MB 3.7s done\n", + "#6 DONE 3.7s\n", "\n", - "#9 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#9 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#9 CACHED\n", "\n", - "#10 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#10 CACHED\n", "\n", - "#11 [release 6/18] WORKDIR /var/holoscan\n", + "#11 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#11 CACHED\n", "\n", "#12 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#13 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#13 CACHED\n", "\n", - "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#14 [release 6/18] WORKDIR /var/holoscan\n", "#14 CACHED\n", "\n", - "#15 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#15 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#15 CACHED\n", "\n", - "#16 [release 9/18] WORKDIR /var/holoscan\n", + "#16 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#16 CACHED\n", "\n", - "#17 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#17 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#17 CACHED\n", "\n", - "#18 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#18 [release 9/18] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", - "#19 CACHED\n", + "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 DONE 4.0s\n", "\n", "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 CACHED\n", + "#20 0.851 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.897 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.075 Collecting pip\n", + "#20 1.173 Downloading pip-25.0.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.340 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 11.4 MB/s eta 0:00:00\n", + "#20 1.372 Installing collected packages: pip\n", + "#20 2.121 Successfully installed pip-25.0.1\n", + "#20 DONE 2.3s\n", "\n", "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 1.022 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 1.037 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", - "#21 1.121 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 1.127 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 1.262 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 1.267 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.541 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.546 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.564 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.570 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.579 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.627 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.631 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.662 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.667 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.682 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.686 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.823 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.827 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.847 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.852 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 1.871 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.874 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 1.883 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.886 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.917 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.922 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 1.982 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.986 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 2.023 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.027 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 2.066 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.071 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 2.103 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.110 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 2.137 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.141 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 2.219 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.223 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.235 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.240 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.247 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.251 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.271 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.276 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.287 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.291 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.301 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.304 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.313 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.317 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.325 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.328 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.339 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.342 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.348 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.351 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", - "#21 2.359 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.363 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 2.377 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.382 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 2.396 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.401 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.418 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.423 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#21 2.445 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.450 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 2.488 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.492 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 2.502 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9)) (25.0)\n", - "#21 2.517 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.523 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 2.564 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.568 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 2.669 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.673 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 2.707 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.711 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 2.742 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.748 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.862 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.867 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 2.884 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.889 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.939 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.946 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 3.034 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.040 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 3.057 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 3.058 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 3.064 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.074 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.266 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.271 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 3.394 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.398 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 3.417 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.426 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 3.479 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.484 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 3.515 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.520 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.578 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.583 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 4.171 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 4.175 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 4.199 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", - "#21 4.216 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 99.0 MB/s eta 0:00:00\n", - "#21 4.222 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 4.240 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 106.6 MB/s eta 0:00:00\n", - "#21 4.246 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 4.277 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 116.6 MB/s eta 0:00:00\n", - "#21 4.284 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 4.443 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.0 MB/s eta 0:00:00\n", - "#21 4.453 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 4.475 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 119.4 MB/s eta 0:00:00\n", - "#21 4.482 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 5.193 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 74.2 MB/s eta 0:00:00\n", - "#21 5.203 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", - "#21 12.95 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 95.8 MB/s eta 0:00:00\n", - "#21 12.96 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 16.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 106.8 MB/s eta 0:00:00\n", - "#21 16.34 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 16.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.7 MB/s eta 0:00:00\n", - "#21 16.47 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 16.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.0 MB/s eta 0:00:00\n", - "#21 16.69 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 16.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 148.8 MB/s eta 0:00:00\n", - "#21 16.71 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 23.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 104.7 MB/s eta 0:00:00\n", - "#21 23.30 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 25.14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 115.6 MB/s eta 0:00:00\n", - "#21 25.14 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 25.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 116.8 MB/s eta 0:00:00\n", - "#21 25.64 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 26.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 114.0 MB/s eta 0:00:00\n", - "#21 26.77 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 28.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 110.3 MB/s eta 0:00:00\n", - "#21 28.66 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", - "#21 30.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 78.8 MB/s eta 0:00:00\n", - "#21 30.58 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 32.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 117.2 MB/s eta 0:00:00\n", - "#21 32.20 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 32.39 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.1 MB/s eta 0:00:00\n", - "#21 32.39 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 32.40 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 32.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 113.4 MB/s eta 0:00:00\n", - "#21 32.47 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", - "#21 35.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 92.7 MB/s eta 0:00:00\n", - "#21 35.21 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 35.74 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 77.7 MB/s eta 0:00:00\n", - "#21 35.75 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 35.76 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 37.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 68.2 MB/s eta 0:00:00\n", - "#21 37.10 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 37.10 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 37.11 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 37.11 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 37.16 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 116.4 MB/s eta 0:00:00\n", - "#21 37.16 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 37.17 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 37.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 119.3 MB/s eta 0:00:00\n", - "#21 37.21 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 37.22 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 37.24 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 115.0 MB/s eta 0:00:00\n", - "#21 37.25 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 37.25 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 37.26 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 37.26 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 37.27 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 37.28 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 37.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 118.4 MB/s eta 0:00:00\n", - "#21 37.30 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 37.31 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 37.31 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 37.32 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 37.32 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 37.33 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 37.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 168.9 MB/s eta 0:00:00\n", - "#21 37.34 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 37.35 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 37.37 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 123.9 MB/s eta 0:00:00\n", - "#21 37.38 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 37.38 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 50.73 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, requests, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, cupy-cuda12x, pydantic, nvidia-cusolver-cu12, highdicom, torch, python-on-whales, monai, holoscan\n", - "#21 120.9 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 importlib-resources-6.5.2 jinja2-3.1.5 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 122.3s\n", - "\n", - "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.371 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.566 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.620 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.653 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.6/132.6 KB 4.9 MB/s eta 0:00:00\n", - "#22 1.673 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.735 Collecting colorama>=0.4.1\n", - "#22 1.742 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.803 Collecting typeguard>=3.0.0\n", - "#22 1.807 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 1.817 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.833 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.834 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.835 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.836 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.837 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.838 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.839 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.839 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.840 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.911 Collecting pip>22.0.2\n", - "#22 1.924 Using cached pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#22 1.949 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.964 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.968 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.994 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 2.005 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 2.007 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 2.008 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 2.009 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 2.018 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 2.044 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 2.045 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 2.491 Installing collected packages: typeguard, pip, colorama, monai-deploy-app-sdk\n", - "#22 3.518 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 pip-25.0 typeguard-4.4.1\n", - "#22 DONE 3.7s\n", - "\n", - "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 2.4s\n", - "\n", - "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", - "#25 DONE 0.1s\n", - "\n", - "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#26 DONE 0.1s\n", - "\n", - "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", - "#27 DONE 0.1s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 206.4s done\n", - "#28 exporting manifest sha256:7796b1f150f7b83d9b887b3a8fc46ac5edde925a0aae4b3502d7637952da2aca 0.0s done\n", - "#28 exporting config sha256:b9c42a576652b4a8d6579e9068e22d8fd09cdc9906a5b6d514c7e958be6f7862 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer 4e7654462151 557.06kB / 3.34GB\n", - "#29 loading layer 4e7654462151 140.38MB / 3.34GB 6.4s\n", - "#29 loading layer 4e7654462151 350.39MB / 3.34GB 12.7s\n", - "#29 loading layer 4e7654462151 549.26MB / 3.34GB 18.9s\n", - "#29 loading layer 4e7654462151 783.78MB / 3.34GB 23.1s\n", - "#29 loading layer 4e7654462151 968.16MB / 3.34GB 27.2s\n", - "#29 loading layer 4e7654462151 1.19GB / 3.34GB 31.3s\n", - "#29 loading layer 4e7654462151 1.37GB / 3.34GB 35.3s\n", - "#29 loading layer 4e7654462151 1.55GB / 3.34GB 39.4s\n", - "#29 loading layer 4e7654462151 1.80GB / 3.34GB 43.4s\n", - "#29 loading layer 4e7654462151 2.02GB / 3.34GB 47.5s\n", - "#29 loading layer 4e7654462151 2.27GB / 3.34GB 51.6s\n", - "#29 loading layer 4e7654462151 2.31GB / 3.34GB 58.3s\n", - "#29 loading layer 4e7654462151 2.43GB / 3.34GB 64.7s\n", - "#29 loading layer 4e7654462151 2.62GB / 3.34GB 68.7s\n", - "#29 loading layer 4e7654462151 2.86GB / 3.34GB 72.9s\n", - "#29 loading layer 4e7654462151 3.04GB / 3.34GB 77.0s\n", - "#29 loading layer 4e7654462151 3.23GB / 3.34GB 83.2s\n", - "#29 loading layer 23ba8544cc7e 65.54kB / 3.82MB\n", - "#29 loading layer 2a706ddec870 557.06kB / 584.49MB\n", - "#29 loading layer 2a706ddec870 100.83MB / 584.49MB 2.1s\n", - "#29 loading layer 2a706ddec870 289.11MB / 584.49MB 4.1s\n", - "#29 loading layer 2a706ddec870 445.64MB / 584.49MB 6.2s\n", - "#29 loading layer 2a706ddec870 584.49MB / 584.49MB 8.3s\n", - "#29 loading layer 14707cfba07c 492B / 492B\n", - "#29 loading layer d97f86cb4552 313B / 313B\n", - "#29 loading layer 1684cea86f9e 324B / 324B\n", - "#29 loading layer 6a14ef597340 4.04kB / 4.04kB\n", - "#29 loading layer d97f86cb4552 313B / 313B 0.5s done\n", - "#29 loading layer 4e7654462151 3.29GB / 3.34GB 96.8s done\n", - "#29 loading layer 23ba8544cc7e 65.54kB / 3.82MB 9.6s done\n", - "#29 loading layer 2a706ddec870 584.49MB / 584.49MB 8.9s done\n", - "#29 loading layer 14707cfba07c 492B / 492B 0.5s done\n", - "#29 loading layer 1684cea86f9e 324B / 324B 0.4s done\n", - "#29 loading layer 6a14ef597340 4.04kB / 4.04kB 0.3s done\n", - "#29 DONE 96.8s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 144.5s done\n", - "#28 DONE 351.0s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#30 writing layer sha256:4ef542fe09116c53da73effaa3b0ebc83c3619f95ecea3bdd81b29c92ad0337f 0.0s done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:53d193b4273e718bc4bed3199afbc347e3e9e143091139ed90456d0377788704\n", - "#30 writing layer sha256:53d193b4273e718bc4bed3199afbc347e3e9e143091139ed90456d0377788704 53.5s done\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#30 writing layer sha256:70d632523e65ac9d5b79c4b1edf7ded894919e27b1af66b6fed294a414b875ab 0.0s done\n", - "#30 writing layer sha256:90d2434bd2896a650e2f9268e355424f72f461e002af093a3e88f9ab55e8e980 0.0s done\n", - "#30 writing layer sha256:9206dd7b04116a7dc5c43818efa3d57c3d9c2bab68366d1098eac0743dbd231b\n", - "#30 writing layer sha256:9206dd7b04116a7dc5c43818efa3d57c3d9c2bab68366d1098eac0743dbd231b 10.4s done\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:9f4298c73aaf415f67893215f4cfc6af9688163dfd98172a08fb2d13177eb027 0.0s done\n", - "#30 writing layer sha256:a7292bbf42d93ed9fca9e2ff7e5283d2e7f737dad14092919db7645628bb0838 done\n", - "#30 writing layer sha256:a8560dc90723760d8d4daf42b22f7760b034c87e9348697c113118b992d830ca done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#30 writing layer sha256:c44760856749b1b70a3f10d166baa2075f84fe4147e20efdc97ae6b8373575b0 0.1s done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd\n", - "#30 preparing build cache for export 64.3s done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing config sha256:826f5efd34c54c319233472ed2d0b701e48d72c65ac5340a90c4583be4465fa7 0.0s done\n", - "#30 writing cache manifest sha256:b26c61f9f724af74f9758287216e114370ea6a82f8f653c7988e3f6dae5b164d 0.0s done\n", - "#30 DONE 64.3s\n", - "[2025-01-29 15:09:25,383] [INFO] (packager) - Build Summary:\n", + "#21 0.675 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.728 Downloading highdicom-0.25.1-py3-none-any.whl.metadata (5.0 kB)\n", + "#21 0.822 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.835 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.931 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.961 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.149 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.161 Downloading numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.211 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.224 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.233 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.259 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.272 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.310 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.323 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.489 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.500 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (8.9 kB)\n", + "#21 1.605 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.619 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.641 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.652 Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.670 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.681 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.746 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.759 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.817 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.828 Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 1.857 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.869 Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 1.897 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.909 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 1.929 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.940 Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 1.966 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.979 Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.031 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.044 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.060 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.073 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.097 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.111 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.126 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.140 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.160 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.212 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.232 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.245 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.268 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.282 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.298 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.312 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.331 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.344 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.359 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.373 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.387 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.399 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.416 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.429 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.445 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.457 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.483 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.497 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 2.525 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.537 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 2.566 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.577 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 2.597 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 2.597 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 2.609 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.622 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.679 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.690 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.717 Downloading highdicom-0.25.1-py3-none-any.whl (1.1 MB)\n", + "#21 3.009 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 4.1 MB/s eta 0:00:00\n", + "#21 3.027 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 3.342 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 5.3 MB/s eta 0:00:00\n", + "#21 3.356 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.851 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 6.7 MB/s eta 0:00:00\n", + "#21 3.867 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 5.943 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 8.8 MB/s eta 0:00:00\n", + "#21 5.957 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 6.217 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 9.5 MB/s eta 0:00:00\n", + "#21 6.232 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 16.76 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 5.0 MB/s eta 0:00:00\n", + "#21 16.77 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 30.05 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 106.7 MB/s eta 0:00:00\n", + "#21 30.07 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 33.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 109.6 MB/s eta 0:00:00\n", + "#21 33.34 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 33.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 113.6 MB/s eta 0:00:00\n", + "#21 33.48 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 33.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 113.8 MB/s eta 0:00:00\n", + "#21 33.71 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 33.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 194.7 MB/s eta 0:00:00\n", + "#21 33.74 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 43.59 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 77.9 MB/s eta 0:00:00\n", + "#21 43.61 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 45.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 96.9 MB/s eta 0:00:00\n", + "#21 45.81 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 46.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 109.8 MB/s eta 0:00:00\n", + "#21 46.34 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 47.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 116.1 MB/s eta 0:00:00\n", + "#21 47.46 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 49.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 111.0 MB/s eta 0:00:00\n", + "#21 49.35 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 50.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 112.2 MB/s eta 0:00:00\n", + "#21 50.70 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 52.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 117.0 MB/s eta 0:00:00\n", + "#21 52.34 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 52.52 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.9 MB/s eta 0:00:00\n", + "#21 52.53 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 52.54 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 52.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 122.9 MB/s eta 0:00:00\n", + "#21 52.62 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 55.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 101.2 MB/s eta 0:00:00\n", + "#21 55.14 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 55.15 Downloading packaging-25.0-py3-none-any.whl (66 kB)\n", + "#21 55.17 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.6 MB)\n", + "#21 55.21 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 113.8 MB/s eta 0:00:00\n", + "#21 55.30 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 55.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 112.6 MB/s eta 0:00:00\n", + "#21 55.34 Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)\n", + "#21 55.35 Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n", + "#21 55.37 Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n", + "#21 55.38 Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "#21 55.40 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 55.42 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 115.7 MB/s eta 0:00:00\n", + "#21 55.43 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 55.45 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 55.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 183.2 MB/s eta 0:00:00\n", + "#21 63.66 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, typing-extensions, sympy, pydicom, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, fsspec, filelock, pyjpegls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, nvidia-cusolver-cu12, highdicom, torch, monai\n", + "#21 126.4 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 filelock-3.18.0 fsspec-2025.3.2 highdicom-0.25.1 importlib-resources-6.5.2 jinja2-3.1.6 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-25.0 pillow-11.2.1 pydicom-3.0.1 pyjpegls-1.4.0 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.13.2\n", + "#21 DONE 127.8s\n", + "\n", + "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==3.0.0\n", + "#22 0.957 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 1.121 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "#22 1.240 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "#22 ERROR: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "------\n", + " > [release 13/18] RUN pip install monai-deploy-app-sdk==3.0.0:\n", + "0.957 Defaulting to user installation because normal site-packages is not writeable\n", + "1.121 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "1.240 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "------\n", + "Dockerfile:137\n", + "--------------------\n", + " 135 | \n", + " 136 | # Install MONAI Deploy from PyPI org\n", + " 137 | >>> RUN pip install monai-deploy-app-sdk==3.0.0\n", + " 138 | \n", + " 139 | \n", + "--------------------\n", + "ERROR: failed to solve: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "[2025-04-22 12:17:58,073] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", - " Status: Succeeded\n", - " Docker Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Tarball: None\n" + " Status: Failure\n", + " Error: Error building image: see Docker output for additional details.\n", + " \n" ] } ], "source": [ "tag_prefix = \"my_app\"\n", "\n", - "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -2083,7 +1900,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 b9c42a576652 6 minutes ago 9.26GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 aacceda07071 2 hours ago 9.25GB\n" ] } ], @@ -2141,7 +1958,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -2153,29 +1970,28 @@ " \"applicationRoot\": \"/opt/holoscan/app\",\n", " \"modelRoot\": \"/opt/holoscan/models\",\n", " \"models\": {\n", - " \"spleen_ct\": \"/opt/holoscan/models/spleen_ct\",\n", - " \"pancreas_ct_dints\": \"/opt/holoscan/models/pancreas_ct_dints\"\n", + " \"model\": \"/opt/holoscan/models/model\"\n", " },\n", " \"resources\": {\n", " \"cpu\": 1,\n", " \"gpu\": 1,\n", " \"memory\": \"1Gi\",\n", - " \"gpuMemory\": \"10Gi\"\n", + " \"gpuMemory\": \"6Gi\"\n", " },\n", " \"version\": 1,\n", " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-29 23:09:29 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-04-22 19:18:00 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-29 23:09:29 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 23:09:29 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 23:09:29 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-04-22 19:18:00 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-04-22 19:18:00 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-04-22 19:18:00 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-29 23:09:29 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-04-22 19:18:00 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2025-01-29 23:09:31 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 23:09:31 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-04-22 19:18:00 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-04-22 19:18:00 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -2207,23 +2023,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 15:09:34,608] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 12:18:02,444] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 12:18:02,444] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 12:18:02,445] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 12:18:02,445] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 15:09:34,693] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpy9h8ea88/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpy9h8ea88/pkg.json\n", - "2e87441a06e4a01c5fdfaff50540f53f482fd9eed91ae31153adafbd852300e0\n", - "[2025-01-29 15:09:34,990] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 12:18:02,523] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmprw2gvfwr/app.json\n", + "Successfully copied 2.05kB to /tmp/tmprw2gvfwr/pkg.json\n", + "991136f12d4255c8e8f7bdbf80acfad80770e774a5441551832ddc3d52c5c4cf\n", + "[2025-04-22 12:18:02,786] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 15:09:34,991] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 12:18:02,787] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 15:09:35,353] [INFO] (common) - Launching container (65c9ea7f2024) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: busy_buck\n", + "[2025-04-22 12:18:03,056] [INFO] (common) - Launching container (4ba4a525283c) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: zealous_mclaren\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2233,137 +2049,109 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 23:09:36 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-04-22 19:18:03 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 23:09:42,422] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2025-04-22 19:18:11,324] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2025-01-29 23:09:42,436] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2025-04-22 19:18:11,326] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[2025-01-29 23:09:42,440] [INFO] (root) - End compose\n", + "[2025-04-22 19:18:11,329] [INFO] (root) - End compose\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[2025-04-22 19:18:11,356] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[2025-04-22 19:18:12,402] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + " # of series: 1\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 23:09:42,481] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - " # of series: 1\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series Selection finalized.\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 19:18:12,611] [INFO] (root) - Casting to float32\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "\n", - "[2025-01-29 23:09:44,150] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", + "[2025-04-22 19:18:12,667] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", "\n", " warnings.warn(\n", "\n", - "[2025-01-29 23:10:20,945] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", + "[2025-04-22 19:18:16,253] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2025-04-22 19:18:17,650] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", "\n", - " check_person_name(patient_name)\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 19:18:17,650] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + " check_person_name(patient_name)\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 19:18:28,325] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 19:18:28,325] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[2025-01-29 23:10:26,371] [INFO] (app.App) - End run\n", + "[2025-04-22 19:18:28,421] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[2025-01-29 15:10:28,142] [INFO] (common) - Container 'busy_buck'(65c9ea7f2024) exited.\n" + "[2025-04-22 12:18:29,792] [INFO] (common) - Container 'zealous_mclaren'(4ba4a525283c) exited.\n" ] } ], @@ -2389,8 +2177,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.64688317802311184609213362007999742.dcm\n", - "1.2.826.0.1.3680043.10.511.3.94198214068593573417987012030437034.dcm\n" + "1.2.826.0.1.3680043.10.511.3.11413742162001654228707576103547421.dcm stl\n" ] } ], diff --git a/requirements.txt b/requirements.txt index 99bbb796..ff677186 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ -holoscan~=2.0 +holoscan~=3.0 +holoscan-cli~=3.0 numpy>=1.21.6 colorama>=0.4.1 -tritonclient[all] +tritonclient[all]>=2.53.0 typeguard>=3.0.0 diff --git a/run b/run index d391ef44..4ef9e042 100755 --- a/run +++ b/run @@ -344,10 +344,10 @@ install_python_dev_deps() { # Copy the cuda runtime library to the fixed location (workaround for readthedocs) so that # we can leverage the existing LD_LIBRARY_PATH (configured by the readthedocs UI) to locate the cuda runtime library. # (LD_LIBRARY_PATH is set to /home/docs/ for that purpose) - # Note that 'python3.8' is hard-coded here, it should be updated if the Python version changes by + # Note that 'python3.9' is hard-coded here, it should be updated if the Python version changes by # .readthedocs.yml or other configurations. - run_command ls -al /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.8/site-packages/nvidia/cuda_runtime/lib/ - run_command cp /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.8/site-packages/nvidia/cuda_runtime/lib/*.so* /home/docs/ + run_command ls -al /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.9/site-packages/nvidia/cuda_runtime/lib/ + run_command cp /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.9/site-packages/nvidia/cuda_runtime/lib/*.so* /home/docs/ run_command ls -al /home/docs/ fi } diff --git a/setup.cfg b/setup.cfg index 80a51572..e07a9ab4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -16,7 +16,7 @@ project_urls = Source Code=https://github.com/Project-MONAI/monai-deploy-app-sdk [options] -python_requires = >= 3.8 +python_requires = >= 3.9 # for compiling and develop setup only # no need to specify the versions so that we could # compile for multiple targeted versions. @@ -24,8 +24,10 @@ python_requires = >= 3.8 # cucim install_requires = numpy>=1.21.6 - holoscan~=2.0 + holoscan~=3.0 + holoscan-cli~=3.0 colorama>=0.4.1 + tritonclient[all]>=2.53.0 typeguard>=3.0.0 [options.extras_require] From 3e7b8433fb8eee06b49897ea14b31d3c885ba76f Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:08:16 -0700 Subject: [PATCH 039/118] Fix _version.py and various version-related issues (#539) - Removed unnecessary logic in setup.py - Fix versioneer issues Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/source/release_notes/v3.0.0.md | 2 +- monai/deploy/__init__.py | 3 + monai/deploy/_version.py | 632 +++++++++++++++++++++++++++- setup.py | 66 +-- 4 files changed, 622 insertions(+), 81 deletions(-) diff --git a/docs/source/release_notes/v3.0.0.md b/docs/source/release_notes/v3.0.0.md index 2d229404..9c33ad22 100644 --- a/docs/source/release_notes/v3.0.0.md +++ b/docs/source/release_notes/v3.0.0.md @@ -1,4 +1,4 @@ -# Version 2.0.0 (April 24th, 2024) +# Version 3.0.0 (April 22nd, 2025) ## What's new in 3.0.0 diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 05090b52..415119da 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,3 +23,6 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] + +from . import _version +__version__ = _version.get_versions()['version'] diff --git a/monai/deploy/_version.py b/monai/deploy/_version.py index f1502cc2..9eeaaf17 100644 --- a/monai/deploy/_version.py +++ b/monai/deploy/_version.py @@ -1,21 +1,623 @@ -# This file was generated by 'versioneer.py' (0.19) from -# revision-control system data, or from the parent directory name of an -# unpacked source archive. Distribution tarballs contain a pre-generated copy -# of this file. +# This file helps to compute a version number in source trees obtained from +# git-archive tarball (such as those provided by githubs download-from-tag +# feature). Distribution tarballs (built by setup.py sdist) and build +# directories (produced by setup.py build) will contain a much shorter file +# that just contains the computed version number. -import json +# This file is released into the public domain. Generated by +# versioneer-0.20 (https://github.com/python-versioneer/python-versioneer) -version_json = ''' -{ - "date": "2024-04-24T16:20:37-0700", - "dirty": false, - "error": null, - "full-revisionid": "d0760904a1248ce316ae0237c8a1127ac5673d7f", - "version": "2.0.0" -} -''' # END VERSION_JSON +"""Git implementation of _version.py.""" + +import errno +import os +import re +import subprocess +import sys + + +def get_keywords(): + """Get the keywords needed to look up the version information.""" + # these strings will be replaced by git during git-archive. + # setup.py/versioneer.py will grep for the variable names, so they must + # each be defined on a line of their own. _version.py will just call + # get_keywords(). + git_refnames = "$Format:%d$" + git_full = "$Format:%H$" + git_date = "$Format:%ci$" + keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} + return keywords + + +class VersioneerConfig: # pylint: disable=too-few-public-methods + """Container for Versioneer configuration parameters.""" + + +def get_config(): + """Create, populate and return the VersioneerConfig() object.""" + # these strings are filled in when 'setup.py versioneer' creates + # _version.py + cfg = VersioneerConfig() + cfg.VCS = "git" + cfg.style = "pep440" + cfg.tag_prefix = "" + cfg.parentdir_prefix = "" + cfg.versionfile_source = "monai/deploy/_version.py" + cfg.verbose = False + return cfg + + +class NotThisMethod(Exception): + """Exception raised if a method is not valid for the current scenario.""" + + +LONG_VERSION_PY = {} +HANDLERS = {} + + +def register_vcs_handler(vcs, method): # decorator + """Create decorator to mark a method as the handler of a VCS.""" + def decorate(f): + """Store f in HANDLERS[vcs][method].""" + if vcs not in HANDLERS: + HANDLERS[vcs] = {} + HANDLERS[vcs][method] = f + return f + return decorate + + +# pylint:disable=too-many-arguments,consider-using-with # noqa +def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, + env=None): + """Call the given command(s).""" + assert isinstance(commands, list) + process = None + for command in commands: + try: + dispcmd = str([command] + args) + # remember shell=False, so use git.cmd on windows, not just git + process = subprocess.Popen([command] + args, cwd=cwd, env=env, + stdout=subprocess.PIPE, + stderr=(subprocess.PIPE if hide_stderr + else None)) + break + except EnvironmentError: + e = sys.exc_info()[1] + if e.errno == errno.ENOENT: + continue + if verbose: + print("unable to run %s" % dispcmd) + print(e) + return None, None + else: + if verbose: + print("unable to find command, tried %s" % (commands,)) + return None, None + stdout = process.communicate()[0].strip().decode() + if process.returncode != 0: + if verbose: + print("unable to run %s (error)" % dispcmd) + print("stdout was %s" % stdout) + return None, process.returncode + return stdout, process.returncode + + +def versions_from_parentdir(parentdir_prefix, root, verbose): + """Try to determine the version from the parent directory name. + + Source tarballs conventionally unpack into a directory that includes both + the project name and a version string. We will also support searching up + two directory levels for an appropriately named parent directory + """ + rootdirs = [] + + for _ in range(3): + dirname = os.path.basename(root) + if dirname.startswith(parentdir_prefix): + return {"version": dirname[len(parentdir_prefix):], + "full-revisionid": None, + "dirty": False, "error": None, "date": None} + rootdirs.append(root) + root = os.path.dirname(root) # up a level + + if verbose: + print("Tried directories %s but none started with prefix %s" % + (str(rootdirs), parentdir_prefix)) + raise NotThisMethod("rootdir doesn't start with parentdir_prefix") + + +@register_vcs_handler("git", "get_keywords") +def git_get_keywords(versionfile_abs): + """Extract version information from the given file.""" + # the code embedded in _version.py can just fetch the value of these + # keywords. When used from setup.py, we don't want to import _version.py, + # so we do it with a regexp instead. This function is not used from + # _version.py. + keywords = {} + try: + with open(versionfile_abs, "r") as fobj: + for line in fobj: + if line.strip().startswith("git_refnames ="): + mo = re.search(r'=\s*"(.*)"', line) + if mo: + keywords["refnames"] = mo.group(1) + if line.strip().startswith("git_full ="): + mo = re.search(r'=\s*"(.*)"', line) + if mo: + keywords["full"] = mo.group(1) + if line.strip().startswith("git_date ="): + mo = re.search(r'=\s*"(.*)"', line) + if mo: + keywords["date"] = mo.group(1) + except EnvironmentError: + pass + return keywords + + +@register_vcs_handler("git", "keywords") +def git_versions_from_keywords(keywords, tag_prefix, verbose): + """Get version information from git keywords.""" + if "refnames" not in keywords: + raise NotThisMethod("Short version file found") + date = keywords.get("date") + if date is not None: + # Use only the last line. Previous lines may contain GPG signature + # information. + date = date.splitlines()[-1] + + # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant + # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 + # -like" string, which we must then edit to make compliant), because + # it's been around since git-1.5.3, and it's too difficult to + # discover which version we're using, or to work around using an + # older one. + date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) + refnames = keywords["refnames"].strip() + if refnames.startswith("$Format"): + if verbose: + print("keywords are unexpanded, not using") + raise NotThisMethod("unexpanded keywords, not a git-archive tarball") + refs = {r.strip() for r in refnames.strip("()").split(",")} + # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of + # just "foo-1.0". If we see a "tag: " prefix, prefer those. + TAG = "tag: " + tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} + if not tags: + # Either we're using git < 1.8.3, or there really are no tags. We use + # a heuristic: assume all version tags have a digit. The old git %d + # expansion behaves like git log --decorate=short and strips out the + # refs/heads/ and refs/tags/ prefixes that would let us distinguish + # between branches and tags. By ignoring refnames without digits, we + # filter out many common branch names like "release" and + # "stabilization", as well as "HEAD" and "master". + tags = {r for r in refs if re.search(r'\d', r)} + if verbose: + print("discarding '%s', no digits" % ",".join(refs - tags)) + if verbose: + print("likely tags: %s" % ",".join(sorted(tags))) + for ref in sorted(tags): + # sorting will prefer e.g. "2.0" over "2.0rc1" + if ref.startswith(tag_prefix): + r = ref[len(tag_prefix):] + # Filter out refs that exactly match prefix or that don't start + # with a number once the prefix is stripped (mostly a concern + # when prefix is '') + if not re.match(r'\d', r): + continue + if verbose: + print("picking %s" % r) + return {"version": r, + "full-revisionid": keywords["full"].strip(), + "dirty": False, "error": None, + "date": date} + # no suitable tags, so version is "0+unknown", but full hex is still there + if verbose: + print("no suitable tags, using unknown + full revision id") + return {"version": "0+unknown", + "full-revisionid": keywords["full"].strip(), + "dirty": False, "error": "no suitable tags", "date": None} + + +@register_vcs_handler("git", "pieces_from_vcs") +def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): + """Get version from 'git describe' in the root of the source tree. + + This only gets called if the git-archive 'subst' keywords were *not* + expanded, and _version.py hasn't already been rewritten with a short + version string, meaning we're inside a checked out source tree. + """ + GITS = ["git"] + if sys.platform == "win32": + GITS = ["git.cmd", "git.exe"] + + _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, + hide_stderr=True) + if rc != 0: + if verbose: + print("Directory %s not under git control" % root) + raise NotThisMethod("'git rev-parse --git-dir' returned error") + + # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] + # if there isn't one, this yields HEX[-dirty] (no NUM) + describe_out, rc = runner(GITS, ["describe", "--tags", "--dirty", + "--always", "--long", + "--match", "%s*" % tag_prefix], + cwd=root) + # --long was added in git-1.5.5 + if describe_out is None: + raise NotThisMethod("'git describe' failed") + describe_out = describe_out.strip() + full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) + if full_out is None: + raise NotThisMethod("'git rev-parse' failed") + full_out = full_out.strip() + + pieces = {} + pieces["long"] = full_out + pieces["short"] = full_out[:7] # maybe improved later + pieces["error"] = None + + branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], + cwd=root) + # --abbrev-ref was added in git-1.6.3 + if rc != 0 or branch_name is None: + raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") + branch_name = branch_name.strip() + + if branch_name == "HEAD": + # If we aren't exactly on a branch, pick a branch which represents + # the current commit. If all else fails, we are on a branchless + # commit. + branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) + # --contains was added in git-1.5.4 + if rc != 0 or branches is None: + raise NotThisMethod("'git branch --contains' returned error") + branches = branches.split("\n") + + # Remove the first line if we're running detached + if "(" in branches[0]: + branches.pop(0) + + # Strip off the leading "* " from the list of branches. + branches = [branch[2:] for branch in branches] + if "master" in branches: + branch_name = "master" + elif not branches: + branch_name = None + else: + # Pick the first branch that is returned. Good or bad. + branch_name = branches[0] + + pieces["branch"] = branch_name + + # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] + # TAG might have hyphens. + git_describe = describe_out + + # look for -dirty suffix + dirty = git_describe.endswith("-dirty") + pieces["dirty"] = dirty + if dirty: + git_describe = git_describe[:git_describe.rindex("-dirty")] + + # now we have TAG-NUM-gHEX or HEX + + if "-" in git_describe: + # TAG-NUM-gHEX + mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) + if not mo: + # unparseable. Maybe git-describe is misbehaving? + pieces["error"] = ("unable to parse git-describe output: '%s'" + % describe_out) + return pieces + + # tag + full_tag = mo.group(1) + if not full_tag.startswith(tag_prefix): + if verbose: + fmt = "tag '%s' doesn't start with prefix '%s'" + print(fmt % (full_tag, tag_prefix)) + pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" + % (full_tag, tag_prefix)) + return pieces + pieces["closest-tag"] = full_tag[len(tag_prefix):] + + # distance: number of commits since tag + pieces["distance"] = int(mo.group(2)) + + # commit: short hex revision ID + pieces["short"] = mo.group(3) + + else: + # HEX: no tags + pieces["closest-tag"] = None + count_out, rc = runner(GITS, ["rev-list", "HEAD", "--count"], cwd=root) + pieces["distance"] = int(count_out) # total number of commits + + # commit date: see ISO-8601 comment in git_versions_from_keywords() + date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() + # Use only the last line. Previous lines may contain GPG signature + # information. + date = date.splitlines()[-1] + pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) + + return pieces + + +def plus_or_dot(pieces): + """Return a + if we don't already have one, else return a .""" + if "+" in pieces.get("closest-tag", ""): + return "." + return "+" + + +def render_pep440(pieces): + """Build up version string, with post-release "local version identifier". + + Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you + get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty + + Exceptions: + 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += plus_or_dot(pieces) + rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + else: + # exception #1 + rendered = "0+untagged.%d.g%s" % (pieces["distance"], + pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + return rendered + + +def render_pep440_branch(pieces): + """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . + + The ".dev0" means not master branch. Note that .dev0 sorts backwards + (a feature branch will appear "older" than the master branch). + + Exceptions: + 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += plus_or_dot(pieces) + rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + else: + # exception #1 + rendered = "0" + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += "+untagged.%d.g%s" % (pieces["distance"], + pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + return rendered + + +def render_pep440_pre(pieces): + """TAG[.post0.devDISTANCE] -- No -dirty. + + Exceptions: + 1: no tags. 0.post0.devDISTANCE + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"]: + rendered += ".post0.dev%d" % pieces["distance"] + else: + # exception #1 + rendered = "0.post0.dev%d" % pieces["distance"] + return rendered + + +def render_pep440_post(pieces): + """TAG[.postDISTANCE[.dev0]+gHEX] . + + The ".dev0" means dirty. Note that .dev0 sorts backwards + (a dirty tree will appear "older" than the corresponding clean one), + but you shouldn't be releasing software with -dirty anyways. + + Exceptions: + 1: no tags. 0.postDISTANCE[.dev0] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += ".post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + rendered += plus_or_dot(pieces) + rendered += "g%s" % pieces["short"] + else: + # exception #1 + rendered = "0.post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + rendered += "+g%s" % pieces["short"] + return rendered + + +def render_pep440_post_branch(pieces): + """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . + + The ".dev0" means not master branch. + + Exceptions: + 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += ".post%d" % pieces["distance"] + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += plus_or_dot(pieces) + rendered += "g%s" % pieces["short"] + if pieces["dirty"]: + rendered += ".dirty" + else: + # exception #1 + rendered = "0.post%d" % pieces["distance"] + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += "+g%s" % pieces["short"] + if pieces["dirty"]: + rendered += ".dirty" + return rendered + + +def render_pep440_old(pieces): + """TAG[.postDISTANCE[.dev0]] . + + The ".dev0" means dirty. + + Exceptions: + 1: no tags. 0.postDISTANCE[.dev0] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += ".post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + else: + # exception #1 + rendered = "0.post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + return rendered + + +def render_git_describe(pieces): + """TAG[-DISTANCE-gHEX][-dirty]. + + Like 'git describe --tags --dirty --always'. + + Exceptions: + 1: no tags. HEX[-dirty] (note: no 'g' prefix) + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"]: + rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) + else: + # exception #1 + rendered = pieces["short"] + if pieces["dirty"]: + rendered += "-dirty" + return rendered + + +def render_git_describe_long(pieces): + """TAG-DISTANCE-gHEX[-dirty]. + + Like 'git describe --tags --dirty --always -long'. + The distance/hash is unconditional. + + Exceptions: + 1: no tags. HEX[-dirty] (note: no 'g' prefix) + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) + else: + # exception #1 + rendered = pieces["short"] + if pieces["dirty"]: + rendered += "-dirty" + return rendered + + +def render(pieces, style): + """Render the given version pieces into the requested style.""" + if pieces["error"]: + return {"version": "unknown", + "full-revisionid": pieces.get("long"), + "dirty": None, + "error": pieces["error"], + "date": None} + + if not style or style == "default": + style = "pep440" # the default + + if style == "pep440": + rendered = render_pep440(pieces) + elif style == "pep440-branch": + rendered = render_pep440_branch(pieces) + elif style == "pep440-pre": + rendered = render_pep440_pre(pieces) + elif style == "pep440-post": + rendered = render_pep440_post(pieces) + elif style == "pep440-post-branch": + rendered = render_pep440_post_branch(pieces) + elif style == "pep440-old": + rendered = render_pep440_old(pieces) + elif style == "git-describe": + rendered = render_git_describe(pieces) + elif style == "git-describe-long": + rendered = render_git_describe_long(pieces) + else: + raise ValueError("unknown style '%s'" % style) + + return {"version": rendered, "full-revisionid": pieces["long"], + "dirty": pieces["dirty"], "error": None, + "date": pieces.get("date")} def get_versions(): - return json.loads(version_json) + """Get version information or return default if unable to do so.""" + # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have + # __file__, we can work backwards from there to the root. Some + # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which + # case we can only use expanded keywords. + + cfg = get_config() + verbose = cfg.verbose + + try: + return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, + verbose) + except NotThisMethod: + pass + + try: + root = os.path.realpath(__file__) + # versionfile_source is the relative path from the top of the source + # tree (where the .git directory might live) to this file. Invert + # this to find the root from __file__. + for _ in cfg.versionfile_source.split('/'): + root = os.path.dirname(root) + except NameError: + return {"version": "0+unknown", "full-revisionid": None, + "dirty": None, + "error": "unable to find root of source tree", + "date": None} + + try: + pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) + return render(pieces, cfg.style) + except NotThisMethod: + pass + + try: + if cfg.parentdir_prefix: + return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) + except NotThisMethod: + pass + + return {"version": "0+unknown", "full-revisionid": None, + "dirty": None, + "error": "unable to compute version", "date": None} diff --git a/setup.py b/setup.py index 74bfd8c9..0f4a71f3 100644 --- a/setup.py +++ b/setup.py @@ -24,73 +24,9 @@ # (https://github.com/pypa/pip/issues/7953#issuecomment-645133255) site.ENABLE_USER_SITE = "--user" in sys.argv[1:] - -class PostInstallCommand(install): - """Contains post install actions.""" - - def __init__(self, *args, **kwargs): - super(PostInstallCommand, self).__init__(*args, **kwargs) - atexit.register(PostInstallCommand.patch_holoscan) - - @staticmethod - def patch_holoscan(): - """Patch Holoscan for its known issue of missing one import.""" - - import importlib.util - from pathlib import Path - - def needed_to_patch(): - from importlib.metadata import version - - try: - version = version("holoscan") - # This issue exists in the following versions - if "2.7" in version or "2.8" in version: - print("Need to patch holoscan v2.7 and 2.8.") - return True - except Exception: - pass - - return False - - if not needed_to_patch(): - return - - print("Patching holoscan as needed...") - spec = importlib.util.find_spec("holoscan") - if spec: - # holoscan core misses one class in its import in __init__.py - module_to_add = " MultiMessageConditionInfo," - module_path = Path(str(spec.origin)).parent.joinpath("core/__init__.py") - print(f"Patching file {module_path}") - if module_path.exists(): - lines_r = [] - existed = False - with module_path.open("r") as f_to_patch: - in_block = False - for line_r in f_to_patch.readlines(): - if "from ._core import (\n" in line_r: - in_block = True - elif in_block and module_to_add.strip() in line_r: - existed = True - break - elif in_block and ")\n" in line_r: - # Need to add the missing class. - line_r = f"{module_to_add}\n{line_r}" - in_block = False - print("Added missing module in holoscan.") - - lines_r.append(line_r) - - if not existed: - with module_path.open("w") as f_w: - f_w.writelines(lines_r) - print("Completed patching holoscan.") - - setup( version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass({"install": PostInstallCommand}), + cmdclass=versioneer.get_cmdclass(), packages=find_namespace_packages(include=["monai.*"]), include_package_data=True, zip_safe=False, From f6a96b6616c9df23df38c5073024c6dc8a830fa6 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 21:00:44 -0700 Subject: [PATCH 040/118] =?UTF-8?q?Bump=20version:=202.0.0=20=E2=86=92=203?= =?UTF-8?q?.0.0=20(#540)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump version: 2.0.0 β†’ 3.0.0 Signed-off-by: M Q * Bump version: 2.0.0 -> 3.0.0 with __init__.py fix Signed-off-by: M Q * Remove blank line complained by black Signed-off-by: M Q * Fix more formatting complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .bumpversion.cfg | 2 +- monai/deploy/__init__.py | 3 - setup.py | 2 - versioneer.py | 247 +++++++++++++++++++++------------------ 4 files changed, 137 insertions(+), 117 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 646aa46b..a2048e4c 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.0.0 +current_version = 3.0.0 parse = (?P\d+)\.(?P\d+)\.(?P\d+)((?Pa|b|rc)(?P\d+))? serialize = {major}.{minor}.{patch}{release}{build} diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 415119da..05090b52 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,6 +23,3 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] - -from . import _version -__version__ = _version.get_versions()['version'] diff --git a/setup.py b/setup.py index 0f4a71f3..e1720bc8 100644 --- a/setup.py +++ b/setup.py @@ -10,12 +10,10 @@ # limitations under the License. -import atexit import site import sys from setuptools import find_namespace_packages, setup -from setuptools.command.install import install import versioneer diff --git a/versioneer.py b/versioneer.py index 97130070..41ab6a21 100644 --- a/versioneer.py +++ b/versioneer.py @@ -1,4 +1,3 @@ - # Version: 0.20 """The Versioneer - like a rocketeer, but for versions. @@ -303,11 +302,13 @@ def get_root(): setup_py = os.path.join(root, "setup.py") versioneer_py = os.path.join(root, "versioneer.py") if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - err = ("Versioneer was unable to run the project root directory. " - "Versioneer requires setup.py to be executed from " - "its immediate directory (like 'python setup.py COMMAND'), " - "or in a way that lets it use sys.argv[0] to find the root " - "(like 'python path/to/setup.py COMMAND').") + err = ( + "Versioneer was unable to run the project root directory. " + "Versioneer requires setup.py to be executed from " + "its immediate directory (like 'python setup.py COMMAND'), " + "or in a way that lets it use sys.argv[0] to find the root " + "(like 'python path/to/setup.py COMMAND')." + ) raise VersioneerBadRootError(err) try: # Certain runtime workflows (setup.py install/develop in a setuptools @@ -320,8 +321,7 @@ def get_root(): me_dir = os.path.normcase(os.path.splitext(my_path)[0]) vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0]) if me_dir != vsr_dir: - print("Warning: build in %s is using versioneer.py from %s" - % (os.path.dirname(my_path), versioneer_py)) + print("Warning: build in %s is using versioneer.py from %s" % (os.path.dirname(my_path), versioneer_py)) except NameError: pass return root @@ -367,16 +367,17 @@ class NotThisMethod(Exception): def register_vcs_handler(vcs, method): # decorator """Create decorator to mark a method as the handler of a VCS.""" + def decorate(f): """Store f in HANDLERS[vcs][method].""" HANDLERS.setdefault(vcs, {})[method] = f return f + return decorate # pylint:disable=too-many-arguments,consider-using-with # noqa -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, - env=None): +def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): """Call the given command(s).""" assert isinstance(commands, list) process = None @@ -384,10 +385,13 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, try: dispcmd = str([command] + args) # remember shell=False, so use git.cmd on windows, not just git - process = subprocess.Popen([command] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None)) + process = subprocess.Popen( + [command] + args, + cwd=cwd, + env=env, + stdout=subprocess.PIPE, + stderr=(subprocess.PIPE if hide_stderr else None), + ) break except EnvironmentError: e = sys.exc_info()[1] @@ -410,7 +414,9 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, return stdout, process.returncode -LONG_VERSION_PY['git'] = r''' +LONG_VERSION_PY[ + "git" +] = r''' # This file helps to compute a version number in source trees obtained from # git-archive tarball (such as those provided by githubs download-from-tag # feature). Distribution tarballs (built by setup.py sdist) and build @@ -1091,7 +1097,7 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of # just "foo-1.0". If we see a "tag: " prefix, prefer those. TAG = "tag: " - tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} + tags = {r[len(TAG) :] for r in refs if r.startswith(TAG)} if not tags: # Either we're using git < 1.8.3, or there really are no tags. We use # a heuristic: assume all version tags have a digit. The old git %d @@ -1100,7 +1106,7 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): # between branches and tags. By ignoring refnames without digits, we # filter out many common branch names like "release" and # "stabilization", as well as "HEAD" and "master". - tags = {r for r in refs if re.search(r'\d', r)} + tags = {r for r in refs if re.search(r"\d", r)} if verbose: print("discarding '%s', no digits" % ",".join(refs - tags)) if verbose: @@ -1108,24 +1114,31 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): for ref in sorted(tags): # sorting will prefer e.g. "2.0" over "2.0rc1" if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] + r = ref[len(tag_prefix) :] # Filter out refs that exactly match prefix or that don't start # with a number once the prefix is stripped (mostly a concern # when prefix is '') - if not re.match(r'\d', r): + if not re.match(r"\d", r): continue if verbose: print("picking %s" % r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} + return { + "version": r, + "full-revisionid": keywords["full"].strip(), + "dirty": False, + "error": None, + "date": date, + } # no suitable tags, so version is "0+unknown", but full hex is still there if verbose: print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} + return { + "version": "0+unknown", + "full-revisionid": keywords["full"].strip(), + "dirty": False, + "error": "no suitable tags", + "date": None, + } @register_vcs_handler("git", "pieces_from_vcs") @@ -1140,8 +1153,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): if sys.platform == "win32": GITS = ["git.cmd", "git.exe"] - _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=True) + _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) if rc != 0: if verbose: print("Directory %s not under git control" % root) @@ -1149,10 +1161,9 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = runner(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", - "--match", "%s*" % tag_prefix], - cwd=root) + describe_out, rc = runner( + GITS, ["describe", "--tags", "--dirty", "--always", "--long", "--match", "%s*" % tag_prefix], cwd=root + ) # --long was added in git-1.5.5 if describe_out is None: raise NotThisMethod("'git describe' failed") @@ -1167,8 +1178,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): pieces["short"] = full_out[:7] # maybe improved later pieces["error"] = None - branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], - cwd=root) + branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], cwd=root) # --abbrev-ref was added in git-1.6.3 if rc != 0 or branch_name is None: raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") @@ -1208,17 +1218,16 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): dirty = git_describe.endswith("-dirty") pieces["dirty"] = dirty if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] + git_describe = git_describe[: git_describe.rindex("-dirty")] # now we have TAG-NUM-gHEX or HEX if "-" in git_describe: # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) + mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe) if not mo: # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%s'" - % describe_out) + pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out return pieces # tag @@ -1227,10 +1236,9 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): if verbose: fmt = "tag '%s' doesn't start with prefix '%s'" print(fmt % (full_tag, tag_prefix)) - pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" - % (full_tag, tag_prefix)) + pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % (full_tag, tag_prefix) return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] + pieces["closest-tag"] = full_tag[len(tag_prefix) :] # distance: number of commits since tag pieces["distance"] = int(mo.group(2)) @@ -1303,15 +1311,18 @@ def versions_from_parentdir(parentdir_prefix, root, verbose): for _ in range(3): dirname = os.path.basename(root) if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} + return { + "version": dirname[len(parentdir_prefix) :], + "full-revisionid": None, + "dirty": False, + "error": None, + "date": None, + } rootdirs.append(root) root = os.path.dirname(root) # up a level if verbose: - print("Tried directories %s but none started with prefix %s" % - (str(rootdirs), parentdir_prefix)) + print("Tried directories %s but none started with prefix %s" % (str(rootdirs), parentdir_prefix)) raise NotThisMethod("rootdir doesn't start with parentdir_prefix") @@ -1340,11 +1351,9 @@ def versions_from_file(filename): contents = f.read() except EnvironmentError: raise NotThisMethod("unable to read _version.py") - mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) + mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON", contents, re.M | re.S) if not mo: - mo = re.search(r"version_json = '''\r\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) + mo = re.search(r"version_json = '''\r\n(.*)''' # END VERSION_JSON", contents, re.M | re.S) if not mo: raise NotThisMethod("no version_json in _version.py") return json.loads(mo.group(1)) @@ -1353,8 +1362,7 @@ def versions_from_file(filename): def write_to_version_file(filename, versions): """Write the given version number to the given _version.py file.""" os.unlink(filename) - contents = json.dumps(versions, sort_keys=True, - indent=1, separators=(",", ": ")) + contents = json.dumps(versions, sort_keys=True, indent=1, separators=(",", ": ")) with open(filename, "w") as f: f.write(SHORT_VERSION_PY % contents) @@ -1386,8 +1394,7 @@ def render_pep440(pieces): rendered += ".dirty" else: # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) + rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered @@ -1416,8 +1423,7 @@ def render_pep440_branch(pieces): rendered = "0" if pieces["branch"] != "master": rendered += ".dev0" - rendered += "+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) + rendered += "+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered @@ -1560,11 +1566,13 @@ def render_git_describe_long(pieces): def render(pieces, style): """Render the given version pieces into the requested style.""" if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} + return { + "version": "unknown", + "full-revisionid": pieces.get("long"), + "dirty": None, + "error": pieces["error"], + "date": None, + } if not style or style == "default": style = "pep440" # the default @@ -1588,9 +1596,13 @@ def render(pieces, style): else: raise ValueError("unknown style '%s'" % style) - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} + return { + "version": rendered, + "full-revisionid": pieces["long"], + "dirty": pieces["dirty"], + "error": None, + "date": pieces.get("date"), + } class VersioneerBadRootError(Exception): @@ -1613,8 +1625,7 @@ def get_versions(verbose=False): handlers = HANDLERS.get(cfg.VCS) assert handlers, "unrecognized VCS '%s'" % cfg.VCS verbose = verbose or cfg.verbose - assert cfg.versionfile_source is not None, \ - "please set versioneer.versionfile_source" + assert cfg.versionfile_source is not None, "please set versioneer.versionfile_source" assert cfg.tag_prefix is not None, "please set versioneer.tag_prefix" versionfile_abs = os.path.join(root, cfg.versionfile_source) @@ -1668,9 +1679,13 @@ def get_versions(verbose=False): if verbose: print("unable to compute version") - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, "error": "unable to compute version", - "date": None} + return { + "version": "0+unknown", + "full-revisionid": None, + "dirty": None, + "error": "unable to compute version", + "date": None, + } def get_version(): @@ -1723,6 +1738,7 @@ def run(self): print(" date: %s" % vers.get("date")) if vers["error"]: print(" error: %s" % vers["error"]) + cmds["version"] = cmd_version # we override "build_py" in both distutils and setuptools @@ -1741,8 +1757,8 @@ def run(self): # setup.py egg_info -> ? # we override different "build_py" commands for both environments - if 'build_py' in cmds: - _build_py = cmds['build_py'] + if "build_py" in cmds: + _build_py = cmds["build_py"] elif "setuptools" in sys.modules: from setuptools.command.build_py import build_py as _build_py else: @@ -1757,14 +1773,14 @@ def run(self): # now locate _version.py in the new build/ directory and replace # it with an updated value if cfg.versionfile_build: - target_versionfile = os.path.join(self.build_lib, - cfg.versionfile_build) + target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) + cmds["build_py"] = cmd_build_py - if 'build_ext' in cmds: - _build_ext = cmds['build_ext'] + if "build_ext" in cmds: + _build_ext = cmds["build_ext"] elif "setuptools" in sys.modules: from setuptools.command.build_ext import build_ext as _build_ext else: @@ -1784,14 +1800,15 @@ def run(self): return # now locate _version.py in the new build/ directory and replace # it with an updated value - target_versionfile = os.path.join(self.build_lib, - cfg.versionfile_build) + target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) + cmds["build_ext"] = cmd_build_ext if "cx_Freeze" in sys.modules: # cx_freeze enabled? from cx_Freeze.dist import build_exe as _build_exe + # nczeczulin reports that py2exe won't like the pep440-style string # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g. # setup(console=[{ @@ -1812,17 +1829,21 @@ def run(self): os.unlink(target_versionfile) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) + f.write( + LONG + % { + "DOLLAR": "$", + "STYLE": cfg.style, + "TAG_PREFIX": cfg.tag_prefix, + "PARENTDIR_PREFIX": cfg.parentdir_prefix, + "VERSIONFILE_SOURCE": cfg.versionfile_source, + } + ) + cmds["build_exe"] = cmd_build_exe del cmds["build_py"] - if 'py2exe' in sys.modules: # py2exe enabled? + if "py2exe" in sys.modules: # py2exe enabled? from py2exe.distutils_buildexe import py2exe as _py2exe class cmd_py2exe(_py2exe): @@ -1838,18 +1859,22 @@ def run(self): os.unlink(target_versionfile) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) + f.write( + LONG + % { + "DOLLAR": "$", + "STYLE": cfg.style, + "TAG_PREFIX": cfg.tag_prefix, + "PARENTDIR_PREFIX": cfg.parentdir_prefix, + "VERSIONFILE_SOURCE": cfg.versionfile_source, + } + ) + cmds["py2exe"] = cmd_py2exe # we override different "sdist" commands for both environments - if 'sdist' in cmds: - _sdist = cmds['sdist'] + if "sdist" in cmds: + _sdist = cmds["sdist"] elif "setuptools" in sys.modules: from setuptools.command.sdist import sdist as _sdist else: @@ -1874,8 +1899,8 @@ def make_release_tree(self, base_dir, files): # updated value target_versionfile = os.path.join(base_dir, cfg.versionfile_source) print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, - self._versioneer_generated_versions) + write_to_version_file(target_versionfile, self._versioneer_generated_versions) + cmds["sdist"] = cmd_sdist return cmds @@ -1935,11 +1960,9 @@ def do_setup(): root = get_root() try: cfg = get_config_from_root(root) - except (EnvironmentError, configparser.NoSectionError, - configparser.NoOptionError) as e: + except (EnvironmentError, configparser.NoSectionError, configparser.NoOptionError) as e: if isinstance(e, (EnvironmentError, configparser.NoSectionError)): - print("Adding sample versioneer config to setup.cfg", - file=sys.stderr) + print("Adding sample versioneer config to setup.cfg", file=sys.stderr) with open(os.path.join(root, "setup.cfg"), "a") as f: f.write(SAMPLE_CONFIG) print(CONFIG_ERROR, file=sys.stderr) @@ -1948,15 +1971,18 @@ def do_setup(): print(" creating %s" % cfg.versionfile_source) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - - ipy = os.path.join(os.path.dirname(cfg.versionfile_source), - "__init__.py") + f.write( + LONG + % { + "DOLLAR": "$", + "STYLE": cfg.style, + "TAG_PREFIX": cfg.tag_prefix, + "PARENTDIR_PREFIX": cfg.parentdir_prefix, + "VERSIONFILE_SOURCE": cfg.versionfile_source, + } + ) + + ipy = os.path.join(os.path.dirname(cfg.versionfile_source), "__init__.py") if os.path.exists(ipy): try: with open(ipy, "r") as f: @@ -2004,8 +2030,7 @@ def do_setup(): else: print(" 'versioneer.py' already in MANIFEST.in") if cfg.versionfile_source not in simple_includes: - print(" appending versionfile_source ('%s') to MANIFEST.in" % - cfg.versionfile_source) + print(" appending versionfile_source ('%s') to MANIFEST.in" % cfg.versionfile_source) with open(manifest_in, "a") as f: f.write("include %s\n" % cfg.versionfile_source) else: From c309a03985aca067e416fe426e775dcdb44b8fc3 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Mon, 12 May 2025 20:12:56 +0000 Subject: [PATCH 041/118] Fix NiftiDataWriter spacing handling for 1mm pixel dimensions Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/nii_data_writer_operator.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py index 003395ce..ed717c05 100644 --- a/monai/deploy/operators/nii_data_writer_operator.py +++ b/monai/deploy/operators/nii_data_writer_operator.py @@ -70,8 +70,11 @@ def convert_and_save(self, seg_image, nii_path): """ image_writer = SimpleITK.ImageFileWriter() + pixdim = seg_image.metadata()["pixdim"] + if pixdim[0] == 1: + pixdim = np.array(pixdim[1:4]) image = SimpleITK.GetImageFromArray(seg_image._data) - image.SetSpacing(seg_image.metadata()["pixdim"]) + image.SetSpacing(pixdim) if len(seg_image.metadata()["direction"]) == 16: direction = [] From db7b82c52f6a07a7b8fb3d547b165753c28d1ff4 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:22:11 +0000 Subject: [PATCH 042/118] Refactor nnUNet bundle inference operator to MONetBundleInferenceOperator and add implementation Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 4 ++-- monai/deploy/operators/__init__.py | 2 +- ...rence_operator.py => monet_bundle_inference_operator.py} | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename monai/deploy/operators/{monai_nnunet_bundle_inference_operator.py => monet_bundle_inference_operator.py} (96%) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 60b09fb2..37b86f09 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -27,7 +27,7 @@ IOMapping, ) -from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator +from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MONetBundleInferenceOperator from monai.deploy.operators.stl_conversion_operator import STLConversionOperator @@ -87,7 +87,7 @@ def compose(self): config_names = BundleConfigNames(config_names=["inference"]) # Same as the default - bundle_spleen_seg_op = MonainnUNetBundleInferenceOperator( + bundle_spleen_seg_op = MONetBundleInferenceOperator( self, input_mapping=[IOMapping("image", Image, IOType.IN_MEMORY)], output_mapping=[IOMapping("pred", Image, IOType.IN_MEMORY)], diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 4599048d..53f8c2c4 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -48,7 +48,7 @@ from .dicom_utils import EquipmentInfo, ModelInfo, random_with_n_digits, save_dcm_file, write_common_modules from .inference_operator import InferenceOperator from .monai_bundle_inference_operator import BundleConfigNames, IOMapping, MonaiBundleInferenceOperator -from .monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator +from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .monai_seg_inference_operator import MonaiSegInferenceOperator from .nii_data_loader_operator import NiftiDataLoader from .png_converter_operator import PNGConverterOperator diff --git a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py similarity index 96% rename from monai/deploy/operators/monai_nnunet_bundle_inference_operator.py rename to monai/deploy/operators/monet_bundle_inference_operator.py index 954e12e6..d1c4bbbf 100644 --- a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -13,7 +13,7 @@ from monai.deploy.utils.importutil import optional_import from typing import Any, Dict, Tuple, Union from monai.deploy.core import Image -from pathlib import Path + MONAI_UTILS = "monai.utils" nibabel, _ = optional_import("nibabel", "3.2.1") torch, _ = optional_import("torch", "1.10.2") @@ -35,10 +35,10 @@ Compose: Any = Compose_ MapTransform: Any = MapTransform_ ConfigParser: Any = ConfigParser_ -__all__ = ["MonainnUNetBundleInferenceOperator"] +__all__ = ["MONetBundleInferenceOperator"] -class MonainnUNetBundleInferenceOperator(MonaiBundleInferenceOperator): +class MONetBundleInferenceOperator(MonaiBundleInferenceOperator): """ A specialized operator for performing inference using the MONAI nnUNet bundle. This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific From f6923aae29889d9ea04f2f6fff93ca562a57a596 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:27:50 +0000 Subject: [PATCH 043/118] Update documentation to reflect changes from nnUNet to MONet Bundle inference operator Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 18 ++++-------------- .../monet_bundle_inference_operator.py | 2 +- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 37b86f09..8b3d1227 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -35,10 +35,10 @@ # pip_packages can be a string that is a path(str) to requirements.txt file or a list of packages. # The monai pkg is not required by this class, instead by the included operators. class AISpleennnUNetSegApp(Application): - """Demonstrates inference with built-in MONAI nnUNet Bundle inference operator with DICOM files as input/output + """Demonstrates inference with built-in MONet Bundle inference operator with DICOM files as input/output This application loads a set of DICOM instances, select the appropriate series, converts the series to - 3D volume image, performs inference with the built-in MONAI nnUNet Bundle inference operator, including pre-processing + 3D volume image, performs inference with the built-in MONet Bundle inference operator, including nnUNet resampling,pre-processing and post-processing, save the segmentation image in a DICOM Seg OID in an instance file, and optionally the surface mesh in STL format. @@ -46,8 +46,8 @@ class AISpleennnUNetSegApp(Application): Execution Time Estimate: - With a Nvidia RTXA600 48GB GPU, for an input DICOM Series of 139 instances, the execution time is around - 75 seconds with saving both DICOM Seg and surface mesh STL file. + With a Nvidia RTXA600 48GB GPU, for an input DICOM Series of size 106x415x415 and patches of size 64x192x160, the execution time is around + 50 seconds with saving both DICOM Seg and surface mesh STL file. """ def __init__(self, *args, **kwargs): @@ -162,16 +162,6 @@ def compose(self): """ if __name__ == "__main__": - # Creates the app and test it standalone. When running is this mode, please note the following: - # -m , for model file path - # -i , for input DICOM CT series folder - # -o , for the output folder, default $PWD/output - # e.g. - # monai-deploy exec app.py -i input -m model/model.ts - # - # export HOLOSCAN_INPUT_PATH=dcm - # export HOLOSCAN_MODEL_PATH=spleen_model/model.ts - # export HOLOSCAN_OUTPUT_PATH="output" logging.info(f"Begin {__name__}") AISpleennnUNetSegApp().run() logging.info(f"End {__name__}") diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index d1c4bbbf..9b926a64 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -40,7 +40,7 @@ class MONetBundleInferenceOperator(MonaiBundleInferenceOperator): """ - A specialized operator for performing inference using the MONAI nnUNet bundle. + A specialized operator for performing inference using the MONet bundle. This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific configurations and prediction logic. It initializes the nnUNet predictor and provides a method for performing inference on input data. From 53b2a3b26d3956705c3b810f7a63e81bd9ef23e4 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:32:56 +0000 Subject: [PATCH 044/118] Refactor import statements in app.py and monet_bundle_inference_operator.py for clarity Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 6 +---- .../monet_bundle_inference_operator.py | 23 +++++++++---------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 8b3d1227..71a59f93 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -22,11 +22,7 @@ from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator -from monai.deploy.operators.monai_bundle_inference_operator import ( - BundleConfigNames, - IOMapping, - -) +from monai.deploy.operators.monai_bundle_inference_operator import BundleConfigNames, IOMapping from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MONetBundleInferenceOperator from monai.deploy.operators.stl_conversion_operator import STLConversionOperator diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index 9b926a64..811c439f 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -9,10 +9,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config -from monai.deploy.utils.importutil import optional_import from typing import Any, Dict, Tuple, Union + from monai.deploy.core import Image +from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config +from monai.deploy.utils.importutil import optional_import MONAI_UTILS = "monai.utils" nibabel, _ = optional_import("nibabel", "3.2.1") @@ -44,12 +45,12 @@ class MONetBundleInferenceOperator(MonaiBundleInferenceOperator): This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific configurations and prediction logic. It initializes the nnUNet predictor and provides a method for performing inference on input data. - + Attributes ---------- _nnunet_predictor : torch.nn.Module The nnUNet predictor module used for inference. - + Methods ------- _init_config(config_names) @@ -65,16 +66,14 @@ def __init__( **kwargs, ): - super().__init__(*args, **kwargs) - - self._nnunet_predictor : torch.nn.Module = None - - - def _init_config(self, config_names): + + self._nnunet_predictor: torch.nn.Module = None + + def _init_config(self, config_names): super()._init_config(config_names) - parser = get_bundle_config(str(self._bundle_path), config_names) + parser = get_bundle_config(str(self._bundle_path), config_names) self._parser = parser self._nnunet_predictor = parser.get_parsed_content("network_def") @@ -83,7 +82,7 @@ def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, .. """Predicts output using the inferer.""" self._nnunet_predictor.predictor.network = self._model_network - #os.environ['nnUNet_def_n_proc'] = "1" + # os.environ['nnUNet_def_n_proc'] = "1" if len(data.shape) == 4: data = data[None] return self._nnunet_predictor(data) From d6d8f2c556f5bf1d2565712d3d8fd72323c9cc03 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:38:33 +0000 Subject: [PATCH 045/118] Update application title and fix operator name in imports for MONet Bundle Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.yaml | 2 +- monai/deploy/operators/__init__.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.yaml b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml index 62636118..9f65281c 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.yaml +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml @@ -15,7 +15,7 @@ # limitations under the License. --- application: - title: MONAI Deploy App Package - Spleen nnUNet Seg Inference + title: MONAI Deploy App Package - Spleen MONet Seg Inference version: 1.0 inputFormats: ["file"] outputFormats: ["file"] diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 53f8c2c4..18bc61a7 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -25,7 +25,7 @@ IOMapping ModelInfo MonaiBundleInferenceOperator - MonainnUNetBundleInferenceOperator + MONetBundleInferenceOperator MonaiSegInferenceOperator PNGConverterOperator PublisherOperator @@ -48,10 +48,10 @@ from .dicom_utils import EquipmentInfo, ModelInfo, random_with_n_digits, save_dcm_file, write_common_modules from .inference_operator import InferenceOperator from .monai_bundle_inference_operator import BundleConfigNames, IOMapping, MonaiBundleInferenceOperator -from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .monai_seg_inference_operator import MonaiSegInferenceOperator +from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .nii_data_loader_operator import NiftiDataLoader +from .nii_data_writer_operator import NiftiDataWriter from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter -from .nii_data_writer_operator import NiftiDataWriter From d0085a048586299af20e5478681adc6407245e95 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:39:56 +0000 Subject: [PATCH 046/118] Refactor NiftiDataLoader to return transposed numpy array from NIfTI image Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/nii_data_loader_operator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/nii_data_loader_operator.py b/monai/deploy/operators/nii_data_loader_operator.py index e886df24..67b0e070 100644 --- a/monai/deploy/operators/nii_data_loader_operator.py +++ b/monai/deploy/operators/nii_data_loader_operator.py @@ -80,7 +80,8 @@ def convert_and_save(self, nii_path): image_reader = SimpleITK.ImageFileReader() image_reader.SetFileName(str(nii_path)) image = image_reader.Execute() - return image + image_np = np.transpose(SimpleITK.GetArrayFromImage(image), [2, 1, 0]) + return image_np def test(): From 407b00c7fe5dbb803f5bb684dcabb9013a7352b1 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:42:28 +0000 Subject: [PATCH 047/118] Remove NiftiDataWriter operator and clean up imports in __init__.py Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/__init__.py | 1 - .../operators/nii_data_writer_operator.py | 103 ------------------ 2 files changed, 104 deletions(-) delete mode 100644 monai/deploy/operators/nii_data_writer_operator.py diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 18bc61a7..bd9de71a 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -51,7 +51,6 @@ from .monai_seg_inference_operator import MonaiSegInferenceOperator from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .nii_data_loader_operator import NiftiDataLoader -from .nii_data_writer_operator import NiftiDataWriter from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py deleted file mode 100644 index ed717c05..00000000 --- a/monai/deploy/operators/nii_data_writer_operator.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright 2021-2023 MONAI Consortium -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import logging -from pathlib import Path - -import numpy as np - -from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec -from monai.deploy.utils.importutil import optional_import - -SimpleITK, _ = optional_import("SimpleITK") - - -# @md.env(pip_packages=["SimpleITK>=2.0.2"]) -class NiftiDataWriter(Operator): - - def __init__(self, fragment: Fragment, *args, output_file: Path, **kwargs) -> None: - """Creates an instance with the file path to load image from. - - Args: - fragment (Fragment): An instance of the Application class which is derived from Fragment. - input_path (Path): The file Path to read from, overridden by valid named input on compute. - """ - self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) - - self.output_file = output_file - self.input_name_seg = "seg_image" - self.input_name_output_file = "output_file" - - # Need to call the base class constructor last - super().__init__(fragment, *args, **kwargs) - - def setup(self, spec: OperatorSpec): - spec.input(self.input_name_seg) - spec.input(self.input_name_output_file).condition(ConditionType.NONE) # Optional input not requiring sender. - - def compute(self, op_input, op_output, context): - """Performs computation with the provided context.""" - - - seg_image = op_input.receive(self.input_name_seg) - - - # If the optional named input, output_folder, has content, use it instead of the one set on the object. - # Since this input is optional, must check if data present and if Path or str. - output_file = None - try: - output_file = op_input.receive(self.input_name_output_file) - except Exception: - pass - - if not output_file or not isinstance(output_file, (Path, str)): - output_file = self.output_file - - self.convert_and_save(seg_image, output_file) - - def convert_and_save(self, seg_image, nii_path): - """ - reads the nifti image and returns a numpy image array - """ - image_writer = SimpleITK.ImageFileWriter() - - pixdim = seg_image.metadata()["pixdim"] - if pixdim[0] == 1: - pixdim = np.array(pixdim[1:4]) - image = SimpleITK.GetImageFromArray(seg_image._data) - image.SetSpacing(pixdim) - - if len(seg_image.metadata()["direction"]) == 16: - direction = [] - direction.extend(seg_image.metadata()["direction"][0:3]) - direction.extend(seg_image.metadata()["direction"][4:7]) - direction.extend(seg_image.metadata()["direction"][8:11]) - image.SetDirection(direction) - else: - image.SetDirection(seg_image.metadata()["direction"]) - - image.SetOrigin(seg_image.metadata()["origin"]) - - image_writer.SetFileName(nii_path) - image_writer.Execute(image) - - -def test(): - ... - - -def main(): - test() - - -if __name__ == "__main__": - main() From 77c144248003147059c48b5058181d90e7d0759c Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:44:11 +0000 Subject: [PATCH 048/118] Remove SimpleITK image handling from MonaiBundleInferenceOperator Signed-off-by: Simone Bendazzoli --- .../operators/monai_bundle_inference_operator.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index c15b0b66..d5aa9ee3 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -22,9 +22,9 @@ from typing import Any, Dict, List, Optional, Tuple, Type, Union import numpy as np - import SimpleITK from SimpleITK import Image as SimpleITKImage + from monai.deploy.core import AppContext, Fragment, Image, IOType, OperatorSpec from monai.deploy.utils.importutil import optional_import @@ -705,16 +705,6 @@ def _receive_input(self, name: str, op_input, context): logging.debug(f"Metadata of the converted input image: {metadata}") elif isinstance(value, np.ndarray): value = torch.from_numpy(value).to(self._device) - elif isinstance(value, SimpleITKImage): - metadata = {} - metadata["pixdim"] = np.asarray(value.GetSpacing()) - metadata["origin"] = np.asarray(value.GetOrigin()) - metadata["direction"] = np.asarray(value.GetDirection()) - if len(value.GetSize()) == 3: - metadata["pixdim"] = np.insert(np.asarray(value.GetSpacing()), 0, 1.0) - value = np.transpose(SimpleITK.GetArrayFromImage(value), [2, 1, 0]) - else: - value = np.transpose(SimpleITK.GetArrayFromImage(value), [0, 3, 2, 1]) # else value is some other object from memory From 14b9c9b3bf9f7cd5f10bd752b3015018ff87b321 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 24 Jun 2025 15:03:51 +0000 Subject: [PATCH 049/118] Fix import statement for MONetBundleInferenceOperator to use the correct module path Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 71a59f93..dfb2aa37 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -23,7 +23,7 @@ from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator from monai.deploy.operators.monai_bundle_inference_operator import BundleConfigNames, IOMapping -from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MONetBundleInferenceOperator +from monai.deploy.operators.monet_bundle_inference_operator import MONetBundleInferenceOperator from monai.deploy.operators.stl_conversion_operator import STLConversionOperator From 69065448794da0cd6c7a0b10432a8f0dc72bae9c Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:08:16 -0700 Subject: [PATCH 050/118] Fix _version.py and various version-related issues (#539) - Removed unnecessary logic in setup.py - Fix versioneer issues Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- monai/deploy/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 05090b52..415119da 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,3 +23,6 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] + +from . import _version +__version__ = _version.get_versions()['version'] From 23d50e7bdedd6b774a86fa48b00132e2ae16aa80 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 21:00:44 -0700 Subject: [PATCH 051/118] =?UTF-8?q?Bump=20version:=202.0.0=20=E2=86=92=203?= =?UTF-8?q?.0.0=20(#540)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump version: 2.0.0 β†’ 3.0.0 Signed-off-by: M Q * Bump version: 2.0.0 -> 3.0.0 with __init__.py fix Signed-off-by: M Q * Remove blank line complained by black Signed-off-by: M Q * Fix more formatting complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- monai/deploy/__init__.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 415119da..05090b52 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,6 +23,3 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] - -from . import _version -__version__ = _version.get_versions()['version'] From b7d56713b28d525fb112d30f844ce6b5f58d7beb Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Thu, 26 Jun 2025 19:35:13 +0000 Subject: [PATCH 052/118] Fix formatting in docstring and remove unused import statements in MONetBundleInferenceOperator Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 2 +- .../monet_bundle_inference_operator.py | 21 +------------------ 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index dfb2aa37..9402e233 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -34,7 +34,7 @@ class AISpleennnUNetSegApp(Application): """Demonstrates inference with built-in MONet Bundle inference operator with DICOM files as input/output This application loads a set of DICOM instances, select the appropriate series, converts the series to - 3D volume image, performs inference with the built-in MONet Bundle inference operator, including nnUNet resampling,pre-processing + 3D volume image, performs inference with the built-in MONet Bundle inference operator, including nnUNet resampling, pre-processing and post-processing, save the segmentation image in a DICOM Seg OID in an instance file, and optionally the surface mesh in STL format. diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index 811c439f..575c23e6 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -15,27 +15,8 @@ from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config from monai.deploy.utils.importutil import optional_import -MONAI_UTILS = "monai.utils" -nibabel, _ = optional_import("nibabel", "3.2.1") torch, _ = optional_import("torch", "1.10.2") -NdarrayOrTensor, _ = optional_import("monai.config", name="NdarrayOrTensor") -MetaTensor, _ = optional_import("monai.data.meta_tensor", name="MetaTensor") -PostFix, _ = optional_import("monai.utils.enums", name="PostFix") # For the default meta_key_postfix -first, _ = optional_import("monai.utils.misc", name="first") -ensure_tuple, _ = optional_import(MONAI_UTILS, name="ensure_tuple") -convert_to_dst_type, _ = optional_import(MONAI_UTILS, name="convert_to_dst_type") -Key, _ = optional_import(MONAI_UTILS, name="ImageMetaKey") -MetaKeys, _ = optional_import(MONAI_UTILS, name="MetaKeys") -SpaceKeys, _ = optional_import(MONAI_UTILS, name="SpaceKeys") -Compose_, _ = optional_import("monai.transforms", name="Compose") -ConfigParser_, _ = optional_import("monai.bundle", name="ConfigParser") -MapTransform_, _ = optional_import("monai.transforms", name="MapTransform") -SimpleInferer, _ = optional_import("monai.inferers", name="SimpleInferer") - -Compose: Any = Compose_ -MapTransform: Any = MapTransform_ -ConfigParser: Any = ConfigParser_ __all__ = ["MONetBundleInferenceOperator"] @@ -82,7 +63,7 @@ def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, .. """Predicts output using the inferer.""" self._nnunet_predictor.predictor.network = self._model_network - # os.environ['nnUNet_def_n_proc'] = "1" + if len(data.shape) == 4: data = data[None] return self._nnunet_predictor(data) From b22e043c4516b95c1cc86c309555fb22935f4e14 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Thu, 26 Jun 2025 19:39:29 +0000 Subject: [PATCH 053/118] Enhance predict method to support multimodal data concatenation and update docstring Signed-off-by: Simone Bendazzoli --- .../operators/monet_bundle_inference_operator.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index 575c23e6..ef567c90 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -14,9 +14,10 @@ from monai.deploy.core import Image from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config from monai.deploy.utils.importutil import optional_import +from monai.transforms import ConcatItemsd, ResampleToMatch torch, _ = optional_import("torch", "1.10.2") - +MetaTensor, _ = optional_import("monai.data.meta_tensor", name="MetaTensor") __all__ = ["MONetBundleInferenceOperator"] @@ -60,10 +61,18 @@ def _init_config(self, config_names): self._nnunet_predictor = parser.get_parsed_content("network_def") def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, ...], Dict[Any, Any]]: - """Predicts output using the inferer.""" + """Predicts output using the inferer. If multimodal data is provided as keyword arguments, + it concatenates the data with the main input data.""" self._nnunet_predictor.predictor.network = self._model_network + if len(kwargs) > 0: + multimodal_data = {"image": data} + for key in kwargs.keys(): + if isinstance(kwargs[key], MetaTensor): + multimodal_data[key] = ResampleToMatch(mode="bilinear")(kwargs[key], img_dst=data + ) + data = ConcatItemsd(keys=list(multimodal_data.keys()),name="image")(multimodal_data)["image"] if len(data.shape) == 4: data = data[None] return self._nnunet_predictor(data) From 42fc27e04b84115b679c19a5a3b8376c3b5a8c9e Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Thu, 16 Nov 2023 17:34:52 -0800 Subject: [PATCH 054/118] test build Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 2067e24a..4457de82 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -27,7 +27,11 @@ jobs: - name: Check formatting run: | source .venv/bin/activate - ./run check -f + python3 -c 'import sys; print(sys.executable)' + python3 -c 'import site; print(site.getsitepackages())' + python3 -m pip freeze + python3 -c 'from holoscan.core import *' + ./run check -f - name: Run Unit tests run: | source .venv/bin/activate From 8357338f01ab069c877eb57e6b6b038b52c1517b Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Thu, 16 Nov 2023 19:05:11 -0800 Subject: [PATCH 055/118] Address a removed monai function, fix CUDA 11 runtime lib, and resurrect option to omit or not DICOM SEG empty frame (#471) * Updated the code where a deprecated monai core function is used. Signed-off-by: M Q * Add back the option for if omitting DICOM SEG empty frames, defaults to true. Signed-off-by: M Q * Pin torch to ~=2.0.1 for libcudart.11.0 Signed-off-by: M Q * Test packages Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 3 +- .../ai_unetr_seg_app/unetr_seg_operator.py | 4 +- .../mednist_classifier_monaideploy.py | 6 +- .../operators/dicom_seg_writer_operator.py | 8 +- .../tutorials/02_mednist_app-prebuilt.ipynb | 598 ++++++++-------- notebooks/tutorials/02_mednist_app.ipynb | 665 ++++++++++-------- platforms/nuance_pin/app/inference.py | 3 +- requirements-dev.txt | 2 +- requirements-examples.txt | 2 +- 9 files changed, 702 insertions(+), 589 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 4457de82..73fe3442 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -30,8 +30,9 @@ jobs: python3 -c 'import sys; print(sys.executable)' python3 -c 'import site; print(site.getsitepackages())' python3 -m pip freeze + export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH python3 -c 'from holoscan.core import *' - ./run check -f + ./run check -f - name: Run Unit tests run: | source .venv/bin/activate diff --git a/examples/apps/ai_unetr_seg_app/unetr_seg_operator.py b/examples/apps/ai_unetr_seg_app/unetr_seg_operator.py index d368459a..d48b68b1 100644 --- a/examples/apps/ai_unetr_seg_app/unetr_seg_operator.py +++ b/examples/apps/ai_unetr_seg_app/unetr_seg_operator.py @@ -18,10 +18,10 @@ from monai.deploy.operators.monai_seg_inference_operator import InMemImageReader, MonaiSegInferenceOperator from monai.transforms import ( Activationsd, - AddChanneld, AsDiscreted, Compose, CropForegroundd, + EnsureChannelFirstd, Invertd, LoadImaged, Orientationd, @@ -132,7 +132,7 @@ def pre_process(self, img_reader, out_dir: str = "./input_images") -> Compose: return Compose( [ LoadImaged(keys=my_key, reader=img_reader), - AddChanneld(keys=my_key), + EnsureChannelFirstd(keys=my_key), # The SaveImaged transform can be commented out to save a couple seconds. # Uncompress NIfTI file, nii, is used favoring speed over size, but can be changed to nii.gz SaveImaged( diff --git a/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py b/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py index 93eb3709..95d872e0 100644 --- a/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py +++ b/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py @@ -19,7 +19,7 @@ from monai.deploy.conditions import CountCondition from monai.deploy.core import AppContext, Application, ConditionType, Fragment, Image, Operator, OperatorSpec from monai.deploy.operators.dicom_text_sr_writer_operator import DICOMTextSRWriterOperator, EquipmentInfo, ModelInfo -from monai.transforms import AddChannel, Compose, EnsureType, ScaleIntensity +from monai.transforms import Compose, EnsureChannelFirst, EnsureType, ScaleIntensity MEDNIST_CLASSES = ["AbdomenCT", "BreastMRI", "CXR", "ChestCT", "Hand", "HeadCT"] @@ -170,7 +170,7 @@ def setup(self, spec: OperatorSpec): @property def transform(self): - return Compose([AddChannel(), ScaleIntensity(), EnsureType()]) + return Compose([EnsureChannelFirst(channel_dim="no_channel"), ScaleIntensity(), EnsureType()]) def compute(self, op_input, op_output, context): import json @@ -218,7 +218,7 @@ def compose(self): self, app_context=app_context, output_folder=app_output_path, model_path=model_path, name="classifier_op" ) - my_model_info = ModelInfo("MONAI WG Trainer", "MEDNIST Classifier", "0.1", "xyz") + my_model_info = ModelInfo("MONAI WG Trainer", "MEDNIST Classifier", "0.1", "1234") my_equipment = EquipmentInfo(manufacturer="MOANI Deploy App SDK", manufacturer_model="DICOM SR Writer") my_special_tags = {"SeriesDescription": "Not for clinical use. The result is for research use only."} dicom_sr_operator = DICOMTextSRWriterOperator( diff --git a/monai/deploy/operators/dicom_seg_writer_operator.py b/monai/deploy/operators/dicom_seg_writer_operator.py index 55840f61..f5bc5ae4 100644 --- a/monai/deploy/operators/dicom_seg_writer_operator.py +++ b/monai/deploy/operators/dicom_seg_writer_operator.py @@ -184,6 +184,7 @@ def __init__( segment_descriptions: List[SegmentDescription], output_folder: Path, custom_tags: Optional[Dict[str, str]] = None, + omit_empty_frames: bool = True, **kwargs, ): """Instantiates the DICOM Seg Writer instance with optional list of segment label strings. @@ -205,12 +206,16 @@ def __init__( Object encapsulating the description of each segment present in the segmentation. output_folder: Folder for file output, overridden by named input on compute. Defaults to current working dir's child folder, output. - custom_tags: OptonalDict[str, str], optional + custom_tags: Optonal[Dict[str, str]], optional Dictionary for setting custom DICOM tags using Keywords and str values only + omit_empty_frames: bool, optional + Whether to omit frames that contain no segmented pixels from the output segmentation. + Defaults to True, same as the underlying lib API. """ self._seg_descs = [sd.to_segment_description(n) for n, sd in enumerate(segment_descriptions, 1)] self._custom_tags = custom_tags + self._omit_empty_frames = omit_empty_frames self.output_folder = output_folder if output_folder else DICOMSegmentationWriterOperator.DEFAULT_OUTPUT_FOLDER self.input_name_seg = "seg_image" @@ -323,6 +328,7 @@ def create_dicom_seg(self, image: np.ndarray, dicom_series: DICOMSeries, output_ manufacturer_model_name="MONAI Deploy App SDK", software_versions=version_str, device_serial_number="0000", + omit_empty_frames=self._omit_empty_frames, ) # Adding a few tags that are not in the Dataset diff --git a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb index 3647b777..3c3a1a7c 100644 --- a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb +++ b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb @@ -28,12 +28,12 @@ "output_type": "stream", "text": [ "Cloning into 'source'...\n", - "remote: Enumerating objects: 289, done.\u001b[K\n", - "remote: Counting objects: 100% (289/289), done.\u001b[K\n", - "remote: Compressing objects: 100% (255/255), done.\u001b[K\n", - "remote: Total 289 (delta 60), reused 126 (delta 20), pack-reused 0\u001b[K\n", - "Receiving objects: 100% (289/289), 1.22 MiB | 593.00 KiB/s, done.\n", - "Resolving deltas: 100% (60/60), done.\n" + "remote: Enumerating objects: 276, done.\u001b[K\n", + "remote: Counting objects: 100% (276/276), done.\u001b[K\n", + "remote: Compressing objects: 100% (223/223), done.\u001b[K\n", + "remote: Total 276 (delta 56), reused 143 (delta 31), pack-reused 0\u001b[K\n", + "Receiving objects: 100% (276/276), 1.41 MiB | 1.83 MiB/s, done.\n", + "Resolving deltas: 100% (56/56), done.\n" ] } ], @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -70,42 +70,41 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (0.5.1+16.g23189de)\n", + "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (0.6.0)\n", "Requirement already satisfied: numpy>=1.21.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (1.24.4)\n", - "Requirement already satisfied: networkx>=2.4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (3.1)\n", - "Requirement already satisfied: holoscan>=0.5.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (0.6.0)\n", + "Requirement already satisfied: holoscan~=0.6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (0.6.0)\n", "Requirement already satisfied: colorama>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (0.4.6)\n", - "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (4.1.2)\n", - "Requirement already satisfied: cloudpickle~=2.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan>=0.5.0->monai-deploy-app-sdk) (2.2.1)\n", - "Requirement already satisfied: python-on-whales~=0.60 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan>=0.5.0->monai-deploy-app-sdk) (0.64.2)\n", - "Requirement already satisfied: Jinja2~=3.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan>=0.5.0->monai-deploy-app-sdk) (3.1.2)\n", - "Requirement already satisfied: packaging~=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan>=0.5.0->monai-deploy-app-sdk) (23.1)\n", - "Requirement already satisfied: pyyaml~=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan>=0.5.0->monai-deploy-app-sdk) (6.0.1)\n", - "Requirement already satisfied: requests~=2.28 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan>=0.5.0->monai-deploy-app-sdk) (2.31.0)\n", - "Requirement already satisfied: pip>=20.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan>=0.5.0->monai-deploy-app-sdk) (23.2.1)\n", - "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan>=0.5.0->monai-deploy-app-sdk) (0.0.4)\n", + "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (4.1.5)\n", + "Requirement already satisfied: cloudpickle~=2.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (2.2.1)\n", + "Requirement already satisfied: python-on-whales~=0.60 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (0.67.0)\n", + "Requirement already satisfied: Jinja2~=3.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (3.1.2)\n", + "Requirement already satisfied: packaging~=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (23.2)\n", + "Requirement already satisfied: pyyaml~=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (6.0.1)\n", + "Requirement already satisfied: requests~=2.28 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (2.31.0)\n", + "Requirement already satisfied: pip>=20.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (23.3.1)\n", + "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (0.0.5)\n", "Requirement already satisfied: importlib-metadata>=3.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (6.8.0)\n", - "Requirement already satisfied: typing-extensions>=4.7.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.7.1)\n", - "Requirement already satisfied: zipp>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from importlib-metadata>=3.6->typeguard>=3.0.0->monai-deploy-app-sdk) (3.16.2)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from Jinja2~=3.1->holoscan>=0.5.0->monai-deploy-app-sdk) (2.1.3)\n", - "Requirement already satisfied: pydantic!=2.0.*,<3,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk) (2.2.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk) (4.66.1)\n", - "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk) (0.9.0)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan>=0.5.0->monai-deploy-app-sdk) (3.2.0)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan>=0.5.0->monai-deploy-app-sdk) (3.4)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan>=0.5.0->monai-deploy-app-sdk) (2.0.4)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan>=0.5.0->monai-deploy-app-sdk) (2023.7.22)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from wheel-axle-runtime<1.0->holoscan>=0.5.0->monai-deploy-app-sdk) (3.12.2)\n", - "Requirement already satisfied: annotated-types>=0.4.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from pydantic!=2.0.*,<3,>=1.5->python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk) (0.5.0)\n", - "Requirement already satisfied: pydantic-core==2.6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from pydantic!=2.0.*,<3,>=1.5->python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk) (2.6.0)\n", - "Requirement already satisfied: click<9.0.0,>=7.1.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from typer>=0.4.1->python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk) (8.1.7)\n" + "Requirement already satisfied: typing-extensions>=4.7.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.8.0)\n", + "Requirement already satisfied: zipp>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from importlib-metadata>=3.6->typeguard>=3.0.0->monai-deploy-app-sdk) (3.17.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from Jinja2~=3.1->holoscan~=0.6.0->monai-deploy-app-sdk) (2.1.3)\n", + "Requirement already satisfied: pydantic!=2.0.*,<3,>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (2.5.1)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (4.66.1)\n", + "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (0.9.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk) (2.1.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk) (2023.7.22)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from wheel-axle-runtime<1.0->holoscan~=0.6.0->monai-deploy-app-sdk) (3.13.1)\n", + "Requirement already satisfied: annotated-types>=0.4.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from pydantic!=2.0.*,<3,>=1.9->python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (0.6.0)\n", + "Requirement already satisfied: pydantic-core==2.14.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from pydantic!=2.0.*,<3,>=1.9->python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (2.14.3)\n", + "Requirement already satisfied: click<9.0.0,>=7.1.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from typer>=0.4.1->python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (8.1.7)\n" ] } ], @@ -123,38 +122,36 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: monai in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (1.2.0)\n", - "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (10.0.0)\n", - "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai) (2.0.1)\n", + "Requirement already satisfied: monai in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (1.3.0)\n", + "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (10.0.1)\n", "Requirement already satisfied: numpy>=1.20 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai) (1.24.4)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (3.12.2)\n", - "Requirement already satisfied: typing-extensions in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (4.7.1)\n", + "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai) (2.1.1)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (3.13.1)\n", + "Requirement already satisfied: typing-extensions in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (4.8.0)\n", "Requirement already satisfied: sympy in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (1.12)\n", "Requirement already satisfied: networkx in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (3.1)\n", "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (3.1.2)\n", - "Requirement already satisfied: nvidia-cuda-nvrtc-cu11==11.7.99 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.7.99)\n", - "Requirement already satisfied: nvidia-cuda-runtime-cu11==11.7.99 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.7.99)\n", - "Requirement already satisfied: nvidia-cuda-cupti-cu11==11.7.101 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.7.101)\n", - "Requirement already satisfied: nvidia-cudnn-cu11==8.5.0.96 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (8.5.0.96)\n", - "Requirement already satisfied: nvidia-cublas-cu11==11.10.3.66 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.10.3.66)\n", - "Requirement already satisfied: nvidia-cufft-cu11==10.9.0.58 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (10.9.0.58)\n", - "Requirement already satisfied: nvidia-curand-cu11==10.2.10.91 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (10.2.10.91)\n", - "Requirement already satisfied: nvidia-cusolver-cu11==11.4.0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.4.0.1)\n", - "Requirement already satisfied: nvidia-cusparse-cu11==11.7.4.91 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.7.4.91)\n", - "Requirement already satisfied: nvidia-nccl-cu11==2.14.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (2.14.3)\n", - "Requirement already satisfied: nvidia-nvtx-cu11==11.7.91 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.7.91)\n", - "Requirement already satisfied: triton==2.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (2.0.0)\n", - "Requirement already satisfied: setuptools in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.9->monai) (68.1.2)\n", - "Requirement already satisfied: wheel in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.9->monai) (0.41.2)\n", - "Requirement already satisfied: cmake in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from triton==2.0.0->torch>=1.9->monai) (3.27.2)\n", - "Requirement already satisfied: lit in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from triton==2.0.0->torch>=1.9->monai) (16.0.6)\n", + "Requirement already satisfied: fsspec in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (2023.10.0)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.105)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.105)\n", + "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.105)\n", + "Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (8.9.2.26)\n", + "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.3.1)\n", + "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.0.2.54)\n", + "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (10.3.2.106)\n", + "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.4.5.107)\n", + "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.0.106)\n", + "Requirement already satisfied: nvidia-nccl-cu12==2.18.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (2.18.1)\n", + "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.105)\n", + "Requirement already satisfied: triton==2.1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (2.1.0)\n", + "Requirement already satisfied: nvidia-nvjitlink-cu12 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.9->monai) (12.3.101)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from jinja2->torch>=1.9->monai) (2.1.3)\n", "Requirement already satisfied: mpmath>=0.19 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from sympy->torch>=1.9->monai) (1.3.0)\n" ] @@ -176,7 +173,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -184,22 +181,22 @@ "output_type": "stream", "text": [ "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (4.7.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (3.12.2)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (3.13.1)\n", "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (2.31.0)\n", "Requirement already satisfied: six in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (1.16.0)\n", "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.66.1)\n", "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.12.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from beautifulsoup4->gdown) (2.4.1)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.2.0)\n", + "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from beautifulsoup4->gdown) (2.5)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.3.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.4)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2.0.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2.1.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2023.7.22)\n", "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (1.7.1)\n", "Downloading...\n", "From (uriginal): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E\n", - "From (redirected): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E&confirm=t&uuid=817bd6c8-6cd7-4015-8689-f48a9825afc9\n", + "From (redirected): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E&confirm=t&uuid=d9974e09-6ccd-4416-9f41-2c3702a3bea7\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_classifier_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 28.6M/28.6M [00:00<00:00, 56.1MB/s]\n" + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 28.6M/28.6M [00:00<00:00, 64.3MB/s]\n" ] } ], @@ -211,7 +208,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -251,7 +248,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -287,21 +284,21 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 00:27:37,497] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", - "[2023-08-30 00:27:37,497] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2023-08-30 00:27:37,498] [INFO] (packager) - Scanning for models in {models_path}...\n", - "[2023-08-30 00:27:37,498] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2023-08-30 00:27:37,498] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", - "[2023-08-30 00:27:37,500] [INFO] (packager) - Generating app.json...\n", - "[2023-08-30 00:27:37,500] [INFO] (packager) - Generating pkg.json...\n", - "[2023-08-30 00:27:37,500] [DEBUG] (common) - \n", + "[2023-11-15 18:37:06,027] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", + "[2023-11-15 18:37:06,027] [INFO] (packager.parameters) - Detected application type: Python File\n", + "[2023-11-15 18:37:06,027] [INFO] (packager) - Scanning for models in {models_path}...\n", + "[2023-11-15 18:37:06,027] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2023-11-15 18:37:06,027] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", + "[2023-11-15 18:37:06,030] [INFO] (packager) - Generating app.json...\n", + "[2023-11-15 18:37:06,030] [INFO] (packager) - Generating pkg.json...\n", + "[2023-11-15 18:37:06,033] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -336,7 +333,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2023-08-30 00:27:37,501] [DEBUG] (common) - \n", + "[2023-11-15 18:37:06,033] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -355,7 +352,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2023-08-30 00:27:37,533] [DEBUG] (packager.builder) - \n", + "[2023-11-15 18:37:06,061] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", @@ -433,9 +430,8 @@ "RUN pip install holoscan==0.6.0\n", "\n", "\n", - "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "# Install MONAI Deploy from PyPI org\n", + "RUN pip install monai-deploy-app-sdk==0.6.0\n", "\n", "\n", "\n", @@ -451,7 +447,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2023-08-30 00:27:37,534] [INFO] (packager.builder) - \n", + "[2023-11-15 18:37:06,061] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -460,16 +456,18 @@ " Cache: Enabled\n", " Configuration: dgpu\n", " Holoiscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + " MONAI Deploy App SDK Package: pypi.org\n", " gRPC Health Probe: N/A\n", " SDK Version: 0.6.0\n", " SDK: monai-deploy\n", " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2023-08-30 00:27:37,873] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2023-08-30 00:27:37,873] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2023-11-15 18:37:06,311] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2023-11-15 18:37:06,312] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", + "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.67kB done\n", + "#1 transferring dockerfile: 2.49kB done\n", "#1 DONE 0.1s\n", "\n", "#2 [internal] load .dockerignore\n", @@ -477,180 +475,175 @@ "#2 DONE 0.1s\n", "\n", "#3 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#3 DONE 0.7s\n", + "#3 DONE 0.4s\n", "\n", "#4 [internal] load build context\n", "#4 DONE 0.0s\n", "\n", - "#5 importing cache manifest from local:8636426000862419753\n", + "#5 importing cache manifest from local:12435489437730595250\n", "#5 DONE 0.0s\n", "\n", - "#6 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#6 DONE 0.7s\n", + "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc 0.1s done\n", + "#6 DONE 0.1s\n", "\n", - "#7 [ 1/22] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", - "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc 0.1s done\n", - "#7 DONE 0.1s\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", + "#7 DONE 0.7s\n", "\n", "#4 [internal] load build context\n", - "#4 transferring context: 28.74MB 0.2s done\n", + "#4 transferring context: 28.60MB 0.3s done\n", "#4 DONE 0.3s\n", "\n", - "#8 [19/22] COPY ./map/app.json /etc/holoscan/app.json\n", + "#8 [11/21] RUN chmod +x /var/holoscan/tools\n", "#8 CACHED\n", "\n", - "#9 [ 2/22] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#9 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#9 CACHED\n", "\n", - "#10 [15/22] RUN pip install holoscan==0.6.0\n", + "#10 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#10 CACHED\n", "\n", - "#11 [ 5/22] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#11 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#11 CACHED\n", "\n", - "#12 [ 9/22] WORKDIR /var/holoscan\n", + "#12 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#12 CACHED\n", "\n", - "#13 [14/22] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#13 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#13 CACHED\n", "\n", - "#14 [ 3/22] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#14 [ 9/21] WORKDIR /var/holoscan\n", "#14 CACHED\n", "\n", - "#15 [12/22] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#15 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#15 CACHED\n", "\n", - "#16 [16/22] COPY ./monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "#16 [10/21] COPY ./tools /var/holoscan/tools\n", "#16 CACHED\n", "\n", - "#17 [ 7/22] RUN chown -R holoscan /var/holoscan/input\n", + "#17 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#17 CACHED\n", "\n", - "#18 [11/22] RUN chmod +x /var/holoscan/tools\n", + "#18 [17/21] COPY ./models /opt/holoscan/models\n", "#18 CACHED\n", "\n", - "#19 [18/22] COPY ./models /opt/holoscan/models\n", + "#19 [16/21] RUN pip install monai-deploy-app-sdk==0.6.0\n", "#19 CACHED\n", "\n", - "#20 [13/22] RUN pip install --upgrade pip\n", + "#20 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#20 CACHED\n", "\n", - "#21 [ 6/22] RUN chown -R holoscan /var/holoscan\n", + "#21 [13/21] RUN pip install --upgrade pip\n", "#21 CACHED\n", "\n", - "#22 [ 4/22] RUN groupadd -g 1000 holoscan\n", + "#22 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#22 CACHED\n", "\n", - "#23 [17/22] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "#23 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", "#23 CACHED\n", "\n", - "#24 [20/22] COPY ./app.config /var/holoscan/app.yaml\n", + "#24 [ 4/21] RUN groupadd -g 1000 holoscan\n", "#24 CACHED\n", "\n", - "#25 [21/22] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#25 [15/21] RUN pip install holoscan==0.6.0\n", "#25 CACHED\n", "\n", - "#26 [ 8/22] RUN chown -R holoscan /var/holoscan/output\n", + "#26 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", "#26 CACHED\n", "\n", - "#27 [10/22] COPY ./tools /var/holoscan/tools\n", + "#27 [21/21] COPY ./app /opt/holoscan/app\n", "#27 CACHED\n", "\n", - "#28 [22/22] COPY ./app /opt/holoscan/app\n", - "#28 CACHED\n", - "\n", - "#29 exporting to docker image format\n", - "#29 exporting layers done\n", - "#29 exporting manifest sha256:d3b7e9f7074b67ee41792399d3628933430a1008bb4b0ea55a4c5bbd6f55c0ff done\n", - "#29 exporting config sha256:5c18974168b1fe160a2b339079dc229ca5da7436a35b371fa7e84c98bbffc41f\n", - "#29 exporting config sha256:5c18974168b1fe160a2b339079dc229ca5da7436a35b371fa7e84c98bbffc41f done\n", - "#29 sending tarball\n", - "#29 ...\n", - "\n", - "#30 importing to docker\n", - "#30 DONE 0.5s\n", - "\n", - "#29 exporting to docker image format\n", - "#29 sending tarball 60.0s done\n", - "#29 DONE 60.1s\n", - "\n", - "#31 exporting content cache\n", - "#31 preparing build cache for export\n", - "#31 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d\n", - "#31 preparing build cache for export 0.5s done\n", - "#31 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d done\n", - "#31 writing layer sha256:0ce020987cfa5cd1654085af3bb40779634eb3d792c4a4d6059036463ae0040d done\n", - "#31 writing layer sha256:0d30a78cb8a1aa805a492552b4ca85bc45495e1124639d686d75536c6a92de72 done\n", - "#31 writing layer sha256:0dd1cff2f3adeba05c3efdf05c6f9ca4b0b2f59c95bb3f29d713b7b30615f1e5 done\n", - "#31 writing layer sha256:0f65089b284381bf795d15b1a186e2a8739ea957106fa526edef0d738e7cda70 done\n", - "#31 writing layer sha256:12a47450a9f9cc5d4edab65d0f600dbbe8b23a1663b0b3bb2c481d40e074b580 done\n", - "#31 writing layer sha256:18a470321fd8787a309fd093c140e1427c4b14f6d9d775054985aeae6510eb36 done\n", - "#31 writing layer sha256:19c20b65326c1511f8ab02f4a41453f8c0b6d9f2bdea8bb25038b628cef67ab9 done\n", - "#31 writing layer sha256:1de965777e2e37c7fabe00bdbf3d0203ca83ed30a71a5479c3113fe4fc48c4bb done\n", - "#31 writing layer sha256:22b384cd1e678fc56dc95c82f42e7a540d055418d0f1eef8d908c88305e23a88 done\n", - "#31 writing layer sha256:24b5aa2448e920814dd67d7d3c0169b2cdacb13c4048d74ded3b4317843b13ff done\n", - "#31 writing layer sha256:2d42104dbf0a7cc962b791f6ab4f45a803f8a36d296f996aca180cfb2f3e30d0 done\n", - "#31 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff done\n", - "#31 writing layer sha256:38794be1b5dc99645feabf89b22cd34fb5bdffb5164ad920e7df94f353efe9c0 done\n", - "#31 writing layer sha256:38f963dc57c1e7b68a738fe39ed9f9345df7188111a047e2163a46648d7f1d88 done\n", - "#31 writing layer sha256:3e7e4c9bc2b136814c20c04feb4eea2b2ecf972e20182d88759931130cfb4181 done\n", - "#31 writing layer sha256:3fd77037ad585442cd82d64e337f49a38ddba50432b2a1e563a48401d25c79e6 done\n", - "#31 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0 done\n", - "#31 writing layer sha256:45893188359aca643d5918c9932da995364dc62013dfa40c075298b1baabece3 done\n", - "#31 writing layer sha256:49bc651b19d9e46715c15c41b7c0daa007e8e25f7d9518f04f0f06592799875a done\n", - "#31 writing layer sha256:4c12db5118d8a7d909e4926d69a2192d2b3cd8b110d49c7504a4f701258c1ccc done\n", - "#31 writing layer sha256:4cc43a803109d6e9d1fd35495cef9b1257035f5341a2db54f7a1940815b6cc65 done\n", - "#31 writing layer sha256:4d32b49e2995210e8937f0898327f196d3fcc52486f0be920e8b2d65f150a7ab done\n", - "#31 writing layer sha256:4d6fe980bad9cd7b2c85a478c8033cae3d098a81f7934322fb64658b0c8f9854 done\n", - "#31 writing layer sha256:4e78baa7922aa440fcba2b268af798b094fdb64e4450a916c15027abc06a1123 done\n", - "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#31 writing layer sha256:5150182f1ff123399b300ca469e00f6c4d82e1b9b72652fb8ee7eab370245236 done\n", - "#31 writing layer sha256:595c38fa102c61c3dda19bdab70dcd26a0e50465b986d022a84fa69023a05d0f done\n", - "#31 writing layer sha256:59d451175f6950740e26d38c322da0ef67cb59da63181eb32996f752ba8a2f17 done\n", - "#31 writing layer sha256:5ad1f2004580e415b998124ea394e9d4072a35d70968118c779f307204d6bd17 done\n", - "#31 writing layer sha256:62598eafddf023e7f22643485f4321cbd51ff7eee743b970db12454fd3c8c675 done\n", - "#31 writing layer sha256:63d7e616a46987136f4cc9eba95db6f6327b4854cfe3c7e20fed6db0c966e380 done\n", - "#31 writing layer sha256:654056fd3057d315a0066ee5f4367ed8954486493fe95c0c171c27dff8ac0ffc done\n", - "#31 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f done\n", - "#31 writing layer sha256:698318e5a60e5e0d48c45bf992f205a9532da567fdfe94bd59be2e192975dd6f done\n", - "#31 writing layer sha256:6ddc1d0f91833b36aac1c6f0c8cea005c87d94bab132d46cc06d9b060a81cca3 done\n", - "#31 writing layer sha256:74ac1f5a47c0926bff1e997bb99985a09926f43bd0895cb27ceb5fa9e95f8720 done\n", - "#31 writing layer sha256:7577973918dd30e764733a352a93f418000bc3181163ca451b2307492c1a6ba9 done\n", - "#31 writing layer sha256:7f038e6d9e00dcbfc90c1c97d7bb11aca6cacd2aa279d9a732f08701dafb8e8c done\n", - "#31 writing layer sha256:81ab55ca8bce88347661e1c1e6d58975b998017ad2e91a1040bd3f5017741d2b done\n", - "#31 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2 done\n", - "#31 writing layer sha256:8a7451db9b4b817b3b33904abddb7041810a4ffe8ed4a034307d45d9ae9b3f2a done\n", - "#31 writing layer sha256:916f4054c6e7f10de4fd7c08ffc75fa23ebecca4eceb8183cb1023b33b1696c9 done\n", - "#31 writing layer sha256:9463aa3f56275af97693df69478a2dc1d171f4e763ca6f7b6f370a35e605c154 done\n", - "#31 writing layer sha256:955fd173ed884230c2eded4542d10a97384b408537be6bbb7c4ae09ccd6fb2d0 done\n", - "#31 writing layer sha256:9c42a4ee99755f441251e6043b2cbba16e49818a88775e7501ec17e379ce3cfd done\n", - "#31 writing layer sha256:9c63be0a86e3dc4168db3814bf464e40996afda0031649d9faa8ff7568c3154f done\n", - "#31 writing layer sha256:9e04bda98b05554953459b5edef7b2b14d32f1a00b979a23d04b6eb5c191e66b done\n", - "#31 writing layer sha256:a4a0c690bc7da07e592514dccaa26098a387e8457f69095e922b6d73f7852502 done\n", - "#31 writing layer sha256:a4aafbc094d78a85bef41036173eb816a53bcd3e2564594a32f542facdf2aba6 done\n", - "#31 writing layer sha256:ae36a4d38b76948e39a5957025c984a674d2de18ce162a8caaa536e6f06fccea done\n", - "#31 writing layer sha256:b2fa40114a4a0725c81b327df89c0c3ed5c05ca9aa7f1157394d5096cf5460ce done\n", - "#31 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#31 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6 done\n", - "#31 writing layer sha256:cb506fbdedc817e3d074f609e2edbf9655aacd7784610a1bbac52f2d7be25438 done\n", - "#31 writing layer sha256:d0e403a8e125a305b51fe2bd601c34c0723817079bca25fcda7679c88d8bb5b4 done\n", - "#31 writing layer sha256:d2a6fe65a1f84edb65b63460a75d1cac1aa48b72789006881b0bcfd54cd01ffd done\n", - "#31 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304 done\n", - "#31 writing layer sha256:ddc2ade4f6fe866696cb638c8a102cb644fa842c2ca578392802b3e0e5e3bcb7 done\n", - "#31 writing layer sha256:e2cfd7f6244d6f35befa6bda1caa65f1786cecf3f00ef99d7c9a90715ce6a03c done\n", - "#31 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907 done\n", - "#31 writing layer sha256:eaf45e9f32d1f5a9983945a1a9f8dedbb475bc0f578337610e00b4dedec87c20 done\n", - "#31 writing layer sha256:eb411bef39c013c9853651e68f00965dbd826d829c4e478884a2886976e9c989 done\n", - "#31 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759 done\n", - "#31 writing layer sha256:ef4466d6f927d29d404df9c5af3ef5733c86fa14e008762c90110b963978b1e7 done\n", - "#31 writing layer sha256:efeed9f42c39c54037a94758f3241cba081ba3b9757cd3bb02b68236e32407a8 done\n", - "#31 writing layer sha256:f346e3ecdf0bee048fa1e3baf1d3128ff0283b903f03e97524944949bd8882e5 done\n", - "#31 writing layer sha256:f3f9a00a1ce9aadda250aacb3e66a932676badc5d8519c41517fdf7ea14c13ed done\n", - "#31 writing layer sha256:fd849d9bd8889edd43ae38e9f21a912430c8526b2c18f3057a3b2cd74eb27b31 done\n", - "#31 writing config sha256:b6fc6225c36e7934983d6d120774b3ecf31f01c91c2fa044eb6e0e577ffe6d81 done\n", - "#31 writing manifest sha256:7ab07233db7c57bf72e36f09b58376a67abb90cfe635ad1703b75b4416f5b983 done\n", - "#31 DONE 0.5s\n", - "[2023-08-30 00:28:41,348] [INFO] (packager) - Build Summary:\n", + "#28 exporting to docker image format\n", + "#28 exporting layers done\n", + "#28 exporting manifest sha256:19203b8c5bb9a13da3c03963a62723b9f330ff4b2d37776a26d1316d03da1b0b done\n", + "#28 exporting config sha256:f980243cd5d80a64490eda352560b92681a08191a30d0a585cdbbf0c409e8abc done\n", + "#28 sending tarball\n", + "#28 ...\n", + "\n", + "#29 importing to docker\n", + "#29 DONE 0.9s\n", + "\n", + "#28 exporting to docker image format\n", + "#28 sending tarball 39.8s done\n", + "#28 DONE 39.8s\n", + "\n", + "#30 exporting content cache\n", + "#30 preparing build cache for export\n", + "#30 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d done\n", + "#30 writing layer sha256:0ce020987cfa5cd1654085af3bb40779634eb3d792c4a4d6059036463ae0040d done\n", + "#30 writing layer sha256:0f65089b284381bf795d15b1a186e2a8739ea957106fa526edef0d738e7cda70 done\n", + "#30 writing layer sha256:12a47450a9f9cc5d4edab65d0f600dbbe8b23a1663b0b3bb2c481d40e074b580 done\n", + "#30 writing layer sha256:19c20b65326c1511f8ab02f4a41453f8c0b6d9f2bdea8bb25038b628cef67ab9 done\n", + "#30 writing layer sha256:1de965777e2e37c7fabe00bdbf3d0203ca83ed30a71a5479c3113fe4fc48c4bb done\n", + "#30 writing layer sha256:22b384cd1e678fc56dc95c82f42e7a540d055418d0f1eef8d908c88305e23a88 done\n", + "#30 writing layer sha256:2369548ddf79fa9fd07c5f1c4b226da97c9cc7991c4b3bd57a97796c31ff0648 done\n", + "#30 writing layer sha256:24b5aa2448e920814dd67d7d3c0169b2cdacb13c4048d74ded3b4317843b13ff done\n", + "#30 writing layer sha256:2d42104dbf0a7cc962b791f6ab4f45a803f8a36d296f996aca180cfb2f3e30d0 done\n", + "#30 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff done\n", + "#30 writing layer sha256:361eb07c24550c859aa0f62bebfcaabde6373eeee0c16ae66e7c7053bf1f1e42 done\n", + "#30 writing layer sha256:38794be1b5dc99645feabf89b22cd34fb5bdffb5164ad920e7df94f353efe9c0 done\n", + "#30 writing layer sha256:38f963dc57c1e7b68a738fe39ed9f9345df7188111a047e2163a46648d7f1d88 done\n", + "#30 writing layer sha256:3e7e4c9bc2b136814c20c04feb4eea2b2ecf972e20182d88759931130cfb4181 done\n", + "#30 writing layer sha256:3fd77037ad585442cd82d64e337f49a38ddba50432b2a1e563a48401d25c79e6 done\n", + "#30 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0\n", + "#30 preparing build cache for export 0.6s done\n", + "#30 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0 done\n", + "#30 writing layer sha256:45893188359aca643d5918c9932da995364dc62013dfa40c075298b1baabece3 done\n", + "#30 writing layer sha256:49bc651b19d9e46715c15c41b7c0daa007e8e25f7d9518f04f0f06592799875a done\n", + "#30 writing layer sha256:4c12db5118d8a7d909e4926d69a2192d2b3cd8b110d49c7504a4f701258c1ccc done\n", + "#30 writing layer sha256:4cc43a803109d6e9d1fd35495cef9b1257035f5341a2db54f7a1940815b6cc65 done\n", + "#30 writing layer sha256:4d32b49e2995210e8937f0898327f196d3fcc52486f0be920e8b2d65f150a7ab done\n", + "#30 writing layer sha256:4d6fe980bad9cd7b2c85a478c8033cae3d098a81f7934322fb64658b0c8f9854 done\n", + "#30 writing layer sha256:4e78baa7922aa440fcba2b268af798b094fdb64e4450a916c15027abc06a1123 done\n", + "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#30 writing layer sha256:5150182f1ff123399b300ca469e00f6c4d82e1b9b72652fb8ee7eab370245236 done\n", + "#30 writing layer sha256:595c38fa102c61c3dda19bdab70dcd26a0e50465b986d022a84fa69023a05d0f done\n", + "#30 writing layer sha256:59d451175f6950740e26d38c322da0ef67cb59da63181eb32996f752ba8a2f17 done\n", + "#30 writing layer sha256:5ad1f2004580e415b998124ea394e9d4072a35d70968118c779f307204d6bd17 done\n", + "#30 writing layer sha256:62598eafddf023e7f22643485f4321cbd51ff7eee743b970db12454fd3c8c675 done\n", + "#30 writing layer sha256:63d7e616a46987136f4cc9eba95db6f6327b4854cfe3c7e20fed6db0c966e380 done\n", + "#30 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f done\n", + "#30 writing layer sha256:698318e5a60e5e0d48c45bf992f205a9532da567fdfe94bd59be2e192975dd6f done\n", + "#30 writing layer sha256:6ddc1d0f91833b36aac1c6f0c8cea005c87d94bab132d46cc06d9b060a81cca3 done\n", + "#30 writing layer sha256:74ac1f5a47c0926bff1e997bb99985a09926f43bd0895cb27ceb5fa9e95f8720 done\n", + "#30 writing layer sha256:7577973918dd30e764733a352a93f418000bc3181163ca451b2307492c1a6ba9 done\n", + "#30 writing layer sha256:81ab55ca8bce88347661e1c1e6d58975b998017ad2e91a1040bd3f5017741d2b done\n", + "#30 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2 done\n", + "#30 writing layer sha256:8a7451db9b4b817b3b33904abddb7041810a4ffe8ed4a034307d45d9ae9b3f2a done\n", + "#30 writing layer sha256:8ac1aede1873b9cad7d72492d19240df0510086e92ac4243bc5119ec85678931 done\n", + "#30 writing layer sha256:916f4054c6e7f10de4fd7c08ffc75fa23ebecca4eceb8183cb1023b33b1696c9 done\n", + "#30 writing layer sha256:9463aa3f56275af97693df69478a2dc1d171f4e763ca6f7b6f370a35e605c154 done\n", + "#30 writing layer sha256:955fd173ed884230c2eded4542d10a97384b408537be6bbb7c4ae09ccd6fb2d0 done\n", + "#30 writing layer sha256:9c42a4ee99755f441251e6043b2cbba16e49818a88775e7501ec17e379ce3cfd done\n", + "#30 writing layer sha256:9c63be0a86e3dc4168db3814bf464e40996afda0031649d9faa8ff7568c3154f done\n", + "#30 writing layer sha256:9e04bda98b05554953459b5edef7b2b14d32f1a00b979a23d04b6eb5c191e66b done\n", + "#30 writing layer sha256:a4a0c690bc7da07e592514dccaa26098a387e8457f69095e922b6d73f7852502 done\n", + "#30 writing layer sha256:a4aafbc094d78a85bef41036173eb816a53bcd3e2564594a32f542facdf2aba6 done\n", + "#30 writing layer sha256:ae36a4d38b76948e39a5957025c984a674d2de18ce162a8caaa536e6f06fccea done\n", + "#30 writing layer sha256:b092e71fced852d79e047f907a83ab32a129dd40cd0e9879dd507367a505dbd6 done\n", + "#30 writing layer sha256:b2fa40114a4a0725c81b327df89c0c3ed5c05ca9aa7f1157394d5096cf5460ce done\n", + "#30 writing layer sha256:b41f1b7d06dc0a3cea605edc5a074d982aa2f1b75ac808229b9dcb8d6744e17a done\n", + "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", + "#30 writing layer sha256:c84aee89fb491faea0b4112d4bb2cddb4a0b8fd0fb32e886aed7902a1626f4d2 done\n", + "#30 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6 done\n", + "#30 writing layer sha256:cb506fbdedc817e3d074f609e2edbf9655aacd7784610a1bbac52f2d7be25438 done\n", + "#30 writing layer sha256:d2a6fe65a1f84edb65b63460a75d1cac1aa48b72789006881b0bcfd54cd01ffd done\n", + "#30 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304 done\n", + "#30 writing layer sha256:ddc2ade4f6fe866696cb638c8a102cb644fa842c2ca578392802b3e0e5e3bcb7 done\n", + "#30 writing layer sha256:e2cfd7f6244d6f35befa6bda1caa65f1786cecf3f00ef99d7c9a90715ce6a03c done\n", + "#30 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907 done\n", + "#30 writing layer sha256:eaf45e9f32d1f5a9983945a1a9f8dedbb475bc0f578337610e00b4dedec87c20 done\n", + "#30 writing layer sha256:eb411bef39c013c9853651e68f00965dbd826d829c4e478884a2886976e9c989 done\n", + "#30 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759 done\n", + "#30 writing layer sha256:ef4466d6f927d29d404df9c5af3ef5733c86fa14e008762c90110b963978b1e7 done\n", + "#30 writing layer sha256:f346e3ecdf0bee048fa1e3baf1d3128ff0283b903f03e97524944949bd8882e5 done\n", + "#30 writing layer sha256:f3f9a00a1ce9aadda250aacb3e66a932676badc5d8519c41517fdf7ea14c13ed done\n", + "#30 writing layer sha256:fd849d9bd8889edd43ae38e9f21a912430c8526b2c18f3057a3b2cd74eb27b31 done\n", + "#30 writing config sha256:2efdd8bd5fee272f11add678820bb36fd73b0d8b589200720e3a2b1f2014c239 done\n", + "#30 writing manifest sha256:3e52de4375cea72779be5447ac509152ce31588970ac87f44cfce9a7de19df7e done\n", + "#30 DONE 0.6s\n", + "[2023-11-15 18:37:49,607] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -674,15 +667,14 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 5c18974168b1 10 minutes ago 15.4GB\n", - "mednist_app-x64-workstation-dgpu-linux-amd64 latest 8aa4dbfb02fb 2 weeks ago 15.4GB\n" + "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 f980243cd5d8 About an hour ago 15.4GB\n" ] } ], @@ -704,7 +696,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -763,16 +755,16 @@ " \"version\": 1\n", "}\n", "\n", - "2023-08-30 07:28:47 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2023-11-16 02:37:55 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2023-08-30 07:28:47 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2023-08-30 07:28:47 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2023-08-30 07:28:47 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2023-11-16 02:37:55 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2023-11-16 02:37:55 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2023-11-16 02:37:55 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2023-08-30 07:28:47 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2023-11-16 02:37:55 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2023-08-30 07:28:47 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2023-08-30 07:28:47 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2023-11-16 02:37:55 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2023-11-16 02:37:55 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -797,27 +789,27 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 00:28:51,206] [INFO] (runner) - Checking dependencies...\n", - "[2023-08-30 00:28:51,206] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2023-11-15 18:37:58,606] [INFO] (runner) - Checking dependencies...\n", + "[2023-11-15 18:37:58,606] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2023-08-30 00:28:51,206] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2023-11-15 18:37:58,606] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2023-08-30 00:28:51,207] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2023-11-15 18:37:58,606] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2023-08-30 00:28:51,263] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmplfd8b757/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmplfd8b757/pkg.json\n", - "[2023-08-30 00:28:51,463] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2023-11-15 18:37:58,679] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmp89s5qkz8/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmp89s5qkz8/pkg.json\n", + "[2023-11-15 18:37:58,873] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2023-08-30 00:28:51,629] [INFO] (common) - Launching container (d5b437535199) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: focused_jepsen\n", + "[2023-11-15 18:37:59,068] [INFO] (common) - Launching container (e8950f0a463a) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: priceless_ptolemy\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -826,11 +818,11 @@ " ipc mode: host\n", " shared memory size: 67108864\n", " devices: \n", - "2023-08-30 07:28:52 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + "2023-11-16 02:37:59 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", "\n", - "[2023-08-30 07:28:55,927] [INFO] (root) - Parsed args: Namespace(argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'], input=None, log_level=None, model=None, output=None, workdir=None)\n", + "[2023-11-16 02:38:01,849] [INFO] (root) - Parsed args: Namespace(argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'], input=None, log_level=None, model=None, output=None, workdir=None)\n", "\n", - "[2023-08-30 07:28:55,933] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2023-11-16 02:38:01,857] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", "[info] [app_driver.cpp:1025] Launching the driver/health checking service\n", "\n", @@ -862,9 +854,9 @@ "\n", " warnings.warn(msg)\n", "\n", - "[2023-08-30 07:29:01,433] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.13087581575145852698543141083118877098.dcm\n", + "[2023-11-16 02:38:04,038] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.16497775401758865936247607314643258908.dcm\n", "\n", - "[2023-08-30 07:29:01,435] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.13087581575145852698543141083118877098.dcm\n", + "[2023-11-16 02:38:04,039] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.16497775401758865936247607314643258908.dcm\n", "\n", "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", @@ -880,7 +872,7 @@ "\n", "AbdomenCT\n", "\n", - "[2023-08-30 00:29:02,801] [INFO] (common) - Container 'focused_jepsen'(d5b437535199) exited.\n" + "[2023-11-15 18:38:04,955] [INFO] (common) - Container 'priceless_ptolemy'(e8950f0a463a) exited.\n" ] } ], @@ -892,7 +884,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -924,7 +916,7 @@ " - **Input**: a file path (`Path`)\n", " - **Output**: an image object in memory ([`Image`](/modules/_autosummary/monai.deploy.core.domain.Image))\n", "2. `MedNISTClassifierOperator` - Pre-transform the given image by using MONAI's `Compose` class, feed to the Torchscript model (`classifier.zip`), and write the prediction into JSON file(`output.json`)\n", - " - Pre-transforms consist of three transforms -- `AddChannel`, `ScaleIntensity`, and `EnsureType`.\n", + " - Pre-transforms consist of three transforms -- `EnsureChannelFirst`, `ScaleIntensity`, and `EnsureType`.\n", " - **Input**: an image object in memory ([`Image`](/modules/_autosummary/monai.deploy.core.domain.Image))\n", " - **Output**: a folder path that the prediction result(`output.json`) would be written (`Path`)\n", "\n", @@ -945,7 +937,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -959,7 +951,7 @@ "from monai.deploy.conditions import CountCondition\n", "from monai.deploy.core import AppContext, Application, ConditionType, Fragment, Image, Operator, OperatorSpec\n", "from monai.deploy.operators.dicom_text_sr_writer_operator import DICOMTextSRWriterOperator, EquipmentInfo, ModelInfo\n", - "from monai.transforms import AddChannel, Compose, EnsureType, ScaleIntensity\n", + "from monai.transforms import EnsureChannelFirst, Compose, EnsureType, ScaleIntensity\n", "\n", "MEDNIST_CLASSES = [\"AbdomenCT\", \"BreastMRI\", \"CXR\", \"ChestCT\", \"Hand\", \"HeadCT\"]" ] @@ -976,7 +968,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -1047,7 +1039,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -1138,7 +1130,7 @@ "\n", " @property\n", " def transform(self):\n", - " return Compose([AddChannel(), ScaleIntensity(), EnsureType()])\n", + " return Compose([EnsureChannelFirst(channel_dim=\"no_channel\"), ScaleIntensity(), EnsureType()])\n", "\n", " def compute(self, op_input, op_output, context):\n", " import json\n", @@ -1186,7 +1178,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -1237,15 +1229,15 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2023-08-30 00:29:04,860] [INFO] (root) - Parsed args: Namespace(argv=[], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-08-30 00:29:04,876] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", + "[2023-11-15 18:38:10,416] [INFO] (root) - Parsed args: Namespace(argv=[], input=None, log_level=None, model=None, output=None, workdir=None)\n", + "[2023-11-15 18:38:10,440] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", "[info] [gxf_executor.cpp:210] Creating context\n", "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", "[info] [gxf_executor.cpp:1741] Activating Graph...\n", @@ -1253,8 +1245,12 @@ "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", - "[2023-08-30 00:29:05,845] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.88152747946307619191879398109230140381.dcm\n", - "[2023-08-30 00:29:05,847] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.88152747946307619191879398109230140381.dcm\n" + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + " warnings.warn(msg)\n", + "[2023-11-15 18:38:11,717] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.12540892677700748616860638452010005160.dcm\n", + "[2023-11-15 18:38:11,720] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.12540892677700748616860638452010005160.dcm\n" ] }, { @@ -1284,7 +1280,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1318,7 +1314,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -1328,7 +1324,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -1363,7 +1359,7 @@ "from monai.deploy.conditions import CountCondition\n", "from monai.deploy.core import AppContext, Application, ConditionType, Fragment, Image, Operator, OperatorSpec\n", "from monai.deploy.operators.dicom_text_sr_writer_operator import DICOMTextSRWriterOperator, EquipmentInfo, ModelInfo\n", - "from monai.transforms import AddChannel, Compose, EnsureType, ScaleIntensity\n", + "from monai.transforms import EnsureChannelFirst, Compose, EnsureType, ScaleIntensity\n", "\n", "MEDNIST_CLASSES = [\"AbdomenCT\", \"BreastMRI\", \"CXR\", \"ChestCT\", \"Hand\", \"HeadCT\"]\n", "\n", @@ -1513,7 +1509,7 @@ "\n", " @property\n", " def transform(self):\n", - " return Compose([AddChannel(), ScaleIntensity(), EnsureType()])\n", + " return Compose([EnsureChannelFirst(channel_dim=\"no_channel\"), ScaleIntensity(), EnsureType()])\n", "\n", " def compute(self, op_input, op_output, context):\n", " import json\n", @@ -1593,15 +1589,15 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 00:29:14,027] [INFO] (root) - Parsed args: Namespace(argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'], input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), log_level='DEBUG', model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), workdir=None)\n", - "[2023-08-30 00:29:14,033] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", + "[2023-11-15 18:38:17,975] [INFO] (root) - Parsed args: Namespace(argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'], input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), log_level='DEBUG', model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), workdir=None)\n", + "[2023-11-15 18:38:17,979] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:210] Creating context\n", "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1595] Loading extensions from configs...\n", "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1741] Activating Graph...\n", @@ -1609,43 +1605,41 @@ "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1773] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:111: FutureWarning: : Class `AddChannel` has been deprecated since version 0.8. It will be removed in version 1.3. please use MetaTensor data type and monai.transforms.EnsureChannelFirst instead with `channel_dim='no_channel'`.\n", - " warn_deprecated(obj, msg, warning_category)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls) # type: ignore\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", - "[2023-08-30 00:29:17,180] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", + "[2023-11-15 18:38:19,019] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", "\n", - "[2023-08-30 00:29:17,180] [DEBUG] (root) - Writing DICOM common modules...\n", + "[2023-11-15 18:38:19,019] [DEBUG] (root) - Writing DICOM common modules...\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warnings.warn(msg)\n", - "[2023-08-30 00:29:17,183] [DEBUG] (root) - DICOM common modules written:\n", + "[2023-11-15 18:38:19,021] [DEBUG] (root) - DICOM common modules written:\n", "Dataset.file_meta -------------------------------\n", "(0002, 0000) File Meta Information Group Length UL: 198\n", "(0002, 0001) File Meta Information Version OB: b'01'\n", "(0002, 0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.48571967537049939109703063489026494794\n", + "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558\n", "(0002, 0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002, 0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002, 0013) Implementation Version Name SH: '0.5.1+22.g029f8'\n", + "(0002, 0013) Implementation Version Name SH: '0.6.0'\n", "-------------------------------------------------\n", "(0008, 0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008, 0012) Instance Creation Date DA: '20230830'\n", - "(0008, 0013) Instance Creation Time TM: '002917'\n", + "(0008, 0012) Instance Creation Date DA: '20231115'\n", + "(0008, 0013) Instance Creation Time TM: '183819'\n", "(0008, 0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.48571967537049939109703063489026494794\n", - "(0008, 0020) Study Date DA: '20230830'\n", - "(0008, 0021) Series Date DA: '20230830'\n", - "(0008, 0023) Content Date DA: '20230830'\n", - "(0008, 002a) Acquisition DateTime DT: '20230830002917'\n", - "(0008, 0030) Study Time TM: '002917'\n", - "(0008, 0031) Series Time TM: '002917'\n", - "(0008, 0033) Content Time TM: '002917'\n", + "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558\n", + "(0008, 0020) Study Date DA: '20231115'\n", + "(0008, 0021) Series Date DA: '20231115'\n", + "(0008, 0023) Content Date DA: '20231115'\n", + "(0008, 002a) Acquisition DateTime DT: '20231115183819'\n", + "(0008, 0030) Study Time TM: '183819'\n", + "(0008, 0031) Series Time TM: '183819'\n", + "(0008, 0033) Content Time TM: '183819'\n", "(0008, 0050) Accession Number SH: ''\n", "(0008, 0060) Modality CS: 'SR'\n", "(0008, 0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", "(0008, 0090) Referring Physician's Name PN: ''\n", - "(0008, 0201) Timezone Offset From UTC SH: '-0700'\n", + "(0008, 0201) Timezone Offset From UTC SH: '-0800'\n", "(0008, 1030) Study Description LO: 'AI results.'\n", "(0008, 103e) Series Description LO: 'CAUTION: Not for Diagnostic Use, for research use only.'\n", "(0008, 1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", @@ -1655,7 +1649,7 @@ "(0010, 0030) Patient's Birth Date DA: ''\n", "(0010, 0040) Patient's Sex CS: ''\n", "(0018, 0015) Body Part Examined CS: ''\n", - "(0018, 1020) Software Versions LO: '0.5.1+22.g029f8'\n", + "(0018, 1020) Software Versions LO: '0.6.0'\n", "(0018, a001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008, 0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008, 1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1667,38 +1661,38 @@ " (0008, 0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.12129058299828649912489432723605279507\n", - "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.97786003431027375178670323563066287594\n", + "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.12379609192731250420244173376142712446\n", + "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.73656010492290419012392741095771197196\n", "(0020, 0010) Study ID SH: '1'\n", - "(0020, 0011) Series Number IS: '1475'\n", + "(0020, 0011) Series Number IS: '9783'\n", "(0020, 0013) Instance Number IS: '1'\n", "(0040, 1001) Requested Procedure ID SH: ''\n", - "[2023-08-30 00:29:17,184] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", + "[2023-11-15 18:38:19,022] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", "(0002, 0000) File Meta Information Group Length UL: 198\n", "(0002, 0001) File Meta Information Version OB: b'01'\n", "(0002, 0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.48571967537049939109703063489026494794\n", + "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558\n", "(0002, 0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002, 0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002, 0013) Implementation Version Name SH: '0.5.1+22.g029f8'\n", + "(0002, 0013) Implementation Version Name SH: '0.6.0'\n", "-------------------------------------------------\n", "(0008, 0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008, 0012) Instance Creation Date DA: '20230830'\n", - "(0008, 0013) Instance Creation Time TM: '002917'\n", + "(0008, 0012) Instance Creation Date DA: '20231115'\n", + "(0008, 0013) Instance Creation Time TM: '183819'\n", "(0008, 0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.48571967537049939109703063489026494794\n", - "(0008, 0020) Study Date DA: '20230830'\n", - "(0008, 0021) Series Date DA: '20230830'\n", - "(0008, 0023) Content Date DA: '20230830'\n", - "(0008, 002a) Acquisition DateTime DT: '20230830002917'\n", - "(0008, 0030) Study Time TM: '002917'\n", - "(0008, 0031) Series Time TM: '002917'\n", - "(0008, 0033) Content Time TM: '002917'\n", + "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558\n", + "(0008, 0020) Study Date DA: '20231115'\n", + "(0008, 0021) Series Date DA: '20231115'\n", + "(0008, 0023) Content Date DA: '20231115'\n", + "(0008, 002a) Acquisition DateTime DT: '20231115183819'\n", + "(0008, 0030) Study Time TM: '183819'\n", + "(0008, 0031) Series Time TM: '183819'\n", + "(0008, 0033) Content Time TM: '183819'\n", "(0008, 0050) Accession Number SH: ''\n", "(0008, 0060) Modality CS: 'SR'\n", "(0008, 0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", "(0008, 0090) Referring Physician's Name PN: ''\n", - "(0008, 0201) Timezone Offset From UTC SH: '-0700'\n", + "(0008, 0201) Timezone Offset From UTC SH: '-0800'\n", "(0008, 1030) Study Description LO: 'AI results.'\n", "(0008, 103e) Series Description LO: 'Not for clinical use. The result is for research use only.'\n", "(0008, 1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", @@ -1708,7 +1702,7 @@ "(0010, 0030) Patient's Birth Date DA: ''\n", "(0010, 0040) Patient's Sex CS: ''\n", "(0018, 0015) Body Part Examined CS: ''\n", - "(0018, 1020) Software Versions LO: '0.5.1+22.g029f8'\n", + "(0018, 1020) Software Versions LO: '0.6.0'\n", "(0018, a001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008, 0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008, 1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1720,10 +1714,10 @@ " (0008, 0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.12129058299828649912489432723605279507\n", - "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.97786003431027375178670323563066287594\n", + "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.12379609192731250420244173376142712446\n", + "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.73656010492290419012392741095771197196\n", "(0020, 0010) Study ID SH: '1'\n", - "(0020, 0011) Series Number IS: '1475'\n", + "(0020, 0011) Series Number IS: '9783'\n", "(0020, 0013) Instance Number IS: '1'\n", "(0040, 1001) Requested Procedure ID SH: ''\n", "(0040, a040) Value Type CS: 'CONTAINER'\n", @@ -1744,8 +1738,8 @@ " ---------\n", " (0040, a160) Text Value UT: 'AbdomenCT'\n", " ---------\n", - "[2023-08-30 00:29:17,187] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.48571967537049939109703063489026494794.dcm\n", - "[2023-08-30 00:29:17,188] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.48571967537049939109703063489026494794.dcm\n", + "[2023-11-15 18:38:19,026] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558.dcm\n", + "[2023-11-15 18:38:19,027] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558.dcm\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", @@ -1761,7 +1755,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1788,7 +1782,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -1818,7 +1812,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 24, "metadata": {}, "outputs": [ { diff --git a/notebooks/tutorials/02_mednist_app.ipynb b/notebooks/tutorials/02_mednist_app.ipynb index 59d017ed..703d3b54 100644 --- a/notebooks/tutorials/02_mednist_app.ipynb +++ b/notebooks/tutorials/02_mednist_app.ipynb @@ -29,7 +29,17 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + " File \"\", line 1, in \n", + "ModuleNotFoundError: No module named 'ignite'\n" + ] + } + ], "source": [ "# Install necessary packages for MONAI Core\n", "!python -c \"import monai\" || pip install -q \"monai[pillow, tqdm]\"\n", @@ -60,30 +70,32 @@ "name": "stdout", "output_type": "stream", "text": [ - "MONAI version: 1.2.0\n", + "MONAI version: 1.3.0\n", "Numpy version: 1.24.4\n", - "Pytorch version: 2.0.1+cu117\n", + "Pytorch version: 2.1.1+cu121\n", "MONAI flags: HAS_EXT = False, USE_COMPILED = False, USE_META_DICT = False\n", - "MONAI rev id: c33f1ba588ee00229a309000e888f9817b4f1934\n", - "MONAI __file__: /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/__init__.py\n", + "MONAI rev id: 865972f7a791bf7b42efbcd87c8402bd865b329e\n", + "MONAI __file__: /home//src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/__init__.py\n", "\n", "Optional dependencies:\n", "Pytorch Ignite version: 0.4.11\n", "ITK version: NOT INSTALLED or UNKNOWN VERSION.\n", "Nibabel version: 5.1.0\n", "scikit-image version: 0.21.0\n", - "Pillow version: 10.0.0\n", + "scipy version: 1.10.1\n", + "Pillow version: 10.0.1\n", "Tensorboard version: NOT INSTALLED or UNKNOWN VERSION.\n", "gdown version: 4.7.1\n", "TorchVision version: NOT INSTALLED or UNKNOWN VERSION.\n", - "tqdm version: 4.65.0\n", + "tqdm version: 4.66.1\n", "lmdb version: NOT INSTALLED or UNKNOWN VERSION.\n", - "psutil version: 5.9.5\n", + "psutil version: 5.9.6\n", "pandas version: NOT INSTALLED or UNKNOWN VERSION.\n", "einops version: NOT INSTALLED or UNKNOWN VERSION.\n", "transformers version: NOT INSTALLED or UNKNOWN VERSION.\n", "mlflow version: NOT INSTALLED or UNKNOWN VERSION.\n", "pynrrd version: NOT INSTALLED or UNKNOWN VERSION.\n", + "clearml version: NOT INSTALLED or UNKNOWN VERSION.\n", "\n", "For details about installing the optional dependencies, please visit:\n", " https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies\n", @@ -118,7 +130,7 @@ "from monai.networks.nets import DenseNet121\n", "from monai.engines import SupervisedTrainer\n", "from monai.transforms import (\n", - " AddChannel,\n", + " EnsureChannelFirst,\n", " Compose,\n", " LoadImage,\n", " RandFlip,\n", @@ -161,7 +173,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "/tmp/tmp_ijj195_\n" + "/tmp/tmpjh72rafb\n" ] }, { @@ -170,18 +182,18 @@ "text": [ "Downloading...\n", "From (uriginal): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE\n", - "From (redirected): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE&confirm=t&uuid=d974f3a4-5d30-48b6-9b6d-9459b32b4cac\n", - "To: /tmp/tmp3aa3c3k6/MedNIST.tar.gz\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61.8M/61.8M [00:03<00:00, 19.1MB/s]" + "From (redirected): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE&confirm=t&uuid=8946f974-8b80-4bd3-8696-ac8716b357ed\n", + "To: /tmp/tmpv4hps2d5/MedNIST.tar.gz\n", + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61.8M/61.8M [00:02<00:00, 26.6MB/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2023-08-03 20:42:12,748 - INFO - Downloaded: /tmp/tmp_ijj195_/MedNIST.tar.gz\n", - "2023-08-03 20:42:12,856 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n", - "2023-08-03 20:42:12,857 - INFO - Writing into directory: /tmp/tmp_ijj195_.\n" + "2023-11-15 19:10:32,776 - INFO - Downloaded: /tmp/tmpjh72rafb/MedNIST.tar.gz\n", + "2023-11-15 19:10:32,883 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n", + "2023-11-15 19:10:32,884 - INFO - Writing into directory: /tmp/tmpjh72rafb.\n" ] }, { @@ -253,21 +265,12 @@ "cell_type": "code", "execution_count": 5, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:111: FutureWarning: : Class `AddChannel` has been deprecated since version 0.8. It will be removed in version 1.3. please use MetaTensor data type and monai.transforms.EnsureChannelFirst instead with `channel_dim='no_channel'`.\n", - " warn_deprecated(obj, msg, warning_category)\n" - ] - } - ], + "outputs": [], "source": [ "train_transforms = Compose(\n", " [\n", " LoadImage(image_only=True),\n", - " AddChannel(),\n", + " EnsureChannelFirst(channel_dim=\"no_channel\"),\n", " ScaleIntensity(),\n", " RandRotate(range_x=np.pi / 12, prob=0.5, keep_size=True),\n", " RandFlip(spatial_axis=0, prob=0.5),\n", @@ -323,11 +326,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 1/5 Loss: 0.18928290903568268\n", - "Epoch 2/5 Loss: 0.06710730493068695\n", - "Epoch 3/5 Loss: 0.029032323509454727\n", - "Epoch 4/5 Loss: 0.01877668686211109\n", - "Epoch 5/5 Loss: 0.01939055137336254\n" + "Epoch 1/5 Loss: 0.1891738623380661\n", + "Epoch 2/5 Loss: 0.06714393198490143\n", + "Epoch 3/5 Loss: 0.028867393732070923\n", + "Epoch 4/5 Loss: 0.0186357069760561\n", + "Epoch 5/5 Loss: 0.0193067267537117\n" ] } ], @@ -385,7 +388,7 @@ "train_transforms = Compose(\n", " [\n", " LoadImage(image_only=True),\n", - " AddChannel(),\n", + " EnsureChannelFirst(channel_dim=\"no_channel\"),\n", " ScaleIntensity(),\n", " RandRotate(range_x=np.pi / 12, prob=0.5, keep_size=True),\n", " RandFlip(spatial_axis=0, prob=0.5),\n", @@ -404,7 +407,7 @@ " - **Input**: a file path (`Path`)\n", " - **Output**: an image object in memory ([`Image`](/modules/_autosummary/monai.deploy.core.domain.Image))\n", "2. `MedNISTClassifierOperator` - Pre-transform the given image by using MONAI's `Compose` class, feed to the Torchscript model (`classifier.zip`), and write the prediction into JSON file(`output.json`)\n", - " - Pre-transforms consist of three transforms -- `AddChannel`, `ScaleIntensity`, and `EnsureType`.\n", + " - Pre-transforms consist of three transforms -- `EnsureChannelFirst`, `ScaleIntensity`, and `EnsureType`.\n", " - **Input**: an image object in memory ([`Image`](/modules/_autosummary/monai.deploy.core.domain.Image))\n", " - **Output**: a folder path that the prediction result(`output.json`) would be written (`DataPath`)\n", "\n", @@ -495,7 +498,7 @@ "from monai.deploy.conditions import CountCondition\n", "from monai.deploy.core import AppContext, Application, ConditionType, Fragment, Image, Operator, OperatorSpec\n", "from monai.deploy.operators.dicom_text_sr_writer_operator import DICOMTextSRWriterOperator, EquipmentInfo, ModelInfo\n", - "from monai.transforms import AddChannel, Compose, EnsureType, ScaleIntensity\n", + "from monai.transforms import EnsureChannelFirst, Compose, EnsureType, ScaleIntensity\n", "\n", "MEDNIST_CLASSES = [\"AbdomenCT\", \"BreastMRI\", \"CXR\", \"ChestCT\", \"Hand\", \"HeadCT\"]" ] @@ -672,7 +675,7 @@ "\n", " @property\n", " def transform(self):\n", - " return Compose([AddChannel(), ScaleIntensity(), EnsureType()])\n", + " return Compose([EnsureChannelFirst(channel_dim=\"no_channel\"), ScaleIntensity(), EnsureType()])\n", "\n", " def compute(self, op_input, op_output, context):\n", " import json\n", @@ -770,6 +773,8 @@ "name": "stderr", "output_type": "stream", "text": [ + "[2023-11-15 19:18:17,922] [INFO] (root) - Parsed args: Namespace(argv=[], input=None, log_level=None, model=None, output=None, workdir=None)\n", + "[2023-11-15 19:18:17,941] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", "[info] [gxf_executor.cpp:210] Creating context\n", "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", "[info] [gxf_executor.cpp:1741] Activating Graph...\n", @@ -778,7 +783,11 @@ "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls) # type: ignore\n" + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + " warnings.warn(msg)\n", + "[2023-11-15 19:18:19,246] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.89399783846974532553567524226806601923.dcm\n", + "[2023-11-15 19:18:19,249] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.89399783846974532553567524226806601923.dcm\n" ] }, { @@ -792,8 +801,6 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - " warnings.warn(msg)\n", "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", @@ -887,7 +894,7 @@ "from monai.deploy.conditions import CountCondition\n", "from monai.deploy.core import AppContext, Application, ConditionType, Fragment, Image, Operator, OperatorSpec\n", "from monai.deploy.operators.dicom_text_sr_writer_operator import DICOMTextSRWriterOperator, EquipmentInfo, ModelInfo\n", - "from monai.transforms import AddChannel, Compose, EnsureType, ScaleIntensity\n", + "from monai.transforms import EnsureChannelFirst, Compose, EnsureType, ScaleIntensity\n", "\n", "MEDNIST_CLASSES = [\"AbdomenCT\", \"BreastMRI\", \"CXR\", \"ChestCT\", \"Hand\", \"HeadCT\"]\n", "\n", @@ -1037,7 +1044,7 @@ "\n", " @property\n", " def transform(self):\n", - " return Compose([AddChannel(), ScaleIntensity(), EnsureType()])\n", + " return Compose([EnsureChannelFirst(channel_dim=\"no_channel\"), ScaleIntensity(), EnsureType()])\n", "\n", " def compute(self, op_input, op_output, context):\n", " import json\n", @@ -1125,10 +1132,8 @@ "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1773] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:111: FutureWarning: : Class `AddChannel` has been deprecated since version 0.8. It will be removed in version 1.3. please use MetaTensor data type and monai.transforms.EnsureChannelFirst instead with `channel_dim='no_channel'`.\n", - " warn_deprecated(obj, msg, warning_category)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls) # type: ignore\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warnings.warn(msg)\n", @@ -1240,17 +1245,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydantic/_internal/_config.py:269: UserWarning: Valid config keys have changed in V2:\n", - "* 'allow_population_by_field_name' has been renamed to 'populate_by_name'\n", - " warnings.warn(message, UserWarning)\n", - "[2023-08-03 20:49:29,599] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/mednist_classifier_monaideploy.py\n", - "[2023-08-03 20:49:29,599] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2023-08-03 20:49:29,599] [INFO] (packager) - Scanning for models in {models_path}...\n", - "[2023-08-03 20:49:29,599] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2023-08-03 20:49:29,599] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/app.yaml...\n", - "[2023-08-03 20:49:29,601] [INFO] (packager) - Generating app.json...\n", - "[2023-08-03 20:49:29,601] [INFO] (packager) - Generating pkg.json...\n", - "[2023-08-03 20:49:29,601] [DEBUG] (common) - \n", + "[2023-11-15 19:18:32,397] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/mednist_classifier_monaideploy.py\n", + "[2023-11-15 19:18:32,397] [INFO] (packager.parameters) - Detected application type: Python File\n", + "[2023-11-15 19:18:32,397] [INFO] (packager) - Scanning for models in {models_path}...\n", + "[2023-11-15 19:18:32,397] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2023-11-15 19:18:32,397] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/app.yaml...\n", + "[2023-11-15 19:18:32,398] [INFO] (packager) - Generating app.json...\n", + "[2023-11-15 19:18:32,399] [INFO] (packager) - Generating pkg.json...\n", + "[2023-11-15 19:18:32,400] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1285,7 +1287,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2023-08-03 20:49:29,602] [DEBUG] (common) - \n", + "[2023-11-15 19:18:32,400] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1304,7 +1306,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2023-08-03 20:49:29,635] [DEBUG] (packager.builder) - \n", + "[2023-11-15 19:18:32,429] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", @@ -1382,9 +1384,8 @@ "RUN pip install holoscan==0.6.0\n", "\n", "\n", - "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+7.g9fa1185.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+7.g9fa1185.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+7.g9fa1185.dirty-py3-none-any.whl\n", + "# Install MONAI Deploy from PyPI org\n", + "RUN pip install monai-deploy-app-sdk==0.6.0\n", "\n", "\n", "\n", @@ -1400,7 +1401,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2023-08-03 20:49:29,636] [INFO] (packager.builder) - \n", + "[2023-11-15 19:18:32,429] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1409,252 +1410,371 @@ " Cache: Enabled\n", " Configuration: dgpu\n", " Holoiscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+7.g9fa1185.dirty-py3-none-any.whl\n", + " MONAI Deploy App SDK Package: pypi.org\n", " gRPC Health Probe: N/A\n", " SDK Version: 0.6.0\n", " SDK: monai-deploy\n", " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2023-08-03 20:49:30,337] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2023-08-03 20:49:30,338] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2023-11-15 19:18:32,690] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2023-11-15 19:18:32,691] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", + "\n", "#1 [internal] load .dockerignore\n", - "#1 transferring context: 1.79kB 0.0s done\n", + "#1 transferring context: 1.79kB done\n", "#1 DONE 0.1s\n", "\n", "#2 [internal] load build definition from Dockerfile\n", - "#2 transferring dockerfile: 2.67kB done\n", + "#2 transferring dockerfile: 2.49kB done\n", "#2 DONE 0.1s\n", "\n", "#3 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#3 DONE 0.8s\n", + "#3 DONE 0.4s\n", "\n", "#4 [internal] load build context\n", "#4 DONE 0.0s\n", "\n", - "#5 importing cache manifest from local:9585092855700183608\n", + "#5 importing cache manifest from local:12435489437730595250\n", "#5 DONE 0.0s\n", "\n", "#6 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#6 DONE 0.9s\n", + "#6 DONE 0.7s\n", "\n", - "#7 [ 1/22] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", - "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", + "#7 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc 0.1s done\n", "#7 DONE 0.1s\n", "\n", "#4 [internal] load build context\n", - "#4 transferring context: 28.78MB 0.2s done\n", + "#4 transferring context: 28.62MB 0.2s done\n", "#4 DONE 0.3s\n", "\n", - "#8 [ 6/22] RUN chown -R holoscan /var/holoscan\n", + "#8 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#8 CACHED\n", "\n", - "#9 [12/22] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#9 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#9 CACHED\n", "\n", - "#10 [10/22] COPY ./tools /var/holoscan/tools\n", + "#10 [ 9/21] WORKDIR /var/holoscan\n", "#10 CACHED\n", "\n", - "#11 [15/22] RUN pip install holoscan==0.6.0\n", + "#11 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#11 CACHED\n", "\n", - "#12 [16/22] COPY ./monai_deploy_app_sdk-0.5.1+7.g9fa1185.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+7.g9fa1185.dirty-py3-none-any.whl\n", + "#12 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#12 CACHED\n", "\n", - "#13 [ 7/22] RUN chown -R holoscan /var/holoscan/input\n", + "#13 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#13 CACHED\n", "\n", - "#14 [ 4/22] RUN groupadd -g 1000 holoscan\n", + "#14 [10/21] COPY ./tools /var/holoscan/tools\n", "#14 CACHED\n", "\n", - "#15 [14/22] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#15 [ 4/21] RUN groupadd -g 1000 holoscan\n", "#15 CACHED\n", "\n", - "#16 [11/22] RUN chmod +x /var/holoscan/tools\n", + "#16 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#16 CACHED\n", "\n", - "#17 [ 5/22] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#17 [11/21] RUN chmod +x /var/holoscan/tools\n", "#17 CACHED\n", "\n", - "#18 [ 9/22] WORKDIR /var/holoscan\n", - "#18 CACHED\n", - "\n", - "#19 [ 8/22] RUN chown -R holoscan /var/holoscan/output\n", - "#19 CACHED\n", - "\n", - "#20 [ 2/22] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", - "#20 CACHED\n", - "\n", - "#21 [ 3/22] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", - "#21 CACHED\n", - "\n", - "#22 [13/22] RUN pip install --upgrade pip\n", - "#22 CACHED\n", - "\n", - "#23 [17/22] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+7.g9fa1185.dirty-py3-none-any.whl\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 6.29MB / 2.40GB 0.2s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 130.02MB / 2.40GB 2.7s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 251.66MB / 2.40GB 5.1s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 374.34MB / 2.40GB 7.7s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 497.03MB / 2.40GB 10.2s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 629.15MB / 2.40GB 12.9s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 758.12MB / 2.40GB 15.5s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 880.80MB / 2.40GB 18.0s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 1.00GB / 2.40GB 20.6s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 1.13GB / 2.40GB 23.1s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 1.26GB / 2.40GB 25.4s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 1.38GB / 2.40GB 27.9s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 1.51GB / 2.40GB 30.3s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 1.63GB / 2.40GB 32.9s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 1.76GB / 2.40GB 35.7s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 1.89GB / 2.40GB 38.4s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 2.02GB / 2.40GB 41.0s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 2.14GB / 2.40GB 43.4s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 2.26GB / 2.40GB 45.8s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 2.38GB / 2.40GB 48.2s\n", - "#23 sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 2.40GB / 2.40GB 49.8s done\n", - "#23 extracting sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523\n", - "#23 extracting sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 57.5s done\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 5.24MB / 105.68MB 0.2s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 13.63MB / 105.68MB 0.3s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 22.02MB / 105.68MB 0.5s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 29.36MB / 105.68MB 0.6s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 35.65MB / 105.68MB 0.8s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 44.04MB / 105.68MB 0.9s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 51.38MB / 105.68MB 1.1s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 59.77MB / 105.68MB 1.2s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 67.15MB / 105.68MB 1.4s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 75.50MB / 105.68MB 1.5s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 82.84MB / 105.68MB 1.7s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 89.13MB / 105.68MB 1.8s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 97.52MB / 105.68MB 2.0s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 105.68MB / 105.68MB 2.1s\n", - "#23 sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 105.68MB / 105.68MB 2.4s done\n", - "#23 extracting sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded\n", - "#23 extracting sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded 2.9s done\n", - "#23 sha256:55e32cef42f992f9c914515dc95457ad65a501d20fb8face7a82d51a620e8d0c 149.04kB / 149.04kB 0.0s done\n", - "#23 extracting sha256:55e32cef42f992f9c914515dc95457ad65a501d20fb8face7a82d51a620e8d0c 0.0s done\n", - "#23 sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56 6.29MB / 48.57MB 0.2s\n", - "#23 sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56 13.63MB / 48.57MB 0.3s\n", - "#23 sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56 22.02MB / 48.57MB 0.5s\n", - "#23 sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56 29.36MB / 48.57MB 0.6s\n", - "#23 sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56 35.65MB / 48.57MB 0.8s\n", - "#23 sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56 42.99MB / 48.57MB 0.9s\n", - "#23 sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56 48.57MB / 48.57MB 1.1s\n", - "#23 sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56 48.57MB / 48.57MB 1.1s done\n", - "#23 extracting sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56\n", - "#23 extracting sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56 2.2s done\n", - "#23 CACHED\n", - "\n", - "#24 [18/22] COPY ./models /opt/holoscan/models\n", - "#24 DONE 3.1s\n", - "\n", - "#25 [19/22] COPY ./map/app.json /etc/holoscan/app.json\n", + "#18 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#18 DONE 0.4s\n", + "\n", + "#19 [13/21] RUN pip install --upgrade pip\n", + "#19 1.132 Defaulting to user installation because normal site-packages is not writeable\n", + "#19 1.214 Requirement already satisfied: pip in /usr/local/lib/python3.8/dist-packages (22.0.4)\n", + "#19 1.417 Collecting pip\n", + "#19 1.467 Downloading pip-23.3.1-py3-none-any.whl (2.1 MB)\n", + "#19 1.538 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 32.7 MB/s eta 0:00:00\n", + "#19 1.658 Installing collected packages: pip\n", + "#19 2.774 Successfully installed pip-23.3.1\n", + "#19 2.906 WARNING: You are using pip version 22.0.4; however, version 23.3.1 is available.\n", + "#19 2.906 You should consider upgrading via the '/usr/bin/python -m pip install --upgrade pip' command.\n", + "#19 DONE 3.1s\n", + "\n", + "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#20 0.781 Collecting monai>=1.2.0 (from -r /tmp/requirements.txt (line 1))\n", + "#20 0.810 Downloading monai-1.3.0-202310121228-py3-none-any.whl.metadata (10 kB)\n", + "#20 1.152 Collecting Pillow>=8.4.0 (from -r /tmp/requirements.txt (line 2))\n", + "#20 1.165 Downloading Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl.metadata (9.5 kB)\n", + "#20 1.216 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 3))\n", + "#20 1.227 Downloading pydicom-2.4.3-py3-none-any.whl.metadata (7.8 kB)\n", + "#20 1.342 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 4))\n", + "#20 1.351 Downloading highdicom-0.22.0-py3-none-any.whl.metadata (3.8 kB)\n", + "#20 1.430 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 5))\n", + "#20 1.439 Downloading SimpleITK-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#20 1.777 Collecting setuptools>=59.5.0 (from -r /tmp/requirements.txt (line 6))\n", + "#20 1.785 Downloading setuptools-68.2.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#20 1.912 Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.8/dist-packages (from monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (1.22.3)\n", + "#20 1.972 Collecting torch>=1.9 (from monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 1.983 Downloading torch-2.1.1-cp38-cp38-manylinux1_x86_64.whl.metadata (25 kB)\n", + "#20 2.163 Collecting pillow-jpls>=1.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 4))\n", + "#20 2.182 Downloading pillow_jpls-1.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (340 kB)\n", + "#20 2.197 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 340.3/340.3 kB 76.9 MB/s eta 0:00:00\n", + "#20 2.400 Collecting filelock (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.411 Downloading filelock-3.13.1-py3-none-any.whl.metadata (2.8 kB)\n", + "#20 2.415 Requirement already satisfied: typing-extensions in /usr/local/lib/python3.8/dist-packages (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (4.7.1)\n", + "#20 2.467 Collecting sympy (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.477 Downloading sympy-1.12-py3-none-any.whl (5.7 MB)\n", + "#20 2.531 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 MB 114.1 MB/s eta 0:00:00\n", + "#20 2.617 Collecting networkx (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.626 Downloading networkx-3.1-py3-none-any.whl (2.1 MB)\n", + "#20 2.652 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 95.7 MB/s eta 0:00:00\n", + "#20 2.668 Requirement already satisfied: jinja2 in /usr/local/lib/python3.8/dist-packages (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (3.1.2)\n", + "#20 2.721 Collecting fsspec (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.730 Downloading fsspec-2023.10.0-py3-none-any.whl.metadata (6.8 kB)\n", + "#20 2.760 Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.772 Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", + "#20 2.981 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 23.7/23.7 MB 116.4 MB/s eta 0:00:00\n", + "#20 3.068 Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 3.109 Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", + "#20 3.124 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 823.6/823.6 kB 94.7 MB/s eta 0:00:00\n", + "#20 3.163 Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 3.176 Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", + "#20 3.309 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.1/14.1 MB 109.7 MB/s eta 0:00:00\n", + "#20 3.378 Collecting nvidia-cudnn-cu12==8.9.2.26 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 3.386 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "#20 3.416 Collecting nvidia-cublas-cu12==12.1.3.1 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 3.430 Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", + "#20 7.176 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 410.6/410.6 MB 107.3 MB/s eta 0:00:00\n", + "#20 8.220 Collecting nvidia-cufft-cu12==11.0.2.54 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 8.233 Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", + "#20 9.379 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.6/121.6 MB 109.4 MB/s eta 0:00:00\n", + "#20 9.783 Collecting nvidia-curand-cu12==10.3.2.106 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 9.793 Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", + "#20 10.31 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.5/56.5 MB 116.7 MB/s eta 0:00:00\n", + "#20 10.48 Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 10.49 Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", + "#20 11.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 124.2/124.2 MB 124.0 MB/s eta 0:00:00\n", + "#20 11.93 Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 11.94 Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", + "#20 13.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 196.0/196.0 MB 112.6 MB/s eta 0:00:00\n", + "#20 14.22 Collecting nvidia-nccl-cu12==2.18.1 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 14.23 Downloading nvidia_nccl_cu12-2.18.1-py3-none-manylinux1_x86_64.whl (209.8 MB)\n", + "#20 16.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 209.8/209.8 MB 110.7 MB/s eta 0:00:00\n", + "#20 16.82 Collecting nvidia-nvtx-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 16.83 Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", + "#20 16.84 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.1/99.1 kB 177.1 MB/s eta 0:00:00\n", + "#20 16.88 Collecting triton==2.1.0 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 16.89 Downloading triton-2.1.0-0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.3 kB)\n", + "#20 16.94 Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 16.95 Downloading nvidia_nvjitlink_cu12-12.3.101-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 17.06 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.8/dist-packages (from jinja2->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (2.1.1)\n", + "#20 17.16 Collecting mpmath>=0.19 (from sympy->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 17.17 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#20 17.18 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 171.3 MB/s eta 0:00:00\n", + "#20 17.28 Downloading monai-1.3.0-202310121228-py3-none-any.whl (1.3 MB)\n", + "#20 17.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 106.8 MB/s eta 0:00:00\n", + "#20 17.31 Downloading Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl (3.6 MB)\n", + "#20 17.36 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 85.2 MB/s eta 0:00:00\n", + "#20 17.37 Downloading pydicom-2.4.3-py3-none-any.whl (1.8 MB)\n", + "#20 17.40 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 82.5 MB/s eta 0:00:00\n", + "#20 17.42 Downloading highdicom-0.22.0-py3-none-any.whl (825 kB)\n", + "#20 17.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 825.0/825.0 kB 76.9 MB/s eta 0:00:00\n", + "#20 17.45 Downloading SimpleITK-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.7 MB)\n", + "#20 18.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.7/52.7 MB 93.6 MB/s eta 0:00:00\n", + "#20 18.21 Downloading setuptools-68.2.2-py3-none-any.whl (807 kB)\n", + "#20 18.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 807.9/807.9 kB 125.5 MB/s eta 0:00:00\n", + "#20 18.23 Downloading torch-2.1.1-cp38-cp38-manylinux1_x86_64.whl (670.2 MB)\n", + "#20 24.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 670.2/670.2 MB 74.1 MB/s eta 0:00:00\n", + "#20 24.63 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n", + "#20 31.44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 731.7/731.7 MB 65.6 MB/s eta 0:00:00\n", + "#20 31.46 Downloading triton-2.1.0-0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (89.2 MB)\n", + "#20 32.91 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 89.2/89.2 MB 90.3 MB/s eta 0:00:00\n", + "#20 32.92 Downloading filelock-3.13.1-py3-none-any.whl (11 kB)\n", + "#20 32.93 Downloading fsspec-2023.10.0-py3-none-any.whl (166 kB)\n", + "#20 32.94 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 166.4/166.4 kB 69.7 MB/s eta 0:00:00\n", + "#20 32.96 Downloading nvidia_nvjitlink_cu12-12.3.101-py3-none-manylinux1_x86_64.whl (20.5 MB)\n", + "#20 34.08 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 20.5/20.5 MB 19.1 MB/s eta 0:00:00\n", + "#20 38.74 Installing collected packages: SimpleITK, mpmath, sympy, setuptools, pydicom, Pillow, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, networkx, fsspec, filelock, triton, pillow-jpls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12, highdicom, torch, monai\n", + "#20 85.54 Successfully installed Pillow-10.1.0 SimpleITK-2.3.1 filelock-3.13.1 fsspec-2023.10.0 highdicom-0.22.0 monai-1.3.0 mpmath-1.3.0 networkx-3.1 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.18.1 nvidia-nvjitlink-cu12-12.3.101 nvidia-nvtx-cu12-12.1.105 pillow-jpls-1.2.0 pydicom-2.4.3 setuptools-68.2.2 sympy-1.12 torch-2.1.1 triton-2.1.0\n", + "#20 DONE 87.6s\n", + "\n", + "#21 [15/21] RUN pip install holoscan==0.6.0\n", + "#21 0.757 Defaulting to user installation because normal site-packages is not writeable\n", + "#21 1.044 Collecting holoscan==0.6.0\n", + "#21 1.084 Downloading holoscan-0.6.0-cp38-cp38-manylinux2014_x86_64.whl.metadata (4.4 kB)\n", + "#21 1.124 Requirement already satisfied: cloudpickle~=2.2 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (2.2.1)\n", + "#21 1.126 Requirement already satisfied: python-on-whales~=0.60 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (0.63.0)\n", + "#21 1.128 Requirement already satisfied: Jinja2~=3.1 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (3.1.2)\n", + "#21 1.130 Requirement already satisfied: packaging~=23.1 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (23.1)\n", + "#21 1.131 Requirement already satisfied: pyyaml~=6.0 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (6.0.1)\n", + "#21 1.132 Requirement already satisfied: requests~=2.28 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (2.31.0)\n", + "#21 1.134 Requirement already satisfied: pip>=20.2 in /home/holoscan/.local/lib/python3.8/site-packages (from holoscan==0.6.0) (23.3.1)\n", + "#21 1.276 Collecting wheel-axle-runtime<1.0 (from holoscan==0.6.0)\n", + "#21 1.285 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", + "#21 1.308 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.8/dist-packages (from Jinja2~=3.1->holoscan==0.6.0) (2.1.1)\n", + "#21 1.319 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan==0.6.0) (1.10.12)\n", + "#21 1.320 Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan==0.6.0) (4.65.0)\n", + "#21 1.321 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan==0.6.0) (0.9.0)\n", + "#21 1.321 Requirement already satisfied: typing-extensions in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan==0.6.0) (4.7.1)\n", + "#21 1.332 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan==0.6.0) (3.2.0)\n", + "#21 1.332 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan==0.6.0) (3.4)\n", + "#21 1.333 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan==0.6.0) (2.0.4)\n", + "#21 1.334 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan==0.6.0) (2023.7.22)\n", + "#21 1.337 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.8/site-packages (from wheel-axle-runtime<1.0->holoscan==0.6.0) (3.13.1)\n", + "#21 1.381 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.8/dist-packages (from typer>=0.4.1->python-on-whales~=0.60->holoscan==0.6.0) (8.1.6)\n", + "#21 1.444 Downloading holoscan-0.6.0-cp38-cp38-manylinux2014_x86_64.whl (52.8 MB)\n", + "#21 2.307 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.8/52.8 MB 27.8 MB/s eta 0:00:00\n", + "#21 2.319 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", + "#21 2.826 Installing collected packages: wheel-axle-runtime, holoscan\n", + "#21 3.814 Successfully installed holoscan-0.6.0 wheel-axle-runtime-0.0.5\n", + "#21 DONE 4.4s\n", + "\n", + "#22 [16/21] RUN pip install monai-deploy-app-sdk==0.6.0\n", + "#22 0.661 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.843 Collecting monai-deploy-app-sdk==0.6.0\n", + "#22 0.872 Downloading monai_deploy_app_sdk-0.6.0-py3-none-any.whl (125 kB)\n", + "#22 0.895 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.1/125.1 KB 7.3 MB/s eta 0:00:00\n", + "#22 0.918 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.8/dist-packages (from monai-deploy-app-sdk==0.6.0) (1.22.3)\n", + "#22 0.919 Requirement already satisfied: holoscan~=0.6.0 in /home/holoscan/.local/lib/python3.8/site-packages (from monai-deploy-app-sdk==0.6.0) (0.6.0)\n", + "#22 0.994 Collecting colorama>=0.4.1\n", + "#22 1.002 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.091 Collecting typeguard>=3.0.0\n", + "#22 1.105 Downloading typeguard-4.1.5-py3-none-any.whl (34 kB)\n", + "#22 1.130 Requirement already satisfied: cloudpickle~=2.2 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (2.2.1)\n", + "#22 1.131 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (0.0.5)\n", + "#22 1.132 Requirement already satisfied: Jinja2~=3.1 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (3.1.2)\n", + "#22 1.133 Requirement already satisfied: packaging~=23.1 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (23.1)\n", + "#22 1.134 Requirement already satisfied: python-on-whales~=0.60 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (0.63.0)\n", + "#22 1.135 Requirement already satisfied: pyyaml~=6.0 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (6.0.1)\n", + "#22 1.136 Requirement already satisfied: pip>=20.2 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (22.0.4)\n", + "#22 1.137 Requirement already satisfied: requests~=2.28 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (2.31.0)\n", + "#22 1.151 Requirement already satisfied: typing-extensions>=4.7.0 in /usr/local/lib/python3.8/dist-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==0.6.0) (4.7.1)\n", + "#22 1.266 Collecting importlib-metadata>=3.6\n", + "#22 1.274 Downloading importlib_metadata-6.8.0-py3-none-any.whl (22 kB)\n", + "#22 1.371 Collecting zipp>=0.5\n", + "#22 1.378 Downloading zipp-3.17.0-py3-none-any.whl (7.4 kB)\n", + "#22 1.393 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.8/dist-packages (from Jinja2~=3.1->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (2.1.1)\n", + "#22 1.401 Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (4.65.0)\n", + "#22 1.402 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (1.10.12)\n", + "#22 1.403 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (0.9.0)\n", + "#22 1.414 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (2023.7.22)\n", + "#22 1.415 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (3.2.0)\n", + "#22 1.416 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (3.4)\n", + "#22 1.417 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (2.0.4)\n", + "#22 1.423 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.8/site-packages (from wheel-axle-runtime<1.0->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (3.13.1)\n", + "#22 1.464 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.8/dist-packages (from typer>=0.4.1->python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (8.1.6)\n", + "#22 1.945 Installing collected packages: zipp, colorama, importlib-metadata, typeguard, monai-deploy-app-sdk\n", + "#22 2.185 Successfully installed colorama-0.4.6 importlib-metadata-6.8.0 monai-deploy-app-sdk-0.6.0 typeguard-4.1.5 zipp-3.17.0\n", + "#22 2.190 WARNING: You are using pip version 22.0.4; however, version 23.3.1 is available.\n", + "#22 2.190 You should consider upgrading via the '/usr/bin/python -m pip install --upgrade pip' command.\n", + "#22 DONE 2.4s\n", + "\n", + "#23 [17/21] COPY ./models /opt/holoscan/models\n", + "#23 DONE 0.2s\n", + "\n", + "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", + "#24 DONE 0.1s\n", + "\n", + "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", "#25 DONE 0.1s\n", "\n", - "#26 [20/22] COPY ./app.config /var/holoscan/app.yaml\n", + "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#26 DONE 0.1s\n", "\n", - "#27 [21/22] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#27 [21/21] COPY ./app /opt/holoscan/app\n", "#27 DONE 0.1s\n", "\n", - "#28 [22/22] COPY ./app /opt/holoscan/app\n", - "#28 DONE 0.1s\n", - "\n", - "#29 exporting to docker image format\n", - "#29 exporting layers\n", - "#29 exporting layers 1.1s done\n", - "#29 exporting manifest sha256:c788c08ceb970d2b6c8a36eaf5d5809a959ed6ac92e387bf964a3b4998d3f2af 0.0s done\n", - "#29 exporting config sha256:d22d232013f038d48c43d4caa2246268674e9c6c81083f7ab6c3f37ec7ce31e2 0.0s done\n", - "#29 sending tarball\n", - "#29 ...\n", - "\n", - "#30 importing to docker\n", - "#30 DONE 1.3s\n", - "\n", - "#29 exporting to docker image format\n", - "#29 sending tarball 52.6s done\n", - "#29 DONE 53.8s\n", - "\n", - "#31 exporting content cache\n", - "#31 preparing build cache for export\n", - "#31 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d done\n", - "#31 writing layer sha256:0ce020987cfa5cd1654085af3bb40779634eb3d792c4a4d6059036463ae0040d done\n", - "#31 writing layer sha256:0f65089b284381bf795d15b1a186e2a8739ea957106fa526edef0d738e7cda70 done\n", - "#31 writing layer sha256:12a47450a9f9cc5d4edab65d0f600dbbe8b23a1663b0b3bb2c481d40e074b580 done\n", - "#31 writing layer sha256:1338fe24653eba781a71bd79902b5b905624589983ce80c816a09bda7b89e3bd\n", - "#31 writing layer sha256:1338fe24653eba781a71bd79902b5b905624589983ce80c816a09bda7b89e3bd 0.6s done\n", - "#31 writing layer sha256:1477e9e55f1216fe4085565e21baa742149b480d35141f298402b1e766fb58d3 0.0s done\n", - "#31 writing layer sha256:1de965777e2e37c7fabe00bdbf3d0203ca83ed30a71a5479c3113fe4fc48c4bb done\n", - "#31 writing layer sha256:24b5aa2448e920814dd67d7d3c0169b2cdacb13c4048d74ded3b4317843b13ff done\n", - "#31 writing layer sha256:2d42104dbf0a7cc962b791f6ab4f45a803f8a36d296f996aca180cfb2f3e30d0 done\n", - "#31 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff\n", - "#31 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff done\n", - "#31 writing layer sha256:38794be1b5dc99645feabf89b22cd34fb5bdffb5164ad920e7df94f353efe9c0 done\n", - "#31 writing layer sha256:38f963dc57c1e7b68a738fe39ed9f9345df7188111a047e2163a46648d7f1d88 done\n", - "#31 writing layer sha256:3e7e4c9bc2b136814c20c04feb4eea2b2ecf972e20182d88759931130cfb4181 done\n", - "#31 writing layer sha256:3fd77037ad585442cd82d64e337f49a38ddba50432b2a1e563a48401d25c79e6 done\n", - "#31 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0 done\n", - "#31 writing layer sha256:45893188359aca643d5918c9932da995364dc62013dfa40c075298b1baabece3 done\n", - "#31 writing layer sha256:49bc651b19d9e46715c15c41b7c0daa007e8e25f7d9518f04f0f06592799875a done\n", - "#31 writing layer sha256:4aeb0049534a685f9b8d851171ca3ee850fc1609d85e651ebdb0508d8d1e9403 0.0s done\n", - "#31 writing layer sha256:4c12db5118d8a7d909e4926d69a2192d2b3cd8b110d49c7504a4f701258c1ccc done\n", - "#31 writing layer sha256:4cc43a803109d6e9d1fd35495cef9b1257035f5341a2db54f7a1940815b6cc65 done\n", - "#31 writing layer sha256:4d32b49e2995210e8937f0898327f196d3fcc52486f0be920e8b2d65f150a7ab done\n", - "#31 writing layer sha256:4d6fe980bad9cd7b2c85a478c8033cae3d098a81f7934322fb64658b0c8f9854 done\n", - "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#31 writing layer sha256:5150182f1ff123399b300ca469e00f6c4d82e1b9b72652fb8ee7eab370245236 done\n", - "#31 writing layer sha256:55e32cef42f992f9c914515dc95457ad65a501d20fb8face7a82d51a620e8d0c done\n", - "#31 writing layer sha256:595c38fa102c61c3dda19bdab70dcd26a0e50465b986d022a84fa69023a05d0f done\n", - "#31 writing layer sha256:59d451175f6950740e26d38c322da0ef67cb59da63181eb32996f752ba8a2f17 done\n", - "#31 writing layer sha256:5ad1f2004580e415b998124ea394e9d4072a35d70968118c779f307204d6bd17 done\n", - "#31 writing layer sha256:62598eafddf023e7f22643485f4321cbd51ff7eee743b970db12454fd3c8c675 done\n", - "#31 writing layer sha256:63d7e616a46987136f4cc9eba95db6f6327b4854cfe3c7e20fed6db0c966e380 done\n", - "#31 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f done\n", - "#31 writing layer sha256:698318e5a60e5e0d48c45bf992f205a9532da567fdfe94bd59be2e192975dd6f done\n", - "#31 writing layer sha256:6ddc1d0f91833b36aac1c6f0c8cea005c87d94bab132d46cc06d9b060a81cca3 done\n", - "#31 writing layer sha256:74ac1f5a47c0926bff1e997bb99985a09926f43bd0895cb27ceb5fa9e95f8720 done\n", - "#31 writing layer sha256:7577973918dd30e764733a352a93f418000bc3181163ca451b2307492c1a6ba9 done\n", - "#31 writing layer sha256:806c67c703b35fc283718dc9a3a7062a0303aabbea1395b138e66c10cd915f56 done\n", - "#31 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2 done\n", - "#31 writing layer sha256:8a7451db9b4b817b3b33904abddb7041810a4ffe8ed4a034307d45d9ae9b3f2a done\n", - "#31 writing layer sha256:916f4054c6e7f10de4fd7c08ffc75fa23ebecca4eceb8183cb1023b33b1696c9 done\n", - "#31 writing layer sha256:9463aa3f56275af97693df69478a2dc1d171f4e763ca6f7b6f370a35e605c154 done\n", - "#31 writing layer sha256:955fd173ed884230c2eded4542d10a97384b408537be6bbb7c4ae09ccd6fb2d0 done\n", - "#31 writing layer sha256:99ef644a0c84a569b9692a76e0c6a1c3e9dedae5d551087be684b6bc1bea6f22 done\n", - "#31 writing layer sha256:9c42a4ee99755f441251e6043b2cbba16e49818a88775e7501ec17e379ce3cfd done\n", - "#31 writing layer sha256:9c63be0a86e3dc4168db3814bf464e40996afda0031649d9faa8ff7568c3154f done\n", - "#31 writing layer sha256:9e04bda98b05554953459b5edef7b2b14d32f1a00b979a23d04b6eb5c191e66b done\n", - "#31 writing layer sha256:a4a0c690bc7da07e592514dccaa26098a387e8457f69095e922b6d73f7852502 done\n", - "#31 writing layer sha256:a4aafbc094d78a85bef41036173eb816a53bcd3e2564594a32f542facdf2aba6 done\n", - "#31 writing layer sha256:ae36a4d38b76948e39a5957025c984a674d2de18ce162a8caaa536e6f06fccea done\n", - "#31 writing layer sha256:b2fa40114a4a0725c81b327df89c0c3ed5c05ca9aa7f1157394d5096cf5460ce done\n", - "#31 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#31 writing layer sha256:b8ec9058cfc8057a4989af89add416b6d4c425cb3e3a4542281d3b188ef8d97f 0.0s done\n", - "#31 writing layer sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523\n", - "#31 preparing build cache for export 1.3s done\n", - "#31 writing layer sha256:b9874c0e107000cd0157c2f6c12f6b095ec79e92b293ef581984b94c75080523 done\n", - "#31 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6 done\n", - "#31 writing layer sha256:cb506fbdedc817e3d074f609e2edbf9655aacd7784610a1bbac52f2d7be25438 done\n", - "#31 writing layer sha256:d2a6fe65a1f84edb65b63460a75d1cac1aa48b72789006881b0bcfd54cd01ffd done\n", - "#31 writing layer sha256:d674572cae0440d01b016bd1a6cf88924f6067f38858706ad4856d78993a0a6e done\n", - "#31 writing layer sha256:d709c3fc82181d7bc3561f087363554add07059d1fc1fa014d3da3f9092a7524 0.0s done\n", - "#31 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304 done\n", - "#31 writing layer sha256:ddc2ade4f6fe866696cb638c8a102cb644fa842c2ca578392802b3e0e5e3bcb7 done\n", - "#31 writing layer sha256:e2cfd7f6244d6f35befa6bda1caa65f1786cecf3f00ef99d7c9a90715ce6a03c done\n", - "#31 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907 done\n", - "#31 writing layer sha256:eaf45e9f32d1f5a9983945a1a9f8dedbb475bc0f578337610e00b4dedec87c20 done\n", - "#31 writing layer sha256:eb411bef39c013c9853651e68f00965dbd826d829c4e478884a2886976e9c989 done\n", - "#31 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759 done\n", - "#31 writing layer sha256:ef4466d6f927d29d404df9c5af3ef5733c86fa14e008762c90110b963978b1e7 done\n", - "#31 writing layer sha256:f20d17e4fd485b1a37bb580c6b5e8b8d707b382d387df57004086b8036ddaded done\n", - "#31 writing layer sha256:f346e3ecdf0bee048fa1e3baf1d3128ff0283b903f03e97524944949bd8882e5 done\n", - "#31 writing layer sha256:f3f9a00a1ce9aadda250aacb3e66a932676badc5d8519c41517fdf7ea14c13ed done\n", - "#31 writing layer sha256:fd849d9bd8889edd43ae38e9f21a912430c8526b2c18f3057a3b2cd74eb27b31 done\n", - "#31 writing config sha256:23fbbd00b006000bbd87f5dfe7e12fe71203e710a83580e1ee63125c214ff4d5 0.0s done\n", - "#31 writing manifest sha256:7b8dadf0182c3fbe7dede6a29963defd6eff4efa3a6b8e81e5f2dceaaf023210 0.0s done\n", - "#31 DONE 1.3s\n", - "[2023-08-03 20:52:32,339] [INFO] (packager) - Build Summary:\n", + "#28 exporting to docker image format\n", + "#28 exporting layers\n", + "#28 exporting layers 157.5s done\n", + "#28 exporting manifest sha256:6d3e7548287a6a3abc70110c29982b2b32483515fb249876f50112b03dac40a6 0.0s done\n", + "#28 exporting config sha256:69287893ca549aef4897eb7391ab557b1cc5802f1c547ac41b761808e04a7fa4 0.0s done\n", + "#28 sending tarball\n", + "#28 ...\n", + "\n", + "#29 importing to docker\n", + "#29 DONE 90.4s\n", + "\n", + "#28 exporting to docker image format\n", + "#28 sending tarball 132.9s done\n", + "#28 DONE 290.5s\n", + "\n", + "#30 exporting content cache\n", + "#30 preparing build cache for export\n", + "#30 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d\n", + "#30 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d done\n", + "#30 writing layer sha256:0ce020987cfa5cd1654085af3bb40779634eb3d792c4a4d6059036463ae0040d done\n", + "#30 writing layer sha256:0f65089b284381bf795d15b1a186e2a8739ea957106fa526edef0d738e7cda70 done\n", + "#30 writing layer sha256:12a47450a9f9cc5d4edab65d0f600dbbe8b23a1663b0b3bb2c481d40e074b580 done\n", + "#30 writing layer sha256:1de965777e2e37c7fabe00bdbf3d0203ca83ed30a71a5479c3113fe4fc48c4bb done\n", + "#30 writing layer sha256:24b5aa2448e920814dd67d7d3c0169b2cdacb13c4048d74ded3b4317843b13ff done\n", + "#30 writing layer sha256:2d42104dbf0a7cc962b791f6ab4f45a803f8a36d296f996aca180cfb2f3e30d0 done\n", + "#30 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff done\n", + "#30 writing layer sha256:3783d0dc66925772df1dfb27f94eaa99034d14162095ac959cd3963ec714d1f4 0.0s done\n", + "#30 writing layer sha256:38794be1b5dc99645feabf89b22cd34fb5bdffb5164ad920e7df94f353efe9c0 done\n", + "#30 writing layer sha256:38f963dc57c1e7b68a738fe39ed9f9345df7188111a047e2163a46648d7f1d88 done\n", + "#30 writing layer sha256:394546a9b772ece8edef536c1ed208c87a1c39293207cc101fc7d94cc5ff364f\n", + "#30 writing layer sha256:394546a9b772ece8edef536c1ed208c87a1c39293207cc101fc7d94cc5ff364f 54.5s done\n", + "#30 writing layer sha256:3e7e4c9bc2b136814c20c04feb4eea2b2ecf972e20182d88759931130cfb4181 done\n", + "#30 writing layer sha256:3fd77037ad585442cd82d64e337f49a38ddba50432b2a1e563a48401d25c79e6 done\n", + "#30 writing layer sha256:40c61fe78b843bfb1e890001a8d40e2dbe8f3e2f0ddb65d10c91147cfb0f1af3\n", + "#30 writing layer sha256:40c61fe78b843bfb1e890001a8d40e2dbe8f3e2f0ddb65d10c91147cfb0f1af3 0.1s done\n", + "#30 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0 done\n", + "#30 writing layer sha256:45893188359aca643d5918c9932da995364dc62013dfa40c075298b1baabece3 done\n", + "#30 writing layer sha256:49bc651b19d9e46715c15c41b7c0daa007e8e25f7d9518f04f0f06592799875a done\n", + "#30 writing layer sha256:4c12db5118d8a7d909e4926d69a2192d2b3cd8b110d49c7504a4f701258c1ccc done\n", + "#30 writing layer sha256:4cc43a803109d6e9d1fd35495cef9b1257035f5341a2db54f7a1940815b6cc65 done\n", + "#30 writing layer sha256:4d32b49e2995210e8937f0898327f196d3fcc52486f0be920e8b2d65f150a7ab done\n", + "#30 writing layer sha256:4d6fe980bad9cd7b2c85a478c8033cae3d098a81f7934322fb64658b0c8f9854 done\n", + "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#30 writing layer sha256:5150182f1ff123399b300ca469e00f6c4d82e1b9b72652fb8ee7eab370245236 done\n", + "#30 writing layer sha256:595c38fa102c61c3dda19bdab70dcd26a0e50465b986d022a84fa69023a05d0f done\n", + "#30 writing layer sha256:599c7444a380d72214895c595ea8a776b249a23b4bde9c029c5b3b737fd44cf1 0.0s done\n", + "#30 writing layer sha256:59d451175f6950740e26d38c322da0ef67cb59da63181eb32996f752ba8a2f17 done\n", + "#30 writing layer sha256:5ad1f2004580e415b998124ea394e9d4072a35d70968118c779f307204d6bd17 done\n", + "#30 writing layer sha256:62598eafddf023e7f22643485f4321cbd51ff7eee743b970db12454fd3c8c675 done\n", + "#30 writing layer sha256:63d7e616a46987136f4cc9eba95db6f6327b4854cfe3c7e20fed6db0c966e380 done\n", + "#30 writing layer sha256:689393d5c3926910ebc9e4c6c377ea651c84cf0134a1aa69cadcf309ecef9e02 0.0s done\n", + "#30 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f\n", + "#30 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f done\n", + "#30 writing layer sha256:698318e5a60e5e0d48c45bf992f205a9532da567fdfe94bd59be2e192975dd6f done\n", + "#30 writing layer sha256:6d907abcbcc8c4fea9f9678d5b7a9a0171b441c35bed212a634d58d27d8fb5cb\n", + "#30 writing layer sha256:6d907abcbcc8c4fea9f9678d5b7a9a0171b441c35bed212a634d58d27d8fb5cb 0.4s done\n", + "#30 writing layer sha256:6ddc1d0f91833b36aac1c6f0c8cea005c87d94bab132d46cc06d9b060a81cca3 done\n", + "#30 writing layer sha256:7073fc2251eff329a82af3e4f73a2b5e75b8fe8c6d744183f08d11f395277e9c 0.0s done\n", + "#30 writing layer sha256:74ac1f5a47c0926bff1e997bb99985a09926f43bd0895cb27ceb5fa9e95f8720 done\n", + "#30 writing layer sha256:7577973918dd30e764733a352a93f418000bc3181163ca451b2307492c1a6ba9 done\n", + "#30 writing layer sha256:7f256c83fad20862afc50cdf843f2b48a9be6bb58f9f17ef9f63e26f047ba31a 0.0s done\n", + "#30 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2\n", + "#30 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2 done\n", + "#30 writing layer sha256:8a7451db9b4b817b3b33904abddb7041810a4ffe8ed4a034307d45d9ae9b3f2a done\n", + "#30 writing layer sha256:8bf04775f408495a1ab7de439b0fc5f981bd282834c6d940f5eb7b865fcb2aa0 0.0s done\n", + "#30 writing layer sha256:916f4054c6e7f10de4fd7c08ffc75fa23ebecca4eceb8183cb1023b33b1696c9 done\n", + "#30 writing layer sha256:9463aa3f56275af97693df69478a2dc1d171f4e763ca6f7b6f370a35e605c154 done\n", + "#30 writing layer sha256:955fd173ed884230c2eded4542d10a97384b408537be6bbb7c4ae09ccd6fb2d0 done\n", + "#30 writing layer sha256:9c42a4ee99755f441251e6043b2cbba16e49818a88775e7501ec17e379ce3cfd done\n", + "#30 writing layer sha256:9c63be0a86e3dc4168db3814bf464e40996afda0031649d9faa8ff7568c3154f done\n", + "#30 writing layer sha256:9e04bda98b05554953459b5edef7b2b14d32f1a00b979a23d04b6eb5c191e66b done\n", + "#30 writing layer sha256:a4a0c690bc7da07e592514dccaa26098a387e8457f69095e922b6d73f7852502 done\n", + "#30 writing layer sha256:a4aafbc094d78a85bef41036173eb816a53bcd3e2564594a32f542facdf2aba6 done\n", + "#30 writing layer sha256:ae36a4d38b76948e39a5957025c984a674d2de18ce162a8caaa536e6f06fccea done\n", + "#30 writing layer sha256:b2fa40114a4a0725c81b327df89c0c3ed5c05ca9aa7f1157394d5096cf5460ce done\n", + "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", + "#30 writing layer sha256:bc094183f34f419fbf8d0d5a76d88f741675287a26603b98896c4161a0218d63\n", + "#30 writing layer sha256:bc094183f34f419fbf8d0d5a76d88f741675287a26603b98896c4161a0218d63 1.6s done\n", + "#30 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6\n", + "#30 preparing build cache for export 57.9s done\n", + "#30 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6 done\n", + "#30 writing layer sha256:cb506fbdedc817e3d074f609e2edbf9655aacd7784610a1bbac52f2d7be25438 done\n", + "#30 writing layer sha256:d2a6fe65a1f84edb65b63460a75d1cac1aa48b72789006881b0bcfd54cd01ffd done\n", + "#30 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304 done\n", + "#30 writing layer sha256:ddc2ade4f6fe866696cb638c8a102cb644fa842c2ca578392802b3e0e5e3bcb7 done\n", + "#30 writing layer sha256:e2cfd7f6244d6f35befa6bda1caa65f1786cecf3f00ef99d7c9a90715ce6a03c done\n", + "#30 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907 done\n", + "#30 writing layer sha256:eaf45e9f32d1f5a9983945a1a9f8dedbb475bc0f578337610e00b4dedec87c20 done\n", + "#30 writing layer sha256:eb411bef39c013c9853651e68f00965dbd826d829c4e478884a2886976e9c989 done\n", + "#30 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759 done\n", + "#30 writing layer sha256:ef4466d6f927d29d404df9c5af3ef5733c86fa14e008762c90110b963978b1e7 done\n", + "#30 writing layer sha256:f346e3ecdf0bee048fa1e3baf1d3128ff0283b903f03e97524944949bd8882e5 done\n", + "#30 writing layer sha256:f3f9a00a1ce9aadda250aacb3e66a932676badc5d8519c41517fdf7ea14c13ed done\n", + "#30 writing layer sha256:fd849d9bd8889edd43ae38e9f21a912430c8526b2c18f3057a3b2cd74eb27b31 done\n", + "#30 writing config sha256:7cfec7bd2b3ff69855a31c8535d3935c07e6028f6e6f6ad8d1ee72dca22a059e 0.0s done\n", + "#30 writing manifest sha256:ae24e011466a0d1cad0f5738f6d2871e7cc99b4f959833c08e056e8dadd6f56c 0.0s done\n", + "#30 DONE 57.9s\n", + "[2023-11-15 19:26:02,805] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1690,7 +1810,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 d22d232013f0 59 seconds ago 15.4GB\n" + "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 69287893ca54 5 minutes ago 15.6GB\n" ] } ], @@ -1716,23 +1836,20 @@ "name": "stdout", "output_type": "stream", "text": [ - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydantic/_internal/_config.py:269: UserWarning: Valid config keys have changed in V2:\n", - "* 'allow_population_by_field_name' has been renamed to 'populate_by_name'\n", - " warnings.warn(message, UserWarning)\n", - "[2023-08-03 20:52:37,269] [INFO] (runner) - Checking dependencies...\n", - "[2023-08-03 20:52:37,269] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2023-11-15 19:26:07,374] [INFO] (runner) - Checking dependencies...\n", + "[2023-11-15 19:26:07,375] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2023-08-03 20:52:37,270] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2023-11-15 19:26:07,375] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2023-08-03 20:52:37,270] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2023-11-15 19:26:07,375] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2023-08-03 20:52:37,348] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmp4dplyjgr/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmp4dplyjgr/pkg.json\n", - "[2023-08-03 20:52:37,733] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2023-11-15 19:26:07,454] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmp7n6pc6u1/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmp7n6pc6u1/pkg.json\n", + "[2023-11-15 19:26:07,741] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2023-08-03 20:52:37,954] [INFO] (common) - Launching container (96d09cbab602) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: determined_maxwell\n", + "[2023-11-15 19:26:07,994] [INFO] (common) - Launching container (c634a4b0db9a) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: quizzical_hopper\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1741,7 +1858,7 @@ " ipc mode: host\n", " shared memory size: 67108864\n", " devices: \n", - "2023-08-04 03:52:38 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + "2023-11-16 03:26:08 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", "\n", "[info] [app_driver.cpp:1025] Launching the driver/health checking service\n", "\n", @@ -1773,13 +1890,9 @@ "\n", "[info] [gxf_executor.cpp:229] Destroying context\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:111: FutureWarning: : Class `AddChannel` has been deprecated since version 0.8. It will be removed in version 1.3. please use MetaTensor data type and monai.transforms.EnsureChannelFirst instead with `channel_dim='no_channel'`.\n", - "\n", - " warn_deprecated(obj, msg, warning_category)\n", - "\n", "/home/holoscan/.local/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", "\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls) # type: ignore\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "\n", "/home/holoscan/.local/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", "\n", @@ -1787,7 +1900,7 @@ "\n", "AbdomenCT\n", "\n", - "[2023-08-03 20:52:51,293] [INFO] (common) - Container 'determined_maxwell'(96d09cbab602) exited.\n" + "[2023-11-15 19:26:14,982] [INFO] (common) - Container 'quizzical_hopper'(c634a4b0db9a) exited.\n" ] } ], diff --git a/platforms/nuance_pin/app/inference.py b/platforms/nuance_pin/app/inference.py index 50c104cd..1d805e39 100644 --- a/platforms/nuance_pin/app/inference.py +++ b/platforms/nuance_pin/app/inference.py @@ -27,7 +27,6 @@ from monai.deploy.operators.monai_seg_inference_operator import InMemImageReader from monai.deploy.utils.importutil import optional_import from monai.transforms import ( - AddChanneld, Compose, CopyItemsd, EnsureChannelFirstd, @@ -184,7 +183,7 @@ def pre_process(self, img_reader) -> Compose: keys=image_key, axcodes="RAS", ), - AddChanneld(keys=image_key), + EnsureChannelFirstd(keys=image_key), ScaleIntensityRanged(image_key, a_min=-1024.0, a_max=300.0, b_min=0.0, b_max=1.0, clip=True), EnsureTyped(image_key), ], diff --git a/requirements-dev.txt b/requirements-dev.txt index 6a73a614..81ac93f5 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -35,4 +35,4 @@ scikit-image>=0.17.2 nibabel>=3.2.1 numpy-stl>=2.12.0 trimesh>=3.8.11 -torch>=1.12.0 +torch~=2.0.1 diff --git a/requirements-examples.txt b/requirements-examples.txt index 6e045a9a..1490e6fa 100644 --- a/requirements-examples.txt +++ b/requirements-examples.txt @@ -9,5 +9,5 @@ trimesh>=3.8.11 nibabel>=3.2.1 numpy-stl>=2.12.0 trimesh>=3.8.11 -torch>=1.12.0 +torch~=2.0.1 monai>=1.0.0 \ No newline at end of file From 9355a5d608dc15d527627cc1c64823e5dfd4e70d Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:36:23 -0700 Subject: [PATCH 056/118] Update pr.yml to pip install cuda12 runtime Signed-off-by: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 73fe3442..8096d5e1 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -27,6 +27,7 @@ jobs: - name: Check formatting run: | source .venv/bin/activate + python3 -m pip install nvidia-cuda-runtime-cu12 --index https://pypi.ngc.nvidia.com python3 -c 'import sys; print(sys.executable)' python3 -c 'import site; print(site.getsitepackages())' python3 -m pip freeze From e7e2a94d63d6fcbac487fa208a6546aadcc6d2f2 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:46:51 -0700 Subject: [PATCH 057/118] Update pr.yml Move cuda12 runtime install to the setup section. Signed-off-by: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 8096d5e1..83479af7 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -23,11 +23,11 @@ jobs: pip install virtualenv virtualenv .venv source .venv/bin/activate + python3 -m pip install nvidia-cuda-runtime-cu12 --index https://pypi.ngc.nvidia.com ./run setup - name: Check formatting run: | source .venv/bin/activate - python3 -m pip install nvidia-cuda-runtime-cu12 --index https://pypi.ngc.nvidia.com python3 -c 'import sys; print(sys.executable)' python3 -c 'import site; print(site.getsitepackages())' python3 -m pip freeze From cf9f2aeb95429f400d0ba557429ed73fd7f6d5c8 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:55:53 -0700 Subject: [PATCH 058/118] Update pr.yml change to use pypi.org for cu12 Signed-off-by: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 83479af7..ce42b39b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -23,7 +23,7 @@ jobs: pip install virtualenv virtualenv .venv source .venv/bin/activate - python3 -m pip install nvidia-cuda-runtime-cu12 --index https://pypi.ngc.nvidia.com + python3 -m pip install nvidia-cuda-runtime-cu12 ./run setup - name: Check formatting run: | From a7f77c177314c13fa43d17d7010788b352f9693a Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 9 Apr 2024 17:59:10 -0700 Subject: [PATCH 059/118] Update pr.yml Add the cuda12 pip install in all venv activation as it was observed that the Run Unit venv did not get the package Signed-off-by: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index ce42b39b..d3d2d1a8 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -28,6 +28,7 @@ jobs: - name: Check formatting run: | source .venv/bin/activate + python3 -m pip install nvidia-cuda-runtime-cu12 python3 -c 'import sys; print(sys.executable)' python3 -c 'import site; print(site.getsitepackages())' python3 -m pip freeze @@ -37,10 +38,13 @@ jobs: - name: Run Unit tests run: | source .venv/bin/activate + python3 -m pip install nvidia-cuda-runtime-cu12 + python3 -m pip install nvidia-cuda-runtime-cu12 ./run test all unit - name: Coverage run: | source .venv/bin/activate + python3 -m pip install nvidia-cuda-runtime-cu12 coverage xml - name: Upload coverage uses: codecov/codecov-action@v2 From 9f1b9492996a7b987c72070718aafb70db19e990 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 9 Apr 2024 18:12:32 -0700 Subject: [PATCH 060/118] Update pr.yml removed duplicates Signed-off-by: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index d3d2d1a8..7e85d0ea 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -39,7 +39,6 @@ jobs: run: | source .venv/bin/activate python3 -m pip install nvidia-cuda-runtime-cu12 - python3 -m pip install nvidia-cuda-runtime-cu12 ./run test all unit - name: Coverage run: | From ec70c1bb38a52695f08933cd3164c4b7a7cf7133 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:19:22 -0700 Subject: [PATCH 061/118] Update pr.yml Repeat setting lib path for cuda12 because it is not found in Unit Tests Signed-off-by: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 7e85d0ea..37c512d3 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -39,11 +39,13 @@ jobs: run: | source .venv/bin/activate python3 -m pip install nvidia-cuda-runtime-cu12 + export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH ./run test all unit - name: Coverage run: | source .venv/bin/activate python3 -m pip install nvidia-cuda-runtime-cu12 + export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH coverage xml - name: Upload coverage uses: codecov/codecov-action@v2 From f268ce9301bc4fe6b0de405b307fcd9e3d5bc00f Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Thu, 11 Apr 2024 14:25:28 -0700 Subject: [PATCH 062/118] Updating the SDK to use newer and updated dependencies, namely Holoscan SDK (#481) * Updated the SDK to use Holoscan SDK v1.0, and tested apps and Notebooks Signed-off-by: M Q * Doc updates Signed-off-by: M Q * Fix typo Signed-off-by: M Q * Add Holoscan license file Signed-off-by: M Q * Add release note and editorial changes Signed-off-by: M Q * Update readme Signed-off-by: M Q * Add missing packages in the example in the Readme Signed-off-by: M Q * Add new package to make gen_docs work even just in Python 3.8 env Signed-off-by: M Q * Updated user guide Signed-off-by: M Q * Rerun the notebook to clear some warnings Signed-off-by: M Q * rerun notebook Signed-off-by: M Q * touch the file Signed-off-by: M Q * touch the file Signed-off-by: M Q * fix formatting complaints Signed-off-by: M Q * ignore the complaint Signed-off-by: M Q * touch file Signed-off-by: M Q * touch the file Signed-off-by: M Q * Successfully run after getting new clara-viz fix for Python 3.10+ Signed-off-by: M Q * specififies OS and CUDA requirements in the release note Signed-off-by: M Q * Adding a note for doc building succeeding with Python3.8 only Signed-off-by: M Q * Update docs and Notebooks Signed-off-by: M Q * Explicitly specifying GPU and CUDA12 req. Signed-off-by: M Q * Explicitly specifying GPU and CUDA12 req in README. Signed-off-by: M Q * Add ref to MONAI guide per review commnents Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- CODE_OF_CONDUCT.md | 4 +- CONTRIBUTING.md | 21 +- README.md | 12 +- .../holoscan_Apache2.0_LICENSE.txt | 202 ++ docs/requirements.txt | 3 +- docs/source/conf.py | 2 +- .../getting_started/installing_app_sdk.md | 10 +- .../getting_started/tutorials/mednist_app.md | 4 +- .../tutorials/monai_bundle_app.md | 4 +- .../tutorials/multi_model_app.md | 2 +- .../tutorials/segmentation_app.md | 2 +- .../tutorials/segmentation_clara-viz_app.md | 2 +- .../getting_started/tutorials/simple_app.md | 5 +- docs/source/introduction/roadmap.md | 2 +- docs/source/release_notes/index.md | 7 + docs/source/release_notes/v1.0.0.md | 35 + monai/deploy/conditions/__init__.py | 1 + notebooks/tutorials/01_simple_app.ipynb | 670 ++++--- .../tutorials/02_mednist_app-prebuilt.ipynb | 782 ++++---- notebooks/tutorials/02_mednist_app.ipynb | 733 ++++---- notebooks/tutorials/03_segmentation_app.ipynb | 1307 +++++-------- .../tutorials/03_segmentation_viz_app.ipynb | 402 +--- notebooks/tutorials/04_monai_bundle_app.ipynb | 1160 +++++------- notebooks/tutorials/05_multi_model_app.ipynb | 1666 ++++------------- pyproject.toml | 2 +- requirements.txt | 2 +- run | 2 +- setup.cfg | 6 +- 28 files changed, 2738 insertions(+), 4312 deletions(-) create mode 100644 THIRD_PARTY_NOTICES/holoscan_Apache2.0_LICENSE.txt create mode 100644 docs/source/release_notes/v1.0.0.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index c6f6fda2..c94225a6 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -67,8 +67,8 @@ members of the project's leadership. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, +available at https://www.contributor-covenant.org/version/2/1/code_of_conduct [homepage]: https://www.contributor-covenant.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 51efab83..535231d7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,6 +19,8 @@ Welcome to Project MONAI Deploy App SDK! We're excited you're here and want to contribute. This documentation is intended for individuals and institutions interested in contributing to MONAI Deploy App SDK. MONAI Deploy App SDK is an open-source project and, as such, its success relies on its community of contributors willing to keep improving it. Your contribution will be a valued addition to the code base; we simply ask that you read this page and understand our contribution process, whether you are a seasoned open-source contributor or whether you are a first-time contributor. +Please also refer to [MONAI Contributing Guide](https://github.com/Project-MONAI/MONAI/blob/dev/CONTRIBUTING.md) for general information as well as MONAI Core specifics. + ### Communicate with us We are happy to talk with you about your needs for MONAI Deploy App SDK and your ideas for contributing to the project. One way to do this is to create an issue discussing your thoughts. It might be that a very similar feature is under development or already exists, so an issue is a great starting point. If you are looking for an issue to resolve that will help Project MONAI Deploy App SDK, see the [*good first issue*](https://github.com/Project-MONAI/monai-deploy-app-sdk/labels/good%20first%20issue) and [*Contribution wanted*](https://github.com/Project-MONAI/monai-deploy-app-sdk/labels/Contribution%20wanted) labels. @@ -74,7 +76,7 @@ Before submitting a pull request, we recommend that all linting should pass, by License information: all source code files should start with this paragraph: ```python -# Copyright 2021 MONAI Consortium +# Copyright 2021-2024 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -135,6 +137,10 @@ MONAI Deploy App SDK's code coverage report is available at [CodeCov](https://co #### Building the documentation +:::{note} +Please note that the documentation builds successfully in Python 3.8 environment, but fails with Python 3.10. +::: + MONAI's documentation is located at `docs/`. ```bash @@ -241,21 +247,22 @@ For string definition, [f-string](https://www.python.org/dev/peps/pep-0498/) is ### Submitting pull requests -TBD +Please see this [general guidance](https://github.com/gabrieldemarmiesse/getting_started_open_source) ## The code reviewing process -TBD +Please see this [general guidance](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews) ### Reviewing pull requests -TBD +At least one contributor of the project needs to approve a pull request. ## Admin tasks -TBD +The contributors with Admin role in the project handle admin tasks. ### Release a new version -[github ci]: https://github.com/Project-MONAI/monai-deploy-app-sdk/actions -[monai-deploy-app-sdk issue list]: https://github.com/Project-MONAI/monai-deploy-app-sdk/issues +[github ci](https://github.com/Project-MONAI/monai-deploy-app-sdk/actions) + +[monai-deploy-app-sdk issue list](https://github.com/Project-MONAI/monai-deploy-app-sdk/issues) diff --git a/README.md b/README.md index 3c11e5d1..63803328 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ MONAI Deploy App SDK offers a framework and associated tools to design, develop ## User Guide -User guide is available at [docs.monai.io](https://docs.monai.io/projects/monai-deploy-app-sdk/en/latest/). +User guide is available at [docs.monai.io](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/). ## Installation @@ -32,9 +32,15 @@ To install [the current release](https://pypi.org/project/monai-deploy-app-sdk/) pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. ``` +Please also note the following system requirements: +- Ubuntu 22.04 on X86-64 is required, as this is the only X86 platform that the underlying Holoscan SDK has been tested to support as of now. +- [CUDA 12](https://developer.nvidia.com/cuda-12-0-0-download-archive) is required along with a supported NVIDIA GPU with at least 8GB of video RAM. If AI inference is not used in the example application and a GPU is not installed, at least [CUDA 12 runtime](https://pypi.org/project/nvidia-cuda-runtime-cu12/) is required, as this is one of the requirements of Holoscan SDK, in addition, the `LIB_LIBRARY_PATH` must be set to include the installed shared library, e.g. in a Python 3.8 env, ```export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH``` + + + ## Getting Started -Getting started guide is available at [here](https://docs.monai.io/projects/monai-deploy-app-sdk/en/latest/getting_started/index.html). +Getting started guide is available at [here](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/getting_started/index.html). ```bash pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. @@ -44,7 +50,7 @@ git clone https://github.com/Project-MONAI/monai-deploy-app-sdk.git cd monai-deploy-app-sdk # Install necessary dependencies for simple_imaging_app -pip install scikit-image +pip install matplotlib Pillow scikit-image # Execute the app locally python examples/apps/simple_imaging_app/app.py -i examples/apps/simple_imaging_app/brain_mr_input.jpg -o output diff --git a/THIRD_PARTY_NOTICES/holoscan_Apache2.0_LICENSE.txt b/THIRD_PARTY_NOTICES/holoscan_Apache2.0_LICENSE.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/THIRD_PARTY_NOTICES/holoscan_Apache2.0_LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/requirements.txt b/docs/requirements.txt index 56a20bb0..d0675536 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -36,4 +36,5 @@ sphinxcontrib-htmlhelp==2.0.0 sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.3 sphinxcontrib-serializinghtml==1.1.5 -sphinxcontrib-mermaid==0.7.1 \ No newline at end of file +sphinxcontrib-mermaid==0.7.1 +lxml_html_clean \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 77191b41..18938a78 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -41,7 +41,7 @@ # -- Project information ----------------------------------------------------- project = "MONAI Deploy App SDK" -copyright = "2021 MONAI Consortium" +copyright = "2021-2024 MONAI Consortium" author = "MONAI Contributors" # The full version, including alpha/beta/rc tags diff --git a/docs/source/getting_started/installing_app_sdk.md b/docs/source/getting_started/installing_app_sdk.md index 3d475d2b..635f2edd 100644 --- a/docs/source/getting_started/installing_app_sdk.md +++ b/docs/source/getting_started/installing_app_sdk.md @@ -15,16 +15,14 @@ pip install --upgrade monai-deploy-app-sdk ``` :::{note} -For packaging your application, [MONAI Application Packager](/developing_with_sdk/packaging_app) and [MONAI Application Runner (MAR)](/developing_with_sdk/executing_packaged_app_locally) requires NVIDIA Docker (NVIDIA Container Toolkit) installed: +For packaging and running your application using [MONAI Application Packager](/developing_with_sdk/packaging_app) and [MONAI Application Runner (MAR)](/developing_with_sdk/executing_packaged_app_locally), [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) needs to be installed. - +For version 1.0.0, `nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu` is used by [MONAI Application Packager](/developing_with_sdk/packaging_app) as base image for X86-64 in Linux system, though this will change with versions. -Currently, `nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu` base Docker image is used by [MONAI Application Packager](/developing_with_sdk/packaging_app) by default for X86-64 in Linux system. - -The base image size is large so please pull the image in advance to save time. Note that the container image tag in the following example, e.g. v0.6.0, corresponds to the SDK version. +The base image size is large, so it is recommended to pull the image in advance to save time. Note that the container image tag in the following example, e.g. `v1.0.3`, corresponds to the underlying Holoscan SDK version. ```bash -docker pull nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu +docker pull nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu ``` ::: diff --git a/docs/source/getting_started/tutorials/mednist_app.md b/docs/source/getting_started/tutorials/mednist_app.md index 6389da82..7ad98c1e 100644 --- a/docs/source/getting_started/tutorials/mednist_app.md +++ b/docs/source/getting_started/tutorials/mednist_app.md @@ -7,7 +7,7 @@ This tutorial demos the process of packaging up a trained model using MONAI Depl ```bash # Create a virtual environment with Python 3.8. # Skip if you are already in a virtual environment. -conda create -n mednist python=3.8 pytorch jupyterlab cudatoolkit=11.1 -c pytorch -c conda-forge +conda create -n mednist python=3.8 pytorch jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate mednist # Launch JupyterLab if you want to work on Jupyter Notebook @@ -41,6 +41,8 @@ jupyter-lab ```{raw} html
+ +

Video may show the use of previous SDK verson.

``` diff --git a/docs/source/getting_started/tutorials/monai_bundle_app.md b/docs/source/getting_started/tutorials/monai_bundle_app.md index 9a05c34e..e93c65e4 100644 --- a/docs/source/getting_started/tutorials/monai_bundle_app.md +++ b/docs/source/getting_started/tutorials/monai_bundle_app.md @@ -7,7 +7,7 @@ This tutorial shows how to create an organ segmentation application for a PyTorc ```bash # Create a virtual environment with Python 3.8. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=11.1 -c pytorch -c conda-forge +conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -31,6 +31,8 @@ jupyter-lab ```{raw} html
+ +

Video may show the use of previous SDK verson.

``` diff --git a/docs/source/getting_started/tutorials/multi_model_app.md b/docs/source/getting_started/tutorials/multi_model_app.md index d91629cc..c197c88e 100644 --- a/docs/source/getting_started/tutorials/multi_model_app.md +++ b/docs/source/getting_started/tutorials/multi_model_app.md @@ -9,7 +9,7 @@ The models used in this example are trained with MONAI, and are packaged in the ```bash # Create a virtual environment with Python 3.8. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=11.1 -c pytorch -c conda-forge +conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook diff --git a/docs/source/getting_started/tutorials/segmentation_app.md b/docs/source/getting_started/tutorials/segmentation_app.md index d19147d7..3ef9e55b 100644 --- a/docs/source/getting_started/tutorials/segmentation_app.md +++ b/docs/source/getting_started/tutorials/segmentation_app.md @@ -9,7 +9,7 @@ Please note that the following steps are for demonstration purpose. The code pul ```bash # Create a virtual environment with Python 3.8. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=11.1 -c pytorch -c conda-forge +conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook diff --git a/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md b/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md index 3058d0df..1ce87b5a 100644 --- a/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md +++ b/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md @@ -7,7 +7,7 @@ This tutorial shows how to create an organ segmentation application for a PyTorc ```bash # Create a virtual environment with Python 3.8. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=11.1 -c pytorch -c conda-forge +conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook diff --git a/docs/source/getting_started/tutorials/simple_app.md b/docs/source/getting_started/tutorials/simple_app.md index 78a62242..3eb0328d 100644 --- a/docs/source/getting_started/tutorials/simple_app.md +++ b/docs/source/getting_started/tutorials/simple_app.md @@ -7,7 +7,7 @@ This tutorial shows how a simple image processing application can be created wit ```bash # Create a virtual environment with Python 3.8. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=11.1 -c pytorch -c conda-forge +conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -48,8 +48,7 @@ cd monai-deploy-app-sdk pip install monai-deploy-app-sdk # Install necessary packages from the app. Can simply run `pip install -r examples/apps/simple_imaging_app/requirements.txt` -pip install scikit-image -pip install setuptools +pip install scikit-image, setuptools, Pillow, matplotlib # See the input file exists in the default `input`` folder in the current working directory ls examples/apps/simple_imaging_app/input/ diff --git a/docs/source/introduction/roadmap.md b/docs/source/introduction/roadmap.md index bde0bf6b..fcba80ca 100644 --- a/docs/source/introduction/roadmap.md +++ b/docs/source/introduction/roadmap.md @@ -2,4 +2,4 @@ The first versions of the MONAI Deploy App SDK offer a core framework to build & package healthcare AI apps so that they can be deployed to a production environment. -We are currently in the process of refining the roadmap for the product based on the community’s input, though it is clear that on the roadmap are more built-in DICOM parsing and DICOM OID generation capabilities to better support [IHE AIR profiles](https://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_Suppl_AIR_Rev1-2_TI_2022-07-06.pdf), as well as serving model network in a separate process using [Triton](https://developer.nvidia.com/triton-inference-server). +We are currently in the process of refining the roadmap for the product based on the community’s input, though it is clear that on the roadmap are more built-in DICOM parsing and DICOM OID generation capabilities to better support [IHE AIR profiles](https://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_Suppl_AIR_Rev1-2_TI_2022-07-06.pdf), as well as serving model network in a separate process using [Triton](https://developer.nvidia.com/triton-inference-server) and potentially utilizing [Nvidia Inference Microservices](https://www.nvidia.com/en-us/ai/). diff --git a/docs/source/release_notes/index.md b/docs/source/release_notes/index.md index 0b81d4d3..16b62fed 100644 --- a/docs/source/release_notes/index.md +++ b/docs/source/release_notes/index.md @@ -4,6 +4,13 @@ :hidden: :maxdepth: 2 +``` +## Version 1.0 + +```{toctree} +:maxdepth: 1 + +v1.0.0 ``` ## Version 0.6 diff --git a/docs/source/release_notes/v1.0.0.md b/docs/source/release_notes/v1.0.0.md new file mode 100644 index 00000000..d38fddf8 --- /dev/null +++ b/docs/source/release_notes/v1.0.0.md @@ -0,0 +1,35 @@ +# Version 1.0.0 (April 2024) + +## What's new in 1.0.0 +App SDK has been migrated to be dependent on [NVIDIA Holoscan SDK](https://developer.nvidia.com/holoscan-sdk) since Version [v0.6](https://github.com/nvidia-holoscan/holoscan-sdk/releases) when breaking changes were introduced in some core class APIs. This version is a simple update of the App SDK to make use of the newly released Holoscan SDK v1.0.3, as well as bug fixes of a few known issues. + +### Key changes and migration guide + +- [CUDA 12](https://developer.nvidia.com/cuda-12-0-0-download-archive) is required along with a supported NVIDIA GPU with at least 8GB of video RAM. If AI inference is not used in the example application and a GPU is not installed, at least [CUDA 12 runtime](https://pypi.org/project/nvidia-cuda-runtime-cu12/) is required, as this is one of the requirements of Holoscan SDK, in addition, the `LIB_LIBRARY_PATH` must be set to include the installed shared library, e.g. in a Python 3.8 env, ```export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH``` +- Ubuntu 22.04 on X86-64 is required, similarly required by Holoscan SDK +- The following is repeated from the V0.6 release note, for readers' convenience. + - In App SDK core module, `monai.deploy.core`, instead of through a wrapper layer, Holoscan SDK core sub modules are all directly imported and exposed under`monai.deploy.core`, mixed in with the ones original to the App SDK. The same also applies to those modules, e.g., `conditions`, `executors`, `graphs`, `logger`, and `resources`. As such, the [Modudle API documentation](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/modules/index.html) may show a mixture of `monai.deploy` and `holoscan`. + + - For `monai.deploy.operators`, Holoscan SDK built-in operators are selectively imported and exposed, with the main reason being to avoid introducing extra dependencies on system packages. All of the original and existing App SDK built-in operators are still present and migrated to be based on Holoscan SDK base `operator` class. + + - Python decorator support for `Application` and `Operator` class is absent in this release, so alternative approaches must be used + - `Operator` input(s) and output(s) now must be defined in the `setup()` method of this class + - `Application` and `Operator` cannot decorate or serve out the resource and package dependencies, which are required when packaging the application into MONAI Application Package. So the application developer must now provide the Python package requirement file and application configuration file when creating a MAP + + - Derived `Operator` class must first assign its attributes before calling the constructor of the base `Operator`. + + - `Application`'s `run()` method can no longer pass the file I/O paths, e.g. `input`, `output`, and `models`, to the execution context of each operator when its `compute()` method is called. For operators depending on them, the I/O paths need to be passed in as arguments in the constructor. + + - App SDK CLI, `monai-deploy`, no longer support `exec` sub-command. However, when directly running the application with Python, command line options for `--input`, `--output`, and `--model`, are supported if the application make use of the `Application`'s class method, `init_app_context(argv)`. + + - App SDK CLI packaging command, `monai-deploy package`, requires additional command line parameters, namely, application configuration yaml file, Python requirements file, and the platform configuration (as it supports both x86-64 and ARMv8 AArch64 targets). Details can be found in the tutorials and Users Guide. + + +Please also see the closed issues on Github and the closed pull requests on Github. + +## Additional information +Please visit [GETTING STARTED](/getting_started/index) guide and follow the tutorials. + +You can learn more about SDK usage through [DEVELOPING WITH SDK](/developing_with_sdk/index). + +Please let us know how you like it and what could be improved by [submitting an issue](https://github.com/Project-MONAI/monai-deploy-app-sdk/issues/new/choose) or [asking questions](https://github.com/Project-MONAI/monai-deploy-app-sdk/discussions) \ No newline at end of file diff --git a/monai/deploy/conditions/__init__.py b/monai/deploy/conditions/__init__.py index cc6d84ba..8dcad829 100644 --- a/monai/deploy/conditions/__init__.py +++ b/monai/deploy/conditions/__init__.py @@ -8,6 +8,7 @@ MessageAvailableCondition PeriodicCondition """ + # Need to import explicit ones to quiet mypy complaints from holoscan.conditions import * from holoscan.conditions import CountCondition diff --git a/notebooks/tutorials/01_simple_app.ipynb b/notebooks/tutorials/01_simple_app.ipynb index b343563a..a1f10f59 100644 --- a/notebooks/tutorials/01_simple_app.ipynb +++ b/notebooks/tutorials/01_simple_app.ipynb @@ -95,7 +95,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 2, @@ -104,7 +104,7 @@ }, { "data": { - "image/png": "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9IlPfMJJpVLOD3/4w4rtCouLi6rMxz/+cWfbtm3O97//feenP/2pc+jQIefQoUPqe25XuP/++52jR4863/3ud53u7u5ratvH5z//eefZZ591hoeHnVdeecX5/Oc/70QiEed73/ue4zjhGNYCGQXtOOFY2uKzn/2s88Mf/tAZHh52fvSjHzmHDx92urq6nMnJScdxLt84bjoCdhzH+fu//3tn27ZtTnNzs3PnnXc6zz///EZ36YrCD37wAwfART8f+chHHMc5vxXpT/7kT5ze3l6npaXFec973uMcP368oo7p6Wnn4Ycfdtra2pxkMul89KMfdYrF4gbczcbBNIYAnK985SuqTKlUcn7nd37HyWQyTmtrq/PBD37QGR8fr6jn7bffdh588EEnHo87XV1dzmc/+1lnZWXlMt/NxuE3f/M3naGhIae5udnp7u523vOe9yjydZxwDGuBTsDhWNrhwx/+sNPf3+80Nzc7W7ZscT784Q87J0+eVN9frnEMzwMOESJEiBAhNgCbygccIkSIECFCXC0ICThEiBAhQoTYAIQEHCJEiBAhQmwAQgIOESJEiBAhNgAhAYcIESJEiBAbgJCAQ4QIESJEiA1ASMAhQoQIESLEBiAk4BAhQoQIEWIDEBJwiBAhQoQIsQEICThEiBAhQoTYAIQEHCJEiBAhQmwA/h98RZkJ0aXveQAAAABJRU5ErkJggg==", + "image/png": "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o1EcPnwYR44c2cCebR4MDw8jm81WjGEqlcLBgwfVGB45cgTpdBoHDhxQZQ4fPoxoNIoXXnjhsvf5SkE+nwcAdHR0AABefPFFrKysVIzl7t27sW3btoqxvPXWW9Hb26vKPPDAAygUCnjttdcuY++vDKytreGJJ57AwsICDh06FI5hFXj00Ufx0EMPVYwZEM7HoDhx4gQGBgZw3XXX4ZFHHsHo6CiAyzuOm+o0pKmpKaytrVXcNAD09vbizTff3KBebS5ks1kAMI4hv8tms+jp6an4vrGxER0dHarMtYb19XV8+tOfxj333INbbrkFwPlxam5uRjqdriirj6VprPndtYJXX30Vhw4dwtLSEtra2vCNb3wDN910E44ePRqOYQA88cQT+NnPfoaf/OQnF30Xzkd7HDx4EF/96ldx4403Ynx8HH/2Z3+Ge++9F8eOHbus47ipCDhEiI3Co48+imPHjuG5557b6K5sStx44404evQo8vk8/uM//gMf+chH8Oyzz250tzYVzpw5g0996lN4+umnEYvFNro7mxoPPvig+nvv3r04ePAghoaG8LWvfQ3xePyy9WNTmaC7urrQ0NBwUTTaxMQE+vr6NqhXmwscJ68x7Ovrw+TkZMX3q6urmJmZuSbH+ZOf/CS+9a1v4Qc/+AEGBwfV5319fSiXy5ibm6sor4+laaz53bWC5uZmXH/99di/fz8ef/xx7Nu3D3/7t38bjmEAvPjii5icnMTtt9+OxsZGNDY24tlnn8Xf/d3fobGxEb29veFYVol0Oo0bbrgBJ0+evKxzclMRcHNzM/bv349nnnlGfba+vo5nnnkGhw4d2sCebR7s2LEDfX19FWNYKBTwwgsvqDE8dOgQ5ubm8OKLL6oy3//+97G+vo6DBw9e9j5vFBzHwSc/+Ul84xvfwPe//33s2LGj4vv9+/ejqampYiyPHz+O0dHRirF89dVXKwSap59+GslkEjfddNPluZErEOvr61heXg7HMADe85734NVXX8XRo0fVz4EDB/DII4+ov8OxrA7z8/M4deoU+vv7L++crCqEbAPxxBNPOC0tLc5Xv/pV5/XXX3d++7d/20mn0xXRaNc6isWi89JLLzkvvfSSA8D567/+a+ell15yRkZGHMc5vw0pnU47//Vf/+W88sorzgc+8AHjNqTbbrvNeeGFF5znnnvO2bVr1zW3DekTn/iEk0qlnB/+8IcV2xUWFxdVmY9//OPOtm3bnO9///vOT3/6U+fQoUPOoUOH1PfcrnD//fc7R48edb773e863d3d19S2j89//vPOs88+6wwPDzuvvPKK8/nPf96JRCLO9773PcdxwjGsBTIK2nHCsbTFZz/7WeeHP/yhMzw87PzoRz9yDh8+7HR1dTmTk5OO41y+cdx0BOw4jvP3f//3zrZt25zm5mbnzjvvdJ5//vmN7tIVhR/84AcOgIt+PvKRjziOc34r0p/8yZ84vb29TktLi/Oe97zHOX78eEUd09PTzsMPP+y0tbU5yWTS+ehHP+oUi8UNuJuNg2kMAThf+cpXVJlSqeT8zu/8jpPJZJzW1lbngx/8oDM+Pl5Rz9tvv+08+OCDTjwed7q6upzPfvazzsrKymW+m43Db/7mbzpDQ0NOc3Oz093d7bznPe9R5Os44RjWAp2Aw7G0w4c//GGnv7/faW5udrZs2eJ8+MMfdk6ePKm+v1zjGJ4HHCJEiBAhQmwANpUPOESIECFChLhaEBJwiBAhQoQIsQEICThEiBAhQoTYAIQEHCJEiBAhQmwAQgIOESJEiBAhNgAhAYcIESJEiBAbgJCAQ4QIESJEiA1ASMAhQoQIESLEBiAk4BAhQoQIEWIDEBJwiBAhQoQIsQEICThEiBAhQoTYAPw/PrqZCbjWN/UAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -514,8 +514,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2023-08-30 00:09:09,515] [INFO] (root) - Parsed args: Namespace(argv=[], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-08-30 00:09:09,523] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" + "[2024-04-10 16:18:44,711] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-10 16:18:44,717] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" ] }, { @@ -531,12 +531,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [gxf_executor.cpp:210] Creating context\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n" ] }, @@ -556,10 +556,10 @@ "text": [ "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[info] [gxf_executor.cpp:229] Destroying context\n" + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:230] Destroying context\n" ] } ], @@ -593,7 +593,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -602,7 +602,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1059,87 +1059,87 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 00:09:17,221] [INFO] (root) - Parsed args: Namespace(argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'], input=PosixPath('/tmp/simple_app'), log_level='DEBUG', model=None, output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), workdir=None)\n", - "[2023-08-30 00:09:17,223] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", - "[2023-08-30 00:09:17,223] [INFO] (root) - sample_data_path: /tmp/simple_app\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:210] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1741] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1771] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 16:18:49,954] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", + "[2024-04-10 16:18:50,126] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", + "[2024-04-10 16:18:50,127] [INFO] (root) - sample_data_path: /tmp/simple_app\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "Input from: /tmp/simple_app, whose absolute path: /tmp/simple_app\n", - "[2023-08-30 00:09:17,302] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2023-08-30 00:09:17,302] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2023-08-30 00:09:17,302] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2023-08-30 00:09:17,302] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2023-08-30 00:09:17,302] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2023-08-30 00:09:17,302] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2023-08-30 00:09:17,302] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2023-08-30 00:09:17,302] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2023-08-30 00:09:17,302] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2023-08-30 00:09:17,302] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2023-08-30 00:09:17,308] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", + "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2024-04-10 16:18:50,180] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2024-04-10 16:18:50,180] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2024-04-10 16:18:50,185] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", "Number of times operator median_op whose class is defined in median_operator called: 1\n", "Number of times operator gaussian_op whose class is defined in gaussian_operator called: 1\n", "Data type of output: , max = 0.35821119421406195\n", "Data type of output post conversion: , max = 91\n", - "[2023-08-30 00:09:17,513] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", - "[2023-08-30 00:09:17,514] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", - "[2023-08-30 00:09:17,514] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", - "[2023-08-30 00:09:17,514] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", - "[2023-08-30 00:09:17,515] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", - "[2023-08-30 00:09:17,515] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", - "[2023-08-30 00:09:17,515] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", - "[2023-08-30 00:09:17,516] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", - "[2023-08-30 00:09:17,516] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", - "[2023-08-30 00:09:17,516] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", - "[2023-08-30 00:09:17,516] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", - "[2023-08-30 00:09:17,516] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", - "[2023-08-30 00:09:17,517] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", - "[2023-08-30 00:09:17,517] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", - "[2023-08-30 00:09:17,517] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", - "[2023-08-30 00:09:17,517] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", - "[2023-08-30 00:09:17,517] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", - "[2023-08-30 00:09:17,518] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", - "[2023-08-30 00:09:17,518] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", - "[2023-08-30 00:09:17,519] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", - "[2023-08-30 00:09:17,519] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", - "[2023-08-30 00:09:17,519] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", - "[2023-08-30 00:09:17,519] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", - "[2023-08-30 00:09:17,519] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", - "[2023-08-30 00:09:17,520] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", - "[2023-08-30 00:09:17,520] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", - "[2023-08-30 00:09:17,520] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", - "[2023-08-30 00:09:17,520] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", - "[2023-08-30 00:09:17,522] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", - "[2023-08-30 00:09:17,522] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", - "[2023-08-30 00:09:17,523] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", - "[2023-08-30 00:09:17,523] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", - "[2023-08-30 00:09:17,523] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", - "[2023-08-30 00:09:17,528] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", - "[2023-08-30 00:09:17,528] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", - "[2023-08-30 00:09:17,528] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", - "[2023-08-30 00:09:17,528] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", - "[2023-08-30 00:09:17,528] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", - "[2023-08-30 00:09:17,528] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", - "[2023-08-30 00:09:17,528] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", - "[2023-08-30 00:09:17,529] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", - "[2023-08-30 00:09:17,529] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", - "[2023-08-30 00:09:17,529] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", - "[2023-08-30 00:09:17,529] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", - "[2023-08-30 00:09:17,530] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", - "[2023-08-30 00:09:17,530] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", - "[2023-08-30 00:09:17,531] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", - "[2023-08-30 00:09:17,531] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", + "[2024-04-10 16:18:50,402] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", + "[2024-04-10 16:18:50,403] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", + "[2024-04-10 16:18:50,404] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", + "[2024-04-10 16:18:50,404] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", + "[2024-04-10 16:18:50,404] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", + "[2024-04-10 16:18:50,404] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", + "[2024-04-10 16:18:50,407] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", + "[2024-04-10 16:18:50,408] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", + "[2024-04-10 16:18:50,408] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", + "[2024-04-10 16:18:50,408] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", + "[2024-04-10 16:18:50,408] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", + "[2024-04-10 16:18:50,408] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", + "[2024-04-10 16:18:50,409] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", + "[2024-04-10 16:18:50,409] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", + "[2024-04-10 16:18:50,409] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", + "[2024-04-10 16:18:50,409] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", + "[2024-04-10 16:18:50,409] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", + "[2024-04-10 16:18:50,411] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", + "[2024-04-10 16:18:50,411] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", + "[2024-04-10 16:18:50,411] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", + "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", + "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", + "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", + "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", + "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", + "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", + "[2024-04-10 16:18:50,413] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", + "[2024-04-10 16:18:50,413] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", + "[2024-04-10 16:18:50,414] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", + "[2024-04-10 16:18:50,414] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", + "[2024-04-10 16:18:50,415] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", + "[2024-04-10 16:18:50,415] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", + "[2024-04-10 16:18:50,415] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", + "[2024-04-10 16:18:50,419] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", + "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", + "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", + "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", + "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", + "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", + "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", + "[2024-04-10 16:18:50,421] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", + "[2024-04-10 16:18:50,421] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", + "[2024-04-10 16:18:50,421] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", + "[2024-04-10 16:18:50,421] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", + "[2024-04-10 16:18:50,422] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", + "[2024-04-10 16:18:50,422] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", + "[2024-04-10 16:18:50,423] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", + "[2024-04-10 16:18:50,423] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:229] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:230] Destroying context\n" ] } ], @@ -1156,7 +1156,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -1165,7 +1165,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1263,12 +1263,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 00:09:20,073] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", - "[2023-08-30 00:09:20,073] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2023-08-30 00:09:20,074] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", - "[2023-08-30 00:09:20,075] [INFO] (packager) - Generating app.json...\n", - "[2023-08-30 00:09:20,075] [INFO] (packager) - Generating pkg.json...\n", - "[2023-08-30 00:09:20,076] [DEBUG] (common) - \n", + "[2024-04-10 16:18:52,341] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", + "[2024-04-10 16:18:52,341] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2024-04-10 16:18:52,341] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", + "[2024-04-10 16:18:52,343] [INFO] (packager) - Generating app.json...\n", + "[2024-04-10 16:18:52,343] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-10 16:18:52,348] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1296,14 +1296,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.6.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2023-08-30 00:09:20,076] [DEBUG] (common) - \n", + "[2024-04-10 16:18:52,348] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1316,15 +1316,16 @@ " \"memory\": \"1Gi\",\n", " \"gpuMemory\": \"1Gi\"\n", " },\n", - " \"version\": 1.0\n", + " \"version\": 1.0,\n", + " \"platformConfig\": \"dgpu\"\n", "}\n", "================ End pkg.json ================\n", " \n", - "[2023-08-30 00:09:20,088] [DEBUG] (packager.builder) - \n", + "[2024-04-10 16:18:52,364] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -1340,11 +1341,13 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", "LABEL tag=\"simple_imaging_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Simple Imaging App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"0.6.0\"\n", + "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "\n", "\n", "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", @@ -1369,7 +1372,7 @@ "\n", "\n", "\n", - "RUN groupadd -g $GID $UNAME\n", + "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", "RUN chown -R holoscan /var/holoscan/input \n", @@ -1394,13 +1397,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI org\n", - "RUN pip install holoscan==0.6.0\n", - "\n", + "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", + "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", "\n", "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", "\n", "\n", "\n", @@ -1415,202 +1417,270 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2023-08-30 00:09:20,088] [INFO] (packager.builder) - \n", + "[2024-04-10 16:18:52,365] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - " Build Image: N/A \n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoiscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + " Holoscan SDK Package: pypi.org\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 0.6.0\n", + " SDK Version: 1.0.3\n", " SDK: monai-deploy\n", " Tag: simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2023-08-30 00:09:20,333] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2023-08-30 00:09:20,333] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", - "#1 [internal] load .dockerignore\n", - "#1 transferring context: 33B\n", - "#1 transferring context: 1.79kB done\n", - "#1 DONE 0.1s\n", + "[2024-04-10 16:18:52,650] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-10 16:18:52,650] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", + "\n", + "#1 [internal] load build definition from Dockerfile\n", + "#1 transferring dockerfile: 2.77kB done\n", + "#1 DONE 0.0s\n", "\n", - "#2 [internal] load build definition from Dockerfile\n", - "#2 transferring dockerfile: 2.64kB done\n", - "#2 DONE 0.1s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#2 DONE 0.4s\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#3 DONE 0.4s\n", + "#3 [internal] load .dockerignore\n", + "#3 transferring context: 1.79kB done\n", + "#3 DONE 0.0s\n", "\n", "#4 [internal] load build context\n", "#4 DONE 0.0s\n", "\n", - "#5 importing cache manifest from local:10108727038215150215\n", + "#5 importing cache manifest from local:14270000836931083776\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc 0.0s done\n", + "#6 [ 1/20] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.0s done\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#7 DONE 0.9s\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#7 DONE 0.4s\n", "\n", "#4 [internal] load build context\n", - "#4 transferring context: 163.39kB 0.0s done\n", - "#4 DONE 0.1s\n", + "#4 transferring context: 157.50kB 0.0s done\n", + "#4 DONE 0.0s\n", "\n", - "#8 [ 9/21] WORKDIR /var/holoscan\n", + "#8 [ 5/20] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#8 CACHED\n", "\n", - "#9 [13/21] RUN pip install --upgrade pip\n", + "#9 [11/20] RUN chmod +x /var/holoscan/tools\n", "#9 CACHED\n", "\n", - "#10 [ 4/21] RUN groupadd -g 1000 holoscan\n", + "#10 [ 2/20] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#11 [ 4/20] RUN groupadd -f -g 1000 holoscan\n", "#11 CACHED\n", "\n", - "#12 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#12 [ 7/20] RUN chown -R holoscan /var/holoscan/input\n", "#12 CACHED\n", "\n", - "#13 [15/21] RUN pip install holoscan==0.6.0\n", + "#13 [ 8/20] RUN chown -R holoscan /var/holoscan/output\n", "#13 CACHED\n", "\n", - "#14 [16/21] COPY ./monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "#14 [ 6/20] RUN chown -R holoscan /var/holoscan\n", "#14 CACHED\n", "\n", - "#15 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", + "#15 [ 9/20] WORKDIR /var/holoscan\n", "#15 CACHED\n", "\n", - "#16 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#16 [ 3/20] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#16 CACHED\n", "\n", - "#17 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#17 [12/20] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#17 CACHED\n", "\n", - "#18 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#18 [10/20] COPY ./tools /var/holoscan/tools\n", "#18 CACHED\n", "\n", - "#19 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#19 [13/20] RUN pip install --upgrade pip\n", "#19 CACHED\n", "\n", - "#20 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#20 [14/20] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#20 CACHED\n", "\n", - "#21 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#21 CACHED\n", - "\n", - "#22 [17/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", - "#22 CACHED\n", - "\n", - "#23 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", - "#23 CACHED\n", - "\n", - "#24 [10/21] COPY ./tools /var/holoscan/tools\n", - "#24 CACHED\n", - "\n", - "#25 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", - "#25 CACHED\n", - "\n", - "#26 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", - "#26 CACHED\n", - "\n", - "#27 [21/21] COPY ./app /opt/holoscan/app\n", - "#27 CACHED\n", - "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers done\n", - "#28 exporting manifest sha256:7a414ac96708c13dd2e15e2134807075b96eb40f1e16a0c9caf433f415792140 done\n", - "#28 exporting config sha256:1e2e576a3d23da01c03efa3c866cf22ecbcb75fa628e7edb6f2e0ffa7f6900b3 done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 DONE 0.5s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 40.7s done\n", - "#28 DONE 40.7s\n", - "\n", - "#30 exporting content cache\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d done\n", - "#30 writing layer sha256:0ce020987cfa5cd1654085af3bb40779634eb3d792c4a4d6059036463ae0040d done\n", - "#30 writing layer sha256:0f65089b284381bf795d15b1a186e2a8739ea957106fa526edef0d738e7cda70 done\n", - "#30 writing layer sha256:12a47450a9f9cc5d4edab65d0f600dbbe8b23a1663b0b3bb2c481d40e074b580 done\n", - "#30 writing layer sha256:1de965777e2e37c7fabe00bdbf3d0203ca83ed30a71a5479c3113fe4fc48c4bb done\n", - "#30 writing layer sha256:24b5aa2448e920814dd67d7d3c0169b2cdacb13c4048d74ded3b4317843b13ff done\n", - "#30 writing layer sha256:268c96d4e21881b9b02957ef94da0eeb249c2b670d35bd1099347ae0f15b7a9b done\n", - "#30 writing layer sha256:2d42104dbf0a7cc962b791f6ab4f45a803f8a36d296f996aca180cfb2f3e30d0 done\n", - "#30 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff done\n", - "#30 writing layer sha256:38794be1b5dc99645feabf89b22cd34fb5bdffb5164ad920e7df94f353efe9c0 done\n", - "#30 writing layer sha256:38f963dc57c1e7b68a738fe39ed9f9345df7188111a047e2163a46648d7f1d88 done\n", - "#30 writing layer sha256:3e7e4c9bc2b136814c20c04feb4eea2b2ecf972e20182d88759931130cfb4181 done\n", - "#30 writing layer sha256:3fd77037ad585442cd82d64e337f49a38ddba50432b2a1e563a48401d25c79e6 done\n", - "#30 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0 done\n", - "#30 writing layer sha256:45893188359aca643d5918c9932da995364dc62013dfa40c075298b1baabece3 done\n", - "#30 writing layer sha256:49bc651b19d9e46715c15c41b7c0daa007e8e25f7d9518f04f0f06592799875a done\n", - "#30 writing layer sha256:4c12db5118d8a7d909e4926d69a2192d2b3cd8b110d49c7504a4f701258c1ccc done\n", - "#30 writing layer sha256:4cc43a803109d6e9d1fd35495cef9b1257035f5341a2db54f7a1940815b6cc65 done\n", - "#30 writing layer sha256:4d32b49e2995210e8937f0898327f196d3fcc52486f0be920e8b2d65f150a7ab done\n", - "#30 writing layer sha256:4d6fe980bad9cd7b2c85a478c8033cae3d098a81f7934322fb64658b0c8f9854 done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1\n", - "#30 preparing build cache for export 0.5s done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:5150182f1ff123399b300ca469e00f6c4d82e1b9b72652fb8ee7eab370245236 done\n", - "#30 writing layer sha256:51d9df4b19947155e6a9772cfc44d4bde1be74b8e3b3019c525ccfb894d43ef4 done\n", - "#30 writing layer sha256:593b5820e1f0928ae3939148a0a3b9c58ed117b33fc61ffd184393d2e6c42cb4 done\n", - "#30 writing layer sha256:595c38fa102c61c3dda19bdab70dcd26a0e50465b986d022a84fa69023a05d0f done\n", - "#30 writing layer sha256:59d451175f6950740e26d38c322da0ef67cb59da63181eb32996f752ba8a2f17 done\n", - "#30 writing layer sha256:5ad1f2004580e415b998124ea394e9d4072a35d70968118c779f307204d6bd17 done\n", - "#30 writing layer sha256:5eb65183a3d11174b5abe72026da705ac8258f9056e8e11ac3ca28ed6db3fbc5 done\n", - "#30 writing layer sha256:62598eafddf023e7f22643485f4321cbd51ff7eee743b970db12454fd3c8c675 done\n", - "#30 writing layer sha256:63d7e616a46987136f4cc9eba95db6f6327b4854cfe3c7e20fed6db0c966e380 done\n", - "#30 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f done\n", - "#30 writing layer sha256:698318e5a60e5e0d48c45bf992f205a9532da567fdfe94bd59be2e192975dd6f done\n", - "#30 writing layer sha256:6ddc1d0f91833b36aac1c6f0c8cea005c87d94bab132d46cc06d9b060a81cca3 done\n", - "#30 writing layer sha256:74ac1f5a47c0926bff1e997bb99985a09926f43bd0895cb27ceb5fa9e95f8720 done\n", - "#30 writing layer sha256:7577973918dd30e764733a352a93f418000bc3181163ca451b2307492c1a6ba9 done\n", - "#30 writing layer sha256:839f7088ab6d6cdaab613aab7f1ec078aa2a909559f4592f9dcb34ad4c8a1e42 done\n", - "#30 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2 done\n", - "#30 writing layer sha256:8a7451db9b4b817b3b33904abddb7041810a4ffe8ed4a034307d45d9ae9b3f2a done\n", - "#30 writing layer sha256:916f4054c6e7f10de4fd7c08ffc75fa23ebecca4eceb8183cb1023b33b1696c9 done\n", - "#30 writing layer sha256:9463aa3f56275af97693df69478a2dc1d171f4e763ca6f7b6f370a35e605c154 done\n", - "#30 writing layer sha256:94c4f534ca3de906e1661bb9bccbfa9f9748d875d1d92778697a61e3e762ffde done\n", - "#30 writing layer sha256:955fd173ed884230c2eded4542d10a97384b408537be6bbb7c4ae09ccd6fb2d0 done\n", - "#30 writing layer sha256:9c42a4ee99755f441251e6043b2cbba16e49818a88775e7501ec17e379ce3cfd done\n", - "#30 writing layer sha256:9c63be0a86e3dc4168db3814bf464e40996afda0031649d9faa8ff7568c3154f done\n", - "#30 writing layer sha256:9d989b2672cdb90093e998e0b94c689332d25e7494c1dfff74bb086cc7dab05a done\n", - "#30 writing layer sha256:9e04bda98b05554953459b5edef7b2b14d32f1a00b979a23d04b6eb5c191e66b done\n", - "#30 writing layer sha256:a4a0c690bc7da07e592514dccaa26098a387e8457f69095e922b6d73f7852502 done\n", - "#30 writing layer sha256:a4aafbc094d78a85bef41036173eb816a53bcd3e2564594a32f542facdf2aba6 done\n", - "#30 writing layer sha256:ae36a4d38b76948e39a5957025c984a674d2de18ce162a8caaa536e6f06fccea done\n", - "#30 writing layer sha256:b2fa40114a4a0725c81b327df89c0c3ed5c05ca9aa7f1157394d5096cf5460ce done\n", - "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#30 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6 done\n", - "#30 writing layer sha256:cb506fbdedc817e3d074f609e2edbf9655aacd7784610a1bbac52f2d7be25438 done\n", - "#30 writing layer sha256:d2a6fe65a1f84edb65b63460a75d1cac1aa48b72789006881b0bcfd54cd01ffd done\n", - "#30 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304 done\n", - "#30 writing layer sha256:da250bc94d2969d5caed175341870b944c3b4a74c9af0bae1c1660fac13b7990 done\n", - "#30 writing layer sha256:ddc2ade4f6fe866696cb638c8a102cb644fa842c2ca578392802b3e0e5e3bcb7 done\n", - "#30 writing layer sha256:e2cfd7f6244d6f35befa6bda1caa65f1786cecf3f00ef99d7c9a90715ce6a03c done\n", - "#30 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907 done\n", - "#30 writing layer sha256:eaf45e9f32d1f5a9983945a1a9f8dedbb475bc0f578337610e00b4dedec87c20 done\n", - "#30 writing layer sha256:eb411bef39c013c9853651e68f00965dbd826d829c4e478884a2886976e9c989 done\n", - "#30 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759 done\n", - "#30 writing layer sha256:ef4466d6f927d29d404df9c5af3ef5733c86fa14e008762c90110b963978b1e7 done\n", - "#30 writing layer sha256:f346e3ecdf0bee048fa1e3baf1d3128ff0283b903f03e97524944949bd8882e5 done\n", - "#30 writing layer sha256:f3f9a00a1ce9aadda250aacb3e66a932676badc5d8519c41517fdf7ea14c13ed done\n", - "#30 writing layer sha256:f60a35c82433f4cfc4167240d52d87341204f29196716db10d5d1efceca61ea4 done\n", - "#30 writing layer sha256:fd849d9bd8889edd43ae38e9f21a912430c8526b2c18f3057a3b2cd74eb27b31 done\n", - "#30 writing layer sha256:ff1c6faca98dc5db7491d4ab471109c5932a09be6c6f87c1b375993719052c7c done\n", - "#30 writing config sha256:f998b87c5b1c42b3bd8b024c5ab2c7fb2e501296bef12002c76edd9f0f2904ed done\n", - "#30 writing manifest sha256:b7c4a839b7badff031c8a720d93abcb07ac1c0afe26d6a64a94cae167afa97d8 done\n", - "#30 DONE 0.5s\n", - "[2023-08-30 00:10:04,252] [INFO] (packager) - Build Summary:\n", + "#21 [15/20] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#21 DONE 0.0s\n", + "\n", + "#22 [16/20] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#22 0.662 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.757 Processing /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#22 0.770 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.23.5)\n", + "#22 0.949 Collecting holoscan~=1.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.097 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (4.1 kB)\n", + "#22 1.154 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.158 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.227 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.231 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.296 Collecting pip==23.3.2 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.301 Downloading pip-23.3.2-py3-none-any.whl.metadata (3.5 kB)\n", + "#22 1.308 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (12.2.0)\n", + "#22 1.309 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.2.1)\n", + "#22 1.310 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.60.1)\n", + "#22 1.311 Requirement already satisfied: Jinja2==3.1.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.1.2)\n", + "#22 1.311 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (23.1)\n", + "#22 1.312 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (6.0)\n", + "#22 1.313 Requirement already satisfied: requests==2.28.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.28.2)\n", + "#22 1.314 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (5.9.6)\n", + "#22 1.414 Collecting wheel-axle-runtime<1.0 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.420 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", + "#22 1.444 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.8.2)\n", + "#22 1.447 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.1.3)\n", + "#22 1.460 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.10.14)\n", + "#22 1.461 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.66.1)\n", + "#22 1.461 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.9.0)\n", + "#22 1.462 Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.7.1)\n", + "#22 1.469 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.3.2)\n", + "#22 1.470 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.6)\n", + "#22 1.470 Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.26.18)\n", + "#22 1.471 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2023.11.17)\n", + "#22 1.507 Collecting typing-extensions (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.510 Downloading typing_extensions-4.11.0-py3-none-any.whl.metadata (3.0 kB)\n", + "#22 1.561 Collecting filelock (from wheel-axle-runtime<1.0->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.573 Downloading filelock-3.13.4-py3-none-any.whl.metadata (2.8 kB)\n", + "#22 1.639 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (8.1.7)\n", + "#22 1.683 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.780 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl (33.6 MB)\n", + "#22 6.199 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.6/33.6 MB 10.0 MB/s eta 0:00:00\n", + "#22 6.209 Downloading pip-23.3.2-py3-none-any.whl (2.1 MB)\n", + "#22 6.254 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 53.3 MB/s eta 0:00:00\n", + "#22 6.263 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", + "#22 6.280 Downloading typing_extensions-4.11.0-py3-none-any.whl (34 kB)\n", + "#22 6.296 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", + "#22 6.314 Downloading filelock-3.13.4-py3-none-any.whl (11 kB)\n", + "#22 6.622 Installing collected packages: typing-extensions, pip, filelock, colorama, wheel-axle-runtime, typeguard, holoscan, monai-deploy-app-sdk\n", + "#22 6.643 Attempting uninstall: pip\n", + "#22 6.644 Found existing installation: pip 24.0\n", + "#22 6.709 Uninstalling pip-24.0:\n", + "#22 7.165 Successfully uninstalled pip-24.0\n", + "#22 8.769 Successfully installed colorama-0.4.6 filelock-3.13.4 holoscan-1.0.3 monai-deploy-app-sdk-0.5.1+25.g31e4165.dirty pip-23.3.2 typeguard-4.2.1 typing-extensions-4.11.0 wheel-axle-runtime-0.0.5\n", + "#22 DONE 9.3s\n", + "\n", + "#23 [17/20] COPY ./map/app.json /etc/holoscan/app.json\n", + "#23 DONE 0.1s\n", + "\n", + "#24 [18/20] COPY ./app.config /var/holoscan/app.yaml\n", + "#24 DONE 0.0s\n", + "\n", + "#25 [19/20] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#25 DONE 0.0s\n", + "\n", + "#26 [20/20] COPY ./app /opt/holoscan/app\n", + "#26 DONE 0.0s\n", + "\n", + "#27 exporting to docker image format\n", + "#27 exporting layers\n", + "#27 exporting layers 5.7s done\n", + "#27 exporting manifest sha256:a5d5363b67b4d546c663819215cd3479b9fc8038916c32b1f39a3bd380aa1d27 0.0s done\n", + "#27 exporting config sha256:00503bdec78188be5602490be8caaa715487986151fd9430d0433b996ce4d386 0.0s done\n", + "#27 sending tarball\n", + "#27 ...\n", + "\n", + "#28 importing to docker\n", + "#28 loading layer 1a101d9210ae 32.77kB / 125.57kB\n", + "#28 loading layer c4b083b26ab0 557.06kB / 74.13MB\n", + "#28 loading layer c4b083b26ab0 71.30MB / 74.13MB 2.0s\n", + "#28 loading layer 77455b6ee5d5 492B / 492B\n", + "#28 loading layer 4583ff017de7 313B / 313B\n", + "#28 loading layer 90825b467166 293B / 293B\n", + "#28 loading layer e972a134a523 3.18kB / 3.18kB\n", + "#28 loading layer c4b083b26ab0 71.30MB / 74.13MB 3.1s done\n", + "#28 loading layer 1a101d9210ae 32.77kB / 125.57kB 3.2s done\n", + "#28 loading layer 77455b6ee5d5 492B / 492B 0.6s done\n", + "#28 loading layer 4583ff017de7 313B / 313B 0.6s done\n", + "#28 loading layer 90825b467166 293B / 293B 0.5s done\n", + "#28 loading layer e972a134a523 3.18kB / 3.18kB 0.5s done\n", + "#28 DONE 3.2s\n", + "\n", + "#27 exporting to docker image format\n", + "#27 sending tarball 42.0s done\n", + "#27 DONE 47.7s\n", + "\n", + "#29 exporting cache to client directory\n", + "#29 preparing build cache for export\n", + "#29 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", + "#29 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#29 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", + "#29 writing layer sha256:085504367cb16317416ecf8e22015fdf0c1b46551c023bbf3b8742e23f5aef3c 0.0s done\n", + "#29 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", + "#29 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", + "#29 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", + "#29 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", + "#29 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", + "#29 writing layer sha256:14f2a9cb6c8e39537280f2dff8fe283840b8f18d7bd015c27241025096d54378 done\n", + "#29 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", + "#29 writing layer sha256:1b1470e024ee74ee621e4349aff9bb255df3295a62d164d58d3d86951cec384a done\n", + "#29 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", + "#29 writing layer sha256:20e6a881b3368d232df85df00b9dbb528d02267a7433bab5776edc8d5c3a7b6a\n", + "#29 writing layer sha256:20e6a881b3368d232df85df00b9dbb528d02267a7433bab5776edc8d5c3a7b6a 1.4s done\n", + "#29 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277\n", + "#29 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", + "#29 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", + "#29 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", + "#29 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", + "#29 writing layer sha256:33bbd9145fa428eef0bf280b53d4171773e254445fb47a36de95154c2d66ee99 done\n", + "#29 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", + "#29 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", + "#29 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", + "#29 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", + "#29 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", + "#29 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", + "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#29 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", + "#29 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", + "#29 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#29 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", + "#29 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", + "#29 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", + "#29 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", + "#29 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", + "#29 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", + "#29 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", + "#29 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", + "#29 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#29 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", + "#29 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", + "#29 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", + "#29 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#29 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", + "#29 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#29 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", + "#29 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", + "#29 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#29 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#29 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", + "#29 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", + "#29 writing layer sha256:ad2ce23d07e249bf72ef2c987780659b7b366010d159a616441860e7092ac630 0.0s done\n", + "#29 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", + "#29 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", + "#29 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", + "#29 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", + "#29 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#29 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", + "#29 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", + "#29 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", + "#29 writing layer sha256:de5a53c62648303a3a81f6443a00acfdaceea5d81a55b26a9dfcff656363ec2c 0.0s done\n", + "#29 writing layer sha256:e32a133f2d3ec74bbd17b59c6276eb0bffaff9e0737558a385e2f2280b4ca568 0.0s done\n", + "#29 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", + "#29 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", + "#29 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", + "#29 writing layer sha256:f06b2d19cffd90387b7ccd4e80ace09ab21995cf85c940091e6c80907532bda8\n", + "#29 preparing build cache for export 1.9s done\n", + "#29 writing layer sha256:f06b2d19cffd90387b7ccd4e80ace09ab21995cf85c940091e6c80907532bda8 0.0s done\n", + "#29 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#29 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", + "#29 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", + "#29 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", + "#29 writing config sha256:488336ab32415713da34c305ad87c5f983293c64534687f5fb685eb5b957c49c 0.0s done\n", + "#29 writing cache manifest sha256:69fe5811c303d48c634f794997602fd274d7922354e7aedf0dcd70b373a7a6a8 0.0s done\n", + "#29 DONE 1.9s\n", + "[2024-04-10 16:19:53,891] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1647,7 +1717,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 1e2e576a3d23 45 minutes ago 10.8GB\n" + "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 00503bdec781 51 seconds ago 12.3GB\n" ] } ], @@ -1705,7 +1775,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.6.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -1723,20 +1793,21 @@ " \"memory\": \"1Gi\",\n", " \"gpuMemory\": \"1Gi\"\n", " },\n", - " \"version\": 1\n", + " \"version\": 1,\n", + " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2023-08-30 07:10:10 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2024-04-10 23:19:57 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2023-08-30 07:10:10 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2023-08-30 07:10:10 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2023-08-30 07:10:10 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2024-04-10 23:19:57 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2024-04-10 23:19:57 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2024-04-10 23:19:57 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2023-08-30 07:10:10 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", - "2023-08-30 07:10:10 [INFO] '/opt/holoscan/models' cannot be found.\n", + "2024-04-10 23:19:57 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2024-04-10 23:19:57 [INFO] '/opt/holoscan/models' cannot be found.\n", "\n", - "2023-08-30 07:10:10 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2023-08-30 07:10:10 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2024-04-10 23:19:57 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2024-04-10 23:19:57 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config\n" ] @@ -1770,20 +1841,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 00:10:13,473] [INFO] (runner) - Checking dependencies...\n", - "[2023-08-30 00:10:13,473] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-10 16:19:58,260] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-10 16:19:58,260] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "\n", + "[2024-04-10 16:19:58,260] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2023-08-30 00:10:13,473] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-10 16:19:58,260] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2023-08-30 00:10:13,473] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-10 16:19:58,323] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpkogym2cj/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpkogym2cj/pkg.json\n", + "[2024-04-10 16:19:58,545] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2023-08-30 00:10:13,539] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpzdvb7nut/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpzdvb7nut/pkg.json\n", - "[2023-08-30 00:10:13,748] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-10 16:19:58,545] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2023-08-30 00:10:13,942] [INFO] (common) - Launching container (0fbb33cb469e) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: determined_leavitt\n", + "[2024-04-10 16:19:58,814] [INFO] (common) - Launching container (8e18e862585f) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: unruffled_kalam\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1792,29 +1865,30 @@ " ipc mode: host\n", " shared memory size: 67108864\n", " devices: \n", - "2023-08-30 07:10:14 [INFO] Launching application python3 /opt/holoscan/app ...\n", + " group_add: 44\n", + "2024-04-10 23:19:59 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2023-08-30 07:10:15,097] [INFO] (root) - Parsed args: Namespace(argv=['/opt/holoscan/app'], input=None, log_level=None, model=None, output=None, workdir=None)\n", + "[2024-04-10 23:20:00,177] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2023-08-30 07:10:15,097] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2024-04-10 23:20:00,178] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2023-08-30 07:10:15,098] [INFO] (root) - sample_data_path: /var/holoscan/input\n", + "[2024-04-10 23:20:00,178] [INFO] (root) - sample_data_path: /var/holoscan/input\n", "\n", - "[info] [app_driver.cpp:1025] Launching the driver/health checking service\n", + "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:210] Creating context\n", + "[info] [gxf_executor.cpp:211] Creating context\n", "\n", - "[info] [server.cpp:73] Health checking server listening on 0.0.0.0:8777\n", + "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "\n", "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", "\n", @@ -1822,13 +1896,13 @@ "\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", "\n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", "\n", - "[info] [gxf_executor.cpp:229] Destroying context\n", + "[info] [gxf_executor.cpp:230] Destroying context\n", "\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "\n", @@ -1842,7 +1916,7 @@ "\n", "Data type of output post conversion: , max = 91\n", "\n", - "[2023-08-30 00:10:16,538] [INFO] (common) - Container 'determined_leavitt'(0fbb33cb469e) exited.\n" + "[2024-04-10 16:20:01,327] [INFO] (common) - Container 'unruffled_kalam'(8e18e862585f) exited.\n" ] } ], @@ -1860,7 +1934,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, @@ -1869,7 +1943,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1901,7 +1975,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.12" }, "vscode": { "interpreter": { diff --git a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb index 3c3a1a7c..97757a6e 100644 --- a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb +++ b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb @@ -30,10 +30,10 @@ "Cloning into 'source'...\n", "remote: Enumerating objects: 276, done.\u001b[K\n", "remote: Counting objects: 100% (276/276), done.\u001b[K\n", - "remote: Compressing objects: 100% (223/223), done.\u001b[K\n", - "remote: Total 276 (delta 56), reused 143 (delta 31), pack-reused 0\u001b[K\n", - "Receiving objects: 100% (276/276), 1.41 MiB | 1.83 MiB/s, done.\n", - "Resolving deltas: 100% (56/56), done.\n" + "remote: Compressing objects: 100% (222/222), done.\u001b[K\n", + "remote: Total 276 (delta 55), reused 150 (delta 32), pack-reused 0\u001b[K\n", + "Receiving objects: 100% (276/276), 1.43 MiB | 3.51 MiB/s, done.\n", + "Resolving deltas: 100% (55/55), done.\n" ] } ], @@ -77,34 +77,41 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (0.6.0)\n", - "Requirement already satisfied: numpy>=1.21.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (1.24.4)\n", - "Requirement already satisfied: holoscan~=0.6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (0.6.0)\n", - "Requirement already satisfied: colorama>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (0.4.6)\n", - "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai-deploy-app-sdk) (4.1.5)\n", - "Requirement already satisfied: cloudpickle~=2.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (2.2.1)\n", - "Requirement already satisfied: python-on-whales~=0.60 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (0.67.0)\n", - "Requirement already satisfied: Jinja2~=3.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (3.1.2)\n", - "Requirement already satisfied: packaging~=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (23.2)\n", - "Requirement already satisfied: pyyaml~=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (6.0.1)\n", - "Requirement already satisfied: requests~=2.28 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (2.31.0)\n", - "Requirement already satisfied: pip>=20.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (23.3.1)\n", - "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk) (0.0.5)\n", - "Requirement already satisfied: importlib-metadata>=3.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (6.8.0)\n", - "Requirement already satisfied: typing-extensions>=4.7.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.8.0)\n", - "Requirement already satisfied: zipp>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from importlib-metadata>=3.6->typeguard>=3.0.0->monai-deploy-app-sdk) (3.17.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from Jinja2~=3.1->holoscan~=0.6.0->monai-deploy-app-sdk) (2.1.3)\n", - "Requirement already satisfied: pydantic!=2.0.*,<3,>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (2.5.1)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (4.66.1)\n", - "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (0.9.0)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk) (3.4)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk) (2.1.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk) (2023.7.22)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from wheel-axle-runtime<1.0->holoscan~=0.6.0->monai-deploy-app-sdk) (3.13.1)\n", - "Requirement already satisfied: annotated-types>=0.4.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from pydantic!=2.0.*,<3,>=1.9->python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (0.6.0)\n", - "Requirement already satisfied: pydantic-core==2.14.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from pydantic!=2.0.*,<3,>=1.9->python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (2.14.3)\n", - "Requirement already satisfied: click<9.0.0,>=7.1.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from typer>=0.4.1->python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk) (8.1.7)\n" + "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (0.5.1+12.gb2f5a07.dirty)\n", + "Requirement already satisfied: numpy>=1.21.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (1.26.4)\n", + "Requirement already satisfied: holoscan~=1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (1.0.3)\n", + "Requirement already satisfied: colorama>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (0.4.6)\n", + "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.2.1)\n", + "Requirement already satisfied: pip==23.3.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (23.3.2)\n", + "Requirement already satisfied: cupy-cuda12x==12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (12.2.0)\n", + "Requirement already satisfied: cloudpickle==2.2.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (2.2.1)\n", + "Requirement already satisfied: python-on-whales==0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (0.60.1)\n", + "Requirement already satisfied: Jinja2==3.1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (3.1.2)\n", + "Requirement already satisfied: packaging==23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (23.1)\n", + "Requirement already satisfied: pyyaml==6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (6.0)\n", + "Requirement already satisfied: requests==2.28.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (2.28.2)\n", + "Requirement already satisfied: psutil==5.9.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (5.9.6)\n", + "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (0.0.5)\n", + "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x==12.2->holoscan~=1.0->monai-deploy-app-sdk) (0.8.2)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2==3.1.2->holoscan~=1.0->monai-deploy-app-sdk) (2.1.5)\n", + "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (1.10.15)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (4.66.2)\n", + "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (0.12.2)\n", + "Requirement already satisfied: typing-extensions in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (4.11.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk) (3.6)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk) (2024.2.2)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=1.0->monai-deploy-app-sdk) (3.13.3)\n", + "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (8.1.7)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (1.5.4)\n", + "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (13.7.1)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (2.17.2)\n", + "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (0.1.2)\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" ] } ], @@ -129,31 +136,36 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: monai in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (1.3.0)\n", - "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (10.0.1)\n", - "Requirement already satisfied: numpy>=1.20 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai) (1.24.4)\n", - "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from monai) (2.1.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (3.13.1)\n", - "Requirement already satisfied: typing-extensions in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (4.8.0)\n", - "Requirement already satisfied: sympy in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (1.12)\n", - "Requirement already satisfied: networkx in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (3.1)\n", - "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (3.1.2)\n", - "Requirement already satisfied: fsspec in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (2023.10.0)\n", - "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.105)\n", - "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.105)\n", - "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.105)\n", - "Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (8.9.2.26)\n", - "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.3.1)\n", - "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.0.2.54)\n", - "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (10.3.2.106)\n", - "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (11.4.5.107)\n", - "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.0.106)\n", - "Requirement already satisfied: nvidia-nccl-cu12==2.18.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (2.18.1)\n", - "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (12.1.105)\n", - "Requirement already satisfied: triton==2.1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from torch>=1.9->monai) (2.1.0)\n", - "Requirement already satisfied: nvidia-nvjitlink-cu12 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.9->monai) (12.3.101)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from jinja2->torch>=1.9->monai) (2.1.3)\n", - "Requirement already satisfied: mpmath>=0.19 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from sympy->torch>=1.9->monai) (1.3.0)\n" + "Requirement already satisfied: monai in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (1.3.0)\n", + "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (10.3.0)\n", + "Requirement already satisfied: numpy>=1.20 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (1.26.4)\n", + "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.0.1)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.13.3)\n", + "Requirement already satisfied: typing-extensions in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.11.0)\n", + "Requirement already satisfied: sympy in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (1.12)\n", + "Requirement already satisfied: networkx in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1)\n", + "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.2)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu11==11.7.99 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.99)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu11==11.7.99 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.99)\n", + "Requirement already satisfied: nvidia-cuda-cupti-cu11==11.7.101 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.101)\n", + "Requirement already satisfied: nvidia-cudnn-cu11==8.5.0.96 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (8.5.0.96)\n", + "Requirement already satisfied: nvidia-cublas-cu11==11.10.3.66 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.10.3.66)\n", + "Requirement already satisfied: nvidia-cufft-cu11==10.9.0.58 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (10.9.0.58)\n", + "Requirement already satisfied: nvidia-curand-cu11==10.2.10.91 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (10.2.10.91)\n", + "Requirement already satisfied: nvidia-cusolver-cu11==11.4.0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.4.0.1)\n", + "Requirement already satisfied: nvidia-cusparse-cu11==11.7.4.91 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.4.91)\n", + "Requirement already satisfied: nvidia-nccl-cu11==2.14.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2.14.3)\n", + "Requirement already satisfied: nvidia-nvtx-cu11==11.7.91 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.91)\n", + "Requirement already satisfied: triton==2.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2.0.0)\n", + "Requirement already satisfied: setuptools in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.9->monai) (69.2.0)\n", + "Requirement already satisfied: wheel in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.9->monai) (0.43.0)\n", + "Requirement already satisfied: cmake in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from triton==2.0.0->torch>=1.9->monai) (3.29.0.1)\n", + "Requirement already satisfied: lit in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from triton==2.0.0->torch>=1.9->monai) (18.1.2)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from jinja2->torch>=1.9->monai) (2.1.5)\n", + "Requirement already satisfied: mpmath>=0.19 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from sympy->torch>=1.9->monai) (1.3.0)\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" ] } ], @@ -180,23 +192,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (4.7.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (3.13.1)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (2.31.0)\n", - "Requirement already satisfied: six in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (1.16.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.66.1)\n", - "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.12.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from beautifulsoup4->gdown) (2.5)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.4)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2.1.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2023.7.22)\n", - "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", + "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.3)\n", + "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.28.2)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", + "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.6)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", + "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "Downloading...\n", - "From (uriginal): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E\n", - "From (redirected): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E&confirm=t&uuid=d9974e09-6ccd-4416-9f41-2c3702a3bea7\n", + "From (original): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E\n", + "From (redirected): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E&confirm=t&uuid=8dfa9939-2267-4d12-ba17-3e35b1626357\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_classifier_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 28.6M/28.6M [00:00<00:00, 64.3MB/s]\n" + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 28.6M/28.6M [00:00<00:00, 62.3MB/s]\n" ] } ], @@ -291,14 +305,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-11-15 18:37:06,027] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", - "[2023-11-15 18:37:06,027] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2023-11-15 18:37:06,027] [INFO] (packager) - Scanning for models in {models_path}...\n", - "[2023-11-15 18:37:06,027] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2023-11-15 18:37:06,027] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", - "[2023-11-15 18:37:06,030] [INFO] (packager) - Generating app.json...\n", - "[2023-11-15 18:37:06,030] [INFO] (packager) - Generating pkg.json...\n", - "[2023-11-15 18:37:06,033] [DEBUG] (common) - \n", + "[2024-04-10 16:23:51,962] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", + "[2024-04-10 16:23:51,962] [INFO] (packager.parameters) - Detected application type: Python File\n", + "[2024-04-10 16:23:51,962] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2024-04-10 16:23:51,962] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2024-04-10 16:23:51,962] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", + "[2024-04-10 16:23:51,964] [INFO] (packager) - Generating app.json...\n", + "[2024-04-10 16:23:51,964] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-10 16:23:51,969] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -326,21 +340,21 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.6.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2023-11-15 18:37:06,033] [DEBUG] (common) - \n", + "[2024-04-10 16:23:51,969] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", " \"applicationRoot\": \"/opt/holoscan/app\",\n", " \"modelRoot\": \"/opt/holoscan/models\",\n", " \"models\": {\n", - " \"model\": \"/opt/holoscan/models\"\n", + " \"model\": \"/opt/holoscan/models/model\"\n", " },\n", " \"resources\": {\n", " \"cpu\": 1,\n", @@ -348,15 +362,16 @@ " \"memory\": \"1Gi\",\n", " \"gpuMemory\": \"1Gi\"\n", " },\n", - " \"version\": 1.0\n", + " \"version\": 1.0,\n", + " \"platformConfig\": \"dgpu\"\n", "}\n", "================ End pkg.json ================\n", " \n", - "[2023-11-15 18:37:06,061] [DEBUG] (packager.builder) - \n", + "[2024-04-10 16:23:52,003] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -372,11 +387,13 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", "LABEL tag=\"mednist_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"0.6.0\"\n", + "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "\n", "\n", "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", @@ -401,7 +418,7 @@ "\n", "\n", "\n", - "RUN groupadd -g $GID $UNAME\n", + "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", "RUN chown -R holoscan /var/holoscan/input \n", @@ -426,12 +443,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI org\n", - "RUN pip install holoscan==0.6.0\n", - "\n", + "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", + "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==0.6.0\n", + "# Copy user-specified MONAI Deploy SDK file\n", + "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", "\n", "\n", "\n", @@ -447,203 +464,276 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2023-11-15 18:37:06,061] [INFO] (packager.builder) - \n", + "[2024-04-10 16:23:52,003] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - " Build Image: N/A \n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoiscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: pypi.org\n", + " Holoscan SDK Package: pypi.org\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 0.6.0\n", + " SDK Version: 1.0.3\n", " SDK: monai-deploy\n", " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2023-11-15 18:37:06,311] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2023-11-15 18:37:06,312] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2024-04-10 16:23:52,265] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-10 16:23:52,265] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.49kB done\n", + "#1 transferring dockerfile: 2.81kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load .dockerignore\n", - "#2 transferring context: 1.79kB done\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", "#2 DONE 0.1s\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#3 DONE 0.4s\n", + "#3 [internal] load .dockerignore\n", + "#3 transferring context: 1.79kB done\n", + "#3 DONE 0.1s\n", "\n", - "#4 [internal] load build context\n", - "#4 DONE 0.0s\n", + "#4 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#4 ...\n", "\n", - "#5 importing cache manifest from local:12435489437730595250\n", + "#5 [internal] load build context\n", "#5 DONE 0.0s\n", "\n", - "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc 0.1s done\n", - "#6 DONE 0.1s\n", + "#6 importing cache manifest from local:3023656059275295125\n", + "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#7 DONE 0.7s\n", + "#7 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", + "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.1s done\n", + "#7 DONE 0.1s\n", "\n", - "#4 [internal] load build context\n", - "#4 transferring context: 28.60MB 0.3s done\n", - "#4 DONE 0.3s\n", + "#4 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#4 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#4 DONE 0.7s\n", "\n", - "#8 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#5 [internal] load build context\n", + "#5 transferring context: 28.73MB 0.2s done\n", + "#5 DONE 0.2s\n", + "\n", + "#8 [ 9/21] WORKDIR /var/holoscan\n", "#8 CACHED\n", "\n", - "#9 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#9 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#9 CACHED\n", "\n", - "#10 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#10 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#10 CACHED\n", "\n", - "#11 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#11 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#11 CACHED\n", "\n", - "#12 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#12 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#12 CACHED\n", "\n", - "#13 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#13 [11/21] RUN chmod +x /var/holoscan/tools\n", "#13 CACHED\n", "\n", - "#14 [ 9/21] WORKDIR /var/holoscan\n", + "#14 [13/21] RUN pip install --upgrade pip\n", "#14 CACHED\n", "\n", - "#15 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", + "#15 [10/21] COPY ./tools /var/holoscan/tools\n", "#15 CACHED\n", "\n", - "#16 [10/21] COPY ./tools /var/holoscan/tools\n", + "#16 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#16 CACHED\n", "\n", - "#17 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#17 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", "#17 CACHED\n", "\n", - "#18 [17/21] COPY ./models /opt/holoscan/models\n", + "#18 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#18 CACHED\n", "\n", - "#19 [16/21] RUN pip install monai-deploy-app-sdk==0.6.0\n", + "#19 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#19 CACHED\n", "\n", - "#20 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#20 CACHED\n", "\n", - "#21 [13/21] RUN pip install --upgrade pip\n", - "#21 CACHED\n", - "\n", - "#22 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#22 CACHED\n", - "\n", - "#23 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", - "#23 CACHED\n", - "\n", - "#24 [ 4/21] RUN groupadd -g 1000 holoscan\n", - "#24 CACHED\n", - "\n", - "#25 [15/21] RUN pip install holoscan==0.6.0\n", - "#25 CACHED\n", - "\n", - "#26 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", - "#26 CACHED\n", + "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#21 DONE 0.3s\n", + "\n", + "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#22 0.682 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.793 Processing /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#22 0.803 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.23.5)\n", + "#22 0.906 Collecting holoscan~=1.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 0.971 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (4.1 kB)\n", + "#22 1.044 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.050 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.135 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.139 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.248 Collecting pip==23.3.2 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.254 Downloading pip-23.3.2-py3-none-any.whl.metadata (3.5 kB)\n", + "#22 1.269 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (12.2.0)\n", + "#22 1.269 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.2.1)\n", + "#22 1.271 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.60.1)\n", + "#22 1.272 Requirement already satisfied: Jinja2==3.1.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.1.2)\n", + "#22 1.272 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (23.1)\n", + "#22 1.273 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (6.0)\n", + "#22 1.274 Requirement already satisfied: requests==2.28.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.28.2)\n", + "#22 1.275 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (5.9.6)\n", + "#22 1.308 Collecting wheel-axle-runtime<1.0 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.313 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", + "#22 1.347 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.8.2)\n", + "#22 1.351 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.1.3)\n", + "#22 1.366 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.10.14)\n", + "#22 1.367 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.66.1)\n", + "#22 1.367 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.9.0)\n", + "#22 1.369 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.10.0)\n", + "#22 1.380 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.3.2)\n", + "#22 1.381 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.6)\n", + "#22 1.382 Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.26.18)\n", + "#22 1.383 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2023.11.17)\n", + "#22 1.401 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.13.3)\n", + "#22 1.443 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (8.1.7)\n", + "#22 1.490 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.516 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl (33.6 MB)\n", + "#22 1.982 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.6/33.6 MB 43.1 MB/s eta 0:00:00\n", + "#22 1.989 Downloading pip-23.3.2-py3-none-any.whl (2.1 MB)\n", + "#22 2.032 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 53.0 MB/s eta 0:00:00\n", + "#22 2.039 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", + "#22 2.064 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", + "#22 2.417 Installing collected packages: wheel-axle-runtime, typeguard, pip, colorama, holoscan, monai-deploy-app-sdk\n", + "#22 2.492 Attempting uninstall: pip\n", + "#22 2.493 Found existing installation: pip 24.0\n", + "#22 2.547 Uninstalling pip-24.0:\n", + "#22 2.977 Successfully uninstalled pip-24.0\n", + "#22 4.656 Successfully installed colorama-0.4.6 holoscan-1.0.3 monai-deploy-app-sdk-0.5.1+25.g31e4165.dirty pip-23.3.2 typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", + "#22 DONE 5.2s\n", + "\n", + "#23 [17/21] COPY ./models /opt/holoscan/models\n", + "#23 DONE 0.2s\n", + "\n", + "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", + "#24 DONE 0.1s\n", + "\n", + "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", + "#25 DONE 0.1s\n", + "\n", + "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 DONE 0.1s\n", "\n", "#27 [21/21] COPY ./app /opt/holoscan/app\n", - "#27 CACHED\n", + "#27 DONE 0.1s\n", "\n", "#28 exporting to docker image format\n", - "#28 exporting layers done\n", - "#28 exporting manifest sha256:19203b8c5bb9a13da3c03963a62723b9f330ff4b2d37776a26d1316d03da1b0b done\n", - "#28 exporting config sha256:f980243cd5d80a64490eda352560b92681a08191a30d0a585cdbbf0c409e8abc done\n", + "#28 exporting layers\n", + "#28 exporting layers 6.0s done\n", + "#28 exporting manifest sha256:02c9015ef90dc072d10044946ce69d29e7dbd7e748cd98b56713e2a32f1823bc 0.0s done\n", + "#28 exporting config sha256:26b7cd41adaba5d7700f104387d1c2d4b66829292de9fe656dff6f30ba20e56d 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 DONE 0.9s\n", + "#29 loading layer 3c784a11874c 32.77kB / 125.57kB\n", + "#29 loading layer 71abc17edeb9 557.06kB / 73.96MB\n", + "#29 loading layer 71abc17edeb9 73.53MB / 73.96MB 2.0s\n", + "#29 loading layer 8eee96e0be35 262.14kB / 25.59MB\n", + "#29 loading layer 81dfa72eaf50 512B / 512B\n", + "#29 loading layer c726a53666d2 697B / 697B\n", + "#29 loading layer 0266dfb048c0 297B / 297B\n", + "#29 loading layer d4a6edcf43fc 4.17kB / 4.17kB\n", + "#29 loading layer 3c784a11874c 32.77kB / 125.57kB 5.0s done\n", + "#29 loading layer 71abc17edeb9 73.53MB / 73.96MB 4.9s done\n", + "#29 loading layer 8eee96e0be35 262.14kB / 25.59MB 2.8s done\n", + "#29 loading layer 81dfa72eaf50 512B / 512B 2.2s done\n", + "#29 loading layer c726a53666d2 697B / 697B 1.9s done\n", + "#29 loading layer 0266dfb048c0 297B / 297B 1.5s done\n", + "#29 loading layer d4a6edcf43fc 4.17kB / 4.17kB 1.1s done\n", + "#29 DONE 5.0s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 39.8s done\n", - "#28 DONE 39.8s\n", + "#28 sending tarball 65.8s done\n", + "#28 DONE 72.0s\n", "\n", - "#30 exporting content cache\n", + "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d done\n", - "#30 writing layer sha256:0ce020987cfa5cd1654085af3bb40779634eb3d792c4a4d6059036463ae0040d done\n", - "#30 writing layer sha256:0f65089b284381bf795d15b1a186e2a8739ea957106fa526edef0d738e7cda70 done\n", - "#30 writing layer sha256:12a47450a9f9cc5d4edab65d0f600dbbe8b23a1663b0b3bb2c481d40e074b580 done\n", - "#30 writing layer sha256:19c20b65326c1511f8ab02f4a41453f8c0b6d9f2bdea8bb25038b628cef67ab9 done\n", - "#30 writing layer sha256:1de965777e2e37c7fabe00bdbf3d0203ca83ed30a71a5479c3113fe4fc48c4bb done\n", - "#30 writing layer sha256:22b384cd1e678fc56dc95c82f42e7a540d055418d0f1eef8d908c88305e23a88 done\n", - "#30 writing layer sha256:2369548ddf79fa9fd07c5f1c4b226da97c9cc7991c4b3bd57a97796c31ff0648 done\n", - "#30 writing layer sha256:24b5aa2448e920814dd67d7d3c0169b2cdacb13c4048d74ded3b4317843b13ff done\n", - "#30 writing layer sha256:2d42104dbf0a7cc962b791f6ab4f45a803f8a36d296f996aca180cfb2f3e30d0 done\n", - "#30 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff done\n", - "#30 writing layer sha256:361eb07c24550c859aa0f62bebfcaabde6373eeee0c16ae66e7c7053bf1f1e42 done\n", - "#30 writing layer sha256:38794be1b5dc99645feabf89b22cd34fb5bdffb5164ad920e7df94f353efe9c0 done\n", - "#30 writing layer sha256:38f963dc57c1e7b68a738fe39ed9f9345df7188111a047e2163a46648d7f1d88 done\n", - "#30 writing layer sha256:3e7e4c9bc2b136814c20c04feb4eea2b2ecf972e20182d88759931130cfb4181 done\n", - "#30 writing layer sha256:3fd77037ad585442cd82d64e337f49a38ddba50432b2a1e563a48401d25c79e6 done\n", - "#30 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0\n", - "#30 preparing build cache for export 0.6s done\n", - "#30 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0 done\n", - "#30 writing layer sha256:45893188359aca643d5918c9932da995364dc62013dfa40c075298b1baabece3 done\n", - "#30 writing layer sha256:49bc651b19d9e46715c15c41b7c0daa007e8e25f7d9518f04f0f06592799875a done\n", - "#30 writing layer sha256:4c12db5118d8a7d909e4926d69a2192d2b3cd8b110d49c7504a4f701258c1ccc done\n", - "#30 writing layer sha256:4cc43a803109d6e9d1fd35495cef9b1257035f5341a2db54f7a1940815b6cc65 done\n", - "#30 writing layer sha256:4d32b49e2995210e8937f0898327f196d3fcc52486f0be920e8b2d65f150a7ab done\n", - "#30 writing layer sha256:4d6fe980bad9cd7b2c85a478c8033cae3d098a81f7934322fb64658b0c8f9854 done\n", - "#30 writing layer sha256:4e78baa7922aa440fcba2b268af798b094fdb64e4450a916c15027abc06a1123 done\n", + "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", + "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", + "#30 writing layer sha256:03a29f2f0e10f79ee63a9017483d2f5c668ef6c02e479f306e7ec76203d450a9 0.0s done\n", + "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", + "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", + "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", + "#30 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", + "#30 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", + "#30 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", + "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", + "#30 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", + "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", + "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", + "#30 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", + "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", + "#30 writing layer sha256:3f26964a76655c86158d285c57a280ad1e8f9c246a879db10773dc0218685fbc\n", + "#30 writing layer sha256:3f26964a76655c86158d285c57a280ad1e8f9c246a879db10773dc0218685fbc 0.5s done\n", + "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a\n", + "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", + "#30 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", + "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", + "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", + "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:5150182f1ff123399b300ca469e00f6c4d82e1b9b72652fb8ee7eab370245236 done\n", - "#30 writing layer sha256:595c38fa102c61c3dda19bdab70dcd26a0e50465b986d022a84fa69023a05d0f done\n", - "#30 writing layer sha256:59d451175f6950740e26d38c322da0ef67cb59da63181eb32996f752ba8a2f17 done\n", - "#30 writing layer sha256:5ad1f2004580e415b998124ea394e9d4072a35d70968118c779f307204d6bd17 done\n", - "#30 writing layer sha256:62598eafddf023e7f22643485f4321cbd51ff7eee743b970db12454fd3c8c675 done\n", - "#30 writing layer sha256:63d7e616a46987136f4cc9eba95db6f6327b4854cfe3c7e20fed6db0c966e380 done\n", - "#30 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f done\n", - "#30 writing layer sha256:698318e5a60e5e0d48c45bf992f205a9532da567fdfe94bd59be2e192975dd6f done\n", - "#30 writing layer sha256:6ddc1d0f91833b36aac1c6f0c8cea005c87d94bab132d46cc06d9b060a81cca3 done\n", - "#30 writing layer sha256:74ac1f5a47c0926bff1e997bb99985a09926f43bd0895cb27ceb5fa9e95f8720 done\n", - "#30 writing layer sha256:7577973918dd30e764733a352a93f418000bc3181163ca451b2307492c1a6ba9 done\n", - "#30 writing layer sha256:81ab55ca8bce88347661e1c1e6d58975b998017ad2e91a1040bd3f5017741d2b done\n", - "#30 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2 done\n", - "#30 writing layer sha256:8a7451db9b4b817b3b33904abddb7041810a4ffe8ed4a034307d45d9ae9b3f2a done\n", - "#30 writing layer sha256:8ac1aede1873b9cad7d72492d19240df0510086e92ac4243bc5119ec85678931 done\n", - "#30 writing layer sha256:916f4054c6e7f10de4fd7c08ffc75fa23ebecca4eceb8183cb1023b33b1696c9 done\n", - "#30 writing layer sha256:9463aa3f56275af97693df69478a2dc1d171f4e763ca6f7b6f370a35e605c154 done\n", - "#30 writing layer sha256:955fd173ed884230c2eded4542d10a97384b408537be6bbb7c4ae09ccd6fb2d0 done\n", - "#30 writing layer sha256:9c42a4ee99755f441251e6043b2cbba16e49818a88775e7501ec17e379ce3cfd done\n", - "#30 writing layer sha256:9c63be0a86e3dc4168db3814bf464e40996afda0031649d9faa8ff7568c3154f done\n", - "#30 writing layer sha256:9e04bda98b05554953459b5edef7b2b14d32f1a00b979a23d04b6eb5c191e66b done\n", - "#30 writing layer sha256:a4a0c690bc7da07e592514dccaa26098a387e8457f69095e922b6d73f7852502 done\n", - "#30 writing layer sha256:a4aafbc094d78a85bef41036173eb816a53bcd3e2564594a32f542facdf2aba6 done\n", - "#30 writing layer sha256:ae36a4d38b76948e39a5957025c984a674d2de18ce162a8caaa536e6f06fccea done\n", - "#30 writing layer sha256:b092e71fced852d79e047f907a83ab32a129dd40cd0e9879dd507367a505dbd6 done\n", - "#30 writing layer sha256:b2fa40114a4a0725c81b327df89c0c3ed5c05ca9aa7f1157394d5096cf5460ce done\n", - "#30 writing layer sha256:b41f1b7d06dc0a3cea605edc5a074d982aa2f1b75ac808229b9dcb8d6744e17a done\n", + "#30 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", + "#30 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", + "#30 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", + "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", + "#30 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", + "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", + "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", + "#30 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", + "#30 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", + "#30 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", + "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#30 writing layer sha256:76e786eeb0fbc65fd083d100043e47d0c35ba615444907aa299e635d624bd426 0.0s done\n", + "#30 writing layer sha256:77e0d1bb7a2b6458b8bd911429c58386169319dfb6ae2e9ae05f57571522d815 0.0s done\n", + "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", + "#30 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", + "#30 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", + "#30 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", + "#30 writing layer sha256:82b1d37999127ab8412181eae2a5ff1c1a1854f9a76064512942ba9bde82afaa done\n", + "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", + "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", + "#30 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", + "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602\n", + "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", + "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#30 writing layer sha256:c84aee89fb491faea0b4112d4bb2cddb4a0b8fd0fb32e886aed7902a1626f4d2 done\n", - "#30 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6 done\n", - "#30 writing layer sha256:cb506fbdedc817e3d074f609e2edbf9655aacd7784610a1bbac52f2d7be25438 done\n", - "#30 writing layer sha256:d2a6fe65a1f84edb65b63460a75d1cac1aa48b72789006881b0bcfd54cd01ffd done\n", - "#30 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304 done\n", - "#30 writing layer sha256:ddc2ade4f6fe866696cb638c8a102cb644fa842c2ca578392802b3e0e5e3bcb7 done\n", - "#30 writing layer sha256:e2cfd7f6244d6f35befa6bda1caa65f1786cecf3f00ef99d7c9a90715ce6a03c done\n", - "#30 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907 done\n", - "#30 writing layer sha256:eaf45e9f32d1f5a9983945a1a9f8dedbb475bc0f578337610e00b4dedec87c20 done\n", - "#30 writing layer sha256:eb411bef39c013c9853651e68f00965dbd826d829c4e478884a2886976e9c989 done\n", - "#30 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759 done\n", - "#30 writing layer sha256:ef4466d6f927d29d404df9c5af3ef5733c86fa14e008762c90110b963978b1e7 done\n", - "#30 writing layer sha256:f346e3ecdf0bee048fa1e3baf1d3128ff0283b903f03e97524944949bd8882e5 done\n", - "#30 writing layer sha256:f3f9a00a1ce9aadda250aacb3e66a932676badc5d8519c41517fdf7ea14c13ed done\n", - "#30 writing layer sha256:fd849d9bd8889edd43ae38e9f21a912430c8526b2c18f3057a3b2cd74eb27b31 done\n", - "#30 writing config sha256:2efdd8bd5fee272f11add678820bb36fd73b0d8b589200720e3a2b1f2014c239 done\n", - "#30 writing manifest sha256:3e52de4375cea72779be5447ac509152ce31588970ac87f44cfce9a7de19df7e done\n", - "#30 DONE 0.6s\n", - "[2023-11-15 18:37:49,607] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", + "#30 writing layer sha256:bafd0706f1969063f2baea22f5df92629ba228c67819e957f88b20582aaa4801\n", + "#30 writing layer sha256:bafd0706f1969063f2baea22f5df92629ba228c67819e957f88b20582aaa4801 1.5s done\n", + "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31\n", + "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", + "#30 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#30 writing layer sha256:c2a80b194dd0ff43e8e6ea838efe3b6f24371797b498b6d2d7ac53fb9d4aee8b done\n", + "#30 writing layer sha256:c6e0f549352b7817454c6c4540b863766f732e9216158288017cfcb19cd91bef 0.0s done\n", + "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", + "#30 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", + "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", + "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", + "#30 writing layer sha256:e4e14fa6c90d19eb19aad3f52f9cd59a25c44007ba201741ac7cbff722837883 done\n", + "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", + "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", + "#30 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", + "#30 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", + "#30 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", + "#30 writing layer sha256:fc1f60b32aa696c9cfeacbee0e2c0aeefd8331e0a38fcd082b60ae33b67e34e4 0.0s done\n", + "#30 writing config sha256:b2150835373b386791df4e482a3f33750ce9ec1d81393ee061a6d9c06dc8d52a 0.0s done\n", + "#30 preparing build cache for export 2.8s done\n", + "#30 writing cache manifest sha256:ed8fc8e6d14dafb96aed8205ce985667c75f419d2bf7ce449e533b415b01b699 0.0s done\n", + "#30 DONE 2.8s\n", + "[2024-04-10 16:25:16,137] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -674,7 +764,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 f980243cd5d8 About an hour ago 15.4GB\n" + "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 26b7cd41adab About a minute ago 17.5GB\n" ] } ], @@ -732,7 +822,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.6.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -744,7 +834,7 @@ " \"applicationRoot\": \"/opt/holoscan/app\",\n", " \"modelRoot\": \"/opt/holoscan/models\",\n", " \"models\": {\n", - " \"model\": \"/opt/holoscan/models\"\n", + " \"model\": \"/opt/holoscan/models/model\"\n", " },\n", " \"resources\": {\n", " \"cpu\": 1,\n", @@ -752,19 +842,20 @@ " \"memory\": \"1Gi\",\n", " \"gpuMemory\": \"1Gi\"\n", " },\n", - " \"version\": 1\n", + " \"version\": 1,\n", + " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2023-11-16 02:37:55 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2024-04-10 23:25:19 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2023-11-16 02:37:55 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2023-11-16 02:37:55 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2023-11-16 02:37:55 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2024-04-10 23:25:19 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2024-04-10 23:25:19 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2024-04-10 23:25:19 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2023-11-16 02:37:55 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2024-04-10 23:25:19 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2023-11-16 02:37:55 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2023-11-16 02:37:55 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2024-04-10 23:25:19 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2024-04-10 23:25:19 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -796,20 +887,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-11-15 18:37:58,606] [INFO] (runner) - Checking dependencies...\n", - "[2023-11-15 18:37:58,606] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-10 16:25:20,790] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-10 16:25:20,790] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "\n", + "[2024-04-10 16:25:20,791] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2023-11-15 18:37:58,606] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-10 16:25:20,791] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2023-11-15 18:37:58,606] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-10 16:25:20,871] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpryp430i1/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpryp430i1/pkg.json\n", + "[2024-04-10 16:25:21,124] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2023-11-15 18:37:58,679] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmp89s5qkz8/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmp89s5qkz8/pkg.json\n", - "[2023-11-15 18:37:58,873] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-10 16:25:21,124] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2023-11-15 18:37:59,068] [INFO] (common) - Launching container (e8950f0a463a) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: priceless_ptolemy\n", + "[2024-04-10 16:25:21,410] [INFO] (common) - Launching container (7cf522bd06c4) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: dazzling_hugle\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -818,61 +911,54 @@ " ipc mode: host\n", " shared memory size: 67108864\n", " devices: \n", - "2023-11-16 02:37:59 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + " group_add: 44\n", + "2024-04-10 23:25:22 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", "\n", - "[2023-11-16 02:38:01,849] [INFO] (root) - Parsed args: Namespace(argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'], input=None, log_level=None, model=None, output=None, workdir=None)\n", + "[2024-04-10 23:25:31,408] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'])\n", "\n", - "[2023-11-16 02:38:01,857] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2024-04-10 23:25:31,419] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[info] [app_driver.cpp:1025] Launching the driver/health checking service\n", + "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:210] Creating context\n", + "[info] [gxf_executor.cpp:211] Creating context\n", "\n", - "[info] [server.cpp:73] Health checking server listening on 0.0.0.0:8777\n", + "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "\n", "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:111: FutureWarning: : Class `AddChannel` has been deprecated since version 0.8. It will be removed in version 1.3. please use MetaTensor data type and monai.transforms.EnsureChannelFirst instead with `channel_dim='no_channel'`.\n", - "\n", - " warn_deprecated(obj, msg, warning_category)\n", - "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", "\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls) # type: ignore\n", - "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - "\n", - " warnings.warn(msg)\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "\n", - "[2023-11-16 02:38:04,038] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.16497775401758865936247607314643258908.dcm\n", + "[2024-04-10 23:25:34,063] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.23303108191806495091599558367348667557.dcm\n", "\n", - "[2023-11-16 02:38:04,039] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.16497775401758865936247607314643258908.dcm\n", + "[2024-04-10 23:25:34,064] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.23303108191806495091599558367348667557.dcm\n", "\n", "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", "\n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", "\n", - "[info] [gxf_executor.cpp:229] Destroying context\n", + "[info] [gxf_executor.cpp:230] Destroying context\n", "\n", "AbdomenCT\n", "\n", - "[2023-11-15 18:38:04,955] [INFO] (common) - Container 'priceless_ptolemy'(e8950f0a463a) exited.\n" + "[2024-04-10 16:25:35,771] [INFO] (common) - Container 'dazzling_hugle'(7cf522bd06c4) exited.\n" ] } ], @@ -1236,21 +1322,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2023-11-15 18:38:10,416] [INFO] (root) - Parsed args: Namespace(argv=[], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-11-15 18:38:10,440] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", - "[info] [gxf_executor.cpp:210] Creating context\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 16:25:39,884] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-10 16:25:39,898] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", + "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warnings.warn(msg)\n", - "[2023-11-15 18:38:11,717] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.12540892677700748616860638452010005160.dcm\n", - "[2023-11-15 18:38:11,720] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.12540892677700748616860638452010005160.dcm\n" + "[2024-04-10 16:25:42,470] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.71636533308287156684391922232397043508.dcm\n", + "[2024-04-10 16:25:42,472] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.71636533308287156684391922232397043508.dcm\n" ] }, { @@ -1266,10 +1352,10 @@ "text": [ "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[info] [gxf_executor.cpp:229] Destroying context\n" + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:230] Destroying context\n" ] } ], @@ -1596,50 +1682,50 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-11-15 18:38:17,975] [INFO] (root) - Parsed args: Namespace(argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'], input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), log_level='DEBUG', model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), workdir=None)\n", - "[2023-11-15 18:38:17,979] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:210] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1741] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1771] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 16:25:46,989] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", + "[2024-04-10 16:25:46,993] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", - "[2023-11-15 18:38:19,019] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", + "[2024-04-10 16:25:49,239] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", "\n", - "[2023-11-15 18:38:19,019] [DEBUG] (root) - Writing DICOM common modules...\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "[2024-04-10 16:25:49,239] [DEBUG] (root) - Writing DICOM common modules...\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warnings.warn(msg)\n", - "[2023-11-15 18:38:19,021] [DEBUG] (root) - DICOM common modules written:\n", + "[2024-04-10 16:25:49,242] [DEBUG] (root) - DICOM common modules written:\n", "Dataset.file_meta -------------------------------\n", "(0002, 0000) File Meta Information Group Length UL: 198\n", "(0002, 0001) File Meta Information Version OB: b'01'\n", "(0002, 0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558\n", + "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141\n", "(0002, 0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002, 0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002, 0013) Implementation Version Name SH: '0.6.0'\n", + "(0002, 0013) Implementation Version Name SH: '0.5.1+25.g31e41'\n", "-------------------------------------------------\n", "(0008, 0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008, 0012) Instance Creation Date DA: '20231115'\n", - "(0008, 0013) Instance Creation Time TM: '183819'\n", + "(0008, 0012) Instance Creation Date DA: '20240410'\n", + "(0008, 0013) Instance Creation Time TM: '162549'\n", "(0008, 0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558\n", - "(0008, 0020) Study Date DA: '20231115'\n", - "(0008, 0021) Series Date DA: '20231115'\n", - "(0008, 0023) Content Date DA: '20231115'\n", - "(0008, 002a) Acquisition DateTime DT: '20231115183819'\n", - "(0008, 0030) Study Time TM: '183819'\n", - "(0008, 0031) Series Time TM: '183819'\n", - "(0008, 0033) Content Time TM: '183819'\n", + "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141\n", + "(0008, 0020) Study Date DA: '20240410'\n", + "(0008, 0021) Series Date DA: '20240410'\n", + "(0008, 0023) Content Date DA: '20240410'\n", + "(0008, 002a) Acquisition DateTime DT: '20240410162549'\n", + "(0008, 0030) Study Time TM: '162549'\n", + "(0008, 0031) Series Time TM: '162549'\n", + "(0008, 0033) Content Time TM: '162549'\n", "(0008, 0050) Accession Number SH: ''\n", "(0008, 0060) Modality CS: 'SR'\n", "(0008, 0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", "(0008, 0090) Referring Physician's Name PN: ''\n", - "(0008, 0201) Timezone Offset From UTC SH: '-0800'\n", + "(0008, 0201) Timezone Offset From UTC SH: '-0700'\n", "(0008, 1030) Study Description LO: 'AI results.'\n", "(0008, 103e) Series Description LO: 'CAUTION: Not for Diagnostic Use, for research use only.'\n", "(0008, 1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", @@ -1649,7 +1735,7 @@ "(0010, 0030) Patient's Birth Date DA: ''\n", "(0010, 0040) Patient's Sex CS: ''\n", "(0018, 0015) Body Part Examined CS: ''\n", - "(0018, 1020) Software Versions LO: '0.6.0'\n", + "(0018, 1020) Software Versions LO: '0.5.1+25.g31e41'\n", "(0018, a001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008, 0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008, 1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1661,38 +1747,38 @@ " (0008, 0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.12379609192731250420244173376142712446\n", - "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.73656010492290419012392741095771197196\n", + "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.99895869772559254532078552857455521250\n", + "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.11097411469528473023282906105369639673\n", "(0020, 0010) Study ID SH: '1'\n", - "(0020, 0011) Series Number IS: '9783'\n", + "(0020, 0011) Series Number IS: '7823'\n", "(0020, 0013) Instance Number IS: '1'\n", "(0040, 1001) Requested Procedure ID SH: ''\n", - "[2023-11-15 18:38:19,022] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", + "[2024-04-10 16:25:49,242] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", "(0002, 0000) File Meta Information Group Length UL: 198\n", "(0002, 0001) File Meta Information Version OB: b'01'\n", "(0002, 0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558\n", + "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141\n", "(0002, 0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002, 0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002, 0013) Implementation Version Name SH: '0.6.0'\n", + "(0002, 0013) Implementation Version Name SH: '0.5.1+25.g31e41'\n", "-------------------------------------------------\n", "(0008, 0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008, 0012) Instance Creation Date DA: '20231115'\n", - "(0008, 0013) Instance Creation Time TM: '183819'\n", + "(0008, 0012) Instance Creation Date DA: '20240410'\n", + "(0008, 0013) Instance Creation Time TM: '162549'\n", "(0008, 0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558\n", - "(0008, 0020) Study Date DA: '20231115'\n", - "(0008, 0021) Series Date DA: '20231115'\n", - "(0008, 0023) Content Date DA: '20231115'\n", - "(0008, 002a) Acquisition DateTime DT: '20231115183819'\n", - "(0008, 0030) Study Time TM: '183819'\n", - "(0008, 0031) Series Time TM: '183819'\n", - "(0008, 0033) Content Time TM: '183819'\n", + "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141\n", + "(0008, 0020) Study Date DA: '20240410'\n", + "(0008, 0021) Series Date DA: '20240410'\n", + "(0008, 0023) Content Date DA: '20240410'\n", + "(0008, 002a) Acquisition DateTime DT: '20240410162549'\n", + "(0008, 0030) Study Time TM: '162549'\n", + "(0008, 0031) Series Time TM: '162549'\n", + "(0008, 0033) Content Time TM: '162549'\n", "(0008, 0050) Accession Number SH: ''\n", "(0008, 0060) Modality CS: 'SR'\n", "(0008, 0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", "(0008, 0090) Referring Physician's Name PN: ''\n", - "(0008, 0201) Timezone Offset From UTC SH: '-0800'\n", + "(0008, 0201) Timezone Offset From UTC SH: '-0700'\n", "(0008, 1030) Study Description LO: 'AI results.'\n", "(0008, 103e) Series Description LO: 'Not for clinical use. The result is for research use only.'\n", "(0008, 1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", @@ -1702,7 +1788,7 @@ "(0010, 0030) Patient's Birth Date DA: ''\n", "(0010, 0040) Patient's Sex CS: ''\n", "(0018, 0015) Body Part Examined CS: ''\n", - "(0018, 1020) Software Versions LO: '0.6.0'\n", + "(0018, 1020) Software Versions LO: '0.5.1+25.g31e41'\n", "(0018, a001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008, 0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008, 1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1714,10 +1800,10 @@ " (0008, 0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.12379609192731250420244173376142712446\n", - "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.73656010492290419012392741095771197196\n", + "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.99895869772559254532078552857455521250\n", + "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.11097411469528473023282906105369639673\n", "(0020, 0010) Study ID SH: '1'\n", - "(0020, 0011) Series Number IS: '9783'\n", + "(0020, 0011) Series Number IS: '7823'\n", "(0020, 0013) Instance Number IS: '1'\n", "(0040, 1001) Requested Procedure ID SH: ''\n", "(0040, a040) Value Type CS: 'CONTAINER'\n", @@ -1738,14 +1824,14 @@ " ---------\n", " (0040, a160) Text Value UT: 'AbdomenCT'\n", " ---------\n", - "[2023-11-15 18:38:19,026] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558.dcm\n", - "[2023-11-15 18:38:19,027] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.67182506684910194313532021844767536558.dcm\n", + "[2024-04-10 16:25:49,245] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141.dcm\n", + "[2024-04-10 16:25:49,246] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141.dcm\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:229] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:230] Destroying context\n" ] } ], @@ -1857,7 +1943,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/notebooks/tutorials/02_mednist_app.ipynb b/notebooks/tutorials/02_mednist_app.ipynb index 703d3b54..595cb471 100644 --- a/notebooks/tutorials/02_mednist_app.ipynb +++ b/notebooks/tutorials/02_mednist_app.ipynb @@ -29,17 +29,7 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Traceback (most recent call last):\n", - " File \"\", line 1, in \n", - "ModuleNotFoundError: No module named 'ignite'\n" - ] - } - ], + "outputs": [], "source": [ "# Install necessary packages for MONAI Core\n", "!python -c \"import monai\" || pip install -q \"monai[pillow, tqdm]\"\n", @@ -71,23 +61,23 @@ "output_type": "stream", "text": [ "MONAI version: 1.3.0\n", - "Numpy version: 1.24.4\n", - "Pytorch version: 2.1.1+cu121\n", + "Numpy version: 1.26.4\n", + "Pytorch version: 2.0.1+cu117\n", "MONAI flags: HAS_EXT = False, USE_COMPILED = False, USE_META_DICT = False\n", "MONAI rev id: 865972f7a791bf7b42efbcd87c8402bd865b329e\n", - "MONAI __file__: /home//src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/__init__.py\n", + "MONAI __file__: /home//src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/__init__.py\n", "\n", "Optional dependencies:\n", "Pytorch Ignite version: 0.4.11\n", "ITK version: NOT INSTALLED or UNKNOWN VERSION.\n", - "Nibabel version: 5.1.0\n", - "scikit-image version: 0.21.0\n", - "scipy version: 1.10.1\n", - "Pillow version: 10.0.1\n", + "Nibabel version: 5.2.1\n", + "scikit-image version: 0.22.0\n", + "scipy version: 1.13.0\n", + "Pillow version: 10.3.0\n", "Tensorboard version: NOT INSTALLED or UNKNOWN VERSION.\n", - "gdown version: 4.7.1\n", + "gdown version: 4.7.3\n", "TorchVision version: NOT INSTALLED or UNKNOWN VERSION.\n", - "tqdm version: 4.66.1\n", + "tqdm version: 4.66.2\n", "lmdb version: NOT INSTALLED or UNKNOWN VERSION.\n", "psutil version: 5.9.6\n", "pandas version: NOT INSTALLED or UNKNOWN VERSION.\n", @@ -173,7 +163,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "/tmp/tmpjh72rafb\n" + "/tmp/tmpz1q9ch5_\n" ] }, { @@ -181,19 +171,17 @@ "output_type": "stream", "text": [ "Downloading...\n", - "From (uriginal): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE\n", - "From (redirected): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE&confirm=t&uuid=8946f974-8b80-4bd3-8696-ac8716b357ed\n", - "To: /tmp/tmpv4hps2d5/MedNIST.tar.gz\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61.8M/61.8M [00:02<00:00, 26.6MB/s]" + "From (original): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE\n", + "From (redirected): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE&confirm=t&uuid=6052caf3-cb8c-4cb3-b8b8-804d8dc90e06\n", + "To: /tmp/tmpq9pcg2c8/MedNIST.tar.gz\n", + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61.8M/61.8M [00:00<00:00, 81.1MB/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2023-11-15 19:10:32,776 - INFO - Downloaded: /tmp/tmpjh72rafb/MedNIST.tar.gz\n", - "2023-11-15 19:10:32,883 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n", - "2023-11-15 19:10:32,884 - INFO - Writing into directory: /tmp/tmpjh72rafb.\n" + "2024-04-10 16:28:05,802 - INFO - Downloaded: /tmp/tmpz1q9ch5_/MedNIST.tar.gz\n" ] }, { @@ -202,6 +190,14 @@ "text": [ "\n" ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-04-10 16:28:05,912 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n", + "2024-04-10 16:28:05,914 - INFO - Writing into directory: /tmp/tmpz1q9ch5_.\n" + ] } ], "source": [ @@ -326,11 +322,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 1/5 Loss: 0.1891738623380661\n", - "Epoch 2/5 Loss: 0.06714393198490143\n", - "Epoch 3/5 Loss: 0.028867393732070923\n", - "Epoch 4/5 Loss: 0.0186357069760561\n", - "Epoch 5/5 Loss: 0.0193067267537117\n" + "Epoch 1/5 Loss: 0.18928290903568268\n", + "Epoch 2/5 Loss: 0.06710730493068695\n", + "Epoch 3/5 Loss: 0.029032323509454727\n", + "Epoch 4/5 Loss: 0.01877668686211109\n", + "Epoch 5/5 Loss: 0.01939055137336254\n" ] } ], @@ -773,21 +769,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2023-11-15 19:18:17,922] [INFO] (root) - Parsed args: Namespace(argv=[], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-11-15 19:18:17,941] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", - "[info] [gxf_executor.cpp:210] Creating context\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 16:35:53,768] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-10 16:35:53,778] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", + "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warnings.warn(msg)\n", - "[2023-11-15 19:18:19,246] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.89399783846974532553567524226806601923.dcm\n", - "[2023-11-15 19:18:19,249] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.89399783846974532553567524226806601923.dcm\n" + "[2024-04-10 16:35:54,545] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.91196297255331853052707757292596626343.dcm\n", + "[2024-04-10 16:35:54,548] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.91196297255331853052707757292596626343.dcm\n" ] }, { @@ -803,10 +799,10 @@ "text": [ "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[info] [gxf_executor.cpp:229] Destroying context\n" + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:230] Destroying context\n" ] } ], @@ -1125,24 +1121,24 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:210] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1741] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1771] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warnings.warn(msg)\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:229] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:230] Destroying context\n" ] } ], @@ -1245,14 +1241,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-11-15 19:18:32,397] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/mednist_classifier_monaideploy.py\n", - "[2023-11-15 19:18:32,397] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2023-11-15 19:18:32,397] [INFO] (packager) - Scanning for models in {models_path}...\n", - "[2023-11-15 19:18:32,397] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2023-11-15 19:18:32,397] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/app.yaml...\n", - "[2023-11-15 19:18:32,398] [INFO] (packager) - Generating app.json...\n", - "[2023-11-15 19:18:32,399] [INFO] (packager) - Generating pkg.json...\n", - "[2023-11-15 19:18:32,400] [DEBUG] (common) - \n", + "[2024-04-10 16:36:05,007] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/mednist_classifier_monaideploy.py\n", + "[2024-04-10 16:36:05,007] [INFO] (packager.parameters) - Detected application type: Python File\n", + "[2024-04-10 16:36:05,007] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2024-04-10 16:36:05,007] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2024-04-10 16:36:05,007] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/app.yaml...\n", + "[2024-04-10 16:36:05,009] [INFO] (packager) - Generating app.json...\n", + "[2024-04-10 16:36:05,009] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-10 16:36:05,015] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1280,21 +1276,21 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.6.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2023-11-15 19:18:32,400] [DEBUG] (common) - \n", + "[2024-04-10 16:36:05,015] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", " \"applicationRoot\": \"/opt/holoscan/app\",\n", " \"modelRoot\": \"/opt/holoscan/models\",\n", " \"models\": {\n", - " \"model\": \"/opt/holoscan/models\"\n", + " \"model\": \"/opt/holoscan/models/model\"\n", " },\n", " \"resources\": {\n", " \"cpu\": 1,\n", @@ -1302,15 +1298,16 @@ " \"memory\": \"1Gi\",\n", " \"gpuMemory\": \"1Gi\"\n", " },\n", - " \"version\": 1.0\n", + " \"version\": 1.0,\n", + " \"platformConfig\": \"dgpu\"\n", "}\n", "================ End pkg.json ================\n", " \n", - "[2023-11-15 19:18:32,429] [DEBUG] (packager.builder) - \n", + "[2024-04-10 16:36:05,050] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -1326,11 +1323,13 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", "LABEL tag=\"mednist_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"0.6.0\"\n", + "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "\n", "\n", "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", @@ -1355,7 +1354,7 @@ "\n", "\n", "\n", - "RUN groupadd -g $GID $UNAME\n", + "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", "RUN chown -R holoscan /var/holoscan/input \n", @@ -1380,12 +1379,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI org\n", - "RUN pip install holoscan==0.6.0\n", + "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", + "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", "\n", - "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==0.6.0\n", + "# Copy user-specified MONAI Deploy SDK file\n", + "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", "\n", "\n", "\n", @@ -1401,269 +1400,151 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2023-11-15 19:18:32,429] [INFO] (packager.builder) - \n", + "[2024-04-10 16:36:05,050] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - " Build Image: N/A \n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoiscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: pypi.org\n", + " Holoscan SDK Package: pypi.org\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 0.6.0\n", + " SDK Version: 1.0.3\n", " SDK: monai-deploy\n", " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2023-11-15 19:18:32,690] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2023-11-15 19:18:32,691] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2024-04-10 16:36:05,416] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-10 16:36:05,416] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", - "#1 [internal] load .dockerignore\n", - "#1 transferring context: 1.79kB done\n", + "#1 [internal] load build definition from Dockerfile\n", + "#1 transferring dockerfile: 2.81kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load build definition from Dockerfile\n", - "#2 transferring dockerfile: 2.49kB done\n", - "#2 DONE 0.1s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#2 DONE 0.5s\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#3 DONE 0.4s\n", + "#3 [internal] load .dockerignore\n", + "#3 transferring context: 1.79kB done\n", + "#3 DONE 0.1s\n", "\n", - "#4 [internal] load build context\n", - "#4 DONE 0.0s\n", + "#4 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#4 ...\n", "\n", - "#5 importing cache manifest from local:12435489437730595250\n", + "#5 [internal] load build context\n", "#5 DONE 0.0s\n", "\n", - "#6 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#6 DONE 0.7s\n", + "#6 importing cache manifest from local:12491137658764693548\n", + "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#6 DONE 0.0s\n", + "\n", + "#7 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", + "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.0s done\n", + "#7 DONE 0.0s\n", "\n", - "#7 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", - "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc 0.1s done\n", - "#7 DONE 0.1s\n", + "#4 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#4 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#4 DONE 0.5s\n", "\n", - "#4 [internal] load build context\n", - "#4 transferring context: 28.62MB 0.2s done\n", - "#4 DONE 0.3s\n", + "#5 [internal] load build context\n", + "#5 transferring context: 28.75MB 0.2s done\n", + "#5 DONE 0.2s\n", "\n", - "#8 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#8 [13/21] RUN pip install --upgrade pip\n", "#8 CACHED\n", "\n", - "#9 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#9 [10/21] COPY ./tools /var/holoscan/tools\n", "#9 CACHED\n", "\n", "#10 [ 9/21] WORKDIR /var/holoscan\n", "#10 CACHED\n", "\n", - "#11 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#11 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#11 CACHED\n", "\n", - "#12 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#12 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#13 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#13 CACHED\n", "\n", - "#14 [10/21] COPY ./tools /var/holoscan/tools\n", + "#14 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#14 CACHED\n", "\n", - "#15 [ 4/21] RUN groupadd -g 1000 holoscan\n", + "#15 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#15 CACHED\n", "\n", - "#16 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", + "#16 [11/21] RUN chmod +x /var/holoscan/tools\n", "#16 CACHED\n", "\n", - "#17 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#17 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#17 CACHED\n", "\n", - "#18 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#18 DONE 0.4s\n", - "\n", - "#19 [13/21] RUN pip install --upgrade pip\n", - "#19 1.132 Defaulting to user installation because normal site-packages is not writeable\n", - "#19 1.214 Requirement already satisfied: pip in /usr/local/lib/python3.8/dist-packages (22.0.4)\n", - "#19 1.417 Collecting pip\n", - "#19 1.467 Downloading pip-23.3.1-py3-none-any.whl (2.1 MB)\n", - "#19 1.538 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 32.7 MB/s eta 0:00:00\n", - "#19 1.658 Installing collected packages: pip\n", - "#19 2.774 Successfully installed pip-23.3.1\n", - "#19 2.906 WARNING: You are using pip version 22.0.4; however, version 23.3.1 is available.\n", - "#19 2.906 You should consider upgrading via the '/usr/bin/python -m pip install --upgrade pip' command.\n", - "#19 DONE 3.1s\n", + "#18 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", + "#18 CACHED\n", + "\n", + "#19 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#19 CACHED\n", "\n", "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#20 0.781 Collecting monai>=1.2.0 (from -r /tmp/requirements.txt (line 1))\n", - "#20 0.810 Downloading monai-1.3.0-202310121228-py3-none-any.whl.metadata (10 kB)\n", - "#20 1.152 Collecting Pillow>=8.4.0 (from -r /tmp/requirements.txt (line 2))\n", - "#20 1.165 Downloading Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl.metadata (9.5 kB)\n", - "#20 1.216 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 3))\n", - "#20 1.227 Downloading pydicom-2.4.3-py3-none-any.whl.metadata (7.8 kB)\n", - "#20 1.342 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 4))\n", - "#20 1.351 Downloading highdicom-0.22.0-py3-none-any.whl.metadata (3.8 kB)\n", - "#20 1.430 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 5))\n", - "#20 1.439 Downloading SimpleITK-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#20 1.777 Collecting setuptools>=59.5.0 (from -r /tmp/requirements.txt (line 6))\n", - "#20 1.785 Downloading setuptools-68.2.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#20 1.912 Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.8/dist-packages (from monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (1.22.3)\n", - "#20 1.972 Collecting torch>=1.9 (from monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 1.983 Downloading torch-2.1.1-cp38-cp38-manylinux1_x86_64.whl.metadata (25 kB)\n", - "#20 2.163 Collecting pillow-jpls>=1.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 4))\n", - "#20 2.182 Downloading pillow_jpls-1.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (340 kB)\n", - "#20 2.197 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 340.3/340.3 kB 76.9 MB/s eta 0:00:00\n", - "#20 2.400 Collecting filelock (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.411 Downloading filelock-3.13.1-py3-none-any.whl.metadata (2.8 kB)\n", - "#20 2.415 Requirement already satisfied: typing-extensions in /usr/local/lib/python3.8/dist-packages (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (4.7.1)\n", - "#20 2.467 Collecting sympy (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.477 Downloading sympy-1.12-py3-none-any.whl (5.7 MB)\n", - "#20 2.531 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 MB 114.1 MB/s eta 0:00:00\n", - "#20 2.617 Collecting networkx (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.626 Downloading networkx-3.1-py3-none-any.whl (2.1 MB)\n", - "#20 2.652 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 95.7 MB/s eta 0:00:00\n", - "#20 2.668 Requirement already satisfied: jinja2 in /usr/local/lib/python3.8/dist-packages (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (3.1.2)\n", - "#20 2.721 Collecting fsspec (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.730 Downloading fsspec-2023.10.0-py3-none-any.whl.metadata (6.8 kB)\n", - "#20 2.760 Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.772 Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", - "#20 2.981 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 23.7/23.7 MB 116.4 MB/s eta 0:00:00\n", - "#20 3.068 Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 3.109 Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", - "#20 3.124 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 823.6/823.6 kB 94.7 MB/s eta 0:00:00\n", - "#20 3.163 Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 3.176 Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", - "#20 3.309 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.1/14.1 MB 109.7 MB/s eta 0:00:00\n", - "#20 3.378 Collecting nvidia-cudnn-cu12==8.9.2.26 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 3.386 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", - "#20 3.416 Collecting nvidia-cublas-cu12==12.1.3.1 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 3.430 Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", - "#20 7.176 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 410.6/410.6 MB 107.3 MB/s eta 0:00:00\n", - "#20 8.220 Collecting nvidia-cufft-cu12==11.0.2.54 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 8.233 Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", - "#20 9.379 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.6/121.6 MB 109.4 MB/s eta 0:00:00\n", - "#20 9.783 Collecting nvidia-curand-cu12==10.3.2.106 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 9.793 Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", - "#20 10.31 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.5/56.5 MB 116.7 MB/s eta 0:00:00\n", - "#20 10.48 Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 10.49 Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", - "#20 11.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 124.2/124.2 MB 124.0 MB/s eta 0:00:00\n", - "#20 11.93 Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 11.94 Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", - "#20 13.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 196.0/196.0 MB 112.6 MB/s eta 0:00:00\n", - "#20 14.22 Collecting nvidia-nccl-cu12==2.18.1 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 14.23 Downloading nvidia_nccl_cu12-2.18.1-py3-none-manylinux1_x86_64.whl (209.8 MB)\n", - "#20 16.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 209.8/209.8 MB 110.7 MB/s eta 0:00:00\n", - "#20 16.82 Collecting nvidia-nvtx-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 16.83 Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", - "#20 16.84 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.1/99.1 kB 177.1 MB/s eta 0:00:00\n", - "#20 16.88 Collecting triton==2.1.0 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 16.89 Downloading triton-2.1.0-0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.3 kB)\n", - "#20 16.94 Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 16.95 Downloading nvidia_nvjitlink_cu12-12.3.101-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 17.06 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.8/dist-packages (from jinja2->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (2.1.1)\n", - "#20 17.16 Collecting mpmath>=0.19 (from sympy->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 17.17 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#20 17.18 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 171.3 MB/s eta 0:00:00\n", - "#20 17.28 Downloading monai-1.3.0-202310121228-py3-none-any.whl (1.3 MB)\n", - "#20 17.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 106.8 MB/s eta 0:00:00\n", - "#20 17.31 Downloading Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl (3.6 MB)\n", - "#20 17.36 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 85.2 MB/s eta 0:00:00\n", - "#20 17.37 Downloading pydicom-2.4.3-py3-none-any.whl (1.8 MB)\n", - "#20 17.40 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 82.5 MB/s eta 0:00:00\n", - "#20 17.42 Downloading highdicom-0.22.0-py3-none-any.whl (825 kB)\n", - "#20 17.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 825.0/825.0 kB 76.9 MB/s eta 0:00:00\n", - "#20 17.45 Downloading SimpleITK-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.7 MB)\n", - "#20 18.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.7/52.7 MB 93.6 MB/s eta 0:00:00\n", - "#20 18.21 Downloading setuptools-68.2.2-py3-none-any.whl (807 kB)\n", - "#20 18.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 807.9/807.9 kB 125.5 MB/s eta 0:00:00\n", - "#20 18.23 Downloading torch-2.1.1-cp38-cp38-manylinux1_x86_64.whl (670.2 MB)\n", - "#20 24.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 670.2/670.2 MB 74.1 MB/s eta 0:00:00\n", - "#20 24.63 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n", - "#20 31.44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 731.7/731.7 MB 65.6 MB/s eta 0:00:00\n", - "#20 31.46 Downloading triton-2.1.0-0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (89.2 MB)\n", - "#20 32.91 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 89.2/89.2 MB 90.3 MB/s eta 0:00:00\n", - "#20 32.92 Downloading filelock-3.13.1-py3-none-any.whl (11 kB)\n", - "#20 32.93 Downloading fsspec-2023.10.0-py3-none-any.whl (166 kB)\n", - "#20 32.94 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 166.4/166.4 kB 69.7 MB/s eta 0:00:00\n", - "#20 32.96 Downloading nvidia_nvjitlink_cu12-12.3.101-py3-none-manylinux1_x86_64.whl (20.5 MB)\n", - "#20 34.08 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 20.5/20.5 MB 19.1 MB/s eta 0:00:00\n", - "#20 38.74 Installing collected packages: SimpleITK, mpmath, sympy, setuptools, pydicom, Pillow, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, networkx, fsspec, filelock, triton, pillow-jpls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12, highdicom, torch, monai\n", - "#20 85.54 Successfully installed Pillow-10.1.0 SimpleITK-2.3.1 filelock-3.13.1 fsspec-2023.10.0 highdicom-0.22.0 monai-1.3.0 mpmath-1.3.0 networkx-3.1 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.18.1 nvidia-nvjitlink-cu12-12.3.101 nvidia-nvtx-cu12-12.1.105 pillow-jpls-1.2.0 pydicom-2.4.3 setuptools-68.2.2 sympy-1.12 torch-2.1.1 triton-2.1.0\n", - "#20 DONE 87.6s\n", - "\n", - "#21 [15/21] RUN pip install holoscan==0.6.0\n", - "#21 0.757 Defaulting to user installation because normal site-packages is not writeable\n", - "#21 1.044 Collecting holoscan==0.6.0\n", - "#21 1.084 Downloading holoscan-0.6.0-cp38-cp38-manylinux2014_x86_64.whl.metadata (4.4 kB)\n", - "#21 1.124 Requirement already satisfied: cloudpickle~=2.2 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (2.2.1)\n", - "#21 1.126 Requirement already satisfied: python-on-whales~=0.60 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (0.63.0)\n", - "#21 1.128 Requirement already satisfied: Jinja2~=3.1 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (3.1.2)\n", - "#21 1.130 Requirement already satisfied: packaging~=23.1 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (23.1)\n", - "#21 1.131 Requirement already satisfied: pyyaml~=6.0 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (6.0.1)\n", - "#21 1.132 Requirement already satisfied: requests~=2.28 in /usr/local/lib/python3.8/dist-packages (from holoscan==0.6.0) (2.31.0)\n", - "#21 1.134 Requirement already satisfied: pip>=20.2 in /home/holoscan/.local/lib/python3.8/site-packages (from holoscan==0.6.0) (23.3.1)\n", - "#21 1.276 Collecting wheel-axle-runtime<1.0 (from holoscan==0.6.0)\n", - "#21 1.285 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", - "#21 1.308 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.8/dist-packages (from Jinja2~=3.1->holoscan==0.6.0) (2.1.1)\n", - "#21 1.319 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan==0.6.0) (1.10.12)\n", - "#21 1.320 Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan==0.6.0) (4.65.0)\n", - "#21 1.321 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan==0.6.0) (0.9.0)\n", - "#21 1.321 Requirement already satisfied: typing-extensions in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan==0.6.0) (4.7.1)\n", - "#21 1.332 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan==0.6.0) (3.2.0)\n", - "#21 1.332 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan==0.6.0) (3.4)\n", - "#21 1.333 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan==0.6.0) (2.0.4)\n", - "#21 1.334 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan==0.6.0) (2023.7.22)\n", - "#21 1.337 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.8/site-packages (from wheel-axle-runtime<1.0->holoscan==0.6.0) (3.13.1)\n", - "#21 1.381 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.8/dist-packages (from typer>=0.4.1->python-on-whales~=0.60->holoscan==0.6.0) (8.1.6)\n", - "#21 1.444 Downloading holoscan-0.6.0-cp38-cp38-manylinux2014_x86_64.whl (52.8 MB)\n", - "#21 2.307 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.8/52.8 MB 27.8 MB/s eta 0:00:00\n", - "#21 2.319 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", - "#21 2.826 Installing collected packages: wheel-axle-runtime, holoscan\n", - "#21 3.814 Successfully installed holoscan-0.6.0 wheel-axle-runtime-0.0.5\n", - "#21 DONE 4.4s\n", - "\n", - "#22 [16/21] RUN pip install monai-deploy-app-sdk==0.6.0\n", - "#22 0.661 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.843 Collecting monai-deploy-app-sdk==0.6.0\n", - "#22 0.872 Downloading monai_deploy_app_sdk-0.6.0-py3-none-any.whl (125 kB)\n", - "#22 0.895 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.1/125.1 KB 7.3 MB/s eta 0:00:00\n", - "#22 0.918 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.8/dist-packages (from monai-deploy-app-sdk==0.6.0) (1.22.3)\n", - "#22 0.919 Requirement already satisfied: holoscan~=0.6.0 in /home/holoscan/.local/lib/python3.8/site-packages (from monai-deploy-app-sdk==0.6.0) (0.6.0)\n", - "#22 0.994 Collecting colorama>=0.4.1\n", - "#22 1.002 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.091 Collecting typeguard>=3.0.0\n", - "#22 1.105 Downloading typeguard-4.1.5-py3-none-any.whl (34 kB)\n", - "#22 1.130 Requirement already satisfied: cloudpickle~=2.2 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (2.2.1)\n", - "#22 1.131 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.8/site-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (0.0.5)\n", - "#22 1.132 Requirement already satisfied: Jinja2~=3.1 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (3.1.2)\n", - "#22 1.133 Requirement already satisfied: packaging~=23.1 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (23.1)\n", - "#22 1.134 Requirement already satisfied: python-on-whales~=0.60 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (0.63.0)\n", - "#22 1.135 Requirement already satisfied: pyyaml~=6.0 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (6.0.1)\n", - "#22 1.136 Requirement already satisfied: pip>=20.2 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (22.0.4)\n", - "#22 1.137 Requirement already satisfied: requests~=2.28 in /usr/local/lib/python3.8/dist-packages (from holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (2.31.0)\n", - "#22 1.151 Requirement already satisfied: typing-extensions>=4.7.0 in /usr/local/lib/python3.8/dist-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==0.6.0) (4.7.1)\n", - "#22 1.266 Collecting importlib-metadata>=3.6\n", - "#22 1.274 Downloading importlib_metadata-6.8.0-py3-none-any.whl (22 kB)\n", - "#22 1.371 Collecting zipp>=0.5\n", - "#22 1.378 Downloading zipp-3.17.0-py3-none-any.whl (7.4 kB)\n", - "#22 1.393 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.8/dist-packages (from Jinja2~=3.1->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (2.1.1)\n", - "#22 1.401 Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (4.65.0)\n", - "#22 1.402 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (1.10.12)\n", - "#22 1.403 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.8/dist-packages (from python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (0.9.0)\n", - "#22 1.414 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (2023.7.22)\n", - "#22 1.415 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (3.2.0)\n", - "#22 1.416 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (3.4)\n", - "#22 1.417 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests~=2.28->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (2.0.4)\n", - "#22 1.423 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.8/site-packages (from wheel-axle-runtime<1.0->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (3.13.1)\n", - "#22 1.464 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.8/dist-packages (from typer>=0.4.1->python-on-whales~=0.60->holoscan~=0.6.0->monai-deploy-app-sdk==0.6.0) (8.1.6)\n", - "#22 1.945 Installing collected packages: zipp, colorama, importlib-metadata, typeguard, monai-deploy-app-sdk\n", - "#22 2.185 Successfully installed colorama-0.4.6 importlib-metadata-6.8.0 monai-deploy-app-sdk-0.6.0 typeguard-4.1.5 zipp-3.17.0\n", - "#22 2.190 WARNING: You are using pip version 22.0.4; however, version 23.3.1 is available.\n", - "#22 2.190 You should consider upgrading via the '/usr/bin/python -m pip install --upgrade pip' command.\n", - "#22 DONE 2.4s\n", + "#20 CACHED\n", + "\n", + "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#21 DONE 0.3s\n", + "\n", + "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#22 0.701 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.799 Processing /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#22 0.810 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.23.5)\n", + "#22 0.996 Collecting holoscan~=1.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.066 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (4.1 kB)\n", + "#22 1.137 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.141 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.222 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.227 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.322 Collecting pip==23.3.2 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.327 Downloading pip-23.3.2-py3-none-any.whl.metadata (3.5 kB)\n", + "#22 1.343 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (12.2.0)\n", + "#22 1.343 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.2.1)\n", + "#22 1.344 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.60.1)\n", + "#22 1.346 Requirement already satisfied: Jinja2==3.1.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.1.2)\n", + "#22 1.346 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (23.1)\n", + "#22 1.347 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (6.0)\n", + "#22 1.348 Requirement already satisfied: requests==2.28.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.28.2)\n", + "#22 1.350 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (5.9.6)\n", + "#22 1.461 Collecting wheel-axle-runtime<1.0 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.467 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", + "#22 1.504 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.8.2)\n", + "#22 1.508 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.1.3)\n", + "#22 1.523 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.10.14)\n", + "#22 1.524 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.66.1)\n", + "#22 1.525 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.9.0)\n", + "#22 1.526 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.10.0)\n", + "#22 1.533 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.3.2)\n", + "#22 1.534 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.6)\n", + "#22 1.535 Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.26.18)\n", + "#22 1.536 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2023.11.17)\n", + "#22 1.551 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.13.3)\n", + "#22 1.587 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (8.1.7)\n", + "#22 1.630 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.653 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl (33.6 MB)\n", + "#22 2.391 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.6/33.6 MB 36.3 MB/s eta 0:00:00\n", + "#22 2.399 Downloading pip-23.3.2-py3-none-any.whl (2.1 MB)\n", + "#22 2.452 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 45.3 MB/s eta 0:00:00\n", + "#22 2.459 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", + "#22 2.484 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", + "#22 2.841 Installing collected packages: wheel-axle-runtime, typeguard, pip, colorama, holoscan, monai-deploy-app-sdk\n", + "#22 2.915 Attempting uninstall: pip\n", + "#22 2.916 Found existing installation: pip 24.0\n", + "#22 2.967 Uninstalling pip-24.0:\n", + "#22 3.365 Successfully uninstalled pip-24.0\n", + "#22 5.013 Successfully installed colorama-0.4.6 holoscan-1.0.3 monai-deploy-app-sdk-0.5.1+25.g31e4165.dirty pip-23.3.2 typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", + "#22 DONE 5.6s\n", "\n", "#23 [17/21] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.2s\n", + "#23 DONE 0.3s\n", "\n", "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", "#24 DONE 0.1s\n", @@ -1679,102 +1560,115 @@ "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 157.5s done\n", - "#28 exporting manifest sha256:6d3e7548287a6a3abc70110c29982b2b32483515fb249876f50112b03dac40a6 0.0s done\n", - "#28 exporting config sha256:69287893ca549aef4897eb7391ab557b1cc5802f1c547ac41b761808e04a7fa4 0.0s done\n", + "#28 exporting layers 5.9s done\n", + "#28 exporting manifest sha256:261bfd883479734974f9f01500b63a394537a84df186d0552794645b0152f0f5 0.0s done\n", + "#28 exporting config sha256:47a95542f89e8e3174bba11729dc605a923542cf7c48c180ae2eb42290619826 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 DONE 90.4s\n", + "#29 loading layer 2c6ff491304f 32.77kB / 125.57kB\n", + "#29 loading layer 04072fb0fc22 557.06kB / 73.96MB\n", + "#29 loading layer 04072fb0fc22 71.86MB / 73.96MB 2.1s\n", + "#29 loading layer 1982c4813c35 262.14kB / 26.20MB\n", + "#29 loading layer dc0acf48e445 513B / 513B\n", + "#29 loading layer a50eb25f7721 320B / 320B\n", + "#29 loading layer 838ef774fdf1 298B / 298B\n", + "#29 loading layer 3401c98a4ff8 4.00kB / 4.00kB\n", + "#29 loading layer 838ef774fdf1 298B / 298B 0.8s done\n", + "#29 loading layer 2c6ff491304f 32.77kB / 125.57kB 4.0s done\n", + "#29 loading layer 04072fb0fc22 71.86MB / 73.96MB 3.8s done\n", + "#29 loading layer 1982c4813c35 262.14kB / 26.20MB 1.3s done\n", + "#29 loading layer dc0acf48e445 513B / 513B 0.9s done\n", + "#29 loading layer a50eb25f7721 320B / 320B 0.9s done\n", + "#29 loading layer 3401c98a4ff8 4.00kB / 4.00kB 0.8s done\n", + "#29 DONE 4.0s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 132.9s done\n", - "#28 DONE 290.5s\n", + "#28 sending tarball 68.3s done\n", + "#28 DONE 74.3s\n", "\n", - "#30 exporting content cache\n", + "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d\n", - "#30 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d done\n", - "#30 writing layer sha256:0ce020987cfa5cd1654085af3bb40779634eb3d792c4a4d6059036463ae0040d done\n", - "#30 writing layer sha256:0f65089b284381bf795d15b1a186e2a8739ea957106fa526edef0d738e7cda70 done\n", - "#30 writing layer sha256:12a47450a9f9cc5d4edab65d0f600dbbe8b23a1663b0b3bb2c481d40e074b580 done\n", - "#30 writing layer sha256:1de965777e2e37c7fabe00bdbf3d0203ca83ed30a71a5479c3113fe4fc48c4bb done\n", - "#30 writing layer sha256:24b5aa2448e920814dd67d7d3c0169b2cdacb13c4048d74ded3b4317843b13ff done\n", - "#30 writing layer sha256:2d42104dbf0a7cc962b791f6ab4f45a803f8a36d296f996aca180cfb2f3e30d0 done\n", - "#30 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff done\n", - "#30 writing layer sha256:3783d0dc66925772df1dfb27f94eaa99034d14162095ac959cd3963ec714d1f4 0.0s done\n", - "#30 writing layer sha256:38794be1b5dc99645feabf89b22cd34fb5bdffb5164ad920e7df94f353efe9c0 done\n", - "#30 writing layer sha256:38f963dc57c1e7b68a738fe39ed9f9345df7188111a047e2163a46648d7f1d88 done\n", - "#30 writing layer sha256:394546a9b772ece8edef536c1ed208c87a1c39293207cc101fc7d94cc5ff364f\n", - "#30 writing layer sha256:394546a9b772ece8edef536c1ed208c87a1c39293207cc101fc7d94cc5ff364f 54.5s done\n", - "#30 writing layer sha256:3e7e4c9bc2b136814c20c04feb4eea2b2ecf972e20182d88759931130cfb4181 done\n", - "#30 writing layer sha256:3fd77037ad585442cd82d64e337f49a38ddba50432b2a1e563a48401d25c79e6 done\n", - "#30 writing layer sha256:40c61fe78b843bfb1e890001a8d40e2dbe8f3e2f0ddb65d10c91147cfb0f1af3\n", - "#30 writing layer sha256:40c61fe78b843bfb1e890001a8d40e2dbe8f3e2f0ddb65d10c91147cfb0f1af3 0.1s done\n", - "#30 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0 done\n", - "#30 writing layer sha256:45893188359aca643d5918c9932da995364dc62013dfa40c075298b1baabece3 done\n", - "#30 writing layer sha256:49bc651b19d9e46715c15c41b7c0daa007e8e25f7d9518f04f0f06592799875a done\n", - "#30 writing layer sha256:4c12db5118d8a7d909e4926d69a2192d2b3cd8b110d49c7504a4f701258c1ccc done\n", - "#30 writing layer sha256:4cc43a803109d6e9d1fd35495cef9b1257035f5341a2db54f7a1940815b6cc65 done\n", - "#30 writing layer sha256:4d32b49e2995210e8937f0898327f196d3fcc52486f0be920e8b2d65f150a7ab done\n", - "#30 writing layer sha256:4d6fe980bad9cd7b2c85a478c8033cae3d098a81f7934322fb64658b0c8f9854 done\n", + "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", + "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", + "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", + "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", + "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", + "#30 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", + "#30 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", + "#30 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", + "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", + "#30 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", + "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", + "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", + "#30 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", + "#30 writing layer sha256:2ca59f23482f8bc9a313f15326cc9326efd2553b0480274dc62b6213b864e2ed 0.0s done\n", + "#30 writing layer sha256:32ccfe43297de5eb7d872ac37cb2e4b356a9fdd75b37a1d4e9c0a96f26d3a1eb 0.0s done\n", + "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", + "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", + "#30 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", + "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", + "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", + "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:5150182f1ff123399b300ca469e00f6c4d82e1b9b72652fb8ee7eab370245236 done\n", - "#30 writing layer sha256:595c38fa102c61c3dda19bdab70dcd26a0e50465b986d022a84fa69023a05d0f done\n", - "#30 writing layer sha256:599c7444a380d72214895c595ea8a776b249a23b4bde9c029c5b3b737fd44cf1 0.0s done\n", - "#30 writing layer sha256:59d451175f6950740e26d38c322da0ef67cb59da63181eb32996f752ba8a2f17 done\n", - "#30 writing layer sha256:5ad1f2004580e415b998124ea394e9d4072a35d70968118c779f307204d6bd17 done\n", - "#30 writing layer sha256:62598eafddf023e7f22643485f4321cbd51ff7eee743b970db12454fd3c8c675 done\n", - "#30 writing layer sha256:63d7e616a46987136f4cc9eba95db6f6327b4854cfe3c7e20fed6db0c966e380 done\n", - "#30 writing layer sha256:689393d5c3926910ebc9e4c6c377ea651c84cf0134a1aa69cadcf309ecef9e02 0.0s done\n", - "#30 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f\n", - "#30 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f done\n", - "#30 writing layer sha256:698318e5a60e5e0d48c45bf992f205a9532da567fdfe94bd59be2e192975dd6f done\n", - "#30 writing layer sha256:6d907abcbcc8c4fea9f9678d5b7a9a0171b441c35bed212a634d58d27d8fb5cb\n", - "#30 writing layer sha256:6d907abcbcc8c4fea9f9678d5b7a9a0171b441c35bed212a634d58d27d8fb5cb 0.4s done\n", - "#30 writing layer sha256:6ddc1d0f91833b36aac1c6f0c8cea005c87d94bab132d46cc06d9b060a81cca3 done\n", - "#30 writing layer sha256:7073fc2251eff329a82af3e4f73a2b5e75b8fe8c6d744183f08d11f395277e9c 0.0s done\n", - "#30 writing layer sha256:74ac1f5a47c0926bff1e997bb99985a09926f43bd0895cb27ceb5fa9e95f8720 done\n", - "#30 writing layer sha256:7577973918dd30e764733a352a93f418000bc3181163ca451b2307492c1a6ba9 done\n", - "#30 writing layer sha256:7f256c83fad20862afc50cdf843f2b48a9be6bb58f9f17ef9f63e26f047ba31a 0.0s done\n", - "#30 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2\n", - "#30 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2 done\n", - "#30 writing layer sha256:8a7451db9b4b817b3b33904abddb7041810a4ffe8ed4a034307d45d9ae9b3f2a done\n", - "#30 writing layer sha256:8bf04775f408495a1ab7de439b0fc5f981bd282834c6d940f5eb7b865fcb2aa0 0.0s done\n", - "#30 writing layer sha256:916f4054c6e7f10de4fd7c08ffc75fa23ebecca4eceb8183cb1023b33b1696c9 done\n", - "#30 writing layer sha256:9463aa3f56275af97693df69478a2dc1d171f4e763ca6f7b6f370a35e605c154 done\n", - "#30 writing layer sha256:955fd173ed884230c2eded4542d10a97384b408537be6bbb7c4ae09ccd6fb2d0 done\n", - "#30 writing layer sha256:9c42a4ee99755f441251e6043b2cbba16e49818a88775e7501ec17e379ce3cfd done\n", - "#30 writing layer sha256:9c63be0a86e3dc4168db3814bf464e40996afda0031649d9faa8ff7568c3154f done\n", - "#30 writing layer sha256:9e04bda98b05554953459b5edef7b2b14d32f1a00b979a23d04b6eb5c191e66b done\n", - "#30 writing layer sha256:a4a0c690bc7da07e592514dccaa26098a387e8457f69095e922b6d73f7852502 done\n", - "#30 writing layer sha256:a4aafbc094d78a85bef41036173eb816a53bcd3e2564594a32f542facdf2aba6 done\n", - "#30 writing layer sha256:ae36a4d38b76948e39a5957025c984a674d2de18ce162a8caaa536e6f06fccea done\n", - "#30 writing layer sha256:b2fa40114a4a0725c81b327df89c0c3ed5c05ca9aa7f1157394d5096cf5460ce done\n", + "#30 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", + "#30 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", + "#30 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", + "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", + "#30 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", + "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", + "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", + "#30 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", + "#30 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", + "#30 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", + "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", + "#30 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", + "#30 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", + "#30 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#30 writing layer sha256:81b2d4e60f6b67ed37f95e3d15237a436e76056fb4babcb9a188fd2b337c897b 0.0s done\n", + "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", + "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f\n", + "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#30 writing layer sha256:93e2013abbc3bc85f24d4739ac397584f6332aec7d8e80f8d95d9c961978fe90 0.0s done\n", + "#30 writing layer sha256:9723201c31b4e56a2dff5c3769790d4d6a7c069d75bdd3996395600bd0d067cd done\n", + "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", + "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", + "#30 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", + "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", + "#30 writing layer sha256:a9cc9b4b42ca5455c9da9b048ab2cc36e82bd335f51c23817f4bcf330bbb96f1 done\n", + "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#30 writing layer sha256:bc094183f34f419fbf8d0d5a76d88f741675287a26603b98896c4161a0218d63\n", - "#30 writing layer sha256:bc094183f34f419fbf8d0d5a76d88f741675287a26603b98896c4161a0218d63 1.6s done\n", - "#30 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6\n", - "#30 preparing build cache for export 57.9s done\n", - "#30 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6 done\n", - "#30 writing layer sha256:cb506fbdedc817e3d074f609e2edbf9655aacd7784610a1bbac52f2d7be25438 done\n", - "#30 writing layer sha256:d2a6fe65a1f84edb65b63460a75d1cac1aa48b72789006881b0bcfd54cd01ffd done\n", - "#30 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304 done\n", - "#30 writing layer sha256:ddc2ade4f6fe866696cb638c8a102cb644fa842c2ca578392802b3e0e5e3bcb7 done\n", - "#30 writing layer sha256:e2cfd7f6244d6f35befa6bda1caa65f1786cecf3f00ef99d7c9a90715ce6a03c done\n", - "#30 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907 done\n", - "#30 writing layer sha256:eaf45e9f32d1f5a9983945a1a9f8dedbb475bc0f578337610e00b4dedec87c20 done\n", - "#30 writing layer sha256:eb411bef39c013c9853651e68f00965dbd826d829c4e478884a2886976e9c989 done\n", - "#30 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759 done\n", - "#30 writing layer sha256:ef4466d6f927d29d404df9c5af3ef5733c86fa14e008762c90110b963978b1e7 done\n", - "#30 writing layer sha256:f346e3ecdf0bee048fa1e3baf1d3128ff0283b903f03e97524944949bd8882e5 done\n", - "#30 writing layer sha256:f3f9a00a1ce9aadda250aacb3e66a932676badc5d8519c41517fdf7ea14c13ed done\n", - "#30 writing layer sha256:fd849d9bd8889edd43ae38e9f21a912430c8526b2c18f3057a3b2cd74eb27b31 done\n", - "#30 writing config sha256:7cfec7bd2b3ff69855a31c8535d3935c07e6028f6e6f6ad8d1ee72dca22a059e 0.0s done\n", - "#30 writing manifest sha256:ae24e011466a0d1cad0f5738f6d2871e7cc99b4f959833c08e056e8dadd6f56c 0.0s done\n", - "#30 DONE 57.9s\n", - "[2023-11-15 19:26:02,805] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", + "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", + "#30 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", + "#30 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", + "#30 writing layer sha256:cc985f61e92a80cbc59a150c5758becb75f8eddbbbaf17d46374ede3cd01a51f\n", + "#30 writing layer sha256:cc985f61e92a80cbc59a150c5758becb75f8eddbbbaf17d46374ede3cd01a51f 0.5s done\n", + "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7\n", + "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", + "#30 writing layer sha256:df3589199e830d446e82feab6d40fac58781a5bd8b2d206f25b85a317b994f93 0.0s done\n", + "#30 writing layer sha256:e434bbf389a48c6e211eca75d5ca50839cb622b1ba3a36c6b35d600e53e16b21 done\n", + "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", + "#30 writing layer sha256:e5d1792b50654fc7f0eed206f4c91e95f8e4b107554a7296502020c7029a76b6\n", + "#30 writing layer sha256:e5d1792b50654fc7f0eed206f4c91e95f8e4b107554a7296502020c7029a76b6 1.3s done\n", + "#30 preparing build cache for export 2.2s done\n", + "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", + "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", + "#30 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", + "#30 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", + "#30 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", + "#30 writing config sha256:217441004720a68ddf80261db2a5b316ddba5c5bc611403e7439f6d0f6d2055d 0.0s done\n", + "#30 writing cache manifest sha256:eb0660732980435a67eb754f67f1d7b91fa92f577670a600c7a8a50a85b8f872 0.0s done\n", + "#30 DONE 2.2s\n", + "[2024-04-10 16:37:31,408] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1810,7 +1704,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 69287893ca54 5 minutes ago 15.6GB\n" + "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 47a95542f89e About a minute ago 17.5GB\n" ] } ], @@ -1836,20 +1730,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-11-15 19:26:07,374] [INFO] (runner) - Checking dependencies...\n", - "[2023-11-15 19:26:07,375] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-10 16:37:33,094] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-10 16:37:33,094] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "\n", + "[2024-04-10 16:37:33,094] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2023-11-15 19:26:07,375] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-10 16:37:33,094] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2023-11-15 19:26:07,375] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-10 16:37:33,168] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmp96catisy/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmp96catisy/pkg.json\n", + "[2024-04-10 16:37:33,777] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2023-11-15 19:26:07,454] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmp7n6pc6u1/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmp7n6pc6u1/pkg.json\n", - "[2023-11-15 19:26:07,741] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-10 16:37:33,778] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2023-11-15 19:26:07,994] [INFO] (common) - Launching container (c634a4b0db9a) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: quizzical_hopper\n", + "[2024-04-10 16:37:33,934] [INFO] (common) - Launching container (4b3bba81606f) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: flamboyant_jepsen\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1858,49 +1754,50 @@ " ipc mode: host\n", " shared memory size: 67108864\n", " devices: \n", - "2023-11-16 03:26:08 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + " group_add: 44\n", + "2024-04-10 23:37:34 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", "\n", - "[info] [app_driver.cpp:1025] Launching the driver/health checking service\n", + "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:210] Creating context\n", + "[info] [gxf_executor.cpp:211] Creating context\n", "\n", - "[info] [server.cpp:73] Health checking server listening on 0.0.0.0:8777\n", + "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "\n", "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", "\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", "\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", + "/home/holoscan/.local/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", "\n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", + " warnings.warn(msg)\n", "\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", + "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", - "[info] [gxf_executor.cpp:229] Destroying context\n", + "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", "\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", "\n", - " warnings.warn(msg)\n", + "[info] [gxf_executor.cpp:230] Destroying context\n", "\n", "AbdomenCT\n", "\n", - "[2023-11-15 19:26:14,982] [INFO] (common) - Container 'quizzical_hopper'(c634a4b0db9a) exited.\n" + "[2024-04-10 16:37:42,228] [INFO] (common) - Container 'flamboyant_jepsen'(4b3bba81606f) exited.\n" ] } ], @@ -1962,7 +1859,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/notebooks/tutorials/03_segmentation_app.ipynb b/notebooks/tutorials/03_segmentation_app.ipynb index 11fc08ce..946e2420 100644 --- a/notebooks/tutorials/03_segmentation_app.ipynb +++ b/notebooks/tutorials/03_segmentation_app.ipynb @@ -132,23 +132,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (4.7.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (3.12.2)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (2.31.0)\n", - "Requirement already satisfied: six in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (1.16.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.66.1)\n", - "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.12.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from beautifulsoup4->gdown) (2.4.1)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.2.0)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.4)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2.0.4)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2023.7.22)\n", - "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", + "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.3)\n", + "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.28.2)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", + "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.6)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", + "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "Downloading...\n", - "From (uriginal): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", - "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=583abdda-51b2-449f-b609-992374b4ac1a\n", + "From (original): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", + "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=03efbee4-6b67-4413-8b8e-522d9c7cc472\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_spleen_seg_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:01<00:00, 56.1MB/s]\n", + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 101MB/s]\n", "Archive: ai_spleen_seg_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -745,189 +747,95 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2023-08-30 00:58:15,457] [INFO] (root) - Parsed args: Namespace(argv=[], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-08-30 00:58:15,465] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2023-08-30 00:58:15,466] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", - "[info] [gxf_executor.cpp:210] Creating context\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 16:41:09,106] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-10 16:41:09,114] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2024-04-10 16:41:09,116] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", + "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[info] [greedy_scheduler.cpp:190] Scheduling 6 entities\n", - "[2023-08-30 00:58:15,557] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2023-08-30 00:58:15,886] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2023-08-30 00:58:15,887] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 16:41:09,164] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 16:41:09,742] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 16:41:09,743] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2023-08-30 00:58:15,888] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 00:58:15,889] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2023-08-30 00:58:15,889] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2023-08-30 00:58:15,890] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 00:58:15,891] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2023-08-30 00:58:15,891] [INFO] (root) - Series attribute Modality value: CT\n", - "[2023-08-30 00:58:15,892] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 00:58:15,892] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2023-08-30 00:58:15,893] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2023-08-30 00:58:15,893] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 00:58:15,894] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2023-08-30 00:58:15,894] [INFO] (root) - Series attribute ImageType value: None\n", - "[2023-08-30 00:58:15,895] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "[2023-08-30 00:58:16,110] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2023-08-30 00:58:16,111] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2023-08-30 00:58:16,112] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2023-08-30 00:58:16,112] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2023-08-30 00:58:16,113] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2023-08-30 00:58:16,114] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2023-08-30 00:58:16,115] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2023-08-30 00:58:16,116] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2023-08-30 00:58:16,116] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2023-08-30 00:58:16,117] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2023-08-30 00:58:16,117] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2023-08-30 00:58:16,118] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2023-08-30 00:58:16,119] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2023-08-30 00:58:16,119] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2023-08-30 00:58:16,120] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2024-04-10 16:41:09,744] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 16:41:09,745] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-10 16:41:09,746] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 16:41:09,747] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 16:41:09,748] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 16:41:09,749] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 16:41:09,750] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 16:41:09,751] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 16:41:09,753] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 16:41:09,754] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 16:41:09,755] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2024-04-10 16:41:09,756] [INFO] (root) - Series attribute ImageType value: None\n", + "[2024-04-10 16:41:09,757] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 16:41:10,007] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2024-04-10 16:41:10,009] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2024-04-10 16:41:10,009] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2024-04-10 16:41:10,010] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2024-04-10 16:41:10,011] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2024-04-10 16:41:10,012] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2024-04-10 16:41:10,012] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2024-04-10 16:41:10,013] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2024-04-10 16:41:10,014] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2024-04-10 16:41:10,015] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2024-04-10 16:41:10,015] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2024-04-10 16:41:10,016] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2024-04-10 16:41:10,017] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2024-04-10 16:41:10,018] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2024-04-10 16:41:10,019] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2023-08-30 00:58:16,121] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2024-04-10 16:41:10,020] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2023-08-30 00:58:16,122] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2023-08-30 00:58:16,123] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2023-08-30 00:58:16,123] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2023-08-30 00:58:16,124] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2023-08-30 00:58:16,124] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2023-08-30 00:58:16,125] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2023-08-30 00:58:16,125] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" + "[2024-04-10 16:41:10,021] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2024-04-10 16:41:10,022] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2024-04-10 16:41:10,023] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2024-04-10 16:41:10,025] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2024-04-10 16:41:10,026] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2024-04-10 16:41:10,027] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2024-04-10 16:41:10,029] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2023-08-30 00:58:16,933 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2023-08-30 00:58:23,738 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" + "2024-04-10 16:41:10,797 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2024-04-10 16:41:17,104 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[2023-08-30 00:58:25,340] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2023-08-30 00:58:25,348] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2024-04-10 16:41:19,060] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2024-04-10 16:41:19,067] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2023-08-30 00:58:27,813] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - " warnings.warn(msg)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - " warnings.warn(msg)\n", - "[2023-08-30 00:58:27,816] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "[2023-08-30 00:58:27,818] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "[2023-08-30 00:58:27,819] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "[2023-08-30 00:58:27,820] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "[2023-08-30 00:58:27,821] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "[2023-08-30 00:58:27,822] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "[2023-08-30 00:58:27,823] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "[2023-08-30 00:58:27,825] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "[2023-08-30 00:58:27,826] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "[2023-08-30 00:58:27,827] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "[2023-08-30 00:58:27,828] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "[2023-08-30 00:58:27,829] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "[2023-08-30 00:58:27,830] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "[2023-08-30 00:58:27,833] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "[2023-08-30 00:58:27,834] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "[2023-08-30 00:58:27,836] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "[2023-08-30 00:58:27,837] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "[2023-08-30 00:58:27,838] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "[2023-08-30 00:58:27,839] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "[2023-08-30 00:58:27,841] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "[2023-08-30 00:58:27,842] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "[2023-08-30 00:58:27,843] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "[2023-08-30 00:58:27,845] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "[2023-08-30 00:58:27,846] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "[2023-08-30 00:58:27,848] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "[2023-08-30 00:58:27,849] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "[2023-08-30 00:58:27,850] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "[2023-08-30 00:58:27,851] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "[2023-08-30 00:58:27,853] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "[2023-08-30 00:58:27,854] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "[2023-08-30 00:58:27,856] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "[2023-08-30 00:58:27,857] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "[2023-08-30 00:58:27,858] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "[2023-08-30 00:58:27,860] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "[2023-08-30 00:58:27,861] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "[2023-08-30 00:58:27,863] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "[2023-08-30 00:58:27,864] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "[2023-08-30 00:58:27,866] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "[2023-08-30 00:58:27,867] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "[2023-08-30 00:58:27,869] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "[2023-08-30 00:58:27,871] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "[2023-08-30 00:58:27,872] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "[2023-08-30 00:58:27,874] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "[2023-08-30 00:58:27,875] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "[2023-08-30 00:58:27,877] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "[2023-08-30 00:58:27,879] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "[2023-08-30 00:58:27,881] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "[2023-08-30 00:58:27,882] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "[2023-08-30 00:58:27,884] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "[2023-08-30 00:58:27,886] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "[2023-08-30 00:58:27,888] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "[2023-08-30 00:58:27,890] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "[2023-08-30 00:58:27,892] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "[2023-08-30 00:58:27,894] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "[2023-08-30 00:58:27,896] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "[2023-08-30 00:58:27,898] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "[2023-08-30 00:58:27,900] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "[2023-08-30 00:58:27,903] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "[2023-08-30 00:58:27,908] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "[2023-08-30 00:58:27,912] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "[2023-08-30 00:58:27,916] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "[2023-08-30 00:58:27,918] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "[2023-08-30 00:58:27,921] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "[2023-08-30 00:58:27,923] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "[2023-08-30 00:58:27,925] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "[2023-08-30 00:58:27,927] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "[2023-08-30 00:58:27,929] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "[2023-08-30 00:58:27,931] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "[2023-08-30 00:58:27,934] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "[2023-08-30 00:58:27,936] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "[2023-08-30 00:58:27,938] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "[2023-08-30 00:58:27,940] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "[2023-08-30 00:58:27,942] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "[2023-08-30 00:58:27,944] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "[2023-08-30 00:58:27,946] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "[2023-08-30 00:58:27,948] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "[2023-08-30 00:58:27,950] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "[2023-08-30 00:58:27,952] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "[2023-08-30 00:58:27,956] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "[2023-08-30 00:58:27,957] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "[2023-08-30 00:58:27,959] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "[2023-08-30 00:58:27,960] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "[2023-08-30 00:58:27,962] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "[2023-08-30 00:58:27,964] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "[2023-08-30 00:58:27,965] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "[2023-08-30 00:58:27,967] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "[2023-08-30 00:58:27,968] [INFO] (highdicom.seg.sop) - add plane #87 for segment #1\n", - "[2023-08-30 00:58:28,028] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 00:58:28,029] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2023-08-30 00:58:28,030] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 00:58:28,031] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2023-08-30 00:58:28,032] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2023-08-30 00:58:28,033] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 00:58:28,034] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2023-08-30 00:58:28,035] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2023-08-30 00:58:28,036] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 16:41:20,496] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 16:41:20,497] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 16:41:20,498] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 16:41:20,499] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 16:41:20,500] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 16:41:20,501] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 16:41:20,502] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 16:41:20,503] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 16:41:20,503] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[2023-08-30 00:58:28,138] [INFO] (__main__.AISpleenSegApp) - End run\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n" + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[2024-04-10 16:41:20,610] [INFO] (__main__.AISpleenSegApp) - End run\n" ] } ], @@ -1366,178 +1274,84 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 00:58:35,056] [INFO] (root) - Parsed args: Namespace(argv=['my_app'], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-08-30 00:58:35,058] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2023-08-30 00:58:35,058] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:210] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1741] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1771] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 16:41:25,305] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2024-04-10 16:41:25,472] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2024-04-10 16:41:25,472] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 6 entities\n", - "[2023-08-30 00:58:35,114] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2023-08-30 00:58:35,624] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2023-08-30 00:58:35,624] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 16:41:25,505] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 16:41:25,850] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 16:41:25,850] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2023-08-30 00:58:35,624] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - Series attribute Modality value: CT\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - Series attribute ImageType value: None\n", - "[2023-08-30 00:58:35,625] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2023-08-30 00:58:35,841] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2023-08-30 00:58:35,842] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2024-04-10 16:41:25,850] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 16:41:25,850] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-10 16:41:25,850] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 16:41:25,850] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 16:41:25,851] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 16:41:25,851] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 16:41:25,851] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 16:41:25,851] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 16:41:25,851] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 16:41:25,851] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 16:41:25,851] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2024-04-10 16:41:25,851] [INFO] (root) - Series attribute ImageType value: None\n", + "[2024-04-10 16:41:25,851] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2023-08-30 00:58:35,842] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2023-08-30 00:58:35,842] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2023-08-30 00:58:35,842] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2023-08-30 00:58:35,842] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2023-08-30 00:58:35,842] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2023-08-30 00:58:35,842] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2023-08-30 00:58:35,842] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2023-08-30 00:58:35,842] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", - "2023-08-30 00:58:36,678 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2023-08-30 00:58:42,872 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", - "[2023-08-30 00:58:44,629] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2023-08-30 00:58:44,635] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "2024-04-10 16:41:27,452 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2024-04-10 16:41:34,092 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "[2024-04-10 16:41:35,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2024-04-10 16:41:35,720] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2023-08-30 00:58:47,369] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - " warnings.warn(msg)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - " warnings.warn(msg)\n", - "[2023-08-30 00:58:47,371] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "[2023-08-30 00:58:47,372] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "[2023-08-30 00:58:47,373] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "[2023-08-30 00:58:47,374] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "[2023-08-30 00:58:47,374] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "[2023-08-30 00:58:47,375] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "[2023-08-30 00:58:47,376] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "[2023-08-30 00:58:47,377] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "[2023-08-30 00:58:47,378] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "[2023-08-30 00:58:47,378] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "[2023-08-30 00:58:47,379] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "[2023-08-30 00:58:47,380] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "[2023-08-30 00:58:47,381] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "[2023-08-30 00:58:47,382] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "[2023-08-30 00:58:47,382] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "[2023-08-30 00:58:47,383] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "[2023-08-30 00:58:47,384] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "[2023-08-30 00:58:47,385] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "[2023-08-30 00:58:47,385] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "[2023-08-30 00:58:47,386] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "[2023-08-30 00:58:47,387] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "[2023-08-30 00:58:47,387] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "[2023-08-30 00:58:47,388] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "[2023-08-30 00:58:47,389] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "[2023-08-30 00:58:47,390] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "[2023-08-30 00:58:47,390] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "[2023-08-30 00:58:47,391] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "[2023-08-30 00:58:47,392] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "[2023-08-30 00:58:47,393] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "[2023-08-30 00:58:47,393] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "[2023-08-30 00:58:47,394] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "[2023-08-30 00:58:47,395] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "[2023-08-30 00:58:47,396] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "[2023-08-30 00:58:47,397] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "[2023-08-30 00:58:47,398] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "[2023-08-30 00:58:47,399] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "[2023-08-30 00:58:47,400] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "[2023-08-30 00:58:47,401] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "[2023-08-30 00:58:47,401] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "[2023-08-30 00:58:47,402] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "[2023-08-30 00:58:47,403] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "[2023-08-30 00:58:47,403] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "[2023-08-30 00:58:47,404] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "[2023-08-30 00:58:47,404] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "[2023-08-30 00:58:47,405] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "[2023-08-30 00:58:47,405] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "[2023-08-30 00:58:47,406] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "[2023-08-30 00:58:47,407] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "[2023-08-30 00:58:47,407] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "[2023-08-30 00:58:47,408] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "[2023-08-30 00:58:47,409] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "[2023-08-30 00:58:47,410] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "[2023-08-30 00:58:47,410] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "[2023-08-30 00:58:47,411] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "[2023-08-30 00:58:47,411] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "[2023-08-30 00:58:47,412] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "[2023-08-30 00:58:47,413] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "[2023-08-30 00:58:47,413] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "[2023-08-30 00:58:47,414] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "[2023-08-30 00:58:47,414] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "[2023-08-30 00:58:47,415] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "[2023-08-30 00:58:47,415] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "[2023-08-30 00:58:47,416] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "[2023-08-30 00:58:47,417] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "[2023-08-30 00:58:47,417] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "[2023-08-30 00:58:47,418] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "[2023-08-30 00:58:47,418] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "[2023-08-30 00:58:47,419] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "[2023-08-30 00:58:47,420] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "[2023-08-30 00:58:47,420] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "[2023-08-30 00:58:47,421] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "[2023-08-30 00:58:47,421] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "[2023-08-30 00:58:47,422] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "[2023-08-30 00:58:47,423] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "[2023-08-30 00:58:47,423] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "[2023-08-30 00:58:47,424] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "[2023-08-30 00:58:47,424] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "[2023-08-30 00:58:47,425] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "[2023-08-30 00:58:47,426] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "[2023-08-30 00:58:47,426] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "[2023-08-30 00:58:47,427] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "[2023-08-30 00:58:47,428] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "[2023-08-30 00:58:47,429] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "[2023-08-30 00:58:47,430] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "[2023-08-30 00:58:47,430] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "[2023-08-30 00:58:47,431] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "[2023-08-30 00:58:47,432] [INFO] (highdicom.seg.sop) - add plane #87 for segment #1\n", - "[2023-08-30 00:58:47,528] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 00:58:47,528] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2023-08-30 00:58:47,528] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 00:58:47,528] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2023-08-30 00:58:47,529] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2023-08-30 00:58:47,529] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 00:58:47,529] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2023-08-30 00:58:47,529] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2023-08-30 00:58:47,529] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 16:41:37,387] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 16:41:37,387] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 16:41:37,387] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 16:41:37,387] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 16:41:37,387] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 16:41:37,388] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 16:41:37,388] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 16:41:37,388] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 16:41:37,388] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[2023-08-30 00:58:47,626] [INFO] (app.AISpleenSegApp) - End run\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:229] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[2024-04-10 16:41:37,477] [INFO] (app.AISpleenSegApp) - End run\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:230] Destroying context\n" ] } ], @@ -1556,7 +1370,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.70000117896150756142576971005940679.dcm\n", + "1.2.826.0.1.3680043.10.511.3.12733408477402210746640758069824301.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", @@ -1656,21 +1470,21 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 00:59:31,113] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2023-08-30 00:59:31,114] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2023-08-30 00:59:31,114] [INFO] (packager) - Scanning for models in {models_path}...\n", - "[2023-08-30 00:59:31,115] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2023-08-30 00:59:31,115] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2023-08-30 00:59:31,117] [INFO] (packager) - Generating app.json...\n", - "[2023-08-30 00:59:31,117] [INFO] (packager) - Generating pkg.json...\n", - "[2023-08-30 00:59:31,118] [DEBUG] (common) - \n", + "[2024-04-10 16:41:40,386] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2024-04-10 16:41:40,386] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2024-04-10 16:41:40,386] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2024-04-10 16:41:40,386] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2024-04-10 16:41:40,386] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2024-04-10 16:41:40,387] [INFO] (packager) - Generating app.json...\n", + "[2024-04-10 16:41:40,387] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-10 16:41:40,394] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1698,21 +1512,21 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.6.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2023-08-30 00:59:31,118] [DEBUG] (common) - \n", + "[2024-04-10 16:41:40,394] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", " \"applicationRoot\": \"/opt/holoscan/app\",\n", " \"modelRoot\": \"/opt/holoscan/models\",\n", " \"models\": {\n", - " \"model\": \"/opt/holoscan/models\"\n", + " \"model\": \"/opt/holoscan/models/model\"\n", " },\n", " \"resources\": {\n", " \"cpu\": 1,\n", @@ -1720,15 +1534,16 @@ " \"memory\": \"1Gi\",\n", " \"gpuMemory\": \"6Gi\"\n", " },\n", - " \"version\": 1.0\n", + " \"version\": 1.0,\n", + " \"platformConfig\": \"dgpu\"\n", "}\n", "================ End pkg.json ================\n", " \n", - "[2023-08-30 00:59:31,179] [DEBUG] (packager.builder) - \n", + "[2024-04-10 16:41:40,461] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -1744,11 +1559,13 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"0.6.0\"\n", + "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "\n", "\n", "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", @@ -1773,7 +1590,7 @@ "\n", "\n", "\n", - "RUN groupadd -g $GID $UNAME\n", + "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", "RUN chown -R holoscan /var/holoscan/input \n", @@ -1798,13 +1615,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI org\n", - "RUN pip install holoscan==0.6.0\n", - "\n", + "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", + "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", "\n", "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", "\n", "\n", "\n", @@ -1820,312 +1636,210 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2023-08-30 00:59:31,179] [INFO] (packager.builder) - \n", + "[2024-04-10 16:41:40,461] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - " Build Image: N/A \n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoiscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + " Holoscan SDK Package: pypi.org\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 0.6.0\n", + " SDK Version: 1.0.3\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2023-08-30 00:59:31,807] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2023-08-30 00:59:31,808] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2024-04-10 16:41:41,020] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-10 16:41:41,021] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", + "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.67kB done\n", + "#1 transferring dockerfile: 2.80kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load .dockerignore\n", - "#2 transferring context: 1.79kB 0.0s done\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", "#2 DONE 0.1s\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#3 DONE 0.6s\n", + "#3 [internal] load .dockerignore\n", + "#3 transferring context: 1.79kB done\n", + "#3 DONE 0.1s\n", "\n", "#4 [internal] load build context\n", "#4 DONE 0.0s\n", "\n", - "#5 importing cache manifest from local:8636426000862419753\n", + "#5 importing cache manifest from local:6394528277147153176\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 [ 1/22] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc 0.0s done\n", - "#6 DONE 0.0s\n", + "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.0s done\n", + "#6 DONE 0.1s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", "#7 DONE 0.9s\n", "\n", "#4 [internal] load build context\n", - "#4 transferring context: 19.57MB 0.1s done\n", + "#4 transferring context: 19.56MB 0.1s done\n", "#4 DONE 0.2s\n", "\n", - "#8 [ 7/22] RUN chown -R holoscan /var/holoscan/input\n", + "#8 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#8 CACHED\n", "\n", - "#9 [12/22] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#9 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#9 CACHED\n", "\n", - "#10 [10/22] COPY ./tools /var/holoscan/tools\n", + "#10 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", "#10 CACHED\n", "\n", - "#11 [14/22] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#11 [11/21] RUN chmod +x /var/holoscan/tools\n", "#11 CACHED\n", "\n", - "#12 [ 5/22] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#12 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#12 CACHED\n", "\n", - "#13 [13/22] RUN pip install --upgrade pip\n", + "#13 [ 9/21] WORKDIR /var/holoscan\n", "#13 CACHED\n", "\n", - "#14 [ 6/22] RUN chown -R holoscan /var/holoscan\n", + "#14 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#14 CACHED\n", "\n", - "#15 [ 9/22] WORKDIR /var/holoscan\n", + "#15 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", "#15 CACHED\n", "\n", - "#16 [ 4/22] RUN groupadd -g 1000 holoscan\n", + "#16 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#16 CACHED\n", "\n", - "#17 [ 3/22] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#17 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", "#17 CACHED\n", "\n", - "#18 [ 8/22] RUN chown -R holoscan /var/holoscan/output\n", + "#18 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#18 CACHED\n", "\n", - "#19 [ 2/22] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#19 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#19 CACHED\n", "\n", - "#20 [11/22] RUN chmod +x /var/holoscan/tools\n", + "#20 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#20 CACHED\n", "\n", - "#21 [15/22] RUN pip install holoscan==0.6.0\n", + "#21 [17/21] COPY ./models /opt/holoscan/models\n", "#21 CACHED\n", "\n", - "#22 [16/22] COPY ./monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", - "#22 DONE 0.3s\n", - "\n", - "#23 [17/22] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", - "#23 0.878 Defaulting to user installation because normal site-packages is not writeable\n", - "#23 0.949 Processing /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", - "#23 1.347 Collecting numpy>=1.21.6 (from monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 1.347 Obtaining dependency information for numpy>=1.21.6 from https://files.pythonhosted.org/packages/98/5d/5738903efe0ecb73e51eb44feafba32bdba2081263d40c5043568ff60faf/numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", - "#23 1.394 Downloading numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.6 kB)\n", - "#23 1.409 Requirement already satisfied: networkx>=2.4 in /home/holoscan/.local/lib/python3.8/site-packages (from monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty) (3.1)\n", - "#23 1.411 Requirement already satisfied: holoscan>=0.5.0 in /home/holoscan/.local/lib/python3.8/site-packages (from monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty) (0.6.0)\n", - "#23 1.475 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 1.484 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#23 1.557 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 1.557 Obtaining dependency information for typeguard>=3.0.0 from https://files.pythonhosted.org/packages/84/99/bfa960dcc0386e240f823f7f4b1b028a18126a72216febf892f84b872444/typeguard-4.1.3-py3-none-any.whl.metadata\n", - "#23 1.566 Downloading typeguard-4.1.3-py3-none-any.whl.metadata (3.7 kB)\n", - "#23 1.634 Collecting cloudpickle~=2.2 (from holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 1.642 Downloading cloudpickle-2.2.1-py3-none-any.whl (25 kB)\n", - "#23 1.738 Collecting python-on-whales~=0.60 (from holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 1.738 Obtaining dependency information for python-on-whales~=0.60 from https://files.pythonhosted.org/packages/b1/3b/84494b632d8964e51cb06db89988f2155e1ea62537ba0d70d974fc2a8967/python_on_whales-0.64.2-py3-none-any.whl.metadata\n", - "#23 1.751 Downloading python_on_whales-0.64.2-py3-none-any.whl.metadata (16 kB)\n", - "#23 1.825 Collecting Jinja2~=3.1 (from holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 1.835 Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB)\n", - "#23 1.854 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.1/133.1 kB 8.7 MB/s eta 0:00:00\n", - "#23 1.914 Collecting packaging~=23.1 (from holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 1.923 Downloading packaging-23.1-py3-none-any.whl (48 kB)\n", - "#23 1.936 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.9/48.9 kB 3.9 MB/s eta 0:00:00\n", - "#23 2.019 Collecting pyyaml~=6.0 (from holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 2.019 Obtaining dependency information for pyyaml~=6.0 from https://files.pythonhosted.org/packages/c8/6b/6600ac24725c7388255b2f5add93f91e58a5d7efaf4af244fdbcc11a541b/PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", - "#23 2.035 Downloading PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#23 2.116 Collecting requests~=2.28 (from holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 2.117 Obtaining dependency information for requests~=2.28 from https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl.metadata\n", - "#23 2.125 Downloading requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)\n", - "#23 2.134 Requirement already satisfied: pip>=20.2 in /home/holoscan/.local/lib/python3.8/site-packages (from holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty) (23.2.1)\n", - "#23 2.135 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.8/site-packages (from holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty) (0.0.4)\n", - "#23 2.253 Collecting importlib-metadata>=3.6 (from typeguard>=3.0.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 2.254 Obtaining dependency information for importlib-metadata>=3.6 from https://files.pythonhosted.org/packages/cc/37/db7ba97e676af155f5fcb1a35466f446eadc9104e25b83366e8088c9c926/importlib_metadata-6.8.0-py3-none-any.whl.metadata\n", - "#23 2.262 Downloading importlib_metadata-6.8.0-py3-none-any.whl.metadata (5.1 kB)\n", - "#23 2.317 Collecting typing-extensions>=4.7.0 (from typeguard>=3.0.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 2.318 Obtaining dependency information for typing-extensions>=4.7.0 from https://files.pythonhosted.org/packages/ec/6b/63cc3df74987c36fe26157ee12e09e8f9db4de771e0f3404263117e75b95/typing_extensions-4.7.1-py3-none-any.whl.metadata\n", - "#23 2.331 Downloading typing_extensions-4.7.1-py3-none-any.whl.metadata (3.1 kB)\n", - "#23 2.365 Requirement already satisfied: zipp>=0.5 in /home/holoscan/.local/lib/python3.8/site-packages (from importlib-metadata>=3.6->typeguard>=3.0.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty) (3.16.2)\n", - "#23 2.458 Collecting MarkupSafe>=2.0 (from Jinja2~=3.1->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 2.459 Obtaining dependency information for MarkupSafe>=2.0 from https://files.pythonhosted.org/packages/de/e2/32c14301bb023986dff527a49325b6259cab4ebb4633f69de54af312fc45/MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", - "#23 2.467 Downloading MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.0 kB)\n", - "#23 2.706 Collecting pydantic!=2.0.*,<3,>=1.5 (from python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 2.707 Obtaining dependency information for pydantic!=2.0.*,<3,>=1.5 from https://files.pythonhosted.org/packages/82/06/fafdc75e48b248eff364b4249af4bcc6952225e8f20e8205820afc66e88e/pydantic-2.3.0-py3-none-any.whl.metadata\n", - "#23 2.720 Downloading pydantic-2.3.0-py3-none-any.whl.metadata (148 kB)\n", - "#23 2.734 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 148.8/148.8 kB 14.8 MB/s eta 0:00:00\n", - "#23 2.832 Collecting tqdm (from python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 2.832 Obtaining dependency information for tqdm from https://files.pythonhosted.org/packages/00/e5/f12a80907d0884e6dff9c16d0c0114d81b8cd07dc3ae54c5e962cc83037e/tqdm-4.66.1-py3-none-any.whl.metadata\n", - "#23 2.840 Downloading tqdm-4.66.1-py3-none-any.whl.metadata (57 kB)\n", - "#23 2.856 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.6/57.6 kB 4.5 MB/s eta 0:00:00\n", - "#23 2.926 Collecting typer>=0.4.1 (from python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 2.933 Downloading typer-0.9.0-py3-none-any.whl (45 kB)\n", - "#23 2.945 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.9/45.9 kB 4.4 MB/s eta 0:00:00\n", - "#23 3.107 Collecting charset-normalizer<4,>=2 (from requests~=2.28->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 3.107 Obtaining dependency information for charset-normalizer<4,>=2 from https://files.pythonhosted.org/packages/cb/e7/5e43745003bf1f90668c7be23fc5952b3a2b9c2558f16749411c18039b36/charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", - "#23 3.115 Downloading charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (31 kB)\n", - "#23 3.166 Collecting idna<4,>=2.5 (from requests~=2.28->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 3.174 Downloading idna-3.4-py3-none-any.whl (61 kB)\n", - "#23 3.186 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.5/61.5 kB 6.2 MB/s eta 0:00:00\n", - "#23 3.254 Collecting urllib3<3,>=1.21.1 (from requests~=2.28->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 3.254 Obtaining dependency information for urllib3<3,>=1.21.1 from https://files.pythonhosted.org/packages/9b/81/62fd61001fa4b9d0df6e31d47ff49cfa9de4af03adecf339c7bc30656b37/urllib3-2.0.4-py3-none-any.whl.metadata\n", - "#23 3.264 Downloading urllib3-2.0.4-py3-none-any.whl.metadata (6.6 kB)\n", - "#23 3.326 Collecting certifi>=2017.4.17 (from requests~=2.28->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 3.326 Obtaining dependency information for certifi>=2017.4.17 from https://files.pythonhosted.org/packages/4c/dd/2234eab22353ffc7d94e8d13177aaa050113286e93e7b40eae01fbf7c3d9/certifi-2023.7.22-py3-none-any.whl.metadata\n", - "#23 3.334 Downloading certifi-2023.7.22-py3-none-any.whl.metadata (2.2 kB)\n", - "#23 3.352 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.8/site-packages (from wheel-axle-runtime<1.0->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty) (3.12.2)\n", - "#23 3.415 Collecting annotated-types>=0.4.0 (from pydantic!=2.0.*,<3,>=1.5->python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 3.415 Obtaining dependency information for annotated-types>=0.4.0 from https://files.pythonhosted.org/packages/d8/f0/a2ee543a96cc624c35a9086f39b1ed2aa403c6d355dfe47a11ee5c64a164/annotated_types-0.5.0-py3-none-any.whl.metadata\n", - "#23 3.423 Downloading annotated_types-0.5.0-py3-none-any.whl.metadata (11 kB)\n", - "#23 4.197 Collecting pydantic-core==2.6.3 (from pydantic!=2.0.*,<3,>=1.5->python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 4.198 Obtaining dependency information for pydantic-core==2.6.3 from https://files.pythonhosted.org/packages/b0/88/43c79099fe0bcf6680c0782eb1b08069f024a08e114121b6704c9b26355a/pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", - "#23 4.208 Downloading pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.5 kB)\n", - "#23 4.301 Collecting click<9.0.0,>=7.1.1 (from typer>=0.4.1->python-on-whales~=0.60->holoscan>=0.5.0->monai-deploy-app-sdk==0.5.1+22.g029f8bc.dirty)\n", - "#23 4.301 Obtaining dependency information for click<9.0.0,>=7.1.1 from https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl.metadata\n", - "#23 4.309 Downloading click-8.1.7-py3-none-any.whl.metadata (3.0 kB)\n", - "#23 4.455 Downloading numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.3 MB)\n", - "#23 4.699 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.3/17.3 MB 57.3 MB/s eta 0:00:00\n", - "#23 4.709 Downloading typeguard-4.1.3-py3-none-any.whl (33 kB)\n", - "#23 4.725 Downloading importlib_metadata-6.8.0-py3-none-any.whl (22 kB)\n", - "#23 4.748 Downloading python_on_whales-0.64.2-py3-none-any.whl (104 kB)\n", - "#23 4.763 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.9/104.9 kB 9.1 MB/s eta 0:00:00\n", - "#23 4.776 Downloading PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (736 kB)\n", - "#23 4.803 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 736.6/736.6 kB 32.5 MB/s eta 0:00:00\n", - "#23 4.812 Downloading requests-2.31.0-py3-none-any.whl (62 kB)\n", - "#23 4.823 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.6/62.6 kB 6.3 MB/s eta 0:00:00\n", - "#23 4.836 Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB)\n", - "#23 4.867 Downloading certifi-2023.7.22-py3-none-any.whl (158 kB)\n", - "#23 4.879 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 158.3/158.3 kB 15.7 MB/s eta 0:00:00\n", - "#23 4.896 Downloading charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199 kB)\n", - "#23 4.909 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.1/199.1 kB 19.5 MB/s eta 0:00:00\n", - "#23 4.917 Downloading MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n", - "#23 4.944 Downloading pydantic-2.3.0-py3-none-any.whl (374 kB)\n", - "#23 4.958 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 374.5/374.5 kB 31.9 MB/s eta 0:00:00\n", - "#23 4.982 Downloading pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB)\n", - "#23 5.022 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 51.7 MB/s eta 0:00:00\n", - "#23 5.032 Downloading urllib3-2.0.4-py3-none-any.whl (123 kB)\n", - "#23 5.047 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.9/123.9 kB 10.8 MB/s eta 0:00:00\n", - "#23 5.061 Downloading tqdm-4.66.1-py3-none-any.whl (78 kB)\n", - "#23 5.074 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.3/78.3 kB 7.8 MB/s eta 0:00:00\n", - "#23 5.082 Downloading annotated_types-0.5.0-py3-none-any.whl (11 kB)\n", - "#23 5.098 Downloading click-8.1.7-py3-none-any.whl (97 kB)\n", - "#23 5.109 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.9/97.9 kB 10.0 MB/s eta 0:00:00\n", - "#23 5.502 Installing collected packages: urllib3, typing-extensions, tqdm, pyyaml, packaging, numpy, MarkupSafe, importlib-metadata, idna, colorama, cloudpickle, click, charset-normalizer, certifi, typer, typeguard, requests, pydantic-core, Jinja2, annotated-types, pydantic, python-on-whales, monai-deploy-app-sdk\n", - "#23 8.455 Successfully installed Jinja2-3.1.2 MarkupSafe-2.1.3 annotated-types-0.5.0 certifi-2023.7.22 charset-normalizer-3.2.0 click-8.1.7 cloudpickle-2.2.1 colorama-0.4.6 idna-3.4 importlib-metadata-6.8.0 monai-deploy-app-sdk-0.5.1+22.g029f8bc.dirty numpy-1.24.4 packaging-23.1 pydantic-2.3.0 pydantic-core-2.6.3 python-on-whales-0.64.2 pyyaml-6.0.1 requests-2.31.0 tqdm-4.66.1 typeguard-4.1.3 typer-0.9.0 typing-extensions-4.7.1 urllib3-2.0.4\n", - "#23 DONE 9.2s\n", - "\n", - "#24 [18/22] COPY ./models /opt/holoscan/models\n", - "#24 DONE 0.2s\n", - "\n", - "#25 [19/22] COPY ./map/app.json /etc/holoscan/app.json\n", - "#25 DONE 0.1s\n", - "\n", - "#26 [20/22] COPY ./app.config /var/holoscan/app.yaml\n", - "#26 DONE 0.1s\n", - "\n", - "#27 [21/22] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#27 DONE 0.1s\n", - "\n", - "#28 [22/22] COPY ./app /opt/holoscan/app\n", - "#28 DONE 0.1s\n", - "\n", - "#29 exporting to docker image format\n", - "#29 exporting layers\n", - "#29 exporting layers 3.9s done\n", - "#29 exporting manifest sha256:f5c67a40a66fa6ccdc2781d51051812f7717c694918f109890a1198817c43f22 0.0s done\n", - "#29 exporting config sha256:17be984e3846abefdab5e9fc77950d42632ca87ff47628da66e67a2dff7ebd81 0.0s done\n", - "#29 sending tarball\n", - "#29 ...\n", - "\n", - "#30 importing to docker\n", - "#30 DONE 2.8s\n", - "\n", - "#29 exporting to docker image format\n", - "#29 sending tarball 62.0s done\n", - "#29 DONE 66.0s\n", - "\n", - "#31 exporting content cache\n", - "#31 preparing build cache for export\n", - "#31 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d\n", - "#31 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d 0.0s done\n", - "#31 writing layer sha256:0ce020987cfa5cd1654085af3bb40779634eb3d792c4a4d6059036463ae0040d done\n", - "#31 writing layer sha256:0f4bc5775dfef844ad94316d6cba08f7430019a5986278e18978fdf8fd6370d0 0.0s done\n", - "#31 writing layer sha256:0f65089b284381bf795d15b1a186e2a8739ea957106fa526edef0d738e7cda70 done\n", - "#31 writing layer sha256:12a47450a9f9cc5d4edab65d0f600dbbe8b23a1663b0b3bb2c481d40e074b580 done\n", - "#31 writing layer sha256:1de965777e2e37c7fabe00bdbf3d0203ca83ed30a71a5479c3113fe4fc48c4bb done\n", - "#31 writing layer sha256:1e6d878a29f0eee28390766120813fdf36893f516bcc029e698cd941eeb79616 0.0s done\n", - "#31 writing layer sha256:24b5aa2448e920814dd67d7d3c0169b2cdacb13c4048d74ded3b4317843b13ff done\n", - "#31 writing layer sha256:2789e1f0e19719b047679b4b490cab1edb9e151cd286aed22df08022c249f040\n", - "#31 writing layer sha256:2789e1f0e19719b047679b4b490cab1edb9e151cd286aed22df08022c249f040 1.0s done\n", - "#31 writing layer sha256:2d42104dbf0a7cc962b791f6ab4f45a803f8a36d296f996aca180cfb2f3e30d0 done\n", - "#31 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff done\n", - "#31 writing layer sha256:38794be1b5dc99645feabf89b22cd34fb5bdffb5164ad920e7df94f353efe9c0 done\n", - "#31 writing layer sha256:38f963dc57c1e7b68a738fe39ed9f9345df7188111a047e2163a46648d7f1d88 done\n", - "#31 writing layer sha256:3e7e4c9bc2b136814c20c04feb4eea2b2ecf972e20182d88759931130cfb4181 done\n", - "#31 writing layer sha256:3fd77037ad585442cd82d64e337f49a38ddba50432b2a1e563a48401d25c79e6 done\n", - "#31 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0 done\n", - "#31 writing layer sha256:45893188359aca643d5918c9932da995364dc62013dfa40c075298b1baabece3 done\n", - "#31 writing layer sha256:49bc651b19d9e46715c15c41b7c0daa007e8e25f7d9518f04f0f06592799875a done\n", - "#31 writing layer sha256:4c12db5118d8a7d909e4926d69a2192d2b3cd8b110d49c7504a4f701258c1ccc done\n", - "#31 writing layer sha256:4cc43a803109d6e9d1fd35495cef9b1257035f5341a2db54f7a1940815b6cc65 done\n", - "#31 writing layer sha256:4d32b49e2995210e8937f0898327f196d3fcc52486f0be920e8b2d65f150a7ab done\n", - "#31 writing layer sha256:4d6fe980bad9cd7b2c85a478c8033cae3d098a81f7934322fb64658b0c8f9854 done\n", - "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#31 writing layer sha256:50b2500ad4a5ad2f73d71f4dedecabff852c74ea78a97dab0fc86b2ed44ddc77 done\n", - "#31 writing layer sha256:5150182f1ff123399b300ca469e00f6c4d82e1b9b72652fb8ee7eab370245236 done\n", - "#31 writing layer sha256:595c38fa102c61c3dda19bdab70dcd26a0e50465b986d022a84fa69023a05d0f done\n", - "#31 writing layer sha256:59d451175f6950740e26d38c322da0ef67cb59da63181eb32996f752ba8a2f17 done\n", - "#31 writing layer sha256:5ad1f2004580e415b998124ea394e9d4072a35d70968118c779f307204d6bd17 done\n", - "#31 writing layer sha256:5e2c1cbc09286c26c04d5b4257b11940ecdb161330319d54feadc7ef9a8dc8f6 done\n", - "#31 writing layer sha256:62598eafddf023e7f22643485f4321cbd51ff7eee743b970db12454fd3c8c675 done\n", - "#31 writing layer sha256:63d7e616a46987136f4cc9eba95db6f6327b4854cfe3c7e20fed6db0c966e380 done\n", - "#31 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f done\n", - "#31 writing layer sha256:698318e5a60e5e0d48c45bf992f205a9532da567fdfe94bd59be2e192975dd6f done\n", - "#31 writing layer sha256:6ddc1d0f91833b36aac1c6f0c8cea005c87d94bab132d46cc06d9b060a81cca3 done\n", - "#31 writing layer sha256:74ac1f5a47c0926bff1e997bb99985a09926f43bd0895cb27ceb5fa9e95f8720 done\n", - "#31 writing layer sha256:7577973918dd30e764733a352a93f418000bc3181163ca451b2307492c1a6ba9 done\n", - "#31 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2 done\n", - "#31 writing layer sha256:8a7451db9b4b817b3b33904abddb7041810a4ffe8ed4a034307d45d9ae9b3f2a done\n", - "#31 writing layer sha256:916f4054c6e7f10de4fd7c08ffc75fa23ebecca4eceb8183cb1023b33b1696c9 done\n", - "#31 writing layer sha256:9463aa3f56275af97693df69478a2dc1d171f4e763ca6f7b6f370a35e605c154 done\n", - "#31 writing layer sha256:955fd173ed884230c2eded4542d10a97384b408537be6bbb7c4ae09ccd6fb2d0 done\n", - "#31 writing layer sha256:9c42a4ee99755f441251e6043b2cbba16e49818a88775e7501ec17e379ce3cfd done\n", - "#31 writing layer sha256:9c63be0a86e3dc4168db3814bf464e40996afda0031649d9faa8ff7568c3154f done\n", - "#31 writing layer sha256:9e04bda98b05554953459b5edef7b2b14d32f1a00b979a23d04b6eb5c191e66b done\n", - "#31 writing layer sha256:a4a0c690bc7da07e592514dccaa26098a387e8457f69095e922b6d73f7852502 done\n", - "#31 writing layer sha256:a4aafbc094d78a85bef41036173eb816a53bcd3e2564594a32f542facdf2aba6 done\n", - "#31 writing layer sha256:ae36a4d38b76948e39a5957025c984a674d2de18ce162a8caaa536e6f06fccea done\n", - "#31 writing layer sha256:b2fa40114a4a0725c81b327df89c0c3ed5c05ca9aa7f1157394d5096cf5460ce done\n", - "#31 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#31 writing layer sha256:c657dd855c8726b050f2b5bd6f4999883fff6803fe9f22add96f6d3ff89cd477 done\n", - "#31 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6 done\n", - "#31 writing layer sha256:cb506fbdedc817e3d074f609e2edbf9655aacd7784610a1bbac52f2d7be25438 done\n", - "#31 writing layer sha256:d2a6fe65a1f84edb65b63460a75d1cac1aa48b72789006881b0bcfd54cd01ffd done\n", - "#31 writing layer sha256:d2cafa18c788d3e44592cf8dcabf80e138db8389aa89e765550691199861d4fe 0.0s done\n", - "#31 writing layer sha256:d6a198fd2a224cb803248e86953a164439f1a64889df0861dc5cc7eef4c66664 0.0s done\n", - "#31 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304\n", - "#31 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304 done\n", - "#31 writing layer sha256:ddc2ade4f6fe866696cb638c8a102cb644fa842c2ca578392802b3e0e5e3bcb7 done\n", - "#31 writing layer sha256:e2cfd7f6244d6f35befa6bda1caa65f1786cecf3f00ef99d7c9a90715ce6a03c done\n", - "#31 writing layer sha256:e3d62e9dfa6b71c784d14517790438fabbc4adfca340fc7e2c2fa3ae76eb6917 0.0s done\n", - "#31 writing layer sha256:e42e7ccc889dd8eabf5148a4e91eb843e32688cf109fa7c074d87862f8da5da0\n", - "#31 writing layer sha256:e42e7ccc889dd8eabf5148a4e91eb843e32688cf109fa7c074d87862f8da5da0 0.4s done\n", - "#31 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907 done\n", - "#31 writing layer sha256:eaf45e9f32d1f5a9983945a1a9f8dedbb475bc0f578337610e00b4dedec87c20 done\n", - "#31 writing layer sha256:eb411bef39c013c9853651e68f00965dbd826d829c4e478884a2886976e9c989 done\n", - "#31 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759 done\n", - "#31 writing layer sha256:ef4466d6f927d29d404df9c5af3ef5733c86fa14e008762c90110b963978b1e7 done\n", - "#31 writing layer sha256:f346e3ecdf0bee048fa1e3baf1d3128ff0283b903f03e97524944949bd8882e5 done\n", - "#31 writing layer sha256:f3f9a00a1ce9aadda250aacb3e66a932676badc5d8519c41517fdf7ea14c13ed done\n", - "#31 writing layer sha256:f7a50dafd51c2bcaad0ede31fbf29c38fe66776ade008a7fbdb07dba39de7f97 done\n", - "#31 writing layer sha256:fd849d9bd8889edd43ae38e9f21a912430c8526b2c18f3057a3b2cd74eb27b31 done\n", - "#31 writing config sha256:b3ecef29d7ecd014606ec1a5bc12ec4a44ab5cdaedc016d07e70d0bebbaf471a 0.0s done\n", - "#31 preparing build cache for export 2.2s done\n", - "#31 writing manifest sha256:41770de5232f0f9ed1171d161204bcf55abf5a318aa784a38c8de9e07d4b7c3d 0.0s done\n", - "#31 DONE 2.2s\n", - "[2023-08-30 01:00:53,452] [INFO] (packager) - Build Summary:\n", + "#22 [10/21] COPY ./tools /var/holoscan/tools\n", + "#22 CACHED\n", + "\n", + "#23 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#23 CACHED\n", + "\n", + "#24 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", + "#24 CACHED\n", + "\n", + "#25 [13/21] RUN pip install --upgrade pip\n", + "#25 CACHED\n", + "\n", + "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 CACHED\n", + "\n", + "#27 [21/21] COPY ./app /opt/holoscan/app\n", + "#27 DONE 0.3s\n", + "\n", + "#28 exporting to docker image format\n", + "#28 exporting layers\n", + "#28 exporting layers 0.2s done\n", + "#28 exporting manifest sha256:814514f05787bbad414758721a0e6e6c3bc4c8e15be135868bd5d22125ba1323 0.0s done\n", + "#28 exporting config sha256:5effa5125f3b256ed2e1063cc763040b2eac0f3a49c281b3fecbe3ebbddedce9 0.0s done\n", + "#28 sending tarball\n", + "#28 ...\n", + "\n", + "#29 importing to docker\n", + "#29 loading layer bc0556e272e1 3.91kB / 3.91kB\n", + "#29 loading layer bc0556e272e1 3.91kB / 3.91kB 0.7s done\n", + "#29 DONE 0.7s\n", + "\n", + "#28 exporting to docker image format\n", + "#28 sending tarball 74.9s done\n", + "#28 DONE 75.2s\n", + "\n", + "#30 exporting cache to client directory\n", + "#30 preparing build cache for export\n", + "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", + "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", + "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", + "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", + "#30 writing layer sha256:0bf3a16e4f3f9ec99796b99e331a5c62472bc9377925e1fdc05f64709ed09895 done\n", + "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", + "#30 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", + "#30 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", + "#30 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", + "#30 writing layer sha256:183aa7032b52e859f5de3dac98da7c8398ed5f8a984d74865561f126c0eecef2 done\n", + "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", + "#30 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", + "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", + "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", + "#30 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", + "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", + "#30 writing layer sha256:3f0770bfaa7c2f6e0a801dbbdeb644aedfdfeccb547611d3bf9faef04222aeba 0.0s done\n", + "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", + "#30 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", + "#30 writing layer sha256:4482079b5d33963eb55191bf404b70095535d4a8e2b64dab7373500515f896b4 done\n", + "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", + "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", + "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", + "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#30 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", + "#30 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", + "#30 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", + "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", + "#30 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", + "#30 writing layer sha256:5ea668ffc2fc267d241dbf17ca283bc879643a189be4f7e3d9034a82fc64a1ea done\n", + "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", + "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", + "#30 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", + "#30 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", + "#30 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", + "#30 writing layer sha256:6e80a527af94a864094c4f9116c2d29d3d7548ec8388579d9cf3f8a39a4b8178 done\n", + "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", + "#30 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", + "#30 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", + "#30 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", + "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f\n", + "#30 preparing build cache for export 0.7s done\n", + "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", + "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", + "#30 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", + "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", + "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", + "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", + "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", + "#30 writing layer sha256:bc42865e1c27a9b1bee751f3c99ad2c12a906d32aca396ace7a07231c9cafbd1 done\n", + "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", + "#30 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", + "#30 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", + "#30 writing layer sha256:d6b5d6e098aacb316146a428c6b5aef9692011c6dce0932e3bbfbf27a514b7ed done\n", + "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", + "#30 writing layer sha256:e4297ff4df6f7a8f25cb109e5b24483c314c2e72b8e824f9669173919fc159c9 done\n", + "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", + "#30 writing layer sha256:e8640a108802cd7519cc53dceb74f7a5c94b562662f1c3c040c2aa6571acf0f3 done\n", + "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", + "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", + "#30 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", + "#30 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", + "#30 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", + "#30 writing config sha256:374c8d5f4f72f0b0a709492f153a59ebd070e903971483f2cefb3e9e45bda48a 0.0s done\n", + "#30 writing cache manifest sha256:00a618573e1678dbe93ffce1675eee120201710fa121207b43875632f6799a58 0.0s done\n", + "#30 DONE 0.7s\n", + "[2024-04-10 16:43:00,358] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -2151,14 +1865,14 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 17be984e3846 About a minute ago 15.4GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 5effa5125f3b About a minute ago 17.5GB\n" ] } ], @@ -2177,27 +1891,31 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 01:00:57,619] [INFO] (runner) - Checking dependencies...\n", - "[2023-08-30 01:00:57,619] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "output\n", + "dcm\n", + "[2024-04-10 16:43:03,135] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-10 16:43:03,135] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2023-08-30 01:00:57,620] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-10 16:43:03,135] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2023-08-30 01:00:57,620] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-10 16:43:03,135] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2023-08-30 01:00:57,670] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpah05b7ex/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpah05b7ex/pkg.json\n", - "[2023-08-30 01:00:58,237] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-10 16:43:03,211] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpbbeybrjp/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpbbeybrjp/pkg.json\n", + "[2024-04-10 16:43:03,567] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2023-08-30 01:00:58,414] [INFO] (common) - Launching container (8ca19e2ad332) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: peaceful_goldstine\n", + "[2024-04-10 16:43:03,568] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "\n", + "[2024-04-10 16:43:03,864] [INFO] (common) - Launching container (5135fc45ca94) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: optimistic_jang\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2206,99 +1924,96 @@ " ipc mode: host\n", " shared memory size: 67108864\n", " devices: \n", - "2023-08-30 08:00:59 [INFO] Launching application python3 /opt/holoscan/app ...\n", + " group_add: 44\n", + "2024-04-10 23:43:05 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2023-08-30 08:01:03,315] [INFO] (root) - Parsed args: Namespace(argv=['/opt/holoscan/app'], input=None, log_level=None, model=None, output=None, workdir=None)\n", + "[2024-04-10 23:43:09,781] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2023-08-30 08:01:03,318] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2024-04-10 23:43:09,784] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2023-08-30 08:01:03,318] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", + "[2024-04-10 23:43:09,784] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", "\n", - "[info] [app_driver.cpp:1025] Launching the driver/health checking service\n", + "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:210] Creating context\n", + "[info] [gxf_executor.cpp:211] Creating context\n", "\n", - "[info] [server.cpp:73] Health checking server listening on 0.0.0.0:8777\n", + "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "\n", "[info] [greedy_scheduler.cpp:190] Scheduling 6 entities\n", "\n", - "[2023-08-30 08:01:03,434] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 23:43:09,895] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2023-08-30 08:01:04,283] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 23:43:10,851] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 23:43:10,851] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 23:43:10,851] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 23:43:10,851] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2023-08-30 08:01:04,284] [INFO] (root) - Series attribute ImageType value: None\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2023-08-30 08:01:04,285] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute ImageType value: None\n", "\n", - " warn_deprecated(argname, msg, warning_category)\n", + "[2024-04-10 23:43:10,852] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", "\n", - "[2023-08-30 08:01:04,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", "\n", - "[2023-08-30 08:01:04,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", "\n", " [ 0. 0.7890625 0. -398.60547 ]\n", "\n", @@ -2306,7 +2021,7 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2023-08-30 08:01:04,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", "\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", "\n", @@ -2314,261 +2029,79 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2023-08-30 08:01:04,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", "\n", - "[2023-08-30 08:01:04,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", "\n", - "[2023-08-30 08:01:04,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", "\n", - "[2023-08-30 08:01:04,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", "\n", - "[2023-08-30 08:01:04,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", "\n", - "[2023-08-30 08:01:04,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", "\n", - "[2023-08-30 08:01:04,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", "\n", - "2023-08-30 08:01:05,687 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2024-04-10 23:43:12,277 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", "\n", - "2023-08-30 08:01:16,263 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "2024-04-10 23:43:16,177 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", "\n", - "[2023-08-30 08:01:17,894] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2024-04-10 23:43:17,870] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", "\n", - "[2023-08-30 08:01:17,935] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2024-04-10 23:43:17,876] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " warnings.warn(\n", "\n", - "[2023-08-30 08:01:20,578] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - "\n", - " warnings.warn(msg)\n", - "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - "\n", - " warnings.warn(msg)\n", - "\n", - "[2023-08-30 08:01:20,582] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,583] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,584] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,585] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,586] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,587] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,587] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,588] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,589] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,590] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,591] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,591] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,592] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,593] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,594] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,595] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,596] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,597] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,598] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,599] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,600] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,601] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,602] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,603] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,604] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,605] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,606] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,607] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,608] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,609] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,610] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,611] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,612] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,613] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,614] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,615] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,615] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,616] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,617] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,618] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,619] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,620] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,621] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,622] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,623] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,624] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,625] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,626] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,627] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,628] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,629] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,630] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,631] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,632] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,633] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,633] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,635] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,635] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,636] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,637] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,638] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,639] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,640] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,641] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,642] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,643] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,644] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,818] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,819] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,820] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,821] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,822] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,822] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,823] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,824] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,825] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,826] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,826] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,827] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,828] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,828] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,829] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,830] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,831] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,832] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,832] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,833] [INFO] (highdicom.seg.sop) - add plane #87 for segment #1\n", - "\n", - "[2023-08-30 08:01:20,936] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 23:43:19,386] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:01:20,936] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 23:43:19,386] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2023-08-30 08:01:20,937] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 23:43:19,386] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:01:20,937] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 23:43:19,386] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2023-08-30 08:01:20,937] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 23:43:19,387] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2023-08-30 08:01:20,937] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 23:43:19,387] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:01:20,937] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 23:43:19,387] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2023-08-30 08:01:20,938] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 23:43:19,387] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2023-08-30 08:01:20,938] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 23:43:19,388] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", "\n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", "\n", - "[2023-08-30 08:01:21,087] [INFO] (app.AISpleenSegApp) - End run\n", + "[2024-04-10 23:43:19,487] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[info] [gxf_executor.cpp:229] Destroying context\n", + "[info] [gxf_executor.cpp:230] Destroying context\n", "\n", - "[2023-08-30 01:01:23,201] [INFO] (common) - Container 'peaceful_goldstine'(8ca19e2ad332) exited.\n" + "[2024-04-10 16:43:21,271] [INFO] (common) - Container 'optimistic_jang'(5135fc45ca94) exited.\n" ] } ], "source": [ "# Clear the output folder and run the MAP. The input is expected to be a folder.\n", + "!echo $HOLOSCAN_OUTPUT_PATH\n", + "!echo $HOLOSCAN_INPUT_PATH\n", "!rm -rf $HOLOSCAN_OUTPUT_PATH\n", "!monai-deploy run -i $HOLOSCAN_INPUT_PATH -o $HOLOSCAN_OUTPUT_PATH my_app-x64-workstation-dgpu-linux-amd64:1.0" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -2576,7 +2109,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.11368427294546636595990283269631758.dcm\n", + "1.2.826.0.1.3680043.10.511.3.10550615266418892085330010762562517.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", @@ -2609,7 +2142,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.12" }, "vscode": { "interpreter": { diff --git a/notebooks/tutorials/03_segmentation_viz_app.ipynb b/notebooks/tutorials/03_segmentation_viz_app.ipynb index da4aef74..fbaab63e 100644 --- a/notebooks/tutorials/03_segmentation_viz_app.ipynb +++ b/notebooks/tutorials/03_segmentation_viz_app.ipynb @@ -130,23 +130,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (4.7.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (3.12.2)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (2.31.0)\n", - "Requirement already satisfied: six in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (1.16.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.66.1)\n", - "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.12.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from beautifulsoup4->gdown) (2.4.1)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.2.0)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.4)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2.0.4)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2023.7.22)\n", - "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", + "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.3)\n", + "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", + "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.6)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", + "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "Downloading...\n", - "From (uriginal): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", - "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=f144e02e-9680-4015-80c4-36e47679d481\n", + "From (original): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", + "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=dcd169d3-fd74-406b-84df-e849918958a1\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_spleen_seg_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:01<00:00, 61.7MB/s]\n", + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 81.5MB/s]\n", "Archive: ai_spleen_seg_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -633,42 +635,38 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2023-08-30 01:41:49,185] [INFO] (root) - Parsed args: Namespace(argv=[], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-08-30 01:41:49,192] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2023-08-30 01:41:49,198] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:210] Creating context\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 10:46:21,853] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-10 10:46:21,859] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2024-04-10 10:46:21,866] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[info] [greedy_scheduler.cpp:190] Scheduling 10 entities\n", - "[2023-08-30 01:41:49,276] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2023-08-30 01:41:49,592] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2023-08-30 01:41:49,593] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 10:46:21,911] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 10:46:22,254] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 10:46:22,256] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2023-08-30 01:41:49,594] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:41:49,595] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:41:49,596] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2023-08-30 01:41:49,597] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:41:49,598] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2023-08-30 01:41:49,599] [INFO] (root) - Series attribute Modality value: CT\n", - "[2023-08-30 01:41:49,599] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:41:49,600] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:41:49,601] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2023-08-30 01:41:49,601] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:41:49,602] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:41:49,852] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary SaveImaged.__init__:resample: Current default value of argument `resample=True` has been deprecated since version 1.1. It will be changed to `resample=False` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n" + "[2024-04-10 10:46:22,257] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 10:46:22,257] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-10 10:46:22,258] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 10:46:22,259] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 10:46:22,261] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 10:46:22,262] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 10:46:22,262] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 10:46:22,263] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 10:46:22,264] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 10:46:22,265] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 10:46:22,265] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 10:46:22,497] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "33630c7b7f7e48029eccf86fc414c544", + "model_id": "76b80cc0d2af48c58237d1f8d5d1ec88", "version_major": 2, "version_minor": 0 }, @@ -683,117 +681,26 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2023-08-30 01:42:01,875] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2023-08-30 01:42:03,204] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2023-08-30 01:42:03,205] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2024-04-10 10:46:35,947] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2024-04-10 10:46:37,415] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2024-04-10 10:46:37,416] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2023-08-30 01:42:14,899] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - " warnings.warn(msg)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - " warnings.warn(msg)\n", - "[2023-08-30 01:42:14,902] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "[2023-08-30 01:42:14,903] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "[2023-08-30 01:42:14,905] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "[2023-08-30 01:42:14,906] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "[2023-08-30 01:42:14,907] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "[2023-08-30 01:42:14,909] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "[2023-08-30 01:42:14,910] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "[2023-08-30 01:42:14,911] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "[2023-08-30 01:42:14,912] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "[2023-08-30 01:42:14,914] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "[2023-08-30 01:42:14,915] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "[2023-08-30 01:42:14,916] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "[2023-08-30 01:42:14,918] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "[2023-08-30 01:42:14,919] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "[2023-08-30 01:42:14,921] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "[2023-08-30 01:42:14,922] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "[2023-08-30 01:42:14,924] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "[2023-08-30 01:42:14,925] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "[2023-08-30 01:42:14,927] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "[2023-08-30 01:42:14,929] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "[2023-08-30 01:42:14,931] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "[2023-08-30 01:42:14,932] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "[2023-08-30 01:42:14,939] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "[2023-08-30 01:42:14,941] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "[2023-08-30 01:42:14,943] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "[2023-08-30 01:42:14,946] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "[2023-08-30 01:42:14,948] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "[2023-08-30 01:42:14,950] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "[2023-08-30 01:42:14,953] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "[2023-08-30 01:42:14,955] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "[2023-08-30 01:42:14,957] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "[2023-08-30 01:42:14,959] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "[2023-08-30 01:42:14,961] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "[2023-08-30 01:42:14,963] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "[2023-08-30 01:42:14,965] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "[2023-08-30 01:42:14,967] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "[2023-08-30 01:42:14,969] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "[2023-08-30 01:42:14,971] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "[2023-08-30 01:42:14,973] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "[2023-08-30 01:42:14,975] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "[2023-08-30 01:42:14,977] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "[2023-08-30 01:42:14,980] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "[2023-08-30 01:42:14,982] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "[2023-08-30 01:42:14,984] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "[2023-08-30 01:42:14,986] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "[2023-08-30 01:42:14,987] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "[2023-08-30 01:42:14,990] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "[2023-08-30 01:42:14,992] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "[2023-08-30 01:42:14,995] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "[2023-08-30 01:42:14,998] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "[2023-08-30 01:42:15,001] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "[2023-08-30 01:42:15,003] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "[2023-08-30 01:42:15,006] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "[2023-08-30 01:42:15,009] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "[2023-08-30 01:42:15,011] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "[2023-08-30 01:42:15,014] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "[2023-08-30 01:42:15,016] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "[2023-08-30 01:42:15,018] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "[2023-08-30 01:42:15,021] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "[2023-08-30 01:42:15,024] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "[2023-08-30 01:42:15,026] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "[2023-08-30 01:42:15,028] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "[2023-08-30 01:42:15,030] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "[2023-08-30 01:42:15,032] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "[2023-08-30 01:42:15,035] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "[2023-08-30 01:42:15,037] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "[2023-08-30 01:42:15,040] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "[2023-08-30 01:42:15,042] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "[2023-08-30 01:42:15,045] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "[2023-08-30 01:42:15,047] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "[2023-08-30 01:42:15,049] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "[2023-08-30 01:42:15,053] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "[2023-08-30 01:42:15,056] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "[2023-08-30 01:42:15,059] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "[2023-08-30 01:42:15,061] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "[2023-08-30 01:42:15,064] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "[2023-08-30 01:42:15,067] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "[2023-08-30 01:42:15,069] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "[2023-08-30 01:42:15,072] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "[2023-08-30 01:42:15,074] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "[2023-08-30 01:42:15,077] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "[2023-08-30 01:42:15,079] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "[2023-08-30 01:42:15,082] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "[2023-08-30 01:42:15,084] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "[2023-08-30 01:42:15,086] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "[2023-08-30 01:42:15,089] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "[2023-08-30 01:42:15,154] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:42:15,155] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2023-08-30 01:42:15,156] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:42:15,157] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2023-08-30 01:42:15,157] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2023-08-30 01:42:15,158] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:42:15,159] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2023-08-30 01:42:15,160] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2023-08-30 01:42:15,160] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 10:46:47,813] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 10:46:47,814] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 10:46:47,815] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 10:46:47,816] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 10:46:47,817] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 10:46:47,818] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 10:46:47,819] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 10:46:47,821] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 10:46:47,822] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[2023-08-30 01:42:15,256] [INFO] (__main__.AISpleenSegApp) - End run\n" + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[2024-04-10 10:46:47,929] [INFO] (__main__.AISpleenSegApp) - End run\n" ] } ], @@ -1098,148 +1005,53 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 01:42:22,671] [INFO] (root) - Parsed args: Namespace(argv=['my_app'], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-08-30 01:42:22,674] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2023-08-30 01:42:22,675] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:210] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1741] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1771] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 10:46:52,705] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2024-04-10 10:46:52,707] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2024-04-10 10:46:52,709] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 10 entities\n", - "[2023-08-30 01:42:22,738] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 10:46:52,747] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - Series attribute Modality value: CT\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:42:23,246] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:42:23,523] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary SaveImaged.__init__:resample: Current default value of argument `resample=True` has been deprecated since version 1.1. It will be changed to `resample=False` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 10:46:53,083] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 10:46:53,297] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "Box(children=(Widget(), VBox(children=(interactive(children=(Dropdown(description='View mode', index=2, options=(('Cinematic', 'CINEMATIC'), ('Slice', 'SLICE'), ('Slice Segmentation', 'SLICE_SEGMENTATION')), value='SLICE_SEGMENTATION'), Output()), _dom_classes=('widget-interact',)), interactive(children=(Dropdown(description='Camera', options=('Top', 'Right', 'Front'), value='Top'), Output()), _dom_classes=('widget-interact',))))))\n", - "[2023-08-30 01:42:35,981] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2023-08-30 01:42:37,237] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2023-08-30 01:42:37,237] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2024-04-10 10:47:05,685] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2024-04-10 10:47:07,271] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2024-04-10 10:47:07,271] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2023-08-30 01:42:50,065] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - " warnings.warn(msg)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - " warnings.warn(msg)\n", - "[2023-08-30 01:42:50,068] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "[2023-08-30 01:42:50,068] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "[2023-08-30 01:42:50,069] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "[2023-08-30 01:42:50,069] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "[2023-08-30 01:42:50,070] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "[2023-08-30 01:42:50,071] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "[2023-08-30 01:42:50,071] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "[2023-08-30 01:42:50,072] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "[2023-08-30 01:42:50,072] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "[2023-08-30 01:42:50,073] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "[2023-08-30 01:42:50,074] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "[2023-08-30 01:42:50,074] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "[2023-08-30 01:42:50,075] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "[2023-08-30 01:42:50,075] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "[2023-08-30 01:42:50,076] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "[2023-08-30 01:42:50,076] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "[2023-08-30 01:42:50,077] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "[2023-08-30 01:42:50,078] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "[2023-08-30 01:42:50,078] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "[2023-08-30 01:42:50,079] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "[2023-08-30 01:42:50,079] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "[2023-08-30 01:42:50,080] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "[2023-08-30 01:42:50,081] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "[2023-08-30 01:42:50,081] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "[2023-08-30 01:42:50,082] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "[2023-08-30 01:42:50,082] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "[2023-08-30 01:42:50,083] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "[2023-08-30 01:42:50,084] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "[2023-08-30 01:42:50,084] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "[2023-08-30 01:42:50,085] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "[2023-08-30 01:42:50,085] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "[2023-08-30 01:42:50,086] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "[2023-08-30 01:42:50,086] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "[2023-08-30 01:42:50,088] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "[2023-08-30 01:42:50,088] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "[2023-08-30 01:42:50,089] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "[2023-08-30 01:42:50,089] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "[2023-08-30 01:42:50,090] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "[2023-08-30 01:42:50,091] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "[2023-08-30 01:42:50,091] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "[2023-08-30 01:42:50,092] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "[2023-08-30 01:42:50,092] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "[2023-08-30 01:42:50,093] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "[2023-08-30 01:42:50,093] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "[2023-08-30 01:42:50,094] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "[2023-08-30 01:42:50,095] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "[2023-08-30 01:42:50,095] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "[2023-08-30 01:42:50,096] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "[2023-08-30 01:42:50,096] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "[2023-08-30 01:42:50,097] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "[2023-08-30 01:42:50,098] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "[2023-08-30 01:42:50,098] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "[2023-08-30 01:42:50,099] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "[2023-08-30 01:42:50,099] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "[2023-08-30 01:42:50,100] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "[2023-08-30 01:42:50,100] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "[2023-08-30 01:42:50,101] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "[2023-08-30 01:42:50,102] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "[2023-08-30 01:42:50,102] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "[2023-08-30 01:42:50,103] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "[2023-08-30 01:42:50,103] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "[2023-08-30 01:42:50,104] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "[2023-08-30 01:42:50,105] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "[2023-08-30 01:42:50,106] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "[2023-08-30 01:42:50,107] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "[2023-08-30 01:42:50,108] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "[2023-08-30 01:42:50,108] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "[2023-08-30 01:42:50,109] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "[2023-08-30 01:42:50,110] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "[2023-08-30 01:42:50,110] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "[2023-08-30 01:42:50,111] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "[2023-08-30 01:42:50,111] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "[2023-08-30 01:42:50,112] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "[2023-08-30 01:42:50,113] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "[2023-08-30 01:42:50,113] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "[2023-08-30 01:42:50,114] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "[2023-08-30 01:42:50,114] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "[2023-08-30 01:42:50,115] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "[2023-08-30 01:42:50,115] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "[2023-08-30 01:42:50,116] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "[2023-08-30 01:42:50,117] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "[2023-08-30 01:42:50,117] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "[2023-08-30 01:42:50,118] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "[2023-08-30 01:42:50,118] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "[2023-08-30 01:42:50,119] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "[2023-08-30 01:42:50,120] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "[2023-08-30 01:42:50,171] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:42:50,171] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2023-08-30 01:42:50,171] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:42:50,171] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2023-08-30 01:42:50,172] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2023-08-30 01:42:50,172] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:42:50,172] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2023-08-30 01:42:50,172] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2023-08-30 01:42:50,172] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[2023-08-30 01:42:50,512] [INFO] (app.AISpleenSegApp) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[2024-04-10 10:47:18,856] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1257,15 +1069,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.31568838222743473783316035623024660.dcm stl\n" - ] - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details." + "1.2.826.0.1.3680043.10.511.3.65335369220270763710273609202620247.dcm stl\n" ] } ], @@ -1286,7 +1090,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Clara-Viz operators added in an application are used for interactive visualization, so the application shall not be packaged." + "Clara-Viz operators present in an application are used for interactive visualization, so the application shall not be packaged." ] } ], @@ -1306,7 +1110,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.12" }, "vscode": { "interpreter": { diff --git a/notebooks/tutorials/04_monai_bundle_app.ipynb b/notebooks/tutorials/04_monai_bundle_app.ipynb index 727bdd46..b546487b 100644 --- a/notebooks/tutorials/04_monai_bundle_app.ipynb +++ b/notebooks/tutorials/04_monai_bundle_app.ipynb @@ -135,23 +135,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (4.7.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (3.12.2)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (2.31.0)\n", - "Requirement already satisfied: six in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (1.16.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.66.1)\n", - "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.12.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from beautifulsoup4->gdown) (2.4.1)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.2.0)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.4)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2.0.4)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2023.7.22)\n", - "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", + "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.3)\n", + "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.28.2)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", + "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.6)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", + "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "Downloading...\n", - "From (uriginal): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", - "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=9c85302e-fe27-4e68-8eb5-cc19a530a25c\n", + "From (original): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", + "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=e406b570-c957-4c12-9dc1-df625c4fb575\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_spleen_seg_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:01<00:00, 67.3MB/s]\n", + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 115MB/s]\n", "Archive: ai_spleen_seg_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -624,148 +626,53 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2023-08-30 01:19:59,977] [INFO] (root) - Parsed args: Namespace(argv=[], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-08-30 01:19:59,985] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2023-08-30 01:19:59,991] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:210] Creating context\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 15:03:17,151] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-10 15:03:17,160] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2024-04-10 15:03:17,167] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[info] [greedy_scheduler.cpp:190] Scheduling 8 entities\n", - "[2023-08-30 01:20:00,118] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2023-08-30 01:20:00,446] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2023-08-30 01:20:00,448] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 15:03:17,216] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 15:03:17,807] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 15:03:17,809] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2023-08-30 01:20:00,448] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:20:00,449] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:20:00,449] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2023-08-30 01:20:00,450] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:20:00,451] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2023-08-30 01:20:00,451] [INFO] (root) - Series attribute Modality value: CT\n", - "[2023-08-30 01:20:00,452] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:20:00,453] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:20:00,453] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2023-08-30 01:20:00,454] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:20:00,454] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:20:00,662] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary SaveImaged.__init__:resample: Current default value of argument `resample=True` has been deprecated since version 1.1. It will be changed to `resample=False` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "[2023-08-30 01:20:10,739] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2023-08-30 01:20:12,173] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2023-08-30 01:20:12,174] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2024-04-10 15:03:17,809] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 15:03:17,810] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-10 15:03:17,811] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 15:03:17,812] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:03:17,813] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 15:03:17,813] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 15:03:17,814] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:03:17,815] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 15:03:17,815] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 15:03:17,816] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:03:17,817] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 15:03:18,040] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2024-04-10 15:03:24,142] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2024-04-10 15:03:25,752] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2024-04-10 15:03:25,753] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2023-08-30 01:20:22,822] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - " warnings.warn(msg)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - " warnings.warn(msg)\n", - "[2023-08-30 01:20:22,825] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "[2023-08-30 01:20:22,826] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "[2023-08-30 01:20:22,827] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "[2023-08-30 01:20:22,829] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "[2023-08-30 01:20:22,830] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "[2023-08-30 01:20:22,831] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "[2023-08-30 01:20:22,833] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "[2023-08-30 01:20:22,834] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "[2023-08-30 01:20:22,836] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "[2023-08-30 01:20:22,837] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "[2023-08-30 01:20:22,839] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "[2023-08-30 01:20:22,841] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "[2023-08-30 01:20:22,843] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "[2023-08-30 01:20:22,844] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "[2023-08-30 01:20:22,846] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "[2023-08-30 01:20:22,848] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "[2023-08-30 01:20:22,850] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "[2023-08-30 01:20:22,852] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "[2023-08-30 01:20:22,853] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "[2023-08-30 01:20:22,857] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "[2023-08-30 01:20:22,858] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "[2023-08-30 01:20:22,860] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "[2023-08-30 01:20:22,862] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "[2023-08-30 01:20:22,863] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "[2023-08-30 01:20:22,864] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "[2023-08-30 01:20:22,866] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "[2023-08-30 01:20:22,867] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "[2023-08-30 01:20:22,868] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "[2023-08-30 01:20:22,870] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "[2023-08-30 01:20:22,871] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "[2023-08-30 01:20:22,873] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "[2023-08-30 01:20:22,874] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "[2023-08-30 01:20:22,875] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "[2023-08-30 01:20:22,877] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "[2023-08-30 01:20:22,878] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "[2023-08-30 01:20:22,880] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "[2023-08-30 01:20:22,881] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "[2023-08-30 01:20:22,883] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "[2023-08-30 01:20:22,884] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "[2023-08-30 01:20:22,886] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "[2023-08-30 01:20:22,887] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "[2023-08-30 01:20:22,889] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "[2023-08-30 01:20:22,891] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "[2023-08-30 01:20:22,892] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "[2023-08-30 01:20:22,894] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "[2023-08-30 01:20:22,895] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "[2023-08-30 01:20:22,897] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "[2023-08-30 01:20:22,899] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "[2023-08-30 01:20:22,901] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "[2023-08-30 01:20:22,902] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "[2023-08-30 01:20:22,904] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "[2023-08-30 01:20:22,906] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "[2023-08-30 01:20:22,908] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "[2023-08-30 01:20:22,909] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "[2023-08-30 01:20:22,911] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "[2023-08-30 01:20:22,913] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "[2023-08-30 01:20:22,915] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "[2023-08-30 01:20:22,917] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "[2023-08-30 01:20:22,919] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "[2023-08-30 01:20:22,921] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "[2023-08-30 01:20:22,923] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "[2023-08-30 01:20:22,925] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "[2023-08-30 01:20:22,927] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "[2023-08-30 01:20:22,929] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "[2023-08-30 01:20:22,931] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "[2023-08-30 01:20:22,933] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "[2023-08-30 01:20:22,934] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "[2023-08-30 01:20:22,936] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "[2023-08-30 01:20:22,939] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "[2023-08-30 01:20:22,941] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "[2023-08-30 01:20:22,943] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "[2023-08-30 01:20:22,946] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "[2023-08-30 01:20:22,951] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "[2023-08-30 01:20:22,957] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "[2023-08-30 01:20:22,959] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "[2023-08-30 01:20:22,961] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "[2023-08-30 01:20:22,964] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "[2023-08-30 01:20:22,966] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "[2023-08-30 01:20:22,968] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "[2023-08-30 01:20:22,972] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "[2023-08-30 01:20:22,974] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "[2023-08-30 01:20:22,977] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "[2023-08-30 01:20:22,980] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "[2023-08-30 01:20:22,982] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "[2023-08-30 01:20:22,985] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "[2023-08-30 01:20:22,990] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "[2023-08-30 01:20:23,056] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:20:23,057] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2023-08-30 01:20:23,058] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:20:23,058] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2023-08-30 01:20:23,060] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2023-08-30 01:20:23,060] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:20:23,061] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2023-08-30 01:20:23,062] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2023-08-30 01:20:23,063] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 15:03:36,659] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:03:36,660] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 15:03:36,661] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:03:36,663] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 15:03:36,664] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 15:03:36,665] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:03:36,666] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 15:03:36,667] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 15:03:36,668] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[2023-08-30 01:20:23,159] [INFO] (__main__.AISpleenSegApp) - End run\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[2023-08-30 01:20:23,161] [INFO] (root) - End __main__\n" + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[2024-04-10 15:03:36,762] [INFO] (__main__.AISpleenSegApp) - End run\n", + "[2024-04-10 15:03:36,763] [INFO] (root) - End __main__\n" ] } ], @@ -1066,147 +973,52 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 01:20:29,553] [INFO] (root) - Parsed args: Namespace(argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'], input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), log_level=None, model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), workdir=None)\n", - "[2023-08-30 01:20:29,554] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[2023-08-30 01:20:29,556] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:210] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1741] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1771] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 15:03:41,411] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", + "[2024-04-10 15:03:41,413] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", + "[2024-04-10 15:03:41,414] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 8 entities\n", - "[2023-08-30 01:20:29,624] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 15:03:41,449] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 15:03:41,784] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 15:03:41,784] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - Series attribute Modality value: CT\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:20:30,122] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:20:30,324] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary SaveImaged.__init__:resample: Current default value of argument `resample=True` has been deprecated since version 1.1. It will be changed to `resample=False` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "[2023-08-30 01:20:35,800] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", - "[2023-08-30 01:20:37,096] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2023-08-30 01:20:37,096] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2024-04-10 15:03:41,784] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 15:03:41,784] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-10 15:03:41,784] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 15:03:41,784] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:03:41,785] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 15:03:41,785] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 15:03:41,785] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:03:41,785] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 15:03:41,785] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 15:03:41,785] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:03:41,785] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 15:03:42,204] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2024-04-10 15:03:48,123] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", + "[2024-04-10 15:03:49,607] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2024-04-10 15:03:49,607] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2023-08-30 01:20:47,289] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - " warnings.warn(msg)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - " warnings.warn(msg)\n", - "[2023-08-30 01:20:47,291] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "[2023-08-30 01:20:47,291] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "[2023-08-30 01:20:47,292] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "[2023-08-30 01:20:47,293] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "[2023-08-30 01:20:47,293] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "[2023-08-30 01:20:47,294] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "[2023-08-30 01:20:47,294] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "[2023-08-30 01:20:47,295] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "[2023-08-30 01:20:47,296] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "[2023-08-30 01:20:47,296] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "[2023-08-30 01:20:47,297] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "[2023-08-30 01:20:47,297] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "[2023-08-30 01:20:47,298] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "[2023-08-30 01:20:47,298] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "[2023-08-30 01:20:47,299] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "[2023-08-30 01:20:47,300] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "[2023-08-30 01:20:47,300] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "[2023-08-30 01:20:47,301] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "[2023-08-30 01:20:47,301] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "[2023-08-30 01:20:47,302] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "[2023-08-30 01:20:47,302] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "[2023-08-30 01:20:47,304] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "[2023-08-30 01:20:47,304] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "[2023-08-30 01:20:47,305] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "[2023-08-30 01:20:47,305] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "[2023-08-30 01:20:47,306] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "[2023-08-30 01:20:47,306] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "[2023-08-30 01:20:47,307] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "[2023-08-30 01:20:47,308] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "[2023-08-30 01:20:47,308] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "[2023-08-30 01:20:47,309] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "[2023-08-30 01:20:47,309] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "[2023-08-30 01:20:47,310] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "[2023-08-30 01:20:47,310] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "[2023-08-30 01:20:47,311] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "[2023-08-30 01:20:47,312] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "[2023-08-30 01:20:47,312] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "[2023-08-30 01:20:47,313] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "[2023-08-30 01:20:47,313] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "[2023-08-30 01:20:47,314] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "[2023-08-30 01:20:47,314] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "[2023-08-30 01:20:47,315] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "[2023-08-30 01:20:47,316] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "[2023-08-30 01:20:47,316] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "[2023-08-30 01:20:47,317] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "[2023-08-30 01:20:47,317] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "[2023-08-30 01:20:47,318] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "[2023-08-30 01:20:47,318] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "[2023-08-30 01:20:47,319] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "[2023-08-30 01:20:47,320] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "[2023-08-30 01:20:47,320] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "[2023-08-30 01:20:47,321] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "[2023-08-30 01:20:47,321] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "[2023-08-30 01:20:47,322] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "[2023-08-30 01:20:47,322] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "[2023-08-30 01:20:47,323] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "[2023-08-30 01:20:47,324] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "[2023-08-30 01:20:47,324] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "[2023-08-30 01:20:47,325] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "[2023-08-30 01:20:47,325] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "[2023-08-30 01:20:47,326] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "[2023-08-30 01:20:47,327] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "[2023-08-30 01:20:47,327] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "[2023-08-30 01:20:47,328] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "[2023-08-30 01:20:47,328] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "[2023-08-30 01:20:47,329] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "[2023-08-30 01:20:47,329] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "[2023-08-30 01:20:47,330] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "[2023-08-30 01:20:47,331] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "[2023-08-30 01:20:47,331] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "[2023-08-30 01:20:47,332] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "[2023-08-30 01:20:47,332] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "[2023-08-30 01:20:47,333] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "[2023-08-30 01:20:47,333] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "[2023-08-30 01:20:47,334] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "[2023-08-30 01:20:47,335] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "[2023-08-30 01:20:47,335] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "[2023-08-30 01:20:47,336] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "[2023-08-30 01:20:47,336] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "[2023-08-30 01:20:47,337] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "[2023-08-30 01:20:47,337] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "[2023-08-30 01:20:47,338] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "[2023-08-30 01:20:47,339] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "[2023-08-30 01:20:47,339] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "[2023-08-30 01:20:47,340] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "[2023-08-30 01:20:47,340] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "[2023-08-30 01:20:47,387] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:20:47,387] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2023-08-30 01:20:47,388] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:20:47,388] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2023-08-30 01:20:47,388] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2023-08-30 01:20:47,388] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:20:47,388] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2023-08-30 01:20:47,388] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2023-08-30 01:20:47,388] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 15:03:59,411] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[2023-08-30 01:20:47,473] [INFO] (app.AISpleenSegApp) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[2024-04-10 15:03:59,498] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1224,7 +1036,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.10023070564574692570777379407935822.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.39077956786032602526223766812104927.dcm stl\n" ] } ], @@ -1318,14 +1130,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 01:20:50,861] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2023-08-30 01:20:50,861] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2023-08-30 01:20:50,861] [INFO] (packager) - Scanning for models in {models_path}...\n", - "[2023-08-30 01:20:50,861] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2023-08-30 01:20:50,861] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2023-08-30 01:20:50,863] [INFO] (packager) - Generating app.json...\n", - "[2023-08-30 01:20:50,863] [INFO] (packager) - Generating pkg.json...\n", - "[2023-08-30 01:20:50,864] [DEBUG] (common) - \n", + "[2024-04-10 15:04:01,696] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2024-04-10 15:04:01,697] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2024-04-10 15:04:01,697] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2024-04-10 15:04:01,697] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2024-04-10 15:04:01,697] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2024-04-10 15:04:01,701] [INFO] (packager) - Generating app.json...\n", + "[2024-04-10 15:04:01,701] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-10 15:04:01,714] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1353,21 +1165,21 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.6.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2023-08-30 01:20:50,864] [DEBUG] (common) - \n", + "[2024-04-10 15:04:01,715] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", " \"applicationRoot\": \"/opt/holoscan/app\",\n", " \"modelRoot\": \"/opt/holoscan/models\",\n", " \"models\": {\n", - " \"model\": \"/opt/holoscan/models\"\n", + " \"model\": \"/opt/holoscan/models/model\"\n", " },\n", " \"resources\": {\n", " \"cpu\": 1,\n", @@ -1375,15 +1187,16 @@ " \"memory\": \"1Gi\",\n", " \"gpuMemory\": \"6Gi\"\n", " },\n", - " \"version\": 1.0\n", + " \"version\": 1.0,\n", + " \"platformConfig\": \"dgpu\"\n", "}\n", "================ End pkg.json ================\n", " \n", - "[2023-08-30 01:20:50,888] [DEBUG] (packager.builder) - \n", + "[2024-04-10 15:04:01,749] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -1399,11 +1212,13 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"0.6.0\"\n", + "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "\n", "\n", "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", @@ -1428,7 +1243,7 @@ "\n", "\n", "\n", - "RUN groupadd -g $GID $UNAME\n", + "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", "RUN chown -R holoscan /var/holoscan/input \n", @@ -1453,13 +1268,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI org\n", - "RUN pip install holoscan==0.6.0\n", - "\n", + "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", + "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", "\n", "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", "\n", "\n", "\n", @@ -1475,209 +1289,273 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2023-08-30 01:20:50,889] [INFO] (packager.builder) - \n", + "[2024-04-10 15:04:01,749] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - " Build Image: N/A \n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoiscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + " Holoscan SDK Package: pypi.org\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 0.6.0\n", + " SDK Version: 1.0.3\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2023-08-30 01:20:51,572] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2023-08-30 01:20:51,573] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2024-04-10 15:04:02,349] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-10 15:04:02,349] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", + "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.67kB done\n", + "#1 transferring dockerfile: 2.80kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load .dockerignore\n", - "#2 transferring context: 1.79kB done\n", - "#2 DONE 0.1s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#2 DONE 0.4s\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#3 DONE 0.4s\n", + "#3 [internal] load .dockerignore\n", + "#3 transferring context: 1.79kB done\n", + "#3 DONE 0.1s\n", "\n", "#4 [internal] load build context\n", "#4 DONE 0.0s\n", "\n", - "#5 importing cache manifest from local:2428133242780292460\n", + "#5 importing cache manifest from local:18341943591062161743\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#6 DONE 0.9s\n", + "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.0s done\n", + "#6 DONE 0.1s\n", "\n", - "#7 [ 1/22] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", - "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", - "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc 0.1s done\n", - "#7 DONE 0.1s\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#7 DONE 0.7s\n", "\n", "#4 [internal] load build context\n", - "#4 transferring context: 19.57MB 0.2s done\n", - "#4 DONE 0.3s\n", + "#4 transferring context: 19.56MB 0.1s done\n", + "#4 DONE 0.2s\n", "\n", - "#8 [ 6/22] RUN chown -R holoscan /var/holoscan\n", + "#8 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#8 CACHED\n", "\n", - "#9 [16/22] COPY ./monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "#9 [13/21] RUN pip install --upgrade pip\n", "#9 CACHED\n", "\n", - "#10 [17/22] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "#10 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", "#10 CACHED\n", "\n", - "#11 [19/22] COPY ./map/app.json /etc/holoscan/app.json\n", + "#11 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#11 CACHED\n", "\n", - "#12 [ 5/22] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#12 [10/21] COPY ./tools /var/holoscan/tools\n", "#12 CACHED\n", "\n", - "#13 [14/22] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#13 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#13 CACHED\n", "\n", - "#14 [ 9/22] WORKDIR /var/holoscan\n", + "#14 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#14 CACHED\n", "\n", - "#15 [ 8/22] RUN chown -R holoscan /var/holoscan/output\n", + "#15 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#15 CACHED\n", "\n", - "#16 [13/22] RUN pip install --upgrade pip\n", + "#16 [ 9/21] WORKDIR /var/holoscan\n", "#16 CACHED\n", "\n", - "#17 [15/22] RUN pip install holoscan==0.6.0\n", + "#17 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#17 CACHED\n", "\n", - "#18 [10/22] COPY ./tools /var/holoscan/tools\n", + "#18 [11/21] RUN chmod +x /var/holoscan/tools\n", "#18 CACHED\n", "\n", - "#19 [18/22] COPY ./models /opt/holoscan/models\n", + "#19 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#19 CACHED\n", "\n", - "#20 [20/22] COPY ./app.config /var/holoscan/app.yaml\n", + "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#20 CACHED\n", "\n", - "#21 [12/22] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#21 CACHED\n", - "\n", - "#22 [ 7/22] RUN chown -R holoscan /var/holoscan/input\n", - "#22 CACHED\n", - "\n", - "#23 [ 4/22] RUN groupadd -g 1000 holoscan\n", - "#23 CACHED\n", - "\n", - "#24 [ 3/22] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", - "#24 CACHED\n", - "\n", - "#25 [ 2/22] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", - "#25 CACHED\n", - "\n", - "#26 [11/22] RUN chmod +x /var/holoscan/tools\n", - "#26 CACHED\n", - "\n", - "#27 [21/22] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#27 CACHED\n", - "\n", - "#28 [22/22] COPY ./app /opt/holoscan/app\n", - "#28 DONE 0.3s\n", - "\n", - "#29 exporting to docker image format\n", - "#29 exporting layers\n", - "#29 exporting layers 0.2s done\n", - "#29 exporting manifest sha256:84725c6be7300f1d3487cf953efea1b7123df1b79dc893f79dd41e9b714cc971 0.0s done\n", - "#29 exporting config sha256:716356b4f3c03984961a626a47638b2538cf18516f267b54c7d0f502aa0ab077\n", - "#29 exporting config sha256:716356b4f3c03984961a626a47638b2538cf18516f267b54c7d0f502aa0ab077 0.0s done\n", - "#29 sending tarball\n", - "#29 ...\n", - "\n", - "#30 importing to docker\n", - "#30 DONE 0.8s\n", - "\n", - "#29 exporting to docker image format\n", - "#29 sending tarball 54.7s done\n", - "#29 DONE 54.9s\n", - "\n", - "#31 exporting content cache\n", - "#31 preparing build cache for export\n", - "#31 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d done\n", - "#31 writing layer sha256:0ce020987cfa5cd1654085af3bb40779634eb3d792c4a4d6059036463ae0040d done\n", - "#31 writing layer sha256:0f4bc5775dfef844ad94316d6cba08f7430019a5986278e18978fdf8fd6370d0 done\n", - "#31 writing layer sha256:0f65089b284381bf795d15b1a186e2a8739ea957106fa526edef0d738e7cda70 done\n", - "#31 writing layer sha256:12a47450a9f9cc5d4edab65d0f600dbbe8b23a1663b0b3bb2c481d40e074b580 done\n", - "#31 writing layer sha256:1de965777e2e37c7fabe00bdbf3d0203ca83ed30a71a5479c3113fe4fc48c4bb done\n", - "#31 writing layer sha256:1e6d878a29f0eee28390766120813fdf36893f516bcc029e698cd941eeb79616 done\n", - "#31 writing layer sha256:24b5aa2448e920814dd67d7d3c0169b2cdacb13c4048d74ded3b4317843b13ff done\n", - "#31 writing layer sha256:2789e1f0e19719b047679b4b490cab1edb9e151cd286aed22df08022c249f040 done\n", - "#31 writing layer sha256:2d42104dbf0a7cc962b791f6ab4f45a803f8a36d296f996aca180cfb2f3e30d0 done\n", - "#31 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff done\n", - "#31 writing layer sha256:38794be1b5dc99645feabf89b22cd34fb5bdffb5164ad920e7df94f353efe9c0 done\n", - "#31 writing layer sha256:38f963dc57c1e7b68a738fe39ed9f9345df7188111a047e2163a46648d7f1d88 done\n", - "#31 writing layer sha256:3e7e4c9bc2b136814c20c04feb4eea2b2ecf972e20182d88759931130cfb4181 done\n", - "#31 writing layer sha256:3fd77037ad585442cd82d64e337f49a38ddba50432b2a1e563a48401d25c79e6 done\n", - "#31 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0\n", - "#31 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0 done\n", - "#31 writing layer sha256:45893188359aca643d5918c9932da995364dc62013dfa40c075298b1baabece3 done\n", - "#31 writing layer sha256:49bc651b19d9e46715c15c41b7c0daa007e8e25f7d9518f04f0f06592799875a done\n", - "#31 writing layer sha256:4c12db5118d8a7d909e4926d69a2192d2b3cd8b110d49c7504a4f701258c1ccc done\n", - "#31 writing layer sha256:4cc43a803109d6e9d1fd35495cef9b1257035f5341a2db54f7a1940815b6cc65 done\n", - "#31 writing layer sha256:4d32b49e2995210e8937f0898327f196d3fcc52486f0be920e8b2d65f150a7ab done\n", - "#31 writing layer sha256:4d6fe980bad9cd7b2c85a478c8033cae3d098a81f7934322fb64658b0c8f9854 done\n", - "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#31 writing layer sha256:50b2500ad4a5ad2f73d71f4dedecabff852c74ea78a97dab0fc86b2ed44ddc77 done\n", - "#31 writing layer sha256:5150182f1ff123399b300ca469e00f6c4d82e1b9b72652fb8ee7eab370245236 done\n", - "#31 writing layer sha256:5450ec6233e924dcdedf28ae862b64cced3ba8d460257e793e0a31c605e8bbc8 0.0s done\n", - "#31 writing layer sha256:595c38fa102c61c3dda19bdab70dcd26a0e50465b986d022a84fa69023a05d0f done\n", - "#31 writing layer sha256:59d451175f6950740e26d38c322da0ef67cb59da63181eb32996f752ba8a2f17 done\n", - "#31 writing layer sha256:5ad1f2004580e415b998124ea394e9d4072a35d70968118c779f307204d6bd17 done\n", - "#31 writing layer sha256:5e2c1cbc09286c26c04d5b4257b11940ecdb161330319d54feadc7ef9a8dc8f6 done\n", - "#31 writing layer sha256:62598eafddf023e7f22643485f4321cbd51ff7eee743b970db12454fd3c8c675 done\n", - "#31 writing layer sha256:63d7e616a46987136f4cc9eba95db6f6327b4854cfe3c7e20fed6db0c966e380 done\n", - "#31 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f done\n", - "#31 writing layer sha256:698318e5a60e5e0d48c45bf992f205a9532da567fdfe94bd59be2e192975dd6f done\n", - "#31 writing layer sha256:6ddc1d0f91833b36aac1c6f0c8cea005c87d94bab132d46cc06d9b060a81cca3 done\n", - "#31 writing layer sha256:74ac1f5a47c0926bff1e997bb99985a09926f43bd0895cb27ceb5fa9e95f8720 done\n", - "#31 writing layer sha256:7577973918dd30e764733a352a93f418000bc3181163ca451b2307492c1a6ba9 done\n", - "#31 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2 done\n", - "#31 writing layer sha256:8a7451db9b4b817b3b33904abddb7041810a4ffe8ed4a034307d45d9ae9b3f2a done\n", - "#31 writing layer sha256:916f4054c6e7f10de4fd7c08ffc75fa23ebecca4eceb8183cb1023b33b1696c9 done\n", - "#31 writing layer sha256:9463aa3f56275af97693df69478a2dc1d171f4e763ca6f7b6f370a35e605c154 done\n", - "#31 writing layer sha256:955fd173ed884230c2eded4542d10a97384b408537be6bbb7c4ae09ccd6fb2d0 done\n", - "#31 writing layer sha256:9c42a4ee99755f441251e6043b2cbba16e49818a88775e7501ec17e379ce3cfd done\n", - "#31 writing layer sha256:9c63be0a86e3dc4168db3814bf464e40996afda0031649d9faa8ff7568c3154f done\n", - "#31 writing layer sha256:9e04bda98b05554953459b5edef7b2b14d32f1a00b979a23d04b6eb5c191e66b done\n", - "#31 writing layer sha256:a4a0c690bc7da07e592514dccaa26098a387e8457f69095e922b6d73f7852502 done\n", - "#31 writing layer sha256:a4aafbc094d78a85bef41036173eb816a53bcd3e2564594a32f542facdf2aba6 done\n", - "#31 writing layer sha256:ae36a4d38b76948e39a5957025c984a674d2de18ce162a8caaa536e6f06fccea done\n", - "#31 writing layer sha256:b2fa40114a4a0725c81b327df89c0c3ed5c05ca9aa7f1157394d5096cf5460ce done\n", - "#31 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#31 writing layer sha256:c657dd855c8726b050f2b5bd6f4999883fff6803fe9f22add96f6d3ff89cd477 done\n", - "#31 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6 done\n", - "#31 writing layer sha256:cb506fbdedc817e3d074f609e2edbf9655aacd7784610a1bbac52f2d7be25438 done\n", - "#31 writing layer sha256:d2a6fe65a1f84edb65b63460a75d1cac1aa48b72789006881b0bcfd54cd01ffd done\n", - "#31 writing layer sha256:d2cafa18c788d3e44592cf8dcabf80e138db8389aa89e765550691199861d4fe done\n", - "#31 writing layer sha256:d6a198fd2a224cb803248e86953a164439f1a64889df0861dc5cc7eef4c66664 done\n", - "#31 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304 done\n", - "#31 writing layer sha256:ddc2ade4f6fe866696cb638c8a102cb644fa842c2ca578392802b3e0e5e3bcb7 done\n", - "#31 writing layer sha256:e2cfd7f6244d6f35befa6bda1caa65f1786cecf3f00ef99d7c9a90715ce6a03c done\n", - "#31 writing layer sha256:e42e7ccc889dd8eabf5148a4e91eb843e32688cf109fa7c074d87862f8da5da0 done\n", - "#31 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907\n", - "#31 preparing build cache for export 0.7s done\n", - "#31 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907 done\n", - "#31 writing layer sha256:eaf45e9f32d1f5a9983945a1a9f8dedbb475bc0f578337610e00b4dedec87c20 done\n", - "#31 writing layer sha256:eb411bef39c013c9853651e68f00965dbd826d829c4e478884a2886976e9c989 done\n", - "#31 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759 done\n", - "#31 writing layer sha256:ef4466d6f927d29d404df9c5af3ef5733c86fa14e008762c90110b963978b1e7 done\n", - "#31 writing layer sha256:f346e3ecdf0bee048fa1e3baf1d3128ff0283b903f03e97524944949bd8882e5 done\n", - "#31 writing layer sha256:f3f9a00a1ce9aadda250aacb3e66a932676badc5d8519c41517fdf7ea14c13ed done\n", - "#31 writing layer sha256:f7a50dafd51c2bcaad0ede31fbf29c38fe66776ade008a7fbdb07dba39de7f97 done\n", - "#31 writing layer sha256:fd849d9bd8889edd43ae38e9f21a912430c8526b2c18f3057a3b2cd74eb27b31 done\n", - "#31 writing config sha256:b0a64afdeb53276373de9d6facb2d12c84bc72fa642ca0ff57e9fd720b1e7168 0.0s done\n", - "#31 writing manifest sha256:ec78676329581462682bcf9e88a75e1c58d7ddb5232df774218a8c110a6ed892 0.0s done\n", - "#31 DONE 0.7s\n", - "[2023-08-30 01:21:50,557] [INFO] (packager) - Build Summary:\n", + "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#21 DONE 0.2s\n", + "\n", + "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#22 0.845 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.979 Processing /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#22 0.993 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.23.5)\n", + "#22 1.183 Collecting holoscan~=1.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.336 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (4.1 kB)\n", + "#22 1.412 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.416 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.507 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.512 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.611 Collecting pip==23.3.2 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.615 Downloading pip-23.3.2-py3-none-any.whl.metadata (3.5 kB)\n", + "#22 1.632 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (12.2.0)\n", + "#22 1.635 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.2.1)\n", + "#22 1.638 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.60.1)\n", + "#22 1.641 Requirement already satisfied: Jinja2==3.1.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.1.2)\n", + "#22 1.643 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (23.1)\n", + "#22 1.644 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (6.0)\n", + "#22 1.645 Requirement already satisfied: requests==2.28.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.28.2)\n", + "#22 1.646 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (5.9.6)\n", + "#22 1.757 Collecting wheel-axle-runtime<1.0 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", + "#22 1.763 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", + "#22 1.806 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.8.2)\n", + "#22 1.813 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.1.3)\n", + "#22 1.829 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.10.14)\n", + "#22 1.829 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.66.1)\n", + "#22 1.830 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.9.0)\n", + "#22 1.831 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.10.0)\n", + "#22 1.839 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.3.2)\n", + "#22 1.840 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.6)\n", + "#22 1.841 Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.26.18)\n", + "#22 1.842 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2023.11.17)\n", + "#22 1.860 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.13.3)\n", + "#22 1.895 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (8.1.7)\n", + "#22 1.939 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 3.052 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl (33.6 MB)\n", + "#22 7.685 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.6/33.6 MB 7.3 MB/s eta 0:00:00\n", + "#22 7.692 Downloading pip-23.3.2-py3-none-any.whl (2.1 MB)\n", + "#22 7.738 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 52.2 MB/s eta 0:00:00\n", + "#22 7.745 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", + "#22 7.771 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", + "#22 8.166 Installing collected packages: wheel-axle-runtime, typeguard, pip, colorama, holoscan, monai-deploy-app-sdk\n", + "#22 8.245 Attempting uninstall: pip\n", + "#22 8.248 Found existing installation: pip 24.0\n", + "#22 8.310 Uninstalling pip-24.0:\n", + "#22 8.744 Successfully uninstalled pip-24.0\n", + "#22 10.41 Successfully installed colorama-0.4.6 holoscan-1.0.3 monai-deploy-app-sdk-0.5.1+25.g31e4165.dirty pip-23.3.2 typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", + "#22 DONE 11.1s\n", + "\n", + "#23 [17/21] COPY ./models /opt/holoscan/models\n", + "#23 DONE 0.2s\n", + "\n", + "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", + "#24 DONE 0.1s\n", + "\n", + "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", + "#25 DONE 0.1s\n", + "\n", + "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 DONE 0.1s\n", + "\n", + "#27 [21/21] COPY ./app /opt/holoscan/app\n", + "#27 DONE 0.1s\n", + "\n", + "#28 exporting to docker image format\n", + "#28 exporting layers\n", + "#28 exporting layers 6.0s done\n", + "#28 exporting manifest sha256:3b3b2102892c64900945ca4d84a328af1fb7350c84cb4d85ecee3b94f48ed85c 0.0s done\n", + "#28 exporting config sha256:d6463325d6640490c117da76b90d02687331b2ee1e486047f7c4c968023c3d89 0.0s done\n", + "#28 sending tarball\n", + "#28 ...\n", + "\n", + "#29 importing to docker\n", + "#29 loading layer a292666cef7b 32.77kB / 125.57kB\n", + "#29 loading layer 23d575e38e71 557.06kB / 73.97MB\n", + "#29 loading layer 23d575e38e71 71.86MB / 73.97MB 2.2s\n", + "#29 loading layer 601aae96dba4 196.61kB / 17.81MB\n", + "#29 loading layer 8973e59624ba 492B / 492B\n", + "#29 loading layer 2c4cefc4de42 313B / 313B\n", + "#29 loading layer 450f1c5db7b9 301B / 301B\n", + "#29 loading layer e08583daa6d7 3.30kB / 3.30kB\n", + "#29 loading layer 2c4cefc4de42 313B / 313B 1.4s done\n", + "#29 loading layer a292666cef7b 32.77kB / 125.57kB 4.5s done\n", + "#29 loading layer 23d575e38e71 71.86MB / 73.97MB 4.4s done\n", + "#29 loading layer 601aae96dba4 196.61kB / 17.81MB 1.8s done\n", + "#29 loading layer 8973e59624ba 492B / 492B 1.5s done\n", + "#29 loading layer 450f1c5db7b9 301B / 301B 1.4s done\n", + "#29 loading layer e08583daa6d7 3.30kB / 3.30kB 1.3s done\n", + "#29 DONE 4.5s\n", + "\n", + "#28 exporting to docker image format\n", + "#28 sending tarball 67.2s done\n", + "#28 DONE 73.2s\n", + "\n", + "#30 exporting cache to client directory\n", + "#30 preparing build cache for export\n", + "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", + "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", + "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", + "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", + "#30 writing layer sha256:0bf3a16e4f3f9ec99796b99e331a5c62472bc9377925e1fdc05f64709ed09895 0.0s done\n", + "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", + "#30 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", + "#30 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", + "#30 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", + "#30 writing layer sha256:183aa7032b52e859f5de3dac98da7c8398ed5f8a984d74865561f126c0eecef2 0.0s done\n", + "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", + "#30 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", + "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", + "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", + "#30 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", + "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", + "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", + "#30 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", + "#30 writing layer sha256:4482079b5d33963eb55191bf404b70095535d4a8e2b64dab7373500515f896b4\n", + "#30 writing layer sha256:4482079b5d33963eb55191bf404b70095535d4a8e2b64dab7373500515f896b4 0.4s done\n", + "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950\n", + "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", + "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", + "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", + "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#30 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", + "#30 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", + "#30 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", + "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", + "#30 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", + "#30 writing layer sha256:5ea668ffc2fc267d241dbf17ca283bc879643a189be4f7e3d9034a82fc64a1ea done\n", + "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", + "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", + "#30 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", + "#30 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", + "#30 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", + "#30 writing layer sha256:6e80a527af94a864094c4f9116c2d29d3d7548ec8388579d9cf3f8a39a4b8178\n", + "#30 writing layer sha256:6e80a527af94a864094c4f9116c2d29d3d7548ec8388579d9cf3f8a39a4b8178 1.3s done\n", + "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7\n", + "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", + "#30 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", + "#30 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", + "#30 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", + "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", + "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", + "#30 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", + "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", + "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", + "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", + "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", + "#30 writing layer sha256:bc42865e1c27a9b1bee751f3c99ad2c12a906d32aca396ace7a07231c9cafbd1 done\n", + "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", + "#30 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", + "#30 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", + "#30 writing layer sha256:d6b5d6e098aacb316146a428c6b5aef9692011c6dce0932e3bbfbf27a514b7ed done\n", + "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", + "#30 writing layer sha256:e4297ff4df6f7a8f25cb109e5b24483c314c2e72b8e824f9669173919fc159c9 0.0s done\n", + "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", + "#30 writing layer sha256:e5d9fee7e7dacd6052fe7c78ac5738f1fb693aa068f7c6064c70e98941288a52 0.0s done\n", + "#30 writing layer sha256:e8640a108802cd7519cc53dceb74f7a5c94b562662f1c3c040c2aa6571acf0f3 0.0s done\n", + "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f\n", + "#30 preparing build cache for export 2.5s done\n", + "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", + "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", + "#30 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", + "#30 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", + "#30 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", + "#30 writing config sha256:386c66fca187580548b7c0d95c25fecfb72f326f30df509c9860b977d7e32763 0.0s done\n", + "#30 writing cache manifest sha256:ebd62b21fd87e8654814f8093dffbbf555dced752810b2798c59b2b1a08ce0fd 0.0s done\n", + "#30 DONE 2.5s\n", + "[2024-04-10 15:05:33,378] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1708,7 +1586,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 716356b4f3c0 58 seconds ago 15.4GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 d6463325d664 About a minute ago 17.5GB\n" ] } ], @@ -1766,7 +1644,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.6.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -1778,7 +1656,7 @@ " \"applicationRoot\": \"/opt/holoscan/app\",\n", " \"modelRoot\": \"/opt/holoscan/models\",\n", " \"models\": {\n", - " \"model\": \"/opt/holoscan/models\"\n", + " \"model\": \"/opt/holoscan/models/model\"\n", " },\n", " \"resources\": {\n", " \"cpu\": 1,\n", @@ -1786,19 +1664,20 @@ " \"memory\": \"1Gi\",\n", " \"gpuMemory\": \"6Gi\"\n", " },\n", - " \"version\": 1\n", + " \"version\": 1,\n", + " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2023-08-30 08:21:57 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2024-04-10 22:05:37 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2023-08-30 08:21:57 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2023-08-30 08:21:57 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2023-08-30 08:21:57 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2024-04-10 22:05:37 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2024-04-10 22:05:37 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2024-04-10 22:05:37 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2023-08-30 08:21:57 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2024-04-10 22:05:37 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2023-08-30 08:21:57 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2023-08-30 08:21:57 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2024-04-10 22:05:37 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2024-04-10 22:05:37 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -1830,20 +1709,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 01:22:01,097] [INFO] (runner) - Checking dependencies...\n", - "[2023-08-30 01:22:01,097] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-10 15:05:39,448] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-10 15:05:39,448] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "\n", + "[2024-04-10 15:05:39,449] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2023-08-30 01:22:01,098] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-10 15:05:39,449] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2023-08-30 01:22:01,098] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-10 15:05:39,511] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpba1clh6t/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpba1clh6t/pkg.json\n", + "[2024-04-10 15:05:39,743] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2023-08-30 01:22:01,170] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpp_510e7z/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpp_510e7z/pkg.json\n", - "[2023-08-30 01:22:01,356] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-10 15:05:39,744] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2023-08-30 01:22:01,563] [INFO] (common) - Launching container (03a25b708327) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: elated_heyrovsky\n", + "[2024-04-10 15:05:40,086] [INFO] (common) - Launching container (1d77a7676232) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: festive_hermann\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1852,103 +1733,96 @@ " ipc mode: host\n", " shared memory size: 67108864\n", " devices: \n", - "2023-08-30 08:22:02 [INFO] Launching application python3 /opt/holoscan/app ...\n", + " group_add: 44\n", + "2024-04-10 22:05:40 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2023-08-30 08:22:07,078] [INFO] (root) - Parsed args: Namespace(argv=['/opt/holoscan/app'], input=None, log_level=None, model=None, output=None, workdir=None)\n", + "[2024-04-10 22:05:45,192] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2023-08-30 08:22:07,081] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2024-04-10 22:05:45,195] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2023-08-30 08:22:07,082] [INFO] (root) - End compose\n", + "[2024-04-10 22:05:45,197] [INFO] (root) - End compose\n", "\n", - "[info] [app_driver.cpp:1025] Launching the driver/health checking service\n", + "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:210] Creating context\n", + "[info] [gxf_executor.cpp:211] Creating context\n", "\n", - "[info] [server.cpp:73] Health checking server listening on 0.0.0.0:8777\n", + "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "\n", "[info] [greedy_scheduler.cpp:190] Scheduling 8 entities\n", "\n", - "[2023-08-30 08:22:07,211] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 22:05:45,297] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2023-08-30 08:22:07,580] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 22:05:46,131] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2023-08-30 08:22:07,580] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 22:05:46,131] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2023-08-30 08:22:07,580] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "\n", - "[2023-08-30 08:22:07,580] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-10 22:05:46,131] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2023-08-30 08:22:07,580] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 22:05:46,131] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2023-08-30 08:22:07,581] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 22:05:46,131] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2023-08-30 08:22:07,581] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 22:05:46,131] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2023-08-30 08:22:07,581] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 22:05:46,131] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2023-08-30 08:22:07,581] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 22:05:46,131] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2023-08-30 08:22:07,581] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 22:05:46,132] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2023-08-30 08:22:07,581] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 22:05:46,132] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2023-08-30 08:22:07,581] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 22:05:46,132] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2023-08-30 08:22:07,581] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 22:05:46,132] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2023-08-30 08:22:08,032] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", + "[2024-04-10 22:05:46,132] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", + "[2024-04-10 22:05:46,349] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", "\n", - " warn_deprecated(argname, msg, warning_category)\n", + "[2024-04-10 22:05:49,959] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary SaveImaged.__init__:resample: Current default value of argument `resample=True` has been deprecated since version 1.1. It will be changed to `resample=False` in version 1.3.\n", + "[2024-04-10 22:05:51,433] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", "\n", - " warn_deprecated(argname, msg, warning_category)\n", + "[2024-04-10 22:05:51,433] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "\n", - "[2023-08-30 08:22:18,434] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", - "\n", - "[2023-08-30 08:22:19,925] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "\n", - "[2023-08-30 08:22:19,925] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", - "\n", - "Exception occurred for operator: 'stl_conversion_op'\n", + "Exception occurred in compute method of operator: 'stl_conversion_op'\n", "\n", "Traceback (most recent call last):\n", "\n", - " File \"/home/holoscan/.local/lib/python3.8/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 118, in compute\n", + " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 118, in compute\n", "\n", " stl_bytes = self._convert(input_image, _output_file)\n", "\n", - " File \"/home/holoscan/.local/lib/python3.8/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 135, in _convert\n", + " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 135, in _convert\n", "\n", " return self._converter.convert(\n", "\n", - " File \"/home/holoscan/.local/lib/python3.8/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 182, in convert\n", + " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 182, in convert\n", "\n", " nda = STLConverter.get_largest_cc(nda)\n", "\n", - " File \"/home/holoscan/.local/lib/python3.8/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 255, in get_largest_cc\n", + " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 255, in get_largest_cc\n", "\n", " labels = label(nda)\n", "\n", - " File \"/home/holoscan/.local/lib/python3.8/site-packages/monai/deploy/utils/importutil.py\", line 274, in __call__\n", + " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/utils/importutil.py\", line 274, in __call__\n", "\n", " raise self._exception\n", "\n", - " File \"/home/holoscan/.local/lib/python3.8/site-packages/monai/deploy/utils/importutil.py\", line 226, in optional_import\n", + " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/utils/importutil.py\", line 226, in optional_import\n", "\n", " pkg = __import__(module) # top level module\n", "\n", @@ -1960,223 +1834,41 @@ "\n", " https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " warnings.warn(\n", "\n", - "[2023-08-30 08:22:22,121] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - "\n", - " warnings.warn(msg)\n", - "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - "\n", - " warnings.warn(msg)\n", - "\n", - "[2023-08-30 08:22:22,124] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,125] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,126] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,127] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,127] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,128] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,129] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,129] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,130] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,131] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,131] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,132] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,133] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,133] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,134] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,134] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,135] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,136] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,137] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,137] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,138] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,139] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,140] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,141] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,141] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,142] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,143] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,144] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,145] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,146] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,147] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,148] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,148] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,149] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,150] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,151] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,152] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,152] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", + "[2024-04-10 22:05:52,708] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:22:22,153] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", + "[2024-04-10 22:05:52,708] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2023-08-30 08:22:22,153] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", + "[2024-04-10 22:05:52,708] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:22:22,154] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", + "[2024-04-10 22:05:52,708] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2023-08-30 08:22:22,155] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", + "[2024-04-10 22:05:52,709] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2023-08-30 08:22:22,155] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", + "[2024-04-10 22:05:52,709] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:22:22,156] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", + "[2024-04-10 22:05:52,709] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2023-08-30 08:22:22,157] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", + "[2024-04-10 22:05:52,709] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2023-08-30 08:22:22,158] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,158] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,159] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,160] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,160] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,161] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,162] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,162] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,163] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,163] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,164] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,165] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,165] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,166] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,167] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,167] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,168] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,168] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,169] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,170] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,170] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,171] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,172] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,172] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,173] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,173] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,174] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,175] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,175] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,176] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,177] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,178] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,178] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,179] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,180] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,180] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,181] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,181] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,182] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,183] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,183] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "\n", - "[2023-08-30 08:22:22,223] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2023-08-30 08:22:22,224] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "\n", - "[2023-08-30 08:22:22,224] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2023-08-30 08:22:22,224] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "\n", - "[2023-08-30 08:22:22,224] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "\n", - "[2023-08-30 08:22:22,224] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2023-08-30 08:22:22,224] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "\n", - "[2023-08-30 08:22:22,224] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "\n", - "[2023-08-30 08:22:22,225] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 22:05:52,709] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", "\n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", "\n", - "[2023-08-30 08:22:22,346] [INFO] (app.AISpleenSegApp) - End run\n", + "[2024-04-10 22:05:52,805] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[2023-08-30 01:22:23,709] [INFO] (common) - Container 'elated_heyrovsky'(03a25b708327) exited.\n" + "[2024-04-10 15:05:54,069] [INFO] (common) - Container 'festive_hermann'(1d77a7676232) exited.\n" ] } ], @@ -2195,15 +1887,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.39359760221330773075218270807121109.dcm stl\n" - ] - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details." + "1.2.826.0.1.3680043.10.511.3.33232544284800485207819891596585914.dcm stl\n" ] } ], @@ -2228,7 +1912,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.12" }, "vscode": { "interpreter": { diff --git a/notebooks/tutorials/05_multi_model_app.ipynb b/notebooks/tutorials/05_multi_model_app.ipynb index e773fafd..2b505888 100644 --- a/notebooks/tutorials/05_multi_model_app.ipynb +++ b/notebooks/tutorials/05_multi_model_app.ipynb @@ -175,23 +175,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (4.7.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (3.12.2)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (2.31.0)\n", - "Requirement already satisfied: six in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (1.16.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.66.1)\n", - "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from gdown) (4.12.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from beautifulsoup4->gdown) (2.4.1)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.2.0)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (3.4)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2.0.4)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (2023.7.22)\n", - "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", + "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.3)\n", + "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.28.2)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", + "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.6)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", + "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "Downloading...\n", - "From (uriginal): https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd\n", - "From (redirected): https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd&confirm=t&uuid=3866f09d-9a59-46f1-a71a-1270d4eeb6fe\n", + "From (original): https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd\n", + "From (redirected): https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd&confirm=t&uuid=63a55326-90b2-463a-9bdc-a115a7336f1c\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_multi_model_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 647M/647M [00:08<00:00, 73.4MB/s]\n", + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 647M/647M [00:06<00:00, 105MB/s]\n", "Archive: ai_multi_model_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -397,9 +399,7 @@ " inflating: dcm/1-202.dcm \n", " inflating: dcm/1-203.dcm \n", " inflating: dcm/1-204.dcm \n", - " creating: multi_models/pancreas_ct_dints/\n", " inflating: multi_models/pancreas_ct_dints/model.ts \n", - " creating: multi_models/spleen_ct/\n", " inflating: multi_models/spleen_ct/model.ts \n" ] } @@ -747,290 +747,59 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2023-08-30 01:28:16,680] [INFO] (root) - Parsed args: Namespace(argv=[], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-08-30 01:28:16,697] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2023-08-30 01:28:16,702] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:210] Creating context\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 15:07:47,589] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-10 15:07:47,599] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", + "[2024-04-10 15:07:47,604] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[info] [greedy_scheduler.cpp:190] Scheduling 9 entities\n", - "[2023-08-30 01:28:16,783] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2023-08-30 01:28:17,108] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2023-08-30 01:28:17,109] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 15:07:47,665] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 15:07:48,220] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 15:07:48,221] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2023-08-30 01:28:17,110] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:28:17,111] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:28:17,111] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2023-08-30 01:28:17,112] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:28:17,112] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2023-08-30 01:28:17,113] [INFO] (root) - Series attribute Modality value: CT\n", - "[2023-08-30 01:28:17,114] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:28:17,114] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:28:17,115] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2023-08-30 01:28:17,116] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:28:17,116] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:28:17,327] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary SaveImaged.__init__:resample: Current default value of argument `resample=True` has been deprecated since version 1.1. It will be changed to `resample=False` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "[2023-08-30 01:29:46,021] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2024-04-10 15:07:48,222] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 15:07:48,223] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-10 15:07:48,224] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 15:07:48,227] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:07:48,228] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 15:07:48,228] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 15:07:48,229] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:07:48,230] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 15:07:48,231] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 15:07:48,232] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:07:48,233] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 15:07:48,452] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2024-04-10 15:09:28,757] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2023-08-30 01:29:52,325] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - " warnings.warn(msg)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - " warnings.warn(msg)\n", - "[2023-08-30 01:29:52,328] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "[2023-08-30 01:29:52,329] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "[2023-08-30 01:29:52,331] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "[2023-08-30 01:29:52,333] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "[2023-08-30 01:29:52,336] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "[2023-08-30 01:29:52,339] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "[2023-08-30 01:29:52,341] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "[2023-08-30 01:29:52,344] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "[2023-08-30 01:29:52,346] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "[2023-08-30 01:29:52,349] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "[2023-08-30 01:29:52,351] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "[2023-08-30 01:29:52,353] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "[2023-08-30 01:29:52,355] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "[2023-08-30 01:29:52,357] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "[2023-08-30 01:29:52,359] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "[2023-08-30 01:29:52,361] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "[2023-08-30 01:29:52,363] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "[2023-08-30 01:29:52,365] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "[2023-08-30 01:29:52,367] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "[2023-08-30 01:29:52,369] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "[2023-08-30 01:29:52,371] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "[2023-08-30 01:29:52,372] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "[2023-08-30 01:29:52,374] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "[2023-08-30 01:29:52,376] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "[2023-08-30 01:29:52,378] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "[2023-08-30 01:29:52,380] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "[2023-08-30 01:29:52,382] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "[2023-08-30 01:29:52,383] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "[2023-08-30 01:29:52,385] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "[2023-08-30 01:29:52,387] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "[2023-08-30 01:29:52,389] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "[2023-08-30 01:29:52,392] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "[2023-08-30 01:29:52,394] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "[2023-08-30 01:29:52,397] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "[2023-08-30 01:29:52,400] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "[2023-08-30 01:29:52,402] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "[2023-08-30 01:29:52,405] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "[2023-08-30 01:29:52,408] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "[2023-08-30 01:29:52,410] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "[2023-08-30 01:29:52,413] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "[2023-08-30 01:29:52,416] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "[2023-08-30 01:29:52,418] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "[2023-08-30 01:29:52,421] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "[2023-08-30 01:29:52,423] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "[2023-08-30 01:29:52,426] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "[2023-08-30 01:29:52,428] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "[2023-08-30 01:29:52,430] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "[2023-08-30 01:29:52,433] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "[2023-08-30 01:29:52,435] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "[2023-08-30 01:29:52,437] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "[2023-08-30 01:29:52,439] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "[2023-08-30 01:29:52,441] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "[2023-08-30 01:29:52,444] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "[2023-08-30 01:29:52,447] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "[2023-08-30 01:29:52,449] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "[2023-08-30 01:29:52,452] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "[2023-08-30 01:29:52,454] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "[2023-08-30 01:29:52,456] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "[2023-08-30 01:29:52,458] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "[2023-08-30 01:29:52,460] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "[2023-08-30 01:29:52,462] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "[2023-08-30 01:29:52,464] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "[2023-08-30 01:29:52,466] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "[2023-08-30 01:29:52,469] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "[2023-08-30 01:29:52,471] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "[2023-08-30 01:29:52,473] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "[2023-08-30 01:29:52,475] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "[2023-08-30 01:29:52,515] [INFO] (highdicom.seg.sop) - skip empty plane 0 of segment #2\n", - "[2023-08-30 01:29:52,516] [INFO] (highdicom.seg.sop) - skip empty plane 1 of segment #2\n", - "[2023-08-30 01:29:52,517] [INFO] (highdicom.seg.sop) - skip empty plane 2 of segment #2\n", - "[2023-08-30 01:29:52,518] [INFO] (highdicom.seg.sop) - skip empty plane 3 of segment #2\n", - "[2023-08-30 01:29:52,519] [INFO] (highdicom.seg.sop) - skip empty plane 4 of segment #2\n", - "[2023-08-30 01:29:52,520] [INFO] (highdicom.seg.sop) - skip empty plane 5 of segment #2\n", - "[2023-08-30 01:29:52,521] [INFO] (highdicom.seg.sop) - skip empty plane 6 of segment #2\n", - "[2023-08-30 01:29:52,521] [INFO] (highdicom.seg.sop) - skip empty plane 7 of segment #2\n", - "[2023-08-30 01:29:52,522] [INFO] (highdicom.seg.sop) - skip empty plane 8 of segment #2\n", - "[2023-08-30 01:29:52,523] [INFO] (highdicom.seg.sop) - skip empty plane 9 of segment #2\n", - "[2023-08-30 01:29:52,524] [INFO] (highdicom.seg.sop) - skip empty plane 10 of segment #2\n", - "[2023-08-30 01:29:52,525] [INFO] (highdicom.seg.sop) - skip empty plane 11 of segment #2\n", - "[2023-08-30 01:29:52,526] [INFO] (highdicom.seg.sop) - skip empty plane 12 of segment #2\n", - "[2023-08-30 01:29:52,526] [INFO] (highdicom.seg.sop) - skip empty plane 13 of segment #2\n", - "[2023-08-30 01:29:52,527] [INFO] (highdicom.seg.sop) - skip empty plane 14 of segment #2\n", - "[2023-08-30 01:29:52,528] [INFO] (highdicom.seg.sop) - skip empty plane 15 of segment #2\n", - "[2023-08-30 01:29:52,529] [INFO] (highdicom.seg.sop) - skip empty plane 16 of segment #2\n", - "[2023-08-30 01:29:52,532] [INFO] (highdicom.seg.sop) - skip empty plane 17 of segment #2\n", - "[2023-08-30 01:29:52,532] [INFO] (highdicom.seg.sop) - skip empty plane 18 of segment #2\n", - "[2023-08-30 01:29:52,533] [INFO] (highdicom.seg.sop) - skip empty plane 19 of segment #2\n", - "[2023-08-30 01:29:52,534] [INFO] (highdicom.seg.sop) - skip empty plane 20 of segment #2\n", - "[2023-08-30 01:29:52,534] [INFO] (highdicom.seg.sop) - skip empty plane 21 of segment #2\n", - "[2023-08-30 01:29:52,536] [INFO] (highdicom.seg.sop) - skip empty plane 22 of segment #2\n", - "[2023-08-30 01:29:52,537] [INFO] (highdicom.seg.sop) - skip empty plane 23 of segment #2\n", - "[2023-08-30 01:29:52,538] [INFO] (highdicom.seg.sop) - skip empty plane 24 of segment #2\n", - "[2023-08-30 01:29:52,539] [INFO] (highdicom.seg.sop) - skip empty plane 25 of segment #2\n", - "[2023-08-30 01:29:52,540] [INFO] (highdicom.seg.sop) - skip empty plane 26 of segment #2\n", - "[2023-08-30 01:29:52,541] [INFO] (highdicom.seg.sop) - skip empty plane 27 of segment #2\n", - "[2023-08-30 01:29:52,542] [INFO] (highdicom.seg.sop) - skip empty plane 28 of segment #2\n", - "[2023-08-30 01:29:52,543] [INFO] (highdicom.seg.sop) - skip empty plane 29 of segment #2\n", - "[2023-08-30 01:29:52,544] [INFO] (highdicom.seg.sop) - skip empty plane 30 of segment #2\n", - "[2023-08-30 01:29:52,545] [INFO] (highdicom.seg.sop) - skip empty plane 31 of segment #2\n", - "[2023-08-30 01:29:52,546] [INFO] (highdicom.seg.sop) - skip empty plane 32 of segment #2\n", - "[2023-08-30 01:29:52,547] [INFO] (highdicom.seg.sop) - skip empty plane 33 of segment #2\n", - "[2023-08-30 01:29:52,549] [INFO] (highdicom.seg.sop) - skip empty plane 34 of segment #2\n", - "[2023-08-30 01:29:52,550] [INFO] (highdicom.seg.sop) - skip empty plane 35 of segment #2\n", - "[2023-08-30 01:29:52,551] [INFO] (highdicom.seg.sop) - skip empty plane 36 of segment #2\n", - "[2023-08-30 01:29:52,552] [INFO] (highdicom.seg.sop) - skip empty plane 37 of segment #2\n", - "[2023-08-30 01:29:52,553] [INFO] (highdicom.seg.sop) - skip empty plane 38 of segment #2\n", - "[2023-08-30 01:29:52,554] [INFO] (highdicom.seg.sop) - skip empty plane 39 of segment #2\n", - "[2023-08-30 01:29:52,555] [INFO] (highdicom.seg.sop) - skip empty plane 40 of segment #2\n", - "[2023-08-30 01:29:52,556] [INFO] (highdicom.seg.sop) - skip empty plane 41 of segment #2\n", - "[2023-08-30 01:29:52,557] [INFO] (highdicom.seg.sop) - skip empty plane 42 of segment #2\n", - "[2023-08-30 01:29:52,558] [INFO] (highdicom.seg.sop) - skip empty plane 43 of segment #2\n", - "[2023-08-30 01:29:52,559] [INFO] (highdicom.seg.sop) - skip empty plane 44 of segment #2\n", - "[2023-08-30 01:29:52,560] [INFO] (highdicom.seg.sop) - skip empty plane 45 of segment #2\n", - "[2023-08-30 01:29:52,561] [INFO] (highdicom.seg.sop) - skip empty plane 46 of segment #2\n", - "[2023-08-30 01:29:52,562] [INFO] (highdicom.seg.sop) - skip empty plane 47 of segment #2\n", - "[2023-08-30 01:29:52,563] [INFO] (highdicom.seg.sop) - skip empty plane 48 of segment #2\n", - "[2023-08-30 01:29:52,564] [INFO] (highdicom.seg.sop) - skip empty plane 49 of segment #2\n", - "[2023-08-30 01:29:52,565] [INFO] (highdicom.seg.sop) - skip empty plane 50 of segment #2\n", - "[2023-08-30 01:29:52,566] [INFO] (highdicom.seg.sop) - skip empty plane 51 of segment #2\n", - "[2023-08-30 01:29:52,567] [INFO] (highdicom.seg.sop) - skip empty plane 52 of segment #2\n", - "[2023-08-30 01:29:52,568] [INFO] (highdicom.seg.sop) - skip empty plane 53 of segment #2\n", - "[2023-08-30 01:29:52,569] [INFO] (highdicom.seg.sop) - skip empty plane 54 of segment #2\n", - "[2023-08-30 01:29:52,570] [INFO] (highdicom.seg.sop) - skip empty plane 55 of segment #2\n", - "[2023-08-30 01:29:52,572] [INFO] (highdicom.seg.sop) - skip empty plane 56 of segment #2\n", - "[2023-08-30 01:29:52,573] [INFO] (highdicom.seg.sop) - skip empty plane 57 of segment #2\n", - "[2023-08-30 01:29:52,574] [INFO] (highdicom.seg.sop) - skip empty plane 58 of segment #2\n", - "[2023-08-30 01:29:52,575] [INFO] (highdicom.seg.sop) - skip empty plane 59 of segment #2\n", - "[2023-08-30 01:29:52,576] [INFO] (highdicom.seg.sop) - skip empty plane 60 of segment #2\n", - "[2023-08-30 01:29:52,577] [INFO] (highdicom.seg.sop) - skip empty plane 61 of segment #2\n", - "[2023-08-30 01:29:52,578] [INFO] (highdicom.seg.sop) - skip empty plane 62 of segment #2\n", - "[2023-08-30 01:29:52,579] [INFO] (highdicom.seg.sop) - skip empty plane 63 of segment #2\n", - "[2023-08-30 01:29:52,580] [INFO] (highdicom.seg.sop) - skip empty plane 64 of segment #2\n", - "[2023-08-30 01:29:52,581] [INFO] (highdicom.seg.sop) - skip empty plane 65 of segment #2\n", - "[2023-08-30 01:29:52,582] [INFO] (highdicom.seg.sop) - skip empty plane 66 of segment #2\n", - "[2023-08-30 01:29:52,583] [INFO] (highdicom.seg.sop) - skip empty plane 67 of segment #2\n", - "[2023-08-30 01:29:52,620] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:29:52,621] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2023-08-30 01:29:52,623] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:29:52,623] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2023-08-30 01:29:52,624] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2023-08-30 01:29:52,625] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:29:52,626] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2023-08-30 01:29:52,627] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2023-08-30 01:29:52,627] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2023-08-30 01:29:54,671] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "[2023-08-30 01:29:54,673] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "[2023-08-30 01:29:54,675] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "[2023-08-30 01:29:54,676] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "[2023-08-30 01:29:54,677] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "[2023-08-30 01:29:54,678] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "[2023-08-30 01:29:54,680] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "[2023-08-30 01:29:54,681] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "[2023-08-30 01:29:54,682] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "[2023-08-30 01:29:54,684] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "[2023-08-30 01:29:54,686] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "[2023-08-30 01:29:54,689] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "[2023-08-30 01:29:54,692] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "[2023-08-30 01:29:54,694] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "[2023-08-30 01:29:54,697] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "[2023-08-30 01:29:54,700] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "[2023-08-30 01:29:54,702] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "[2023-08-30 01:29:54,705] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "[2023-08-30 01:29:54,707] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "[2023-08-30 01:29:54,710] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "[2023-08-30 01:29:54,712] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "[2023-08-30 01:29:54,714] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "[2023-08-30 01:29:54,716] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "[2023-08-30 01:29:54,718] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "[2023-08-30 01:29:54,720] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "[2023-08-30 01:29:54,722] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "[2023-08-30 01:29:54,724] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "[2023-08-30 01:29:54,726] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "[2023-08-30 01:29:54,729] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "[2023-08-30 01:29:54,730] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "[2023-08-30 01:29:54,732] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "[2023-08-30 01:29:54,734] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "[2023-08-30 01:29:54,736] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "[2023-08-30 01:29:54,739] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "[2023-08-30 01:29:54,742] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "[2023-08-30 01:29:54,745] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "[2023-08-30 01:29:54,747] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "[2023-08-30 01:29:54,750] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "[2023-08-30 01:29:54,752] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "[2023-08-30 01:29:54,755] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "[2023-08-30 01:29:54,757] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "[2023-08-30 01:29:54,760] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "[2023-08-30 01:29:54,762] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "[2023-08-30 01:29:54,764] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "[2023-08-30 01:29:54,767] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "[2023-08-30 01:29:54,769] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "[2023-08-30 01:29:54,771] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "[2023-08-30 01:29:54,773] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "[2023-08-30 01:29:54,775] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "[2023-08-30 01:29:54,777] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "[2023-08-30 01:29:54,779] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "[2023-08-30 01:29:54,781] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "[2023-08-30 01:29:54,783] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "[2023-08-30 01:29:54,785] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "[2023-08-30 01:29:54,788] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "[2023-08-30 01:29:54,790] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "[2023-08-30 01:29:54,793] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "[2023-08-30 01:29:54,796] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "[2023-08-30 01:29:54,799] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "[2023-08-30 01:29:54,801] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "[2023-08-30 01:29:54,804] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "[2023-08-30 01:29:54,806] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "[2023-08-30 01:29:54,809] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "[2023-08-30 01:29:54,811] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "[2023-08-30 01:29:54,813] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "[2023-08-30 01:29:54,817] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "[2023-08-30 01:29:54,819] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "[2023-08-30 01:29:54,822] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "[2023-08-30 01:29:54,824] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "[2023-08-30 01:29:54,826] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "[2023-08-30 01:29:54,828] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "[2023-08-30 01:29:54,830] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "[2023-08-30 01:29:54,832] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "[2023-08-30 01:29:54,834] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "[2023-08-30 01:29:54,837] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "[2023-08-30 01:29:54,839] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "[2023-08-30 01:29:54,842] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "[2023-08-30 01:29:54,844] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "[2023-08-30 01:29:54,846] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "[2023-08-30 01:29:54,848] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "[2023-08-30 01:29:54,850] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "[2023-08-30 01:29:54,852] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "[2023-08-30 01:29:54,854] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "[2023-08-30 01:29:54,856] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "[2023-08-30 01:29:54,858] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "[2023-08-30 01:29:54,860] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "[2023-08-30 01:29:54,863] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "[2023-08-30 01:29:54,922] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:29:54,923] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2023-08-30 01:29:54,924] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:29:54,925] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2023-08-30 01:29:54,926] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2023-08-30 01:29:54,926] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:29:54,927] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2023-08-30 01:29:54,928] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2023-08-30 01:29:54,928] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 15:09:34,244] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:09:34,246] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 15:09:34,247] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:09:34,248] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 15:09:34,249] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 15:09:34,250] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:09:34,251] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 15:09:34,252] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 15:09:34,253] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 15:09:35,375] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:09:35,377] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 15:09:35,377] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:09:35,378] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 15:09:35,380] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 15:09:35,381] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:09:35,382] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 15:09:35,383] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 15:09:35,384] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[2023-08-30 01:29:55,020] [INFO] (__main__.App) - End run\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n" + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[2024-04-10 15:09:35,488] [INFO] (__main__.App) - End run\n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n" ] } ], @@ -1402,290 +1171,59 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 01:30:01,466] [INFO] (root) - Parsed args: Namespace(argv=['my_app'], input=None, log_level=None, model=None, output=None, workdir=None)\n", - "[2023-08-30 01:30:01,471] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2023-08-30 01:30:01,473] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:210] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1595] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1741] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1771] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1773] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[2024-04-10 15:09:40,274] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2024-04-10 15:09:40,282] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", + "[2024-04-10 15:09:40,284] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 9 entities\n", - "[2023-08-30 01:30:01,532] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2023-08-30 01:30:02,120] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 15:09:40,321] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - Series attribute Modality value: CT\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2023-08-30 01:30:02,121] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2023-08-30 01:30:02,541] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary SaveImaged.__init__:resample: Current default value of argument `resample=True` has been deprecated since version 1.1. It will be changed to `resample=False` in version 1.3.\n", - " warn_deprecated(argname, msg, warning_category)\n", - "[2023-08-30 01:31:30,380] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 15:09:40,657] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 15:09:41,061] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2024-04-10 15:11:19,819] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2023-08-30 01:31:37,123] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - " warnings.warn(msg)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - " warnings.warn(msg)\n", - "[2023-08-30 01:31:37,125] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "[2023-08-30 01:31:37,125] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "[2023-08-30 01:31:37,126] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "[2023-08-30 01:31:37,127] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "[2023-08-30 01:31:37,127] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "[2023-08-30 01:31:37,128] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "[2023-08-30 01:31:37,129] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "[2023-08-30 01:31:37,129] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "[2023-08-30 01:31:37,130] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "[2023-08-30 01:31:37,131] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "[2023-08-30 01:31:37,132] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "[2023-08-30 01:31:37,133] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "[2023-08-30 01:31:37,133] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "[2023-08-30 01:31:37,134] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "[2023-08-30 01:31:37,134] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "[2023-08-30 01:31:37,135] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "[2023-08-30 01:31:37,136] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "[2023-08-30 01:31:37,136] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "[2023-08-30 01:31:37,137] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "[2023-08-30 01:31:37,137] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "[2023-08-30 01:31:37,138] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "[2023-08-30 01:31:37,139] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "[2023-08-30 01:31:37,139] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "[2023-08-30 01:31:37,140] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "[2023-08-30 01:31:37,140] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "[2023-08-30 01:31:37,141] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "[2023-08-30 01:31:37,141] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "[2023-08-30 01:31:37,142] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "[2023-08-30 01:31:37,143] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "[2023-08-30 01:31:37,143] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "[2023-08-30 01:31:37,144] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "[2023-08-30 01:31:37,144] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "[2023-08-30 01:31:37,145] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "[2023-08-30 01:31:37,146] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "[2023-08-30 01:31:37,146] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "[2023-08-30 01:31:37,147] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "[2023-08-30 01:31:37,147] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "[2023-08-30 01:31:37,148] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "[2023-08-30 01:31:37,149] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "[2023-08-30 01:31:37,149] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "[2023-08-30 01:31:37,150] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "[2023-08-30 01:31:37,150] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "[2023-08-30 01:31:37,151] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "[2023-08-30 01:31:37,152] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "[2023-08-30 01:31:37,152] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "[2023-08-30 01:31:37,153] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "[2023-08-30 01:31:37,153] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "[2023-08-30 01:31:37,154] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "[2023-08-30 01:31:37,154] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "[2023-08-30 01:31:37,155] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "[2023-08-30 01:31:37,156] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "[2023-08-30 01:31:37,156] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "[2023-08-30 01:31:37,157] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "[2023-08-30 01:31:37,157] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "[2023-08-30 01:31:37,158] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "[2023-08-30 01:31:37,159] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "[2023-08-30 01:31:37,159] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "[2023-08-30 01:31:37,160] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "[2023-08-30 01:31:37,160] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "[2023-08-30 01:31:37,161] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "[2023-08-30 01:31:37,162] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "[2023-08-30 01:31:37,162] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "[2023-08-30 01:31:37,163] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "[2023-08-30 01:31:37,163] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "[2023-08-30 01:31:37,164] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "[2023-08-30 01:31:37,165] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "[2023-08-30 01:31:37,165] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "[2023-08-30 01:31:37,194] [INFO] (highdicom.seg.sop) - skip empty plane 0 of segment #2\n", - "[2023-08-30 01:31:37,195] [INFO] (highdicom.seg.sop) - skip empty plane 1 of segment #2\n", - "[2023-08-30 01:31:37,195] [INFO] (highdicom.seg.sop) - skip empty plane 2 of segment #2\n", - "[2023-08-30 01:31:37,195] [INFO] (highdicom.seg.sop) - skip empty plane 3 of segment #2\n", - "[2023-08-30 01:31:37,195] [INFO] (highdicom.seg.sop) - skip empty plane 4 of segment #2\n", - "[2023-08-30 01:31:37,195] [INFO] (highdicom.seg.sop) - skip empty plane 5 of segment #2\n", - "[2023-08-30 01:31:37,196] [INFO] (highdicom.seg.sop) - skip empty plane 6 of segment #2\n", - "[2023-08-30 01:31:37,196] [INFO] (highdicom.seg.sop) - skip empty plane 7 of segment #2\n", - "[2023-08-30 01:31:37,196] [INFO] (highdicom.seg.sop) - skip empty plane 8 of segment #2\n", - "[2023-08-30 01:31:37,196] [INFO] (highdicom.seg.sop) - skip empty plane 9 of segment #2\n", - "[2023-08-30 01:31:37,196] [INFO] (highdicom.seg.sop) - skip empty plane 10 of segment #2\n", - "[2023-08-30 01:31:37,196] [INFO] (highdicom.seg.sop) - skip empty plane 11 of segment #2\n", - "[2023-08-30 01:31:37,197] [INFO] (highdicom.seg.sop) - skip empty plane 12 of segment #2\n", - "[2023-08-30 01:31:37,197] [INFO] (highdicom.seg.sop) - skip empty plane 13 of segment #2\n", - "[2023-08-30 01:31:37,197] [INFO] (highdicom.seg.sop) - skip empty plane 14 of segment #2\n", - "[2023-08-30 01:31:37,197] [INFO] (highdicom.seg.sop) - skip empty plane 15 of segment #2\n", - "[2023-08-30 01:31:37,197] [INFO] (highdicom.seg.sop) - skip empty plane 16 of segment #2\n", - "[2023-08-30 01:31:37,197] [INFO] (highdicom.seg.sop) - skip empty plane 17 of segment #2\n", - "[2023-08-30 01:31:37,197] [INFO] (highdicom.seg.sop) - skip empty plane 18 of segment #2\n", - "[2023-08-30 01:31:37,198] [INFO] (highdicom.seg.sop) - skip empty plane 19 of segment #2\n", - "[2023-08-30 01:31:37,198] [INFO] (highdicom.seg.sop) - skip empty plane 20 of segment #2\n", - "[2023-08-30 01:31:37,198] [INFO] (highdicom.seg.sop) - skip empty plane 21 of segment #2\n", - "[2023-08-30 01:31:37,198] [INFO] (highdicom.seg.sop) - skip empty plane 22 of segment #2\n", - "[2023-08-30 01:31:37,198] [INFO] (highdicom.seg.sop) - skip empty plane 23 of segment #2\n", - "[2023-08-30 01:31:37,198] [INFO] (highdicom.seg.sop) - skip empty plane 24 of segment #2\n", - "[2023-08-30 01:31:37,199] [INFO] (highdicom.seg.sop) - skip empty plane 25 of segment #2\n", - "[2023-08-30 01:31:37,199] [INFO] (highdicom.seg.sop) - skip empty plane 26 of segment #2\n", - "[2023-08-30 01:31:37,199] [INFO] (highdicom.seg.sop) - skip empty plane 27 of segment #2\n", - "[2023-08-30 01:31:37,199] [INFO] (highdicom.seg.sop) - skip empty plane 28 of segment #2\n", - "[2023-08-30 01:31:37,199] [INFO] (highdicom.seg.sop) - skip empty plane 29 of segment #2\n", - "[2023-08-30 01:31:37,199] [INFO] (highdicom.seg.sop) - skip empty plane 30 of segment #2\n", - "[2023-08-30 01:31:37,199] [INFO] (highdicom.seg.sop) - skip empty plane 31 of segment #2\n", - "[2023-08-30 01:31:37,200] [INFO] (highdicom.seg.sop) - skip empty plane 32 of segment #2\n", - "[2023-08-30 01:31:37,200] [INFO] (highdicom.seg.sop) - skip empty plane 33 of segment #2\n", - "[2023-08-30 01:31:37,200] [INFO] (highdicom.seg.sop) - skip empty plane 34 of segment #2\n", - "[2023-08-30 01:31:37,200] [INFO] (highdicom.seg.sop) - skip empty plane 35 of segment #2\n", - "[2023-08-30 01:31:37,200] [INFO] (highdicom.seg.sop) - skip empty plane 36 of segment #2\n", - "[2023-08-30 01:31:37,200] [INFO] (highdicom.seg.sop) - skip empty plane 37 of segment #2\n", - "[2023-08-30 01:31:37,201] [INFO] (highdicom.seg.sop) - skip empty plane 38 of segment #2\n", - "[2023-08-30 01:31:37,201] [INFO] (highdicom.seg.sop) - skip empty plane 39 of segment #2\n", - "[2023-08-30 01:31:37,201] [INFO] (highdicom.seg.sop) - skip empty plane 40 of segment #2\n", - "[2023-08-30 01:31:37,201] [INFO] (highdicom.seg.sop) - skip empty plane 41 of segment #2\n", - "[2023-08-30 01:31:37,201] [INFO] (highdicom.seg.sop) - skip empty plane 42 of segment #2\n", - "[2023-08-30 01:31:37,201] [INFO] (highdicom.seg.sop) - skip empty plane 43 of segment #2\n", - "[2023-08-30 01:31:37,201] [INFO] (highdicom.seg.sop) - skip empty plane 44 of segment #2\n", - "[2023-08-30 01:31:37,202] [INFO] (highdicom.seg.sop) - skip empty plane 45 of segment #2\n", - "[2023-08-30 01:31:37,202] [INFO] (highdicom.seg.sop) - skip empty plane 46 of segment #2\n", - "[2023-08-30 01:31:37,202] [INFO] (highdicom.seg.sop) - skip empty plane 47 of segment #2\n", - "[2023-08-30 01:31:37,202] [INFO] (highdicom.seg.sop) - skip empty plane 48 of segment #2\n", - "[2023-08-30 01:31:37,202] [INFO] (highdicom.seg.sop) - skip empty plane 49 of segment #2\n", - "[2023-08-30 01:31:37,202] [INFO] (highdicom.seg.sop) - skip empty plane 50 of segment #2\n", - "[2023-08-30 01:31:37,203] [INFO] (highdicom.seg.sop) - skip empty plane 51 of segment #2\n", - "[2023-08-30 01:31:37,203] [INFO] (highdicom.seg.sop) - skip empty plane 52 of segment #2\n", - "[2023-08-30 01:31:37,203] [INFO] (highdicom.seg.sop) - skip empty plane 53 of segment #2\n", - "[2023-08-30 01:31:37,203] [INFO] (highdicom.seg.sop) - skip empty plane 54 of segment #2\n", - "[2023-08-30 01:31:37,203] [INFO] (highdicom.seg.sop) - skip empty plane 55 of segment #2\n", - "[2023-08-30 01:31:37,203] [INFO] (highdicom.seg.sop) - skip empty plane 56 of segment #2\n", - "[2023-08-30 01:31:37,203] [INFO] (highdicom.seg.sop) - skip empty plane 57 of segment #2\n", - "[2023-08-30 01:31:37,204] [INFO] (highdicom.seg.sop) - skip empty plane 58 of segment #2\n", - "[2023-08-30 01:31:37,204] [INFO] (highdicom.seg.sop) - skip empty plane 59 of segment #2\n", - "[2023-08-30 01:31:37,204] [INFO] (highdicom.seg.sop) - skip empty plane 60 of segment #2\n", - "[2023-08-30 01:31:37,204] [INFO] (highdicom.seg.sop) - skip empty plane 61 of segment #2\n", - "[2023-08-30 01:31:37,204] [INFO] (highdicom.seg.sop) - skip empty plane 62 of segment #2\n", - "[2023-08-30 01:31:37,204] [INFO] (highdicom.seg.sop) - skip empty plane 63 of segment #2\n", - "[2023-08-30 01:31:37,205] [INFO] (highdicom.seg.sop) - skip empty plane 64 of segment #2\n", - "[2023-08-30 01:31:37,205] [INFO] (highdicom.seg.sop) - skip empty plane 65 of segment #2\n", - "[2023-08-30 01:31:37,205] [INFO] (highdicom.seg.sop) - skip empty plane 66 of segment #2\n", - "[2023-08-30 01:31:37,205] [INFO] (highdicom.seg.sop) - skip empty plane 67 of segment #2\n", - "[2023-08-30 01:31:37,228] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:31:37,228] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2023-08-30 01:31:37,228] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:31:37,228] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2023-08-30 01:31:37,228] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2023-08-30 01:31:37,228] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:31:37,228] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2023-08-30 01:31:37,229] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2023-08-30 01:31:37,229] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2023-08-30 01:31:39,286] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "[2023-08-30 01:31:39,286] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "[2023-08-30 01:31:39,287] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "[2023-08-30 01:31:39,288] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "[2023-08-30 01:31:39,288] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "[2023-08-30 01:31:39,289] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "[2023-08-30 01:31:39,289] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "[2023-08-30 01:31:39,290] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "[2023-08-30 01:31:39,291] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "[2023-08-30 01:31:39,291] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "[2023-08-30 01:31:39,292] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "[2023-08-30 01:31:39,292] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "[2023-08-30 01:31:39,293] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "[2023-08-30 01:31:39,293] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "[2023-08-30 01:31:39,294] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "[2023-08-30 01:31:39,294] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "[2023-08-30 01:31:39,295] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "[2023-08-30 01:31:39,296] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "[2023-08-30 01:31:39,296] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "[2023-08-30 01:31:39,297] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "[2023-08-30 01:31:39,297] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "[2023-08-30 01:31:39,298] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "[2023-08-30 01:31:39,299] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "[2023-08-30 01:31:39,300] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "[2023-08-30 01:31:39,300] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "[2023-08-30 01:31:39,301] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "[2023-08-30 01:31:39,301] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "[2023-08-30 01:31:39,302] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "[2023-08-30 01:31:39,302] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "[2023-08-30 01:31:39,303] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "[2023-08-30 01:31:39,303] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "[2023-08-30 01:31:39,304] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "[2023-08-30 01:31:39,304] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "[2023-08-30 01:31:39,305] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "[2023-08-30 01:31:39,306] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "[2023-08-30 01:31:39,306] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "[2023-08-30 01:31:39,307] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "[2023-08-30 01:31:39,307] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "[2023-08-30 01:31:39,308] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "[2023-08-30 01:31:39,308] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "[2023-08-30 01:31:39,309] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "[2023-08-30 01:31:39,309] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "[2023-08-30 01:31:39,310] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "[2023-08-30 01:31:39,311] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "[2023-08-30 01:31:39,311] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "[2023-08-30 01:31:39,312] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "[2023-08-30 01:31:39,312] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "[2023-08-30 01:31:39,313] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "[2023-08-30 01:31:39,313] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "[2023-08-30 01:31:39,314] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "[2023-08-30 01:31:39,315] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "[2023-08-30 01:31:39,315] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "[2023-08-30 01:31:39,316] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "[2023-08-30 01:31:39,316] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "[2023-08-30 01:31:39,317] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "[2023-08-30 01:31:39,317] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "[2023-08-30 01:31:39,318] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "[2023-08-30 01:31:39,318] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "[2023-08-30 01:31:39,319] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "[2023-08-30 01:31:39,320] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "[2023-08-30 01:31:39,320] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "[2023-08-30 01:31:39,321] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "[2023-08-30 01:31:39,321] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "[2023-08-30 01:31:39,322] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "[2023-08-30 01:31:39,322] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "[2023-08-30 01:31:39,323] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "[2023-08-30 01:31:39,323] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "[2023-08-30 01:31:39,324] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "[2023-08-30 01:31:39,325] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "[2023-08-30 01:31:39,325] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "[2023-08-30 01:31:39,326] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "[2023-08-30 01:31:39,326] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "[2023-08-30 01:31:39,327] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "[2023-08-30 01:31:39,327] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "[2023-08-30 01:31:39,328] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "[2023-08-30 01:31:39,329] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "[2023-08-30 01:31:39,329] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "[2023-08-30 01:31:39,330] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "[2023-08-30 01:31:39,330] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "[2023-08-30 01:31:39,331] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "[2023-08-30 01:31:39,331] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "[2023-08-30 01:31:39,332] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "[2023-08-30 01:31:39,332] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "[2023-08-30 01:31:39,333] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "[2023-08-30 01:31:39,334] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "[2023-08-30 01:31:39,334] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "[2023-08-30 01:31:39,335] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "[2023-08-30 01:31:39,375] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:31:39,375] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2023-08-30 01:31:39,375] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:31:39,375] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2023-08-30 01:31:39,375] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2023-08-30 01:31:39,375] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2023-08-30 01:31:39,375] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2023-08-30 01:31:39,375] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2023-08-30 01:31:39,375] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 15:11:25,387] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 15:11:25,387] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-10 15:11:26,672] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-10 15:11:26,672] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-10 15:11:26,672] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1784] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", - "[2023-08-30 01:31:39,463] [INFO] (app.App) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[2024-04-10 15:11:26,772] [INFO] (app.App) - End run\n" ] } ], @@ -1703,8 +1241,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.12607789968000921484298196664438779.dcm\n", - "1.2.826.0.1.3680043.10.511.3.13304883178132083951047262313172068.dcm\n" + "1.2.826.0.1.3680043.10.511.3.15046048574363662193759299900270199.dcm\n", + "1.2.826.0.1.3680043.10.511.3.98214024482046978965335342071467925.dcm\n" ] } ], @@ -1804,15 +1342,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 01:31:42,861] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2023-08-30 01:31:42,861] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2023-08-30 01:31:42,861] [INFO] (packager) - Scanning for models in {models_path}...\n", - "[2023-08-30 01:31:42,861] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", - "[2023-08-30 01:31:42,861] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", - "[2023-08-30 01:31:42,861] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2023-08-30 01:31:42,862] [INFO] (packager) - Generating app.json...\n", - "[2023-08-30 01:31:42,863] [INFO] (packager) - Generating pkg.json...\n", - "[2023-08-30 01:31:42,863] [DEBUG] (common) - \n", + "[2024-04-10 15:11:29,127] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2024-04-10 15:11:29,127] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2024-04-10 15:11:29,127] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", + "[2024-04-10 15:11:29,127] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", + "[2024-04-10 15:11:29,127] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", + "[2024-04-10 15:11:29,127] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2024-04-10 15:11:29,128] [INFO] (packager) - Generating app.json...\n", + "[2024-04-10 15:11:29,129] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-10 15:11:29,133] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1840,14 +1378,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.6.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2023-08-30 01:31:42,863] [DEBUG] (common) - \n", + "[2024-04-10 15:11:29,134] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1863,15 +1401,16 @@ " \"memory\": \"1Gi\",\n", " \"gpuMemory\": \"10Gi\"\n", " },\n", - " \"version\": 1.0\n", + " \"version\": 1.0,\n", + " \"platformConfig\": \"dgpu\"\n", "}\n", "================ End pkg.json ================\n", " \n", - "[2023-08-30 01:31:43,285] [DEBUG] (packager.builder) - \n", + "[2024-04-10 15:11:29,632] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -1887,11 +1426,13 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Multi Model App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"0.6.0\"\n", + "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "\n", "\n", "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", @@ -1916,7 +1457,7 @@ "\n", "\n", "\n", - "RUN groupadd -g $GID $UNAME\n", + "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", "RUN chown -R holoscan /var/holoscan/input \n", @@ -1941,13 +1482,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI org\n", - "RUN pip install holoscan==0.6.0\n", - "\n", + "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", + "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", "\n", "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", "\n", "\n", "\n", @@ -1963,211 +1503,223 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2023-08-30 01:31:43,285] [INFO] (packager.builder) - \n", + "[2024-04-10 15:11:29,632] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - " Build Image: N/A \n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoiscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + " Holoscan SDK Package: pypi.org\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 0.6.0\n", + " SDK Version: 1.0.3\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2023-08-30 01:31:43,573] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2023-08-30 01:31:43,574] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", - "#1 [internal] load .dockerignore\n", - "#1 transferring context:\n", - "#1 transferring context: 1.79kB 0.0s done\n", + "[2024-04-10 15:11:29,935] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-10 15:11:29,936] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", + "\n", + "#1 [internal] load build definition from Dockerfile\n", + "#1 transferring dockerfile: 2.79kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load build definition from Dockerfile\n", - "#2 transferring dockerfile: 2.66kB done\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", "#2 DONE 0.1s\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#3 DONE 0.7s\n", + "#3 [internal] load .dockerignore\n", + "#3 transferring context: 1.79kB done\n", + "#3 DONE 0.1s\n", "\n", "#4 [internal] load build context\n", "#4 DONE 0.0s\n", "\n", - "#5 importing cache manifest from local:5671991582744023691\n", + "#5 importing cache manifest from local:3229340695933661696\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu\n", - "#6 DONE 0.7s\n", + "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.0s done\n", + "#6 DONE 0.1s\n", "\n", - "#7 [ 1/22] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", - "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc\n", - "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v0.6.0-dgpu@sha256:9653f80f241fd542f25afbcbcf7a0d02ed7e5941c79763e69def5b1e6d9fb7bc 0.1s done\n", - "#7 DONE 0.1s\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#7 DONE 0.6s\n", "\n", "#4 [internal] load build context\n", - "#4 transferring context: 585.41MB 3.4s\n", - "#4 transferring context: 636.06MB 3.7s done\n", - "#4 DONE 3.8s\n", + "#4 transferring context: 636.05MB 3.2s done\n", + "#4 DONE 3.2s\n", "\n", - "#8 [ 8/22] RUN chown -R holoscan /var/holoscan/output\n", + "#8 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#8 CACHED\n", "\n", - "#9 [ 2/22] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#9 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#9 CACHED\n", "\n", - "#10 [ 9/22] WORKDIR /var/holoscan\n", + "#10 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", "#10 CACHED\n", "\n", - "#11 [13/22] RUN pip install --upgrade pip\n", + "#11 [10/21] COPY ./tools /var/holoscan/tools\n", "#11 CACHED\n", "\n", - "#12 [ 7/22] RUN chown -R holoscan /var/holoscan/input\n", + "#12 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#12 CACHED\n", "\n", - "#13 [14/22] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#13 [ 9/21] WORKDIR /var/holoscan\n", "#13 CACHED\n", "\n", - "#14 [ 4/22] RUN groupadd -g 1000 holoscan\n", + "#14 [13/21] RUN pip install --upgrade pip\n", "#14 CACHED\n", "\n", - "#15 [11/22] RUN chmod +x /var/holoscan/tools\n", + "#15 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#15 CACHED\n", "\n", - "#16 [ 3/22] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#16 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", "#16 CACHED\n", "\n", - "#17 [ 5/22] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#17 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#17 CACHED\n", "\n", - "#18 [ 6/22] RUN chown -R holoscan /var/holoscan\n", + "#18 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#18 CACHED\n", "\n", - "#19 [12/22] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#19 CACHED\n", "\n", - "#20 [15/22] RUN pip install holoscan==0.6.0\n", + "#20 [11/21] RUN chmod +x /var/holoscan/tools\n", "#20 CACHED\n", "\n", - "#21 [10/22] COPY ./tools /var/holoscan/tools\n", + "#21 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#21 CACHED\n", "\n", - "#22 [16/22] COPY ./monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", + "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", "#22 CACHED\n", "\n", - "#23 [17/22] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+22.g029f8bc.dirty-py3-none-any.whl\n", - "#23 CACHED\n", + "#23 [17/21] COPY ./models /opt/holoscan/models\n", + "#23 DONE 6.7s\n", "\n", - "#24 [18/22] COPY ./models /opt/holoscan/models\n", - "#24 DONE 3.5s\n", + "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", + "#24 DONE 0.1s\n", "\n", - "#25 [19/22] COPY ./map/app.json /etc/holoscan/app.json\n", + "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", "#25 DONE 0.1s\n", "\n", - "#26 [20/22] COPY ./app.config /var/holoscan/app.yaml\n", + "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#26 DONE 0.1s\n", "\n", - "#27 [21/22] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#27 DONE 0.1s\n", - "\n", - "#28 [22/22] COPY ./app /opt/holoscan/app\n", - "#28 DONE 0.1s\n", - "\n", - "#29 exporting to docker image format\n", - "#29 exporting layers\n", - "#29 exporting layers 17.6s done\n", - "#29 exporting manifest sha256:711ffdb84ecd0fb87425a0acbb896443eb5e0f1943d40b46402b2b08142ea130 0.0s done\n", - "#29 exporting config sha256:21983532749ea654bbd28d0091fa6a69e2e00340df6398d4fc008d2a50a70acb 0.0s done\n", - "#29 sending tarball\n", - "#29 ...\n", - "\n", - "#30 importing to docker\n", - "#30 DONE 8.4s\n", - "\n", - "#29 exporting to docker image format\n", - "#29 sending tarball 67.5s done\n", - "#29 DONE 85.1s\n", - "\n", - "#31 exporting content cache\n", - "#31 preparing build cache for export\n", - "#31 writing layer sha256:0709800848b4584780b40e7e81200689870e890c38b54e96b65cd0a3b1942f2d done\n", - "#31 writing layer sha256:0ce020987cfa5cd1654085af3bb40779634eb3d792c4a4d6059036463ae0040d done\n", - "#31 writing layer sha256:0f65089b284381bf795d15b1a186e2a8739ea957106fa526edef0d738e7cda70 done\n", - "#31 writing layer sha256:124e6b96b81690cf8ea2488c3755d3b87bd3e28f8ce6d68cfa8d13fafd1adc7b 0.0s done\n", - "#31 writing layer sha256:12a47450a9f9cc5d4edab65d0f600dbbe8b23a1663b0b3bb2c481d40e074b580 done\n", - "#31 writing layer sha256:1de965777e2e37c7fabe00bdbf3d0203ca83ed30a71a5479c3113fe4fc48c4bb done\n", - "#31 writing layer sha256:24b5aa2448e920814dd67d7d3c0169b2cdacb13c4048d74ded3b4317843b13ff done\n", - "#31 writing layer sha256:2789e1f0e19719b047679b4b490cab1edb9e151cd286aed22df08022c249f040 done\n", - "#31 writing layer sha256:2d42104dbf0a7cc962b791f6ab4f45a803f8a36d296f996aca180cfb2f3e30d0 done\n", - "#31 writing layer sha256:2fa1ce4fa3fec6f9723380dc0536b7c361d874add0baaddc4bbf2accac82d2ff done\n", - "#31 writing layer sha256:38794be1b5dc99645feabf89b22cd34fb5bdffb5164ad920e7df94f353efe9c0 done\n", - "#31 writing layer sha256:38f963dc57c1e7b68a738fe39ed9f9345df7188111a047e2163a46648d7f1d88 done\n", - "#31 writing layer sha256:3e7e4c9bc2b136814c20c04feb4eea2b2ecf972e20182d88759931130cfb4181 done\n", - "#31 writing layer sha256:3fd77037ad585442cd82d64e337f49a38ddba50432b2a1e563a48401d25c79e6 done\n", - "#31 writing layer sha256:41814ed91034b30ac9c44dfc604a4bade6138005ccf682372c02e0bead66dbc0 done\n", - "#31 writing layer sha256:45893188359aca643d5918c9932da995364dc62013dfa40c075298b1baabece3 done\n", - "#31 writing layer sha256:49bc651b19d9e46715c15c41b7c0daa007e8e25f7d9518f04f0f06592799875a done\n", - "#31 writing layer sha256:4c12db5118d8a7d909e4926d69a2192d2b3cd8b110d49c7504a4f701258c1ccc done\n", - "#31 writing layer sha256:4cc43a803109d6e9d1fd35495cef9b1257035f5341a2db54f7a1940815b6cc65 done\n", - "#31 writing layer sha256:4d32b49e2995210e8937f0898327f196d3fcc52486f0be920e8b2d65f150a7ab done\n", - "#31 writing layer sha256:4d6fe980bad9cd7b2c85a478c8033cae3d098a81f7934322fb64658b0c8f9854 done\n", - "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#31 writing layer sha256:50b2500ad4a5ad2f73d71f4dedecabff852c74ea78a97dab0fc86b2ed44ddc77 done\n", - "#31 writing layer sha256:5150182f1ff123399b300ca469e00f6c4d82e1b9b72652fb8ee7eab370245236 done\n", - "#31 writing layer sha256:595c38fa102c61c3dda19bdab70dcd26a0e50465b986d022a84fa69023a05d0f done\n", - "#31 writing layer sha256:59d451175f6950740e26d38c322da0ef67cb59da63181eb32996f752ba8a2f17 done\n", - "#31 writing layer sha256:5ad1f2004580e415b998124ea394e9d4072a35d70968118c779f307204d6bd17 done\n", - "#31 writing layer sha256:5e2c1cbc09286c26c04d5b4257b11940ecdb161330319d54feadc7ef9a8dc8f6 done\n", - "#31 writing layer sha256:5f9c46ad5b8701de87fd765a52f3202c1c36bf038dec8112e9df659111c94442 0.0s done\n", - "#31 writing layer sha256:62598eafddf023e7f22643485f4321cbd51ff7eee743b970db12454fd3c8c675 done\n", - "#31 writing layer sha256:63d7e616a46987136f4cc9eba95db6f6327b4854cfe3c7e20fed6db0c966e380 done\n", - "#31 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f\n", - "#31 writing layer sha256:6939d591a6b09b14a437e5cd2d6082a52b6d76bec4f72d960440f097721da34f done\n", - "#31 writing layer sha256:698318e5a60e5e0d48c45bf992f205a9532da567fdfe94bd59be2e192975dd6f done\n", - "#31 writing layer sha256:6ddc1d0f91833b36aac1c6f0c8cea005c87d94bab132d46cc06d9b060a81cca3 done\n", - "#31 writing layer sha256:6de966d13ad3e40ec7320152bba8dc4ffbbe04de44488c5e001560900cafeff8 0.0s done\n", - "#31 writing layer sha256:74ac1f5a47c0926bff1e997bb99985a09926f43bd0895cb27ceb5fa9e95f8720 done\n", - "#31 writing layer sha256:7577973918dd30e764733a352a93f418000bc3181163ca451b2307492c1a6ba9 done\n", - "#31 writing layer sha256:886c886d8a09d8befb92df75dd461d4f97b77d7cff4144c4223b0d2f6f2c17f2 done\n", - "#31 writing layer sha256:8a7451db9b4b817b3b33904abddb7041810a4ffe8ed4a034307d45d9ae9b3f2a done\n", - "#31 writing layer sha256:8e48326518a7600efaa3c8d71be80eaec8996266048e08cd29412c8ba2e04535 0.0s done\n", - "#31 writing layer sha256:916f4054c6e7f10de4fd7c08ffc75fa23ebecca4eceb8183cb1023b33b1696c9 done\n", - "#31 writing layer sha256:9463aa3f56275af97693df69478a2dc1d171f4e763ca6f7b6f370a35e605c154 done\n", - "#31 writing layer sha256:955fd173ed884230c2eded4542d10a97384b408537be6bbb7c4ae09ccd6fb2d0 done\n", - "#31 writing layer sha256:9c42a4ee99755f441251e6043b2cbba16e49818a88775e7501ec17e379ce3cfd done\n", - "#31 writing layer sha256:9c63be0a86e3dc4168db3814bf464e40996afda0031649d9faa8ff7568c3154f done\n", - "#31 writing layer sha256:9e04bda98b05554953459b5edef7b2b14d32f1a00b979a23d04b6eb5c191e66b done\n", - "#31 writing layer sha256:a4a0c690bc7da07e592514dccaa26098a387e8457f69095e922b6d73f7852502 done\n", - "#31 writing layer sha256:a4aafbc094d78a85bef41036173eb816a53bcd3e2564594a32f542facdf2aba6 done\n", - "#31 writing layer sha256:ae36a4d38b76948e39a5957025c984a674d2de18ce162a8caaa536e6f06fccea done\n", - "#31 writing layer sha256:b1de1df3c2330b725c89cdac6035c5703ea85ed06ce7b574b306111899d41115\n", - "#31 writing layer sha256:b1de1df3c2330b725c89cdac6035c5703ea85ed06ce7b574b306111899d41115 12.2s done\n", - "#31 writing layer sha256:b2fa40114a4a0725c81b327df89c0c3ed5c05ca9aa7f1157394d5096cf5460ce done\n", - "#31 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#31 writing layer sha256:c657dd855c8726b050f2b5bd6f4999883fff6803fe9f22add96f6d3ff89cd477 done\n", - "#31 writing layer sha256:c86976a083599e36a6441f36f553627194d05ea82bb82a78682e718fe62fccf6 done\n", - "#31 writing layer sha256:cb506fbdedc817e3d074f609e2edbf9655aacd7784610a1bbac52f2d7be25438 done\n", - "#31 writing layer sha256:d2a6fe65a1f84edb65b63460a75d1cac1aa48b72789006881b0bcfd54cd01ffd done\n", - "#31 writing layer sha256:d2cafa18c788d3e44592cf8dcabf80e138db8389aa89e765550691199861d4fe done\n", - "#31 writing layer sha256:d8d16d6af76dc7c6b539422a25fdad5efb8ada5a8188069fcd9d113e3b783304 done\n", - "#31 writing layer sha256:ddc2ade4f6fe866696cb638c8a102cb644fa842c2ca578392802b3e0e5e3bcb7 done\n", - "#31 writing layer sha256:e2cfd7f6244d6f35befa6bda1caa65f1786cecf3f00ef99d7c9a90715ce6a03c done\n", - "#31 writing layer sha256:e94a4481e9334ff402bf90628594f64a426672debbdfb55f1290802e52013907 done\n", - "#31 writing layer sha256:eaf45e9f32d1f5a9983945a1a9f8dedbb475bc0f578337610e00b4dedec87c20 done\n", - "#31 writing layer sha256:eb411bef39c013c9853651e68f00965dbd826d829c4e478884a2886976e9c989 done\n", - "#31 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759\n", - "#31 preparing build cache for export 12.8s done\n", - "#31 writing layer sha256:edfe4a95eb6bd3142aeda941ab871ffcc8c19cf50c33561c210ba8ead2424759 done\n", - "#31 writing layer sha256:ef4466d6f927d29d404df9c5af3ef5733c86fa14e008762c90110b963978b1e7 done\n", - "#31 writing layer sha256:f346e3ecdf0bee048fa1e3baf1d3128ff0283b903f03e97524944949bd8882e5 done\n", - "#31 writing layer sha256:f3f9a00a1ce9aadda250aacb3e66a932676badc5d8519c41517fdf7ea14c13ed done\n", - "#31 writing layer sha256:f7a50dafd51c2bcaad0ede31fbf29c38fe66776ade008a7fbdb07dba39de7f97 done\n", - "#31 writing layer sha256:fd849d9bd8889edd43ae38e9f21a912430c8526b2c18f3057a3b2cd74eb27b31 done\n", - "#31 writing config sha256:28c3423e13c001faf1998faab90290315a1801c71bb4889c6841352c9e2726f5 0.0s done\n", - "#31 writing manifest sha256:9435a6ae42ed4f35173de90fdae7292f942efcc10b547b7918aa8ee048295d40 0.0s done\n", - "#31 DONE 12.8s\n", - "[2023-08-30 01:33:32,218] [INFO] (packager) - Build Summary:\n", + "#27 [21/21] COPY ./app /opt/holoscan/app\n", + "#27 DONE 0.2s\n", + "\n", + "#28 exporting to docker image format\n", + "#28 exporting layers\n", + "#28 exporting layers 20.5s done\n", + "#28 exporting manifest sha256:e77308187dcf97394b99101aa895bea8c1e7dc92572bedddb310476c65f828ab 0.0s done\n", + "#28 exporting config sha256:f820210cdcfe0c41a2791dcced8072f2413aa1f6f2b1076134249d6abc400141 0.0s done\n", + "#28 sending tarball\n", + "#28 ...\n", + "\n", + "#29 importing to docker\n", + "#29 loading layer 0b7c827957f8 557.06kB / 584.49MB\n", + "#29 loading layer 0b7c827957f8 150.96MB / 584.49MB 2.1s\n", + "#29 loading layer 0b7c827957f8 305.82MB / 584.49MB 4.2s\n", + "#29 loading layer 0b7c827957f8 492.99MB / 584.49MB 6.3s\n", + "#29 loading layer 0f7d49f89e9c 492B / 492B\n", + "#29 loading layer 98aed7487fb0 312B / 312B\n", + "#29 loading layer 972f8aa128ec 322B / 322B\n", + "#29 loading layer db9d1b5a3f36 4.00kB / 4.00kB\n", + "#29 loading layer db9d1b5a3f36 4.00kB / 4.00kB 1.2s done\n", + "#29 loading layer 0b7c827957f8 492.99MB / 584.49MB 9.4s done\n", + "#29 loading layer 0f7d49f89e9c 492B / 492B 1.4s done\n", + "#29 loading layer 98aed7487fb0 312B / 312B 1.3s done\n", + "#29 loading layer 972f8aa128ec 322B / 322B 1.3s done\n", + "#29 DONE 9.4s\n", + "\n", + "#28 exporting to docker image format\n", + "#28 sending tarball 79.2s done\n", + "#28 DONE 99.9s\n", + "\n", + "#30 exporting cache to client directory\n", + "#30 preparing build cache for export\n", + "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", + "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", + "#30 writing layer sha256:021b9bc7b766e946a42d4bf0d3f88658998d36cf2fa5f182af98d925b3d44f4f 0.0s done\n", + "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", + "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", + "#30 writing layer sha256:0bf3a16e4f3f9ec99796b99e331a5c62472bc9377925e1fdc05f64709ed09895 done\n", + "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", + "#30 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", + "#30 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", + "#30 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", + "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", + "#30 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", + "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", + "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", + "#30 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", + "#30 writing layer sha256:3a663fdf00962d807df49af4b54ad7382e7d0b0c65355a78d706ee221758e691\n", + "#30 writing layer sha256:3a663fdf00962d807df49af4b54ad7382e7d0b0c65355a78d706ee221758e691 11.2s done\n", + "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517\n", + "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", + "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", + "#30 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", + "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", + "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", + "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", + "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#30 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", + "#30 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", + "#30 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", + "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", + "#30 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", + "#30 writing layer sha256:5ea668ffc2fc267d241dbf17ca283bc879643a189be4f7e3d9034a82fc64a1ea done\n", + "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", + "#30 writing layer sha256:6399aeba5e066098b3fac85e23e402cd10f0c5d0f06107595840b9f7259f9b40 0.0s done\n", + "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", + "#30 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", + "#30 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", + "#30 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", + "#30 writing layer sha256:6e80a527af94a864094c4f9116c2d29d3d7548ec8388579d9cf3f8a39a4b8178 done\n", + "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", + "#30 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", + "#30 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", + "#30 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", + "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", + "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", + "#30 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", + "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", + "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", + "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", + "#30 writing layer sha256:b49326ff73acef905ddca0e7c2734fb9fa6d21d55c9b25feb30dd3a4aa99a9d9 0.0s done\n", + "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", + "#30 writing layer sha256:bc42865e1c27a9b1bee751f3c99ad2c12a906d32aca396ace7a07231c9cafbd1 done\n", + "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", + "#30 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", + "#30 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", + "#30 writing layer sha256:d57848e1e8b61049c64df4a786ec67b44ae3ffc2554b13b92ea4ce57b8686ab9 0.0s done\n", + "#30 writing layer sha256:d6b5d6e098aacb316146a428c6b5aef9692011c6dce0932e3bbfbf27a514b7ed done\n", + "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", + "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168\n", + "#30 preparing build cache for export 11.8s done\n", + "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", + "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", + "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", + "#30 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", + "#30 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", + "#30 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", + "#30 writing config sha256:7d69b41abed153db28e437a954cc449f6c78804af5fd43d91d5b0b2b7d7e2b64 0.0s done\n", + "#30 writing cache manifest sha256:bf627b702e1d3cfae1b53eb29f8b0367eca39a3a4e756a966b4b5ee9054360fe 0.0s done\n", + "#30 DONE 11.8s\n", + "[2024-04-10 15:13:34,407] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -2198,7 +1750,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 21983532749e About a minute ago 16GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 f820210cdcfe About a minute ago 18.1GB\n" ] } ], @@ -2256,7 +1808,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.6.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -2277,19 +1829,20 @@ " \"memory\": \"1Gi\",\n", " \"gpuMemory\": \"10Gi\"\n", " },\n", - " \"version\": 1\n", + " \"version\": 1,\n", + " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2023-08-30 08:33:39 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2024-04-10 22:13:38 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2023-08-30 08:33:39 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2023-08-30 08:33:39 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2023-08-30 08:33:39 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2024-04-10 22:13:38 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2024-04-10 22:13:38 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2024-04-10 22:13:38 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2023-08-30 08:33:39 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2024-04-10 22:13:38 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2023-08-30 08:33:39 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2023-08-30 08:33:39 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2024-04-10 22:13:39 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2024-04-10 22:13:39 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -2321,20 +1874,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2023-08-30 01:33:44,364] [INFO] (runner) - Checking dependencies...\n", - "[2023-08-30 01:33:44,364] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-10 15:13:42,036] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-10 15:13:42,036] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "\n", + "[2024-04-10 15:13:42,036] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2023-08-30 01:33:44,364] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-10 15:13:42,036] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2023-08-30 01:33:44,364] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-10 15:13:42,107] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpor1kfks8/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpor1kfks8/pkg.json\n", + "[2024-04-10 15:13:42,350] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2023-08-30 01:33:44,440] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpdiaab_y5/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpdiaab_y5/pkg.json\n", - "[2023-08-30 01:33:44,635] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-10 15:13:42,351] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2023-08-30 01:33:44,838] [INFO] (common) - Launching container (fe5fd1aac7e5) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: practical_swirles\n", + "[2024-04-10 15:13:42,710] [INFO] (common) - Launching container (60a9bd0111e6) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: hungry_bassi\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2343,581 +1898,120 @@ " ipc mode: host\n", " shared memory size: 67108864\n", " devices: \n", - "2023-08-30 08:33:45 [INFO] Launching application python3 /opt/holoscan/app ...\n", + " group_add: 44\n", + "2024-04-10 22:13:43 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2023-08-30 08:33:49,660] [INFO] (root) - Parsed args: Namespace(argv=['/opt/holoscan/app'], input=None, log_level=None, model=None, output=None, workdir=None)\n", + "[2024-04-10 22:13:46,276] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2023-08-30 08:33:49,668] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2024-04-10 22:13:46,382] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2023-08-30 08:33:49,671] [INFO] (root) - End compose\n", + "[2024-04-10 22:13:46,384] [INFO] (root) - End compose\n", "\n", - "[info] [app_driver.cpp:1025] Launching the driver/health checking service\n", + "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:210] Creating context\n", + "[info] [gxf_executor.cpp:211] Creating context\n", "\n", - "[info] [server.cpp:73] Health checking server listening on 0.0.0.0:8777\n", + "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1595] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1741] Activating Graph...\n", + "[info] [gxf_executor.cpp:1864] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1771] Running Graph...\n", + "[info] [gxf_executor.cpp:1894] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1773] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1774] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", "\n", "[info] [greedy_scheduler.cpp:190] Scheduling 9 entities\n", "\n", - "[2023-08-30 08:33:49,794] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-10 22:13:46,439] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2023-08-30 08:33:50,169] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-10 22:13:47,210] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2023-08-30 08:33:50,169] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2023-08-30 08:33:50,169] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "\n", - "[2023-08-30 08:33:50,169] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "\n", - "[2023-08-30 08:33:50,169] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2023-08-30 08:33:50,169] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2023-08-30 08:33:50,169] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2023-08-30 08:33:50,169] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2023-08-30 08:33:50,169] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2023-08-30 08:33:50,169] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2023-08-30 08:33:50,170] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2023-08-30 08:33:50,170] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2023-08-30 08:33:50,170] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2023-08-30 08:33:50,725] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", + "[2024-04-10 22:13:47,211] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - " warn_deprecated(argname, msg, warning_category)\n", + "[2024-04-10 22:13:47,444] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/monai/utils/deprecate_utils.py:321: FutureWarning: monai.transforms.io.dictionary SaveImaged.__init__:resample: Current default value of argument `resample=True` has been deprecated since version 1.1. It will be changed to `resample=False` in version 1.3.\n", + "[2024-04-10 22:15:33,613] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", "\n", - " warn_deprecated(argname, msg, warning_category)\n", - "\n", - "[2023-08-30 08:35:23,643] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", - "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in http://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " warnings.warn(\n", "\n", - "[2023-08-30 08:35:30,423] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR UL.\n", - "\n", - " warnings.warn(msg)\n", - "\n", - "/home/holoscan/.local/lib/python3.8/site-packages/pydicom/valuerep.py:443: UserWarning: A value of type 'int64' cannot be assigned to a tag with VR US.\n", - "\n", - " warnings.warn(msg)\n", - "\n", - "[2023-08-30 08:35:30,427] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,428] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,428] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,429] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,430] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,430] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,431] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,432] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,432] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,433] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,434] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,435] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,436] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,436] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,437] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,437] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,438] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,439] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,440] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,440] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,441] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,442] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,443] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,444] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,445] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,445] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,446] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,447] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,448] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,448] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,449] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,450] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,620] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,621] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,622] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,622] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,623] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,624] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,625] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,625] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,626] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,627] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,627] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,628] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,629] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,630] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,630] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,631] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,632] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,633] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,633] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,634] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,635] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,636] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,636] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,637] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,638] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,639] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,639] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,640] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,641] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,641] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,642] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,643] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,644] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,645] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,645] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "\n", - "[2023-08-30 08:35:30,663] [INFO] (highdicom.seg.sop) - skip empty plane 0 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,664] [INFO] (highdicom.seg.sop) - skip empty plane 1 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,664] [INFO] (highdicom.seg.sop) - skip empty plane 2 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,664] [INFO] (highdicom.seg.sop) - skip empty plane 3 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,664] [INFO] (highdicom.seg.sop) - skip empty plane 4 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,665] [INFO] (highdicom.seg.sop) - skip empty plane 5 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,665] [INFO] (highdicom.seg.sop) - skip empty plane 6 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,665] [INFO] (highdicom.seg.sop) - skip empty plane 7 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,665] [INFO] (highdicom.seg.sop) - skip empty plane 8 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,665] [INFO] (highdicom.seg.sop) - skip empty plane 9 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,666] [INFO] (highdicom.seg.sop) - skip empty plane 10 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,666] [INFO] (highdicom.seg.sop) - skip empty plane 11 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,666] [INFO] (highdicom.seg.sop) - skip empty plane 12 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,666] [INFO] (highdicom.seg.sop) - skip empty plane 13 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,666] [INFO] (highdicom.seg.sop) - skip empty plane 14 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,667] [INFO] (highdicom.seg.sop) - skip empty plane 15 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,667] [INFO] (highdicom.seg.sop) - skip empty plane 16 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,667] [INFO] (highdicom.seg.sop) - skip empty plane 17 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,667] [INFO] (highdicom.seg.sop) - skip empty plane 18 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,667] [INFO] (highdicom.seg.sop) - skip empty plane 19 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,667] [INFO] (highdicom.seg.sop) - skip empty plane 20 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,668] [INFO] (highdicom.seg.sop) - skip empty plane 21 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,668] [INFO] (highdicom.seg.sop) - skip empty plane 22 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,668] [INFO] (highdicom.seg.sop) - skip empty plane 23 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,668] [INFO] (highdicom.seg.sop) - skip empty plane 24 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,668] [INFO] (highdicom.seg.sop) - skip empty plane 25 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,669] [INFO] (highdicom.seg.sop) - skip empty plane 26 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,669] [INFO] (highdicom.seg.sop) - skip empty plane 27 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,669] [INFO] (highdicom.seg.sop) - skip empty plane 28 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,669] [INFO] (highdicom.seg.sop) - skip empty plane 29 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,669] [INFO] (highdicom.seg.sop) - skip empty plane 30 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,670] [INFO] (highdicom.seg.sop) - skip empty plane 31 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,670] [INFO] (highdicom.seg.sop) - skip empty plane 32 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,670] [INFO] (highdicom.seg.sop) - skip empty plane 33 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,670] [INFO] (highdicom.seg.sop) - skip empty plane 34 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,670] [INFO] (highdicom.seg.sop) - skip empty plane 35 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,671] [INFO] (highdicom.seg.sop) - skip empty plane 36 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,671] [INFO] (highdicom.seg.sop) - skip empty plane 37 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,671] [INFO] (highdicom.seg.sop) - skip empty plane 38 of segment #2\n", + "[2024-04-10 22:15:37,078] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:35:30,671] [INFO] (highdicom.seg.sop) - skip empty plane 39 of segment #2\n", + "[2024-04-10 22:15:37,078] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2023-08-30 08:35:30,671] [INFO] (highdicom.seg.sop) - skip empty plane 40 of segment #2\n", + "[2024-04-10 22:15:37,078] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:35:30,671] [INFO] (highdicom.seg.sop) - skip empty plane 41 of segment #2\n", + "[2024-04-10 22:15:37,078] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2023-08-30 08:35:30,672] [INFO] (highdicom.seg.sop) - skip empty plane 42 of segment #2\n", + "[2024-04-10 22:15:37,079] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2023-08-30 08:35:30,672] [INFO] (highdicom.seg.sop) - skip empty plane 43 of segment #2\n", + "[2024-04-10 22:15:37,079] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:35:30,672] [INFO] (highdicom.seg.sop) - skip empty plane 44 of segment #2\n", + "[2024-04-10 22:15:37,079] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2023-08-30 08:35:30,672] [INFO] (highdicom.seg.sop) - skip empty plane 45 of segment #2\n", + "[2024-04-10 22:15:37,079] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2023-08-30 08:35:30,672] [INFO] (highdicom.seg.sop) - skip empty plane 46 of segment #2\n", + "[2024-04-10 22:15:37,079] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", - "[2023-08-30 08:35:30,673] [INFO] (highdicom.seg.sop) - skip empty plane 47 of segment #2\n", + "[2024-04-10 22:15:38,307] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:35:30,673] [INFO] (highdicom.seg.sop) - skip empty plane 48 of segment #2\n", + "[2024-04-10 22:15:38,307] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2023-08-30 08:35:30,673] [INFO] (highdicom.seg.sop) - skip empty plane 49 of segment #2\n", + "[2024-04-10 22:15:38,307] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:35:30,673] [INFO] (highdicom.seg.sop) - skip empty plane 50 of segment #2\n", + "[2024-04-10 22:15:38,307] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2023-08-30 08:35:30,673] [INFO] (highdicom.seg.sop) - skip empty plane 51 of segment #2\n", + "[2024-04-10 22:15:38,308] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2023-08-30 08:35:30,674] [INFO] (highdicom.seg.sop) - skip empty plane 52 of segment #2\n", + "[2024-04-10 22:15:38,308] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2023-08-30 08:35:30,674] [INFO] (highdicom.seg.sop) - skip empty plane 53 of segment #2\n", + "[2024-04-10 22:15:38,308] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2023-08-30 08:35:30,674] [INFO] (highdicom.seg.sop) - skip empty plane 54 of segment #2\n", + "[2024-04-10 22:15:38,308] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2023-08-30 08:35:30,674] [INFO] (highdicom.seg.sop) - skip empty plane 55 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,674] [INFO] (highdicom.seg.sop) - skip empty plane 56 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,674] [INFO] (highdicom.seg.sop) - skip empty plane 57 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,675] [INFO] (highdicom.seg.sop) - skip empty plane 58 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,675] [INFO] (highdicom.seg.sop) - skip empty plane 59 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,675] [INFO] (highdicom.seg.sop) - skip empty plane 60 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,675] [INFO] (highdicom.seg.sop) - skip empty plane 61 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,675] [INFO] (highdicom.seg.sop) - skip empty plane 62 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,676] [INFO] (highdicom.seg.sop) - skip empty plane 63 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,676] [INFO] (highdicom.seg.sop) - skip empty plane 64 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,676] [INFO] (highdicom.seg.sop) - skip empty plane 65 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,676] [INFO] (highdicom.seg.sop) - skip empty plane 66 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,676] [INFO] (highdicom.seg.sop) - skip empty plane 67 of segment #2\n", - "\n", - "[2023-08-30 08:35:30,701] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2023-08-30 08:35:30,701] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "\n", - "[2023-08-30 08:35:30,702] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2023-08-30 08:35:30,702] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "\n", - "[2023-08-30 08:35:30,702] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "\n", - "[2023-08-30 08:35:30,702] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2023-08-30 08:35:30,702] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "\n", - "[2023-08-30 08:35:30,702] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "\n", - "[2023-08-30 08:35:30,703] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "\n", - "[2023-08-30 08:35:32,827] [INFO] (highdicom.seg.sop) - add plane #0 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,828] [INFO] (highdicom.seg.sop) - add plane #1 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,829] [INFO] (highdicom.seg.sop) - add plane #2 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,830] [INFO] (highdicom.seg.sop) - add plane #3 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,831] [INFO] (highdicom.seg.sop) - add plane #4 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,832] [INFO] (highdicom.seg.sop) - add plane #5 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,832] [INFO] (highdicom.seg.sop) - add plane #6 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,833] [INFO] (highdicom.seg.sop) - add plane #7 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,834] [INFO] (highdicom.seg.sop) - add plane #8 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,835] [INFO] (highdicom.seg.sop) - add plane #9 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,835] [INFO] (highdicom.seg.sop) - add plane #10 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,836] [INFO] (highdicom.seg.sop) - add plane #11 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,837] [INFO] (highdicom.seg.sop) - add plane #12 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,837] [INFO] (highdicom.seg.sop) - add plane #13 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,838] [INFO] (highdicom.seg.sop) - add plane #14 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,839] [INFO] (highdicom.seg.sop) - add plane #15 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,840] [INFO] (highdicom.seg.sop) - add plane #16 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,840] [INFO] (highdicom.seg.sop) - add plane #17 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,841] [INFO] (highdicom.seg.sop) - add plane #18 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,842] [INFO] (highdicom.seg.sop) - add plane #19 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,842] [INFO] (highdicom.seg.sop) - add plane #20 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,843] [INFO] (highdicom.seg.sop) - add plane #21 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,844] [INFO] (highdicom.seg.sop) - add plane #22 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,844] [INFO] (highdicom.seg.sop) - add plane #23 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,845] [INFO] (highdicom.seg.sop) - add plane #24 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,846] [INFO] (highdicom.seg.sop) - add plane #25 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,846] [INFO] (highdicom.seg.sop) - add plane #26 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,847] [INFO] (highdicom.seg.sop) - add plane #27 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,848] [INFO] (highdicom.seg.sop) - add plane #28 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,849] [INFO] (highdicom.seg.sop) - add plane #29 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,849] [INFO] (highdicom.seg.sop) - add plane #30 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,850] [INFO] (highdicom.seg.sop) - add plane #31 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,851] [INFO] (highdicom.seg.sop) - add plane #32 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,852] [INFO] (highdicom.seg.sop) - add plane #33 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,852] [INFO] (highdicom.seg.sop) - add plane #34 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,853] [INFO] (highdicom.seg.sop) - add plane #35 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,854] [INFO] (highdicom.seg.sop) - add plane #36 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,854] [INFO] (highdicom.seg.sop) - add plane #37 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,855] [INFO] (highdicom.seg.sop) - add plane #38 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,856] [INFO] (highdicom.seg.sop) - add plane #39 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,857] [INFO] (highdicom.seg.sop) - add plane #40 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,857] [INFO] (highdicom.seg.sop) - add plane #41 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,858] [INFO] (highdicom.seg.sop) - add plane #42 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,859] [INFO] (highdicom.seg.sop) - add plane #43 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,859] [INFO] (highdicom.seg.sop) - add plane #44 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,861] [INFO] (highdicom.seg.sop) - add plane #45 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,861] [INFO] (highdicom.seg.sop) - add plane #46 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,862] [INFO] (highdicom.seg.sop) - add plane #47 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,863] [INFO] (highdicom.seg.sop) - add plane #48 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,863] [INFO] (highdicom.seg.sop) - add plane #49 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,864] [INFO] (highdicom.seg.sop) - add plane #50 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,865] [INFO] (highdicom.seg.sop) - add plane #51 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,865] [INFO] (highdicom.seg.sop) - add plane #52 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,866] [INFO] (highdicom.seg.sop) - add plane #53 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,867] [INFO] (highdicom.seg.sop) - add plane #54 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,867] [INFO] (highdicom.seg.sop) - add plane #55 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,868] [INFO] (highdicom.seg.sop) - add plane #56 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,869] [INFO] (highdicom.seg.sop) - add plane #57 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,869] [INFO] (highdicom.seg.sop) - add plane #58 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,870] [INFO] (highdicom.seg.sop) - add plane #59 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,871] [INFO] (highdicom.seg.sop) - add plane #60 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,872] [INFO] (highdicom.seg.sop) - add plane #61 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,873] [INFO] (highdicom.seg.sop) - add plane #62 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,873] [INFO] (highdicom.seg.sop) - add plane #63 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,874] [INFO] (highdicom.seg.sop) - add plane #64 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,875] [INFO] (highdicom.seg.sop) - add plane #65 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,875] [INFO] (highdicom.seg.sop) - add plane #66 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,876] [INFO] (highdicom.seg.sop) - add plane #67 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,877] [INFO] (highdicom.seg.sop) - add plane #68 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,878] [INFO] (highdicom.seg.sop) - add plane #69 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,879] [INFO] (highdicom.seg.sop) - add plane #70 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,880] [INFO] (highdicom.seg.sop) - add plane #71 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,880] [INFO] (highdicom.seg.sop) - add plane #72 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,881] [INFO] (highdicom.seg.sop) - add plane #73 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,882] [INFO] (highdicom.seg.sop) - add plane #74 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,882] [INFO] (highdicom.seg.sop) - add plane #75 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,883] [INFO] (highdicom.seg.sop) - add plane #76 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,884] [INFO] (highdicom.seg.sop) - add plane #77 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,884] [INFO] (highdicom.seg.sop) - add plane #78 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,885] [INFO] (highdicom.seg.sop) - add plane #79 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,886] [INFO] (highdicom.seg.sop) - add plane #80 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,886] [INFO] (highdicom.seg.sop) - add plane #81 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,887] [INFO] (highdicom.seg.sop) - add plane #82 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,888] [INFO] (highdicom.seg.sop) - add plane #83 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,889] [INFO] (highdicom.seg.sop) - add plane #84 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,889] [INFO] (highdicom.seg.sop) - add plane #85 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,890] [INFO] (highdicom.seg.sop) - add plane #86 for segment #1\n", - "\n", - "[2023-08-30 08:35:32,931] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2023-08-30 08:35:32,932] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "\n", - "[2023-08-30 08:35:32,932] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2023-08-30 08:35:32,932] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "\n", - "[2023-08-30 08:35:32,932] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "\n", - "[2023-08-30 08:35:32,932] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2023-08-30 08:35:32,932] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "\n", - "[2023-08-30 08:35:32,933] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "\n", - "[2023-08-30 08:35:32,933] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-10 22:15:38,308] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:1783] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", "\n", - "[info] [gxf_executor.cpp:1784] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1787] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", "\n", - "[2023-08-30 08:35:33,048] [INFO] (app.App) - End run\n", + "[2024-04-10 22:15:38,401] [INFO] (app.App) - End run\n", "\n", - "[2023-08-30 01:35:34,796] [INFO] (common) - Container 'practical_swirles'(fe5fd1aac7e5) exited.\n" + "[2024-04-10 15:15:39,461] [INFO] (common) - Container 'hungry_bassi'(60a9bd0111e6) exited.\n" ] } ], @@ -2943,16 +2037,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.42782193787457037272655949212805965.dcm\n", - "1.2.826.0.1.3680043.10.511.3.96201497877957065691838845939203299.dcm\n" - ] - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details." + "1.2.826.0.1.3680043.10.511.3.77817234108119246236647417839296398.dcm\n", + "1.2.826.0.1.3680043.10.511.3.83680469536583357494244170492806366.dcm\n" ] } ], @@ -2977,7 +2063,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.12" }, "vscode": { "interpreter": { diff --git a/pyproject.toml b/pyproject.toml index a7aefad4..10fcfc02 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta" [tool.black] line-length = 120 -target-version = ['py37', 'py38', 'py39'] +target-version = ['py38', 'py39', 'py310', 'py311', 'py312'] include = '\.pyi?$' exclude = ''' ( diff --git a/requirements.txt b/requirements.txt index 2f03f20d..9034567c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -holoscan~=0.6.0 +holoscan~=1.0 numpy>=1.21.6 colorama>=0.4.1 typeguard>=3.0.0 diff --git a/run b/run index 493e7f6e..bcfdc8eb 100755 --- a/run +++ b/run @@ -326,7 +326,7 @@ install_python_dev_deps() { fi # Adding temp fix to address the issue of holoscan sdk dragging in low level dependencies, e.g. libcuda.so - fix_holoscan_import + # fix_holoscan_import install_edit_mode } diff --git a/setup.cfg b/setup.cfg index 58248242..c7e5e227 100644 --- a/setup.cfg +++ b/setup.cfg @@ -24,7 +24,7 @@ python_requires = >= 3.8 # cucim install_requires = numpy>=1.21.6 - holoscan~=0.6.0 + holoscan~=1.0 colorama>=0.4.1 typeguard>=3.0.0 @@ -48,7 +48,9 @@ ignore = # B027, #method in base class with no implementation B027, # B905 `zip()` without an explicit `strict=` parameter, but conflicting with pytype - B905 + B905, + # B026 Star-arg unpacking after a keyword argument is strongly discouraged + B026 per_file_ignores = # e.g. F403 'from holoscan.conditions import *' used; unable to detect undefined names From 4fbbe58a192a445af384d2cf6957c180741abd1e Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Thu, 11 Apr 2024 19:28:14 -0700 Subject: [PATCH 063/118] Releasing and tagging V1.0 (#482) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated the SDK to use Holoscan SDK v1.0, and tested apps and Notebooks Signed-off-by: M Q * Rerun the notebook to clear some warnings Signed-off-by: M Q * rerun notebook Signed-off-by: M Q * touch the file Signed-off-by: M Q * touch the file Signed-off-by: M Q * touch file Signed-off-by: M Q * touch the file Signed-off-by: M Q * Successfully run after getting new clara-viz fix for Python 3.10+ Signed-off-by: M Q * Update docs and Notebooks Signed-off-by: M Q * Bump version: 0.6.0 β†’ 1.0.0 Signed-off-by: M Q * update Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .bumpversion.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 1fb32f92..a62a0d6f 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.6.0 +current_version = 1.0.0 parse = (?P\d+)\.(?P\d+)\.(?P\d+)((?Pa|b|rc)(?P\d+))? serialize = {major}.{minor}.{patch}{release}{build} From c3dbe29fc56afc2b5291d01fc2b3629e246fdab2 Mon Sep 17 00:00:00 2001 From: M Q Date: Fri, 12 Apr 2024 14:05:07 -0700 Subject: [PATCH 064/118] test out the minimal set of reqs Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/requirements.txt | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index d0675536..8531154b 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,12 +1,11 @@ Sphinx==4.1.2 sphinx-autobuild==2021.3.14 -myst-parser==0.15.2 -numpy>=1.21.6 -matplotlib==3.3.4 -ipywidgets==7.6.4 -pandas==1.1.5 -nbclient==0.5.4 -myst-nb==0.13.0 +myst-nb==0.17.2 # this version is fine in python 3.8 and avoids pulling in multiple nbformat packages +myst-parser==0.18.0 +lxml_html_clean # needed by myst-nb +#numpy>=1.21.6 +#matplotlib==3.3.4 +#pandas==1.1.5 linkify-it-py==1.0.1 # https://myst-parser.readthedocs.io/en/latest/syntax/optional.html?highlight=linkify#linkify sphinx-togglebutton==0.2.3 sphinx-copybutton==0.4.0 @@ -18,17 +17,17 @@ ablog==0.10.19 docutils==0.16 # 0.17 causes error. https://github.com/executablebooks/MyST-Parser/issues/343 pydata_sphinx_theme==0.6.3 sphinxemoji==0.1.8 -scipy -scikit-image>=0.17.2 -plotly -nibabel>=3.2.1 -monai>=1.0.0 +#scipy +#scikit-image>=0.17.2 +#plotly +#nibabel>=3.2.1 +#monai>=1.0.0 torch>=1.12.0 -numpy-stl>=2.12.0 -trimesh>=3.8.11 -pydicom -PyPDF2>=2.11.1 -highdicom>=0.18.2 +#numpy-stl>=2.12.0 +#trimesh>=3.8.11 +#pydicom +#PyPDF2>=2.11.1 +#highdicom>=0.18.2 sphinx-autodoc-typehints==1.12.0 sphinxcontrib-applehelp==1.0.2 sphinxcontrib-devhelp==1.0.2 @@ -37,4 +36,3 @@ sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.3 sphinxcontrib-serializinghtml==1.1.5 sphinxcontrib-mermaid==0.7.1 -lxml_html_clean \ No newline at end of file From 2ff546d631d584f6d13dd407544c4ff3093c9330 Mon Sep 17 00:00:00 2001 From: Gigon Bae Date: Fri, 12 Apr 2024 15:46:05 -0700 Subject: [PATCH 065/118] Update readthedocs configuration Signed-off-by: Gigon Bae Signed-off-by: Simone Bendazzoli --- docs/source/conf.py | 7 +++++++ run | 2 ++ 2 files changed, 9 insertions(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 18938a78..69a9bff5 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -19,6 +19,13 @@ f"{READTHEDOCS_PROJECT}/envs/{READTHEDOCS_VERSION}/bin/activate; ../../run setup read_the_docs'", shell=True, ) + # Update LD_LIBRARY_PATH for CUDA runtime + old_ld_library_path = os.environ.get("LD_LIBRARY_PATH", "") + # Note that 'python3.8' is hard-coded here, it should be updated if the Python version changes by + # .readthedocs.yml or other configurations. + os.environ["LD_LIBRARY_PATH"] = ( + f"{READTHEDOCS_PROJECT}/envs/{READTHEDOCS_VERSION}/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:{old_ld_library_path}" + ) subprocess.call( "/bin/bash -c 'source /home/docs/checkouts/readthedocs.org/user_builds/" f"{READTHEDOCS_PROJECT}/envs/{READTHEDOCS_VERSION}/bin/activate; ../../run setup_gen_docs'", diff --git a/run b/run index bcfdc8eb..356615a1 100755 --- a/run +++ b/run @@ -306,6 +306,8 @@ install_python_dev_deps() { # Read the Docs site is using specific setuptools version so should not upgrade it. if [ "$config" = "read_the_docs" ]; then run_command ${MONAI_PY_EXE} -m pip install -q -U pip wheel build + # Install cuda runtime dependency + run_command ${MONAI_PY_EXE} -m pip install -q nvidia-cuda-runtime-cu12 else run_command ${MONAI_PY_EXE} -m pip install -q -U setuptools pip wheel build fi From 1142abe35151b4c05a7d327deb55835c8d409c6a Mon Sep 17 00:00:00 2001 From: M Q Date: Fri, 12 Apr 2024 15:48:36 -0700 Subject: [PATCH 066/118] removed the commented out reqs Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/requirements.txt | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 8531154b..3f64ba34 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -3,9 +3,6 @@ sphinx-autobuild==2021.3.14 myst-nb==0.17.2 # this version is fine in python 3.8 and avoids pulling in multiple nbformat packages myst-parser==0.18.0 lxml_html_clean # needed by myst-nb -#numpy>=1.21.6 -#matplotlib==3.3.4 -#pandas==1.1.5 linkify-it-py==1.0.1 # https://myst-parser.readthedocs.io/en/latest/syntax/optional.html?highlight=linkify#linkify sphinx-togglebutton==0.2.3 sphinx-copybutton==0.4.0 @@ -17,17 +14,7 @@ ablog==0.10.19 docutils==0.16 # 0.17 causes error. https://github.com/executablebooks/MyST-Parser/issues/343 pydata_sphinx_theme==0.6.3 sphinxemoji==0.1.8 -#scipy -#scikit-image>=0.17.2 -#plotly -#nibabel>=3.2.1 -#monai>=1.0.0 torch>=1.12.0 -#numpy-stl>=2.12.0 -#trimesh>=3.8.11 -#pydicom -#PyPDF2>=2.11.1 -#highdicom>=0.18.2 sphinx-autodoc-typehints==1.12.0 sphinxcontrib-applehelp==1.0.2 sphinxcontrib-devhelp==1.0.2 From f0a3eba556899a399becdc194ffd3836d8bca036 Mon Sep 17 00:00:00 2001 From: Gigon Bae Date: Fri, 12 Apr 2024 16:01:37 -0700 Subject: [PATCH 067/118] Fix package and LD_LIBRARY_PATH issues for readthedocs Signed-off-by: Gigon Bae Signed-off-by: Simone Bendazzoli --- docs/source/conf.py | 10 +++------- run | 25 ++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 69a9bff5..0f5a4f6a 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -19,13 +19,9 @@ f"{READTHEDOCS_PROJECT}/envs/{READTHEDOCS_VERSION}/bin/activate; ../../run setup read_the_docs'", shell=True, ) - # Update LD_LIBRARY_PATH for CUDA runtime - old_ld_library_path = os.environ.get("LD_LIBRARY_PATH", "") - # Note that 'python3.8' is hard-coded here, it should be updated if the Python version changes by - # .readthedocs.yml or other configurations. - os.environ["LD_LIBRARY_PATH"] = ( - f"{READTHEDOCS_PROJECT}/envs/{READTHEDOCS_VERSION}/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:{old_ld_library_path}" - ) + # Print LD_LIBRARY_PATH for verification + ld_library_path = os.environ.get("LD_LIBRARY_PATH", "") + print(f"LD_LIBRARY_PATH: {ld_library_path}") subprocess.call( "/bin/bash -c 'source /home/docs/checkouts/readthedocs.org/user_builds/" f"{READTHEDOCS_PROJECT}/envs/{READTHEDOCS_VERSION}/bin/activate; ../../run setup_gen_docs'", diff --git a/run b/run index 356615a1..c1b6ee4f 100755 --- a/run +++ b/run @@ -302,12 +302,11 @@ get_package_info() { install_python_dev_deps() { local config="${1:-dev}" + local is_read_the_docs="false" if [ -n "${VIRTUAL_ENV}" ] || [ -n "${CONDA_PREFIX}" ]; then # Read the Docs site is using specific setuptools version so should not upgrade it. if [ "$config" = "read_the_docs" ]; then - run_command ${MONAI_PY_EXE} -m pip install -q -U pip wheel build - # Install cuda runtime dependency - run_command ${MONAI_PY_EXE} -m pip install -q nvidia-cuda-runtime-cu12 + is_read_the_docs="true" else run_command ${MONAI_PY_EXE} -m pip install -q -U setuptools pip wheel build fi @@ -331,6 +330,26 @@ install_python_dev_deps() { # fix_holoscan_import install_edit_mode + + # Install packages overridden by Holoscan package if readthedocs is enabled + if [ ${is_read_the_docs} = "true" ]; then + # Upgrade pip overridden by Holoscan + run_command ${MONAI_PY_EXE} -m pip install -q -U pip wheel build + # Upgrade PyYAML to avoid the issue with the version installed by Holoscan + run_command ${MONAI_PY_EXE} -m pip install -U PyYAML + + # Install cuda runtime dependency + run_command ${MONAI_PY_EXE} -m pip install nvidia-cuda-runtime-cu12 + + # Copy the cuda runtime library to the fixed location (workaround for readthedocs) so that + # we can leverage the existing LD_LIBRARY_PATH (configured by the readthedocs UI) to locate the cuda runtime library. + # (LD_LIBRARY_PATH is set to /home/docs/ for that purpose) + # Note that 'python3.8' is hard-coded here, it should be updated if the Python version changes by + # .readthedocs.yml or other configurations. + run_command ls -al /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.8/site-packages/nvidia/cuda_runtime/lib/ + run_command cp /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.8/site-packages/nvidia/cuda_runtime/lib/*.so* /home/docs/ + run_command ls -al /home/docs/ + fi } fix_holoscan_import() { From 4db757b249c4c7fead76cf1f77048546e37894c3 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Wed, 17 Apr 2024 13:55:43 -0700 Subject: [PATCH 068/118] Update pr.yml to set LD_LIBRARY_PATH consistently with Holoscan SDK 2.0 Signed-off-by: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 37c512d3..edd0fa5c 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -32,20 +32,23 @@ jobs: python3 -c 'import sys; print(sys.executable)' python3 -c 'import site; print(site.getsitepackages())' python3 -m pip freeze - export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH + export CUDA_WHL_LIB_DIR=$(python3 -c 'import nvidia.cuda_runtime; print(nvidia.cuda_runtime.__path__[0])')/lib + export LD_LIBRARY_PATH="$CUDA_WHL_LIB_DIR:$LD_LIBRARY_PATH" python3 -c 'from holoscan.core import *' ./run check -f - name: Run Unit tests run: | source .venv/bin/activate python3 -m pip install nvidia-cuda-runtime-cu12 - export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH + export CUDA_WHL_LIB_DIR=$(python3 -c 'import nvidia.cuda_runtime; print(nvidia.cuda_runtime.__path__[0])')/lib + export LD_LIBRARY_PATH="$CUDA_WHL_LIB_DIR:$LD_LIBRARY_PATH" ./run test all unit - name: Coverage run: | source .venv/bin/activate python3 -m pip install nvidia-cuda-runtime-cu12 - export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH + export CUDA_WHL_LIB_DIR=$(python3 -c 'import nvidia.cuda_runtime; print(nvidia.cuda_runtime.__path__[0])')/lib + export LD_LIBRARY_PATH="$CUDA_WHL_LIB_DIR:$LD_LIBRARY_PATH" coverage xml - name: Upload coverage uses: codecov/codecov-action@v2 From f8e0aeff11ee30a83dfa4ef0afd8f2a0e1c7cc1a Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Wed, 24 Apr 2024 11:24:01 -0700 Subject: [PATCH 069/118] Update to release v2.0 that is dependent on HSDK v2 (#485) * Update to use HSDK v2 Signed-off-by: M Q * Supress the new Flake8 complaints Signed-off-by: M Q * Avoid loading DICOMDir and tested all notebooks Signed-off-by: M Q * fix flake8 complaint Signed-off-by: M Q * logging the UID, if present, of the ignored instance Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .../operators/dicom_data_loader_operator.py | 15 + notebooks/tutorials/01_simple_app.ipynb | 649 ++++++------- .../tutorials/02_mednist_app-prebuilt.ipynb | 796 ++++++++------- notebooks/tutorials/02_mednist_app.ipynb | 518 +++++----- notebooks/tutorials/03_segmentation_app.ipynb | 760 ++++++++------- .../tutorials/03_segmentation_viz_app.ipynb | 227 ++--- notebooks/tutorials/04_monai_bundle_app.ipynb | 913 ++++++++++-------- notebooks/tutorials/05_multi_model_app.ipynb | 621 ++++++------ requirements-dev.txt | 2 +- requirements-examples.txt | 4 +- requirements.txt | 2 +- setup.cfg | 4 +- 12 files changed, 2442 insertions(+), 2069 deletions(-) diff --git a/monai/deploy/operators/dicom_data_loader_operator.py b/monai/deploy/operators/dicom_data_loader_operator.py index f07a45ef..c31e1ef2 100644 --- a/monai/deploy/operators/dicom_data_loader_operator.py +++ b/monai/deploy/operators/dicom_data_loader_operator.py @@ -42,6 +42,9 @@ class DICOMDataLoaderOperator(Operator): DEFAULT_INPUT_FOLDER = Path.cwd() / "input" DEFAULT_OUTPUT_NAME = "dicom_study_list" + SOP_CLASSES_TO_IGNORE = [ + "1.2.840.10008.1.3.10", # Media Storage Directory Storage, aka DICOMDIR + ] # For now, need to have the input folder as an instance attribute, set on init, because even there is the optional # named input to receive data containing the path, there might not be upstream operator to emit the data. @@ -170,6 +173,18 @@ def _load_data(self, files: List[str]): for sop_instance in sop_instances: study_instance_uid = sop_instance[0x0020, 0x000D].value.name # name is the UID as str + # First need to eliminate the SOP instances whose SOP Class is to be ignored. + if "SOPInstanceUID" not in sop_instance: + self._logger.warn("Instance ignored due to missing SOP instance UID tag") + continue + sop_instance_uid = sop_instance["SOPInstanceUID"].value + if "SOPClassUID" not in sop_instance: + self._logger.warn(f"Instance ignored due to missing SOP Class UID tag, {sop_instance_uid}") + continue + if sop_instance["SOPClassUID"].value in DICOMDataLoaderOperator.SOP_CLASSES_TO_IGNORE: + self._logger.warn(f"Instance ignored for being in the ignored class, {sop_instance_uid}") + continue + if study_instance_uid not in study_dict: study = DICOMStudy(study_instance_uid) self.populate_study_attributes(study, sop_instance) diff --git a/notebooks/tutorials/01_simple_app.ipynb b/notebooks/tutorials/01_simple_app.ipynb index a1f10f59..11874ae0 100644 --- a/notebooks/tutorials/01_simple_app.ipynb +++ b/notebooks/tutorials/01_simple_app.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -95,10 +95,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 2, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, @@ -145,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -179,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -212,7 +212,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -283,7 +283,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -335,7 +335,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -428,7 +428,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -507,15 +507,15 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-10 16:18:44,711] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-10 16:18:44,717] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" + "[2024-04-23 15:26:29,737] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-23 15:26:29,745] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" ] }, { @@ -523,6 +523,7 @@ "output_type": "stream", "text": [ "sample_data_path: /tmp/simple_app/normal-brain-mri-4.png\n", + "\u001b[0m2024-04-23 15:26:29.768 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", "Number of times operator sobel_op whose class is defined in __main__ called: 1\n", "Input from: /tmp/simple_app/normal-brain-mri-4.png, whose absolute path: /tmp/simple_app/normal-brain-mri-4.png\n" ] @@ -531,13 +532,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [gxf_executor.cpp:211] Creating context\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n" + "[info] [gxf_executor.cpp:247] Creating context\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n" ] }, { @@ -547,19 +546,18 @@ "Number of times operator median_op whose class is defined in __main__ called: 1\n", "Number of times operator gaussian_op whose class is defined in __main__ called: 1\n", "Data type of output: , max = 0.35821119421406195\n", - "Data type of output post conversion: , max = 91\n" + "Data type of output post conversion: , max = 91\n", + "\u001b[0m2024-04-23 15:26:30.023 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 15:26:30.023 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[info] [gxf_executor.cpp:230] Destroying context\n" + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[info] [gxf_executor.cpp:275] Destroying context\n" ] } ], @@ -570,7 +568,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -587,16 +585,16 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 11, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, @@ -643,7 +641,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ @@ -661,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -741,7 +739,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -803,7 +801,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -899,7 +897,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -1001,7 +999,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 44, "metadata": {}, "outputs": [ { @@ -1022,7 +1020,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -1052,94 +1050,92 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 16:18:49,954] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", - "[2024-04-10 16:18:50,126] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", - "[2024-04-10 16:18:50,127] [INFO] (root) - sample_data_path: /tmp/simple_app\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", + "[2024-04-23 15:26:34,943] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", + "[2024-04-23 15:26:34,945] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", + "[2024-04-23 15:26:34,945] [INFO] (root) - sample_data_path: /tmp/simple_app\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", + "\u001b[0m2024-04-23 15:26:34.968 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "Input from: /tmp/simple_app, whose absolute path: /tmp/simple_app\n", - "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2024-04-10 16:18:50,179] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2024-04-10 16:18:50,180] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2024-04-10 16:18:50,180] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2024-04-10 16:18:50,185] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", + "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2024-04-23 15:26:35,002] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", "Number of times operator median_op whose class is defined in median_operator called: 1\n", "Number of times operator gaussian_op whose class is defined in gaussian_operator called: 1\n", "Data type of output: , max = 0.35821119421406195\n", "Data type of output post conversion: , max = 91\n", - "[2024-04-10 16:18:50,402] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", - "[2024-04-10 16:18:50,403] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", - "[2024-04-10 16:18:50,404] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", - "[2024-04-10 16:18:50,404] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", - "[2024-04-10 16:18:50,404] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", - "[2024-04-10 16:18:50,404] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", - "[2024-04-10 16:18:50,407] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", - "[2024-04-10 16:18:50,408] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", - "[2024-04-10 16:18:50,408] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", - "[2024-04-10 16:18:50,408] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", - "[2024-04-10 16:18:50,408] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", - "[2024-04-10 16:18:50,408] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", - "[2024-04-10 16:18:50,409] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", - "[2024-04-10 16:18:50,409] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", - "[2024-04-10 16:18:50,409] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", - "[2024-04-10 16:18:50,409] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", - "[2024-04-10 16:18:50,409] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", - "[2024-04-10 16:18:50,411] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", - "[2024-04-10 16:18:50,411] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", - "[2024-04-10 16:18:50,411] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", - "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", - "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", - "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", - "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", - "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", - "[2024-04-10 16:18:50,412] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", - "[2024-04-10 16:18:50,413] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", - "[2024-04-10 16:18:50,413] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", - "[2024-04-10 16:18:50,414] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", - "[2024-04-10 16:18:50,414] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", - "[2024-04-10 16:18:50,415] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", - "[2024-04-10 16:18:50,415] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", - "[2024-04-10 16:18:50,415] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", - "[2024-04-10 16:18:50,419] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", - "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", - "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", - "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", - "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", - "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", - "[2024-04-10 16:18:50,420] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", - "[2024-04-10 16:18:50,421] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", - "[2024-04-10 16:18:50,421] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", - "[2024-04-10 16:18:50,421] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", - "[2024-04-10 16:18:50,421] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", - "[2024-04-10 16:18:50,422] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", - "[2024-04-10 16:18:50,422] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", - "[2024-04-10 16:18:50,423] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", - "[2024-04-10 16:18:50,423] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:230] Destroying context\n" + "[2024-04-23 15:26:35,225] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", + "[2024-04-23 15:26:35,226] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", + "[2024-04-23 15:26:35,226] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", + "[2024-04-23 15:26:35,227] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", + "[2024-04-23 15:26:35,227] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", + "[2024-04-23 15:26:35,227] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", + "[2024-04-23 15:26:35,230] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", + "[2024-04-23 15:26:35,231] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", + "[2024-04-23 15:26:35,231] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", + "[2024-04-23 15:26:35,231] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", + "[2024-04-23 15:26:35,231] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", + "[2024-04-23 15:26:35,231] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", + "[2024-04-23 15:26:35,232] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", + "[2024-04-23 15:26:35,232] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", + "[2024-04-23 15:26:35,232] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", + "[2024-04-23 15:26:35,232] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", + "[2024-04-23 15:26:35,232] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", + "[2024-04-23 15:26:35,233] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", + "[2024-04-23 15:26:35,233] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", + "[2024-04-23 15:26:35,234] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", + "[2024-04-23 15:26:35,234] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", + "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", + "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", + "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", + "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", + "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", + "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", + "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", + "[2024-04-23 15:26:35,236] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", + "[2024-04-23 15:26:35,237] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", + "[2024-04-23 15:26:35,237] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", + "[2024-04-23 15:26:35,237] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", + "[2024-04-23 15:26:35,237] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", + "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", + "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", + "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", + "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", + "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", + "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", + "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", + "[2024-04-23 15:26:35,243] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", + "[2024-04-23 15:26:35,243] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", + "[2024-04-23 15:26:35,243] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", + "[2024-04-23 15:26:35,243] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", + "[2024-04-23 15:26:35,244] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", + "[2024-04-23 15:26:35,245] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", + "[2024-04-23 15:26:35,245] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", + "[2024-04-23 15:26:35,245] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", + "\u001b[0m2024-04-23 15:26:35.273 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 15:26:35.273 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:275] Destroying context\n" ] } ], @@ -1150,16 +1146,16 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 20, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" }, @@ -1200,7 +1196,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 48, "metadata": {}, "outputs": [ { @@ -1230,7 +1226,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -1256,19 +1252,21 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 16:18:52,341] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", - "[2024-04-10 16:18:52,341] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2024-04-10 16:18:52,341] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", - "[2024-04-10 16:18:52,343] [INFO] (packager) - Generating app.json...\n", - "[2024-04-10 16:18:52,343] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-10 16:18:52,348] [DEBUG] (common) - \n", + "[2024-04-23 15:26:37,078] [INFO] (common) - Downloading CLI manifest file...\n", + "[2024-04-23 15:26:37,629] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2024-04-23 15:26:37,631] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", + "[2024-04-23 15:26:37,632] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2024-04-23 15:26:37,632] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", + "[2024-04-23 15:26:37,636] [INFO] (packager) - Generating app.json...\n", + "[2024-04-23 15:26:37,636] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-23 15:26:37,649] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1303,7 +1301,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2024-04-10 16:18:52,348] [DEBUG] (common) - \n", + "[2024-04-23 15:26:37,650] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1321,11 +1319,11 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-10 16:18:52,364] [DEBUG] (packager.builder) - \n", + "[2024-04-23 15:26:37,673] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -1341,11 +1339,11 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", "LABEL tag=\"simple_imaging_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Simple Imaging App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.nvidia.holoscan=\"2.0.0\"\n", "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "\n", @@ -1371,7 +1369,6 @@ "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", "\n", "\n", - "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", @@ -1397,14 +1394,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", - "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", + " \n", + "# MONAI Deploy\n", "\n", "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "\n", - "\n", + "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", "\n", "\n", "\n", @@ -1417,31 +1412,31 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-10 16:18:52,365] [INFO] (packager.builder) - \n", + "[2024-04-23 15:26:37,673] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 1.0.3\n", + " SDK Version: 2.0.0\n", " SDK: monai-deploy\n", " Tag: simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2024-04-10 16:18:52,650] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-10 16:18:52,650] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2024-04-23 15:26:38,231] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-23 15:26:38,231] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.77kB done\n", + "#1 transferring dockerfile: 2.63kB done\n", "#1 DONE 0.0s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", - "#2 DONE 0.4s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + "#2 DONE 0.5s\n", "\n", "#3 [internal] load .dockerignore\n", "#3 transferring context: 1.79kB done\n", @@ -1450,117 +1445,115 @@ "#4 [internal] load build context\n", "#4 DONE 0.0s\n", "\n", - "#5 importing cache manifest from local:14270000836931083776\n", + "#5 importing cache manifest from local:10678196058931023490\n", "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 [ 1/20] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.0s done\n", + "#6 [ 1/20] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.0s done\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#7 DONE 0.4s\n", + "#7 DONE 0.9s\n", "\n", "#4 [internal] load build context\n", - "#4 transferring context: 157.50kB 0.0s done\n", + "#4 transferring context: 157.77kB 0.0s done\n", "#4 DONE 0.0s\n", "\n", "#8 [ 5/20] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#8 CACHED\n", "\n", - "#9 [11/20] RUN chmod +x /var/holoscan/tools\n", + "#9 [ 3/20] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#9 CACHED\n", "\n", - "#10 [ 2/20] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#10 [ 6/20] RUN chown -R holoscan /var/holoscan\n", "#10 CACHED\n", "\n", - "#11 [ 4/20] RUN groupadd -f -g 1000 holoscan\n", + "#11 [13/20] RUN pip install --upgrade pip\n", "#11 CACHED\n", "\n", - "#12 [ 7/20] RUN chown -R holoscan /var/holoscan/input\n", + "#12 [ 8/20] RUN chown -R holoscan /var/holoscan/output\n", "#12 CACHED\n", "\n", - "#13 [ 8/20] RUN chown -R holoscan /var/holoscan/output\n", + "#13 [ 7/20] RUN chown -R holoscan /var/holoscan/input\n", "#13 CACHED\n", "\n", - "#14 [ 6/20] RUN chown -R holoscan /var/holoscan\n", + "#14 [ 2/20] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#14 CACHED\n", "\n", - "#15 [ 9/20] WORKDIR /var/holoscan\n", + "#15 [12/20] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#15 CACHED\n", "\n", - "#16 [ 3/20] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#16 [11/20] RUN chmod +x /var/holoscan/tools\n", "#16 CACHED\n", "\n", - "#17 [12/20] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#17 [ 9/20] WORKDIR /var/holoscan\n", "#17 CACHED\n", "\n", - "#18 [10/20] COPY ./tools /var/holoscan/tools\n", + "#18 [ 4/20] RUN groupadd -f -g 1000 holoscan\n", "#18 CACHED\n", "\n", - "#19 [13/20] RUN pip install --upgrade pip\n", + "#19 [10/20] COPY ./tools /var/holoscan/tools\n", "#19 CACHED\n", "\n", "#20 [14/20] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#20 CACHED\n", "\n", - "#21 [15/20] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#21 DONE 0.0s\n", - "\n", - "#22 [16/20] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#22 0.662 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.757 Processing /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#22 0.770 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.23.5)\n", - "#22 0.949 Collecting holoscan~=1.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.097 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (4.1 kB)\n", - "#22 1.154 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.158 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.227 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.231 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.296 Collecting pip==23.3.2 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.301 Downloading pip-23.3.2-py3-none-any.whl.metadata (3.5 kB)\n", - "#22 1.308 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (12.2.0)\n", - "#22 1.309 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.2.1)\n", - "#22 1.310 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.60.1)\n", - "#22 1.311 Requirement already satisfied: Jinja2==3.1.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.1.2)\n", - "#22 1.311 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (23.1)\n", - "#22 1.312 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (6.0)\n", - "#22 1.313 Requirement already satisfied: requests==2.28.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.28.2)\n", - "#22 1.314 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (5.9.6)\n", - "#22 1.414 Collecting wheel-axle-runtime<1.0 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.420 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", - "#22 1.444 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.8.2)\n", - "#22 1.447 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.1.3)\n", - "#22 1.460 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.10.14)\n", - "#22 1.461 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.66.1)\n", - "#22 1.461 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.9.0)\n", - "#22 1.462 Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.7.1)\n", - "#22 1.469 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.3.2)\n", - "#22 1.470 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.6)\n", - "#22 1.470 Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.26.18)\n", - "#22 1.471 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2023.11.17)\n", - "#22 1.507 Collecting typing-extensions (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.510 Downloading typing_extensions-4.11.0-py3-none-any.whl.metadata (3.0 kB)\n", - "#22 1.561 Collecting filelock (from wheel-axle-runtime<1.0->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.573 Downloading filelock-3.13.4-py3-none-any.whl.metadata (2.8 kB)\n", - "#22 1.639 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (8.1.7)\n", - "#22 1.683 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.780 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl (33.6 MB)\n", - "#22 6.199 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.6/33.6 MB 10.0 MB/s eta 0:00:00\n", - "#22 6.209 Downloading pip-23.3.2-py3-none-any.whl (2.1 MB)\n", - "#22 6.254 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 53.3 MB/s eta 0:00:00\n", - "#22 6.263 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", - "#22 6.280 Downloading typing_extensions-4.11.0-py3-none-any.whl (34 kB)\n", - "#22 6.296 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", - "#22 6.314 Downloading filelock-3.13.4-py3-none-any.whl (11 kB)\n", - "#22 6.622 Installing collected packages: typing-extensions, pip, filelock, colorama, wheel-axle-runtime, typeguard, holoscan, monai-deploy-app-sdk\n", - "#22 6.643 Attempting uninstall: pip\n", - "#22 6.644 Found existing installation: pip 24.0\n", - "#22 6.709 Uninstalling pip-24.0:\n", - "#22 7.165 Successfully uninstalled pip-24.0\n", - "#22 8.769 Successfully installed colorama-0.4.6 filelock-3.13.4 holoscan-1.0.3 monai-deploy-app-sdk-0.5.1+25.g31e4165.dirty pip-23.3.2 typeguard-4.2.1 typing-extensions-4.11.0 wheel-axle-runtime-0.0.5\n", - "#22 DONE 9.3s\n", + "#21 [15/20] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#21 DONE 0.1s\n", + "\n", + "#22 [16/20] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 0.725 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.802 Processing /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 0.815 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.23.5)\n", + "#22 1.004 Collecting holoscan~=2.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.074 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (6.7 kB)\n", + "#22 1.118 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.122 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.172 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.176 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.192 Requirement already satisfied: pip>=20.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (24.0)\n", + "#22 1.193 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (12.2.0)\n", + "#22 1.193 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", + "#22 1.194 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.60.1)\n", + "#22 1.195 Requirement already satisfied: Jinja2==3.1.3 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.1.3)\n", + "#22 1.195 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (23.1)\n", + "#22 1.196 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (6.0)\n", + "#22 1.197 Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.31.0)\n", + "#22 1.197 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (5.9.6)\n", + "#22 1.296 Collecting wheel-axle-runtime<1.0 (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.302 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", + "#22 1.326 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.8.2)\n", + "#22 1.329 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.1.3)\n", + "#22 1.342 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.10.15)\n", + "#22 1.342 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.66.2)\n", + "#22 1.343 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.12.3)\n", + "#22 1.343 Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.7.1)\n", + "#22 1.352 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.3.2)\n", + "#22 1.352 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.7)\n", + "#22 1.353 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", + "#22 1.353 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2024.2.2)\n", + "#22 1.389 Collecting typing-extensions (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.392 Downloading typing_extensions-4.11.0-py3-none-any.whl.metadata (3.0 kB)\n", + "#22 1.451 Collecting filelock (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.455 Downloading filelock-3.13.4-py3-none-any.whl.metadata (2.8 kB)\n", + "#22 1.486 Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (8.1.7)\n", + "#22 1.490 Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.5.4)\n", + "#22 1.491 Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (13.7.1)\n", + "#22 1.533 Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.0.0)\n", + "#22 1.533 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.17.2)\n", + "#22 1.556 Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.1.2)\n", + "#22 1.570 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.585 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.2 MB)\n", + "#22 3.441 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.2/33.2 MB 25.5 MB/s eta 0:00:00\n", + "#22 3.447 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", + "#22 3.465 Downloading typing_extensions-4.11.0-py3-none-any.whl (34 kB)\n", + "#22 3.484 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", + "#22 3.499 Downloading filelock-3.13.4-py3-none-any.whl (11 kB)\n", + "#22 3.799 Installing collected packages: typing-extensions, filelock, colorama, wheel-axle-runtime, typeguard, holoscan, monai-deploy-app-sdk\n", + "#22 4.520 Successfully installed colorama-0.4.6 filelock-3.13.4 holoscan-2.0.0 monai-deploy-app-sdk-0.5.1+20.gb869749.dirty typeguard-4.2.1 typing-extensions-4.11.0 wheel-axle-runtime-0.0.5\n", + "#22 DONE 5.2s\n", "\n", "#23 [17/20] COPY ./map/app.json /etc/holoscan/app.json\n", "#23 DONE 0.1s\n", @@ -1576,111 +1569,113 @@ "\n", "#27 exporting to docker image format\n", "#27 exporting layers\n", - "#27 exporting layers 5.7s done\n", - "#27 exporting manifest sha256:a5d5363b67b4d546c663819215cd3479b9fc8038916c32b1f39a3bd380aa1d27 0.0s done\n", - "#27 exporting config sha256:00503bdec78188be5602490be8caaa715487986151fd9430d0433b996ce4d386 0.0s done\n", + "#27 exporting layers 4.7s done\n", + "#27 exporting manifest sha256:b2f214d50ea4107e85a01c007f24375e996d9dc954742f585907f47d96cc3c1a 0.0s done\n", + "#27 exporting config sha256:6485f181da93a3c0fc12abe1cf367c89306b7e8f7b110993be48f38b56164b89 0.0s done\n", "#27 sending tarball\n", "#27 ...\n", "\n", "#28 importing to docker\n", - "#28 loading layer 1a101d9210ae 32.77kB / 125.57kB\n", - "#28 loading layer c4b083b26ab0 557.06kB / 74.13MB\n", - "#28 loading layer c4b083b26ab0 71.30MB / 74.13MB 2.0s\n", - "#28 loading layer 77455b6ee5d5 492B / 492B\n", - "#28 loading layer 4583ff017de7 313B / 313B\n", - "#28 loading layer 90825b467166 293B / 293B\n", - "#28 loading layer e972a134a523 3.18kB / 3.18kB\n", - "#28 loading layer c4b083b26ab0 71.30MB / 74.13MB 3.1s done\n", - "#28 loading layer 1a101d9210ae 32.77kB / 125.57kB 3.2s done\n", - "#28 loading layer 77455b6ee5d5 492B / 492B 0.6s done\n", - "#28 loading layer 4583ff017de7 313B / 313B 0.6s done\n", - "#28 loading layer 90825b467166 293B / 293B 0.5s done\n", - "#28 loading layer e972a134a523 3.18kB / 3.18kB 0.5s done\n", - "#28 DONE 3.2s\n", + "#28 loading layer d16586f61a51 32.77kB / 125.82kB\n", + "#28 loading layer bb2ce52783d3 557.06kB / 67.52MB\n", + "#28 loading layer 5f42a2d4a17c 492B / 492B\n", + "#28 loading layer 93299cfbc42b 312B / 312B\n", + "#28 loading layer 222cc4dc3d9f 294B / 294B\n", + "#28 loading layer 4dbebd69efec 3.18kB / 3.18kB\n", + "#28 loading layer 5f42a2d4a17c 492B / 492B 1.0s done\n", + "#28 loading layer d16586f61a51 32.77kB / 125.82kB 2.9s done\n", + "#28 loading layer bb2ce52783d3 557.06kB / 67.52MB 2.9s done\n", + "#28 loading layer 93299cfbc42b 312B / 312B 1.0s done\n", + "#28 loading layer 222cc4dc3d9f 294B / 294B 1.0s done\n", + "#28 loading layer 4dbebd69efec 3.18kB / 3.18kB 0.9s done\n", + "#28 DONE 2.9s\n", "\n", "#27 exporting to docker image format\n", - "#27 sending tarball 42.0s done\n", - "#27 DONE 47.7s\n", + "#27 sending tarball 39.7s done\n", + "#27 DONE 44.4s\n", "\n", "#29 exporting cache to client directory\n", "#29 preparing build cache for export\n", - "#29 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", - "#29 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#29 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015\n", "#29 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", - "#29 writing layer sha256:085504367cb16317416ecf8e22015fdf0c1b46551c023bbf3b8742e23f5aef3c 0.0s done\n", + "#29 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", + "#29 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", "#29 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", "#29 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", "#29 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#29 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", - "#29 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", - "#29 writing layer sha256:14f2a9cb6c8e39537280f2dff8fe283840b8f18d7bd015c27241025096d54378 done\n", - "#29 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", - "#29 writing layer sha256:1b1470e024ee74ee621e4349aff9bb255df3295a62d164d58d3d86951cec384a done\n", + "#29 writing layer sha256:18ff8faa5fb62bc13ea7af97d3ed57fd4dbffbcb15b37606935aa20a1b2b9879\n", + "#29 writing layer sha256:18ff8faa5fb62bc13ea7af97d3ed57fd4dbffbcb15b37606935aa20a1b2b9879 1.2s done\n", + "#29 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39\n", + "#29 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", + "#29 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", "#29 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#29 writing layer sha256:20e6a881b3368d232df85df00b9dbb528d02267a7433bab5776edc8d5c3a7b6a\n", - "#29 writing layer sha256:20e6a881b3368d232df85df00b9dbb528d02267a7433bab5776edc8d5c3a7b6a 1.4s done\n", - "#29 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277\n", - "#29 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", "#29 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", "#29 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#29 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", - "#29 writing layer sha256:33bbd9145fa428eef0bf280b53d4171773e254445fb47a36de95154c2d66ee99 done\n", + "#29 writing layer sha256:2e367cdca270a2175c84537f99cfd3f00f286e5977884762ba2b7045637f7eb8 done\n", + "#29 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", + "#29 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", "#29 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", "#29 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#29 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", + "#29 writing layer sha256:44b45fba2f5d69895a3b96828a250406b216add7940feab849e3bf18bc864780 0.0s done\n", "#29 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", "#29 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", "#29 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", + "#29 writing layer sha256:4dde81c0149c8207008e2b45ce8533f41589094e1b998390a2d39fb50b337992 0.0s done\n", "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#29 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", - "#29 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", - "#29 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#29 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", "#29 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", "#29 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#29 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", + "#29 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", "#29 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", "#29 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#29 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", - "#29 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", - "#29 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", - "#29 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#29 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", + "#29 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", + "#29 writing layer sha256:758ac279497f68ba566bbdb5686aaaa9e362ca063c817c725de96fd205aeaa53 0.0s done\n", + "#29 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", "#29 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#29 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", - "#29 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", - "#29 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#29 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", + "#29 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", "#29 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", + "#29 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", + "#29 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", + "#29 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", "#29 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#29 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", + "#29 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", + "#29 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", "#29 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", "#29 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#29 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#29 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", "#29 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#29 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", "#29 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", "#29 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", - "#29 writing layer sha256:ad2ce23d07e249bf72ef2c987780659b7b366010d159a616441860e7092ac630 0.0s done\n", "#29 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", + "#29 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", + "#29 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157\n", + "#29 preparing build cache for export 1.7s done\n", "#29 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", + "#29 writing layer sha256:b98f5f4d1c99ef6c3b4ecce24d32753787f67982a13b216d17115c13fee3aa58 done\n", "#29 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#29 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", - "#29 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#29 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", + "#29 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", "#29 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#29 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", "#29 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#29 writing layer sha256:de5a53c62648303a3a81f6443a00acfdaceea5d81a55b26a9dfcff656363ec2c 0.0s done\n", - "#29 writing layer sha256:e32a133f2d3ec74bbd17b59c6276eb0bffaff9e0737558a385e2f2280b4ca568 0.0s done\n", - "#29 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", + "#29 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", + "#29 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", + "#29 writing layer sha256:e16d56ac40a253ee3622e4a00c4d5f0cc28effdef15ac4b2c51b78f4732abcef done\n", + "#29 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", + "#29 writing layer sha256:e2cb45922077b1926bf021323ddd666dbc92d2c9daea0acf78515292da5000c8 done\n", + "#29 writing layer sha256:e79b8737ab7fc2e26d2e35f3e6572c9ababcbaaa232c1ff5987cdbf9ccd55b88 done\n", "#29 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", "#29 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#29 writing layer sha256:f06b2d19cffd90387b7ccd4e80ace09ab21995cf85c940091e6c80907532bda8\n", - "#29 preparing build cache for export 1.9s done\n", - "#29 writing layer sha256:f06b2d19cffd90387b7ccd4e80ace09ab21995cf85c940091e6c80907532bda8 0.0s done\n", - "#29 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#29 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", "#29 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#29 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", - "#29 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", - "#29 writing config sha256:488336ab32415713da34c305ad87c5f983293c64534687f5fb685eb5b957c49c 0.0s done\n", - "#29 writing cache manifest sha256:69fe5811c303d48c634f794997602fd274d7922354e7aedf0dcd70b373a7a6a8 0.0s done\n", - "#29 DONE 1.9s\n", - "[2024-04-10 16:19:53,891] [INFO] (packager) - Build Summary:\n", + "#29 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", + "#29 writing config sha256:339862140e56654739f221a003e85d34c38ecd35b385c81ec1172b98fc0def66 0.0s done\n", + "#29 writing cache manifest sha256:5120653f7a3d293475e31a259659d8eb2d8883ab243f43924a2d526e754e676c 0.0s done\n", + "#29 DONE 1.7s\n", + "[2024-04-23 15:27:32,621] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1710,14 +1705,14 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 00503bdec781 51 seconds ago 12.3GB\n" + "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 6485f181da93 46 seconds ago 12.5GB\n" ] } ], @@ -1739,7 +1734,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -1797,17 +1792,17 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2024-04-10 23:19:57 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2024-04-23 22:27:35 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2024-04-10 23:19:57 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2024-04-10 23:19:57 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2024-04-10 23:19:57 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2024-04-23 22:27:35 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2024-04-23 22:27:35 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2024-04-23 22:27:35 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2024-04-10 23:19:57 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", - "2024-04-10 23:19:57 [INFO] '/opt/holoscan/models' cannot be found.\n", + "2024-04-23 22:27:35 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2024-04-23 22:27:35 [INFO] '/opt/holoscan/models' cannot be found.\n", "\n", - "2024-04-10 23:19:57 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2024-04-10 23:19:57 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2024-04-23 22:27:35 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2024-04-23 22:27:35 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config\n" ] @@ -1834,29 +1829,29 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 16:19:58,260] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-10 16:19:58,260] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-23 15:27:36,245] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-23 15:27:36,245] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-10 16:19:58,260] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-23 15:27:36,245] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-10 16:19:58,260] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-23 15:27:36,245] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-10 16:19:58,323] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpkogym2cj/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpkogym2cj/pkg.json\n", - "[2024-04-10 16:19:58,545] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-23 15:27:36,326] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpv5e8cb_i/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpv5e8cb_i/pkg.json\n", + "[2024-04-23 15:27:36,492] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-10 16:19:58,545] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2024-04-23 15:27:36,492] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-10 16:19:58,814] [INFO] (common) - Launching container (8e18e862585f) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: unruffled_kalam\n", + "[2024-04-23 15:27:36,761] [INFO] (common) - Launching container (94febd6eabce) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: dazzling_kowalevski\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1866,43 +1861,39 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-10 23:19:59 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2024-04-23 22:27:37 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2024-04-10 23:20:00,177] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2024-04-23 22:27:37,772] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2024-04-10 23:20:00,178] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2024-04-23 22:27:37,772] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2024-04-10 23:20:00,178] [INFO] (root) - sample_data_path: /var/holoscan/input\n", + "[2024-04-23 22:27:37,772] [INFO] (root) - sample_data_path: /var/holoscan/input\n", "\n", "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:247] Creating context\n", "\n", "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", "\n", - "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", "\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "\u001b[0m2024-04-23 22:27:37.797 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", "\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", + "\u001b[0m2024-04-23 22:27:38.257 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "\u001b[0m2024-04-23 22:27:38.257 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", "\n", - "[info] [gxf_executor.cpp:230] Destroying context\n", + "[info] [gxf_executor.cpp:275] Destroying context\n", "\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "\n", @@ -1916,7 +1907,7 @@ "\n", "Data type of output post conversion: , max = 91\n", "\n", - "[2024-04-10 16:20:01,327] [INFO] (common) - Container 'unruffled_kalam'(8e18e862585f) exited.\n" + "[2024-04-23 15:27:38,526] [INFO] (common) - Container 'dazzling_kowalevski'(94febd6eabce) exited.\n" ] } ], @@ -1928,16 +1919,16 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 27, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, diff --git a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb index 97757a6e..60e6a2d5 100644 --- a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb +++ b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb @@ -28,11 +28,11 @@ "output_type": "stream", "text": [ "Cloning into 'source'...\n", - "remote: Enumerating objects: 276, done.\u001b[K\n", - "remote: Counting objects: 100% (276/276), done.\u001b[K\n", + "remote: Enumerating objects: 277, done.\u001b[K\n", + "remote: Counting objects: 100% (277/277), done.\u001b[K\n", "remote: Compressing objects: 100% (222/222), done.\u001b[K\n", - "remote: Total 276 (delta 55), reused 150 (delta 32), pack-reused 0\u001b[K\n", - "Receiving objects: 100% (276/276), 1.43 MiB | 3.51 MiB/s, done.\n", + "remote: Total 277 (delta 55), reused 159 (delta 33), pack-reused 0\u001b[K\n", + "Receiving objects: 100% (277/277), 1.44 MiB | 10.45 MiB/s, done.\n", "Resolving deltas: 100% (55/55), done.\n" ] } @@ -77,41 +77,38 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (0.5.1+12.gb2f5a07.dirty)\n", + "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (0.5.1+18.gea0c032.dirty)\n", "Requirement already satisfied: numpy>=1.21.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (1.26.4)\n", - "Requirement already satisfied: holoscan~=1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (1.0.3)\n", + "Requirement already satisfied: holoscan~=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (2.0.0)\n", "Requirement already satisfied: colorama>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (0.4.6)\n", "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.2.1)\n", - "Requirement already satisfied: pip==23.3.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (23.3.2)\n", - "Requirement already satisfied: cupy-cuda12x==12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (12.2.0)\n", - "Requirement already satisfied: cloudpickle==2.2.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (2.2.1)\n", - "Requirement already satisfied: python-on-whales==0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (0.60.1)\n", - "Requirement already satisfied: Jinja2==3.1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (3.1.2)\n", - "Requirement already satisfied: packaging==23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (23.1)\n", - "Requirement already satisfied: pyyaml==6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (6.0)\n", - "Requirement already satisfied: requests==2.28.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (2.28.2)\n", - "Requirement already satisfied: psutil==5.9.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (5.9.6)\n", - "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=1.0->monai-deploy-app-sdk) (0.0.5)\n", - "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x==12.2->holoscan~=1.0->monai-deploy-app-sdk) (0.8.2)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2==3.1.2->holoscan~=1.0->monai-deploy-app-sdk) (2.1.5)\n", - "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (1.10.15)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (4.66.2)\n", - "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (0.12.2)\n", - "Requirement already satisfied: typing-extensions in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (4.11.0)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk) (3.6)\n", - "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk) (1.26.18)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk) (2024.2.2)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=1.0->monai-deploy-app-sdk) (3.13.3)\n", - "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (8.1.7)\n", - "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (1.5.4)\n", - "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (13.7.1)\n", - "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (3.0.0)\n", - "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (2.17.2)\n", - "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk) (0.1.2)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" + "Requirement already satisfied: pip>=20.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (24.0)\n", + "Requirement already satisfied: cupy-cuda12x==12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (12.2.0)\n", + "Requirement already satisfied: cloudpickle==2.2.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (2.2.1)\n", + "Requirement already satisfied: python-on-whales==0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.60.1)\n", + "Requirement already satisfied: Jinja2==3.1.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.3)\n", + "Requirement already satisfied: packaging==23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (23.1)\n", + "Requirement already satisfied: pyyaml==6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.0)\n", + "Requirement already satisfied: requests==2.31.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (2.31.0)\n", + "Requirement already satisfied: psutil==5.9.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (5.9.6)\n", + "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.0.5)\n", + "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk) (0.8.2)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk) (2.1.5)\n", + "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.10.15)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (4.66.2)\n", + "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.12.3)\n", + "Requirement already satisfied: typing-extensions in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (4.11.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2.2.1)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2024.2.2)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk) (3.13.4)\n", + "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (8.1.7)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.5.4)\n", + "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (13.7.1)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (2.17.2)\n", + "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.1.2)\n" ] } ], @@ -140,11 +137,11 @@ "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (10.3.0)\n", "Requirement already satisfied: numpy>=1.20 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (1.26.4)\n", "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.0.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.13.3)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.13.4)\n", "Requirement already satisfied: typing-extensions in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.11.0)\n", "Requirement already satisfied: sympy in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (1.12)\n", "Requirement already satisfied: networkx in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1)\n", - "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.2)\n", + "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.3)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu11==11.7.99 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.99)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu11==11.7.99 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.99)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu11==11.7.101 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.101)\n", @@ -157,15 +154,12 @@ "Requirement already satisfied: nvidia-nccl-cu11==2.14.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2.14.3)\n", "Requirement already satisfied: nvidia-nvtx-cu11==11.7.91 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.91)\n", "Requirement already satisfied: triton==2.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2.0.0)\n", - "Requirement already satisfied: setuptools in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.9->monai) (69.2.0)\n", + "Requirement already satisfied: setuptools in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.9->monai) (69.5.1)\n", "Requirement already satisfied: wheel in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.9->monai) (0.43.0)\n", - "Requirement already satisfied: cmake in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from triton==2.0.0->torch>=1.9->monai) (3.29.0.1)\n", - "Requirement already satisfied: lit in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from triton==2.0.0->torch>=1.9->monai) (18.1.2)\n", + "Requirement already satisfied: cmake in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from triton==2.0.0->torch>=1.9->monai) (3.29.2)\n", + "Requirement already satisfied: lit in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from triton==2.0.0->torch>=1.9->monai) (18.1.3)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from jinja2->torch>=1.9->monai) (2.1.5)\n", - "Requirement already satisfied: mpmath>=0.19 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from sympy->torch>=1.9->monai) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" + "Requirement already satisfied: mpmath>=0.19 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from sympy->torch>=1.9->monai) (1.3.0)\n" ] } ], @@ -194,23 +188,20 @@ "text": [ "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.3)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.28.2)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.4)\n", + "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.6)\n", - "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.26.18)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.2.1)\n", "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "Downloading...\n", "From (original): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E\n", - "From (redirected): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E&confirm=t&uuid=8dfa9939-2267-4d12-ba17-3e35b1626357\n", + "From (redirected): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E&confirm=t&uuid=72f2b083-c6ce-44ba-aafd-19c9bd097d63\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_classifier_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 28.6M/28.6M [00:00<00:00, 62.3MB/s]\n" + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 28.6M/28.6M [00:00<00:00, 34.3MB/s]\n" ] } ], @@ -305,14 +296,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 16:23:51,962] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", - "[2024-04-10 16:23:51,962] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2024-04-10 16:23:51,962] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2024-04-10 16:23:51,962] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2024-04-10 16:23:51,962] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", - "[2024-04-10 16:23:51,964] [INFO] (packager) - Generating app.json...\n", - "[2024-04-10 16:23:51,964] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-10 16:23:51,969] [DEBUG] (common) - \n", + "[2024-04-23 15:33:53,163] [INFO] (common) - Downloading CLI manifest file...\n", + "[2024-04-23 15:33:53,444] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2024-04-23 15:33:53,446] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", + "[2024-04-23 15:33:53,446] [INFO] (packager.parameters) - Detected application type: Python File\n", + "[2024-04-23 15:33:53,447] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2024-04-23 15:33:53,447] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2024-04-23 15:33:53,447] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", + "[2024-04-23 15:33:53,453] [INFO] (packager) - Generating app.json...\n", + "[2024-04-23 15:33:53,453] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-23 15:33:53,464] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -347,7 +340,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2024-04-10 16:23:51,969] [DEBUG] (common) - \n", + "[2024-04-23 15:33:53,465] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -367,11 +360,11 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-10 16:23:52,003] [DEBUG] (packager.builder) - \n", + "[2024-04-23 15:33:53,510] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -387,11 +380,11 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", "LABEL tag=\"mednist_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.nvidia.holoscan=\"2.0.0\"\n", "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "\n", @@ -417,7 +410,6 @@ "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", "\n", "\n", - "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", @@ -443,14 +435,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", - "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", + " \n", + "# MONAI Deploy\n", "\n", "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "\n", - "\n", + "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", @@ -464,151 +454,254 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-10 16:23:52,003] [INFO] (packager.builder) - \n", + "[2024-04-23 15:33:53,510] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 1.0.3\n", + " SDK Version: 2.0.0\n", " SDK: monai-deploy\n", " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2024-04-10 16:23:52,265] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-10 16:23:52,265] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2024-04-23 15:33:53,781] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-23 15:33:53,782] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.81kB done\n", - "#1 DONE 0.1s\n", + "#1 transferring dockerfile: 2.67kB done\n", + "#1 DONE 0.0s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "#2 DONE 0.1s\n", "\n", "#3 [internal] load .dockerignore\n", "#3 transferring context: 1.79kB done\n", - "#3 DONE 0.1s\n", + "#3 DONE 0.0s\n", "\n", - "#4 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", - "#4 ...\n", + "#4 [internal] load build context\n", + "#4 DONE 0.0s\n", "\n", - "#5 [internal] load build context\n", + "#5 importing cache manifest from local:3840576277762201667\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 importing cache manifest from local:3023656059275295125\n", - "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.0s done\n", "#6 DONE 0.0s\n", "\n", - "#7 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", - "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.1s done\n", - "#7 DONE 0.1s\n", - "\n", - "#4 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", - "#4 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#4 DONE 0.7s\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#7 DONE 0.4s\n", "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 28.73MB 0.2s done\n", - "#5 DONE 0.2s\n", + "#4 [internal] load build context\n", + "#4 transferring context: 28.73MB 0.2s done\n", + "#4 DONE 0.2s\n", "\n", - "#8 [ 9/21] WORKDIR /var/holoscan\n", + "#8 [10/21] COPY ./tools /var/holoscan/tools\n", "#8 CACHED\n", "\n", - "#9 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#9 [11/21] RUN chmod +x /var/holoscan/tools\n", "#9 CACHED\n", "\n", "#10 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#10 CACHED\n", "\n", - "#11 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#11 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", "#11 CACHED\n", "\n", "#12 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#12 CACHED\n", "\n", - "#13 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#13 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#13 CACHED\n", "\n", - "#14 [13/21] RUN pip install --upgrade pip\n", + "#14 [ 9/21] WORKDIR /var/holoscan\n", "#14 CACHED\n", "\n", - "#15 [10/21] COPY ./tools /var/holoscan/tools\n", + "#15 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#15 CACHED\n", "\n", "#16 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#16 CACHED\n", "\n", - "#17 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", + "#17 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#17 CACHED\n", "\n", - "#18 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#18 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#18 CACHED\n", "\n", - "#19 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#19 [13/21] RUN pip install --upgrade pip\n", "#19 CACHED\n", "\n", "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#20 CACHED\n", - "\n", - "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#20 0.770 Collecting monai>=1.2.0 (from -r /tmp/requirements.txt (line 1))\n", + "#20 0.845 Downloading monai-1.3.0-202310121228-py3-none-any.whl.metadata (10 kB)\n", + "#20 1.064 Collecting Pillow>=8.4.0 (from -r /tmp/requirements.txt (line 2))\n", + "#20 1.068 Downloading pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.2 kB)\n", + "#20 1.168 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 3))\n", + "#20 1.179 Downloading pydicom-2.4.4-py3-none-any.whl.metadata (7.8 kB)\n", + "#20 1.292 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 4))\n", + "#20 1.299 Downloading highdicom-0.22.0-py3-none-any.whl.metadata (3.8 kB)\n", + "#20 1.417 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 5))\n", + "#20 1.422 Downloading SimpleITK-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#20 1.424 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#20 1.492 Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.10/dist-packages (from monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (1.23.5)\n", + "#20 1.536 Collecting torch>=1.9 (from monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 1.541 Downloading torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl.metadata (26 kB)\n", + "#20 1.728 Collecting pillow-jpls>=1.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 4))\n", + "#20 1.808 Downloading pillow_jpls-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.1 kB)\n", + "#20 1.882 Collecting filelock (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 1.886 Downloading filelock-3.13.4-py3-none-any.whl.metadata (2.8 kB)\n", + "#20 1.912 Collecting typing-extensions>=4.8.0 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 1.915 Downloading typing_extensions-4.11.0-py3-none-any.whl.metadata (3.0 kB)\n", + "#20 1.942 Collecting sympy (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 1.946 Downloading sympy-1.12-py3-none-any.whl.metadata (12 kB)\n", + "#20 1.976 Collecting networkx (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 1.980 Downloading networkx-3.3-py3-none-any.whl.metadata (5.1 kB)\n", + "#20 1.982 Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (3.1.3)\n", + "#20 2.021 Collecting fsspec (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.025 Downloading fsspec-2024.3.1-py3-none-any.whl.metadata (6.8 kB)\n", + "#20 2.045 Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.050 Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.073 Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.077 Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.095 Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.099 Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "#20 2.117 Collecting nvidia-cudnn-cu12==8.9.2.26 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.120 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "#20 2.136 Collecting nvidia-cublas-cu12==12.1.3.1 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.139 Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.155 Collecting nvidia-cufft-cu12==11.0.2.54 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.158 Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.172 Collecting nvidia-curand-cu12==10.3.2.106 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.175 Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.193 Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.197 Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "#20 2.214 Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.218 Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "#20 2.233 Collecting nvidia-nccl-cu12==2.19.3 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.238 Downloading nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl.metadata (1.8 kB)\n", + "#20 2.258 Collecting nvidia-nvtx-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.262 Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.7 kB)\n", + "#20 2.286 Collecting triton==2.2.0 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.291 Downloading triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#20 2.327 Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.336 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.404 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (2.1.3)\n", + "#20 2.442 Collecting mpmath>=0.19 (from sympy->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#20 2.446 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#20 2.469 Downloading monai-1.3.0-202310121228-py3-none-any.whl (1.3 MB)\n", + "#20 2.504 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 48.0 MB/s eta 0:00:00\n", + "#20 2.510 Downloading pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "#20 2.559 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 104.0 MB/s eta 0:00:00\n", + "#20 2.683 Downloading pydicom-2.4.4-py3-none-any.whl (1.8 MB)\n", + "#20 2.704 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 104.8 MB/s eta 0:00:00\n", + "#20 2.710 Downloading highdicom-0.22.0-py3-none-any.whl (825 kB)\n", + "#20 2.719 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 825.0/825.0 kB 133.9 MB/s eta 0:00:00\n", + "#20 2.728 Downloading SimpleITK-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.7 MB)\n", + "#20 3.239 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.7/52.7 MB 115.0 MB/s eta 0:00:00\n", + "#20 3.245 Downloading pillow_jpls-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (305 kB)\n", + "#20 3.249 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 305.6/305.6 kB 225.9 MB/s eta 0:00:00\n", + "#20 3.254 Downloading torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl (755.5 MB)\n", + "#20 10.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 755.5/755.5 MB 116.7 MB/s eta 0:00:00\n", + "#20 10.48 Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", + "#20 14.42 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 410.6/410.6 MB 113.5 MB/s eta 0:00:00\n", + "#20 14.43 Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", + "#20 14.59 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.1/14.1 MB 82.1 MB/s eta 0:00:00\n", + "#20 14.60 Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", + "#20 14.90 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 23.7/23.7 MB 56.1 MB/s eta 0:00:00\n", + "#20 14.90 Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", + "#20 14.91 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 823.6/823.6 kB 161.9 MB/s eta 0:00:00\n", + "#20 14.92 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n", + "#20 22.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 731.7/731.7 MB 27.6 MB/s eta 0:00:00\n", + "#20 22.58 Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", + "#20 23.73 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.6/121.6 MB 116.1 MB/s eta 0:00:00\n", + "#20 23.74 Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", + "#20 24.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.5/56.5 MB 72.6 MB/s eta 0:00:00\n", + "#20 24.30 Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", + "#20 25.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 124.2/124.2 MB 121.6 MB/s eta 0:00:00\n", + "#20 25.48 Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", + "#20 27.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 196.0/196.0 MB 112.9 MB/s eta 0:00:00\n", + "#20 27.65 Downloading nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl (166.0 MB)\n", + "#20 30.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 166.0/166.0 MB 24.2 MB/s eta 0:00:00\n", + "#20 30.17 Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", + "#20 30.18 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.1/99.1 kB 124.9 MB/s eta 0:00:00\n", + "#20 30.18 Downloading triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (167.9 MB)\n", + "#20 31.71 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 167.9/167.9 MB 117.2 MB/s eta 0:00:00\n", + "#20 31.72 Downloading typing_extensions-4.11.0-py3-none-any.whl (34 kB)\n", + "#20 31.72 Downloading filelock-3.13.4-py3-none-any.whl (11 kB)\n", + "#20 31.73 Downloading fsspec-2024.3.1-py3-none-any.whl (171 kB)\n", + "#20 31.73 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 172.0/172.0 kB 289.9 MB/s eta 0:00:00\n", + "#20 31.73 Downloading networkx-3.3-py3-none-any.whl (1.7 MB)\n", + "#20 31.75 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 135.8 MB/s eta 0:00:00\n", + "#20 31.75 Downloading sympy-1.12-py3-none-any.whl (5.7 MB)\n", + "#20 31.81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 MB 104.1 MB/s eta 0:00:00\n", + "#20 31.81 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#20 31.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 207.8 MB/s eta 0:00:00\n", + "#20 32.03 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#20 32.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 112.2 MB/s eta 0:00:00\n", + "#20 39.25 Installing collected packages: SimpleITK, mpmath, typing-extensions, sympy, pydicom, Pillow, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, networkx, fsspec, filelock, triton, pillow-jpls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12, highdicom, torch, monai\n", + "#20 82.08 Successfully installed Pillow-10.3.0 SimpleITK-2.3.1 filelock-3.13.4 fsspec-2024.3.1 highdicom-0.22.0 monai-1.3.0 mpmath-1.3.0 networkx-3.3 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.19.3 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.1.105 pillow-jpls-1.3.2 pydicom-2.4.4 sympy-1.12 torch-2.2.2 triton-2.2.0 typing-extensions-4.11.0\n", + "#20 DONE 84.1s\n", + "\n", + "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", "#21 DONE 0.3s\n", "\n", - "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#22 0.682 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.793 Processing /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#22 0.803 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.23.5)\n", - "#22 0.906 Collecting holoscan~=1.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 0.971 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (4.1 kB)\n", - "#22 1.044 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.050 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.135 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.139 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.248 Collecting pip==23.3.2 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.254 Downloading pip-23.3.2-py3-none-any.whl.metadata (3.5 kB)\n", - "#22 1.269 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (12.2.0)\n", - "#22 1.269 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.2.1)\n", - "#22 1.271 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.60.1)\n", - "#22 1.272 Requirement already satisfied: Jinja2==3.1.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.1.2)\n", - "#22 1.272 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (23.1)\n", - "#22 1.273 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (6.0)\n", - "#22 1.274 Requirement already satisfied: requests==2.28.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.28.2)\n", - "#22 1.275 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (5.9.6)\n", - "#22 1.308 Collecting wheel-axle-runtime<1.0 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.313 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", - "#22 1.347 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.8.2)\n", - "#22 1.351 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.1.3)\n", - "#22 1.366 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.10.14)\n", - "#22 1.367 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.66.1)\n", - "#22 1.367 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.9.0)\n", - "#22 1.369 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.10.0)\n", - "#22 1.380 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.3.2)\n", - "#22 1.381 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.6)\n", - "#22 1.382 Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.26.18)\n", - "#22 1.383 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2023.11.17)\n", - "#22 1.401 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.13.3)\n", - "#22 1.443 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (8.1.7)\n", - "#22 1.490 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.516 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl (33.6 MB)\n", - "#22 1.982 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.6/33.6 MB 43.1 MB/s eta 0:00:00\n", - "#22 1.989 Downloading pip-23.3.2-py3-none-any.whl (2.1 MB)\n", - "#22 2.032 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 53.0 MB/s eta 0:00:00\n", - "#22 2.039 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", - "#22 2.064 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", - "#22 2.417 Installing collected packages: wheel-axle-runtime, typeguard, pip, colorama, holoscan, monai-deploy-app-sdk\n", - "#22 2.492 Attempting uninstall: pip\n", - "#22 2.493 Found existing installation: pip 24.0\n", - "#22 2.547 Uninstalling pip-24.0:\n", - "#22 2.977 Successfully uninstalled pip-24.0\n", - "#22 4.656 Successfully installed colorama-0.4.6 holoscan-1.0.3 monai-deploy-app-sdk-0.5.1+25.g31e4165.dirty pip-23.3.2 typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", - "#22 DONE 5.2s\n", + "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 0.474 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.542 Processing /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 0.554 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.23.5)\n", + "#22 0.676 Collecting holoscan~=2.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 0.744 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (6.7 kB)\n", + "#22 0.816 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 0.820 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 0.892 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 0.896 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 0.935 Requirement already satisfied: pip>=20.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (24.0)\n", + "#22 0.936 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (12.2.0)\n", + "#22 0.937 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", + "#22 0.937 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.60.1)\n", + "#22 0.938 Requirement already satisfied: Jinja2==3.1.3 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.1.3)\n", + "#22 0.939 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (23.1)\n", + "#22 0.940 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (6.0)\n", + "#22 0.940 Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.31.0)\n", + "#22 0.941 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (5.9.6)\n", + "#22 0.975 Collecting wheel-axle-runtime<1.0 (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 0.979 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", + "#22 1.016 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.8.2)\n", + "#22 1.019 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.1.3)\n", + "#22 1.031 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.10.15)\n", + "#22 1.032 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.66.2)\n", + "#22 1.032 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.12.3)\n", + "#22 1.033 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.11.0)\n", + "#22 1.042 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.3.2)\n", + "#22 1.043 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.7)\n", + "#22 1.043 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", + "#22 1.044 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2024.2.2)\n", + "#22 1.061 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.13.4)\n", + "#22 1.081 Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (8.1.7)\n", + "#22 1.082 Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.5.4)\n", + "#22 1.083 Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (13.7.1)\n", + "#22 1.120 Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.0.0)\n", + "#22 1.121 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.17.2)\n", + "#22 1.143 Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.1.2)\n", + "#22 1.157 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.181 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.2 MB)\n", + "#22 1.668 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.2/33.2 MB 36.8 MB/s eta 0:00:00\n", + "#22 1.673 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", + "#22 1.696 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", + "#22 2.029 Installing collected packages: wheel-axle-runtime, typeguard, colorama, holoscan, monai-deploy-app-sdk\n", + "#22 2.773 Successfully installed colorama-0.4.6 holoscan-2.0.0 monai-deploy-app-sdk-0.5.1+20.gb869749.dirty typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", + "#22 DONE 3.3s\n", "\n", "#23 [17/21] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.2s\n", + "#23 DONE 0.3s\n", "\n", "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", "#24 DONE 0.1s\n", @@ -624,116 +717,137 @@ "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 6.0s done\n", - "#28 exporting manifest sha256:02c9015ef90dc072d10044946ce69d29e7dbd7e748cd98b56713e2a32f1823bc 0.0s done\n", - "#28 exporting config sha256:26b7cd41adaba5d7700f104387d1c2d4b66829292de9fe656dff6f30ba20e56d 0.0s done\n", + "#28 exporting layers 152.5s done\n", + "#28 exporting manifest sha256:c70218a06b33b272ca2399e48c3804a3632c64ad2026e95b55d9ddae0cae7e74 0.0s done\n", + "#28 exporting config sha256:553a0ca99a2e26fc278babfe7ad247254fbaeadbc8cbad3e0053f4aede0c3aae 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer 3c784a11874c 32.77kB / 125.57kB\n", - "#29 loading layer 71abc17edeb9 557.06kB / 73.96MB\n", - "#29 loading layer 71abc17edeb9 73.53MB / 73.96MB 2.0s\n", - "#29 loading layer 8eee96e0be35 262.14kB / 25.59MB\n", - "#29 loading layer 81dfa72eaf50 512B / 512B\n", - "#29 loading layer c726a53666d2 697B / 697B\n", - "#29 loading layer 0266dfb048c0 297B / 297B\n", - "#29 loading layer d4a6edcf43fc 4.17kB / 4.17kB\n", - "#29 loading layer 3c784a11874c 32.77kB / 125.57kB 5.0s done\n", - "#29 loading layer 71abc17edeb9 73.53MB / 73.96MB 4.9s done\n", - "#29 loading layer 8eee96e0be35 262.14kB / 25.59MB 2.8s done\n", - "#29 loading layer 81dfa72eaf50 512B / 512B 2.2s done\n", - "#29 loading layer c726a53666d2 697B / 697B 1.9s done\n", - "#29 loading layer 0266dfb048c0 297B / 297B 1.5s done\n", - "#29 loading layer d4a6edcf43fc 4.17kB / 4.17kB 1.1s done\n", - "#29 DONE 5.0s\n", + "#29 loading layer 072c1594ab9f 557.06kB / 2.90GB\n", + "#29 loading layer 072c1594ab9f 108.63MB / 2.90GB 6.2s\n", + "#29 loading layer 072c1594ab9f 317.52MB / 2.90GB 10.3s\n", + "#29 loading layer 072c1594ab9f 514.72MB / 2.90GB 14.5s\n", + "#29 loading layer 072c1594ab9f 706.90MB / 2.90GB 18.6s\n", + "#29 loading layer 072c1594ab9f 889.06MB / 2.90GB 22.7s\n", + "#29 loading layer 072c1594ab9f 1.09GB / 2.90GB 26.8s\n", + "#29 loading layer 072c1594ab9f 1.32GB / 2.90GB 31.0s\n", + "#29 loading layer 072c1594ab9f 1.52GB / 2.90GB 35.1s\n", + "#29 loading layer 072c1594ab9f 1.76GB / 2.90GB 39.2s\n", + "#29 loading layer 072c1594ab9f 1.95GB / 2.90GB 43.3s\n", + "#29 loading layer 072c1594ab9f 1.98GB / 2.90GB 50.1s\n", + "#29 loading layer 072c1594ab9f 2.13GB / 2.90GB 56.3s\n", + "#29 loading layer 072c1594ab9f 2.32GB / 2.90GB 60.5s\n", + "#29 loading layer 072c1594ab9f 2.54GB / 2.90GB 64.6s\n", + "#29 loading layer 072c1594ab9f 2.73GB / 2.90GB 68.8s\n", + "#29 loading layer 072c1594ab9f 2.90GB / 2.90GB 75.0s\n", + "#29 loading layer f11aaa8e87ac 32.77kB / 125.83kB\n", + "#29 loading layer fa504599989c 557.06kB / 67.36MB\n", + "#29 loading layer 671fce7ea0e7 262.14kB / 25.59MB\n", + "#29 loading layer 1c0f42dfa575 514B / 514B\n", + "#29 loading layer 6fb8bbe7fb20 698B / 698B\n", + "#29 loading layer 2903a6d1ea2e 300B / 300B\n", + "#29 loading layer 1602070f430e 4.17kB / 4.17kB\n", + "#29 loading layer fa504599989c 557.06kB / 67.36MB 3.3s done\n", + "#29 loading layer 072c1594ab9f 2.90GB / 2.90GB 78.6s done\n", + "#29 loading layer f11aaa8e87ac 32.77kB / 125.83kB 3.4s done\n", + "#29 loading layer 671fce7ea0e7 262.14kB / 25.59MB 1.4s done\n", + "#29 loading layer 1c0f42dfa575 514B / 514B 1.0s done\n", + "#29 loading layer 6fb8bbe7fb20 698B / 698B 0.9s done\n", + "#29 loading layer 2903a6d1ea2e 300B / 300B 0.9s done\n", + "#29 loading layer 1602070f430e 4.17kB / 4.17kB 0.8s done\n", + "#29 DONE 78.6s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 65.8s done\n", - "#28 DONE 72.0s\n", + "#28 sending tarball 119.9s done\n", + "#28 DONE 272.5s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", - "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015\n", "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", - "#30 writing layer sha256:03a29f2f0e10f79ee63a9017483d2f5c668ef6c02e479f306e7ec76203d450a9 0.0s done\n", + "#30 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", + "#30 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#30 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", - "#30 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", - "#30 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", + "#30 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", + "#30 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", + "#30 writing layer sha256:2070dbb5e4fec1f79111a1b9934b95a4bda91fff6888840d2e53b48b655f352d\n", + "#30 writing layer sha256:2070dbb5e4fec1f79111a1b9934b95a4bda91fff6888840d2e53b48b655f352d 1.3s done\n", + "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2\n", "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#30 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#30 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", + "#30 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", + "#30 writing layer sha256:2f868c17ea0c13f86d79c6ea231aa9677089aa72e290ec3b95f9983f46048136 0.0s done\n", + "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", - "#30 writing layer sha256:3f26964a76655c86158d285c57a280ad1e8f9c246a879db10773dc0218685fbc\n", - "#30 writing layer sha256:3f26964a76655c86158d285c57a280ad1e8f9c246a879db10773dc0218685fbc 0.5s done\n", - "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a\n", "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#30 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", - "#30 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", - "#30 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#30 writing layer sha256:51d232f1f4212f460f268207affeab6246b2b60caf6d9f61b4fab22202848747 0.0s done\n", + "#30 writing layer sha256:53e291bdb605f68216b97e71175b5a348001546ff073083ae622feb044916445 done\n", + "#30 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#30 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", + "#30 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", + "#30 writing layer sha256:5e622c7efc8f430c7e6928544ba87f94eac8a4127d711933a0bf49e6a76eda0c\n", + "#30 writing layer sha256:5e622c7efc8f430c7e6928544ba87f94eac8a4127d711933a0bf49e6a76eda0c 0.4s done\n", + "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631\n", "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#30 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", - "#30 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", - "#30 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", - "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", - "#30 writing layer sha256:76e786eeb0fbc65fd083d100043e47d0c35ba615444907aa299e635d624bd426 0.0s done\n", - "#30 writing layer sha256:77e0d1bb7a2b6458b8bd911429c58386169319dfb6ae2e9ae05f57571522d815 0.0s done\n", + "#30 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", + "#30 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", + "#30 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#30 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", - "#30 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", - "#30 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#30 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", + "#30 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", + "#30 writing layer sha256:826d794ef7ef68566c3eede8e80bca99b8e40994c5dea2079da82d7d429e0203 0.0s done\n", "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", - "#30 writing layer sha256:82b1d37999127ab8412181eae2a5ff1c1a1854f9a76064512942ba9bde82afaa done\n", + "#30 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", + "#30 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", + "#30 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#30 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", + "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", + "#30 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", + "#30 writing layer sha256:9bd8f1c975ca5c9efcdedc1e1a31269e8492195a76e73b95af8c0fc7c7d8a2c6\n", + "#30 writing layer sha256:9bd8f1c975ca5c9efcdedc1e1a31269e8492195a76e73b95af8c0fc7c7d8a2c6 46.2s done\n", + "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f\n", "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#30 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#30 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#30 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", - "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602\n", "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", + "#30 writing layer sha256:afa8073b7854514d2a2a4c91eb31250d02a8cbb6a4364c38d20219ed08dcdb13 done\n", "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", + "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#30 writing layer sha256:bafd0706f1969063f2baea22f5df92629ba228c67819e957f88b20582aaa4801\n", - "#30 writing layer sha256:bafd0706f1969063f2baea22f5df92629ba228c67819e957f88b20582aaa4801 1.5s done\n", - "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31\n", - "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", - "#30 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", - "#30 writing layer sha256:c2a80b194dd0ff43e8e6ea838efe3b6f24371797b498b6d2d7ac53fb9d4aee8b done\n", - "#30 writing layer sha256:c6e0f549352b7817454c6c4540b863766f732e9216158288017cfcb19cd91bef 0.0s done\n", + "#30 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", + "#30 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#30 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", + "#30 writing layer sha256:d0a18329aa85666501e304a488b966559ff54fab09dd36886f4ba1c97d9a3f4c 0.0s done\n", "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", - "#30 writing layer sha256:e4e14fa6c90d19eb19aad3f52f9cd59a25c44007ba201741ac7cbff722837883 done\n", + "#30 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", + "#30 writing layer sha256:de6e4313f5826cce8249354c2525b5a9acde7edea4ca02018e437c9b4de3d9fc 0.0s done\n", + "#30 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", + "#30 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#30 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#30 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#30 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", - "#30 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", - "#30 writing layer sha256:fc1f60b32aa696c9cfeacbee0e2c0aeefd8331e0a38fcd082b60ae33b67e34e4 0.0s done\n", - "#30 writing config sha256:b2150835373b386791df4e482a3f33750ce9ec1d81393ee061a6d9c06dc8d52a 0.0s done\n", - "#30 preparing build cache for export 2.8s done\n", - "#30 writing cache manifest sha256:ed8fc8e6d14dafb96aed8205ce985667c75f419d2bf7ce449e533b415b01b699 0.0s done\n", - "#30 DONE 2.8s\n", - "[2024-04-10 16:25:16,137] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", + "#30 writing config sha256:c5d7ca2ff9b60cb7174369608d683a7735902b5a315ccbd3661cdb01d19b7db3 0.0s done\n", + "#30 preparing build cache for export 48.8s done\n", + "#30 writing cache manifest sha256:43a5a705376a7f516f02e6223e10f78f54002aca9882c7de45970b0d70baa3e8 0.0s done\n", + "#30 DONE 48.8s\n", + "[2024-04-23 15:40:45,771] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -764,7 +878,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 26b7cd41adab About a minute ago 17.5GB\n" + "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 553a0ca99a2e 5 minutes ago 17.7GB\n" ] } ], @@ -846,16 +960,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2024-04-10 23:25:19 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2024-04-23 22:40:48 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2024-04-10 23:25:19 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2024-04-10 23:25:19 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2024-04-10 23:25:19 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2024-04-23 22:40:48 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2024-04-23 22:40:48 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2024-04-23 22:40:48 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2024-04-10 23:25:19 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2024-04-23 22:40:48 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2024-04-10 23:25:19 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2024-04-10 23:25:19 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2024-04-23 22:40:48 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2024-04-23 22:40:48 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -887,22 +1001,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 16:25:20,790] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-10 16:25:20,790] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-23 15:40:49,986] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-23 15:40:49,986] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-10 16:25:20,791] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-23 15:40:49,986] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-10 16:25:20,791] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-23 15:40:49,986] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-10 16:25:20,871] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpryp430i1/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpryp430i1/pkg.json\n", - "[2024-04-10 16:25:21,124] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-23 15:40:50,062] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmp9_4t5v97/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmp9_4t5v97/pkg.json\n", + "[2024-04-23 15:40:50,322] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-10 16:25:21,124] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2024-04-23 15:40:50,322] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-10 16:25:21,410] [INFO] (common) - Launching container (7cf522bd06c4) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: dazzling_hugle\n", + "[2024-04-23 15:40:50,636] [INFO] (common) - Launching container (f9af17c16239) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: objective_merkle\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -912,53 +1026,49 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-10 23:25:22 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + "2024-04-23 22:40:51 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", "\n", - "[2024-04-10 23:25:31,408] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'])\n", + "[2024-04-23 22:40:54,170] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'])\n", "\n", - "[2024-04-10 23:25:31,419] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2024-04-23 22:40:54,175] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:247] Creating context\n", "\n", "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", "\n", - "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", + "\u001b[0m2024-04-23 22:40:54.201 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", "\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "\n", - "[2024-04-10 23:25:34,063] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.23303108191806495091599558367348667557.dcm\n", - "\n", - "[2024-04-10 23:25:34,064] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.23303108191806495091599558367348667557.dcm\n", + "[2024-04-23 22:40:55,396] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.27996829466530719648374470054709482881.dcm\n", "\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[2024-04-23 22:40:55,396] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.27996829466530719648374470054709482881.dcm\n", "\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", + "\u001b[0m2024-04-23 22:40:55.396 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "\u001b[0m2024-04-23 22:40:55.397 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", "\n", - "[info] [gxf_executor.cpp:230] Destroying context\n", + "[info] [gxf_executor.cpp:275] Destroying context\n", "\n", "AbdomenCT\n", "\n", - "[2024-04-10 16:25:35,771] [INFO] (common) - Container 'dazzling_hugle'(7cf522bd06c4) exited.\n" + "[2024-04-23 15:40:56,349] [INFO] (common) - Container 'objective_merkle'(f9af17c16239) exited.\n" ] } ], @@ -1322,40 +1432,50 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-10 16:25:39,884] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-10 16:25:39,898] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", - "[info] [gxf_executor.cpp:211] Creating context\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", + "[2024-04-23 15:41:01,799] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-23 15:41:01,818] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m2024-04-23 15:41:01.850 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[info] [gxf_executor.cpp:247] Creating context\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warnings.warn(msg)\n", - "[2024-04-10 16:25:42,470] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.71636533308287156684391922232397043508.dcm\n", - "[2024-04-10 16:25:42,472] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.71636533308287156684391922232397043508.dcm\n" + "[2024-04-23 15:41:04,196] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.35898050102915969373889764509894247367.dcm\n", + "[2024-04-23 15:41:04,198] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.35898050102915969373889764509894247367.dcm\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "AbdomenCT\n" + "AbdomenCT\n", + "\u001b[0m2024-04-23 15:41:04.199 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 15:41:04.200 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[info] [gxf_executor.cpp:230] Destroying context\n" + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[info] [gxf_executor.cpp:275] Destroying context\n" ] } ], @@ -1682,45 +1802,44 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 16:25:46,989] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", - "[2024-04-10 16:25:46,993] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", + "[2024-04-23 15:41:08,736] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", + "[2024-04-23 15:41:08,740] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", + "\u001b[0m2024-04-23 15:41:08.763 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", - "[2024-04-10 16:25:49,239] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", + "[2024-04-23 15:41:10,980] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", "\n", - "[2024-04-10 16:25:49,239] [DEBUG] (root) - Writing DICOM common modules...\n", + "[2024-04-23 15:41:10,980] [DEBUG] (root) - Writing DICOM common modules...\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warnings.warn(msg)\n", - "[2024-04-10 16:25:49,242] [DEBUG] (root) - DICOM common modules written:\n", + "[2024-04-23 15:41:10,983] [DEBUG] (root) - DICOM common modules written:\n", "Dataset.file_meta -------------------------------\n", "(0002, 0000) File Meta Information Group Length UL: 198\n", "(0002, 0001) File Meta Information Version OB: b'01'\n", "(0002, 0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141\n", + "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728\n", "(0002, 0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002, 0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002, 0013) Implementation Version Name SH: '0.5.1+25.g31e41'\n", + "(0002, 0013) Implementation Version Name SH: '0.5.1+20.gb8697'\n", "-------------------------------------------------\n", "(0008, 0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008, 0012) Instance Creation Date DA: '20240410'\n", - "(0008, 0013) Instance Creation Time TM: '162549'\n", + "(0008, 0012) Instance Creation Date DA: '20240423'\n", + "(0008, 0013) Instance Creation Time TM: '154110'\n", "(0008, 0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141\n", - "(0008, 0020) Study Date DA: '20240410'\n", - "(0008, 0021) Series Date DA: '20240410'\n", - "(0008, 0023) Content Date DA: '20240410'\n", - "(0008, 002a) Acquisition DateTime DT: '20240410162549'\n", - "(0008, 0030) Study Time TM: '162549'\n", - "(0008, 0031) Series Time TM: '162549'\n", - "(0008, 0033) Content Time TM: '162549'\n", + "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728\n", + "(0008, 0020) Study Date DA: '20240423'\n", + "(0008, 0021) Series Date DA: '20240423'\n", + "(0008, 0023) Content Date DA: '20240423'\n", + "(0008, 002a) Acquisition DateTime DT: '20240423154110'\n", + "(0008, 0030) Study Time TM: '154110'\n", + "(0008, 0031) Series Time TM: '154110'\n", + "(0008, 0033) Content Time TM: '154110'\n", "(0008, 0050) Accession Number SH: ''\n", "(0008, 0060) Modality CS: 'SR'\n", "(0008, 0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", @@ -1735,7 +1854,7 @@ "(0010, 0030) Patient's Birth Date DA: ''\n", "(0010, 0040) Patient's Sex CS: ''\n", "(0018, 0015) Body Part Examined CS: ''\n", - "(0018, 1020) Software Versions LO: '0.5.1+25.g31e41'\n", + "(0018, 1020) Software Versions LO: '0.5.1+20.gb8697'\n", "(0018, a001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008, 0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008, 1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1747,33 +1866,33 @@ " (0008, 0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.99895869772559254532078552857455521250\n", - "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.11097411469528473023282906105369639673\n", + "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.12077853224410842102200362099184100728\n", + "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.11250566385163932995456431918851640579\n", "(0020, 0010) Study ID SH: '1'\n", - "(0020, 0011) Series Number IS: '7823'\n", + "(0020, 0011) Series Number IS: '2474'\n", "(0020, 0013) Instance Number IS: '1'\n", "(0040, 1001) Requested Procedure ID SH: ''\n", - "[2024-04-10 16:25:49,242] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", + "[2024-04-23 15:41:10,984] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", "(0002, 0000) File Meta Information Group Length UL: 198\n", "(0002, 0001) File Meta Information Version OB: b'01'\n", "(0002, 0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141\n", + "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728\n", "(0002, 0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002, 0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002, 0013) Implementation Version Name SH: '0.5.1+25.g31e41'\n", + "(0002, 0013) Implementation Version Name SH: '0.5.1+20.gb8697'\n", "-------------------------------------------------\n", "(0008, 0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008, 0012) Instance Creation Date DA: '20240410'\n", - "(0008, 0013) Instance Creation Time TM: '162549'\n", + "(0008, 0012) Instance Creation Date DA: '20240423'\n", + "(0008, 0013) Instance Creation Time TM: '154110'\n", "(0008, 0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141\n", - "(0008, 0020) Study Date DA: '20240410'\n", - "(0008, 0021) Series Date DA: '20240410'\n", - "(0008, 0023) Content Date DA: '20240410'\n", - "(0008, 002a) Acquisition DateTime DT: '20240410162549'\n", - "(0008, 0030) Study Time TM: '162549'\n", - "(0008, 0031) Series Time TM: '162549'\n", - "(0008, 0033) Content Time TM: '162549'\n", + "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728\n", + "(0008, 0020) Study Date DA: '20240423'\n", + "(0008, 0021) Series Date DA: '20240423'\n", + "(0008, 0023) Content Date DA: '20240423'\n", + "(0008, 002a) Acquisition DateTime DT: '20240423154110'\n", + "(0008, 0030) Study Time TM: '154110'\n", + "(0008, 0031) Series Time TM: '154110'\n", + "(0008, 0033) Content Time TM: '154110'\n", "(0008, 0050) Accession Number SH: ''\n", "(0008, 0060) Modality CS: 'SR'\n", "(0008, 0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", @@ -1788,7 +1907,7 @@ "(0010, 0030) Patient's Birth Date DA: ''\n", "(0010, 0040) Patient's Sex CS: ''\n", "(0018, 0015) Body Part Examined CS: ''\n", - "(0018, 1020) Software Versions LO: '0.5.1+25.g31e41'\n", + "(0018, 1020) Software Versions LO: '0.5.1+20.gb8697'\n", "(0018, a001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008, 0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008, 1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1800,10 +1919,10 @@ " (0008, 0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.99895869772559254532078552857455521250\n", - "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.11097411469528473023282906105369639673\n", + "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.12077853224410842102200362099184100728\n", + "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.11250566385163932995456431918851640579\n", "(0020, 0010) Study ID SH: '1'\n", - "(0020, 0011) Series Number IS: '7823'\n", + "(0020, 0011) Series Number IS: '2474'\n", "(0020, 0013) Instance Number IS: '1'\n", "(0040, 1001) Requested Procedure ID SH: ''\n", "(0040, a040) Value Type CS: 'CONTAINER'\n", @@ -1824,14 +1943,13 @@ " ---------\n", " (0040, a160) Text Value UT: 'AbdomenCT'\n", " ---------\n", - "[2024-04-10 16:25:49,245] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141.dcm\n", - "[2024-04-10 16:25:49,246] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.10219575881227434107206425977009168141.dcm\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:230] Destroying context\n" + "[2024-04-23 15:41:10,987] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728.dcm\n", + "[2024-04-23 15:41:10,988] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728.dcm\n", + "\u001b[0m2024-04-23 15:41:10.988 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 15:41:10.988 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:275] Destroying context\n" ] } ], diff --git a/notebooks/tutorials/02_mednist_app.ipynb b/notebooks/tutorials/02_mednist_app.ipynb index 595cb471..57212003 100644 --- a/notebooks/tutorials/02_mednist_app.ipynb +++ b/notebooks/tutorials/02_mednist_app.ipynb @@ -71,7 +71,7 @@ "Pytorch Ignite version: 0.4.11\n", "ITK version: NOT INSTALLED or UNKNOWN VERSION.\n", "Nibabel version: 5.2.1\n", - "scikit-image version: 0.22.0\n", + "scikit-image version: 0.23.2\n", "scipy version: 1.13.0\n", "Pillow version: 10.3.0\n", "Tensorboard version: NOT INSTALLED or UNKNOWN VERSION.\n", @@ -163,7 +163,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "/tmp/tmpz1q9ch5_\n" + "/tmp/tmp0iht_c0l\n" ] }, { @@ -172,16 +172,16 @@ "text": [ "Downloading...\n", "From (original): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE\n", - "From (redirected): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE&confirm=t&uuid=6052caf3-cb8c-4cb3-b8b8-804d8dc90e06\n", - "To: /tmp/tmpq9pcg2c8/MedNIST.tar.gz\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61.8M/61.8M [00:00<00:00, 81.1MB/s]" + "From (redirected): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE&confirm=t&uuid=af0469cc-fefc-4bd4-9ba2-60e15ffc2168\n", + "To: /tmp/tmpquityog6/MedNIST.tar.gz\n", + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61.8M/61.8M [00:00<00:00, 66.5MB/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2024-04-10 16:28:05,802 - INFO - Downloaded: /tmp/tmpz1q9ch5_/MedNIST.tar.gz\n" + "2024-04-23 17:01:37,537 - INFO - Downloaded: /tmp/tmp0iht_c0l/MedNIST.tar.gz\n" ] }, { @@ -195,8 +195,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "2024-04-10 16:28:05,912 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n", - "2024-04-10 16:28:05,914 - INFO - Writing into directory: /tmp/tmpz1q9ch5_.\n" + "2024-04-23 17:01:37,643 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n", + "2024-04-23 17:01:37,644 - INFO - Writing into directory: /tmp/tmp0iht_c0l.\n" ] } ], @@ -769,40 +769,50 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-10 16:35:53,768] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-10 16:35:53,778] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", - "[info] [gxf_executor.cpp:211] Creating context\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", + "[2024-04-23 17:08:56,466] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-23 17:08:56,478] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m2024-04-23 17:08:56.514 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[info] [gxf_executor.cpp:247] Creating context\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warnings.warn(msg)\n", - "[2024-04-10 16:35:54,545] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.91196297255331853052707757292596626343.dcm\n", - "[2024-04-10 16:35:54,548] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.91196297255331853052707757292596626343.dcm\n" + "[2024-04-23 17:08:57,259] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.77299510031662020162686125612902317163.dcm\n", + "[2024-04-23 17:08:57,261] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.77299510031662020162686125612902317163.dcm\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "AbdomenCT\n" + "AbdomenCT\n", + "\u001b[0m2024-04-23 17:08:57.263 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 17:08:57.263 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[info] [gxf_executor.cpp:230] Destroying context\n" + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[info] [gxf_executor.cpp:275] Destroying context\n" ] } ], @@ -1121,24 +1131,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", + "\u001b[0m2024-04-23 17:09:01.847 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warnings.warn(msg)\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:230] Destroying context\n" + "\u001b[0m2024-04-23 17:09:03.971 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 17:09:03.971 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:275] Destroying context\n" ] } ], @@ -1241,14 +1249,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 16:36:05,007] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/mednist_classifier_monaideploy.py\n", - "[2024-04-10 16:36:05,007] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2024-04-10 16:36:05,007] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2024-04-10 16:36:05,007] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2024-04-10 16:36:05,007] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/app.yaml...\n", - "[2024-04-10 16:36:05,009] [INFO] (packager) - Generating app.json...\n", - "[2024-04-10 16:36:05,009] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-10 16:36:05,015] [DEBUG] (common) - \n", + "[2024-04-23 17:09:06,108] [INFO] (common) - Downloading CLI manifest file...\n", + "[2024-04-23 17:09:06,368] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2024-04-23 17:09:06,371] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/mednist_classifier_monaideploy.py\n", + "[2024-04-23 17:09:06,372] [INFO] (packager.parameters) - Detected application type: Python File\n", + "[2024-04-23 17:09:06,372] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2024-04-23 17:09:06,373] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2024-04-23 17:09:06,373] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/app.yaml...\n", + "[2024-04-23 17:09:06,378] [INFO] (packager) - Generating app.json...\n", + "[2024-04-23 17:09:06,379] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-23 17:09:06,393] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1283,7 +1293,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2024-04-10 16:36:05,015] [DEBUG] (common) - \n", + "[2024-04-23 17:09:06,393] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1303,11 +1313,11 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-10 16:36:05,050] [DEBUG] (packager.builder) - \n", + "[2024-04-23 17:09:06,435] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -1323,11 +1333,11 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", "LABEL tag=\"mednist_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.nvidia.holoscan=\"2.0.0\"\n", "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "\n", @@ -1353,7 +1363,6 @@ "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", "\n", "\n", - "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", @@ -1379,14 +1388,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", - "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", + " \n", + "# MONAI Deploy\n", "\n", "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "\n", - "\n", + "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", @@ -1400,275 +1407,294 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-10 16:36:05,050] [INFO] (packager.builder) - \n", + "[2024-04-23 17:09:06,435] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 1.0.3\n", + " SDK Version: 2.0.0\n", " SDK: monai-deploy\n", " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2024-04-10 16:36:05,416] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-10 16:36:05,416] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2024-04-23 17:09:06,753] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-23 17:09:06,753] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.81kB done\n", - "#1 DONE 0.1s\n", + "#1 transferring dockerfile: 2.67kB done\n", + "#1 DONE 0.0s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", - "#2 DONE 0.5s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + "#2 DONE 0.4s\n", "\n", "#3 [internal] load .dockerignore\n", "#3 transferring context: 1.79kB done\n", - "#3 DONE 0.1s\n", + "#3 DONE 0.0s\n", "\n", - "#4 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", - "#4 ...\n", + "#4 [internal] load build context\n", + "#4 DONE 0.0s\n", "\n", - "#5 [internal] load build context\n", + "#5 importing cache manifest from local:14814255791215325379\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 importing cache manifest from local:12491137658764693548\n", - "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.0s done\n", "#6 DONE 0.0s\n", "\n", - "#7 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", - "#7 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.0s done\n", - "#7 DONE 0.0s\n", - "\n", - "#4 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", - "#4 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#4 DONE 0.5s\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#7 DONE 0.6s\n", "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 28.75MB 0.2s done\n", - "#5 DONE 0.2s\n", + "#4 [internal] load build context\n", + "#4 transferring context: 28.76MB 0.2s done\n", + "#4 DONE 0.2s\n", "\n", - "#8 [13/21] RUN pip install --upgrade pip\n", + "#8 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#8 CACHED\n", "\n", - "#9 [10/21] COPY ./tools /var/holoscan/tools\n", + "#9 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#9 CACHED\n", "\n", - "#10 [ 9/21] WORKDIR /var/holoscan\n", + "#10 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#10 CACHED\n", "\n", - "#11 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#11 [10/21] COPY ./tools /var/holoscan/tools\n", "#11 CACHED\n", "\n", - "#12 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#12 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", + "#13 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#13 CACHED\n", "\n", - "#14 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#14 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#14 CACHED\n", "\n", - "#15 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#15 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#15 CACHED\n", "\n", - "#16 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#16 [13/21] RUN pip install --upgrade pip\n", "#16 CACHED\n", "\n", - "#17 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#17 [ 9/21] WORKDIR /var/holoscan\n", "#17 CACHED\n", "\n", - "#18 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", + "#18 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#18 CACHED\n", "\n", - "#19 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#19 [11/21] RUN chmod +x /var/holoscan/tools\n", "#19 CACHED\n", "\n", "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#20 CACHED\n", "\n", - "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#21 DONE 0.3s\n", - "\n", - "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#22 0.701 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.799 Processing /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#22 0.810 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.23.5)\n", - "#22 0.996 Collecting holoscan~=1.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.066 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (4.1 kB)\n", - "#22 1.137 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.141 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.222 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.227 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.322 Collecting pip==23.3.2 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.327 Downloading pip-23.3.2-py3-none-any.whl.metadata (3.5 kB)\n", - "#22 1.343 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (12.2.0)\n", - "#22 1.343 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.2.1)\n", - "#22 1.344 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.60.1)\n", - "#22 1.346 Requirement already satisfied: Jinja2==3.1.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.1.2)\n", - "#22 1.346 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (23.1)\n", - "#22 1.347 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (6.0)\n", - "#22 1.348 Requirement already satisfied: requests==2.28.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.28.2)\n", - "#22 1.350 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (5.9.6)\n", - "#22 1.461 Collecting wheel-axle-runtime<1.0 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.467 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", - "#22 1.504 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.8.2)\n", - "#22 1.508 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.1.3)\n", - "#22 1.523 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.10.14)\n", - "#22 1.524 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.66.1)\n", - "#22 1.525 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.9.0)\n", - "#22 1.526 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.10.0)\n", - "#22 1.533 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.3.2)\n", - "#22 1.534 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.6)\n", - "#22 1.535 Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.26.18)\n", - "#22 1.536 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2023.11.17)\n", - "#22 1.551 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.13.3)\n", - "#22 1.587 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (8.1.7)\n", - "#22 1.630 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.653 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl (33.6 MB)\n", - "#22 2.391 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.6/33.6 MB 36.3 MB/s eta 0:00:00\n", - "#22 2.399 Downloading pip-23.3.2-py3-none-any.whl (2.1 MB)\n", - "#22 2.452 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 45.3 MB/s eta 0:00:00\n", - "#22 2.459 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", - "#22 2.484 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", - "#22 2.841 Installing collected packages: wheel-axle-runtime, typeguard, pip, colorama, holoscan, monai-deploy-app-sdk\n", - "#22 2.915 Attempting uninstall: pip\n", - "#22 2.916 Found existing installation: pip 24.0\n", - "#22 2.967 Uninstalling pip-24.0:\n", - "#22 3.365 Successfully uninstalled pip-24.0\n", - "#22 5.013 Successfully installed colorama-0.4.6 holoscan-1.0.3 monai-deploy-app-sdk-0.5.1+25.g31e4165.dirty pip-23.3.2 typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", - "#22 DONE 5.6s\n", + "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#21 DONE 0.2s\n", + "\n", + "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 0.646 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.740 Processing /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 0.751 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.23.5)\n", + "#22 0.850 Collecting holoscan~=2.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 0.921 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (6.7 kB)\n", + "#22 0.978 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 0.982 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.026 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.030 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.044 Requirement already satisfied: pip>=20.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (24.0)\n", + "#22 1.045 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (12.2.0)\n", + "#22 1.045 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", + "#22 1.046 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.60.1)\n", + "#22 1.047 Requirement already satisfied: Jinja2==3.1.3 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.1.3)\n", + "#22 1.048 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (23.1)\n", + "#22 1.048 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (6.0)\n", + "#22 1.049 Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.31.0)\n", + "#22 1.050 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (5.9.6)\n", + "#22 1.070 Collecting wheel-axle-runtime<1.0 (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.075 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", + "#22 1.107 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.8.2)\n", + "#22 1.112 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.1.3)\n", + "#22 1.126 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.10.15)\n", + "#22 1.126 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.66.2)\n", + "#22 1.127 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.12.3)\n", + "#22 1.128 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.11.0)\n", + "#22 1.135 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.3.2)\n", + "#22 1.136 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.7)\n", + "#22 1.137 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", + "#22 1.137 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2024.2.2)\n", + "#22 1.155 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.13.4)\n", + "#22 1.176 Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (8.1.7)\n", + "#22 1.177 Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.5.4)\n", + "#22 1.178 Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (13.7.1)\n", + "#22 1.212 Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.0.0)\n", + "#22 1.213 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.17.2)\n", + "#22 1.233 Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.1.2)\n", + "#22 1.245 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.260 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.2 MB)\n", + "#22 1.691 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.2/33.2 MB 46.8 MB/s eta 0:00:00\n", + "#22 1.696 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", + "#22 1.709 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", + "#22 2.033 Installing collected packages: wheel-axle-runtime, typeguard, colorama, holoscan, monai-deploy-app-sdk\n", + "#22 2.711 Successfully installed colorama-0.4.6 holoscan-2.0.0 monai-deploy-app-sdk-0.5.1+20.gb869749.dirty typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", + "#22 DONE 3.0s\n", "\n", "#23 [17/21] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.3s\n", + "#23 DONE 0.2s\n", "\n", "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", + "#24 DONE 0.0s\n", "\n", "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", - "#25 DONE 0.1s\n", + "#25 DONE 0.0s\n", "\n", "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#26 DONE 0.1s\n", "\n", "#27 [21/21] COPY ./app /opt/holoscan/app\n", - "#27 DONE 0.1s\n", + "#27 DONE 0.0s\n", "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 5.9s done\n", - "#28 exporting manifest sha256:261bfd883479734974f9f01500b63a394537a84df186d0552794645b0152f0f5 0.0s done\n", - "#28 exporting config sha256:47a95542f89e8e3174bba11729dc605a923542cf7c48c180ae2eb42290619826 0.0s done\n", + "#28 exporting layers 4.4s done\n", + "#28 exporting manifest sha256:457dd7263681b35a427e304797922e6c9c1a453deadebb6e234e5d3f63947b18 0.0s done\n", + "#28 exporting config sha256:63c2bd27a2230b0ee99597a2475f434ae68969da3a8328b78d7d5bc277409172 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer 2c6ff491304f 32.77kB / 125.57kB\n", - "#29 loading layer 04072fb0fc22 557.06kB / 73.96MB\n", - "#29 loading layer 04072fb0fc22 71.86MB / 73.96MB 2.1s\n", - "#29 loading layer 1982c4813c35 262.14kB / 26.20MB\n", - "#29 loading layer dc0acf48e445 513B / 513B\n", - "#29 loading layer a50eb25f7721 320B / 320B\n", - "#29 loading layer 838ef774fdf1 298B / 298B\n", - "#29 loading layer 3401c98a4ff8 4.00kB / 4.00kB\n", - "#29 loading layer 838ef774fdf1 298B / 298B 0.8s done\n", - "#29 loading layer 2c6ff491304f 32.77kB / 125.57kB 4.0s done\n", - "#29 loading layer 04072fb0fc22 71.86MB / 73.96MB 3.8s done\n", - "#29 loading layer 1982c4813c35 262.14kB / 26.20MB 1.3s done\n", - "#29 loading layer dc0acf48e445 513B / 513B 0.9s done\n", - "#29 loading layer a50eb25f7721 320B / 320B 0.9s done\n", - "#29 loading layer 3401c98a4ff8 4.00kB / 4.00kB 0.8s done\n", - "#29 DONE 4.0s\n", + "#29 loading layer 36f9dbeb2e4f 238B / 238B\n", + "#29 loading layer 5828d73ee0ce 65.54kB / 5.86MB\n", + "#29 loading layer f50931954a7a 557.06kB / 2.90GB\n", + "#29 loading layer f50931954a7a 122.00MB / 2.90GB 6.2s\n", + "#29 loading layer f50931954a7a 330.89MB / 2.90GB 10.3s\n", + "#29 loading layer f50931954a7a 511.93MB / 2.90GB 14.4s\n", + "#29 loading layer f50931954a7a 681.28MB / 2.90GB 18.5s\n", + "#29 loading layer f50931954a7a 840.60MB / 2.90GB 22.6s\n", + "#29 loading layer f50931954a7a 1.05GB / 2.90GB 26.8s\n", + "#29 loading layer f50931954a7a 1.26GB / 2.90GB 30.9s\n", + "#29 loading layer f50931954a7a 1.43GB / 2.90GB 35.0s\n", + "#29 loading layer f50931954a7a 1.64GB / 2.90GB 39.0s\n", + "#29 loading layer f50931954a7a 1.89GB / 2.90GB 43.1s\n", + "#29 loading layer f50931954a7a 1.98GB / 2.90GB 50.1s\n", + "#29 loading layer f50931954a7a 2.10GB / 2.90GB 56.4s\n", + "#29 loading layer f50931954a7a 2.30GB / 2.90GB 62.4s\n", + "#29 loading layer f50931954a7a 2.47GB / 2.90GB 66.5s\n", + "#29 loading layer f50931954a7a 2.67GB / 2.90GB 70.6s\n", + "#29 loading layer f50931954a7a 2.84GB / 2.90GB 76.8s\n", + "#29 loading layer 6e852bd260ad 32.77kB / 125.82kB\n", + "#29 loading layer d8a5c55be301 557.06kB / 67.35MB\n", + "#29 loading layer 82e6702b8274 262.14kB / 26.20MB\n", + "#29 loading layer d1b690ac41a7 513B / 513B\n", + "#29 loading layer a85ba680dedd 318B / 318B\n", + "#29 loading layer 7e4618ac3cb0 297B / 297B\n", + "#29 loading layer 43922422e132 4.00kB / 4.00kB\n", + "#29 loading layer 5828d73ee0ce 65.54kB / 5.86MB 82.3s done\n", + "#29 loading layer 36f9dbeb2e4f 238B / 238B 82.4s done\n", + "#29 loading layer f50931954a7a 2.84GB / 2.90GB 81.6s done\n", + "#29 loading layer 6e852bd260ad 32.77kB / 125.82kB 3.0s done\n", + "#29 loading layer d8a5c55be301 557.06kB / 67.35MB 2.9s done\n", + "#29 loading layer 82e6702b8274 262.14kB / 26.20MB 1.1s done\n", + "#29 loading layer d1b690ac41a7 513B / 513B 0.7s done\n", + "#29 loading layer a85ba680dedd 318B / 318B 0.6s done\n", + "#29 loading layer 7e4618ac3cb0 297B / 297B 0.5s done\n", + "#29 loading layer 43922422e132 4.00kB / 4.00kB 0.5s done\n", + "#29 DONE 82.4s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 68.3s done\n", - "#28 DONE 74.3s\n", + "#28 sending tarball 147.4s done\n", + "#28 DONE 151.9s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", - "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#30 writing layer sha256:0023eecf78ab7134b1dd4aba34e20134fe1a5e0827f3a2a65dead15239c056dd\n", + "#30 writing layer sha256:0023eecf78ab7134b1dd4aba34e20134fe1a5e0827f3a2a65dead15239c056dd 0.0s done\n", "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", + "#30 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", + "#30 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#30 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", - "#30 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", - "#30 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", + "#30 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", + "#30 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#30 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#30 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", - "#30 writing layer sha256:2ca59f23482f8bc9a313f15326cc9326efd2553b0480274dc62b6213b864e2ed 0.0s done\n", - "#30 writing layer sha256:32ccfe43297de5eb7d872ac37cb2e4b356a9fdd75b37a1d4e9c0a96f26d3a1eb 0.0s done\n", + "#30 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", + "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", + "#30 writing layer sha256:39d418046e5154e0c5c7e83ba5a4cabbca254facefc9cb7b3f1bc1a6cf51ade3 done\n", "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#30 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", - "#30 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", - "#30 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#30 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", + "#30 writing layer sha256:564f81ac5635380cf724ba7ab6fb8f4d3ff9a308a8c63c2ed585363b78804d5b\n", + "#30 writing layer sha256:564f81ac5635380cf724ba7ab6fb8f4d3ff9a308a8c63c2ed585363b78804d5b 0.4s done\n", + "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041\n", "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#30 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", + "#30 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#30 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", - "#30 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", - "#30 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", - "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#30 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", + "#30 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", + "#30 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#30 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", - "#30 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", - "#30 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", - "#30 writing layer sha256:81b2d4e60f6b67ed37f95e3d15237a436e76056fb4babcb9a188fd2b337c897b 0.0s done\n", + "#30 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", + "#30 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", + "#30 writing layer sha256:81222fcc1cc074d3cda4ae4a57ce0376c275a9ba3ef167c9e0715489c4e63593 0.0s done\n", "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", - "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f\n", + "#30 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", + "#30 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", + "#30 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", - "#30 writing layer sha256:93e2013abbc3bc85f24d4739ac397584f6332aec7d8e80f8d95d9c961978fe90 0.0s done\n", - "#30 writing layer sha256:9723201c31b4e56a2dff5c3769790d4d6a7c069d75bdd3996395600bd0d067cd done\n", + "#30 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", + "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", + "#30 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#30 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#30 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#30 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", - "#30 writing layer sha256:a9cc9b4b42ca5455c9da9b048ab2cc36e82bd335f51c23817f4bcf330bbb96f1 done\n", + "#30 writing layer sha256:acdd7441f23e148bb954e879221b72454121a7bba702612df91c871ef14129a1\n", + "#30 writing layer sha256:acdd7441f23e148bb954e879221b72454121a7bba702612df91c871ef14129a1 1.3s done\n", + "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af\n", "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", + "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", + "#30 writing layer sha256:b9f7221ef56856ac3291be12159de2576b44cd2ab53493532f7c40e33b89106c done\n", "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", - "#30 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#30 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", + "#30 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#30 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", - "#30 writing layer sha256:cc985f61e92a80cbc59a150c5758becb75f8eddbbbaf17d46374ede3cd01a51f\n", - "#30 writing layer sha256:cc985f61e92a80cbc59a150c5758becb75f8eddbbbaf17d46374ede3cd01a51f 0.5s done\n", - "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7\n", + "#30 writing layer sha256:d577841fd502ec678ac975415c7c08cc25663bc74b610b82dfbc012f52547f4b done\n", "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#30 writing layer sha256:df3589199e830d446e82feab6d40fac58781a5bd8b2d206f25b85a317b994f93 0.0s done\n", - "#30 writing layer sha256:e434bbf389a48c6e211eca75d5ca50839cb622b1ba3a36c6b35d600e53e16b21 done\n", - "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", - "#30 writing layer sha256:e5d1792b50654fc7f0eed206f4c91e95f8e4b107554a7296502020c7029a76b6\n", - "#30 writing layer sha256:e5d1792b50654fc7f0eed206f4c91e95f8e4b107554a7296502020c7029a76b6 1.3s done\n", - "#30 preparing build cache for export 2.2s done\n", + "#30 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", + "#30 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", + "#30 writing layer sha256:e1b6cb9ccb6b87a9b02f2d1913a5886076b6ef31ff1417fd63257b0d118e13e9 0.0s done\n", + "#30 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#30 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#30 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#30 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", - "#30 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", - "#30 writing config sha256:217441004720a68ddf80261db2a5b316ddba5c5bc611403e7439f6d0f6d2055d 0.0s done\n", - "#30 writing cache manifest sha256:eb0660732980435a67eb754f67f1d7b91fa92f577670a600c7a8a50a85b8f872 0.0s done\n", - "#30 DONE 2.2s\n", - "[2024-04-10 16:37:31,408] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", + "#30 writing layer sha256:f7ff8f11209b473ea771d9abe10f41a9a65716da379f39ea47ddbae875701e0f 0.0s done\n", + "#30 writing layer sha256:f98f3676b44915df64d6115f562f826117cd134942616876d0d7c7d79c00ad0e 0.0s done\n", + "#30 writing config sha256:98d05c4f7922b70a3b4fb0ca92707228e91ce8bab93500fdcc0c31b1b0b64130 0.0s done\n", + "#30 preparing build cache for export 2.5s done\n", + "#30 writing cache manifest sha256:045b1d7a7e988bbb6957ed94aa829d8e4ce6fb0c09c284a2b102d385595e15d3 0.0s done\n", + "#30 DONE 2.5s\n", + "[2024-04-23 17:11:47,683] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1704,7 +1730,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 47a95542f89e About a minute ago 17.5GB\n" + "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 63c2bd27a223 2 minutes ago 17.7GB\n" ] } ], @@ -1730,22 +1756,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 16:37:33,094] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-10 16:37:33,094] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-23 17:11:48,890] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-23 17:11:48,890] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-10 16:37:33,094] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-23 17:11:48,891] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-10 16:37:33,094] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-23 17:11:48,891] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-10 16:37:33,168] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmp96catisy/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmp96catisy/pkg.json\n", - "[2024-04-10 16:37:33,777] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-23 17:11:48,968] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpgkozmakd/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpgkozmakd/pkg.json\n", + "[2024-04-23 17:11:51,690] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-10 16:37:33,778] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2024-04-23 17:11:51,690] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-10 16:37:33,934] [INFO] (common) - Launching container (4b3bba81606f) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: flamboyant_jepsen\n", + "[2024-04-23 17:11:52,019] [INFO] (common) - Launching container (29c362c90847) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: competent_aryabhata\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1755,25 +1781,23 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-10 23:37:34 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + "2024-04-24 00:11:52 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", "\n", "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:247] Creating context\n", "\n", "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "\n", - "[info] [greedy_scheduler.cpp:190] Scheduling 3 entities\n", + "\u001b[0m2024-04-24 00:11:55.786 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", "\n", @@ -1783,21 +1807,19 @@ "\n", " warnings.warn(msg)\n", "\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", + "\u001b[0m2024-04-24 00:11:57.183 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "\u001b[0m2024-04-24 00:11:57.184 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", "\n", - "[info] [gxf_executor.cpp:230] Destroying context\n", + "[info] [gxf_executor.cpp:275] Destroying context\n", "\n", "AbdomenCT\n", "\n", - "[2024-04-10 16:37:42,228] [INFO] (common) - Container 'flamboyant_jepsen'(4b3bba81606f) exited.\n" + "[2024-04-23 17:11:58,233] [INFO] (common) - Container 'competent_aryabhata'(29c362c90847) exited.\n" ] } ], diff --git a/notebooks/tutorials/03_segmentation_app.ipynb b/notebooks/tutorials/03_segmentation_app.ipynb index 946e2420..13c8e7ff 100644 --- a/notebooks/tutorials/03_segmentation_app.ipynb +++ b/notebooks/tutorials/03_segmentation_app.ipynb @@ -134,23 +134,20 @@ "text": [ "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.3)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.28.2)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.4)\n", + "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.6)\n", - "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.26.18)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.2.1)\n", "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "Downloading...\n", "From (original): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", - "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=03efbee4-6b67-4413-8b8e-522d9c7cc472\n", + "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=cec9025c-9d57-4269-b01f-503cd7daf812\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_spleen_seg_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 101MB/s]\n", + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 105MB/s]\n", "Archive: ai_spleen_seg_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -747,95 +744,111 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-10 16:41:09,106] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-10 16:41:09,114] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2024-04-10 16:41:09,116] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", - "[info] [gxf_executor.cpp:211] Creating context\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[info] [greedy_scheduler.cpp:190] Scheduling 6 entities\n", - "[2024-04-10 16:41:09,164] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-10 16:41:09,742] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-10 16:41:09,743] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-23 15:42:43,990] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-23 15:42:43,998] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2024-04-23 15:42:44,000] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", + "[info] [gxf_executor.cpp:247] Creating context\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", + "[2024-04-23 15:42:44,046] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m2024-04-23 15:42:44.043 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 6 entities\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2024-04-23 15:42:44,615] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-23 15:42:44,616] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-10 16:41:09,744] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 16:41:09,745] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-10 16:41:09,746] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-10 16:41:09,747] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 16:41:09,748] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-10 16:41:09,749] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-10 16:41:09,750] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 16:41:09,751] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-10 16:41:09,753] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-10 16:41:09,754] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 16:41:09,755] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2024-04-10 16:41:09,756] [INFO] (root) - Series attribute ImageType value: None\n", - "[2024-04-10 16:41:09,757] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 16:41:10,007] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2024-04-10 16:41:10,009] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2024-04-10 16:41:10,009] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2024-04-10 16:41:10,010] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2024-04-10 16:41:10,011] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2024-04-10 16:41:10,012] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2024-04-10 16:41:10,012] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2024-04-10 16:41:10,013] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2024-04-10 16:41:10,014] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2024-04-10 16:41:10,015] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2024-04-10 16:41:10,015] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2024-04-10 16:41:10,016] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2024-04-10 16:41:10,017] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2024-04-10 16:41:10,018] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2024-04-10 16:41:10,019] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2024-04-23 15:42:44,617] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 15:42:44,618] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-23 15:42:44,618] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-23 15:42:44,618] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 15:42:44,619] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-23 15:42:44,619] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-23 15:42:44,620] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 15:42:44,620] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-23 15:42:44,621] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-23 15:42:44,621] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 15:42:44,622] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2024-04-23 15:42:44,622] [INFO] (root) - Series attribute ImageType value: None\n", + "[2024-04-23 15:42:44,623] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 15:42:44,860] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2024-04-23 15:42:44,862] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2024-04-23 15:42:44,862] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2024-04-23 15:42:44,863] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2024-04-23 15:42:44,864] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2024-04-23 15:42:44,864] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2024-04-23 15:42:44,865] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2024-04-23 15:42:44,866] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2024-04-23 15:42:44,866] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2024-04-23 15:42:44,867] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2024-04-23 15:42:44,867] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2024-04-23 15:42:44,868] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2024-04-23 15:42:44,869] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2024-04-23 15:42:44,869] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2024-04-23 15:42:44,870] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2024-04-10 16:41:10,020] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2024-04-23 15:42:44,871] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2024-04-10 16:41:10,021] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2024-04-10 16:41:10,022] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2024-04-10 16:41:10,023] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2024-04-10 16:41:10,025] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2024-04-10 16:41:10,026] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2024-04-10 16:41:10,027] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2024-04-10 16:41:10,029] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" + "[2024-04-23 15:42:44,872] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2024-04-23 15:42:44,873] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2024-04-23 15:42:44,875] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2024-04-23 15:42:44,876] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2024-04-23 15:42:44,877] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2024-04-23 15:42:44,878] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2024-04-23 15:42:44,879] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2024-04-10 16:41:10,797 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2024-04-10 16:41:17,104 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" + "2024-04-23 15:42:45,610 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2024-04-23 15:42:51,791 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-10 16:41:19,060] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2024-04-10 16:41:19,067] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2024-04-23 15:42:53,711] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2024-04-23 15:42:53,718] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2024-04-10 16:41:20,496] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 16:41:20,497] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-10 16:41:20,498] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 16:41:20,499] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-10 16:41:20,500] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-10 16:41:20,501] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 16:41:20,502] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-10 16:41:20,503] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-10 16:41:20,503] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[2024-04-10 16:41:20,610] [INFO] (__main__.AISpleenSegApp) - End run\n" + "[2024-04-23 15:42:55,113] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 15:42:55,114] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 15:42:55,115] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 15:42:55,116] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 15:42:55,118] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 15:42:55,119] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 15:42:55,120] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 15:42:55,121] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 15:42:55,122] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[2024-04-23 15:42:55,233] [INFO] (__main__.AISpleenSegApp) - End run\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m2024-04-23 15:42:55.231 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 15:42:55.231 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" ] } ], @@ -1274,84 +1287,82 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 16:41:25,305] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2024-04-10 16:41:25,472] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2024-04-10 16:41:25,472] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 6 entities\n", - "[2024-04-10 16:41:25,505] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-10 16:41:25,850] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-10 16:41:25,850] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-23 15:42:59,956] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2024-04-23 15:42:59,957] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2024-04-23 15:42:59,957] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", + "\u001b[0m2024-04-23 15:42:59.985 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 6 entities\u001b[0m\n", + "[2024-04-23 15:42:59,987] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-23 15:43:00,516] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-10 16:41:25,850] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 16:41:25,850] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-10 16:41:25,850] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-10 16:41:25,850] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 16:41:25,851] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-10 16:41:25,851] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-10 16:41:25,851] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 16:41:25,851] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-10 16:41:25,851] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-10 16:41:25,851] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 16:41:25,851] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2024-04-10 16:41:25,851] [INFO] (root) - Series attribute ImageType value: None\n", - "[2024-04-10 16:41:25,851] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2024-04-10 16:41:26,402] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute ImageType value: None\n", + "[2024-04-23 15:43:00,517] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2024-04-10 16:41:26,403] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", - "2024-04-10 16:41:27,452 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2024-04-10 16:41:34,092 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", - "[2024-04-10 16:41:35,714] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2024-04-10 16:41:35,720] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2024-04-23 15:43:00,886] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "2024-04-23 15:43:01,872 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2024-04-23 15:43:08,194 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "[2024-04-23 15:43:09,761] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2024-04-23 15:43:09,767] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2024-04-10 16:41:37,387] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 16:41:37,387] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-10 16:41:37,387] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 16:41:37,387] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-10 16:41:37,387] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-10 16:41:37,388] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 16:41:37,388] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-10 16:41:37,388] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-10 16:41:37,388] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[2024-04-10 16:41:37,477] [INFO] (app.AISpleenSegApp) - End run\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:230] Destroying context\n" + "[2024-04-23 15:43:11,092] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "\u001b[0m2024-04-23 15:43:11.181 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 15:43:11.181 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[2024-04-23 15:43:11,183] [INFO] (app.AISpleenSegApp) - End run\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:275] Destroying context\n" ] } ], @@ -1370,7 +1381,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.12733408477402210746640758069824301.dcm\n", + "1.2.826.0.1.3680043.10.511.3.57940295875624111168999103278306755.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", @@ -1477,14 +1488,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 16:41:40,386] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2024-04-10 16:41:40,386] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2024-04-10 16:41:40,386] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2024-04-10 16:41:40,386] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2024-04-10 16:41:40,386] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2024-04-10 16:41:40,387] [INFO] (packager) - Generating app.json...\n", - "[2024-04-10 16:41:40,387] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-10 16:41:40,394] [DEBUG] (common) - \n", + "[2024-04-23 15:43:13,349] [INFO] (common) - Downloading CLI manifest file...\n", + "[2024-04-23 15:43:13,718] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2024-04-23 15:43:13,720] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2024-04-23 15:43:13,721] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2024-04-23 15:43:13,721] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2024-04-23 15:43:13,722] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2024-04-23 15:43:13,722] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2024-04-23 15:43:13,725] [INFO] (packager) - Generating app.json...\n", + "[2024-04-23 15:43:13,726] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-23 15:43:13,738] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1519,7 +1532,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2024-04-10 16:41:40,394] [DEBUG] (common) - \n", + "[2024-04-23 15:43:13,739] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1539,11 +1552,11 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-10 16:41:40,461] [DEBUG] (packager.builder) - \n", + "[2024-04-23 15:43:13,775] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -1559,11 +1572,11 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.nvidia.holoscan=\"2.0.0\"\n", "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "\n", @@ -1589,7 +1602,6 @@ "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", "\n", "\n", - "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", @@ -1615,14 +1627,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", - "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", + " \n", + "# MONAI Deploy\n", "\n", "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "\n", - "\n", + "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", @@ -1636,31 +1646,31 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-10 16:41:40,461] [INFO] (packager.builder) - \n", + "[2024-04-23 15:43:13,775] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 1.0.3\n", + " SDK Version: 2.0.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2024-04-10 16:41:41,020] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-10 16:41:41,021] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2024-04-23 15:43:14,073] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-23 15:43:14,073] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.80kB done\n", + "#1 transferring dockerfile: 2.66kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", - "#2 DONE 0.1s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + "#2 DONE 0.4s\n", "\n", "#3 [internal] load .dockerignore\n", "#3 transferring context: 1.79kB done\n", @@ -1669,177 +1679,239 @@ "#4 [internal] load build context\n", "#4 DONE 0.0s\n", "\n", - "#5 importing cache manifest from local:6394528277147153176\n", + "#5 importing cache manifest from local:12311818318063394630\n", "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.0s done\n", + "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.1s done\n", "#6 DONE 0.1s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#7 DONE 0.9s\n", + "#7 DONE 0.7s\n", "\n", "#4 [internal] load build context\n", "#4 transferring context: 19.56MB 0.1s done\n", "#4 DONE 0.2s\n", "\n", - "#8 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#8 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#8 CACHED\n", "\n", - "#9 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#9 [ 9/21] WORKDIR /var/holoscan\n", "#9 CACHED\n", "\n", - "#10 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", + "#10 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#10 CACHED\n", "\n", - "#11 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#11 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", "#11 CACHED\n", "\n", - "#12 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#12 [13/21] RUN pip install --upgrade pip\n", "#12 CACHED\n", "\n", - "#13 [ 9/21] WORKDIR /var/holoscan\n", + "#13 [10/21] COPY ./tools /var/holoscan/tools\n", "#13 CACHED\n", "\n", - "#14 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#14 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#14 CACHED\n", "\n", - "#15 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#15 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#15 CACHED\n", "\n", - "#16 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", + "#16 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#16 CACHED\n", "\n", - "#17 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", + "#17 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#17 CACHED\n", "\n", "#18 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#18 CACHED\n", "\n", - "#19 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#19 [11/21] RUN chmod +x /var/holoscan/tools\n", "#19 CACHED\n", "\n", - "#20 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#20 CACHED\n", "\n", - "#21 [17/21] COPY ./models /opt/holoscan/models\n", - "#21 CACHED\n", - "\n", - "#22 [10/21] COPY ./tools /var/holoscan/tools\n", - "#22 CACHED\n", - "\n", - "#23 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#23 CACHED\n", - "\n", - "#24 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", - "#24 CACHED\n", - "\n", - "#25 [13/21] RUN pip install --upgrade pip\n", - "#25 CACHED\n", + "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#21 DONE 0.8s\n", + "\n", + "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 0.711 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.833 Processing /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 0.843 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.23.5)\n", + "#22 1.040 Collecting holoscan~=2.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.139 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (6.7 kB)\n", + "#22 1.213 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.216 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.308 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.312 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.349 Requirement already satisfied: pip>=20.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (24.0)\n", + "#22 1.350 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (12.2.0)\n", + "#22 1.351 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", + "#22 1.353 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.60.1)\n", + "#22 1.353 Requirement already satisfied: Jinja2==3.1.3 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.1.3)\n", + "#22 1.354 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (23.1)\n", + "#22 1.355 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (6.0)\n", + "#22 1.356 Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.31.0)\n", + "#22 1.357 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (5.9.6)\n", + "#22 1.468 Collecting wheel-axle-runtime<1.0 (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.474 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", + "#22 1.512 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.8.2)\n", + "#22 1.515 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.1.3)\n", + "#22 1.529 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.10.15)\n", + "#22 1.529 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.66.2)\n", + "#22 1.530 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.12.3)\n", + "#22 1.531 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.11.0)\n", + "#22 1.540 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.3.2)\n", + "#22 1.541 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.7)\n", + "#22 1.542 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", + "#22 1.543 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2024.2.2)\n", + "#22 1.563 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.13.4)\n", + "#22 1.586 Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (8.1.7)\n", + "#22 1.587 Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.5.4)\n", + "#22 1.588 Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (13.7.1)\n", + "#22 1.623 Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.0.0)\n", + "#22 1.624 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.17.2)\n", + "#22 1.645 Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.1.2)\n", + "#22 1.662 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.686 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.2 MB)\n", + "#22 2.182 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.2/33.2 MB 44.5 MB/s eta 0:00:00\n", + "#22 2.187 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", + "#22 2.210 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", + "#22 2.567 Installing collected packages: wheel-axle-runtime, typeguard, colorama, holoscan, monai-deploy-app-sdk\n", + "#22 3.333 Successfully installed colorama-0.4.6 holoscan-2.0.0 monai-deploy-app-sdk-0.5.1+20.gb869749.dirty typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", + "#22 DONE 3.7s\n", + "\n", + "#23 [17/21] COPY ./models /opt/holoscan/models\n", + "#23 DONE 0.2s\n", + "\n", + "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", + "#24 DONE 0.1s\n", + "\n", + "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", + "#25 DONE 0.1s\n", "\n", "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#26 CACHED\n", + "#26 DONE 0.1s\n", "\n", "#27 [21/21] COPY ./app /opt/holoscan/app\n", - "#27 DONE 0.3s\n", + "#27 DONE 0.1s\n", "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 0.2s done\n", - "#28 exporting manifest sha256:814514f05787bbad414758721a0e6e6c3bc4c8e15be135868bd5d22125ba1323 0.0s done\n", - "#28 exporting config sha256:5effa5125f3b256ed2e1063cc763040b2eac0f3a49c281b3fecbe3ebbddedce9 0.0s done\n", + "#28 exporting layers 4.7s done\n", + "#28 exporting manifest sha256:272f9320d555ec164d2cdbdf3af72c2508a3768b3438478dfebc976ab20bdef5 0.0s done\n", + "#28 exporting config sha256:af6b96cbe7081e40c1393d1adcbb0d90e60f1eee0f770de931c17ec7e661922f 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer bc0556e272e1 3.91kB / 3.91kB\n", - "#29 loading layer bc0556e272e1 3.91kB / 3.91kB 0.7s done\n", - "#29 DONE 0.7s\n", + "#29 loading layer 5c74dcc5f86c 32.77kB / 125.82kB\n", + "#29 loading layer cf9ad481b317 557.06kB / 67.35MB\n", + "#29 loading layer c4db34b6201c 196.61kB / 17.81MB\n", + "#29 loading layer 37555bd01c91 490B / 490B\n", + "#29 loading layer 47758cf3f2be 313B / 313B\n", + "#29 loading layer f6490513de44 299B / 299B\n", + "#29 loading layer d1e36c8e77c6 3.91kB / 3.91kB\n", + "#29 loading layer 47758cf3f2be 313B / 313B 1.0s done\n", + "#29 loading layer 5c74dcc5f86c 32.77kB / 125.82kB 3.3s done\n", + "#29 loading layer cf9ad481b317 557.06kB / 67.35MB 3.2s done\n", + "#29 loading layer c4db34b6201c 196.61kB / 17.81MB 1.4s done\n", + "#29 loading layer 37555bd01c91 490B / 490B 1.1s done\n", + "#29 loading layer f6490513de44 299B / 299B 1.0s done\n", + "#29 loading layer d1e36c8e77c6 3.91kB / 3.91kB 0.9s done\n", + "#29 DONE 3.3s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 74.9s done\n", - "#28 DONE 75.2s\n", + "#28 sending tarball 69.0s done\n", + "#28 DONE 73.8s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", - "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015\n", "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", + "#30 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", + "#30 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", - "#30 writing layer sha256:0bf3a16e4f3f9ec99796b99e331a5c62472bc9377925e1fdc05f64709ed09895 done\n", "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#30 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", - "#30 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", - "#30 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", - "#30 writing layer sha256:183aa7032b52e859f5de3dac98da7c8398ed5f8a984d74865561f126c0eecef2 done\n", + "#30 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", + "#30 writing layer sha256:1f4a978bb76db2d138cfe7c7c9e76db4096247b06e34d349a2ed504bcd6a7ead done\n", + "#30 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#30 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", + "#30 writing layer sha256:20e14f0a8ca68167afb8296c10d7a1b4c3b17b54681cbf3b9b45e1be96afa699 0.0s done\n", "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", + "#30 writing layer sha256:255cc51d2e47738a5db3059cbe9f403785cf9496c7df8a28a3c9f0c46a0b3b58 done\n", "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#30 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", + "#30 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", + "#30 writing layer sha256:34c541b0f73b95f074d23fe925ff6a983a971ca2fbfad7bd9a6863b47994c312\n", + "#30 writing layer sha256:34c541b0f73b95f074d23fe925ff6a983a971ca2fbfad7bd9a6863b47994c312 0.4s done\n", + "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8\n", + "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", + "#30 writing layer sha256:3c91e9a3b2c9cb860c5001bb174d4ebf28358626e66f6e33f7b6209d6e0d2ce0 0.0s done\n", "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", - "#30 writing layer sha256:3f0770bfaa7c2f6e0a801dbbdeb644aedfdfeccb547611d3bf9faef04222aeba 0.0s done\n", "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#30 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", - "#30 writing layer sha256:4482079b5d33963eb55191bf404b70095535d4a8e2b64dab7373500515f896b4 done\n", "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", - "#30 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", - "#30 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#30 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#30 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", - "#30 writing layer sha256:5ea668ffc2fc267d241dbf17ca283bc879643a189be4f7e3d9034a82fc64a1ea done\n", + "#30 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#30 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", - "#30 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", - "#30 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", - "#30 writing layer sha256:6e80a527af94a864094c4f9116c2d29d3d7548ec8388579d9cf3f8a39a4b8178 done\n", - "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#30 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", + "#30 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", + "#30 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#30 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", - "#30 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", - "#30 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#30 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", + "#30 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", - "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f\n", - "#30 preparing build cache for export 0.7s done\n", + "#30 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", + "#30 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", + "#30 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#30 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", + "#30 writing layer sha256:92301d1270c19cab329818fb215b41138720ab9b588a2070107860f0b6fb5e11\n", + "#30 writing layer sha256:92301d1270c19cab329818fb215b41138720ab9b588a2070107860f0b6fb5e11 1.4s done\n", + "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3\n", + "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", + "#30 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#30 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#30 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#30 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", + "#30 writing layer sha256:add6bd0fec8e510c778856ae5993f823022a9a0230681b9333c83c58bca70f56 0.0s done\n", "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", + "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", + "#30 writing layer sha256:b93a8d787a5c613029585348476c2b6aa666ea47936e138082b0e9175a5583e0 0.0s done\n", "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#30 writing layer sha256:bc42865e1c27a9b1bee751f3c99ad2c12a906d32aca396ace7a07231c9cafbd1 done\n", - "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", - "#30 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#30 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", + "#30 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", + "#30 writing layer sha256:c97f7fb19e2e0b8ee3e1065f4dee369e35029cc620cafb7fe3dec2e9e06a3ae0 done\n", "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#30 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", - "#30 writing layer sha256:d6b5d6e098aacb316146a428c6b5aef9692011c6dce0932e3bbfbf27a514b7ed done\n", "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#30 writing layer sha256:e4297ff4df6f7a8f25cb109e5b24483c314c2e72b8e824f9669173919fc159c9 done\n", - "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", - "#30 writing layer sha256:e8640a108802cd7519cc53dceb74f7a5c94b562662f1c3c040c2aa6571acf0f3 done\n", + "#30 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", + "#30 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", + "#30 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#30 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#30 writing layer sha256:f0d70ecec43610ba497f9ab128ee1fbb4ec2aabcacca4f5be136d13bd1ee0fcb 0.0s done\n", + "#30 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#30 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", - "#30 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", - "#30 writing config sha256:374c8d5f4f72f0b0a709492f153a59ebd070e903971483f2cefb3e9e45bda48a 0.0s done\n", - "#30 writing cache manifest sha256:00a618573e1678dbe93ffce1675eee120201710fa121207b43875632f6799a58 0.0s done\n", - "#30 DONE 0.7s\n", - "[2024-04-10 16:43:00,358] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", + "#30 writing config sha256:d8b1ede40893d3af61eaf7d4d58ae3afaa55e9e0fc7722d020635c545f81df0c 0.0s done\n", + "#30 preparing build cache for export 2.6s done\n", + "#30 writing cache manifest sha256:00058bfc69cbf02a85b5242dfe17b06ca30b9c7312be3f7b2cf3aa215c57747f 0.0s done\n", + "#30 DONE 2.6s\n", + "[2024-04-23 15:44:38,817] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1872,7 +1944,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 5effa5125f3b About a minute ago 17.5GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 af6b96cbe708 About a minute ago 17.7GB\n" ] } ], @@ -1900,22 +1972,22 @@ "text": [ "output\n", "dcm\n", - "[2024-04-10 16:43:03,135] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-10 16:43:03,135] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-23 15:44:40,497] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-23 15:44:40,497] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-10 16:43:03,135] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-23 15:44:40,497] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-10 16:43:03,135] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-23 15:44:40,497] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-10 16:43:03,211] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpbbeybrjp/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpbbeybrjp/pkg.json\n", - "[2024-04-10 16:43:03,567] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-23 15:44:40,571] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpojmzf387/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpojmzf387/pkg.json\n", + "[2024-04-23 15:44:41,518] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-10 16:43:03,568] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2024-04-23 15:44:41,518] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-10 16:43:03,864] [INFO] (common) - Launching container (5135fc45ca94) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: optimistic_jang\n", + "[2024-04-23 15:44:41,869] [INFO] (common) - Launching container (a6bc36c774bd) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: dreamy_goldberg\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1925,95 +1997,93 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-10 23:43:05 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2024-04-23 22:44:42 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2024-04-10 23:43:09,781] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2024-04-23 22:44:46,465] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2024-04-10 23:43:09,784] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2024-04-23 22:44:46,467] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2024-04-10 23:43:09,784] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", + "[2024-04-23 22:44:46,467] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", "\n", "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:247] Creating context\n", "\n", "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "\u001b[0m2024-04-23 22:44:46.511 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 6 entities\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", "\n", - "[info] [greedy_scheduler.cpp:190] Scheduling 6 entities\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", "\n", - "[2024-04-10 23:43:09,895] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-23 22:44:46,513] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2024-04-10 23:43:10,851] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2024-04-10 23:43:10,851] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2024-04-10 23:43:10,851] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-10 23:43:10,851] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - Series attribute ImageType value: None\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute ImageType value: None\n", "\n", - "[2024-04-10 23:43:10,852] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 22:44:46,974] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", "\n", - "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", "\n", - "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", "\n", - "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", "\n", - "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", "\n", - "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", "\n", - "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", "\n", - "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", "\n", - "[2024-04-10 23:43:11,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", "\n", " [ 0. 0.7890625 0. -398.60547 ]\n", "\n", @@ -2021,7 +2091,7 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", "\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", "\n", @@ -2029,65 +2099,63 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", "\n", - "[2024-04-10 23:43:11,264] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", "\n", - "2024-04-10 23:43:12,277 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2024-04-23 22:44:47,986 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", "\n", - "2024-04-10 23:43:16,177 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "2024-04-23 22:44:51,638 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", "\n", - "[2024-04-10 23:43:17,870] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2024-04-23 22:44:53,491] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", "\n", - "[2024-04-10 23:43:17,876] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2024-04-23 22:44:53,497] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " warnings.warn(\n", "\n", - "[2024-04-10 23:43:19,386] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2024-04-10 23:43:19,386] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 23:43:19,386] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2024-04-10 23:43:19,386] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 23:43:19,387] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2024-04-10 23:43:19,387] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2024-04-10 23:43:19,387] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 23:43:19,387] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2024-04-10 23:43:19,388] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-23 22:44:54,695] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[2024-04-23 22:44:54,695] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", + "\u001b[0m2024-04-23 22:44:54.787 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "\u001b[0m2024-04-23 22:44:54.788 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", "\n", - "[2024-04-10 23:43:19,487] [INFO] (app.AISpleenSegApp) - End run\n", + "[2024-04-23 22:44:54,793] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[info] [gxf_executor.cpp:230] Destroying context\n", + "[info] [gxf_executor.cpp:275] Destroying context\n", "\n", - "[2024-04-10 16:43:21,271] [INFO] (common) - Container 'optimistic_jang'(5135fc45ca94) exited.\n" + "[2024-04-23 15:44:56,376] [INFO] (common) - Container 'dreamy_goldberg'(a6bc36c774bd) exited.\n" ] } ], @@ -2109,7 +2177,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.10550615266418892085330010762562517.dcm\n", + "1.2.826.0.1.3680043.10.511.3.57272145768055517649062567242794544.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", diff --git a/notebooks/tutorials/03_segmentation_viz_app.ipynb b/notebooks/tutorials/03_segmentation_viz_app.ipynb index fbaab63e..a2c29a98 100644 --- a/notebooks/tutorials/03_segmentation_viz_app.ipynb +++ b/notebooks/tutorials/03_segmentation_viz_app.ipynb @@ -85,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -123,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -132,23 +132,20 @@ "text": [ "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.3)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.4)\n", "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.26.18)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.2.1)\n", "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "Downloading...\n", "From (original): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", - "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=dcd169d3-fd74-406b-84df-e849918958a1\n", + "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=c8244ec0-ca91-472f-8701-075a197bb44e\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_spleen_seg_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 81.5MB/s]\n", + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 99.7MB/s]\n", "Archive: ai_spleen_seg_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -385,7 +382,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -418,7 +415,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -478,7 +475,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -628,45 +625,56 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-10 10:46:21,853] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-10 10:46:21,859] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2024-04-10 10:46:21,866] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:211] Creating context\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[info] [greedy_scheduler.cpp:190] Scheduling 10 entities\n", - "[2024-04-10 10:46:21,911] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-10 10:46:22,254] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-10 10:46:22,256] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-23 17:21:11,103] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-23 17:21:11,110] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2024-04-23 17:21:11,119] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:247] Creating context\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", + "[2024-04-23 17:21:11,172] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m2024-04-23 17:21:11.171 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 10 entities\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2024-04-23 17:21:11,733] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-23 17:21:11,734] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-10 10:46:22,257] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 10:46:22,257] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-10 10:46:22,258] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-10 10:46:22,259] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 10:46:22,261] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-10 10:46:22,262] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-10 10:46:22,262] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 10:46:22,263] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-10 10:46:22,264] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-10 10:46:22,265] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 10:46:22,265] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 10:46:22,497] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n" + "[2024-04-23 17:21:11,735] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 17:21:11,736] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-23 17:21:11,736] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-23 17:21:11,737] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 17:21:11,737] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-23 17:21:11,738] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-23 17:21:11,738] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 17:21:11,739] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-23 17:21:11,739] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-23 17:21:11,740] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 17:21:11,740] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 17:21:11,964] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "76b80cc0d2af48c58237d1f8d5d1ec88", + "model_id": "211ff45336804adab6957c462290a405", "version_major": 2, "version_minor": 0 }, @@ -681,26 +689,31 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-10 10:46:35,947] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2024-04-10 10:46:37,415] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2024-04-10 10:46:37,416] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2024-04-23 17:21:24,861] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2024-04-23 17:21:26,556] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2024-04-23 17:21:26,557] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2024-04-10 10:46:47,813] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 10:46:47,814] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-10 10:46:47,815] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 10:46:47,816] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-10 10:46:47,817] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-10 10:46:47,818] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 10:46:47,819] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-10 10:46:47,821] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-10 10:46:47,822] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[2024-04-10 10:46:47,929] [INFO] (__main__.AISpleenSegApp) - End run\n" + "[2024-04-23 17:21:38,046] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 17:21:38,047] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 17:21:38,048] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 17:21:38,049] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 17:21:38,051] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 17:21:38,052] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 17:21:38,053] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 17:21:38,054] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 17:21:38,055] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[2024-04-23 17:21:38,152] [INFO] (__main__.AISpleenSegApp) - End run\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m2024-04-23 17:21:38.150 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 17:21:38.150 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" ] } ], @@ -727,7 +740,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -745,7 +758,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -948,7 +961,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -969,7 +982,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -998,60 +1011,58 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 10:46:52,705] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2024-04-10 10:46:52,707] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2024-04-10 10:46:52,709] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 10 entities\n", - "[2024-04-10 10:46:52,747] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-23 17:21:43,227] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2024-04-23 17:21:43,229] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2024-04-23 17:21:43,230] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", + "\u001b[0m2024-04-23 17:21:43.261 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 10 entities\u001b[0m\n", + "[2024-04-23 17:21:43,263] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 10:46:53,083] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 10:46:53,297] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 17:21:43,601] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 17:21:43,818] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "Box(children=(Widget(), VBox(children=(interactive(children=(Dropdown(description='View mode', index=2, options=(('Cinematic', 'CINEMATIC'), ('Slice', 'SLICE'), ('Slice Segmentation', 'SLICE_SEGMENTATION')), value='SLICE_SEGMENTATION'), Output()), _dom_classes=('widget-interact',)), interactive(children=(Dropdown(description='Camera', options=('Top', 'Right', 'Front'), value='Top'), Output()), _dom_classes=('widget-interact',))))))\n", - "[2024-04-10 10:47:05,685] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2024-04-10 10:47:07,271] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2024-04-10 10:47:07,271] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2024-04-23 17:21:56,304] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2024-04-23 17:21:57,924] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2024-04-23 17:21:57,924] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-10 10:47:18,769] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[2024-04-10 10:47:18,856] [INFO] (app.AISpleenSegApp) - End run\n" + "[2024-04-23 17:22:10,502] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 17:22:10,502] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 17:22:10,502] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 17:22:10,502] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 17:22:10,503] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 17:22:10,503] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 17:22:10,503] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 17:22:10,503] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 17:22:10,503] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "\u001b[0m2024-04-23 17:22:10.588 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 17:22:10.588 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[2024-04-23 17:22:10,590] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1062,14 +1073,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.65335369220270763710273609202620247.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.28732173401945631043953175363609741.dcm stl\n" ] } ], diff --git a/notebooks/tutorials/04_monai_bundle_app.ipynb b/notebooks/tutorials/04_monai_bundle_app.ipynb index b546487b..174bc8e5 100644 --- a/notebooks/tutorials/04_monai_bundle_app.ipynb +++ b/notebooks/tutorials/04_monai_bundle_app.ipynb @@ -94,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 51, "metadata": {}, "outputs": [], "source": [ @@ -106,6 +106,9 @@ "!python -c \"import pydicom\" || pip install -q \"pydicom>=2.3.0\"\n", "!python -c \"import highdicom\" || pip install -q \"highdicom>=0.18.2\"\n", "!python -c \"import SimpleITK\" || pip install -q \"SimpleITK>=2.0.0\"\n", + "!python -c \"import skimage\" || pip install -q \"scikit-image>=0.17.2\"\n", + "!python -c \"import stl\" || pip install -q \"numpy-stl>=2.12.0\"\n", + "!python -c \"import trimesh\" || pip install -q \"trimesh>=3.8.11\"\n", "\n", "# Install MONAI Deploy App SDK package\n", "!python -c \"import holoscan\" || pip install --upgrade -q \"holoscan>=0.6.0\"\n", @@ -128,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -137,23 +140,20 @@ "text": [ "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.3)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.28.2)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.4)\n", + "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.6)\n", - "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.26.18)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.2.1)\n", "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "Downloading...\n", "From (original): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", - "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=e406b570-c957-4c12-9dc1-df625c4fb575\n", + "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=acdd1e9c-2382-4003-8390-b86e2e103d74\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_spleen_seg_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 115MB/s]\n", + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 96.9MB/s]\n", "Archive: ai_spleen_seg_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -387,7 +387,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 53, "metadata": {}, "outputs": [ { @@ -418,7 +418,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 54, "metadata": {}, "outputs": [], "source": [ @@ -475,7 +475,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 55, "metadata": {}, "outputs": [], "source": [ @@ -619,60 +619,77 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 56, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-10 15:03:17,151] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-10 15:03:17,160] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2024-04-10 15:03:17,167] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:211] Creating context\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[info] [greedy_scheduler.cpp:190] Scheduling 8 entities\n", - "[2024-04-10 15:03:17,216] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-10 15:03:17,807] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-10 15:03:17,809] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-23 16:51:59,898] [INFO] (root) - Begin __main__\n", + "[2024-04-23 16:51:59,901] [INFO] (__main__.AISpleenSegApp) - Begin run\n", + "[2024-04-23 16:51:59,902] [INFO] (root) - Begin compose\n", + "[2024-04-23 16:51:59,909] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-23 16:51:59,915] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2024-04-23 16:51:59,920] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:247] Creating context\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", + "[2024-04-23 16:51:59,943] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m2024-04-23 16:51:59.940 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 8 entities\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2024-04-23 16:52:00,393] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-23 16:52:00,394] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-10 15:03:17,809] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 15:03:17,810] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-10 15:03:17,811] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-10 15:03:17,812] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:03:17,813] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-10 15:03:17,813] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-10 15:03:17,814] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:03:17,815] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-10 15:03:17,815] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-10 15:03:17,816] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:03:17,817] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 15:03:18,040] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", - "[2024-04-10 15:03:24,142] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2024-04-10 15:03:25,752] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2024-04-10 15:03:25,753] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", - " warnings.warn(\n", - "[2024-04-10 15:03:36,659] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:03:36,660] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-10 15:03:36,661] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:03:36,663] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-10 15:03:36,664] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-10 15:03:36,665] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:03:36,666] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-10 15:03:36,667] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-10 15:03:36,668] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[2024-04-10 15:03:36,762] [INFO] (__main__.AISpleenSegApp) - End run\n", - "[2024-04-10 15:03:36,763] [INFO] (root) - End __main__\n" + "[2024-04-23 16:52:00,395] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 16:52:00,396] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-23 16:52:00,397] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-23 16:52:00,397] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:52:00,398] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-23 16:52:00,399] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-23 16:52:00,399] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:52:00,400] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-23 16:52:00,400] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-23 16:52:00,401] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:52:00,402] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 16:52:00,641] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2024-04-23 16:52:03,610] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2024-04-23 16:52:05,137] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2024-04-23 16:52:05,138] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2024-04-23 16:52:14,942] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:52:14,943] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 16:52:14,944] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:52:14,945] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 16:52:14,946] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 16:52:14,947] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:52:14,948] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 16:52:14,949] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 16:52:14,951] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[2024-04-23 16:52:15,056] [INFO] (__main__.AISpleenSegApp) - End run\n", + "[2024-04-23 16:52:15,057] [INFO] (root) - End __main__\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m2024-04-23 16:52:15.054 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 16:52:15.055 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" ] } ], @@ -700,7 +717,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 57, "metadata": {}, "outputs": [], "source": [ @@ -717,7 +734,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 58, "metadata": {}, "outputs": [ { @@ -916,7 +933,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 59, "metadata": {}, "outputs": [ { @@ -937,7 +954,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 60, "metadata": {}, "outputs": [ { @@ -966,59 +983,57 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 15:03:41,411] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", - "[2024-04-10 15:03:41,413] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[2024-04-10 15:03:41,414] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 8 entities\n", - "[2024-04-10 15:03:41,449] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-10 15:03:41,784] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-10 15:03:41,784] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-23 16:52:19,843] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", + "[2024-04-23 16:52:19,845] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", + "[2024-04-23 16:52:19,847] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", + "\u001b[0m2024-04-23 16:52:19.876 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 8 entities\u001b[0m\n", + "[2024-04-23 16:52:19,877] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-23 16:52:20,224] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-23 16:52:20,224] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-10 15:03:41,784] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 15:03:41,784] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-10 15:03:41,784] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-10 15:03:41,784] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:03:41,785] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-10 15:03:41,785] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-10 15:03:41,785] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:03:41,785] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-10 15:03:41,785] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-10 15:03:41,785] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:03:41,785] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 15:03:42,204] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", - "[2024-04-10 15:03:48,123] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", - "[2024-04-10 15:03:49,607] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2024-04-10 15:03:49,607] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2024-04-23 16:52:20,224] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 16:52:20,224] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-23 16:52:20,224] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-23 16:52:20,224] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:52:20,225] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-23 16:52:20,225] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-23 16:52:20,225] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:52:20,225] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-23 16:52:20,225] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-23 16:52:20,225] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:52:20,225] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 16:52:20,449] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2024-04-23 16:52:26,711] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", + "[2024-04-23 16:52:28,387] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2024-04-23 16:52:28,388] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2024-04-10 15:03:59,411] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-10 15:03:59,412] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[2024-04-10 15:03:59,498] [INFO] (app.AISpleenSegApp) - End run\n" + "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 16:52:39,442] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 16:52:39,442] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "\u001b[0m2024-04-23 16:52:39.552 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 16:52:39.552 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[2024-04-23 16:52:39,552] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1029,14 +1044,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 62, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.39077956786032602526223766812104927.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.31677856801140848641305221346725457.dcm stl\n" ] } ], @@ -1057,7 +1072,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 63, "metadata": {}, "outputs": [ { @@ -1087,7 +1102,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 64, "metadata": {}, "outputs": [ { @@ -1107,6 +1122,9 @@ "pydicom>=2.3.0\n", "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", + "scikit-image>=0.17.2\n", + "numpy-stl>=2.12.0\n", + "trimesh>=3.8.11\n", "torch>=1.12.0" ] }, @@ -1123,21 +1141,23 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 15:04:01,696] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2024-04-10 15:04:01,697] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2024-04-10 15:04:01,697] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2024-04-10 15:04:01,697] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2024-04-10 15:04:01,697] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2024-04-10 15:04:01,701] [INFO] (packager) - Generating app.json...\n", - "[2024-04-10 15:04:01,701] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-10 15:04:01,714] [DEBUG] (common) - \n", + "[2024-04-23 16:52:41,994] [INFO] (common) - Downloading CLI manifest file...\n", + "[2024-04-23 16:52:42,236] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2024-04-23 16:52:42,237] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2024-04-23 16:52:42,238] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2024-04-23 16:52:42,238] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2024-04-23 16:52:42,238] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2024-04-23 16:52:42,238] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2024-04-23 16:52:42,240] [INFO] (packager) - Generating app.json...\n", + "[2024-04-23 16:52:42,240] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-23 16:52:42,246] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1172,7 +1192,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2024-04-10 15:04:01,715] [DEBUG] (common) - \n", + "[2024-04-23 16:52:42,246] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1192,11 +1212,11 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-10 15:04:01,749] [DEBUG] (packager.builder) - \n", + "[2024-04-23 16:52:42,273] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -1212,11 +1232,11 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.nvidia.holoscan=\"2.0.0\"\n", "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "\n", @@ -1242,7 +1262,6 @@ "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", "\n", "\n", - "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", @@ -1268,14 +1287,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", - "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", + " \n", + "# MONAI Deploy\n", "\n", "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "\n", - "\n", + "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", @@ -1289,31 +1306,31 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-10 15:04:01,749] [INFO] (packager.builder) - \n", + "[2024-04-23 16:52:42,273] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 1.0.3\n", + " SDK Version: 2.0.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2024-04-10 15:04:02,349] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-10 15:04:02,349] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2024-04-23 16:52:42,564] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-23 16:52:42,564] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.80kB done\n", + "#1 transferring dockerfile: 2.66kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", - "#2 DONE 0.4s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + "#2 DONE 0.5s\n", "\n", "#3 [internal] load .dockerignore\n", "#3 transferring context: 1.79kB done\n", @@ -1322,15 +1339,15 @@ "#4 [internal] load build context\n", "#4 DONE 0.0s\n", "\n", - "#5 importing cache manifest from local:18341943591062161743\n", + "#5 importing cache manifest from local:13600691502778489948\n", "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.0s done\n", + "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.0s done\n", "#6 DONE 0.1s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", "#7 DONE 0.7s\n", "\n", @@ -1338,99 +1355,240 @@ "#4 transferring context: 19.56MB 0.1s done\n", "#4 DONE 0.2s\n", "\n", - "#8 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", + "#8 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#8 CACHED\n", "\n", - "#9 [13/21] RUN pip install --upgrade pip\n", + "#9 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#9 CACHED\n", "\n", - "#10 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", + "#10 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#11 [11/21] RUN chmod +x /var/holoscan/tools\n", "#11 CACHED\n", "\n", - "#12 [10/21] COPY ./tools /var/holoscan/tools\n", + "#12 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#13 [ 9/21] WORKDIR /var/holoscan\n", "#13 CACHED\n", "\n", "#14 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#14 CACHED\n", "\n", - "#15 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#15 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#15 CACHED\n", "\n", - "#16 [ 9/21] WORKDIR /var/holoscan\n", + "#16 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#16 CACHED\n", "\n", - "#17 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#17 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#17 CACHED\n", "\n", - "#18 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#18 [10/21] COPY ./tools /var/holoscan/tools\n", "#18 CACHED\n", "\n", - "#19 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#19 [13/21] RUN pip install --upgrade pip\n", "#19 CACHED\n", "\n", "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#20 CACHED\n", - "\n", - "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#21 DONE 0.2s\n", - "\n", - "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#22 0.845 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.979 Processing /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "#22 0.993 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.23.5)\n", - "#22 1.183 Collecting holoscan~=1.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.336 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (4.1 kB)\n", - "#22 1.412 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.416 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.507 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.512 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.611 Collecting pip==23.3.2 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.615 Downloading pip-23.3.2-py3-none-any.whl.metadata (3.5 kB)\n", - "#22 1.632 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (12.2.0)\n", - "#22 1.635 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.2.1)\n", - "#22 1.638 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.60.1)\n", - "#22 1.641 Requirement already satisfied: Jinja2==3.1.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.1.2)\n", - "#22 1.643 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (23.1)\n", - "#22 1.644 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (6.0)\n", - "#22 1.645 Requirement already satisfied: requests==2.28.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.28.2)\n", - "#22 1.646 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (5.9.6)\n", - "#22 1.757 Collecting wheel-axle-runtime<1.0 (from holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty)\n", - "#22 1.763 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", - "#22 1.806 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.8.2)\n", - "#22 1.813 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2.1.3)\n", - "#22 1.829 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.10.14)\n", - "#22 1.829 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.66.1)\n", - "#22 1.830 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (0.9.0)\n", - "#22 1.831 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (4.10.0)\n", - "#22 1.839 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.3.2)\n", - "#22 1.840 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.6)\n", - "#22 1.841 Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (1.26.18)\n", - "#22 1.842 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.28.2->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (2023.11.17)\n", - "#22 1.860 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (3.13.3)\n", - "#22 1.895 Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=1.0->monai-deploy-app-sdk==0.5.1+25.g31e4165.dirty) (8.1.7)\n", - "#22 1.939 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 3.052 Downloading holoscan-1.0.3-cp310-cp310-manylinux_2_35_x86_64.whl (33.6 MB)\n", - "#22 7.685 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.6/33.6 MB 7.3 MB/s eta 0:00:00\n", - "#22 7.692 Downloading pip-23.3.2-py3-none-any.whl (2.1 MB)\n", - "#22 7.738 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 52.2 MB/s eta 0:00:00\n", - "#22 7.745 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", - "#22 7.771 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", - "#22 8.166 Installing collected packages: wheel-axle-runtime, typeguard, pip, colorama, holoscan, monai-deploy-app-sdk\n", - "#22 8.245 Attempting uninstall: pip\n", - "#22 8.248 Found existing installation: pip 24.0\n", - "#22 8.310 Uninstalling pip-24.0:\n", - "#22 8.744 Successfully uninstalled pip-24.0\n", - "#22 10.41 Successfully installed colorama-0.4.6 holoscan-1.0.3 monai-deploy-app-sdk-0.5.1+25.g31e4165.dirty pip-23.3.2 typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", - "#22 DONE 11.1s\n", + "#20 0.822 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#20 0.909 Downloading highdicom-0.22.0-py3-none-any.whl.metadata (3.8 kB)\n", + "#20 0.940 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#20 0.944 Downloading monai-1.3.0-202310121228-py3-none-any.whl.metadata (10 kB)\n", + "#20 0.972 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#20 0.976 Downloading nibabel-5.2.1-py3-none-any.whl.metadata (8.8 kB)\n", + "#20 0.979 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from -r /tmp/requirements.txt (line 4)) (1.23.5)\n", + "#20 1.002 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#20 1.007 Downloading pydicom-2.4.4-py3-none-any.whl.metadata (7.8 kB)\n", + "#20 1.010 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#20 1.064 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#20 1.068 Downloading SimpleITK-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#20 1.129 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", + "#20 1.133 Downloading scikit_image-0.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", + "#20 1.157 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", + "#20 1.161 Downloading numpy_stl-3.1.1-py3-none-any.whl.metadata (16 kB)\n", + "#20 1.263 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", + "#20 1.267 Downloading trimesh-4.3.1-py3-none-any.whl.metadata (18 kB)\n", + "#20 1.322 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", + "#20 1.327 Downloading torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl.metadata (26 kB)\n", + "#20 1.536 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#20 1.541 Downloading pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.2 kB)\n", + "#20 1.606 Collecting pillow-jpls>=1.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#20 1.610 Downloading pillow_jpls-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.1 kB)\n", + "#20 1.690 Requirement already satisfied: packaging>=17 in /usr/local/lib/python3.10/dist-packages (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3)) (23.1)\n", + "#20 1.855 Collecting scipy>=1.9 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#20 1.860 Downloading scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (60 kB)\n", + "#20 1.864 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.6/60.6 kB 231.5 MB/s eta 0:00:00\n", + "#20 1.897 Collecting networkx>=2.8 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#20 1.901 Downloading networkx-3.3-py3-none-any.whl.metadata (5.1 kB)\n", + "#20 1.945 Collecting imageio>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#20 1.950 Downloading imageio-2.34.1-py3-none-any.whl.metadata (4.9 kB)\n", + "#20 1.993 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#20 1.998 Downloading tifffile-2024.4.18-py3-none-any.whl.metadata (31 kB)\n", + "#20 2.013 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#20 2.017 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", + "#20 2.041 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", + "#20 2.044 Downloading python_utils-3.8.2-py2.py3-none-any.whl.metadata (9.7 kB)\n", + "#20 2.165 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.169 Downloading filelock-3.13.4-py3-none-any.whl.metadata (2.8 kB)\n", + "#20 2.189 Collecting typing-extensions>=4.8.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.192 Downloading typing_extensions-4.11.0-py3-none-any.whl.metadata (3.0 kB)\n", + "#20 2.220 Collecting sympy (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.224 Downloading sympy-1.12-py3-none-any.whl.metadata (12 kB)\n", + "#20 2.226 Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.12.0->-r /tmp/requirements.txt (line 11)) (3.1.3)\n", + "#20 2.252 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.257 Downloading fsspec-2024.3.1-py3-none-any.whl.metadata (6.8 kB)\n", + "#20 2.274 Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.278 Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.293 Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.296 Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.315 Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.323 Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "#20 2.340 Collecting nvidia-cudnn-cu12==8.9.2.26 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.343 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "#20 2.358 Collecting nvidia-cublas-cu12==12.1.3.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.362 Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.394 Collecting nvidia-cufft-cu12==11.0.2.54 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.399 Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.419 Collecting nvidia-curand-cu12==10.3.2.106 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.425 Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.459 Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.463 Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "#20 2.484 Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.488 Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", + "#20 2.504 Collecting nvidia-nccl-cu12==2.19.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.508 Downloading nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl.metadata (1.8 kB)\n", + "#20 2.530 Collecting nvidia-nvtx-cu12==12.1.105 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.534 Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.7 kB)\n", + "#20 2.555 Collecting triton==2.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.559 Downloading triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#20 2.609 Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.612 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#20 2.849 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 11)) (2.1.3)\n", + "#20 2.869 Collecting mpmath>=0.19 (from sympy->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#20 2.873 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#20 2.917 Downloading highdicom-0.22.0-py3-none-any.whl (825 kB)\n", + "#20 2.932 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 825.0/825.0 kB 85.5 MB/s eta 0:00:00\n", + "#20 2.939 Downloading monai-1.3.0-202310121228-py3-none-any.whl (1.3 MB)\n", + "#20 2.958 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 99.3 MB/s eta 0:00:00\n", + "#20 2.963 Downloading nibabel-5.2.1-py3-none-any.whl (3.3 MB)\n", + "#20 2.993 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 124.6 MB/s eta 0:00:00\n", + "#20 2.999 Downloading pydicom-2.4.4-py3-none-any.whl (1.8 MB)\n", + "#20 3.015 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 130.4 MB/s eta 0:00:00\n", + "#20 3.020 Downloading SimpleITK-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.7 MB)\n", + "#20 3.526 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.7/52.7 MB 99.8 MB/s eta 0:00:00\n", + "#20 3.533 Downloading scikit_image-0.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.7 MB)\n", + "#20 3.910 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.7/14.7 MB 30.4 MB/s eta 0:00:00\n", + "#20 3.916 Downloading numpy_stl-3.1.1-py3-none-any.whl (20 kB)\n", + "#20 3.921 Downloading trimesh-4.3.1-py3-none-any.whl (693 kB)\n", + "#20 3.928 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 693.8/693.8 kB 179.7 MB/s eta 0:00:00\n", + "#20 3.936 Downloading torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl (755.5 MB)\n", + "#20 11.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 755.5/755.5 MB 118.0 MB/s eta 0:00:00\n", + "#20 11.36 Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", + "#20 16.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 410.6/410.6 MB 117.5 MB/s eta 0:00:00\n", + "#20 16.04 Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", + "#20 16.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.1/14.1 MB 118.4 MB/s eta 0:00:00\n", + "#20 16.18 Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", + "#20 16.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 23.7/23.7 MB 117.6 MB/s eta 0:00:00\n", + "#20 16.46 Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", + "#20 16.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 823.6/823.6 kB 153.8 MB/s eta 0:00:00\n", + "#20 16.49 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n", + "#20 24.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 731.7/731.7 MB 117.1 MB/s eta 0:00:00\n", + "#20 24.49 Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", + "#20 25.76 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.6/121.6 MB 117.6 MB/s eta 0:00:00\n", + "#20 25.77 Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", + "#20 26.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.5/56.5 MB 63.6 MB/s eta 0:00:00\n", + "#20 26.36 Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", + "#20 27.50 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 124.2/124.2 MB 104.0 MB/s eta 0:00:00\n", + "#20 27.51 Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", + "#20 29.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 196.0/196.0 MB 108.0 MB/s eta 0:00:00\n", + "#20 29.36 Downloading nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl (166.0 MB)\n", + "#20 30.97 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 166.0/166.0 MB 116.7 MB/s eta 0:00:00\n", + "#20 30.98 Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", + "#20 30.98 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.1/99.1 kB 245.1 MB/s eta 0:00:00\n", + "#20 30.99 Downloading triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (167.9 MB)\n", + "#20 32.54 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 167.9/167.9 MB 123.3 MB/s eta 0:00:00\n", + "#20 32.54 Downloading imageio-2.34.1-py3-none-any.whl (313 kB)\n", + "#20 32.55 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 313.5/313.5 kB 231.8 MB/s eta 0:00:00\n", + "#20 32.55 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", + "#20 32.56 Downloading networkx-3.3-py3-none-any.whl (1.7 MB)\n", + "#20 32.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 135.6 MB/s eta 0:00:00\n", + "#20 32.58 Downloading pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "#20 32.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 121.7 MB/s eta 0:00:00\n", + "#20 32.63 Downloading pillow_jpls-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (305 kB)\n", + "#20 32.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 305.6/305.6 kB 239.6 MB/s eta 0:00:00\n", + "#20 32.64 Downloading python_utils-3.8.2-py2.py3-none-any.whl (27 kB)\n", + "#20 32.64 Downloading scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (38.6 MB)\n", + "#20 33.02 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 38.6/38.6 MB 108.0 MB/s eta 0:00:00\n", + "#20 33.02 Downloading tifffile-2024.4.18-py3-none-any.whl (224 kB)\n", + "#20 33.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 225.0/225.0 kB 110.7 MB/s eta 0:00:00\n", + "#20 33.04 Downloading typing_extensions-4.11.0-py3-none-any.whl (34 kB)\n", + "#20 33.04 Downloading filelock-3.13.4-py3-none-any.whl (11 kB)\n", + "#20 33.05 Downloading fsspec-2024.3.1-py3-none-any.whl (171 kB)\n", + "#20 33.06 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 172.0/172.0 kB 77.4 MB/s eta 0:00:00\n", + "#20 33.07 Downloading sympy-1.12-py3-none-any.whl (5.7 MB)\n", + "#20 33.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 MB 117.1 MB/s eta 0:00:00\n", + "#20 33.13 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#20 33.14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 146.2 MB/s eta 0:00:00\n", + "#20 33.14 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#20 33.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.6 MB/s eta 0:00:00\n", + "#20 40.94 Installing collected packages: SimpleITK, mpmath, typing-extensions, trimesh, tifffile, sympy, scipy, pydicom, pillow, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, nibabel, networkx, lazy-loader, fsspec, filelock, triton, python-utils, pillow-jpls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, imageio, scikit-image, nvidia-cusolver-cu12, numpy-stl, highdicom, torch, monai\n", + "#20 94.76 Successfully installed SimpleITK-2.3.1 filelock-3.13.4 fsspec-2024.3.1 highdicom-0.22.0 imageio-2.34.1 lazy-loader-0.4 monai-1.3.0 mpmath-1.3.0 networkx-3.3 nibabel-5.2.1 numpy-stl-3.1.1 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.19.3 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.1.105 pillow-10.3.0 pillow-jpls-1.3.2 pydicom-2.4.4 python-utils-3.8.2 scikit-image-0.23.2 scipy-1.13.0 sympy-1.12 tifffile-2024.4.18 torch-2.2.2 trimesh-4.3.1 triton-2.2.0 typing-extensions-4.11.0\n", + "#20 DONE 98.0s\n", + "\n", + "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#21 DONE 0.5s\n", + "\n", + "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 0.651 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.747 Processing /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 0.758 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.23.5)\n", + "#22 0.873 Collecting holoscan~=2.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 0.964 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (6.7 kB)\n", + "#22 1.036 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.040 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.125 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.129 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.167 Requirement already satisfied: pip>=20.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (24.0)\n", + "#22 1.168 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (12.2.0)\n", + "#22 1.169 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", + "#22 1.170 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.60.1)\n", + "#22 1.171 Requirement already satisfied: Jinja2==3.1.3 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.1.3)\n", + "#22 1.172 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (23.1)\n", + "#22 1.172 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (6.0)\n", + "#22 1.173 Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.31.0)\n", + "#22 1.174 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (5.9.6)\n", + "#22 1.219 Collecting wheel-axle-runtime<1.0 (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", + "#22 1.224 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", + "#22 1.261 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.8.2)\n", + "#22 1.266 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.1.3)\n", + "#22 1.286 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.10.15)\n", + "#22 1.287 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.66.2)\n", + "#22 1.288 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.12.3)\n", + "#22 1.288 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.11.0)\n", + "#22 1.297 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.3.2)\n", + "#22 1.298 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.7)\n", + "#22 1.298 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", + "#22 1.299 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2024.2.2)\n", + "#22 1.319 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.13.4)\n", + "#22 1.341 Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (8.1.7)\n", + "#22 1.342 Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.5.4)\n", + "#22 1.343 Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (13.7.1)\n", + "#22 1.380 Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.0.0)\n", + "#22 1.380 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.17.2)\n", + "#22 1.400 Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.1.2)\n", + "#22 1.415 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.437 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.2 MB)\n", + "#22 2.034 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.2/33.2 MB 28.4 MB/s eta 0:00:00\n", + "#22 2.039 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", + "#22 2.064 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", + "#22 2.573 Installing collected packages: wheel-axle-runtime, typeguard, colorama, holoscan, monai-deploy-app-sdk\n", + "#22 3.306 Successfully installed colorama-0.4.6 holoscan-2.0.0 monai-deploy-app-sdk-0.5.1+20.gb869749.dirty typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", + "#22 DONE 4.1s\n", "\n", "#23 [17/21] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.2s\n", + "#23 DONE 0.3s\n", "\n", "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", "#24 DONE 0.1s\n", @@ -1446,116 +1604,137 @@ "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 6.0s done\n", - "#28 exporting manifest sha256:3b3b2102892c64900945ca4d84a328af1fb7350c84cb4d85ecee3b94f48ed85c 0.0s done\n", - "#28 exporting config sha256:d6463325d6640490c117da76b90d02687331b2ee1e486047f7c4c968023c3d89 0.0s done\n", + "#28 exporting layers 161.2s done\n", + "#28 exporting manifest sha256:db72052410ed3875bd2689b115d7ea706f74caa44be88c9b455c9761c991f225 0.0s done\n", + "#28 exporting config sha256:4fe495cf55e1086e3b466f4799218faa2b377e58348ae9b51253b56b560295b3 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer a292666cef7b 32.77kB / 125.57kB\n", - "#29 loading layer 23d575e38e71 557.06kB / 73.97MB\n", - "#29 loading layer 23d575e38e71 71.86MB / 73.97MB 2.2s\n", - "#29 loading layer 601aae96dba4 196.61kB / 17.81MB\n", - "#29 loading layer 8973e59624ba 492B / 492B\n", - "#29 loading layer 2c4cefc4de42 313B / 313B\n", - "#29 loading layer 450f1c5db7b9 301B / 301B\n", - "#29 loading layer e08583daa6d7 3.30kB / 3.30kB\n", - "#29 loading layer 2c4cefc4de42 313B / 313B 1.4s done\n", - "#29 loading layer a292666cef7b 32.77kB / 125.57kB 4.5s done\n", - "#29 loading layer 23d575e38e71 71.86MB / 73.97MB 4.4s done\n", - "#29 loading layer 601aae96dba4 196.61kB / 17.81MB 1.8s done\n", - "#29 loading layer 8973e59624ba 492B / 492B 1.5s done\n", - "#29 loading layer 450f1c5db7b9 301B / 301B 1.4s done\n", - "#29 loading layer e08583daa6d7 3.30kB / 3.30kB 1.3s done\n", - "#29 DONE 4.5s\n", + "#29 loading layer 414c50de1c1c 557.06kB / 2.97GB\n", + "#29 loading layer 414c50de1c1c 103.06MB / 2.97GB 6.1s\n", + "#29 loading layer 414c50de1c1c 325.88MB / 2.97GB 10.2s\n", + "#29 loading layer 414c50de1c1c 520.85MB / 2.97GB 14.3s\n", + "#29 loading layer 414c50de1c1c 719.72MB / 2.97GB 18.4s\n", + "#29 loading layer 414c50de1c1c 903.54MB / 2.97GB 22.5s\n", + "#29 loading layer 414c50de1c1c 1.11GB / 2.97GB 26.6s\n", + "#29 loading layer 414c50de1c1c 1.36GB / 2.97GB 30.7s\n", + "#29 loading layer 414c50de1c1c 1.56GB / 2.97GB 34.9s\n", + "#29 loading layer 414c50de1c1c 1.81GB / 2.97GB 38.9s\n", + "#29 loading layer 414c50de1c1c 1.97GB / 2.97GB 43.1s\n", + "#29 loading layer 414c50de1c1c 2.04GB / 2.97GB 50.1s\n", + "#29 loading layer 414c50de1c1c 2.17GB / 2.97GB 56.4s\n", + "#29 loading layer 414c50de1c1c 2.42GB / 2.97GB 62.5s\n", + "#29 loading layer 414c50de1c1c 2.63GB / 2.97GB 66.6s\n", + "#29 loading layer 414c50de1c1c 2.79GB / 2.97GB 70.7s\n", + "#29 loading layer 2d2337d002b1 32.77kB / 125.83kB\n", + "#29 loading layer 05a9e332a339 557.06kB / 67.35MB\n", + "#29 loading layer 05a9e332a339 59.60MB / 67.35MB 2.1s\n", + "#29 loading layer b466f5b35107 196.61kB / 17.81MB\n", + "#29 loading layer 66a2f54a1b71 493B / 493B\n", + "#29 loading layer 9b5da571c07c 316B / 316B\n", + "#29 loading layer 69c6b6426338 301B / 301B\n", + "#29 loading layer bfe49db5ef06 3.33kB / 3.33kB\n", + "#29 loading layer b466f5b35107 196.61kB / 17.81MB 5.1s done\n", + "#29 loading layer 414c50de1c1c 2.90GB / 2.97GB 85.2s done\n", + "#29 loading layer 2d2337d002b1 32.77kB / 125.83kB 8.8s done\n", + "#29 loading layer 05a9e332a339 59.60MB / 67.35MB 8.7s done\n", + "#29 loading layer 66a2f54a1b71 493B / 493B 3.4s done\n", + "#29 loading layer 9b5da571c07c 316B / 316B 2.7s done\n", + "#29 loading layer 69c6b6426338 301B / 301B 2.0s done\n", + "#29 loading layer bfe49db5ef06 3.33kB / 3.33kB 1.3s done\n", + "#29 DONE 85.2s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 67.2s done\n", - "#28 DONE 73.2s\n", + "#28 sending tarball 146.6s done\n", + "#28 DONE 307.9s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", - "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015\n", "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", + "#30 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", + "#30 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", - "#30 writing layer sha256:0bf3a16e4f3f9ec99796b99e331a5c62472bc9377925e1fdc05f64709ed09895 0.0s done\n", "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#30 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", - "#30 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", - "#30 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", - "#30 writing layer sha256:183aa7032b52e859f5de3dac98da7c8398ed5f8a984d74865561f126c0eecef2 0.0s done\n", + "#30 writing layer sha256:121c2168995bf46d9888919d105fe5a0d03a3640ee73ed00c9081e10794e7c58 0.0s done\n", + "#30 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", + "#30 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#30 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", + "#30 writing layer sha256:229f01f9a7c2d258af634b5b41c5f5b2998c54c7557b3e3cfec465152ebb0c8b\n", + "#30 writing layer sha256:229f01f9a7c2d258af634b5b41c5f5b2998c54c7557b3e3cfec465152ebb0c8b 0.4s done\n", + "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0\n", "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#30 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", + "#30 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", + "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#30 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", - "#30 writing layer sha256:4482079b5d33963eb55191bf404b70095535d4a8e2b64dab7373500515f896b4\n", - "#30 writing layer sha256:4482079b5d33963eb55191bf404b70095535d4a8e2b64dab7373500515f896b4 0.4s done\n", - "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950\n", "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", + "#30 writing layer sha256:4d6542f3a7f5dc637e92c4ce4f54ad7edbfc4fcf629380921a76a1eaaa042085 0.0s done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", - "#30 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", - "#30 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#30 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#30 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", - "#30 writing layer sha256:5ea668ffc2fc267d241dbf17ca283bc879643a189be4f7e3d9034a82fc64a1ea done\n", + "#30 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", + "#30 writing layer sha256:6545b2e110c927b4bf5b0cfdb2ae791686a503dd32470362873ccb4375dcc13c\n", + "#30 writing layer sha256:6545b2e110c927b4bf5b0cfdb2ae791686a503dd32470362873ccb4375dcc13c 1.5s done\n", + "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230\n", "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#30 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", - "#30 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", - "#30 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", - "#30 writing layer sha256:6e80a527af94a864094c4f9116c2d29d3d7548ec8388579d9cf3f8a39a4b8178\n", - "#30 writing layer sha256:6e80a527af94a864094c4f9116c2d29d3d7548ec8388579d9cf3f8a39a4b8178 1.3s done\n", - "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7\n", - "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#30 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", + "#30 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", + "#30 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#30 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", - "#30 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", - "#30 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#30 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", + "#30 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", + "#30 writing layer sha256:80baedfe7e90864fa675693451fc0755b31995ecc8575aeaf4e4366d5634af45 done\n", "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", + "#30 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", + "#30 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", + "#30 writing layer sha256:8ca81d63d0fea573e7b16da41370b55162415a5c07feac92012b101b79f8d5ae done\n", + "#30 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#30 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", + "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", + "#30 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#30 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#30 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#30 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", + "#30 writing layer sha256:a3c41b99822f620cfd6e42b3b0760c1fa99ebb77782013146ff5531da4f4064b 0.0s done\n", "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", + "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#30 writing layer sha256:bc42865e1c27a9b1bee751f3c99ad2c12a906d32aca396ace7a07231c9cafbd1 done\n", - "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", - "#30 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#30 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", + "#30 writing layer sha256:c5d17b776c61f416be379c9d1049e897e197b748dda4284d991324b18fc6c9df 0.0s done\n", + "#30 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#30 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", - "#30 writing layer sha256:d6b5d6e098aacb316146a428c6b5aef9692011c6dce0932e3bbfbf27a514b7ed done\n", "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#30 writing layer sha256:e4297ff4df6f7a8f25cb109e5b24483c314c2e72b8e824f9669173919fc159c9 0.0s done\n", - "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", - "#30 writing layer sha256:e5d9fee7e7dacd6052fe7c78ac5738f1fb693aa068f7c6064c70e98941288a52 0.0s done\n", - "#30 writing layer sha256:e8640a108802cd7519cc53dceb74f7a5c94b562662f1c3c040c2aa6571acf0f3 0.0s done\n", - "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f\n", - "#30 preparing build cache for export 2.5s done\n", + "#30 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", + "#30 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", + "#30 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#30 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#30 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#30 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", - "#30 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", - "#30 writing config sha256:386c66fca187580548b7c0d95c25fecfb72f326f30df509c9860b977d7e32763 0.0s done\n", - "#30 writing cache manifest sha256:ebd62b21fd87e8654814f8093dffbbf555dced752810b2798c59b2b1a08ce0fd 0.0s done\n", - "#30 DONE 2.5s\n", - "[2024-04-10 15:05:33,378] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", + "#30 writing layer sha256:fbfd4de480c7037f0604cf64cef29e59cfb27193b257d66d110ff82ec6fc6715\n", + "#30 writing layer sha256:fbfd4de480c7037f0604cf64cef29e59cfb27193b257d66d110ff82ec6fc6715 47.3s done\n", + "#30 writing layer sha256:fcb10e9f191b92679f1cac7623b152400f374a3e3d90f3d2248bfced02b6bdca\n", + "#30 preparing build cache for export 50.0s done\n", + "#30 writing layer sha256:fcb10e9f191b92679f1cac7623b152400f374a3e3d90f3d2248bfced02b6bdca 0.0s done\n", + "#30 writing config sha256:1af23d9bb67b68807f26cc256ea0ba50bba21a62a52cdfab0bc82567fef2a35e 0.0s done\n", + "#30 writing cache manifest sha256:3e6252fe3fb73d49377342ccff9ce009489fdd34a8709b3c2e0e2c2cd1a54372 0.0s done\n", + "#30 DONE 50.0s\n", + "[2024-04-23 17:00:27,074] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1579,14 +1758,14 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 66, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 d6463325d664 About a minute ago 17.5GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 4fe495cf55e1 5 minutes ago 17.9GB\n" ] } ], @@ -1608,7 +1787,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 67, "metadata": {}, "outputs": [ { @@ -1668,16 +1847,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2024-04-10 22:05:37 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2024-04-24 00:00:30 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2024-04-10 22:05:37 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2024-04-10 22:05:37 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2024-04-10 22:05:37 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2024-04-24 00:00:30 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2024-04-24 00:00:30 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2024-04-24 00:00:30 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2024-04-10 22:05:37 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2024-04-24 00:00:30 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2024-04-10 22:05:37 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2024-04-10 22:05:37 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2024-04-24 00:00:30 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2024-04-24 00:00:30 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -1702,29 +1881,29 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 68, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 15:05:39,448] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-10 15:05:39,448] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-23 17:00:31,900] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-23 17:00:31,900] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-10 15:05:39,449] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-23 17:00:31,901] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-10 15:05:39,449] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-23 17:00:31,901] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-10 15:05:39,511] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpba1clh6t/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpba1clh6t/pkg.json\n", - "[2024-04-10 15:05:39,743] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-23 17:00:31,971] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpxev2hpxc/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpxev2hpxc/pkg.json\n", + "[2024-04-23 17:00:32,215] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-10 15:05:39,744] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2024-04-23 17:00:32,216] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-10 15:05:40,086] [INFO] (common) - Launching container (1d77a7676232) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: festive_hermann\n", + "[2024-04-23 17:00:32,528] [INFO] (common) - Launching container (6ffaea9917bd) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: fervent_bell\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1734,141 +1913,101 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-10 22:05:40 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2024-04-24 00:00:33 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2024-04-10 22:05:45,192] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2024-04-24 00:00:36,780] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2024-04-10 22:05:45,195] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2024-04-24 00:00:36,783] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2024-04-10 22:05:45,197] [INFO] (root) - End compose\n", + "[2024-04-24 00:00:36,784] [INFO] (root) - End compose\n", "\n", "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:247] Creating context\n", "\n", "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "\u001b[0m2024-04-24 00:00:36.818 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 8 entities\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", "\n", - "[info] [greedy_scheduler.cpp:190] Scheduling 8 entities\n", + "[2024-04-24 00:00:36,819] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2024-04-10 22:05:45,297] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2024-04-10 22:05:46,131] [INFO] (root) - Finding series for Selection named: CT Series\n", - "\n", - "[2024-04-10 22:05:46,131] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2024-04-10 22:05:46,131] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "\n", - "[2024-04-10 22:05:46,131] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "\n", - "[2024-04-10 22:05:46,131] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "\n", - "[2024-04-10 22:05:46,131] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "\n", - "[2024-04-10 22:05:46,131] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "\n", - "[2024-04-10 22:05:46,131] [INFO] (root) - Series attribute Modality value: CT\n", - "\n", - "[2024-04-10 22:05:46,132] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "\n", - "[2024-04-10 22:05:46,132] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "\n", - "[2024-04-10 22:05:46,132] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "\n", - "[2024-04-10 22:05:46,132] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "\n", - "[2024-04-10 22:05:46,132] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-10 22:05:46,349] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-10 22:05:49,959] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2024-04-10 22:05:51,433] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-10 22:05:51,433] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "Exception occurred in compute method of operator: 'stl_conversion_op'\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "Traceback (most recent call last):\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 118, in compute\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - " stl_bytes = self._convert(input_image, _output_file)\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 135, in _convert\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - " return self._converter.convert(\n", + "[2024-04-24 00:00:37,735] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 182, in convert\n", + "[2024-04-24 00:00:38,147] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", "\n", - " nda = STLConverter.get_largest_cc(nda)\n", + "[2024-04-24 00:00:41,393] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", "\n", - " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/operators/stl_conversion_operator.py\", line 255, in get_largest_cc\n", + "[2024-04-24 00:00:43,045] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", "\n", - " labels = label(nda)\n", - "\n", - " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/utils/importutil.py\", line 274, in __call__\n", - "\n", - " raise self._exception\n", - "\n", - " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/utils/importutil.py\", line 226, in optional_import\n", - "\n", - " pkg = __import__(module) # top level module\n", - "\n", - "monai.deploy.utils.importutil.OptionalImportError: from skimage.measure import label (No module named 'skimage').\n", - "\n", - "\n", - "\n", - "For details about installing the optional dependencies, please visit:\n", - "\n", - " https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies\n", + "[2024-04-24 00:00:43,045] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " warnings.warn(\n", "\n", - "[2024-04-10 22:05:52,708] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2024-04-10 22:05:52,708] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 22:05:52,708] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2024-04-10 22:05:52,708] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 22:05:52,709] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2024-04-10 22:05:52,709] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2024-04-10 22:05:52,709] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 22:05:52,709] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2024-04-10 22:05:52,709] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-24 00:00:53,818] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[2024-04-24 00:00:53,818] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", + "\u001b[0m2024-04-24 00:00:53.906 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "\u001b[0m2024-04-24 00:00:53.908 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", "\n", - "[2024-04-10 22:05:52,805] [INFO] (app.AISpleenSegApp) - End run\n", + "[2024-04-24 00:00:53,915] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[2024-04-10 15:05:54,069] [INFO] (common) - Container 'festive_hermann'(1d77a7676232) exited.\n" + "[2024-04-23 17:00:55,176] [INFO] (common) - Container 'fervent_bell'(6ffaea9917bd) exited.\n" ] } ], @@ -1880,14 +2019,14 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 69, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.33232544284800485207819891596585914.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.91573472497917482579554686696126426.dcm stl\n" ] } ], diff --git a/notebooks/tutorials/05_multi_model_app.ipynb b/notebooks/tutorials/05_multi_model_app.ipynb index 2b505888..4052ff8e 100644 --- a/notebooks/tutorials/05_multi_model_app.ipynb +++ b/notebooks/tutorials/05_multi_model_app.ipynb @@ -177,21 +177,18 @@ "text": [ "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.3)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.28.2)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.4)\n", + "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.6)\n", - "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.26.18)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.2.1)\n", "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "Downloading...\n", "From (original): https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd\n", - "From (redirected): https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd&confirm=t&uuid=63a55326-90b2-463a-9bdc-a115a7336f1c\n", + "From (redirected): https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd&confirm=t&uuid=7d1b1592-17f3-4232-9d3b-02bf8cd726be\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_multi_model_bundle_data.zip\n", "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 647M/647M [00:06<00:00, 105MB/s]\n", "Archive: ai_multi_model_bundle_data.zip\n", @@ -747,59 +744,75 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-10 15:07:47,589] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-10 15:07:47,599] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2024-04-10 15:07:47,604] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:211] Creating context\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[info] [greedy_scheduler.cpp:190] Scheduling 9 entities\n", - "[2024-04-10 15:07:47,665] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-10 15:07:48,220] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-10 15:07:48,221] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-23 16:11:04,518] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2024-04-23 16:11:04,535] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", + "[2024-04-23 16:11:04,542] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:247] Creating context\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", + "[2024-04-23 16:11:04,579] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m2024-04-23 16:11:04.577 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 9 entities\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2024-04-23 16:11:05,124] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-23 16:11:05,125] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-10 15:07:48,222] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 15:07:48,223] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-10 15:07:48,224] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-10 15:07:48,227] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:07:48,228] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-10 15:07:48,228] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-10 15:07:48,229] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:07:48,230] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-10 15:07:48,231] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-10 15:07:48,232] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:07:48,233] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 15:07:48,452] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", - "[2024-04-10 15:09:28,757] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "[2024-04-23 16:11:05,126] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 16:11:05,128] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-23 16:11:05,129] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-23 16:11:05,130] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:11:05,131] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-23 16:11:05,132] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-23 16:11:05,134] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:11:05,136] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-23 16:11:05,136] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-23 16:11:05,137] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:11:05,137] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 16:11:05,373] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2024-04-23 16:12:44,188] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2024-04-10 15:09:34,244] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:09:34,246] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-10 15:09:34,247] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:09:34,248] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-10 15:09:34,249] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-10 15:09:34,250] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:09:34,251] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-10 15:09:34,252] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-10 15:09:34,253] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2024-04-10 15:09:35,375] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:09:35,377] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-10 15:09:35,377] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:09:35,378] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-10 15:09:35,380] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-10 15:09:35,381] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:09:35,382] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-10 15:09:35,383] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-10 15:09:35,384] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[2024-04-10 15:09:35,488] [INFO] (__main__.App) - End run\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n" + "[2024-04-23 16:12:49,664] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:12:49,665] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 16:12:49,666] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:12:49,667] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 16:12:49,669] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 16:12:49,670] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:12:49,672] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 16:12:49,673] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 16:12:49,675] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-23 16:12:50,843] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:12:50,844] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 16:12:50,845] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:12:50,846] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 16:12:50,847] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 16:12:50,848] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:12:50,849] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 16:12:50,850] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 16:12:50,852] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[2024-04-23 16:12:50,954] [INFO] (__main__.App) - End run\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m2024-04-23 16:12:50.952 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 16:12:50.952 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" ] } ], @@ -1171,59 +1184,57 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 15:09:40,274] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2024-04-10 15:09:40,282] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2024-04-10 15:09:40,284] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:211] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1674] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1864] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1894] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1896] Waiting for completion...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:190] Scheduling 9 entities\n", - "[2024-04-10 15:09:40,321] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-23 16:12:55,648] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2024-04-23 16:12:55,653] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", + "[2024-04-23 16:12:55,655] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", + "\u001b[0m2024-04-23 16:12:55.684 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 9 entities\u001b[0m\n", + "[2024-04-23 16:12:55,685] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-23 16:12:56,030] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2024-04-23 16:12:56,030] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-10 15:09:40,657] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-10 15:09:41,061] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", - "[2024-04-10 15:11:19,819] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "[2024-04-23 16:12:56,030] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 16:12:56,030] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-23 16:12:56,030] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-23 16:12:56,030] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:12:56,031] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-23 16:12:56,031] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-23 16:12:56,031] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:12:56,031] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-23 16:12:56,031] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-23 16:12:56,031] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 16:12:56,031] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 16:12:56,243] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2024-04-23 16:14:36,645] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " warnings.warn(\n", - "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:11:25,386] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-10 15:11:25,387] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-10 15:11:25,387] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-10 15:11:26,671] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-10 15:11:26,672] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-10 15:11:26,672] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-10 15:11:26,672] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:398] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1907] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", - "[2024-04-10 15:11:26,772] [INFO] (app.App) - End run\n" + "[2024-04-23 16:14:42,011] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:14:42,011] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 16:14:42,011] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:14:42,011] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 16:14:42,012] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 16:14:42,012] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:14:42,012] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 16:14:42,012] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 16:14:42,012] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-23 16:14:43,063] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:14:43,063] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 16:14:43,065] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "\u001b[0m2024-04-23 16:14:43.154 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2024-04-23 16:14:43.155 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[2024-04-23 16:14:43,155] [INFO] (app.App) - End run\n" ] } ], @@ -1241,8 +1252,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.15046048574363662193759299900270199.dcm\n", - "1.2.826.0.1.3680043.10.511.3.98214024482046978965335342071467925.dcm\n" + "1.2.826.0.1.3680043.10.511.3.10288134553125230635901121822410318.dcm\n", + "1.2.826.0.1.3680043.10.511.3.96971936458025058184826371322949123.dcm\n" ] } ], @@ -1342,15 +1353,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 15:11:29,127] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2024-04-10 15:11:29,127] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2024-04-10 15:11:29,127] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", - "[2024-04-10 15:11:29,127] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", - "[2024-04-10 15:11:29,127] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", - "[2024-04-10 15:11:29,127] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2024-04-10 15:11:29,128] [INFO] (packager) - Generating app.json...\n", - "[2024-04-10 15:11:29,129] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-10 15:11:29,133] [DEBUG] (common) - \n", + "[2024-04-23 16:14:45,501] [INFO] (common) - Downloading CLI manifest file...\n", + "[2024-04-23 16:14:45,792] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2024-04-23 16:14:45,794] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2024-04-23 16:14:45,795] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2024-04-23 16:14:45,795] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", + "[2024-04-23 16:14:45,795] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", + "[2024-04-23 16:14:45,795] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", + "[2024-04-23 16:14:45,796] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2024-04-23 16:14:45,799] [INFO] (packager) - Generating app.json...\n", + "[2024-04-23 16:14:45,799] [INFO] (packager) - Generating pkg.json...\n", + "[2024-04-23 16:14:45,809] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1385,7 +1398,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2024-04-10 15:11:29,134] [DEBUG] (common) - \n", + "[2024-04-23 16:14:45,810] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1406,11 +1419,11 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-10 15:11:29,632] [DEBUG] (packager.builder) - \n", + "[2024-04-23 16:14:46,274] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", @@ -1426,11 +1439,11 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Multi Model App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"1.0.3\"\n", + "LABEL org.nvidia.holoscan=\"2.0.0\"\n", "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "\n", @@ -1456,7 +1469,6 @@ "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", "\n", "\n", - "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", "RUN chown -R holoscan /var/holoscan \n", @@ -1482,14 +1494,12 @@ "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - "# Install Holoscan from PyPI only when sdk_type is Holoscan. \n", - "# For MONAI Deploy, the APP SDK will install it unless user specifies the Holoscan SDK file.\n", + " \n", + "# MONAI Deploy\n", "\n", "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", - "\n", - "\n", + "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", @@ -1503,223 +1513,226 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-10 15:11:29,632] [INFO] (packager.builder) - \n", + "[2024-04-23 16:14:46,274] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 1.0.3\n", + " SDK Version: 2.0.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " \n", - "[2024-04-10 15:11:29,935] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-10 15:11:29,936] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2024-04-23 16:14:46,562] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2024-04-23 16:14:46,562] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.79kB done\n", - "#1 DONE 0.1s\n", + "#1 transferring dockerfile: 2.65kB done\n", + "#1 DONE 0.0s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", - "#2 DONE 0.1s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + "#2 DONE 0.4s\n", "\n", "#3 [internal] load .dockerignore\n", "#3 transferring context: 1.79kB done\n", - "#3 DONE 0.1s\n", + "#3 DONE 0.0s\n", "\n", "#4 [internal] load build context\n", "#4 DONE 0.0s\n", "\n", - "#5 importing cache manifest from local:3229340695933661696\n", + "#5 importing cache manifest from local:13557986215550987099\n", "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu@sha256:50343c616bf910e2a7651abb59db7833933e82cce64c3c4885f938d7e4af6155 0.0s done\n", - "#6 DONE 0.1s\n", + "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", + "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.0s done\n", + "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v1.0.3-dgpu\n", + "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#7 DONE 0.6s\n", + "#7 DONE 0.4s\n", "\n", "#4 [internal] load build context\n", "#4 transferring context: 636.05MB 3.2s done\n", "#4 DONE 3.2s\n", "\n", - "#8 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#8 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", "#8 CACHED\n", "\n", "#9 [ 6/21] RUN chown -R holoscan /var/holoscan\n", "#9 CACHED\n", "\n", - "#10 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#10 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#10 CACHED\n", "\n", - "#11 [10/21] COPY ./tools /var/holoscan/tools\n", + "#11 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", "#11 CACHED\n", "\n", - "#12 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#12 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", "#12 CACHED\n", "\n", - "#13 [ 9/21] WORKDIR /var/holoscan\n", + "#13 [11/21] RUN chmod +x /var/holoscan/tools\n", "#13 CACHED\n", "\n", - "#14 [13/21] RUN pip install --upgrade pip\n", + "#14 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#14 CACHED\n", "\n", - "#15 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#15 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", "#15 CACHED\n", "\n", - "#16 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", + "#16 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#16 CACHED\n", "\n", - "#17 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#17 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", "#17 CACHED\n", "\n", - "#18 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#18 [ 9/21] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#19 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#19 CACHED\n", "\n", - "#20 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#20 [10/21] COPY ./tools /var/holoscan/tools\n", "#20 CACHED\n", "\n", - "#21 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", + "#21 [13/21] RUN pip install --upgrade pip\n", "#21 CACHED\n", "\n", - "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+25.g31e4165.dirty-py3-none-any.whl\n", + "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", "#22 CACHED\n", "\n", "#23 [17/21] COPY ./models /opt/holoscan/models\n", - "#23 DONE 6.7s\n", + "#23 DONE 3.9s\n", "\n", "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", + "#24 DONE 0.0s\n", "\n", "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", - "#25 DONE 0.1s\n", + "#25 DONE 0.0s\n", "\n", "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#26 DONE 0.1s\n", + "#26 DONE 0.0s\n", "\n", "#27 [21/21] COPY ./app /opt/holoscan/app\n", - "#27 DONE 0.2s\n", + "#27 DONE 0.0s\n", "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 20.5s done\n", - "#28 exporting manifest sha256:e77308187dcf97394b99101aa895bea8c1e7dc92572bedddb310476c65f828ab 0.0s done\n", - "#28 exporting config sha256:f820210cdcfe0c41a2791dcced8072f2413aa1f6f2b1076134249d6abc400141 0.0s done\n", + "#28 exporting layers 17.8s done\n", + "#28 exporting manifest sha256:26808437a116257ae2799583b42bbf04923e1157f8f98341c3403ee35eb234bf 0.0s done\n", + "#28 exporting config sha256:95614919d60e7f30ab5d64a25a5fc25ad64d0b166046c60549b5abae2745be7c 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer 0b7c827957f8 557.06kB / 584.49MB\n", - "#29 loading layer 0b7c827957f8 150.96MB / 584.49MB 2.1s\n", - "#29 loading layer 0b7c827957f8 305.82MB / 584.49MB 4.2s\n", - "#29 loading layer 0b7c827957f8 492.99MB / 584.49MB 6.3s\n", - "#29 loading layer 0f7d49f89e9c 492B / 492B\n", - "#29 loading layer 98aed7487fb0 312B / 312B\n", - "#29 loading layer 972f8aa128ec 322B / 322B\n", - "#29 loading layer db9d1b5a3f36 4.00kB / 4.00kB\n", - "#29 loading layer db9d1b5a3f36 4.00kB / 4.00kB 1.2s done\n", - "#29 loading layer 0b7c827957f8 492.99MB / 584.49MB 9.4s done\n", - "#29 loading layer 0f7d49f89e9c 492B / 492B 1.4s done\n", - "#29 loading layer 98aed7487fb0 312B / 312B 1.3s done\n", - "#29 loading layer 972f8aa128ec 322B / 322B 1.3s done\n", - "#29 DONE 9.4s\n", + "#29 loading layer ecf27683cffd 557.06kB / 584.49MB\n", + "#29 loading layer ecf27683cffd 154.86MB / 584.49MB 2.1s\n", + "#29 loading layer ecf27683cffd 309.72MB / 584.49MB 4.1s\n", + "#29 loading layer ecf27683cffd 464.03MB / 584.49MB 6.2s\n", + "#29 loading layer 3202d6efcdaa 493B / 493B\n", + "#29 loading layer 84f909517c68 311B / 311B\n", + "#29 loading layer 1d1958b729ff 323B / 323B\n", + "#29 loading layer 8f69ecd226c9 4.00kB / 4.00kB\n", + "#29 loading layer 3202d6efcdaa 493B / 493B 2.6s done\n", + "#29 loading layer ecf27683cffd 464.03MB / 584.49MB 10.6s done\n", + "#29 loading layer 84f909517c68 311B / 311B 2.2s done\n", + "#29 loading layer 1d1958b729ff 323B / 323B 1.8s done\n", + "#29 loading layer 8f69ecd226c9 4.00kB / 4.00kB 1.5s done\n", + "#29 DONE 10.6s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 79.2s done\n", - "#28 DONE 99.9s\n", + "#28 sending tarball 72.8s done\n", + "#28 DONE 90.7s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4\n", - "#30 writing layer sha256:00bb4c1319ba1a33ac3edcb3aa1240d8abcb8d0383c6267ed8028d3b6228a8a4 done\n", + "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015\n", "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", - "#30 writing layer sha256:021b9bc7b766e946a42d4bf0d3f88658998d36cf2fa5f182af98d925b3d44f4f 0.0s done\n", + "#30 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", + "#30 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", - "#30 writing layer sha256:0bf3a16e4f3f9ec99796b99e331a5c62472bc9377925e1fdc05f64709ed09895 done\n", + "#30 writing layer sha256:0cbe3b20b9b7d01bcb9770de54ba9a54febb401dc371bbb1d8debf1f9850b356 0.0s done\n", "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#30 writing layer sha256:1133dfcee0e851b490d17b3567f50c4b25ba5750da02ba4b3f3630655d0b1a7b done\n", - "#30 writing layer sha256:1294b2835667d633f938174d9fecb18a60bbbebb6fb49788a1f939893a25d1af done\n", - "#30 writing layer sha256:16a03c6e0373b62f9713416da0229bb7ce2585183141081d3ea8427ad2e84408 done\n", + "#30 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", + "#30 writing layer sha256:1f4a978bb76db2d138cfe7c7c9e76db4096247b06e34d349a2ed504bcd6a7ead done\n", + "#30 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#30 writing layer sha256:2232aeb26b5b7ea57227e9a5b84da4fb229624d7bc976a5f7ce86d9c8653d277 done\n", + "#30 writing layer sha256:20e14f0a8ca68167afb8296c10d7a1b4c3b17b54681cbf3b9b45e1be96afa699 done\n", "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", + "#30 writing layer sha256:255cc51d2e47738a5db3059cbe9f403785cf9496c7df8a28a3c9f0c46a0b3b58 done\n", + "#30 writing layer sha256:29eb21ed7ba7894cd28ee75b082877845b969c6e65d34a16b7dbd8630c38f5fe\n", + "#30 writing layer sha256:29eb21ed7ba7894cd28ee75b082877845b969c6e65d34a16b7dbd8630c38f5fe 10.2s done\n", + "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7\n", "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#30 writing layer sha256:2bb73464628bd4a136c4937f42d522c847bea86b2215ae734949e24c1caf450e done\n", - "#30 writing layer sha256:3a663fdf00962d807df49af4b54ad7382e7d0b0c65355a78d706ee221758e691\n", - "#30 writing layer sha256:3a663fdf00962d807df49af4b54ad7382e7d0b0c65355a78d706ee221758e691 11.2s done\n", - "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517\n", + "#30 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", + "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#30 writing layer sha256:43a21fb6c76bd2b3715cc09d9f8c3865dc61c51dd9e2327b429f5bec8fff85d1 done\n", "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:5275a41be8f6691a490c0a15589e0910c73bf971169ad33a850ef570d37f63dd done\n", - "#30 writing layer sha256:52fbfeaf78318d843054ce2bfb5bfc9f71278939a815f6035ab5b14573ad017b done\n", - "#30 writing layer sha256:5792b18b6f162bae61ff5840cdb9e8567e6847a56ac886f940b47e7271c529a7 done\n", + "#30 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#30 writing layer sha256:5ccb787d371fd3697122101438ddd0f55b537832e9756d2c51ab1d8158710ac5 done\n", - "#30 writing layer sha256:5ea668ffc2fc267d241dbf17ca283bc879643a189be4f7e3d9034a82fc64a1ea done\n", + "#30 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", - "#30 writing layer sha256:6399aeba5e066098b3fac85e23e402cd10f0c5d0f06107595840b9f7259f9b40 0.0s done\n", "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#30 writing layer sha256:69af4b756272a77f683a8d118fd5ca55c03ad5f1bacc673b463f54d16b833da5 done\n", - "#30 writing layer sha256:6ae1f1fb92c0cb2b6e219f687b08c8e511501a7af696c943ca20d119eba7cd02 done\n", - "#30 writing layer sha256:6deb3d550b15a5e099c0b3d0cbc242e351722ca16c058d3a6c28ba1a02824d0f done\n", - "#30 writing layer sha256:6e80a527af94a864094c4f9116c2d29d3d7548ec8388579d9cf3f8a39a4b8178 done\n", - "#30 writing layer sha256:7386814d57100e2c7389fbf4e16f140f5c549d31434c62c3884a85a3ee5cd2a7 done\n", + "#30 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", + "#30 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", + "#30 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#30 writing layer sha256:7e73869c74822e4539e104a3d2aff853f4622cd0bb873576db1db53c9e91f621 done\n", - "#30 writing layer sha256:7eae142b38745fe88962874372374deb672998600264a17e638c010b79e6b535 done\n", - "#30 writing layer sha256:7f2e5ab2c599fa36698918d3e73c991d8616fff9037077cd230529e7cd1c5e0e done\n", + "#30 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", + "#30 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", + "#30 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", + "#30 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", + "#30 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", + "#30 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", + "#30 writing layer sha256:92301d1270c19cab329818fb215b41138720ab9b588a2070107860f0b6fb5e11 done\n", + "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", + "#30 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#30 writing layer sha256:a10c8d7d2714eabf661d1f43a1ccb87a51748cbb9094d5bc0b713e2481b5d329 done\n", + "#30 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", + "#30 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", + "#30 writing layer sha256:ac69ec878bf5e3f9294e9726cd393e4133a5ea3934256636de00ddc558f25e55 0.0s done\n", "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", + "#30 writing layer sha256:b12b2b11632995c7c56700227a9c2f2016dab20c083c140a835c551bb2aed460 0.0s done\n", + "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e\n", + "#30 preparing build cache for export 11.6s done\n", + "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#30 writing layer sha256:b49326ff73acef905ddca0e7c2734fb9fa6d21d55c9b25feb30dd3a4aa99a9d9 0.0s done\n", "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#30 writing layer sha256:bc42865e1c27a9b1bee751f3c99ad2c12a906d32aca396ace7a07231c9cafbd1 done\n", - "#30 writing layer sha256:bdfc73b2a0fa11b4086677e117a2f9feb6b4ffeccb23a3d58a30543339607e31 done\n", - "#30 writing layer sha256:c175bb235295e50de2961fa1e1a2235c57e6eba723a914287dfc26d3be0eac11 done\n", + "#30 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", + "#30 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", + "#30 writing layer sha256:c97f7fb19e2e0b8ee3e1065f4dee369e35029cc620cafb7fe3dec2e9e06a3ae0 done\n", "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#30 writing layer sha256:cb6c95b33bc30dd285c5b3cf99a05281b8f12decae1c932ab64bd58f56354021 done\n", - "#30 writing layer sha256:d57848e1e8b61049c64df4a786ec67b44ae3ffc2554b13b92ea4ce57b8686ab9 0.0s done\n", - "#30 writing layer sha256:d6b5d6e098aacb316146a428c6b5aef9692011c6dce0932e3bbfbf27a514b7ed done\n", "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168\n", - "#30 preparing build cache for export 11.8s done\n", - "#30 writing layer sha256:e4aedc686433c0ec5e676e6cc54a164345f7016aa0eb714f00c07e11664a1168 done\n", + "#30 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", + "#30 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", + "#30 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#30 writing layer sha256:f33546e75bf1a7d9dc9e21b9a2c54c9d09b24790ad7a4192a8509002ceb14688 done\n", + "#30 writing layer sha256:e9808a628d8776e25114053fec83adbf9c6dd084ac0c275042fa8b89db830da5 0.0s done\n", + "#30 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#30 writing layer sha256:f7702077ced42a1ee35e7f5e45f72634328ff3bcfe3f57735ba80baa5ec45daf done\n", - "#30 writing layer sha256:fa66a49172c6e821a1bace57c007c01da10cbc61507c44f8cdfeed8c4e5febab done\n", - "#30 writing config sha256:7d69b41abed153db28e437a954cc449f6c78804af5fd43d91d5b0b2b7d7e2b64 0.0s done\n", - "#30 writing cache manifest sha256:bf627b702e1d3cfae1b53eb29f8b0367eca39a3a4e756a966b4b5ee9054360fe 0.0s done\n", - "#30 DONE 11.8s\n", - "[2024-04-10 15:13:34,407] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", + "#30 writing config sha256:bad5d754263c9813832b5d1594a04b9c78a10052ec0a59ade6ee42de1baadb19 0.0s done\n", + "#30 writing cache manifest sha256:62a85925ced740e444a8f19b3c59ade29144854a44168d8786e00e93dbad2f5f 0.0s done\n", + "#30 DONE 11.6s\n", + "[2024-04-23 16:16:38,598] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1750,7 +1763,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 f820210cdcfe About a minute ago 18.1GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 95614919d60e About a minute ago 18.3GB\n" ] } ], @@ -1833,16 +1846,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2024-04-10 22:13:38 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2024-04-23 23:16:41 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2024-04-10 22:13:38 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2024-04-10 22:13:38 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2024-04-10 22:13:38 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2024-04-23 23:16:41 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2024-04-23 23:16:41 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2024-04-23 23:16:41 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2024-04-10 22:13:38 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2024-04-23 23:16:41 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2024-04-10 22:13:39 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2024-04-10 22:13:39 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2024-04-23 23:16:42 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2024-04-23 23:16:42 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -1874,22 +1887,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-10 15:13:42,036] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-10 15:13:42,036] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2024-04-23 16:16:45,664] [INFO] (runner) - Checking dependencies...\n", + "[2024-04-23 16:16:45,664] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-10 15:13:42,036] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2024-04-23 16:16:45,664] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-10 15:13:42,036] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2024-04-23 16:16:45,664] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-10 15:13:42,107] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpor1kfks8/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpor1kfks8/pkg.json\n", - "[2024-04-10 15:13:42,350] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2024-04-23 16:16:45,739] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpymoiz9gd/app.json\n", + "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpymoiz9gd/pkg.json\n", + "[2024-04-23 16:16:46,001] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-10 15:13:42,351] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2024-04-23 16:16:46,002] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-10 15:13:42,710] [INFO] (common) - Launching container (60a9bd0111e6) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: hungry_bassi\n", + "[2024-04-23 16:16:46,316] [INFO] (common) - Launching container (42b411558fd7) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: silly_davinci\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1899,119 +1912,115 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-10 22:13:43 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2024-04-23 23:16:46 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2024-04-10 22:13:46,276] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2024-04-23 23:16:50,090] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2024-04-10 22:13:46,382] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2024-04-23 23:16:50,095] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2024-04-10 22:13:46,384] [INFO] (root) - End compose\n", + "[2024-04-23 23:16:50,097] [INFO] (root) - End compose\n", "\n", "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:211] Creating context\n", + "[info] [gxf_executor.cpp:247] Creating context\n", "\n", "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[info] [gxf_executor.cpp:1674] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:1864] Activating Graph...\n", + "[info] [gxf_executor.cpp:1842] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1894] Running Graph...\n", + "[info] [gxf_executor.cpp:1874] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1896] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1897] Graph execution waiting. Fragment: \n", + "\u001b[0m2024-04-23 23:16:50.129 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 9 entities\u001b[0m\n", "\n", - "[info] [greedy_scheduler.cpp:190] Scheduling 9 entities\n", + "[2024-04-23 23:16:50,131] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2024-04-10 22:13:46,439] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2024-04-23 23:16:50,512] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2024-04-10 22:13:47,210] [INFO] (root) - Finding series for Selection named: CT Series\n", - "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2024-04-23 23:16:50,512] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 23:16:50,512] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2024-04-23 23:16:50,512] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2024-04-23 23:16:50,512] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 23:16:50,512] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2024-04-23 23:16:50,512] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute Modality value: CT\n", + "[2024-04-23 23:16:50,512] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 23:16:50,512] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2024-04-23 23:16:50,513] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2024-04-23 23:16:50,513] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2024-04-23 23:16:50,513] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-10 22:13:47,211] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2024-04-23 23:16:50,513] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-10 22:13:47,444] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", + "[2024-04-23 23:16:50,745] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", "\n", - "[2024-04-10 22:15:33,613] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", + "[2024-04-23 23:18:36,681] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " warnings.warn(\n", "\n", - "[2024-04-10 22:15:37,078] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2024-04-10 22:15:37,078] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 23:18:40,078] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 22:15:37,078] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 23:18:40,078] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2024-04-10 22:15:37,078] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 23:18:40,078] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 22:15:37,079] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 23:18:40,078] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2024-04-10 22:15:37,079] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 23:18:40,078] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2024-04-10 22:15:37,079] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 23:18:40,079] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 22:15:37,079] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 23:18:40,079] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2024-04-10 22:15:37,079] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-23 23:18:40,079] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2024-04-10 22:15:38,307] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 23:18:40,079] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", - "[2024-04-10 22:15:38,307] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 22:15:38,307] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2024-04-10 22:15:38,307] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 22:15:38,308] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2024-04-10 22:15:38,308] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2024-04-10 22:15:38,308] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-10 22:15:38,308] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2024-04-10 22:15:38,308] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[info] [greedy_scheduler.cpp:369] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[2024-04-23 23:18:41,287] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", - "[info] [greedy_scheduler.cpp:398] Scheduler finished.\n", + "\u001b[0m2024-04-23 23:18:41.373 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1906] Graph execution deactivating. Fragment: \n", + "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1907] Deactivating Graph...\n", + "\u001b[0m2024-04-23 23:18:41.377 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1910] Graph execution finished. Fragment: \n", + "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", "\n", - "[2024-04-10 22:15:38,401] [INFO] (app.App) - End run\n", + "[2024-04-23 23:18:41,385] [INFO] (app.App) - End run\n", "\n", - "[2024-04-10 15:15:39,461] [INFO] (common) - Container 'hungry_bassi'(60a9bd0111e6) exited.\n" + "[2024-04-23 16:18:42,406] [INFO] (common) - Container 'silly_davinci'(42b411558fd7) exited.\n" ] } ], @@ -2037,8 +2046,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.77817234108119246236647417839296398.dcm\n", - "1.2.826.0.1.3680043.10.511.3.83680469536583357494244170492806366.dcm\n" + "1.2.826.0.1.3680043.10.511.3.11468162564679998832192298844993783.dcm\n", + "1.2.826.0.1.3680043.10.511.3.22886221740567104559887431846790837.dcm\n" ] } ], diff --git a/requirements-dev.txt b/requirements-dev.txt index 81ac93f5..86c1f983 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -35,4 +35,4 @@ scikit-image>=0.17.2 nibabel>=3.2.1 numpy-stl>=2.12.0 trimesh>=3.8.11 -torch~=2.0.1 +torch>=2.0.1 diff --git a/requirements-examples.txt b/requirements-examples.txt index 1490e6fa..14756af7 100644 --- a/requirements-examples.txt +++ b/requirements-examples.txt @@ -4,10 +4,8 @@ PyPDF2>=2.11.1 highdicom>=0.18.2 SimpleITK>=2.0.0 Pillow>=8.4.0 -numpy-stl>=2.12.0 -trimesh>=3.8.11 nibabel>=3.2.1 numpy-stl>=2.12.0 trimesh>=3.8.11 -torch~=2.0.1 +torch>=2.0.1 monai>=1.0.0 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 9034567c..73a56030 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -holoscan~=1.0 +holoscan~=2.0 numpy>=1.21.6 colorama>=0.4.1 typeguard>=3.0.0 diff --git a/setup.cfg b/setup.cfg index c7e5e227..80a51572 100644 --- a/setup.cfg +++ b/setup.cfg @@ -24,7 +24,7 @@ python_requires = >= 3.8 # cucim install_requires = numpy>=1.21.6 - holoscan~=1.0 + holoscan~=2.0 colorama>=0.4.1 typeguard>=3.0.0 @@ -51,6 +51,8 @@ ignore = B905, # B026 Star-arg unpacking after a keyword argument is strongly discouraged B026 + # B909 editing a loop's mutable iterable often leads to unexpected results/bugs + B909 per_file_ignores = # e.g. F403 'from holoscan.conditions import *' used; unable to detect undefined names From 1a97fc85be79f12d0be7d1f31c62d8d3fc2e256b Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Wed, 24 Apr 2024 17:12:55 -0700 Subject: [PATCH 070/118] V2.0 (#487) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Release note for v2.0.0 Signed-off-by: M Q * Bump version: 1.0.0 β†’ 2.0.0 Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .bumpversion.cfg | 2 +- docs/source/release_notes/index.md | 7 ++++++ docs/source/release_notes/v2.0.0.md | 35 +++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 docs/source/release_notes/v2.0.0.md diff --git a/.bumpversion.cfg b/.bumpversion.cfg index a62a0d6f..646aa46b 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.0.0 +current_version = 2.0.0 parse = (?P\d+)\.(?P\d+)\.(?P\d+)((?Pa|b|rc)(?P\d+))? serialize = {major}.{minor}.{patch}{release}{build} diff --git a/docs/source/release_notes/index.md b/docs/source/release_notes/index.md index 16b62fed..fdb10dfc 100644 --- a/docs/source/release_notes/index.md +++ b/docs/source/release_notes/index.md @@ -4,6 +4,13 @@ :hidden: :maxdepth: 2 +``` +## Version 2.0 + +```{toctree} +:maxdepth: 1 + +v2.0.0 ``` ## Version 1.0 diff --git a/docs/source/release_notes/v2.0.0.md b/docs/source/release_notes/v2.0.0.md new file mode 100644 index 00000000..d38fddf8 --- /dev/null +++ b/docs/source/release_notes/v2.0.0.md @@ -0,0 +1,35 @@ +# Version 1.0.0 (April 2024) + +## What's new in 1.0.0 +App SDK has been migrated to be dependent on [NVIDIA Holoscan SDK](https://developer.nvidia.com/holoscan-sdk) since Version [v0.6](https://github.com/nvidia-holoscan/holoscan-sdk/releases) when breaking changes were introduced in some core class APIs. This version is a simple update of the App SDK to make use of the newly released Holoscan SDK v1.0.3, as well as bug fixes of a few known issues. + +### Key changes and migration guide + +- [CUDA 12](https://developer.nvidia.com/cuda-12-0-0-download-archive) is required along with a supported NVIDIA GPU with at least 8GB of video RAM. If AI inference is not used in the example application and a GPU is not installed, at least [CUDA 12 runtime](https://pypi.org/project/nvidia-cuda-runtime-cu12/) is required, as this is one of the requirements of Holoscan SDK, in addition, the `LIB_LIBRARY_PATH` must be set to include the installed shared library, e.g. in a Python 3.8 env, ```export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH``` +- Ubuntu 22.04 on X86-64 is required, similarly required by Holoscan SDK +- The following is repeated from the V0.6 release note, for readers' convenience. + - In App SDK core module, `monai.deploy.core`, instead of through a wrapper layer, Holoscan SDK core sub modules are all directly imported and exposed under`monai.deploy.core`, mixed in with the ones original to the App SDK. The same also applies to those modules, e.g., `conditions`, `executors`, `graphs`, `logger`, and `resources`. As such, the [Modudle API documentation](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/modules/index.html) may show a mixture of `monai.deploy` and `holoscan`. + + - For `monai.deploy.operators`, Holoscan SDK built-in operators are selectively imported and exposed, with the main reason being to avoid introducing extra dependencies on system packages. All of the original and existing App SDK built-in operators are still present and migrated to be based on Holoscan SDK base `operator` class. + + - Python decorator support for `Application` and `Operator` class is absent in this release, so alternative approaches must be used + - `Operator` input(s) and output(s) now must be defined in the `setup()` method of this class + - `Application` and `Operator` cannot decorate or serve out the resource and package dependencies, which are required when packaging the application into MONAI Application Package. So the application developer must now provide the Python package requirement file and application configuration file when creating a MAP + + - Derived `Operator` class must first assign its attributes before calling the constructor of the base `Operator`. + + - `Application`'s `run()` method can no longer pass the file I/O paths, e.g. `input`, `output`, and `models`, to the execution context of each operator when its `compute()` method is called. For operators depending on them, the I/O paths need to be passed in as arguments in the constructor. + + - App SDK CLI, `monai-deploy`, no longer support `exec` sub-command. However, when directly running the application with Python, command line options for `--input`, `--output`, and `--model`, are supported if the application make use of the `Application`'s class method, `init_app_context(argv)`. + + - App SDK CLI packaging command, `monai-deploy package`, requires additional command line parameters, namely, application configuration yaml file, Python requirements file, and the platform configuration (as it supports both x86-64 and ARMv8 AArch64 targets). Details can be found in the tutorials and Users Guide. + + +Please also see the closed issues on Github and the closed pull requests on Github. + +## Additional information +Please visit [GETTING STARTED](/getting_started/index) guide and follow the tutorials. + +You can learn more about SDK usage through [DEVELOPING WITH SDK](/developing_with_sdk/index). + +Please let us know how you like it and what could be improved by [submitting an issue](https://github.com/Project-MONAI/monai-deploy-app-sdk/issues/new/choose) or [asking questions](https://github.com/Project-MONAI/monai-deploy-app-sdk/discussions) \ No newline at end of file From 13c64c079dfd8e4cb441d469127528df6dac8c5a Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Wed, 24 Apr 2024 18:51:16 -0700 Subject: [PATCH 071/118] Changes to v2 release did not get saved (#488) Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/source/release_notes/v2.0.0.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/source/release_notes/v2.0.0.md b/docs/source/release_notes/v2.0.0.md index d38fddf8..c3e23e9c 100644 --- a/docs/source/release_notes/v2.0.0.md +++ b/docs/source/release_notes/v2.0.0.md @@ -1,7 +1,9 @@ -# Version 1.0.0 (April 2024) +# Version 2.0.0 (April 24th, 2024) -## What's new in 1.0.0 -App SDK has been migrated to be dependent on [NVIDIA Holoscan SDK](https://developer.nvidia.com/holoscan-sdk) since Version [v0.6](https://github.com/nvidia-holoscan/holoscan-sdk/releases) when breaking changes were introduced in some core class APIs. This version is a simple update of the App SDK to make use of the newly released Holoscan SDK v1.0.3, as well as bug fixes of a few known issues. +## What's new in 2.0.0 +App SDK had been migrated to be dependent on [NVIDIA Holoscan SDK](https://developer.nvidia.com/holoscan-sdk) since Version [v0.6](https://github.com/nvidia-holoscan/holoscan-sdk/releases) when breaking changes were introduced in some core class APIs. + +This version of the App SDK is compatible with the newly released [Holoscan SDK v2.0.0](https://pypi.org/project/holoscan/2.0.0/), and is expected to be so with future minor releases of Holoscan SDK v2. ### Key changes and migration guide From 08de15568614142436cf491fddf3ad6de90a9f81 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Wed, 5 Jun 2024 13:33:26 -0700 Subject: [PATCH 072/118] Fix breast density example application to make it work with SDK v0.6+ (#491) * Fix this example application to make it work with SDK v0.6+ Signed-off-by: M Q * Fix the example app errors and corrected folder name Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .../breast_density_classifer_app/README.md | 29 ------------------- .../breast_density_classifier_app/README.md | 23 +++++++++++++++ .../__init__.py | 0 .../__main__.py | 0 .../app.py | 4 ++- .../breast_density_classifier_app/app.yaml | 27 +++++++++++++++++ .../breast_density_classifier_operator.py | 9 +++--- .../requirements.txt | 4 +++ 8 files changed, 62 insertions(+), 34 deletions(-) delete mode 100644 examples/apps/breast_density_classifer_app/README.md create mode 100644 examples/apps/breast_density_classifier_app/README.md rename examples/apps/{breast_density_classifer_app => breast_density_classifier_app}/__init__.py (100%) rename examples/apps/{breast_density_classifer_app => breast_density_classifier_app}/__main__.py (100%) rename examples/apps/{breast_density_classifer_app => breast_density_classifier_app}/app.py (96%) create mode 100644 examples/apps/breast_density_classifier_app/app.yaml rename examples/apps/{breast_density_classifer_app => breast_density_classifier_app}/breast_density_classifier_operator.py (96%) create mode 100644 examples/apps/breast_density_classifier_app/requirements.txt diff --git a/examples/apps/breast_density_classifer_app/README.md b/examples/apps/breast_density_classifer_app/README.md deleted file mode 100644 index b488908b..00000000 --- a/examples/apps/breast_density_classifer_app/README.md +++ /dev/null @@ -1,29 +0,0 @@ -## A MONAI Application Package to deploy breast density classification algorithm -This MAP is based on the Breast Density Model in MONAI [Model-Zoo](https://github.com/Project-MONAI/model-zoo). This model is developed at the Center for Augmented Intelligence in Imaging at the Mayo Clinic, Florida. -For any questions, feel free to contact Vikash Gupta (gupta.vikash@mayo.edu) -Sample data and a torchscript model can be downloaded from https://drive.google.com/drive/folders/1Dryozl2MwNunpsGaFPVoaKBLkNbVM3Hu?usp=sharing - - -## Run the application package -### Python CLI -``` -python app.py -i -o -m -``` - -### MONAI Deploy CLI -``` -monai-deploy exec app.py -i -o -m -``` -Alternatively, you can go a level higher and execute -``` -monai-deploy exec breast_density_classification_app -i -o -m -``` - - -### Packaging the monai app -In order to build the monai app, Go a level up and execute the following command. -``` -monai-deploy package -b nvcr.io/nvidia/pytorch:21.12-py3 breast_density_classification_app --tag breast_density:0.1.0 -m $breast_density_model -``` - - diff --git a/examples/apps/breast_density_classifier_app/README.md b/examples/apps/breast_density_classifier_app/README.md new file mode 100644 index 00000000..c1256c49 --- /dev/null +++ b/examples/apps/breast_density_classifier_app/README.md @@ -0,0 +1,23 @@ +## A MONAI Application Package to deploy breast density classification algorithm +This MAP is based on the Breast Density Model in MONAI [Model-Zoo](https://github.com/Project-MONAI/model-zoo). This model is developed at the Center for Augmented Intelligence in Imaging at the Mayo Clinic, Florida. +For any questions, feel free to contact Vikash Gupta (gupta.vikash@mayo.edu) +Sample data and a torchscript model can be downloaded from https://drive.google.com/drive/folders/1Dryozl2MwNunpsGaFPVoaKBLkNbVM3Hu?usp=sharing + + +## Run the application code with Python interpreter +``` +python app.py -i -o -m +``` + +## Package the application as a MONAI Application Package (contianer image) +In order to build the MONAI App Package, go a level up and execute the following command. +``` +monai-deploy package breast_density_classification_app -m -c breast_density_classifer_app/app.yaml --tag breast_density:0.1.0 --platform x64-workstation -l DEBUG +``` + +## Run the MONAI Application Package using MONAI Deploy CLI +``` +monai-deploy run breast_density-x64-workstation-dgpu-linux-amd64:0.1.0 -i -o +``` + +Once the container exits successfully, check the results in the output directory. There should be a newly creeated DICOM instance file and a `output.json` file containing the classification results. \ No newline at end of file diff --git a/examples/apps/breast_density_classifer_app/__init__.py b/examples/apps/breast_density_classifier_app/__init__.py similarity index 100% rename from examples/apps/breast_density_classifer_app/__init__.py rename to examples/apps/breast_density_classifier_app/__init__.py diff --git a/examples/apps/breast_density_classifer_app/__main__.py b/examples/apps/breast_density_classifier_app/__main__.py similarity index 100% rename from examples/apps/breast_density_classifer_app/__main__.py rename to examples/apps/breast_density_classifier_app/__main__.py diff --git a/examples/apps/breast_density_classifer_app/app.py b/examples/apps/breast_density_classifier_app/app.py similarity index 96% rename from examples/apps/breast_density_classifer_app/app.py rename to examples/apps/breast_density_classifier_app/app.py index 13cbdd2e..950c8eaf 100644 --- a/examples/apps/breast_density_classifer_app/app.py +++ b/examples/apps/breast_density_classifier_app/app.py @@ -26,7 +26,7 @@ def __init__(self, *args, **kwargs): def compose(self): """Creates the app specific operators and chain them up in the processing DAG.""" - logging.info(f"Begin {self.compose.__name__}") + self._logger.info(f"Begin {self.compose.__name__}") # Use command line options over environment variables to init context. app_context: AppContext = Application.init_app_context(self.argv) @@ -34,6 +34,8 @@ def compose(self): app_output_path = Path(app_context.output_path) model_path = Path(app_context.model_path) + self._logger.info(f"App input, output path, & model path: {app_input_path}, {app_output_path}, {model_path}") + model_info = ModelInfo( "MONAI Model for Breast Density", "BreastDensity", diff --git a/examples/apps/breast_density_classifier_app/app.yaml b/examples/apps/breast_density_classifier_app/app.yaml new file mode 100644 index 00000000..5c2e6649 --- /dev/null +++ b/examples/apps/breast_density_classifier_app/app.yaml @@ -0,0 +1,27 @@ +%YAML 1.2 +# SPDX-FileCopyrightText: Copyright (c) 2022-2023 MONAI. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +application: + title: MONAI Deploy App Package - Spleen Seg Inference + version: 1.0 + inputFormats: ["file"] + outputFormats: ["file"] + +resources: + cpu: 1 + gpu: 1 + memory: 1Gi + gpuMemory: 2Gi diff --git a/examples/apps/breast_density_classifer_app/breast_density_classifier_operator.py b/examples/apps/breast_density_classifier_app/breast_density_classifier_operator.py similarity index 96% rename from examples/apps/breast_density_classifer_app/breast_density_classifier_operator.py rename to examples/apps/breast_density_classifier_app/breast_density_classifier_operator.py index b74ec5a4..4a442088 100644 --- a/examples/apps/breast_density_classifer_app/breast_density_classifier_operator.py +++ b/examples/apps/breast_density_classifier_app/breast_density_classifier_operator.py @@ -1,4 +1,5 @@ import json +import logging import os from pathlib import Path from typing import Dict, Optional @@ -94,7 +95,9 @@ def _get_model(self, app_context: AppContext, model_path: Path, model_name: str) # `app_context.models.get(model_name)` returns a model instance if exists. # If model_name is not specified and only one model exists, it returns that model. model = app_context.models.get(model_name) + logging.info("Got the model network from the app context.") else: + logging.info("Model network not in context. JIT loading from file...") model = torch.jit.load( ClassifierOperator.MODEL_LOCAL_PATH, map_location=torch.device("cuda" if torch.cuda.is_available() else "cpu"), @@ -149,9 +152,7 @@ def compute(self, op_input, op_output, context): device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - # Need to get the model from context, when it is re-implemented, and for now, load it directly here. - # model = context.models.get() - model = torch.jit.load(self.model_path, map_location=device) + # Model network loading has been handled during init. pre_transforms = self.pre_process(_reader) post_transforms = self.post_process() @@ -162,7 +163,7 @@ def compute(self, op_input, op_output, context): with torch.no_grad(): for d in dataloader: image = d[0].to(device) - outputs = model(image) + outputs = self.model(image) out = post_transforms(outputs).data.cpu().numpy()[0] print(out) diff --git a/examples/apps/breast_density_classifier_app/requirements.txt b/examples/apps/breast_density_classifier_app/requirements.txt new file mode 100644 index 00000000..973cfe06 --- /dev/null +++ b/examples/apps/breast_density_classifier_app/requirements.txt @@ -0,0 +1,4 @@ +highdicom>=0.18.2 +monai>=1.2.0 +pydicom>=2.3.0 +torch>=1.12.0 \ No newline at end of file From bdd0e76fc93aab9bde2b2443f4c4eec565f63a31 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 2 Jul 2024 01:30:23 -0700 Subject: [PATCH 073/118] Adding missed step for setting input env var to fix the doc issue (#496) Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/source/getting_started/tutorials/simple_app.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/source/getting_started/tutorials/simple_app.md b/docs/source/getting_started/tutorials/simple_app.md index 3eb0328d..d43fca0c 100644 --- a/docs/source/getting_started/tutorials/simple_app.md +++ b/docs/source/getting_started/tutorials/simple_app.md @@ -53,6 +53,12 @@ pip install scikit-image, setuptools, Pillow, matplotlib # See the input file exists in the default `input`` folder in the current working directory ls examples/apps/simple_imaging_app/input/ +# Set the environment variable for the input, with relative path in this example. +export HOLOSCAN_INPUT_PATH="./examples/apps/simple_imaging_app/input" + +# Env var can also be used to direct the output instead of using the default folder as in the following steps +export HOLOSCAN_OUTPUT_PATH="./output_simple_imaging" + # Local execution of the app with output file in the `output` folder in the current working directory python examples/apps/simple_imaging_app/app.py @@ -72,7 +78,7 @@ docker run --rm simple_app-x64-workstation-dgpu-linux-amd64:latest show # Run the MAP container image with MONAI Deploy MAP Runner, with a cleaned output folder rm -rf output -monai-deploy run simple_app-x64-workstation-dgpu-linux-amd64:latest -i input -o output +monai-deploy run simple_app-x64-workstation-dgpu-linux-amd64:latest -i $HOLOSCAN_INPUT_PATH -o output # Check the output file ls output From 1a30bf1711904de417299229771ac70033e894b3 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:28:38 -0800 Subject: [PATCH 074/118] Update example apps' test data path, patch hsdk in local env, and ensure correct MD SDK is used in dev env (#516) * Add post intall action to patch holoscan package, v2.7 and 2.8 Signed-off-by: M Q * Update fixed turorials Signed-off-by: M Q * Updated the setup post install action, local sdk version, and notebook examples Signed-off-by: M Q * Updated the doc too Signed-off-by: M Q * Fix linting error Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .../getting_started/tutorials/mednist_app.md | 7 +- .../tutorials/monai_bundle_app.md | 7 +- .../tutorials/multi_model_app.md | 7 +- .../tutorials/segmentation_app.md | 11 +- monai/deploy/_version.py | 632 +------- notebooks/tutorials/01_simple_app.ipynb | 1059 ++++++++----- .../tutorials/02_mednist_app-prebuilt.ipynb | 1269 +++++++-------- notebooks/tutorials/02_mednist_app.ipynb | 839 +--------- notebooks/tutorials/03_segmentation_app.ipynb | 1339 +++++++++------- .../tutorials/03_segmentation_viz_app.ipynb | 277 ++-- notebooks/tutorials/04_monai_bundle_app.ipynb | 1389 +++++++++-------- notebooks/tutorials/05_multi_model_app.ipynb | 907 ++++++----- requirements-dev.txt | 1 - setup.py | 69 +- 14 files changed, 3619 insertions(+), 4194 deletions(-) diff --git a/docs/source/getting_started/tutorials/mednist_app.md b/docs/source/getting_started/tutorials/mednist_app.md index 7ad98c1e..3a4a43ba 100644 --- a/docs/source/getting_started/tutorials/mednist_app.md +++ b/docs/source/getting_started/tutorials/mednist_app.md @@ -56,6 +56,8 @@ jupyter-lab ## Executing from Shell +**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing). Please download zip file, `mednist_classifier_data.zip` in the `medmist_classifier_app` folder, to the same folder as the notebook example. + ```bash # Clone the github project (the latest version of the main branch only) git clone --branch main --depth 1 https://github.com/Project-MONAI/monai-deploy-app-sdk.git @@ -67,11 +69,8 @@ pip install monai-deploy-app-sdk # Download/Extract mednist_classifier_data.zip from https://drive.google.com/file/d/1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E/view?usp=sharing -# Download mednist_classifier_data.zip -pip install gdown -gdown https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E -# After downloading mednist_classifier_data.zip from the web browser or using gdown +# After having downloaded mednist_classifier_data.zip from the web browser or using gdown unzip -o mednist_classifier_data.zip # Install necessary packages required by the app diff --git a/docs/source/getting_started/tutorials/monai_bundle_app.md b/docs/source/getting_started/tutorials/monai_bundle_app.md index e93c65e4..a8467d40 100644 --- a/docs/source/getting_started/tutorials/monai_bundle_app.md +++ b/docs/source/getting_started/tutorials/monai_bundle_app.md @@ -46,6 +46,8 @@ jupyter-lab ## Executing from Shell +**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing). Please download zip file, `mednist_classifieai_spleen_seg_bundle_data.zip` in the `ai_spleen_seg_app` folder, to the same folder as the notebook example. + ```bash # Clone the github project (the latest version of main branch only) git clone --branch main --depth 1 https://github.com/Project-MONAI/monai-deploy-app-sdk.git @@ -57,10 +59,7 @@ pip install --upgrade monai-deploy-app-sdk # Download/Extract ai_spleen_bundle_data zip file from https://drive.google.com/file/d/1cJq0iQh_yzYIxVElSlVa141aEmHZADJh/view?usp=sharing -# Download the zip file containing both the model and test data -pip install gdown -gdown https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ - +# Download the zip file containing both the model and test data. # After downloading it using gdown, unzip the zip file saved by gdown and # copy the model file into a folder structure that is required by CLI Packager rm -rf dcm diff --git a/docs/source/getting_started/tutorials/multi_model_app.md b/docs/source/getting_started/tutorials/multi_model_app.md index c197c88e..801aec20 100644 --- a/docs/source/getting_started/tutorials/multi_model_app.md +++ b/docs/source/getting_started/tutorials/multi_model_app.md @@ -34,6 +34,8 @@ jupyter-lab ## Executing from Shell +**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing). Please download zip file, `ai_multi_model_bundle_data.zip` in the `ai_multi_ai_app` folder, to the same folder as the notebook example. + ```bash # Clone the github project (the latest version of main branch only) git clone --branch main --depth 1 https://github.com/Project-MONAI/monai-deploy-app-sdk.git @@ -43,10 +45,7 @@ cd monai-deploy-app-sdk # Install monai-deploy-app-sdk package pip install --upgrade monai-deploy-app-sdk -# Download the zip file containing both the model and test data -pip install gdown -gdown https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd - +# Download the zip file containing both the model and test data. # After downloading it using gdown, unzip the zip file saved by gdown rm -rf dcm && rm -rf multi_models unzip -o ai_multi_model_bundle_data.zip diff --git a/docs/source/getting_started/tutorials/segmentation_app.md b/docs/source/getting_started/tutorials/segmentation_app.md index 3ef9e55b..6497c874 100644 --- a/docs/source/getting_started/tutorials/segmentation_app.md +++ b/docs/source/getting_started/tutorials/segmentation_app.md @@ -33,7 +33,9 @@ jupyter-lab ``` ## Executing from Shell -Please note that this part of the example uses the latest application source code on Github, as well as the corresponding test data. + +**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing). Please download zip file, `ai_spleen_seg_bundle_data.zip` in the `ai_spleen_seg_app` folder, to the same folder as the notebook example. + ```bash # Clone the github project (the latest version of main branch only) git clone --branch main --depth 1 https://github.com/Project-MONAI/monai-deploy-app-sdk.git @@ -43,12 +45,7 @@ cd monai-deploy-app-sdk # Install monai-deploy-app-sdk package pip install --upgrade monai-deploy-app-sdk -# Download/Extract ai_spleen_bundle_data zip file from https://drive.google.com/file/d/1cJq0iQh_yzYIxVElSlVa141aEmHZADJh/view?usp=sharing - -# Download the zip file containing both the model and test data -pip install gdown -gdown https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ - +# Download the zip file containing both the model and test data. # After downloading it using gdown, unzip the zip file saved by gdown and # copy the model file into a folder structure that is required by CLI Packager rm -rf dcm diff --git a/monai/deploy/_version.py b/monai/deploy/_version.py index 9eeaaf17..f1502cc2 100644 --- a/monai/deploy/_version.py +++ b/monai/deploy/_version.py @@ -1,623 +1,21 @@ -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. +# This file was generated by 'versioneer.py' (0.19) from +# revision-control system data, or from the parent directory name of an +# unpacked source archive. Distribution tarballs contain a pre-generated copy +# of this file. -# This file is released into the public domain. Generated by -# versioneer-0.20 (https://github.com/python-versioneer/python-versioneer) +import json -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys - - -def get_keywords(): - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "$Format:%d$" - git_full = "$Format:%H$" - git_date = "$Format:%ci$" - keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} - return keywords - - -class VersioneerConfig: # pylint: disable=too-few-public-methods - """Container for Versioneer configuration parameters.""" - - -def get_config(): - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "pep440" - cfg.tag_prefix = "" - cfg.parentdir_prefix = "" - cfg.versionfile_source = "monai/deploy/_version.py" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY = {} -HANDLERS = {} - - -def register_vcs_handler(vcs, method): # decorator - """Create decorator to mark a method as the handler of a VCS.""" - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - return decorate - - -# pylint:disable=too-many-arguments,consider-using-with # noqa -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, - env=None): - """Call the given command(s).""" - assert isinstance(commands, list) - process = None - for command in commands: - try: - dispcmd = str([command] + args) - # remember shell=False, so use git.cmd on windows, not just git - process = subprocess.Popen([command] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None)) - break - except EnvironmentError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None, None - stdout = process.communicate()[0].strip().decode() - if process.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - print("stdout was %s" % stdout) - return None, process.returncode - return stdout, process.returncode - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for _ in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print("Tried directories %s but none started with prefix %s" % - (str(rootdirs), parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - with open(versionfile_abs, "r") as fobj: - for line in fobj: - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - except EnvironmentError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if "refnames" not in keywords: - raise NotThisMethod("Short version file found") - date = keywords.get("date") - if date is not None: - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - - # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = {r.strip() for r in refnames.strip("()").split(",")} - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = {r for r in refs if re.search(r'\d', r)} - if verbose: - print("discarding '%s', no digits" % ",".join(refs - tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - # Filter out refs that exactly match prefix or that don't start - # with a number once the prefix is stripped (mostly a concern - # when prefix is '') - if not re.match(r'\d', r): - continue - if verbose: - print("picking %s" % r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=True) - if rc != 0: - if verbose: - print("Directory %s not under git control" % root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = runner(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", - "--match", "%s*" % tag_prefix], - cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], - cwd=root) - # --abbrev-ref was added in git-1.6.3 - if rc != 0 or branch_name is None: - raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") - branch_name = branch_name.strip() - - if branch_name == "HEAD": - # If we aren't exactly on a branch, pick a branch which represents - # the current commit. If all else fails, we are on a branchless - # commit. - branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) - # --contains was added in git-1.5.4 - if rc != 0 or branches is None: - raise NotThisMethod("'git branch --contains' returned error") - branches = branches.split("\n") - - # Remove the first line if we're running detached - if "(" in branches[0]: - branches.pop(0) - - # Strip off the leading "* " from the list of branches. - branches = [branch[2:] for branch in branches] - if "master" in branches: - branch_name = "master" - elif not branches: - branch_name = None - else: - # Pick the first branch that is returned. Good or bad. - branch_name = branches[0] - - pieces["branch"] = branch_name - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%s'" - % describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" - % (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out, rc = runner(GITS, ["rev-list", "HEAD", "--count"], cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_branch(pieces): - """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . - - The ".dev0" means not master branch. Note that .dev0 sorts backwards - (a feature branch will appear "older" than the master branch). - - Exceptions: - 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0" - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_pre(pieces): - """TAG[.post0.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post0.devDISTANCE - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += ".post0.dev%d" % pieces["distance"] - else: - # exception #1 - rendered = "0.post0.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_post_branch(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . - - The ".dev0" means not master branch. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-branch": - rendered = render_pep440_branch(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-post-branch": - rendered = render_pep440_post_branch(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} +version_json = ''' +{ + "date": "2024-04-24T16:20:37-0700", + "dirty": false, + "error": null, + "full-revisionid": "d0760904a1248ce316ae0237c8a1127ac5673d7f", + "version": "2.0.0" +} +''' # END VERSION_JSON def get_versions(): - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, - verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for _ in cfg.versionfile_source.split('/'): - root = os.path.dirname(root) - except NameError: - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree", - "date": None} - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", "date": None} + return json.loads(version_json) diff --git a/notebooks/tutorials/01_simple_app.ipynb b/notebooks/tutorials/01_simple_app.ipynb index 11874ae0..d5f1dbf3 100644 --- a/notebooks/tutorials/01_simple_app.ipynb +++ b/notebooks/tutorials/01_simple_app.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -92,19 +92,27 @@ "Test input file path: '/tmp/simple_app/normal-brain-mri-4.png'\n" ] }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_2020944/2727006292.py:16: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + " io.imshow(test_image)\n" + ] + }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 29, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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o1EcPnwYR44c2cCebR4MDw8jm81WjGEqlcLBgwfVGB45cgTpdBoHDhxQZQ4fPoxoNIoXXnjhsvf5SkE+nwcAdHR0AABefPFFrKysVIzl7t27sW3btoqxvPXWW9Hb26vKPPDAAygUCnjttdcuY++vDKytreGJJ57AwsICDh06FI5hFXj00Ufx0EMPVYwZEM7HoDhx4gQGBgZw3XXX4ZFHHsHo6CiAyzuOm+o0pKmpKaytrVXcNAD09vbizTff3KBebS5ks1kAMI4hv8tms+jp6an4vrGxER0dHarMtYb19XV8+tOfxj333INbbrkFwPlxam5uRjqdriirj6VprPndtYJXX30Vhw4dwtLSEtra2vCNb3wDN910E44ePRqOYQA88cQT+NnPfoaf/OQnF30Xzkd7HDx4EF/96ldx4403Ynx8HH/2Z3+Ge++9F8eOHbus47ipCDhEiI3Co48+imPHjuG5557b6K5sStx44404evQo8vk8/uM//gMf+chH8Oyzz250tzYVzpw5g0996lN4+umnEYvFNro7mxoPPvig+nvv3r04ePAghoaG8LWvfQ3xePyy9WNTmaC7urrQ0NBwUTTaxMQE+vr6NqhXmwscJ68x7Ovrw+TkZMX3q6urmJmZuSbH+ZOf/CS+9a1v4Qc/+AEGBwfV5319fSiXy5ibm6sor4+laaz53bWC5uZmXH/99di/fz8ef/xx7Nu3D3/7t38bjmEAvPjii5icnMTtt9+OxsZGNDY24tlnn8Xf/d3fobGxEb29veFYVol0Oo0bbrgBJ0+evKxzclMRcHNzM/bv349nnnlGfba+vo5nnnkGhw4d2sCebR7s2LEDfX19FWNYKBTwwgsvqDE8dOgQ5ubm8OKLL6oy3//+97G+vo6DBw9e9j5vFBzHwSc/+Ul84xvfwPe//33s2LGj4vv9+/ejqampYiyPHz+O0dHRirF89dVXKwSap59+GslkEjfddNPluZErEOvr61heXg7HMADe85734NVXX8XRo0fVz4EDB/DII4+ov8OxrA7z8/M4deoU+vv7L++crCqEbAPxxBNPOC0tLc5Xv/pV5/XXX3d++7d/20mn0xXRaNc6isWi89JLLzkvvfSSA8D567/+a+ell15yRkZGHMc5vw0pnU47//Vf/+W88sorzgc+8AHjNqTbbrvNeeGFF5znnnvO2bVr1zW3DekTn/iEk0qlnB/+8IcV2xUWFxdVmY9//OPOtm3bnO9///vOT3/6U+fQoUPOoUOH1PfcrnD//fc7R48edb773e863d3d19S2j89//vPOs88+6wwPDzuvvPKK8/nPf96JRCLO9773PcdxwjGsBTIK2nHCsbTFZz/7WeeHP/yhMzw87PzoRz9yDh8+7HR1dTmTk5OO41y+cdx0BOw4jvP3f//3zrZt25zm5mbnzjvvdJ5//vmN7tIVhR/84AcOgIt+PvKRjziOc34r0p/8yZ84vb29TktLi/Oe97zHOX78eEUd09PTzsMPP+y0tbU5yWTS+ehHP+oUi8UNuJuNg2kMAThf+cpXVJlSqeT8zu/8jpPJZJzW1lbngx/8oDM+Pl5Rz9tvv+08+OCDTjwed7q6upzPfvazzsrKymW+m43Db/7mbzpDQ0NOc3Oz093d7bznPe9R5Os44RjWAp2Aw7G0w4c//GGnv7/faW5udrZs2eJ8+MMfdk6ePKm+v1zjGJ4HHCJEiBAhQmwANpUPOESIECFChLhaEBJwiBAhQoQIsQEICThEiBAhQoTYAIQEHCJEiBAhQmwAQgIOESJEiBAhNgAhAYcIESJEiBAbgJCAQ4QIESJEiA1ASMAhQoQIESLEBiAk4BAhQoQIEWIDEBJwiBAhQoQIsQEICThEiBAhQoTYAPw/PrqZCbjWN/UAAAAASUVORK5CYII=", + "image/png": "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kZgjRPUIx7E+CMexPgjHsX4Ix7I+8BvHIJovUVMijhAhQoQIESJEdQgJOESIECFChNgAbFoCbmlpwWOPPRZm0KoR4TjWB+E41gfhONYP4VjWB5dyHDdlEFaIECFChAix2bFpNeAQIUKECBFiMyMk4BAhQoQIEWIDEBJwiBAhQoQIsQEICThEiBAhQoTYAIQEHCJEiBAhQmwANiUB/8M//AO2b9+OWCyGgwcP4sc//vFGd+mKwv/8z//g/e9/PwYGBhCJRPDkk09WfO84Dv70T/8U/f39iMfjOHz4ME6cOFFRZmZmBo888giSySTS6TQ+9rGPYX5+/jLexcbj8ccfxx133IH29nb09PTgl3/5l3H8+PGKMktLS3j00UfR2dmJtrY2fOhDH8LExERFmdHRUTz00ENobW1FT08PPve5z2F1dfVy3sqG4stf/jL27t2rMgkdOnQITz31lPo+HMPq8KUvfQmRSASf/vSn1WfhWNrhi1/8ojrFjD+7d+9W31+2cXQ2GZ544gmnubnZ+dd//Vfntddec37rt37LSafTzsTExEZ37YrBd77zHeeP/uiPnP/8z/90ADjf+MY3Kr7/0pe+5KRSKefJJ590Xn75ZeeXfumXnB07djilUkmVee973+vs27fPef75553//d//da6//nrn4Ycfvsx3srF44IEHnK985SvOsWPHnKNHjzq/+Iu/6Gzbts2Zn59XZT7+8Y87W7dudZ555hnnpz/9qXPXXXc5d999t/p+dXXVueWWW5zDhw87L730kvOd73zH6erqcr7whS9sxC1tCL75zW863/72t5233nrLOX78uPOHf/iHTlNTk3Ps2DHHccIxrAY//vGPne3btzt79+51PvWpT6nPw7G0w2OPPebcfPPNzvj4uPrJ5XLq+8s1jpuOgO+8807n0UcfVf+vra05AwMDzuOPP76BvbpyoRPw+vq609fX5/zVX/2V+mxubs5paWlx/v3f/91xHMd5/fXXHQDOT37yE1XmqaeeciKRiHP27NnL1vcrDZOTkw4A59lnn3Uc5/y4NTU1OV//+tdVmTfeeMMB4Bw5csRxnPPCUDQadbLZrCrz5S9/2Ukmk87y8vLlvYErCJlMxvmXf/mXcAyrQLFYdHbt2uU8/fTTzn333acIOBxLezz22GPOvn37jN9dznHcVCbocrmMF198EYcPH1afRaNRHD58GEeOHNnAnm0eDA8PI5vNVoxhKpXCwYMH1RgeOXIE6XQaBw4cUGUOHz6MaDSKF1544bL3+UpBPp8HAHR0dAAAXnzxRaysrFSM5e7du7Ft27aKsbz11lvR29uryjzwwAMoFAp47bXXLmPvrwysra3hiSeewMLCAg4dOhSOYRV49NFH8dBDD1WMGRDOx6A4ceIEBgYGcN111+GRRx7B6OgogMs7jpvqNKSpqSmsra1V3DQA9Pb24s0339ygXm0uZLNZADCOIb/LZrPo6emp+L6xsREdHR2qzLWG9fV1fPrTn8Y999yDW265BcD5cWpubkY6na4oq4+laaz53bWCV199FYcOHcLS0hLa2trwjW98AzfddBOOHj0ajmEAPPHEE/jZz36Gn/zkJxd9F85Hexw8eBBf/epXceONN2J8fBx/9md/hnvvvRfHjh27rOO4qQg4RIiNwqOPPopjx47hueee2+iubErceOONOHr0KPL5PP7jP/4DH/nIR/Dss89udLc2Fc6cOYNPfepTePrppxGLxTa6O5saDz74oPp77969OHjwIIaGhvC1r30N8Xj8svVjU5mgu7q60NDQcFE02sTEBPr6+jaoV5sLHCevMezr68Pk5GTF96urq5iZmbkmx/mTn/wkvvWtb+EHP/gBBgcH1ed9fX0ol8uYm5urKK+PpWms+d21gubmZlx//fXYv38/Hn/8cezbtw9/+7d/G45hALz44ouYnJzE7bffjsbGRjQ2NuLZZ5/F3/3d36GxsRG9vb3hWFaJdDqNG264ASdPnrysc3JTEXBzczP279+PZ555Rn22vr6OZ555BocOHdrAnm0e7NixA319fRVjWCgU8MILL6gxPHToEObm5vDiiy+qMt///vexvr6OgwcPXvY+bxQcx8EnP/lJfOMb38D3v/997Nixo+L7/fv3o6mpqWIsjx8/jtHR0YqxfPXVVysEmqeffhrJZBI33XTT5bmRKxDr6+tYXl4OxzAA3vOe9+DVV1/F0aNH1c+BAwfwyCOPqL/DsawO8/PzOHXqFPr7+y/vnKwqhGwD8cQTTzgtLS3OV7/6Vef11193fvu3f9tJp9MV0WjXOorFovPSSy85L730kgPA+eu//mvnpZdeckZGRhzHOb8NKZ1OO//1X//lvPLKK84HPvAB4zak2267zXnhhRec5557ztm1a9c1tw3pE5/4hJNKpZwf/vCHFdsVFhcXVZmPf/zjzrZt25zvf//7zk9/+lPn0KFDzqFDh9T33K5w//33O0ePHnW++93vOt3d3dfUto/Pf/7zzrPPPusMDw87r7zyivP5z3/eiUQizve+9z3HccIxrAUyCtpxwrG0xWc/+1nnhz/8oTM8POz86Ec/cg4fPux0dXU5k5OTjuNcvnHcdATsOI7z93//9862bduc5uZm584773Sef/75je7SFYUf/OAHDoCLfj7ykY84jnN+K9Kf/MmfOL29vU5LS4vznve8xzl+/HhFHdPT087DDz/stLW1Oclk0vnoRz/qFIvFDbibjYNpDAE4X/nKV1SZUqnk/M7v/I6TyWSc1tZW54Mf/KAzPj5eUc/bb7/tPPjgg048Hne6urqcz372s87KysplvpuNw2/+5m86Q0NDTnNzs9Pd3e285z3vUeTrOOEY1gKdgMOxtMOHP/xhp7+/32lubna2bNnifPjDH3ZOnjypvr9c4xieBxwiRIgQIUJsADaVDzhEiBAhQoS4WhAScIgQIUKECLEBCAk4RIgQIUKE2ACEBBwiRIgQIUJsAEICDhEiRIgQITYAIQGHCBEiRIgQG4CQgEOECBEiRIgNQEjAIUKECBEixAYgJOAQIUKECBFiAxAScIgQIUKECLEBCAk4RIgQIUKE2AD8Pz66mQm41jf1AAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -145,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -179,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -212,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -283,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -335,7 +343,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -428,7 +436,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -507,57 +515,59 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-23 15:26:29,737] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-23 15:26:29,745] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" + "[info] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 10:20:47,518] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-16 10:20:47,531] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "sample_data_path: /tmp/simple_app/normal-brain-mri-4.png\n", - "\u001b[0m2024-04-23 15:26:29.768 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", - "Number of times operator sobel_op whose class is defined in __main__ called: 1\n", - "Input from: /tmp/simple_app/normal-brain-mri-4.png, whose absolute path: /tmp/simple_app/normal-brain-mri-4.png\n" + "sample_data_path: /tmp/simple_app/normal-brain-mri-4.png\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[info] [gxf_executor.cpp:247] Creating context\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n" + "[info] [gxf_executor.cpp:262] Creating context\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'in1'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'in1'\n", + "[info] [gxf_executor.cpp:2178] Activating Graph...\n", + "[info] [gxf_executor.cpp:2208] Running Graph...\n", + "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Number of times operator sobel_op whose class is defined in __main__ called: 1\n", + "Input from: /tmp/simple_app/normal-brain-mri-4.png, whose absolute path: /tmp/simple_app/normal-brain-mri-4.png\n", "Number of times operator median_op whose class is defined in __main__ called: 1\n", "Number of times operator gaussian_op whose class is defined in __main__ called: 1\n", "Data type of output: , max = 0.35821119421406195\n", - "Data type of output post conversion: , max = 91\n", - "\u001b[0m2024-04-23 15:26:30.023 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 15:26:30.023 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" + "Data type of output post conversion: , max = 91\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[info] [gxf_executor.cpp:275] Destroying context\n" + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[info] [gxf_executor.cpp:292] Destroying context\n" ] } ], @@ -568,7 +578,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -585,22 +595,30 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 11, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_2020944/1643627018.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + " io.imshow(output_image)\n" + ] + }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 38, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAHVCAYAAAApYyiLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsvXuMJdt1Fv7V6fN+dPfM3LffSiLiG/KQnGBfgRAP/2LAIKI4UiJFiUEREZEdKTGEYCkEFBBG4Y9AhJP8E+H8gQUKUkCYxME4kAhy8zJECglxIDa51/ad+5iZfpz36T71+6P17f5qnbV31enpuTM9U5/U6nPqVO1XVa1vrbXXXjvL8zxHjRo1atSoUeN1ReN+N6BGjRo1atR4FFETcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjVq1KhxH1ATcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjVq1KhxH1ATcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjVq1KhxH3BfCfijH/0o3vrWt6Lb7eKd73wnfuM3fuN+NqdGjRo1atR43XDfCPjf/Jt/gw996EP4+3//7+N//I//ga/92q/Fe97zHrzyyiv3q0k1atSoUaPG64bsfm3G8M53vhPf8A3fgH/xL/4FAGC9XuNNb3oTvvd7vxd/9+/+3eS16/UaX/rSlzAajZBl2evR3Bo1atSoUcNFnuc4Pj7GM888g0ajul3bvIdtimK5XOIzn/kMPvzhD4djjUYD7373u/H8889vnL9YLLBYLML3L37xi3j22Wdfl7bWqFGjRo0aVfDiiy/ijW98Y+Xz74sL+rXXXsPp6SmefPLJwvEnn3wSN2/e3Dj/Ix/5CPb29sJfTb41atSoUeNBw2g02ur8KxEF/eEPfxiHh4fh78UXX7zfTapRo0aNGjUK2HZK9L64oB977DHs7Ozg5ZdfLhx/+eWX8dRTT22c3+l00Ol0Xq/m1ahRo0aNGvcc98UCbrfbeMc73oFPf/rT4dh6vcanP/1pPPfcc/ejSTVq1KhRo8brivtiAQPAhz70Ibz//e/H13/91+NP/Ik/gX/2z/4ZJpMJ/vpf/+v3q0k1atSoUaPG64b7RsDf+q3fildffRU//MM/jJs3b+Lrvu7r8MlPfnIjMKtGjRo1atR4GHHf1gHfDY6OjrC3t3e/m1GjRo0aNWoEHB4eYnd3t/L5VyIKukaNGjVq1HjYUBNwjRo1atSocR9QE3CNGjVq1KhxH1ATcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjUuBVmWRVPx1buW1aixiZqAa9R4CPF6E57WV5NtjRrVcN8ScdSoUSMNS2RVl+zzuizLKl+zTf1VCNY7h8eqluO13ZZRo8ZVRk3ANWo8ICgjpItYlttco6RGd3Kj0SgQuudm9n5P1ZvnOfI8x3q9Dp9Zt3cs1q8qJFy1/zWh17gfqAm4Ro0KuFtr8jLq9whOP7N92k495v1uXcdKvI1GAzs7O+Gz/uk1JOkUUXuEul6vC395nuPk5ATr9Rqnp6c4PT0Nn73rbfnemFWFV1ZZ+TVq3C1qAq7x0ONu3ZZVyLdKHd45KZIg+en/VqsVvpPkrNUYIztrdcYs1hgB7+zsbNTtWbusx4JEqv3Tay0hn56e4uTkBPP5HCcnJ+G7V3ZVBakqUdfz2DVeD9QEXOOhRllUrlo7F7GiPHestaBIdvYcS3TNZtP9TuLb2dlBu90OZSqZ8pitS0GLktfF+q0kXuZOvkw0Go3QZ9ab5zmWyyVOTk6wWq2wXC6xWq0CKcf64rU5RtDsp+c5YFn32wNS4+FETcA1HmqkhG7suwrbiwhdK/xbrRaazWawYJvNJvr9/gbZaH2NRmOjDaenpzg6OsLJyUkom9frvKrXDpbRbDbDcVtOrK/r9RrL5RLL5RIA0Ol0Cpax1k2SXywWoS3WdU3Fo9VqIcuyUBaAoHhQ4ciyDN1ut+DebjQaBUJeLpc4OjrCarXaIGV7X1JKVlVlqybiGpeFmoAfcjzKmvtF+343rmoFyWQwGBRIuNlsotVqAcCGO5VEtlqtsF6vAzGdnJxgsVgU2sdzm81mgXxXq9WGG7rT6SDPc6xWq0BsSpDr9dolbF7juX3ZzsVigdPT03Cs1WoVLG3+RtCqV2WD1+7s7KDT6YTxUuLmdcCZItFsNtHr9XBycoJms4n5fI7FYhGsZOvy9u5RmddgG9K9rDnjbZ/bR/kdv+qoCfghx6PwYt6vYBnPcmq1WuGv3W6j1Wqh1+sFIvEEOklqNpsVyK7T6QAozp3qvC9xcnJSOgfcaDQCEfI/LVqdW9b2zefzgtXL9gyHQ3Q6Hcznc0wmk+TY3A1ozS4WC3Q6nYJLvtPpBGJuNpu4ceNGsIjn8znm83mwiq0CYNtpx6uqRZxCGSnGntmLkO9FrqvxYKAm4BpXClXXkt4tAcQCpjwhx7nLVquFwWCAdruNdru9EWSksNaaBh8BCBayRiX3+313rnI+n4fPtEoV3W43zB3P5/NA+Iw6Zj1UHAaDAbIsw+3btwMBZ1mGZvNcXGRZhsFggMFggNlshsViEeqlK1rb0Wq1Cu2mBavt3tnZwWAwCC7n2WwWzl8sFphOp6EsehXUFU6lZzgcYrlcotVqYbFYhHFmIJeFN6YxgoyR3LbPmzfvnCq/xsOJmoBrXBl4gUwXLafqtV6QlX7u9XrB0m2324Ek7bkaNHVycoLZbFaYg03V3+/3g+WnbmP+J9HRbUurT8+l+7vT6eDw8DCQEYOclFxZ7+7uLmazWXCbs71HR0fI8xyDwQAAgnXKOVi6rdvtdhgDJeRtlSa6nUmeeZ5jPB4XFJ08z8OccpZl6HQ6uHHjBpbLJRaLBWazGWazGY6Pj6NR1BZVyfGiyt5lkG2MyInaMn6wkeVX8O4cHR1hb2/vfjejRgT3IlilipBLBdhUmQv0ftfrSYLtdhvdbhe9Xg+9Xi9cQ4LkHwOFFJ1OB1mWYblcbsyB0hrmcUtgLC/Pc+zs7KDX66HT6aDf74fy5/M5jo+PA1nx+vV6jbe+9a2hntu3bweLstfrYWdnB9euXcNoNApW5WQywZ07dwpW82q1wmw2C8pEs9kMFjZJnEFbxOnpaaG/DASjYsBrTk9P0Wg0AqnqfaHFy/bzuvF4HOoAzqx9usvpMtd7Ox6PMZvNMJ1OsVgsggt9W4uXiD2XZRH1ZWR+Ge/OZZVVB59Vx+HhIXZ3dyufX1vANa4ELirQUuVtY7kwcpnE2+12Q/ASyYgBSZZ0Y/XQCiX5KFlyqQ2JSNtNcucaWVp1aoGyXpbZ6XQwHo8DkV2/fh3tdrtA1CQsQuvW8aLCwGQZnCvW+tgOBpLpGNCSpsVqoZYyx2a5XBaWZA2HQ7RarSDs7ty5gzzPg6ULALu7u0ExIHnTbU6rmMqQvWdVsc1zVGat8pwHDdu+KzWqoybgGpeOyxIiVd1nFxVoXuCNrb/ZbAZX5+7u7oZltVwuNwgYwAZxAiisXz05OdlYlsP+qhVMYvYscgYpcSmQ51plOScnJzg8PASAMB/c7XaDVZ1lGRaLBbIsKwRpaRCTdX9rWzRQzAsw06VGdBdrRi1a+3Rls3/L5TLUT6uXbeR8+87ODvb39wvzxHme4/DwEDs7O8Eq5jQB6+O89HQ6DfPYsYCtq0aaNa4GagKuAeDBmSvaRtO+V+0lEbRarYI7k9bWzs5OsP5oxfIzcEZsxGq1wng83iAokpmSq/bJI1x+t3Oi2m66ym15wBmhHh4eYjQaBSLS8yaTSbAKgXNXsioEGjGsbdQ/4DyC2Y6pFwkeGwOLk5OT0PfZbIblcoler4d+vx/mtzudToiE5v2Yz+dhrOhiZzn9fh+9Xg/T6TT8afCXfS8uwx17t+9a1TZc5vvxIMiGhxH1HHCN+46Lzu9eZt26dKjb7WI0Gm1YaZz/5LwjrU/Owe7s7ATXpraX7k09ptdoMBYtbpbvkTWTT5AMY4kniNQyG2tRl5Vj80AzepoE60U367V2cwf+5zUcO7ZD+67rnDViHEAIhtO5aM9Cn06nwcsAAHt7e+h2uyFILc/zYEmT5NXLYcdjW9zNtEmNBx/1HHCNu8L9sITt3FhZgNRlgQTSbDbD2la6KrnEhXUvl0vcuXOnIPQpuIn5fI7ZbBZcrgwqajabheva7XaYPwbOibzb7W4EH6Wgkcw6dt61ZUFmZVBCtBY2FQidu7VpNHktE35YMiboPVitVoV5WR0vJvqgux84X9Os7eP1DJyjq17nyg8ODsKcfrfbDeu2e71eWE88m81wdHRUiMLWsasaqGUVoRo1agKuUcC9FhAeQaTI4F5GUtPapHuZ84Ksl0FOnFcEzohAg5VoMSkZ8LjOA9uIXHUlk/g1qIsubbVy1+t1iEhmWVXnJj3rLeZKjo1djNjtciqOiZZLMma/lRRp3WqmK45zo9EIFqgqJ+v1unAfdF2zuuj5B6CgDAAI48k5+ZOTk4JLWwO2AIRgM9vflFVbBy/VSKEm4BqvG7ZZsnGZddooTrqaO51OsHxIBsSdO3c22kbrjMd0GQvrAs7zM9uUi8B5cFaWna0htsKbQVGa4tFLVxkT9PytyphaC7SKG1vJsup9owvY5p6mi183oPASmChx0tKlhb1cLkNuaiYkoeLipaL0wLnu09PToGzRGgbOFKQnnngiRFjPZjNMJpOtdmXaxkqu8eigJuAarxteT+GiAlyJsdlsYnd3N0TG2t2FKFxXq1UgBnUzM5KZVpEVnIz2pXXWarVCUM9qtSqQv+Lk5ATT6TSQrwY+afmetyBlZSlxlv0WmwLw6tHc0bSctTxLRPbe04Ws92ZnZwfL5XLDUtV1wbY8LgcDzubVSYokUqtg6D3lfbHLoW7duhXuEf+oMPV6vRCoxiVnOk/twXvu7ZjH7tG2eFCCKWtUQ03ANV5X3AtNPyW4ms1mwdKltasCfTqd4vDw0LXqaJFqykYVlvqfOZ+BM6HOAB4usdHfJ5NJwdpVV6kltG36u825MUstZrF71rW2NbUMSs+NtYVuYIJkSbeyuqD1HugOT3l+nhGLVjAVK7rGGTjXarU25pnpIufcLxWqXq9XyO/9xBNPIM/zcB7/Vw3UuoiVXAU1+V4t1ARc43XH6yEkGAi0t7cXMkbRpQicW5zAmSvZJp3Q6OIYCeraXbV4+Ttd1koqTJgxnU435ih5HdsQ65dFWRS0ZxWlrFNbdhnhW1fv3Vhz2lYS6Hw+D8vCGNDGiGZ6Jzj+auHyeuB8zTNdzZPJpHAe+0Gi7/f74Vyuk+a0AK1jBs7xu+5iVRNhjSqoCbjG64rXI8iLwVW9Xg/Xrl0DgIIb+eDgAAA2AnkAFIKcKJxpuZ2enoZjun+tl9PZWtM6v8vNAaoQp10qpOUpUdnrFHcz5tat7NXjtcMj4bK5aU3woWVr5i9GqJP0Gak8HA6DwsN5Yt4Xtc49xUCt5dPT0+Ah6fV6WK/XmE6nIdOXBoVx+oJEvL+/X9iYQrObVZ0DrnJujYcHNQHXiOJBnk+ylhKFNt3MnK/jciCSHzdBsIkoOP9KMECKxAucu2NJ5mo1n56eFlyfGlmrUc26I0+VsVXBzCjpFPlaWCKMzdGWXV+lnm3gna9LlADfva1LnehepjW8WCyCpdxqtcLYazS5BZ8D9URMp9Pgbqa7+ujoKLjCdRMLjZznMrJmsxki4y+a4rLGo4GagGu40LnNB4WEU8FBTOK/v78fyJOWki4l0kCc1WqFyWQSIlp1TtGb7+TGCxTWailz3TDndHWNLokiRp4a/KSEaVM+EmWWpJ6n/1NjeBHYcqs+J6l5UbW4eZ+0fLp5SY52j2NCrV87naA7SRHMegacJVOg67nX64V14sxoRlCpIgkzmQeXMbF9fLaqTCs8KO9ajdcHdSasGlcCHnHoUiINcALO94+17mIm9lf3r+Yo5o5GdokQcD5/S4tH55SVeFkW/3vzySkLlpaf9keTS7yer6wXbX3ZxFulbpv8g8uYCI47FTEucVLvA1C8Z0Bx7vjk5CQE7Z2cnOD4+DhYsLu7u8HjsVgsQjY0AMHq5XIoLqOii1z3I67nhx9u1JmwajyUUCsRQLBKGGCl0cXz+Ty4HjUvs4LCWedqSZBM4A8gpJYEzq0knU9WV3Mskb8XpPQwwU4H3Avorkp8BkiY9jzO43OJEiObgeKWkVYB457HvMe7u7th/ncymRSWrtHboX3WFJwkYbq42W6bsKXGo42agGtcKdC1zOxVFJ42upjJ+dUKsrmVWR4FKN2GzWazMG9MaOYmXsNMSuo65n91PQN+YFJV12TVsWE9l40qbbmsQCNvTPSYDQgjwerc+nw+D2uL1Xq29a9Wq2DBcu74+Pg4uJG5WcNisUCe5yFinh4S3bnJBuPxWdF9nXVqokaNmoBrXBnoml66nHXvXEa/0g3ICGXNJkX3JQWiEiQFMYCw/6xuLqCu6tVqVdgpSAnCEi+v0f8p3K1w9sjysgT+ZZSzrcta58Y99zfd9TqHzOxWdnkZ76m1pnkelTs+Nzy/1+vh+Pi4QLS0sBeLRajPgpYwXd+cAvHSd9Z49FATcI0rAbr/6HIGzkhSN2AHUJi75VpfdTdS+FqBx1zDnONl9iPrnj49PQ1zehYacHUZ2NYCtoR1mbAu9G0Dh2Lzx1Wv1/N0Xj+WkYtzukBxIweNntb7rDmor1+/jtu3bxcsW+4HfXJyglu3bgVCpXVLhYztUze0urhZH6+p8WijDsKq8cBC3c16v+kKPD4+DudxG7osy4LrWK1QtXxsZDIFIqNYWZa6rZkn2LqaWUaKdC/yiqnVpLifQViEnY/3frusOqpcpxHT1hLWZUb6nXVo6lDe//39/UCa3AmJ93dvbw9ZluHWrVsbViwVMz5LdGmzXCV/PqPMlnbRsavxYKEOwqpx5aHLiuhyJpbLJRaLRdhkXZcAAefRyGr18ncKVd1Ll8KSVhCXING9bF3YNkmEl4TD689FhWuK7O4VYskq2B47/3o/iYN1ewqQ3nN9HmySD41eZwT1aDRCs9nEaDTCYDDAF7/4RQBnAnZvbw97e3s4Pj4OG0DoXK8qf3a5GqHpMxkdXePRQ03ANR5I0NVMocY0gkxwQOuFBAwgEKdatQymofWhZMFALbtjEefzaG1aguEx3cC+jCDLAotiuN9WkRc4ljr3onUA25G55wJXb4cqVqk2sn9UsjTJxt7eXtiM4emnn8bR0RFu376NV155BTdu3AhTIdwRi88i15hTQWQ9zIxFl/jOzk6wkFNR9JeBeq3xg4magGs8UOD6Tt0OLs9zzGazAikCZ9aKuhRJvrSe2+32Rj5mLl1hhiMmS9D0hfxT8tVEEBpJ7UU1E2WRvlquNw6vp9XrYZuo5ntdXyoJi16rng2d2+XyH0bIe+NO9/VsNgvu4d3dXezu7gaFsNvt4ubNm+F5YcAWpydIqK1Wa2PHLG0z66KbmriXJKz11yT8YKCeA65RGfdqmQsFJdP/0epV9yBdfcB5MItuYM/jTz31VDiPwkyDtPr9fmHudjKZhKVLSq5KkBTiXF/qBRIpYuPjRfDaceD/Vqu1MUetllrVOu8WGkSkx7TftBo9F+9l1G+Rsph16RE9KAzImk6n4TnjObPZrLDGGEBBAQMQLOD9/X2MRiMAwB/+4R/i5OSkcE+4/pzXMI6AaLfbhflpDRrTHOGp1Jk1HmzUc8A1rhyUfJlPWbcBJDFqcAtwvoSo0WhgMBhgNBoFUqZbkEuWBoMBgPNlILPZDMfHx4WIVU1tyDrVPV1FKFYh39R5Sm7WGiIxU0mwWZUuKwpaSU8jeVUJ8M73lgkptm1TmXKTUmDoSVHlod1uhwAoWqqDwWBju0k+X4xSXiwWePXVV8NGC9evX8db3/pWvPjii5jNZmE8Op1OIX4AOHv+dA0xd03iPdTlT9qnOkL60UBNwDUq415o5BR4mj4QgBsAZcn39PQUnU4Hw+EwuJMZGa3ErBYZhamSt1oqOkdXxc2s41L1eGos9Fq7DIrtBc633VMytmXdLQkrocWgbbBt9sq822coVkbMzct5WiVY4DwBB58/zttqRDzP445IzA99cnKCxx9/HG9605vwxS9+EUdHR1gul0F57HQ6YQ6YewkzFznboAoU6+IuXpwvfj3c0TXuL2oCrnFfobl7KVx15yBanbRYFIPBAMPhMLgYlaSGw2EhAGaxWGAymWA8HgdhaJekUACri1Dnez1UtXjLyMfuABTbi5huT+sGttHZVdtp4ZWt7lJVXAhacbHlWF4EtQ3uqjqOsTZ75+tx2y4G0dHDwefQy9VMRZA7Zq1WK1y/fh07Ozt4wxvegE6ng1dffRWLxaIQf8CNQKhg0r1MNzmfLZ2X5tRDlX2F67ncq4+agGvcN9D1rO43Ch+73lWT6wNnwoduZQqx+XyO3d3dgiXNRB3T6TRsRcjrSSSce9OsSSnhdjdkYZGyNC0Rll2vFrd1Y3vWeew6j3y9/tm0nCwjz/NC+kW7VtqLrPbquCi5WOJqNBoYjUY4OjoqKFSLxSIofpqGlGXQglW3+2q1wtHREV588UU88cQTIWd0t9vF5z73uRBBzyxZnNtl+fP5PCSL0bXmQDFrFpfDVVnmVuPqog7CqrGBe61Ze3O+mntZl2RwqREF9Gg0CpYr59+Ys5dJ8rMsC4Lv9u3bIUjIEoxGo6plopuuA+frNzWRftXxiZ2niSN02YwGA7Eteo5XpkZuL5fLwkbw6lWItYnfOb+sbm+Wo1sDWgJl25g3mXOhuiwIOF+jzQhjbgO5zfjFFBLP8uXe0PwDgPF4jMlkEjwmXIZGEtbdjDRI6uDgILiVGRjXbrcxHA6xt7eH0WiEVquF+XyOo6OjQt90+Vur1Qrzu51OB4PBoLB0juA8MhN16D2p8eCiDsKq8UDDI19aGx75aorA4XAYArQYTNVutzEYDAoubG5FaC1ea93Z/WZ5DDgTlBo9bVFVSdHzlBRppWtw00WXHnGus9PphM0EbBu8dgDnZGr33bWfLTHb8nUf5tRY6PKwPM+Tm1nYNsYQ+51eFM6n9no99Pt95Hke3MmLxSIobtpO4DxZRqvVwnA4DFsLstzlchn2CF6tVnjsscfQbrdx48YNdLtd3Lp1q7BjEv+47pfBWYzU1nHV6RPWlbo/dpxror4aqAm4RgHWcrpsaIo+1kXLjRHPHhnRgiHBco0mN2Vge7msaDabua5VtXJtkgR1b6tAVosyBUsEbJO1uKlYWPJnGdYN6wVY6Wc7H9vtdjeSiHjt59wncK54eHOl9lqdAyb56nQAXf62z7ptJF237XY7RBen5o9Tz2PKKmbUM5eQ9Xq98CwxsErHDjjzdFAxpLel2WyGpC7MxAacB2mtVit0Oh2MRiNkWYbhcIh2u40XXnih0C+uQ2d/5vN5qEPvNZ9BTs9o7nFemwpGq0n4aqAm4BoF3KuXlgSoli/rswk2LGgd0CVHIcUIZxIo5+fUVazLaEi6XAdK13NMgJcFD8XmP73Plny9Om2mLhXcMVcty2Q9TGKys7MT3NEk2lhQT5mwJhmQlKzi0O/30Wq1MJ1OcXh4GBJZsH3sO9fG6h+nDqg06e5S9j5sSyp2jFXJolWr94JECpw/l4wNIGnz2eU0B70xs9kMr7zySohDoCv+xo0bePXVV0OZDPTj9oms09sykefleV7YbnGb/tck/GCjJuBHHN5LGptrvJs6AISk9DqXyHlfavSx4BzOv/Gcvb29QMwkcLVMKPQ5r6pbC9o6NIMWcDY3RyuIYxCzQq2F6fVB53HVsub5+qflKzHoshW1ktg/nselWTxOrwLnymkR2nletdZtAJP2jaRB4up2u2g2m4F8p9NpoXwbBEYLkOTLqGEqJgcHBxuWu21XmUtaCVvJnsk4aIlz4w3tb6fTCVnXiNPTUxwfH4clTVQkaQ2TtJnUY7VaYXd3F6PRCNeuXUOj0cArr7wS1pkzuIu7b9mocvvsUGksi4q+LNTE/fqhDsKqcc9BAcJdhoCihcF5WmsxqmXHP7o7KazpjlaBSeGmGY94LMuy4O4kKVFAKxHa7FgeNLjJU1qoBNiEEFQ8FHb+k/8psFPBSprdSwN8dJMKbQ+tt+Pj4wKZs40kVVpfGgikVlir1cLjjz+OPM/x8ssvl+7UpKSpFjG3mcyyLJAkreEqVp8qEVoP19VSGdF7qfnBeQ3HgBHctFhVSeR0BMeH90g3AeHz1uv18Ja3vKWwfeYf/uEfhnlg9p8em16vF9zRHG+2mVb2YrHYeF8uE3Y6pMZ2qIOwajxQsG5f4NwVRxcpjwFFQUhQwDLSVAOttAxez/lGkj3LswEtTFXIOjRgh2WyHR4RUBB7JK1KhPaFxG+hVh7/89yySGFapCTX9XodLDMqGLrmGUAhCIrCvtFoYG9vD/1+v3BPuMRLz93Z2QlrsDWquCq4XIfktlqtAgENh0N0Op1Qp6Yh1fFNzW+z/VRI7DNgx1WVPEbEswybmlTnbu36XV5zenqK8XiMV155Bfv7+2Ef4OvXr+Pw8BDA2Vxzs9nE/v5+mDpZr9fodrth3TDrJGGzPWzTZZNkmXehxuWiJuAa9wzWBUhysLl29XxrxRAaPLNarQIZ6KbrwHmeaF2HqpjNZmg0GsHKA4rz0LorjrXY2F51+aasY7WSeL4uY1F4CoedE45BXZiaOlOTedAqI1lrUBFw5hom+ep6a7at2+0WMjxlWRY0/Sp7FKubW9vN/pJU+JzQcm21WhteACXLVLYy9n21WrmKkk57qHtbvSnsvzd1wCh8Kj5MvqGR/IeHh1itVmFbQwarkYTn8zn29vbw2GOPhT2G5/N5mBtnfmmWz3HylJLLQm35vn6oCbjGPYNuF6jrbZWA1eojdO5TA3gIbklI8lUr0yNfrRdAIT0lgCD0yvLvxuaDPajLm9d4ZKGuaxvspf8t9DwqNRxjtfRojWnfSO4MFALOFBNuNEAXvM7XkvB0GgE4z60da6O9vzES1rSMXJvL+97tdoOyZdd0q1fFjg3LzbKsYOXb+1QGqwjpc6AkzLHi3C6fuePj4xDpv7e3F/pDlzI9Cjdu3Ajr1jmFQg8DQSuY97Ser73aqOeAa9wTqMtY3aKquWuUpw1EUoFP12Se5yGzFQnHLiuiMKQlQhc1A276/T6azWawojmHrGQPFAWzJQ99ZSic7Vwq3eDA+VIVhTd3bC3smEJgrT0lJM99r/UROzs72NvbQ6/XC+cxUImWmOZ3Vm8G3dmnp6dh/Gx91nsAFD0G6u2wQV/8z3uvS3G4JzTJh2V5BGytVg2essFlOt9qn0W2XacmNJWkziszAl3nkDUqfzQaFZLJMGq80WjgySefxHA4BHCWMES30/yjP/ojAOdR2MvlErdv3y54EWKo53VfP9RzwDXuOyisNTkG53wVGmTluaNT5AucW5kMsqGlRvJdLBY4PT1Fq9UKllSr1cJyuQxzi3Sf2nXHWocmzFCLS61UCmQSC13cSrSWaFLrXlNj68Fzp6asaY6RLVfXY6twbzTON5mnYmCnEWLC3SMJq2zpcSpsdL/u7+8DQFCudnZ2CjtZ2XqtpavBeBed39TnwM4da9+Y2IN18tnkunTuG8w10Ht7e4Ggb926BQChv9ov9fZQCeKew1XJl98vSsI1kV8+agJ+CPCguaE0gQDdv7p+VzNQefOhAEJkLK3I8XgcUk+qlUmrTAOQOJ/LgBYSMHBmVdL1p2tObSYiD2px2fW8Oo9J680Sn3U9e+ShlqFXv2f92u+WiD2o1a7lW8vX9sHu0mOnD7Qsr32xtljhroQ2m83CtAKJlB4Mj8j5LDDy3muLZ+1apUr/U/HifdcAKet50MQcmnSGkfWTyQR5nocNQ/b398Oxw8PD4J1gMhPd8pAbSNg5523e//spL+yUxIMkt+4HagKucanQuTAKOY1EJRHqulaLLDvLK6zLN6bTaSFpPS1sXdfLujSCWTdxoOC2KSrVemU5KlStsIgRpAbrkOBooXiWCJMr2HJjhBY77o1hrE6PsPV3j5StohBzgXuIuYe9dnhl0PNxcnJSSOLCpVfz+XxjDPl8dLvdQvs1CE4JuApoVauLPObB0Mh5Tn30ej0cHx+Hdc6cY+/3++j3+xgMBuFZOTo6wmg0Qr/fD+f1er1A+qvVKpRJhSj2Hmn79djdkvBFr/cUzkeZhGsCfgjwoDzAOk+oQVcUrpoQwc4LqoBgIA6AsNxIyZfEqyn9dJ6VQk+FIQN4uOwFQIG8LUi8/F3neO18r5I1CZgudw2U0aUt2jbdh1aFvFoL/NNxuoz7HrOgy5QND7a9tnzPA2Dr9kiD95b3j65oRmxzKoHKHy1P1qEZwVKKX2ps9J7pvSrzAKxWqzAvvLe3V1Am2W5a1VyLDpxv/MEAO3qU2BYlYXqYUm2/DNh7+aiT52WgDsKqcWmg4GOULN2ZwDlZ0fKkhcxoUR7jco35fI7pdBqsAs57cT0lgEJkLIUYBa/NDqUJFVQ4e25HtjfmJtbrrNVqy02RESNmNTsSXafAmdtdz2cZSuTso4cUeWbZ2Tw11/xyzLhncoqAU+Wyfbq8ScvScbWBYSkrWtvYbDYLwVkAwlIjtiHP87BRQozYY/V599sugdLIe7vOW6O3m81m2Bzj2rVrYX3z4eFhWD+tFjvvB2MXGCTHJVrs6/HxceH5OTg42HDJl41rqs8peGO5LR5WF3QdhFXjvsGul7TEQDLUrFOc0+10OhgOh4VE+bQCSBaazF+DgXTLQgpATcHI5SA6B61uScC31Ow5ep49n9/tMhl+VqvLuih17a4qBzFc1PWnRJZlZ9mwptNpIXLcWqm2fxYxF7N33t20nSBpM2kFPR26WQcjjy1xXqT+WH/sc66kzDgEKoSj0QjHx8e4c+cO3vCGN4RlcI1GA+PxOFj4VCa5VphzwErKvLbb7WIymYR3ot/vh6j0quO5jXfjIudXacOjjpqAa1wKaNFZ8rIuUyUwEmi328Xe3h6yLAtChMuVdDkKiYvrgDXyWa1BCjTNe2zdvhrla6HCQYkzNtfqufuU8GIuT0sQSr46r2fXqsbcnhYxy1v/dDMKb+mVfo/1wZ4X8xzo8Yu4MHmurnmmZUhC5DIljQNIzY+m2qCBfbrGWi1fPrNaJkl4Npuh2+2i0TjbSnM8HuPOnTthLTBx586d0BdugUkSXi6XGAwGGI1GGI/HWCwWgZBp4dN65rRHmWu/7HhV1CR696gJuMalQKOCKUxoVQFForKpI7nsAjjLDMQlG1xLy7SSDGqiZTAYDDYidjnf580tx2CJWN28eiyGmIDXdtnj/EwXpJZFxQGIJ4ooE55qVaesV02qETvHa3usLTHlJVW+bWfMba9QxYr12AxrVLjssiFVAlLTD7r8TH/jc84/ZuvibwDCc8hEHVl2tkUhk2pwLfDu7i6Ojo5CH0jCg8EgZL46PDzE/v5+2DuZzz+AMKXCbGVHR0fu2MXGcVsF6GF1Hd8v1ARc465h58RU8HKeTgWmWqOa+H42m4XkGCRfXYrERAwapEWSp9Wo9bBtCis4PPeyfo9Z8ilB5M2RxVzc/K/EwPlqL1mEbZ8ldAAbhG7bxrHnvdFjdm2wR0werLD3yLqKxWvriF2jUwckX+vmVwvWg7eeV7/bTGZq/fIYPTB8/nWTB+bQBhASbzQajeAmHg6HaLVa6Pf7gZhJwiRu1rNYLHDt2jXcuXNno61c8sSVAbrq4LKJsibey0UdhFXjrpBlWQiO0ghgDRohQfJvZ2ensMzo+Pi4sK1bo9HAjRs3QsDVer0OAUk8luc5jo+PC/u36tZ8PEZrUud/uX5SXcBAMdKZ19vftN96jufSjBG1usL1OtajbeW1qrhYaNmaWcyDRtzu7OwEwmUA3eHhYSGi1o6J5zouU0I8eG5q9Tx45G37bMnaXqOuaV12ZtcAaxkkWa7fBc6eX83DrNMcwPmYMhMWn/vj42NMp9NCAKFG97NuLjHSvawZ5c8539Vqhf39ffT7/VA/35nlchneQ6a+1AQdV1DEX1nUQVg1XldQ+6egs9Gi9lxuGE9BxIxVmhSDEaQsj+TLeTEVPrRMNNuRCh6b1lHdh/xdrSZtf1W3s9fPmNVlr9Vj6k61xGJJvWxONmZl2z+OD7N2eZas7WcVyzZ1buzaGMl6/dLj3njzmJeOMnXveEy3kLQeAt0cwrq0+TwCZ1bvZDIppBSlksiMbGw3d4Fi2Sx3MplgOBwiy7KwgQNwvnSNSgLXvzMC2+b/rvFgojwTeY0aESj5UvhoRKiSMAUY57boamWSBXVZa35iuuYs+VJ40VXNHL+2fbR4dXlUqj9lllvV68vK8gg6pbzE6isr1ztH17Lyb2dnZyPgzJ5T1hZL6hdpvy3Lwk4LpKx9PX8b2C0kaRWT5DT5BZUmu40lLVL2gZYqA8RUOVDvzmAw2Jh6GI/HQSE9PDwMyUfo3uauVhqQxYC+Gg82agKucWFo1ivOe1nXIOdmd3Z20Ov1gqCg5auuMm6RR7KlYGJZvMbOBSvxqiDUeTsKwzIyUcUh5g7lsZhgVwGamjNVl6YNTFOXtDf3q+d6ZXuf9XxLlJ7ykqojVaceuwgBsk7PIo7VXfXc1O8sgwodn5lOpxOeOxvoxf92vTmAwn7UeZ4XcpBzWoT3gNHPupuXJpEBUFgfzueFdQwGgzCl4K2TrvFgonZB17gQdF6LrlsVttySbb1ehw0VsiwLEc4MNKFw6ff72N3dRb/fR57nODg4CMcBhAAtav10ZZP4vQxHJH+6p3u9XjjHazMFsE1NmQrUIqz1q7vl8JhHjHrMujxTCTbKSDFVPsu1m0X0+/3CNo96jZbluY1tX7328DrrPvbGRpWlsvlvW67+pu3kmMbmRkl6vHec06UV6gVtadtIqq1WKyiRnU6nEOmuu0eR5BlIeHR0hG63G9YNsz2MhGbQ1nQ6xXK5xNNPPx3q531kQpJer4dmsxks5noe+MFETcA1LgRav2olWgGlkah5nm9YDvyzQVmz2QxZlgVXNPfrXS6XQUBqMg8lX5tYgwRtLTxCr1HL1WbwsvOjsblIb/mSRw4pMtHreG7VOVYtK/Wd0DlybtWo58esaY/YqyI2HrH5Zz03Nads748qMRoRnZrnZqpUpn9st9uYzWbJOX0th2TI8zmXzDGi+xhAIGLd63o+n6Pb7aLb7QZlU/Oqs0wuR+L9ojXNMumWZjllz0uN+4OagGtsjSzLCq5nkqu61FRYAHB/p5Dq9XqFbD8kA7rt+MfylCgp7DSqWclLg4yA8yhj/SM0qrUKqaTmMHUM9HiKQHiNnYe116asX68OHteEElYxYC5lXT8cQ8p9m7JWbRmeEhM7p6x/VeqJtV0tbruNIHM3p5Qoe7/yPA/RzJodjgqa7tZFi1WzaKl7Wb0ROpXDHb1sn+jVoALR7/fDOuOLjF+Ne4ut54B/5Vd+BX/lr/wVPPPMM8iyDP/u3/27wu95nuOHf/iH8fTTT6PX6+Hd7343/s//+T+Fc27fvo1v//Zvx+7uLvb39/Fd3/Vdhby3NR58aJQoLQbgPGDFCiwSpFoiDNgi+QJnS8yI5XIZ9gC2daqloeuA1RLW4BgryBSW9Nh2b6ci7zqdB7TWVRXCTcHWcTew/QTKrdeYu9Yi5RYva3+Zizn1PdUO28eydqiyyOmR6XSajCaOtVmVRlvHYDDAYDDYiGDmtpkkWpuZjNHRXO97enoalAOSPp9BbmGo671rPHjYmoAnkwm+9mu/Fh/96Efd33/0R38UP/7jP46f+qmfwq//+q9jMBjgPe95T3CnAMC3f/u343d/93fxqU99Cp/4xCfwK7/yK/ju7/7ui/eixusOTTup637tciS7fyzgu6s5z8aySb7clN2Sr3U9K1ladyGt6rKlQSyT7fUCslLXa9+qZIGKtSF1XcxFXWVe2LZVpwno5vTGqKoSEXPBx8q5yPhse666oVUJ89But4Nnh3O3TO2oY1zFA0ErlxuA6DIhuoZHoxE6nc7G+8BARfX2MAobQMh6xXdLiV6nfGgha0BWbf0+WLirRBxZluHnfu7n8E3f9E0Azm7uM888g7/1t/4W/vbf/tsAzsLmn3zySXzsYx/Dt33bt+F//+//jWeffRa/+Zu/ia//+q8HAHzyk5/EX/pLfwlf+MIX8Mwzz5TWWyfiuLdIzRcxong0GiHP8zA3y3lcuqOBoqXJnLiMeqYw4bIkZr9qtVrI8xyvvfYaABTcgSRHGxRFAtbv2l72yeaNVuK2fbXLONgvtdS8OUeFZz3btnsWWwo2NSKwadHHwLpIALu7u+E+tNvtsMsOlR5eU0bAZVa9HSd7XEkj5t6uqpiwXDuu3r3QYyQpzX51cHBQmENWBckqg5qXPNZmurgZJMXAxFu3bgVXNIMaWWar1Qq7U6knZzQahdgI4GwemXsks83T6RSNRiME1x0dHblWuY5LTdB3h20TcVzqMqTPf/7zuHnzJt797neHY3t7e3jnO9+J559/HgDw/PPPY39/P5AvALz73e9Go9HAr//6r7vl8uHRvxr3DilBqAFQuhUgCTbP842EGMyypNYqLQ3gfAkG16JqpLPuLazkG7MWU8I+FQFry7BzyV4dniWk1m/MarKWq7a3zLoqa3usP/Y775PeB7uMLOVS1vba88sIuqx9qfpi0DZYQo8pEDxf4wOokJCo1Kr3XOV8J6iw6dSH5wlhHVz/3mg0MBqNwvvBTUZ0PpoblWgZ3OJQrV2eo1az7jZml+zVuP+4VAK+efMmAODJJ58sHH/yySfDbzdv3sQTTzxR+L3ZbOL69evhHIuPfOQj2NvbC39vetObLrPZNbYAhQ2Awq4ztCAo0HUNJN1n0+m0sOyF1i5wbqkuFgvMZrNA2jyuLuaq5FtlvtUK95gbO4YYWaXaUtVVbOux5ep3HQ8dH69/JAF6M+w127THtqWsjNi4VM0c5o2lTSxi2xNrN5UQPmd5nheebUvmXr/5HJPsYm587SfHn/PLDELks85AK9bJNvG9UmucxH16ehoUWYIETqWB+aJjY1xbv68/rkQijg9/+MM4PDwMfy+++OL9btJDD0/AqsXE3V6A8wjjPM+Dps0AKwoLTVBA6NwXtXgNuGI7qgr11DydZxGVEYa1YDz3r7YhVk7Ko6DnbEPM7GNMgYjVw3M0sMgmAtHyY22ya37L+u99j92nMne+tWA9C9wjbTtGJE/tj877AtggYNtWO62hY8LPqiDo/tTc2SvLsrAMj++BVWJJ8qow8V1hlixmjbNjrtt+anauGvcfl0rATz31FADg5ZdfLhx/+eWXw29PPfUUXnnllcLvJycnuH37djjHotPpYHd3t/BX497CEzhMvpFlWSGDFYCNSFHVxqntA+dJLjQHNINJdBtCCi4lwdhfClaY61yxkk4V7d+6WMsEmUZkV3GjenVp+8r6XKVsXk8rTP+0HCUrz31u27Rt0JlHWFVd0XqNfrZKiVWYrPuV39XtDiAkrrAbZnj1AXCnHIjYkjmmpeQzzyxwJGG7i5gGt+m+0Zyu0f2F+U5RqdAAWM4T13gwcKkE/La3vQ1PPfUUPv3pT4djR0dH+PVf/3U899xzAIDnnnsOBwcH+MxnPhPO+aVf+iWs12u8853vvMzm1LhEME8tlz9wXW+Wne3Uws3CJ5MJDg8PC0KHiTVoAazX5zsUMUKZyyk6nQ6Gw2GBfC0BA5suVe83wgpGzl3rb/ZcLwNUigCrkoc3p8jjtuwysrXttH21RKplcT0q5yEZnRsj25jSUTYeqXHx5tk9BavM68Dr1f2r7dXNQgCE9bH01GiGMJKv7m0dW4akKU+1Xs8VTg+QjdyfTqdBOWUCDgAhbzpwZtnu7e1hOBwG65xxGKenpyHaeXd3F7dv38ZkMikot7PZDC+//HLYtnA4HNZzwQ8Itk7EMR6P8X//7/8N3z//+c/jt3/7t3H9+nW8+c1vxvd93/fhH/2jf4Sv+IqvwNve9jb8vb/39/DMM8+ESOm3v/3t+At/4S/gb/yNv4Gf+qmfwmq1wgc/+EF827d9W6UI6BqvP+gCI4HqlmlKHPP5PLzYtHTVymSSAN3tBSi6MzWvtK7rvegc1baWp15nLbMyF+tF59BiJFOlzdv2S8mBAXQqjC+6kYLnprXfPUuXfY9Zt/aYd080wYi91iaG0b2kmTcZQFAKufyH13gR5tpWLi3S+mydStD2WcmyDPP5PJBtu93G8fExTk5O0O120e/3wy5I3W4Xg8EguJo576zBc1ofgx1Z13g8DpuXaPxGjfuHrQn4t37rt/Bn/+yfDd8/9KEPAQDe//7342Mf+xj+zt/5O5hMJvju7/5uHBwc4E/9qT+FT37ykwUXyb/6V/8KH/zgB/Hn//yfR6PRwPve9z78+I//+CV0p8a9AF3PupECA670JVZBQ0uZwpGuOJvSETgXwnoOrQWdN65qeabcph5iBJqyTqu6Te8VLlKvtcys9QdsErCek5oL9dpmlZ+UK7sMSmbeXK8eJ9TFTDDpiyaO4ZpdW1/s2bPu+djYETYoy/aX885chwycTeEwOGs8HmO1WqHVamFvby8k2WBbaLl3u10Mh0NMJpPCVEu/3w9u6JOTk7Ddp+6Tfb+e40cdd7UO+H6hXgf8+qLf7wfBxWTyTFKvL7Bues79TvmdiR70mIKuQs5RzWazcK7OsSlSFleZKzVVDrApTK27WK2NGGJzhxy32O8ebBs1mtVTamLt0baPRqNCClDgbL5wOp0WMowBm5syeHOw/C3mrbBJWmJt1LI8WAvTm/Pl82Tbw/XrtH5ns1mBfNlGJbjU9Id+17STCi3fU+QGgwH29vaCFfzqq6+i2WwGj+Dt27cxHo/x+OOPAzi7R7du3Sq4tIHzlK5K0LpqgSQ/GAywWq1weHgYYjmuIA08kNh2HXCdC7pGEiRF4Jx8rduS6xfp8qJrjOfpTjBe0gW1VFarVSFSM0YuqbnRFGJuSrUEvblEW37MvepZy7bN+t8SThUCotUTs0g9kBy89IYAwo49nU6nkEbR62+MgGLfbX9SilRVa9hunGHr1N2oSHKdTidsTMCt+5bLZfhOcIrEIqUw2edV22YVhJgCosrs0dERhsMhhsMh9vf3cXh4iFdffRU3btzAcDhEnp8nq+HzNpvN0O/3g/eJdfL9pQfr9PQUnU4H+/v7ODo6CoFgNV5/XIllSDXuD2i5Euv1OhCyJVeuK2XwFK1hCkFv2QqADTJX16Cel4JaKFXnIfW7kqeSsb0+Ru5Vg4SqINUX295ty7ZWvQYQWSuw6oYUth2epVh2rVdW1WkDrx7OB5P8ut3uxvpXKns8n4iRr2Zki7UnFjBo26zlq2Kke1mfnJyEuV7ejzzPg8VKEqbywOeWGbU45bdarTbuD63+LMvcsanx+qEm4BpRaCJ3Wrh2HvH09DRYFXQz63ILYFNAk4w1g5CiCvGkUEZgeo51y9r+ldUXs5TKyvDOqQK1/CwJ2TJTVhwJiBYb92/WADtVjDw3s4XXx5gy43336in73bvXdgx0L2q1TJVsU6TPPXsJG8XutaGqcsQUliyT9wQ4C5oiCd+4cQNAMe2o98zO5/NCcNlqtSp4NDR6utFohHX7F30ea9wdagKuEYXmZuZ37tFLKPkC51aVJ4ysUNJlLyQWFRApt2dVVCHrWCYlCz3HtucyXHgxIqli2Xvt9D7zP8dY15laC46Wlb0+1vZUe7ZBrL7U/L26m7dpX1nbmABDtwysAusJ8O4BLVuNxObSMOBM6T04OMBsNsP169cDCVNJUk+UZvPiGvx2u12IxWi324V1/Ayw0wDZKu9BjctDTcA1XDDrjs4z9nq9woup84Sa69kDj2uUNAmYgo1CxM7DKmLEkhIa1gL3ylQSvgjJl1nClyHYtmmXV49nPel0ga5P1TanSLhKf2L99hQarZOI3buy8eDzo/OhGpwUayvPtYk87Gfvz1OWYmOnBMzfNMMccGYF3759G41GA48//njYBWm5XIb18oSmw+RGDO12G+v1OpA8p5B4DlDc2Yyo54RfH9TO/xob4G4tTFTAtZEqtKiF616juqzBCm5dl9jtdgvlMRkELTKuNa5itVRx9VoB7hGKCk6buaqKmzJWv60jdZ3tl7bBWsa62UVMUVFCyLKsQKysk0qUBsIpSbXb7cJaU9sedeOn5jy1vTxWlm+bZXpuaR63Zer5VOLG43FhtyOCG97r+To+PMb285ln/bE5Xdt3/U9vQ6vVCvv/NhoNnJycYDabhUBFvbe3b98GADz++OO4ceMGJpMJJpMJ1us19vf3cXBwEN4b3j++Q6PRKCT86HQ6Yd6ba4Fnsxm63S56vV4IxqrJ9/VDTcA1NtBut8O8EEEBziQGmt2q0+kEbTpGIvxPt1i73Q4vO/dMjSWz9/LxesJP61SBdxGrM+Xu9OARgZbjEZQV/Pa4tl0ts1SbeE1smVNMwDIKOsuywvpu3YnKK8trg8VF7wHriZUZq9cSKYPM7Mb0jAqO3Wu9h942fp4CYH+zyhs9PkwIwvdAl0NpbnUqg0dHR6Espq3k/tnA5mYlrJ+bPSwWi6BA8B3W8ej1eoWo8JqEXx/UBFxjA5rwnYnh+Z1zvsB5kNZ8Pg/RljEoAesyo9VqFQJHrDBLWakqZFJu0RTx6by0tWJiy5CqIFaf9z2mSOjvqetTVqRap7HfKORZrmYyA1CwxsramkKMqF4PUMlLzRFblOXvTkVDE9595nwyN0YAENbttlqtYKlT4V0ul+H9Ojo6QqPRwPXr1wvPNQnWgorDYDAIEdLAmfdKc00vFouw/EzHqSbhe4+agGsUYJcWAZtCntaALvC3AsuL1uU6U11SMZ1Og/Dw5srUiolZPSkLq4p1Zq0gJeDLQMxdeRFC0zGKpRK0lleMLGy9FLwaHGe/V21javqgaln2+fHGzp5roR6Bqpa4rsfdhrTtffY8HO12O0zvAOd5yZmfmtD197PZLGxgc3h4GPYIjnldtC3su04n6W9qBXe73aAQvx5I3c9HBXUQVo0CNL+z5ovl/CyTwTO4g9+VICl8LHlqpiBuwGBfdivs1Pqq6gKucr7WlSJ3PVdduNvMlXmu87I2xa4ntlEQqrqKtVxNP2nXRnvg+HjnlRGYfV7sWFclbXudFxRotwaMjYlHZrFjGj3uPfsEYyu63S6yLAtuYW4MEUOv1wtZsvI8x8HBQXAVA+dk7Y3Ter0OS5k08FHXB6vSoOuCU2O+jSJVBa+3V+RBQW0B1wBw9gK02+0QIUmrVHeFoaULnGnymrJQBbe+nOriHAwG2NnZwXw+x+HhYSBv72VWYecJ0ipEZecpVSiynbq5uZ6Xctt6Yxdrg2dBVS3HO6csd2/MXc12xFzrOgZMNarntNvt4BHxLFJbns245VmGqb56CpUFr4vt06zHdAs/Rn0riXnwPDKEjqO6l2176UGghcspG/42GAyCYktrWMm80+lgNBrhqaeewng8DgFXL730Ep5++umw5IjeJcZm6PPMDHa7u7sh8Aw430iChEwZMBgMMB6Pk5s1XLbFWlvANR5p6FpCXbRvNWbgTNBw+0C1NKxwVYHP8gAUEgOUwXsxbR3bugitdeRd7y1TKRPyHrZ1jXtKhP5tI6isC1eVIf3uWXYkA10nXGWcq7j8YyRsLfWqfY1ZfnqccQckldgWgyyvyvEUQbP9fK+41pbR/dzghBmv6A0iWXK/4PF4vLEbkqLX64VxSlnRAMI7a5dY7ezsFLY57HQ6GwFr9xKPKvkCtQVcA2cChC8ehTyP8Xdgc+mHut6885SAObfM/X95XmyOsorFy2N6vbanjORoCXvWlm1/FQKs6l6uQlJVfvfKswSXGkfPrUowlzfTj5b1KdZ260pO9cdepwSXUsTsvbHPqS714fPBz7ZvVVzenlcldg6VWFqbXJsLnO+VrRsi2GeX63UZpc6djWzQlV1SZcddl/zpul++O5xSonXMvNn3Eo8y8RI1AddAs9ks7IGqrj0A7jpQkq+X3AHw10PqWt9trBvCm8/zyNsqBVYgsyz2w/7mCfyYouC1rSrRKqpat1UIogpihFbF9eu1J3Zu1XtWBR7hMYmLHX/WQdcscK5U8HlmmfZZsZ/ted5zFGuftZJ1V7DFYlFIB+r1Fzgjzel0itFohHa7jW63G6xkq0Do8w6cR13reerR4PhxZyj+RqXlonsGp97bGueoCfgRB5c+MAXkdDotCLUsyzCZTAqCny5pD3ypuZaULzDz6a5WK3ceM/bCqkD0XNxW+LPt2r6yslMCQgWZRzZVSKcKIceEutdWJZiyMjxyiLXDji+jc2MZzqwSk2oPgKQbO3a9ncbQMjllwrayDg0gA4oZ2+z0R56fR8HzWusB8RQ4bbe9N9oXPoeM/NfYh9jzr2Xxt4ODA/R6Pezs7GAwGGA2m+Hg4AA3btxAr9cLgVa8Vq1/dSdzaROTgOgYMlEH6+73++Hdt2Nfhpp0q6GeA37EoanwPE08JdQt1N3MpTwUBrSYY9dXeWFT1ym5xNyqVS3HmDVVRtRVrVLbRq+s2LHUtSnlgO0jyaQCl6ySQ5Ly6rZ1ee5gWzafByKW8jHlFVCitclbvGeAf9ais65fawV7977KfVYCXywWOD4+xsHBAebz+ca0hmc1W8uZmyoA5x4rzX5FaIIbvQfaf3qhdPlflmUhUE3d0PVOSfcWNQE/4tB8zxQO9mWNzbXF4G28rqkoSfgx4XM3oHBPlVtWh+1vGVKEWdbWi1oKMULQe1RWvucOjt2X2LKnsvZbItHyUh6NGFifnff32sJnQZVAa1nyPHutJcmy9niIXRfb/EPvmZI/SVHnfTmPzMAqDcZSqLW/Wq3C3DejrZkEhNno6MFar9cbSXPuNbZRYh8W1OrNIwzdbpDaNLAZLauWEwB3XkgtLE+w8QWn6yu1CXgsEYa1dr0lNdaasf8vYn2yrpgLskq5ljBtG+3xVFtYXkzJiHkAYu58uxRLx4tjXGXdsdemWPti964qPEWQSqNNHOLdm5TLW610rl3X/a2r3Bf+eXOvXps8T5Nt52q1KiwXAs6SdGhkNC1ZupJ1SaGNvWDg1nq9DnJA54KB85zR7H+Ny0VtAT/CUOEwn883XFYAwoun+ZgtOXsCxwp7FQS9Xg/9fn/D9bgN+egfNfqyYJZU2Z72reWnkHLNXiZSFpN3bgyeizJVT1m5nrs3dp1niaZglZvYGOh3XUJFxc8qmF4b7XI6T1GoYqHHlDXvvNgyMO+esC9AcStPWsHMnGU3QVkulyH2QseAVjA9XxwvknGWZSFfddVlaDW2Q20BP6Lg2sQ8z8Oi+yzLwnpFnS9jAIkKMRvowvMYzGU15izLMJ/PwzZpg8EA3W43HFO3N61tL7sWoQI5Zkmkzi8jmBg5efXEwHqqnJs6z+u/Htex0vM8y98bE02iovs6AyhYf7E2biuYvXtUFuwUq9PzJPB4TCmy46H32k5f8Fnexj3O51iXBbFe621g31WJjfV/NpuFjVKAc2v18PAwLG9ilHez2SxYwUrYLN/mb9e6OcfcbDYxGo2QZVkI9Kp6j7bFvSjzQUdNwI8gaKkyEQCAsDE3BfBqtQpzQUCRkLUcXgsgGbBBDZrZh3SNsV3uYIWqCjZP0PLcKlZHCuoetCQW27GoDGWkklIGrDuT9Vry4BjqdbadlkD0M0lBU4XG+rmNmzzWpzJ446XPgt5zL0hq27GuYt1e9Dnz6vSmCvT+2OddFSXuF0xll5jP58nIeO85Ac6XZvH+0x2tW4MCZ3POk8mktoIvGbUL+hGEzv1yvod79Co581wA0TkgvtRWeFtyYCIOTxjFrBfPurGu05Qb1v7uuTEtwdl2ad8uInzKLO2qbljbL/6vaqGnSMP2k8K92WwGclZFrIo1GEPqvto2eZ8Jdd2y3Ta627v3Xt1lbm1VemKxCbHxtc+Rh1gUuLaXdTNTFvcT5v1ZLBZYr9cFUtbPloC1jvV6HRRuXZbE31Qe1Lhc1BbwIwZan/qiWWvIyw5kBY8Kv9QcKevjDjB0bXFeLiXUUigjlNQ5qeMxl6bnOixDGfmyzotayPYc7XdKsWEbVNCqUkZwLbe9R561nSJQ/R4b321hN43YFnasvDam6raWd8w1z3cp1f9txmK5XGI2m2F3dxftdruw3n6xWIQpJEK9WLZthM4te7/rdMTdJuZ4FN3MKdQW8COGLDvfgozClfO2wHlgFgOmtsmGY0mAZfd6Pezu7rq5anWDB0WZZevVrf9j7YuBJGPr1M93E4jiWdoXtSSr7EzkwfbLkjGfC13Pba+z3z0Xt6e8ZFlWsFq1nNTUQqxvvF+akS0ViGfbZS1CvbdVXNExq1r/YhuTqLtflWC9JlX3fD7HcrlEu90uKE06V88yrLIUU/h0QxXgTPniDkv8ftE1wTX5xlFbwI8QdnZ2gquZbitN45fnZwEns9ksuCIpNDyrRzdt5/88Pw9A6XQ6uH79egj2mkwmePnllwH4c3oWVc6xbeI1sexJeg5/8+Y1PTekZkqqsizHq89rcxk8gtI22757VplHmvZcKkjj8RhA0bth6/PGVMdSiYWkYtOWemPs9TulhMXiEth+2177TFmXte1rzJK3x5S8PdLTd4bnawIRbYsNfAOKW2ZOp1McHR3h2rVrGA6HIcqZymyv1wv30CoAHBdN1QmcxXzcuXMHb3vb2wo7Nu3s7GA8HuPk5AS7u7shk1fKa2NRE28ctQX8CIFzORpoRXjEBWAj6TvPtYJI50jpWtagrul0ijt37hQEkmflepYisN1LXMU9bb/H6mV5KfetnlPWHq+vPO7Vn7IeUi5mr35roSk4f8i8wap8VYW1IJV8U/ck9RxURep5iq1Nj9Xt7RjFz6l+23q8ZUb2N4W3vM+rBzh/L2kFa3mxgDxC26lpOPM8x61bt4Iyxq0N1QrmnsI1Lgc1AT9C4LwvoymtpUKtnGSq7mGPcFWTVrc23Vm0qJhMnnUCcSvKQt1mVRAjIWullAn4GMnqb1VSVHrtqtJvPV7FhWdd22Vt8b5bgvYsx6qIKR1aVhWX77bwCBWIu+15biqVJY/pf8LrgxKvPd8urbOosoYYQFjXGwuQUgUq9q6RdHW5FLc+BIDhcIjBYIDhcBjGj0udbJ9rXAw1AT9C0MArtWw5H0XXMbA5X+QJBQoaEjZfZl5HUmbkZkqIxay5bSzfMiJLnUPYiFpGAsfOjWFbt5sdZ4/4YkqDp1AoiabaGBPQ+nsVlLmTt7GkWd4251R5fsqyUFniLHsGvXEv8+yUlZtKUqLPhrre1WtBBdizUnk/mf0K8Of5b926BeBsKmIymRQ8IrS4Lxr8VqOIehQfEWiQjXUr616hsQ3LPaFFLVqTuGsQDImZEc8WVSxR1lWGlMAqK5vn6TIWkq8ux/HqrBI0c1HELFBvTs+zXD0rzvNAqEs0RcjbwLOivX7crRVlrfdUe+x5Ok7af9vOsnK0LSlPh21zlT7Fztc26/1fLpeFtf1euUrC7K++n7SCaQF3u92QZQs4U+R1HX/V97jGJuogrEcAWXaW4SrLsrCZNy1ULltgNqpGo1HIoBNbfsTPdH9pkgCgmEGJZO4JLGs9WKgwi1l/sfalBILnoqQL3gouDbyy7kMbmFXVZWvPU2s1Nk7qNuT5dr6vahpElqXzmyqg2Y6YByTWXu+YbZPnuvfGIQVLTmUKh/ZH++WV4/XHW5oXUy74HMXKjSk4ntciNhbqrVIrdrVaFdZ083227eH7yuu5nInfX3zxRXzZl30ZptMpAKDb7YZgLL7zut1ojYuhtoAfATBNHXC2hIHka5cVeJaBhf2NAoNLQZQsdFmIWosXtVa1/thvXn8sbFIEz9JQYrVCPjY+qWQL2/YnZv3ouHvRtmXlpsq2CleZJWfPY9kpQrZtjOVCTuFuvB1l5XhtT80fx77HFMuUpbjtOMTun753+j7GYEnUuqn1OD1DGswZa0+NctQW8EMOfWF0azK6VRuNRkjGrnO5Mc3dls3f7NwVCVivs5bHNq5OzyrcJgjKGxO6x63lastjUJlHSNZispZlCqmx9c5l+VqXQsvS++CVn7I0vajfy3Ivxogp5uGIXXtRVKnHs9a3RWp8vTljT6GKlee50QGEPOrqnbHnK7Q8jaA+OTkJVnW328Xx8XHhOhJxq9UK01k1+V4MNQE/5FDrV5cuZFkWgjdiydpja2ntC27PJUjAdnkFy6viboydU+VaT4jZTF/e3sV5ngdlxbMs9b9th3VxVm2bXm+/byvcrHs1VYdH7EQs//U2ilNZ/Qq11i6qmJVB50y1Xu9z2fTItlClUctU71CqrpjypVMj7J9dklTlXdFytJ29Xg/A2TyxknGdnvLuUbugH2Jo4g2u9+v1emE9H9f6aWJ3JU1vHSOtZs3Co6nsVJioW1oFhArasuxSSmj6XaFWRApKHLHAJe23jYi119lyeb2OU5U+eW30+qPt0DJojXjE4hFszCUac1mql8POD8fGVhNOqELA52K9XkfvV+y5iLnZq5KjKk822Ezb6o2JvSamdNl+2P/e9Ic3j59aFqXlNBqNsFzQ1u+tUtD2KtRbxfiNz3/+82g2myFOZH9/v5DNjtsU1rg46tF7iKHJ1VUA8lgssATYnBcCzl5cBnbo/I8XrBUT4lqX99mDFWQxbEvC/E4Xs5cIIfanEdMWqrSkSPgisK5wCkxgM1AoVmfM6vXIzBKVRwaxetj3bZYgKcFdxIOQQuoZ5O9WMUtdnyrfI3YejxHhNi5/fa40zsJem4rqts+vff6ZDQs4X8I4HA7DsiSg/JmrkUZNwA8xNGvNcrlEp9MpJM7QpBm0VoEi+apA6nQ6wW3NF9fOj/IafUn1eCpwyKLMJafnpcjeYrVaYTabYTabhV1kyspMtdcToilhmnL7ltXnWWNeez0S8cpSlGVn0janSFyPb7v+l2V4lnis3dvgoorPRduQ8hRULVc9NASnjvS91fpsnanngMe8uf+DgwMA53JgNBoVzuESxG3evxrnqAn4IUWWZW7ydLWAgXOhq+sCPeFH1zXd1yqI7fIcWt72d9Yfi0K22Ma96PUz9hc7X9cApwjYWoReu1PfU21N/R4rT8efHooq5O4dy/Pcte7L2ua5W209nrKQ6ve9QtX6Yla/llFV+VKFJFZWleeG7xjnebn2vizdJuBvzOBBlaajoyOMRiPs7u6GY5wTzvO8Tspxl6hH7iEGI301OYa6nrnGDzjP3+y9lNxKUDNE6dpDfWE5H0nyp4CwO9VYIk65MokU6XnXehah1q1tsKQTE2J2HtH7jXVVsZjLLJMq/bUudEvCVRUZfUZ0HWms/WXWaao/23o19NhFSXub61Ju8CoKk1eeLTv2e1l5vDd5noco/pQrm89qlf7bfk8mk41zBoMBgPP1w3YfcK/NNXzUUdAPKSg8KZjVHb2zs4PlconFYoE8zwuBUhbNZhOj0Sic02g00Ol0MJ/PcXJyEoib5XLPXwoHmwUrFhHtoYp16f1OoRO7ToWEtXI86yRmDbM/KYGbckXbery2po4RNiOSKjbazpR7EzhzzQ+Hw8LvnU6nkF7UtteOn9Zvs59VccWqcmTb7I1R2bh51rmF96ykLF4dM69P27j9U4qagoSrHqzpdIrVahW8XVmWhSQ6AAqBldZyTlm/WZYFj1i328XNmzfxzDPPhFSXvV4Pg8EA0+k0JPNhEOZFPVaPKmoCfgih7me7rRldSSRfwA+4As5eeqagI3Eyo5aXXpIvOLDpeo4JIhVoZYSs/agKryxGhAPnWa62JcxY2zwhnGpXzB2bEpJViCQ2r52yyDWHsGZF0mut0sL//E3bb+uoMp4k79jcsUdYqX5VqbeKF8Ker5neLGL3f1sPh+fFoYeJCq62X8/V91Dvky0z5bHI87Pc7tzakMsYW61WIGB+T41HjThqF/RDCL6kCi47IpbLZdCqCSs0er0eut1ueLG63W4gLGra+lJXcXnGyK7sOq99ZcdTsJZhzC3ouQ7tmG3rjvTaYstMrd8ss9Kr5HMuc4PSqqZlFeujVTisQhOr2yJWh05RxO4Tf7ffvaC/Kigbc2thVik/9RxUVbRI/OwTpx7UawBgQwm2Cl6V+8m/k5MTTCaTQkQ0cCYbeD1jQ8r6WWMTNQE/hGAQFNcAMs8rs1/NZjMAKMzJWrTb7TDXw+90C87n843IS4UKSU+IeBp7zMVrUcXleJmgEKtC1LE+2/N4zjbjRlglx1o1MWuQ19iyPIsoz/PCrjp2Ta8tTwW/9WJsoxxoYKD+XpYhyhsjbYv3vHn3MqU4xJ67WDBhqn+Kbb0cNvbC3n8vOY4l7pTCaD1XwFn62ul0WsgXDZzLBLsssUZ11AT8kIHWrwodCtFG4ywxOwMrms1mYW6I5zebzQL56ks/n88DgXtkERPy9jd7zLMwUu4xRZnlYf80wOiihB2zHqsqEmVlb2OlsN7YOG/TR7V8mJIwRsAauGbnnT0yS7mVlSBiHhJtI+u35VTprx0/L+FMrFy9xmvHZSuAngLLxDc6laJ943/+6X26SPuWyyUmk0lIyMENXfgdKG51WlvB1VGrLQ8RGo0Gut1uYZkAXxJmrrp161Yh/SIFLK3jPM+D+3o2m4U80tPpFLPZrPBi2/lCCm3Vhqkd61aHwKalpt9T2nkVV69n8ehvnqC3SoTui5yCZ3GWXVPmHeBfu90uBNXwWjtuvI+xOthn62KOlQUUMyMxj3is3Tqe9j4oaXljxQ3l+Rt38/GUNRttb6Hla1s8UtJrPAs7dY9IwNrHsufXWqr2uNapn1VJpMKc52epUu2KBA2Ws0o1/3gdEE+2w3p5XwDgj/7oj/DYY49hZ2cHk8kkTE/xmel0OiGznpazjQJa5kF4GFET8EMEO/erKSbtecB5Xly97vT0NAh9Xs+kFapxey8LXZdWCKr2HRPEKcTcrJ5L1FtO5JURA89hogOvLdr/iwqKmHKgZMMlHnZTixRsm732euXY/lgi9rCt+9Q7T5O6eJnI7taDkCJfwE8Zaq/RY2ybPVZlLayn6HnnsA4SPZVYjb/Qtth30vNI8Df1ZnlgeVZurNfrEIwFIBCt1qsrL+4WF733Vw01AT9E0OxT6/U6uJHb7XbQXO3LQU1XtWK+sNS4Z7NZIcIxJWAZGGLdctu+mLEXMEZ8nsXgXWevjb3k3jra2JKjy3K5edYWA+UsOaWsbioitqxtCJP12VSGZUSU+s2zPPV5JdnrtbSwVHFLeUiIMne4WompZ42/26V6HjF73z1PTwoxlzL7o++hdStrn5SwYxHx3jG+954XgsRvN3qw7Yn1a1ul+1FAPQf8kIAvjloUBEl2Pp8XtFS6/4BNAag7KKkb1BKZdaHZRPtqjZQJnzKLg59TJKiWjzevp21UN2wsWYi14C+LbFOwpFGmjPAae8z7bmHnwu0m6xyjy5zfUzdnigAJS6w8P0XuKYu/7H56zxv3v7Ukw+fDtiFWt2ddp6DvD9fm2ufTtpUeLXtvNRmHJyOoEMXusY2EZnIeLSP2/D0qhLotagv4AcW2GmOr1SrM/ZJ0dekRgALJ5nke1vapUAQQrF7OK9kdVVSINRqNsH0f0+NpIBjPV626jFAUav14xGwFrlorWicFjGbvOT09DUEtSs5abowobApO1p+y0rbpM6OQNcmCd11sTK1r0v6ma3z53859sx2eFWWtTI/4YsSYZWe5xdW69NZkx94Bvb+xMdR2s7+9Xq8QWAYUN7K3wU1qUdKTBJwpprppved1iBHyNu81ydRuuKCKkb2PSqS2Pi4/ZL/4m816lud5qBdAmKJar9dBOe/1eoXpLC5Huuh64EeRpGsCfoCxjfaouZctAaiVq9DsNapZ8wWy2rYHvoC6EJ9WlJKWpxlXtXpS13guOxU6JE/9s9dwvtdzM9JbUBb0sy2quFRJwPRuWOu0rHy2sYoyYPunc4Ax0lAy0HNTyhI/a5YmBgZlWTH7lWfh6njZ8feeVc89G+s/lR2d6yT4bPB+DAYDrFarkBFOFRDrubBt9NoXe645TtarpOdZK5Tn21wA3rlWQeG1rId1UQEBztNT9nq9ggzxnrVHkVS3QU3ADwn4svGl2t3dDRYxj5FkGNhDq0pfEhtEBaTdmvxMAqYQ5bpj79xt4F2TUgrs2kglXr3eEzLeOlSSrxWiqTZU7WcZCef5WTQ2o1HtOkyvLPudf9a1rm1lv210rEbd2v7pdTY+wI6PRxjNZhPr9brgOeGzc9FxsxZ/7N7oOLJ+TdXa6XSCZ8iWzXZyUxLGVqh3wrY1Rk56joeYFaufvWArPt9K2J7HRMlYvUJe3AF3QtN7PZvNwvhZxbYm3mqoCfgBRtWHmEKN7kLmbwbOifnw8BAAAvlakilzj3nuNOA8raO6EJWAY8FXKavgIlDhA5yPiRUMHhFVsapjFojFNl6LMgWH95Nj2Ww23eVA1irUNqtVY92kSqKazYjE2+l0Qn0xq8tLBhFT4OyyGW4kb8eg6vPgCfzUdUqGJBOOk2b9ovdGPQ66wxfLoit7NBphMpkU7o23Ucc2z7gdY8+1zzLtVIBOo9jy7G+UB0rkfI/0XWm1WiGOBDjfkCEWkFWjGmoCfkCxLfnyc6PRwGg0KuxctF6vcXBwENZYqnBQt6u+1NoOu8bUWiqey01fzG36ErOcqkDP17lTtidGvLb/sbJTllWKxKv0w1p0ej3XVqv1Zq2glPs11gZd4tJut9Hr9cIzQXjZ0rRcDexhPR6pqjfC3g+vjVVdtfY369GwAWXqUWi322E/6EajETw4tj1KgOrVUUtyMBhsBPFZWCXRG0/rjdH6Y+Nlr7fPsbqPqTDrO8w1+rZvGlDJGJOXXnoJQHFLQv3/euMicuJBQk3AVxh8kZhsI8vO5qa44QJf4lu3bgVBpNHOXgaglLuZUDccsEnAAIJWTVjhFnOPldXN4zZgRwms2+2GtmmQmbfUSturZcUEsYV1W3vWs3V/az+0XV7wF6/RpCgAQuCYjhPvrV13DRQ3VWB/Wc7u7m7YdINBOsz1O5vNClaT5/LU+rWf7Lt6IixBxNzE3nfPvW3PscqfKmDA2Rac8/k87OKzu7tbcKXqPaLFmOdnGeCorHQ6Hezt7YXx45rYxx57LJS/XC6j0wWWwGPKhRK/NzfuWZ0a0MZ5YFUuGDDZ7XYL7WNQmc45W6WVe4J7bVWZou/BVSbH1wM1AV9xqKUHnLmGrMV6fHwcXma+iKkXo4q15y1LsdGP3rpZW7dXj2eFp8rQa0hStOR4zAriWLkeYmNgLXbvHK+smMJjBZcVYhpdrolTrBJlidH+Zt2iJKPxeBwUFkYLe/PfHuHGYOfgPYvJEqtXhrW6bR8sUs/3er0Oygszx+lcZmzKhHPWjKPg5iS9Xg/Hx8cAgH6/H/q6XC7diOCYgqFt1sA/+9yWQb1QlqRtVjOFjf/gZ91ogasqvH559/BeW6hXneBrAr7i0CUV/Exh0ul0MB6PXYHlzVEBm0tFvDkm4DxqFDiPeuZ1bI8XiFUFsfM9YrbHaLlRADHJiHWpWWuszMUXIzNrhenvdr7VnlfVSlASXK1WwYXKbelsAgtv3OyYadnsH6N6gTMBSxJOCX9vbOxzYJdw2eVbKas49jzGtuIrIwDP4wEAw+EwbK/nPQscY53S6ff72N3dRaPRwN7eHg4ODoKVOBgMwjtgx55tZVlWYeK5MWUx9rzoc2W9FvYeartoIQPFuWsdb/Vm6PUxxahGNdQz51cUfPA1OYBd85tlWVgy4L2AqRSHfPlsIn6+kLqOksEs+oJaYvAW+Fvh7bXDc8vFXOesR+tW8rWRqp7g9wS55+qMnWvbY8cttRwq1mc9zmU7PIcu6aooE5Acj9VqVcis5iF2P+1zo0uMbMBf6k/r8MbRtlnrirVLsV6vCykVqdDEAvdUiTs5OcF0OsXh4WFhekVTtvZ6vULglufdsFMptn2ed8P227sfnI6gEqzn8x3h82TX5+tnu5TQG0ceqwl4e9QW8BWG5nrO8/ONF/QlIAED55sveG5AhQo6mxNWyZYvsGe5UEh1Op0gMHXe0sKzXLaFCmcG27CNDDTZxpKwbeH/1Fpcey4/e0LLWt7WArLXkAAs+Wq+aK8t1tthy9RkKwTvk73/njKi7bW/K5nFCMVTxLz7r+Nl582rKG/2eJZlYW6dysZqtQrt9iKJFZz/zfMcg8EgLF+aTqchSIkbFtg5Zs+bE2t7ykNjyZzvZZZl4ZlXJUDnamPBe16fbUyHErXnIatRDTUBX1E0Go0QbJTnediNhC/AaDTCCy+8EF44RnyqdahBP/oi65pifQFp2VAor1arQOp0t6mAXa1WODo6Qr/fR6fTwXA4DPNoMcIte4FVC9dzd3Z2MBwOA5H0+32sViuMx2PXio4JeVs+NXtPAKqw86zxlGCyLj6OsS2fx3mv2BbORfK+q5KRInt+Z7mnp6cYj8cYDAYYDodBYVutVmHLuVarFVyUNjpXBbj+pmSuaT496FhY4tEIZa1HLW1ae94Y6xpnvVf6jB4cHGA4HKLROMs6RRLmvdcxs6BHYrVaBbdzo9EIc8Ldbhfdbhftdjtkl1PLM6ZolB1jPzw3Nd9PbiO4t7eHbrcb7q31RlglxioGp6enmEwmhR3N7Jw+xyL2rtTwUbugryi4LpGCotvt4uTkBIvFIgTSTCaTgrC1L2zMmgE2o10tSL4qRDzrkm4+DXphDlkVpFVgXWAqMDRCU+v13J7aX1u/JUvrmosJKR03r0yFZ13HhK5nWWofOa70VliC1L7bceTx1WqF5XIZ8h0TXLamx9Sa9dps3cPAZn5pDzGBbZfNeX3yLDP+KYHqvbHeGi5H0vfDs9b1/lMBIObz+UYgk3p8rDfBs4Tt9E4MntfAtlfnyu2Y6vxzzHLVMnkPOUY6PWHHvEZ11BbwFYS1RAFszP9q4nRLNtaF5wnnLDvfkEHLonCwEZZqeakA4jnUvnd2dgo5gHVZlEd8HlRo5XkeXIi6jIJLQaoKhJTAi1nLtp0e6aaEm5JgmdWj91DLVoFP4e3lc+ZnJQxVzngN50GB4n7Rtv/ec2PdzSzbEo21QhUpl7wdG/W+xFy0bIvnHldYl7tmiIs9QzbRy8nJSWGKh8d4rkYT839MEUwpZvYavj92OohjrFHbfJetm73Mak254+041SRcHTUBX0F41o6Cazq55AA4X9PIyGDg7EWZzWZRFypBQUfYFyxm3ajgzrIsuDSB89R3eZ4Hy0ERE8JWwJPQNbCJ/fJg3bFaR1XS1+8UYp6VmrKarfUSq9+6jW1ZeZ4XFA/NdGafj1j/lMhtUn67lMzrI+CnIlQXpyUNKnFKzlWIV9sFIAQZxebBU94H2yfr6o+RkyqWeozX25zKei9SQVdlxBXzUmk99vw8z4N3g8c0CIvXVfVCxdpUW8AXQ03AVxCc9wPONVmdo+Nv1HyBs/mgXq9XEHoUDJ6bjmVMp9ONl5UCX4WUuvuAc+vAauQMWgEQ8ukOh8NCYgjONdk5RtZDZNnZUhxa1Dznzp07G+daIR+zaq2LMWW9KvHa1IzeNZ4VaOu0QozCXklL+88xW6/Pd6NptVohzaPth87R8XolE3U57+zsBNespzAQrVarEAzIHYW0nXy2+D0W3espHHYe1l7HpVk2MLDMo2LHW5ep2Wv0+YrdYz3HEi3Hm+k9vakBr22EKjj0dHQ6nfA+6hy5poHNsgzj8TjEYTBOpN1uYzqdBs+VJXFVMPmn+aJ1iRNQz/9eFDUBX0HYuSRalcCZ1Xt6ehq1ANViswRnhR9wLoRiAUIkf+uW9iwES3gkDq5rpcBotVqFOTltp85LU6B51nmKXGO/x6AkZgVqjMhjLv6y61hfipy8fmlwDN2ddpMESyyeB4VWsJJ72fyt7sSl0ebe88TzPEUipfSUQYnTy3lcdr/LrFK9Xu+t5/ng77pBCaFro70Ibs/boMoL76/Ov3J1gbbFBuMtl0t0Oh20Wq2w25MqWhpLoGSu/VGUBafVqIaagK8grPtZtwWjq3c8HmM+n4eUcwzaYvCUWm0WdFfRfa1CiJGiqjVTaNpgGE/wqguS17Htuqa13W6H+WGPBLIsw2g0wt7eXrD+sizD4eFhQRnw3LvbCo2Utayk5lm1qfJSbbJKkI6vZykDZ0KX1iCj46sKSttu3uPFYlGYD7Xl2Gjn2F6wtr0pJaRsHGPPlrYvdr9S12r9+l/dq/ZadVt7UeDqweDvVI6sK9hrtyqmrMOOuVU2WC/fe75ji8UiKK18R8qeD+sdsPAUhhrVURPwFQRfKiXRnZ2dQGDT6TRk9QHOAkqYIcpGN8eIgpp17KXSF1ezb3nuOwvV1DXTkrVY6PLSuWz+1micZR9SYWk9A7bOVF/L4JGH/V2FdBUi1vK2OdezqAmmqwTOBX3MHWu9Fvoby1gsFhtJTbQtam1qxK1nZceITn9PeQhibl/vt9R9sIqThSqKtm4dO29MVUkCzt3zWp8qmrF30AZ4ed4XLitU5cxa1lr2bDYLuxrxXpGMeT73ZrZW8MnJSSGoUQPKUt6cGmnUBHzFYANkaCkqdCmSvjR8wYBzS5nHrbCx6071RVYLmueqps8yUi+m/qZaPevRLD6NRiNsMEHBqPmdx+MxdnZ28Pjjj2N3dzekVKQbzgrNlEvXE7ra3pSF5fVtW3hWtfebZ0Hz+2q1ChawLjexfbLrQD3EooHVoqPl61lhulQtNfYeEcXOT5Gm3qcqXogqilmMrD33s3U38xjn5unVYZIYfX+0PrVyOc/LNqSs0dh7zHLG4zGuX79e2GgCKBK3zl9TSWPmL4IKmtf/Koqk1/aLXHfVURPwFUKWnef/5cvCfX/n83lYz8lAJxWKeZ4XlhPpJuL6EnU6HaxWq4LgJXSZA4OwtA4boKGuZps3mm3K8/PIW/vHslSIk/SXy2XYPODk5ASNRgOLxQJPP/00nnrqqZCE4OjoqOAmVFiC86wN+xt/1/5566U9t6JnFXrnx9qoSo4XCMTzdIw9q9UjVArkfr8f7qtav8C54qX9JaGUWacxi1GVMH2uvb7FCJHf1ZqPEbbtvyoHeq79b++xjoP+TlB55PPLeVrdrIFjpwTMP92rWJ9ffTZ1LliDJxeLRQj0sjmbNRtdnueFz7EgqsViESzla9euFRQAtbzvxgp+FMkXqAn4gUNKcHiL9DUaGkDIWGMjkjWVHOcKvbqzLNuYx/NeDp178iwfr9xYWRRAKix0g3gPVBIUy+WykAZQo4c1+KzsZa+qjVN5UOsuZV179bCcu4W18olYIJKNfGfSBr3WxgDws1WObPvVmuI1KUvRfo5ZuPZ3b4ytclQ2trFnNXYdf1Oij7nKVXlJ5dS25FsGfW50npe/Me5Dy9M2Hx4ehqWKbKcqvfxu32vNsOX1VxVuPb4NHjVLuCbgKwRdIkJrmGAktAbCNBoNNzWhjY5NaflKivqS2pdQXzxGf8asopQLkZ9Xq1VY7qRzaLT+OBa6BtazRFWg2v+x9pe1j7CW4DYBT2Uu1TJ47kb9rcz9qiA5cEqCsPOAFOhlO/zE4K2ZtmMes3Jj901/8/ro3VPP4q1KHN6zZcdHl/dRaWakvyotah1bNzS9Qoxo16VL3rhoOxqNRkg9aceb92c+nxdSyKos0XFTcO7arrBQ+VFFmUrhUSJfoCbgKwW+kBT0XHIEnM/JeIFM6t5Tt5MVOGpxqkauL6+dU2Q59uVrNpsbCdz1fE/btyQMnK8LzvO8sNwKOFc66JputVrBhRrb9EHbEKuzioWsLshtyNdzc6fIxcJzs6YUHY+cLKxSpVMJHslre+2Y2TlftkWVM/vs8Dptt+1HrA+xZ6jME+HVkzrPs8Bt7IKSKJ8JRpPfLbz7YL1cPMaVCt1utzBva5cIagatFCg/+L5xnb22xfME1ChHTcAPGGLCFCjudgKckS7ndZWcuNxIk+gvl8tgMXLNIKHk6a291fN0XonodDoh4Tz7sF6vwxIW7Zctwwq3mFXHOWuu+6VV0el0goVsXWZeKkorzD3LybOOvbHQ8SpDjFwvYiF4ZMDvXrkxUrLneBsuWHgKRFkbqazEXKJe+TH3chVFxVuf641NjNxThK/9ic3la/tIhozRUI+SvnOq8ALFdbyqBOj46XiQeDn3nGXnST/0fW82m0FWTCaTUA7jKHT9uLrb9X7ZvYTZ1pqAt0dNwFcAeZ4HVywfeAAhqnKxWODatWsAzkiH7ivOhb722ms4PT3FfD4vvFQKkqedP6awsfOxe3t7GI1GQcCQ2PnCUyC02+1CQIklYu0jz4m9zJz35dKObrcbdgXiH1113hh6n60Fxt9t/Z7b1F5n+2LP9ZCyVK0ArlJOrP2epR+z/Dl/aJUnfrZLi2Ll0QNDWDerJRNeYwPN2HYeS5GztiNGDJ4HxuuXN+7W0gfO3cXcC1jr0OU73p9OY2j71U3N99+2116vSi0V1d3dXdy+fTucPxqNQj3MhjWZTAqxE81mcyP6PcvOY0OY131vb6/g0bB92Va5fBSx1W5IH/nIR/AN3/ANGI1GeOKJJ/BN3/RN+OxnP1s4Zz6f4wMf+ABu3LiB4XCI973vfXj55ZcL57zwwgt473vfi36/jyeeeAI/8AM/EF3AX+MM6vK0Qgnwd6FRxKxaABuBXayD/9WNTaG6v78fEj7M53NMJhPcuXMHh4eHmE6nmM/nYUMEr+4UMXmCxmvfeDzG0dERjo+PQ51l5Bv7TYVfFQuwSturIKYYeO2KEU+qrXTP87P9075q4JtNqhGrx2uTlk/YjQLs/LklJkvWhBdtm/JieJ9j1nuMrGMgAaormt9brVbU/cz+AUWlxLrh1bti5aO9j9ofXcLHuWc+B1SUGYip94KKQswLocsbARSy0KniVKM6tiLgX/7lX8YHPvAB/Nqv/Ro+9alPYbVa4Ru/8RsLm75///d/P/7Df/gP+Nmf/Vn88i//Mr70pS/hm7/5m8Pvp6eneO9734vlcolf/dVfxc/8zM/gYx/7GH74h3/48nr1EELnXwkVonTLKhHPZjNMJpONLdL4n2XZRAEetN7hcBhevPF4jMPDQxwdHWE+nxdyOfNPrQZdHpOqU4Wh97uWb+dgt3GHpdzRXjtSRGTLSpUXK8tag7Ycqxyo4FNlzH7W/15Erl0CZgODUn3nNV5/dZmSp2BYxSxWR6odMQWN45NSLi9KGLQ41crm/tx2lzKb2tMutdL3mM+GXXoEbMZ3xBQPtYZt+bonOO+NPhO6pNB6epjgp9/vh+VU+iyp7Kmt32rYygX9yU9+svD9Yx/7GJ544gl85jOfwZ/+038ah4eH+Omf/ml8/OMfx5/7c38OAPAv/+W/xNvf/nb82q/9Gt71rnfhP/2n/4Tf+73fw3/+z/8ZTz75JL7u674O//Af/kP84A/+IP7BP/gHhSwxhNW8jo6OLtLXBxL6kJcJd0/4ApsJ9AEELdcSr9aV57kbRKLQAK5Go4HhcIj9/X0AZ8sZxuNxcDlbC9e6bSnYidQGBjH3KAVUVRdXVUEQc8+myospDqky7kYwsd+xaO/YGOrvPMalaWrFKbx5SZajimCsTWXejtT9i7mZqyL1LHljxt/VrWzbYa+znpZerxeW/1ii7HQ6mM1mlbx8sfdVf7dLoDylxOYG1z4xJWWeF+f9td1WqQMQyJeuaqC4vKrKPsaXiTKj4SpgKwvY4vDwEABw/fp1AMBnPvMZrFYrvPvd7w7nfOVXfiXe/OY34/nnnwcAPP/88/jqr/5qPPnkk+Gc97znPTg6OsLv/u7vuvV85CMfwd7eXvh705vedDfNfqBQ5eGxVo5q3fzr9Xro9XquGy/1YtjNDJj+UYUy89Y+9thjuHHjBprNJl588UXcunWrsAm598dlFnbemn2gxWDbGEvuABTd6RwbVRSU0D0rMnXMuy+psmL3y7rxyqznKvAUGrU+lUgseXLMqZip4G61WiGKPOU6tQqfZ2WyTN5bztfzHqunxo6pHX97D8q8Blq3dYlmWVZwl3ptttenlDC1NJm0hFYwgHCMy4iqlOUluCD0PquFa9uulq0u41OrnAaNXdpk58AVOzs7ODw8xPXr13Hjxo0QU9LtdgtKXaqvl43UO3VVcGECXq/X+L7v+z78yT/5J/HH//gfBwDcvHkT7XY7WEjEk08+iZs3b4ZzlHz5O3/z8OEPfxiHh4fh78UXX7xosx9IXPRBslHRtqyqEbrA5vIKa9F0u10MBgNkWRYCrbZps7qf7VaFFP66yUTMIo/1K9ZPT8DHLNeY1c3fU0iRw7ZQclUC8chc3coxArNtUCHPOnTdqd0T2FMoeL0lfZ5TtvzGKj9VxsSDpxyllKlUvXzm9PeYBeydo7/F2uKV4T27ek9tGep9sPdZ78N6vQ6kqOC7ps8MLWu1qq0yq5n0GBBp1+in4idqbOLCUdAf+MAH8L/+1//Cf/tv/+0y2+NC9799FFEmxL1gjTJXFuC70jR9Hl9ujajO8xxHR0dJ92tMWHqEal2Y9lxPSHruS3vMXptScrZRgO5W444pAWx/LMjI3k8da48cPQvc9sOSqV1Xaq+1wppubNtW68bVOlm21ql9SK1JLSMyD0pGakFWgUfiMfJl+QzAsikgvTK9e2M9A9pmJVjPetd26DHd11m9XeoVsHVbdzld11ZeUFmL9fdeIKVIXzVcSF354Ac/iE984hP4L//lv+CNb3xjOM4cvAcHB4XzX375ZTz11FPhHBsVze88p8YmrAZuXVfUSHVzbqsRl70csYxSXNQPnGnBXNwfI2H+pqTBv1jS/jzPCy5Kr9+xsdjmpY8pJmUWrI5lLELX9jXVB8+yseTr9UtdjWVlqgVly1Pi49grYhaw3kPP+tN4BBvhq22n8NeN46tYUGWWpQfvnsTKjn2OkT/7pvej2+0GV75tQ6pPqQhv6/XwyuRnTt/wv7ZDAxet90DhBeotFgvMZjPMZrPCtIIN+ruXxLit5+RBx1YEnOc5PvjBD+Lnfu7n8Eu/9Et429veVvj9He94B1qtFj796U+HY5/97Gfxwgsv4LnnngMAPPfcc/id3/kdvPLKK+GcT33qU9jd3cWzzz57N315aKECRAlBs0Qp8RLeOkpPYOoSI62T33V/WS4t0vNYVqzttk0aHa1rPjVwpCpSgtgbN4+MyuAJz7LvqetiY5bqh02QogJWryeh6Ty+5wnQqHEgnavY64sKXH5Xi8qSbyzQzj6X27oxVYnw3hGrQFl4wUZatlVEvM8sm1v5MTEN50e9urVtumzJTs/o+Rap55uxF8vlEoPBAHt7e6FcJWHto/V66b0FztzOXPHCSGgqzFbpez3wMFjAW7mgP/CBD+DjH/84/v2///cYjUZhznZvbw+9Xg97e3v4ru/6LnzoQx/C9evXsbu7i+/93u/Fc889h3e9610AgG/8xm/Es88+i+/4ju/Aj/7oj+LmzZv4oR/6IXzgAx94pN3MZSBBUZvN8xzT6TSQl92Pl+corPVn879SGHF+N8sytNvtwv6hsbW2Wq4KVauh8xiFADeQ1+vt8gstk581AUDqRUwpCLZtsfGqQpTbWGMqJNkvva/eGtFYH1XBosBU0tBdqPjdjm/ZRgH6n+drgB7rbLVa4Tgj4wH/mbTZlDSIjtdUtVyrtDl1noW9l17UuaeQMCh1NBphNBqFsWEQoi2X13OtLnD+THirCqxioe+DdcvSZXz79m089dRTIYB1PB7j5s2bQSmiF4Jt1XXgrVYrrA2m/HnllVfw9re/HcD5ahRGeQPYmPu/bJJ8GEhXsRUB/+RP/iQA4M/8mT9TOP4v/+W/xF/7a38NAPBjP/ZjaDQaeN/73ofFYoH3vOc9+Imf+Ilw7s7ODj7xiU/ge77ne/Dcc89hMBjg/e9/P37kR37k7nrykCMWeGSFg2c9xIKZeK51Z9plIPZazvnErEkrHJTIPFJbrVaFXYVigtuSlZ2rsoSfgmeNXebLHRsTjxzsPVTyibUvZrVRibLeEDsvaJ8Tb4mMtsvWb+eLmRI0Zplr/6xFaL0vrNtTxPSaFGyd3nVlBFyVwPW5tZuU2PPtmMba5j2PnkISU/x4v1erFQ4PDzEajUIgZa/XC4RJS9jbeczOF2dZhtlsFu7LYrFAo9EIexuzzTonXCONrQi4ioDqdrv46Ec/io9+9KPRc97ylrfg53/+57ep+pFHjJj43ROsKUGi6wPzPA8Wpecu0wALvrwxUvfaF2ur9s1aCN55JF8ld6bNuwwCjdXpEci2ruxY+6z15wlmXhvzKNiyGBwVi4L3lDQdf8+qtmTI35mTWxUoqxRpe5W07LIXe//tpvHbwhsvb9VA6h7Gxt17ToBiBjEvQM2DXX/staGqN8C69PM8L2zI0Ol00O/3NzLU2YC62HNjp6AAbORuKHuPa5yjzgV9RUAB7Vm9ipTmrL9R4/XKUKGn2woyEcdsNsPx8bFbt63XQ8wdrFau1xcN8OHvtLbKrJayc2Jjab97JKznpsbftsUmwFD3YcwD4bkaSVb8PcvOkj9wKsEKbxKRzu0dHx9jNBoV1grbvtM1qkJelbg8z0Nu7pQQtvfauzdavkc81pPieQf0mdfPZd4dW75HtrZ+gnOv/ByDWviq4HrTDva/tsPCki/vCXC+3G8wGITUrZQr1mtic1qz7uVyieVyGeJCeP/p/VitVvVSpC1QE/AVQcxCojC1c2f8zZZBcL7OS3hhhSCAsOg+z3P0+32Mx+Nw7mVquCosbX80oUCsj2VlW3juXg8xYvVIuOw6YHPrR56birD2oB4LL4sTy/TaSA/C6ekpZrNZcO2Px+OwcYf20xI3wfl8YHMzD09ZtGPuKW7MZcwy7JhYS9YrI3W/Yi58e21MWfTqs8pAajtOHQer7Gi7U/euDPpsLJdLTKdTDAaDECDGdb2qbCuo7NuljcvlMrizWQY9UcB2QZSPOmoCvkKw5ESB2Wq1AiFySRI/8zoF3bh8+TX4jdpyq9UK80bcdzjPcywWC8zn8+gcXUoo2mMpa8RagVwKZV2u6oau2gb7m1p2sbbFyvP6oAKcVq6uQ9XIb0XZvGiq/bQ+8vx8mRAJE0BhaRCvodXCaw4PD0OZmtpUM53pZz5rGvlqFTqPeLXtluz0XtCasolhbLpHtlPL9YKYUpmevDYqUufrObqMTpPV8BmwzwHbavujXoaY4mPJOeYN4L2aTqc4OjrCY489FjxZXD2ha4RVufW8F7dv3w7ZCG/fvo0sy9Dv93F4eLiR+OMylfOHETUBXyHEtHK+3JqGzl6jsKknFYx+HI1G2NvbK5Qxn88DAVtrAojnztVzPCFYZlnyOi9hvFdnylVsERO4HtGyTrbBs3piZdk1uSn3ZMrtaYnL3gObolCVJBXqbIMSgrqtafmoNRerM0ayrEPJ03uGVdDHBHYVhUSfLZtYRAksRQpVnsWUcqZu2VjAlZIy/5e9L7HnTO9rrA/6G3Pq04Ws7nKPgG05eZ6HAC7gTCb0er2gxOsSuNQzXuMMNQFfMejL7D3gnvVhhZu1bngOy+v3+9jf3w/1HBwcBE2ZCT8Ia4V5AtZz91mLJgVaCzYgiNursRyPCMqEdsrVaM/TrEQUMDFrz7bfzpWWXRdTAKogZcXZQL48zwv5nymUeZ/ViuZ91GkAS9Re/SmPRExR0npt37woW/bNEtY245MiaM96t/VzKZYl4JOTk6h3hXENbH/snbXKlG2ztfxtH/k71yqzrZpeMkaatqz5fB48bsCZvNDrX+9NGa4yagK+IvBeptPT0/CyM1UkE5zEhIh9MTT/Ml1+g8EglDGdTnFwcLDhJrPWFACXlDzt3JJzSlu25+r/suQRVdzPbFPsHCVyK4jsHLodC+8z61PB6ikKMSvea6uSKi0Qm01M52ltOScnJ+h2uxsucL2XGmEds2JjsO592z9bhrpnPcVKFaEYYsSuzxDblfJeVOkfwSAnQt+H2PNj99P15nyVfD149yHWfy2H0euq7HjL+vicc7wWiwUODg6wv78fyBc4Xw+skfg10qhny68QVFjz5RgMBmg0Grhx40bYqcgTdh5peUEiOzs76Ha7aDQaWC6XODw83NjDNGVZWsK1woEuclpNtA5Va7b/tVz9s1HEVdpjy61ynX5OuUm98q3LXYlNl4FsAyUqPgdaJgnKtoNjbJUpG9im6SH5X++R7m61LRHacbXj5o21/nmKn8JTAFmWpk1MPRdWQYrBPp9KwN7UiNZtlaSyulJtSI2Jd4z3v91uh/Z67eG5NriP8QI8fzabFXZG4ntZW8HlqC3gKwKP1NrtNh577DEA58FTb33rW/F7v/d7hbV6fDlPTk7QbrcL2XaY6Ybn9Xq9sN7v1q1bhfkeFRAaeetZZ94x+5lWGQW+BqpY8ut2u+GF16xflryrkIEV8t7nWJ+8/ugcnl6vY0PFQ5dNZVlWCI6ybffuuXUh2+tUWFLJoRWjfxqklednwXXD4RB5nod13oyQprsSOJ8LtvOFXps9a84TyjFrjdAUpTyHblv2MWZl6+eTk5MwPqpApJ4H1ulFYtt6ut1u8EQdHx9vlKnxFtqO2L20nz3Pko5FypNDrNdrHB8fY29vD/1+H/P5vDDVQIs2y7Lw7nOqR7ex5K52tJiHwyE6nQ6Oj4/D2nBdBvd6oYoceJBQE/AVgrrmgOICeCWA2NywDWTyHlIuNZrNZlgsFqUPstWQvfNTQppClJa7as8qYDRSW+egqwbXWHhuOyuoUmThlef1U8nOKgA6brxez/EUGguWb603jptG4lqlxhOOeh3L12cqz/OClyVGGLYPqnTouTxm++DdH88VzTnrMgLib1XcolZZqGpZWre/Kqlsp/ZR86Hbe2SnA2J9sxHH2tfY88tALABhzlpXQ+h46/Olz8B0OsV0OsVwOAzl6BjcLws45Z17EFET8BWCEihw9rBTUCoZWwJWK0gFgBIfX7p2u43lcon5fB6dM7SC1MvkU5UMWRbns1kug4IovFi+3RLNut5iL6A95gl122avrLKXm9fovYoRnRJhWfkpy8v2X+91q9XaCALy6mo2m0GIakwA4T1T+t/Op8b6EFPWqtwf717okh+vPgtPCbC/e/VWeTZ0flwVXG8+3iocXvKSWD3sgy4n1GmFWDlsz2KxCO82o7Z1Oiq205btw3K5DMlb7HlVpofuFa6K9QvUBHxloOH9/K4WzrVr1wAAt27dCi+bPojr9XpjezSLTqeDnZ2dQrq5lPWq8NYxekhZchQsJGL2kQLi5OQkbAah7kgL60aMwSPfMg26ilWsxMDfPY/DNoLCts+SmY4/Cdcuc7HPhbpO1cPQaDTCfB6tJV7Hsfcse4uYlewpHnpNjPyU5FX5sGuVU/DIKXZe1fujSpdG5c9mszCuVhnzlnjZpWp6r633gmXq1EZZn1jmcrnEarUq7MCk3i6WRWWc5GzbxYjn2LpsbfNVIsXXEzUBXwFQyKjG2+l0gvvntddew1ve8hYAwBe+8IVwnRVInP/VhfcnJyeFSOrVaoXpdLphUVSxULx2x7R3hV3mou47zj1Ra+fxTqcTSKhs2YPnkrPttq5c79oqxK45kSlode6MqKKweO3Wzzo3qnXqPLM358l5c7V6T05OQnrRLDuLBaB3hOkp1cpS8k15EyyheONWlTR5fZadB4Jptixrhcfc2DHXsr3OelqUEO35HPfZbFbY4GA6nQaFhlMpHE96mbznSt8B3jP7LpNMY14cj/iyLAvbCj7xxBMAzhSw6XS6YUF3u92QZ52ywipQOzs7hXiTdruN6XQastYx53QNHzUBXxGQaGiB2K0EmXCdL4O3VtK6/1RAt1qtIMxsSroqbtEyYtKX1hPOei21ayA+V60uM9XOLVnFBH7KJRuz+j0CSbmRdYmSd50VnDoXqIJOz7F9LIMSpd7vLMswHA7Det/FYrGxnpeZ0G7fvu2uH47BjlPV9qYUJP6ufVGL3Dsv1T6rUGmdZV6OWH/sJgyq/Mzn80L+ZJKXV0dsvS/bzCmZshiNlMKoskHjQtR1bP97SqhOg7VarcJUWB0JXY6agK8IVHgCCHN7wNlCeBJwTIh4czi61lITCKgg9l7gbVx3/Gxf5ljgEH9Tdx7L1WU0JCyW6QnhWFs9K9xru3e9kosnYGLkfhHEyCE2xrF6Y4TUaJxtHj+ZTArWLMuhlWUtXa0z9n3bcU99LyNKfRZiikLMMiwj26rg86qBV1SU6fJlnIP1Pqj7vEw51FSPd7PO1ib9oKfDy7XueWAoQzSZB9PFsh8cg3o9cBw1AV8RqLDn3KjdFmw8Hm+4/BSqWVvtWy1qj4AvAi1Dg6zselQrJOlO1ChRba9q5ABKXdAWZQpE1TK8c6sGnpQRlke0ep5aI/Z+63dLXFRuTk9P0e12w2/W69FsNtFut3F0dLThZvbIwiO8WDtifUl5T8qgyqSnHJRZxV4fPI+NHrfnci6Wz2+320Wr1SpMnaiyQHhz6dZjpISW5/nG/doGKQteYwFSy6L4DGnEvN2W8H4GYl0V1KNzH1FV2HtLc3gtU0T2+/2NtYcebLJ8zi3z5dEkC7Fyyo557aTGrKCQp9ZNcmY7SdB2izyruadcXSmh7llaXvvtuZbUPOtqmwQb3j1TQrFLUrx2WMTcwBoDQCgRcyz5PGiqQlu2Z7FZQtaxixFXrC923C0ZxoLQvPJjdaTq88ouU3BVceTYcD5Un29e762VJdnGrHOmCvXqjvWB13rKBd8rbTflCs/1xioWXW/fI/18Wd6hhwW1BXwFQAtQLUSSFqNUm80mDg4OCi5aBQO4+KJyHinPcwyHw2ABW4snpsF6VoZaZLEXk3OO7ANdcZ1Op+BGZBIAdel5lhh/KyPhGNl6QrSMnL1rbSBUzOVpkbJgLfHG+pciDVq8VvADwGQyQafTwWg0wnK5xGKxCJnQer1e2PuV/eO1XsStjS+wFnDsv71v9rrYWGsUvEcsKUXUnqvZw7RfsfX0VinScbGKk37nfxKoEpg+BzqW2q71er1BvCmFzBtH1tPr9cK0FVcWLBaLoIxxO0qtWz1OOzs7IeCMVjNlEe+NKh5VldFHDTUB30dsYyHRrQUU1wOr5cqX0woIXh8TaOp+1ixTsXaWvVDqMtNrFMzCpS8wz282myECUyMvte1UJgAUkkZ4QrNM6471xbOiUihzpWq5MQUlRhxWUNux0Gti1qBeT4HLe8/oXJ2b1Gsv23JJKRSeckdYt6ZHQKklUnbsdMxSucW9YC/7O93QHGO7fEehbmm7IxnL0z55Oce9vleRKSRZusxVYbeubS9mg/XRSqab3a4HjqW3rHGOmoCvAKyVpO43EjDXyQK+5q7r9azlQgFgdzrS+i+iwVqhpeXonFien++j2m63g5Blsnh1mfK/Lp9hOj0PVZSFWNtjZcXKtALfW8bCz/zvWdoxizjW9pR17ZVLUMEhdGMA66b2SCtWT5VnRS0rzzpPXaOeFlunknCMTGw9noKn0N9Tioj1DGTZ2RaPnCdVorOJM2x79HPVMU3BPnOr1SqkGlVouk6FXddLJY5KG6eJ7OoMG0FdpZ2PkrVcE/AVQcy9ZCMi7Twpz+Vie4IWsS4/mk6n7jZv1urS8qtYl1Zztseo3VMoUatmu70lF9yEghGmZYLbE7iK2DrgWB9tn2xdNsrUa59HwNZlqeXHhLHnErXtsm5WoDjfr+tRWYcN8rPtsnXErE3PNa99V0vRI0JPSUnBWsL87LXXUyxiZFilbp5DS5jKpO69S+iyM22DVeIui5BUcef6XuBMiWf+b+aLt0vieD3bDZwr/a1WK2xPyI1c7EqFqn14lMgXqAn4SiBFANQ4uSA/Joj1hdLy1P1lA7BidZe5Dz2h7JGUQtvNzxQEbCfnjtvtNkajEQAUkhmUCe6y9qeUCWt9eW5dW4f3mfAIIRXJa8vif5ugwWuPWl1q3WigDetUgU+lJzUuqX6mlAJvSsLz9HjXlikBMeXIK6eKZatlp36z7dD+k4A1BaT1AnlknEJVT4ktk3PPnKPVHAMkYGDTovdSagJn0xdU1qjQe1NZVVBbwDUeWFBAcX4UONNkr127hhdeeCHMw9iHmIEQ+sJrQg++LKk8y3ptFaLiZ2v16NpdXYbE9qlVtFwu0Wq1ggXBNty4cQOtVgtf/OIXCxl8LFJEWya0rHBT96ySoCU7b+mGHRN7vp7rtdF6IWz5GpRky7FlWQ8JsxZR+KqnRGMKvPbqOMX667VH2237b+d41U2r85E265V3f/R7zJK1pO+1dxsSsfeWhMa9cjVQi5npSGbqCfI8IF75Hry+ah9JwGxbq9VCv9/HeDwOsRma5lLbqylq8zwPuyfxueI00nK5LNyzGj5qAn7A4VkMjEDkw71cLjGdTsMDb12pfJnKrCr9ru7KmGCq2n5rnWqfrBDmnJLWzd8pZBm0xejNbdoRw7a/xayumODU7ymCjNXvzaVb6826qj3Bbe+D3Q5PN1K3CkZMCdvWyqnSd3V3em76lKLjlVnFSrTjmkJK0bDPhiqdugGK1stzrJuaZVois/d423ug3qROp4N+vx8yonntAja9LVonPXHaX/vcVsGjZP0CNQE/0NCXyxKqYrFYYD6fb+zGAhSDrKyAILkpicUiifW62G+e4Le/xdyl1sqyS2eAc0ue5V80GUGKJG2bLfnw+pTbU8uNzYHFSNtrI+u3lq79LVZGmRvWa5tG83rleZZmrP0pN29sDC4qiO0743kMqra5Sj3esZiCkmXZxj7duoQu1lavnTHyraIs8pzFYoFms4lerxfywHvz/sCmzAGKskIDOVUO3Y1y9iigJuAHFDG3pWqVmsSCCRMsgepSALV+1J1HIvOWeFzkBUpd572YKRK0/ebm42Wo4gaNtUfLUIWmjLQsCXplpshW74lebz0Q3nFtn3Vf22OpseFnu+zFJpfQcmL9TJGUrc+z3m0/qyoSXkBXqk33Cp4LlsoN30nd8EKt+jLyvRuolT+ZTLCzs4N+vx/Wg0+n08JYcmrCvgNZlm0QMC18TwGrsYmagK8A1A3HzFUKChu+8Oq29dxdao3qsgPu1mKjiqtYajGB58EKchUqPLZcLgv7AHMZR6vVCgkEUi/2thq4Z+l6bbZQYe+1SYVUmZVn22zbrl6NKkSmgV7aP+sm1OVpdilbzKLy7l3My8E22/vseUNiyg3L0HNt+zjW9J7YyO7Y81KmSHhtrGLNk9gAhF2B9vb2wjpc3ovJZBIC4uz90XZ4bbHttMqLB33/8jzHwcEBbty4gU6ngyeeeAI3b97EbDYLpKrz1OpNy7Lz7So5hzybzUKfea0nG2qcoZ4hf0CR0nTVFWnzsKrQybIsaK4esdh5NCZ6t/O/25CZvW7bl47XaABIo9EoBKlQWJUJmipQ5SUmgGP9oMITs4zv1lrhOKSsQm0LoWumY21KtdO622NWaqxvKY9GDCklT9uS+s5yUklnqpRb9lzFyETHyZtCabVahW0egfO12Boh7T2PVcjXHi/rk95HBmABCATKJDj0qtGbpvKHBMxIaCrOWkeV+/6ooibgBxwxa6LRaGA+n2M+n4flBHqNzi8BxZ1TUi8iy4/hIqRXJqxjZar2rFl7rEJRpu3HEHNRxshAxylGSl79KWKv0odt+pS6pqx/VeqJkbDtT+wZ8u6156r1yixThEh6ZffE62OV5zpm9drjbAd3GCNRMSkHtyecTCaYzWYby/+qku82Cl7ZeboHuGbKUk+Il9mKKSuVgK2HxnqJapyjdkFfAZQ9vDaVndXEgfiaTCa8uKi1FnMlaju0XZ5giQk2O+fEfmybXSd2jmchxVzRKQskVsfdWFGxclJu2rIyUwqCjrfnRtf/nvKjBO/B+y01hmWWE70iWlYZcVVpk71Ox4LWoP1s20Wi6na7OD09xXQ6RafTCUv+ZrNZyN6WUsTUA2LvQeqds2XYa+wzRFfyfD4PG7N0Op1CYh4SMFBcnsZrgGJQpEfAXpvvxkP0MKC2gK8AbGAUtX21cL3lC3qO9xL3er2wEYO3tEPLSuEiLkdbtgrPGAkCxV2SbF0XcdlVRRXhrmRmz61K0JZsU+dchgXkBf5457Mtat2kyNa7d6n22l267Pl2XD2rKhZNXIa7sXx1LEi8XAvbarUKGxQAKJBv7H1jH2JrrlPvaFUr055nd1iyWwt60xLqgo71AfBjFmpr+Ay1BXwfUKZ1W9ilJ9REdRE855LUKqB1y3O0vOvXr2N/fx9ZluHw8BCz2Sxs+edZQhd1l3pWjs34pPWpQPOW3HD9c7fbRb/fD8kNbH1KFtZdyrr13CoCextitUpEmRVrLSpPoNpIZyuQPRdzqm+e69SzknSsSDA65raPVS1/u0TL3g/bL1sOE1mQvDW6OFWv7b+2Q+v2xpjQWAk+w51OB+12G91ut5Bnud/v4/T0FJPJpDDXmiIlTTQSUyy8Z/EiRMcy6Q4HzpTzo6OjQjyBZk3jsfF4HIIi9/f3Q526l7e3d3mNM9QEfB9R5mYD0u7nZrNZEDh2f05dkqSuLAoJALh9+zZmsxkmk0lok9atn1OuzKr9qXI9/1SIaV9WqxW63W5w8WkGLyWKLMsKx9kHTykog0cudqw1AM6Wva2V5ZGr/e8pEFWsY494tb2pbFceyVVVKGMKT9Vnzt4/Wp1slyWhi1pZKU+AKg86DgywarfbgYCm0yn29vawXp9tI2gTx8Tum1W0PEXUK0PbV6Xv+n4AxQ0iGGylgWEaFAkUU5laaGYsT4Y96q5noibg+4wqDyIjmb1rmBUK2NxZhp+ty7bVagXreLFYYDKZJNtRZiGmCJXX2+MpkuILrnNLSqBMGNDpdNDpdIKA47VefmSvL1WEVZW2a7urWiGxOj0yspZZqp0xJSjWJk0EQSELoJDSNHa/vDqsBW3bFFNkUu322kBPDQOd2O5UjEDsOU4RbuwaEiOnb+h2ZhlHR0chNmO5XBZ27EopLDbbWOpZsmOZ8vBUAeWEPhNeG70EOUBxQxibva6Gj5qA7wOqWoqA787UeZdr166F37gvpyUyuzRJE3ho0vQqRHoRzTXVX0ssKjQ0uw77Q0t+Pp8Hi8NunUdoNqdYEJpn4XiCq6oyEXOrVh2PWPu2cZHH6rZtsx4HjrldEmNdsp416vXRttsSir3vvE9q9XmkotdwWz2P8FNxDV5bvbG0v7NsRjnbNa8AcHx8DADY29sLlu9isdjwUJW1I0bAMXL22sprqtTnfddnhjKGoHXLY3xP7YYuXtk1zlAT8H3CNg+kfYHU9WNzsHrzoep+ptauZVUVqlXbp8erlGfHwlry9rc8z0NiA5IGd4PiOSyDQtxzZcbaawVXKiLaugc9crPHvT57bSjzSlQ5pqB1Y/vPsdYxj+0Lnfpe1jfPkk55DLznR7/zc4zYPMUxVpa9pqztJF9VFNTKvXbtGrIsw3Q6xXw+d1212v8y5deOC7D57MXa7ymVVchXYZV6fqYyAmBjjrhGOWoCfkChL4y61PifVrAGN2jgBr/zHF7LxOua2MKWrSgjgrI+eC++LTMmPLnB92AwCP1iwnimzOt2u8ENPR6PAyFb6z9mDVgLMOa213bZa2MEbYPLYkKtzGrxLGxvnlZdhHmeu5aIt6GCJnHhmnI+X7Eoaa8f2mfv/tKK0vGwJJwaJ68Ndo7ftkV/s9fb++L9j3kV+B4BwOHhIY6Pj7Fer7G7u4tr166h0WhgNpvh+Pi4EMdglTzWY70Rtq0e8aXIOUaoGkthy+j1euH55/pe205d8miV5Ng77SWEqXGGmoAfcHjkpA8+BaUKM0vA6k7UpB3enp0xMvBe6Nh1MfKI9S/mZpxMJhgMBqG/XJ84HA4xmUwwmUzQbDZDAMxyuSy42y352vrKLLpUO8t+s8I8Jlj1+phikrJOUlacjWoG/O0PVVmxa8rL+m7bEyMGrUfb7Y2Td62ek+d51PPgtcGWbYmtrH/2Wk9ZzfMcvV4Pu7u7geTG43Foawoxq7XKmMSUu1gfYudRkaWsiHlA7DromBKg+edr4o2jJuAHHPaFY1j/YDAAcL4JA8nUWkZq5fJaLzuW1ue9NGWuO4Vq83pMy6kidPI8x3Q6xWKxwO7ubjiPVvFkMgmZwLIsw2AwwPHxcSgnlorR9odjo5/tZuRe/8oswhgJ02r2SCil9Og5eg8uqvzYvitZpCxtbwzK2pLKjOVZ2Or1sXmpY/dESaHMavfaqGXFflNFxgY27u/vF7wxnAtOwaurjLSs4mSPx8hb+6BlZFmGXq8HAGEpItcp2+v0ubCyQvdkZixBqh016kQcDyysINYXhkne6QJjgAdJh/DmiNTC8Qg4BiXUlGCy7fd+T7kElTiJk5MT3L59Gy+99BKOjo6wWCzQarWwt7cH4FwJ6Xa7G8tSUpsrVO1v6noleyX8lNWaKqcMsXGNWc/aD2+DBZvQRZNJlI2Bbdc2lk5sLawHz+rTcda/VNCVd9xzXQPF5BExElFFqNVqYTgcAgAmk0lYQ5saw6pWa8zTZFPNKuFV6TfBe53neSBf9R5ZQicRU75wOku9a61WayOLV6xPjzJqC/gBBR9QzudRYHU6nfDSjUYjAMDnPve54HLlw811fBpk1el00O12g3uJxGWREgxVXhy+dLHEEVpOzALw5k/zPMfx8TGOj4/RbrfxzDPPYDgchjy2JycnuH79eljXrEEhnmWvbVBlhGtdY3NXFEC2zFj5Fh4RemOUgh3LmEXsrTvVe9JutzfWs/I/pzdiJMCybXS1PQ84H1PPgrfjmHJje/WkoBa0LYskYhXRVIY5AIFolsslVqsV2u02rl27hqOjI9y+fRuTyWSDpLTtntLp9S9m4bJcJUrbP+9+xcrVd21nZ8dNkWmhzwBzCAyHw0Dg3W43bGtolzRtc/8edtQW8AMIfYls1ii+eHzx2+025vN54UXP8zzsyakkSMsmz/Ow1KRMOyZimrC1jLXN3nV6PFYXcO7ii1k0y+UyuPj6/X4IJNrZ2cFwOES/3w+uaY/470aoe9aRogqRVh33GKqU760ptf1Xj4gSFZ+fVD+3bZvey5jlru0vU2a8Z4/Xeh4Xz8plu6y1GvOecMtOACEDFN2tr776KqbTafT+q4VuSTHlMdLftc2x99ciZYGzTWrBdrvd6PhZT0Oe52H6S4P5dFOMVBseddQE/ADDklyWnc2tjMfjkNJuvV4XLFm+kGrBEbSKgc2dTqwgsK6mMg02RdqxOuy59rslYFvH7du3cXh4COAsgpNaNwAMBgP0+/2oouC1PaUo6LmWlGJEoZZeSgB5SoJtk60j1Qd7XcrC0o3UVagyo1Osn15/PUL0xsNrS6wPqQjaWP+8tul39WBY6zimcPDda7VahdSKJKXDw8ONvMhVCN3rj3f/9RwmnrHvRRWSUyLV8ylPSMC6VLGMgOlRa7VahS0MdR5/G+/Oo4SagB9g6ENL67XZbGI2m2E2m2E6nWI6nW7kQ+Y8MUnWs1o96zJGNhRYJHB9ET0hGCPMKm4te44NdrHC6eDgAHfu3Amkked5cIn1+/2QqSiW3SclGLY5t8rvbLNXh/e/LHrWlpsiaW/safHQilmv14X9XbUcvTeaOesilr4SbGqMy5Q6vcZCCcA7hxZaWdIIVXy5UxBQzLg1Ho9xeHjovmcsL0W+KUXJ/pbnxekSb6zKlF0Fr2NKV6LdbhcC8ux7rwRMi1czknnLpmpsoibgBxD2RSaYfYfgUhzmQlbNk3mUy0jP1hsjTx6zgk2vqyIcq7TFWnGeG1rHhnNvq9UqBKbNZjMsFouQGJ9CwLrHbTu1j+pGi42HhzKXXwzbuOxiHgs9FiuHY6A73sxmM+R5HqLKW61WgYRjfagi4GP9qqKQVTkvZul6gWRZlhWCjsoyZfF8Jd88L27Nd3h4WEgzaS3sbQIBU2TslWWfg9T7WwZLwBrVbBUxGzOh89IaxKfX19hEHYT1AEOtVQBhAwK6DRn9rJmA+BtfBi3LvsCj0Wgje40nvHUemfBc3FWgbrZUv62Q13zQKuD4O93yN27cCBtNLBYL5HleiMi0c9822CsmzPk5tvYx5QGwySlUEYhZg1XGiWXZNtj5TK/NjUYDN27cAHDmyqfrcDabYblcot1uY39/H4vFoiB4bV+9/qbayO9ViTt2Xhlxc06z3W5vLKnxyEwJmc8WFTe7bK/ZbGK9XofkG0DR4tb7sVqtCvfbvjMpZc1+Ljs35lFQeOvA+XmxWGA2m4WYimazGRJyaH+A83XCdMdTOVkul8FI2NnZCc+PXW9d5Rl4FFAT8AMOfVD5EKsVTJLRF40C11vqsVgsgiu53W5jd3d34wVXLZxuSQpoW4+dR97WKvTOqSJ0NV2lEsRrr72G0WgUXGjWBR/L3uO5bLVs9tfryzZWvXeMnosYsWmd1kJK3Q/P8lRSJmwMwXw+DxtdpIhT22TL954p247YmGxL1h50jOxmJoAfHa7tU7erulWp4E4mE9ca1bLKllqlCNX7jcfL3hNbfmqcLQlrLnkPdn08ZYQm3tD3pCbZNGoX9AMM6/bhMfsboWs5LSHSAtat+xqNRtgVyXPTcdvCwWBQcL9ZjTtmPcb6FOun/e6VG3MbqrV5eHgYgkq4zESFoY3Q9NpjFRiPnHU8YtZhrM9lv1ui0z9bv7bP/rdlKE5OToICp5jNZtG2Vb3XOh6eNVcmmFMKi7bD/q6xDWrlVpl60GO6/I/Pka57pefIjocqrkpGilg8Qgz2ndc+2OcvNT7af89Lo/9j9XoR4zo+Xrurfn8UUVvADzBiQsZ+VwtNBYW13DRvtK4nBjZfPK232WxiNBrh+Pg4bHpQxVKx5BDr40WggtEKAwBhbXC/38fOzk4IMqL1b4ncs3hjngGeo9aRd74dg5SrMFanHScKdU9QavusoFaljN/X6/XGRul5fhaQpVMT3hREGYmlUNUq8kglNj7etXw+2H71Mug91L/1urjjj1p3fF7UCrSWoG2DvTdl4xAbm6pKj1rwsTJTdZQFPfJYrLxtnoGagGsCvlKICSA9poLGPuC6XdhisShspeaBAocCaDgcYjweF/JP2/bZ9lhUFQYebJ84l0uL1s4zMTlHlmUhKE2TlWh7PcuCfVDS5Z/nMvbambJCPFQVSiQWu05cy0gJeEY/xzZUt3OFKQXL61Ps+fTOLYMlSi0rRtJ2Gsae4/0HNpNUaGY1/vG8GLmWPeMpRayqZyH1+7bEpu+OrcMj/ti7kmprFWPiUURNwA8g7IOqmxGQRJn2TgUoo1ete0sFNXcYYqKK09PToPGrVcm5LrWSsiwLARpHR0cb7dX/nsYf62vVF9ETLNZFqAKTWXrU1W4tGOslAIqEYz/rObZtti+eQpISWjErR+fXrFuc/bHuwhg52ut0/pfPTa/Xi2bQsutyvWAyPe5Zz15/9fqYAuN5Ezyl1P5PRQ5bYudxfR5ia26tF8WiyjsQ83xUGRdPMapCwFoX3xtGPTMTFnC+x3hMWWObGJQGFGVULDVmjXPUBHwJ2IZEUmUAvhsR2Eybp24xtYb4UvGlsWg2m2F97M7OTliuY6ODOQfMhAz2BfTIxHvxU8LAI61txkpBQUjFQdd5cu6bJExUdWdu0xavPzHCsOfEpg60fwrvPD3utYHtVeForTp9dlJWtIcyi9gqAvrZkk3Zb1VhlSlbjr47/B6bntDr7TmX+RxpvWX9tc9Xqiy9RpcsqvKqqyf4W2rcO51OUNKp1Jch5aV5lFAT8F3iIu4eoPqDZ18ovvQ8xjV4zGJj50RtOdzSb2dnBycnJ5jP52ENqOLk5ATL5TLM/1p0u91CsI7tk/fCe30DitG7ZShzY2mACBUWjhfXKHrXaXlWICu8NJtlbkTPMq7q5mOfLCmlnp8YGXjH1GIhOD+ske9lAt4idj9T1jDbbsupYtHFSMcjXFsP77mWoWTMZ8m2q0wZuBvFPPW82N+3rUvfO90dDTh775lQQ4M6U+9nr9cLnpTU1EyNTdQE/DoiJUisEIl9puuQL4euAbbEYYUarVq6EpfLpUu+WtdqtQob36vbrdvtRoN4LjIGZVq2lm/drGopqMCkNaeWvV1mYce2ivWoFpXX51gfY2St1m/M9eq1SdvsuSxTZMc+MLsaU1FqPl9NzHARoWrbYL/byPSLlhsjX5160eOxMmO/lSlDsWu2GbNtFXOvfmuhl8HLcKX7AWtOAS3TPmNcd69rhmPtjX1/VFET8F1imwcp5lbzyuI5KigJJV0u9M+yDOPxGJ1OB4PBACcnJwVtNM/zsLaThDSdTqNrFfX7YrHAcrlEr9crZE9ivuXZbBaSHViySllQ3gttERPgMYHJNigR69jFXIved63Xa2Ps/pVZxWVjwb9UKkqriNjyrJLCtJPqhudzNBgMMB6PAZxZMxTE6/Uag8FgY2s65tv2xs7OUac8FtpWXb/sletdnxpf+/zZsUoRsVqIhKZ1TXksyp6lWF+2Id6UF8IbX9suPYckqwGLnI6y6Ui9Z5XxJABw69atcNy+Z1WU60cRNQHfB1R5EKu+aEqIAAqRmrYem9XHm6vxBAn/qBVzWU+n0wnKQZ7nhWCtVL88gvKEUYrE+L3MarUuROvuTgnkKtZkrG1lJGy/VxFQKWvLWil6H3d2dsLeybo9pc3exGC8PD+b72c6SqZizLKzOfUvfvGL4dlRb0xsDMvGLtbHMoXMQ4ywPYKOeQ+8eqpMkcSyXVVtb1nf7W9VrU2FVULse1fmWQCK22mq94LPRKfTcQO2amyiJuArCLoMAYQdfwhvjahH5jFLxPvPc23aS2/3F/uiKTmo+84jihQJpgRvmTeBddsxUKvIO9+WV0aosfNsP1LKR6pPXp2x5SNUjLIsw40bN9But7FcLgvzep4CplMKdh6chE2LucyarIKYUpU6z96vmEdJz9cyUopMjJy8crz2WfL1SC1mEapi8HpBvVbqdVFi9fprY1EU9GjUpFuOmoCvCDSjD91EwJnLkC5G4DxgwmbiSQkd7793DnAepKFztp4wibnpYkLH/l6VpKoILEsU21hkWpdtr22znhdTdlIEXXYtf4uRuCdEb9y4EZasTafTQt5eD57iQcVrb28PWXY25zefzzeCtzz3a+zeeIpPTBkrI74q91O9IVpPLPjK1usppfZY2XInfk6Nidf/VJ/K3tdUPWVl6NSNVdaUYO0OSPY9tgp3TcznqAn4CoAviZ2TAhBcg3xZ1NrU6+1nT6h4lpQFiZ9b/7EuT/PXMokyEo71X6+3iJGjLUNdjlXrKwPLSlkEdizKLLXYuerNUNh7zXMYwd5sNnHnzp1CYvxGo7FBoFwjTtANzemKw8ND7O3thUT9Xn5wj9S8MUv1X5UMdXeWKSNV3Lb2WNnzomNu67EWq7Wgy+rnNVWOp56ZiyiUer2nTJS1X999ek1UsVOFpybcOGoCfkBhNWYv807MGuI5Wg6t5uVyiW63Gxbfc/mAJ0Q9ty3X1NroZ63T9qGKlX0Rd6Yn/FPnegoCr1NBYZdSVLV+q7TXa2dK2HnWoLVGPGWq0Whgd3c3CMjbt28DOAuco5I2n8+DoFytViFhCUGC5T1fLBbhuRkMBoWlSmVt9saiTBFJeTi0v1YxqeoRsWWlPCVVlKZYP7267OfYsTLirqJYpBRDerQYDU9P2mw2K8zjUhZoDmw+G7oEablc4vT0NCQvse2oybiImoAfYHiWjga8xFyR9rO6yFR4N5vNUu35bknHtumiqKrlVxGaVSxmD573ACgP0PEIaRsL0brxyuricrNms7lh5QLn87y02mPpKDW4huXMZjN0u110Oh3MZrPCRhfav3sBa2Fa69PWvY0r925R5VnyFNCYt8Ajbk8x8N5/7/lJtVszXlH59BL5eOWQsAGE7HitVquwP3KsTzVqAr4yIHlSW2XiDSDunrOgIGU5JOCYhaFuJi84w9YdExI8715gG2unCtlal5yWEROg3m8pAVq1fao4VWk33cu0ZHif1FvB+nRHH2Bzhx4u38rzPDwzeZ4Ha4eZ1KwyY4kx1tbYedu6U9VD5OEi4+6dlyK1Mu+NfS9S45MaN1XEqrqu7XHvXeX7Te8H5UNK+aby9thjj4Vz+Tw1Go2oUlejiJqAH0DEyJOaKd1+dn2rLUMForqQmBEqRsBKJh4Jp9qacjnFhF6Z4NrWSk+V6bW1KmlaQZ8i5lh96rmoqpSkLL2YoqCWCXeC0lSmCj4H9jdmS9NcyLE0hVq/bZf9rcxKjd2P1PdYG1IWsm1nlXNihByD92x478U25VVREsu8P/YcfWZUuSe8tfSNRgOPPfYY2u32xooIvR+16zmOmoAfUMReFM2ApS+JJUrrJqWrCTgTogyYaLVahYT8MVIiiW+zj2nqpauSYtBrR6wOFUjbENtloEyA6u8XsfCqXEeByP+ak5fCkXO9tHTsM2IVLq73jlkztLJ5TWpnppQbPeZSLVNS9H5vQ/Cpsmy5qekAT1Etw91a/FXKvMh11rNFb4rNUNZqtcLzxN9PT09x584dAOerMli+R8DbjNfDjpqAH0DE3Lp86UmYTAHXbrcL+7dSsHquYhKx7gjE3/nfar/W5bqNxu71zQr+WF1lL2nKCkzBs0Y8i80j9Zi703OrqjvXa5tXtv5W1WNgyaPb7YYdaiaTCRaLRbhmsVhgvV6H/aA1ep0eEibeWK1WIb0gCRkAjo+P0e/3Q8IFWtipuWC95zES3vZ4jAD5XXfJYr3emNrnm2XHrE3v2a1CKtsSzzaWt6c4p66xUyfqgmaOd84L22va7XbYRU2DtrLsbLc0Llvj+fq5zOv0qCGe667GA4HLekApRKi1UjBVcQ/FrAvvvHvpcooJvm3OB9LtrOK6847FXMMxZWObMU+Vw990JyzdepGRzlXGQusgoXqR8JqKkrnFy/qi4+IpO5bAPQIpIxUtv2z8tR7vc6rssnKqXreNgqkKgVe+/i8ryx7P89yVCdYC1vHnb2xXt9tFt9tFq9VCnueBdFPy4FEnX6C2gB9oWMEYs5hiifzteSzDrif2rDaiisC5iHs1Zt1558TckmVW1TZtsG3xBJXnmvTO8+qJeTTssbuFClG6ClV4p9JG6rPBtb/6jBGnp6chGpqxBPY50r579Xnn2mOeYqC/pZ5Ve69i98u7H7Z+25YU7D1N5fOugm28PGWeEa99/OzFk/BZYhAfg7MU9KTREm42mxtLFL1tG2vyPUNNwFcA1FDttmD8zHkYXcNprycoZHksthlDDB7hlVkl3vXbwHMBesJwm3ZUtXwvomjY33WMtxE8to+eBahjQUHKc+bz+YZbmOt49bu2Uc9XUrX1zWazkKy/1Wpt7CetbfbGpErfvc9lx6oQtdc27z5vU0fs/BQu8i5oqtmq9VWph1MWADbW+mpu+SpeAo0Z8LxNNfmeoybgBxQxbfb09LQQNAWc5YPmTiR6bixq2cuopS+pF1FtkZrXrPqiliFFeJ6QrFp3FQFgz7EbF/Ac/fPcn1URczGqoqT3zvMCkFxPTk5C2klbjh0fdTlay0WD+ehu5Lmr1Qq3bt3CYDAIwVgsi2Rsx6CM8KzVmvJQWItK+2bHSNti5731PK+uFPlXUaiq/B6zblNWfBVrvKwNOoZUppiQBTj3glDe2HI0Lzznjff39+slSFugJuAHGPqi82XQNXbq/vHmcz13myXgFKrMKXnn341bOFbeZWr7em5M0fEsTSC+N6qSlbXWvTZZqyDWpjIi0v8kwtVqheVy6ZI03cVqRel8Xay96jlRBW0+nxeSNrAd3vaCXr+qKCspBUwVl9g4e0SWIl3bbv0ea9NFPCUX8YaknoVYu2Nt99qnqys4heFltSKsLPE2Yagt3jhqAn5AYS0ruoL0JSABt9ttd30qESOEKll4UlbANu6+bXERK9Jen7Iu7Hm2LnXTe+RrE9Cn5lZpHcaEoubStoLWWnqegOWyI+bntulFU+vFlXy1Hv2sz5YlMC8TFgN07HGdW+R3LSsWrWznHW1d7EeK4O+l+zOl9Fa5piq8hCyekm2/lykbtH4BFJJp6JpvzQNgo8uB8zlg9X4QNQHHURPwAwwKIr54fLDt/pup3W2AojAqW8d70ZeljNyqWCje9bHfPM3eu9777BFu2TUe+Xrn8ZyLuqJjwtwqTdby5TOghBgbP3pS7CYa1iL1lBjtu+fWVktbI5vzPN9Yt+5lW2Kecm0DLTCNzAaKXgdNUEPQ2k9Zjwo7Xp4yZH+/CPnaOlMu4pilnXqXPCs+9n622230+/0w/UAC1nvFDTkIPj+dTifkgubzx6xpZYpvjTNsFaL3kz/5k/iar/ka7O7uYnd3F8899xx+4Rd+Ifw+n8/xgQ98IGyB9r73vQ8vv/xyoYwXXngB733ve9Hv9/HEE0/gB37gB+o5gwjsg8v0ge12O8z12YQc9vqLPPxK/LF9PasQY+y/nlvFTZcS9GXXVbF8PNexggFwHiGVkWxZO1Up8gS6rdu7lsIvz/MwF2cFMZ+V1WrlBlyVjQUVD64h52duyKDkx3brUhV+1qUr244V4bn7bfIZfmdaztgUgYfYc3NZ5Lut67nseJX3gv3Wcel0OiGXANdz817aZUaeh4eW82QyCXXYpWtWGahRxFYW8Bvf+Eb8k3/yT/AVX/EVyPMcP/MzP4O/+lf/Kv7n//yf+Kqv+ip8//d/P/7jf/yP+Nmf/Vns7e3hgx/8IL75m78Z//2//3cAZwTy3ve+F0899RR+9Vd/FS+99BK+8zu/E61WC//4H//je9LBqw66GIGzlIIMkjg9PcXx8TEGg0Fhc3UvO5Z1fSppVCU0K7i86GkrFPTaFIlXcXHH3Lcx2LaUueq8ttHToB6HlBDWuU9ep2REMCMVgHAvaZEqyWvgFctRlzPdgDZdpO2HtzWlRrra9mo72W/tr6cUZVkWxqfRaKDX6xX6ZDcCUXj3R9elqmD31ifzd+sq51jFvB9lFmaVZyj1HHkKk5adIk7v3Y2VH3vv9N7Y+8znh2PJ51Ejoel9AIpTMnxO9vf3sV6v8dprrwEArl27Vmkcapwjy+9ydK5fv45/+k//Kb7lW74Fjz/+OD7+8Y/jW77lWwAAv//7v4+3v/3teP755/Gud70Lv/ALv4C//Jf/Mr70pS/hySefBAD81E/9FH7wB38Qr776atSVyq3QiKOjI7zpTW+6m2Y/8KB7iFmNgDNX87Vr18IuNM1mE0888QQA4Ld+67cAnGmlHEdNmKDu6mvXrgUh8NJLL4X6CPtiq/VgBYedt4sJrTLXme17FevYlmvdhbZM+z2lgKjwVzLk+SQUFW5W67dZw1KKBonLLuHQttEqUeEJnOdntuSqc6c6V2rHwBsj9YLorll06dpxtmOg77K3M47XR15nk8Vwnlr/lOy1bVbZUOuNv1viS5FyrJ+x/nh9U8SUgdj5KaTK0uP2WWeyFo1NoDVLOWsDsQhVfJ599ll0u1187nOfA3BOwK+++mohov7g4CA65g8bDg8Psbu7W/n8C68SPz09xb/+1/8ak8kEzz33HD7zmc9gtVrh3e9+dzjnK7/yK/HmN78Zzz//PADg+eefx1d/9VcH8gWA97znPTg6OsLv/u7vRuv6yEc+gr29vfD3sJOvwr5AFICr1Sqkf7OC3xOsKoBpLdgsNzF41qcNwvDaXQWeFbGNxRojETseXtme0pAq2wZTWYWExGADm9Rla923bAc/2+mEWPvo+mWaSU/xUMvVG8cquywpKZUpEtoOmwVJha8lWG3TarXCYrHAZDLB4eEhbt++jaOjI0wmE8xmM8zncywWi8J4pu4hxzbW15Rlyfbyv33ObP+8/paVXUXJ5HVlz6otP/aZ0OxpvF73BPaWI+r7w3Sleo1XV9n3RxlbE/Dv/M7vYDgcotPp4G/+zb+Jn/u5n8Ozzz6Lmzdvot1uY39/v3D+k08+iZs3bwIAbt68WSBf/s7fYvjwhz+Mw8PD8Pfiiy9u2+yHAiRgAEmhQtBtaclSN+FOCQArIGwUK9vkzRVvI1z0fO+6mBC8CGLXexaz/tlxtILLwrs3VYgLON+dyM5r8nzmaOZ8boz0tE5PeOvzlBqDlPD32qftoCuzzOqhQsElVF50tv1Ta5ht4T2KRVRru70+ePfTU27vRsH0UFZelfe0rC59TlarVfBMMPe3KoEkVKY1VS9Dlp2lnmy322FKTOf465ie6tg6CvqP/bE/ht/+7d/G4eEh/u2//bd4//vfj1/+5V++F20L6HQ6hVD5RwWewDw5OQmboQPnbkZPA1bLN8/zgkuPiG3a7rkjgU3yTWnltiy1pDyrN9V2FcTbuOys5RZz1XmC1VpoWrem/4yRnEdovNaeQ0JRguc9s9dbKAFpf23iELvxghWq2qfYGHuEa5FlWVQ5tITPPzv+qXaUkVEVq9bzGNjyrSemjEhjbfUU0zLrNFW+XudZ5VWuVwWe68dtHInNiEU0Gg0MBgN0Oh28+uqrAM4DFYHze2w9ZGXPzaOIrQm43W7jy7/8ywEA73jHO/Cbv/mb+Of//J/jW7/1W7FcLnFwcFCwgl9++WU89dRTAICnnnoKv/Ebv1Eoj1HSPKfGGTzX2Xq9xnK5RLfbxd7eHoDzl4UBOtYS5Uuhc3m0oNrtNkajESaTSWHHEl7D8oDNuV5dQ6wBGjH3nV1XW9Wa8qwTJZQq86y2Du+7Pc5Ic242YElFrS9aFJqK0d4DT1mxZEiL1IuK9pQYfrfLjqzgU0VBFSmu1eVxxhV4sMuf7BhqvXadL6+xkdJ2LPI8LyiU9lnTe8W5cA/qteCUgB63Yx9D1XNjz1QMMcWs7LzYOTHlxCtX+7Jen+1w1e/3w/MLYOM/cK68ccyfeuoprFYrvPLKKwCAxx57LJzrZUGr2p9HDXe9G9J6vcZiscA73vEOtFotfPrTnw6/ffazn8ULL7yA5557DgDw3HPP4Xd+53fCTQOAT33qU9jd3cWzzz57t0156KDClXOHaq00Go3gilQXkkaJWvdQlp1FqzK4gkFbdn6T9QO+1UuoUIy9YNqP2G8qbD03o7aH0KUSbINnYW8rQIEz11vZ+mptR6vVKgS2WFeotoWkoHO0SsJ2PauFJXnb16oJG+x6W1WSyvpry6Pbkn/Wg5Fqk1XUNLWlPsN6bzUK3C6Z4TU2+pyoMvftwVOiysiW58Q8MbF69Dpbvy2zShu8NgHn7mclW7qnPYWJis1wONwoTxXimmyrYSsL+MMf/jD+4l/8i3jzm9+M4+NjfPzjH8d//a//Fb/4i7+Ivb09fNd3fRc+9KEP4fr169jd3cX3fu/34rnnnsO73vUuAMA3fuM34tlnn8V3fMd34Ed/9Edx8+ZN/NAP/RA+8IEPPJIu5iqwD7NdyjGfzzEYDNDtdkPyfc8ionBlWQx22dnZCft7eoEzngCo4uKL/e655GLlWbcXj1vh42Vduhvs7Oyg0+mEtlHJsX2xgWxKYGoNqwJh+8r+2PZbS5jl2GN6j7xzeVzbbeHdZ89iVuj5Nhe07avnmbFKh2e5p46plwZAoX4dS/Ve2H7GcFkuYe9c9d6k6vTKit332HXefaeXgeOq87aqzNqpAo5hs9nEYDDAYDAAUMwEV5Pu9tiKgF955RV853d+J1566SXs7e3ha77ma/CLv/iL+P/+v/8PAPBjP/ZjaDQaeN/73ofFYoH3vOc9+Imf+Ilw/c7ODj7xiU/ge77ne/Dcc89hMBjg/e9/P37kR37kcnv1kCBGhAAK5LC3t1dQYFSgqRVGlxNwljx9Mplgd3e3kNRDSVgFpKf5W43ec/Hp5zwvrsu0a4m1n9bK88pTy0jdqXYMq7gIlQgYeAKcLcOwuXBpxQJnlrJVDijkvN2BvHZ4bbTjbcdedz2q0kc+DyTmmDJlBbhnYVklQK1VWvC8F1UUIyVZVSBtxLmdk9dzU+kqbf/0/93AGzuFp2wSSlhVgik9BbZMsSoDPTfA+VIxupg5HeH1yVq/9Ebwurtt16OErQj4p3/6p5O/d7tdfPSjH8VHP/rR6Dlvectb8PM///PbVPvIwhOQFL7A+TpfXfvL61QzJTnriz6fzwvBWErC3gvuCZIYIds+EGWRqTbgyEsgYctWS48Es+2Lr+2mSw5AcMOdnJyg1WqF1HvL5TKQq1Ui+Nkj4ZS70LM6yyw2XQus52s9KSuqbDy0PHtvtE+q4OkmEFaZ8+pIuVh5nWbTUiuXUzK81k69cPxt8NlFYctIjWXZu2DP9d7zsntV5tFI1cdxbbfbhUQcfPb12bIehdFoFM5frVZhX2jgTGGNKdE1NlHngn6AoZaWHtO8qwBCMJUGYqlF3O/3AQC3b9/GYDBAq9XCZDLBYrHA8fEx+v1+CMbI8/ON3K2VFBNesWhlImZJ6TVl7ryYZW2t70ajURizmOvUkhXLVaLl+O7u7oZcwwDCEgym76Mws5Zcnudhg3I7NeApNZ6At2PIcmzAkxddrNcBCDslaf/tNoOea1d32zo9PcVyuSy4tzmfHcsB7N1Hz4NCcB7ZpuC069aVaKwiRALRJCCXYTnae+M9TzGFNVVmTGHSsqu2t0zJ4zm9Xg+9Xg/AZn75LMs2MqC1Wi3s7++H5D8vvfQSOp0OBoNBeDc0N4GWp22rCfkcNQE/4LCEow803UWz2Qy9Xs99uFVYA+cbN7TbbSwWi0AiDMTqdrvBiolZqgpP4MaEj0e2lry3qa8KUsqDCjYV3PyNJDAajUKwobabQksT2Cup08VnrbAy1y/bGyMoOx7884K3rNClVehZttbCZJ9oFVmLkwTp7YDDulJKGYANpYSEr3O61vrl+bpcxrPItR7ve9nzmoJ3v6z1buvZhoi9+31Z5MW2850HiglgqLyQhLVdusLl8PAwBB4C57nqdarLex5rnKMm4AccFIb68uoc2Xq9xtHREXZ3dzEcDnF0dFQQoJqoQN3UvV4P0+m0YNG02220Wq2Ctacvfcoq1RcrFZDhWbq2jDLXq1emDTKziAlHW45aMI1GA3t7e4U9di1xMf+zbS89ECQotiE13+f12Y6xd461RtUl7Al/DcBRC9pbn6yBOXZuNmXlKOlb5UOv8whH15R6fVQBz+s1qYS2O8/zjfSe1htjn3E7Xno89Q6UPbMpb1IZuZZZ7ak+2LJ53Eb5l7V/Z2cHN27cQLvdxmQyCd4zvZ9MDkNCrwk3jZqAH3B4gpdWLZchLZfLQMAHBwfhHApMLlMCzuZoOp0O+v0+jo+PQ4QvrTW1LFLzqZ4lYY+n+sNzrTBMCTIlSH735iZTwsy2lZaafj89PcXOzk4g3zzPcXBwUBCCPIfKCkmDm2MACMu9qlj2rN+2Uftlz+O5+jzo3tCsV0nZI2IAhWVs+pt1UV8EdlpAPTmWLFIJPDRZBJ9XPrt8Fvif7eYeyXbJF+tMPSepZ1mfm5glnRovzx2eUsDsNd7zYJ+fWF/Zbmay8tpm84sDZ1MvtIApZ4DiNIgt7zJXJzyMqAn4AYcKe2I8HmM0GhUIaL1e48knn8QXvvAF5HmO5XIZSHc+n6PX64WAIiYLv3btGr74xS8COAvoajTOMtyMRiPMZjN3/swjMBV8wPkSHM9CttbRtmOhFgzb5a0TTgk2z1pXlyrLG4/HhWAfG+SV52fzYr1eL7hN1+s1ptMpptMp5vN5gdTtmFioJW3HTO+zLqnRceDyKd4DlsN9cXVcNAKWx+jKpfWvLvTlchmCz6zSowE7VmH0rEUdY+0D+3V6eorBYIBGo4HFYhHmFdmHTqeDXq8XXPucGsiyLMxpKqgAcDw9j0UZ+dnjuv+y9sMbAx7zEHtPUtdo26q2W8tar9fY29sLfTg+Pg7neHsqcy79DW94Q/Am3Lx5E61WK8SNsJzZbIZWqxXey9gOWDXOUBPwFYDNwERhyN2S5vN5SATR7XYxm80Kc78k0m63GwSW7gXKF2ixWGAwGAQr6uTkJOz1aZFlWZj/scKAL60myi+zNlIWlrV8rTDxiK2M5D3L25ZlA6w4N65LXyicuFRpOp0Wli3F+hUbj5jgtgFO+hstcJbb6/UwHo/djQpiwtmex+h59lszfdm4gpSV41nz9r8qBZpVjBb9fD4vtAtAcHUuFotokg+StnqD7DnbeniAYna5WJKYWHmx8bDwSNy2p8o6b/sM8lwN0pzP5xtL5rRuPnv9fj8oYdztSD1rPGaVxRpx3HUmrBr3Hja7jAbDAGcvS7fbRbfbxWg0CkKSLxCX0/ClYx5pOwekOyy1Wi3s7e0Fi8IKTA2+SCElmPiClrm6Y2SqY+JZD56wsxaZPY/jRk1ficbuaDSfz4O1O51OQ2S5tQa9v1h/bNtsOV4/aDXqfD69HHaLPp5vly9ppjUAISCPY+JF43tjzGP2nnoWZ4w4OLYkAV2XDZyTr+eNsUKfGzvYuqvCto3enotad/b5SylEXv2x67xnOza+9JRoRrwY1FPB9b+qlDNinTJGUbYOvkZNwFcCVtjx5feiT+1elHQ7cy2rhdWi6XZtNpsh57TdnUfnBTXykbvZ2LzIWoftS9UXVF2V1iJOXZMqi6CgbzQaBUGiRMo+WhJm/3V3GS03ZuWmvAFV2mzP573gnDNw9iyo+1UVHt4vPkN6PMuy4C3x1jFbktU556rtjvWZbZjNZphOp8jzvJDsRLdz1LpZh+1jjARS7bLPmR7zln0BfnrOqmNS5qq24+89v7F6PHAZHYCwtaPOm3t9UWX76Ohoox/e83+RNfmPGmoX9AMISy7WHWWFSrvdDi/FaDQKRKuWwGq1Qq/X2xCWGrHM/4eHh2HtcJ7nhfljbRMFHC0CaxFbl6Znien/lDVgo163sWI82Hk3HZeTkxMMBoOCJQwUhZB173oWoeeGtr9XaaNntXtg2yeTSZgjpQfDKkU8ZjMYZVkW5ox5X4HN9cba3yoKkT3fgsSv4zWZTIIFbMtgYCHXWeu7wXN1OY3nDbHj6Y23Z2VbcMysN8f2NdZ3bUesrVXI3SN1HVN+5rsNnCfzSYH1tFotLBYL3Lp1CwDCMqbFYhE8FoT12tXwURPwAwjPJXdychK0Vlpc3W43CKcvfOEL+PIv/3J0u11cv34dr7zySshQk+c5ZrNZyBm9WCwwHo9DCktadxQkFGpsi1ob1lICziNCNYhJXXT68luBV+UFtURQZnHFBGBqrGlZcbyWy+WGQqFeB+vCtfXFiLasPSlBq+MQI4YsywqJMuzyHP1Oq5nX0fJhH7vdbmG9syVhzysRE7zeeNgkKZbM8zzH0dER9vf3A9nOZrOC16Hdbgfy47PKtul0QMzi1O+WiD1iVmWNx+z6b+1LbBw8UvWUAk9JLXvGgHOFptFohFUNDKrjWv/Dw8PCmGs2K6D4Trz1rW8FAPzBH/wBFosFWq0WhsMhlssl7ty5g/F4vGER1wFY5agJ+ApA3YcESUBztxJeJKhujE5yBc4DiYDzpAsaRBGDFSAMzFErxUbHWgujjCCt0IwJH0VK4MXKVsJQi1dT7DFhiTcXGiuzDFX64gljb8w0MxbnTGkp8hpvDDxioiUNIGRJ45IfPc9ziXrRzXeLyWQSsi2ppblarQJxWA9LlmUhGM56YqoQmMJ6MlLLvCx0rGIuWe8Zsv+990h/j9WtCgKD2tRVnGVZ2IzFWuGss9Vq4fr16yFzXpadTVF0Oh3M5/OCoqOJXGrrtxw1AV8B2KUnwLk1Zs8DgOFw6CZV8KAWjlp8MXexB7aLAo+IkZzWbX8re2n5uxW29lrPmkkJK/u7N59lXbgpi94T2LZtXhlV4ZE9y6KnhNHLwHm0qibY98YfOHevq4taCY5123SYKXKxfbRL1+yzrOeuViuMx+PgreHvVCY1oxNwHlwY85DYtmyjLHnQcUnVybG3XoLY86PXqzvdluv1gZ4i+8c6mAue7mgq8nRJs7ydnR08/vjjuHbtGr70pS+F8rkb0mw2Kyj0bGcdgFUNNQFfEZCENf0e3Ty0XI+PjzEajUJSDrqKCM+1TQtYXZBcUK+72lgBpAKE1/C4nTfU863gZdne3FnKMoxZut5xK6QsAcaOe0kK+Jt+9ix7r42xssrOiwlZvVY9ECQpqxDZazVAy95PW4dnddlkHaxzW0+AnhsjOl3va88jCQObkf22X9YitbD30PaD19n7Zpdm2fIIEmEssjx2Le9X2XPFPrIeb6UCx1E9JQqbJOUNb3gDsizDK6+8gkajgX6/HyLk7VadWZYFuVGjHHUU9BWBEhtwvh5Yl2vcvn0bzWYTw+EQe3t7heQPfDHyPEen0wnLEOxOMyQeGyHL+SAlK/vZusljFpFGU+vG6imXZVVXpnfeNm47Dx45xYSljmUsMlaFpNeelIKRaiPHXoW7tfj0edB75vXHi5rXMnkPWaZuS6f9smNn2+MRf6yPMTIFivEBuiuTtlfL8vpj6/Ha4CmYQHngkY49n/1YH/XeWLe+tttey+P2+WPb+B5z/lyfQy7vUjz22GPY29sLZff7/UKAJq/Rtt1L9/O27+6DjtoCviKgy5kvbp7nIZhKk2owP+sb3/hGvPTSS4XMRQy8arfbgbwZ2QicL85nMgkv2EoFiCXbMgKlkAawQfy6pMfTym25aolcFNYKV6Tcqfpdr1VrUTc6T/XFIx8tV8u07dTzWA7X0HKcmZUI8N28tKp03r/RaKDX6wWXr7c0i/ePBMx52EajETIref3y2q+WmnpcPI+CPn+qwPBvuVyGpTX22fUsWg+xe2LHzXpyvDIsEVqloNPpuMosCVg/63VlCkKr1QreAK7753HgfA9fTe3JuVzKlt3dXXzVV30VAODWrVtYrVbY3d1Fq9XCyclJkBM217xdLXGZuFfEfr9QE/AVgWdharRxp9MJc2X9fj8EYmn0tLok7dwgUCQktYxUUFMIqrVB6CbxCttu73ctA/CX+ZRFQG8Dj3C3IfOYtaSWZRWr1dbvWYSWfGPWnNcmPaZka4Wv1qGKEgWsvX9U7DQhC4N8NGdz2fjZjFremFlLl+PrzWFXnXv0lKKU9arXUflTYo0pGmwPxzNlteofx9wqcDHFzIP1sDAYixHueh2zYSmeeuopAGfPwGuvvQYAhXvrJd8AyoM3td+POmoX9BWCpynzJQXOLNfxeBzOt2t3dd9WLpxXwWN3oYlZDKrdA5vuwCpExs3APTdcLKLUc5eWub09V6MNSLF980jVuv68/npj5JFirI0pqyb13Rtzz0WrFpsdD4/8VQHzCJXPl90LWTd2YHkeuZYFCqaENJ97VdT4XHukpuNgy0/9niJl2yfP1c3zNCDOrmm3bmaeQ2+XZ717z4zWrVM61sNg0Wg0QrpPRpcDwJve9CYMh0PM53PcunWroKzr+AMIqydSXoaHzX18Gagt4CsEWrt2OZLNiMWE6ITVyL1ygbjLzSMYDdxSIevNAWrmLLoPFbpHrW2vxbaWqneNfrbBX945hFUMVDBaa8RzY9rzvDqs0PLujXUX2wjlsiUx6tIEzsffuhJT7eIxVfAYJNhutzGdTgvPgxJ8jOi88q3Fp8f5zGjwoLY1ds9tf7axyjxytXP92l5LSDpe3v3Xe6r32WYkS7VN1/7yOAn99PS0kIgj9qzodMKLL7648Vyr4s/zeU9SimRNwkXUBHyFkOd5SMBBLBYLTKdTDAYDDAYDjMdjfOlLX8Jb3vIWPPPMM7h58yYWi0W4Zjweh4Qc6k5j+cDmfq/8TV8gdfmpwPGWBylsKkEABfecum9jlp7ndrPWm57jKRbWata+2T5aweFZIzH3sRKIvd7WZ8cutqbWc9/q2Om5nKtXBUeTpgDnaQSVTPT+WtLQ52WxWODatWsAzjev6Ha7IZsW+08lQcdI22THuczi0/MYTBhbVmXH345z6t7FYD0FloA10JDn09K1AWJMfgNs3lP2i/Pa3hjo85FlWdidK8/PE8poO7jDla1P5/dv3LiBZrOJmzdvYjweB9nDc1arVViyRNnCPbNj47aNolMFnhy4aqhd0FcMHqnElstcv369cB1fSIVeG4vu1HotobBcLyCKySsWi0VhWZMKYloFGuzjufZs0ItnbabGKUagHix5e25Fr76Y5eURaMzy0GsUMStLv8fKIUl41onu5KRto9BOzd9bomOSDM4F2/NsMJJnIcaQUshIUuq2te5QO0ZWiSmzLj14zxbLsmNNq9Q7d7VaFQiW5/E98KzsVFvs8iL1ONkpH01sonjssccAAK+++moog/ew0WgEr5s+xzbwzWvfZeOqW9Q1AV9BWLckiQ44XyD/2muv4caNGxiNRgBQIF4Ks/l8HiJmdc9Y72WnsPMiOmME6M37lX230Hpj89NlL2GVl1QF2Dbk652TstT1nNg4p8q23gPP0tcdjbz0oLp5BK1b7T+vURJIQXfUYfs0Tao+C543wHogeNz7bMcpRkzqxYndQ0+RrGpR2bK9esq8OHoeLePZbFbYUMOz1j3wfK5koGKbio8g+VqL/Nq1a3j66ac32qHkzV2mvPzoLCfVzhpnqF3QVwx8We2Dv1wug8BrNBph6cH+/j4ODg4AnJGztwUZ3VUnJych/aJHRLYdHgnE5lT53ZJSmWCM1Z2Ksk25H1NC1vbZSyQSa2/sN94vPTdVr15nLSy2wXMf6pjTza/CWK1Qqxxp+zmHy2NlySIAFBK+0GrudDpBSMcsUetVidURe2ZSXgT+Hrsn28K20VOc7P2wLnevPfZdWa/PEo5wCRt/8/rv9YP3TpUwKlLAWZpaa6WSaBnVzujnL33pSyGwjWVRkecxnacuU9Yum3wfBjKvLeArAEsi3oNOQafH1+s1rl27thHdTAK22jhz2tqoVg8qOPinS1Y8t2VMaMUsCGuhaFIQbUMKKcHujYEe177pvKf98/pmx0iPsTwvY1CsT969ta58bSNJmC5JqyB59TQaDXQ6ndB3nTKw7dN7R6JQixc4s8boDo5ZRFUVJO8+sV3eWPAaW64lMqsgpdqg16X6wGPWY5OKmrZK1nK5DP0qW8Zn28t752WnA4rTTpweUoLWNf7aB7ZRrV/e29RqhCoeqEcVtQV8BaCuOxKdXaKwWCywWCzQbrfR6XQwHo/R6/XQ6/Vw/fp13LlzB8D5XA5fEApParbr9TosD/JS/2k7YpauRcrNqtfHrOyYYPUsgTKLx7vW9sdaXGX9tNexzFhQkNcWtVK0DKsI6HWxqHPgzCsym83CZgqahJ/X2Wj0fr8frOaTkxPMZrPKxKlCnEGBrVYL+/v7mM/nWC6XhWkQWtvsr7XI7dha8Lhm/PLWBqcSZZRZ2rH+xjwW6i3QmAV9f2LWrAUT0tj+2jbxP/fvpizQZ5DtGg6H4Vom4Dk+Pg7pbHd2djCbzfDyyy8DAJ555hnM53P8/u//PgCE6On5fO564WLvycNgqd4r1BbwFYElPOsapAVsrV0AhVRyej7JV8tiRKlGybLOy2i7flfBy8+x74BP/jxeBs9K0X5ZazzVjzLrKGXJW8QIInZNlb5q8A4tYSpV2j4leev10OfD9sm2gVGw6/U6TH2Mx+NCEgrOCTOIxz5fqX6Vjbnte2wapMr98+ouO+aVGfM02HaVtSXVXgZ2cYvBdrvtTi3YYCmmoeWGDMD5Ot4syzCZTAIJ7+zs4C1veQtGo1FBtlhFx66kqFENtQV8BaHEpe5jfdGazWZYcnTt2jW88MILODk5KbgjFbrtHrMbqaYfE77btts7tu08nWeBlFkv+jmlWMRIr6pg8eZldWmPjWj1rOSyMa7iQWB5VKi49MQSEoNrNI+zbsahlnysflqfdr53PB4Xlth46Ut5fZV7x+/2fO9+2t/tMxB7Fu3zWOV599rCsfXaby1i28aYtWuna2z0t/UkaFnMjKd1a5CVXXsMnFm6/K5xAQrrtblXSI3NVUZNwFcQqnWSKHV9LXAm7G7duoV2u43hcIjBYIDJZBI0XbtTEoDgrqK1pAke+DvrB7YjppjALHNPVymrahtirkOvXisYOcZ6rqeg6PX8TUnX251G2+d9t22JZTWiwNd6GfVMS4mkzPZZggTOd9oCisqDN858hrhXso2gZrS1pinVcjT1qPZbXfKe+zdGWPp7ym1rr9sGdjyscqpts/dIFRrr1fKu5/k63+p5TfSe6zE9RwOzmJmL9dJLoZstMEraq0ehFrCOz2XhbpT+Bx01AV9BqHtWlwZoNiMAODg4wNNPPw3gbE2wpqnMssydZ1qtVmEhf7PZ3FimwvNi7bLnWpS9TKkXN1V+WZu8tJmxMr3PWZYVEhh45wKbAtBrg65R9TwLqX5aN6A396aWHJ8TClldD6xkrpYPydTCLn8DzoQ0g3KA8ykMkkYqYC7mbbDegar3u8p9VdLe5jkoey6tZespaR5i3hzvswcNtuN42/X8vV5vI1sa5+NZfrfbxWg0wtNPP10IrJpOp7h58yb29vaQZVlItsH7zTXBqeVONeKoCfiKgi4/JWC1NigEmRXry77sy/D5z38ex8fHGAwGgVx1lxuS8mg0QqfTQb/f38i3S6gVYq0BFXIxy9dDmVBNWbC2XfZ3G6DjCUr1HliNXl1xWrYSVcoNRyLkUo88P49UZQCMRrJ7blYvwUWWZYVlZXoNnxHdqUijr3lcd845OjoKGY68+2jdtLSQvIhfu+VejNSVpO35VZ4hbZta7LFlP96ysBQJWovbO1+/c6zVu8BkG55rOuV94Xdv0wNVUNjXZrNZ8DhkWRYC66iwLxYLzOfzgqLz5je/OWQ0WywW+OxnPxtImnP8R0dHuHXrVnje6Jb2tjG8TNh3+mFCTcBXFGoFqzA8PT0NmXAAFLaG8yw4m4OZ5fB8TSkIpAWT52L02s1y9MVKWbBW+HmI/V5mxaRy4XpCRd3+GonO33QXG+uRYBtIDradnlDW83hfdfmNPd8jBlU+tDx1aTIC1mZKK7MIbTpJ2y4lZrusqUxRivXHkr0qK/zO++eRm/VIxNyqnndC+xez4LUNJC+SIIPUrAJr+2vvZ8wrw37ws05JsQ02fzwJVOeUd3d30e12MR6P8Qd/8AdYLBbheioR0+m0oOxRNpTtfHUZeFit6pqArzDU0gDO5+6sy2k8HmN/fz+8pIvFIgiEWJlMyNButzcsrKraaMpyqULWHradX/Lcg1qvdc3xN3UT65jwPA1aUQuTQp33YrlcYjKZhHq5UxDJW93B6vJn25QgadV4c9EpKEl6Ll7+t65nW65nBdLlrOOkc9F2s4ZUtKynRNj7nZpDZx2WwD0lUX+3Hhyv73puFdCrodHe3FlI6+Szk7Ig2X79A3wFgr9rmXmeh3de74lGozOD3sHBAcbjMdbrdVjCRu8MlQegSPSXaf1u+35fddQEfIVhAySYklJ3POFenru7u7h+/TpeeeWVQoJ960IGiok6ut1uwYouQ8pyqIqLzJulzvXaaKORtVy1cq2ioFZDWRtarVZw7zKqmB4KBdtCa8PWxd84RaDj6ylEsekAhe27JUuPfLUctVg9UlVXtY3Yr+IhibWZ8Kx/vc6zIGPWpoUqFClF0Y69bUev1wvH2u12CIC0y6RSbnUl25i3hn2zy8yAs2dwuVwWFEMSv7quCb7rNmgwz/PCvLHdt7vGxVAT8BUH5xApLCaTCXZ2dtDtdvHEE0/gi1/8Im7duoXr16/jK7/yK7FYLHBwcIDlchm0dLWQ1us1jo6O0O/3MRgM0Ov1sLu7i6Ojo6g7uMzSvQgRp0il7IVPCTUVxCpEtP96rtal7n0SFoUb5/usMsPEJlwGwnKsV0F3lfLczxTa3g5C1iq0FqNaQzpna61dKgI6BsyOpnVai8eSlOdp8BQd/c5zPSvTrhmOEbrXRqtExZ4dtRytUmqvsQqmZ4HyOL0c3Cnq+vXrmM1mmM1m7lSCjpt9Xr2205PS6/XQbreR5zmm0ynyPC/M/fI3ZqujcqDej4ODA7z66qshcYu1fjW4i0rkZc//PmpkXifiuKJQYaXCiMJ9Op2GlyjPc9y6dQtZluHJJ58EsLmRPV90Cub5fB5IgtsX2kQVViik3MwXcTXHrLAq13qIWT8pK0bboURALwLJV0mTli+PrVarsPHFfD4P1rCum/WEmKb11OAp/eO912UqhJdYhBYL56spQDnfr0JZx8r7s2NUdn/0nJiXJOWa1rbE7pOOQcoTE7s+RXZemZ5LGzi7n0x0oSTH7QH1fSrzCPB+eeNPktfdq2J9Bs4z3/H8nZ0dDIdDLJdL3Lp1q9BPWux6HeCvdb8bVHl2HlbUBHzFoS8jH+TVahWWHO3t7QEAbt26hb29PTz99NNhvkdJQF8qvsgkDOB8KUNMmFV5gVSjt8LYO27ruBuUubTtuR7JKNF6LnzrjmOGIrsFHFBcTkRo/l7gXEmya7xVKKv7Wt2FXh+zLCtEFlOoc16y3+9Hycsjpapk6VmQqWfGKm5Kap7S6FnQMaUqZYl77bbvlvec2vZSseFaW75jvLccd0YR67XbQqcueH/VQuUcPRU4u3Iiy7Kw9eCtW7cKiVt4PftBaArcsmegCh41q1dRu6CvMPTFt+43at/q+pzNZmi323jssccCQdsyKJizLAuBRPqC83cgbTl6LlwPtgwrwJUI7AvvWbGxOj2hoMLVXmODeWhlAptJI5QMeR0TX9iN1lkGrTVa0jovqII61u6YMqNLejwCtFHIbNdiscDJyQn6/X4haKyKhabja++ffrZ9sYFuXrmEVW48C1afTa9NlkxjrmVrYeo1KWTZeYQ623twcBCUNwbgqTVppwLKyldQ6dLnLM/z4JbmHsOcVlBvB6+/du0a9vf3cfPmzWBNMw8AFQl1M+vSMm+nK23rNsT6qJJwTcBXBGXauoVaTN1uN1iyAHDjxg186UtfKmzEDpxv1BCr384Xl1mVVjinyvYINCbMY2XFSFjJShELxLLXWWgUKc+jlUphyi3lKHiV7Cy89cnW+qrSb0+J8BQXHtP5Q15PhUstNkXsnsaUwbuFkpo97h3Tex9rS+qYvQdlnhnvOfMsdj4bnhLnRUHbfnjPDslX14aznRpsxbZYxXF3dxdPPvkkOp0OXn75ZcxmM/R6vUDQupROlyYSKQJ+VAl1W9QEfEUQe6D5gvDF8KzTbreLyWSCz33uc/jyL/9yPPHEE3jDG96Al156Kbgfl8tlwQXJMk5OToLLejgcYjweFzbwZts8YWcFYUpoEp7VVyaA7byfCmKbwMAjWLru+DsJyApjPYfnqWVhLSfWzwAc4HwemXXYRBS2jdomWjyaeUiXoHnWJF2OLLPX64Vo1uFwGJ4b7lhEYWvJJKU8ecfs2Ol4E1WCd6wXBDh3u+p487sNIrP1pJQZj3jtud7zY58V7zqOq256weu4Pj/2HHjlNRqNECjJ4L/pdFpwN/M8up5ZfrfbxZvf/GY8/fTTaLfbeOmllzCbzTAYDNDpdMK1fHaZ+YqR3AAKMSK2jTWqoybghww22hVAcBkdHByE8/b29nD79u1CQnabyxcoCoNerxdeZC8zj0WZ21e/e4hZ91p+yjWoxOyRgOfiTkFdnOry9dYR2zbq73pdjOBSAk2Xm2gwllUC9BxvOQm3r2NULj0iVrlKQd3IZajiAo55eZR8damWPS+2JCqlKPBzrK32mPe96hjwHlmLVhWyMi8QvVGdTidcN51OMZ/Pwztqy1QF4Nq1a4F8Dw8P8eKLL27MGbM+JW7KESoLtfV796iDsK44PFeltazoahyPx4GEmflGCUJfPl6XZVmw4FqtVljuoLiI9lvFoip7ka2iYIVNlp3vOVvmPqxy3P7muWk1IYcqCHos1h6eZxULJWlP8Nk5ZC2P12l5mqo0yzJMp9OwzMQrh2VpX/jf6wvvhSVc7zd7fdmz5CW4IGyksI5dDJ6ylFL8vHLLPDve+KiiwGdVld/U9VRCuMqB/aZCxbXiVkmkHLhx4waAs6hsWr+8l+otYPCVLj9SUq6J9u5RE/BDAGrUqlWrS4trVE9PT3H79m3keR7cV8D5C07NmUKO0ZQ6f9zr9QqBXRdFGdGqINjGSuZ3XSZURUHwrOkyYoiRlS3Pu9YLKvIEr0dczCvMNZ2e9ctrPLTb7cLm6nQlxpa6EPqMxe7ftgSo8OpUwrdLrVRZTN2LKrDjrMdi7ayiRMSUEw3Y43HbHu95pFLZ6XTCO03vBYOmNCDLBn11Oh1cu3YN7XYbR0dHePnllwuu7/X6fHvKxWLhTmnZaP0aF0dNwA8B1MJRDZ4RkJrP9fbt2+G63d3dDQHBxB4ErV2moWs2m4G4tf6qSLmMU0QZc+um2kEhUZbzN+X+TdXl/aUEUxk5pvqvS5J4PefnPOK0f9a6zbIsJOX32sPv1qK3Y5IivpS1qL/ZMtRjoH8a56BjFQtus3V6/UxZmd69T1nHXjkeUdt7ovcv5lXgdwb1Mcc0VypwD2+7PE4V2VarFZJzzOdz3Lx5E8B58CXJl/DSkpZZv7VVvB3qOeCHAPYF50s3m82C1TAajfDqq6/izp07+PznP483velNeOyxxwoR0uv1GrPZDN1utzAnNBwOMZvNMB6Psbu7i16vFwKyyoRRimis0PFcl/a/Z6kAm4E5/I3CWsdFQbd7bAztsRiJKqFopLiNcI0pBVpnLMevkiL7ZNcHx8ac6zh1PScTtsSSN1jisu2zwVp6n/Q7YeeLte/2HmuwkkWWZSEQUAnNI79Yn+xzpsd1fHVsYs+yvd62wY6ZHScAQVm2bdfrSbxck39wcBC8POv1OiT54HVMypNlZyllh8MhnnrqKZyenuKVV17B//t//w8AMBqN0Gg0QpDVyckJJpNJYew4787ljVW9LTXSqC3ghwBKOvrSrFYrzGazjZeDVjDndNXNR9jF+twoYDqdhshoTSRQhpg7tswVzWu83MWeq1CJMOUmJDxS9gjQsypj/VTY+u0OSvZctQhj/bqI+4+WFtd1AullJLZNHrGk3Oyp54L3kxZZp9NBt9tFt9tFp9NBu91Gs9l0CbiM6PRz6l5413tjXmY9V33+9Rp6pKySoWRr+8DlRtzKkmv9rTKkS8h03W+328Xu7m7YcvDVV18N9XIVRbfbDUsNVVHj+6/BV2XvVY1qqAn4IYAlYP7RPUXhS6v28PAQr776KvI8x2g02tiUncsOVDhwXoguz+FwiH6/v2G9KspezJTwruqO1mMxYooJW8/9WRVl2n/K8rdtsK7CmHKh361lpb9542qzSPGYrc/2wRsj68pOkaElaU0eoek6CevuZnl6PFWfjoP9nII3NvY+aPCaDbTTc71x88Y/1T5N2KK5mTkNwUh2PvM2g5pmuet2uxiNRrh+/f9v78pjJDvq89f3Od09Pefu2usjxjjGB8GA2UQoUrzCcawc4D8sZCUoQYmAJeKwkHAODIkUo0QiChGxohw4UqJYOAok4RKODU4wC5jFBtsQY5tdz+7OtXP0fU9X/hh9Nb9XU+919+54Z2e3Pqk1Pe+o672ur35nFZFKpbCwsID19XVPOkouxFm2LI9tkT4HDjsDR8AXCfwIWP5YqEaiMxawaQc2d+dhOAonzF6vp1MqdjodVCoVhEKhbSTMdkgMkoyGkSLkZBakOvQr15wcbe3wU3fapNJB5GvWa9Ztm6yHITEbhj3O8kh8VFsOE4trluHXXhtpAVsZm0gktFfyPjrMSWchmQRCkl6/39+2kUWQ5sT2fvgtyMzx8FuoBUn+Nk2J7VnK49Kr21ysUDUs+0F1M6+jGYK/b6a/pLo7k8lgfHxc+24sLS15kvQwLzUArSWRBGzal81xdoR89nA24D0Ic1LhJEa1MW2a3ANUpkPkJLa0tIRkMomrr74avV4Pc3Nz2qbLCY5ZcWhLYqIO7raSTCYxNTWFaDSKarWqf6AmUUnJTPaBP/pBTh3DkqvtGlMylmpF/uXYmfukckJmOXIrQL9nYR4HtidHMSdg2z2yTFPKNSfoYaR5pdQ2swJt1XLhZotpls/SJDJb/2XbZJvNbf5kXVRzcrx4L/tn5iMm/LQesj5Zj98YSV+BILWz2X8pCdt8BExHJj/thBw3uXCRKWD5vGSWK2YuY1+52QefTTKZxIEDBzA+Po5ut4sTJ06g0WhoWzIXZEptxhLXajU9zqFQSMcam97UfuPjMBqcBHyRwG8CkblcE4mEZxuxlZUVJJNJXHbZZcjlcp7yaAeSE3ez2UQikUAkEkG9XtcTUDqd1jHFRBBpSvK1SYg2mOpV87gJqfqT9ciJX46dLEsSiyzLJE2TdILaPcw50yPWT4Ji3RxD2ktt6lu/ukaZOIMWOIMQpKUYtm6TfP1If9D7F1SHlIBt76Pf/XLjBdtC0kwGI0N4+DugRkLWIbUGktylJobvralNYNnRaBTJZFKHHbXbbSwsLCAcDmtHS5Jrs9lEvV73jLNc4NkcrxzOHY6ALxJIUpESEx2nNjY2tLqJ15dKJe0BXSwWPaouqv+ozpI/zFwuh3a7rSXlRCKBVCplTY4A+JOmjQyD1HZ+6mu/kBFZnm28TFIeRBTmJD1oMhqVoGQ9trbaFlecaCUJ28rihC0/tv75tcEPg8bBT43LfnGB2Ol00Gg0tPqT75yZZMQmOdrA60ZRsZvtHRXsI9XptnebbeKigpIsnfNkvdJGzjbJtKZMrkGYKUoTiQSy2Szi8Tg6nQ4WFxfR7/c9+Z45to1Gw5MVD/DOI2beeIedgSPgiwRyUpWqP65uGSsobYByo/BCoaDtufIHLmOJJQl3Oh3U63WtLuQOKuaK3yRPqRq2xX8GSTFBx4MkYz9itpUhMcgu7Pe/Xx1+/TFVj/Jak7yoWuVixyRhqV2w9U0uIMz6bHX6LXwGwba4Yv3S0ceU9GXeYlvssnx/CLO/HCPbcxnmuduebdCzGwY2qZpE3Ov19O+Si2Dpl8FxonQrdzOSOxPJGOB4PI5kMqm3Iy2VStrxknWwXzQxyT5JtbZpn3fYOTgC3oOwqcYkAZsqXibapzOLVGutr68DADKZDLLZrLVMOZFSYqZKi3GkdBaR2Ypsk7ctVteEJOsgmIka5P2mNGsr0+8cicemzh1VlWsjgGGlMpMIpIpTtk8ek8/YzBzFcvwWCyYJE/JZ2hzu/J61Sa4yFMpG+HKhMWiRZdZtO2YzPwwLv/aZdZjvoDkWfuXIetrttvZqZggWn7fpeUwNFlNRsgxzx6J4PI5UKoV8Pq+lX7ZbvhMkX0rPZgiezSmL5TicO5wT1h6FOVHyxyonYJmmsFKpYHx8HOl0Wjtq0PmqUChgbGwMV155Jer1Osrlsi6z1+ttc+ZqtVrI5/OoVCqo1+vodDrI5XLI5/OIRqNoNpuejDkkiSDJV/ZFHpPf5eTmN9n7lWeWaR6jty2dsaS0afbDVnYQbBOyOQnbYOtPp9PZNuGb0omcRElE3BWJUk08HkcikdDvgdkO9j2oXfJawK7u9SM/sy45rqaJwtxBSDrHmc/ajLEe9MxYnx+h2J6TqT0wxyJI42Jqh/idJDg2NqaT4zD7nFJKZ6Dju8iFLNX3/E0xSU6hUMC+ffswNjaGH/zgB6hWqwA2F9psC1NNckEkF1d89u12W7fDtqhwODc4Ar6IQMKUKmZga+IOhUI60QETsFcqFaysrOhA/Hw+j1qtpstkeZz0pONPLpdDuVzWCT+YSIEEZgtLGUQ2JvijD4oDBbyOVMOSpN95OqZI4h92wrFNzrbFxKD+mhO2BNtmOuHwnFwsyPaYhMq0hEHtkJKV2U9e5yfR29TFw0AuHABYyVeWz2tMpyH5/PzeD79FWdD4A9i2AGB5ZpmDnre81/zL9xDYJE6aGhhyxKQ4ckErCTgWi6Hb7aLRaOhz5jjS1i61SHQMM30/humHw2hwKuiLBObkRNhUegwtCIfDaLfbnvzQ9JiUsZq020lQomJSf5krmjsmBUkCg44RUrVtHudEeS6J4eWEJz1IbRK1+T2oTJuKdBBs6vGg80GSyKCJ0vT8HgbD9onnza0tg2BKszYPX2kSMcuV6nE/L3fZh2H6OQxs6mn5v/mbHKSSZl/M/+W7TucsUz0diUSQyWSQy+V0fL/0/5DjIbVj0nbMcgB4EnI4qffVgSPgiwj8gfoREqXgdDqNeDyuJyxmxgI2vaFjsZjHxsQfOvPvAluEy3SCdChRSukUl2Z4DNs46IccCoV0uTK2mSpUTki2vpqTm1/5hBl2YqokB0lC5iQ6Ktn4lSmv8VNh80MpiOpav/JNpyabjdSm4jelRj+vc2kTldtASnI0Vc9BkIss0x/BrF8uFiXhmd7usr82nM1iSfbrXIjKlOjleLIvMtJAej2Hw2EkEglkMhmd27nb7WJ+ft6T1938zZi5yWV9zvP51YdTQV9E4ERl7mhE1Ot1vXpOpVJ6s4Zer4elpSXthMWwBaq8aHckEokENjY2UK1WkUqlkMlk0Ol00Gw2tZqLNivatoCtlbcpycn/TYcqqhRN+IXSsMxhSN6mqqZkL9XQnAhtiTj8yja/m+0ZRRNgU5VKc4AcC6WUVlPKfnLc6R/Ad4UqRqn2lY5ytvHie2GOH8u3Pd8gVbW81ubBbS4cWJdt3Gz2ett1En5k6qeeNssalaT83iE+G3OBk8lktC8Cn12r1fKMJ52uqKoGNnO+r6ys+NryKf3K9lPzZW7y4fDqwBHwHsCwdjRp+2JYQ6vV0hNbqVTSe8Hm83l0u12MjY1hdnYWqVRKezWPjY3prerkaph19Pt9TcK1Wg3pdBoTExNYXFxEu93WNmhKwpzo5YTPftmkPGBrMwjpbGLaI202OPmX3/0mWL9rpB1dbm4ubXKyDTbYSMiUMge1I6jNgN3pSW6+LvMJU5tB8gSg9xSWdduIknWbIWYsz7RBm4ssGRYnjw0yHUjp11R/y3bId4RlSzW2bK9Zvo1Qbe9LkC3XL1zNVrftneXvNZ1Oe0w6NPHwvUskElBqM2aX2eiYxzmbzWrpd2NjA6dOncLS0pJnPKidYvn09eC7TdMUd0NyaudXH04FfRHA/FHLzejN8/xhEbOzs0in09p7uVwuawcrZrfipMzVMidO6SkJbIVIkCxlsnebupKQE7tUV7IvjJU0icEWJnS2konftVLS88syNWy55mIjaEyC6hmkwga2xo1kyA9V+dLb27RX2tS9fnHK/M53zswGZd5rPt+g8TJVx/J+czFj2jGH0YDY6txpmItCvzAuxu0SpiaGz0LuAU3ipvMj87V3u10sLS3pqAjWIctjOKHtHH9vOzUufu+7g5OALwqYkhPJkitaebzRaOiYQ8C7TymwFYcIbGa8qlQqnkB8qii73a52tGIIVDab1RK3UkpLXa1WS+ettZGO7cdJiXkUteG5TBjmGHIBYUqro2gjJBlI2560o0pJzZQUh40XttUt+wFAmxeCMIw0b9YTJLUD/rs1DTuGZjvMRYoZcmW7z1aO37lRMUxZtkWhPEb1MaXTdrutf4fUGiWTSXS7XY9JR+4qxe0Ge70e5ufnteOV3Ota5ouWec+lVsT09dgpOEnaDkfAewDDvrwmgTBcQcZ5mlltOIk2m029W4pSChMTEwCAarWq7U0yzInlcwJsNBrIZDJIp9PodDqIx+PalkyblVQ/+03cNo9r2T85ibOcoDAYiSDbntkm9o2TvOmsMgzhSwnNr15ThWs7HqRal20eVrXtZ9sLUtf7SetBpGOqkIPIyrTbDiPJysVjkHRua7ft/CgLkEHS3CikL1O5bmxsoNFoaAdEPqtut6t/QxzPaDTqCR/M5/NYWFjQMb+yPrkQosZKLn459n45rUeBk3SHhyPgiwTmxCXjduUm3gD0inpsbAxra2vI5XJ6w+1arYZyuYxYLIapqSlce+21KJfLiEQiOn9tu91GOBxGp9PxhDd0Oh09abDuZrOJSqXisTXyL7/72XVtEpP8Oyg+1bx30DU2tSalA7kdWxA5mBO6zXZJla2MbTbHAfBKxLKNcvzk5GpK2Txm5v2VUo/Nacm2yPE7J8u1jYU5Hn7XmnUNUlnLNIm2unjsXDCsScBPvew3JrJvsVgMhUIB0WgU7XZbk2ckEtH+FLFYDJVKRSfOYF3pdBrFYhFXX321Vj2//PLLHi1Wr9dDKpXS6uVarabNU3yv6M/BpDrnOm5+vwGH7XAEfJFBTqamMwx/cPV6XdsBAeg0dcDWSvuVV17B5OSkdvCoVqua9MxQBmkLNichOjPJNpjS0LASho2ARpFOTOL0u99UZ1IdLc+b34MkRJIey6VELQkxKMmIWSfLJ6GZx03ilupFeZx9kiQcNA42KTqonWZ5ZirNQf21vSvyfJDH87AY5t5hpf9B77VJvoyZ5+KOTlEkX9l/2n3lvZlMBhMTEzrhxunTp611U2PV6XTQarU8i0Hafpm9bqfhyDcYzgnrIoQpWUqpEthcFdO2C2ylsZSeyuvr65ibm0Oz2cTU1JTevox2X7lhOidCmZWHhMOYYolhVVSS8E3nIJtEPEgi9atj0DWsc5R+mOVKVSxgz+5E8qTjmpRyh4HtOpYHbDnwAN6sWKbWwc/2baq6zX76jb8tZMxv4WK7xvxrStJBz92mUTERpNEwVce2vpi/Lz9I4mOCmXQ6rTVPJFs6/rHMVqu1bcEbjUaRz+cxOTmJUCiEWq2GpaUlHYPNd4h+GL1eT5uSJPnynZbpLM8GTu18dnAEfJFCEhd/8NL212q1UKlU9JZlpterUgoLCwuoVCrI5XIoFot6O8N4PO7xeiUB88csk7eTgM3JW35sGEYq8VNXjwpbXeYkK6VH2QZbu/yOSRI2tQJ8RqO2P4hUpGQtkyrI5zFo0vWT/iSCFj9+kntQfbZnKbUHAHz9BPzqGYbozXb79cvPTyHo+cm20yzEhDitVktLvPF4XJs+qCmROxWRYBOJBKampvRvdX5+XvthyMVVJBJBv9/XGz7IceR7wMWzn7ZhGDhJ9+zgVNAXMWxJOaTDSr1ex8TEhLYHc3tBOm7V63XMzc3hxhtvxPT0NJRSqNfrALZW5aZkB2z+GJlfFtgiYZKAOTkGSR6mCjTIzjfs5GGWY0pAkpykatg2QfklCvGDvJYTpWkHluFBJomYk7yNIGXoCUmY5giGlslJ11x4DQr3Ole1r6wr6LyszxaDHHS9X5nyWdpgvgPShCDbbI6brN/mqGeqfdPptE5aw1zNMmMVs8s1m00PcVKqpdMVvZ5XVlYAbIXNNRoNXR79NuT7RC2HUspj93VEen7hCPgihrk/aCgU8oTXAMDp06cxNTWlA/lXV1c1CXc6HSwtLaFYLGJiYgKTk5NaCq7X6zokotfrac9nYGviabVaSCaTKBQK6Pf7Oue0/LH7SUTDql7PhpRN9ap5j5yo5CTLRYW0nZLkzAnZLIfHzZSMJEd5vyntybbZPJhl9jBqJDhZkzgSiYQnvzd3QbL12xxPKbnxr1JKq8mp1g5SK9vIyAbbM2c/lFLbNBG2Zx1EtHLc/RZVZvl8NmZaSLNvZv1mm5g0g/G6DAuU4UIM76M3NImTKuuJiQnMzs7iwIEDKJfLOH78uCZfmUAHgK5neXlZZ7Pju8D3oNlseiTsUXGuC7FLHU4FfRGDExYnSP7w5MTb6XS052UoFNIek1ST9ft9LC4uotFoIBwOI5vNahKWHtCsix9OLsDmyj6TyWiCNtto+1CqDvr44dWwR7E+qar3s6P6tclMs8kFkV/av2FU9bxHLmr4od2PsdnAVpIWP4ebIJWrzfEqFArp9KZ+5diIeZCUKonLRnp+kAsP08vcpg631eu3gJD1m2XbrpWaIS56uQNVr9fTMfmMUmDyjVAo5MlSRqk5m81iamoKBw4cALC5eF5ZWdEL5lAopH/r2WxW72hkJt2QizD6fZwtHPmeGxwBX+QgMbbbbe28weOUvrivL9PdSQIOhUJYX1/H4uKilgJyuRxSqZTecIHlSScsqqspsWQymW3JIEwpI4hchyXcYcn3XCYO6TQlMciGayMpc7cZEoBftqig8aH6WtonmfWIEzo/gyQ/W/kkb3ktJ3Q69JgkO2zqTvMaU93u58Rl3jPq4mvQwkZeYyNhW5Y32/tsqv+73a4258j+UTKXXs9ME1ksFjEzM6Prm5+f179JuRjMZDJavc1NU+QY8d1qt9vnHPPrcG5wBHyRg5MGV8a0x8qcwQBQqVQ8Nk8ilUpBKYXl5WUsLy8DgM5ZS3WaWRdJmNI1J6BCoTB0u/0kC3luWCnKr5xR6jYhY52D6rCpSKWUb6vXZkMcViVva4eUem0EatZva5NJQma/ScRm2NkwbQ96VqGQf25qWztlfX4q8WGkVj+CB+zx2sMsmKgxkvvsJhIJ/V3G7spMVZFIBNlsFsViUZd76tSpbZotpRRSqZQnn3S1WvVoBaj6Zkz/uUi/DucOR8CXAKR6WMYeypUzf6z9fl+TqpyEut0uFhcXsb6+DmBz32AScCKR8NjcJMFUq1VNwsyUxbJtakqJYSQ0v8k9aEK3TfhnI0GZcda2+s2/bLPf9baJ3EbiEjKpgs1ubEJu7SjvNSVPP/sew9YIcxK3SYV+8HvGQepdeZ+ftiBI3cz/Zf/OdnEz6NnwOrZTJsWRCTMA6EgFaZONRCJIJpNIp9Paw7ler+vYfe6Vzd83zTz8Pcuc0qwfgEfCdtg9hNQe1D9UKhXk8/ndbsaeA/cLjcfjWkUMeMMqstksJiYm0Ov1tEMWs2BxxV0sFvGmN70JAHDy5EksLS2hVqtpm6+cJDkp5XI5zMzMIB6Po1QqYW1tzaMe81OJ+mHYyc9sh1QJyjr9bJjDSMucRM3YVHMczF2DTKcrXivv81M3B0muLJcTbygU0mlGZTwznejMyViSsZ80KceRDn5y4RUkSQaNq0wiYnpn2563KZXaiNaMuZZ1DRv7Kt8h830y+2N+D4VCGBsbw+TkpLb9muDOZfV6XS9uUqkU8vk8xsbGUCgUtAnnxRdfxMrKig5jkili6SDJOH9qJaQKvFKp7Fi+Z7939FJFuVxGLpcb+vpzkoA/+clPIhQK4YMf/KA+1mq1cOTIEUxMTCCbzeKuu+7S22IRc3NzuPPOO5FOpzE9PY2PfOQjr0oWFgcv6JAhJ05pZwKgs/EkEgnk83lNGoz/VUqhVCrpMvfv34/x8XEtBZvgj7NSqWhvzVwuh/HxcaTT6UACDLIJm9KqeY1pU5X32a63lW9rl61/fhmZ/CRqU9qV15i2wFFhm/z91KNmm0wCtal+/ULOhm2r34LCdsw2fjYti+mRzP6Yiwi/fo8K870cZCYg+QHwOEQB0ClJmaWKYxmJRPT2gjKZxpkzZ1CpVKCUQjKZ1M82Go0iHo+j2+2i0Wh4diMDoElYKbXN+91h93DWBPzUU0/hb//2b3HTTTd5jn/oQx/Cf/3Xf+GRRx7BE088gfn5ebzjHe/Q5zc2NnDnnXei0+ngW9/6Fv7pn/4JDz30ED72sY+dfS8chgKzXFHFJb2Y5UTESWJsbAy5XE5LUVRd9/t9nDhxAsAmUV922WU6n20QqtWqXt3n83kUCgUtmbENQWo8P7vcuZKxvEaSjB8Jm+X4kYCtXB4LkqZsfTDbbBKRKaVK0qWqmZBbz0mHLdt4DAOl1FBb2PlpLAaZC0zp+2wxiCiDYNMyBEn68hhVyIzRldEClPRNr2du0BCPx7XtttFo4MyZMzrkT0r2bJ+UoKXmRXo+O9XzhYOzIuBarYZ77rkHf/d3f4fx8XF9vFwu4x/+4R/wqU99Cr/0S7+EW265BZ/97GfxrW99C9/+9rcBAF/72tfwox/9CP/8z/+M17/+9bjjjjvwp3/6p/jMZz7j2SbPYefB1S+9H03JiP+XSiUtKdO5gz9khiktLCxgYWEBADAxMYHLLrtM26NkffJvv9/H+vq61nbkcjkPwctrg/owjJTJc0H3jlpPUPnDOGX5TdijqkBtDlAmoVE1zmT+wObil+FjzB8sc1IPCz+VNG3Dfgkq5L1+9Q0i2yCtQhBBD1IVj1IW7w36EEy6EQptxpFT3S8dI+mZLmOc6V/BrQq73S7OnDmDcrkMAB5bLsHEHaZnNMlaKaXjis8Gw4yLw2g4KwI+cuQI7rzzThw+fNhz/NixY+h2u57j1113HQ4ePIijR48CAI4ePYobb7wRMzMz+prbb78dlUoFzz//vLW+druNSqXi+TicHSitcGcV0+EqHA6jXq9rGy0dN0iSyWQSkUgElUoFc3Nz2hlkZmYGuVzOc61NaiiVSh4SHhsbQzqdtpLKoH7Yrg+awE315CA1t4mgRYJN1WmTimRMrSS/oPvkAsU2ribhJpNJpFIpvaUdnaI4EYdCIR0iNmxs7SgIKnPUskbRCvD7sOrnUc0Qw7wr5vl0Ou1RI0vJmceoPSBisRjGxsaQzWYxNjaGVCqFUqmkTTjhcFh7RJO8AegwQBkexe8MR9sJISdI2+QwGkbOhPXwww/j+9//Pp566qlt5xYXFxGPx7eFm8zMzOiJenFx0UO+PM9zNjzwwAP4xCc+MWpTHXzA5O+9Xg/j4+OIRqOePURDoc3k7t1uF+Pj49q2BGyqM6enp3H69Gmsr6/j2LFjWFxcxPXXX4+3vOUteOWVV3D8+HGdxcecHHu9HtbW1lAqlbQaet++fahUKqjValo6H4YY/OyE8pztuGyPPGYL/5EwJ3VT1UuCDXJM4X2DpGu/41IbYbbLhJk0RNohG42GtY3m4okLBD8nJ9sig2pV2/GgfppEZz4f2+LKpqY2n4lZl3xvgsqW/w96ruY9oVAI6XQa+/fvh1IK1WoV6+vrUErpeGlKvJRKI5EIEokEcrkcDh48qBPhLC8v4/Tp0wiFQpiamkKhUIBSCktLS7ouqcKWiUiSySS63a7OeHWu6mc5To58zx0jScAnT57EBz7wAfzLv/yLJ/7z1cZ9992HcrmsPydPnjxvdV+skLGAsVhMB+6HQluZjXq9nsdTmUkewuGwtt0qpbC4uIif/OQniMViuOKKK1AsFrWqmjBXzf1+H+VyWTt05XI5ZLNZnQhkFNjswKPaM2UZw2yKMCy5y++yjbY2+8Gm7vWzOZqqbmC7RCpV5abEaLbJJMNBGEYNHHSfqaUYtuyga0yJeJjrZZuHNXnwPLcKpCDSbDY1+coyqY1SSnk2WZAJblZXV7Wph57Q/f7Wvr60JTO2WGbokjsdyXzSOwFHvjuDkWa6Y8eOYXl5GW94wxt05psnnngCn/70pxGNRjEzM4NOp+PxkgWApaUlzM7OAgBmZ2e3eUXzf15jgqtC+XE4d8iAfxmTSBKipEwopdBsNlGpVBCNRvUirNvt4tSpU3oCmJ2dRT6f1+Epfj96pRTK5bImCD5b6d05DEax7bJ/8l7zGP83CWlUdaa814zVHdQ/m9rTJFlzO8hB4PMOCtmR/TE1EYMWHbY+yD7L/phlmHZlPxPBsG2wjfsg6V3WPWzfJGjvLRQKmJiYQDqdRqPRwMrKih5POa5UH5MsE4mEVllHo1E0m03Mz8+jWq1qhyxg00djdXUVADzvAdvAttHZbicdr3aKwB02MRIB33bbbXj22WfxzDPP6M8b3/hG3HPPPfp7LBbDY489pu954YUXMDc3h0OHDgEADh06hGeffVZnVQKARx99FLlcDtdff/0OdcthWDSbTa26kh7JdKjiREHHnY2NjW3J3oFNEqZmYmZmBgcOHNA2SAmbhLW6uqq3YGPMo7QlD8K5kq9sl01KHaXsUa9nO/zIXRKuqS6VkKpi2vip4eA9koAH2TFNT/BR4DcOpqrZrFOeG4Z4/dTuQfUEqcFt5Ov3TGz3kTwzmYwOLVpZWdESqiRBpg2Vqmfez12OlpaWUC6XoZRCLpdDKLQZw1sqlTz9tJkIZGz6ToV4jrrQdRiMkWzAY2NjuOGGGzzHMpkMJiYm9PF3v/vd+PCHP4xisYhcLoff//3fx6FDh/CWt7wFAPC2t70N119/PX7zN38Tf/7nf47FxUX80R/9EY4cOaITlTucPzSbTWxsbCCdTuttCWkPZpD/+vo6JicntYRarVZ1MgFum7axsYEf/OAHWFpaws/8zM9gdnYWSimcOnUK5XJZ26iobpNoNBpoNBrafyCdTuPyyy/XCQXo2WlKSNKeB2Dbd3ktISUrCRmSZSOfQTZdP7Uljw+SJOV9sl8yWYTNdmneL8uRqmaGwADYtverTc3qF4dsTvRmWwZJj4MI0KwH8I+J9lsg9Pt9z/PktRwTk2j9nt0w/aKkGY/HkU6nEYlE0O12PXZ21ik3laDUGg6HdbKNfD6vfTKee+45rbbOZDIIhUIol8toNpsIhTadIelY1ev1tAo7FArpdLNKKZ3jXfbP4cLBjm9H+Jd/+ZcIh8O466670G63cfvtt+Nv/uZv9PlIJIIvfvGLeO9734tDhw4hk8ngXe96F/7kT/5kp5viMCQ4YXBbNE76VJV2u12sr68jFotpc0Cn09FqL6bXY7pKYHPSHB8f1+kvpZOVqZKU7VhdXdVELyXyer1ulWxsakWbajVImpMhG8z8JWNaJSmasE3Sg+ozydlWtknsZplB9ww6JgldEo5fOFiQNHg2sC2SzPYNC9uihFKlWebZqGH93iVg672Jx+Pa3NLvb+4CRt8J2zOUKmOG9tFmzL24Sb6JRALZbFZrqki+kUhkW+xwKLS1MQYAT/Y6jovDhQWXitIBwOZkwnyz0vkqFApp0qS2IxqNevYDppq60WjoFfjs7CxuvPFGdDodlMtlrK+vY319XduuaJ8izIlqdnZWJ46v1WpYW1vbpkozidiUkuVEKa+TKjsAegIFtsiJkoY5sZuwSeXmOb97g2ySJEM/VayN+P3KYSwpQa2HtB1zUeSnAg5SB5sLFT+p2ESQennYaclclLENMrSN56ial8dMUvZ73uaCkeTLfZbpuNhsNj2/HbNcOe70ozhw4AAmJiaQy+XQbrcxPz+PEydOIBQKIZ/PIxaL6bCxWCymNVNra2t6ocxMdHzOGxsb+je6B6f4PYtRU1HuuATssHcgJxtm4+GkwH2EOVH0ej3U63XE43GMjY15vOCZh5Y2416vh5WVFb36TqfTup5KpaI3g5e5imWbwuEwSqUSCoUCwuHNPYiZt9rmcMT76TgGbCc/P2IkQfE8VYi2a4PG0JROh71flhFE4H73DIKfVGwr30a6w9RpHjfr9FPxmu2R1w5SZduulcc3NjaQyWQ890utho30/cwVtjqpdpbk22630W63tcrclHxJwAC05EyNEvM8VyoVz65jUpXOhaJSSntAU+I1287FsSPfCxtuN6RLGOaPk6poANuyWnESqdfr2kbMnZAoHch8s/TgpHMV89rScYuTpMz+I//2ej3tbAJs+hrQqcuU0s7GU5cTFr2/KdHIzF/nClOq95v0g641JWy/8v3qN68Nkpb9vst7/ch0UFuCyrf9H9QXvzaaZMvFHJ+rLUubH4nLcvmhSYbkSVsry5O7GBFyZyhpP6c5J5lMYnx8HKFQCK1WC4uLi6jX61rSBTbjtlkn+yalbNbB/nEhINOMOlyYcBKwgwetVgvNZhOJRAJjY2PamcT8cQPQjlvcgYVOJQz4f+mll7C+vq7DkiYmJtBqtbC2toZarabtyHSaYR2cHDc2NrTKenJyEplMBs1mUzttSWlXOteYUqlNqgyHw0ilUlrC4JZustxhpDC/6yQhmMQq22vCTzxI69wAADYYSURBVOVs1iXrM9WoNtW+X55u2XbzGpu3tI3AB5HpILIzFxx+fbaNs81+zbE1CTebzaJWq/m+G2Z/zG0Veb3c95iOUDLPNwBPLD3TTNI2Tam3WCxiZmYGoVAIc3NzmJub0xI0JWIuiNPpNLrdLmq1Gur1OpRSepFMcg6FNjOc0WnR4cKHI2CHbeCKm7GJcvs0qqMbjYZOyMGdW2q1mvbGZN7btbU1AFtOWZlMRq/OJdHK9HnAljMUsBVCE4vFPLY9xij7qQr9CI7pNeUEHYvFtFovSG07LILaQ2nKj6iC6hqU5tEkaBIGJXt5rXmdrTwbUfnZ2v1gU88HqbPlfX7nzPOsw9YXm0f0MO3mO+i3YKDUS98EPhu5P7aZ4zkSiSCdTmN8fFynb/3pT3+K+fl5tFothEIhHQ3C8pLJpDYBkVylRE4NjlLK7fO7x+AI2GEbTK/oaDTqUWcxSQBJk0kC4vE4Op2OJ1F8u93G2tqaJmmu5AlKnPTwZL5iTlxc2ZfLZRSLRc+GELQLA9ulI9vkSumGTitS4qMTmVmeWWYQcQURWdB5s41m/YMk8UGSJfNB2yZmmzTJhQl36/FTO8t6TLu6rb2DyDeob7K8YcwDtnaa582yzHZJ6dqmlZDky+Pcc9dMkMHzqVRKk2+xWESv18OpU6f0YjISiSCbzXr2+AWgnbtYH00xzP9Nsnfbuu4tOBuwwzbQIYtxjDIcCICWpur1Omq1mp5kMpmMtqnSXgVsTlQrKys649nY2JiOe+RuSIA3ZZ5MVM8Jb319XUvLqVQKY2NjQ2/iICdQ0wZNid02KQ+rDrZdbztnpom0TfhB9shhYNZPAh4mA9egckfRBEjbqWke4Hlb+WY9fmYEU3Utj9EPAdhKoSoXFH7qbFv/uBAl4UWjUR1/KyE3Nun1etoJUY5DsVjUXs8AsLy8rH0qGBNM1bWMFGi1Wp5sV/yQoOVe3w57B46AHaxgxqtms6lz20pwkqvVaqhWq3qPUkqsnCCAzQmp1WpheXlZSwbxeFzv9kKpgSo0ki5VcbQ5K6Wwvr6ObreLaDSKiYkJjI+Pb1MxEuaEzg8daBKJhFYXSunXvF/2OQh+6lMSryRgGZfqRzh+ZDQM5GKDz+FsCJj1m2rnYeoOKs9Pkrb9bxKmSbZ+EjVJkpoYbscox9bWbnlOqnkl4TG9o21MaH4h4bOcZDKJ6elp/V4vLCzgxIkTWqUsd00CoE0HGxsb+jcgnycdIGmHlpolh70Bp4J28EW320W1WtVb3MXjcb3hdyKR0JLF+vo62u02ZmZm9OTS6XR0AgFOHuvr65ibm9OxxMBW/txEIqFVbFIKTiaTWr1GSWplZQWhUAj79+/H+Pg4CoWCTtFHVTZhTvZ0oFFqK1mDzAxFgpLHTCIYZKs1zw9SJ8vzUn1rOqXxvJ+NzyYNcpKW+z9TRepHXH6Zk2xSpt8YBGXMst1rGyNTdS/7Ls0JLI/neIwOTYyNbbfbSKVSet9cmy1Yfud7n0gk9HvV6XS0rVYSMwCd+tN04otGo8jn85iZmcHU1BS63S6ee+45nDp1Co1GA6lUSmuCaONl9ituxcr2sG+Uylutlv5NOul378FJwA6BoGewDCfiRE5pVymlr6HjlrxGrurX19c9YUzA1p6pxWJRq7B7vd627dNM1S1twKFQSG9tGOTcw4mL6kgSvtxwwkYEfhhWGjVVqPKY33G5q42UXIetE8A2+yBhKytozEwMq4oO0gjYpE/5bP3qNWHbWEIuuszQoGQyiXQ67Qlns4G+BpSYAWjyZX2MAZYmFOkgRU1QLpfD9PQ0pqenAWyqnefn57XWhaYUmn6ALbtzvV5Hq9XS/hYkfW4RSsnXke/ehCPgSxx+k6yEzGtLEiakx2e9XveQMCcFZgsCNlNKrq6uepIQcFJJJpMoFAqasKkGV0rp+yUhr6+va+kgFAqhUChskxrlZCgzBlG91263tURjSlx+YzMKCZpSaZBN2XRekm1g+21EZhIWr2XKQqnClPWYbfCT7AdJ+kH9Nq8ftBEEIYnVb1Hld62sT9pigU2SZCgQ7brmM6IjFFXC4XAYrVbLM4YMAVJKeZLWAN7xleQbj8exvLyMV155RZOvdJDjsXg8jn6/r72eeYwLMb7DrVbLU6/D3oMjYIeBoLTIyYBkyB8+JVnuUQrAk/qQ91AVWi6Xsbi4qLMVAZsTUSqVQjab9ewlLHdfYoJ52taU2tzOkCQMQNuEbYQk1YXM2CWlX/bJjCm2qVz9JFdZnxnCMsxEKe3EJqQ9MYgkKZ0x6YkcM0plZpmD2jhIgh0GQfZf2zV+ZG2WM6gtcs9dAHrnIfM95nMbHx9HsVjcJt0S0lShlNKqZ3mc79DExASKxaI2zZw8eVLvcESipwYJgI6r73Q6Ot5XakNIxJTuXbKNvQ2XC9phaFCqospMEh9X5OFwGIVCAfl8HhsbGzr1JAAdy0hks1ns27cPExMTKJfLmow7nQ5efvllbYeVRC9ttGbC/Ww2i2KxCGAzvKlWq+mJjflZmbeabZF2Q9kXwD+USX437cR+15vX+d0niVfuDkbSpBTmR04k32Kx6MmlvbGxoVN7AtALILaFNmI5DuFweNs2ejZp1E+KDtIUDFIzmwsoOW62Osy/Ekxskclk0Ol0kEgktJaF73AkEtH2XmBz4VcqlXTiDi4s5U5Dcj9tOV7AZkTAzMwMrrnmGgCbYUQnT57EK6+8op9RNpvVWhiSMe3MS0tLUEppSZ1qZ4bo0fHR4cKCywXt8KqBq/1Go6F3KyKJyV2USqWSVgnncjlNwpzgOaHX63W88sorejcYgh7SdC5h3a1WS5NwNBpFp9Px7GRUr9eRzWYRi8WQSqWQSqXQbDa1pENJWimFarU6kARMych2PGisJExp2kagklxkZiczX7Zstyn5hkIhrUUw+9zr9fQ4M3uZvG8Y1bPfMb/2+cGm+uVxG2wLmFERCoU8pJnJZDA1NeXRbvT7fVQqFb0bkaxbalBkzC3bJcudnp7GzMwMgM0F5eLiIs6cOQNgKwsb39tIJIKxsTFdF5+LDH8i+VIbda4ez4PU+g7nB04F7TA0KClxUk8mk3qi7/f7nrhFShbcvEGmfJSTaKfTwfLyssc2JxPUSwcuYCsekio81k2srq5qJy9gexYkm9pxkMOP3DRCxrTarjfVojZVNm3QMsGDjUilSlOGwNgg1ZRmbDWddKS0JjfTYJ0cS0lGo8I2LoPUzcOWZxunIMhnINXJ/X4f1WrVo40BNrUq1WoV5XJZH+N4yLzPcpN7810gqc/MzCCfz2vyXV5e1jtsMYWrXDCxvbVaTSe5kaYCGW60E5LvIM2Nw/mBk4AdRoJ0bKGUKZ18ZBarVqulPUmZ85lqT7lTy+rqKjY2NjA9Pa2dsOhtHYlEUKlUPJKczNLFlTwTagDQ27DJDdIpCZvEY5NmpRQqJ13WZYYC+UmOnOTMyW5YuyuJ2kyJSAmaMKXlVCqFVqulP1zcMLsSneTMumw27mEI0rzGHJ+zneSD7rOdszlh0ZuZfgV8d/nOsp3dbtcT2yvNCyyb52zku7GxgVQqhcnJSczMzGB8fBzApqp/YWFBLwozmYy2+8px4wYLtVpNL2YJM7PcTtp9nRS8u3AE7DAyqCYLhze38uN2g7QjkmzL5bK2XUn7Lj1IqQ7sdrt6v1+lFCYnJ7WdmROc3NeUkjOlb1NFDEDbnznZ8jra3ejBak628iMzZgFb2x0yJIttkePiR7SDpEB5D7+TdKVTGVX6hBwjqv1Zbq1W08kolFKaZGSmMlOtLtsU1G7TRjsIg+zdfoQa1Aa/OvjhjkKFQgGxWEz3n+pbhvFwcSIXiDafADNXuNQahEIhTE9PY3Z2VvshdLtdzM/Pexz9pN2X722329XhRjKMCdiKRWZmup1MtuHId/fhnLAczgokKKaEBKBX71RfMqNVPp9HsVhEOBxGtVrV+Z9J2jILFR1mXv/61+tjzWYTc3NzqNVqegKSzlMyHpMTqZTCeAzYjLkcHx/X3tjM52vbmJ19oXrXtt2cjYDZLlkWy+HEzf7b1KrSwzYU2syQRImVZTQaDb0oiUQiyOfzWupaXV1FuVz2pCZkuZlMBhMTE4jFYjh58qSnTzaVsE01Lhc7frZjm4rT/N/Mk2zaooe1Qcv7SbrczYv1dTodVCoVXSezofFdpU2X2gb5bPgu+5ktmGTj6quvBrC5WJyfn8f8/DzK5TJCoZB2XgyFQnrfbY4lU6zS1gtA504HNt/1lZUV5/G8B+CcsBzOC6iKowSRTqf1jkiSbIAte3CxWNRSK0mYHp5yR5larYZTp05h//792oZMqaJaraLX62mC5eQJwJPEQy4EaCsmcWUyGUSjUWSzWR3yYSY04P2cbIOyT/mpsW0Sn8zcJO8xbcjy3mq16rGvA5sLiWw2i36/rzOJsZ1cWJhtYqIHqY6n2lX2R/ZBHpeLAzOlpa2/fvZgU0Ngu28UuUCSL/fYpcQLQKubw+Ew0um0Hgv+pcmEmhF5jlKxn800n8/jwIEDmJmZQSQSQbVaxdLSEubn51GtVjX5ZrNZhMNhvSiV75VcFLB8GcbXbDYd+V6kcATscE7gLkKUXLnnKgC9i5JSSsc+jo+Paw9QZqKidCdJeGFhAa1WC1dccQWKxSKuvvpqZLNZnDx5EpVKRZMZpVuqmkmuVFPbpLpqtaqldkodnGBNSYfSnpwAbWRjwk9CtMX4miQsiZoolUo60Qj7JL1yOXalUsmjrjfbQ3t4LpdDMpnUJGFLHQnAo76XbWKIkyntBhGnjdBlXUFjYusP28QQHr5HtPvzHtq8Y7GYdqCSz1SGX/F94iKOHz/yPXjwIA4ePAhgU/Nw+vRprK2t6Rheki/fSbaHY8WFkiRfLiaoHWL8vcPFB0fADmcNToIkYXotMwc0z3HCq1QqWupMpVJ6VxlJVry22WzqZAQHDx7ENddcg8suuwzpdBpzc3NYX1/X3qC8h+krORHLnWKALfVtr9dDqVTScc1UY3NjcybTN/MO+5FuEFmY90kHL/OYhJTceU2tVsP4+LgmTNpzpQ2ROY5tz4rlUuJPpVJIp9N6AWXrFyVvSoZ0EKKWg1KmHAO/+uX4BHmTm8RsK49e4fSal+2nVB8KebO2MQc0AL1tpgyN44KC95taEIlcLoeDBw/iwIED+tjLL7+sNwsh6OFM+7F0HOTGI7a9qQFou6/bYvDihSNgh3MGJxOqdzkh1ut1rRYm0a6vryOXy2kpmPsDSxUnJ0A6Uh0/fhzFYhGXXXaZ9mKORqNYXFzc5iBDRxY6LklHKik10/GGoSj0kuU9lNCDJFb2XR7nhC1Jexhbpvm/VPdSUpPb21F6Wl9f1/dI6U620yybCyaGetGz1o/oqAUgWZGw2B4Z3uM3VrZx8FvQ+C12eIw2b1Pi5Rixzcz5TGmWUmkoFNIqe9bHBY102mOdpvSvlEI+n8f+/fv1piTHjx/H2tqaZ0Ei1cimBkXmlZbhZfSrcOR7acA5YTlYMYodTk6yVLlxcpT2K0pxvDaXy+l8u7QnM261Xq977uP111xzjU5wsLi4qLMVUWKWRMKQHDMBCInKL66WiRGi0SgqlYq2O8u++o2NeTyIvG3Xy/M2NS+3tOPYVqtVPU5UuwY5KlGajUajKBQKWs0p97eVpCPjsM3sUeZ4mOpo6UzG58JjfoScSCQ89m4eo3OVOa5U4cpnKQkV2FogUMrkYozqeG7OwTIZoy3bxRSnJOKbb74Z6XQalUoFTz75pA4z4qLSTIRCMwdDiVgX+2Tap8+cOTOU3TdoEeNw/uGcsBx2BLYfcJA0x3OUdDc2NvRERFIFNtMr0s7KMKGpqSmdCjAajWrPZDrHkIQqlQpefPFFtFotXH755ZienkY2m8X6+rremIH1sw2MGeYELaU4OUFLsmCsLEk/FouhUql4PIb9iNicEOXmEKM6FklSI0gW3FbRdDrze04m+VJyo5Rvu9aMRTVTf8r+S8ciE9JjXV5jtjGZTCKfz3u82kOh0Dbvc2aCkqkjWYcM+ZE2coLvFU0j5r6+bCf7xL2wL7/8cr044N9KpYKlpSVNsswxbYaryYWDjXxNaVmmSA2CI9+9D0fADiNhGAmQTkDmhCWT4tPG2mq1UKvVdHJ8EgSTRzBWmPfWajXMzc2h0+ng2muv1SE6vPfMmTOeCZWevzK5AeuQ5UspORKJYH19XUs9sVgM6XQaS0tL1lAk2XdznGy2UflXqq3lvZIEgO1ex/KY9KT1g9zKjjZck3ylt7j8C8Djvc46TdK1kat04uIzYj1ycw960ZuZzwguyggu1ghqUAjp1CTHiOVIqdd0uuPYMiPb5OQkCoWCZ6x6vR6Wlpbwyiuv6D5wD18u4uS49fubux1J8pUez1Tz05YfBLk44/8OexOOgB0GYtQfOEm4Wq1qYqVESTss7XYbGxtaxUuJmdKwzK4lvVLr9TpOnz6NYrGIfD6PaDSKyclJRCIR7TVKKZYTIeuijU1KhHTMMiXH9fV17ViWTCaxf/9+1Go11Ot1NBoNTTjsE7Bd5WwbRxvpmteZhEzI/ZWlo5CtDDlBS+lVquJt7ZPP0VwAmN7SJuTiwiw/k8noxQ8AbaPl8+B9lHC5OJLaCwmZ15kOdWb/ZDgaCZjEK/siP7FYTIe+TU9Pe9Tb3HKzXC6jVCppSdxcOEgHL6a4pK+D3MJTPhv57poY9jfopN+9BWcDdhgafiroQQ423OuXZEwJgZKIjEWl5yozOtFWx/SSMmEC7WbT09NaRVitVrG+vq4TUVDKs6mASWaUCGXMp62f4+Pj2quW0nK9Xtc2aKq9zbha2+Rpk16CJllKZKyfKk46kpkSkZm6UtpnZRIIec5MOCEzcDEz2cbGBtbW1jx9sLWfBMTFVDqd1osVgurjdruNWq3myeGtlPJkApN9Y/tlPuVweGvPXnMXLfaNHs4SUjOQTqcxNTWFK6+8EoVCAaVSCRsbG1hYWMDzzz+vr6damVsHAvAQPd8NOh3yGJN/UHvA/7mgk23z+52Z2IPT90UNZwN2eNUwyo9dSk/S1lgoFPSkyhAaYMu2CWxKGZQqGCJkerxSkqnX61hcXES/38dll13mie9lsg9z03KSLNXgbAslFt5DcJKnnTmTyWhpLpfLIZfLodlsotFooFwu6z5R3SsdgmzwI95UKqXbRkKTebaldMrJX6pRzfZTsiK5JZNJj2aBpCB3rpJjxrIzmYz1XTBtzGy3zNEtN7bn4ovfbeBzYtmElEq5r7PpyW3a0c1zfLdSqRTy+bxOJUlTxunTp7GysrJt04ZYLObZ2pHjKbO0tdtt7ZFPZ0B63gNbmbiALZv2qGTqyHfvwxGww8jwk3iDJgRuo8YJj7ZASkUmSZRKJc/G6bSTSRssbWqNRgOLi4vo9Xr42Z/9WWSzWaTTaZRKJQCbiTekvZMTISUiTs5sD6UVMxaYbS2XyzqmeWJiAgD0goFOZxwTStelUslD6qY9mN/5fyKR0Hv68pxMOGKW46f6lkRKT1wSNtvHdvEYr5PJI2TbGDvNj1S3Uqq2tadSqXhCaySB2ZJdSNW+aW8mMZPEqd6VMNsu9zzmZ2xsDFNTU1qDEolEcPLkSZw+fVqHeEnTBdXmJqg9YSgTtTpyAxA5viTfRqOxbYFo87OQfXPEe/HAEbDDWcEmtQ0iYTpRdbtdvUsSbXdULUt7L3fzoYRClSMnTzpX0ft6cXERhUIBMzMzCIfDmJiYQCKR0F7S1WpVXy9JmCpLLgo4wXKSlKpZSoKRSERvdkDbNaU9mZ1KKYV0Oo1sNotyuezJ4cwJmf2hOpwhN8x6JSE3hrfF7srnwjJlWA2JkeQqd6fiPVJ9zfHiwsdGPn4gITWbzW27+EgbsfkumU5dkqhDoZBWv0u1rx+kHZh9o2NdPB7HNddcg3w+rzO4lUol/PjHP/Z4mzMdKlXVZrwzx4ehc3wm0i7N6xgjz/db5kE3x8L8PTnivfjgbMAOZwVzlW5boQfZNCkZpFIpJBIJPalxcpV24Ugkone04WTcbrdx5syZbbG/6XQak5OTmJ2dxfj4uL6+VCrhzJkzWF1d9XiZmpMpyZBe0rJPVDFK8pTnk8mk9pwGtkJeOHkDW8Qn9zW2SZnMPNVutz0ewLR/snzpWCRVxFTb0zlIpuyUdbHvLItSsVxIMFaWhGBLTykTVcgx5Viwr4zBlglDJGQ5HAeWKd8rfoKkROnMxH5lMhmMjY3pXNqMKW+32/jpT3+K+fl5NJtNvRCjt7XZP4LmALnAYF0yzEhKvwC0f8KwuxvtwWn6ksSoNmBHwA47BpvqzHae13DiZnpKhmZQoiApyPtlbl3agOkEJSd1Sn8HDx7E7Oysvq9Wq2FpaUkn2JBkLLebY33SrikT9ZPI5PWUmEwbrFQDs58kI1N6I8EppbTt0U/9SEmcGxDwIyd+tpUSHcN1pGMQpUnG0FKtLENrCG7hZ7ZBto02frkQ4fOUdmg6j8mybIRqhmQRg2JluRfw+Pg4xsfHtRYCgF6clEolzM/Pe0wbfmpmtpvmFDPxiRlmRciFI+3gcnEQtGDdg9PzJQ3nhOWw6/BTRZN0Te/UWq2GTqejCYRqv0gkgk6n4/FqpQ2Ral8pXUqJgiq+EydOYG1tDVNTUzpvb7FYRDabRalUQrlc1vZhhi3R0YmTLVWptBEylASAbh8AHV5iqloZEkVPXRkPaiankGpV2kU5bjYbZyi0mSyE42WStbRj20KJWA9VoaybHudU1Q4TBiPV6SZYpmxHLBbz2MtlOabq1azfzNpFcDwjkQgmJycxPT2N/fv3A9gkPyZ64e5IbJPMwGWWybbwWcuFBOviIs3sOxdkdMSTz96ETavicHHDEbDDjkFOIIPswbwG2CJLejcnk0m9q5GcMOVEqJTSSQ4opYXDYb1TEtHpdPT+uKurq9i/f7+O7aQ6kmFLTMIhs3FJNW2r1dI2Wko5lBZtYyDHQTpzSVUl65SSr7RbSvLlh8TM0BkpgTKu2nTOonc4FzccQyY5YXvkc+v3+1hfX/doAFg/FyoAPLZvEhCdkcw+s19+hG6Sn2kDlhKnfIdInFwwZDIZXHvttXqhxqQfVNlTKxAKbYa9yS0uTUKnpkUurKTq3fyYCyqZZtVUpZu/EUe6lxYcATvsKAaRcJBkQ3tar9fTYTIAtI2YqlIAOjaYBMRdZ+jwY9bZ7Xaxtramtz+kCYPqIpYtw5ZkpiySIqVjOeFKkBhZryQfW6iNJBdpE7aNG9XGVIvLLfakbdXWLkpsUrXPYzIWGtjy6LWpyIMg22iDzdmKTk3mu2LagmX5PC/roQd6NptFLpdDoVDQG300Gg2cOnUK/X4fY2NjyOVyHk0JIRcHrFuqm2W7aIuXH9u4U5PA98bsz6uBYRa/DhcGHAE77DhMZxl5bJh7u90uarUaer2e9pSW6SxJHJRqJAnXajXfuFtmMDpx4gQKhQImJye1ZEdnm2QyiXq9rpPhMyZW2qM5UZOIZT+lTZSQjkRSwpIqYTMtImEbP0qxVHfLkCpeT4I2HaMorXN86L1N0jdjf+WeubIc6aQl1b4sX8a8Sru8zc4rj/sRvjk2cozD4TAmJycxOTmJqakpAJtSebfbxdLSEhYXF3VI0Wtf+1pPDm3uOiT7zecpE7nIhZVst3z+5mKS5G8LG3NwAJwTlsN5QNCKfJBtkRNfoVDQiTlIsFLSTSQSOv6X2/RVq1XPNaaElUgk8JrXvAbA5oRJCYrZpujMVCqVsLq6ipWVFR3jadoCzf6YakzTm1c6btlUkubihZIZCU4SHlW/MoSJ40ZPc+49S49dSWg2yVuqWCUxSiIiGcsFiVxI+C0m2CcZSmSq6YGtrFNS6ifxU5IdHx/XcwEXWAsLC1hZWfFsDSjJM5lM6vHMZDJ6bLgQkmFiwJYTlRwb00mLZhSZ4W0PTq0O5wjnhOVwweFsyZf3MtMRyYTSnZRKOWmm02kkEglMTEzoTRXkBG/GjnIiJXnMz89jY2MDV111lSbgQqGgpUnG8cptE20erbJ/JhlJJzTpZGWqL03vWBu5y/JleA+zZjWbTZ2QBNgiTaliZj02r3O5cDCPcRxl/0wil9/N2Flzi0fAS7p0bkqn0zp5BcOr9u3bB2ArneWZM2ewtLSE1dVVbX+OxWLIZrOeDRGkGQPwLjSYTpRtkhIu22ZqNyThBu2r7OBggyNgh12DzRnH7xjjZvv9vg4TSSaTmgiV8m4AEYlEUCwW9X3AllqQiUBof2Q4DlXPTCuZyWQwPT2NXC6HcDiMAwcOoFwuo1qtaqmJnrRy60Rgu7RHdbVNKjTzNvOv9FI2bY20QUpy43eq5uXCwyxXnpcELtvFMTPVxOb2hza1sUnONgnXpiWggxuJNp1OY9++fchkMtonQDqA1et1rK2t4cSJE1orQi0AHc8kmCZzbGxML6gajYYn5Eva8DleHG+q1tkGU+J15OswChwBO1wQsEmIgFeKZHIOqospEcusWGtra+h2u8jn8wiFQsjn8zpGmBKUtHdWq1XtyHTmzBntRb2wsIBwOIwzZ85gamoK09PTKBQK2rmHRFSpVHQyfXpyc3I2pcBBWwbawElfqj9tmaHk2Mn4VJta2Y+AWZ+5eJBSOoBtBGw+M2C7qp31S8hc0UzMMj4+rk0BjPc2s0UBwOrqKtbW1lAqlXRcMs0KlIoJaYaQHuvApjlL7iFs2oK52KE3NJ30+E6ZUr2DwyhwNmCHXcPZeGtKByZO1gSdXhj+kkwmUSwW9XnTXkkVMq+lA5ckTglmUMrlcshkMkin08jlcrofSimdk5pZp5rNJiqViseT2kZ8hI2wBqm1gxzdbA5Cfv0bpDInIdmcxXiealqbIxrHjfHexWJxGyFyU4NqtYpKpYJyuay916VTGNtKJzLTAYplsS/UfNgI1uw/Y3flc2X8uZ9913keOwDOBuyww3i1JpazLZeSWL/fR7PZRCgU0k419GYOhUI6vrVUKulJWoIkQRV2JBLB2NiYVt9y8qZEC2yqdmlTZQhQsVjUmZYAaNszsEkEzLxlZqOSYTAcB5sacyfG3iZ9+9mdh4GZmlGm76Q0K7cjpPPU1NSUZ3IyPdVrtRpOnTqFZrOpPZDb7fa2BCPA1laSJtFzDOX10nNeqpXlNWZfeC3tyXIzDxsc+TqcDZwE7BCIC3VlT2mLami5Sb3clUbaZGlfzGQyiMfjno3RSbzS1gxs2TK5paIpPTL3MsOaJicnt6VmTKVSugxuWdjpdLStkSTPFJEsl8QpvYtZruncZF4jyYXnJUwClp7apr3ZHHfGDZOImeyCixKONVNk8tmYquTV1VWtum82m6hWqzpVpCRBkrh0ipJJP/iMSL5ycWC+Ayb5Sics/k8vey7OpMR7If4WHC4cOAnYYUexExOOTf25E2DiDtYhpVx6SpNYpYcvScK0FQKbMcWUriWYM9nct3VjY0PnlV5cXMTU1BQSiYROk1koFLbVkc/nEY/H9VaLADyLAIKbIEjClVK0mSBEhhhJ4qQ6nONEyGvobSwlVrZRlqGU8ki5sVjM4+xEhzQbms0m1tbWsLq6inq9riVduROT2SY6yMn/Tdjs4AC2eVnb7uUiiFoVZr0yiffVRJAJweHihiNgh1cdr+bEIkmYhCZVhcyiBWx563JLROmcQwcewlR5hkIhZLNZHWpC4pN7/ALAysoKAHh20xkfH9eevUz4QVIJAiU9Eo/cKhHYWlSQOChJNhoNj4TOawkuTmR/uXEBSZUk67d3L73A/dBsNlEul/WWkkwnSkL3AxOu2GzIVEVLCdYke5tq2fxfxhWzT1xc8b0YJQPYKHBk6yDhVNAOewLDSNHRaBQTExOefXxlDmneS+K1eQPzuLRhStsmJ22Sn6mmlHWRGElu6XRaE71SCqdPn9ZqWUrktGkzP7HsPzNgkcDZHobWMAaa6nJC7jIFQDuuyU0uNjY20Gg0NAlRBcv2SUlUqvg7nY4nFtpmr6Xamjm72c9SqeRxrJL5pk21sHx+UhNgpog0vbx5Tm7jKCVktv18qZkvVJOOw87AqaAdLgr4TVRBk1ev19NxwMyaxY0HZLnxeHybvdQsl+fpzCW31wOgSTmZTGqpibG+0h5JomB7GDZ14sQJz7Z+APTGDPJ/ADqjl59URkmZJD85OaljZimxSsm51WppeyvV2ZIITUiJUW56EAqFtqnkbW2jVEuylFs5cizlln0mpKQvP2bsNL/bbNi0qcv4XblhBLFb5PhqmWkcLmw4AnbYExh2UiJRyb1xZfIEkhzjOilRmdKR6cTUbDbR6XS06pZqWgAecqZEzPJpW+z1ep44WtuGDqFQCGNjY1piTSQS29Ii+o0NpTk6M5lSo9kfc2/es/GGZt/ZX7lAkfZ2qo8laRLUCHDBwEUJ+2Ru/WdCSr7meErw+TM3s5l7+0KQTHe7fofzD0fADhckznYyotqZJEMnKGlXJBHTeYffZeynzamHKtdqtapVwLQ7SwmTduhoNKpV0Gwb7bOUoOmNzfMylIpklEqlNIEMGhfpQGbmc7YtLiS48YUt/aJ0VmIGMXNbRdk283pJislkEs1mUzurme3hIsYGW6yuJGB+l6FdVFVz8wW/zF3nA371OPK9NOEI2OGihIzfTSQSnphRuXuPLXxHJmAA4JGYCZkVSca7ynokyTK8iWXkcjnPpgaE9IqWqQ6TySTa7fY2u7VtC71hJnOpGqZzWDwe3xayNExZqVTKo96VIU6mTZiaCUq81EIwvae0e8uQIwlK7GYsMp8b+8Cxk2lCHdE5XEhwTlgOFzVsySLoyCQlO1v8LODNGiWdlsydgOT9UqUcjUZ11iyzHumJLYmbi4PV1VV9jsRsS38oJWPpLWySFCV+kpKss9/vo1QqefIxc3yoTWD9lOIZUy3Vz6b3tYyplfsP02FMLkyoprdJ6EFSLsfAtGdLFfugd2QPToMOFyCcE5aDgwGqlOUuQCQXU8VqwnTq8Ut2YUsbCWxlw+IGELynXC57CInJRGg3BrYSeEhIj17pGMU+SnuvLY6VBJtOpzWZUzUrIUO3TNVyoVDYZs827bR+48TvMrMU2xyNRq1E6GfXlQshxhObOzwNA0e+DrsFR8AOFzXMECSlFDqdzjbHHXop87iZeQnYUinLzFMm8cq/Zraqer2uj3FjCdp6uc2iH+it67dQ8IPcopALDUlmlE6VUlozIFXZckFgk06HlR7pfU6YKn0/qTfIoUqaD9gHR6YOewmOgB0uOciJmiTQ6/W2ETD/ylhbYEu1TDKWZGuqpAH4Eqt0KGo0Gp44W+YfBrbniyZknLLN/islfmknlosG6ajFRQglZz9nJfPDvkgSlW2y9dlG3HKxY+uH/Ehp17zewWGvwBGwgwOwjaRkTmbpsCUzUwH27fskGfManiPxyG0Rea5arQLwkuwwkI5Lsi9+kOekKlvCT/pk+RKDQpj8JOhBTmNcPNBz2fw40nXY63AE7OCA7Vvw2SCzQknJWNpi+b90QjIJT9YnpWbpSCX/2tpqlmc7bxKebIvcY1ieM8sOUov7OayZ381rpKey6dBGdbmpWXBwuBjhCNjBYUSQPKRXLknX3IbPJlkC29Mr8pzNZs065f0mkUvYyjaP2+ozr/eLFzZhSsQ2wrSRLkOWpNreka3DpQRHwA4OQ8JGViQfErIkZknEptfyILsw4JWATYKSpG2znQbZV3netCdLQvaTQM3wHz9bsW3spD1aem3b2uvgcCnAEbCDwznAT2IFtshRbmDPY5SUTU/rnQKJcpRySYpm3mWeM68dVkVsI2rZNke+DpcqHAE7OOwgTHWyjJGVsJGPHxlLtbNNjWzCVgalXZs0S3I0k3z4tXMYDBOe5IjX4VKHI2AHh1cBZ0M+plrYhmEkWpk4RJZtU/cOcpw6F5J0GaYcHILhCNjB4QKBSVZBHs5+/5v3SYl8lLp3Ao58HRyC4QjYweECxdkS2CBJNih8yMHB4fzBEbCDwyWIV5t0Hak7OAzG2e3C7eDgsGfhyNHB4cKAI2AHh/OAnQ4zcnBw2PtwBOzg4ODg4LALcATs4HAe4NS+Dg4OJhwBOzg4ODg47AIcATs4ODg4OOwCHAE7ODg4ODjsAhwBOzhcYnAe2Q4OFwZGIuCPf/zjnjyzoVAI1113nT7farVw5MgRTExMIJvN4q677sLS0pKnjLm5Odx5551Ip9OYnp7GRz7yEWuyegcHh1cHziHMweHCwMiZsF73utfhv//7v7cKiG4V8aEPfQhf+tKX8MgjjyCfz+P9738/3vGOd+DJJ58EsLkjy5133onZ2Vl861vfwsLCAn7rt34LsVgMf/Znf7YD3XFwcHBwcNgjUCPg/vvvVzfffLP1XKlUUrFYTD3yyCP62I9//GMFQB09elQppdSXv/xlFQ6H1eLior7mwQcfVLlcTrXb7aHbUS6XFQD3cR/3cR/3cZ8L5lMul0ehVDWyDfjFF1/E/v37cfXVV+Oee+7B3NwcAODYsWPodrs4fPiwvva6667DwYMHcfToUQDA0aNHceONN2JmZkZfc/vtt6NSqeD555/3rbPdbqNSqXg+Dg4ODg4OexkjEfCtt96Khx56CF/96lfx4IMP4vjx43jrW9+KarWKxcVFxONxFAoFzz0zMzNYXFwEACwuLnrIl+d5zg8PPPAA8vm8/lx++eWjNNvBwcHBweGCw0g24DvuuEN/v+mmm3DrrbfiiiuuwOc+9zmkUqkdbxxx33334cMf/rD+v1KpOBJ2cHBwcNjTOKcwpEKhgGuvvRYvvfQSZmdn0el0UCqVPNcsLS1hdnYWADA7O7vNK5r/8xobEokEcrmc5+Pg4ODg4LCXcU4EXKvV8PLLL2Pfvn245ZZbEIvF8Nhjj+nzL7zwAubm5nDo0CEAwKFDh/Dss89ieXlZX/Poo48il8vh+uuvP5emODg4ODg47C2M4rF17733qm984xvq+PHj6sknn1SHDx9Wk5OTanl5WSml1Hve8x518OBB9fjjj6vvfe976tChQ+rQoUP6/l6vp2644Qb1tre9TT3zzDPqq1/9qpqamlL33XffSJ5jzgvafdzHfdzHfS60z6he0CMR8N1336327dun4vG4OnDggLr77rvVSy+9pM83m031vve9T42Pj6t0Oq3e/va3q4WFBU8ZJ06cUHfccYdKpVJqcnJS3Xvvvarb7Y7UaEfA7uM+7uM+7nOhfUYl4JBSey8tTqVSQT6f3+1mODg4ODg4aJTL5ZF8lFwuaAcHBwcHh13AniTgPSi0Ozg4ODhc5BiVm/YkAVer1d1ugoODg4ODgwejctOetAH3+3288MILuP7663Hy5EkXF3wOYFITN47nBjeOOwM3jjsHN5Y7g2HGUSmFarWK/fv3IxweXq4deTekCwHhcBgHDhwAAJeYY4fgxnFn4MZxZ+DGcefgxnJnMGgcz8YxeE+qoB0cHBwcHPY6HAE7ODg4ODjsAvYsAScSCdx///1IJBK73ZQ9DTeOOwM3jjsDN447BzeWO4NXcxz3pBOWg4ODg4PDXseelYAdHBwcHBz2MhwBOzg4ODg47AIcATs4ODg4OOwCHAE7ODg4ODjsAhwBOzg4ODg47AL2JAF/5jOfwZVXXolkMolbb70V3/3ud3e7SRcU/ud//ge/+qu/iv379yMUCuELX/iC57xSCh/72Mewb98+pFIpHD58GC+++KLnmrW1Ndxzzz3I5XIoFAp497vfjVqtdh57sft44IEH8KY3vQljY2OYnp7Gb/zGb+CFF17wXNNqtXDkyBFMTEwgm83irrvuwtLSkueaubk53HnnnUin05iensZHPvIR9Hq989mVXcWDDz6Im266SWcSOnToEL7yla/o824Mzw6f/OQnEQqF8MEPflAfc2M5HD7+8Y8jFAp5Ptddd50+f97GcaTdgy8APPzwwyoej6t//Md/VM8//7z63d/9XVUoFNTS0tJuN+2CwZe//GX1h3/4h+rf//3fFQD1+c9/3nP+k5/8pMrn8+oLX/iC+sEPfqB+7dd+TV111VWq2Wzqa375l39Z3Xzzzerb3/62+t///V91zTXXqHe+853nuSe7i9tvv1199rOfVc8995x65pln1K/8yq+ogwcPqlqtpq95z3veoy6//HL12GOPqe9973vqLW95i/r5n/95fb7X66kbbrhBHT58WD399NPqy1/+spqcnFT33XffbnRpV/Cf//mf6ktf+pL6yU9+ol544QX1B3/wByoWi6nnnntOKeXG8Gzw3e9+V1155ZXqpptuUh/4wAf0cTeWw+H+++9Xr3vd69TCwoL+nDlzRp8/X+O45wj4zW9+szpy5Ij+f2NjQ+3fv1898MADu9iqCxcmAff7fTU7O6v+4i/+Qh8rlUoqkUiof/3Xf1VKKfWjH/1IAVBPPfWUvuYrX/mKCoVC6vTp0+et7RcalpeXFQD1xBNPKKU2xy0Wi6lHHnlEX/PjH/9YAVBHjx5VSm0uhsLhsFpcXNTXPPjggyqXy6l2u31+O3ABYXx8XP393/+9G8OzQLVaVa95zWvUo48+qn7xF39RE7Aby+Fx//33q5tvvtl67nyO455SQXc6HRw7dgyHDx/Wx8LhMA4fPoyjR4/uYsv2Do4fP47FxUXPGObzedx66616DI8ePYpCoYA3vvGN+prDhw8jHA7jO9/5znlv84WCcrkMACgWiwCAY8eOodvtesbyuuuuw8GDBz1jeeONN2JmZkZfc/vtt6NSqeD5558/j62/MLCxsYGHH34Y9Xodhw4dcmN4Fjhy5AjuvPNOz5gB7n0cFS+++CL279+Pq6++Gvfccw/m5uYAnN9x3FO7Ia2srGBjY8PTaQCYmZnB//3f/+1Sq/YWFhcXAcA6hjy3uLiI6elpz/loNIpisaivudTQ7/fxwQ9+EL/wC7+AG264AcDmOMXjcRQKBc+15ljaxprnLhU8++yzOHToEFqtFrLZLD7/+c/j+uuvxzPPPOPGcAQ8/PDD+P73v4+nnnpq2zn3Pg6PW2+9FQ899BBe+9rXYmFhAZ/4xCfw1re+Fc8999x5Hcc9RcAODruFI0eO4LnnnsM3v/nN3W7KnsRrX/taPPPMMyiXy/i3f/s3vOtd78ITTzyx283aUzh58iQ+8IEP4NFHH0Uymdzt5uxp3HHHHfr7TTfdhFtvvRVXXHEFPve5zyGVSp23duwpFfTk5CQikcg2b7SlpSXMzs7uUqv2FjhOQWM4OzuL5eVlz/ler4e1tbVLcpzf//7344tf/CK+/vWv47LLLtPHZ2dn0el0UCqVPNebY2kba567VBCPx3HNNdfglltuwQMPPICbb74Zf/VXf+XGcAQcO3YMy8vLeMMb3oBoNIpoNIonnngCn/70pxGNRjEzM+PG8ixRKBRw7bXX4qWXXjqv7+SeIuB4PI5bbrkFjz32mD7W7/fx2GOP4dChQ7vYsr2Dq666CrOzs54xrFQq+M53vqPH8NChQyiVSjh27Ji+5vHHH0e/38ett9563tu8W1BK4f3vfz8+//nP4/HHH8dVV13lOX/LLbcgFot5xvKFF17A3NycZyyfffZZz4Lm0UcfRS6Xw/XXX39+OnIBot/vo91uuzEcAbfddhueffZZPPPMM/rzxje+Effcc4/+7sby7FCr1fDyyy9j37595/edPCsXsl3Eww8/rBKJhHrooYfUj370I/V7v/d7qlAoeLzRLnVUq1X19NNPq6effloBUJ/61KfU008/rV555RWl1GYYUqFQUP/xH/+hfvjDH6pf//Vft4Yh/dzP/Zz6zne+o775zW+q17zmNZdcGNJ73/telc/n1Te+8Q1PuEKj0dDXvOc971EHDx5Ujz/+uPre976nDh06pA4dOqTPM1zhbW97m3rmmWfUV7/6VTU1NXVJhX189KMfVU888YQ6fvy4+uEPf6g++tGPqlAopL72ta8ppdwYngukF7RSbiyHxb333qu+8Y1vqOPHj6snn3xSHT58WE1OTqrl5WWl1Pkbxz1HwEop9dd//dfq4MGDKh6Pqze/+c3q29/+9m436YLC17/+dQVg2+dd73qXUmozFOmP//iP1czMjEokEuq2225TL7zwgqeM1dVV9c53vlNls1mVy+XUb//2b6tqtboLvdk92MYQgPrsZz+rr2k2m+p973ufGh8fV+l0Wr397W9XCwsLnnJOnDih7rjjDpVKpdTk5KS69957VbfbPc+92T38zu/8jrriiitUPB5XU1NT6rbbbtPkq5Qbw3OBScBuLIfD3Xffrfbt26fi8bg6cOCAuvvuu9VLL72kz5+vcXT7ATs4ODg4OOwC9pQN2MHBwcHB4WKBI2AHBwcHB4ddgCNgBwcHBweHXYAjYAcHBwcHh12AI2AHBwcHB4ddgCNgBwcHBweHXYAjYAcHBwcHh12AI2AHBwcHB4ddgCNgBwcHBweHXYAjYAcHBwcHh12AI2AHBwcHB4ddwP8D9K/uwZOBTY4AAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -641,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -659,7 +677,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -739,7 +757,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -801,7 +819,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -897,7 +915,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -999,7 +1017,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -1020,7 +1038,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1050,92 +1068,94 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 15:26:34,943] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", - "[2024-04-23 15:26:34,945] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", - "[2024-04-23 15:26:34,945] [INFO] (root) - sample_data_path: /tmp/simple_app\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", - "\u001b[0m2024-04-23 15:26:34.968 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 10:20:53,264] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", + "[2025-01-16 10:20:53,266] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", + "[2025-01-16 10:20:53,266] [INFO] (root) - sample_data_path: /tmp/simple_app\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'in1'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'in1'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "Input from: /tmp/simple_app, whose absolute path: /tmp/simple_app\n", - "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2024-04-23 15:26:34,996] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2024-04-23 15:26:35,002] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", + "[2025-01-16 10:20:53,288] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2025-01-16 10:20:53,288] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2025-01-16 10:20:53,288] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2025-01-16 10:20:53,288] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2025-01-16 10:20:53,288] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2025-01-16 10:20:53,289] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2025-01-16 10:20:53,289] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2025-01-16 10:20:53,289] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2025-01-16 10:20:53,289] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2025-01-16 10:20:53,289] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2025-01-16 10:20:53,293] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", "Number of times operator median_op whose class is defined in median_operator called: 1\n", "Number of times operator gaussian_op whose class is defined in gaussian_operator called: 1\n", "Data type of output: , max = 0.35821119421406195\n", "Data type of output post conversion: , max = 91\n", - "[2024-04-23 15:26:35,225] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", - "[2024-04-23 15:26:35,226] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", - "[2024-04-23 15:26:35,226] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", - "[2024-04-23 15:26:35,227] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", - "[2024-04-23 15:26:35,227] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", - "[2024-04-23 15:26:35,227] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", - "[2024-04-23 15:26:35,230] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", - "[2024-04-23 15:26:35,231] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", - "[2024-04-23 15:26:35,231] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", - "[2024-04-23 15:26:35,231] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", - "[2024-04-23 15:26:35,231] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", - "[2024-04-23 15:26:35,231] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", - "[2024-04-23 15:26:35,232] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", - "[2024-04-23 15:26:35,232] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", - "[2024-04-23 15:26:35,232] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", - "[2024-04-23 15:26:35,232] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", - "[2024-04-23 15:26:35,232] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", - "[2024-04-23 15:26:35,233] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", - "[2024-04-23 15:26:35,233] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", - "[2024-04-23 15:26:35,234] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", - "[2024-04-23 15:26:35,234] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", - "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", - "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", - "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", - "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", - "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", - "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", - "[2024-04-23 15:26:35,235] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", - "[2024-04-23 15:26:35,236] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", - "[2024-04-23 15:26:35,237] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", - "[2024-04-23 15:26:35,237] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", - "[2024-04-23 15:26:35,237] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", - "[2024-04-23 15:26:35,237] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", - "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", - "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", - "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", - "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", - "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", - "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", - "[2024-04-23 15:26:35,242] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", - "[2024-04-23 15:26:35,243] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", - "[2024-04-23 15:26:35,243] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", - "[2024-04-23 15:26:35,243] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", - "[2024-04-23 15:26:35,243] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", - "[2024-04-23 15:26:35,244] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", - "[2024-04-23 15:26:35,245] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", - "[2024-04-23 15:26:35,245] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", - "[2024-04-23 15:26:35,245] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", - "\u001b[0m2024-04-23 15:26:35.273 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 15:26:35.273 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:275] Destroying context\n" + "[2025-01-16 10:20:53,538] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", + "[2025-01-16 10:20:53,540] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", + "[2025-01-16 10:20:53,540] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", + "[2025-01-16 10:20:53,540] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", + "[2025-01-16 10:20:53,540] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", + "[2025-01-16 10:20:53,541] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", + "[2025-01-16 10:20:53,543] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", + "[2025-01-16 10:20:53,544] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", + "[2025-01-16 10:20:53,544] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", + "[2025-01-16 10:20:53,544] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", + "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", + "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", + "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", + "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", + "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", + "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", + "[2025-01-16 10:20:53,546] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", + "[2025-01-16 10:20:53,546] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", + "[2025-01-16 10:20:53,547] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", + "[2025-01-16 10:20:53,547] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", + "[2025-01-16 10:20:53,547] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", + "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", + "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", + "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", + "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", + "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", + "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", + "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", + "[2025-01-16 10:20:53,549] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", + "[2025-01-16 10:20:53,550] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", + "[2025-01-16 10:20:53,550] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", + "[2025-01-16 10:20:53,550] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", + "[2025-01-16 10:20:53,550] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", + "[2025-01-16 10:20:53,555] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", + "[2025-01-16 10:20:53,555] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", + "[2025-01-16 10:20:53,555] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", + "[2025-01-16 10:20:53,555] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", + "[2025-01-16 10:20:53,555] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", + "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", + "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", + "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", + "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", + "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", + "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", + "[2025-01-16 10:20:53,558] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", + "[2025-01-16 10:20:53,558] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", + "[2025-01-16 10:20:53,558] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", + "[2025-01-16 10:20:53,559] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:292] Destroying context\n" ] } ], @@ -1146,22 +1166,30 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 20, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_2020944/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + " io.imshow(output_image)\n" + ] + }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 47, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1184,6 +1212,13 @@ "## Packaging app" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "attachments": {}, "cell_type": "markdown", @@ -1196,7 +1231,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -1226,7 +1261,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1240,7 +1275,8 @@ "source": [ "%%writefile simple_imaging_app/requirements.txt\n", "scikit-image\n", - "setuptools>=59.5.0 # for pkg_resources\n" + "setuptools>=59.5.0 # for pkg_resources\n", + "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue\n" ] }, { @@ -1252,21 +1288,21 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 15:26:37,078] [INFO] (common) - Downloading CLI manifest file...\n", - "[2024-04-23 15:26:37,629] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2024-04-23 15:26:37,631] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", - "[2024-04-23 15:26:37,632] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2024-04-23 15:26:37,632] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", - "[2024-04-23 15:26:37,636] [INFO] (packager) - Generating app.json...\n", - "[2024-04-23 15:26:37,636] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-23 15:26:37,649] [DEBUG] (common) - \n", + "[2025-01-16 10:20:55,653] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-16 10:20:56,166] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-16 10:20:56,167] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", + "[2025-01-16 10:20:56,167] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-01-16 10:20:56,167] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", + "[2025-01-16 10:20:56,172] [INFO] (packager) - Generating app.json...\n", + "[2025-01-16 10:20:56,173] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-16 10:20:56,176] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1294,14 +1330,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.5.1\",\n", + " \"sdkVersion\": \"2.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2024-04-23 15:26:37,650] [DEBUG] (common) - \n", + "[2025-01-16 10:20:56,177] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1319,15 +1355,114 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-23 15:26:37,673] [DEBUG] (packager.builder) - \n", + "[2025-01-16 10:20:56,185] [DEBUG] (packager.builder) - \n", + "========== Begin Build Parameters ==========\n", + "{'additional_lib_paths': '',\n", + " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml'),\n", + " 'app_dir': PosixPath('/opt/holoscan/app'),\n", + " 'app_json': '/etc/holoscan/app.json',\n", + " 'application': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app'),\n", + " 'application_directory': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app'),\n", + " 'application_type': 'PythonModule',\n", + " 'build_cache': PosixPath('/home/mqin/.holoscan_build_cache'),\n", + " 'cmake_args': '',\n", + " 'command': '[\"python3\", \"/opt/holoscan/app\"]',\n", + " 'command_filename': 'simple_imaging_app',\n", + " 'config_file_path': PosixPath('/var/holoscan/app.yaml'),\n", + " 'docs_dir': PosixPath('/opt/holoscan/docs'),\n", + " 'full_input_path': PosixPath('/var/holoscan/input'),\n", + " 'full_output_path': PosixPath('/var/holoscan/output'),\n", + " 'gid': 1000,\n", + " 'holoscan_sdk_version': '2.8.0',\n", + " 'includes': [],\n", + " 'input_dir': 'input/',\n", + " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", + " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", + " 'models_dir': PosixPath('/opt/holoscan/models'),\n", + " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'no_cache': False,\n", + " 'output_dir': 'output/',\n", + " 'pip_packages': None,\n", + " 'pkg_json': '/etc/holoscan/pkg.json',\n", + " 'requirements_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/requirements.txt'),\n", + " 'sdk': ,\n", + " 'sdk_type': 'monai-deploy',\n", + " 'tarball_output': None,\n", + " 'timeout': 0,\n", + " 'title': 'MONAI Deploy App Package - Simple Imaging App',\n", + " 'uid': 1000,\n", + " 'username': 'holoscan',\n", + " 'version': 1.0,\n", + " 'working_dir': PosixPath('/var/holoscan')}\n", + "=========== End Build Parameters ===========\n", + "\n", + "[2025-01-16 10:20:56,185] [DEBUG] (packager.builder) - \n", + "========== Begin Platform Parameters ==========\n", + "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", + " 'build_image': None,\n", + " 'cuda_deb_arch': 'x86_64',\n", + " 'custom_base_image': False,\n", + " 'custom_holoscan_sdk': False,\n", + " 'custom_monai_deploy_sdk': False,\n", + " 'gpu_type': 'dgpu',\n", + " 'holoscan_deb_arch': 'amd64',\n", + " 'holoscan_sdk_file': '2.8.0',\n", + " 'holoscan_sdk_filename': '2.8.0',\n", + " 'monai_deploy_sdk_file': None,\n", + " 'monai_deploy_sdk_filename': None,\n", + " 'tag': 'simple_imaging_app:1.0',\n", + " 'target_arch': 'x86_64'}\n", + "=========== End Platform Parameters ===========\n", + "\n", + "[2025-01-16 10:20:56,213] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", + "ARG GPU_TYPE=dgpu\n", + "\n", + "\n", + "\n", + "\n", + "FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04 AS base\n", + "\n", + "RUN apt-get update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " curl \\\n", + " jq \\\n", + " && rm -rf /var/lib/apt/lists/*\n", + "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", + "\n", + "# FROM base AS mofed-installer\n", + "# ARG MOFED_VERSION=23.10-2.1.3.1\n", + "\n", + "# # In a container, we only need to install the user space libraries, though the drivers are still\n", + "# # needed on the host.\n", + "# # Note: MOFED's installation is not easily portable, so we can't copy the output of this stage\n", + "# # to our final stage, but must inherit from it. For that reason, we keep track of the build/install\n", + "# # only dependencies in the `MOFED_DEPS` variable (parsing the output of `--check-deps-only`) to\n", + "# # remove them in that same layer, to ensure they are not propagated in the final image.\n", + "# WORKDIR /opt/nvidia/mofed\n", + "# ARG MOFED_INSTALL_FLAGS=\"--dpdk --with-mft --user-space-only --force --without-fw-update\"\n", + "# RUN UBUNTU_VERSION=$(cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d= -f2) \\\n", + "# && OFED_PACKAGE=\"MLNX_OFED_LINUX-${MOFED_VERSION}-ubuntu${UBUNTU_VERSION}-$(uname -m)\" \\\n", + "# && curl -S -# -o ${OFED_PACKAGE}.tgz -L \\\n", + "# https://www.mellanox.com/downloads/ofed/MLNX_OFED-${MOFED_VERSION}/${OFED_PACKAGE}.tgz \\\n", + "# && tar xf ${OFED_PACKAGE}.tgz \\\n", + "# && MOFED_INSTALLER=$(find . -name mlnxofedinstall -type f -executable -print) \\\n", + "# && MOFED_DEPS=$(${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} --check-deps-only 2>/dev/null | tail -n1 | cut -d' ' -f3-) \\\n", + "# && apt-get update \\\n", + "# && apt-get install --no-install-recommends -y ${MOFED_DEPS} \\\n", + "# && ${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} \\\n", + "# && rm -r * \\\n", + "# && apt-get remove -y ${MOFED_DEPS} && apt-get autoremove -y \\\n", + "# && rm -rf /var/lib/apt/lists/*\n", + "\n", + "FROM base AS release\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", "\n", + "ARG GPU_TYPE\n", "ARG UNAME\n", "ARG UID\n", "ARG GID\n", @@ -1339,15 +1474,14 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\"\n", "LABEL tag=\"simple_imaging_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Simple Imaging App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.0.0\"\n", - "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "LABEL org.nvidia.holoscan=\"2.8.0\"\n", "\n", + "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", "\n", - "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", "ENV HOLOSCAN_WORKDIR=/var/holoscan\n", @@ -1359,21 +1493,40 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV PATH=/root/.local/bin:/opt/nvidia/holoscan:$PATH\n", - "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/libtorch/1.13.1/lib/:/opt/nvidia/holoscan/lib\n", + "ENV HOLOSCAN_VERSION=2.8.0\n", "\n", - "RUN apt-get update \\\n", - " && apt-get install -y curl jq \\\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# If torch is installed, we can skip installing Python\n", + "ENV PYTHON_VERSION=3.10.6-1~22.04\n", + "ENV PYTHON_PIP_VERSION=22.0.2+dfsg-*\n", + "\n", + "RUN apt update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " python3-minimal=${PYTHON_VERSION} \\\n", + " libpython3-stdlib=${PYTHON_VERSION} \\\n", + " python3=${PYTHON_VERSION} \\\n", + " python3-venv=${PYTHON_VERSION} \\\n", + " python3-pip=${PYTHON_PIP_VERSION} \\\n", " && rm -rf /var/lib/apt/lists/*\n", "\n", - "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", - "RUN chown -R holoscan /var/holoscan \n", - "RUN chown -R holoscan /var/holoscan/input \n", - "RUN chown -R holoscan /var/holoscan/output \n", + "RUN chown -R holoscan /var/holoscan && \\\n", + " chown -R holoscan /var/holoscan/input && \\\n", + " chown -R holoscan /var/holoscan/output\n", "\n", "# Set the working directory\n", "WORKDIR /var/holoscan\n", @@ -1382,24 +1535,25 @@ "COPY ./tools /var/holoscan/tools\n", "RUN chmod +x /var/holoscan/tools\n", "\n", - "\n", - "# Copy gRPC health probe\n", + "# Set the working directory\n", + "WORKDIR /var/holoscan\n", "\n", "USER $UNAME\n", "\n", - "ENV PATH=/root/.local/bin:/home/holoscan/.local/bin:/opt/nvidia/holoscan:$PATH\n", + "ENV PATH=/home/${UNAME}/.local/bin:/opt/nvidia/holoscan/bin:$PATH\n", + "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/${UNAME}/.local/lib/python3.10/site-packages/holoscan/lib\n", "\n", "COPY ./pip/requirements.txt /tmp/requirements.txt\n", "\n", "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - " \n", - "# MONAI Deploy\n", "\n", - "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "# Install MONAI Deploy App SDK\n", + "\n", + "# Install MONAI Deploy from PyPI org\n", + "RUN pip install monai-deploy-app-sdk==2.0.0\n", + "\n", "\n", "\n", "\n", @@ -1409,273 +1563,357 @@ "\n", "COPY ./app /opt/holoscan/app\n", "\n", + "\n", "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-23 15:26:37,673] [INFO] (packager.builder) - \n", + "[2025-01-16 10:20:56,214] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + " Base Image: nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + " Holoscan SDK Package: 2.8.0\n", + " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.0.0\n", + " SDK Version: 2.8.0\n", " SDK: monai-deploy\n", " Tag: simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", + " Included features/dependencies: N/A\n", " \n", - "[2024-04-23 15:26:38,231] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-23 15:26:38,231] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-01-16 10:20:57,613] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-16 10:20:57,614] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.63kB done\n", - "#1 DONE 0.0s\n", + "#1 transferring dockerfile: 30B\n", + "#1 transferring dockerfile: 4.53kB done\n", + "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#2 DONE 0.5s\n", + "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#2 DONE 0.0s\n", "\n", - "#3 [internal] load .dockerignore\n", - "#3 transferring context: 1.79kB done\n", - "#3 DONE 0.0s\n", + "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#3 DONE 0.5s\n", "\n", - "#4 [internal] load build context\n", - "#4 DONE 0.0s\n", + "#4 [internal] load .dockerignore\n", + "#4 transferring context: 1.79kB done\n", + "#4 DONE 0.1s\n", "\n", - "#5 importing cache manifest from local:10678196058931023490\n", + "#5 importing cache manifest from local:4071450130461523494\n", "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 [ 1/20] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.0s done\n", + "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#7 DONE 0.9s\n", + "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", + "#7 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", + "#7 DONE 0.1s\n", "\n", - "#4 [internal] load build context\n", - "#4 transferring context: 157.77kB 0.0s done\n", - "#4 DONE 0.0s\n", + "#8 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#8 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#8 DONE 0.9s\n", "\n", - "#8 [ 5/20] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", - "#8 CACHED\n", + "#6 [internal] load build context\n", + "#6 transferring context: 24.94kB 0.0s done\n", + "#6 DONE 0.1s\n", "\n", - "#9 [ 3/20] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#9 [release 6/17] WORKDIR /var/holoscan\n", "#9 CACHED\n", "\n", - "#10 [ 6/20] RUN chown -R holoscan /var/holoscan\n", + "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#10 CACHED\n", "\n", - "#11 [13/20] RUN pip install --upgrade pip\n", + "#11 [release 3/17] RUN groupadd -f -g 1000 holoscan\n", "#11 CACHED\n", "\n", - "#12 [ 8/20] RUN chown -R holoscan /var/holoscan/output\n", + "#12 [release 2/17] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#12 CACHED\n", "\n", - "#13 [ 7/20] RUN chown -R holoscan /var/holoscan/input\n", + "#13 [release 4/17] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#13 CACHED\n", "\n", - "#14 [ 2/20] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#14 [release 5/17] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#14 CACHED\n", "\n", - "#15 [12/20] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#15 [release 8/17] RUN chmod +x /var/holoscan/tools\n", "#15 CACHED\n", "\n", - "#16 [11/20] RUN chmod +x /var/holoscan/tools\n", + "#16 [release 1/17] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#16 CACHED\n", "\n", - "#17 [ 9/20] WORKDIR /var/holoscan\n", + "#17 [release 7/17] COPY ./tools /var/holoscan/tools\n", "#17 CACHED\n", "\n", - "#18 [ 4/20] RUN groupadd -f -g 1000 holoscan\n", + "#18 [release 9/17] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [10/20] COPY ./tools /var/holoscan/tools\n", - "#19 CACHED\n", - "\n", - "#20 [14/20] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#20 CACHED\n", - "\n", - "#21 [15/20] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#21 DONE 0.1s\n", - "\n", - "#22 [16/20] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#22 0.725 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.802 Processing /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#22 0.815 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.23.5)\n", - "#22 1.004 Collecting holoscan~=2.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.074 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (6.7 kB)\n", - "#22 1.118 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.122 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.172 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.176 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.192 Requirement already satisfied: pip>=20.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (24.0)\n", - "#22 1.193 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (12.2.0)\n", - "#22 1.193 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", - "#22 1.194 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.60.1)\n", - "#22 1.195 Requirement already satisfied: Jinja2==3.1.3 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.1.3)\n", - "#22 1.195 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (23.1)\n", - "#22 1.196 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (6.0)\n", - "#22 1.197 Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.31.0)\n", - "#22 1.197 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (5.9.6)\n", - "#22 1.296 Collecting wheel-axle-runtime<1.0 (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.302 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", - "#22 1.326 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.8.2)\n", - "#22 1.329 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.1.3)\n", - "#22 1.342 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.10.15)\n", - "#22 1.342 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.66.2)\n", - "#22 1.343 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.12.3)\n", - "#22 1.343 Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.7.1)\n", - "#22 1.352 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.3.2)\n", - "#22 1.352 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.7)\n", - "#22 1.353 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", - "#22 1.353 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2024.2.2)\n", - "#22 1.389 Collecting typing-extensions (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.392 Downloading typing_extensions-4.11.0-py3-none-any.whl.metadata (3.0 kB)\n", - "#22 1.451 Collecting filelock (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.455 Downloading filelock-3.13.4-py3-none-any.whl.metadata (2.8 kB)\n", - "#22 1.486 Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (8.1.7)\n", - "#22 1.490 Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.5.4)\n", - "#22 1.491 Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (13.7.1)\n", - "#22 1.533 Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.0.0)\n", - "#22 1.533 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.17.2)\n", - "#22 1.556 Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.1.2)\n", - "#22 1.570 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.585 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.2 MB)\n", - "#22 3.441 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.2/33.2 MB 25.5 MB/s eta 0:00:00\n", - "#22 3.447 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", - "#22 3.465 Downloading typing_extensions-4.11.0-py3-none-any.whl (34 kB)\n", - "#22 3.484 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", - "#22 3.499 Downloading filelock-3.13.4-py3-none-any.whl (11 kB)\n", - "#22 3.799 Installing collected packages: typing-extensions, filelock, colorama, wheel-axle-runtime, typeguard, holoscan, monai-deploy-app-sdk\n", - "#22 4.520 Successfully installed colorama-0.4.6 filelock-3.13.4 holoscan-2.0.0 monai-deploy-app-sdk-0.5.1+20.gb869749.dirty typeguard-4.2.1 typing-extensions-4.11.0 wheel-axle-runtime-0.0.5\n", - "#22 DONE 5.2s\n", - "\n", - "#23 [17/20] COPY ./map/app.json /etc/holoscan/app.json\n", + "#19 [release 10/17] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 DONE 0.3s\n", + "\n", + "#20 [release 11/17] RUN pip install --upgrade pip\n", + "#20 0.894 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.942 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.117 Collecting pip\n", + "#20 1.177 Downloading pip-24.3.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.242 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 29.6 MB/s eta 0:00:00\n", + "#20 1.275 Installing collected packages: pip\n", + "#20 2.016 Successfully installed pip-24.3.1\n", + "#20 DONE 2.3s\n", + "\n", + "#21 [release 12/17] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 0.688 Collecting scikit-image (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.701 Downloading scikit_image-0.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", + "#21 0.717 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 2)) (59.6.0)\n", + "#21 0.806 Collecting holoscan==2.6.0 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.811 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.2 kB)\n", + "#21 0.816 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3)) (24.3.1)\n", + "#21 0.830 Collecting cupy-cuda12x==12.2 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 0.836 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", + "#21 0.854 Collecting cloudpickle==2.2.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 0.860 Downloading cloudpickle-2.2.1-py3-none-any.whl.metadata (6.9 kB)\n", + "#21 0.983 Collecting python-on-whales==0.60.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 0.988 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", + "#21 1.005 Collecting Jinja2==3.1.3 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.010 Downloading Jinja2-3.1.3-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 1.035 Collecting packaging==23.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.039 Downloading packaging-23.1-py3-none-any.whl.metadata (3.1 kB)\n", + "#21 1.079 Collecting pyyaml==6.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.083 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (2.0 kB)\n", + "#21 1.117 Collecting requests==2.31.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.121 Downloading requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)\n", + "#21 1.209 Collecting psutil==6.0.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.213 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (21 kB)\n", + "#21 1.300 Collecting wheel-axle-runtime<1.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.308 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#21 1.511 Collecting numpy<1.27,>=1.20 (from cupy-cuda12x==12.2->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.515 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.573 Collecting fastrlock>=0.5 (from cupy-cuda12x==12.2->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.579 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#21 1.637 Collecting MarkupSafe>=2.0 (from Jinja2==3.1.3->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.640 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 1.819 Collecting pydantic<2,>=1.5 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.823 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", + "#21 1.888 Collecting tqdm (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.892 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "#21 1.927 Collecting typer>=0.4.1 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.933 Downloading typer-0.15.1-py3-none-any.whl.metadata (15 kB)\n", + "#21 1.960 Collecting typing-extensions (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.969 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 2.064 Collecting charset-normalizer<4,>=2 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.068 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#21 2.088 Collecting idna<4,>=2.5 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.092 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#21 2.149 Collecting urllib3<3,>=1.21.1 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.154 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#21 2.174 Collecting certifi>=2017.4.17 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.178 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 2.312 Collecting scipy>=1.11.2 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 2.315 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 2.348 Collecting networkx>=3.0 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 2.352 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 2.639 Collecting pillow>=10.1 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 2.644 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", + "#21 2.707 Collecting imageio!=2.35.0,>=2.33 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 2.712 Downloading imageio-2.36.1-py3-none-any.whl.metadata (5.2 kB)\n", + "#21 2.802 Collecting tifffile>=2022.8.12 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 2.807 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", + "#21 2.828 Collecting lazy-loader>=0.4 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 2.836 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", + "#21 2.912 Collecting filelock (from wheel-axle-runtime<1.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.917 Downloading filelock-3.16.1-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.956 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.960 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 2.986 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.990 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "#21 3.081 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 3.088 Downloading rich-13.9.4-py3-none-any.whl.metadata (18 kB)\n", + "#21 3.139 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 3.143 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", + "#21 3.175 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 3.179 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", + "#21 3.200 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", + "#21 3.205 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "#21 3.219 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl (40.8 MB)\n", + "#21 5.813 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 MB 15.7 MB/s eta 0:00:00\n", + "#21 5.821 Downloading cloudpickle-2.2.1-py3-none-any.whl (25 kB)\n", + "#21 5.828 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl (82.0 MB)\n", + "#21 6.919 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 82.0/82.0 MB 75.4 MB/s eta 0:00:00\n", + "#21 6.924 Downloading Jinja2-3.1.3-py3-none-any.whl (133 kB)\n", + "#21 6.928 Downloading packaging-23.1-py3-none-any.whl (48 kB)\n", + "#21 6.932 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (290 kB)\n", + "#21 6.942 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", + "#21 6.948 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (682 kB)\n", + "#21 6.958 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 682.2/682.2 kB 135.1 MB/s eta 0:00:00\n", + "#21 6.964 Downloading requests-2.31.0-py3-none-any.whl (62 kB)\n", + "#21 6.970 Downloading scikit_image-0.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", + "#21 7.169 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 74.4 MB/s eta 0:00:00\n", + "#21 7.175 Downloading imageio-2.36.1-py3-none-any.whl (315 kB)\n", + "#21 7.182 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", + "#21 7.187 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 7.204 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 122.2 MB/s eta 0:00:00\n", + "#21 7.209 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 7.367 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.5 MB/s eta 0:00:00\n", + "#21 7.372 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "#21 7.416 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 116.4 MB/s eta 0:00:00\n", + "#21 7.424 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", + "#21 7.833 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 100.0 MB/s eta 0:00:00\n", + "#21 7.842 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", + "#21 7.854 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#21 7.862 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", + "#21 7.870 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#21 7.879 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#21 7.889 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#21 7.897 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 7.904 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", + "#21 7.958 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 79.8 MB/s eta 0:00:00\n", + "#21 7.963 Downloading typer-0.15.1-py3-none-any.whl (44 kB)\n", + "#21 7.966 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", + "#21 7.972 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", + "#21 7.977 Downloading filelock-3.16.1-py3-none-any.whl (16 kB)\n", + "#21 7.981 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "#21 7.985 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", + "#21 7.990 Downloading rich-13.9.4-py3-none-any.whl (242 kB)\n", + "#21 7.995 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", + "#21 7.999 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", + "#21 8.004 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", + "#21 8.025 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 71.2 MB/s eta 0:00:00\n", + "#21 8.032 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "#21 8.743 Installing collected packages: fastrlock, urllib3, typing-extensions, tqdm, shellingham, pyyaml, pygments, psutil, pillow, packaging, numpy, networkx, mdurl, MarkupSafe, idna, filelock, cloudpickle, click, charset-normalizer, certifi, wheel-axle-runtime, tifffile, scipy, requests, pydantic, markdown-it-py, lazy-loader, Jinja2, imageio, cupy-cuda12x, scikit-image, rich, typer, python-on-whales, holoscan\n", + "#21 22.15 Successfully installed Jinja2-3.1.3 MarkupSafe-3.0.2 certifi-2024.12.14 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-2.2.1 cupy-cuda12x-12.2.0 fastrlock-0.8.3 filelock-3.16.1 holoscan-2.6.0 idna-3.10 imageio-2.36.1 lazy-loader-0.4 markdown-it-py-3.0.0 mdurl-0.1.2 networkx-3.4.2 numpy-1.26.4 packaging-23.1 pillow-11.1.0 psutil-6.0.0 pydantic-1.10.21 pygments-2.19.1 python-on-whales-0.60.1 pyyaml-6.0 requests-2.31.0 rich-13.9.4 scikit-image-0.25.0 scipy-1.15.1 shellingham-1.5.4 tifffile-2025.1.10 tqdm-4.67.1 typer-0.15.1 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", + "#21 DONE 24.2s\n", + "\n", + "#22 [release 13/17] RUN pip install monai-deploy-app-sdk==2.0.0\n", + "#22 1.117 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 1.330 Collecting monai-deploy-app-sdk==2.0.0\n", + "#22 1.396 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", + "#22 1.434 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.6/132.6 KB 3.6 MB/s eta 0:00:00\n", + "#22 1.490 Collecting colorama>=0.4.1\n", + "#22 1.495 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.507 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", + "#22 1.508 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.6.0)\n", + "#22 1.578 Collecting typeguard>=3.0.0\n", + "#22 1.583 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", + "#22 1.609 Requirement already satisfied: Jinja2==3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.3)\n", + "#22 1.610 Requirement already satisfied: requests==2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.31.0)\n", + "#22 1.611 Requirement already satisfied: cupy-cuda12x==12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (12.2.0)\n", + "#22 1.724 Collecting pip>22.0.2\n", + "#22 1.738 Using cached pip-24.3.1-py3-none-any.whl (1.8 MB)\n", + "#22 1.756 Requirement already satisfied: psutil==6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.0)\n", + "#22 1.757 Requirement already satisfied: cloudpickle==2.2.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.2.1)\n", + "#22 1.758 Requirement already satisfied: packaging==23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (23.1)\n", + "#22 1.759 Requirement already satisfied: python-on-whales==0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.60.1)\n", + "#22 1.760 Requirement already satisfied: pyyaml==6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0)\n", + "#22 1.761 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", + "#22 1.779 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", + "#22 1.784 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", + "#22 1.801 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", + "#22 1.802 Requirement already satisfied: pydantic<2,>=1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.10.21)\n", + "#22 1.802 Requirement already satisfied: tqdm in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.67.1)\n", + "#22 1.803 Requirement already satisfied: typer>=0.4.1 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.15.1)\n", + "#22 1.813 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", + "#22 1.813 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", + "#22 1.814 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", + "#22 1.815 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", + "#22 1.845 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.16.1)\n", + "#22 1.881 Requirement already satisfied: rich>=10.11.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.9.4)\n", + "#22 1.882 Requirement already satisfied: shellingham>=1.3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.5.4)\n", + "#22 1.883 Requirement already satisfied: click>=8.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (8.1.8)\n", + "#22 1.949 Requirement already satisfied: markdown-it-py>=2.2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.0)\n", + "#22 1.950 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.19.1)\n", + "#22 1.985 Requirement already satisfied: mdurl~=0.1 in /home/holoscan/.local/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.1.2)\n", + "#22 2.261 Installing collected packages: typeguard, pip, colorama, monai-deploy-app-sdk\n", + "#22 3.247 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 pip-24.3.1 typeguard-4.4.1\n", + "#22 DONE 3.6s\n", + "\n", + "#23 [release 14/17] COPY ./map/app.json /etc/holoscan/app.json\n", "#23 DONE 0.1s\n", "\n", - "#24 [18/20] COPY ./app.config /var/holoscan/app.yaml\n", - "#24 DONE 0.0s\n", + "#24 [release 15/17] COPY ./app.config /var/holoscan/app.yaml\n", + "#24 DONE 0.1s\n", "\n", - "#25 [19/20] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#25 DONE 0.0s\n", + "#25 [release 16/17] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#25 DONE 0.1s\n", "\n", - "#26 [20/20] COPY ./app /opt/holoscan/app\n", - "#26 DONE 0.0s\n", + "#26 [release 17/17] COPY ./app /opt/holoscan/app\n", + "#26 DONE 0.1s\n", "\n", "#27 exporting to docker image format\n", "#27 exporting layers\n", - "#27 exporting layers 4.7s done\n", - "#27 exporting manifest sha256:b2f214d50ea4107e85a01c007f24375e996d9dc954742f585907f47d96cc3c1a 0.0s done\n", - "#27 exporting config sha256:6485f181da93a3c0fc12abe1cf367c89306b7e8f7b110993be48f38b56164b89 0.0s done\n", + "#27 exporting layers 24.0s done\n", + "#27 exporting manifest sha256:cc7706093c83a3a726ef89196569affd7a7462bb7c4d0f2ee43b135224920095 0.0s done\n", + "#27 exporting config sha256:70d7701f92d3ce5f4031fd4e0cbf5c1df2d07600f6549cfd50b960afefe42515 0.0s done\n", "#27 sending tarball\n", "#27 ...\n", "\n", "#28 importing to docker\n", - "#28 loading layer d16586f61a51 32.77kB / 125.82kB\n", - "#28 loading layer bb2ce52783d3 557.06kB / 67.52MB\n", - "#28 loading layer 5f42a2d4a17c 492B / 492B\n", - "#28 loading layer 93299cfbc42b 312B / 312B\n", - "#28 loading layer 222cc4dc3d9f 294B / 294B\n", - "#28 loading layer 4dbebd69efec 3.18kB / 3.18kB\n", - "#28 loading layer 5f42a2d4a17c 492B / 492B 1.0s done\n", - "#28 loading layer d16586f61a51 32.77kB / 125.82kB 2.9s done\n", - "#28 loading layer bb2ce52783d3 557.06kB / 67.52MB 2.9s done\n", - "#28 loading layer 93299cfbc42b 312B / 312B 1.0s done\n", - "#28 loading layer 222cc4dc3d9f 294B / 294B 1.0s done\n", - "#28 loading layer 4dbebd69efec 3.18kB / 3.18kB 0.9s done\n", - "#28 DONE 2.9s\n", + "#28 loading layer 1b024ad82f5a 229B / 229B\n", + "#28 loading layer b8bccbd3b506 65.54kB / 5.03MB\n", + "#28 loading layer 5a9d3c09196c 557.06kB / 226.89MB\n", + "#28 loading layer 5a9d3c09196c 93.59MB / 226.89MB 2.1s\n", + "#28 loading layer 5a9d3c09196c 137.04MB / 226.89MB 4.2s\n", + "#28 loading layer 5a9d3c09196c 178.81MB / 226.89MB 6.3s\n", + "#28 loading layer 5a9d3c09196c 226.16MB / 226.89MB 8.3s\n", + "#28 loading layer c99258ac4505 65.54kB / 3.78MB\n", + "#28 loading layer 3170063eb987 490B / 490B\n", + "#28 loading layer fd5e217f4633 313B / 313B\n", + "#28 loading layer f6848a086f32 295B / 295B\n", + "#28 loading layer bf3b68165975 3.21kB / 3.21kB\n", + "#28 loading layer 1b024ad82f5a 229B / 229B 10.3s done\n", + "#28 loading layer b8bccbd3b506 65.54kB / 5.03MB 10.2s done\n", + "#28 loading layer 5a9d3c09196c 226.16MB / 226.89MB 9.6s done\n", + "#28 loading layer c99258ac4505 65.54kB / 3.78MB 1.1s done\n", + "#28 loading layer 3170063eb987 490B / 490B 0.4s done\n", + "#28 loading layer fd5e217f4633 313B / 313B 0.4s done\n", + "#28 loading layer f6848a086f32 295B / 295B 0.3s done\n", + "#28 loading layer bf3b68165975 3.21kB / 3.21kB 0.2s done\n", + "#28 DONE 10.3s\n", "\n", "#27 exporting to docker image format\n", - "#27 sending tarball 39.7s done\n", - "#27 DONE 44.4s\n", + "#27 sending tarball 24.8s done\n", + "#27 DONE 48.8s\n", "\n", "#29 exporting cache to client directory\n", "#29 preparing build cache for export\n", - "#29 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015\n", - "#29 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", - "#29 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", - "#29 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", - "#29 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", - "#29 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", - "#29 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#29 writing layer sha256:18ff8faa5fb62bc13ea7af97d3ed57fd4dbffbcb15b37606935aa20a1b2b9879\n", - "#29 writing layer sha256:18ff8faa5fb62bc13ea7af97d3ed57fd4dbffbcb15b37606935aa20a1b2b9879 1.2s done\n", - "#29 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39\n", - "#29 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", - "#29 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", - "#29 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#29 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", - "#29 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#29 writing layer sha256:2e367cdca270a2175c84537f99cfd3f00f286e5977884762ba2b7045637f7eb8 done\n", - "#29 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", - "#29 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", - "#29 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", - "#29 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#29 writing layer sha256:44b45fba2f5d69895a3b96828a250406b216add7940feab849e3bf18bc864780 0.0s done\n", - "#29 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", - "#29 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", - "#29 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", - "#29 writing layer sha256:4dde81c0149c8207008e2b45ce8533f41589094e1b998390a2d39fb50b337992 0.0s done\n", + "#29 writing layer sha256:0f288e66a79a71cef90c6368b4adaad8ed36262f6000f8acf8d49cce95577d68\n", + "#29 writing layer sha256:0f288e66a79a71cef90c6368b4adaad8ed36262f6000f8acf8d49cce95577d68 0.0s done\n", + "#29 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#29 writing layer sha256:1a5c607fac617c9a47a6fc2a6bda367b1f4be6b5e2c6cfdc7bf0ca16c6e969c0 0.1s done\n", + "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24\n", + "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#29 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#29 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#29 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#29 writing layer sha256:419f5fe8264f5c5f64aad0cfa4cf85e93d877a9424e0c4467ac5f2a450d6e056 0.0s done\n", + "#29 writing layer sha256:41e173df84c503c9e717e0e67c22260d4e6bb14660577b225dec5733b4155a78 done\n", + "#29 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#29 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", - "#29 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", - "#29 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#29 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", - "#29 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", - "#29 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#29 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", - "#29 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", - "#29 writing layer sha256:758ac279497f68ba566bbdb5686aaaa9e362ca063c817c725de96fd205aeaa53 0.0s done\n", - "#29 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", - "#29 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#29 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", - "#29 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", - "#29 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", - "#29 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", - "#29 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", - "#29 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", - "#29 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", - "#29 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", - "#29 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", - "#29 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", - "#29 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", - "#29 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#29 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", - "#29 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", - "#29 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", - "#29 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", - "#29 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", - "#29 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", - "#29 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", - "#29 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157\n", - "#29 preparing build cache for export 1.7s done\n", - "#29 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#29 writing layer sha256:b98f5f4d1c99ef6c3b4ecce24d32753787f67982a13b216d17115c13fee3aa58 done\n", - "#29 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#29 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", - "#29 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", - "#29 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#29 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#29 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", - "#29 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", - "#29 writing layer sha256:e16d56ac40a253ee3622e4a00c4d5f0cc28effdef15ac4b2c51b78f4732abcef done\n", - "#29 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", - "#29 writing layer sha256:e2cb45922077b1926bf021323ddd666dbc92d2c9daea0acf78515292da5000c8 done\n", - "#29 writing layer sha256:e79b8737ab7fc2e26d2e35f3e6572c9ababcbaaa232c1ff5987cdbf9ccd55b88 done\n", - "#29 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", - "#29 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#29 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", - "#29 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#29 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", - "#29 writing config sha256:339862140e56654739f221a003e85d34c38ecd35b385c81ec1172b98fc0def66 0.0s done\n", - "#29 writing cache manifest sha256:5120653f7a3d293475e31a259659d8eb2d8883ab243f43924a2d526e754e676c 0.0s done\n", - "#29 DONE 1.7s\n", - "[2024-04-23 15:27:32,621] [INFO] (packager) - Build Summary:\n", + "#29 writing layer sha256:5b30d2811318a73c976648ae475ac270801091fbf9e25d455ab1272863f37139 0.0s done\n", + "#29 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#29 writing layer sha256:834f38ff94a8090956102675d8f74ea3c8dd46a273f4a1f070bb2972b3003271\n", + "#29 writing layer sha256:834f38ff94a8090956102675d8f74ea3c8dd46a273f4a1f070bb2972b3003271 3.3s done\n", + "#29 writing layer sha256:875bf82ef536517b9ff04de88d1b32370335edb06abc9c9802ebaae0e33bb16c\n", + "#29 writing layer sha256:875bf82ef536517b9ff04de88d1b32370335edb06abc9c9802ebaae0e33bb16c 0.1s done\n", + "#29 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707\n", + "#29 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707 done\n", + "#29 writing layer sha256:94ed629bf6769eea21c1bcc9c2527c040075d6f7ddbf8e6f45d83a1a3a7430b5 0.0s done\n", + "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#29 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#29 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#29 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94 done\n", + "#29 writing layer sha256:c8937b741c9ecd6b257aeb18daf07eddbf1c77b0c93f9ba4164faa8353cd1d3c done\n", + "#29 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#29 writing layer sha256:d6a3aed185061848dad38d40fc87ecf54ea6773924fd4596cd74b5e3e5bfb1f2 0.0s done\n", + "#29 writing layer sha256:e540d242f419a27800d601d7275f4fbb3488b97d209b454f52e63f1eb413a912 done\n", + "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#29 writing config sha256:692173dc5432d2da6886f738a6b98d063c1f53f7aab1c09c888cf9edde90e0ec 0.0s done\n", + "#29 preparing build cache for export 4.0s done\n", + "#29 writing cache manifest sha256:a902154876d24757b32216424d3293c210d819dff65948054a3f83e51acad1d4 0.0s done\n", + "#29 DONE 4.0s\n", + "[2025-01-16 10:22:24,149] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1705,14 +1943,14 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 6485f181da93 46 seconds ago 12.5GB\n" + "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 70d7701f92d3 54 seconds ago 2.98GB\n" ] } ], @@ -1734,7 +1972,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -1770,7 +2008,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.5.1\",\n", + " \"sdkVersion\": \"2.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -1792,17 +2030,17 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2024-04-23 22:27:35 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-01-16 18:22:27 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2024-04-23 22:27:35 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2024-04-23 22:27:35 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2024-04-23 22:27:35 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-01-16 18:22:27 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-01-16 18:22:27 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-01-16 18:22:27 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2024-04-23 22:27:35 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", - "2024-04-23 22:27:35 [INFO] '/opt/holoscan/models' cannot be found.\n", + "2025-01-16 18:22:27 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-01-16 18:22:27 [INFO] '/opt/holoscan/models' cannot be found.\n", "\n", - "2024-04-23 22:27:35 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2024-04-23 22:27:35 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-01-16 18:22:27 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-01-16 18:22:27 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config\n" ] @@ -1829,29 +2067,29 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 15:27:36,245] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-23 15:27:36,245] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-01-16 10:22:29,375] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-16 10:22:29,375] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-23 15:27:36,245] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-01-16 10:22:29,375] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-23 15:27:36,245] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-01-16 10:22:29,375] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-23 15:27:36,326] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpv5e8cb_i/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpv5e8cb_i/pkg.json\n", - "[2024-04-23 15:27:36,492] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-01-16 10:22:29,473] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmptn3vmu2k/app.json\n", + "Successfully copied 2.05kB to /tmp/tmptn3vmu2k/pkg.json\n", + "[2025-01-16 10:22:29,824] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-23 15:27:36,492] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-01-16 10:22:29,824] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-23 15:27:36,761] [INFO] (common) - Launching container (94febd6eabce) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: dazzling_kowalevski\n", + "[2025-01-16 10:22:30,105] [INFO] (common) - Launching container (cbedd97d041f) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: quizzical_meitner\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1861,39 +2099,39 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-23 22:27:37 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-01-16 18:22:30 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2024-04-23 22:27:37,772] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [fragment.cpp:585] Loading extensions from configs...\n", "\n", - "[2024-04-23 22:27:37,772] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[info] [gxf_executor.cpp:255] Creating context\n", "\n", - "[2024-04-23 22:27:37,772] [INFO] (root) - sample_data_path: /var/holoscan/input\n", + "[2025-01-16 18:22:31,102] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", + "[2025-01-16 18:22:31,102] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[info] [gxf_executor.cpp:247] Creating context\n", + "[2025-01-16 18:22:31,102] [INFO] (root) - sample_data_path: /var/holoscan/input\n", "\n", - "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", + "[info] [app_driver.cpp:1176] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1973] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:2003] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [gxf_executor.cpp:2005] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", + "\u001b[0m2025-01-16 18:22:31.105 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", "\n", - "\u001b[0m2024-04-23 22:27:37.797 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", + "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "\u001b[0m2024-04-23 22:27:38.257 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "\u001b[0m2025-01-16 18:22:31.765 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", "\n", - "\u001b[0m2024-04-23 22:27:38.257 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "\u001b[0m2025-01-16 18:22:31.765 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", "\n", - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2008] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2016] Graph execution finished.\n", "\n", - "[info] [gxf_executor.cpp:275] Destroying context\n", + "[info] [gxf_executor.cpp:284] Destroying context\n", "\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "\n", @@ -1907,7 +2145,7 @@ "\n", "Data type of output post conversion: , max = 91\n", "\n", - "[2024-04-23 15:27:38,526] [INFO] (common) - Container 'dazzling_kowalevski'(94febd6eabce) exited.\n" + "[2025-01-16 10:22:32,099] [INFO] (common) - Container 'quizzical_meitner'(cbedd97d041f) exited.\n" ] } ], @@ -1919,22 +2157,30 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 27, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_2020944/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + " io.imshow(output_image)\n" + ] + }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 54, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1952,7 +2198,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 ('.venv': venv)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -1967,11 +2213,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" - }, - "vscode": { - "interpreter": { - "hash": "9b4ab1155d0cd1042497eb40fd55b2d15caf4b3c0f9fbfcc7ba4404045d40f12" - } } }, "nbformat": 4, diff --git a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb index 60e6a2d5..7dc6bc3a 100644 --- a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb +++ b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -28,12 +28,12 @@ "output_type": "stream", "text": [ "Cloning into 'source'...\n", - "remote: Enumerating objects: 277, done.\u001b[K\n", - "remote: Counting objects: 100% (277/277), done.\u001b[K\n", - "remote: Compressing objects: 100% (222/222), done.\u001b[K\n", - "remote: Total 277 (delta 55), reused 159 (delta 33), pack-reused 0\u001b[K\n", - "Receiving objects: 100% (277/277), 1.44 MiB | 10.45 MiB/s, done.\n", - "Resolving deltas: 100% (55/55), done.\n" + "remote: Enumerating objects: 280, done.\u001b[K\n", + "remote: Counting objects: 100% (280/280), done.\u001b[K\n", + "remote: Compressing objects: 100% (225/225), done.\u001b[K\n", + "remote: Total 280 (delta 59), reused 154 (delta 33), pack-reused 0 (from 0)\u001b[K\n", + "Receiving objects: 100% (280/280), 1.40 MiB | 4.93 MiB/s, done.\n", + "Resolving deltas: 100% (59/59), done.\n" ] } ], @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -70,45 +70,39 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (0.5.1+18.gea0c032.dirty)\n", + "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (2.0.0)\n", "Requirement already satisfied: numpy>=1.21.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (1.26.4)\n", - "Requirement already satisfied: holoscan~=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (2.0.0)\n", + "Requirement already satisfied: holoscan~=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (2.8.0)\n", "Requirement already satisfied: colorama>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (0.4.6)\n", - "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.2.1)\n", - "Requirement already satisfied: pip>=20.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (24.0)\n", - "Requirement already satisfied: cupy-cuda12x==12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (12.2.0)\n", - "Requirement already satisfied: cloudpickle==2.2.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (2.2.1)\n", - "Requirement already satisfied: python-on-whales==0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.60.1)\n", - "Requirement already satisfied: Jinja2==3.1.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.3)\n", - "Requirement already satisfied: packaging==23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (23.1)\n", - "Requirement already satisfied: pyyaml==6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.0)\n", - "Requirement already satisfied: requests==2.31.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (2.31.0)\n", - "Requirement already satisfied: psutil==5.9.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (5.9.6)\n", - "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.0.5)\n", - "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk) (0.8.2)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk) (2.1.5)\n", - "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.10.15)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (4.66.2)\n", - "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.12.3)\n", - "Requirement already satisfied: typing-extensions in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (4.11.0)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.7)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2.2.1)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2024.2.2)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk) (3.13.4)\n", - "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (8.1.7)\n", - "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.5.4)\n", - "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (13.7.1)\n", - "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (3.0.0)\n", - "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (2.17.2)\n", - "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.1.2)\n" + "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.4.1)\n", + "Requirement already satisfied: pip>22.0.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (24.3.1)\n", + "Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (13.3.0)\n", + "Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.1)\n", + "Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.75.1)\n", + "Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.5)\n", + "Requirement already satisfied: packaging>=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (24.2)\n", + "Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.0.2)\n", + "Requirement already satisfied: requests<3.0,>=2.31.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (2.32.3)\n", + "Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.1.1)\n", + "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.0.6)\n", + "Requirement already satisfied: typing-extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.12.2)\n", + "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk) (0.8.3)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk) (3.0.2)\n", + "Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (2.10.5)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.4.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2.3.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2024.12.14)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk) (3.16.1)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.27.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (2.27.2)\n" ] } ], @@ -126,40 +120,38 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: monai in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (1.3.0)\n", - "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (10.3.0)\n", - "Requirement already satisfied: numpy>=1.20 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (1.26.4)\n", - "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.0.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.13.4)\n", - "Requirement already satisfied: typing-extensions in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.11.0)\n", - "Requirement already satisfied: sympy in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (1.12)\n", - "Requirement already satisfied: networkx in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1)\n", - "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.3)\n", - "Requirement already satisfied: nvidia-cuda-nvrtc-cu11==11.7.99 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.99)\n", - "Requirement already satisfied: nvidia-cuda-runtime-cu11==11.7.99 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.99)\n", - "Requirement already satisfied: nvidia-cuda-cupti-cu11==11.7.101 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.101)\n", - "Requirement already satisfied: nvidia-cudnn-cu11==8.5.0.96 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (8.5.0.96)\n", - "Requirement already satisfied: nvidia-cublas-cu11==11.10.3.66 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.10.3.66)\n", - "Requirement already satisfied: nvidia-cufft-cu11==10.9.0.58 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (10.9.0.58)\n", - "Requirement already satisfied: nvidia-curand-cu11==10.2.10.91 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (10.2.10.91)\n", - "Requirement already satisfied: nvidia-cusolver-cu11==11.4.0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.4.0.1)\n", - "Requirement already satisfied: nvidia-cusparse-cu11==11.7.4.91 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.4.91)\n", - "Requirement already satisfied: nvidia-nccl-cu11==2.14.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2.14.3)\n", - "Requirement already satisfied: nvidia-nvtx-cu11==11.7.91 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.7.91)\n", - "Requirement already satisfied: triton==2.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2.0.0)\n", - "Requirement already satisfied: setuptools in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.9->monai) (69.5.1)\n", - "Requirement already satisfied: wheel in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch>=1.9->monai) (0.43.0)\n", - "Requirement already satisfied: cmake in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from triton==2.0.0->torch>=1.9->monai) (3.29.2)\n", - "Requirement already satisfied: lit in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from triton==2.0.0->torch>=1.9->monai) (18.1.3)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from jinja2->torch>=1.9->monai) (2.1.5)\n", - "Requirement already satisfied: mpmath>=0.19 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from sympy->torch>=1.9->monai) (1.3.0)\n" + "Requirement already satisfied: monai in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (1.4.0)\n", + "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (11.1.0)\n", + "Requirement already satisfied: numpy<2.0,>=1.24 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (1.26.4)\n", + "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.5.1)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.16.1)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.12.2)\n", + "Requirement already satisfied: networkx in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.4.2)\n", + "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.5)\n", + "Requirement already satisfied: fsspec in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2024.12.0)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", + "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", + "Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (9.1.0.70)\n", + "Requirement already satisfied: nvidia-cublas-cu12==12.4.5.8 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.5.8)\n", + "Requirement already satisfied: nvidia-cufft-cu12==11.2.1.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.2.1.3)\n", + "Requirement already satisfied: nvidia-curand-cu12==10.3.5.147 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (10.3.5.147)\n", + "Requirement already satisfied: nvidia-cusolver-cu12==11.6.1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.6.1.9)\n", + "Requirement already satisfied: nvidia-cusparse-cu12==12.3.1.170 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.3.1.170)\n", + "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2.21.5)\n", + "Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", + "Requirement already satisfied: nvidia-nvjitlink-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", + "Requirement already satisfied: triton==3.1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.0)\n", + "Requirement already satisfied: sympy==1.13.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (1.13.1)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from sympy==1.13.1->torch>=1.9->monai) (1.3.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from jinja2->torch>=1.9->monai) (3.0.2)\n" ] } ], @@ -174,46 +166,48 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Download/Extract mednist_classifier_data.zip from Google Drive" + "## Download/Extract mednist_classifier_data.zip from Google Drive\n", + "\n", + "**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing). Please download zip file, `mednist_classifier_data.zip` in the `medmist_classifier_app` folder, to the same folder as the notebook example." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", + "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.2.0)\n", "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.4)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.7)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.2.1)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.16.1)\n", + "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.32.3)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.67.1)\n", + "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.6)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.4.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.3.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.12.14)\n", "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", "Downloading...\n", - "From (original): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E\n", - "From (redirected): https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E&confirm=t&uuid=72f2b083-c6ce-44ba-aafd-19c9bd097d63\n", + "From (original): https://drive.google.com/uc?id=1IoEJZFFixcNtPPKeKZfD_xSJSFQCbawl\n", + "From (redirected): https://drive.google.com/uc?id=1IoEJZFFixcNtPPKeKZfD_xSJSFQCbawl&confirm=t&uuid=d65df8b8-9813-4fd7-9d5c-c3a7a18fbab0\n", "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_classifier_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 28.6M/28.6M [00:00<00:00, 34.3MB/s]\n" + "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 28.6M/28.6M [00:00<00:00, 36.7MB/s]\n" ] } ], "source": [ "# Download mednist_classifier_data.zip\n", - "!pip install gdown \n", - "!gdown \"https://drive.google.com/uc?id=1yJ4P-xMNEfN6lIOq_u6x1eMAq1_MJu-E\"" + "!pip install gdown\n", + "!gdown \"https://drive.google.com/uc?id=1IoEJZFFixcNtPPKeKZfD_xSJSFQCbawl\" # Redundant if already manually downloaded the file to avoid permission issue." ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -228,7 +222,7 @@ } ], "source": [ - "# Unzip the downloaded mednist_classifier_data.zip from the web browser or using gdown, and set up folders\n", + "# Unzip the downloaded mednist_classifier_data.zip from the web browser or using gdown, to the notebook/turotials folder, and set up folders\n", "input_folder = \"input\"\n", "output_folder = \"output\"\n", "models_folder = \"models\"\n", @@ -253,7 +247,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -289,23 +283,23 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 15:33:53,163] [INFO] (common) - Downloading CLI manifest file...\n", - "[2024-04-23 15:33:53,444] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2024-04-23 15:33:53,446] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", - "[2024-04-23 15:33:53,446] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2024-04-23 15:33:53,447] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2024-04-23 15:33:53,447] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2024-04-23 15:33:53,447] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", - "[2024-04-23 15:33:53,453] [INFO] (packager) - Generating app.json...\n", - "[2024-04-23 15:33:53,453] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-23 15:33:53,464] [DEBUG] (common) - \n", + "[2025-01-16 15:25:15,655] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-16 15:25:15,916] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-16 15:25:15,917] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", + "[2025-01-16 15:25:15,917] [INFO] (packager.parameters) - Detected application type: Python File\n", + "[2025-01-16 15:25:15,918] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-01-16 15:25:15,918] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-01-16 15:25:15,918] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", + "[2025-01-16 15:25:15,924] [INFO] (packager) - Generating app.json...\n", + "[2025-01-16 15:25:15,924] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-16 15:25:15,928] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -333,14 +327,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.5.1\",\n", + " \"sdkVersion\": \"2.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2024-04-23 15:33:53,465] [DEBUG] (common) - \n", + "[2025-01-16 15:25:15,928] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -360,15 +354,116 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-23 15:33:53,510] [DEBUG] (packager.builder) - \n", + "[2025-01-16 15:25:15,966] [DEBUG] (packager.builder) - \n", + "========== Begin Build Parameters ==========\n", + "{'additional_lib_paths': '',\n", + " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml'),\n", + " 'app_dir': PosixPath('/opt/holoscan/app'),\n", + " 'app_json': '/etc/holoscan/app.json',\n", + " 'application': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py'),\n", + " 'application_directory': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy'),\n", + " 'application_type': 'PythonFile',\n", + " 'build_cache': PosixPath('/home/mqin/.holoscan_build_cache'),\n", + " 'cmake_args': '',\n", + " 'command': '[\"python3\", '\n", + " '\"/opt/holoscan/app/mednist_classifier_monaideploy.py\"]',\n", + " 'command_filename': 'mednist_classifier_monaideploy.py',\n", + " 'config_file_path': PosixPath('/var/holoscan/app.yaml'),\n", + " 'docs_dir': PosixPath('/opt/holoscan/docs'),\n", + " 'full_input_path': PosixPath('/var/holoscan/input'),\n", + " 'full_output_path': PosixPath('/var/holoscan/output'),\n", + " 'gid': 1000,\n", + " 'holoscan_sdk_version': '2.8.0',\n", + " 'includes': [],\n", + " 'input_dir': 'input/',\n", + " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", + " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", + " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", + " 'models_dir': PosixPath('/opt/holoscan/models'),\n", + " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'no_cache': False,\n", + " 'output_dir': 'output/',\n", + " 'pip_packages': None,\n", + " 'pkg_json': '/etc/holoscan/pkg.json',\n", + " 'requirements_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/requirements.txt'),\n", + " 'sdk': ,\n", + " 'sdk_type': 'monai-deploy',\n", + " 'tarball_output': None,\n", + " 'timeout': 0,\n", + " 'title': 'MONAI Deploy App Package - MedNIST Classifier App',\n", + " 'uid': 1000,\n", + " 'username': 'holoscan',\n", + " 'version': 1.0,\n", + " 'working_dir': PosixPath('/var/holoscan')}\n", + "=========== End Build Parameters ===========\n", + "\n", + "[2025-01-16 15:25:15,967] [DEBUG] (packager.builder) - \n", + "========== Begin Platform Parameters ==========\n", + "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", + " 'build_image': None,\n", + " 'cuda_deb_arch': 'x86_64',\n", + " 'custom_base_image': False,\n", + " 'custom_holoscan_sdk': False,\n", + " 'custom_monai_deploy_sdk': False,\n", + " 'gpu_type': 'dgpu',\n", + " 'holoscan_deb_arch': 'amd64',\n", + " 'holoscan_sdk_file': '2.8.0',\n", + " 'holoscan_sdk_filename': '2.8.0',\n", + " 'monai_deploy_sdk_file': None,\n", + " 'monai_deploy_sdk_filename': None,\n", + " 'tag': 'mednist_app:1.0',\n", + " 'target_arch': 'x86_64'}\n", + "=========== End Platform Parameters ===========\n", + "\n", + "[2025-01-16 15:25:16,013] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", + "ARG GPU_TYPE=dgpu\n", + "\n", + "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", + "FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04 AS base\n", + "\n", + "RUN apt-get update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " curl \\\n", + " jq \\\n", + " && rm -rf /var/lib/apt/lists/*\n", + "\n", + "\n", + "\n", + "\n", + "# FROM base AS mofed-installer\n", + "# ARG MOFED_VERSION=23.10-2.1.3.1\n", + "\n", + "# # In a container, we only need to install the user space libraries, though the drivers are still\n", + "# # needed on the host.\n", + "# # Note: MOFED's installation is not easily portable, so we can't copy the output of this stage\n", + "# # to our final stage, but must inherit from it. For that reason, we keep track of the build/install\n", + "# # only dependencies in the `MOFED_DEPS` variable (parsing the output of `--check-deps-only`) to\n", + "# # remove them in that same layer, to ensure they are not propagated in the final image.\n", + "# WORKDIR /opt/nvidia/mofed\n", + "# ARG MOFED_INSTALL_FLAGS=\"--dpdk --with-mft --user-space-only --force --without-fw-update\"\n", + "# RUN UBUNTU_VERSION=$(cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d= -f2) \\\n", + "# && OFED_PACKAGE=\"MLNX_OFED_LINUX-${MOFED_VERSION}-ubuntu${UBUNTU_VERSION}-$(uname -m)\" \\\n", + "# && curl -S -# -o ${OFED_PACKAGE}.tgz -L \\\n", + "# https://www.mellanox.com/downloads/ofed/MLNX_OFED-${MOFED_VERSION}/${OFED_PACKAGE}.tgz \\\n", + "# && tar xf ${OFED_PACKAGE}.tgz \\\n", + "# && MOFED_INSTALLER=$(find . -name mlnxofedinstall -type f -executable -print) \\\n", + "# && MOFED_DEPS=$(${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} --check-deps-only 2>/dev/null | tail -n1 | cut -d' ' -f3-) \\\n", + "# && apt-get update \\\n", + "# && apt-get install --no-install-recommends -y ${MOFED_DEPS} \\\n", + "# && ${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} \\\n", + "# && rm -r * \\\n", + "# && apt-get remove -y ${MOFED_DEPS} && apt-get autoremove -y \\\n", + "# && rm -rf /var/lib/apt/lists/*\n", + "\n", + "FROM base AS release\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", "\n", + "ARG GPU_TYPE\n", "ARG UNAME\n", "ARG UID\n", "ARG GID\n", @@ -380,15 +475,14 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\"\n", "LABEL tag=\"mednist_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.0.0\"\n", - "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "LABEL org.nvidia.holoscan=\"2.8.0\"\n", "\n", + "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", "\n", - "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", "ENV HOLOSCAN_WORKDIR=/var/holoscan\n", @@ -400,21 +494,40 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV PATH=/root/.local/bin:/opt/nvidia/holoscan:$PATH\n", - "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/libtorch/1.13.1/lib/:/opt/nvidia/holoscan/lib\n", + "ENV HOLOSCAN_VERSION=2.8.0\n", "\n", - "RUN apt-get update \\\n", - " && apt-get install -y curl jq \\\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# If torch is installed, we can skip installing Python\n", + "ENV PYTHON_VERSION=3.10.6-1~22.04\n", + "ENV PYTHON_PIP_VERSION=22.0.2+dfsg-*\n", + "\n", + "RUN apt update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " python3-minimal=${PYTHON_VERSION} \\\n", + " libpython3-stdlib=${PYTHON_VERSION} \\\n", + " python3=${PYTHON_VERSION} \\\n", + " python3-venv=${PYTHON_VERSION} \\\n", + " python3-pip=${PYTHON_PIP_VERSION} \\\n", " && rm -rf /var/lib/apt/lists/*\n", "\n", - "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", - "RUN chown -R holoscan /var/holoscan \n", - "RUN chown -R holoscan /var/holoscan/input \n", - "RUN chown -R holoscan /var/holoscan/output \n", + "RUN chown -R holoscan /var/holoscan && \\\n", + " chown -R holoscan /var/holoscan/input && \\\n", + " chown -R holoscan /var/holoscan/output\n", "\n", "# Set the working directory\n", "WORKDIR /var/holoscan\n", @@ -423,431 +536,216 @@ "COPY ./tools /var/holoscan/tools\n", "RUN chmod +x /var/holoscan/tools\n", "\n", - "\n", - "# Copy gRPC health probe\n", + "# Set the working directory\n", + "WORKDIR /var/holoscan\n", "\n", "USER $UNAME\n", "\n", - "ENV PATH=/root/.local/bin:/home/holoscan/.local/bin:/opt/nvidia/holoscan:$PATH\n", + "ENV PATH=/home/${UNAME}/.local/bin:/opt/nvidia/holoscan/bin:$PATH\n", + "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/${UNAME}/.local/lib/python3.10/site-packages/holoscan/lib\n", "\n", "COPY ./pip/requirements.txt /tmp/requirements.txt\n", "\n", "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - " \n", - "# MONAI Deploy\n", "\n", - "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "# Install MONAI Deploy App SDK\n", + "\n", + "# Install MONAI Deploy from PyPI org\n", + "RUN pip install monai-deploy-app-sdk==2.0.0\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", "\n", + "\n", "COPY ./map/app.json /etc/holoscan/app.json\n", "COPY ./app.config /var/holoscan/app.yaml\n", "COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "\n", "COPY ./app /opt/holoscan/app\n", "\n", + "\n", "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-23 15:33:53,510] [INFO] (packager.builder) - \n", + "[2025-01-16 15:25:16,014] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + " Base Image: nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + " Holoscan SDK Package: 2.8.0\n", + " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.0.0\n", + " SDK Version: 2.8.0\n", " SDK: monai-deploy\n", " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + " Included features/dependencies: N/A\n", " \n", - "[2024-04-23 15:33:53,781] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-23 15:33:53,782] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-01-16 15:25:16,839] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-16 15:25:16,840] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.67kB done\n", - "#1 DONE 0.0s\n", + "#1 transferring dockerfile:\n", + "#1 transferring dockerfile: 4.57kB 0.0s done\n", + "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#2 DONE 0.1s\n", + "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#2 DONE 0.0s\n", "\n", - "#3 [internal] load .dockerignore\n", - "#3 transferring context: 1.79kB done\n", - "#3 DONE 0.0s\n", + "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#3 DONE 0.4s\n", "\n", - "#4 [internal] load build context\n", - "#4 DONE 0.0s\n", + "#4 [internal] load .dockerignore\n", + "#4 transferring context: 1.79kB done\n", + "#4 DONE 0.1s\n", "\n", - "#5 importing cache manifest from local:3840576277762201667\n", - "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", - "#5 DONE 0.0s\n", + "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#5 ...\n", "\n", - "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.0s done\n", + "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#7 DONE 0.4s\n", + "#7 importing cache manifest from local:17114664432413636321\n", + "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#7 DONE 0.0s\n", + "\n", + "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", + "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", + "#8 DONE 0.1s\n", "\n", - "#4 [internal] load build context\n", - "#4 transferring context: 28.73MB 0.2s done\n", - "#4 DONE 0.2s\n", + "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#5 DONE 0.8s\n", "\n", - "#8 [10/21] COPY ./tools /var/holoscan/tools\n", - "#8 CACHED\n", + "#6 [internal] load build context\n", + "#6 transferring context: 28.60MB 0.2s done\n", + "#6 DONE 0.3s\n", "\n", - "#9 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#9 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#9 CACHED\n", "\n", - "#10 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#10 [release 6/18] WORKDIR /var/holoscan\n", "#10 CACHED\n", "\n", - "#11 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", + "#11 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#11 CACHED\n", "\n", - "#12 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#12 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#12 CACHED\n", "\n", - "#13 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#13 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#13 CACHED\n", "\n", - "#14 [ 9/21] WORKDIR /var/holoscan\n", + "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#14 CACHED\n", "\n", - "#15 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#15 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#15 CACHED\n", "\n", - "#16 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", + "#16 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#16 CACHED\n", "\n", - "#17 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#17 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#17 CACHED\n", "\n", - "#18 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#18 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#18 CACHED\n", "\n", - "#19 [13/21] RUN pip install --upgrade pip\n", + "#19 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#19 CACHED\n", "\n", - "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#20 0.770 Collecting monai>=1.2.0 (from -r /tmp/requirements.txt (line 1))\n", - "#20 0.845 Downloading monai-1.3.0-202310121228-py3-none-any.whl.metadata (10 kB)\n", - "#20 1.064 Collecting Pillow>=8.4.0 (from -r /tmp/requirements.txt (line 2))\n", - "#20 1.068 Downloading pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.2 kB)\n", - "#20 1.168 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 3))\n", - "#20 1.179 Downloading pydicom-2.4.4-py3-none-any.whl.metadata (7.8 kB)\n", - "#20 1.292 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 4))\n", - "#20 1.299 Downloading highdicom-0.22.0-py3-none-any.whl.metadata (3.8 kB)\n", - "#20 1.417 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 5))\n", - "#20 1.422 Downloading SimpleITK-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#20 1.424 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#20 1.492 Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.10/dist-packages (from monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (1.23.5)\n", - "#20 1.536 Collecting torch>=1.9 (from monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 1.541 Downloading torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl.metadata (26 kB)\n", - "#20 1.728 Collecting pillow-jpls>=1.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 4))\n", - "#20 1.808 Downloading pillow_jpls-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.1 kB)\n", - "#20 1.882 Collecting filelock (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 1.886 Downloading filelock-3.13.4-py3-none-any.whl.metadata (2.8 kB)\n", - "#20 1.912 Collecting typing-extensions>=4.8.0 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 1.915 Downloading typing_extensions-4.11.0-py3-none-any.whl.metadata (3.0 kB)\n", - "#20 1.942 Collecting sympy (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 1.946 Downloading sympy-1.12-py3-none-any.whl.metadata (12 kB)\n", - "#20 1.976 Collecting networkx (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 1.980 Downloading networkx-3.3-py3-none-any.whl.metadata (5.1 kB)\n", - "#20 1.982 Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (3.1.3)\n", - "#20 2.021 Collecting fsspec (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.025 Downloading fsspec-2024.3.1-py3-none-any.whl.metadata (6.8 kB)\n", - "#20 2.045 Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.050 Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.073 Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.077 Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.095 Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.099 Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", - "#20 2.117 Collecting nvidia-cudnn-cu12==8.9.2.26 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.120 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", - "#20 2.136 Collecting nvidia-cublas-cu12==12.1.3.1 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.139 Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.155 Collecting nvidia-cufft-cu12==11.0.2.54 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.158 Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.172 Collecting nvidia-curand-cu12==10.3.2.106 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.175 Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.193 Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.197 Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", - "#20 2.214 Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.218 Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", - "#20 2.233 Collecting nvidia-nccl-cu12==2.19.3 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.238 Downloading nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl.metadata (1.8 kB)\n", - "#20 2.258 Collecting nvidia-nvtx-cu12==12.1.105 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.262 Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.7 kB)\n", - "#20 2.286 Collecting triton==2.2.0 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.291 Downloading triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#20 2.327 Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.336 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.404 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1)) (2.1.3)\n", - "#20 2.442 Collecting mpmath>=0.19 (from sympy->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", - "#20 2.446 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#20 2.469 Downloading monai-1.3.0-202310121228-py3-none-any.whl (1.3 MB)\n", - "#20 2.504 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 48.0 MB/s eta 0:00:00\n", - "#20 2.510 Downloading pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#20 2.559 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 104.0 MB/s eta 0:00:00\n", - "#20 2.683 Downloading pydicom-2.4.4-py3-none-any.whl (1.8 MB)\n", - "#20 2.704 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 104.8 MB/s eta 0:00:00\n", - "#20 2.710 Downloading highdicom-0.22.0-py3-none-any.whl (825 kB)\n", - "#20 2.719 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 825.0/825.0 kB 133.9 MB/s eta 0:00:00\n", - "#20 2.728 Downloading SimpleITK-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.7 MB)\n", - "#20 3.239 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.7/52.7 MB 115.0 MB/s eta 0:00:00\n", - "#20 3.245 Downloading pillow_jpls-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (305 kB)\n", - "#20 3.249 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 305.6/305.6 kB 225.9 MB/s eta 0:00:00\n", - "#20 3.254 Downloading torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl (755.5 MB)\n", - "#20 10.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 755.5/755.5 MB 116.7 MB/s eta 0:00:00\n", - "#20 10.48 Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", - "#20 14.42 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 410.6/410.6 MB 113.5 MB/s eta 0:00:00\n", - "#20 14.43 Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", - "#20 14.59 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.1/14.1 MB 82.1 MB/s eta 0:00:00\n", - "#20 14.60 Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", - "#20 14.90 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 23.7/23.7 MB 56.1 MB/s eta 0:00:00\n", - "#20 14.90 Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", - "#20 14.91 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 823.6/823.6 kB 161.9 MB/s eta 0:00:00\n", - "#20 14.92 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n", - "#20 22.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 731.7/731.7 MB 27.6 MB/s eta 0:00:00\n", - "#20 22.58 Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", - "#20 23.73 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.6/121.6 MB 116.1 MB/s eta 0:00:00\n", - "#20 23.74 Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", - "#20 24.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.5/56.5 MB 72.6 MB/s eta 0:00:00\n", - "#20 24.30 Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", - "#20 25.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 124.2/124.2 MB 121.6 MB/s eta 0:00:00\n", - "#20 25.48 Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", - "#20 27.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 196.0/196.0 MB 112.9 MB/s eta 0:00:00\n", - "#20 27.65 Downloading nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl (166.0 MB)\n", - "#20 30.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 166.0/166.0 MB 24.2 MB/s eta 0:00:00\n", - "#20 30.17 Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", - "#20 30.18 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.1/99.1 kB 124.9 MB/s eta 0:00:00\n", - "#20 30.18 Downloading triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (167.9 MB)\n", - "#20 31.71 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 167.9/167.9 MB 117.2 MB/s eta 0:00:00\n", - "#20 31.72 Downloading typing_extensions-4.11.0-py3-none-any.whl (34 kB)\n", - "#20 31.72 Downloading filelock-3.13.4-py3-none-any.whl (11 kB)\n", - "#20 31.73 Downloading fsspec-2024.3.1-py3-none-any.whl (171 kB)\n", - "#20 31.73 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 172.0/172.0 kB 289.9 MB/s eta 0:00:00\n", - "#20 31.73 Downloading networkx-3.3-py3-none-any.whl (1.7 MB)\n", - "#20 31.75 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 135.8 MB/s eta 0:00:00\n", - "#20 31.75 Downloading sympy-1.12-py3-none-any.whl (5.7 MB)\n", - "#20 31.81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 MB 104.1 MB/s eta 0:00:00\n", - "#20 31.81 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#20 31.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 207.8 MB/s eta 0:00:00\n", - "#20 32.03 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#20 32.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 112.2 MB/s eta 0:00:00\n", - "#20 39.25 Installing collected packages: SimpleITK, mpmath, typing-extensions, sympy, pydicom, Pillow, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, networkx, fsspec, filelock, triton, pillow-jpls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12, highdicom, torch, monai\n", - "#20 82.08 Successfully installed Pillow-10.3.0 SimpleITK-2.3.1 filelock-3.13.4 fsspec-2024.3.1 highdicom-0.22.0 monai-1.3.0 mpmath-1.3.0 networkx-3.3 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.19.3 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.1.105 pillow-jpls-1.3.2 pydicom-2.4.4 sympy-1.12 torch-2.2.2 triton-2.2.0 typing-extensions-4.11.0\n", - "#20 DONE 84.1s\n", - "\n", - "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#21 DONE 0.3s\n", - "\n", - "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#22 0.474 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.542 Processing /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#22 0.554 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.23.5)\n", - "#22 0.676 Collecting holoscan~=2.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 0.744 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (6.7 kB)\n", - "#22 0.816 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 0.820 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 0.892 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 0.896 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 0.935 Requirement already satisfied: pip>=20.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (24.0)\n", - "#22 0.936 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (12.2.0)\n", - "#22 0.937 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", - "#22 0.937 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.60.1)\n", - "#22 0.938 Requirement already satisfied: Jinja2==3.1.3 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.1.3)\n", - "#22 0.939 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (23.1)\n", - "#22 0.940 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (6.0)\n", - "#22 0.940 Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.31.0)\n", - "#22 0.941 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (5.9.6)\n", - "#22 0.975 Collecting wheel-axle-runtime<1.0 (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 0.979 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", - "#22 1.016 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.8.2)\n", - "#22 1.019 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.1.3)\n", - "#22 1.031 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.10.15)\n", - "#22 1.032 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.66.2)\n", - "#22 1.032 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.12.3)\n", - "#22 1.033 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.11.0)\n", - "#22 1.042 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.3.2)\n", - "#22 1.043 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.7)\n", - "#22 1.043 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", - "#22 1.044 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2024.2.2)\n", - "#22 1.061 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.13.4)\n", - "#22 1.081 Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (8.1.7)\n", - "#22 1.082 Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.5.4)\n", - "#22 1.083 Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (13.7.1)\n", - "#22 1.120 Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.0.0)\n", - "#22 1.121 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.17.2)\n", - "#22 1.143 Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.1.2)\n", - "#22 1.157 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.181 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.2 MB)\n", - "#22 1.668 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.2/33.2 MB 36.8 MB/s eta 0:00:00\n", - "#22 1.673 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", - "#22 1.696 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", - "#22 2.029 Installing collected packages: wheel-axle-runtime, typeguard, colorama, holoscan, monai-deploy-app-sdk\n", - "#22 2.773 Successfully installed colorama-0.4.6 holoscan-2.0.0 monai-deploy-app-sdk-0.5.1+20.gb869749.dirty typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", - "#22 DONE 3.3s\n", - "\n", - "#23 [17/21] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.3s\n", - "\n", - "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", - "#25 DONE 0.1s\n", - "\n", - "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#26 DONE 0.1s\n", - "\n", - "#27 [21/21] COPY ./app /opt/holoscan/app\n", - "#27 DONE 0.1s\n", + "#20 [release 11/18] RUN pip install --upgrade pip\n", + "#20 CACHED\n", + "\n", + "#21 [release 9/18] WORKDIR /var/holoscan\n", + "#21 CACHED\n", + "\n", + "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", + "#22 CACHED\n", + "\n", + "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", + "#23 DONE 0.6s\n", + "\n", + "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", + "#24 DONE 0.2s\n", + "\n", + "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", + "#25 DONE 0.2s\n", + "\n", + "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 DONE 0.2s\n", + "\n", + "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", + "#27 DONE 0.2s\n", "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 152.5s done\n", - "#28 exporting manifest sha256:c70218a06b33b272ca2399e48c3804a3632c64ad2026e95b55d9ddae0cae7e74 0.0s done\n", - "#28 exporting config sha256:553a0ca99a2e26fc278babfe7ad247254fbaeadbc8cbad3e0053f4aede0c3aae 0.0s done\n", + "#28 exporting layers 1.9s done\n", + "#28 exporting manifest sha256:afbc907fa0a369a2f16f26a77411e7649a79063efffcf7cf5adad38183291b94 0.0s done\n", + "#28 exporting config sha256:5c1b6f89e061f5f67b24c8cf506f572b2c000c5585b641a9c46ebe77dbc76788 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer 072c1594ab9f 557.06kB / 2.90GB\n", - "#29 loading layer 072c1594ab9f 108.63MB / 2.90GB 6.2s\n", - "#29 loading layer 072c1594ab9f 317.52MB / 2.90GB 10.3s\n", - "#29 loading layer 072c1594ab9f 514.72MB / 2.90GB 14.5s\n", - "#29 loading layer 072c1594ab9f 706.90MB / 2.90GB 18.6s\n", - "#29 loading layer 072c1594ab9f 889.06MB / 2.90GB 22.7s\n", - "#29 loading layer 072c1594ab9f 1.09GB / 2.90GB 26.8s\n", - "#29 loading layer 072c1594ab9f 1.32GB / 2.90GB 31.0s\n", - "#29 loading layer 072c1594ab9f 1.52GB / 2.90GB 35.1s\n", - "#29 loading layer 072c1594ab9f 1.76GB / 2.90GB 39.2s\n", - "#29 loading layer 072c1594ab9f 1.95GB / 2.90GB 43.3s\n", - "#29 loading layer 072c1594ab9f 1.98GB / 2.90GB 50.1s\n", - "#29 loading layer 072c1594ab9f 2.13GB / 2.90GB 56.3s\n", - "#29 loading layer 072c1594ab9f 2.32GB / 2.90GB 60.5s\n", - "#29 loading layer 072c1594ab9f 2.54GB / 2.90GB 64.6s\n", - "#29 loading layer 072c1594ab9f 2.73GB / 2.90GB 68.8s\n", - "#29 loading layer 072c1594ab9f 2.90GB / 2.90GB 75.0s\n", - "#29 loading layer f11aaa8e87ac 32.77kB / 125.83kB\n", - "#29 loading layer fa504599989c 557.06kB / 67.36MB\n", - "#29 loading layer 671fce7ea0e7 262.14kB / 25.59MB\n", - "#29 loading layer 1c0f42dfa575 514B / 514B\n", - "#29 loading layer 6fb8bbe7fb20 698B / 698B\n", - "#29 loading layer 2903a6d1ea2e 300B / 300B\n", - "#29 loading layer 1602070f430e 4.17kB / 4.17kB\n", - "#29 loading layer fa504599989c 557.06kB / 67.36MB 3.3s done\n", - "#29 loading layer 072c1594ab9f 2.90GB / 2.90GB 78.6s done\n", - "#29 loading layer f11aaa8e87ac 32.77kB / 125.83kB 3.4s done\n", - "#29 loading layer 671fce7ea0e7 262.14kB / 25.59MB 1.4s done\n", - "#29 loading layer 1c0f42dfa575 514B / 514B 1.0s done\n", - "#29 loading layer 6fb8bbe7fb20 698B / 698B 0.9s done\n", - "#29 loading layer 2903a6d1ea2e 300B / 300B 0.9s done\n", - "#29 loading layer 1602070f430e 4.17kB / 4.17kB 0.8s done\n", - "#29 DONE 78.6s\n", + "#29 loading layer dd1c2998eccf 262.14kB / 25.59MB\n", + "#29 loading layer a8f3aa43fe53 512B / 512B\n", + "#29 loading layer 5be43d70908a 696B / 696B\n", + "#29 loading layer 74efae286fce 299B / 299B\n", + "#29 loading layer 68ee590555d3 4.17kB / 4.17kB\n", + "#29 loading layer 68ee590555d3 4.17kB / 4.17kB 0.4s done\n", + "#29 loading layer dd1c2998eccf 262.14kB / 25.59MB 0.9s done\n", + "#29 loading layer a8f3aa43fe53 512B / 512B 0.5s done\n", + "#29 loading layer 5be43d70908a 696B / 696B 0.5s done\n", + "#29 loading layer 74efae286fce 299B / 299B 0.4s done\n", + "#29 DONE 0.9s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 119.9s done\n", - "#28 DONE 272.5s\n", + "#28 sending tarball 50.5s done\n", + "#28 DONE 52.5s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015\n", - "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", - "#30 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", - "#30 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", - "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", - "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", - "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#30 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", - "#30 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", - "#30 writing layer sha256:2070dbb5e4fec1f79111a1b9934b95a4bda91fff6888840d2e53b48b655f352d\n", - "#30 writing layer sha256:2070dbb5e4fec1f79111a1b9934b95a4bda91fff6888840d2e53b48b655f352d 1.3s done\n", - "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2\n", - "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", - "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#30 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", - "#30 writing layer sha256:2f868c17ea0c13f86d79c6ea231aa9677089aa72e290ec3b95f9983f46048136 0.0s done\n", - "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", - "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", - "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", - "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", - "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", + "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff\n", + "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff 0.0s done\n", + "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#30 writing layer sha256:41e173df84c503c9e717e0e67c22260d4e6bb14660577b225dec5733b4155a78 done\n", + "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:51d232f1f4212f460f268207affeab6246b2b60caf6d9f61b4fab22202848747 0.0s done\n", - "#30 writing layer sha256:53e291bdb605f68216b97e71175b5a348001546ff073083ae622feb044916445 done\n", - "#30 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", - "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", - "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#30 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", - "#30 writing layer sha256:5e622c7efc8f430c7e6928544ba87f94eac8a4127d711933a0bf49e6a76eda0c\n", - "#30 writing layer sha256:5e622c7efc8f430c7e6928544ba87f94eac8a4127d711933a0bf49e6a76eda0c 0.4s done\n", - "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631\n", - "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", - "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#30 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", - "#30 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", - "#30 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", - "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#30 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", - "#30 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", - "#30 writing layer sha256:826d794ef7ef68566c3eede8e80bca99b8e40994c5dea2079da82d7d429e0203 0.0s done\n", - "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", - "#30 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", - "#30 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", - "#30 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", - "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", - "#30 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", - "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", - "#30 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", - "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", - "#30 writing layer sha256:9bd8f1c975ca5c9efcdedc1e1a31269e8492195a76e73b95af8c0fc7c7d8a2c6\n", - "#30 writing layer sha256:9bd8f1c975ca5c9efcdedc1e1a31269e8492195a76e73b95af8c0fc7c7d8a2c6 46.2s done\n", - "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f\n", - "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#30 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", - "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", - "#30 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", - "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", - "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", - "#30 writing layer sha256:afa8073b7854514d2a2a4c91eb31250d02a8cbb6a4364c38d20219ed08dcdb13 done\n", - "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", - "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", - "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#30 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", - "#30 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", - "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#30 writing layer sha256:d0a18329aa85666501e304a488b966559ff54fab09dd36886f4ba1c97d9a3f4c 0.0s done\n", - "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#30 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", - "#30 writing layer sha256:de6e4313f5826cce8249354c2525b5a9acde7edea4ca02018e437c9b4de3d9fc 0.0s done\n", - "#30 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", - "#30 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", - "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", - "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#30 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", - "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#30 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", - "#30 writing config sha256:c5d7ca2ff9b60cb7174369608d683a7735902b5a315ccbd3661cdb01d19b7db3 0.0s done\n", - "#30 preparing build cache for export 48.8s done\n", - "#30 writing cache manifest sha256:43a5a705376a7f516f02e6223e10f78f54002aca9882c7de45970b0d70baa3e8 0.0s done\n", - "#30 DONE 48.8s\n", - "[2024-04-23 15:40:45,771] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#30 writing layer sha256:69a43436b2ce855cf28cf641ceb9106bf500f2cb12e3a07cbae366c79d72be7c\n", + "#30 writing layer sha256:69a43436b2ce855cf28cf641ceb9106bf500f2cb12e3a07cbae366c79d72be7c 0.5s done\n", + "#30 writing layer sha256:6cb8bb8a1d4ff0968b1928e3a7c2a7a5c29934ce062651403efa8169f1ef2f22\n", + "#30 writing layer sha256:6cb8bb8a1d4ff0968b1928e3a7c2a7a5c29934ce062651403efa8169f1ef2f22 done\n", + "#30 writing layer sha256:729bf790873c4425097dd140c6a8fc2f6b8f0a583c05665cfcdde34bcde55a71 0.0s done\n", + "#30 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707 done\n", + "#30 writing layer sha256:95d5aad5207ff23e9733fd253a606be845749054783466d8c9a3f73d0a2d25b8 0.0s done\n", + "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#30 writing layer sha256:9b72862f620f8b7b4f1fb1e44a1e06c5121b21f1ff5132364cc7cc00f883abd1 0.0s done\n", + "#30 writing layer sha256:a40bb4ae02b3d3fa186140aaca178144ef5d504f6581bcd05af95b357c082116 done\n", + "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#30 writing layer sha256:b3a705dd063a4b184f4ae8095ca2eba91e8aa4eb2a0a561b869c06d85ec83929\n", + "#30 preparing build cache for export 1.0s done\n", + "#30 writing layer sha256:b3a705dd063a4b184f4ae8095ca2eba91e8aa4eb2a0a561b869c06d85ec83929 0.0s done\n", + "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#30 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94 done\n", + "#30 writing layer sha256:c8937b741c9ecd6b257aeb18daf07eddbf1c77b0c93f9ba4164faa8353cd1d3c done\n", + "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#30 writing layer sha256:e540d242f419a27800d601d7275f4fbb3488b97d209b454f52e63f1eb413a912 done\n", + "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#30 writing layer sha256:fcb63189ed471f44270645dedc0ac5966ac9fa2ef705eb6d2678e7695ceebb95 done\n", + "#30 writing layer sha256:fd70b1234d70e071e4309175d0612d1ae9984e18bdaf1a1426dd218b747427bc done\n", + "#30 writing config sha256:e49757ae9f8e6f65b6803fe303ffd44430c2d32fdc429bc50c8b7262f20d89d0 0.0s done\n", + "#30 writing cache manifest sha256:968ad4e004ca52bdfb4f7686b9cab58437499e739f9670ddab325f23501545da 0.0s done\n", + "#30 DONE 1.0s\n", + "[2025-01-16 15:26:14,630] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -871,14 +769,14 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 553a0ca99a2e 5 minutes ago 17.7GB\n" + "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 5c1b6f89e061 55 seconds ago 8.6GB\n" ] } ], @@ -900,7 +798,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -936,7 +834,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.5.1\",\n", + " \"sdkVersion\": \"2.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -960,16 +858,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2024-04-23 22:40:48 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-01-16 23:26:18 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2024-04-23 22:40:48 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2024-04-23 22:40:48 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2024-04-23 22:40:48 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-01-16 23:26:18 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-01-16 23:26:18 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-01-16 23:26:18 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2024-04-23 22:40:48 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-01-16 23:26:18 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2024-04-23 22:40:48 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2024-04-23 22:40:48 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-01-16 23:26:18 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-01-16 23:26:18 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -994,29 +892,29 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 15:40:49,986] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-23 15:40:49,986] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-01-16 15:26:20,643] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-16 15:26:20,643] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-23 15:40:49,986] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-01-16 15:26:20,644] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-23 15:40:49,986] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-01-16 15:26:20,646] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-23 15:40:50,062] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmp9_4t5v97/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmp9_4t5v97/pkg.json\n", - "[2024-04-23 15:40:50,322] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-01-16 15:26:20,837] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpwakl5ani/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpwakl5ani/pkg.json\n", + "[2025-01-16 15:26:21,167] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-23 15:40:50,322] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-01-16 15:26:21,169] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-23 15:40:50,636] [INFO] (common) - Launching container (f9af17c16239) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: objective_merkle\n", + "[2025-01-16 15:26:21,592] [INFO] (common) - Launching container (06dd3af216d1) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: angry_einstein\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1026,49 +924,37 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-23 22:40:51 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", - "\n", - "[2024-04-23 22:40:54,170] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'])\n", + "2025-01-16 23:26:22 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", "\n", - "[2024-04-23 22:40:54,175] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "Traceback (most recent call last):\n", "\n", - "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", + " File \"/opt/holoscan/app/mednist_classifier_monaideploy.py\", line 19, in \n", "\n", - "[info] [gxf_executor.cpp:247] Creating context\n", + " from monai.deploy.conditions import CountCondition\n", "\n", - "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", + " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/__init__.py\", line 101, in \n", "\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + " load_submodules(sys.modules[__name__], False, exclude_pattern=excludes)\n", "\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/utils/module.py\", line 187, in load_submodules\n", "\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", + " mod = import_module(name)\n", "\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", + " File \"/usr/lib/python3.10/importlib/__init__.py\", line 126, in import_module\n", "\n", - "\u001b[0m2024-04-23 22:40:54.201 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", + " return _bootstrap._gcd_import(name[level:], package, level)\n", "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - "\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", + " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/__init__.py\", line 23, in \n", "\n", - "[2024-04-23 22:40:55,396] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.27996829466530719648374470054709482881.dcm\n", + " from . import _version, conditions, core, exceptions, logger, resources, utils\n", "\n", - "[2024-04-23 22:40:55,396] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.27996829466530719648374470054709482881.dcm\n", + " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/core/__init__.py\", line 32, in \n", "\n", - "\u001b[0m2024-04-23 22:40:55.396 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + " from holoscan.core import *\n", "\n", - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "AttributeError: module 'holoscan.core' has no attribute 'MultiMessageConditionInfo'\n", "\n", - "\u001b[0m2024-04-23 22:40:55.397 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", - "\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", - "\n", - "[info] [gxf_executor.cpp:275] Destroying context\n", - "\n", - "AbdomenCT\n", - "\n", - "[2024-04-23 15:40:56,349] [INFO] (common) - Container 'objective_merkle'(f9af17c16239) exited.\n" + "[2025-01-16 15:26:30,695] [INFO] (common) - Container 'angry_einstein'(06dd3af216d1) exited.\n" ] } ], @@ -1080,14 +966,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\"AbdomenCT\"" + "cat: output/output.json: No such file or directory\n" ] } ], @@ -1133,7 +1019,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -1164,7 +1050,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -1235,7 +1121,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -1374,7 +1260,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -1425,57 +1311,53 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-23 15:41:01,799] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-23 15:41:01,818] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m2024-04-23 15:41:01.850 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[info] [gxf_executor.cpp:247] Creating context\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", + "[info] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 15:26:31,607] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-16 15:26:31,631] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", + "[info] [gxf_executor.cpp:262] Creating context\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'text'\n", + "[info] [gxf_executor.cpp:2178] Activating Graph...\n", + "[info] [gxf_executor.cpp:2208] Running Graph...\n", + "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - " warnings.warn(msg)\n", - "[2024-04-23 15:41:04,196] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.35898050102915969373889764509894247367.dcm\n", - "[2024-04-23 15:41:04,198] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.35898050102915969373889764509894247367.dcm\n" + "[2025-01-16 15:26:34,118] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-01-16 15:26:34,122] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-01-16 15:26:34,127] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + " warn_and_log(msg)\n", + "[2025-01-16 15:26:34,140] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-01-16 15:26:34,154] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.93995131736580848135236915797288568855.dcm\n", + "[2025-01-16 15:26:34,160] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.93995131736580848135236915797288568855.dcm\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "AbdomenCT\n", - "\u001b[0m2024-04-23 15:41:04.199 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 15:41:04.200 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" + "AbdomenCT\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[info] [gxf_executor.cpp:275] Destroying context\n" + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[info] [gxf_executor.cpp:292] Destroying context\n" ] } ], @@ -1486,7 +1368,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -1520,7 +1402,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -1530,7 +1412,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -1795,161 +1677,169 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 15:41:08,736] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", - "[2024-04-23 15:41:08,740] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", - "\u001b[0m2024-04-23 15:41:08.763 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 15:30:21,251] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", + "[2025-01-16 15:30:21,312] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'text'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", - "[2024-04-23 15:41:10,980] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", - "\n", - "[2024-04-23 15:41:10,980] [DEBUG] (root) - Writing DICOM common modules...\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - " warnings.warn(msg)\n", - "[2024-04-23 15:41:10,983] [DEBUG] (root) - DICOM common modules written:\n", + "[2025-01-16 15:30:28,728] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", + "\n", + "[2025-01-16 15:30:28,728] [DEBUG] (root) - Writing DICOM common modules...\n", + "[2025-01-16 15:30:28,733] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-01-16 15:30:28,733] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-01-16 15:30:28,734] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + " warn_and_log(msg)\n", + "[2025-01-16 15:30:28,738] [DEBUG] (root) - DICOM common modules written:\n", "Dataset.file_meta -------------------------------\n", - "(0002, 0000) File Meta Information Group Length UL: 198\n", - "(0002, 0001) File Meta Information Version OB: b'01'\n", - "(0002, 0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728\n", - "(0002, 0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", - "(0002, 0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002, 0013) Implementation Version Name SH: '0.5.1+20.gb8697'\n", + "(0002,0000) File Meta Information Group Length UL: 198\n", + "(0002,0001) File Meta Information Version OB: b'01'\n", + "(0002,0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", + "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133\n", + "(0002,0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", + "(0002,0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", + "(0002,0013) Implementation Version Name SH: '2.0.0'\n", "-------------------------------------------------\n", - "(0008, 0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008, 0012) Instance Creation Date DA: '20240423'\n", - "(0008, 0013) Instance Creation Time TM: '154110'\n", - "(0008, 0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728\n", - "(0008, 0020) Study Date DA: '20240423'\n", - "(0008, 0021) Series Date DA: '20240423'\n", - "(0008, 0023) Content Date DA: '20240423'\n", - "(0008, 002a) Acquisition DateTime DT: '20240423154110'\n", - "(0008, 0030) Study Time TM: '154110'\n", - "(0008, 0031) Series Time TM: '154110'\n", - "(0008, 0033) Content Time TM: '154110'\n", - "(0008, 0050) Accession Number SH: ''\n", - "(0008, 0060) Modality CS: 'SR'\n", - "(0008, 0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", - "(0008, 0090) Referring Physician's Name PN: ''\n", - "(0008, 0201) Timezone Offset From UTC SH: '-0700'\n", - "(0008, 1030) Study Description LO: 'AI results.'\n", - "(0008, 103e) Series Description LO: 'CAUTION: Not for Diagnostic Use, for research use only.'\n", - "(0008, 1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", - "(0010, 0010) Patient's Name PN: ''\n", - "(0010, 0020) Patient ID LO: ''\n", - "(0010, 0021) Issuer of Patient ID LO: ''\n", - "(0010, 0030) Patient's Birth Date DA: ''\n", - "(0010, 0040) Patient's Sex CS: ''\n", - "(0018, 0015) Body Part Examined CS: ''\n", - "(0018, 1020) Software Versions LO: '0.5.1+20.gb8697'\n", - "(0018, a001) Contributing Equipment Sequence 1 item(s) ---- \n", - " (0008, 0070) Manufacturer LO: 'MONAI WG Trainer'\n", - " (0008, 1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", - " (0018, 1002) Device UID UI: xyz\n", - " (0018, 1020) Software Versions LO: '0.1'\n", - " (0040, a170) Purpose of Reference Code Sequence 1 item(s) ---- \n", - " (0008, 0100) Code Value SH: 'Newcode1'\n", - " (0008, 0102) Coding Scheme Designator SH: '99IHE'\n", - " (0008, 0104) Code Meaning LO: '\"Processing Algorithm'\n", + "(0008,0005) Specific Character Set CS: 'ISO_IR 100'\n", + "(0008,0012) Instance Creation Date DA: '20250116'\n", + "(0008,0013) Instance Creation Time TM: '153028'\n", + "(0008,0016) SOP Class UID UI: Basic Text SR Storage\n", + "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133\n", + "(0008,0020) Study Date DA: '20250116'\n", + "(0008,0021) Series Date DA: '20250116'\n", + "(0008,0023) Content Date DA: '20250116'\n", + "(0008,002A) Acquisition DateTime DT: '20250116153028'\n", + "(0008,0030) Study Time TM: '153028'\n", + "(0008,0031) Series Time TM: '153028'\n", + "(0008,0033) Content Time TM: '153028'\n", + "(0008,0050) Accession Number SH: ''\n", + "(0008,0060) Modality CS: 'SR'\n", + "(0008,0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", + "(0008,0090) Referring Physician's Name PN: ''\n", + "(0008,0201) Timezone Offset From UTC SH: '-0800'\n", + "(0008,1030) Study Description LO: 'AI results.'\n", + "(0008,103E) Series Description LO: 'CAUTION: Not for Diagnostic Use, for research use only.'\n", + "(0008,1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", + "(0010,0010) Patient's Name PN: ''\n", + "(0010,0020) Patient ID LO: ''\n", + "(0010,0021) Issuer of Patient ID LO: ''\n", + "(0010,0030) Patient's Birth Date DA: ''\n", + "(0010,0040) Patient's Sex CS: ''\n", + "(0018,0015) Body Part Examined CS: ''\n", + "(0018,1020) Software Versions LO: '2.0.0'\n", + "(0018,A001) Contributing Equipment Sequence 1 item(s) ---- \n", + " (0008,0070) Manufacturer LO: 'MONAI WG Trainer'\n", + " (0008,1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", + " (0018,1002) Device UID UI: xyz\n", + " (0018,1020) Software Versions LO: '0.1'\n", + " (0040,A170) Purpose of Reference Code Sequence 1 item(s) ---- \n", + " (0008,0100) Code Value SH: 'Newcode1'\n", + " (0008,0102) Coding Scheme Designator SH: '99IHE'\n", + " (0008,0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.12077853224410842102200362099184100728\n", - "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.11250566385163932995456431918851640579\n", - "(0020, 0010) Study ID SH: '1'\n", - "(0020, 0011) Series Number IS: '2474'\n", - "(0020, 0013) Instance Number IS: '1'\n", - "(0040, 1001) Requested Procedure ID SH: ''\n", - "[2024-04-23 15:41:10,984] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", - "(0002, 0000) File Meta Information Group Length UL: 198\n", - "(0002, 0001) File Meta Information Version OB: b'01'\n", - "(0002, 0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002, 0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728\n", - "(0002, 0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", - "(0002, 0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002, 0013) Implementation Version Name SH: '0.5.1+20.gb8697'\n", + "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.39702691697742919696761863378444809409\n", + "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.77611673418592382830839709647664909683\n", + "(0020,0010) Study ID SH: '1'\n", + "(0020,0011) Series Number IS: '4686'\n", + "(0020,0013) Instance Number IS: '1'\n", + "(0040,1001) Requested Procedure ID SH: ''\n", + "[2025-01-16 15:30:28,740] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", + "(0002,0000) File Meta Information Group Length UL: 198\n", + "(0002,0001) File Meta Information Version OB: b'01'\n", + "(0002,0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", + "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133\n", + "(0002,0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", + "(0002,0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", + "(0002,0013) Implementation Version Name SH: '2.0.0'\n", "-------------------------------------------------\n", - "(0008, 0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008, 0012) Instance Creation Date DA: '20240423'\n", - "(0008, 0013) Instance Creation Time TM: '154110'\n", - "(0008, 0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728\n", - "(0008, 0020) Study Date DA: '20240423'\n", - "(0008, 0021) Series Date DA: '20240423'\n", - "(0008, 0023) Content Date DA: '20240423'\n", - "(0008, 002a) Acquisition DateTime DT: '20240423154110'\n", - "(0008, 0030) Study Time TM: '154110'\n", - "(0008, 0031) Series Time TM: '154110'\n", - "(0008, 0033) Content Time TM: '154110'\n", - "(0008, 0050) Accession Number SH: ''\n", - "(0008, 0060) Modality CS: 'SR'\n", - "(0008, 0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", - "(0008, 0090) Referring Physician's Name PN: ''\n", - "(0008, 0201) Timezone Offset From UTC SH: '-0700'\n", - "(0008, 1030) Study Description LO: 'AI results.'\n", - "(0008, 103e) Series Description LO: 'Not for clinical use. The result is for research use only.'\n", - "(0008, 1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", - "(0010, 0010) Patient's Name PN: ''\n", - "(0010, 0020) Patient ID LO: ''\n", - "(0010, 0021) Issuer of Patient ID LO: ''\n", - "(0010, 0030) Patient's Birth Date DA: ''\n", - "(0010, 0040) Patient's Sex CS: ''\n", - "(0018, 0015) Body Part Examined CS: ''\n", - "(0018, 1020) Software Versions LO: '0.5.1+20.gb8697'\n", - "(0018, a001) Contributing Equipment Sequence 1 item(s) ---- \n", - " (0008, 0070) Manufacturer LO: 'MONAI WG Trainer'\n", - " (0008, 1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", - " (0018, 1002) Device UID UI: xyz\n", - " (0018, 1020) Software Versions LO: '0.1'\n", - " (0040, a170) Purpose of Reference Code Sequence 1 item(s) ---- \n", - " (0008, 0100) Code Value SH: 'Newcode1'\n", - " (0008, 0102) Coding Scheme Designator SH: '99IHE'\n", - " (0008, 0104) Code Meaning LO: '\"Processing Algorithm'\n", + "(0008,0005) Specific Character Set CS: 'ISO_IR 100'\n", + "(0008,0012) Instance Creation Date DA: '20250116'\n", + "(0008,0013) Instance Creation Time TM: '153028'\n", + "(0008,0016) SOP Class UID UI: Basic Text SR Storage\n", + "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133\n", + "(0008,0020) Study Date DA: '20250116'\n", + "(0008,0021) Series Date DA: '20250116'\n", + "(0008,0023) Content Date DA: '20250116'\n", + "(0008,002A) Acquisition DateTime DT: '20250116153028'\n", + "(0008,0030) Study Time TM: '153028'\n", + "(0008,0031) Series Time TM: '153028'\n", + "(0008,0033) Content Time TM: '153028'\n", + "(0008,0050) Accession Number SH: ''\n", + "(0008,0060) Modality CS: 'SR'\n", + "(0008,0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", + "(0008,0090) Referring Physician's Name PN: ''\n", + "(0008,0201) Timezone Offset From UTC SH: '-0800'\n", + "(0008,1030) Study Description LO: 'AI results.'\n", + "(0008,103E) Series Description LO: 'Not for clinical use. The result is for research use only.'\n", + "(0008,1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", + "(0010,0010) Patient's Name PN: ''\n", + "(0010,0020) Patient ID LO: ''\n", + "(0010,0021) Issuer of Patient ID LO: ''\n", + "(0010,0030) Patient's Birth Date DA: ''\n", + "(0010,0040) Patient's Sex CS: ''\n", + "(0018,0015) Body Part Examined CS: ''\n", + "(0018,1020) Software Versions LO: '2.0.0'\n", + "(0018,A001) Contributing Equipment Sequence 1 item(s) ---- \n", + " (0008,0070) Manufacturer LO: 'MONAI WG Trainer'\n", + " (0008,1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", + " (0018,1002) Device UID UI: xyz\n", + " (0018,1020) Software Versions LO: '0.1'\n", + " (0040,A170) Purpose of Reference Code Sequence 1 item(s) ---- \n", + " (0008,0100) Code Value SH: 'Newcode1'\n", + " (0008,0102) Coding Scheme Designator SH: '99IHE'\n", + " (0008,0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.12077853224410842102200362099184100728\n", - "(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.11250566385163932995456431918851640579\n", - "(0020, 0010) Study ID SH: '1'\n", - "(0020, 0011) Series Number IS: '2474'\n", - "(0020, 0013) Instance Number IS: '1'\n", - "(0040, 1001) Requested Procedure ID SH: ''\n", - "(0040, a040) Value Type CS: 'CONTAINER'\n", - "(0040, a043) Concept Name Code Sequence 1 item(s) ---- \n", - " (0008, 0100) Code Value SH: '18748-4'\n", - " (0008, 0102) Coding Scheme Designator SH: 'LN'\n", - " (0008, 0104) Code Meaning LO: 'Diagnostic Imaging Report'\n", + "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.39702691697742919696761863378444809409\n", + "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.77611673418592382830839709647664909683\n", + "(0020,0010) Study ID SH: '1'\n", + "(0020,0011) Series Number IS: '4686'\n", + "(0020,0013) Instance Number IS: '1'\n", + "(0040,1001) Requested Procedure ID SH: ''\n", + "(0040,A040) Value Type CS: 'CONTAINER'\n", + "(0040,A043) Concept Name Code Sequence 1 item(s) ---- \n", + " (0008,0100) Code Value SH: '18748-4'\n", + " (0008,0102) Coding Scheme Designator SH: 'LN'\n", + " (0008,0104) Code Meaning LO: 'Diagnostic Imaging Report'\n", " ---------\n", - "(0040, a050) Continuity Of Content CS: 'SEPARATE'\n", - "(0040, a493) Verification Flag CS: 'UNVERIFIED'\n", - "(0040, a730) Content Sequence 1 item(s) ---- \n", - " (0040, a010) Relationship Type CS: 'CONTAINS'\n", - " (0040, a040) Value Type CS: 'TEXT'\n", - " (0040, a043) Concept Name Code Sequence 1 item(s) ---- \n", - " (0008, 0100) Code Value SH: '111412'\n", - " (0008, 0102) Coding Scheme Designator SH: 'DCM'\n", - " (0008, 0104) Code Meaning LO: 'Narrative Summary'\n", + "(0040,A050) Continuity Of Content CS: 'SEPARATE'\n", + "(0040,A493) Verification Flag CS: 'UNVERIFIED'\n", + "(0040,A730) Content Sequence 1 item(s) ---- \n", + " (0040,A010) Relationship Type CS: 'CONTAINS'\n", + " (0040,A040) Value Type CS: 'TEXT'\n", + " (0040,A043) Concept Name Code Sequence 1 item(s) ---- \n", + " (0008,0100) Code Value SH: '111412'\n", + " (0008,0102) Coding Scheme Designator SH: 'DCM'\n", + " (0008,0104) Code Meaning LO: 'Narrative Summary'\n", " ---------\n", - " (0040, a160) Text Value UT: 'AbdomenCT'\n", + " (0040,A160) Text Value UT: 'AbdomenCT'\n", " ---------\n", - "[2024-04-23 15:41:10,987] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728.dcm\n", - "[2024-04-23 15:41:10,988] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.10612655328316632493342405878828496728.dcm\n", - "\u001b[0m2024-04-23 15:41:10.988 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 15:41:10.988 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:275] Destroying context\n" + "[2025-01-16 15:30:28,740] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-01-16 15:30:28,745] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133.dcm\n", + "[2025-01-16 15:30:28,748] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133.dcm\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:292] Destroying context\n" ] } ], @@ -1959,7 +1849,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -1986,7 +1876,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -2016,7 +1906,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -2034,7 +1924,8 @@ "pydicom>=2.3.0\n", "highdicom>=0.18.2\n", "SimpleITK>=2.0.0\n", - "setuptools>=59.5.0 # for pkg_resources" + "setuptools>=59.5.0 # for pkg_resources\n", + "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue" ] }, { @@ -2047,7 +1938,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": ".venv", "language": "python", "name": "python3" }, diff --git a/notebooks/tutorials/02_mednist_app.ipynb b/notebooks/tutorials/02_mednist_app.ipynb index 57212003..c04812cf 100644 --- a/notebooks/tutorials/02_mednist_app.ipynb +++ b/notebooks/tutorials/02_mednist_app.ipynb @@ -29,7 +29,16 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/ignite/handlers/checkpoint.py:17: DeprecationWarning: `TorchScript` support for functional optimizers is deprecated and will be removed in a future PyTorch release. Consider using the `torch.compile` optimizer instead.\n", + " from torch.distributed.optim import ZeroRedundancyOptimizer\n" + ] + } + ], "source": [ "# Install necessary packages for MONAI Core\n", "!python -c \"import monai\" || pip install -q \"monai[pillow, tqdm]\"\n", @@ -56,30 +65,38 @@ "tags": [] }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/ignite/handlers/checkpoint.py:17: DeprecationWarning: `TorchScript` support for functional optimizers is deprecated and will be removed in a future PyTorch release. Consider using the `torch.compile` optimizer instead.\n", + " from torch.distributed.optim import ZeroRedundancyOptimizer\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "MONAI version: 1.3.0\n", + "MONAI version: 1.4.0\n", "Numpy version: 1.26.4\n", - "Pytorch version: 2.0.1+cu117\n", + "Pytorch version: 2.5.1+cu124\n", "MONAI flags: HAS_EXT = False, USE_COMPILED = False, USE_META_DICT = False\n", - "MONAI rev id: 865972f7a791bf7b42efbcd87c8402bd865b329e\n", + "MONAI rev id: 46a5272196a6c2590ca2589029eed8e4d56ff008\n", "MONAI __file__: /home//src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/__init__.py\n", "\n", "Optional dependencies:\n", "Pytorch Ignite version: 0.4.11\n", "ITK version: NOT INSTALLED or UNKNOWN VERSION.\n", - "Nibabel version: 5.2.1\n", - "scikit-image version: 0.23.2\n", - "scipy version: 1.13.0\n", - "Pillow version: 10.3.0\n", + "Nibabel version: 5.3.2\n", + "scikit-image version: 0.25.0\n", + "scipy version: 1.15.1\n", + "Pillow version: 11.1.0\n", "Tensorboard version: NOT INSTALLED or UNKNOWN VERSION.\n", - "gdown version: 4.7.3\n", + "gdown version: 5.2.0\n", "TorchVision version: NOT INSTALLED or UNKNOWN VERSION.\n", - "tqdm version: 4.66.2\n", + "tqdm version: 4.67.1\n", "lmdb version: NOT INSTALLED or UNKNOWN VERSION.\n", - "psutil version: 5.9.6\n", + "psutil version: 6.1.1\n", "pandas version: NOT INSTALLED or UNKNOWN VERSION.\n", "einops version: NOT INSTALLED or UNKNOWN VERSION.\n", "transformers version: NOT INSTALLED or UNKNOWN VERSION.\n", @@ -149,12 +166,14 @@ "The dataset is kindly made available by [Dr. Bradley J. Erickson M.D., Ph.D.](https://www.mayo.edu/research/labs/radiology-informatics/overview) (Department of Radiology, Mayo Clinic)\n", "under the Creative Commons [CC BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/).\n", "\n", - "If you use the MedNIST dataset, please acknowledge the source." + "If you use the MedNIST dataset, please acknowledge the source.\n", + "\n", + "**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1Z9s3JB2YdKjcw8ELwjVYJcCEvqlQ_HTN?usp=drive_link)" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "tags": [] }, @@ -163,46 +182,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "/tmp/tmp0iht_c0l\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Downloading...\n", - "From (original): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE\n", - "From (redirected): https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE&confirm=t&uuid=af0469cc-fefc-4bd4-9ba2-60e15ffc2168\n", - "To: /tmp/tmpquityog6/MedNIST.tar.gz\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61.8M/61.8M [00:00<00:00, 66.5MB/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-04-23 17:01:37,537 - INFO - Downloaded: /tmp/tmp0iht_c0l/MedNIST.tar.gz\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-04-23 17:01:37,643 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n", - "2024-04-23 17:01:37,644 - INFO - Writing into directory: /tmp/tmp0iht_c0l.\n" + ".\n", + "2025-01-16 12:16:03,094 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n", + "2025-01-16 12:16:03,094 - INFO - File exists: MedNIST.tar.gz, skipped downloading.\n", + "2025-01-16 12:16:03,095 - INFO - Writing into directory: ..\n" ] } ], "source": [ "directory = os.environ.get(\"MONAI_DATA_DIRECTORY\")\n", - "root_dir = tempfile.mkdtemp() if directory is None else directory\n", + "root_dir = os.path.curdir + \"MedNIST_DATA\" if directory is None else directory\n", "print(root_dir)\n", "\n", "resource = \"https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE\"\n", @@ -315,21 +304,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/5 Loss: 0.18928290903568268\n", - "Epoch 2/5 Loss: 0.06710730493068695\n", - "Epoch 3/5 Loss: 0.029032323509454727\n", - "Epoch 4/5 Loss: 0.01877668686211109\n", - "Epoch 5/5 Loss: 0.01939055137336254\n" - ] - } - ], + "outputs": [], "source": [ "def _prepare_batch(batch, device, non_blocking):\n", " return tuple(b.to(device) for b in batch)\n", @@ -355,7 +332,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -438,21 +415,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "001420.jpeg\n", - "classifier.zip\n", - "env: HOLOSCAN_INPUT_PATH=input\n", - "env: HOLOSCAN_OUTPUT_PATH=output\n", - "env: HOLOSCAN_MODEL_PATH=models\n" - ] - } - ], + "outputs": [], "source": [ "input_folder = \"input\"\n", "output_foler = \"output\"\n", @@ -480,7 +445,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -510,7 +475,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -580,7 +545,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -718,7 +683,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -762,60 +727,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2024-04-23 17:08:56,466] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-23 17:08:56,478] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m2024-04-23 17:08:56.514 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[info] [gxf_executor.cpp:247] Creating context\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - " warnings.warn(msg)\n", - "[2024-04-23 17:08:57,259] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.77299510031662020162686125612902317163.dcm\n", - "[2024-04-23 17:08:57,261] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.77299510031662020162686125612902317163.dcm\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AbdomenCT\n", - "\u001b[0m2024-04-23 17:08:57.263 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 17:08:57.263 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[info] [gxf_executor.cpp:275] Destroying context\n" - ] - } - ], + "outputs": [], "source": [ "!rm -rf $HOLOSCAN_OUTPUT_PATH\n", "app = App().run()" @@ -823,17 +737,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\"AbdomenCT\"" - ] - } - ], + "outputs": [], "source": [ "!cat $HOLOSCAN_OUTPUT_PATH/output.json" ] @@ -854,7 +760,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -865,17 +771,9 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Writing mednist_app/mednist_classifier_monaideploy.py\n" - ] - } - ], + "outputs": [], "source": [ "%%writefile mednist_app/mednist_classifier_monaideploy.py\n", "\n", @@ -1124,49 +1022,18 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", - "\u001b[0m2024-04-23 17:09:01.847 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", - "AbdomenCT\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - " warnings.warn(msg)\n", - "\u001b[0m2024-04-23 17:09:03.971 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 17:09:03.971 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:275] Destroying context\n" - ] - } - ], + "outputs": [], "source": [ "!python \"mednist_app/mednist_classifier_monaideploy.py\"" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\"AbdomenCT\"" - ] - } - ], + "outputs": [], "source": [ "!cat $HOLOSCAN_OUTPUT_PATH/output.json" ] @@ -1189,17 +1056,9 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Writing mednist_app/app.yaml\n" - ] - } - ], + "outputs": [], "source": [ "%%writefile mednist_app/app.yaml\n", "%YAML 1.2\n", @@ -1219,17 +1078,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Writing mednist_app/requirements.txt\n" - ] - } - ], + "outputs": [], "source": [ "%%writefile mednist_app/requirements.txt\n", "monai>=1.2.0\n", @@ -1237,472 +1088,15 @@ "pydicom>=2.3.0\n", "highdicom>=0.18.2\n", "SimpleITK>=2.0.0\n", - "setuptools>=59.5.0 # for pkg_resources" + "setuptools>=59.5.0 # for pkg_resources\n", + "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2024-04-23 17:09:06,108] [INFO] (common) - Downloading CLI manifest file...\n", - "[2024-04-23 17:09:06,368] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2024-04-23 17:09:06,371] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/mednist_classifier_monaideploy.py\n", - "[2024-04-23 17:09:06,372] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2024-04-23 17:09:06,372] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2024-04-23 17:09:06,373] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2024-04-23 17:09:06,373] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/app.yaml...\n", - "[2024-04-23 17:09:06,378] [INFO] (packager) - Generating app.json...\n", - "[2024-04-23 17:09:06,379] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-23 17:09:06,393] [DEBUG] (common) - \n", - "=============== Begin app.json ===============\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"command\": \"[\\\"python3\\\", \\\"/opt/holoscan/app/mednist_classifier_monaideploy.py\\\"]\",\n", - " \"environment\": {\n", - " \"HOLOSCAN_APPLICATION\": \"/opt/holoscan/app\",\n", - " \"HOLOSCAN_INPUT_PATH\": \"input/\",\n", - " \"HOLOSCAN_OUTPUT_PATH\": \"output/\",\n", - " \"HOLOSCAN_WORKDIR\": \"/var/holoscan\",\n", - " \"HOLOSCAN_MODEL_PATH\": \"/opt/holoscan/models\",\n", - " \"HOLOSCAN_CONFIG_PATH\": \"/var/holoscan/app.yaml\",\n", - " \"HOLOSCAN_APP_MANIFEST_PATH\": \"/etc/holoscan/app.json\",\n", - " \"HOLOSCAN_PKG_MANIFEST_PATH\": \"/etc/holoscan/pkg.json\",\n", - " \"HOLOSCAN_DOCS_PATH\": \"/opt/holoscan/docs\",\n", - " \"HOLOSCAN_LOGS_PATH\": \"/var/holoscan/logs\"\n", - " },\n", - " \"input\": {\n", - " \"path\": \"input/\",\n", - " \"formats\": null\n", - " },\n", - " \"liveness\": null,\n", - " \"output\": {\n", - " \"path\": \"output/\",\n", - " \"formats\": null\n", - " },\n", - " \"readiness\": null,\n", - " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.5.1\",\n", - " \"timeout\": 0,\n", - " \"version\": 1.0,\n", - " \"workingDirectory\": \"/var/holoscan\"\n", - "}\n", - "================ End app.json ================\n", - " \n", - "[2024-04-23 17:09:06,393] [DEBUG] (common) - \n", - "=============== Begin pkg.json ===============\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"applicationRoot\": \"/opt/holoscan/app\",\n", - " \"modelRoot\": \"/opt/holoscan/models\",\n", - " \"models\": {\n", - " \"model\": \"/opt/holoscan/models/model\"\n", - " },\n", - " \"resources\": {\n", - " \"cpu\": 1,\n", - " \"gpu\": 1,\n", - " \"memory\": \"1Gi\",\n", - " \"gpuMemory\": \"1Gi\"\n", - " },\n", - " \"version\": 1.0,\n", - " \"platformConfig\": \"dgpu\"\n", - "}\n", - "================ End pkg.json ================\n", - " \n", - "[2024-04-23 17:09:06,435] [DEBUG] (packager.builder) - \n", - "========== Begin Dockerfile ==========\n", - "\n", - "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "\n", - "ENV DEBIAN_FRONTEND=noninteractive\n", - "ENV TERM=xterm-256color\n", - "\n", - "ARG UNAME\n", - "ARG UID\n", - "ARG GID\n", - "\n", - "RUN mkdir -p /etc/holoscan/ \\\n", - " && mkdir -p /opt/holoscan/ \\\n", - " && mkdir -p /var/holoscan \\\n", - " && mkdir -p /opt/holoscan/app \\\n", - " && mkdir -p /var/holoscan/input \\\n", - " && mkdir -p /var/holoscan/output\n", - "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", - "LABEL tag=\"mednist_app:1.0\"\n", - "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", - "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.0.0\"\n", - "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", - "\n", - "\n", - "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", - "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", - "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", - "ENV HOLOSCAN_WORKDIR=/var/holoscan\n", - "ENV HOLOSCAN_APPLICATION=/opt/holoscan/app\n", - "ENV HOLOSCAN_TIMEOUT=0\n", - "ENV HOLOSCAN_MODEL_PATH=/opt/holoscan/models\n", - "ENV HOLOSCAN_DOCS_PATH=/opt/holoscan/docs\n", - "ENV HOLOSCAN_CONFIG_PATH=/var/holoscan/app.yaml\n", - "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", - "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", - "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV PATH=/root/.local/bin:/opt/nvidia/holoscan:$PATH\n", - "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/libtorch/1.13.1/lib/:/opt/nvidia/holoscan/lib\n", - "\n", - "RUN apt-get update \\\n", - " && apt-get install -y curl jq \\\n", - " && rm -rf /var/lib/apt/lists/*\n", - "\n", - "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", - "\n", - "\n", - "RUN groupadd -f -g $GID $UNAME\n", - "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", - "RUN chown -R holoscan /var/holoscan \n", - "RUN chown -R holoscan /var/holoscan/input \n", - "RUN chown -R holoscan /var/holoscan/output \n", - "\n", - "# Set the working directory\n", - "WORKDIR /var/holoscan\n", - "\n", - "# Copy HAP/MAP tool script\n", - "COPY ./tools /var/holoscan/tools\n", - "RUN chmod +x /var/holoscan/tools\n", - "\n", - "\n", - "# Copy gRPC health probe\n", - "\n", - "USER $UNAME\n", - "\n", - "ENV PATH=/root/.local/bin:/home/holoscan/.local/bin:/opt/nvidia/holoscan:$PATH\n", - "\n", - "COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "\n", - "RUN pip install --upgrade pip\n", - "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "\n", - " \n", - "# MONAI Deploy\n", - "\n", - "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "\n", - "\n", - "COPY ./models /opt/holoscan/models\n", - "\n", - "COPY ./map/app.json /etc/holoscan/app.json\n", - "COPY ./app.config /var/holoscan/app.yaml\n", - "COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "\n", - "COPY ./app /opt/holoscan/app\n", - "\n", - "ENTRYPOINT [\"/var/holoscan/tools\"]\n", - "=========== End Dockerfile ===========\n", - "\n", - "[2024-04-23 17:09:06,435] [INFO] (packager.builder) - \n", - "===============================================================================\n", - "Building image for: x64-workstation\n", - " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - " Build Image: N/A\n", - " Cache: Enabled\n", - " Configuration: dgpu\n", - " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - " gRPC Health Probe: N/A\n", - " SDK Version: 2.0.0\n", - " SDK: monai-deploy\n", - " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " \n", - "[2024-04-23 17:09:06,753] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-23 17:09:06,753] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", - "\n", - "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.67kB done\n", - "#1 DONE 0.0s\n", - "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#2 DONE 0.4s\n", - "\n", - "#3 [internal] load .dockerignore\n", - "#3 transferring context: 1.79kB done\n", - "#3 DONE 0.0s\n", - "\n", - "#4 [internal] load build context\n", - "#4 DONE 0.0s\n", - "\n", - "#5 importing cache manifest from local:14814255791215325379\n", - "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", - "#5 DONE 0.0s\n", - "\n", - "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.0s done\n", - "#6 DONE 0.0s\n", - "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#7 DONE 0.6s\n", - "\n", - "#4 [internal] load build context\n", - "#4 transferring context: 28.76MB 0.2s done\n", - "#4 DONE 0.2s\n", - "\n", - "#8 [ 6/21] RUN chown -R holoscan /var/holoscan\n", - "#8 CACHED\n", - "\n", - "#9 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", - "#9 CACHED\n", - "\n", - "#10 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", - "#10 CACHED\n", - "\n", - "#11 [10/21] COPY ./tools /var/holoscan/tools\n", - "#11 CACHED\n", - "\n", - "#12 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", - "#12 CACHED\n", - "\n", - "#13 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#13 CACHED\n", - "\n", - "#14 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", - "#14 CACHED\n", - "\n", - "#15 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", - "#15 CACHED\n", - "\n", - "#16 [13/21] RUN pip install --upgrade pip\n", - "#16 CACHED\n", - "\n", - "#17 [ 9/21] WORKDIR /var/holoscan\n", - "#17 CACHED\n", - "\n", - "#18 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", - "#18 CACHED\n", - "\n", - "#19 [11/21] RUN chmod +x /var/holoscan/tools\n", - "#19 CACHED\n", - "\n", - "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#20 CACHED\n", - "\n", - "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#21 DONE 0.2s\n", - "\n", - "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#22 0.646 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.740 Processing /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#22 0.751 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.23.5)\n", - "#22 0.850 Collecting holoscan~=2.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 0.921 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (6.7 kB)\n", - "#22 0.978 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 0.982 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.026 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.030 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.044 Requirement already satisfied: pip>=20.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (24.0)\n", - "#22 1.045 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (12.2.0)\n", - "#22 1.045 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", - "#22 1.046 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.60.1)\n", - "#22 1.047 Requirement already satisfied: Jinja2==3.1.3 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.1.3)\n", - "#22 1.048 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (23.1)\n", - "#22 1.048 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (6.0)\n", - "#22 1.049 Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.31.0)\n", - "#22 1.050 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (5.9.6)\n", - "#22 1.070 Collecting wheel-axle-runtime<1.0 (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.075 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", - "#22 1.107 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.8.2)\n", - "#22 1.112 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.1.3)\n", - "#22 1.126 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.10.15)\n", - "#22 1.126 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.66.2)\n", - "#22 1.127 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.12.3)\n", - "#22 1.128 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.11.0)\n", - "#22 1.135 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.3.2)\n", - "#22 1.136 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.7)\n", - "#22 1.137 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", - "#22 1.137 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2024.2.2)\n", - "#22 1.155 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.13.4)\n", - "#22 1.176 Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (8.1.7)\n", - "#22 1.177 Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.5.4)\n", - "#22 1.178 Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (13.7.1)\n", - "#22 1.212 Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.0.0)\n", - "#22 1.213 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.17.2)\n", - "#22 1.233 Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.1.2)\n", - "#22 1.245 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.260 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.2 MB)\n", - "#22 1.691 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.2/33.2 MB 46.8 MB/s eta 0:00:00\n", - "#22 1.696 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", - "#22 1.709 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", - "#22 2.033 Installing collected packages: wheel-axle-runtime, typeguard, colorama, holoscan, monai-deploy-app-sdk\n", - "#22 2.711 Successfully installed colorama-0.4.6 holoscan-2.0.0 monai-deploy-app-sdk-0.5.1+20.gb869749.dirty typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", - "#22 DONE 3.0s\n", - "\n", - "#23 [17/21] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.2s\n", - "\n", - "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.0s\n", - "\n", - "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", - "#25 DONE 0.0s\n", - "\n", - "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#26 DONE 0.1s\n", - "\n", - "#27 [21/21] COPY ./app /opt/holoscan/app\n", - "#27 DONE 0.0s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 4.4s done\n", - "#28 exporting manifest sha256:457dd7263681b35a427e304797922e6c9c1a453deadebb6e234e5d3f63947b18 0.0s done\n", - "#28 exporting config sha256:63c2bd27a2230b0ee99597a2475f434ae68969da3a8328b78d7d5bc277409172 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer 36f9dbeb2e4f 238B / 238B\n", - "#29 loading layer 5828d73ee0ce 65.54kB / 5.86MB\n", - "#29 loading layer f50931954a7a 557.06kB / 2.90GB\n", - "#29 loading layer f50931954a7a 122.00MB / 2.90GB 6.2s\n", - "#29 loading layer f50931954a7a 330.89MB / 2.90GB 10.3s\n", - "#29 loading layer f50931954a7a 511.93MB / 2.90GB 14.4s\n", - "#29 loading layer f50931954a7a 681.28MB / 2.90GB 18.5s\n", - "#29 loading layer f50931954a7a 840.60MB / 2.90GB 22.6s\n", - "#29 loading layer f50931954a7a 1.05GB / 2.90GB 26.8s\n", - "#29 loading layer f50931954a7a 1.26GB / 2.90GB 30.9s\n", - "#29 loading layer f50931954a7a 1.43GB / 2.90GB 35.0s\n", - "#29 loading layer f50931954a7a 1.64GB / 2.90GB 39.0s\n", - "#29 loading layer f50931954a7a 1.89GB / 2.90GB 43.1s\n", - "#29 loading layer f50931954a7a 1.98GB / 2.90GB 50.1s\n", - "#29 loading layer f50931954a7a 2.10GB / 2.90GB 56.4s\n", - "#29 loading layer f50931954a7a 2.30GB / 2.90GB 62.4s\n", - "#29 loading layer f50931954a7a 2.47GB / 2.90GB 66.5s\n", - "#29 loading layer f50931954a7a 2.67GB / 2.90GB 70.6s\n", - "#29 loading layer f50931954a7a 2.84GB / 2.90GB 76.8s\n", - "#29 loading layer 6e852bd260ad 32.77kB / 125.82kB\n", - "#29 loading layer d8a5c55be301 557.06kB / 67.35MB\n", - "#29 loading layer 82e6702b8274 262.14kB / 26.20MB\n", - "#29 loading layer d1b690ac41a7 513B / 513B\n", - "#29 loading layer a85ba680dedd 318B / 318B\n", - "#29 loading layer 7e4618ac3cb0 297B / 297B\n", - "#29 loading layer 43922422e132 4.00kB / 4.00kB\n", - "#29 loading layer 5828d73ee0ce 65.54kB / 5.86MB 82.3s done\n", - "#29 loading layer 36f9dbeb2e4f 238B / 238B 82.4s done\n", - "#29 loading layer f50931954a7a 2.84GB / 2.90GB 81.6s done\n", - "#29 loading layer 6e852bd260ad 32.77kB / 125.82kB 3.0s done\n", - "#29 loading layer d8a5c55be301 557.06kB / 67.35MB 2.9s done\n", - "#29 loading layer 82e6702b8274 262.14kB / 26.20MB 1.1s done\n", - "#29 loading layer d1b690ac41a7 513B / 513B 0.7s done\n", - "#29 loading layer a85ba680dedd 318B / 318B 0.6s done\n", - "#29 loading layer 7e4618ac3cb0 297B / 297B 0.5s done\n", - "#29 loading layer 43922422e132 4.00kB / 4.00kB 0.5s done\n", - "#29 DONE 82.4s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 147.4s done\n", - "#28 DONE 151.9s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:0023eecf78ab7134b1dd4aba34e20134fe1a5e0827f3a2a65dead15239c056dd\n", - "#30 writing layer sha256:0023eecf78ab7134b1dd4aba34e20134fe1a5e0827f3a2a65dead15239c056dd 0.0s done\n", - "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", - "#30 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", - "#30 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", - "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", - "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", - "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#30 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", - "#30 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", - "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", - "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#30 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", - "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", - "#30 writing layer sha256:39d418046e5154e0c5c7e83ba5a4cabbca254facefc9cb7b3f1bc1a6cf51ade3 done\n", - "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", - "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", - "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", - "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", - "#30 writing layer sha256:564f81ac5635380cf724ba7ab6fb8f4d3ff9a308a8c63c2ed585363b78804d5b\n", - "#30 writing layer sha256:564f81ac5635380cf724ba7ab6fb8f4d3ff9a308a8c63c2ed585363b78804d5b 0.4s done\n", - "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041\n", - "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", - "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#30 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", - "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", - "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#30 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", - "#30 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", - "#30 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", - "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#30 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", - "#30 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", - "#30 writing layer sha256:81222fcc1cc074d3cda4ae4a57ce0376c275a9ba3ef167c9e0715489c4e63593 0.0s done\n", - "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", - "#30 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", - "#30 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", - "#30 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", - "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", - "#30 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", - "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", - "#30 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", - "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", - "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#30 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", - "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", - "#30 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", - "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", - "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", - "#30 writing layer sha256:acdd7441f23e148bb954e879221b72454121a7bba702612df91c871ef14129a1\n", - "#30 writing layer sha256:acdd7441f23e148bb954e879221b72454121a7bba702612df91c871ef14129a1 1.3s done\n", - "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af\n", - "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", - "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", - "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#30 writing layer sha256:b9f7221ef56856ac3291be12159de2576b44cd2ab53493532f7c40e33b89106c done\n", - "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#30 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", - "#30 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", - "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#30 writing layer sha256:d577841fd502ec678ac975415c7c08cc25663bc74b610b82dfbc012f52547f4b done\n", - "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#30 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", - "#30 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", - "#30 writing layer sha256:e1b6cb9ccb6b87a9b02f2d1913a5886076b6ef31ff1417fd63257b0d118e13e9 0.0s done\n", - "#30 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", - "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", - "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#30 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", - "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#30 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", - "#30 writing layer sha256:f7ff8f11209b473ea771d9abe10f41a9a65716da379f39ea47ddbae875701e0f 0.0s done\n", - "#30 writing layer sha256:f98f3676b44915df64d6115f562f826117cd134942616876d0d7c7d79c00ad0e 0.0s done\n", - "#30 writing config sha256:98d05c4f7922b70a3b4fb0ca92707228e91ce8bab93500fdcc0c31b1b0b64130 0.0s done\n", - "#30 preparing build cache for export 2.5s done\n", - "#30 writing cache manifest sha256:045b1d7a7e988bbb6957ed94aa829d8e4ce6fb0c09c284a2b102d385595e15d3 0.0s done\n", - "#30 DONE 2.5s\n", - "[2024-04-23 17:11:47,683] [INFO] (packager) - Build Summary:\n", - "\n", - "Platform: x64-workstation/dgpu\n", - " Status: Succeeded\n", - " Docker Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Tarball: None\n" - ] - } - ], + "outputs": [], "source": [ "tag_prefix = \"mednist_app\"\n", "\n", @@ -1723,17 +1117,9 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 63c2bd27a223 2 minutes ago 17.7GB\n" - ] - } - ], + "outputs": [], "source": [ "!docker image ls | grep {tag_prefix}" ] @@ -1749,80 +1135,9 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2024-04-23 17:11:48,890] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-23 17:11:48,890] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", - "\n", - "[2024-04-23 17:11:48,891] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", - "\n", - "[2024-04-23 17:11:48,891] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", - "\n", - "[2024-04-23 17:11:48,968] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpgkozmakd/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpgkozmakd/pkg.json\n", - "[2024-04-23 17:11:51,690] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", - "\n", - "[2024-04-23 17:11:51,690] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", - "\n", - "[2024-04-23 17:11:52,019] [INFO] (common) - Launching container (29c362c90847) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: competent_aryabhata\n", - " host name: mingq-dt\n", - " network: host\n", - " user: 1000:1000\n", - " ulimits: memlock=-1:-1, stack=67108864:67108864\n", - " cap_add: CAP_SYS_PTRACE\n", - " ipc mode: host\n", - " shared memory size: 67108864\n", - " devices: \n", - " group_add: 44\n", - "2024-04-24 00:11:52 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", - "\n", - "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", - "\n", - "[info] [gxf_executor.cpp:247] Creating context\n", - "\n", - "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", - "\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", - "\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", - "\n", - "\u001b[0m2024-04-24 00:11:55.786 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", - "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - "\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", - "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/pydicom/valuerep.py:443: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - "\n", - " warnings.warn(msg)\n", - "\n", - "\u001b[0m2024-04-24 00:11:57.183 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\n", - "\u001b[0m2024-04-24 00:11:57.184 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", - "\n", - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", - "\n", - "[info] [gxf_executor.cpp:275] Destroying context\n", - "\n", - "AbdomenCT\n", - "\n", - "[2024-04-23 17:11:58,233] [INFO] (common) - Container 'competent_aryabhata'(29c362c90847) exited.\n" - ] - } - ], + "outputs": [], "source": [ "# Clear the output folder and run the MAP. The input is expected to be a folder.\n", "!rm -rf $HOLOSCAN_OUTPUT_PATH\n", @@ -1831,17 +1146,9 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\"AbdomenCT\"" - ] - } - ], + "outputs": [], "source": [ "!cat $HOLOSCAN_OUTPUT_PATH/output.json" ] @@ -1855,7 +1162,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1867,7 +1174,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": ".venv", "language": "python", "name": "python3" }, diff --git a/notebooks/tutorials/03_segmentation_app.ipynb b/notebooks/tutorials/03_segmentation_app.ipynb index 13c8e7ff..c09a7fd1 100644 --- a/notebooks/tutorials/03_segmentation_app.ipynb +++ b/notebooks/tutorials/03_segmentation_app.ipynb @@ -92,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -120,34 +120,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Download/Extract ai_spleen_bundle_data from Google Drive" + "### Download/Extract ai_spleen_bundle_data from Google Drive\n", + "\n", + "**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing). Please download zip file, `ai_spleen_seg_bundle_data.zip` in the `ai_spleen_seg_app` folder, to the same folder as the notebook example." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", - "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.4)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.7)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.2.1)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", - "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", - "Downloading...\n", - "From (original): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", - "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=cec9025c-9d57-4269-b01f-503cd7daf812\n", - "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_spleen_seg_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 105MB/s]\n", "Archive: ai_spleen_seg_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -359,9 +345,9 @@ } ], "source": [ - "# Download ai_spleen_bundle_data test data zip file\n", - "!pip install gdown \n", - "!gdown \"https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\"\n", + "# Download ai_spleen_bundle_data test data zip file. Please request access and download manually.\n", + "# !pip install gdown\n", + "# !gdown \"https://drive.google.com/uc?id=1IwWMpbo2fd38fKIqeIdL8SKTGvkn31tK\"\n", "\n", "# After downloading ai_spleen_bundle_data zip file from the web browser or using gdown,\n", "!unzip -o \"ai_spleen_seg_bundle_data.zip\"\n", @@ -373,7 +359,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -403,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -464,7 +450,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -616,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -737,118 +723,109 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-23 15:42:43,990] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-23 15:42:43,998] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2024-04-23 15:42:44,000] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", - "[info] [gxf_executor.cpp:247] Creating context\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", - "[2024-04-23 15:42:44,046] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m2024-04-23 15:42:44.043 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 6 entities\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2024-04-23 15:42:44,615] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-23 15:42:44,616] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[info] [gxf_executor.cpp:292] Destroying context\n", + "[2025-01-16 16:17:05,271] [INFO] (__main__.AISpleenSegApp) - Begin run\n", + "[info] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 16:17:05,286] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-16 16:17:05,293] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2025-01-16 16:17:05,295] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", + "[info] [gxf_executor.cpp:262] Creating context\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:2178] Activating Graph...\n", + "[info] [gxf_executor.cpp:2208] Running Graph...\n", + "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", + "[2025-01-16 16:17:05,329] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-16 16:17:05,905] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-16 16:17:05,906] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-23 15:42:44,617] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 15:42:44,618] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-23 15:42:44,618] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-23 15:42:44,618] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 15:42:44,619] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-23 15:42:44,619] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-23 15:42:44,620] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 15:42:44,620] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-23 15:42:44,621] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-23 15:42:44,621] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 15:42:44,622] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2024-04-23 15:42:44,622] [INFO] (root) - Series attribute ImageType value: None\n", - "[2024-04-23 15:42:44,623] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 15:42:44,860] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2024-04-23 15:42:44,862] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2024-04-23 15:42:44,862] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2024-04-23 15:42:44,863] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2024-04-23 15:42:44,864] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2024-04-23 15:42:44,864] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2024-04-23 15:42:44,865] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2024-04-23 15:42:44,866] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2024-04-23 15:42:44,866] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2024-04-23 15:42:44,867] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2024-04-23 15:42:44,867] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2024-04-23 15:42:44,868] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2024-04-23 15:42:44,869] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2024-04-23 15:42:44,869] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2024-04-23 15:42:44,870] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-01-16 16:17:05,907] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 16:17:05,908] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-16 16:17:05,910] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-16 16:17:05,911] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 16:17:05,913] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-16 16:17:05,915] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-16 16:17:05,918] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 16:17:05,919] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-16 16:17:05,921] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-16 16:17:05,922] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 16:17:05,923] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-01-16 16:17:05,924] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-01-16 16:17:05,928] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 16:17:06,800] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-01-16 16:17:06,801] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-01-16 16:17:06,802] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-01-16 16:17:06,803] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-01-16 16:17:06,803] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-01-16 16:17:06,804] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-01-16 16:17:06,805] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-01-16 16:17:06,806] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-01-16 16:17:06,807] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-01-16 16:17:06,807] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-01-16 16:17:06,808] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-01-16 16:17:06,809] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-01-16 16:17:06,811] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-01-16 16:17:06,813] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-01-16 16:17:06,815] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2024-04-23 15:42:44,871] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-01-16 16:17:06,816] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2024-04-23 15:42:44,872] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2024-04-23 15:42:44,873] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2024-04-23 15:42:44,875] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2024-04-23 15:42:44,876] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2024-04-23 15:42:44,877] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2024-04-23 15:42:44,878] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2024-04-23 15:42:44,879] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" + "[2025-01-16 16:17:06,818] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-01-16 16:17:06,819] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-01-16 16:17:06,820] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-01-16 16:17:06,821] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-01-16 16:17:06,822] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-01-16 16:17:06,823] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-01-16 16:17:06,824] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2024-04-23 15:42:45,610 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2024-04-23 15:42:51,791 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" + "2025-01-16 16:17:08,010 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2025-01-16 16:17:11,416 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-23 15:42:53,711] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2024-04-23 15:42:53,718] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", - " warnings.warn(\n", - "[2024-04-23 15:42:55,113] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 15:42:55,114] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-23 15:42:55,115] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 15:42:55,116] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-23 15:42:55,118] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-23 15:42:55,119] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 15:42:55,120] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-23 15:42:55,121] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-23 15:42:55,122] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[2024-04-23 15:42:55,233] [INFO] (__main__.AISpleenSegApp) - End run\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m2024-04-23 15:42:55.231 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 15:42:55.231 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" + "[2025-01-16 16:17:13,882] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2025-01-16 16:17:13,888] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + " check_person_name(patient_name)\n", + "[2025-01-16 16:17:15,281] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 16:17:15,282] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-16 16:17:15,283] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 16:17:15,284] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-16 16:17:15,286] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-16 16:17:15,287] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 16:17:15,289] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-16 16:17:15,290] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-16 16:17:15,290] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[2025-01-16 16:17:15,444] [INFO] (__main__.AISpleenSegApp) - End run\n" ] } ], @@ -881,7 +858,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -898,7 +875,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -1074,7 +1051,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -1231,7 +1208,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 38, "metadata": {}, "outputs": [ { @@ -1252,7 +1229,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -1280,89 +1257,96 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 15:42:59,956] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2024-04-23 15:42:59,957] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2024-04-23 15:42:59,957] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", - "\u001b[0m2024-04-23 15:42:59.985 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 6 entities\u001b[0m\n", - "[2024-04-23 15:42:59,987] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-23 15:43:00,516] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 16:17:25,763] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2025-01-16 16:17:25,766] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2025-01-16 16:17:25,766] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", + "[2025-01-16 16:17:25,781] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-16 16:17:26,696] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-16 16:17:26,696] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - Series attribute ImageType value: None\n", - "[2024-04-23 15:43:00,517] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2024-04-23 15:43:00,884] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-01-16 16:17:26,696] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 16:17:26,696] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-16 16:17:26,696] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-16 16:17:26,696] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 16:17:26,696] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-16 16:17:26,696] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-16 16:17:26,696] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 16:17:26,697] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-16 16:17:26,697] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-16 16:17:26,697] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 16:17:26,697] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-01-16 16:17:26,697] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-01-16 16:17:26,697] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2024-04-23 15:43:00,885] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2024-04-23 15:43:00,886] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", - "2024-04-23 15:43:01,872 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2024-04-23 15:43:08,194 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", - "[2024-04-23 15:43:09,761] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2024-04-23 15:43:09,767] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", - " warnings.warn(\n", - "[2024-04-23 15:43:11,092] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-23 15:43:11,093] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "\u001b[0m2024-04-23 15:43:11.181 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 15:43:11.181 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[2024-04-23 15:43:11,183] [INFO] (app.AISpleenSegApp) - End run\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:275] Destroying context\n" + "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "2025-01-16 16:17:28,884 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2025-01-16 16:17:34,343 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "[2025-01-16 16:17:36,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2025-01-16 16:17:36,745] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + " check_person_name(patient_name)\n", + "[2025-01-16 16:17:38,989] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 16:17:38,989] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-16 16:17:38,989] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 16:17:38,989] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-16 16:17:38,990] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-16 16:17:38,990] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 16:17:38,990] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-16 16:17:38,990] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-16 16:17:38,991] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[2025-01-16 16:17:39,311] [INFO] (app.AISpleenSegApp) - End run\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:292] Destroying context\n" ] } ], @@ -1373,7 +1357,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -1381,7 +1365,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.57940295875624111168999103278306755.dcm\n", + "1.2.826.0.1.3680043.10.511.3.76053921177937350011362220581935219.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", @@ -1415,7 +1399,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -1445,7 +1429,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -1465,7 +1449,8 @@ "pydicom>=2.3.0\n", "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", - "torch>=1.12.0" + "torch>=1.12.0\n", + "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue" ] }, { @@ -1481,23 +1466,23 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 15:43:13,349] [INFO] (common) - Downloading CLI manifest file...\n", - "[2024-04-23 15:43:13,718] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2024-04-23 15:43:13,720] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2024-04-23 15:43:13,721] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2024-04-23 15:43:13,721] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2024-04-23 15:43:13,722] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2024-04-23 15:43:13,722] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2024-04-23 15:43:13,725] [INFO] (packager) - Generating app.json...\n", - "[2024-04-23 15:43:13,726] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-23 15:43:13,738] [DEBUG] (common) - \n", + "[2025-01-16 16:17:47,580] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-16 16:17:47,837] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-16 16:17:47,838] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-01-16 16:17:47,838] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-01-16 16:17:47,839] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-01-16 16:17:47,840] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-01-16 16:17:47,840] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-01-16 16:17:47,845] [INFO] (packager) - Generating app.json...\n", + "[2025-01-16 16:17:47,845] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-16 16:17:47,850] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1525,14 +1510,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.5.1\",\n", + " \"sdkVersion\": \"2.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2024-04-23 15:43:13,739] [DEBUG] (common) - \n", + "[2025-01-16 16:17:47,851] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1552,15 +1537,115 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-23 15:43:13,775] [DEBUG] (packager.builder) - \n", + "[2025-01-16 16:17:47,941] [DEBUG] (packager.builder) - \n", + "========== Begin Build Parameters ==========\n", + "{'additional_lib_paths': '',\n", + " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", + " 'app_dir': PosixPath('/opt/holoscan/app'),\n", + " 'app_json': '/etc/holoscan/app.json',\n", + " 'application': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app'),\n", + " 'application_directory': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app'),\n", + " 'application_type': 'PythonModule',\n", + " 'build_cache': PosixPath('/home/mqin/.holoscan_build_cache'),\n", + " 'cmake_args': '',\n", + " 'command': '[\"python3\", \"/opt/holoscan/app\"]',\n", + " 'command_filename': 'my_app',\n", + " 'config_file_path': PosixPath('/var/holoscan/app.yaml'),\n", + " 'docs_dir': PosixPath('/opt/holoscan/docs'),\n", + " 'full_input_path': PosixPath('/var/holoscan/input'),\n", + " 'full_output_path': PosixPath('/var/holoscan/output'),\n", + " 'gid': 1000,\n", + " 'holoscan_sdk_version': '2.8.0',\n", + " 'includes': [],\n", + " 'input_dir': 'input/',\n", + " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", + " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", + " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", + " 'models_dir': PosixPath('/opt/holoscan/models'),\n", + " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'no_cache': False,\n", + " 'output_dir': 'output/',\n", + " 'pip_packages': None,\n", + " 'pkg_json': '/etc/holoscan/pkg.json',\n", + " 'requirements_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/requirements.txt'),\n", + " 'sdk': ,\n", + " 'sdk_type': 'monai-deploy',\n", + " 'tarball_output': None,\n", + " 'timeout': 0,\n", + " 'title': 'MONAI Deploy App Package - MONAI Bundle AI App',\n", + " 'uid': 1000,\n", + " 'username': 'holoscan',\n", + " 'version': 1.0,\n", + " 'working_dir': PosixPath('/var/holoscan')}\n", + "=========== End Build Parameters ===========\n", + "\n", + "[2025-01-16 16:17:47,941] [DEBUG] (packager.builder) - \n", + "========== Begin Platform Parameters ==========\n", + "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", + " 'build_image': None,\n", + " 'cuda_deb_arch': 'x86_64',\n", + " 'custom_base_image': False,\n", + " 'custom_holoscan_sdk': False,\n", + " 'custom_monai_deploy_sdk': False,\n", + " 'gpu_type': 'dgpu',\n", + " 'holoscan_deb_arch': 'amd64',\n", + " 'holoscan_sdk_file': '2.8.0',\n", + " 'holoscan_sdk_filename': '2.8.0',\n", + " 'monai_deploy_sdk_file': None,\n", + " 'monai_deploy_sdk_filename': None,\n", + " 'tag': 'my_app:1.0',\n", + " 'target_arch': 'x86_64'}\n", + "=========== End Platform Parameters ===========\n", + "\n", + "[2025-01-16 16:17:47,973] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", + "ARG GPU_TYPE=dgpu\n", + "\n", + "\n", + "\n", + "\n", + "FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04 AS base\n", + "\n", + "RUN apt-get update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " curl \\\n", + " jq \\\n", + " && rm -rf /var/lib/apt/lists/*\n", + "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", + "\n", + "# FROM base AS mofed-installer\n", + "# ARG MOFED_VERSION=23.10-2.1.3.1\n", + "\n", + "# # In a container, we only need to install the user space libraries, though the drivers are still\n", + "# # needed on the host.\n", + "# # Note: MOFED's installation is not easily portable, so we can't copy the output of this stage\n", + "# # to our final stage, but must inherit from it. For that reason, we keep track of the build/install\n", + "# # only dependencies in the `MOFED_DEPS` variable (parsing the output of `--check-deps-only`) to\n", + "# # remove them in that same layer, to ensure they are not propagated in the final image.\n", + "# WORKDIR /opt/nvidia/mofed\n", + "# ARG MOFED_INSTALL_FLAGS=\"--dpdk --with-mft --user-space-only --force --without-fw-update\"\n", + "# RUN UBUNTU_VERSION=$(cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d= -f2) \\\n", + "# && OFED_PACKAGE=\"MLNX_OFED_LINUX-${MOFED_VERSION}-ubuntu${UBUNTU_VERSION}-$(uname -m)\" \\\n", + "# && curl -S -# -o ${OFED_PACKAGE}.tgz -L \\\n", + "# https://www.mellanox.com/downloads/ofed/MLNX_OFED-${MOFED_VERSION}/${OFED_PACKAGE}.tgz \\\n", + "# && tar xf ${OFED_PACKAGE}.tgz \\\n", + "# && MOFED_INSTALLER=$(find . -name mlnxofedinstall -type f -executable -print) \\\n", + "# && MOFED_DEPS=$(${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} --check-deps-only 2>/dev/null | tail -n1 | cut -d' ' -f3-) \\\n", + "# && apt-get update \\\n", + "# && apt-get install --no-install-recommends -y ${MOFED_DEPS} \\\n", + "# && ${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} \\\n", + "# && rm -r * \\\n", + "# && apt-get remove -y ${MOFED_DEPS} && apt-get autoremove -y \\\n", + "# && rm -rf /var/lib/apt/lists/*\n", + "\n", + "FROM base AS release\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", "\n", + "ARG GPU_TYPE\n", "ARG UNAME\n", "ARG UID\n", "ARG GID\n", @@ -1572,15 +1657,14 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\"\n", "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.0.0\"\n", - "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "LABEL org.nvidia.holoscan=\"2.8.0\"\n", "\n", + "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", "\n", - "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", "ENV HOLOSCAN_WORKDIR=/var/holoscan\n", @@ -1592,21 +1676,40 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV PATH=/root/.local/bin:/opt/nvidia/holoscan:$PATH\n", - "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/libtorch/1.13.1/lib/:/opt/nvidia/holoscan/lib\n", + "ENV HOLOSCAN_VERSION=2.8.0\n", "\n", - "RUN apt-get update \\\n", - " && apt-get install -y curl jq \\\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# If torch is installed, we can skip installing Python\n", + "ENV PYTHON_VERSION=3.10.6-1~22.04\n", + "ENV PYTHON_PIP_VERSION=22.0.2+dfsg-*\n", + "\n", + "RUN apt update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " python3-minimal=${PYTHON_VERSION} \\\n", + " libpython3-stdlib=${PYTHON_VERSION} \\\n", + " python3=${PYTHON_VERSION} \\\n", + " python3-venv=${PYTHON_VERSION} \\\n", + " python3-pip=${PYTHON_PIP_VERSION} \\\n", " && rm -rf /var/lib/apt/lists/*\n", "\n", - "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", - "RUN chown -R holoscan /var/holoscan \n", - "RUN chown -R holoscan /var/holoscan/input \n", - "RUN chown -R holoscan /var/holoscan/output \n", + "RUN chown -R holoscan /var/holoscan && \\\n", + " chown -R holoscan /var/holoscan/input && \\\n", + " chown -R holoscan /var/holoscan/output\n", "\n", "# Set the working directory\n", "WORKDIR /var/holoscan\n", @@ -1615,303 +1718,496 @@ "COPY ./tools /var/holoscan/tools\n", "RUN chmod +x /var/holoscan/tools\n", "\n", - "\n", - "# Copy gRPC health probe\n", + "# Set the working directory\n", + "WORKDIR /var/holoscan\n", "\n", "USER $UNAME\n", "\n", - "ENV PATH=/root/.local/bin:/home/holoscan/.local/bin:/opt/nvidia/holoscan:$PATH\n", + "ENV PATH=/home/${UNAME}/.local/bin:/opt/nvidia/holoscan/bin:$PATH\n", + "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/${UNAME}/.local/lib/python3.10/site-packages/holoscan/lib\n", "\n", "COPY ./pip/requirements.txt /tmp/requirements.txt\n", "\n", "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - " \n", - "# MONAI Deploy\n", "\n", - "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "# Install MONAI Deploy App SDK\n", + "\n", + "# Install MONAI Deploy from PyPI org\n", + "RUN pip install monai-deploy-app-sdk==2.0.0\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", "\n", + "\n", "COPY ./map/app.json /etc/holoscan/app.json\n", "COPY ./app.config /var/holoscan/app.yaml\n", "COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "\n", "COPY ./app /opt/holoscan/app\n", "\n", + "\n", "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-23 15:43:13,775] [INFO] (packager.builder) - \n", + "[2025-01-16 16:17:47,973] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + " Base Image: nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + " Holoscan SDK Package: 2.8.0\n", + " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.0.0\n", + " SDK Version: 2.8.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + " Included features/dependencies: N/A\n", " \n", - "[2024-04-23 15:43:14,073] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-23 15:43:14,073] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-01-16 16:17:49,299] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-16 16:17:49,299] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.66kB done\n", + "#1 transferring dockerfile: 4.56kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#2 DONE 0.4s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#2 ...\n", + "\n", + "#3 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#3 DONE 0.0s\n", + "\n", + "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#2 DONE 0.5s\n", "\n", - "#3 [internal] load .dockerignore\n", - "#3 transferring context: 1.79kB done\n", - "#3 DONE 0.1s\n", + "#4 [internal] load .dockerignore\n", + "#4 transferring context: 1.79kB done\n", + "#4 DONE 0.1s\n", "\n", - "#4 [internal] load build context\n", - "#4 DONE 0.0s\n", + "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#5 ...\n", "\n", - "#5 importing cache manifest from local:12311818318063394630\n", - "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", - "#5 DONE 0.0s\n", + "#6 [internal] load build context\n", + "#6 DONE 0.0s\n", "\n", - "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.1s done\n", - "#6 DONE 0.1s\n", + "#7 importing cache manifest from local:10138938764133549295\n", + "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#7 DONE 0.0s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#7 DONE 0.7s\n", + "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#5 DONE 0.7s\n", "\n", - "#4 [internal] load build context\n", - "#4 transferring context: 19.56MB 0.1s done\n", - "#4 DONE 0.2s\n", + "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", + "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.1s done\n", + "#8 DONE 0.1s\n", "\n", - "#8 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", - "#8 CACHED\n", + "#6 [internal] load build context\n", + "#6 transferring context: 19.43MB 0.2s done\n", + "#6 DONE 0.2s\n", "\n", - "#9 [ 9/21] WORKDIR /var/holoscan\n", + "#9 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#9 CACHED\n", "\n", - "#10 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#10 [release 6/18] WORKDIR /var/holoscan\n", "#10 CACHED\n", "\n", - "#11 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", + "#11 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#11 CACHED\n", "\n", - "#12 [13/21] RUN pip install --upgrade pip\n", + "#12 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#12 CACHED\n", "\n", - "#13 [10/21] COPY ./tools /var/holoscan/tools\n", + "#13 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#13 CACHED\n", "\n", - "#14 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#14 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#14 CACHED\n", "\n", - "#15 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#15 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#15 CACHED\n", "\n", - "#16 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#16 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#16 CACHED\n", "\n", - "#17 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#17 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#17 CACHED\n", "\n", - "#18 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#18 [release 9/18] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [11/21] RUN chmod +x /var/holoscan/tools\n", - "#19 CACHED\n", - "\n", - "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#20 CACHED\n", - "\n", - "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#21 DONE 0.8s\n", - "\n", - "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#22 0.711 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.833 Processing /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#22 0.843 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.23.5)\n", - "#22 1.040 Collecting holoscan~=2.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.139 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (6.7 kB)\n", - "#22 1.213 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.216 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.308 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.312 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.349 Requirement already satisfied: pip>=20.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (24.0)\n", - "#22 1.350 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (12.2.0)\n", - "#22 1.351 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", - "#22 1.353 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.60.1)\n", - "#22 1.353 Requirement already satisfied: Jinja2==3.1.3 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.1.3)\n", - "#22 1.354 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (23.1)\n", - "#22 1.355 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (6.0)\n", - "#22 1.356 Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.31.0)\n", - "#22 1.357 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (5.9.6)\n", - "#22 1.468 Collecting wheel-axle-runtime<1.0 (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.474 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", - "#22 1.512 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.8.2)\n", - "#22 1.515 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.1.3)\n", - "#22 1.529 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.10.15)\n", - "#22 1.529 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.66.2)\n", - "#22 1.530 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.12.3)\n", - "#22 1.531 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.11.0)\n", - "#22 1.540 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.3.2)\n", - "#22 1.541 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.7)\n", - "#22 1.542 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", - "#22 1.543 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2024.2.2)\n", - "#22 1.563 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.13.4)\n", - "#22 1.586 Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (8.1.7)\n", - "#22 1.587 Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.5.4)\n", - "#22 1.588 Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (13.7.1)\n", - "#22 1.623 Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.0.0)\n", - "#22 1.624 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.17.2)\n", - "#22 1.645 Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.1.2)\n", - "#22 1.662 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.686 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.2 MB)\n", - "#22 2.182 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.2/33.2 MB 44.5 MB/s eta 0:00:00\n", - "#22 2.187 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", - "#22 2.210 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", - "#22 2.567 Installing collected packages: wheel-axle-runtime, typeguard, colorama, holoscan, monai-deploy-app-sdk\n", - "#22 3.333 Successfully installed colorama-0.4.6 holoscan-2.0.0 monai-deploy-app-sdk-0.5.1+20.gb869749.dirty typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", - "#22 DONE 3.7s\n", - "\n", - "#23 [17/21] COPY ./models /opt/holoscan/models\n", + "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 DONE 0.1s\n", + "\n", + "#20 [release 11/18] RUN pip install --upgrade pip\n", + "#20 1.023 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 1.060 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.248 Collecting pip\n", + "#20 1.301 Downloading pip-24.3.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.370 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 29.6 MB/s eta 0:00:00\n", + "#20 1.411 Installing collected packages: pip\n", + "#20 2.169 Successfully installed pip-24.3.1\n", + "#20 DONE 2.4s\n", + "\n", + "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 0.715 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.731 Downloading highdicom-0.23.1-py3-none-any.whl.metadata (4.6 kB)\n", + "#21 0.829 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.976 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 1.214 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 1.219 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.416 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.420 Downloading numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.438 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.443 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.449 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.480 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.484 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.545 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.549 Downloading torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.644 Collecting holoscan==2.6.0 (from -r /tmp/requirements.txt (line 9))\n", + "#21 1.650 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.2 kB)\n", + "#21 1.655 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9)) (24.3.1)\n", + "#21 1.669 Collecting cupy-cuda12x==12.2 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 1.673 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", + "#21 1.688 Collecting cloudpickle==2.2.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 1.694 Downloading cloudpickle-2.2.1-py3-none-any.whl.metadata (6.9 kB)\n", + "#21 1.746 Collecting python-on-whales==0.60.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 1.750 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", + "#21 1.767 Collecting Jinja2==3.1.3 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 1.771 Downloading Jinja2-3.1.3-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 1.865 Collecting packaging==23.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 1.869 Downloading packaging-23.1-py3-none-any.whl.metadata (3.1 kB)\n", + "#21 1.905 Collecting pyyaml==6.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 1.909 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (2.0 kB)\n", + "#21 1.942 Collecting requests==2.31.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 1.945 Downloading requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)\n", + "#21 2.029 Collecting psutil==6.0.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.035 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (21 kB)\n", + "#21 2.119 Collecting wheel-axle-runtime<1.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.125 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#21 2.142 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 2.146 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 2.221 Collecting fastrlock>=0.5 (from cupy-cuda12x==12.2->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.226 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#21 2.287 Collecting MarkupSafe>=2.0 (from Jinja2==3.1.3->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.290 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.428 Collecting pydantic<2,>=1.5 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.434 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", + "#21 2.491 Collecting tqdm (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.494 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "#21 2.515 Collecting typer>=0.4.1 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.519 Downloading typer-0.15.1-py3-none-any.whl.metadata (15 kB)\n", + "#21 2.535 Collecting typing-extensions (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.538 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 2.639 Collecting charset-normalizer<4,>=2 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.643 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#21 2.656 Collecting idna<4,>=2.5 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.659 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#21 2.714 Collecting urllib3<3,>=1.21.1 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.718 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#21 2.738 Collecting certifi>=2017.4.17 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.742 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 2.994 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 2.997 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", + "#21 3.103 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 3.109 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.161 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 3.165 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 3.220 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.224 Downloading filelock-3.16.1-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 3.263 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.266 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 3.299 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.304 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 3.357 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.360 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 3.372 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.376 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 3.387 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.391 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 3.402 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.406 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 3.420 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.423 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 3.435 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.439 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 3.450 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.454 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 3.464 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.468 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 3.479 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.483 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 3.494 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.502 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 3.519 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.523 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 3.541 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.548 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 3.562 Collecting triton==3.1.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.565 Downloading triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.3 kB)\n", + "#21 3.588 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.592 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 3.622 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.625 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 3.639 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 3.640 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 3.647 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.657 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.707 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.711 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 3.732 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.735 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "#21 3.793 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.796 Downloading rich-13.9.4-py3-none-any.whl.metadata (18 kB)\n", + "#21 3.823 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.827 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", + "#21 3.852 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.855 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", + "#21 3.877 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.884 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "#21 3.900 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl (40.8 MB)\n", + "#21 4.267 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 MB 113.8 MB/s eta 0:00:00\n", + "#21 4.276 Downloading cloudpickle-2.2.1-py3-none-any.whl (25 kB)\n", + "#21 4.286 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl (82.0 MB)\n", + "#21 5.333 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 82.0/82.0 MB 78.6 MB/s eta 0:00:00\n", + "#21 5.339 Downloading Jinja2-3.1.3-py3-none-any.whl (133 kB)\n", + "#21 5.345 Downloading packaging-23.1-py3-none-any.whl (48 kB)\n", + "#21 5.354 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (290 kB)\n", + "#21 5.364 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", + "#21 5.375 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (682 kB)\n", + "#21 5.385 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 682.2/682.2 kB 150.6 MB/s eta 0:00:00\n", + "#21 5.393 Downloading requests-2.31.0-py3-none-any.whl (62 kB)\n", + "#21 5.402 Downloading highdicom-0.23.1-py3-none-any.whl (836 kB)\n", + "#21 5.417 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 836.4/836.4 kB 83.3 MB/s eta 0:00:00\n", + "#21 5.429 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 5.446 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 129.0 MB/s eta 0:00:00\n", + "#21 5.452 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 5.484 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 115.8 MB/s eta 0:00:00\n", + "#21 5.490 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 5.661 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 112.0 MB/s eta 0:00:00\n", + "#21 5.670 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 5.695 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 115.4 MB/s eta 0:00:00\n", + "#21 5.706 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 6.255 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 96.5 MB/s eta 0:00:00\n", + "#21 6.264 Downloading torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl (906.4 MB)\n", + "#21 15.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 906.4/906.4 MB 92.4 MB/s eta 0:00:00\n", + "#21 15.27 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 18.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 98.5 MB/s eta 0:00:00\n", + "#21 18.89 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 19.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.4 MB/s eta 0:00:00\n", + "#21 19.02 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 19.24 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.5 MB/s eta 0:00:00\n", + "#21 19.25 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 19.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 163.1 MB/s eta 0:00:00\n", + "#21 19.27 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 25.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 107.5 MB/s eta 0:00:00\n", + "#21 25.26 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 27.28 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 104.9 MB/s eta 0:00:00\n", + "#21 27.29 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 27.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 106.6 MB/s eta 0:00:00\n", + "#21 27.83 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 29.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 108.3 MB/s eta 0:00:00\n", + "#21 29.03 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 31.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 94.7 MB/s eta 0:00:00\n", + "#21 31.23 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 32.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 114.7 MB/s eta 0:00:00\n", + "#21 32.89 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 33.23 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 62.8 MB/s eta 0:00:00\n", + "#21 33.23 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 33.24 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 33.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 117.8 MB/s eta 0:00:00\n", + "#21 33.31 Downloading triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (209.5 MB)\n", + "#21 35.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 209.5/209.5 MB 90.1 MB/s eta 0:00:00\n", + "#21 35.64 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 35.65 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "#21 35.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 115.5 MB/s eta 0:00:00\n", + "#21 35.70 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 35.73 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 121.6 MB/s eta 0:00:00\n", + "#21 35.74 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", + "#21 35.75 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#21 35.75 Downloading filelock-3.16.1-py3-none-any.whl (16 kB)\n", + "#21 35.76 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", + "#21 35.76 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 35.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 119.1 MB/s eta 0:00:00\n", + "#21 35.78 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", + "#21 35.79 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#21 35.80 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#21 35.81 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#21 35.82 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 35.83 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 35.83 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 156.4 MB/s eta 0:00:00\n", + "#21 35.84 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", + "#21 35.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 116.8 MB/s eta 0:00:00\n", + "#21 35.88 Downloading typer-0.15.1-py3-none-any.whl (44 kB)\n", + "#21 35.89 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", + "#21 35.90 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "#21 35.90 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", + "#21 35.91 Downloading rich-13.9.4-py3-none-any.whl (242 kB)\n", + "#21 35.92 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", + "#21 35.93 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", + "#21 35.94 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", + "#21 35.95 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 134.3 MB/s eta 0:00:00\n", + "#21 35.96 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "#21 49.55 Installing collected packages: SimpleITK, mpmath, fastrlock, urllib3, typing-extensions, tqdm, sympy, shellingham, pyyaml, pygments, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, mdurl, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, click, charset-normalizer, certifi, wheel-axle-runtime, triton, requests, pyjpegls, pydantic, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, markdown-it-py, Jinja2, cupy-cuda12x, rich, nvidia-cusolver-cu12, highdicom, typer, torch, python-on-whales, monai, holoscan\n", + "#21 124.1 Successfully installed Jinja2-3.1.3 MarkupSafe-3.0.2 SimpleITK-2.4.1 certifi-2024.12.14 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-2.2.1 cupy-cuda12x-12.2.0 fastrlock-0.8.3 filelock-3.16.1 fsspec-2024.12.0 highdicom-0.23.1 holoscan-2.6.0 idna-3.10 importlib-resources-6.5.2 markdown-it-py-3.0.0 mdurl-0.1.2 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-23.1 pillow-11.1.0 psutil-6.0.0 pydantic-1.10.21 pydicom-3.0.1 pygments-2.19.1 pyjpegls-1.4.0 python-on-whales-0.60.1 pyyaml-6.0 requests-2.31.0 rich-13.9.4 shellingham-1.5.4 sympy-1.13.1 torch-2.5.1 tqdm-4.67.1 triton-3.1.0 typer-0.15.1 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", + "#21 DONE 125.4s\n", + "\n", + "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", + "#22 1.391 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 1.610 Collecting monai-deploy-app-sdk==2.0.0\n", + "#22 1.630 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", + "#22 1.654 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", + "#22 1.656 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.6.0)\n", + "#22 1.704 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", + "#22 1.709 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.802 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", + "#22 1.808 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.834 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.3.1)\n", + "#22 1.835 Requirement already satisfied: cupy-cuda12x==12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (12.2.0)\n", + "#22 1.836 Requirement already satisfied: cloudpickle==2.2.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.2.1)\n", + "#22 1.837 Requirement already satisfied: python-on-whales==0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.60.1)\n", + "#22 1.837 Requirement already satisfied: Jinja2==3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.3)\n", + "#22 1.838 Requirement already satisfied: packaging==23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (23.1)\n", + "#22 1.838 Requirement already satisfied: pyyaml==6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0)\n", + "#22 1.839 Requirement already satisfied: requests==2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.31.0)\n", + "#22 1.840 Requirement already satisfied: psutil==6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.0)\n", + "#22 1.840 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", + "#22 1.846 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", + "#22 1.848 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", + "#22 1.855 Requirement already satisfied: pydantic<2,>=1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.10.21)\n", + "#22 1.855 Requirement already satisfied: tqdm in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.67.1)\n", + "#22 1.856 Requirement already satisfied: typer>=0.4.1 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.15.1)\n", + "#22 1.856 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", + "#22 1.861 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", + "#22 1.862 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", + "#22 1.862 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", + "#22 1.863 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", + "#22 1.873 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.16.1)\n", + "#22 1.886 Requirement already satisfied: click>=8.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (8.1.8)\n", + "#22 1.887 Requirement already satisfied: shellingham>=1.3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.5.4)\n", + "#22 1.888 Requirement already satisfied: rich>=10.11.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.9.4)\n", + "#22 1.901 Requirement already satisfied: markdown-it-py>=2.2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.0)\n", + "#22 1.902 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.19.1)\n", + "#22 1.914 Requirement already satisfied: mdurl~=0.1 in /home/holoscan/.local/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.1.2)\n", + "#22 1.925 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", + "#22 1.949 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.970 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", + "#22 2.194 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", + "#22 2.361 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", + "#22 DONE 2.7s\n", + "\n", + "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", "#23 DONE 0.2s\n", "\n", - "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", + "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", "#24 DONE 0.1s\n", "\n", - "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", + "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", "#25 DONE 0.1s\n", "\n", - "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#26 DONE 0.1s\n", "\n", - "#27 [21/21] COPY ./app /opt/holoscan/app\n", + "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", "#27 DONE 0.1s\n", "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 4.7s done\n", - "#28 exporting manifest sha256:272f9320d555ec164d2cdbdf3af72c2508a3768b3438478dfebc976ab20bdef5 0.0s done\n", - "#28 exporting config sha256:af6b96cbe7081e40c1393d1adcbb0d90e60f1eee0f770de931c17ec7e661922f 0.0s done\n", + "#28 exporting layers 205.0s done\n", + "#28 exporting manifest sha256:b5de7fb835f449ac07a4279808b4a2c17058fba60dfd9e7078aa6e2170095160 0.0s done\n", + "#28 exporting config sha256:7b762d9bca4683bb5372f1446c10680cd780f8d2028d776a3b7170ce0e586fba 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer 5c74dcc5f86c 32.77kB / 125.82kB\n", - "#29 loading layer cf9ad481b317 557.06kB / 67.35MB\n", - "#29 loading layer c4db34b6201c 196.61kB / 17.81MB\n", - "#29 loading layer 37555bd01c91 490B / 490B\n", - "#29 loading layer 47758cf3f2be 313B / 313B\n", - "#29 loading layer f6490513de44 299B / 299B\n", - "#29 loading layer d1e36c8e77c6 3.91kB / 3.91kB\n", - "#29 loading layer 47758cf3f2be 313B / 313B 1.0s done\n", - "#29 loading layer 5c74dcc5f86c 32.77kB / 125.82kB 3.3s done\n", - "#29 loading layer cf9ad481b317 557.06kB / 67.35MB 3.2s done\n", - "#29 loading layer c4db34b6201c 196.61kB / 17.81MB 1.4s done\n", - "#29 loading layer 37555bd01c91 490B / 490B 1.1s done\n", - "#29 loading layer f6490513de44 299B / 299B 1.0s done\n", - "#29 loading layer d1e36c8e77c6 3.91kB / 3.91kB 0.9s done\n", - "#29 DONE 3.3s\n", + "#29 loading layer 883c651eec94 288B / 288B\n", + "#29 loading layer 882e8f4cf156 65.54kB / 5.03MB\n", + "#29 loading layer 9f353f6d59ee 557.06kB / 3.28GB\n", + "#29 loading layer 9f353f6d59ee 142.05MB / 3.28GB 6.2s\n", + "#29 loading layer 9f353f6d59ee 271.29MB / 3.28GB 12.4s\n", + "#29 loading layer 9f353f6d59ee 487.98MB / 3.28GB 16.5s\n", + "#29 loading layer 9f353f6d59ee 677.38MB / 3.28GB 20.7s\n", + "#29 loading layer 9f353f6d59ee 883.49MB / 3.28GB 24.7s\n", + "#29 loading layer 9f353f6d59ee 1.09GB / 3.28GB 28.8s\n", + "#29 loading layer 9f353f6d59ee 1.29GB / 3.28GB 32.9s\n", + "#29 loading layer 9f353f6d59ee 1.53GB / 3.28GB 37.0s\n", + "#29 loading layer 9f353f6d59ee 1.72GB / 3.28GB 41.2s\n", + "#29 loading layer 9f353f6d59ee 1.96GB / 3.28GB 45.3s\n", + "#29 loading layer 9f353f6d59ee 2.13GB / 3.28GB 49.5s\n", + "#29 loading layer 9f353f6d59ee 2.16GB / 3.28GB 55.1s\n", + "#29 loading layer 9f353f6d59ee 2.35GB / 3.28GB 61.2s\n", + "#29 loading layer 9f353f6d59ee 2.51GB / 3.28GB 67.4s\n", + "#29 loading layer 9f353f6d59ee 2.72GB / 3.28GB 71.5s\n", + "#29 loading layer 9f353f6d59ee 2.98GB / 3.28GB 75.6s\n", + "#29 loading layer 9f353f6d59ee 3.17GB / 3.28GB 81.8s\n", + "#29 loading layer ca1fe5d06ea9 32.77kB / 579.10kB\n", + "#29 loading layer 1c84ad13d4d7 196.61kB / 17.81MB\n", + "#29 loading layer 313542a3a9e5 492B / 492B\n", + "#29 loading layer 91ddb543620e 317B / 317B\n", + "#29 loading layer 7ea9ca4496c2 302B / 302B\n", + "#29 loading layer 313542a3a9e5 492B / 492B 0.3s done\n", + "#29 loading layer d1793e4b751a 3.94kB / 3.94kB\n", + "#29 loading layer 883c651eec94 288B / 288B 87.6s done\n", + "#29 loading layer 882e8f4cf156 65.54kB / 5.03MB 87.5s done\n", + "#29 loading layer 9f353f6d59ee 3.21GB / 3.28GB 86.9s done\n", + "#29 loading layer ca1fe5d06ea9 32.77kB / 579.10kB 0.8s done\n", + "#29 loading layer 1c84ad13d4d7 196.61kB / 17.81MB 0.6s done\n", + "#29 loading layer 91ddb543620e 317B / 317B 0.3s done\n", + "#29 loading layer 7ea9ca4496c2 302B / 302B 0.2s done\n", + "#29 loading layer d1793e4b751a 3.94kB / 3.94kB 0.1s done\n", + "#29 DONE 87.6s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 69.0s done\n", - "#28 DONE 73.8s\n", + "#28 sending tarball 132.5s done\n", + "#28 DONE 337.6s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015\n", - "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", - "#30 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", - "#30 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", - "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", - "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", - "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#30 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", - "#30 writing layer sha256:1f4a978bb76db2d138cfe7c7c9e76db4096247b06e34d349a2ed504bcd6a7ead done\n", - "#30 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", - "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#30 writing layer sha256:20e14f0a8ca68167afb8296c10d7a1b4c3b17b54681cbf3b9b45e1be96afa699 0.0s done\n", - "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", - "#30 writing layer sha256:255cc51d2e47738a5db3059cbe9f403785cf9496c7df8a28a3c9f0c46a0b3b58 done\n", - "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#30 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", - "#30 writing layer sha256:34c541b0f73b95f074d23fe925ff6a983a971ca2fbfad7bd9a6863b47994c312\n", - "#30 writing layer sha256:34c541b0f73b95f074d23fe925ff6a983a971ca2fbfad7bd9a6863b47994c312 0.4s done\n", - "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8\n", - "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", - "#30 writing layer sha256:3c91e9a3b2c9cb860c5001bb174d4ebf28358626e66f6e33f7b6209d6e0d2ce0 0.0s done\n", - "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", - "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", - "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", - "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", + "#30 writing layer sha256:081bfe8f8e11e818382810bb80503f619230a484153219082adae168fbf8396c\n", + "#30 writing layer sha256:081bfe8f8e11e818382810bb80503f619230a484153219082adae168fbf8396c 0.1s done\n", + "#30 writing layer sha256:0e189544a55690047b498cd3539bd123ae622202a9042225913d03ce1c6833a0\n", + "#30 writing layer sha256:0e189544a55690047b498cd3539bd123ae622202a9042225913d03ce1c6833a0 0.3s done\n", + "#30 writing layer sha256:1379a39f4ee98d75ce0813a148b40721a1d044b776dcf3c69bc25fa55a7fb409\n", + "#30 writing layer sha256:1379a39f4ee98d75ce0813a148b40721a1d044b776dcf3c69bc25fa55a7fb409 0.0s done\n", + "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#30 writing layer sha256:22b94b166959ca031b96456bdaa8a8bf9b3aea406e403ec6f96cfd8084ae9d64 0.0s done\n", + "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#30 writing layer sha256:41e173df84c503c9e717e0e67c22260d4e6bb14660577b225dec5733b4155a78 done\n", + "#30 writing layer sha256:45a11df8fc21851a3008fe386358f1172c0c589095845f174d42bb86db2f1c49\n", + "#30 writing layer sha256:45a11df8fc21851a3008fe386358f1172c0c589095845f174d42bb86db2f1c49 49.4s done\n", + "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 0.2s done\n", + "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", - "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", - "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#30 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", - "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", - "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#30 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", - "#30 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", - "#30 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", - "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#30 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", - "#30 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", - "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", - "#30 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", - "#30 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", - "#30 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", - "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", - "#30 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", - "#30 writing layer sha256:92301d1270c19cab329818fb215b41138720ab9b588a2070107860f0b6fb5e11\n", - "#30 writing layer sha256:92301d1270c19cab329818fb215b41138720ab9b588a2070107860f0b6fb5e11 1.4s done\n", - "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3\n", - "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", - "#30 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", - "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", - "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#30 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", - "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", - "#30 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", - "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", - "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", - "#30 writing layer sha256:add6bd0fec8e510c778856ae5993f823022a9a0230681b9333c83c58bca70f56 0.0s done\n", - "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", - "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", - "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#30 writing layer sha256:b93a8d787a5c613029585348476c2b6aa666ea47936e138082b0e9175a5583e0 0.0s done\n", - "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#30 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", - "#30 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", - "#30 writing layer sha256:c97f7fb19e2e0b8ee3e1065f4dee369e35029cc620cafb7fe3dec2e9e06a3ae0 done\n", - "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#30 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", - "#30 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", - "#30 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", - "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", - "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#30 writing layer sha256:f0d70ecec43610ba497f9ab128ee1fbb4ec2aabcacca4f5be136d13bd1ee0fcb 0.0s done\n", - "#30 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", - "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#30 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", - "#30 writing config sha256:d8b1ede40893d3af61eaf7d4d58ae3afaa55e9e0fc7722d020635c545f81df0c 0.0s done\n", - "#30 preparing build cache for export 2.6s done\n", - "#30 writing cache manifest sha256:00058bfc69cbf02a85b5242dfe17b06ca30b9c7312be3f7b2cf3aa215c57747f 0.0s done\n", - "#30 DONE 2.6s\n", - "[2024-04-23 15:44:38,817] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#30 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707 done\n", + "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#30 writing layer sha256:a1e7b959519ccdfb2adb42b59a134cfc9715d7cbffbff130a0f32bec129e4514 0.1s done\n", + "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", + "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#30 writing layer sha256:bfa5ec525f430f0d201578b006cd216f9bb89f61b91e96b5c2111bb04e7569e4\n", + "#30 writing layer sha256:bfa5ec525f430f0d201578b006cd216f9bb89f61b91e96b5c2111bb04e7569e4 0.2s done\n", + "#30 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94\n", + "#30 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94 0.0s done\n", + "#30 writing layer sha256:c8937b741c9ecd6b257aeb18daf07eddbf1c77b0c93f9ba4164faa8353cd1d3c done\n", + "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#30 writing layer sha256:e540d242f419a27800d601d7275f4fbb3488b97d209b454f52e63f1eb413a912 done\n", + "#30 writing layer sha256:edd12bb5b9c08c2e288fc295bf1f84feac12beac66caaa8a19956942eb729aef 0.1s done\n", + "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#30 writing layer sha256:f5fde379d4095f4d724bdbcb4a4851cd60e289756e2a6bbf03fdc1876d68d70b 0.1s done\n", + "#30 writing config sha256:f4279d2706416776e3bb6861a808890e284046f50af2a42e2a8b4cb8b1d078ba 0.0s done\n", + "#30 preparing build cache for export 50.8s done\n", + "#30 writing cache manifest sha256:8778ac8296a1eef32e320942180f024438bc19f8e53b1f74a672584566a828ed 0.0s done\n", + "#30 DONE 50.8s\n", + "[2025-01-16 16:26:32,367] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1937,14 +2233,14 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 af6b96cbe708 About a minute ago 17.7GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 7b762d9bca46 6 minutes ago 8.45GB\n" ] } ], @@ -1963,7 +2259,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 48, "metadata": {}, "outputs": [ { @@ -1972,22 +2268,22 @@ "text": [ "output\n", "dcm\n", - "[2024-04-23 15:44:40,497] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-23 15:44:40,497] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-01-16 16:32:17,206] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-16 16:32:17,206] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-23 15:44:40,497] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-01-16 16:32:17,207] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-23 15:44:40,497] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-01-16 16:32:17,209] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-23 15:44:40,571] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpojmzf387/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpojmzf387/pkg.json\n", - "[2024-04-23 15:44:41,518] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-01-16 16:32:17,419] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpgnvxx1p1/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpgnvxx1p1/pkg.json\n", + "[2025-01-16 16:32:17,704] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-23 15:44:41,518] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-01-16 16:32:17,705] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-23 15:44:41,869] [INFO] (common) - Launching container (a6bc36c774bd) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: dreamy_goldberg\n", + "[2025-01-16 16:32:18,172] [INFO] (common) - Launching container (75640cd60fab) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: pensive_robinson\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1997,93 +2293,93 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-23 22:44:42 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-01-17 00:32:19 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2024-04-23 22:44:46,465] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [fragment.cpp:585] Loading extensions from configs...\n", "\n", - "[2024-04-23 22:44:46,467] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[info] [gxf_executor.cpp:255] Creating context\n", "\n", - "[2024-04-23 22:44:46,467] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", + "[2025-01-17 00:32:27,067] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", + "[2025-01-17 00:32:27,077] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[info] [gxf_executor.cpp:247] Creating context\n", + "[2025-01-17 00:32:27,077] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", "\n", - "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", + "[info] [app_driver.cpp:1176] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1973] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:2003] Running Graph...\n", "\n", - "\u001b[0m2024-04-23 22:44:46.511 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 6 entities\u001b[0m\n", + "[info] [gxf_executor.cpp:2005] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", "\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", + "[2025-01-17 00:32:27,104] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2024-04-23 22:44:46,513] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-17 00:32:28,766] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-17 00:32:28,772] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-17 00:32:28,772] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-17 00:32:28,772] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-17 00:32:28,772] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-17 00:32:28,772] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-17 00:32:28,772] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-17 00:32:28,772] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-17 00:32:28,772] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-17 00:32:28,773] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-17 00:32:28,773] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-17 00:32:28,773] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-01-17 00:32:28,773] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-01-17 00:32:28,773] [INFO] (root) - Series attribute ImageType value: None\n", "\n", - "[2024-04-23 22:44:46,974] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-17 00:32:28,774] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-01-17 00:32:29,926] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", "\n", - "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-01-17 00:32:29,926] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", "\n", - "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-01-17 00:32:29,926] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", "\n", - "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-01-17 00:32:29,927] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", "\n", - "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-01-17 00:32:29,927] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", "\n", - "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-01-17 00:32:29,927] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", "\n", - "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-01-17 00:32:29,927] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", "\n", - "[2024-04-23 22:44:47,194] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-01-17 00:32:29,927] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", "\n", - "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-01-17 00:32:29,930] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", "\n", - "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-01-17 00:32:29,930] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", "\n", - "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-01-17 00:32:29,930] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", "\n", - "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-01-17 00:32:29,931] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", "\n", - "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-01-17 00:32:29,931] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", "\n", - "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-01-17 00:32:29,931] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", "\n", - "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-01-17 00:32:29,938] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", "\n", " [ 0. 0.7890625 0. -398.60547 ]\n", "\n", @@ -2091,7 +2387,7 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2024-04-23 22:44:47,195] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-01-17 00:32:29,939] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", "\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", "\n", @@ -2099,63 +2395,63 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-01-17 00:32:29,939] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", "\n", - "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-01-17 00:32:29,939] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", "\n", - "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-01-17 00:32:29,940] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", "\n", - "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-01-17 00:32:29,940] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", "\n", - "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-01-17 00:32:29,940] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", "\n", - "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-01-17 00:32:29,940] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", "\n", - "[2024-04-23 22:44:47,196] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "[2025-01-17 00:32:29,940] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", "\n", - "2024-04-23 22:44:47,986 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2025-01-17 00:33:37,448 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", "\n", - "2024-04-23 22:44:51,638 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "2025-01-17 00:45:52,727 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", "\n", - "[2024-04-23 22:44:53,491] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2025-01-17 00:46:04,570] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", "\n", - "[2024-04-23 22:44:53,497] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-01-17 00:46:05,016] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", - " warnings.warn(\n", + " check_person_name(patient_name)\n", "\n", - "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 00:46:08,718] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-17 00:46:08,794] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 00:46:08,794] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-17 00:46:08,794] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-17 00:46:08,803] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 00:46:08,804] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-23 22:44:54,694] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-17 00:46:08,804] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2024-04-23 22:44:54,695] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-17 00:46:08,805] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2024-04-23 22:44:54,695] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-17 00:46:08,805] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", - "\u001b[0m2024-04-23 22:44:54.787 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", - "\u001b[0m2024-04-23 22:44:54.788 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2008] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2016] Graph execution finished.\n", "\n", - "[2024-04-23 22:44:54,793] [INFO] (app.AISpleenSegApp) - End run\n", + "[2025-01-17 00:46:09,721] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[info] [gxf_executor.cpp:275] Destroying context\n", + "[info] [gxf_executor.cpp:284] Destroying context\n", "\n", - "[2024-04-23 15:44:56,376] [INFO] (common) - Container 'dreamy_goldberg'(a6bc36c774bd) exited.\n" + "[2025-01-16 16:46:26,092] [INFO] (common) - Container 'pensive_robinson'(75640cd60fab) exited.\n" ] } ], @@ -2169,7 +2465,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -2177,7 +2473,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.57272145768055517649062567242794544.dcm\n", + "1.2.826.0.1.3680043.10.511.3.60700946839990713142461529413707592.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", @@ -2196,7 +2492,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 ('.venv': venv)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -2211,11 +2507,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" - }, - "vscode": { - "interpreter": { - "hash": "9b4ab1155d0cd1042497eb40fd55b2d15caf4b3c0f9fbfcc7ba4404045d40f12" - } } }, "nbformat": 4, diff --git a/notebooks/tutorials/03_segmentation_viz_app.ipynb b/notebooks/tutorials/03_segmentation_viz_app.ipynb index a2c29a98..173dc764 100644 --- a/notebooks/tutorials/03_segmentation_viz_app.ipynb +++ b/notebooks/tutorials/03_segmentation_viz_app.ipynb @@ -85,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -118,34 +118,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Download/Extract input and model/bundle files from Google Drive" + "### Download/Extract input and model/bundle files from Google Drive\n", + "\n", + "**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing). Please download zip file, `ai_spleen_seg_bundle_data.zip` in the `ai_spleen_seg_app` folder, to the same folder as the notebook example." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", - "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.4)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.7)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.2.1)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", - "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", - "Downloading...\n", - "From (original): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", - "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=c8244ec0-ca91-472f-8701-075a197bb44e\n", - "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_spleen_seg_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 99.7MB/s]\n", "Archive: ai_spleen_seg_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -357,9 +343,9 @@ } ], "source": [ - "# Download the test data and MONAI bundle zip file\n", - "!pip install gdown\n", - "!gdown \"https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\"\n", + "# Download ai_spleen_bundle_data test data zip file. Please request access and download manually.\n", + "# !pip install gdown\n", + "# !gdown \"https://drive.google.com/uc?id=1IwWMpbo2fd38fKIqeIdL8SKTGvkn31tK\"\n", "\n", "# Clean up the destinaton folder for the input DICOM files\n", "!rm -rf dcm\n", @@ -382,7 +368,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -415,7 +401,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -475,7 +461,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -625,56 +611,57 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-23 17:21:11,103] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-23 17:21:11,110] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2024-04-23 17:21:11,119] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:247] Creating context\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", - "[2024-04-23 17:21:11,172] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m2024-04-23 17:21:11.171 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 10 entities\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2024-04-23 17:21:11,733] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-23 17:21:11,734] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[info] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 18:38:40,744] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-16 18:38:40,750] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2025-01-16 18:38:40,755] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:262] Creating context\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_file'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:2178] Activating Graph...\n", + "[info] [gxf_executor.cpp:2208] Running Graph...\n", + "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", + "[2025-01-16 18:38:40,785] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-16 18:38:41,165] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-16 18:38:41,167] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-23 17:21:11,735] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 17:21:11,736] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-23 17:21:11,736] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-23 17:21:11,737] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 17:21:11,737] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-23 17:21:11,738] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-23 17:21:11,738] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 17:21:11,739] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-23 17:21:11,739] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-23 17:21:11,740] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 17:21:11,740] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 17:21:11,964] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n" + "[2025-01-16 18:38:41,168] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 18:38:41,169] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-16 18:38:41,170] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-16 18:38:41,171] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:38:41,172] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-16 18:38:41,174] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-16 18:38:41,174] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:38:41,175] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-16 18:38:41,175] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-16 18:38:41,176] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:38:41,176] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 18:38:41,491] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", + " warnings.warn(\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "211ff45336804adab6957c462290a405", + "model_id": "8f60e4eaaf3b4902941c9adbdbb26efc", "version_major": 2, "version_minor": 0 }, @@ -689,31 +676,25 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-23 17:21:24,861] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2024-04-23 17:21:26,556] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2024-04-23 17:21:26,557] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", - " warnings.warn(\n", - "[2024-04-23 17:21:38,046] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 17:21:38,047] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-23 17:21:38,048] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 17:21:38,049] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-23 17:21:38,051] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-23 17:21:38,052] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 17:21:38,053] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-23 17:21:38,054] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-23 17:21:38,055] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[2024-04-23 17:21:38,152] [INFO] (__main__.AISpleenSegApp) - End run\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m2024-04-23 17:21:38.150 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 17:21:38.150 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" + "[2025-01-16 18:38:52,008] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2025-01-16 18:38:53,980] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-01-16 18:38:53,982] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + " check_person_name(patient_name)\n", + "[2025-01-16 18:39:05,570] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:39:05,571] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-16 18:39:05,572] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:39:05,573] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-16 18:39:05,575] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-16 18:39:05,576] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:39:05,577] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-16 18:39:05,579] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-16 18:39:05,580] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[2025-01-16 18:39:05,702] [INFO] (__main__.AISpleenSegApp) - End run\n" ] } ], @@ -740,7 +721,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -758,7 +739,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -961,7 +942,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -982,7 +963,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -1011,58 +992,71 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 17:21:43,227] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2024-04-23 17:21:43,229] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2024-04-23 17:21:43,230] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", - "\u001b[0m2024-04-23 17:21:43.261 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 10 entities\u001b[0m\n", - "[2024-04-23 17:21:43,263] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 18:39:12,216] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2025-01-16 18:39:12,218] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2025-01-16 18:39:12,220] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_file'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", + "[2025-01-16 18:39:12,231] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-16 18:39:12,884] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-16 18:39:12,884] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 17:21:43,601] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 17:21:43,818] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", - "Box(children=(Widget(), VBox(children=(interactive(children=(Dropdown(description='View mode', index=2, options=(('Cinematic', 'CINEMATIC'), ('Slice', 'SLICE'), ('Slice Segmentation', 'SLICE_SEGMENTATION')), value='SLICE_SEGMENTATION'), Output()), _dom_classes=('widget-interact',)), interactive(children=(Dropdown(description='Camera', options=('Top', 'Right', 'Front'), value='Top'), Output()), _dom_classes=('widget-interact',))))))\n", - "[2024-04-23 17:21:56,304] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2024-04-23 17:21:57,924] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2024-04-23 17:21:57,924] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2025-01-16 18:39:12,884] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 18:39:12,884] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:39:12,885] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:39:12,885] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:39:12,885] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 18:39:13,178] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2024-04-23 17:22:10,502] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 17:22:10,502] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-23 17:22:10,502] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 17:22:10,502] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-23 17:22:10,503] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-23 17:22:10,503] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 17:22:10,503] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-23 17:22:10,503] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-23 17:22:10,503] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "\u001b[0m2024-04-23 17:22:10.588 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 17:22:10.588 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[2024-04-23 17:22:10,590] [INFO] (app.AISpleenSegApp) - End run\n" + "Box(children=(Widget(), VBox(children=(interactive(children=(Dropdown(description='View mode', index=2, options=(('Cinematic', 'CINEMATIC'), ('Slice', 'SLICE'), ('Slice Segmentation', 'SLICE_SEGMENTATION')), value='SLICE_SEGMENTATION'), Output()), _dom_classes=('widget-interact',)), interactive(children=(Dropdown(description='Camera', options=('Top', 'Right', 'Front'), value='Top'), Output()), _dom_classes=('widget-interact',))))))\n", + "[2025-01-16 18:39:22,788] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2025-01-16 18:39:24,665] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-01-16 18:39:24,665] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + " check_person_name(patient_name)\n", + "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:39:36,022] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-16 18:39:36,022] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-16 18:39:36,022] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[2025-01-16 18:39:36,148] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1073,14 +1067,14 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.28732173401945631043953175363609741.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.7381661622403430418697652288923425.dcm stl\n" ] } ], @@ -1107,7 +1101,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 ('.venv': venv)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -1122,11 +1116,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" - }, - "vscode": { - "interpreter": { - "hash": "9b4ab1155d0cd1042497eb40fd55b2d15caf4b3c0f9fbfcc7ba4404045d40f12" - } } }, "nbformat": 4, diff --git a/notebooks/tutorials/04_monai_bundle_app.ipynb b/notebooks/tutorials/04_monai_bundle_app.ipynb index 174bc8e5..88f5ddcc 100644 --- a/notebooks/tutorials/04_monai_bundle_app.ipynb +++ b/notebooks/tutorials/04_monai_bundle_app.ipynb @@ -94,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -126,34 +126,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Download/Extract input and model/bundle files from Google Drive" + "### Download/Extract input and model/bundle files from Google Drive\n", + "\n", + "**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing). Please download zip file, `mednist_classifieai_spleen_seg_bundle_data.zip` in the `ai_spleen_seg_app` folder, to the same folder as the notebook example." ] }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", - "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.4)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.7)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.2.1)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", - "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", - "Downloading...\n", - "From (original): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\n", - "From (redirected): https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ&confirm=t&uuid=acdd1e9c-2382-4003-8390-b86e2e103d74\n", - "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_spleen_seg_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 79.4M/79.4M [00:00<00:00, 96.9MB/s]\n", "Archive: ai_spleen_seg_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -365,9 +351,9 @@ } ], "source": [ - "# Download the test data and MONAI bundle zip file\n", - "!pip install gdown\n", - "!gdown \"https://drive.google.com/uc?id=1Uds8mEvdGNYUuvFpTtCQ8gNU97bAPCaQ\"\n", + "# Download ai_spleen_bundle_data test data zip file. Please request access and download manually.\n", + "# !pip install gdown\n", + "# !gdown \"https://drive.google.com/uc?id=1IwWMpbo2fd38fKIqeIdL8SKTGvkn31tK\"\n", "\n", "# After downloading ai_spleen_bundle_data zip file from the web browser or using gdown,\n", "!unzip -o \"ai_spleen_seg_bundle_data.zip\"\n", @@ -387,7 +373,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -418,7 +404,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -475,7 +461,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -619,77 +605,69 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-23 16:51:59,898] [INFO] (root) - Begin __main__\n", - "[2024-04-23 16:51:59,901] [INFO] (__main__.AISpleenSegApp) - Begin run\n", - "[2024-04-23 16:51:59,902] [INFO] (root) - Begin compose\n", - "[2024-04-23 16:51:59,909] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-23 16:51:59,915] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2024-04-23 16:51:59,920] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:247] Creating context\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", - "[2024-04-23 16:51:59,943] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m2024-04-23 16:51:59.940 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 8 entities\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2024-04-23 16:52:00,393] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-23 16:52:00,394] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[info] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 18:46:54,471] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-16 18:46:54,485] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2025-01-16 18:46:54,496] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:262] Creating context\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_file'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:2178] Activating Graph...\n", + "[info] [gxf_executor.cpp:2208] Running Graph...\n", + "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", + "[2025-01-16 18:46:54,518] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-16 18:46:54,871] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-16 18:46:54,872] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-23 16:52:00,395] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 16:52:00,396] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-23 16:52:00,397] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-23 16:52:00,397] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:52:00,398] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-23 16:52:00,399] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-23 16:52:00,399] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:52:00,400] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-23 16:52:00,400] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-23 16:52:00,401] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:52:00,402] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 16:52:00,641] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", - "[2024-04-23 16:52:03,610] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2024-04-23 16:52:05,137] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2024-04-23 16:52:05,138] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", - "[2024-04-23 16:52:14,942] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:52:14,943] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-23 16:52:14,944] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:52:14,945] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-23 16:52:14,946] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-23 16:52:14,947] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:52:14,948] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-23 16:52:14,949] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-23 16:52:14,951] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[2024-04-23 16:52:15,056] [INFO] (__main__.AISpleenSegApp) - End run\n", - "[2024-04-23 16:52:15,057] [INFO] (root) - End __main__\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m2024-04-23 16:52:15.054 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 16:52:15.055 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" + "[2025-01-16 18:46:54,873] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 18:46:54,874] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-16 18:46:54,875] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-16 18:46:54,877] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:46:54,878] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-16 18:46:54,880] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-16 18:46:54,882] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:46:54,883] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-16 18:46:54,883] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-16 18:46:54,884] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:46:54,886] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 18:46:55,228] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", + " warnings.warn(\n", + "[2025-01-16 18:46:58,310] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2025-01-16 18:47:00,011] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-01-16 18:47:00,012] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + " check_person_name(patient_name)\n", + "[2025-01-16 18:47:11,502] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:47:11,503] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-16 18:47:11,504] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:47:11,505] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-16 18:47:11,507] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-16 18:47:11,507] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:47:11,509] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-16 18:47:11,510] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-16 18:47:11,512] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[2025-01-16 18:47:11,627] [INFO] (__main__.AISpleenSegApp) - End run\n", + "[2025-01-16 18:47:11,628] [INFO] (root) - End __main__\n" ] } ], @@ -717,7 +695,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -734,7 +712,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -933,7 +911,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -954,7 +932,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -983,57 +961,68 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 16:52:19,843] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", - "[2024-04-23 16:52:19,845] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[2024-04-23 16:52:19,847] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", - "\u001b[0m2024-04-23 16:52:19.876 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 8 entities\u001b[0m\n", - "[2024-04-23 16:52:19,877] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-23 16:52:20,224] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-23 16:52:20,224] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 18:47:18,173] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", + "[2025-01-16 18:47:18,176] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", + "[2025-01-16 18:47:18,178] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_file'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", + "[2025-01-16 18:47:18,189] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-16 18:47:18,786] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-16 18:47:18,786] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-23 16:52:20,224] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 16:52:20,224] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-23 16:52:20,224] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-23 16:52:20,224] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:52:20,225] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-23 16:52:20,225] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-23 16:52:20,225] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:52:20,225] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-23 16:52:20,225] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-23 16:52:20,225] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:52:20,225] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 16:52:20,449] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", - "[2024-04-23 16:52:26,711] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", - "[2024-04-23 16:52:28,387] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2024-04-23 16:52:28,388] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2025-01-16 18:47:18,786] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 18:47:18,786] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-16 18:47:18,786] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-16 18:47:18,787] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:47:18,787] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-16 18:47:18,787] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-16 18:47:18,787] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:47:18,787] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-16 18:47:18,787] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-16 18:47:18,787] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:47:18,787] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 18:47:19,100] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:52:39,441] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-23 16:52:39,442] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-23 16:52:39,442] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "\u001b[0m2024-04-23 16:52:39.552 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 16:52:39.552 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[2024-04-23 16:52:39,552] [INFO] (app.AISpleenSegApp) - End run\n" + "[2025-01-16 18:47:22,311] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", + "[2025-01-16 18:47:24,084] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-01-16 18:47:24,084] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + " check_person_name(patient_name)\n", + "[2025-01-16 18:47:35,855] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:47:35,855] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-16 18:47:35,855] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:47:35,855] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-16 18:47:35,856] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-16 18:47:35,856] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 18:47:35,856] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-16 18:47:35,856] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-16 18:47:35,856] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[2025-01-16 18:47:35,968] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1044,14 +1033,14 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.31677856801140848641305221346725457.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.62575937391603140773834509092916100.dcm stl\n" ] } ], @@ -1072,7 +1061,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -1102,7 +1091,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -1125,7 +1114,8 @@ "scikit-image>=0.17.2\n", "numpy-stl>=2.12.0\n", "trimesh>=3.8.11\n", - "torch>=1.12.0" + "torch>=1.12.0\n", + "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue" ] }, { @@ -1141,23 +1131,23 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 16:52:41,994] [INFO] (common) - Downloading CLI manifest file...\n", - "[2024-04-23 16:52:42,236] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2024-04-23 16:52:42,237] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2024-04-23 16:52:42,238] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2024-04-23 16:52:42,238] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2024-04-23 16:52:42,238] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2024-04-23 16:52:42,238] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2024-04-23 16:52:42,240] [INFO] (packager) - Generating app.json...\n", - "[2024-04-23 16:52:42,240] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-23 16:52:42,246] [DEBUG] (common) - \n", + "[2025-01-16 18:47:38,758] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-16 18:47:39,137] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-16 18:47:39,138] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-01-16 18:47:39,138] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-01-16 18:47:39,138] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-01-16 18:47:39,138] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-01-16 18:47:39,138] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-01-16 18:47:39,142] [INFO] (packager) - Generating app.json...\n", + "[2025-01-16 18:47:39,142] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-16 18:47:39,146] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1185,14 +1175,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.5.1\",\n", + " \"sdkVersion\": \"2.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2024-04-23 16:52:42,246] [DEBUG] (common) - \n", + "[2025-01-16 18:47:39,146] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1212,15 +1202,115 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-23 16:52:42,273] [DEBUG] (packager.builder) - \n", + "[2025-01-16 18:47:39,174] [DEBUG] (packager.builder) - \n", + "========== Begin Build Parameters ==========\n", + "{'additional_lib_paths': '',\n", + " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", + " 'app_dir': PosixPath('/opt/holoscan/app'),\n", + " 'app_json': '/etc/holoscan/app.json',\n", + " 'application': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app'),\n", + " 'application_directory': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app'),\n", + " 'application_type': 'PythonModule',\n", + " 'build_cache': PosixPath('/home/mqin/.holoscan_build_cache'),\n", + " 'cmake_args': '',\n", + " 'command': '[\"python3\", \"/opt/holoscan/app\"]',\n", + " 'command_filename': 'my_app',\n", + " 'config_file_path': PosixPath('/var/holoscan/app.yaml'),\n", + " 'docs_dir': PosixPath('/opt/holoscan/docs'),\n", + " 'full_input_path': PosixPath('/var/holoscan/input'),\n", + " 'full_output_path': PosixPath('/var/holoscan/output'),\n", + " 'gid': 1000,\n", + " 'holoscan_sdk_version': '2.8.0',\n", + " 'includes': [],\n", + " 'input_dir': 'input/',\n", + " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", + " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", + " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", + " 'models_dir': PosixPath('/opt/holoscan/models'),\n", + " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'no_cache': False,\n", + " 'output_dir': 'output/',\n", + " 'pip_packages': None,\n", + " 'pkg_json': '/etc/holoscan/pkg.json',\n", + " 'requirements_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/requirements.txt'),\n", + " 'sdk': ,\n", + " 'sdk_type': 'monai-deploy',\n", + " 'tarball_output': None,\n", + " 'timeout': 0,\n", + " 'title': 'MONAI Deploy App Package - MONAI Bundle AI App',\n", + " 'uid': 1000,\n", + " 'username': 'holoscan',\n", + " 'version': 1.0,\n", + " 'working_dir': PosixPath('/var/holoscan')}\n", + "=========== End Build Parameters ===========\n", + "\n", + "[2025-01-16 18:47:39,174] [DEBUG] (packager.builder) - \n", + "========== Begin Platform Parameters ==========\n", + "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", + " 'build_image': None,\n", + " 'cuda_deb_arch': 'x86_64',\n", + " 'custom_base_image': False,\n", + " 'custom_holoscan_sdk': False,\n", + " 'custom_monai_deploy_sdk': False,\n", + " 'gpu_type': 'dgpu',\n", + " 'holoscan_deb_arch': 'amd64',\n", + " 'holoscan_sdk_file': '2.8.0',\n", + " 'holoscan_sdk_filename': '2.8.0',\n", + " 'monai_deploy_sdk_file': None,\n", + " 'monai_deploy_sdk_filename': None,\n", + " 'tag': 'my_app:1.0',\n", + " 'target_arch': 'x86_64'}\n", + "=========== End Platform Parameters ===========\n", + "\n", + "[2025-01-16 18:47:39,194] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", + "ARG GPU_TYPE=dgpu\n", + "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", + "\n", + "FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04 AS base\n", + "\n", + "RUN apt-get update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " curl \\\n", + " jq \\\n", + " && rm -rf /var/lib/apt/lists/*\n", + "\n", + "\n", + "\n", + "\n", + "# FROM base AS mofed-installer\n", + "# ARG MOFED_VERSION=23.10-2.1.3.1\n", + "\n", + "# # In a container, we only need to install the user space libraries, though the drivers are still\n", + "# # needed on the host.\n", + "# # Note: MOFED's installation is not easily portable, so we can't copy the output of this stage\n", + "# # to our final stage, but must inherit from it. For that reason, we keep track of the build/install\n", + "# # only dependencies in the `MOFED_DEPS` variable (parsing the output of `--check-deps-only`) to\n", + "# # remove them in that same layer, to ensure they are not propagated in the final image.\n", + "# WORKDIR /opt/nvidia/mofed\n", + "# ARG MOFED_INSTALL_FLAGS=\"--dpdk --with-mft --user-space-only --force --without-fw-update\"\n", + "# RUN UBUNTU_VERSION=$(cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d= -f2) \\\n", + "# && OFED_PACKAGE=\"MLNX_OFED_LINUX-${MOFED_VERSION}-ubuntu${UBUNTU_VERSION}-$(uname -m)\" \\\n", + "# && curl -S -# -o ${OFED_PACKAGE}.tgz -L \\\n", + "# https://www.mellanox.com/downloads/ofed/MLNX_OFED-${MOFED_VERSION}/${OFED_PACKAGE}.tgz \\\n", + "# && tar xf ${OFED_PACKAGE}.tgz \\\n", + "# && MOFED_INSTALLER=$(find . -name mlnxofedinstall -type f -executable -print) \\\n", + "# && MOFED_DEPS=$(${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} --check-deps-only 2>/dev/null | tail -n1 | cut -d' ' -f3-) \\\n", + "# && apt-get update \\\n", + "# && apt-get install --no-install-recommends -y ${MOFED_DEPS} \\\n", + "# && ${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} \\\n", + "# && rm -r * \\\n", + "# && apt-get remove -y ${MOFED_DEPS} && apt-get autoremove -y \\\n", + "# && rm -rf /var/lib/apt/lists/*\n", + "\n", + "FROM base AS release\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", "\n", + "ARG GPU_TYPE\n", "ARG UNAME\n", "ARG UID\n", "ARG GID\n", @@ -1232,15 +1322,14 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\"\n", "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.0.0\"\n", - "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "LABEL org.nvidia.holoscan=\"2.8.0\"\n", "\n", + "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", "\n", - "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", "ENV HOLOSCAN_WORKDIR=/var/holoscan\n", @@ -1252,21 +1341,40 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV PATH=/root/.local/bin:/opt/nvidia/holoscan:$PATH\n", - "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/libtorch/1.13.1/lib/:/opt/nvidia/holoscan/lib\n", + "ENV HOLOSCAN_VERSION=2.8.0\n", "\n", - "RUN apt-get update \\\n", - " && apt-get install -y curl jq \\\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# If torch is installed, we can skip installing Python\n", + "ENV PYTHON_VERSION=3.10.6-1~22.04\n", + "ENV PYTHON_PIP_VERSION=22.0.2+dfsg-*\n", + "\n", + "RUN apt update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " python3-minimal=${PYTHON_VERSION} \\\n", + " libpython3-stdlib=${PYTHON_VERSION} \\\n", + " python3=${PYTHON_VERSION} \\\n", + " python3-venv=${PYTHON_VERSION} \\\n", + " python3-pip=${PYTHON_PIP_VERSION} \\\n", " && rm -rf /var/lib/apt/lists/*\n", "\n", - "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", - "RUN chown -R holoscan /var/holoscan \n", - "RUN chown -R holoscan /var/holoscan/input \n", - "RUN chown -R holoscan /var/holoscan/output \n", + "RUN chown -R holoscan /var/holoscan && \\\n", + " chown -R holoscan /var/holoscan/input && \\\n", + " chown -R holoscan /var/holoscan/output\n", "\n", "# Set the working directory\n", "WORKDIR /var/holoscan\n", @@ -1275,466 +1383,512 @@ "COPY ./tools /var/holoscan/tools\n", "RUN chmod +x /var/holoscan/tools\n", "\n", - "\n", - "# Copy gRPC health probe\n", + "# Set the working directory\n", + "WORKDIR /var/holoscan\n", "\n", "USER $UNAME\n", "\n", - "ENV PATH=/root/.local/bin:/home/holoscan/.local/bin:/opt/nvidia/holoscan:$PATH\n", + "ENV PATH=/home/${UNAME}/.local/bin:/opt/nvidia/holoscan/bin:$PATH\n", + "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/${UNAME}/.local/lib/python3.10/site-packages/holoscan/lib\n", "\n", "COPY ./pip/requirements.txt /tmp/requirements.txt\n", "\n", "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - " \n", - "# MONAI Deploy\n", "\n", - "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "# Install MONAI Deploy App SDK\n", + "\n", + "# Install MONAI Deploy from PyPI org\n", + "RUN pip install monai-deploy-app-sdk==2.0.0\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", "\n", + "\n", "COPY ./map/app.json /etc/holoscan/app.json\n", "COPY ./app.config /var/holoscan/app.yaml\n", "COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "\n", "COPY ./app /opt/holoscan/app\n", "\n", + "\n", "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-23 16:52:42,273] [INFO] (packager.builder) - \n", + "[2025-01-16 18:47:39,195] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + " Base Image: nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + " Holoscan SDK Package: 2.8.0\n", + " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.0.0\n", + " SDK Version: 2.8.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + " Included features/dependencies: N/A\n", " \n", - "[2024-04-23 16:52:42,564] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-23 16:52:42,564] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-01-16 18:47:39,716] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-16 18:47:39,717] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.66kB done\n", + "#1 transferring dockerfile: 4.56kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#2 DONE 0.5s\n", + "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#2 DONE 0.0s\n", "\n", - "#3 [internal] load .dockerignore\n", - "#3 transferring context: 1.79kB done\n", - "#3 DONE 0.1s\n", + "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#3 DONE 0.6s\n", "\n", - "#4 [internal] load build context\n", - "#4 DONE 0.0s\n", + "#4 [internal] load .dockerignore\n", + "#4 transferring context: 1.79kB done\n", + "#4 DONE 0.1s\n", "\n", - "#5 importing cache manifest from local:13600691502778489948\n", + "#5 importing cache manifest from local:8380303118981959235\n", "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.0s done\n", - "#6 DONE 0.1s\n", + "#6 [internal] load build context\n", + "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#7 DONE 0.7s\n", + "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", + "#7 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", + "#7 DONE 0.0s\n", "\n", - "#4 [internal] load build context\n", - "#4 transferring context: 19.56MB 0.1s done\n", - "#4 DONE 0.2s\n", + "#8 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#8 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#8 DONE 0.6s\n", "\n", - "#8 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", - "#8 CACHED\n", + "#6 [internal] load build context\n", + "#6 transferring context: 19.43MB 0.2s done\n", + "#6 DONE 0.3s\n", "\n", - "#9 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#9 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#9 CACHED\n", "\n", - "#10 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", + "#10 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#10 CACHED\n", "\n", - "#11 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#11 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#11 CACHED\n", "\n", - "#12 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", + "#12 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#12 CACHED\n", "\n", - "#13 [ 9/21] WORKDIR /var/holoscan\n", + "#13 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#13 CACHED\n", "\n", - "#14 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#14 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#14 CACHED\n", "\n", - "#15 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#15 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#15 CACHED\n", "\n", - "#16 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#16 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#16 CACHED\n", "\n", - "#17 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#17 [release 6/18] WORKDIR /var/holoscan\n", "#17 CACHED\n", "\n", - "#18 [10/21] COPY ./tools /var/holoscan/tools\n", + "#18 [release 9/18] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [13/21] RUN pip install --upgrade pip\n", - "#19 CACHED\n", - "\n", - "#20 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#20 0.822 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#20 0.909 Downloading highdicom-0.22.0-py3-none-any.whl.metadata (3.8 kB)\n", - "#20 0.940 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#20 0.944 Downloading monai-1.3.0-202310121228-py3-none-any.whl.metadata (10 kB)\n", - "#20 0.972 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#20 0.976 Downloading nibabel-5.2.1-py3-none-any.whl.metadata (8.8 kB)\n", - "#20 0.979 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from -r /tmp/requirements.txt (line 4)) (1.23.5)\n", - "#20 1.002 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#20 1.007 Downloading pydicom-2.4.4-py3-none-any.whl.metadata (7.8 kB)\n", - "#20 1.010 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#20 1.064 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#20 1.068 Downloading SimpleITK-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#20 1.129 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", - "#20 1.133 Downloading scikit_image-0.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", - "#20 1.157 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", - "#20 1.161 Downloading numpy_stl-3.1.1-py3-none-any.whl.metadata (16 kB)\n", - "#20 1.263 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", - "#20 1.267 Downloading trimesh-4.3.1-py3-none-any.whl.metadata (18 kB)\n", - "#20 1.322 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", - "#20 1.327 Downloading torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl.metadata (26 kB)\n", - "#20 1.536 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#20 1.541 Downloading pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.2 kB)\n", - "#20 1.606 Collecting pillow-jpls>=1.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#20 1.610 Downloading pillow_jpls-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.1 kB)\n", - "#20 1.690 Requirement already satisfied: packaging>=17 in /usr/local/lib/python3.10/dist-packages (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3)) (23.1)\n", - "#20 1.855 Collecting scipy>=1.9 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#20 1.860 Downloading scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (60 kB)\n", - "#20 1.864 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.6/60.6 kB 231.5 MB/s eta 0:00:00\n", - "#20 1.897 Collecting networkx>=2.8 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#20 1.901 Downloading networkx-3.3-py3-none-any.whl.metadata (5.1 kB)\n", - "#20 1.945 Collecting imageio>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#20 1.950 Downloading imageio-2.34.1-py3-none-any.whl.metadata (4.9 kB)\n", - "#20 1.993 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#20 1.998 Downloading tifffile-2024.4.18-py3-none-any.whl.metadata (31 kB)\n", - "#20 2.013 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#20 2.017 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", - "#20 2.041 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", - "#20 2.044 Downloading python_utils-3.8.2-py2.py3-none-any.whl.metadata (9.7 kB)\n", - "#20 2.165 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.169 Downloading filelock-3.13.4-py3-none-any.whl.metadata (2.8 kB)\n", - "#20 2.189 Collecting typing-extensions>=4.8.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.192 Downloading typing_extensions-4.11.0-py3-none-any.whl.metadata (3.0 kB)\n", - "#20 2.220 Collecting sympy (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.224 Downloading sympy-1.12-py3-none-any.whl.metadata (12 kB)\n", - "#20 2.226 Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.12.0->-r /tmp/requirements.txt (line 11)) (3.1.3)\n", - "#20 2.252 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.257 Downloading fsspec-2024.3.1-py3-none-any.whl.metadata (6.8 kB)\n", - "#20 2.274 Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.278 Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.293 Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.296 Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.315 Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.323 Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", - "#20 2.340 Collecting nvidia-cudnn-cu12==8.9.2.26 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.343 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", - "#20 2.358 Collecting nvidia-cublas-cu12==12.1.3.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.362 Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.394 Collecting nvidia-cufft-cu12==11.0.2.54 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.399 Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.419 Collecting nvidia-curand-cu12==10.3.2.106 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.425 Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.459 Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.463 Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", - "#20 2.484 Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.488 Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl.metadata (1.6 kB)\n", - "#20 2.504 Collecting nvidia-nccl-cu12==2.19.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.508 Downloading nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl.metadata (1.8 kB)\n", - "#20 2.530 Collecting nvidia-nvtx-cu12==12.1.105 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.534 Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl.metadata (1.7 kB)\n", - "#20 2.555 Collecting triton==2.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.559 Downloading triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#20 2.609 Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.612 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#20 2.849 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 11)) (2.1.3)\n", - "#20 2.869 Collecting mpmath>=0.19 (from sympy->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#20 2.873 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#20 2.917 Downloading highdicom-0.22.0-py3-none-any.whl (825 kB)\n", - "#20 2.932 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 825.0/825.0 kB 85.5 MB/s eta 0:00:00\n", - "#20 2.939 Downloading monai-1.3.0-202310121228-py3-none-any.whl (1.3 MB)\n", - "#20 2.958 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 99.3 MB/s eta 0:00:00\n", - "#20 2.963 Downloading nibabel-5.2.1-py3-none-any.whl (3.3 MB)\n", - "#20 2.993 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 124.6 MB/s eta 0:00:00\n", - "#20 2.999 Downloading pydicom-2.4.4-py3-none-any.whl (1.8 MB)\n", - "#20 3.015 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 130.4 MB/s eta 0:00:00\n", - "#20 3.020 Downloading SimpleITK-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.7 MB)\n", - "#20 3.526 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.7/52.7 MB 99.8 MB/s eta 0:00:00\n", - "#20 3.533 Downloading scikit_image-0.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.7 MB)\n", - "#20 3.910 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.7/14.7 MB 30.4 MB/s eta 0:00:00\n", - "#20 3.916 Downloading numpy_stl-3.1.1-py3-none-any.whl (20 kB)\n", - "#20 3.921 Downloading trimesh-4.3.1-py3-none-any.whl (693 kB)\n", - "#20 3.928 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 693.8/693.8 kB 179.7 MB/s eta 0:00:00\n", - "#20 3.936 Downloading torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl (755.5 MB)\n", - "#20 11.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 755.5/755.5 MB 118.0 MB/s eta 0:00:00\n", - "#20 11.36 Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", - "#20 16.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 410.6/410.6 MB 117.5 MB/s eta 0:00:00\n", - "#20 16.04 Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", - "#20 16.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.1/14.1 MB 118.4 MB/s eta 0:00:00\n", - "#20 16.18 Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", - "#20 16.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 23.7/23.7 MB 117.6 MB/s eta 0:00:00\n", - "#20 16.46 Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", - "#20 16.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 823.6/823.6 kB 153.8 MB/s eta 0:00:00\n", - "#20 16.49 Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n", - "#20 24.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 731.7/731.7 MB 117.1 MB/s eta 0:00:00\n", - "#20 24.49 Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", - "#20 25.76 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.6/121.6 MB 117.6 MB/s eta 0:00:00\n", - "#20 25.77 Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", - "#20 26.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.5/56.5 MB 63.6 MB/s eta 0:00:00\n", - "#20 26.36 Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", - "#20 27.50 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 124.2/124.2 MB 104.0 MB/s eta 0:00:00\n", - "#20 27.51 Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", - "#20 29.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 196.0/196.0 MB 108.0 MB/s eta 0:00:00\n", - "#20 29.36 Downloading nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl (166.0 MB)\n", - "#20 30.97 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 166.0/166.0 MB 116.7 MB/s eta 0:00:00\n", - "#20 30.98 Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", - "#20 30.98 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.1/99.1 kB 245.1 MB/s eta 0:00:00\n", - "#20 30.99 Downloading triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (167.9 MB)\n", - "#20 32.54 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 167.9/167.9 MB 123.3 MB/s eta 0:00:00\n", - "#20 32.54 Downloading imageio-2.34.1-py3-none-any.whl (313 kB)\n", - "#20 32.55 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 313.5/313.5 kB 231.8 MB/s eta 0:00:00\n", - "#20 32.55 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", - "#20 32.56 Downloading networkx-3.3-py3-none-any.whl (1.7 MB)\n", - "#20 32.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 135.6 MB/s eta 0:00:00\n", - "#20 32.58 Downloading pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#20 32.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 121.7 MB/s eta 0:00:00\n", - "#20 32.63 Downloading pillow_jpls-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (305 kB)\n", - "#20 32.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 305.6/305.6 kB 239.6 MB/s eta 0:00:00\n", - "#20 32.64 Downloading python_utils-3.8.2-py2.py3-none-any.whl (27 kB)\n", - "#20 32.64 Downloading scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (38.6 MB)\n", - "#20 33.02 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 38.6/38.6 MB 108.0 MB/s eta 0:00:00\n", - "#20 33.02 Downloading tifffile-2024.4.18-py3-none-any.whl (224 kB)\n", - "#20 33.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 225.0/225.0 kB 110.7 MB/s eta 0:00:00\n", - "#20 33.04 Downloading typing_extensions-4.11.0-py3-none-any.whl (34 kB)\n", - "#20 33.04 Downloading filelock-3.13.4-py3-none-any.whl (11 kB)\n", - "#20 33.05 Downloading fsspec-2024.3.1-py3-none-any.whl (171 kB)\n", - "#20 33.06 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 172.0/172.0 kB 77.4 MB/s eta 0:00:00\n", - "#20 33.07 Downloading sympy-1.12-py3-none-any.whl (5.7 MB)\n", - "#20 33.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 MB 117.1 MB/s eta 0:00:00\n", - "#20 33.13 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#20 33.14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 146.2 MB/s eta 0:00:00\n", - "#20 33.14 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#20 33.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.6 MB/s eta 0:00:00\n", - "#20 40.94 Installing collected packages: SimpleITK, mpmath, typing-extensions, trimesh, tifffile, sympy, scipy, pydicom, pillow, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, nibabel, networkx, lazy-loader, fsspec, filelock, triton, python-utils, pillow-jpls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, imageio, scikit-image, nvidia-cusolver-cu12, numpy-stl, highdicom, torch, monai\n", - "#20 94.76 Successfully installed SimpleITK-2.3.1 filelock-3.13.4 fsspec-2024.3.1 highdicom-0.22.0 imageio-2.34.1 lazy-loader-0.4 monai-1.3.0 mpmath-1.3.0 networkx-3.3 nibabel-5.2.1 numpy-stl-3.1.1 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.19.3 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.1.105 pillow-10.3.0 pillow-jpls-1.3.2 pydicom-2.4.4 python-utils-3.8.2 scikit-image-0.23.2 scipy-1.13.0 sympy-1.12 tifffile-2024.4.18 torch-2.2.2 trimesh-4.3.1 triton-2.2.0 typing-extensions-4.11.0\n", - "#20 DONE 98.0s\n", - "\n", - "#21 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#21 DONE 0.5s\n", - "\n", - "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#22 0.651 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.747 Processing /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#22 0.758 Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.23.5)\n", - "#22 0.873 Collecting holoscan~=2.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 0.964 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (6.7 kB)\n", - "#22 1.036 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.040 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.125 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.129 Downloading typeguard-4.2.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.167 Requirement already satisfied: pip>=20.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (24.0)\n", - "#22 1.168 Requirement already satisfied: cupy-cuda12x==12.2 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (12.2.0)\n", - "#22 1.169 Requirement already satisfied: cloudpickle==2.2.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", - "#22 1.170 Requirement already satisfied: python-on-whales==0.60.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.60.1)\n", - "#22 1.171 Requirement already satisfied: Jinja2==3.1.3 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.1.3)\n", - "#22 1.172 Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (23.1)\n", - "#22 1.172 Requirement already satisfied: pyyaml==6.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (6.0)\n", - "#22 1.173 Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.31.0)\n", - "#22 1.174 Requirement already satisfied: psutil==5.9.6 in /usr/local/lib/python3.10/dist-packages (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (5.9.6)\n", - "#22 1.219 Collecting wheel-axle-runtime<1.0 (from holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty)\n", - "#22 1.224 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl.metadata (7.7 kB)\n", - "#22 1.261 Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.10/dist-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.8.2)\n", - "#22 1.266 Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.1.3)\n", - "#22 1.286 Requirement already satisfied: pydantic<2,>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.10.15)\n", - "#22 1.287 Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.66.2)\n", - "#22 1.288 Requirement already satisfied: typer>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.12.3)\n", - "#22 1.288 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (4.11.0)\n", - "#22 1.297 Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.3.2)\n", - "#22 1.298 Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.7)\n", - "#22 1.298 Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.2.1)\n", - "#22 1.299 Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2024.2.2)\n", - "#22 1.319 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.13.4)\n", - "#22 1.341 Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (8.1.7)\n", - "#22 1.342 Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (1.5.4)\n", - "#22 1.343 Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (13.7.1)\n", - "#22 1.380 Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (3.0.0)\n", - "#22 1.380 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (2.17.2)\n", - "#22 1.400 Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==0.5.1+20.gb869749.dirty) (0.1.2)\n", - "#22 1.415 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.437 Downloading holoscan-2.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.2 MB)\n", - "#22 2.034 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 33.2/33.2 MB 28.4 MB/s eta 0:00:00\n", - "#22 2.039 Downloading typeguard-4.2.1-py3-none-any.whl (34 kB)\n", - "#22 2.064 Downloading wheel_axle_runtime-0.0.5-py3-none-any.whl (12 kB)\n", - "#22 2.573 Installing collected packages: wheel-axle-runtime, typeguard, colorama, holoscan, monai-deploy-app-sdk\n", - "#22 3.306 Successfully installed colorama-0.4.6 holoscan-2.0.0 monai-deploy-app-sdk-0.5.1+20.gb869749.dirty typeguard-4.2.1 wheel-axle-runtime-0.0.5\n", - "#22 DONE 4.1s\n", - "\n", - "#23 [17/21] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.3s\n", - "\n", - "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", + "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 DONE 0.2s\n", + "\n", + "#20 [release 11/18] RUN pip install --upgrade pip\n", + "#20 0.934 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.985 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.174 Collecting pip\n", + "#20 1.226 Downloading pip-24.3.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.292 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 29.1 MB/s eta 0:00:00\n", + "#20 1.318 Installing collected packages: pip\n", + "#20 2.288 Successfully installed pip-24.3.1\n", + "#20 DONE 2.5s\n", + "\n", + "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 0.750 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.768 Downloading highdicom-0.23.1-py3-none-any.whl.metadata (4.6 kB)\n", + "#21 0.869 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.876 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 1.064 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 1.069 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.302 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.306 Downloading numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.403 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.410 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.422 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.466 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.471 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.574 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.582 Downloading scikit_image-0.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", + "#21 1.692 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", + "#21 1.699 Downloading numpy_stl-3.2.0-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.825 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", + "#21 1.829 Downloading trimesh-4.5.3-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.881 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", + "#21 1.886 Downloading torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.982 Collecting holoscan==2.6.0 (from -r /tmp/requirements.txt (line 12))\n", + "#21 1.993 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.2 kB)\n", + "#21 2.001 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12)) (24.3.1)\n", + "#21 2.015 Collecting cupy-cuda12x==12.2 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.020 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", + "#21 2.037 Collecting cloudpickle==2.2.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.042 Downloading cloudpickle-2.2.1-py3-none-any.whl.metadata (6.9 kB)\n", + "#21 2.113 Collecting python-on-whales==0.60.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.118 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", + "#21 2.135 Collecting Jinja2==3.1.3 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.139 Downloading Jinja2-3.1.3-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 2.161 Collecting packaging==23.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.166 Downloading packaging-23.1-py3-none-any.whl.metadata (3.1 kB)\n", + "#21 2.225 Collecting pyyaml==6.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.232 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (2.0 kB)\n", + "#21 2.264 Collecting requests==2.31.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.268 Downloading requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)\n", + "#21 2.357 Collecting psutil==6.0.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.361 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (21 kB)\n", + "#21 2.444 Collecting wheel-axle-runtime<1.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.452 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#21 2.473 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 2.477 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 2.548 Collecting fastrlock>=0.5 (from cupy-cuda12x==12.2->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.553 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#21 2.627 Collecting MarkupSafe>=2.0 (from Jinja2==3.1.3->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.631 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.790 Collecting pydantic<2,>=1.5 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.795 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", + "#21 2.868 Collecting tqdm (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.878 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "#21 2.917 Collecting typer>=0.4.1 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.921 Downloading typer-0.15.1-py3-none-any.whl.metadata (15 kB)\n", + "#21 2.943 Collecting typing-extensions (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.947 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 3.030 Collecting charset-normalizer<4,>=2 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.034 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#21 3.047 Collecting idna<4,>=2.5 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.050 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#21 3.148 Collecting urllib3<3,>=1.21.1 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.152 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#21 3.173 Collecting certifi>=2017.4.17 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.179 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 3.421 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 3.425 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", + "#21 3.529 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 3.540 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.617 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 3.621 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 3.816 Collecting scipy>=1.11.2 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 3.820 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 3.866 Collecting networkx>=3.0 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 3.876 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 3.931 Collecting imageio!=2.35.0,>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 3.935 Downloading imageio-2.36.1-py3-none-any.whl.metadata (5.2 kB)\n", + "#21 4.010 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 4.013 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", + "#21 4.029 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 4.034 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", + "#21 4.055 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", + "#21 4.060 Downloading python_utils-3.9.1-py2.py3-none-any.whl.metadata (9.8 kB)\n", + "#21 4.099 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.104 Downloading filelock-3.16.1-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 4.135 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.139 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 4.272 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.276 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 4.286 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.290 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 4.307 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.311 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 4.328 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.332 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 4.347 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.351 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 4.368 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.372 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 4.387 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.396 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 4.420 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.425 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 4.438 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.443 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 4.452 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.456 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 4.476 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.484 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 4.500 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.504 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 4.517 Collecting triton==3.1.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.522 Downloading triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.3 kB)\n", + "#21 4.568 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.573 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 4.645 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 4.652 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 4.683 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 4.684 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 4.748 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 4.756 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 4.831 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 4.834 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 4.853 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 4.857 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "#21 4.972 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 4.976 Downloading rich-13.9.4-py3-none-any.whl.metadata (18 kB)\n", + "#21 5.025 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 5.029 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", + "#21 5.079 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 5.083 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", + "#21 5.102 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", + "#21 5.105 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "#21 5.120 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl (40.8 MB)\n", + "#21 5.523 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 MB 103.4 MB/s eta 0:00:00\n", + "#21 5.528 Downloading cloudpickle-2.2.1-py3-none-any.whl (25 kB)\n", + "#21 5.535 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl (82.0 MB)\n", + "#21 6.415 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 82.0/82.0 MB 93.6 MB/s eta 0:00:00\n", + "#21 6.420 Downloading Jinja2-3.1.3-py3-none-any.whl (133 kB)\n", + "#21 6.425 Downloading packaging-23.1-py3-none-any.whl (48 kB)\n", + "#21 6.430 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (290 kB)\n", + "#21 6.439 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", + "#21 6.447 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (682 kB)\n", + "#21 6.458 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 682.2/682.2 kB 126.7 MB/s eta 0:00:00\n", + "#21 6.467 Downloading requests-2.31.0-py3-none-any.whl (62 kB)\n", + "#21 6.477 Downloading highdicom-0.23.1-py3-none-any.whl (836 kB)\n", + "#21 6.498 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 836.4/836.4 kB 93.1 MB/s eta 0:00:00\n", + "#21 6.512 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 6.552 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 44.4 MB/s eta 0:00:00\n", + "#21 6.558 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 6.589 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 113.1 MB/s eta 0:00:00\n", + "#21 6.594 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 6.754 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 116.9 MB/s eta 0:00:00\n", + "#21 6.761 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 6.782 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 118.5 MB/s eta 0:00:00\n", + "#21 6.790 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 7.314 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 102.8 MB/s eta 0:00:00\n", + "#21 7.320 Downloading scikit_image-0.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", + "#21 7.516 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 75.8 MB/s eta 0:00:00\n", + "#21 7.521 Downloading numpy_stl-3.2.0-py3-none-any.whl (20 kB)\n", + "#21 7.529 Downloading trimesh-4.5.3-py3-none-any.whl (704 kB)\n", + "#21 7.534 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 704.8/704.8 kB 130.7 MB/s eta 0:00:00\n", + "#21 7.539 Downloading torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl (906.4 MB)\n", + "#21 16.44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 906.4/906.4 MB 93.7 MB/s eta 0:00:00\n", + "#21 16.44 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 19.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 115.2 MB/s eta 0:00:00\n", + "#21 19.64 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 19.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 111.4 MB/s eta 0:00:00\n", + "#21 19.78 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 19.99 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.3 MB/s eta 0:00:00\n", + "#21 20.00 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 20.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 134.9 MB/s eta 0:00:00\n", + "#21 20.02 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 25.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 112.1 MB/s eta 0:00:00\n", + "#21 25.89 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 27.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 111.9 MB/s eta 0:00:00\n", + "#21 27.79 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 28.29 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 115.2 MB/s eta 0:00:00\n", + "#21 28.29 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 29.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 108.5 MB/s eta 0:00:00\n", + "#21 29.49 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 31.41 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 108.2 MB/s eta 0:00:00\n", + "#21 31.42 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 33.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 104.9 MB/s eta 0:00:00\n", + "#21 33.23 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 33.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 106.2 MB/s eta 0:00:00\n", + "#21 33.44 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 33.45 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 33.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 39.6 MB/s eta 0:00:00\n", + "#21 33.61 Downloading triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (209.5 MB)\n", + "#21 35.59 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 209.5/209.5 MB 105.7 MB/s eta 0:00:00\n", + "#21 35.60 Downloading imageio-2.36.1-py3-none-any.whl (315 kB)\n", + "#21 35.61 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 35.61 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", + "#21 35.61 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 35.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 117.9 MB/s eta 0:00:00\n", + "#21 35.64 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "#21 35.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 118.4 MB/s eta 0:00:00\n", + "#21 35.70 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 35.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 115.9 MB/s eta 0:00:00\n", + "#21 35.73 Downloading python_utils-3.9.1-py2.py3-none-any.whl (32 kB)\n", + "#21 35.73 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", + "#21 36.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 113.9 MB/s eta 0:00:00\n", + "#21 36.10 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", + "#21 36.10 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", + "#21 36.11 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#21 36.12 Downloading filelock-3.16.1-py3-none-any.whl (16 kB)\n", + "#21 36.13 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", + "#21 36.13 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", + "#21 36.14 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#21 36.14 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#21 36.14 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#21 36.15 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 36.15 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 36.16 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 91.2 MB/s eta 0:00:00\n", + "#21 36.17 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", + "#21 36.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 113.2 MB/s eta 0:00:00\n", + "#21 36.20 Downloading typer-0.15.1-py3-none-any.whl (44 kB)\n", + "#21 36.21 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", + "#21 36.21 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "#21 36.22 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", + "#21 36.22 Downloading rich-13.9.4-py3-none-any.whl (242 kB)\n", + "#21 36.23 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", + "#21 36.23 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", + "#21 36.24 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", + "#21 36.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 117.2 MB/s eta 0:00:00\n", + "#21 36.25 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "#21 44.89 Installing collected packages: SimpleITK, mpmath, fastrlock, urllib3, typing-extensions, tqdm, sympy, shellingham, pyyaml, pygments, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, mdurl, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, click, charset-normalizer, certifi, wheel-axle-runtime, triton, trimesh, tifffile, scipy, requests, python-utils, pyjpegls, pydantic, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, markdown-it-py, lazy-loader, Jinja2, imageio, cupy-cuda12x, scikit-image, rich, nvidia-cusolver-cu12, numpy-stl, highdicom, typer, torch, python-on-whales, monai, holoscan\n", + "#21 109.2 Successfully installed Jinja2-3.1.3 MarkupSafe-3.0.2 SimpleITK-2.4.1 certifi-2024.12.14 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-2.2.1 cupy-cuda12x-12.2.0 fastrlock-0.8.3 filelock-3.16.1 fsspec-2024.12.0 highdicom-0.23.1 holoscan-2.6.0 idna-3.10 imageio-2.36.1 importlib-resources-6.5.2 lazy-loader-0.4 markdown-it-py-3.0.0 mdurl-0.1.2 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 numpy-stl-3.2.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-23.1 pillow-11.1.0 psutil-6.0.0 pydantic-1.10.21 pydicom-3.0.1 pygments-2.19.1 pyjpegls-1.4.0 python-on-whales-0.60.1 python-utils-3.9.1 pyyaml-6.0 requests-2.31.0 rich-13.9.4 scikit-image-0.25.0 scipy-1.15.1 shellingham-1.5.4 sympy-1.13.1 tifffile-2025.1.10 torch-2.5.1 tqdm-4.67.1 trimesh-4.5.3 triton-3.1.0 typer-0.15.1 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", + "#21 DONE 111.0s\n", + "\n", + "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", + "#22 1.008 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 1.231 Collecting monai-deploy-app-sdk==2.0.0\n", + "#22 1.245 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", + "#22 1.265 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", + "#22 1.267 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.6.0)\n", + "#22 1.308 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", + "#22 1.312 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.411 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", + "#22 1.416 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.447 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.3.1)\n", + "#22 1.448 Requirement already satisfied: cupy-cuda12x==12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (12.2.0)\n", + "#22 1.449 Requirement already satisfied: cloudpickle==2.2.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.2.1)\n", + "#22 1.450 Requirement already satisfied: python-on-whales==0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.60.1)\n", + "#22 1.451 Requirement already satisfied: Jinja2==3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.3)\n", + "#22 1.452 Requirement already satisfied: packaging==23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (23.1)\n", + "#22 1.460 Requirement already satisfied: pyyaml==6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0)\n", + "#22 1.460 Requirement already satisfied: requests==2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.31.0)\n", + "#22 1.460 Requirement already satisfied: psutil==6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.0)\n", + "#22 1.460 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", + "#22 1.461 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", + "#22 1.464 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", + "#22 1.471 Requirement already satisfied: pydantic<2,>=1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.10.21)\n", + "#22 1.471 Requirement already satisfied: tqdm in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.67.1)\n", + "#22 1.472 Requirement already satisfied: typer>=0.4.1 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.15.1)\n", + "#22 1.473 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", + "#22 1.478 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", + "#22 1.479 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", + "#22 1.480 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", + "#22 1.480 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", + "#22 1.488 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.16.1)\n", + "#22 1.502 Requirement already satisfied: click>=8.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (8.1.8)\n", + "#22 1.503 Requirement already satisfied: shellingham>=1.3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.5.4)\n", + "#22 1.503 Requirement already satisfied: rich>=10.11.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.9.4)\n", + "#22 1.523 Requirement already satisfied: markdown-it-py>=2.2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.0)\n", + "#22 1.523 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.19.1)\n", + "#22 1.534 Requirement already satisfied: mdurl~=0.1 in /home/holoscan/.local/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.1.2)\n", + "#22 1.545 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", + "#22 1.567 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.587 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", + "#22 1.840 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", + "#22 1.998 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", + "#22 DONE 2.3s\n", + "\n", + "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", + "#23 DONE 0.2s\n", + "\n", + "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", "#24 DONE 0.1s\n", "\n", - "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", + "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", "#25 DONE 0.1s\n", "\n", - "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#26 DONE 0.1s\n", "\n", - "#27 [21/21] COPY ./app /opt/holoscan/app\n", + "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", "#27 DONE 0.1s\n", "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 161.2s done\n", - "#28 exporting manifest sha256:db72052410ed3875bd2689b115d7ea706f74caa44be88c9b455c9761c991f225 0.0s done\n", - "#28 exporting config sha256:4fe495cf55e1086e3b466f4799218faa2b377e58348ae9b51253b56b560295b3 0.0s done\n", + "#28 exporting layers 206.6s done\n", + "#28 exporting manifest sha256:de74699b1b4bee4575b62eecd49ecfde88d19159cf9c7f763df12fca4075ad22 0.0s done\n", + "#28 exporting config sha256:b8bb49a5eafd7b437a1dec0e8efd625a3c1820ec728f129f3182548b8ed45290 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer 414c50de1c1c 557.06kB / 2.97GB\n", - "#29 loading layer 414c50de1c1c 103.06MB / 2.97GB 6.1s\n", - "#29 loading layer 414c50de1c1c 325.88MB / 2.97GB 10.2s\n", - "#29 loading layer 414c50de1c1c 520.85MB / 2.97GB 14.3s\n", - "#29 loading layer 414c50de1c1c 719.72MB / 2.97GB 18.4s\n", - "#29 loading layer 414c50de1c1c 903.54MB / 2.97GB 22.5s\n", - "#29 loading layer 414c50de1c1c 1.11GB / 2.97GB 26.6s\n", - "#29 loading layer 414c50de1c1c 1.36GB / 2.97GB 30.7s\n", - "#29 loading layer 414c50de1c1c 1.56GB / 2.97GB 34.9s\n", - "#29 loading layer 414c50de1c1c 1.81GB / 2.97GB 38.9s\n", - "#29 loading layer 414c50de1c1c 1.97GB / 2.97GB 43.1s\n", - "#29 loading layer 414c50de1c1c 2.04GB / 2.97GB 50.1s\n", - "#29 loading layer 414c50de1c1c 2.17GB / 2.97GB 56.4s\n", - "#29 loading layer 414c50de1c1c 2.42GB / 2.97GB 62.5s\n", - "#29 loading layer 414c50de1c1c 2.63GB / 2.97GB 66.6s\n", - "#29 loading layer 414c50de1c1c 2.79GB / 2.97GB 70.7s\n", - "#29 loading layer 2d2337d002b1 32.77kB / 125.83kB\n", - "#29 loading layer 05a9e332a339 557.06kB / 67.35MB\n", - "#29 loading layer 05a9e332a339 59.60MB / 67.35MB 2.1s\n", - "#29 loading layer b466f5b35107 196.61kB / 17.81MB\n", - "#29 loading layer 66a2f54a1b71 493B / 493B\n", - "#29 loading layer 9b5da571c07c 316B / 316B\n", - "#29 loading layer 69c6b6426338 301B / 301B\n", - "#29 loading layer bfe49db5ef06 3.33kB / 3.33kB\n", - "#29 loading layer b466f5b35107 196.61kB / 17.81MB 5.1s done\n", - "#29 loading layer 414c50de1c1c 2.90GB / 2.97GB 85.2s done\n", - "#29 loading layer 2d2337d002b1 32.77kB / 125.83kB 8.8s done\n", - "#29 loading layer 05a9e332a339 59.60MB / 67.35MB 8.7s done\n", - "#29 loading layer 66a2f54a1b71 493B / 493B 3.4s done\n", - "#29 loading layer 9b5da571c07c 316B / 316B 2.7s done\n", - "#29 loading layer 69c6b6426338 301B / 301B 2.0s done\n", - "#29 loading layer bfe49db5ef06 3.33kB / 3.33kB 1.3s done\n", - "#29 DONE 85.2s\n", + "#29 loading layer 3b1a9c7c51bd 319B / 319B\n", + "#29 loading layer 958003a9d9c8 65.54kB / 5.03MB\n", + "#29 loading layer 48d2f180fed0 557.06kB / 3.34GB\n", + "#29 loading layer 48d2f180fed0 145.39MB / 3.34GB 6.2s\n", + "#29 loading layer 48d2f180fed0 375.46MB / 3.34GB 12.4s\n", + "#29 loading layer 48d2f180fed0 633.37MB / 3.34GB 16.5s\n", + "#29 loading layer 48d2f180fed0 890.73MB / 3.34GB 20.6s\n", + "#29 loading layer 48d2f180fed0 1.17GB / 3.34GB 26.8s\n", + "#29 loading layer 48d2f180fed0 1.40GB / 3.34GB 30.9s\n", + "#29 loading layer 48d2f180fed0 1.70GB / 3.34GB 34.9s\n", + "#29 loading layer 48d2f180fed0 2.01GB / 3.34GB 38.9s\n", + "#29 loading layer 48d2f180fed0 2.19GB / 3.34GB 45.2s\n", + "#29 loading layer 48d2f180fed0 2.34GB / 3.34GB 51.6s\n", + "#29 loading layer 48d2f180fed0 2.56GB / 3.34GB 57.8s\n", + "#29 loading layer 48d2f180fed0 2.82GB / 3.34GB 61.8s\n", + "#29 loading layer 48d2f180fed0 3.05GB / 3.34GB 65.9s\n", + "#29 loading layer 48d2f180fed0 3.26GB / 3.34GB 72.0s\n", + "#29 loading layer 61a09154a063 32.77kB / 579.09kB\n", + "#29 loading layer fb5de645c082 196.61kB / 17.81MB\n", + "#29 loading layer 7277d541a3c8 492B / 492B\n", + "#29 loading layer 6625913413e5 315B / 315B\n", + "#29 loading layer 78faa330ac0a 303B / 303B\n", + "#29 loading layer b0f8d0fbc279 3.36kB / 3.36kB\n", + "#29 loading layer 3b1a9c7c51bd 319B / 319B 76.8s done\n", + "#29 loading layer 958003a9d9c8 65.54kB / 5.03MB 76.6s done\n", + "#29 loading layer 48d2f180fed0 3.32GB / 3.34GB 76.1s done\n", + "#29 loading layer 61a09154a063 32.77kB / 579.09kB 0.9s done\n", + "#29 loading layer fb5de645c082 196.61kB / 17.81MB 0.8s done\n", + "#29 loading layer 7277d541a3c8 492B / 492B 0.5s done\n", + "#29 loading layer 6625913413e5 315B / 315B 0.5s done\n", + "#29 loading layer 78faa330ac0a 303B / 303B 0.5s done\n", + "#29 loading layer b0f8d0fbc279 3.36kB / 3.36kB 0.4s done\n", + "#29 DONE 76.8s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 146.6s done\n", - "#28 DONE 307.9s\n", + "#28 sending tarball 118.0s done\n", + "#28 DONE 324.7s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015\n", - "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", - "#30 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", - "#30 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", - "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", - "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", - "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#30 writing layer sha256:121c2168995bf46d9888919d105fe5a0d03a3640ee73ed00c9081e10794e7c58 0.0s done\n", - "#30 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", - "#30 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", - "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#30 writing layer sha256:229f01f9a7c2d258af634b5b41c5f5b2998c54c7557b3e3cfec465152ebb0c8b\n", - "#30 writing layer sha256:229f01f9a7c2d258af634b5b41c5f5b2998c54c7557b3e3cfec465152ebb0c8b 0.4s done\n", - "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0\n", - "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", - "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#30 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", - "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", - "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", - "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", - "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", - "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", - "#30 writing layer sha256:4d6542f3a7f5dc637e92c4ce4f54ad7edbfc4fcf629380921a76a1eaaa042085 0.0s done\n", + "#30 writing layer sha256:1463ead657ebd5f00bff6269e7c4941ffcd2c60dc04c0d5f77be0805653d5431\n", + "#30 writing layer sha256:1463ead657ebd5f00bff6269e7c4941ffcd2c60dc04c0d5f77be0805653d5431 0.0s done\n", + "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#30 writing layer sha256:1fe4071e2ad799635d2363506eab826a132ddd1465cee089bf81dd9bdd1b18ed 0.0s done\n", + "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#30 writing layer sha256:41e173df84c503c9e717e0e67c22260d4e6bb14660577b225dec5733b4155a78 done\n", + "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", - "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", - "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#30 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", - "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", - "#30 writing layer sha256:6545b2e110c927b4bf5b0cfdb2ae791686a503dd32470362873ccb4375dcc13c\n", - "#30 writing layer sha256:6545b2e110c927b4bf5b0cfdb2ae791686a503dd32470362873ccb4375dcc13c 1.5s done\n", - "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230\n", - "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#30 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", - "#30 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", - "#30 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", - "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#30 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", - "#30 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", - "#30 writing layer sha256:80baedfe7e90864fa675693451fc0755b31995ecc8575aeaf4e4366d5634af45 done\n", - "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", - "#30 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", - "#30 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", - "#30 writing layer sha256:8ca81d63d0fea573e7b16da41370b55162415a5c07feac92012b101b79f8d5ae done\n", - "#30 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", - "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", - "#30 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", - "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", - "#30 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", - "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", - "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#30 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", - "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", - "#30 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", - "#30 writing layer sha256:a3c41b99822f620cfd6e42b3b0760c1fa99ebb77782013146ff5531da4f4064b 0.0s done\n", - "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", - "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", - "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", - "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", - "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#30 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", - "#30 writing layer sha256:c5d17b776c61f416be379c9d1049e897e197b748dda4284d991324b18fc6c9df 0.0s done\n", - "#30 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", - "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#30 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", - "#30 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", - "#30 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", - "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", - "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#30 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", - "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#30 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", - "#30 writing layer sha256:fbfd4de480c7037f0604cf64cef29e59cfb27193b257d66d110ff82ec6fc6715\n", - "#30 writing layer sha256:fbfd4de480c7037f0604cf64cef29e59cfb27193b257d66d110ff82ec6fc6715 47.3s done\n", - "#30 writing layer sha256:fcb10e9f191b92679f1cac7623b152400f374a3e3d90f3d2248bfced02b6bdca\n", - "#30 preparing build cache for export 50.0s done\n", - "#30 writing layer sha256:fcb10e9f191b92679f1cac7623b152400f374a3e3d90f3d2248bfced02b6bdca 0.0s done\n", - "#30 writing config sha256:1af23d9bb67b68807f26cc256ea0ba50bba21a62a52cdfab0bc82567fef2a35e 0.0s done\n", - "#30 writing cache manifest sha256:3e6252fe3fb73d49377342ccff9ce009489fdd34a8709b3c2e0e2c2cd1a54372 0.0s done\n", - "#30 DONE 50.0s\n", - "[2024-04-23 17:00:27,074] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:55dfcbd41d825f3bdf939dc395f59941aa6dcb8a6d70cd502706586a3378f199 0.0s done\n", + "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#30 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707 done\n", + "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#30 writing layer sha256:9e2695ac904b74c0ac2124b2d3787566353a878d987e857a058dc4942c05795f\n", + "#30 writing layer sha256:9e2695ac904b74c0ac2124b2d3787566353a878d987e857a058dc4942c05795f 40.7s done\n", + "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", + "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#30 writing layer sha256:acac0a5fdd7a787bb7420c78469973897c8f5fbf1ffe00dbf9607cfce403409e\n", + "#30 writing layer sha256:acac0a5fdd7a787bb7420c78469973897c8f5fbf1ffe00dbf9607cfce403409e 0.3s done\n", + "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044\n", + "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#30 writing layer sha256:beec7402c8dda7aeb1553458378da5f7ca8d25cbe7d82ed2370d19a7ae2fa930 0.0s done\n", + "#30 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94 done\n", + "#30 writing layer sha256:c8937b741c9ecd6b257aeb18daf07eddbf1c77b0c93f9ba4164faa8353cd1d3c done\n", + "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#30 writing layer sha256:e085183b6ee8ab9c39259c2a4ad46084acb593751832393af1e0b2d1b98a009b 0.0s done\n", + "#30 writing layer sha256:e540d242f419a27800d601d7275f4fbb3488b97d209b454f52e63f1eb413a912 done\n", + "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#30 writing layer sha256:f08ebe0cc28258259e420b22fa0a6e5458acec5f4dc7e13adfce2e01a7284802 0.1s done\n", + "#30 writing layer sha256:f85b662020c5951673d9126c6fed3e887bafc19d949854178592049197a2a5e1\n", + "#30 preparing build cache for export 41.5s done\n", + "#30 writing layer sha256:f85b662020c5951673d9126c6fed3e887bafc19d949854178592049197a2a5e1 0.0s done\n", + "#30 writing config sha256:70b797e9170b15a4b072f80d4653416ffe200049a339c6a471f3824e3c5b6c8f 0.0s done\n", + "#30 writing cache manifest sha256:a6c804e0720ef0eeec54b05a0ac4f0094a44c365e5fe55021bcfa06a1620bfb7 0.0s done\n", + "#30 DONE 41.5s\n", + "[2025-01-16 18:55:45,052] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1758,14 +1912,14 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 4fe495cf55e1 5 minutes ago 17.9GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 b8bb49a5eafd 6 minutes ago 8.64GB\n" ] } ], @@ -1787,7 +1941,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -1823,7 +1977,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.5.1\",\n", + " \"sdkVersion\": \"2.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -1847,16 +2001,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2024-04-24 00:00:30 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-01-17 02:55:48 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2024-04-24 00:00:30 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2024-04-24 00:00:30 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2024-04-24 00:00:30 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-01-17 02:55:48 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-01-17 02:55:48 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-01-17 02:55:48 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2024-04-24 00:00:30 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-01-17 02:55:48 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2024-04-24 00:00:30 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2024-04-24 00:00:30 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-01-17 02:55:48 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-01-17 02:55:48 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -1881,29 +2035,29 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 17:00:31,900] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-23 17:00:31,900] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-01-16 18:55:50,604] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-16 18:55:50,604] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-23 17:00:31,901] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-01-16 18:55:50,604] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-23 17:00:31,901] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-01-16 18:55:50,605] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-23 17:00:31,971] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpxev2hpxc/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpxev2hpxc/pkg.json\n", - "[2024-04-23 17:00:32,215] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-01-16 18:55:50,728] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpruj04c90/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpruj04c90/pkg.json\n", + "[2025-01-16 18:55:51,051] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-23 17:00:32,216] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-01-16 18:55:51,051] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-23 17:00:32,528] [INFO] (common) - Launching container (6ffaea9917bd) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: fervent_bell\n", + "[2025-01-16 18:55:51,518] [INFO] (common) - Launching container (ce1a8045e4e0) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: zealous_euler\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1913,101 +2067,105 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-24 00:00:33 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-01-17 02:55:52 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2024-04-24 00:00:36,780] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [fragment.cpp:585] Loading extensions from configs...\n", "\n", - "[2024-04-24 00:00:36,783] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[info] [gxf_executor.cpp:255] Creating context\n", "\n", - "[2024-04-24 00:00:36,784] [INFO] (root) - End compose\n", + "[2025-01-17 02:56:03,227] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", + "[2025-01-17 02:56:03,235] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[info] [gxf_executor.cpp:247] Creating context\n", + "[2025-01-17 02:56:03,238] [INFO] (root) - End compose\n", "\n", - "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", + "[info] [app_driver.cpp:1176] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1973] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:2003] Running Graph...\n", "\n", - "\u001b[0m2024-04-24 00:00:36.818 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 8 entities\u001b[0m\n", + "[info] [gxf_executor.cpp:2005] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", "\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", + "[2025-01-17 02:56:03,245] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2024-04-24 00:00:36,819] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-17 02:56:03,770] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-17 02:56:03,770] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-17 02:56:03,770] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-17 02:56:03,770] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-17 02:56:03,770] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-17 02:56:03,770] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-17 02:56:03,770] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-17 02:56:03,770] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-17 02:56:03,770] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-17 02:56:03,771] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-17 02:56:03,771] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-17 02:56:03,771] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-24 00:00:37,735] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-17 02:56:03,771] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-24 00:00:38,147] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", + "[2025-01-17 02:56:04,126] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", "\n", - "[2024-04-24 00:00:41,393] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", + "/home/holoscan/.local/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", "\n", - "[2024-04-24 00:00:43,045] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + " warnings.warn(\n", "\n", - "[2024-04-24 00:00:43,045] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-01-17 02:56:07,907] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2025-01-17 02:56:09,756] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", "\n", - " warnings.warn(\n", + "[2025-01-17 02:56:09,756] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "\n", - "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", - "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + " check_person_name(patient_name)\n", "\n", - "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 02:56:22,312] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2024-04-24 00:00:53,817] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2024-04-24 00:00:53,818] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-24 00:00:53,818] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "\u001b[0m2024-04-24 00:00:53.906 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "[2025-01-17 02:56:22,314] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[2025-01-17 02:56:22,314] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", - "\u001b[0m2024-04-24 00:00:53.908 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[2024-04-24 00:00:53,915] [INFO] (app.AISpleenSegApp) - End run\n", + "[info] [gxf_executor.cpp:2008] Deactivating Graph...\n", "\n", - "[2024-04-23 17:00:55,176] [INFO] (common) - Container 'fervent_bell'(6ffaea9917bd) exited.\n" + "[info] [gxf_executor.cpp:2016] Graph execution finished.\n", + "\n", + "[2025-01-17 02:56:22,447] [INFO] (app.AISpleenSegApp) - End run\n", + "\n", + "[2025-01-16 18:56:24,275] [INFO] (common) - Container 'zealous_euler'(ce1a8045e4e0) exited.\n" ] } ], @@ -2019,14 +2177,14 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.91573472497917482579554686696126426.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.91784675609868036211230217438685119.dcm stl\n" ] } ], @@ -2037,7 +2195,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 ('.venv': venv)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -2052,11 +2210,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" - }, - "vscode": { - "interpreter": { - "hash": "9b4ab1155d0cd1042497eb40fd55b2d15caf4b3c0f9fbfcc7ba4404045d40f12" - } } }, "nbformat": 4, diff --git a/notebooks/tutorials/05_multi_model_app.ipynb b/notebooks/tutorials/05_multi_model_app.ipynb index 4052ff8e..f9c880bb 100644 --- a/notebooks/tutorials/05_multi_model_app.ipynb +++ b/notebooks/tutorials/05_multi_model_app.ipynb @@ -163,7 +163,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Download/Extract input and model/bundle files from Google Drive" + "### Download/Extract input and model/bundle files from Google Drive\n", + "\n", + "**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing). Please download zip file, `ai_multi_model_bundle_data.zip` in the `ai_multi_ai_app` folder, to the same folder as the notebook example." ] }, { @@ -175,22 +177,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.1.0)\n", - "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.13.4)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.31.0)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.66.2)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.5)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.7)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.2.1)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.2.2)\n", - "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", - "Downloading...\n", - "From (original): https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd\n", - "From (redirected): https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd&confirm=t&uuid=7d1b1592-17f3-4232-9d3b-02bf8cd726be\n", - "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/ai_multi_model_bundle_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 647M/647M [00:06<00:00, 105MB/s]\n", "Archive: ai_multi_model_bundle_data.zip\n", " inflating: dcm/1-001.dcm \n", " inflating: dcm/1-002.dcm \n", @@ -396,15 +382,17 @@ " inflating: dcm/1-202.dcm \n", " inflating: dcm/1-203.dcm \n", " inflating: dcm/1-204.dcm \n", + " creating: multi_models/pancreas_ct_dints/\n", " inflating: multi_models/pancreas_ct_dints/model.ts \n", + " creating: multi_models/spleen_ct/\n", " inflating: multi_models/spleen_ct/model.ts \n" ] } ], "source": [ - "# Download the test data and MONAI bundle zip file\n", - "!pip install gdown \n", - "!gdown \"https://drive.google.com/uc?id=1llJ4NGNTjY187RLX4MtlmHYhfGxBNWmd\"\n", + "# Download ai_spleen_bundle_data test data zip file. Please request access and download manually.\n", + "# !pip install gdown\n", + "# !gdown https://drive.google.com/file/d/1Iwx-jl7vBu67lMpHwJ2VueAOiTtJF4mL/view?usp=sharing\n", "\n", "# After downloading ai_spleen_bundle_data zip file from the web browser or using gdown,\n", "!unzip -o \"ai_multi_model_bundle_data.zip\"" @@ -744,75 +732,70 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2024-04-23 16:11:04,518] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2024-04-23 16:11:04,535] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2024-04-23 16:11:04,542] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:247] Creating context\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", - "[2024-04-23 16:11:04,579] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m2024-04-23 16:11:04.577 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 9 entities\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2024-04-23 16:11:05,124] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-23 16:11:05,125] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[info] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 18:59:35,461] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-16 18:59:35,473] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", + "[2025-01-16 18:59:35,478] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:262] Creating context\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:2178] Activating Graph...\n", + "[info] [gxf_executor.cpp:2208] Running Graph...\n", + "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", + "[2025-01-16 18:59:35,490] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-16 18:59:35,847] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-16 18:59:35,849] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-23 16:11:05,126] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 16:11:05,128] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-23 16:11:05,129] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-23 16:11:05,130] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:11:05,131] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-23 16:11:05,132] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-23 16:11:05,134] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:11:05,136] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-23 16:11:05,136] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-23 16:11:05,137] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:11:05,137] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 16:11:05,373] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", - "[2024-04-23 16:12:44,188] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2025-01-16 18:59:35,850] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 18:59:35,851] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-16 18:59:35,852] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-16 18:59:35,854] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:59:35,854] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-16 18:59:35,855] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-16 18:59:35,856] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:59:35,857] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-16 18:59:35,857] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-16 18:59:35,858] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 18:59:35,859] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 18:59:36,183] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2024-04-23 16:12:49,664] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:12:49,665] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-23 16:12:49,666] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:12:49,667] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-23 16:12:49,669] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-23 16:12:49,670] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:12:49,672] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-23 16:12:49,673] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-23 16:12:49,675] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2024-04-23 16:12:50,843] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:12:50,844] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-23 16:12:50,845] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:12:50,846] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-23 16:12:50,847] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-23 16:12:50,848] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:12:50,849] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-23 16:12:50,850] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-23 16:12:50,852] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[2024-04-23 16:12:50,954] [INFO] (__main__.App) - End run\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m2024-04-23 16:12:50.952 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 16:12:50.952 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n" + "[2025-01-16 19:00:12,120] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + " check_person_name(patient_name)\n", + "[2025-01-16 19:00:16,095] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:00:16,096] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-16 19:00:16,097] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:00:16,097] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-16 19:00:16,098] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-16 19:00:16,100] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:00:16,101] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-16 19:00:16,102] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-16 19:00:16,103] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-16 19:00:17,716] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:00:17,717] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-16 19:00:17,719] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:00:17,720] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-16 19:00:17,721] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-16 19:00:17,722] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:00:17,723] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-16 19:00:17,724] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-16 19:00:17,725] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[2025-01-16 19:00:17,896] [INFO] (__main__.App) - End run\n" ] } ], @@ -1184,57 +1167,70 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 16:12:55,648] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2024-04-23 16:12:55,653] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2024-04-23 16:12:55,655] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:247] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1672] Loading extensions from configs...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1842] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1874] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1876] Waiting for completion...\n", - "\u001b[0m2024-04-23 16:12:55.684 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 9 entities\u001b[0m\n", - "[2024-04-23 16:12:55,685] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2024-04-23 16:12:56,030] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2024-04-23 16:12:56,030] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", + "[2025-01-16 19:00:24,384] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2025-01-16 19:00:24,396] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", + "[2025-01-16 19:00:24,400] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", + "[2025-01-16 19:00:24,415] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-16 19:00:24,984] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2024-04-23 16:12:56,030] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 16:12:56,030] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2024-04-23 16:12:56,030] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2024-04-23 16:12:56,030] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:12:56,031] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2024-04-23 16:12:56,031] [INFO] (root) - Series attribute Modality value: CT\n", - "[2024-04-23 16:12:56,031] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:12:56,031] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2024-04-23 16:12:56,031] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2024-04-23 16:12:56,031] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2024-04-23 16:12:56,031] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2024-04-23 16:12:56,243] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", - "[2024-04-23 16:14:36,645] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-16 19:00:24,985] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-16 19:00:25,298] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2024-04-23 16:14:42,011] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:14:42,011] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-23 16:14:42,011] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:14:42,011] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-23 16:14:42,012] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-23 16:14:42,012] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:14:42,012] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-23 16:14:42,012] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-23 16:14:42,012] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2024-04-23 16:14:43,063] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:14:43,063] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2024-04-23 16:14:43,064] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2024-04-23 16:14:43,065] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "\u001b[0m2024-04-23 16:14:43.154 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", - "\u001b[0m2024-04-23 16:14:43.155 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1879] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1887] Graph execution finished.\n", - "[2024-04-23 16:14:43,155] [INFO] (app.App) - End run\n" + "[2025-01-16 19:01:01,037] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + " check_person_name(patient_name)\n", + "[2025-01-16 19:01:05,078] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:01:05,078] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-16 19:01:05,078] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:01:05,078] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-16 19:01:05,079] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-16 19:01:05,079] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:01:05,079] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-16 19:01:05,079] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-16 19:01:05,079] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-16 19:01:06,446] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:01:06,446] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-16 19:01:06,447] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:01:06,447] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-16 19:01:06,447] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-16 19:01:06,447] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-16 19:01:06,447] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-16 19:01:06,448] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-16 19:01:06,448] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", + "[2025-01-16 19:01:06,563] [INFO] (app.App) - End run\n" ] } ], @@ -1252,8 +1248,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.10288134553125230635901121822410318.dcm\n", - "1.2.826.0.1.3680043.10.511.3.96971936458025058184826371322949123.dcm\n" + "1.2.826.0.1.3680043.10.511.3.12613710869113605034325699781803316.dcm\n", + "1.2.826.0.1.3680043.10.511.3.31351518962673345162507339120095105.dcm\n" ] } ], @@ -1330,7 +1326,8 @@ "pydicom>=2.3.0\n", "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", - "torch>=1.12.0" + "torch>=1.12.0\n", + "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue\n" ] }, { @@ -1353,17 +1350,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 16:14:45,501] [INFO] (common) - Downloading CLI manifest file...\n", - "[2024-04-23 16:14:45,792] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2024-04-23 16:14:45,794] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2024-04-23 16:14:45,795] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2024-04-23 16:14:45,795] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", - "[2024-04-23 16:14:45,795] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", - "[2024-04-23 16:14:45,795] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", - "[2024-04-23 16:14:45,796] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2024-04-23 16:14:45,799] [INFO] (packager) - Generating app.json...\n", - "[2024-04-23 16:14:45,799] [INFO] (packager) - Generating pkg.json...\n", - "[2024-04-23 16:14:45,809] [DEBUG] (common) - \n", + "[2025-01-16 19:01:09,441] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-16 19:01:09,679] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-16 19:01:09,680] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-01-16 19:01:09,680] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-01-16 19:01:09,681] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", + "[2025-01-16 19:01:09,681] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", + "[2025-01-16 19:01:09,681] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", + "[2025-01-16 19:01:09,681] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-01-16 19:01:09,687] [INFO] (packager) - Generating app.json...\n", + "[2025-01-16 19:01:09,688] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-16 19:01:09,692] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1391,14 +1388,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.5.1\",\n", + " \"sdkVersion\": \"2.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2024-04-23 16:14:45,810] [DEBUG] (common) - \n", + "[2025-01-16 19:01:09,693] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1419,15 +1416,116 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2024-04-23 16:14:46,274] [DEBUG] (packager.builder) - \n", + "[2025-01-16 19:01:10,251] [DEBUG] (packager.builder) - \n", + "========== Begin Build Parameters ==========\n", + "{'additional_lib_paths': '',\n", + " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", + " 'app_dir': PosixPath('/opt/holoscan/app'),\n", + " 'app_json': '/etc/holoscan/app.json',\n", + " 'application': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app'),\n", + " 'application_directory': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app'),\n", + " 'application_type': 'PythonModule',\n", + " 'build_cache': PosixPath('/home/mqin/.holoscan_build_cache'),\n", + " 'cmake_args': '',\n", + " 'command': '[\"python3\", \"/opt/holoscan/app\"]',\n", + " 'command_filename': 'my_app',\n", + " 'config_file_path': PosixPath('/var/holoscan/app.yaml'),\n", + " 'docs_dir': PosixPath('/opt/holoscan/docs'),\n", + " 'full_input_path': PosixPath('/var/holoscan/input'),\n", + " 'full_output_path': PosixPath('/var/holoscan/output'),\n", + " 'gid': 1000,\n", + " 'holoscan_sdk_version': '2.8.0',\n", + " 'includes': [],\n", + " 'input_dir': 'input/',\n", + " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", + " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", + " 'models': {'pancreas_ct_dints': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints'),\n", + " 'spleen_ct': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct')},\n", + " 'models_dir': PosixPath('/opt/holoscan/models'),\n", + " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'no_cache': False,\n", + " 'output_dir': 'output/',\n", + " 'pip_packages': None,\n", + " 'pkg_json': '/etc/holoscan/pkg.json',\n", + " 'requirements_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/requirements.txt'),\n", + " 'sdk': ,\n", + " 'sdk_type': 'monai-deploy',\n", + " 'tarball_output': None,\n", + " 'timeout': 0,\n", + " 'title': 'MONAI Deploy App Package - Multi Model App',\n", + " 'uid': 1000,\n", + " 'username': 'holoscan',\n", + " 'version': 1.0,\n", + " 'working_dir': PosixPath('/var/holoscan')}\n", + "=========== End Build Parameters ===========\n", + "\n", + "[2025-01-16 19:01:10,252] [DEBUG] (packager.builder) - \n", + "========== Begin Platform Parameters ==========\n", + "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", + " 'build_image': None,\n", + " 'cuda_deb_arch': 'x86_64',\n", + " 'custom_base_image': False,\n", + " 'custom_holoscan_sdk': False,\n", + " 'custom_monai_deploy_sdk': False,\n", + " 'gpu_type': 'dgpu',\n", + " 'holoscan_deb_arch': 'amd64',\n", + " 'holoscan_sdk_file': '2.8.0',\n", + " 'holoscan_sdk_filename': '2.8.0',\n", + " 'monai_deploy_sdk_file': None,\n", + " 'monai_deploy_sdk_filename': None,\n", + " 'tag': 'my_app:1.0',\n", + " 'target_arch': 'x86_64'}\n", + "=========== End Platform Parameters ===========\n", + "\n", + "[2025-01-16 19:01:10,293] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", + "ARG GPU_TYPE=dgpu\n", + "\n", "\n", - "FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", "\n", + "\n", + "FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04 AS base\n", + "\n", + "RUN apt-get update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " curl \\\n", + " jq \\\n", + " && rm -rf /var/lib/apt/lists/*\n", + "\n", + "\n", + "\n", + "\n", + "# FROM base AS mofed-installer\n", + "# ARG MOFED_VERSION=23.10-2.1.3.1\n", + "\n", + "# # In a container, we only need to install the user space libraries, though the drivers are still\n", + "# # needed on the host.\n", + "# # Note: MOFED's installation is not easily portable, so we can't copy the output of this stage\n", + "# # to our final stage, but must inherit from it. For that reason, we keep track of the build/install\n", + "# # only dependencies in the `MOFED_DEPS` variable (parsing the output of `--check-deps-only`) to\n", + "# # remove them in that same layer, to ensure they are not propagated in the final image.\n", + "# WORKDIR /opt/nvidia/mofed\n", + "# ARG MOFED_INSTALL_FLAGS=\"--dpdk --with-mft --user-space-only --force --without-fw-update\"\n", + "# RUN UBUNTU_VERSION=$(cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d= -f2) \\\n", + "# && OFED_PACKAGE=\"MLNX_OFED_LINUX-${MOFED_VERSION}-ubuntu${UBUNTU_VERSION}-$(uname -m)\" \\\n", + "# && curl -S -# -o ${OFED_PACKAGE}.tgz -L \\\n", + "# https://www.mellanox.com/downloads/ofed/MLNX_OFED-${MOFED_VERSION}/${OFED_PACKAGE}.tgz \\\n", + "# && tar xf ${OFED_PACKAGE}.tgz \\\n", + "# && MOFED_INSTALLER=$(find . -name mlnxofedinstall -type f -executable -print) \\\n", + "# && MOFED_DEPS=$(${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} --check-deps-only 2>/dev/null | tail -n1 | cut -d' ' -f3-) \\\n", + "# && apt-get update \\\n", + "# && apt-get install --no-install-recommends -y ${MOFED_DEPS} \\\n", + "# && ${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} \\\n", + "# && rm -r * \\\n", + "# && apt-get remove -y ${MOFED_DEPS} && apt-get autoremove -y \\\n", + "# && rm -rf /var/lib/apt/lists/*\n", + "\n", + "FROM base AS release\n", "ENV DEBIAN_FRONTEND=noninteractive\n", "ENV TERM=xterm-256color\n", "\n", + "ARG GPU_TYPE\n", "ARG UNAME\n", "ARG UID\n", "ARG GID\n", @@ -1439,15 +1537,14 @@ " && mkdir -p /var/holoscan/input \\\n", " && mkdir -p /var/holoscan/output\n", "\n", - "LABEL base=\"nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\"\n", + "LABEL base=\"nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\"\n", "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Multi Model App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.0.0\"\n", - "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", + "LABEL org.nvidia.holoscan=\"2.8.0\"\n", "\n", + "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", "\n", - "ENV HOLOSCAN_ENABLE_HEALTH_CHECK=true\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", "ENV HOLOSCAN_WORKDIR=/var/holoscan\n", @@ -1459,21 +1556,40 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV PATH=/root/.local/bin:/opt/nvidia/holoscan:$PATH\n", - "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/libtorch/1.13.1/lib/:/opt/nvidia/holoscan/lib\n", + "ENV HOLOSCAN_VERSION=2.8.0\n", "\n", - "RUN apt-get update \\\n", - " && apt-get install -y curl jq \\\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# If torch is installed, we can skip installing Python\n", + "ENV PYTHON_VERSION=3.10.6-1~22.04\n", + "ENV PYTHON_PIP_VERSION=22.0.2+dfsg-*\n", + "\n", + "RUN apt update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " python3-minimal=${PYTHON_VERSION} \\\n", + " libpython3-stdlib=${PYTHON_VERSION} \\\n", + " python3=${PYTHON_VERSION} \\\n", + " python3-venv=${PYTHON_VERSION} \\\n", + " python3-pip=${PYTHON_PIP_VERSION} \\\n", " && rm -rf /var/lib/apt/lists/*\n", "\n", - "ENV PYTHONPATH=\"/opt/holoscan/app:$PYTHONPATH\"\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", "RUN groupadd -f -g $GID $UNAME\n", "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", - "RUN chown -R holoscan /var/holoscan \n", - "RUN chown -R holoscan /var/holoscan/input \n", - "RUN chown -R holoscan /var/holoscan/output \n", + "RUN chown -R holoscan /var/holoscan && \\\n", + " chown -R holoscan /var/holoscan/input && \\\n", + " chown -R holoscan /var/holoscan/output\n", "\n", "# Set the working directory\n", "WORKDIR /var/holoscan\n", @@ -1482,257 +1598,237 @@ "COPY ./tools /var/holoscan/tools\n", "RUN chmod +x /var/holoscan/tools\n", "\n", - "\n", - "# Copy gRPC health probe\n", + "# Set the working directory\n", + "WORKDIR /var/holoscan\n", "\n", "USER $UNAME\n", "\n", - "ENV PATH=/root/.local/bin:/home/holoscan/.local/bin:/opt/nvidia/holoscan:$PATH\n", + "ENV PATH=/home/${UNAME}/.local/bin:/opt/nvidia/holoscan/bin:$PATH\n", + "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/${UNAME}/.local/lib/python3.10/site-packages/holoscan/lib\n", "\n", "COPY ./pip/requirements.txt /tmp/requirements.txt\n", "\n", "RUN pip install --upgrade pip\n", "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "\n", - " \n", - "# MONAI Deploy\n", "\n", - "# Copy user-specified MONAI Deploy SDK file\n", - "COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "# Install MONAI Deploy App SDK\n", + "\n", + "# Install MONAI Deploy from PyPI org\n", + "RUN pip install monai-deploy-app-sdk==2.0.0\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", "\n", + "\n", "COPY ./map/app.json /etc/holoscan/app.json\n", "COPY ./app.config /var/holoscan/app.yaml\n", "COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "\n", "COPY ./app /opt/holoscan/app\n", "\n", + "\n", "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2024-04-23 16:14:46,274] [INFO] (packager.builder) - \n", + "[2025-01-16 19:01:10,294] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + " Base Image: nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: pypi.org\n", - " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + " Holoscan SDK Package: 2.8.0\n", + " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.0.0\n", + " SDK Version: 2.8.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + " Included features/dependencies: N/A\n", " \n", - "[2024-04-23 16:14:46,562] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2024-04-23 16:14:46,562] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-01-16 19:01:10,575] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-16 19:01:10,575] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 2.65kB done\n", - "#1 DONE 0.0s\n", + "#1 transferring dockerfile: 4.55kB done\n", + "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", - "#2 DONE 0.4s\n", + "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#2 DONE 0.0s\n", "\n", - "#3 [internal] load .dockerignore\n", - "#3 transferring context: 1.79kB done\n", - "#3 DONE 0.0s\n", + "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#3 DONE 0.5s\n", "\n", - "#4 [internal] load build context\n", - "#4 DONE 0.0s\n", + "#4 [internal] load .dockerignore\n", + "#4 transferring context: 1.79kB done\n", + "#4 DONE 0.1s\n", "\n", - "#5 importing cache manifest from local:13557986215550987099\n", - "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#5 [internal] load build context\n", "#5 DONE 0.0s\n", "\n", - "#6 [ 1/21] FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a\n", - "#6 resolve nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu@sha256:20adbccd2c7b12dfb1798f6953f071631c3b85cd337858a7506f8e420add6d4a 0.0s done\n", + "#6 importing cache manifest from local:13796336242616328264\n", + "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/clara-holoscan/holoscan:v2.0.0-dgpu\n", + "#7 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#7 DONE 0.4s\n", + "#7 DONE 0.3s\n", "\n", - "#4 [internal] load build context\n", - "#4 transferring context: 636.05MB 3.2s done\n", - "#4 DONE 3.2s\n", + "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", + "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", + "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.3s done\n", + "#8 DONE 0.4s\n", "\n", - "#8 [15/21] COPY ./monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", - "#8 CACHED\n", + "#5 [internal] load build context\n", + "#5 transferring context: 609.10MB 4.3s\n", + "#5 transferring context: 635.92MB 4.5s done\n", + "#5 DONE 4.9s\n", "\n", - "#9 [ 6/21] RUN chown -R holoscan /var/holoscan\n", + "#9 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#9 CACHED\n", "\n", - "#10 [ 5/21] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#10 [release 11/18] RUN pip install --upgrade pip\n", "#10 CACHED\n", "\n", - "#11 [ 4/21] RUN groupadd -f -g 1000 holoscan\n", + "#11 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#11 CACHED\n", "\n", - "#12 [ 3/21] RUN apt-get update && apt-get install -y curl jq && rm -rf /var/lib/apt/lists/*\n", + "#12 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#12 CACHED\n", "\n", - "#13 [11/21] RUN chmod +x /var/holoscan/tools\n", + "#13 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#13 CACHED\n", "\n", - "#14 [12/21] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#14 [release 6/18] WORKDIR /var/holoscan\n", "#14 CACHED\n", "\n", - "#15 [ 7/21] RUN chown -R holoscan /var/holoscan/input\n", + "#15 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#15 CACHED\n", "\n", - "#16 [14/21] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#16 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#16 CACHED\n", "\n", - "#17 [ 8/21] RUN chown -R holoscan /var/holoscan/output\n", + "#17 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#17 CACHED\n", "\n", - "#18 [ 9/21] WORKDIR /var/holoscan\n", + "#18 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#18 CACHED\n", "\n", - "#19 [ 2/21] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#19 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#19 CACHED\n", "\n", - "#20 [10/21] COPY ./tools /var/holoscan/tools\n", + "#20 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#20 CACHED\n", "\n", - "#21 [13/21] RUN pip install --upgrade pip\n", + "#21 [release 9/18] WORKDIR /var/holoscan\n", "#21 CACHED\n", "\n", - "#22 [16/21] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+20.gb869749.dirty-py3-none-any.whl\n", + "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", "#22 CACHED\n", "\n", - "#23 [17/21] COPY ./models /opt/holoscan/models\n", - "#23 DONE 3.9s\n", + "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", + "#23 DONE 3.7s\n", "\n", - "#24 [18/21] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.0s\n", + "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", + "#24 DONE 0.2s\n", "\n", - "#25 [19/21] COPY ./app.config /var/holoscan/app.yaml\n", - "#25 DONE 0.0s\n", + "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", + "#25 DONE 0.1s\n", "\n", - "#26 [20/21] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#26 DONE 0.0s\n", + "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 DONE 0.1s\n", "\n", - "#27 [21/21] COPY ./app /opt/holoscan/app\n", - "#27 DONE 0.0s\n", + "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", + "#27 DONE 0.1s\n", "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 17.8s done\n", - "#28 exporting manifest sha256:26808437a116257ae2799583b42bbf04923e1157f8f98341c3403ee35eb234bf 0.0s done\n", - "#28 exporting config sha256:95614919d60e7f30ab5d64a25a5fc25ad64d0b166046c60549b5abae2745be7c 0.0s done\n", + "#28 exporting layers 21.4s done\n", + "#28 exporting manifest sha256:160627d173b89b905ee42134a0bc000786ea24de749605087520765e4d8f75ad 0.0s done\n", + "#28 exporting config sha256:2cec2b8471b737b0a5cc08201001d101e3bf3c0acb122fbc66c3c407e559b849 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer ecf27683cffd 557.06kB / 584.49MB\n", - "#29 loading layer ecf27683cffd 154.86MB / 584.49MB 2.1s\n", - "#29 loading layer ecf27683cffd 309.72MB / 584.49MB 4.1s\n", - "#29 loading layer ecf27683cffd 464.03MB / 584.49MB 6.2s\n", - "#29 loading layer 3202d6efcdaa 493B / 493B\n", - "#29 loading layer 84f909517c68 311B / 311B\n", - "#29 loading layer 1d1958b729ff 323B / 323B\n", - "#29 loading layer 8f69ecd226c9 4.00kB / 4.00kB\n", - "#29 loading layer 3202d6efcdaa 493B / 493B 2.6s done\n", - "#29 loading layer ecf27683cffd 464.03MB / 584.49MB 10.6s done\n", - "#29 loading layer 84f909517c68 311B / 311B 2.2s done\n", - "#29 loading layer 1d1958b729ff 323B / 323B 1.8s done\n", - "#29 loading layer 8f69ecd226c9 4.00kB / 4.00kB 1.5s done\n", - "#29 DONE 10.6s\n", + "#29 loading layer 883c651eec94 288B / 288B\n", + "#29 loading layer 882e8f4cf156 65.54kB / 5.03MB\n", + "#29 loading layer 9f353f6d59ee 557.06kB / 3.28GB\n", + "#29 loading layer 9f353f6d59ee 172.13MB / 3.28GB 6.3s\n", + "#29 loading layer 9f353f6d59ee 450.66MB / 3.28GB 12.5s\n", + "#29 loading layer 9f353f6d59ee 705.79MB / 3.28GB 16.6s\n", + "#29 loading layer 9f353f6d59ee 1.00GB / 3.28GB 20.7s\n", + "#29 loading layer 9f353f6d59ee 1.27GB / 3.28GB 24.8s\n", + "#29 loading layer 9f353f6d59ee 1.58GB / 3.28GB 28.9s\n", + "#29 loading layer 9f353f6d59ee 1.87GB / 3.28GB 33.0s\n", + "#29 loading layer 9f353f6d59ee 2.05GB / 3.28GB 35.1s\n", + "#29 loading layer 9f353f6d59ee 2.16GB / 3.28GB 41.4s\n", + "#29 loading layer 9f353f6d59ee 2.34GB / 3.28GB 45.5s\n", + "#29 loading layer 9f353f6d59ee 2.60GB / 3.28GB 51.7s\n", + "#29 loading layer 9f353f6d59ee 2.87GB / 3.28GB 55.8s\n", + "#29 loading layer 9f353f6d59ee 3.07GB / 3.28GB 59.9s\n", + "#29 loading layer ca1fe5d06ea9 32.77kB / 579.10kB\n", + "#29 loading layer 5b004da2b414 557.06kB / 584.49MB\n", + "#29 loading layer 5b004da2b414 209.45MB / 584.49MB 2.1s\n", + "#29 loading layer 5b004da2b414 422.25MB / 584.49MB 4.2s\n", + "#29 loading layer fef80c23fbdb 491B / 491B\n", + "#29 loading layer c137f7238509 314B / 314B\n", + "#29 loading layer a4ec9d927738 327B / 327B\n", + "#29 loading layer 30d486f32260 4.04kB / 4.04kB\n", + "#29 loading layer c137f7238509 314B / 314B 0.7s done\n", + "#29 loading layer 883c651eec94 288B / 288B 73.6s done\n", + "#29 loading layer 882e8f4cf156 65.54kB / 5.03MB 73.5s done\n", + "#29 loading layer 9f353f6d59ee 3.21GB / 3.28GB 73.0s done\n", + "#29 loading layer ca1fe5d06ea9 32.77kB / 579.10kB 7.2s done\n", + "#29 loading layer 5b004da2b414 422.25MB / 584.49MB 6.6s done\n", + "#29 loading layer fef80c23fbdb 491B / 491B 0.8s done\n", + "#29 loading layer a4ec9d927738 327B / 327B 0.7s done\n", + "#29 loading layer 30d486f32260 4.04kB / 4.04kB 0.6s done\n", + "#29 DONE 73.6s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 72.8s done\n", - "#28 DONE 90.7s\n", + "#28 sending tarball 126.9s done\n", + "#28 DONE 148.4s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015\n", - "#30 writing layer sha256:014cff740c9ec6e9a30d0b859219a700ae880eb385d62095d348f5ea136d6015 done\n", - "#30 writing layer sha256:0487800842442c7a031a39e1e1857bc6dae4b4f7e5daf3d625f7a8a4833fb364 done\n", - "#30 writing layer sha256:06c6aee94862daf0603783db4e1de6f8524b30ac9fbe0374ab3f1d85b2f76f7f done\n", - "#30 writing layer sha256:0a1756432df4a4350712d8ae5c003f1526bd2180800b3ae6301cfc9ccf370254 done\n", - "#30 writing layer sha256:0a77dcbd0e648ddc4f8e5230ade8fdb781d99e24fa4f13ca96a360c7f7e6751f done\n", - "#30 writing layer sha256:0cbe3b20b9b7d01bcb9770de54ba9a54febb401dc371bbb1d8debf1f9850b356 0.0s done\n", - "#30 writing layer sha256:0ec682bf99715a9f88631226f3749e2271b8b9f254528ef61f65ed829984821c done\n", - "#30 writing layer sha256:1c5c3aa9c2c8bfd1b9eb36248f5b6d67b3db73ef43440f9dd897615771974b39 done\n", - "#30 writing layer sha256:1f4a978bb76db2d138cfe7c7c9e76db4096247b06e34d349a2ed504bcd6a7ead done\n", - "#30 writing layer sha256:1f73278b7f17492ce1a8b28b139d54596961596d6790dc20046fa6d5909f3e9c done\n", - "#30 writing layer sha256:20d331454f5fb557f2692dfbdbe092c718fd2cb55d5db9d661b62228dacca5c2 done\n", - "#30 writing layer sha256:20e14f0a8ca68167afb8296c10d7a1b4c3b17b54681cbf3b9b45e1be96afa699 done\n", - "#30 writing layer sha256:238f69a43816e481f0295995fcf5fe74d59facf0f9f99734c8d0a2fb140630e0 done\n", - "#30 writing layer sha256:255cc51d2e47738a5db3059cbe9f403785cf9496c7df8a28a3c9f0c46a0b3b58 done\n", - "#30 writing layer sha256:29eb21ed7ba7894cd28ee75b082877845b969c6e65d34a16b7dbd8630c38f5fe\n", - "#30 writing layer sha256:29eb21ed7ba7894cd28ee75b082877845b969c6e65d34a16b7dbd8630c38f5fe 10.2s done\n", - "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7\n", - "#30 writing layer sha256:2ad84487f9d4d31cd1e0a92697a5447dd241935253d036b272ef16d31620c1e7 done\n", - "#30 writing layer sha256:2f65750928993b5b31fe572d9e085b53853c5a344feeb0e8615898e285a8c256 done\n", - "#30 writing layer sha256:3777c6498f08c0400339c243e827d465075b7296eb2526e38d9b01c84f8764d8 done\n", - "#30 writing layer sha256:3e3e04011ebdba380ab129f0ee390626cb2a600623815ca756340c18bedb9517 done\n", - "#30 writing layer sha256:42619ce4a0c9e54cfd0ee41a8e5f27d58b3f51becabd1ac6de725fbe6c42b14a done\n", - "#30 writing layer sha256:49bdc9abf8a437ccff67cc11490ba52c976577992909856a86be872a34d3b950 done\n", - "#30 writing layer sha256:4b691ba9f48b41eaa0c754feba8366f1c030464fcbc55eeffa6c86675990933a done\n", - "#30 writing layer sha256:4d04a8db404f16c2704fa10739cb6745a0187713a21a6ef0deb34b48629b54c1 done\n", + "#30 writing layer sha256:081bfe8f8e11e818382810bb80503f619230a484153219082adae168fbf8396c\n", + "#30 writing layer sha256:081bfe8f8e11e818382810bb80503f619230a484153219082adae168fbf8396c done\n", + "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#30 writing layer sha256:2168eca868b33ee70924a8965c5274a65760dc417df35352561a4df9541dbf27 0.0s done\n", + "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#30 writing layer sha256:3ff1ad619531728d61adb57d27b79c10fa17f13b6a0693730bdf1d1e6d2eb2b0 0.0s done\n", + "#30 writing layer sha256:41e173df84c503c9e717e0e67c22260d4e6bb14660577b225dec5733b4155a78 done\n", + "#30 writing layer sha256:45a11df8fc21851a3008fe386358f1172c0c589095845f174d42bb86db2f1c49 done\n", + "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:542bc8c8d18fbc95e6794122c3593a4a693f8ab6dda4460406f4d7b1ae64a2bc done\n", - "#30 writing layer sha256:57f244836ad318f9bbb3b29856ae1a5b31038bfbb9b43d2466d51c199eb55041 done\n", - "#30 writing layer sha256:5b5b131e0f20db4cb8e568b623a95f8fc16ed1c6b322a9366df70b59a881f24f done\n", - "#30 writing layer sha256:5b90d17b5048adcadefd0b1e4dba9a99247a8827a887e1ca042df375c85b518d done\n", - "#30 writing layer sha256:62452179df7c18e292f141d4aec29e6aba9ff8270c893731169fc6f41dc07631 done\n", - "#30 writing layer sha256:6630c387f5f2115bca2e646fd0c2f64e1f3d5431c2e050abe607633883eda230 done\n", - "#30 writing layer sha256:6661e0146e77a8bcb03edbfda95bf7780c8bb4c4f98bc03a398c88f4b2403d12 done\n", - "#30 writing layer sha256:717ebf8c9c66ae393ad01e50dbac4413d7b026b9c97d4d348b22ad17052a1a35 done\n", - "#30 writing layer sha256:773c6815e5e7d6855a62f8c5e2fabce3d939ded36c5420f15b54dd7908cdbcfa done\n", - "#30 writing layer sha256:7852b73ea931e3a8d3287ee7ef3cf4bad068e44f046583bfc2b81336fb299284 done\n", - "#30 writing layer sha256:7f8ec130348bcdac81c295e37fe82b4a6e5e9a3ca980a6343809c561020d82d7 done\n", - "#30 writing layer sha256:80885adcad6b5d021bb9f68b6c952018085bb4ce72011bdc0cf7fe8178b5960b done\n", - "#30 writing layer sha256:82a3436133b2b17bb407c7fe488932aa0ca55411f23ab55c34a6134b287c6a27 done\n", - "#30 writing layer sha256:8371d15eb4d69b1d98174dd098b8ddd5c4f19ec6f8d8b67e72dfa9891dc454b4 done\n", - "#30 writing layer sha256:85713f9b166b5add777c524ee807f6265d88b967cbeb9f961d6b09bf220c9a65 done\n", - "#30 writing layer sha256:8fe00505006a09966e763918147ef6ed55bb6695b26e4940c780ee430dc5da8e done\n", - "#30 writing layer sha256:90eae6faa5cc5ba62f12c25915cdfb1a7a51abfba0d05cb5818c3f908f4e345f done\n", - "#30 writing layer sha256:9205d97d9d3e906698bcc6c42d45727c2fa6ec2622abf953d46778c3b8c78edc done\n", - "#30 writing layer sha256:92301d1270c19cab329818fb215b41138720ab9b588a2070107860f0b6fb5e11 done\n", - "#30 writing layer sha256:993369dbcc13162a6654d2a3e990b8d8b5f37963564d25710e12764337261ae3 done\n", - "#30 writing layer sha256:99e42a4adebadb39bf55bf94bbd9fb8034230ee19b6b0a42e6ff96f2e7794f30 done\n", - "#30 writing layer sha256:9ac855545fa90ed2bf3b388fdff9ef06ac9427b0c0fca07c9e59161983d8827e done\n", - "#30 writing layer sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f done\n", - "#30 writing layer sha256:9fafbd4203c4fefe007a462e0d2cd4c1c7c41db2cfdc58d212279e1b9b4b230c done\n", - "#30 writing layer sha256:a1748eee9d376f97bd19225ba61dfada9986f063f4fc429e435f157abb629fc6 done\n", - "#30 writing layer sha256:a251fe5ae6c6d2d5034e4ca88b5dfe5d4827ff90b18e9b143a073232a32bb18d done\n", - "#30 writing layer sha256:a68f4e0ec09ec3b78cb4cf8e4511d658e34e7b6f676d7806ad9703194ff17604 done\n", - "#30 writing layer sha256:a8e4decc8f7289623b8fd7b9ba1ca555b5a755ebdbf81328d68209f148d9e602 done\n", - "#30 writing layer sha256:ac69ec878bf5e3f9294e9726cd393e4133a5ea3934256636de00ddc558f25e55 0.0s done\n", - "#30 writing layer sha256:afde1c269453ce68a0f2b54c1ba8c5ecddeb18a19e5618a4acdef1f0fe3921af done\n", - "#30 writing layer sha256:b12b2b11632995c7c56700227a9c2f2016dab20c083c140a835c551bb2aed460 0.0s done\n", - "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e\n", - "#30 preparing build cache for export 11.6s done\n", - "#30 writing layer sha256:b406feb20a37b8c87ef4f5ef814039e3adc90473d50c366b7d9bb6ded4e94a2e done\n", - "#30 writing layer sha256:b48a5fafcaba74eb5d7e7665601509e2889285b50a04b5b639a23f8adc818157 done\n", - "#30 writing layer sha256:ba9f7c75e4dd7942b944679995365aab766d3677da2e69e1d74472f471a484dd done\n", - "#30 writing layer sha256:bdc13166216ae226fa6976f9ce91f4f259d43972f1e0a9b723e436919534b2f4 done\n", - "#30 writing layer sha256:c815f0be64eded102822d81e029bd23b0d8d9a0fbfeb492ec0b4b0bc4ee777bf done\n", - "#30 writing layer sha256:c97f7fb19e2e0b8ee3e1065f4dee369e35029cc620cafb7fe3dec2e9e06a3ae0 done\n", - "#30 writing layer sha256:c98533d2908f36a5e9b52faae83809b3b6865b50e90e2817308acfc64cd3655f done\n", - "#30 writing layer sha256:d7da5c5e9a40c476c4b3188a845e3276dedfd752e015ea5113df5af64d4d43f7 done\n", - "#30 writing layer sha256:db20521a869adda8244cb64b783c65e1a911efaae0e73ae00e4a34ea6213d6ce done\n", - "#30 writing layer sha256:df4fd0ac710d7af949afbc6d25b5b4daf3f0596dabf3dec36fa7ca8fa6e1d049 done\n", - "#30 writing layer sha256:e291ddecfbe16b95ee9e90b5e90b1a3d0cfd53dc5e720d6b0f3d28e4a47cf5ac done\n", - "#30 writing layer sha256:e8acb678f16bc0c369d5cf9c184f2d3a1c773986816526e5e3e9c0354f7e757f done\n", - "#30 writing layer sha256:e9225f7ab6606813ec9acba98a064826ebfd6713a9645a58cd068538af1ecddb done\n", - "#30 writing layer sha256:e9808a628d8776e25114053fec83adbf9c6dd084ac0c275042fa8b89db830da5 0.0s done\n", - "#30 writing layer sha256:f249faf9663a96b0911a903f8803b11a553c59b698013fb8343492fefdaaea90 done\n", - "#30 writing layer sha256:f608e2fbff86e98627b7e462057e7d2416522096d73fe4664b82fe6ce8a4047d done\n", - "#30 writing layer sha256:f65d191416580d6c38e3d95eee12377b75a4df548be1492618ce2a8c3c41b99e done\n", - "#30 writing config sha256:bad5d754263c9813832b5d1594a04b9c78a10052ec0a59ade6ee42de1baadb19 0.0s done\n", - "#30 writing cache manifest sha256:62a85925ced740e444a8f19b3c59ade29144854a44168d8786e00e93dbad2f5f 0.0s done\n", - "#30 DONE 11.6s\n", - "[2024-04-23 16:16:38,598] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:56e572a086410ad7549df560616c07004a546b5d93600169fc21e40cd8a6a079 0.0s done\n", + "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#30 writing layer sha256:89c3a6b85acef5455878126c639a22ed2e674198db08407234d146947e76f697 0.0s done\n", + "#30 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707\n", + "#30 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707 done\n", + "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#30 writing layer sha256:a283c6a8d28511cd9103e071819da40cf00de2cb23de8d683fce476237e7a1f6\n", + "#30 writing layer sha256:a283c6a8d28511cd9103e071819da40cf00de2cb23de8d683fce476237e7a1f6 9.0s done\n", + "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", + "#30 preparing build cache for export 9.4s done\n", + "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#30 writing layer sha256:bfa5ec525f430f0d201578b006cd216f9bb89f61b91e96b5c2111bb04e7569e4 done\n", + "#30 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94 done\n", + "#30 writing layer sha256:c8937b741c9ecd6b257aeb18daf07eddbf1c77b0c93f9ba4164faa8353cd1d3c done\n", + "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#30 writing layer sha256:e540d242f419a27800d601d7275f4fbb3488b97d209b454f52e63f1eb413a912 done\n", + "#30 writing layer sha256:edd12bb5b9c08c2e288fc295bf1f84feac12beac66caaa8a19956942eb729aef done\n", + "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#30 writing config sha256:ed69d9ef8eead28b494b1bed44df31c14eac706dab4d5670f81208f0b83550da 0.0s done\n", + "#30 writing cache manifest sha256:d1d2295a784c6dc449ae891839a3fb1d8606f4bc80fe5c05ecaca2454c9ed5df 0.0s done\n", + "#30 DONE 9.4s\n", + "[2025-01-16 19:03:59,507] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1763,7 +1859,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 95614919d60e About a minute ago 18.3GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 2cec2b8471b7 2 minutes ago 9.07GB\n" ] } ], @@ -1821,7 +1917,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"0.5.1\",\n", + " \"sdkVersion\": \"2.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -1846,16 +1942,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2024-04-23 23:16:41 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-01-17 03:04:04 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2024-04-23 23:16:41 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2024-04-23 23:16:41 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2024-04-23 23:16:41 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-01-17 03:04:04 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-01-17 03:04:04 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-01-17 03:04:04 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2024-04-23 23:16:41 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-01-17 03:04:04 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2024-04-23 23:16:42 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2024-04-23 23:16:42 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-01-17 03:04:05 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-01-17 03:04:05 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -1887,22 +1983,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2024-04-23 16:16:45,664] [INFO] (runner) - Checking dependencies...\n", - "[2024-04-23 16:16:45,664] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-01-16 19:04:08,393] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-16 19:04:08,393] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2024-04-23 16:16:45,664] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-01-16 19:04:08,393] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2024-04-23 16:16:45,664] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-01-16 19:04:08,393] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2024-04-23 16:16:45,739] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.56kB to /tmp/tmpymoiz9gd/app.json\n", - "\u001b[sPreparing to copy...\u001b[?25l\u001b[u\u001b[2KCopying from container - 0B\u001b[?25h\u001b[u\u001b[2KSuccessfully copied 2.05kB to /tmp/tmpymoiz9gd/pkg.json\n", - "[2024-04-23 16:16:46,001] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-01-16 19:04:08,457] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmptukd3uti/app.json\n", + "Successfully copied 2.05kB to /tmp/tmptukd3uti/pkg.json\n", + "[2025-01-16 19:04:08,663] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2024-04-23 16:16:46,002] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-01-16 19:04:08,664] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2024-04-23 16:16:46,316] [INFO] (common) - Launching container (42b411558fd7) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: silly_davinci\n", + "[2025-01-16 19:04:09,099] [INFO] (common) - Launching container (6555f263537b) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: amazing_galois\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -1912,115 +2008,119 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2024-04-23 23:16:46 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-01-17 03:04:09 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2024-04-23 23:16:50,090] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [fragment.cpp:585] Loading extensions from configs...\n", "\n", - "[2024-04-23 23:16:50,095] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[info] [gxf_executor.cpp:255] Creating context\n", "\n", - "[2024-04-23 23:16:50,097] [INFO] (root) - End compose\n", + "[2025-01-17 03:04:13,133] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[info] [app_driver.cpp:1161] Launching the driver/health checking service\n", + "[2025-01-17 03:04:13,145] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[info] [gxf_executor.cpp:247] Creating context\n", + "[2025-01-17 03:04:13,149] [INFO] (root) - End compose\n", "\n", - "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", + "[info] [app_driver.cpp:1176] Launching the driver/health checking service\n", "\n", - "[info] [gxf_executor.cpp:1672] Loading extensions from configs...\n", + "[info] [gxf_executor.cpp:1973] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1842] Activating Graph...\n", + "[info] [gxf_executor.cpp:2003] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1874] Running Graph...\n", + "[info] [gxf_executor.cpp:2005] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1876] Waiting for completion...\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", "\n", - "\u001b[0m2024-04-23 23:16:50.129 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 9 entities\u001b[0m\n", + "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", "\n", - "[2024-04-23 23:16:50,131] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-17 03:04:13,156] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2024-04-23 23:16:50,512] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-17 03:04:14,111] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2024-04-23 23:16:50,512] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-17 03:04:14,111] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2024-04-23 23:16:50,512] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "\n", - "[2024-04-23 23:16:50,512] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-17 03:04:14,111] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-23 23:16:50,512] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-17 03:04:14,111] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-23 23:16:50,512] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-17 03:04:14,111] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2024-04-23 23:16:50,512] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-17 03:04:14,111] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-23 23:16:50,512] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-17 03:04:14,112] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2024-04-23 23:16:50,512] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-17 03:04:14,112] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2024-04-23 23:16:50,513] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-17 03:04:14,112] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-23 23:16:50,513] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-17 03:04:14,112] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2024-04-23 23:16:50,513] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-17 03:04:14,112] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2024-04-23 23:16:50,513] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-17 03:04:14,112] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2024-04-23 23:16:50,745] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", + "[2025-01-17 03:04:14,112] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2024-04-23 23:18:36,681] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", + "[2025-01-17 03:04:14,400] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/valuerep.py:54: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "/home/holoscan/.local/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", "\n", " warnings.warn(\n", "\n", - "[2024-04-23 23:18:40,078] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 03:04:50,442] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", + "\n", + "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", - "[2024-04-23 23:18:40,078] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + " check_person_name(patient_name)\n", "\n", - "[2024-04-23 23:18:40,078] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 03:04:54,361] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-23 23:18:40,078] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-17 03:04:54,361] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2024-04-23 23:18:40,078] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-17 03:04:54,361] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-23 23:18:40,079] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 03:04:54,361] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2024-04-23 23:18:40,079] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-17 03:04:54,362] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2024-04-23 23:18:40,079] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-17 03:04:54,362] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-23 23:18:40,079] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-17 03:04:54,362] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 03:04:54,362] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-17 03:04:54,362] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", - "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 03:04:55,604] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-17 03:04:55,604] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-17 03:04:55,605] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-17 03:04:55,605] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-17 03:04:55,605] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2024-04-23 23:18:41,286] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-17 03:04:55,605] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2024-04-23 23:18:41,287] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-17 03:04:55,605] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "\u001b[0m2024-04-23 23:18:41.373 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "[2025-01-17 03:04:55,606] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[info] [gxf_executor.cpp:1879] Deactivating Graph...\n", + "[2025-01-17 03:04:55,606] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", - "\u001b[0m2024-04-23 23:18:41.377 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", - "[info] [gxf_executor.cpp:1887] Graph execution finished.\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[2024-04-23 23:18:41,385] [INFO] (app.App) - End run\n", + "[info] [gxf_executor.cpp:2008] Deactivating Graph...\n", "\n", - "[2024-04-23 16:18:42,406] [INFO] (common) - Container 'silly_davinci'(42b411558fd7) exited.\n" + "[info] [gxf_executor.cpp:2016] Graph execution finished.\n", + "\n", + "[2025-01-17 03:04:55,729] [INFO] (app.App) - End run\n", + "\n", + "[2025-01-16 19:04:57,275] [INFO] (common) - Container 'amazing_galois'(6555f263537b) exited.\n" ] } ], @@ -2046,8 +2146,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.11468162564679998832192298844993783.dcm\n", - "1.2.826.0.1.3680043.10.511.3.22886221740567104559887431846790837.dcm\n" + "1.2.826.0.1.3680043.10.511.3.25768072785891674853459165523063481.dcm\n", + "1.2.826.0.1.3680043.10.511.3.67783934117190980110357640109691807.dcm\n" ] } ], @@ -2058,7 +2158,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 ('.venv': venv)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -2073,11 +2173,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" - }, - "vscode": { - "interpreter": { - "hash": "9b4ab1155d0cd1042497eb40fd55b2d15caf4b3c0f9fbfcc7ba4404045d40f12" - } } }, "nbformat": 4, diff --git a/requirements-dev.txt b/requirements-dev.txt index 86c1f983..66f64e83 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -12,7 +12,6 @@ pyflakes black isort pytype>=2020.6.1; platform_system != "Windows" -types-pkg_resources mypy>=0.790 psutil Sphinx==4.1.2 diff --git a/setup.py b/setup.py index 92150f35..74bfd8c9 100644 --- a/setup.py +++ b/setup.py @@ -9,10 +9,13 @@ # See the License for the specific language governing permissions and # limitations under the License. + +import atexit import site import sys from setuptools import find_namespace_packages, setup +from setuptools.command.install import install import versioneer @@ -21,9 +24,73 @@ # (https://github.com/pypa/pip/issues/7953#issuecomment-645133255) site.ENABLE_USER_SITE = "--user" in sys.argv[1:] + +class PostInstallCommand(install): + """Contains post install actions.""" + + def __init__(self, *args, **kwargs): + super(PostInstallCommand, self).__init__(*args, **kwargs) + atexit.register(PostInstallCommand.patch_holoscan) + + @staticmethod + def patch_holoscan(): + """Patch Holoscan for its known issue of missing one import.""" + + import importlib.util + from pathlib import Path + + def needed_to_patch(): + from importlib.metadata import version + + try: + version = version("holoscan") + # This issue exists in the following versions + if "2.7" in version or "2.8" in version: + print("Need to patch holoscan v2.7 and 2.8.") + return True + except Exception: + pass + + return False + + if not needed_to_patch(): + return + + print("Patching holoscan as needed...") + spec = importlib.util.find_spec("holoscan") + if spec: + # holoscan core misses one class in its import in __init__.py + module_to_add = " MultiMessageConditionInfo," + module_path = Path(str(spec.origin)).parent.joinpath("core/__init__.py") + print(f"Patching file {module_path}") + if module_path.exists(): + lines_r = [] + existed = False + with module_path.open("r") as f_to_patch: + in_block = False + for line_r in f_to_patch.readlines(): + if "from ._core import (\n" in line_r: + in_block = True + elif in_block and module_to_add.strip() in line_r: + existed = True + break + elif in_block and ")\n" in line_r: + # Need to add the missing class. + line_r = f"{module_to_add}\n{line_r}" + in_block = False + print("Added missing module in holoscan.") + + lines_r.append(line_r) + + if not existed: + with module_path.open("w") as f_w: + f_w.writelines(lines_r) + print("Completed patching holoscan.") + + setup( version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass(), + cmdclass=versioneer.get_cmdclass({"install": PostInstallCommand}), packages=find_namespace_packages(include=["monai.*"]), include_package_data=True, zip_safe=False, From 47f1b0f8533a7de790a7560581d55f008bf296f9 Mon Sep 17 00:00:00 2001 From: Chris Bridge Date: Wed, 22 Jan 2025 20:11:31 -0500 Subject: [PATCH 075/118] DICOM Seg Writer operater: Fix for case where input image is already a numpy array (#515) * Fix for case where input image is already a numpy array Signed-off-by: Chris Bridge * Update example apps' test data path, patch hsdk in local env, and ensure correct MD SDK is used in dev env (#516) * Add post intall action to patch holoscan package, v2.7 and 2.8 Signed-off-by: M Q * Update fixed turorials Signed-off-by: M Q * Updated the setup post install action, local sdk version, and notebook examples Signed-off-by: M Q * Updated the doc too Signed-off-by: M Q * Fix linting error Signed-off-by: M Q --------- Signed-off-by: M Q --------- Signed-off-by: Chris Bridge Signed-off-by: M Q Co-authored-by: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/dicom_seg_writer_operator.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/monai/deploy/operators/dicom_seg_writer_operator.py b/monai/deploy/operators/dicom_seg_writer_operator.py index f5bc5ae4..41bad8af 100644 --- a/monai/deploy/operators/dicom_seg_writer_operator.py +++ b/monai/deploy/operators/dicom_seg_writer_operator.py @@ -288,8 +288,10 @@ def process_images( seg_image_numpy = image.asnumpy() elif isinstance(image, (Path, str)): seg_image_numpy = self._image_file_to_numpy(str(image)) - elif not isinstance(image, np.ndarray): - raise ValueError("'image' is not a numpy array, Image object, or supported image file.") + else: + if not isinstance(image, np.ndarray): + raise ValueError("'image' is not a numpy array, Image object, or supported image file.") + seg_image_numpy = image # Pick DICOM Series that was used as input for getting the seg image. # For now, first one in the list. From 41c2cfa4b66e3967f95c6f2d463a4f9836adf9ce Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Thu, 30 Jan 2025 16:57:37 -0800 Subject: [PATCH 076/118] Update tutorials after testing with holoscan v2.9.0 (#522) * Updated words on downloading data code on checking staged/extracted input Signed-off-by: M Q * Correct typo Signed-off-by: M Q * correct typo Signed-off-by: M Q * Updated the README Signed-off-by: M Q * Rerun all notebook tutorials Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- README.md | 16 +- notebooks/tutorials/01_simple_app.ipynb | 801 ++++++----- .../tutorials/02_mednist_app-prebuilt.ipynb | 644 +++++---- notebooks/tutorials/02_mednist_app.ipynb | 1057 +++++++++++++- notebooks/tutorials/03_segmentation_app.ipynb | 1212 ++++++++--------- .../tutorials/03_segmentation_viz_app.ipynb | 204 +-- notebooks/tutorials/04_monai_bundle_app.ipynb | 1090 ++++++++------- notebooks/tutorials/05_multi_model_app.ipynb | 865 +++++++----- 8 files changed, 3517 insertions(+), 2372 deletions(-) diff --git a/README.md b/README.md index 63803328..8b161a75 100644 --- a/README.md +++ b/README.md @@ -32,11 +32,12 @@ To install [the current release](https://pypi.org/project/monai-deploy-app-sdk/) pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. ``` -Please also note the following system requirements: -- Ubuntu 22.04 on X86-64 is required, as this is the only X86 platform that the underlying Holoscan SDK has been tested to support as of now. -- [CUDA 12](https://developer.nvidia.com/cuda-12-0-0-download-archive) is required along with a supported NVIDIA GPU with at least 8GB of video RAM. If AI inference is not used in the example application and a GPU is not installed, at least [CUDA 12 runtime](https://pypi.org/project/nvidia-cuda-runtime-cu12/) is required, as this is one of the requirements of Holoscan SDK, in addition, the `LIB_LIBRARY_PATH` must be set to include the installed shared library, e.g. in a Python 3.8 env, ```export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.8/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH``` - +### Prerequisites +- This SDK depends on [NVIDIA Holoscan SDK](https://pypi.org/project/holoscan/) for its core implementation as well as its CLI, hence inherits its prerequisites, e.g. Ubuntu 22.04 with glibc 2.35 on X86-64 and NVIDIA dGPU drivers version 535 or above. +- [CUDA 12.2](https://developer.nvidia.com/cuda-12-2-0-download-archive) or above is required along with a supported NVIDIA GPU with at least 8GB of video RAM. +- If inference is not used in an example application and a GPU is not installed, at least [CUDA 12 runtime](https://pypi.org/project/nvidia-cuda-runtime-cu12/) is required, as this is one of the requirements of Holoscan SDK. In addition, the `LIB_LIBRARY_PATH` must be set to include the installed shared library, e.g. in a Python 3.10 env, ```export LD_LIBRARY_PATH=`pwd`/.venv/lib/python3.10/site-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH``` +- Python: 3.9 to 3.12 ## Getting Started @@ -53,15 +54,16 @@ cd monai-deploy-app-sdk pip install matplotlib Pillow scikit-image # Execute the app locally -python examples/apps/simple_imaging_app/app.py -i examples/apps/simple_imaging_app/brain_mr_input.jpg -o output +python examples/apps/simple_imaging_app/app.py -i examples/apps/simple_imaging_app/input/brain_mr_input.jpg -o output # Package app (creating MAP Docker image), using `-l DEBUG` option to see progress. -monai-deploy package examples/apps/simple_imaging_app -c simple_imaging_app/app.yaml -t simple_app:latest --platform x64-workstation -l DEBUG +# Also please note that postfix will be added to user supplied tag for identifying CPU architecture and GPU type etc. +monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x64-workstation -l DEBUG # Run the app with docker image and an input file locally ## Copy a test input file to 'input' folder mkdir -p input && rm -rf input/* -cp examples/apps/simple_imaging_app/brain_mr_input.jpg input/ +cp examples/apps/simple_imaging_app/input/brain_mr_input.jpg input/ ## Launch the app monai-deploy run simple_app-x64-workstation-dgpu-linux-amd64:latest -i input -o output ``` diff --git a/notebooks/tutorials/01_simple_app.ipynb b/notebooks/tutorials/01_simple_app.ipynb index d5f1dbf3..8da2f1c1 100644 --- a/notebooks/tutorials/01_simple_app.ipynb +++ b/notebooks/tutorials/01_simple_app.ipynb @@ -96,14 +96,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_2020944/2727006292.py:16: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_58609/2727006292.py:16: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(test_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 2, @@ -146,7 +146,7 @@ "metadata": {}, "source": [ "### Set up environment variables\n", - "The application uses well-known enviornment variables for the input/output data path, working dir, as well as AI model file path if applicable. Defaults are used if these environment variable are absent.\n", + "The application uses well-known environment variables for the input/output data path, working dir, as well as AI model file path if applicable. Defaults are used if these environment variable are absent.\n", "\n", "In this example, only the input data path and output path need to be set." ] @@ -354,7 +354,7 @@ " single input:\n", " an image array object\n", " single output:\n", - " an image arrary object, without enforcing a downsteam receiver\n", + " an image array object, without enforcing a downstream receiver\n", "\n", " Besides, this operator also saves the image file in the given output folder.\n", " \"\"\"\n", @@ -472,10 +472,10 @@ " output_data_path = Path(app_context.output_path)\n", " print(f\"sample_data_path: {sample_data_path}\")\n", "\n", - " # Please note that the Application object, self, is passed as the first positonal argument\n", + " # Please note that the Application object, self, is passed as the first positional argument\n", " # and the others as kwargs.\n", " # Also note the CountCondition of 1 on the first operator, indicating to the application executor\n", - " # to invoke this operator, hence the pipleline, only once.\n", + " # to invoke this operator, hence the pipeline, only once.\n", " sobel_op = SobelOperator(self, CountCondition(self, 1), input_path=sample_data_path, name=\"sobel_op\")\n", " median_op = MedianOperator(self, name=\"median_op\")\n", " gaussian_op = GaussianOperator(self, output_folder=output_data_path, name=\"gaussian_op\")\n", @@ -522,28 +522,30 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 10:20:47,518] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-16 10:20:47,531] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" + "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 12:08:18,760] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-29 12:08:18,775] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "sample_data_path: /tmp/simple_app/normal-brain-mri-4.png\n" + "sample_data_path: /tmp/simple_app/normal-brain-mri-4.png\n", + "Number of times operator sobel_op whose class is defined in __main__ called: 1\n", + "Input from: /tmp/simple_app/normal-brain-mri-4.png, whose absolute path: /tmp/simple_app/normal-brain-mri-4.png\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[info] [gxf_executor.cpp:262] Creating context\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'in1'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'in1'\n", - "[info] [gxf_executor.cpp:2178] Activating Graph...\n", - "[info] [gxf_executor.cpp:2208] Running Graph...\n", - "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n" ] }, @@ -551,8 +553,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Number of times operator sobel_op whose class is defined in __main__ called: 1\n", - "Input from: /tmp/simple_app/normal-brain-mri-4.png, whose absolute path: /tmp/simple_app/normal-brain-mri-4.png\n", "Number of times operator median_op whose class is defined in __main__ called: 1\n", "Number of times operator gaussian_op whose class is defined in __main__ called: 1\n", "Data type of output: , max = 0.35821119421406195\n", @@ -565,9 +565,9 @@ "text": [ "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[info] [gxf_executor.cpp:292] Destroying context\n" + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:294] Destroying context\n" ] } ], @@ -602,14 +602,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_2020944/1643627018.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_58609/1643627018.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -684,7 +684,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Overwriting simple_imaging_app/sobel_operator.py\n" + "Writing simple_imaging_app/sobel_operator.py\n" ] } ], @@ -764,7 +764,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Overwriting simple_imaging_app/median_operator.py\n" + "Writing simple_imaging_app/median_operator.py\n" ] } ], @@ -826,7 +826,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Overwriting simple_imaging_app/gaussian_operator.py\n" + "Writing simple_imaging_app/gaussian_operator.py\n" ] } ], @@ -846,7 +846,7 @@ " single input:\n", " an image array object\n", " single output:\n", - " an image arrary object, without enforcing a downsteam receiver\n", + " an image array object, without enforcing a downstream receiver\n", "\n", " Besides, this operator also saves the image file in the given output folder.\n", " \"\"\"\n", @@ -922,7 +922,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Overwriting simple_imaging_app/app.py\n" + "Writing simple_imaging_app/app.py\n" ] } ], @@ -966,10 +966,10 @@ " output_data_path = Path(app_context.output_path)\n", " logging.info(f\"sample_data_path: {sample_data_path}\")\n", "\n", - " # Please note that the Application object, self, is passed as the first positonal argument\n", + " # Please note that the Application object, self, is passed as the first positional argument\n", " # and the others as kwargs.\n", " # Also note the CountCondition of 1 on the first operator, indicating to the application executor\n", - " # to invoke this operator, hence the pipleline, only once.\n", + " # to invoke this operator, hence the pipeline, only once.\n", " sobel_op = SobelOperator(self, CountCondition(self, 1), input_path=sample_data_path, name=\"sobel_op\")\n", " median_op = MedianOperator(self, name=\"median_op\")\n", " gaussian_op = GaussianOperator(self, output_folder=output_data_path, name=\"gaussian_op\")\n", @@ -1024,7 +1024,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Overwriting simple_imaging_app/__main__.py\n" + "Writing simple_imaging_app/__main__.py\n" ] } ], @@ -1045,8 +1045,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "app.py\t gaussian_operator.py\tmedian_operator.py requirements.txt\n", - "app.yaml __main__.py\t\t__pycache__\t sobel_operator.py\n" + "app.py\t\t __main__.py\t sobel_operator.py\n", + "gaussian_operator.py median_operator.py\n" ] } ], @@ -1075,87 +1075,87 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 10:20:53,264] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", - "[2025-01-16 10:20:53,266] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", - "[2025-01-16 10:20:53,266] [INFO] (root) - sample_data_path: /tmp/simple_app\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'in1'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'in1'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 12:08:26,105] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", + "[2025-01-29 12:08:26,111] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", + "[2025-01-29 12:08:26,111] [INFO] (root) - sample_data_path: /tmp/simple_app\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "Input from: /tmp/simple_app, whose absolute path: /tmp/simple_app\n", - "[2025-01-16 10:20:53,288] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2025-01-16 10:20:53,288] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2025-01-16 10:20:53,288] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2025-01-16 10:20:53,288] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2025-01-16 10:20:53,288] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2025-01-16 10:20:53,289] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2025-01-16 10:20:53,289] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2025-01-16 10:20:53,289] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2025-01-16 10:20:53,289] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2025-01-16 10:20:53,289] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2025-01-16 10:20:53,293] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", + "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2025-01-29 12:08:26,149] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", "Number of times operator median_op whose class is defined in median_operator called: 1\n", "Number of times operator gaussian_op whose class is defined in gaussian_operator called: 1\n", "Data type of output: , max = 0.35821119421406195\n", "Data type of output post conversion: , max = 91\n", - "[2025-01-16 10:20:53,538] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", - "[2025-01-16 10:20:53,540] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", - "[2025-01-16 10:20:53,540] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", - "[2025-01-16 10:20:53,540] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", - "[2025-01-16 10:20:53,540] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", - "[2025-01-16 10:20:53,541] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", - "[2025-01-16 10:20:53,543] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", - "[2025-01-16 10:20:53,544] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", - "[2025-01-16 10:20:53,544] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", - "[2025-01-16 10:20:53,544] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", - "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", - "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", - "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", - "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", - "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", - "[2025-01-16 10:20:53,545] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", - "[2025-01-16 10:20:53,546] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", - "[2025-01-16 10:20:53,546] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", - "[2025-01-16 10:20:53,547] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", - "[2025-01-16 10:20:53,547] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", - "[2025-01-16 10:20:53,547] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", - "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", - "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", - "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", - "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", - "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", - "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", - "[2025-01-16 10:20:53,548] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", - "[2025-01-16 10:20:53,549] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", - "[2025-01-16 10:20:53,550] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", - "[2025-01-16 10:20:53,550] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", - "[2025-01-16 10:20:53,550] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", - "[2025-01-16 10:20:53,550] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", - "[2025-01-16 10:20:53,555] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", - "[2025-01-16 10:20:53,555] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", - "[2025-01-16 10:20:53,555] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", - "[2025-01-16 10:20:53,555] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", - "[2025-01-16 10:20:53,555] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", - "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", - "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", - "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", - "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", - "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", - "[2025-01-16 10:20:53,556] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", - "[2025-01-16 10:20:53,558] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", - "[2025-01-16 10:20:53,558] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", - "[2025-01-16 10:20:53,558] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", - "[2025-01-16 10:20:53,559] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", + "[2025-01-29 12:08:26,378] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", + "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", + "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", + "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", + "[2025-01-29 12:08:26,380] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", + "[2025-01-29 12:08:26,380] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", + "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", + "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", + "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", + "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", + "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", + "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", + "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", + "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", + "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", + "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", + "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", + "[2025-01-29 12:08:26,387] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", + "[2025-01-29 12:08:26,387] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", + "[2025-01-29 12:08:26,388] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", + "[2025-01-29 12:08:26,388] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", + "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", + "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", + "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", + "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", + "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", + "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", + "[2025-01-29 12:08:26,390] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", + "[2025-01-29 12:08:26,391] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", + "[2025-01-29 12:08:26,391] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", + "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", + "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", + "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", + "[2025-01-29 12:08:26,397] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", + "[2025-01-29 12:08:26,397] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", + "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", + "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", + "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", + "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", + "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", + "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", + "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", + "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", + "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", + "[2025-01-29 12:08:26,401] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", + "[2025-01-29 12:08:26,401] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", + "[2025-01-29 12:08:26,402] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", + "[2025-01-29 12:08:26,402] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:292] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" ] } ], @@ -1173,14 +1173,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_2020944/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_58609/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -1238,7 +1238,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Overwriting simple_imaging_app/app.yaml\n" + "Writing simple_imaging_app/app.yaml\n" ] } ], @@ -1268,7 +1268,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Overwriting simple_imaging_app/requirements.txt\n" + "Writing simple_imaging_app/requirements.txt\n" ] } ], @@ -1276,7 +1276,7 @@ "%%writefile simple_imaging_app/requirements.txt\n", "scikit-image\n", "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue\n" + "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue\n" ] }, { @@ -1295,14 +1295,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-16 10:20:55,653] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-16 10:20:56,166] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-16 10:20:56,167] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", - "[2025-01-16 10:20:56,167] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-16 10:20:56,167] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", - "[2025-01-16 10:20:56,172] [INFO] (packager) - Generating app.json...\n", - "[2025-01-16 10:20:56,173] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-16 10:20:56,176] [DEBUG] (common) - \n", + "[2025-01-29 12:08:28,758] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-29 12:08:29,206] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-29 12:08:29,206] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", + "[2025-01-29 12:08:29,207] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-01-29 12:08:29,207] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", + "[2025-01-29 12:08:29,212] [INFO] (packager) - Generating app.json...\n", + "[2025-01-29 12:08:29,213] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-29 12:08:29,217] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1337,7 +1337,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2025-01-16 10:20:56,177] [DEBUG] (common) - \n", + "[2025-01-29 12:08:29,218] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1355,7 +1355,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-16 10:20:56,185] [DEBUG] (packager.builder) - \n", + "[2025-01-29 12:08:29,222] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml'),\n", @@ -1373,7 +1373,7 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.8.0',\n", + " 'holoscan_sdk_version': '2.9.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", @@ -1396,7 +1396,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-16 10:20:56,185] [DEBUG] (packager.builder) - \n", + "[2025-01-29 12:08:29,222] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -1406,15 +1406,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.8.0',\n", - " 'holoscan_sdk_filename': '2.8.0',\n", + " 'holoscan_sdk_file': '2.9.0',\n", + " 'holoscan_sdk_filename': '2.9.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'simple_imaging_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-16 10:20:56,213] [DEBUG] (packager.builder) - \n", + "[2025-01-29 12:08:29,246] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1478,7 +1478,7 @@ "LABEL tag=\"simple_imaging_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Simple Imaging App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.8.0\"\n", + "LABEL org.nvidia.holoscan=\"2.9.0\"\n", "\n", "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", "\n", @@ -1493,7 +1493,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.8.0\n", + "ENV HOLOSCAN_VERSION=2.9.0\n", "\n", "\n", "\n", @@ -1567,7 +1567,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-16 10:20:56,214] [INFO] (packager.builder) - \n", + "[2025-01-29 12:08:29,246] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1575,20 +1575,19 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.8.0\n", + " Holoscan SDK Package: 2.9.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.8.0\n", + " SDK Version: 2.9.0\n", " SDK: monai-deploy\n", " Tag: simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-16 10:20:57,613] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-16 10:20:57,614] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-01-29 12:08:29,559] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-29 12:08:29,559] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 30B\n", "#1 transferring dockerfile: 4.53kB done\n", "#1 DONE 0.1s\n", "\n", @@ -1599,235 +1598,214 @@ "#3 DONE 0.5s\n", "\n", "#4 [internal] load .dockerignore\n", - "#4 transferring context: 1.79kB done\n", + "#4 transferring context: 1.80kB done\n", "#4 DONE 0.1s\n", "\n", - "#5 importing cache manifest from local:4071450130461523494\n", - "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#5 [internal] load build context\n", "#5 DONE 0.0s\n", "\n", - "#6 [internal] load build context\n", + "#6 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", + "#6 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", "#6 DONE 0.0s\n", "\n", - "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#7 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#7 DONE 0.1s\n", + "#7 importing cache manifest from local:930277721408013411\n", + "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#7 DONE 0.0s\n", "\n", "#8 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", "#8 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#8 DONE 0.9s\n", + "#8 DONE 0.7s\n", "\n", - "#6 [internal] load build context\n", - "#6 transferring context: 24.94kB 0.0s done\n", - "#6 DONE 0.1s\n", + "#5 [internal] load build context\n", + "#5 transferring context: 24.94kB 0.0s done\n", + "#5 DONE 0.1s\n", "\n", - "#9 [release 6/17] WORKDIR /var/holoscan\n", + "#9 [release 7/17] COPY ./tools /var/holoscan/tools\n", "#9 CACHED\n", "\n", - "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#10 [release 5/17] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [release 3/17] RUN groupadd -f -g 1000 holoscan\n", + "#11 [release 6/17] WORKDIR /var/holoscan\n", "#11 CACHED\n", "\n", "#12 [release 2/17] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#12 CACHED\n", "\n", - "#13 [release 4/17] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#13 [release 3/17] RUN groupadd -f -g 1000 holoscan\n", "#13 CACHED\n", "\n", - "#14 [release 5/17] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#14 CACHED\n", "\n", - "#15 [release 8/17] RUN chmod +x /var/holoscan/tools\n", + "#15 [release 4/17] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#15 CACHED\n", "\n", - "#16 [release 1/17] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#16 [release 8/17] RUN chmod +x /var/holoscan/tools\n", "#16 CACHED\n", "\n", - "#17 [release 7/17] COPY ./tools /var/holoscan/tools\n", + "#17 [release 1/17] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#17 CACHED\n", "\n", "#18 [release 9/17] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", "#19 [release 10/17] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#19 DONE 0.3s\n", + "#19 DONE 0.1s\n", "\n", "#20 [release 11/17] RUN pip install --upgrade pip\n", - "#20 0.894 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 0.942 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 1.117 Collecting pip\n", - "#20 1.177 Downloading pip-24.3.1-py3-none-any.whl (1.8 MB)\n", - "#20 1.242 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 29.6 MB/s eta 0:00:00\n", - "#20 1.275 Installing collected packages: pip\n", - "#20 2.016 Successfully installed pip-24.3.1\n", - "#20 DONE 2.3s\n", + "#20 0.754 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.787 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 0.944 Collecting pip\n", + "#20 1.016 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", + "#20 1.091 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 27.0 MB/s eta 0:00:00\n", + "#20 1.121 Installing collected packages: pip\n", + "#20 1.914 Successfully installed pip-25.0\n", + "#20 DONE 2.1s\n", "\n", "#21 [release 12/17] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.688 Collecting scikit-image (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.701 Downloading scikit_image-0.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", - "#21 0.717 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 2)) (59.6.0)\n", - "#21 0.806 Collecting holoscan==2.6.0 (from -r /tmp/requirements.txt (line 3))\n", - "#21 0.811 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.2 kB)\n", - "#21 0.816 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3)) (24.3.1)\n", - "#21 0.830 Collecting cupy-cuda12x==12.2 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 0.836 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", - "#21 0.854 Collecting cloudpickle==2.2.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 0.860 Downloading cloudpickle-2.2.1-py3-none-any.whl.metadata (6.9 kB)\n", - "#21 0.983 Collecting python-on-whales==0.60.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 0.988 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", - "#21 1.005 Collecting Jinja2==3.1.3 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.010 Downloading Jinja2-3.1.3-py3-none-any.whl.metadata (3.3 kB)\n", - "#21 1.035 Collecting packaging==23.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.039 Downloading packaging-23.1-py3-none-any.whl.metadata (3.1 kB)\n", - "#21 1.079 Collecting pyyaml==6.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.083 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (2.0 kB)\n", - "#21 1.117 Collecting requests==2.31.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.121 Downloading requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 1.209 Collecting psutil==6.0.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.213 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (21 kB)\n", - "#21 1.300 Collecting wheel-axle-runtime<1.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.308 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 1.511 Collecting numpy<1.27,>=1.20 (from cupy-cuda12x==12.2->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.515 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.573 Collecting fastrlock>=0.5 (from cupy-cuda12x==12.2->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.579 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 1.637 Collecting MarkupSafe>=2.0 (from Jinja2==3.1.3->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.640 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 1.819 Collecting pydantic<2,>=1.5 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.823 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", - "#21 1.888 Collecting tqdm (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.892 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", - "#21 1.927 Collecting typer>=0.4.1 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.933 Downloading typer-0.15.1-py3-none-any.whl.metadata (15 kB)\n", - "#21 1.960 Collecting typing-extensions (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.969 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 2.064 Collecting charset-normalizer<4,>=2 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.068 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 2.088 Collecting idna<4,>=2.5 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.092 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 2.149 Collecting urllib3<3,>=1.21.1 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.154 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 2.174 Collecting certifi>=2017.4.17 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.178 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 2.312 Collecting scipy>=1.11.2 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 2.315 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 2.348 Collecting networkx>=3.0 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 2.352 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 2.639 Collecting pillow>=10.1 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 2.644 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 2.707 Collecting imageio!=2.35.0,>=2.33 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 2.712 Downloading imageio-2.36.1-py3-none-any.whl.metadata (5.2 kB)\n", - "#21 2.802 Collecting tifffile>=2022.8.12 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 2.807 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", - "#21 2.828 Collecting lazy-loader>=0.4 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 2.836 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", - "#21 2.912 Collecting filelock (from wheel-axle-runtime<1.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.917 Downloading filelock-3.16.1-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 2.956 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.960 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 2.986 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.990 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", - "#21 3.081 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 3.088 Downloading rich-13.9.4-py3-none-any.whl.metadata (18 kB)\n", - "#21 3.139 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 3.143 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", - "#21 3.175 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 3.179 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", - "#21 3.200 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 3))\n", - "#21 3.205 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", - "#21 3.219 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl (40.8 MB)\n", - "#21 5.813 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 MB 15.7 MB/s eta 0:00:00\n", - "#21 5.821 Downloading cloudpickle-2.2.1-py3-none-any.whl (25 kB)\n", - "#21 5.828 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl (82.0 MB)\n", - "#21 6.919 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 82.0/82.0 MB 75.4 MB/s eta 0:00:00\n", - "#21 6.924 Downloading Jinja2-3.1.3-py3-none-any.whl (133 kB)\n", - "#21 6.928 Downloading packaging-23.1-py3-none-any.whl (48 kB)\n", - "#21 6.932 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (290 kB)\n", - "#21 6.942 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", - "#21 6.948 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (682 kB)\n", - "#21 6.958 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 682.2/682.2 kB 135.1 MB/s eta 0:00:00\n", - "#21 6.964 Downloading requests-2.31.0-py3-none-any.whl (62 kB)\n", - "#21 6.970 Downloading scikit_image-0.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", - "#21 7.169 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 74.4 MB/s eta 0:00:00\n", - "#21 7.175 Downloading imageio-2.36.1-py3-none-any.whl (315 kB)\n", - "#21 7.182 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", - "#21 7.187 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 7.204 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 122.2 MB/s eta 0:00:00\n", - "#21 7.209 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 7.367 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.5 MB/s eta 0:00:00\n", - "#21 7.372 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 7.416 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 116.4 MB/s eta 0:00:00\n", - "#21 7.424 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", - "#21 7.833 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 100.0 MB/s eta 0:00:00\n", - "#21 7.842 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", - "#21 7.854 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 7.862 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 7.870 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 7.879 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 7.889 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 7.897 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 7.904 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", - "#21 7.958 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 79.8 MB/s eta 0:00:00\n", - "#21 7.963 Downloading typer-0.15.1-py3-none-any.whl (44 kB)\n", - "#21 7.966 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 7.972 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 7.977 Downloading filelock-3.16.1-py3-none-any.whl (16 kB)\n", - "#21 7.981 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", - "#21 7.985 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", - "#21 7.990 Downloading rich-13.9.4-py3-none-any.whl (242 kB)\n", - "#21 7.995 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", - "#21 7.999 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", - "#21 8.004 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", - "#21 8.025 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 71.2 MB/s eta 0:00:00\n", - "#21 8.032 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", - "#21 8.743 Installing collected packages: fastrlock, urllib3, typing-extensions, tqdm, shellingham, pyyaml, pygments, psutil, pillow, packaging, numpy, networkx, mdurl, MarkupSafe, idna, filelock, cloudpickle, click, charset-normalizer, certifi, wheel-axle-runtime, tifffile, scipy, requests, pydantic, markdown-it-py, lazy-loader, Jinja2, imageio, cupy-cuda12x, scikit-image, rich, typer, python-on-whales, holoscan\n", - "#21 22.15 Successfully installed Jinja2-3.1.3 MarkupSafe-3.0.2 certifi-2024.12.14 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-2.2.1 cupy-cuda12x-12.2.0 fastrlock-0.8.3 filelock-3.16.1 holoscan-2.6.0 idna-3.10 imageio-2.36.1 lazy-loader-0.4 markdown-it-py-3.0.0 mdurl-0.1.2 networkx-3.4.2 numpy-1.26.4 packaging-23.1 pillow-11.1.0 psutil-6.0.0 pydantic-1.10.21 pygments-2.19.1 python-on-whales-0.60.1 pyyaml-6.0 requests-2.31.0 rich-13.9.4 scikit-image-0.25.0 scipy-1.15.1 shellingham-1.5.4 tifffile-2025.1.10 tqdm-4.67.1 typer-0.15.1 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 24.2s\n", + "#21 0.746 Collecting scikit-image (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.765 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", + "#21 0.783 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 2)) (59.6.0)\n", + "#21 0.866 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.873 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", + "#21 1.134 Collecting numpy>=1.24 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 1.139 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.257 Collecting scipy>=1.11.2 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 1.261 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.285 Collecting networkx>=3.0 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 1.290 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 1.462 Collecting pillow>=10.1 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 1.468 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", + "#21 1.510 Collecting imageio!=2.35.0,>=2.33 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 1.514 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", + "#21 1.568 Collecting tifffile>=2022.8.12 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 1.572 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", + "#21 1.601 Collecting packaging>=21 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 1.605 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#21 1.618 Collecting lazy-loader>=0.4 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 1.622 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", + "#21 1.629 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3)) (25.0)\n", + "#21 1.650 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.655 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", + "#21 1.674 Collecting numpy>=1.24 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", + "#21 1.678 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.690 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.694 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#21 1.718 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.722 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.734 Collecting Jinja2<4.0,>=3.1.3 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.738 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", + "#21 1.795 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.799 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#21 1.824 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.828 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#21 1.884 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.888 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#21 1.967 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 1.976 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#21 2.022 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.027 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#21 2.112 Collecting MarkupSafe>=2.0 (from Jinja2<4.0,>=3.1.3->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.116 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.265 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.269 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", + "#21 2.282 Collecting typing-extensions (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.286 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 2.354 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.358 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#21 2.369 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.376 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#21 2.437 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.441 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#21 2.457 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.460 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 2.489 Collecting filelock (from wheel-axle-runtime<1.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.492 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.507 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 2.511 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", + "#21 3.029 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", + "#21 3.033 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", + "#21 3.055 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", + "#21 3.185 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 120.3 MB/s eta 0:00:00\n", + "#21 3.193 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", + "#21 3.660 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 89.5 MB/s eta 0:00:00\n", + "#21 3.668 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#21 3.677 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", + "#21 4.557 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 103.5 MB/s eta 0:00:00\n", + "#21 4.566 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", + "#21 4.576 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", + "#21 4.582 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", + "#21 4.589 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 4.605 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 124.4 MB/s eta 0:00:00\n", + "#21 4.610 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 4.771 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.4 MB/s eta 0:00:00\n", + "#21 4.778 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", + "#21 4.785 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "#21 4.825 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 116.1 MB/s eta 0:00:00\n", + "#21 4.830 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#21 4.840 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", + "#21 4.849 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#21 4.859 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 124.1 MB/s eta 0:00:00\n", + "#21 4.865 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#21 4.870 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", + "#21 5.265 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 103.7 MB/s eta 0:00:00\n", + "#21 5.273 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", + "#21 5.280 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#21 5.286 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", + "#21 5.291 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#21 5.299 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#21 5.304 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#21 5.309 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 5.315 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", + "#21 5.323 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", + "#21 5.344 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 110.5 MB/s eta 0:00:00\n", + "#21 5.352 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", + "#21 5.357 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", + "#21 5.363 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", + "#21 5.370 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", + "#21 6.034 Installing collected packages: fastrlock, urllib3, typing-extensions, pyyaml, psutil, pillow, packaging, numpy, networkx, MarkupSafe, idna, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, tifffile, scipy, requests, pydantic-core, lazy-loader, Jinja2, imageio, cupy-cuda12x, scikit-image, pydantic, python-on-whales, holoscan\n", + "#21 17.54 Successfully installed Jinja2-3.1.5 MarkupSafe-3.0.2 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 holoscan-2.9.0 idna-3.10 imageio-2.37.0 lazy-loader-0.4 networkx-3.4.2 numpy-1.26.4 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 scikit-image-0.25.1 scipy-1.15.1 tifffile-2025.1.10 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", + "#21 DONE 19.4s\n", "\n", "#22 [release 13/17] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.117 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.330 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.396 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.434 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.6/132.6 KB 3.6 MB/s eta 0:00:00\n", - "#22 1.490 Collecting colorama>=0.4.1\n", - "#22 1.495 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.507 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.508 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.6.0)\n", - "#22 1.578 Collecting typeguard>=3.0.0\n", - "#22 1.583 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 1.609 Requirement already satisfied: Jinja2==3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.3)\n", - "#22 1.610 Requirement already satisfied: requests==2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.31.0)\n", - "#22 1.611 Requirement already satisfied: cupy-cuda12x==12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (12.2.0)\n", - "#22 1.724 Collecting pip>22.0.2\n", - "#22 1.738 Using cached pip-24.3.1-py3-none-any.whl (1.8 MB)\n", - "#22 1.756 Requirement already satisfied: psutil==6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.0)\n", - "#22 1.757 Requirement already satisfied: cloudpickle==2.2.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.2.1)\n", - "#22 1.758 Requirement already satisfied: packaging==23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (23.1)\n", - "#22 1.759 Requirement already satisfied: python-on-whales==0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.60.1)\n", - "#22 1.760 Requirement already satisfied: pyyaml==6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0)\n", - "#22 1.761 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.779 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.784 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.801 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.802 Requirement already satisfied: pydantic<2,>=1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.10.21)\n", - "#22 1.802 Requirement already satisfied: tqdm in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.67.1)\n", - "#22 1.803 Requirement already satisfied: typer>=0.4.1 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.15.1)\n", - "#22 1.813 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.813 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.814 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.815 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.845 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.16.1)\n", - "#22 1.881 Requirement already satisfied: rich>=10.11.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.9.4)\n", - "#22 1.882 Requirement already satisfied: shellingham>=1.3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.5.4)\n", - "#22 1.883 Requirement already satisfied: click>=8.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (8.1.8)\n", - "#22 1.949 Requirement already satisfied: markdown-it-py>=2.2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.0)\n", - "#22 1.950 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.19.1)\n", - "#22 1.985 Requirement already satisfied: mdurl~=0.1 in /home/holoscan/.local/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.1.2)\n", - "#22 2.261 Installing collected packages: typeguard, pip, colorama, monai-deploy-app-sdk\n", - "#22 3.247 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 pip-24.3.1 typeguard-4.4.1\n", - "#22 DONE 3.6s\n", + "#22 0.791 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 0.999 Collecting monai-deploy-app-sdk==2.0.0\n", + "#22 1.009 WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))': /packages/fa/5a/e4bc7bad613a21b80d0d2835598af5ad82083cc076fec6f4d14c455d23eb/monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata\n", + "#22 1.021 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", + "#22 1.039 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", + "#22 1.041 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", + "#22 1.079 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", + "#22 1.089 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.176 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", + "#22 1.181 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.206 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", + "#22 1.208 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", + "#22 1.209 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", + "#22 1.209 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", + "#22 1.210 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", + "#22 1.211 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", + "#22 1.212 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", + "#22 1.213 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", + "#22 1.214 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", + "#22 1.214 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", + "#22 1.219 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", + "#22 1.227 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", + "#22 1.231 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", + "#22 1.242 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", + "#22 1.247 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", + "#22 1.248 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", + "#22 1.250 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", + "#22 1.250 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", + "#22 1.253 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", + "#22 1.265 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", + "#22 1.266 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", + "#22 1.285 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", + "#22 1.306 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.325 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", + "#22 1.453 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", + "#22 1.652 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", + "#22 DONE 2.0s\n", "\n", "#23 [release 14/17] COPY ./map/app.json /etc/holoscan/app.json\n", "#23 DONE 0.1s\n", @@ -1843,77 +1821,77 @@ "\n", "#27 exporting to docker image format\n", "#27 exporting layers\n", - "#27 exporting layers 24.0s done\n", - "#27 exporting manifest sha256:cc7706093c83a3a726ef89196569affd7a7462bb7c4d0f2ee43b135224920095 0.0s done\n", - "#27 exporting config sha256:70d7701f92d3ce5f4031fd4e0cbf5c1df2d07600f6549cfd50b960afefe42515 0.0s done\n", + "#27 exporting layers 21.8s done\n", + "#27 exporting manifest sha256:53ff7da31e7d5c6946b56e187e574f38dcf580354efae32e00d50b4986bb3ea0 0.0s done\n", + "#27 exporting config sha256:a00c56131135404d07ea4a88014855a80f5a306b51d023abfe17aecad923f4f8 0.0s done\n", "#27 sending tarball\n", "#27 ...\n", "\n", "#28 importing to docker\n", - "#28 loading layer 1b024ad82f5a 229B / 229B\n", - "#28 loading layer b8bccbd3b506 65.54kB / 5.03MB\n", - "#28 loading layer 5a9d3c09196c 557.06kB / 226.89MB\n", - "#28 loading layer 5a9d3c09196c 93.59MB / 226.89MB 2.1s\n", - "#28 loading layer 5a9d3c09196c 137.04MB / 226.89MB 4.2s\n", - "#28 loading layer 5a9d3c09196c 178.81MB / 226.89MB 6.3s\n", - "#28 loading layer 5a9d3c09196c 226.16MB / 226.89MB 8.3s\n", - "#28 loading layer c99258ac4505 65.54kB / 3.78MB\n", - "#28 loading layer 3170063eb987 490B / 490B\n", - "#28 loading layer fd5e217f4633 313B / 313B\n", - "#28 loading layer f6848a086f32 295B / 295B\n", - "#28 loading layer bf3b68165975 3.21kB / 3.21kB\n", - "#28 loading layer 1b024ad82f5a 229B / 229B 10.3s done\n", - "#28 loading layer b8bccbd3b506 65.54kB / 5.03MB 10.2s done\n", - "#28 loading layer 5a9d3c09196c 226.16MB / 226.89MB 9.6s done\n", - "#28 loading layer c99258ac4505 65.54kB / 3.78MB 1.1s done\n", - "#28 loading layer 3170063eb987 490B / 490B 0.4s done\n", - "#28 loading layer fd5e217f4633 313B / 313B 0.4s done\n", - "#28 loading layer f6848a086f32 295B / 295B 0.3s done\n", - "#28 loading layer bf3b68165975 3.21kB / 3.21kB 0.2s done\n", - "#28 DONE 10.3s\n", + "#28 loading layer 9d60bef8e444 230B / 230B\n", + "#28 loading layer c90115fa1f34 65.54kB / 5.10MB\n", + "#28 loading layer 8c9e9b65f01e 557.06kB / 230.97MB\n", + "#28 loading layer 8c9e9b65f01e 42.89MB / 230.97MB 2.1s\n", + "#28 loading layer 8c9e9b65f01e 111.41MB / 230.97MB 4.1s\n", + "#28 loading layer 8c9e9b65f01e 145.95MB / 230.97MB 6.1s\n", + "#28 loading layer 8c9e9b65f01e 175.47MB / 230.97MB 8.2s\n", + "#28 loading layer 8c9e9b65f01e 213.91MB / 230.97MB 10.2s\n", + "#28 loading layer 78921c5c83a7 32.77kB / 578.02kB\n", + "#28 loading layer 2b15b8f81b52 491B / 491B\n", + "#28 loading layer 5b542f78e0ea 314B / 314B\n", + "#28 loading layer 59edd496942a 294B / 294B\n", + "#28 loading layer 318a06f5a29c 3.20kB / 3.20kB\n", + "#28 loading layer 318a06f5a29c 3.20kB / 3.20kB 0.2s done\n", + "#28 loading layer 9d60bef8e444 230B / 230B 12.6s done\n", + "#28 loading layer c90115fa1f34 65.54kB / 5.10MB 12.6s done\n", + "#28 loading layer 8c9e9b65f01e 213.91MB / 230.97MB 11.9s done\n", + "#28 loading layer 78921c5c83a7 32.77kB / 578.02kB 0.7s done\n", + "#28 loading layer 2b15b8f81b52 491B / 491B 0.5s done\n", + "#28 loading layer 5b542f78e0ea 314B / 314B 0.4s done\n", + "#28 loading layer 59edd496942a 294B / 294B 0.3s done\n", + "#28 DONE 12.6s\n", "\n", "#27 exporting to docker image format\n", - "#27 sending tarball 24.8s done\n", - "#27 DONE 48.8s\n", + "#27 sending tarball 27.3s done\n", + "#27 DONE 49.1s\n", "\n", "#29 exporting cache to client directory\n", "#29 preparing build cache for export\n", - "#29 writing layer sha256:0f288e66a79a71cef90c6368b4adaad8ed36262f6000f8acf8d49cce95577d68\n", - "#29 writing layer sha256:0f288e66a79a71cef90c6368b4adaad8ed36262f6000f8acf8d49cce95577d68 0.0s done\n", + "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", + "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", "#29 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#29 writing layer sha256:1a5c607fac617c9a47a6fc2a6bda367b1f4be6b5e2c6cfdc7bf0ca16c6e969c0 0.1s done\n", - "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24\n", "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", "#29 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#29 writing layer sha256:310210c018e9123f7e4dd12747f657a167962dc86770b58db1309651c1e4fff0 0.1s done\n", "#29 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", "#29 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#29 writing layer sha256:419f5fe8264f5c5f64aad0cfa4cf85e93d877a9424e0c4467ac5f2a450d6e056 0.0s done\n", - "#29 writing layer sha256:41e173df84c503c9e717e0e67c22260d4e6bb14660577b225dec5733b4155a78 done\n", + "#29 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", "#29 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#29 writing layer sha256:5b30d2811318a73c976648ae475ac270801091fbf9e25d455ab1272863f37139 0.0s done\n", "#29 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#29 writing layer sha256:834f38ff94a8090956102675d8f74ea3c8dd46a273f4a1f070bb2972b3003271\n", - "#29 writing layer sha256:834f38ff94a8090956102675d8f74ea3c8dd46a273f4a1f070bb2972b3003271 3.3s done\n", - "#29 writing layer sha256:875bf82ef536517b9ff04de88d1b32370335edb06abc9c9802ebaae0e33bb16c\n", - "#29 writing layer sha256:875bf82ef536517b9ff04de88d1b32370335edb06abc9c9802ebaae0e33bb16c 0.1s done\n", - "#29 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707\n", - "#29 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707 done\n", - "#29 writing layer sha256:94ed629bf6769eea21c1bcc9c2527c040075d6f7ddbf8e6f45d83a1a3a7430b5 0.0s done\n", + "#29 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", + "#29 writing layer sha256:6b55a0ece27da2213382510598c60a658a0090ecc1b77924381aa52e03dde663 0.0s done\n", + "#29 writing layer sha256:765c241f999d7e08875cebc322e3685bc995f5bcd51b1ae00e7a8d37d580c6d0\n", + "#29 writing layer sha256:765c241f999d7e08875cebc322e3685bc995f5bcd51b1ae00e7a8d37d580c6d0 4.1s done\n", + "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885\n", "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", "#29 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#29 writing layer sha256:b6b7f5fd2c4d2a1139bf709d79900ce0959f21bbf09cd203ddf5a01540ca11cb 0.0s done\n", "#29 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#29 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94 done\n", - "#29 writing layer sha256:c8937b741c9ecd6b257aeb18daf07eddbf1c77b0c93f9ba4164faa8353cd1d3c done\n", + "#29 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", + "#29 writing layer sha256:c6e43c0a1312306b0a277e2331a8040cbcb07a7dd18c1818cab4890b7ea6d1fd 0.0s done\n", + "#29 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", "#29 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#29 writing layer sha256:d6a3aed185061848dad38d40fc87ecf54ea6773924fd4596cd74b5e3e5bfb1f2 0.0s done\n", - "#29 writing layer sha256:e540d242f419a27800d601d7275f4fbb3488b97d209b454f52e63f1eb413a912 done\n", + "#29 writing layer sha256:d7bc8c1388631bfc461cb46725c245871c4e7c8b55d39dbcabe50c11e67ee6d8 0.0s done\n", + "#29 writing layer sha256:dcea0ee16845c3ea8a82f6e3ff8448f3ab26316873f456d68d26d1ea1cc48cae 0.0s done\n", + "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31\n", "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#29 writing config sha256:692173dc5432d2da6886f738a6b98d063c1f53f7aab1c09c888cf9edde90e0ec 0.0s done\n", - "#29 preparing build cache for export 4.0s done\n", - "#29 writing cache manifest sha256:a902154876d24757b32216424d3293c210d819dff65948054a3f83e51acad1d4 0.0s done\n", - "#29 DONE 4.0s\n", - "[2025-01-16 10:22:24,149] [INFO] (packager) - Build Summary:\n", + "#29 writing layer sha256:f22f9b836cbd9aef6d19af4591090720cabcc90d50397bde4bfb5df30c3c0074 0.1s done\n", + "#29 preparing build cache for export 4.7s done\n", + "#29 writing config sha256:a4f75b166426c5bb67adf94166174f47e6bbad714871ff611d617fc530aa5585 0.0s done\n", + "#29 writing cache manifest sha256:7f136b3980378eddd091fe709e3147397eee5acd8a045ed9aa3e46e605540a0d 0.0s done\n", + "#29 DONE 4.7s\n", + "[2025-01-29 12:09:49,701] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1950,7 +1928,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 70d7701f92d3 54 seconds ago 2.98GB\n" + "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 a00c56131135 55 seconds ago 2.98GB\n" ] } ], @@ -2030,17 +2008,17 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-16 18:22:27 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-01-29 20:09:54 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-16 18:22:27 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-16 18:22:27 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-16 18:22:27 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-01-29 20:09:54 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-01-29 20:09:54 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-01-29 20:09:54 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-16 18:22:27 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", - "2025-01-16 18:22:27 [INFO] '/opt/holoscan/models' cannot be found.\n", + "2025-01-29 20:09:54 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-01-29 20:09:54 [INFO] '/opt/holoscan/models' cannot be found.\n", "\n", - "2025-01-16 18:22:27 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-16 18:22:27 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-01-29 20:09:54 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-01-29 20:09:54 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config\n" ] @@ -2074,22 +2052,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-16 10:22:29,375] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-16 10:22:29,375] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-01-29 12:09:56,049] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-16 10:22:29,375] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-16 10:22:29,375] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-16 10:22:29,473] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmptn3vmu2k/app.json\n", - "Successfully copied 2.05kB to /tmp/tmptn3vmu2k/pkg.json\n", - "[2025-01-16 10:22:29,824] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-01-29 12:09:56,111] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpvqx0u9zd/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpvqx0u9zd/pkg.json\n", + "d89d96d29bdf06ffe093ea7a304454c174b70705e522d5cc48fcdc332533b32c\n", + "[2025-01-29 12:09:56,396] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-16 10:22:29,824] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-01-29 12:09:56,396] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-16 10:22:30,105] [INFO] (common) - Launching container (cbedd97d041f) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: quizzical_meitner\n", + "[2025-01-29 12:09:56,655] [INFO] (common) - Launching container (cdaa371aba2f) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: zealous_bohr\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2099,39 +2078,39 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-16 18:22:30 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-01-29 20:09:57 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[info] [fragment.cpp:585] Loading extensions from configs...\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:255] Creating context\n", + "[info] [gxf_executor.cpp:264] Creating context\n", "\n", - "[2025-01-16 18:22:31,102] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2025-01-29 20:09:57,994] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2025-01-16 18:22:31,102] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2025-01-29 20:09:57,995] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2025-01-16 18:22:31,102] [INFO] (root) - sample_data_path: /var/holoscan/input\n", + "[2025-01-29 20:09:57,995] [INFO] (root) - sample_data_path: /var/holoscan/input\n", "\n", - "[info] [app_driver.cpp:1176] Launching the driver/health checking service\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", "\n", - "[info] [gxf_executor.cpp:1973] Activating Graph...\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", "\n", - "[info] [gxf_executor.cpp:2003] Running Graph...\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2005] Waiting for completion...\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", "\n", - "\u001b[0m2025-01-16 18:22:31.105 INFO gxf/std/greedy_scheduler.cpp@191: Scheduling 3 entities\u001b[0m\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", "\n", - "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "\n", - "\u001b[0m2025-01-16 18:22:31.765 INFO gxf/std/greedy_scheduler.cpp@372: Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\u001b[0m\n", + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", - "\u001b[0m2025-01-16 18:22:31.765 INFO gxf/std/greedy_scheduler.cpp@401: Scheduler finished.\u001b[0m\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2008] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2016] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", "\n", - "[info] [gxf_executor.cpp:284] Destroying context\n", + "[info] [gxf_executor.cpp:294] Destroying context\n", "\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "\n", @@ -2145,7 +2124,7 @@ "\n", "Data type of output post conversion: , max = 91\n", "\n", - "[2025-01-16 10:22:32,099] [INFO] (common) - Container 'quizzical_meitner'(cbedd97d041f) exited.\n" + "[2025-01-29 12:09:58,979] [INFO] (common) - Container 'zealous_bohr'(cdaa371aba2f) exited.\n" ] } ], @@ -2164,14 +2143,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_2020944/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_58609/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 27, diff --git a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb index 7dc6bc3a..ef574499 100644 --- a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb +++ b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 54, "metadata": {}, "outputs": [ { @@ -28,11 +28,11 @@ "output_type": "stream", "text": [ "Cloning into 'source'...\n", - "remote: Enumerating objects: 280, done.\u001b[K\n", - "remote: Counting objects: 100% (280/280), done.\u001b[K\n", - "remote: Compressing objects: 100% (225/225), done.\u001b[K\n", - "remote: Total 280 (delta 59), reused 154 (delta 33), pack-reused 0 (from 0)\u001b[K\n", - "Receiving objects: 100% (280/280), 1.40 MiB | 4.93 MiB/s, done.\n", + "remote: Enumerating objects: 281, done.\u001b[K\n", + "remote: Counting objects: 100% (281/281), done.\u001b[K\n", + "remote: Compressing objects: 100% (229/229), done.\u001b[K\n", + "remote: Total 281 (delta 59), reused 149 (delta 30), pack-reused 0 (from 0)\u001b[K\n", + "Receiving objects: 100% (281/281), 1.40 MiB | 13.06 MiB/s, done.\n", "Resolving deltas: 100% (59/59), done.\n" ] } @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 55, "metadata": {}, "outputs": [ { @@ -70,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 56, "metadata": {}, "outputs": [ { @@ -79,13 +79,13 @@ "text": [ "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (2.0.0)\n", "Requirement already satisfied: numpy>=1.21.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (1.26.4)\n", - "Requirement already satisfied: holoscan~=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (2.8.0)\n", + "Requirement already satisfied: holoscan~=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (2.9.0)\n", "Requirement already satisfied: colorama>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (0.4.6)\n", "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.4.1)\n", - "Requirement already satisfied: pip>22.0.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (24.3.1)\n", + "Requirement already satisfied: pip>22.0.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (25.0)\n", "Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (13.3.0)\n", "Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.1)\n", - "Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.75.1)\n", + "Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.60.1)\n", "Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.5)\n", "Requirement already satisfied: packaging>=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (24.2)\n", "Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.0.2)\n", @@ -95,14 +95,20 @@ "Requirement already satisfied: typing-extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.12.2)\n", "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk) (0.8.3)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk) (3.0.2)\n", - "Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (2.10.5)\n", + "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.10.21)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (4.67.1)\n", + "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.15.1)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.4.1)\n", "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.10)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2.3.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2024.12.14)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk) (3.16.1)\n", - "Requirement already satisfied: annotated-types>=0.6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.7.0)\n", - "Requirement already satisfied: pydantic-core==2.27.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (2.27.2)\n" + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk) (3.17.0)\n", + "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (8.1.8)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.5.4)\n", + "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (13.9.4)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (2.19.1)\n", + "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.1.2)\n" ] } ], @@ -120,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 57, "metadata": {}, "outputs": [ { @@ -131,7 +137,7 @@ "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (11.1.0)\n", "Requirement already satisfied: numpy<2.0,>=1.24 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (1.26.4)\n", "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.5.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.16.1)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.17.0)\n", "Requirement already satisfied: typing-extensions>=4.8.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.12.2)\n", "Requirement already satisfied: networkx in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.4.2)\n", "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.5)\n", @@ -168,46 +174,26 @@ "source": [ "## Download/Extract mednist_classifier_data.zip from Google Drive\n", "\n", - "**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing). Please download zip file, `mednist_classifier_data.zip` in the `medmist_classifier_app` folder, to the same folder as the notebook example." + "**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1EONJsrwbGsS30td0hs8zl4WKjihew1Z3?usp=sharing), then download the zip file, `mednist_classifier_data.zip` found in the `medmist_classifier_app` folder, to the same folder as this notebook example." ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 58, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: gdown in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (5.2.0)\n", - "Requirement already satisfied: beautifulsoup4 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.12.3)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (3.16.1)\n", - "Requirement already satisfied: requests[socks] in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (2.32.3)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gdown) (4.67.1)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from beautifulsoup4->gdown) (2.6)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.4.1)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (3.10)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2.3.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (2024.12.14)\n", - "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests[socks]->gdown) (1.7.1)\n", - "Downloading...\n", - "From (original): https://drive.google.com/uc?id=1IoEJZFFixcNtPPKeKZfD_xSJSFQCbawl\n", - "From (redirected): https://drive.google.com/uc?id=1IoEJZFFixcNtPPKeKZfD_xSJSFQCbawl&confirm=t&uuid=d65df8b8-9813-4fd7-9d5c-c3a7a18fbab0\n", - "To: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_classifier_data.zip\n", - "100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 28.6M/28.6M [00:00<00:00, 36.7MB/s]\n" - ] - } - ], + "outputs": [], "source": [ - "# Download mednist_classifier_data.zip\n", - "!pip install gdown\n", - "!gdown \"https://drive.google.com/uc?id=1IoEJZFFixcNtPPKeKZfD_xSJSFQCbawl\" # Redundant if already manually downloaded the file to avoid permission issue." + "import os\n", + "data_dir = os.path.join(os.path.curdir, \"mednist_classifier_data.zip\")\n", + "if not os.path.exists(data_dir):\n", + " # Download mednist_classifier_data.zip\n", + " !pip install gdown\n", + " !gdown \"https://drive.google.com/uc?id=1IoEJZFFixcNtPPKeKZfD_xSJSFQCbawl\" # Redundant if already manually downloaded the file to avoid permission issue." ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 59, "metadata": {}, "outputs": [ { @@ -229,7 +215,7 @@ "!rm -rf {input_folder}\n", "!unzip -o \"mednist_classifier_data.zip\"\n", "\n", - "# Need to copy the model file to its own clean subfolder for pacakging, to workaround an issue in the Packager\n", + "# Need to copy the model file to its own clean subfolder for packaging, to workaround an issue in the Packager\n", "models_folder = \"models\"\n", "!rm -rf {models_folder} && mkdir -p {models_folder}/model && cp classifier.zip {models_folder}/model && ls {models_folder}/model" ] @@ -240,14 +226,14 @@ "metadata": {}, "source": [ "### Set up environment variables\n", - "The application uses well-known enviornment variables for the input/output data path, working dir, as well as AI model file path if applicable. Defaults are used if these environment variable are absent.\n", + "The application uses well-known environment variables for the input/output data path, working dir, as well as AI model file path if applicable. Defaults are used if these environment variable are absent.\n", "\n", "Set the environment variables corresponding to the extracted data path." ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 60, "metadata": {}, "outputs": [ { @@ -283,23 +269,23 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-16 15:25:15,655] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-16 15:25:15,916] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-16 15:25:15,917] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", - "[2025-01-16 15:25:15,917] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2025-01-16 15:25:15,918] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-16 15:25:15,918] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-16 15:25:15,918] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", - "[2025-01-16 15:25:15,924] [INFO] (packager) - Generating app.json...\n", - "[2025-01-16 15:25:15,924] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-16 15:25:15,928] [DEBUG] (common) - \n", + "[2025-01-29 12:12:36,857] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-29 12:12:36,871] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-29 12:12:36,871] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", + "[2025-01-29 12:12:36,871] [INFO] (packager.parameters) - Detected application type: Python File\n", + "[2025-01-29 12:12:36,871] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-01-29 12:12:36,871] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-01-29 12:12:36,872] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", + "[2025-01-29 12:12:36,874] [INFO] (packager) - Generating app.json...\n", + "[2025-01-29 12:12:36,874] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-29 12:12:36,876] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -334,7 +320,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2025-01-16 15:25:15,928] [DEBUG] (common) - \n", + "[2025-01-29 12:12:36,876] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -354,7 +340,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-16 15:25:15,966] [DEBUG] (packager.builder) - \n", + "[2025-01-29 12:12:36,901] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml'),\n", @@ -373,7 +359,7 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.8.0',\n", + " 'holoscan_sdk_version': '2.9.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", @@ -397,7 +383,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-16 15:25:15,967] [DEBUG] (packager.builder) - \n", + "[2025-01-29 12:12:36,902] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -407,15 +393,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.8.0',\n", - " 'holoscan_sdk_filename': '2.8.0',\n", + " 'holoscan_sdk_file': '2.9.0',\n", + " 'holoscan_sdk_filename': '2.9.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'mednist_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-16 15:25:16,013] [DEBUG] (packager.builder) - \n", + "[2025-01-29 12:12:36,919] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -479,7 +465,7 @@ "LABEL tag=\"mednist_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.8.0\"\n", + "LABEL org.nvidia.holoscan=\"2.9.0\"\n", "\n", "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", "\n", @@ -494,7 +480,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.8.0\n", + "ENV HOLOSCAN_VERSION=2.9.0\n", "\n", "\n", "\n", @@ -569,7 +555,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-16 15:25:16,014] [INFO] (packager.builder) - \n", + "[2025-01-29 12:12:36,920] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -577,175 +563,157 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.8.0\n", + " Holoscan SDK Package: 2.9.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.8.0\n", + " SDK Version: 2.9.0\n", " SDK: monai-deploy\n", " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-16 15:25:16,839] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-16 15:25:16,840] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-01-29 12:12:37,236] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-29 12:12:37,236] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile:\n", - "#1 transferring dockerfile: 4.57kB 0.0s done\n", + "#1 transferring dockerfile: 4.57kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", - "#2 DONE 0.0s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#2 DONE 0.1s\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#3 DONE 0.4s\n", + "#3 [internal] load .dockerignore\n", + "#3 transferring context: 1.80kB done\n", + "#3 DONE 0.1s\n", "\n", - "#4 [internal] load .dockerignore\n", - "#4 transferring context: 1.79kB done\n", - "#4 DONE 0.1s\n", + "#4 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#4 ...\n", "\n", - "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#5 ...\n", + "#5 [internal] load build context\n", + "#5 DONE 0.0s\n", "\n", - "#6 [internal] load build context\n", + "#6 importing cache manifest from local:16465729945619348226\n", + "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from local:17114664432413636321\n", - "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", + "#7 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", "#7 DONE 0.0s\n", "\n", - "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#8 DONE 0.1s\n", + "#4 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#4 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#4 DONE 0.4s\n", "\n", - "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#5 DONE 0.8s\n", + "#5 [internal] load build context\n", + "#5 transferring context: 28.60MB 0.2s done\n", + "#5 DONE 0.3s\n", "\n", - "#6 [internal] load build context\n", - "#6 transferring context: 28.60MB 0.2s done\n", - "#6 DONE 0.3s\n", + "#8 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#8 CACHED\n", "\n", - "#9 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#9 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", "#9 CACHED\n", "\n", - "#10 [release 6/18] WORKDIR /var/holoscan\n", + "#10 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#11 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#11 CACHED\n", "\n", - "#12 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#12 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#12 CACHED\n", "\n", - "#13 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#13 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#13 CACHED\n", "\n", "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#14 CACHED\n", "\n", - "#15 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#15 [release 9/18] WORKDIR /var/holoscan\n", "#15 CACHED\n", "\n", - "#16 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#16 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#16 CACHED\n", "\n", - "#17 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#17 [release 6/18] WORKDIR /var/holoscan\n", "#17 CACHED\n", "\n", - "#18 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#18 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", "#18 CACHED\n", "\n", - "#19 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#19 [release 14/18] COPY ./models /opt/holoscan/models\n", "#19 CACHED\n", "\n", "#20 [release 11/18] RUN pip install --upgrade pip\n", "#20 CACHED\n", "\n", - "#21 [release 9/18] WORKDIR /var/holoscan\n", + "#21 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#21 CACHED\n", "\n", - "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", + "#22 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", "#22 CACHED\n", "\n", - "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.6s\n", - "\n", - "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.2s\n", - "\n", - "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", - "#25 DONE 0.2s\n", - "\n", - "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#26 DONE 0.2s\n", - "\n", - "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", - "#27 DONE 0.2s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 1.9s done\n", - "#28 exporting manifest sha256:afbc907fa0a369a2f16f26a77411e7649a79063efffcf7cf5adad38183291b94 0.0s done\n", - "#28 exporting config sha256:5c1b6f89e061f5f67b24c8cf506f572b2c000c5585b641a9c46ebe77dbc76788 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer dd1c2998eccf 262.14kB / 25.59MB\n", - "#29 loading layer a8f3aa43fe53 512B / 512B\n", - "#29 loading layer 5be43d70908a 696B / 696B\n", - "#29 loading layer 74efae286fce 299B / 299B\n", - "#29 loading layer 68ee590555d3 4.17kB / 4.17kB\n", - "#29 loading layer 68ee590555d3 4.17kB / 4.17kB 0.4s done\n", - "#29 loading layer dd1c2998eccf 262.14kB / 25.59MB 0.9s done\n", - "#29 loading layer a8f3aa43fe53 512B / 512B 0.5s done\n", - "#29 loading layer 5be43d70908a 696B / 696B 0.5s done\n", - "#29 loading layer 74efae286fce 299B / 299B 0.4s done\n", - "#29 DONE 0.9s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 50.5s done\n", - "#28 DONE 52.5s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff 0.0s done\n", - "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:41e173df84c503c9e717e0e67c22260d4e6bb14660577b225dec5733b4155a78 done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:69a43436b2ce855cf28cf641ceb9106bf500f2cb12e3a07cbae366c79d72be7c\n", - "#30 writing layer sha256:69a43436b2ce855cf28cf641ceb9106bf500f2cb12e3a07cbae366c79d72be7c 0.5s done\n", - "#30 writing layer sha256:6cb8bb8a1d4ff0968b1928e3a7c2a7a5c29934ce062651403efa8169f1ef2f22\n", - "#30 writing layer sha256:6cb8bb8a1d4ff0968b1928e3a7c2a7a5c29934ce062651403efa8169f1ef2f22 done\n", - "#30 writing layer sha256:729bf790873c4425097dd140c6a8fc2f6b8f0a583c05665cfcdde34bcde55a71 0.0s done\n", - "#30 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707 done\n", - "#30 writing layer sha256:95d5aad5207ff23e9733fd253a606be845749054783466d8c9a3f73d0a2d25b8 0.0s done\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:9b72862f620f8b7b4f1fb1e44a1e06c5121b21f1ff5132364cc7cc00f883abd1 0.0s done\n", - "#30 writing layer sha256:a40bb4ae02b3d3fa186140aaca178144ef5d504f6581bcd05af95b357c082116 done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:b3a705dd063a4b184f4ae8095ca2eba91e8aa4eb2a0a561b869c06d85ec83929\n", - "#30 preparing build cache for export 1.0s done\n", - "#30 writing layer sha256:b3a705dd063a4b184f4ae8095ca2eba91e8aa4eb2a0a561b869c06d85ec83929 0.0s done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94 done\n", - "#30 writing layer sha256:c8937b741c9ecd6b257aeb18daf07eddbf1c77b0c93f9ba4164faa8353cd1d3c done\n", - "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:e540d242f419a27800d601d7275f4fbb3488b97d209b454f52e63f1eb413a912 done\n", - "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing layer sha256:fcb63189ed471f44270645dedc0ac5966ac9fa2ef705eb6d2678e7695ceebb95 done\n", - "#30 writing layer sha256:fd70b1234d70e071e4309175d0612d1ae9984e18bdaf1a1426dd218b747427bc done\n", - "#30 writing config sha256:e49757ae9f8e6f65b6803fe303ffd44430c2d32fdc429bc50c8b7262f20d89d0 0.0s done\n", - "#30 writing cache manifest sha256:968ad4e004ca52bdfb4f7686b9cab58437499e739f9670ddab325f23501545da 0.0s done\n", - "#30 DONE 1.0s\n", - "[2025-01-16 15:26:14,630] [INFO] (packager) - Build Summary:\n", + "#23 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#23 CACHED\n", + "\n", + "#24 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", + "#24 CACHED\n", + "\n", + "#25 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#25 CACHED\n", + "\n", + "#26 [release 18/18] COPY ./app /opt/holoscan/app\n", + "#26 CACHED\n", + "\n", + "#27 exporting to docker image format\n", + "#27 exporting layers done\n", + "#27 exporting manifest sha256:0b41598c260304f5f4973c45507027d6f6d311cf96b376966f1bb76389f67124 0.0s done\n", + "#27 exporting config sha256:709aec1f6ab81acd9aca94f56c56022d894fd418e507ce39c07cfa36c5d1df5e 0.0s done\n", + "#27 sending tarball\n", + "#27 ...\n", + "\n", + "#28 importing to docker\n", + "#28 DONE 0.3s\n", + "\n", + "#27 exporting to docker image format\n", + "#27 sending tarball 42.6s done\n", + "#27 DONE 42.6s\n", + "\n", + "#29 exporting cache to client directory\n", + "#29 preparing build cache for export\n", + "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", + "#29 preparing build cache for export 0.2s done\n", + "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", + "#29 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#29 writing layer sha256:1aec4523578214a9e9ce44e1d35ef14baaa0adc445ee1d6c04b7a1410286be38 done\n", + "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#29 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#29 writing layer sha256:2662727f69a3c4fe16ed7b9563dc330c8e3d78c0e96c6f7452c9feebf4240230 done\n", + "#29 writing layer sha256:2c27de1203ae9e9310d46119db6142d91f2dc9f3696febdeda1f19fc94cc322e done\n", + "#29 writing layer sha256:2eab43e0230c8932e1ecc65ee0bfb04e09997d2fe628464a9aeee2e7c3342e70 done\n", + "#29 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#29 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#29 writing layer sha256:3d39307d2f870435b87759c9c8fc19aef39983c9770bacebcfcffe4995566ace done\n", + "#29 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", + "#29 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", + "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#29 writing layer sha256:661c1acfe226bb081b6c704a60812b6478d91d96b5fd54809955559a13e1de7a done\n", + "#29 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#29 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", + "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#29 writing layer sha256:9c13069733b0b63267a044a5a9096728e6abacbc29bc2c95c5f612d18fddd5c0 done\n", + "#29 writing layer sha256:a86de304afb6316ba8fdb2348e518ea07b80a2bae0094710c44433a2f21f0179 done\n", + "#29 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#29 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#29 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", + "#29 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", + "#29 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#29 writing layer sha256:db35cf0f285944390b7654050f2f598898d655184084cf06a69ec9b97ce0aef7 done\n", + "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#29 writing config sha256:5dc9836ff3abdef93b2f148be23a0b066d0a7a2852c914b765917464c3015748 done\n", + "#29 writing cache manifest sha256:1010d1046d6cbc0e3d13f82a6ae20739105dc9f11c703119f1961a90c2f5851e done\n", + "#29 DONE 0.2s\n", + "[2025-01-29 12:13:21,748] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -769,14 +737,14 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 62, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 5c1b6f89e061 55 seconds ago 8.6GB\n" + "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 709aec1f6ab8 19 hours ago 8.62GB\n" ] } ], @@ -798,7 +766,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 63, "metadata": {}, "outputs": [ { @@ -858,16 +826,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-16 23:26:18 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-01-29 20:13:24 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-16 23:26:18 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-16 23:26:18 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-16 23:26:18 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-01-29 20:13:24 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-01-29 20:13:24 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-01-29 20:13:24 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-16 23:26:18 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-01-29 20:13:24 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2025-01-16 23:26:18 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-16 23:26:18 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-01-29 20:13:24 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-01-29 20:13:24 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -892,29 +860,30 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 64, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-16 15:26:20,643] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-16 15:26:20,643] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-01-29 12:13:26,378] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-16 15:26:20,644] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-16 15:26:20,646] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-16 15:26:20,837] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpwakl5ani/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpwakl5ani/pkg.json\n", - "[2025-01-16 15:26:21,167] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-01-29 12:13:26,457] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmp37cky0tg/app.json\n", + "Successfully copied 2.05kB to /tmp/tmp37cky0tg/pkg.json\n", + "8b09681d6e2452afa9a9506bd30dc868461412ea13e53a3913f9054fe877e4e0\n", + "[2025-01-29 12:13:26,739] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-16 15:26:21,169] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-01-29 12:13:26,739] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-16 15:26:21,592] [INFO] (common) - Launching container (06dd3af216d1) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: angry_einstein\n", + "[2025-01-29 12:13:27,109] [INFO] (common) - Launching container (6900c4ea8775) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: frosty_gould\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -924,37 +893,59 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-16 23:26:22 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + "2025-01-29 20:13:27 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + "\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "\n", + "[info] [gxf_executor.cpp:264] Creating context\n", + "\n", + "[2025-01-29 20:13:32,718] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'])\n", + "\n", + "[2025-01-29 20:13:32,723] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", + "\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", "\n", - "Traceback (most recent call last):\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", "\n", - " File \"/opt/holoscan/app/mednist_classifier_monaideploy.py\", line 19, in \n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", "\n", - " from monai.deploy.conditions import CountCondition\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", + "\n", + "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", "\n", - " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/__init__.py\", line 101, in \n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "\n", - " load_submodules(sys.modules[__name__], False, exclude_pattern=excludes)\n", + "[2025-01-29 20:13:34,583] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", "\n", - " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/utils/module.py\", line 187, in load_submodules\n", + "[2025-01-29 20:13:34,583] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", "\n", - " mod = import_module(name)\n", + "[2025-01-29 20:13:34,586] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", "\n", - " File \"/usr/lib/python3.10/importlib/__init__.py\", line 126, in import_module\n", + "[2025-01-29 20:13:34,589] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.31374249995216483316246551805036524135.dcm\n", "\n", - " return _bootstrap._gcd_import(name[level:], package, level)\n", + "[2025-01-29 20:13:34,590] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.31374249995216483316246551805036524135.dcm\n", + "\n", + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", - " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/__init__.py\", line 23, in \n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - " from . import _version, conditions, core, exceptions, logger, resources, utils\n", + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", "\n", - " File \"/home/holoscan/.local/lib/python3.10/site-packages/monai/deploy/core/__init__.py\", line 32, in \n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", "\n", - " from holoscan.core import *\n", + "[info] [gxf_executor.cpp:294] Destroying context\n", "\n", - "AttributeError: module 'holoscan.core' has no attribute 'MultiMessageConditionInfo'\n", + "AbdomenCT\n", "\n", - "[2025-01-16 15:26:30,695] [INFO] (common) - Container 'angry_einstein'(06dd3af216d1) exited.\n" + "[2025-01-29 12:13:35,983] [INFO] (common) - Container 'frosty_gould'(6900c4ea8775) exited.\n" ] } ], @@ -966,14 +957,14 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "cat: output/output.json: No such file or directory\n" + "\"AbdomenCT\"" ] } ], @@ -1019,7 +1010,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 66, "metadata": {}, "outputs": [], "source": [ @@ -1050,7 +1041,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 67, "metadata": {}, "outputs": [], "source": [ @@ -1121,7 +1112,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 68, "metadata": {}, "outputs": [], "source": [ @@ -1142,7 +1133,7 @@ "\n", " def __init__(\n", " self,\n", - " frament: Fragment,\n", + " fragment: Fragment,\n", " *args,\n", " app_context: AppContext,\n", " model_name: Optional[str] = \"\",\n", @@ -1169,7 +1160,7 @@ " # The name of the optional input port for passing data to override the output folder path.\n", " self.input_name_output_folder = \"output_folder\"\n", "\n", - " # The output folder set on the object can be overriden at each compute by data in the optional named input\n", + " # The output folder set on the object can be overridden at each compute by data in the optional named input\n", " self.output_folder = output_folder\n", "\n", " # Need the name when there are multiple models loaded\n", @@ -1180,7 +1171,7 @@ " self.model = self._get_model(self.app_context, self.model_path, self._model_name)\n", "\n", " # This needs to be at the end of the constructor.\n", - " super().__init__(frament, *args, **kwargs)\n", + " super().__init__(fragment, *args, **kwargs)\n", "\n", " def _get_model(self, app_context: AppContext, model_path: Path, model_name: str):\n", " \"\"\"Load the model with the given name from context or model path\n", @@ -1260,7 +1251,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 69, "metadata": {}, "outputs": [], "source": [ @@ -1311,35 +1302,31 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 15:26:31,607] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-16 15:26:31,631] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", - "[info] [gxf_executor.cpp:262] Creating context\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'text'\n", - "[info] [gxf_executor.cpp:2178] Activating Graph...\n", - "[info] [gxf_executor.cpp:2208] Running Graph...\n", - "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 12:13:36,663] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-29 12:13:36,682] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", + "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", - "[2025-01-16 15:26:34,118] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-16 15:26:34,122] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-16 15:26:34,127] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - " warn_and_log(msg)\n", - "[2025-01-16 15:26:34,140] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "[2025-01-16 15:26:34,154] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.93995131736580848135236915797288568855.dcm\n", - "[2025-01-16 15:26:34,160] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.93995131736580848135236915797288568855.dcm\n" + "[2025-01-29 12:13:37,924] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-01-29 12:13:37,926] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-01-29 12:13:37,928] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "[2025-01-29 12:13:37,936] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-01-29 12:13:37,945] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.73614944052626475782727074691876362838.dcm\n", + "[2025-01-29 12:13:37,958] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.73614944052626475782727074691876362838.dcm\n" ] }, { @@ -1355,9 +1342,9 @@ "text": [ "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[info] [gxf_executor.cpp:292] Destroying context\n" + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:294] Destroying context\n" ] } ], @@ -1368,7 +1355,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 71, "metadata": {}, "outputs": [ { @@ -1402,7 +1389,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 72, "metadata": {}, "outputs": [], "source": [ @@ -1412,7 +1399,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 73, "metadata": {}, "outputs": [ { @@ -1527,7 +1514,7 @@ "\n", " def __init__(\n", " self,\n", - " frament: Fragment,\n", + " fragment: Fragment,\n", " *args,\n", " app_context: AppContext,\n", " model_name: Optional[str] = \"\",\n", @@ -1554,7 +1541,7 @@ " # The name of the optional input port for passing data to override the output folder path.\n", " self.input_name_output_folder = \"output_folder\"\n", "\n", - " # The output folder set on the object can be overriden at each compute by data in the optional named input\n", + " # The output folder set on the object can be overridden at each compute by data in the optional named input\n", " self.output_folder = output_folder\n", "\n", " # Need the name when there are multiple models loaded\n", @@ -1565,7 +1552,7 @@ " self.model = self._get_model(self.app_context, self.model_path, self._model_name)\n", "\n", " # This needs to be at the end of the constructor.\n", - " super().__init__(frament, *args, **kwargs)\n", + " super().__init__(fragment, *args, **kwargs)\n", "\n", " def _get_model(self, app_context: AppContext, model_path: Path, model_name: str):\n", " \"\"\"Load the model with the given name from context or model path\n", @@ -1677,58 +1664,58 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 74, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 15:30:21,251] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", - "[2025-01-16 15:30:21,312] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'text'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 12:13:46,068] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", + "[2025-01-29 12:13:46,073] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", - "[2025-01-16 15:30:28,728] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", + "[2025-01-29 12:13:47,618] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", "\n", - "[2025-01-16 15:30:28,728] [DEBUG] (root) - Writing DICOM common modules...\n", - "[2025-01-16 15:30:28,733] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-16 15:30:28,733] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-16 15:30:28,734] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "[2025-01-29 12:13:47,618] [DEBUG] (root) - Writing DICOM common modules...\n", + "[2025-01-29 12:13:47,619] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-01-29 12:13:47,619] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-01-29 12:13:47,620] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warn_and_log(msg)\n", - "[2025-01-16 15:30:28,738] [DEBUG] (root) - DICOM common modules written:\n", + "[2025-01-29 12:13:47,626] [DEBUG] (root) - DICOM common modules written:\n", "Dataset.file_meta -------------------------------\n", "(0002,0000) File Meta Information Group Length UL: 198\n", "(0002,0001) File Meta Information Version OB: b'01'\n", "(0002,0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133\n", + "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", "(0002,0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002,0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", "(0002,0013) Implementation Version Name SH: '2.0.0'\n", "-------------------------------------------------\n", "(0008,0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008,0012) Instance Creation Date DA: '20250116'\n", - "(0008,0013) Instance Creation Time TM: '153028'\n", + "(0008,0012) Instance Creation Date DA: '20250129'\n", + "(0008,0013) Instance Creation Time TM: '121347'\n", "(0008,0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133\n", - "(0008,0020) Study Date DA: '20250116'\n", - "(0008,0021) Series Date DA: '20250116'\n", - "(0008,0023) Content Date DA: '20250116'\n", - "(0008,002A) Acquisition DateTime DT: '20250116153028'\n", - "(0008,0030) Study Time TM: '153028'\n", - "(0008,0031) Series Time TM: '153028'\n", - "(0008,0033) Content Time TM: '153028'\n", + "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", + "(0008,0020) Study Date DA: '20250129'\n", + "(0008,0021) Series Date DA: '20250129'\n", + "(0008,0023) Content Date DA: '20250129'\n", + "(0008,002A) Acquisition DateTime DT: '20250129121347'\n", + "(0008,0030) Study Time TM: '121347'\n", + "(0008,0031) Series Time TM: '121347'\n", + "(0008,0033) Content Time TM: '121347'\n", "(0008,0050) Accession Number SH: ''\n", "(0008,0060) Modality CS: 'SR'\n", "(0008,0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", @@ -1755,33 +1742,33 @@ " (0008,0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.39702691697742919696761863378444809409\n", - "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.77611673418592382830839709647664909683\n", + "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.46747993953820320366351594900569871942\n", + "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.86323530137357157956886829965721763612\n", "(0020,0010) Study ID SH: '1'\n", - "(0020,0011) Series Number IS: '4686'\n", + "(0020,0011) Series Number IS: '5312'\n", "(0020,0013) Instance Number IS: '1'\n", "(0040,1001) Requested Procedure ID SH: ''\n", - "[2025-01-16 15:30:28,740] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", + "[2025-01-29 12:13:47,627] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", "(0002,0000) File Meta Information Group Length UL: 198\n", "(0002,0001) File Meta Information Version OB: b'01'\n", "(0002,0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133\n", + "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", "(0002,0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002,0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", "(0002,0013) Implementation Version Name SH: '2.0.0'\n", "-------------------------------------------------\n", "(0008,0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008,0012) Instance Creation Date DA: '20250116'\n", - "(0008,0013) Instance Creation Time TM: '153028'\n", + "(0008,0012) Instance Creation Date DA: '20250129'\n", + "(0008,0013) Instance Creation Time TM: '121347'\n", "(0008,0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133\n", - "(0008,0020) Study Date DA: '20250116'\n", - "(0008,0021) Series Date DA: '20250116'\n", - "(0008,0023) Content Date DA: '20250116'\n", - "(0008,002A) Acquisition DateTime DT: '20250116153028'\n", - "(0008,0030) Study Time TM: '153028'\n", - "(0008,0031) Series Time TM: '153028'\n", - "(0008,0033) Content Time TM: '153028'\n", + "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", + "(0008,0020) Study Date DA: '20250129'\n", + "(0008,0021) Series Date DA: '20250129'\n", + "(0008,0023) Content Date DA: '20250129'\n", + "(0008,002A) Acquisition DateTime DT: '20250129121347'\n", + "(0008,0030) Study Time TM: '121347'\n", + "(0008,0031) Series Time TM: '121347'\n", + "(0008,0033) Content Time TM: '121347'\n", "(0008,0050) Accession Number SH: ''\n", "(0008,0060) Modality CS: 'SR'\n", "(0008,0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", @@ -1808,10 +1795,10 @@ " (0008,0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.39702691697742919696761863378444809409\n", - "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.77611673418592382830839709647664909683\n", + "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.46747993953820320366351594900569871942\n", + "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.86323530137357157956886829965721763612\n", "(0020,0010) Study ID SH: '1'\n", - "(0020,0011) Series Number IS: '4686'\n", + "(0020,0011) Series Number IS: '5312'\n", "(0020,0013) Instance Number IS: '1'\n", "(0040,1001) Requested Procedure ID SH: ''\n", "(0040,A040) Value Type CS: 'CONTAINER'\n", @@ -1832,14 +1819,14 @@ " ---------\n", " (0040,A160) Text Value UT: 'AbdomenCT'\n", " ---------\n", - "[2025-01-16 15:30:28,740] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "[2025-01-16 15:30:28,745] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133.dcm\n", - "[2025-01-16 15:30:28,748] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.13684611543954986424990493574500114133.dcm\n", + "[2025-01-29 12:13:47,627] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-01-29 12:13:47,635] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428.dcm\n", + "[2025-01-29 12:13:47,636] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428.dcm\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:292] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" ] } ], @@ -1849,7 +1836,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 75, "metadata": {}, "outputs": [ { @@ -1876,7 +1863,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 76, "metadata": {}, "outputs": [ { @@ -1906,7 +1893,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 77, "metadata": {}, "outputs": [ { @@ -1915,6 +1902,17 @@ "text": [ "Writing mednist_app/requirements.txt\n" ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", + "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", + "\u001b[1;31mClick here for more info. \n", + "\u001b[1;31mView Jupyter log for further details." + ] } ], "source": [ @@ -1925,7 +1923,7 @@ "highdicom>=0.18.2\n", "SimpleITK>=2.0.0\n", "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue" + "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" ] }, { diff --git a/notebooks/tutorials/02_mednist_app.ipynb b/notebooks/tutorials/02_mednist_app.ipynb index c04812cf..000ae501 100644 --- a/notebooks/tutorials/02_mednist_app.ipynb +++ b/notebooks/tutorials/02_mednist_app.ipynb @@ -27,7 +27,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -60,19 +60,11 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 5, "metadata": { "tags": [] }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/ignite/handlers/checkpoint.py:17: DeprecationWarning: `TorchScript` support for functional optimizers is deprecated and will be removed in a future PyTorch release. Consider using the `torch.compile` optimizer instead.\n", - " from torch.distributed.optim import ZeroRedundancyOptimizer\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -88,7 +80,7 @@ "Pytorch Ignite version: 0.4.11\n", "ITK version: NOT INSTALLED or UNKNOWN VERSION.\n", "Nibabel version: 5.3.2\n", - "scikit-image version: 0.25.0\n", + "scikit-image version: 0.25.1\n", "scipy version: 1.15.1\n", "Pillow version: 11.1.0\n", "Tensorboard version: NOT INSTALLED or UNKNOWN VERSION.\n", @@ -168,12 +160,12 @@ "\n", "If you use the MedNIST dataset, please acknowledge the source.\n", "\n", - "**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1Z9s3JB2YdKjcw8ELwjVYJcCEvqlQ_HTN?usp=drive_link)" + "**_Note:_** Data files are now access controlled. Please first request permission to access the [shared folder on Google Drive](https://drive.google.com/drive/folders/1Z9s3JB2YdKjcw8ELwjVYJcCEvqlQ_HTN?usp=drive_link), then download and extract the zip file to a folder called `MedNIST_DATA` at the same level as this notebook." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "tags": [] }, @@ -182,16 +174,13 @@ "name": "stdout", "output_type": "stream", "text": [ - ".\n", - "2025-01-16 12:16:03,094 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n", - "2025-01-16 12:16:03,094 - INFO - File exists: MedNIST.tar.gz, skipped downloading.\n", - "2025-01-16 12:16:03,095 - INFO - Writing into directory: ..\n" + "./MedNIST_DATA\n" ] } ], "source": [ "directory = os.environ.get(\"MONAI_DATA_DIRECTORY\")\n", - "root_dir = os.path.curdir + \"MedNIST_DATA\" if directory is None else directory\n", + "root_dir = directory if directory else os.path.join(os.path.curdir, \"MedNIST_DATA\")\n", "print(root_dir)\n", "\n", "resource = \"https://drive.google.com/uc?id=1QsnnkvZyJPcbRoV_ArW8SnE1OTuoVbKE\"\n", @@ -205,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -248,7 +237,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -267,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -291,7 +280,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -304,9 +293,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5 Loss: 0.18886765837669373\n", + "Epoch 2/5 Loss: 0.06690701842308044\n", + "Epoch 3/5 Loss: 0.028753578662872314\n", + "Epoch 4/5 Loss: 0.019015837460756302\n", + "Epoch 5/5 Loss: 0.0193385761231184\n" + ] + } + ], "source": [ "def _prepare_batch(batch, device, non_blocking):\n", " return tuple(b.to(device) for b in batch)\n", @@ -332,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -415,9 +416,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "001420.jpeg\n", + "classifier.zip\n", + "env: HOLOSCAN_INPUT_PATH=input\n", + "env: HOLOSCAN_OUTPUT_PATH=output\n", + "env: HOLOSCAN_MODEL_PATH=models\n" + ] + } + ], "source": [ "input_folder = \"input\"\n", "output_foler = \"output\"\n", @@ -445,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -475,7 +488,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -545,7 +558,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -683,7 +696,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -727,9 +740,56 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 14:14:52,365] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-29 14:14:52,380] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", + "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", + "[2025-01-29 14:14:53,399] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-01-29 14:14:53,400] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-01-29 14:14:53,402] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + " warn_and_log(msg)\n", + "[2025-01-29 14:14:53,406] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-01-29 14:14:53,410] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.89440030592013337302433440951243230255.dcm\n", + "[2025-01-29 14:14:53,413] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.89440030592013337302433440951243230255.dcm\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AbdomenCT\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:294] Destroying context\n" + ] + } + ], "source": [ "!rm -rf $HOLOSCAN_OUTPUT_PATH\n", "app = App().run()" @@ -737,9 +797,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\"AbdomenCT\"" + ] + } + ], "source": [ "!cat $HOLOSCAN_OUTPUT_PATH/output.json" ] @@ -760,7 +828,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -771,9 +839,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing mednist_app/mednist_classifier_monaideploy.py\n" + ] + } + ], "source": [ "%%writefile mednist_app/mednist_classifier_monaideploy.py\n", "\n", @@ -1022,18 +1098,57 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", + "AbdomenCT\n", + "WARNING:pydicom:'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "WARNING:pydicom:'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "WARNING:pydicom:Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + " warn_and_log(msg)\n", + "WARNING:pydicom:'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" + ] + } + ], "source": [ "!python \"mednist_app/mednist_classifier_monaideploy.py\"" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\"AbdomenCT\"" + ] + } + ], "source": [ "!cat $HOLOSCAN_OUTPUT_PATH/output.json" ] @@ -1056,9 +1171,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing mednist_app/app.yaml\n" + ] + } + ], "source": [ "%%writefile mednist_app/app.yaml\n", "%YAML 1.2\n", @@ -1078,9 +1201,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing mednist_app/requirements.txt\n" + ] + } + ], "source": [ "%%writefile mednist_app/requirements.txt\n", "monai>=1.2.0\n", @@ -1089,14 +1220,728 @@ "highdicom>=0.18.2\n", "SimpleITK>=2.0.0\n", "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue" + "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2025-01-29 14:15:03,458] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-29 14:15:03,859] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-29 14:15:03,859] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/mednist_classifier_monaideploy.py\n", + "[2025-01-29 14:15:03,859] [INFO] (packager.parameters) - Detected application type: Python File\n", + "[2025-01-29 14:15:03,860] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-01-29 14:15:03,860] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-01-29 14:15:03,860] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/app.yaml...\n", + "[2025-01-29 14:15:03,864] [INFO] (packager) - Generating app.json...\n", + "[2025-01-29 14:15:03,864] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-29 14:15:03,869] [DEBUG] (common) - \n", + "=============== Begin app.json ===============\n", + "{\n", + " \"apiVersion\": \"1.0.0\",\n", + " \"command\": \"[\\\"python3\\\", \\\"/opt/holoscan/app/mednist_classifier_monaideploy.py\\\"]\",\n", + " \"environment\": {\n", + " \"HOLOSCAN_APPLICATION\": \"/opt/holoscan/app\",\n", + " \"HOLOSCAN_INPUT_PATH\": \"input/\",\n", + " \"HOLOSCAN_OUTPUT_PATH\": \"output/\",\n", + " \"HOLOSCAN_WORKDIR\": \"/var/holoscan\",\n", + " \"HOLOSCAN_MODEL_PATH\": \"/opt/holoscan/models\",\n", + " \"HOLOSCAN_CONFIG_PATH\": \"/var/holoscan/app.yaml\",\n", + " \"HOLOSCAN_APP_MANIFEST_PATH\": \"/etc/holoscan/app.json\",\n", + " \"HOLOSCAN_PKG_MANIFEST_PATH\": \"/etc/holoscan/pkg.json\",\n", + " \"HOLOSCAN_DOCS_PATH\": \"/opt/holoscan/docs\",\n", + " \"HOLOSCAN_LOGS_PATH\": \"/var/holoscan/logs\"\n", + " },\n", + " \"input\": {\n", + " \"path\": \"input/\",\n", + " \"formats\": null\n", + " },\n", + " \"liveness\": null,\n", + " \"output\": {\n", + " \"path\": \"output/\",\n", + " \"formats\": null\n", + " },\n", + " \"readiness\": null,\n", + " \"sdk\": \"monai-deploy\",\n", + " \"sdkVersion\": \"2.0.0\",\n", + " \"timeout\": 0,\n", + " \"version\": 1.0,\n", + " \"workingDirectory\": \"/var/holoscan\"\n", + "}\n", + "================ End app.json ================\n", + " \n", + "[2025-01-29 14:15:03,869] [DEBUG] (common) - \n", + "=============== Begin pkg.json ===============\n", + "{\n", + " \"apiVersion\": \"1.0.0\",\n", + " \"applicationRoot\": \"/opt/holoscan/app\",\n", + " \"modelRoot\": \"/opt/holoscan/models\",\n", + " \"models\": {\n", + " \"model\": \"/opt/holoscan/models/model\"\n", + " },\n", + " \"resources\": {\n", + " \"cpu\": 1,\n", + " \"gpu\": 1,\n", + " \"memory\": \"1Gi\",\n", + " \"gpuMemory\": \"1Gi\"\n", + " },\n", + " \"version\": 1.0,\n", + " \"platformConfig\": \"dgpu\"\n", + "}\n", + "================ End pkg.json ================\n", + " \n", + "[2025-01-29 14:15:03,900] [DEBUG] (packager.builder) - \n", + "========== Begin Build Parameters ==========\n", + "{'additional_lib_paths': '',\n", + " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/app.yaml'),\n", + " 'app_dir': PosixPath('/opt/holoscan/app'),\n", + " 'app_json': '/etc/holoscan/app.json',\n", + " 'application': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/mednist_classifier_monaideploy.py'),\n", + " 'application_directory': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app'),\n", + " 'application_type': 'PythonFile',\n", + " 'build_cache': PosixPath('/home/mqin/.holoscan_build_cache'),\n", + " 'cmake_args': '',\n", + " 'command': '[\"python3\", '\n", + " '\"/opt/holoscan/app/mednist_classifier_monaideploy.py\"]',\n", + " 'command_filename': 'mednist_classifier_monaideploy.py',\n", + " 'config_file_path': PosixPath('/var/holoscan/app.yaml'),\n", + " 'docs_dir': PosixPath('/opt/holoscan/docs'),\n", + " 'full_input_path': PosixPath('/var/holoscan/input'),\n", + " 'full_output_path': PosixPath('/var/holoscan/output'),\n", + " 'gid': 1000,\n", + " 'holoscan_sdk_version': '2.9.0',\n", + " 'includes': [],\n", + " 'input_dir': 'input/',\n", + " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", + " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", + " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", + " 'models_dir': PosixPath('/opt/holoscan/models'),\n", + " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'no_cache': False,\n", + " 'output_dir': 'output/',\n", + " 'pip_packages': None,\n", + " 'pkg_json': '/etc/holoscan/pkg.json',\n", + " 'requirements_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/mednist_app/requirements.txt'),\n", + " 'sdk': ,\n", + " 'sdk_type': 'monai-deploy',\n", + " 'tarball_output': None,\n", + " 'timeout': 0,\n", + " 'title': 'MONAI Deploy App Package - MedNIST Classifier App',\n", + " 'uid': 1000,\n", + " 'username': 'holoscan',\n", + " 'version': 1.0,\n", + " 'working_dir': PosixPath('/var/holoscan')}\n", + "=========== End Build Parameters ===========\n", + "\n", + "[2025-01-29 14:15:03,900] [DEBUG] (packager.builder) - \n", + "========== Begin Platform Parameters ==========\n", + "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", + " 'build_image': None,\n", + " 'cuda_deb_arch': 'x86_64',\n", + " 'custom_base_image': False,\n", + " 'custom_holoscan_sdk': False,\n", + " 'custom_monai_deploy_sdk': False,\n", + " 'gpu_type': 'dgpu',\n", + " 'holoscan_deb_arch': 'amd64',\n", + " 'holoscan_sdk_file': '2.9.0',\n", + " 'holoscan_sdk_filename': '2.9.0',\n", + " 'monai_deploy_sdk_file': None,\n", + " 'monai_deploy_sdk_filename': None,\n", + " 'tag': 'mednist_app:1.0',\n", + " 'target_arch': 'x86_64'}\n", + "=========== End Platform Parameters ===========\n", + "\n", + "[2025-01-29 14:15:03,917] [DEBUG] (packager.builder) - \n", + "========== Begin Dockerfile ==========\n", + "\n", + "ARG GPU_TYPE=dgpu\n", + "\n", + "\n", + "\n", + "\n", + "FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04 AS base\n", + "\n", + "RUN apt-get update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " curl \\\n", + " jq \\\n", + " && rm -rf /var/lib/apt/lists/*\n", + "\n", + "\n", + "\n", + "\n", + "# FROM base AS mofed-installer\n", + "# ARG MOFED_VERSION=23.10-2.1.3.1\n", + "\n", + "# # In a container, we only need to install the user space libraries, though the drivers are still\n", + "# # needed on the host.\n", + "# # Note: MOFED's installation is not easily portable, so we can't copy the output of this stage\n", + "# # to our final stage, but must inherit from it. For that reason, we keep track of the build/install\n", + "# # only dependencies in the `MOFED_DEPS` variable (parsing the output of `--check-deps-only`) to\n", + "# # remove them in that same layer, to ensure they are not propagated in the final image.\n", + "# WORKDIR /opt/nvidia/mofed\n", + "# ARG MOFED_INSTALL_FLAGS=\"--dpdk --with-mft --user-space-only --force --without-fw-update\"\n", + "# RUN UBUNTU_VERSION=$(cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d= -f2) \\\n", + "# && OFED_PACKAGE=\"MLNX_OFED_LINUX-${MOFED_VERSION}-ubuntu${UBUNTU_VERSION}-$(uname -m)\" \\\n", + "# && curl -S -# -o ${OFED_PACKAGE}.tgz -L \\\n", + "# https://www.mellanox.com/downloads/ofed/MLNX_OFED-${MOFED_VERSION}/${OFED_PACKAGE}.tgz \\\n", + "# && tar xf ${OFED_PACKAGE}.tgz \\\n", + "# && MOFED_INSTALLER=$(find . -name mlnxofedinstall -type f -executable -print) \\\n", + "# && MOFED_DEPS=$(${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} --check-deps-only 2>/dev/null | tail -n1 | cut -d' ' -f3-) \\\n", + "# && apt-get update \\\n", + "# && apt-get install --no-install-recommends -y ${MOFED_DEPS} \\\n", + "# && ${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} \\\n", + "# && rm -r * \\\n", + "# && apt-get remove -y ${MOFED_DEPS} && apt-get autoremove -y \\\n", + "# && rm -rf /var/lib/apt/lists/*\n", + "\n", + "FROM base AS release\n", + "ENV DEBIAN_FRONTEND=noninteractive\n", + "ENV TERM=xterm-256color\n", + "\n", + "ARG GPU_TYPE\n", + "ARG UNAME\n", + "ARG UID\n", + "ARG GID\n", + "\n", + "RUN mkdir -p /etc/holoscan/ \\\n", + " && mkdir -p /opt/holoscan/ \\\n", + " && mkdir -p /var/holoscan \\\n", + " && mkdir -p /opt/holoscan/app \\\n", + " && mkdir -p /var/holoscan/input \\\n", + " && mkdir -p /var/holoscan/output\n", + "\n", + "LABEL base=\"nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\"\n", + "LABEL tag=\"mednist_app:1.0\"\n", + "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", + "LABEL org.opencontainers.image.version=\"1.0\"\n", + "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "\n", + "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "\n", + "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", + "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", + "ENV HOLOSCAN_WORKDIR=/var/holoscan\n", + "ENV HOLOSCAN_APPLICATION=/opt/holoscan/app\n", + "ENV HOLOSCAN_TIMEOUT=0\n", + "ENV HOLOSCAN_MODEL_PATH=/opt/holoscan/models\n", + "ENV HOLOSCAN_DOCS_PATH=/opt/holoscan/docs\n", + "ENV HOLOSCAN_CONFIG_PATH=/var/holoscan/app.yaml\n", + "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", + "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", + "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", + "ENV HOLOSCAN_VERSION=2.9.0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# If torch is installed, we can skip installing Python\n", + "ENV PYTHON_VERSION=3.10.6-1~22.04\n", + "ENV PYTHON_PIP_VERSION=22.0.2+dfsg-*\n", + "\n", + "RUN apt update \\\n", + " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", + " python3-minimal=${PYTHON_VERSION} \\\n", + " libpython3-stdlib=${PYTHON_VERSION} \\\n", + " python3=${PYTHON_VERSION} \\\n", + " python3-venv=${PYTHON_VERSION} \\\n", + " python3-pip=${PYTHON_PIP_VERSION} \\\n", + " && rm -rf /var/lib/apt/lists/*\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "RUN groupadd -f -g $GID $UNAME\n", + "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", + "RUN chown -R holoscan /var/holoscan && \\\n", + " chown -R holoscan /var/holoscan/input && \\\n", + " chown -R holoscan /var/holoscan/output\n", + "\n", + "# Set the working directory\n", + "WORKDIR /var/holoscan\n", + "\n", + "# Copy HAP/MAP tool script\n", + "COPY ./tools /var/holoscan/tools\n", + "RUN chmod +x /var/holoscan/tools\n", + "\n", + "# Set the working directory\n", + "WORKDIR /var/holoscan\n", + "\n", + "USER $UNAME\n", + "\n", + "ENV PATH=/home/${UNAME}/.local/bin:/opt/nvidia/holoscan/bin:$PATH\n", + "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/${UNAME}/.local/lib/python3.10/site-packages/holoscan/lib\n", + "\n", + "COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "\n", + "RUN pip install --upgrade pip\n", + "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "\n", + "\n", + "# Install MONAI Deploy App SDK\n", + "\n", + "# Install MONAI Deploy from PyPI org\n", + "RUN pip install monai-deploy-app-sdk==2.0.0\n", + "\n", + "\n", + "COPY ./models /opt/holoscan/models\n", + "\n", + "\n", + "COPY ./map/app.json /etc/holoscan/app.json\n", + "COPY ./app.config /var/holoscan/app.yaml\n", + "COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "\n", + "COPY ./app /opt/holoscan/app\n", + "\n", + "\n", + "ENTRYPOINT [\"/var/holoscan/tools\"]\n", + "=========== End Dockerfile ===========\n", + "\n", + "[2025-01-29 14:15:03,917] [INFO] (packager.builder) - \n", + "===============================================================================\n", + "Building image for: x64-workstation\n", + " Architecture: linux/amd64\n", + " Base Image: nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + " Build Image: N/A\n", + " Cache: Enabled\n", + " Configuration: dgpu\n", + " Holoscan SDK Package: 2.9.0\n", + " MONAI Deploy App SDK Package: N/A\n", + " gRPC Health Probe: N/A\n", + " SDK Version: 2.9.0\n", + " SDK: monai-deploy\n", + " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + " Included features/dependencies: N/A\n", + " \n", + "[2025-01-29 14:15:04,216] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-29 14:15:04,216] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", + "\n", + "#1 [internal] load build definition from Dockerfile\n", + "#1 transferring dockerfile: 4.57kB done\n", + "#1 DONE 0.1s\n", + "\n", + "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#2 ...\n", + "\n", + "#3 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#3 DONE 0.0s\n", + "\n", + "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#2 DONE 0.5s\n", + "\n", + "#4 [internal] load .dockerignore\n", + "#4 transferring context: 1.80kB done\n", + "#4 DONE 0.1s\n", + "\n", + "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#5 ...\n", + "\n", + "#6 [internal] load build context\n", + "#6 DONE 0.0s\n", + "\n", + "#7 importing cache manifest from local:12634971125111610588\n", + "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#7 DONE 0.0s\n", + "\n", + "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", + "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", + "#8 DONE 0.0s\n", + "\n", + "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#5 DONE 0.3s\n", + "\n", + "#6 [internal] load build context\n", + "#6 transferring context: 28.62MB 0.2s done\n", + "#6 DONE 0.6s\n", + "\n", + "#9 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#9 CACHED\n", + "\n", + "#10 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#10 CACHED\n", + "\n", + "#11 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#11 CACHED\n", + "\n", + "#12 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#12 CACHED\n", + "\n", + "#13 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#13 CACHED\n", + "\n", + "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#14 CACHED\n", + "\n", + "#15 [release 6/18] WORKDIR /var/holoscan\n", + "#15 CACHED\n", + "\n", + "#16 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#16 CACHED\n", + "\n", + "#17 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#17 CACHED\n", + "\n", + "#18 [release 9/18] WORKDIR /var/holoscan\n", + "#18 CACHED\n", + "\n", + "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 DONE 0.3s\n", + "\n", + "#20 [release 11/18] RUN pip install --upgrade pip\n", + "#20 0.789 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.842 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.003 Collecting pip\n", + "#20 1.069 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", + "#20 1.144 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 26.6 MB/s eta 0:00:00\n", + "#20 1.170 Installing collected packages: pip\n", + "#20 1.890 Successfully installed pip-25.0\n", + "#20 DONE 2.1s\n", + "\n", + "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 0.675 Collecting monai>=1.2.0 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.689 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.906 Collecting Pillow>=8.4.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.910 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", + "#21 0.925 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.931 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.037 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.043 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", + "#21 1.078 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.082 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.083 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.170 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.176 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", + "#21 1.315 Collecting numpy<2.0,>=1.24 (from monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 1.319 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.357 Collecting torch>=1.9 (from monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 1.361 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.480 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 4))\n", + "#21 1.486 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.500 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 4))\n", + "#21 1.504 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.507 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 7)) (25.0)\n", + "#21 1.518 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.523 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", + "#21 1.554 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.559 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#21 1.588 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.593 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.611 Collecting Jinja2<4.0,>=3.1.3 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.614 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", + "#21 1.648 Collecting packaging>=23.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.652 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#21 1.679 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.682 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#21 1.703 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.706 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#21 1.786 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.790 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#21 1.873 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.880 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#21 1.944 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.948 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#21 1.986 Collecting MarkupSafe>=2.0 (from Jinja2<4.0,>=3.1.3->holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 1.990 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.005 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 2.005 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 4))\n", + "#21 2.010 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.016 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.108 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 2.115 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", + "#21 2.175 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 2.179 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#21 2.190 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 2.195 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#21 2.228 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 2.235 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#21 2.253 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 2.256 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 2.273 Collecting filelock (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.276 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.304 Collecting networkx (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.311 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 2.333 Collecting fsspec (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.337 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.381 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.385 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.395 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.400 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.420 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.427 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.442 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.447 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.458 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.462 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.514 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.518 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.526 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.530 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.539 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.543 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.558 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.563 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.573 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.578 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.590 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.595 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.607 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.611 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.622 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.626 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.637 Collecting triton==3.2.0 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.640 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 2.655 Collecting sympy==1.13.1 (from torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.658 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 2.686 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.9->monai>=1.2.0->-r /tmp/requirements.txt (line 1))\n", + "#21 2.690 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 2.715 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 2.719 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", + "#21 3.298 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 7))\n", + "#21 3.301 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", + "#21 3.324 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 3.353 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 65.9 MB/s eta 0:00:00\n", + "#21 3.360 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "#21 3.405 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 110.9 MB/s eta 0:00:00\n", + "#21 3.412 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 3.435 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 116.6 MB/s eta 0:00:00\n", + "#21 3.440 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", + "#21 3.455 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 118.9 MB/s eta 0:00:00\n", + "#21 3.463 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 3.984 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 101.6 MB/s eta 0:00:00\n", + "#21 3.991 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", + "#21 4.401 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 101.5 MB/s eta 0:00:00\n", + "#21 4.408 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#21 4.415 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", + "#21 5.321 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 100.4 MB/s eta 0:00:00\n", + "#21 5.326 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", + "#21 5.332 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 5.492 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 116.8 MB/s eta 0:00:00\n", + "#21 5.499 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", + "#21 5.506 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#21 5.586 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 5.679 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 28.5 MB/s eta 0:00:00\n", + "#21 5.687 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", + "#21 5.693 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#21 5.703 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 111.7 MB/s eta 0:00:00\n", + "#21 5.712 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#21 5.721 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 12.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 113.4 MB/s eta 0:00:00\n", + "#21 12.47 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 15.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 116.3 MB/s eta 0:00:00\n", + "#21 15.70 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 15.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.0 MB/s eta 0:00:00\n", + "#21 15.83 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 16.05 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 116.4 MB/s eta 0:00:00\n", + "#21 16.05 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 16.07 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 76.3 MB/s eta 0:00:00\n", + "#21 16.07 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 21.81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 115.3 MB/s eta 0:00:00\n", + "#21 21.82 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 23.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 115.1 MB/s eta 0:00:00\n", + "#21 23.67 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 24.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 99.0 MB/s eta 0:00:00\n", + "#21 24.25 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 25.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 117.0 MB/s eta 0:00:00\n", + "#21 25.36 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 27.15 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 116.0 MB/s eta 0:00:00\n", + "#21 27.16 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 28.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 115.5 MB/s eta 0:00:00\n", + "#21 28.48 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 30.18 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 111.3 MB/s eta 0:00:00\n", + "#21 30.18 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 30.37 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.4 MB/s eta 0:00:00\n", + "#21 30.37 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 30.38 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 30.44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 117.0 MB/s eta 0:00:00\n", + "#21 30.45 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 33.27 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 89.9 MB/s eta 0:00:00\n", + "#21 33.27 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", + "#21 33.28 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#21 33.29 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", + "#21 33.29 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#21 33.30 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#21 33.31 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#21 33.31 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 33.32 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", + "#21 33.33 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", + "#21 33.41 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 22.9 MB/s eta 0:00:00\n", + "#21 33.42 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", + "#21 33.42 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", + "#21 33.43 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", + "#21 33.44 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 33.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 114.7 MB/s eta 0:00:00\n", + "#21 33.46 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", + "#21 33.46 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 33.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 115.5 MB/s eta 0:00:00\n", + "#21 45.67 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, Pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, requests, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, Jinja2, cupy-cuda12x, pydantic, nvidia-cusolver-cu12, highdicom, torch, python-on-whales, monai, holoscan\n", + "#21 112.5 Successfully installed Jinja2-3.1.5 MarkupSafe-3.0.2 Pillow-11.1.0 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", + "#21 DONE 113.9s\n", + "\n", + "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", + "#22 1.416 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 1.603 Collecting monai-deploy-app-sdk==2.0.0\n", + "#22 1.654 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", + "#22 1.697 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.6/132.6 KB 3.6 MB/s eta 0:00:00\n", + "#22 1.754 Collecting colorama>=0.4.1\n", + "#22 1.759 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.860 Collecting typeguard>=3.0.0\n", + "#22 1.865 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", + "#22 1.879 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", + "#22 1.880 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", + "#22 1.897 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", + "#22 1.898 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", + "#22 1.899 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", + "#22 1.900 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", + "#22 1.901 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", + "#22 1.902 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", + "#22 1.903 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", + "#22 1.903 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", + "#22 1.904 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", + "#22 1.987 Collecting pip>22.0.2\n", + "#22 1.999 Using cached pip-25.0-py3-none-any.whl (1.8 MB)\n", + "#22 2.022 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", + "#22 2.036 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", + "#22 2.041 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", + "#22 2.061 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", + "#22 2.069 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", + "#22 2.070 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", + "#22 2.071 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", + "#22 2.071 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", + "#22 2.075 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", + "#22 2.093 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", + "#22 2.094 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", + "#22 2.498 Installing collected packages: typeguard, pip, colorama, monai-deploy-app-sdk\n", + "#22 3.427 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 pip-25.0 typeguard-4.4.1\n", + "#22 DONE 3.6s\n", + "\n", + "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", + "#23 DONE 0.3s\n", + "\n", + "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", + "#24 DONE 0.0s\n", + "\n", + "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", + "#25 DONE 0.1s\n", + "\n", + "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 DONE 0.2s\n", + "\n", + "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", + "#27 DONE 0.1s\n", + "\n", + "#28 exporting to docker image format\n", + "#28 exporting layers\n", + "#28 exporting layers 205.6s done\n", + "#28 exporting manifest sha256:4da1af22bc19284ede41eafbb2ee59a221a08b1177a65d265463f91f72d9330a 0.0s done\n", + "#28 exporting config sha256:bd0c6ea997b6616e1fe7bcad7af9bdf8cd1349b0e7417d1995a634204e10b7db 0.0s done\n", + "#28 sending tarball\n", + "#28 ...\n", + "\n", + "#29 importing to docker\n", + "#29 loading layer 5a86d5b747ab 276B / 276B\n", + "#29 loading layer fa24015991cf 65.54kB / 5.10MB\n", + "#29 loading layer d0e9054e123a 557.06kB / 3.33GB\n", + "#29 loading layer d0e9054e123a 142.05MB / 3.33GB 6.3s\n", + "#29 loading layer d0e9054e123a 317.52MB / 3.33GB 10.4s\n", + "#29 loading layer d0e9054e123a 521.40MB / 3.33GB 16.5s\n", + "#29 loading layer d0e9054e123a 755.37MB / 3.33GB 20.7s\n", + "#29 loading layer d0e9054e123a 955.91MB / 3.33GB 24.9s\n", + "#29 loading layer d0e9054e123a 1.18GB / 3.33GB 29.0s\n", + "#29 loading layer d0e9054e123a 1.38GB / 3.33GB 33.1s\n", + "#29 loading layer d0e9054e123a 1.60GB / 3.33GB 37.1s\n", + "#29 loading layer d0e9054e123a 1.85GB / 3.33GB 41.3s\n", + "#29 loading layer d0e9054e123a 2.14GB / 3.33GB 45.4s\n", + "#29 loading layer d0e9054e123a 2.30GB / 3.33GB 51.6s\n", + "#29 loading layer d0e9054e123a 2.34GB / 3.33GB 57.5s\n", + "#29 loading layer d0e9054e123a 2.51GB / 3.33GB 63.5s\n", + "#29 loading layer d0e9054e123a 2.71GB / 3.33GB 67.6s\n", + "#29 loading layer d0e9054e123a 2.99GB / 3.33GB 71.8s\n", + "#29 loading layer d0e9054e123a 3.17GB / 3.33GB 78.0s\n", + "#29 loading layer 648e09e4cbfd 65.54kB / 3.82MB\n", + "#29 loading layer 3d06fe16d5f1 262.14kB / 26.20MB\n", + "#29 loading layer 1281a6eddb70 512B / 512B\n", + "#29 loading layer 3a64fd65428a 320B / 320B\n", + "#29 loading layer 958543fd52f7 300B / 300B\n", + "#29 loading layer 2b610be3d181 4.04kB / 4.04kB\n", + "#29 loading layer 5a86d5b747ab 276B / 276B 87.6s done\n", + "#29 loading layer fa24015991cf 65.54kB / 5.10MB 87.6s done\n", + "#29 loading layer d0e9054e123a 3.28GB / 3.33GB 86.9s done\n", + "#29 loading layer 648e09e4cbfd 65.54kB / 3.82MB 1.7s done\n", + "#29 loading layer 3d06fe16d5f1 262.14kB / 26.20MB 1.0s done\n", + "#29 loading layer 1281a6eddb70 512B / 512B 0.5s done\n", + "#29 loading layer 3a64fd65428a 320B / 320B 0.5s done\n", + "#29 loading layer 958543fd52f7 300B / 300B 0.4s done\n", + "#29 loading layer 2b610be3d181 4.04kB / 4.04kB 0.4s done\n", + "#29 DONE 87.6s\n", + "\n", + "#28 exporting to docker image format\n", + "#28 sending tarball 129.0s done\n", + "#28 DONE 334.7s\n", + "\n", + "#30 exporting cache to client directory\n", + "#30 preparing build cache for export\n", + "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", + "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", + "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", + "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", + "#30 writing layer sha256:4bf64b4a646ee3a3bfe543702f056f9d42e4b3f4cd8465f46a47b0ddc147ecc8\n", + "#30 writing layer sha256:4bf64b4a646ee3a3bfe543702f056f9d42e4b3f4cd8465f46a47b0ddc147ecc8 0.6s done\n", + "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1\n", + "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", + "#30 writing layer sha256:7265ec80a3c8c57167f59f1449c2f21828c32e4709977c1b621386bb3184cf5a 0.0s done\n", + "#30 writing layer sha256:7ddbbcbbe9e3f16cc9ad8b9a58d58784b79dc5f14ff7c2b510885ba52c22296d 0.0s done\n", + "#30 writing layer sha256:95f7cac88539ce722ac1b7fd96100ad34e88797194f42e187db5df91772bcbca 0.0s done\n", + "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#30 writing layer sha256:99298707ae15b7a513faee23c8ff010664939627cce97994f59b6d5cf59ea118\n", + "#30 writing layer sha256:99298707ae15b7a513faee23c8ff010664939627cce97994f59b6d5cf59ea118 54.5s done\n", + "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", + "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#30 writing layer sha256:aee6cca3099a5220871a6e00732843296f61b693822b537c69c1a7bf14cd1b12 0.1s done\n", + "#30 writing layer sha256:bb2407c281c362de0374201b303bd07b66034affb513c87fcc2063aa53df5358 0.1s done\n", + "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044\n", + "#30 preparing build cache for export 55.7s done\n", + "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", + "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", + "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#30 writing layer sha256:e12657e78d4fc5b6d4e07266eec8aee83c8dc1ad0e89648bc4a00b088bab0812 0.0s done\n", + "#30 writing layer sha256:e4010fcd43e6d2b7dc5e01a744445d8d97ecb37c2488c1e5508b1c26d9dc0832 0.0s done\n", + "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#30 writing config sha256:6f53ff17759f64b05fccbdc3ebcc89511178905d0639b8c8c51473fa58aa5930 0.0s done\n", + "#30 writing cache manifest sha256:fc06123c606626b19ea0c2ed6307971938a11e38874ce5f670ed1a909b55f953 0.0s done\n", + "#30 DONE 55.7s\n", + "[2025-01-29 14:23:37,936] [INFO] (packager) - Build Summary:\n", + "\n", + "Platform: x64-workstation/dgpu\n", + " Status: Succeeded\n", + " Docker Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", + " Tarball: None\n" + ] + } + ], "source": [ "tag_prefix = \"mednist_app\"\n", "\n", @@ -1117,9 +1962,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 bd0c6ea997b6 6 minutes ago 8.64GB\n" + ] + } + ], "source": [ "!docker image ls | grep {tag_prefix}" ] @@ -1135,9 +1988,93 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2025-01-29 14:23:40,347] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-29 14:23:40,348] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "\n", + "[2025-01-29 14:23:40,349] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "\n", + "[2025-01-29 14:23:40,353] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "\n", + "[2025-01-29 14:23:40,453] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpnhktw736/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpnhktw736/pkg.json\n", + "8955ab5e4aef6b83355220e70e421a94b58670eb9ad05cecbba971905c1833b2\n", + "[2025-01-29 14:23:40,759] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "\n", + "[2025-01-29 14:23:40,769] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "\n", + "[2025-01-29 14:23:41,150] [INFO] (common) - Launching container (30bd3cacd8fc) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: modest_gould\n", + " host name: mingq-dt\n", + " network: host\n", + " user: 1000:1000\n", + " ulimits: memlock=-1:-1, stack=67108864:67108864\n", + " cap_add: CAP_SYS_PTRACE\n", + " ipc mode: host\n", + " shared memory size: 67108864\n", + " devices: \n", + " group_add: 44\n", + "2025-01-29 22:23:42 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + "\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "\n", + "[info] [gxf_executor.cpp:264] Creating context\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", + "\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", + "\n", + "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:203.)\n", + "\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", + "\n", + "WARNING:pydicom:'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "\n", + "WARNING:pydicom:'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "\n", + "WARNING:pydicom:Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "\n", + "/home/holoscan/.local/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "\n", + " warn_and_log(msg)\n", + "\n", + "WARNING:pydicom:'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "\n", + "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", + "\n", + "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", + "\n", + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "\n", + "[info] [gxf_executor.cpp:294] Destroying context\n", + "\n", + "AbdomenCT\n", + "\n", + "[2025-01-29 14:23:51,575] [INFO] (common) - Container 'modest_gould'(30bd3cacd8fc) exited.\n" + ] + } + ], "source": [ "# Clear the output folder and run the MAP. The input is expected to be a folder.\n", "!rm -rf $HOLOSCAN_OUTPUT_PATH\n", @@ -1146,9 +2083,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\"AbdomenCT\"" + ] + } + ], "source": [ "!cat $HOLOSCAN_OUTPUT_PATH/output.json" ] @@ -1162,7 +2107,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/tutorials/03_segmentation_app.ipynb b/notebooks/tutorials/03_segmentation_app.ipynb index c09a7fd1..ab0b9031 100644 --- a/notebooks/tutorials/03_segmentation_app.ipynb +++ b/notebooks/tutorials/03_segmentation_app.ipynb @@ -92,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -127,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -359,7 +359,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -389,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -450,7 +450,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -602,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -723,109 +723,107 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[info] [gxf_executor.cpp:292] Destroying context\n", - "[2025-01-16 16:17:05,271] [INFO] (__main__.AISpleenSegApp) - Begin run\n", - "[info] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 16:17:05,286] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-16 16:17:05,293] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-16 16:17:05,295] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", - "[info] [gxf_executor.cpp:262] Creating context\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2178] Activating Graph...\n", - "[info] [gxf_executor.cpp:2208] Running Graph...\n", - "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 14:30:17,208] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-29 14:30:17,220] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2025-01-29 14:30:17,222] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", + "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", - "[2025-01-16 16:17:05,329] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-16 16:17:05,905] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-16 16:17:05,906] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 14:30:17,274] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-29 14:30:17,612] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 14:30:17,613] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-16 16:17:05,907] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 16:17:05,908] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-16 16:17:05,910] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-16 16:17:05,911] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 16:17:05,913] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-16 16:17:05,915] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-16 16:17:05,918] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 16:17:05,919] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-16 16:17:05,921] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-16 16:17:05,922] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 16:17:05,923] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2025-01-16 16:17:05,924] [INFO] (root) - Series attribute ImageType value: None\n", - "[2025-01-16 16:17:05,928] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 16:17:06,800] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2025-01-16 16:17:06,801] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2025-01-16 16:17:06,802] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2025-01-16 16:17:06,803] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2025-01-16 16:17:06,803] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2025-01-16 16:17:06,804] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2025-01-16 16:17:06,805] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2025-01-16 16:17:06,806] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2025-01-16 16:17:06,807] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2025-01-16 16:17:06,807] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2025-01-16 16:17:06,808] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2025-01-16 16:17:06,809] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2025-01-16 16:17:06,811] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2025-01-16 16:17:06,813] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2025-01-16 16:17:06,815] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-01-29 14:30:17,614] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:30:17,614] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:30:17,615] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 14:30:17,616] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:30:17,617] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 14:30:17,618] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 14:30:17,619] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:30:17,620] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:30:17,622] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 14:30:17,623] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:30:17,624] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-01-29 14:30:17,625] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-01-29 14:30:17,626] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:30:18,261] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-01-29 14:30:18,262] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-01-29 14:30:18,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-01-29 14:30:18,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-01-29 14:30:18,265] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-01-29 14:30:18,266] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-01-29 14:30:18,268] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-01-29 14:30:18,269] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-01-29 14:30:18,271] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-01-29 14:30:18,272] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-01-29 14:30:18,273] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-01-29 14:30:18,275] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-01-29 14:30:18,276] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-01-29 14:30:18,277] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-01-29 14:30:18,279] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-16 16:17:06,816] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-01-29 14:30:18,282] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-16 16:17:06,818] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2025-01-16 16:17:06,819] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2025-01-16 16:17:06,820] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2025-01-16 16:17:06,821] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2025-01-16 16:17:06,822] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2025-01-16 16:17:06,823] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2025-01-16 16:17:06,824] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" + "[2025-01-29 14:30:18,283] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-01-29 14:30:18,284] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-01-29 14:30:18,285] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-01-29 14:30:18,286] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-01-29 14:30:18,290] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-01-29 14:30:18,291] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-01-29 14:30:18,292] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2025-01-16 16:17:08,010 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2025-01-16 16:17:11,416 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" + "2025-01-29 14:30:19,501 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2025-01-29 14:30:23,998 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[2025-01-16 16:17:13,882] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2025-01-16 16:17:13,888] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-01-29 14:30:26,134] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2025-01-29 14:30:26,142] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-16 16:17:15,281] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 16:17:15,282] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-16 16:17:15,283] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 16:17:15,284] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-16 16:17:15,286] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-16 16:17:15,287] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 16:17:15,289] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-16 16:17:15,290] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-16 16:17:15,290] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 14:30:28,033] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:30:28,034] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 14:30:28,035] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:30:28,036] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 14:30:28,038] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 14:30:28,040] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:30:28,041] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 14:30:28,042] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 14:30:28,044] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[2025-01-16 16:17:15,444] [INFO] (__main__.AISpleenSegApp) - End run\n" + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[2025-01-29 14:30:28,156] [INFO] (__main__.AISpleenSegApp) - End run\n" ] } ], @@ -858,7 +856,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -875,7 +873,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -1051,7 +1049,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -1208,7 +1206,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -1229,7 +1227,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -1257,96 +1255,96 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 16:17:25,763] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2025-01-16 16:17:25,766] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-16 16:17:25,766] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 14:30:34,908] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2025-01-29 14:30:34,910] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2025-01-29 14:30:34,910] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", - "[2025-01-16 16:17:25,781] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-16 16:17:26,696] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-16 16:17:26,696] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 14:30:34,938] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-16 16:17:26,696] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 16:17:26,696] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-16 16:17:26,696] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-16 16:17:26,696] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 16:17:26,696] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-16 16:17:26,696] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-16 16:17:26,696] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 16:17:26,697] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-16 16:17:26,697] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-16 16:17:26,697] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 16:17:26,697] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2025-01-16 16:17:26,697] [INFO] (root) - Series attribute ImageType value: None\n", - "[2025-01-16 16:17:26,697] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2025-01-16 16:17:27,726] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:30:35,858] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-01-29 14:30:35,858] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-01-29 14:30:35,858] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2025-01-16 16:17:27,727] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", - "2025-01-16 16:17:28,884 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2025-01-16 16:17:34,343 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", - "[2025-01-16 16:17:36,713] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2025-01-16 16:17:36,745] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "2025-01-29 14:30:37,548 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2025-01-29 14:30:41,063 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "[2025-01-29 14:30:42,975] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2025-01-29 14:30:42,981] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-16 16:17:38,989] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 16:17:38,989] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-16 16:17:38,989] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 16:17:38,989] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-16 16:17:38,990] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-16 16:17:38,990] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 16:17:38,990] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-16 16:17:38,990] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-16 16:17:38,991] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[2025-01-16 16:17:39,311] [INFO] (app.AISpleenSegApp) - End run\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:292] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[2025-01-29 14:30:44,748] [INFO] (app.AISpleenSegApp) - End run\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" ] } ], @@ -1357,7 +1355,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -1365,7 +1363,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.76053921177937350011362220581935219.dcm\n", + "1.2.826.0.1.3680043.10.511.3.51643712983429462828738370758191766.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", @@ -1399,7 +1397,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -1429,7 +1427,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -1450,7 +1448,7 @@ "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", "torch>=1.12.0\n", - "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue" + "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" ] }, { @@ -1466,23 +1464,23 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-16 16:17:47,580] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-16 16:17:47,837] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-16 16:17:47,838] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-16 16:17:47,838] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-16 16:17:47,839] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-16 16:17:47,840] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-16 16:17:47,840] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-16 16:17:47,845] [INFO] (packager) - Generating app.json...\n", - "[2025-01-16 16:17:47,845] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-16 16:17:47,850] [DEBUG] (common) - \n", + "[2025-01-29 14:30:47,335] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-29 14:30:47,539] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-29 14:30:47,539] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-01-29 14:30:47,540] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-01-29 14:30:47,540] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-01-29 14:30:47,540] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-01-29 14:30:47,540] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-01-29 14:30:47,544] [INFO] (packager) - Generating app.json...\n", + "[2025-01-29 14:30:47,544] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-29 14:30:47,549] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1517,7 +1515,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2025-01-16 16:17:47,851] [DEBUG] (common) - \n", + "[2025-01-29 14:30:47,550] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1537,7 +1535,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-16 16:17:47,941] [DEBUG] (packager.builder) - \n", + "[2025-01-29 14:30:47,581] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1555,7 +1553,7 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.8.0',\n", + " 'holoscan_sdk_version': '2.9.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", @@ -1579,7 +1577,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-16 16:17:47,941] [DEBUG] (packager.builder) - \n", + "[2025-01-29 14:30:47,581] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -1589,15 +1587,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.8.0',\n", - " 'holoscan_sdk_filename': '2.8.0',\n", + " 'holoscan_sdk_file': '2.9.0',\n", + " 'holoscan_sdk_filename': '2.9.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-16 16:17:47,973] [DEBUG] (packager.builder) - \n", + "[2025-01-29 14:30:47,602] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1661,7 +1659,7 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.8.0\"\n", + "LABEL org.nvidia.holoscan=\"2.9.0\"\n", "\n", "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", "\n", @@ -1676,7 +1674,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.8.0\n", + "ENV HOLOSCAN_VERSION=2.9.0\n", "\n", "\n", "\n", @@ -1751,7 +1749,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-16 16:17:47,973] [INFO] (packager.builder) - \n", + "[2025-01-29 14:30:47,602] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1759,33 +1757,30 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.8.0\n", + " Holoscan SDK Package: 2.9.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.8.0\n", + " SDK Version: 2.9.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-16 16:17:49,299] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-16 16:17:49,299] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-01-29 14:30:48,162] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-29 14:30:48,163] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", "#1 transferring dockerfile: 4.56kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 ...\n", + "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#2 DONE 0.0s\n", "\n", - "#3 [auth] nvidia/cuda:pull token for nvcr.io\n", - "#3 DONE 0.0s\n", - "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 DONE 0.5s\n", + "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#3 DONE 0.5s\n", "\n", "#4 [internal] load .dockerignore\n", - "#4 transferring context: 1.79kB done\n", + "#4 transferring context: 1.80kB done\n", "#4 DONE 0.1s\n", "\n", "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", @@ -1794,312 +1789,291 @@ "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from local:10138938764133549295\n", + "#7 importing cache manifest from local:9689312761338090214\n", "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#7 DONE 0.0s\n", "\n", + "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", + "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", + "#8 DONE 0.0s\n", + "\n", "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#5 DONE 0.7s\n", - "\n", - "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.1s done\n", - "#8 DONE 0.1s\n", + "#5 DONE 0.4s\n", "\n", "#6 [internal] load build context\n", "#6 transferring context: 19.43MB 0.2s done\n", - "#6 DONE 0.2s\n", + "#6 DONE 0.3s\n", "\n", - "#9 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#9 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#9 CACHED\n", "\n", - "#10 [release 6/18] WORKDIR /var/holoscan\n", + "#10 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#11 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#11 CACHED\n", "\n", - "#12 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#12 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#13 [release 6/18] WORKDIR /var/holoscan\n", "#13 CACHED\n", "\n", - "#14 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#14 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#14 CACHED\n", "\n", - "#15 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#15 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#15 CACHED\n", "\n", - "#16 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#16 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#16 CACHED\n", "\n", - "#17 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#17 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#17 CACHED\n", "\n", "#18 [release 9/18] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#19 DONE 0.1s\n", + "#19 DONE 0.8s\n", "\n", "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 1.023 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 1.060 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 1.248 Collecting pip\n", - "#20 1.301 Downloading pip-24.3.1-py3-none-any.whl (1.8 MB)\n", - "#20 1.370 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 29.6 MB/s eta 0:00:00\n", - "#20 1.411 Installing collected packages: pip\n", - "#20 2.169 Successfully installed pip-24.3.1\n", - "#20 DONE 2.4s\n", + "#20 0.933 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.985 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.141 Collecting pip\n", + "#20 1.201 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", + "#20 1.272 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 27.4 MB/s eta 0:00:00\n", + "#20 1.298 Installing collected packages: pip\n", + "#20 2.043 Successfully installed pip-25.0\n", + "#20 DONE 2.2s\n", "\n", "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.715 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.731 Downloading highdicom-0.23.1-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 0.829 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 0.976 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 1.214 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 1.219 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.416 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.420 Downloading numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.438 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.443 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.449 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.480 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.484 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.545 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.549 Downloading torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.644 Collecting holoscan==2.6.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.650 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.2 kB)\n", - "#21 1.655 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9)) (24.3.1)\n", - "#21 1.669 Collecting cupy-cuda12x==12.2 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 1.673 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", - "#21 1.688 Collecting cloudpickle==2.2.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 1.694 Downloading cloudpickle-2.2.1-py3-none-any.whl.metadata (6.9 kB)\n", - "#21 1.746 Collecting python-on-whales==0.60.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 1.750 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", - "#21 1.767 Collecting Jinja2==3.1.3 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 1.771 Downloading Jinja2-3.1.3-py3-none-any.whl.metadata (3.3 kB)\n", - "#21 1.865 Collecting packaging==23.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 1.869 Downloading packaging-23.1-py3-none-any.whl.metadata (3.1 kB)\n", - "#21 1.905 Collecting pyyaml==6.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 1.909 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (2.0 kB)\n", - "#21 1.942 Collecting requests==2.31.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 1.945 Downloading requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.029 Collecting psutil==6.0.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.035 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (21 kB)\n", - "#21 2.119 Collecting wheel-axle-runtime<1.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.125 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.142 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 2.146 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 2.221 Collecting fastrlock>=0.5 (from cupy-cuda12x==12.2->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.226 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.287 Collecting MarkupSafe>=2.0 (from Jinja2==3.1.3->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.290 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.428 Collecting pydantic<2,>=1.5 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.434 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", - "#21 2.491 Collecting tqdm (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.494 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", - "#21 2.515 Collecting typer>=0.4.1 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.519 Downloading typer-0.15.1-py3-none-any.whl.metadata (15 kB)\n", - "#21 2.535 Collecting typing-extensions (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.538 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 2.639 Collecting charset-normalizer<4,>=2 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.643 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 2.656 Collecting idna<4,>=2.5 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.659 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 2.714 Collecting urllib3<3,>=1.21.1 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.718 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 2.738 Collecting certifi>=2017.4.17 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.742 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 2.994 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 2.997 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 3.103 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 3.109 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.161 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 3.165 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 3.220 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.224 Downloading filelock-3.16.1-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 3.263 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.266 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 3.299 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.304 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 3.357 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.360 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 3.372 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.376 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 3.387 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.391 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 3.402 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.406 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 3.420 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.423 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 3.435 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.439 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 3.450 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.454 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 3.464 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.468 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 3.479 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.483 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 3.494 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.502 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 3.519 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.523 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 3.541 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.548 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 3.562 Collecting triton==3.1.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.565 Downloading triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.3 kB)\n", - "#21 3.588 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.592 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 3.622 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.625 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 3.639 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 3.640 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 3.647 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.657 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.707 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.711 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.732 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.735 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", - "#21 3.793 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.796 Downloading rich-13.9.4-py3-none-any.whl.metadata (18 kB)\n", - "#21 3.823 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.827 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", - "#21 3.852 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.855 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", - "#21 3.877 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.884 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", - "#21 3.900 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl (40.8 MB)\n", - "#21 4.267 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 MB 113.8 MB/s eta 0:00:00\n", - "#21 4.276 Downloading cloudpickle-2.2.1-py3-none-any.whl (25 kB)\n", - "#21 4.286 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl (82.0 MB)\n", - "#21 5.333 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 82.0/82.0 MB 78.6 MB/s eta 0:00:00\n", - "#21 5.339 Downloading Jinja2-3.1.3-py3-none-any.whl (133 kB)\n", - "#21 5.345 Downloading packaging-23.1-py3-none-any.whl (48 kB)\n", - "#21 5.354 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (290 kB)\n", - "#21 5.364 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", - "#21 5.375 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (682 kB)\n", - "#21 5.385 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 682.2/682.2 kB 150.6 MB/s eta 0:00:00\n", - "#21 5.393 Downloading requests-2.31.0-py3-none-any.whl (62 kB)\n", - "#21 5.402 Downloading highdicom-0.23.1-py3-none-any.whl (836 kB)\n", - "#21 5.417 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 836.4/836.4 kB 83.3 MB/s eta 0:00:00\n", - "#21 5.429 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 5.446 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 129.0 MB/s eta 0:00:00\n", - "#21 5.452 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 5.484 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 115.8 MB/s eta 0:00:00\n", - "#21 5.490 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 5.661 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 112.0 MB/s eta 0:00:00\n", - "#21 5.670 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 5.695 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 115.4 MB/s eta 0:00:00\n", - "#21 5.706 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 6.255 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 96.5 MB/s eta 0:00:00\n", - "#21 6.264 Downloading torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl (906.4 MB)\n", - "#21 15.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 906.4/906.4 MB 92.4 MB/s eta 0:00:00\n", - "#21 15.27 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 18.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 98.5 MB/s eta 0:00:00\n", - "#21 18.89 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 19.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.4 MB/s eta 0:00:00\n", - "#21 19.02 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 19.24 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.5 MB/s eta 0:00:00\n", - "#21 19.25 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 19.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 163.1 MB/s eta 0:00:00\n", - "#21 19.27 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 25.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 107.5 MB/s eta 0:00:00\n", - "#21 25.26 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 27.28 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 104.9 MB/s eta 0:00:00\n", - "#21 27.29 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 27.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 106.6 MB/s eta 0:00:00\n", - "#21 27.83 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 29.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 108.3 MB/s eta 0:00:00\n", - "#21 29.03 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 31.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 94.7 MB/s eta 0:00:00\n", - "#21 31.23 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 32.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 114.7 MB/s eta 0:00:00\n", - "#21 32.89 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 33.23 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 62.8 MB/s eta 0:00:00\n", - "#21 33.23 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 33.24 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 33.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 117.8 MB/s eta 0:00:00\n", - "#21 33.31 Downloading triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (209.5 MB)\n", - "#21 35.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 209.5/209.5 MB 90.1 MB/s eta 0:00:00\n", - "#21 35.64 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 35.65 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 35.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 115.5 MB/s eta 0:00:00\n", - "#21 35.70 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 35.73 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 121.6 MB/s eta 0:00:00\n", - "#21 35.74 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 35.75 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 35.75 Downloading filelock-3.16.1-py3-none-any.whl (16 kB)\n", - "#21 35.76 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 35.76 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 35.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 119.1 MB/s eta 0:00:00\n", - "#21 35.78 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 35.79 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 35.80 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 35.81 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 35.82 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 35.83 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 35.83 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 156.4 MB/s eta 0:00:00\n", - "#21 35.84 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", - "#21 35.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 116.8 MB/s eta 0:00:00\n", - "#21 35.88 Downloading typer-0.15.1-py3-none-any.whl (44 kB)\n", - "#21 35.89 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 35.90 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", - "#21 35.90 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", - "#21 35.91 Downloading rich-13.9.4-py3-none-any.whl (242 kB)\n", - "#21 35.92 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", - "#21 35.93 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", - "#21 35.94 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", - "#21 35.95 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 134.3 MB/s eta 0:00:00\n", - "#21 35.96 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", - "#21 49.55 Installing collected packages: SimpleITK, mpmath, fastrlock, urllib3, typing-extensions, tqdm, sympy, shellingham, pyyaml, pygments, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, mdurl, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, click, charset-normalizer, certifi, wheel-axle-runtime, triton, requests, pyjpegls, pydantic, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, markdown-it-py, Jinja2, cupy-cuda12x, rich, nvidia-cusolver-cu12, highdicom, typer, torch, python-on-whales, monai, holoscan\n", - "#21 124.1 Successfully installed Jinja2-3.1.3 MarkupSafe-3.0.2 SimpleITK-2.4.1 certifi-2024.12.14 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-2.2.1 cupy-cuda12x-12.2.0 fastrlock-0.8.3 filelock-3.16.1 fsspec-2024.12.0 highdicom-0.23.1 holoscan-2.6.0 idna-3.10 importlib-resources-6.5.2 markdown-it-py-3.0.0 mdurl-0.1.2 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-23.1 pillow-11.1.0 psutil-6.0.0 pydantic-1.10.21 pydicom-3.0.1 pygments-2.19.1 pyjpegls-1.4.0 python-on-whales-0.60.1 pyyaml-6.0 requests-2.31.0 rich-13.9.4 shellingham-1.5.4 sympy-1.13.1 torch-2.5.1 tqdm-4.67.1 triton-3.1.0 typer-0.15.1 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 125.4s\n", + "#21 0.735 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.749 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", + "#21 0.838 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.844 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.927 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.932 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.065 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.069 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.101 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.106 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.114 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.144 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.148 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.180 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.184 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.204 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 9))\n", + "#21 1.209 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", + "#21 1.369 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.374 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", + "#21 1.475 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.481 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.498 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.502 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.513 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.518 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.543 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.547 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.671 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.674 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#21 1.707 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.712 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 1.758 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.763 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 1.792 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.797 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", + "#21 1.824 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.828 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 1.905 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.910 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 1.923 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.927 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 1.943 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.948 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 1.963 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.968 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 1.981 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.985 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 1.998 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.003 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.015 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.020 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.032 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.036 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.050 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.055 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.068 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.074 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.085 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.090 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.103 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.107 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.119 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.123 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.141 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.147 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 2.169 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.174 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 2.211 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.215 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 2.224 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9)) (25.0)\n", + "#21 2.240 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.246 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", + "#21 2.284 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.288 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#21 2.314 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.320 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", + "#21 2.366 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.371 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#21 2.397 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.401 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#21 2.485 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.489 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#21 2.564 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.572 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#21 2.614 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.619 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#21 2.659 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.662 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.676 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 2.677 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 2.683 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.693 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.827 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.832 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", + "#21 2.950 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.953 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#21 2.967 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.971 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#21 3.000 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.005 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#21 3.029 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.033 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 3.056 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.060 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", + "#21 3.675 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.679 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", + "#21 3.702 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", + "#21 3.720 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 91.2 MB/s eta 0:00:00\n", + "#21 3.727 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 3.742 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 133.6 MB/s eta 0:00:00\n", + "#21 3.748 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.779 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 118.0 MB/s eta 0:00:00\n", + "#21 3.787 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 3.945 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.2 MB/s eta 0:00:00\n", + "#21 3.955 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 3.979 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 116.7 MB/s eta 0:00:00\n", + "#21 3.988 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 4.526 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 98.5 MB/s eta 0:00:00\n", + "#21 4.536 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 12.90 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 88.0 MB/s eta 0:00:00\n", + "#21 12.91 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 16.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 92.2 MB/s eta 0:00:00\n", + "#21 16.69 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 16.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 111.5 MB/s eta 0:00:00\n", + "#21 16.83 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 17.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 116.7 MB/s eta 0:00:00\n", + "#21 17.05 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 17.06 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 123.2 MB/s eta 0:00:00\n", + "#21 17.07 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 23.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 111.9 MB/s eta 0:00:00\n", + "#21 23.63 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 28.53 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 43.2 MB/s eta 0:00:00\n", + "#21 28.54 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 29.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 60.0 MB/s eta 0:00:00\n", + "#21 29.49 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 31.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 79.9 MB/s eta 0:00:00\n", + "#21 31.10 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 33.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 89.2 MB/s eta 0:00:00\n", + "#21 33.44 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 34.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 111.4 MB/s eta 0:00:00\n", + "#21 34.80 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 36.81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 94.3 MB/s eta 0:00:00\n", + "#21 36.82 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 37.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 95.0 MB/s eta 0:00:00\n", + "#21 37.05 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 37.06 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 37.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 105.9 MB/s eta 0:00:00\n", + "#21 37.13 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 40.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 82.0 MB/s eta 0:00:00\n", + "#21 40.23 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", + "#21 40.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 113.5 MB/s eta 0:00:00\n", + "#21 40.60 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#21 40.61 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", + "#21 41.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 104.0 MB/s eta 0:00:00\n", + "#21 41.49 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 41.50 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", + "#21 41.51 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", + "#21 41.51 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "#21 41.56 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 117.2 MB/s eta 0:00:00\n", + "#21 41.56 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#21 41.58 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 41.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 114.3 MB/s eta 0:00:00\n", + "#21 41.62 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", + "#21 41.63 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#21 41.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 153.4 MB/s eta 0:00:00\n", + "#21 41.64 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#21 41.65 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", + "#21 41.66 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#21 41.67 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", + "#21 41.67 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", + "#21 41.68 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 41.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 124.5 MB/s eta 0:00:00\n", + "#21 41.71 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", + "#21 41.72 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#21 41.72 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#21 41.73 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#21 41.73 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 41.74 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 41.75 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 116.8 MB/s eta 0:00:00\n", + "#21 41.75 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", + "#21 41.76 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", + "#21 41.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 116.5 MB/s eta 0:00:00\n", + "#21 41.78 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", + "#21 41.79 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", + "#21 54.16 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, requests, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, cupy-cuda12x, pydantic, nvidia-cusolver-cu12, highdicom, torch, python-on-whales, monai, holoscan\n", + "#21 123.1 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 importlib-resources-6.5.2 jinja2-3.1.5 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", + "#21 DONE 124.4s\n", "\n", "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.391 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.610 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.630 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.654 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.656 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.6.0)\n", - "#22 1.704 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.709 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.802 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.808 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.834 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.3.1)\n", - "#22 1.835 Requirement already satisfied: cupy-cuda12x==12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (12.2.0)\n", - "#22 1.836 Requirement already satisfied: cloudpickle==2.2.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.2.1)\n", - "#22 1.837 Requirement already satisfied: python-on-whales==0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.60.1)\n", - "#22 1.837 Requirement already satisfied: Jinja2==3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.3)\n", - "#22 1.838 Requirement already satisfied: packaging==23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (23.1)\n", - "#22 1.838 Requirement already satisfied: pyyaml==6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0)\n", - "#22 1.839 Requirement already satisfied: requests==2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.31.0)\n", - "#22 1.840 Requirement already satisfied: psutil==6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.0)\n", - "#22 1.840 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.846 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.848 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.855 Requirement already satisfied: pydantic<2,>=1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.10.21)\n", - "#22 1.855 Requirement already satisfied: tqdm in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.67.1)\n", - "#22 1.856 Requirement already satisfied: typer>=0.4.1 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.15.1)\n", - "#22 1.856 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.861 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.862 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.862 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.863 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.873 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.16.1)\n", - "#22 1.886 Requirement already satisfied: click>=8.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (8.1.8)\n", - "#22 1.887 Requirement already satisfied: shellingham>=1.3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.5.4)\n", - "#22 1.888 Requirement already satisfied: rich>=10.11.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.9.4)\n", - "#22 1.901 Requirement already satisfied: markdown-it-py>=2.2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.0)\n", - "#22 1.902 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.19.1)\n", - "#22 1.914 Requirement already satisfied: mdurl~=0.1 in /home/holoscan/.local/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.1.2)\n", - "#22 1.925 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.949 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.970 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 2.194 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 2.361 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.7s\n", + "#22 1.361 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 1.564 Collecting monai-deploy-app-sdk==2.0.0\n", + "#22 1.579 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", + "#22 1.602 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", + "#22 1.604 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", + "#22 1.647 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", + "#22 1.652 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.725 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", + "#22 1.731 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.768 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", + "#22 1.769 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", + "#22 1.770 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", + "#22 1.771 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", + "#22 1.772 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", + "#22 1.773 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", + "#22 1.774 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", + "#22 1.776 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", + "#22 1.776 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", + "#22 1.777 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", + "#22 1.781 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", + "#22 1.788 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", + "#22 1.789 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", + "#22 1.799 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", + "#22 1.804 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", + "#22 1.805 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", + "#22 1.805 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", + "#22 1.806 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", + "#22 1.811 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", + "#22 1.830 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", + "#22 1.831 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", + "#22 1.849 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", + "#22 1.872 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.894 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", + "#22 2.064 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", + "#22 2.201 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", + "#22 DONE 2.6s\n", "\n", "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", "#23 DONE 0.2s\n", @@ -2118,96 +2092,91 @@ "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 205.0s done\n", - "#28 exporting manifest sha256:b5de7fb835f449ac07a4279808b4a2c17058fba60dfd9e7078aa6e2170095160 0.0s done\n", - "#28 exporting config sha256:7b762d9bca4683bb5372f1446c10680cd780f8d2028d776a3b7170ce0e586fba 0.0s done\n", + "#28 exporting layers 203.4s done\n", + "#28 exporting manifest sha256:089e3612567f5b5a28edd5e2ffd6ddf01264ddbcdc641694b12620fdbfa40828 0.0s done\n", + "#28 exporting config sha256:a863c524e0de40b25e7e8b519c4009196f543dc45dde5399124c1f9317a67b4e 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer 883c651eec94 288B / 288B\n", - "#29 loading layer 882e8f4cf156 65.54kB / 5.03MB\n", - "#29 loading layer 9f353f6d59ee 557.06kB / 3.28GB\n", - "#29 loading layer 9f353f6d59ee 142.05MB / 3.28GB 6.2s\n", - "#29 loading layer 9f353f6d59ee 271.29MB / 3.28GB 12.4s\n", - "#29 loading layer 9f353f6d59ee 487.98MB / 3.28GB 16.5s\n", - "#29 loading layer 9f353f6d59ee 677.38MB / 3.28GB 20.7s\n", - "#29 loading layer 9f353f6d59ee 883.49MB / 3.28GB 24.7s\n", - "#29 loading layer 9f353f6d59ee 1.09GB / 3.28GB 28.8s\n", - "#29 loading layer 9f353f6d59ee 1.29GB / 3.28GB 32.9s\n", - "#29 loading layer 9f353f6d59ee 1.53GB / 3.28GB 37.0s\n", - "#29 loading layer 9f353f6d59ee 1.72GB / 3.28GB 41.2s\n", - "#29 loading layer 9f353f6d59ee 1.96GB / 3.28GB 45.3s\n", - "#29 loading layer 9f353f6d59ee 2.13GB / 3.28GB 49.5s\n", - "#29 loading layer 9f353f6d59ee 2.16GB / 3.28GB 55.1s\n", - "#29 loading layer 9f353f6d59ee 2.35GB / 3.28GB 61.2s\n", - "#29 loading layer 9f353f6d59ee 2.51GB / 3.28GB 67.4s\n", - "#29 loading layer 9f353f6d59ee 2.72GB / 3.28GB 71.5s\n", - "#29 loading layer 9f353f6d59ee 2.98GB / 3.28GB 75.6s\n", - "#29 loading layer 9f353f6d59ee 3.17GB / 3.28GB 81.8s\n", - "#29 loading layer ca1fe5d06ea9 32.77kB / 579.10kB\n", - "#29 loading layer 1c84ad13d4d7 196.61kB / 17.81MB\n", - "#29 loading layer 313542a3a9e5 492B / 492B\n", - "#29 loading layer 91ddb543620e 317B / 317B\n", - "#29 loading layer 7ea9ca4496c2 302B / 302B\n", - "#29 loading layer 313542a3a9e5 492B / 492B 0.3s done\n", - "#29 loading layer d1793e4b751a 3.94kB / 3.94kB\n", - "#29 loading layer 883c651eec94 288B / 288B 87.6s done\n", - "#29 loading layer 882e8f4cf156 65.54kB / 5.03MB 87.5s done\n", - "#29 loading layer 9f353f6d59ee 3.21GB / 3.28GB 86.9s done\n", - "#29 loading layer ca1fe5d06ea9 32.77kB / 579.10kB 0.8s done\n", - "#29 loading layer 1c84ad13d4d7 196.61kB / 17.81MB 0.6s done\n", - "#29 loading layer 91ddb543620e 317B / 317B 0.3s done\n", - "#29 loading layer 7ea9ca4496c2 302B / 302B 0.2s done\n", - "#29 loading layer d1793e4b751a 3.94kB / 3.94kB 0.1s done\n", - "#29 DONE 87.6s\n", + "#29 loading layer 4dfc251f5c56 289B / 289B\n", + "#29 loading layer 74089dc02aa9 65.54kB / 5.10MB\n", + "#29 loading layer efdd29e523f7 557.06kB / 3.34GB\n", + "#29 loading layer efdd29e523f7 159.32MB / 3.34GB 6.4s\n", + "#29 loading layer efdd29e523f7 330.33MB / 3.34GB 10.4s\n", + "#29 loading layer efdd29e523f7 557.06MB / 3.34GB 16.6s\n", + "#29 loading layer efdd29e523f7 797.70MB / 3.34GB 20.7s\n", + "#29 loading layer efdd29e523f7 1.01GB / 3.34GB 24.7s\n", + "#29 loading layer efdd29e523f7 1.25GB / 3.34GB 28.9s\n", + "#29 loading layer efdd29e523f7 1.45GB / 3.34GB 33.0s\n", + "#29 loading layer efdd29e523f7 1.74GB / 3.34GB 37.1s\n", + "#29 loading layer efdd29e523f7 1.95GB / 3.34GB 41.1s\n", + "#29 loading layer efdd29e523f7 2.17GB / 3.34GB 45.2s\n", + "#29 loading layer efdd29e523f7 2.31GB / 3.34GB 51.9s\n", + "#29 loading layer efdd29e523f7 2.53GB / 3.34GB 58.0s\n", + "#29 loading layer efdd29e523f7 2.74GB / 3.34GB 62.1s\n", + "#29 loading layer efdd29e523f7 3.03GB / 3.34GB 66.3s\n", + "#29 loading layer efdd29e523f7 3.21GB / 3.34GB 72.4s\n", + "#29 loading layer 47536db86449 32.77kB / 578.01kB\n", + "#29 loading layer 56926067dc15 196.61kB / 17.81MB\n", + "#29 loading layer a90406bd7fe1 492B / 492B\n", + "#29 loading layer 04571d3d4439 315B / 315B\n", + "#29 loading layer 6f5c809ef192 302B / 302B\n", + "#29 loading layer b97e5e112e3f 3.94kB / 3.94kB\n", + "#29 loading layer 04571d3d4439 315B / 315B 0.5s done\n", + "#29 loading layer 4dfc251f5c56 289B / 289B 78.7s done\n", + "#29 loading layer 74089dc02aa9 65.54kB / 5.10MB 78.6s done\n", + "#29 loading layer efdd29e523f7 3.25GB / 3.34GB 78.1s done\n", + "#29 loading layer 47536db86449 32.77kB / 578.01kB 1.2s done\n", + "#29 loading layer 56926067dc15 196.61kB / 17.81MB 0.9s done\n", + "#29 loading layer a90406bd7fe1 492B / 492B 0.6s done\n", + "#29 loading layer 6f5c809ef192 302B / 302B 0.4s done\n", + "#29 loading layer b97e5e112e3f 3.94kB / 3.94kB 0.4s done\n", + "#29 DONE 78.7s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 132.5s done\n", - "#28 DONE 337.6s\n", + "#28 sending tarball 123.2s done\n", + "#28 DONE 326.7s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:081bfe8f8e11e818382810bb80503f619230a484153219082adae168fbf8396c\n", - "#30 writing layer sha256:081bfe8f8e11e818382810bb80503f619230a484153219082adae168fbf8396c 0.1s done\n", - "#30 writing layer sha256:0e189544a55690047b498cd3539bd123ae622202a9042225913d03ce1c6833a0\n", - "#30 writing layer sha256:0e189544a55690047b498cd3539bd123ae622202a9042225913d03ce1c6833a0 0.3s done\n", - "#30 writing layer sha256:1379a39f4ee98d75ce0813a148b40721a1d044b776dcf3c69bc25fa55a7fb409\n", - "#30 writing layer sha256:1379a39f4ee98d75ce0813a148b40721a1d044b776dcf3c69bc25fa55a7fb409 0.0s done\n", + "#30 writing layer sha256:05b02574544ba690caa3ab6304a23e2eb00610e44ca586c3f6045abe235d4886\n", + "#30 writing layer sha256:05b02574544ba690caa3ab6304a23e2eb00610e44ca586c3f6045abe235d4886 0.0s done\n", + "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", + "#30 writing layer sha256:0e0b90cb6cbd645ccffb017000cd0ff199c69273a69425adf3ccd1ebb3f573aa 0.0s done\n", "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:22b94b166959ca031b96456bdaa8a8bf9b3aea406e403ec6f96cfd8084ae9d64 0.0s done\n", "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:41e173df84c503c9e717e0e67c22260d4e6bb14660577b225dec5733b4155a78 done\n", - "#30 writing layer sha256:45a11df8fc21851a3008fe386358f1172c0c589095845f174d42bb86db2f1c49\n", - "#30 writing layer sha256:45a11df8fc21851a3008fe386358f1172c0c589095845f174d42bb86db2f1c49 49.4s done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 0.2s done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1\n", + "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", + "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707 done\n", + "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", + "#30 writing layer sha256:69f904b6c73e074809a57dc05803a5c6c37f5baf25e7fb407edc341511a2f9ba\n", + "#30 writing layer sha256:69f904b6c73e074809a57dc05803a5c6c37f5baf25e7fb407edc341511a2f9ba 49.2s done\n", + "#30 writing layer sha256:7420a5aefb199de2dd8aa67797672d53bafd18356d3bf7a2f1aec1f67f86020b\n", + "#30 writing layer sha256:7420a5aefb199de2dd8aa67797672d53bafd18356d3bf7a2f1aec1f67f86020b 0.0s done\n", "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:a1e7b959519ccdfb2adb42b59a134cfc9715d7cbffbff130a0f32bec129e4514 0.1s done\n", + "#30 writing layer sha256:a7292bbf42d93ed9fca9e2ff7e5283d2e7f737dad14092919db7645628bb0838 0.0s done\n", + "#30 writing layer sha256:a8560dc90723760d8d4daf42b22f7760b034c87e9348697c113118b992d830ca 0.1s done\n", "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#30 writing layer sha256:b2d7a44feb1d1dd34b73842e1048b1b2ee32c381943f40f9ee7d3945b9818b09 0.0s done\n", "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:bfa5ec525f430f0d201578b006cd216f9bb89f61b91e96b5c2111bb04e7569e4\n", - "#30 writing layer sha256:bfa5ec525f430f0d201578b006cd216f9bb89f61b91e96b5c2111bb04e7569e4 0.2s done\n", - "#30 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94\n", - "#30 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94 0.0s done\n", - "#30 writing layer sha256:c8937b741c9ecd6b257aeb18daf07eddbf1c77b0c93f9ba4164faa8353cd1d3c done\n", + "#30 writing layer sha256:bdb033062d61ab2282e08a5a8fcaee9d08e5c93b46d0b1d9b5f378b458e4ea07 0.0s done\n", + "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", + "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:e540d242f419a27800d601d7275f4fbb3488b97d209b454f52e63f1eb413a912 done\n", - "#30 writing layer sha256:edd12bb5b9c08c2e288fc295bf1f84feac12beac66caaa8a19956942eb729aef 0.1s done\n", "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing layer sha256:f5fde379d4095f4d724bdbcb4a4851cd60e289756e2a6bbf03fdc1876d68d70b 0.1s done\n", - "#30 writing config sha256:f4279d2706416776e3bb6861a808890e284046f50af2a42e2a8b4cb8b1d078ba 0.0s done\n", - "#30 preparing build cache for export 50.8s done\n", - "#30 writing cache manifest sha256:8778ac8296a1eef32e320942180f024438bc19f8e53b1f74a672584566a828ed 0.0s done\n", - "#30 DONE 50.8s\n", - "[2025-01-16 16:26:32,367] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:fa35667ed3d919e87dc31994d8dfd51eab483c48ae72fb0ad2ab83e2b544c7c3\n", + "#30 writing layer sha256:fa35667ed3d919e87dc31994d8dfd51eab483c48ae72fb0ad2ab83e2b544c7c3 0.3s done\n", + "#30 preparing build cache for export 50.1s done\n", + "#30 writing config sha256:dff8a5cdb36509e072452e50bce7b5a26df3d17fd6570f7f4ab9dc79ea47e02e 0.0s done\n", + "#30 writing cache manifest sha256:bf6b0dabb704fd0021d37ae93daa4ad6ff38ef9d7b58d131e90451dbbcdcd709 0.0s done\n", + "#30 DONE 50.1s\n", + "[2025-01-29 14:39:18,007] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -2233,14 +2202,14 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 7b762d9bca46 6 minutes ago 8.45GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 a863c524e0de 6 minutes ago 8.63GB\n" ] } ], @@ -2259,7 +2228,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -2268,22 +2237,23 @@ "text": [ "output\n", "dcm\n", - "[2025-01-16 16:32:17,206] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-16 16:32:17,206] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-01-29 14:39:20,640] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-16 16:32:17,207] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-16 16:32:17,209] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-16 16:32:17,419] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpgnvxx1p1/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpgnvxx1p1/pkg.json\n", - "[2025-01-16 16:32:17,704] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-01-29 14:39:20,713] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpguo6yiqf/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpguo6yiqf/pkg.json\n", + "2f1c2c8df19c8ecc58cc0d8136bdd27b4143e88c67da72b5340f86b49eec22bb\n", + "[2025-01-29 14:39:21,151] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-16 16:32:17,705] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-01-29 14:39:21,152] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-16 16:32:18,172] [INFO] (common) - Launching container (75640cd60fab) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: pensive_robinson\n", + "[2025-01-29 14:39:21,443] [INFO] (common) - Launching container (d6429624e9ee) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: relaxed_zhukovsky\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2293,93 +2263,103 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-17 00:32:19 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-01-29 22:39:22 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[info] [fragment.cpp:585] Loading extensions from configs...\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:255] Creating context\n", + "[info] [gxf_executor.cpp:264] Creating context\n", "\n", - "[2025-01-17 00:32:27,067] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2025-01-29 22:39:28,954] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2025-01-17 00:32:27,077] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2025-01-29 22:39:28,960] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2025-01-17 00:32:27,077] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", + "[2025-01-29 22:39:28,961] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", "\n", - "[info] [app_driver.cpp:1176] Launching the driver/health checking service\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", "\n", - "[info] [gxf_executor.cpp:1973] Activating Graph...\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", "\n", - "[info] [gxf_executor.cpp:2003] Running Graph...\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", "\n", - "[info] [gxf_executor.cpp:2005] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", "\n", - "[2025-01-17 00:32:27,104] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", "\n", - "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", + "[2025-01-29 22:39:29,005] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2025-01-17 00:32:28,766] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 22:39:29,927] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2025-01-17 00:32:28,772] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 22:39:29,927] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2025-01-17 00:32:28,772] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 22:39:29,927] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-17 00:32:28,772] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 22:39:29,927] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-17 00:32:28,772] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 22:39:29,927] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2025-01-17 00:32:28,772] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 22:39:29,927] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-17 00:32:28,772] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-17 00:32:28,772] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-17 00:32:28,772] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-17 00:32:28,773] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-17 00:32:28,773] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-17 00:32:28,773] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-17 00:32:28,773] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", "\n", - "[2025-01-17 00:32:28,773] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute ImageType value: None\n", "\n", - "[2025-01-17 00:32:28,774] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 22:39:29,929] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-17 00:32:29,926] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-01-29 22:39:30,619] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", "\n", - "[2025-01-17 00:32:29,926] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", "\n", - "[2025-01-17 00:32:29,926] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", "\n", - "[2025-01-17 00:32:29,927] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", "\n", - "[2025-01-17 00:32:29,927] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", "\n", - "[2025-01-17 00:32:29,927] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", "\n", - "[2025-01-17 00:32:29,927] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", "\n", - "[2025-01-17 00:32:29,927] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", "\n", - "[2025-01-17 00:32:29,930] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", "\n", - "[2025-01-17 00:32:29,930] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", "\n", - "[2025-01-17 00:32:29,930] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", "\n", - "[2025-01-17 00:32:29,931] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", "\n", - "[2025-01-17 00:32:29,931] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", "\n", - "[2025-01-17 00:32:29,931] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", "\n", - "[2025-01-17 00:32:29,938] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", "\n", " [ 0. 0.7890625 0. -398.60547 ]\n", "\n", @@ -2387,7 +2367,7 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2025-01-17 00:32:29,939] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", "\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", "\n", @@ -2395,63 +2375,63 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2025-01-17 00:32:29,939] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", "\n", - "[2025-01-17 00:32:29,939] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", "\n", - "[2025-01-17 00:32:29,940] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", "\n", - "[2025-01-17 00:32:29,940] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", "\n", - "[2025-01-17 00:32:29,940] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", "\n", - "[2025-01-17 00:32:29,940] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", "\n", - "[2025-01-17 00:32:29,940] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", "\n", - "2025-01-17 00:33:37,448 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "2025-01-29 22:39:31,772 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", "\n", - "2025-01-17 00:45:52,727 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "2025-01-29 22:39:36,704 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", "\n", - "[2025-01-17 00:46:04,570] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2025-01-29 22:39:38,595] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", "\n", - "[2025-01-17 00:46:05,016] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-01-29 22:39:38,601] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " check_person_name(patient_name)\n", "\n", - "[2025-01-17 00:46:08,718] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 00:46:08,794] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-17 00:46:08,794] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 00:46:08,794] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-17 00:46:08,803] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-17 00:46:08,804] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 00:46:08,804] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-17 00:46:08,805] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-17 00:46:08,805] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 22:39:40,099] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2008] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2016] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", "\n", - "[2025-01-17 00:46:09,721] [INFO] (app.AISpleenSegApp) - End run\n", + "[2025-01-29 22:39:40,203] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[info] [gxf_executor.cpp:284] Destroying context\n", + "[info] [gxf_executor.cpp:294] Destroying context\n", "\n", - "[2025-01-16 16:46:26,092] [INFO] (common) - Container 'pensive_robinson'(75640cd60fab) exited.\n" + "[2025-01-29 14:39:42,029] [INFO] (common) - Container 'relaxed_zhukovsky'(d6429624e9ee) exited.\n" ] } ], @@ -2465,7 +2445,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -2473,7 +2453,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.60700946839990713142461529413707592.dcm\n", + "1.2.826.0.1.3680043.10.511.3.9998962080747738621710125447135664.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", diff --git a/notebooks/tutorials/03_segmentation_viz_app.ipynb b/notebooks/tutorials/03_segmentation_viz_app.ipynb index 173dc764..4264758d 100644 --- a/notebooks/tutorials/03_segmentation_viz_app.ipynb +++ b/notebooks/tutorials/03_segmentation_viz_app.ipynb @@ -347,13 +347,13 @@ "# !pip install gdown\n", "# !gdown \"https://drive.google.com/uc?id=1IwWMpbo2fd38fKIqeIdL8SKTGvkn31tK\"\n", "\n", - "# Clean up the destinaton folder for the input DICOM files\n", + "# Clean up the destination folder for the input DICOM files\n", "!rm -rf dcm\n", "\n", "# After downloading ai_spleen_bundle_data zip file from the web browser or using gdown,\n", "!unzip -o \"ai_spleen_seg_bundle_data.zip\"\n", "\n", - "# Need to copy the model.ts file to its own clean subfolder for pacakging, to workaround an issue in the Packager\n", + "# Need to copy the model.ts file to its own clean subfolder for packaging, to workaround an issue in the Packager\n", "models_folder = \"models\"\n", "!rm -rf {models_folder} && mkdir -p {models_folder}/model && cp model.ts {models_folder}/model && ls {models_folder}/model" ] @@ -618,42 +618,42 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 18:38:40,744] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-16 18:38:40,750] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-16 18:38:40,755] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:262] Creating context\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_file'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2178] Activating Graph...\n", - "[info] [gxf_executor.cpp:2208] Running Graph...\n", - "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 14:41:46,387] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-29 14:41:46,393] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2025-01-29 14:41:46,398] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", - "[2025-01-16 18:38:40,785] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-16 18:38:41,165] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-16 18:38:41,167] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 14:41:46,525] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-29 14:41:46,884] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 14:41:46,885] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-16 18:38:41,168] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 18:38:41,169] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-16 18:38:41,170] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-16 18:38:41,171] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:38:41,172] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-16 18:38:41,174] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-16 18:38:41,174] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:38:41,175] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-16 18:38:41,175] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-16 18:38:41,176] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:38:41,176] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 18:38:41,491] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2025-01-29 14:41:46,886] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:41:46,887] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:41:46,888] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 14:41:46,889] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:41:46,890] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 14:41:46,891] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 14:41:46,892] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:41:46,893] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:41:46,894] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 14:41:46,895] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:41:46,897] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:41:47,361] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n" ] @@ -661,7 +661,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8f60e4eaaf3b4902941c9adbdbb26efc", + "model_id": "26dacc25a4e94b69ab54eca02db67039", "version_major": 2, "version_minor": 0 }, @@ -676,25 +676,25 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2025-01-16 18:38:52,008] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2025-01-16 18:38:53,980] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2025-01-16 18:38:53,982] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-01-29 14:41:58,112] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2025-01-29 14:42:00,510] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-01-29 14:42:00,512] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-16 18:39:05,570] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:39:05,571] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-16 18:39:05,572] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:39:05,573] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-16 18:39:05,575] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-16 18:39:05,576] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:39:05,577] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-16 18:39:05,579] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-16 18:39:05,580] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 14:42:15,314] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:42:15,315] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 14:42:15,316] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:42:15,317] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 14:42:15,319] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 14:42:15,320] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:42:15,322] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 14:42:15,323] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 14:42:15,324] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[2025-01-16 18:39:05,702] [INFO] (__main__.AISpleenSegApp) - End run\n" + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[2025-01-29 14:42:15,492] [INFO] (__main__.AISpleenSegApp) - End run\n" ] } ], @@ -999,64 +999,64 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 18:39:12,216] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2025-01-16 18:39:12,218] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-16 18:39:12,220] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_file'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 14:42:26,898] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2025-01-29 14:42:26,901] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2025-01-29 14:42:26,904] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", - "[2025-01-16 18:39:12,231] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-16 18:39:12,884] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-16 18:39:12,884] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 14:42:26,976] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-29 14:42:27,963] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 14:42:27,963] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-16 18:39:12,884] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 18:39:12,884] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:39:12,885] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:39:12,885] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-16 18:39:12,885] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:39:12,885] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 18:39:13,178] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2025-01-29 14:42:27,963] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:42:27,964] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:42:27,964] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 14:42:27,964] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:42:27,964] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 14:42:27,964] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 14:42:27,964] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:42:27,964] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:42:27,964] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 14:42:27,964] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:42:27,964] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:42:28,237] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", "Box(children=(Widget(), VBox(children=(interactive(children=(Dropdown(description='View mode', index=2, options=(('Cinematic', 'CINEMATIC'), ('Slice', 'SLICE'), ('Slice Segmentation', 'SLICE_SEGMENTATION')), value='SLICE_SEGMENTATION'), Output()), _dom_classes=('widget-interact',)), interactive(children=(Dropdown(description='Camera', options=('Top', 'Right', 'Front'), value='Top'), Output()), _dom_classes=('widget-interact',))))))\n", - "[2025-01-16 18:39:22,788] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2025-01-16 18:39:24,665] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2025-01-16 18:39:24,665] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-01-29 14:42:39,484] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2025-01-29 14:42:41,141] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-01-29 14:42:41,141] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-16 18:39:36,021] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:39:36,022] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-16 18:39:36,022] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-16 18:39:36,022] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 14:43:05,321] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:43:05,322] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 14:43:05,322] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:43:05,322] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 14:43:05,323] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 14:43:05,323] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:43:05,323] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 14:43:05,323] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 14:43:05,323] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[2025-01-16 18:39:36,148] [INFO] (app.AISpleenSegApp) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[2025-01-29 14:43:05,475] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1074,7 +1074,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.7381661622403430418697652288923425.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.78800183556923650623335517776550758.dcm stl\n" ] } ], diff --git a/notebooks/tutorials/04_monai_bundle_app.ipynb b/notebooks/tutorials/04_monai_bundle_app.ipynb index 88f5ddcc..4dccc832 100644 --- a/notebooks/tutorials/04_monai_bundle_app.ipynb +++ b/notebooks/tutorials/04_monai_bundle_app.ipynb @@ -358,7 +358,7 @@ "# After downloading ai_spleen_bundle_data zip file from the web browser or using gdown,\n", "!unzip -o \"ai_spleen_seg_bundle_data.zip\"\n", "\n", - "# Need to copy the model.ts file to its own clean subfolder for pacakging, to workaround an issue in the Packager\n", + "# Need to copy the model.ts file to its own clean subfolder for packaging, to workaround an issue in the Packager\n", "models_folder = \"models\"\n", "!rm -rf {models_folder} && mkdir -p {models_folder}/model && cp model.ts {models_folder}/model && ls {models_folder}/model" ] @@ -612,62 +612,62 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 18:46:54,471] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-16 18:46:54,485] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-16 18:46:54,496] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:262] Creating context\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_file'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2178] Activating Graph...\n", - "[info] [gxf_executor.cpp:2208] Running Graph...\n", - "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 14:44:44,206] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-29 14:44:44,212] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", + "[2025-01-29 14:44:44,222] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", - "[2025-01-16 18:46:54,518] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-16 18:46:54,871] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-16 18:46:54,872] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 14:44:44,263] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-29 14:44:44,616] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 14:44:44,617] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-16 18:46:54,873] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 18:46:54,874] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-16 18:46:54,875] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-16 18:46:54,877] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:46:54,878] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-16 18:46:54,880] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-16 18:46:54,882] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:46:54,883] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-16 18:46:54,883] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-16 18:46:54,884] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:46:54,886] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 18:46:55,228] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2025-01-29 14:44:44,618] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:44:44,618] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:44:44,619] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 14:44:44,620] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:44:44,621] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 14:44:44,622] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 14:44:44,623] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:44:44,627] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:44:44,629] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 14:44:44,630] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:44:44,632] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:44:45,069] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-16 18:46:58,310] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2025-01-16 18:47:00,011] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2025-01-16 18:47:00,012] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-01-29 14:44:48,663] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2025-01-29 14:44:50,440] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-01-29 14:44:50,441] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-16 18:47:11,502] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:47:11,503] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-16 18:47:11,504] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:47:11,505] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-16 18:47:11,507] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-16 18:47:11,507] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:47:11,509] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-16 18:47:11,510] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-16 18:47:11,512] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 14:45:02,816] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:45:02,817] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 14:45:02,819] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:45:02,821] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 14:45:02,824] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 14:45:02,827] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:45:02,829] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 14:45:02,832] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 14:45:02,836] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[2025-01-16 18:47:11,627] [INFO] (__main__.AISpleenSegApp) - End run\n", - "[2025-01-16 18:47:11,628] [INFO] (root) - End __main__\n" + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[2025-01-29 14:45:03,007] [INFO] (__main__.AISpleenSegApp) - End run\n", + "[2025-01-29 14:45:03,009] [INFO] (root) - End __main__\n" ] } ], @@ -968,61 +968,61 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 18:47:18,173] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", - "[2025-01-16 18:47:18,176] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[2025-01-16 18:47:18,178] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_file'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 14:45:09,784] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", + "[2025-01-29 14:45:09,786] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", + "[2025-01-29 14:45:09,788] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", - "[2025-01-16 18:47:18,189] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-16 18:47:18,786] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-16 18:47:18,786] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 14:45:09,806] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-29 14:45:10,337] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-16 18:47:18,786] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 18:47:18,786] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-16 18:47:18,786] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-16 18:47:18,787] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:47:18,787] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-16 18:47:18,787] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-16 18:47:18,787] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:47:18,787] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-16 18:47:18,787] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-16 18:47:18,787] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:47:18,787] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 18:47:19,100] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:45:10,338] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:45:10,638] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-16 18:47:22,311] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", - "[2025-01-16 18:47:24,084] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2025-01-16 18:47:24,084] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-01-29 14:45:14,192] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", + "[2025-01-29 14:45:15,947] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-01-29 14:45:15,947] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-16 18:47:35,855] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:47:35,855] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-16 18:47:35,855] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:47:35,855] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-16 18:47:35,856] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-16 18:47:35,856] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 18:47:35,856] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-16 18:47:35,856] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-16 18:47:35,856] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[2025-01-16 18:47:35,968] [INFO] (app.AISpleenSegApp) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[2025-01-29 14:45:28,464] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1040,7 +1040,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.62575937391603140773834509092916100.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.48925922417984937382434580199910089.dcm stl\n" ] } ], @@ -1115,7 +1115,7 @@ "numpy-stl>=2.12.0\n", "trimesh>=3.8.11\n", "torch>=1.12.0\n", - "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue" + "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" ] }, { @@ -1138,16 +1138,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-16 18:47:38,758] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-16 18:47:39,137] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-16 18:47:39,138] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-16 18:47:39,138] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-16 18:47:39,138] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-16 18:47:39,138] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-16 18:47:39,138] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-16 18:47:39,142] [INFO] (packager) - Generating app.json...\n", - "[2025-01-16 18:47:39,142] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-16 18:47:39,146] [DEBUG] (common) - \n", + "[2025-01-29 14:45:31,019] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-29 14:45:31,266] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-29 14:45:31,267] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-01-29 14:45:31,267] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-01-29 14:45:31,267] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-01-29 14:45:31,267] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-01-29 14:45:31,267] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-01-29 14:45:31,271] [INFO] (packager) - Generating app.json...\n", + "[2025-01-29 14:45:31,271] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-29 14:45:31,277] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1182,7 +1182,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2025-01-16 18:47:39,146] [DEBUG] (common) - \n", + "[2025-01-29 14:45:31,278] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1202,7 +1202,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-16 18:47:39,174] [DEBUG] (packager.builder) - \n", + "[2025-01-29 14:45:31,305] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1220,7 +1220,7 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.8.0',\n", + " 'holoscan_sdk_version': '2.9.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", @@ -1244,7 +1244,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-16 18:47:39,174] [DEBUG] (packager.builder) - \n", + "[2025-01-29 14:45:31,305] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -1254,15 +1254,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.8.0',\n", - " 'holoscan_sdk_filename': '2.8.0',\n", + " 'holoscan_sdk_file': '2.9.0',\n", + " 'holoscan_sdk_filename': '2.9.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-16 18:47:39,194] [DEBUG] (packager.builder) - \n", + "[2025-01-29 14:45:31,336] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1326,7 +1326,7 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.8.0\"\n", + "LABEL org.nvidia.holoscan=\"2.9.0\"\n", "\n", "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", "\n", @@ -1341,7 +1341,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.8.0\n", + "ENV HOLOSCAN_VERSION=2.9.0\n", "\n", "\n", "\n", @@ -1416,7 +1416,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-16 18:47:39,195] [INFO] (packager.builder) - \n", + "[2025-01-29 14:45:31,336] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1424,37 +1424,40 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.8.0\n", + " Holoscan SDK Package: 2.9.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.8.0\n", + " SDK Version: 2.9.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-16 18:47:39,716] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-16 18:47:39,717] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-01-29 14:45:31,944] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-29 14:45:31,944] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", "#1 transferring dockerfile: 4.56kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", - "#2 DONE 0.0s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#2 ...\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#3 DONE 0.6s\n", + "#3 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#3 DONE 0.0s\n", + "\n", + "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#2 DONE 0.5s\n", "\n", "#4 [internal] load .dockerignore\n", - "#4 transferring context: 1.79kB done\n", + "#4 transferring context: 1.80kB done\n", "#4 DONE 0.1s\n", "\n", - "#5 importing cache manifest from local:8380303118981959235\n", - "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#5 [internal] load build context\n", "#5 DONE 0.0s\n", "\n", - "#6 [internal] load build context\n", + "#6 importing cache manifest from local:6099231199924646769\n", + "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#6 DONE 0.0s\n", "\n", "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", @@ -1463,37 +1466,37 @@ "\n", "#8 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", "#8 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#8 DONE 0.6s\n", + "#8 DONE 0.3s\n", "\n", - "#6 [internal] load build context\n", - "#6 transferring context: 19.43MB 0.2s done\n", - "#6 DONE 0.3s\n", + "#5 [internal] load build context\n", + "#5 transferring context: 19.43MB 0.2s done\n", + "#5 DONE 0.5s\n", "\n", - "#9 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#9 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#9 CACHED\n", "\n", - "#10 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#10 CACHED\n", "\n", - "#11 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#11 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#11 CACHED\n", "\n", - "#12 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#12 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#12 CACHED\n", "\n", - "#13 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#13 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#13 CACHED\n", "\n", - "#14 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#14 [release 6/18] WORKDIR /var/holoscan\n", "#14 CACHED\n", "\n", - "#15 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#15 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#15 CACHED\n", "\n", "#16 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#16 CACHED\n", "\n", - "#17 [release 6/18] WORKDIR /var/holoscan\n", + "#17 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#17 CACHED\n", "\n", "#18 [release 9/18] WORKDIR /var/holoscan\n", @@ -1503,289 +1506,268 @@ "#19 DONE 0.2s\n", "\n", "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 0.934 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 0.985 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 1.174 Collecting pip\n", - "#20 1.226 Downloading pip-24.3.1-py3-none-any.whl (1.8 MB)\n", - "#20 1.292 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 29.1 MB/s eta 0:00:00\n", - "#20 1.318 Installing collected packages: pip\n", - "#20 2.288 Successfully installed pip-24.3.1\n", - "#20 DONE 2.5s\n", + "#20 1.108 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 1.137 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.383 Collecting pip\n", + "#20 1.456 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", + "#20 1.577 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 15.8 MB/s eta 0:00:00\n", + "#20 1.600 Installing collected packages: pip\n", + "#20 2.543 Successfully installed pip-25.0\n", + "#20 DONE 2.8s\n", "\n", "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.750 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.768 Downloading highdicom-0.23.1-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 0.869 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 0.876 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 1.064 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 1.069 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.302 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.306 Downloading numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.403 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.410 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.422 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.466 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.471 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.574 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.582 Downloading scikit_image-0.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", - "#21 1.692 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.699 Downloading numpy_stl-3.2.0-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.825 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", - "#21 1.829 Downloading trimesh-4.5.3-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.881 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", - "#21 1.886 Downloading torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.982 Collecting holoscan==2.6.0 (from -r /tmp/requirements.txt (line 12))\n", - "#21 1.993 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.2 kB)\n", - "#21 2.001 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12)) (24.3.1)\n", - "#21 2.015 Collecting cupy-cuda12x==12.2 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.020 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", - "#21 2.037 Collecting cloudpickle==2.2.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.042 Downloading cloudpickle-2.2.1-py3-none-any.whl.metadata (6.9 kB)\n", - "#21 2.113 Collecting python-on-whales==0.60.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.118 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", - "#21 2.135 Collecting Jinja2==3.1.3 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.139 Downloading Jinja2-3.1.3-py3-none-any.whl.metadata (3.3 kB)\n", - "#21 2.161 Collecting packaging==23.1 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.166 Downloading packaging-23.1-py3-none-any.whl.metadata (3.1 kB)\n", - "#21 2.225 Collecting pyyaml==6.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.232 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (2.0 kB)\n", - "#21 2.264 Collecting requests==2.31.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.268 Downloading requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.357 Collecting psutil==6.0.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.361 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (21 kB)\n", - "#21 2.444 Collecting wheel-axle-runtime<1.0 (from holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.452 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.473 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 2.477 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 2.548 Collecting fastrlock>=0.5 (from cupy-cuda12x==12.2->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.553 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.627 Collecting MarkupSafe>=2.0 (from Jinja2==3.1.3->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.631 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.790 Collecting pydantic<2,>=1.5 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.795 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", - "#21 2.868 Collecting tqdm (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.878 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", - "#21 2.917 Collecting typer>=0.4.1 (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.921 Downloading typer-0.15.1-py3-none-any.whl.metadata (15 kB)\n", - "#21 2.943 Collecting typing-extensions (from python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.947 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 3.030 Collecting charset-normalizer<4,>=2 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.034 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 3.047 Collecting idna<4,>=2.5 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.050 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 3.148 Collecting urllib3<3,>=1.21.1 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.152 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 3.173 Collecting certifi>=2017.4.17 (from requests==2.31.0->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.179 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.421 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 3.425 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 3.529 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 3.540 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.617 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 3.621 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 3.816 Collecting scipy>=1.11.2 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 3.820 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 3.866 Collecting networkx>=3.0 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 3.876 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 3.931 Collecting imageio!=2.35.0,>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 3.935 Downloading imageio-2.36.1-py3-none-any.whl.metadata (5.2 kB)\n", - "#21 4.010 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 4.013 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", - "#21 4.029 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 4.034 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", - "#21 4.055 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", - "#21 4.060 Downloading python_utils-3.9.1-py2.py3-none-any.whl.metadata (9.8 kB)\n", - "#21 4.099 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.104 Downloading filelock-3.16.1-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 4.135 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.139 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 4.272 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.276 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 4.286 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.290 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 4.307 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.311 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 4.328 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.332 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 4.347 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.351 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 4.368 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.372 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 4.387 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.396 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 4.420 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.425 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 4.438 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.443 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 4.452 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.456 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 4.476 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.484 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 4.500 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.504 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 4.517 Collecting triton==3.1.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.522 Downloading triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.3 kB)\n", - "#21 4.568 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.573 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 4.645 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 4.652 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 4.683 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 4.684 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 4.748 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 4.756 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 4.831 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 4.834 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 4.853 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 4.857 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", - "#21 4.972 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 4.976 Downloading rich-13.9.4-py3-none-any.whl.metadata (18 kB)\n", - "#21 5.025 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 5.029 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", - "#21 5.079 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 5.083 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", - "#21 5.102 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan==2.6.0->-r /tmp/requirements.txt (line 12))\n", - "#21 5.105 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", - "#21 5.120 Downloading holoscan-2.6.0-cp310-cp310-manylinux_2_35_x86_64.whl (40.8 MB)\n", - "#21 5.523 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 MB 103.4 MB/s eta 0:00:00\n", - "#21 5.528 Downloading cloudpickle-2.2.1-py3-none-any.whl (25 kB)\n", - "#21 5.535 Downloading cupy_cuda12x-12.2.0-cp310-cp310-manylinux2014_x86_64.whl (82.0 MB)\n", - "#21 6.415 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 82.0/82.0 MB 93.6 MB/s eta 0:00:00\n", - "#21 6.420 Downloading Jinja2-3.1.3-py3-none-any.whl (133 kB)\n", - "#21 6.425 Downloading packaging-23.1-py3-none-any.whl (48 kB)\n", - "#21 6.430 Downloading psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (290 kB)\n", - "#21 6.439 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", - "#21 6.447 Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (682 kB)\n", - "#21 6.458 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 682.2/682.2 kB 126.7 MB/s eta 0:00:00\n", - "#21 6.467 Downloading requests-2.31.0-py3-none-any.whl (62 kB)\n", - "#21 6.477 Downloading highdicom-0.23.1-py3-none-any.whl (836 kB)\n", - "#21 6.498 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 836.4/836.4 kB 93.1 MB/s eta 0:00:00\n", - "#21 6.512 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 6.552 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 44.4 MB/s eta 0:00:00\n", - "#21 6.558 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 6.589 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 113.1 MB/s eta 0:00:00\n", - "#21 6.594 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 6.754 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 116.9 MB/s eta 0:00:00\n", - "#21 6.761 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 6.782 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 118.5 MB/s eta 0:00:00\n", - "#21 6.790 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 7.314 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 102.8 MB/s eta 0:00:00\n", - "#21 7.320 Downloading scikit_image-0.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", - "#21 7.516 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 75.8 MB/s eta 0:00:00\n", - "#21 7.521 Downloading numpy_stl-3.2.0-py3-none-any.whl (20 kB)\n", - "#21 7.529 Downloading trimesh-4.5.3-py3-none-any.whl (704 kB)\n", - "#21 7.534 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 704.8/704.8 kB 130.7 MB/s eta 0:00:00\n", - "#21 7.539 Downloading torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl (906.4 MB)\n", - "#21 16.44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 906.4/906.4 MB 93.7 MB/s eta 0:00:00\n", - "#21 16.44 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 19.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 115.2 MB/s eta 0:00:00\n", - "#21 19.64 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 19.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 111.4 MB/s eta 0:00:00\n", - "#21 19.78 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 19.99 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.3 MB/s eta 0:00:00\n", - "#21 20.00 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 20.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 134.9 MB/s eta 0:00:00\n", - "#21 20.02 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 25.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 112.1 MB/s eta 0:00:00\n", - "#21 25.89 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 27.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 111.9 MB/s eta 0:00:00\n", - "#21 27.79 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 28.29 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 115.2 MB/s eta 0:00:00\n", - "#21 28.29 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 29.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 108.5 MB/s eta 0:00:00\n", - "#21 29.49 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 31.41 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 108.2 MB/s eta 0:00:00\n", - "#21 31.42 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 33.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 104.9 MB/s eta 0:00:00\n", - "#21 33.23 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 33.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 106.2 MB/s eta 0:00:00\n", - "#21 33.44 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 33.45 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 33.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 39.6 MB/s eta 0:00:00\n", - "#21 33.61 Downloading triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (209.5 MB)\n", - "#21 35.59 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 209.5/209.5 MB 105.7 MB/s eta 0:00:00\n", - "#21 35.60 Downloading imageio-2.36.1-py3-none-any.whl (315 kB)\n", - "#21 35.61 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 35.61 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", - "#21 35.61 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 35.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 117.9 MB/s eta 0:00:00\n", - "#21 35.64 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 35.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 118.4 MB/s eta 0:00:00\n", - "#21 35.70 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 35.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 115.9 MB/s eta 0:00:00\n", - "#21 35.73 Downloading python_utils-3.9.1-py2.py3-none-any.whl (32 kB)\n", - "#21 35.73 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", - "#21 36.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 113.9 MB/s eta 0:00:00\n", - "#21 36.10 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", - "#21 36.10 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 36.11 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 36.12 Downloading filelock-3.16.1-py3-none-any.whl (16 kB)\n", - "#21 36.13 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 36.13 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 36.14 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 36.14 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 36.14 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 36.15 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 36.15 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 36.16 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 91.2 MB/s eta 0:00:00\n", - "#21 36.17 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", - "#21 36.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 113.2 MB/s eta 0:00:00\n", - "#21 36.20 Downloading typer-0.15.1-py3-none-any.whl (44 kB)\n", - "#21 36.21 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 36.21 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", - "#21 36.22 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", - "#21 36.22 Downloading rich-13.9.4-py3-none-any.whl (242 kB)\n", - "#21 36.23 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", - "#21 36.23 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", - "#21 36.24 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", - "#21 36.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 117.2 MB/s eta 0:00:00\n", - "#21 36.25 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", - "#21 44.89 Installing collected packages: SimpleITK, mpmath, fastrlock, urllib3, typing-extensions, tqdm, sympy, shellingham, pyyaml, pygments, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, mdurl, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, click, charset-normalizer, certifi, wheel-axle-runtime, triton, trimesh, tifffile, scipy, requests, python-utils, pyjpegls, pydantic, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, markdown-it-py, lazy-loader, Jinja2, imageio, cupy-cuda12x, scikit-image, rich, nvidia-cusolver-cu12, numpy-stl, highdicom, typer, torch, python-on-whales, monai, holoscan\n", - "#21 109.2 Successfully installed Jinja2-3.1.3 MarkupSafe-3.0.2 SimpleITK-2.4.1 certifi-2024.12.14 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-2.2.1 cupy-cuda12x-12.2.0 fastrlock-0.8.3 filelock-3.16.1 fsspec-2024.12.0 highdicom-0.23.1 holoscan-2.6.0 idna-3.10 imageio-2.36.1 importlib-resources-6.5.2 lazy-loader-0.4 markdown-it-py-3.0.0 mdurl-0.1.2 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 numpy-stl-3.2.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-23.1 pillow-11.1.0 psutil-6.0.0 pydantic-1.10.21 pydicom-3.0.1 pygments-2.19.1 pyjpegls-1.4.0 python-on-whales-0.60.1 python-utils-3.9.1 pyyaml-6.0 requests-2.31.0 rich-13.9.4 scikit-image-0.25.0 scipy-1.15.1 shellingham-1.5.4 sympy-1.13.1 tifffile-2025.1.10 torch-2.5.1 tqdm-4.67.1 trimesh-4.5.3 triton-3.1.0 typer-0.15.1 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 111.0s\n", + "#21 0.685 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.699 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", + "#21 0.720 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.725 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.855 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.914 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.079 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.083 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.099 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.105 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.110 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.137 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.141 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.200 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.205 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", + "#21 1.235 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", + "#21 1.239 Downloading numpy_stl-3.2.0-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.324 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", + "#21 1.330 Downloading trimesh-4.6.0-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.385 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", + "#21 1.389 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.407 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 12))\n", + "#21 1.412 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", + "#21 1.583 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.587 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", + "#21 1.607 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.612 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.624 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.628 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.640 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.644 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.675 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.680 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.725 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.731 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#21 1.831 Collecting scipy>=1.11.2 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 1.836 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.860 Collecting networkx>=3.0 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 1.864 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 1.891 Collecting imageio!=2.35.0,>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 1.896 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", + "#21 1.950 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 1.953 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", + "#21 1.970 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 1.974 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", + "#21 1.992 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", + "#21 1.997 Downloading python_utils-3.9.1-py2.py3-none-any.whl.metadata (9.8 kB)\n", + "#21 2.029 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.033 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.050 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.054 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", + "#21 2.074 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.078 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.125 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.129 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.140 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.144 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.155 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.158 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.170 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.174 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.183 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.187 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.198 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.202 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.212 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.216 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.227 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.230 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.242 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.246 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.255 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.258 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.272 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.276 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.293 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.301 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.317 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.322 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.333 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.337 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 2.352 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.355 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 2.380 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.384 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 2.391 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12)) (25.0)\n", + "#21 2.403 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.407 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", + "#21 2.475 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.479 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#21 2.500 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.504 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", + "#21 2.580 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.585 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#21 2.636 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.640 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#21 2.746 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.750 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#21 2.761 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.765 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#21 2.804 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 2.810 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#21 2.856 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.860 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.884 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 2.885 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 2.889 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.896 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.012 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.017 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", + "#21 3.106 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.110 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#21 3.124 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.129 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#21 3.155 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.159 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#21 3.184 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.189 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 3.226 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.230 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", + "#21 3.817 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", + "#21 3.822 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", + "#21 3.848 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", + "#21 3.863 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 104.9 MB/s eta 0:00:00\n", + "#21 3.868 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 3.886 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 115.5 MB/s eta 0:00:00\n", + "#21 3.896 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.928 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 116.2 MB/s eta 0:00:00\n", + "#21 3.934 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 4.103 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 112.1 MB/s eta 0:00:00\n", + "#21 4.112 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 4.141 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 95.7 MB/s eta 0:00:00\n", + "#21 4.151 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 4.640 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 108.5 MB/s eta 0:00:00\n", + "#21 4.649 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", + "#21 4.803 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 98.1 MB/s eta 0:00:00\n", + "#21 4.811 Downloading numpy_stl-3.2.0-py3-none-any.whl (20 kB)\n", + "#21 4.816 Downloading trimesh-4.6.0-py3-none-any.whl (706 kB)\n", + "#21 4.826 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 707.0/707.0 kB 141.2 MB/s eta 0:00:00\n", + "#21 4.833 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 12.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 84.6 MB/s eta 0:00:00\n", + "#21 12.83 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 15.99 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 114.6 MB/s eta 0:00:00\n", + "#21 15.99 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 16.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.7 MB/s eta 0:00:00\n", + "#21 16.13 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 16.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.6 MB/s eta 0:00:00\n", + "#21 16.34 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 16.36 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 127.5 MB/s eta 0:00:00\n", + "#21 16.36 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 22.23 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 109.9 MB/s eta 0:00:00\n", + "#21 22.24 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 24.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 104.8 MB/s eta 0:00:00\n", + "#21 24.27 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 24.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 114.1 MB/s eta 0:00:00\n", + "#21 24.77 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 25.91 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 112.5 MB/s eta 0:00:00\n", + "#21 25.92 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 27.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 115.7 MB/s eta 0:00:00\n", + "#21 27.73 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 29.05 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 114.0 MB/s eta 0:00:00\n", + "#21 29.06 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 30.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 116.5 MB/s eta 0:00:00\n", + "#21 30.69 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 30.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.2 MB/s eta 0:00:00\n", + "#21 30.89 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 30.89 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 30.95 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 116.5 MB/s eta 0:00:00\n", + "#21 30.96 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 33.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 100.3 MB/s eta 0:00:00\n", + "#21 33.50 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", + "#21 33.96 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 89.8 MB/s eta 0:00:00\n", + "#21 33.96 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#21 33.97 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", + "#21 35.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 86.0 MB/s eta 0:00:00\n", + "#21 35.03 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", + "#21 35.04 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 35.05 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", + "#21 35.05 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", + "#21 35.06 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 35.08 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 121.0 MB/s eta 0:00:00\n", + "#21 35.08 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", + "#21 35.09 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "#21 35.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 117.8 MB/s eta 0:00:00\n", + "#21 35.14 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#21 35.15 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 35.18 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 117.6 MB/s eta 0:00:00\n", + "#21 35.19 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", + "#21 35.19 Downloading python_utils-3.9.1-py2.py3-none-any.whl (32 kB)\n", + "#21 35.20 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#21 35.21 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 148.8 MB/s eta 0:00:00\n", + "#21 35.21 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#21 35.22 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", + "#21 35.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 117.2 MB/s eta 0:00:00\n", + "#21 35.57 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", + "#21 35.58 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", + "#21 35.59 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#21 35.59 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", + "#21 35.60 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", + "#21 35.60 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", + "#21 35.61 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#21 35.62 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#21 35.62 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#21 35.63 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 35.63 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 35.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 117.8 MB/s eta 0:00:00\n", + "#21 35.64 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", + "#21 35.65 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", + "#21 35.67 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 110.5 MB/s eta 0:00:00\n", + "#21 35.68 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", + "#21 35.68 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", + "#21 43.57 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, trimesh, tifffile, scipy, requests, python-utils, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, lazy-loader, jinja2, imageio, cupy-cuda12x, scikit-image, pydantic, nvidia-cusolver-cu12, numpy-stl, highdicom, torch, python-on-whales, monai, holoscan\n", + "#21 112.3 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 imageio-2.37.0 importlib-resources-6.5.2 jinja2-3.1.5 lazy-loader-0.4 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 numpy-stl-3.2.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 python-utils-3.9.1 pyyaml-6.0.2 requests-2.32.3 scikit-image-0.25.1 scipy-1.15.1 sympy-1.13.1 tifffile-2025.1.10 torch-2.6.0 trimesh-4.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", + "#21 DONE 114.1s\n", "\n", "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.008 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.231 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.245 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.265 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.267 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.6.0)\n", - "#22 1.308 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.312 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.411 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.416 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.447 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.3.1)\n", - "#22 1.448 Requirement already satisfied: cupy-cuda12x==12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (12.2.0)\n", - "#22 1.449 Requirement already satisfied: cloudpickle==2.2.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.2.1)\n", - "#22 1.450 Requirement already satisfied: python-on-whales==0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.60.1)\n", - "#22 1.451 Requirement already satisfied: Jinja2==3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.3)\n", - "#22 1.452 Requirement already satisfied: packaging==23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (23.1)\n", - "#22 1.460 Requirement already satisfied: pyyaml==6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0)\n", - "#22 1.460 Requirement already satisfied: requests==2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.31.0)\n", - "#22 1.460 Requirement already satisfied: psutil==6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.0)\n", - "#22 1.460 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.461 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x==12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.464 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2==3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.471 Requirement already satisfied: pydantic<2,>=1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.10.21)\n", - "#22 1.471 Requirement already satisfied: tqdm in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.67.1)\n", - "#22 1.472 Requirement already satisfied: typer>=0.4.1 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.15.1)\n", - "#22 1.473 Requirement already satisfied: typing-extensions in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.478 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.479 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.480 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.480 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests==2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.488 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.16.1)\n", - "#22 1.502 Requirement already satisfied: click>=8.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (8.1.8)\n", - "#22 1.503 Requirement already satisfied: shellingham>=1.3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (1.5.4)\n", - "#22 1.503 Requirement already satisfied: rich>=10.11.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.9.4)\n", - "#22 1.523 Requirement already satisfied: markdown-it-py>=2.2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.0)\n", - "#22 1.523 Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/holoscan/.local/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.19.1)\n", - "#22 1.534 Requirement already satisfied: mdurl~=0.1 in /home/holoscan/.local/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales==0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.1.2)\n", - "#22 1.545 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.567 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.587 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 1.840 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 1.998 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.3s\n", + "#22 1.281 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 1.447 Collecting monai-deploy-app-sdk==2.0.0\n", + "#22 1.474 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", + "#22 1.501 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", + "#22 1.503 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", + "#22 1.544 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", + "#22 1.549 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#22 1.627 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", + "#22 1.632 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", + "#22 1.655 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", + "#22 1.656 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", + "#22 1.658 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", + "#22 1.659 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", + "#22 1.660 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", + "#22 1.661 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", + "#22 1.662 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", + "#22 1.662 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", + "#22 1.663 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", + "#22 1.664 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", + "#22 1.670 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", + "#22 1.678 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", + "#22 1.680 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", + "#22 1.687 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", + "#22 1.692 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", + "#22 1.693 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", + "#22 1.694 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", + "#22 1.694 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", + "#22 1.697 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", + "#22 1.713 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", + "#22 1.715 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", + "#22 1.734 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", + "#22 1.762 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.784 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", + "#22 2.132 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", + "#22 2.316 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", + "#22 DONE 2.7s\n", "\n", "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", "#23 DONE 0.2s\n", @@ -1804,91 +1786,92 @@ "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 206.6s done\n", - "#28 exporting manifest sha256:de74699b1b4bee4575b62eecd49ecfde88d19159cf9c7f763df12fca4075ad22 0.0s done\n", - "#28 exporting config sha256:b8bb49a5eafd7b437a1dec0e8efd625a3c1820ec728f129f3182548b8ed45290 0.0s done\n", + "#28 exporting layers 211.4s done\n", + "#28 exporting manifest sha256:9912b1b79735694e28133b372df9befe4a729581a452a6ab2ad63b786c87a253 0.0s done\n", + "#28 exporting config sha256:fa77b2f3975cd2da99ca7aabe147114e6dd897a3c7e6f129d44599b80cb260b6 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer 3b1a9c7c51bd 319B / 319B\n", - "#29 loading layer 958003a9d9c8 65.54kB / 5.03MB\n", - "#29 loading layer 48d2f180fed0 557.06kB / 3.34GB\n", - "#29 loading layer 48d2f180fed0 145.39MB / 3.34GB 6.2s\n", - "#29 loading layer 48d2f180fed0 375.46MB / 3.34GB 12.4s\n", - "#29 loading layer 48d2f180fed0 633.37MB / 3.34GB 16.5s\n", - "#29 loading layer 48d2f180fed0 890.73MB / 3.34GB 20.6s\n", - "#29 loading layer 48d2f180fed0 1.17GB / 3.34GB 26.8s\n", - "#29 loading layer 48d2f180fed0 1.40GB / 3.34GB 30.9s\n", - "#29 loading layer 48d2f180fed0 1.70GB / 3.34GB 34.9s\n", - "#29 loading layer 48d2f180fed0 2.01GB / 3.34GB 38.9s\n", - "#29 loading layer 48d2f180fed0 2.19GB / 3.34GB 45.2s\n", - "#29 loading layer 48d2f180fed0 2.34GB / 3.34GB 51.6s\n", - "#29 loading layer 48d2f180fed0 2.56GB / 3.34GB 57.8s\n", - "#29 loading layer 48d2f180fed0 2.82GB / 3.34GB 61.8s\n", - "#29 loading layer 48d2f180fed0 3.05GB / 3.34GB 65.9s\n", - "#29 loading layer 48d2f180fed0 3.26GB / 3.34GB 72.0s\n", - "#29 loading layer 61a09154a063 32.77kB / 579.09kB\n", - "#29 loading layer fb5de645c082 196.61kB / 17.81MB\n", - "#29 loading layer 7277d541a3c8 492B / 492B\n", - "#29 loading layer 6625913413e5 315B / 315B\n", - "#29 loading layer 78faa330ac0a 303B / 303B\n", - "#29 loading layer b0f8d0fbc279 3.36kB / 3.36kB\n", - "#29 loading layer 3b1a9c7c51bd 319B / 319B 76.8s done\n", - "#29 loading layer 958003a9d9c8 65.54kB / 5.03MB 76.6s done\n", - "#29 loading layer 48d2f180fed0 3.32GB / 3.34GB 76.1s done\n", - "#29 loading layer 61a09154a063 32.77kB / 579.09kB 0.9s done\n", - "#29 loading layer fb5de645c082 196.61kB / 17.81MB 0.8s done\n", - "#29 loading layer 7277d541a3c8 492B / 492B 0.5s done\n", - "#29 loading layer 6625913413e5 315B / 315B 0.5s done\n", - "#29 loading layer 78faa330ac0a 303B / 303B 0.5s done\n", - "#29 loading layer b0f8d0fbc279 3.36kB / 3.36kB 0.4s done\n", - "#29 DONE 76.8s\n", + "#29 loading layer f1af28197cc7 320B / 320B\n", + "#29 loading layer 20850dd17414 65.54kB / 5.10MB\n", + "#29 loading layer b9f62cf91cea 557.06kB / 3.40GB\n", + "#29 loading layer b9f62cf91cea 144.83MB / 3.40GB 6.4s\n", + "#29 loading layer b9f62cf91cea 353.17MB / 3.40GB 12.6s\n", + "#29 loading layer b9f62cf91cea 531.43MB / 3.40GB 16.7s\n", + "#29 loading layer b9f62cf91cea 759.27MB / 3.40GB 20.7s\n", + "#29 loading layer b9f62cf91cea 964.82MB / 3.40GB 24.8s\n", + "#29 loading layer b9f62cf91cea 1.20GB / 3.40GB 28.8s\n", + "#29 loading layer b9f62cf91cea 1.40GB / 3.40GB 33.0s\n", + "#29 loading layer b9f62cf91cea 1.66GB / 3.40GB 37.1s\n", + "#29 loading layer b9f62cf91cea 1.86GB / 3.40GB 41.2s\n", + "#29 loading layer b9f62cf91cea 2.17GB / 3.40GB 45.4s\n", + "#29 loading layer b9f62cf91cea 2.35GB / 3.40GB 51.7s\n", + "#29 loading layer b9f62cf91cea 2.38GB / 3.40GB 56.8s\n", + "#29 loading layer b9f62cf91cea 2.62GB / 3.40GB 63.0s\n", + "#29 loading layer b9f62cf91cea 2.88GB / 3.40GB 67.1s\n", + "#29 loading layer b9f62cf91cea 3.13GB / 3.40GB 71.4s\n", + "#29 loading layer b9f62cf91cea 3.31GB / 3.40GB 77.5s\n", + "#29 loading layer 00a02d1497ac 32.77kB / 578.05kB\n", + "#29 loading layer c39f31c9dcbe 196.61kB / 17.81MB\n", + "#29 loading layer c27d336afe81 492B / 492B\n", + "#29 loading layer ad1723897556 315B / 315B\n", + "#29 loading layer c4a750e42b61 302B / 302B\n", + "#29 loading layer 8d8c67a7dde8 3.36kB / 3.36kB\n", + "#29 loading layer f1af28197cc7 320B / 320B 81.6s done\n", + "#29 loading layer 20850dd17414 65.54kB / 5.10MB 81.5s done\n", + "#29 loading layer b9f62cf91cea 3.31GB / 3.40GB 80.9s done\n", + "#29 loading layer 00a02d1497ac 32.77kB / 578.05kB 1.0s done\n", + "#29 loading layer c39f31c9dcbe 196.61kB / 17.81MB 0.8s done\n", + "#29 loading layer c27d336afe81 492B / 492B 0.5s done\n", + "#29 loading layer ad1723897556 315B / 315B 0.5s done\n", + "#29 loading layer c4a750e42b61 302B / 302B 0.4s done\n", + "#29 loading layer 8d8c67a7dde8 3.36kB / 3.36kB 0.4s done\n", + "#29 DONE 81.6s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 118.0s done\n", - "#28 DONE 324.7s\n", + "#28 sending tarball 124.3s done\n", + "#28 DONE 335.8s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:1463ead657ebd5f00bff6269e7c4941ffcd2c60dc04c0d5f77be0805653d5431\n", - "#30 writing layer sha256:1463ead657ebd5f00bff6269e7c4941ffcd2c60dc04c0d5f77be0805653d5431 0.0s done\n", + "#30 writing layer sha256:0514616033bece7aa07be14e038e2deaff1febaded164a7df509159ddeb68afb\n", + "#30 writing layer sha256:0514616033bece7aa07be14e038e2deaff1febaded164a7df509159ddeb68afb 0.0s done\n", + "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", + "#30 writing layer sha256:10dca05c4c1d17a0351e6109694f44743a7fab7484c2096ac9e4e6f83d455964 0.1s done\n", "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:1fe4071e2ad799635d2363506eab826a132ddd1465cee089bf81dd9bdd1b18ed 0.0s done\n", "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:41e173df84c503c9e717e0e67c22260d4e6bb14660577b225dec5733b4155a78 done\n", + "#30 writing layer sha256:400106ccc6c0e4c57943fea0ee16adf7d7f37bc155b2a8a704b41ad227590e75 0.1s done\n", + "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2\n", + "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", + "#30 writing layer sha256:4d62fb97f3e572427881e00c0d7d2424446cf788a2ff1e7a5864b790880d37bc 0.0s done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:55dfcbd41d825f3bdf939dc395f59941aa6dcb8a6d70cd502706586a3378f199 0.0s done\n", "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707 done\n", + "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", + "#30 writing layer sha256:8e8eda206fe85e2e966fe8e06f6acba89eaf2e6b6cddb66e3e84fc0efc9c6906 0.0s done\n", "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:9e2695ac904b74c0ac2124b2d3787566353a878d987e857a058dc4942c05795f\n", - "#30 writing layer sha256:9e2695ac904b74c0ac2124b2d3787566353a878d987e857a058dc4942c05795f 40.7s done\n", + "#30 writing layer sha256:a8fe21bec5ef4d30051879815a94c399cea9a8a7c5e62d0b2d8dc6ab35851f40\n", + "#30 writing layer sha256:a8fe21bec5ef4d30051879815a94c399cea9a8a7c5e62d0b2d8dc6ab35851f40 0.3s done\n", "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:acac0a5fdd7a787bb7420c78469973897c8f5fbf1ffe00dbf9607cfce403409e\n", - "#30 writing layer sha256:acac0a5fdd7a787bb7420c78469973897c8f5fbf1ffe00dbf9607cfce403409e 0.3s done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044\n", "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:beec7402c8dda7aeb1553458378da5f7ca8d25cbe7d82ed2370d19a7ae2fa930 0.0s done\n", - "#30 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94 done\n", - "#30 writing layer sha256:c8937b741c9ecd6b257aeb18daf07eddbf1c77b0c93f9ba4164faa8353cd1d3c done\n", + "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", + "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:e085183b6ee8ab9c39259c2a4ad46084acb593751832393af1e0b2d1b98a009b 0.0s done\n", - "#30 writing layer sha256:e540d242f419a27800d601d7275f4fbb3488b97d209b454f52e63f1eb413a912 done\n", + "#30 writing layer sha256:dbe5a881b951fb16a98081093b857b9127105681762f778e9ff16b31ffb07055 0.0s done\n", "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing layer sha256:f08ebe0cc28258259e420b22fa0a6e5458acec5f4dc7e13adfce2e01a7284802 0.1s done\n", - "#30 writing layer sha256:f85b662020c5951673d9126c6fed3e887bafc19d949854178592049197a2a5e1\n", - "#30 preparing build cache for export 41.5s done\n", - "#30 writing layer sha256:f85b662020c5951673d9126c6fed3e887bafc19d949854178592049197a2a5e1 0.0s done\n", - "#30 writing config sha256:70b797e9170b15a4b072f80d4653416ffe200049a339c6a471f3824e3c5b6c8f 0.0s done\n", - "#30 writing cache manifest sha256:a6c804e0720ef0eeec54b05a0ac4f0094a44c365e5fe55021bcfa06a1620bfb7 0.0s done\n", - "#30 DONE 41.5s\n", - "[2025-01-16 18:55:45,052] [INFO] (packager) - Build Summary:\n", + "#30 writing layer sha256:f734d777b5a1efc673bfc51bbe4634866e8b0c1735a3ba60913a1c95b8f85844 0.0s done\n", + "#30 writing layer sha256:fcc4d28973337beed9179216a0a6c14235ef3508532b9ebe1f727a9f684c5ab5\n", + "#30 writing layer sha256:fcc4d28973337beed9179216a0a6c14235ef3508532b9ebe1f727a9f684c5ab5 49.9s done\n", + "#30 preparing build cache for export 50.7s done\n", + "#30 writing config sha256:fb02d957d3bc2e55f202f36038ebe4b6dd16cd559d9a96a331e39ae6f5e63b3c 0.0s done\n", + "#30 writing cache manifest sha256:a97d212bf82fe3968fa658499603f14288678605e74c4bf6a3ae8e306dd1f1ff 0.0s done\n", + "#30 DONE 50.7s\n", + "[2025-01-29 14:54:01,342] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1919,7 +1902,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 b8bb49a5eafd 6 minutes ago 8.64GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 fa77b2f3975c 6 minutes ago 8.82GB\n" ] } ], @@ -2001,16 +1984,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-17 02:55:48 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-01-29 22:54:05 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-17 02:55:48 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-17 02:55:48 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-17 02:55:48 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-01-29 22:54:05 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-01-29 22:54:05 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-01-29 22:54:05 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-17 02:55:48 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-01-29 22:54:05 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2025-01-17 02:55:48 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-17 02:55:48 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-01-29 22:54:05 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-01-29 22:54:05 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -2042,22 +2025,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-16 18:55:50,604] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-16 18:55:50,604] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-01-29 14:54:07,456] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-29 14:54:07,456] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-16 18:55:50,604] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-01-29 14:54:07,457] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-16 18:55:50,605] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-01-29 14:54:07,457] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-16 18:55:50,728] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpruj04c90/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpruj04c90/pkg.json\n", - "[2025-01-16 18:55:51,051] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-01-29 14:54:07,521] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpieorgxpy/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpieorgxpy/pkg.json\n", + "969dfb951c65e83ccab09c48eaad70245f27a19206b7c42f68cf2020047ab48a\n", + "[2025-01-29 14:54:07,774] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-16 18:55:51,051] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-01-29 14:54:07,774] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-16 18:55:51,518] [INFO] (common) - Launching container (ce1a8045e4e0) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: zealous_euler\n", + "[2025-01-29 14:54:08,049] [INFO] (common) - Launching container (b7f0dfdee19f) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: peaceful_bose\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2067,105 +2051,119 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-17 02:55:52 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-01-29 22:54:08 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[info] [fragment.cpp:585] Loading extensions from configs...\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:255] Creating context\n", + "[info] [gxf_executor.cpp:264] Creating context\n", "\n", - "[2025-01-17 02:56:03,227] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2025-01-29 22:54:16,150] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2025-01-17 02:56:03,235] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2025-01-29 22:54:16,156] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2025-01-17 02:56:03,238] [INFO] (root) - End compose\n", + "[2025-01-29 22:54:16,159] [INFO] (root) - End compose\n", "\n", - "[info] [app_driver.cpp:1176] Launching the driver/health checking service\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", "\n", - "[info] [gxf_executor.cpp:1973] Activating Graph...\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", "\n", - "[info] [gxf_executor.cpp:2003] Running Graph...\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", "\n", - "[info] [gxf_executor.cpp:2005] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", "\n", - "[2025-01-17 02:56:03,245] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", "\n", - "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", + "[2025-01-29 22:54:16,194] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2025-01-17 02:56:03,770] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 22:54:17,214] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2025-01-17 02:56:03,770] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 22:54:17,214] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2025-01-17 02:56:03,770] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 22:54:17,214] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-17 02:56:03,770] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-17 02:56:03,770] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2025-01-17 02:56:03,770] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-17 02:56:03,770] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-17 02:56:03,770] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-17 02:56:03,770] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-17 02:56:03,771] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-17 02:56:03,771] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-17 02:56:03,771] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-17 02:56:03,771] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 22:54:17,215] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-17 02:56:04,126] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", + "[2025-01-29 22:54:18,043] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", "\n", " warnings.warn(\n", "\n", - "[2025-01-17 02:56:07,907] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", + "[2025-01-29 22:54:21,728] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", "\n", - "[2025-01-17 02:56:09,756] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-01-29 22:54:23,417] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", "\n", - "[2025-01-17 02:56:09,756] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-01-29 22:54:23,417] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " check_person_name(patient_name)\n", "\n", - "[2025-01-17 02:56:22,312] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 02:56:22,313] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-17 02:56:22,314] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-17 02:56:22,314] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2008] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2016] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", "\n", - "[2025-01-17 02:56:22,447] [INFO] (app.AISpleenSegApp) - End run\n", + "[2025-01-29 22:54:38,864] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[2025-01-16 18:56:24,275] [INFO] (common) - Container 'zealous_euler'(ce1a8045e4e0) exited.\n" + "[2025-01-29 14:54:40,627] [INFO] (common) - Container 'peaceful_bose'(b7f0dfdee19f) exited.\n" ] } ], @@ -2184,7 +2182,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.91784675609868036211230217438685119.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.91779897402861840368941310038395885.dcm stl\n" ] } ], diff --git a/notebooks/tutorials/05_multi_model_app.ipynb b/notebooks/tutorials/05_multi_model_app.ipynb index f9c880bb..0edc6d75 100644 --- a/notebooks/tutorials/05_multi_model_app.ipynb +++ b/notebooks/tutorials/05_multi_model_app.ipynb @@ -19,7 +19,7 @@ "\n", "## Required Model File Organization\n", "\n", - "- The model files in TorchScript, be it MONAI Bundle compliant or not, must each be placed in an uniquely named folder. The name of this folder becomes the name of the loaded model network in the application, and is used by the application to retieve the network via the execution context.\n", + "- The model files in TorchScript, be it MONAI Bundle compliant or not, must each be placed in an uniquely named folder. The name of this folder becomes the name of the loaded model network in the application, and is used by the application to retrieve the network via the execution context.\n", "- The folders containing the individual model file must then be placed under a parent folder. The name of this folder is chosen by the application developer.\n", "- The path of the aforementioned parent folder is used to set the well-known environment variable for the model path, `HOLOSCAN_MODEL_PATH`, when the application is directly run as a program.\n", "- When the application is packaged as an MONAI Application Package (MAP), the parent folder is used as the model path, and the Packager copies all of the sub folders to the well-known `models` folder in the MAP.\n", @@ -382,9 +382,7 @@ " inflating: dcm/1-202.dcm \n", " inflating: dcm/1-203.dcm \n", " inflating: dcm/1-204.dcm \n", - " creating: multi_models/pancreas_ct_dints/\n", " inflating: multi_models/pancreas_ct_dints/model.ts \n", - " creating: multi_models/spleen_ct/\n", " inflating: multi_models/spleen_ct/model.ts \n" ] } @@ -732,70 +730,70 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 18:59:35,461] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-16 18:59:35,473] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2025-01-16 18:59:35,478] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:262] Creating context\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2178] Activating Graph...\n", - "[info] [gxf_executor.cpp:2208] Running Graph...\n", - "[info] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 14:58:28,687] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", + "[2025-01-29 14:58:28,703] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", + "[2025-01-29 14:58:28,709] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", - "[2025-01-16 18:59:35,490] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-16 18:59:35,847] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-16 18:59:35,849] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 14:58:28,793] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-29 14:58:29,154] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 14:58:29,155] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-16 18:59:35,850] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 18:59:35,851] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-16 18:59:35,852] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-16 18:59:35,854] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:59:35,854] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-16 18:59:35,855] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-16 18:59:35,856] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:59:35,857] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-16 18:59:35,857] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-16 18:59:35,858] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 18:59:35,859] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 18:59:36,183] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2025-01-29 14:58:29,156] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:58:29,157] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:58:29,157] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 14:58:29,158] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:58:29,159] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 14:58:29,160] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 14:58:29,160] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:58:29,161] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:58:29,163] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 14:58:29,164] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:58:29,165] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:58:29,932] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-16 19:00:12,120] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "[2025-01-29 14:59:07,045] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-16 19:00:16,095] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:00:16,096] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-16 19:00:16,097] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:00:16,097] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-16 19:00:16,098] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-16 19:00:16,100] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:00:16,101] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-16 19:00:16,102] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-16 19:00:16,103] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2025-01-16 19:00:17,716] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:00:17,717] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-16 19:00:17,719] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:00:17,720] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-16 19:00:17,721] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-16 19:00:17,722] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:00:17,723] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-16 19:00:17,724] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-16 19:00:17,725] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 14:59:11,588] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:59:11,589] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 14:59:11,590] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:59:11,591] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 14:59:11,592] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 14:59:11,593] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:59:11,594] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 14:59:11,596] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 14:59:11,599] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 14:59:12,924] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:59:12,925] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 14:59:12,926] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:59:12,926] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 14:59:12,928] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 14:59:12,930] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 14:59:12,932] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 14:59:12,934] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 14:59:12,936] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[2025-01-16 19:00:17,896] [INFO] (__main__.App) - End run\n" + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[2025-01-29 14:59:13,097] [INFO] (__main__.App) - End run\n" ] } ], @@ -1167,70 +1165,70 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:588] Loading extensions from configs...\n", - "[2025-01-16 19:00:24,384] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2025-01-16 19:00:24,396] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2025-01-16 19:00:24,400] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:262] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1767] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2178] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2210] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-01-29 14:59:22,117] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", + "[2025-01-29 14:59:22,124] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", + "[2025-01-29 14:59:22,127] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", - "[2025-01-16 19:00:24,415] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-16 19:00:24,984] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 14:59:22,158] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-29 14:59:23,236] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-16 19:00:24,985] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-16 19:00:25,298] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 14:59:23,237] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 14:59:23,521] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-16 19:01:01,037] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "[2025-01-29 15:00:02,766] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-16 19:01:05,078] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:01:05,078] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-16 19:01:05,078] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:01:05,078] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-16 19:01:05,079] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-16 19:01:05,079] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:01:05,079] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-16 19:01:05,079] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-16 19:01:05,079] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2025-01-16 19:01:06,446] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:01:06,446] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-16 19:01:06,447] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:01:06,447] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-16 19:01:06,447] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-16 19:01:06,447] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-16 19:01:06,447] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-16 19:01:06,448] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-16 19:01:06,448] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 15:00:08,663] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 15:00:08,663] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2213] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2221] Graph execution finished.\n", - "[2025-01-16 19:01:06,563] [INFO] (app.App) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[2025-01-29 15:00:08,802] [INFO] (app.App) - End run\n" ] } ], @@ -1248,8 +1246,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.12613710869113605034325699781803316.dcm\n", - "1.2.826.0.1.3680043.10.511.3.31351518962673345162507339120095105.dcm\n" + "1.2.826.0.1.3680043.10.511.3.6770039896233970278223165829656417.dcm\n", + "1.2.826.0.1.3680043.10.511.3.99914275872478204692034716344119025.dcm\n" ] } ], @@ -1327,7 +1325,7 @@ "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", "torch>=1.12.0\n", - "holoscan==2.6.0 # avoid v2.7 and v2.8 for a known issue\n" + "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue\n" ] }, { @@ -1350,17 +1348,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-16 19:01:09,441] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-16 19:01:09,679] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-16 19:01:09,680] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-16 19:01:09,680] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-16 19:01:09,681] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", - "[2025-01-16 19:01:09,681] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", - "[2025-01-16 19:01:09,681] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", - "[2025-01-16 19:01:09,681] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-16 19:01:09,687] [INFO] (packager) - Generating app.json...\n", - "[2025-01-16 19:01:09,688] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-16 19:01:09,692] [DEBUG] (common) - \n", + "[2025-01-29 15:00:11,881] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-01-29 15:00:12,062] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-01-29 15:00:12,063] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-01-29 15:00:12,063] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-01-29 15:00:12,064] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", + "[2025-01-29 15:00:12,064] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", + "[2025-01-29 15:00:12,064] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", + "[2025-01-29 15:00:12,064] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-01-29 15:00:12,071] [INFO] (packager) - Generating app.json...\n", + "[2025-01-29 15:00:12,071] [INFO] (packager) - Generating pkg.json...\n", + "[2025-01-29 15:00:12,075] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1395,7 +1393,7 @@ "}\n", "================ End app.json ================\n", " \n", - "[2025-01-16 19:01:09,693] [DEBUG] (common) - \n", + "[2025-01-29 15:00:12,076] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1416,7 +1414,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-16 19:01:10,251] [DEBUG] (packager.builder) - \n", + "[2025-01-29 15:00:12,629] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1434,7 +1432,7 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.8.0',\n", + " 'holoscan_sdk_version': '2.9.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", @@ -1459,7 +1457,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-16 19:01:10,252] [DEBUG] (packager.builder) - \n", + "[2025-01-29 15:00:12,629] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -1469,15 +1467,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.8.0',\n", - " 'holoscan_sdk_filename': '2.8.0',\n", + " 'holoscan_sdk_file': '2.9.0',\n", + " 'holoscan_sdk_filename': '2.9.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-16 19:01:10,293] [DEBUG] (packager.builder) - \n", + "[2025-01-29 15:00:12,672] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1541,7 +1539,7 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Multi Model App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.8.0\"\n", + "LABEL org.nvidia.holoscan=\"2.9.0\"\n", "\n", "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", "\n", @@ -1556,7 +1554,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.8.0\n", + "ENV HOLOSCAN_VERSION=2.9.0\n", "\n", "\n", "\n", @@ -1631,7 +1629,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-16 19:01:10,294] [INFO] (packager.builder) - \n", + "[2025-01-29 15:00:12,672] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1639,21 +1637,22 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.8.0\n", + " Holoscan SDK Package: 2.9.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.8.0\n", + " SDK Version: 2.9.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-16 19:01:10,575] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-16 19:01:10,575] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-01-29 15:00:13,368] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-01-29 15:00:13,368] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 4.55kB done\n", - "#1 DONE 0.1s\n", + "#1 transferring dockerfile:\n", + "#1 transferring dockerfile: 4.55kB 0.0s done\n", + "#1 DONE 0.4s\n", "\n", "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", "#2 DONE 0.0s\n", @@ -1662,77 +1661,298 @@ "#3 DONE 0.5s\n", "\n", "#4 [internal] load .dockerignore\n", - "#4 transferring context: 1.79kB done\n", + "#4 transferring context: 1.80kB done\n", "#4 DONE 0.1s\n", "\n", - "#5 [internal] load build context\n", - "#5 DONE 0.0s\n", + "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#5 ...\n", "\n", - "#6 importing cache manifest from local:13796336242616328264\n", - "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#7 DONE 0.3s\n", + "#7 importing cache manifest from local:16203137030623613086\n", + "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#7 DONE 0.0s\n", "\n", "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.3s done\n", - "#8 DONE 0.4s\n", + "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", + "#8 DONE 0.0s\n", "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 609.10MB 4.3s\n", - "#5 transferring context: 635.92MB 4.5s done\n", - "#5 DONE 4.9s\n", + "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#5 DONE 0.4s\n", "\n", - "#9 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#6 [internal] load build context\n", + "#6 transferring context: 635.92MB 4.4s done\n", + "#6 DONE 4.6s\n", + "\n", + "#9 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#9 CACHED\n", "\n", - "#10 [release 11/18] RUN pip install --upgrade pip\n", + "#10 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#10 CACHED\n", "\n", - "#11 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#11 [release 6/18] WORKDIR /var/holoscan\n", "#11 CACHED\n", "\n", - "#12 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#12 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#13 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#13 CACHED\n", "\n", - "#14 [release 6/18] WORKDIR /var/holoscan\n", + "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#14 CACHED\n", "\n", - "#15 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#15 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#15 CACHED\n", "\n", - "#16 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#16 [release 9/18] WORKDIR /var/holoscan\n", "#16 CACHED\n", "\n", - "#17 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#17 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#17 CACHED\n", "\n", - "#18 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#18 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#18 CACHED\n", "\n", - "#19 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#19 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#19 CACHED\n", "\n", - "#20 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#20 [release 11/18] RUN pip install --upgrade pip\n", "#20 CACHED\n", "\n", - "#21 [release 9/18] WORKDIR /var/holoscan\n", - "#21 CACHED\n", + "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 1.022 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 1.037 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", + "#21 1.121 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 1.127 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 1.262 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 1.267 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.541 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.546 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.564 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.570 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.579 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.627 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.631 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.662 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.667 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.682 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 9))\n", + "#21 1.686 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", + "#21 1.823 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.827 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", + "#21 1.847 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.852 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.871 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.874 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.883 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.886 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.917 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.922 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.982 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.986 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#21 2.023 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.027 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.066 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.071 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 2.103 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.110 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", + "#21 2.137 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.141 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.219 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.223 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.235 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.240 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.247 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.251 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.271 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.276 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.287 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.291 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.301 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.304 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.313 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.317 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.325 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.328 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.339 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.342 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.348 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.351 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.359 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.363 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.377 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.382 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.396 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.401 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.418 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.423 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 2.445 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.450 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 2.488 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.492 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 2.502 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9)) (25.0)\n", + "#21 2.517 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.523 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", + "#21 2.564 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.568 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#21 2.669 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.673 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", + "#21 2.707 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.711 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#21 2.742 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.748 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#21 2.862 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.867 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#21 2.884 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.889 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#21 2.939 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.946 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#21 3.034 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 3.040 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 3.057 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 3.058 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 3.064 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.074 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.266 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.271 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", + "#21 3.394 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.398 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#21 3.417 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.426 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#21 3.479 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.484 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#21 3.515 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.520 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", + "#21 3.578 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 3.583 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", + "#21 4.171 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", + "#21 4.175 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", + "#21 4.199 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", + "#21 4.216 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 99.0 MB/s eta 0:00:00\n", + "#21 4.222 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 4.240 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 106.6 MB/s eta 0:00:00\n", + "#21 4.246 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 4.277 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 116.6 MB/s eta 0:00:00\n", + "#21 4.284 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 4.443 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.0 MB/s eta 0:00:00\n", + "#21 4.453 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 4.475 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 119.4 MB/s eta 0:00:00\n", + "#21 4.482 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 5.193 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 74.2 MB/s eta 0:00:00\n", + "#21 5.203 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 12.95 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 95.8 MB/s eta 0:00:00\n", + "#21 12.96 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 16.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 106.8 MB/s eta 0:00:00\n", + "#21 16.34 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 16.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.7 MB/s eta 0:00:00\n", + "#21 16.47 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 16.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.0 MB/s eta 0:00:00\n", + "#21 16.69 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 16.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 148.8 MB/s eta 0:00:00\n", + "#21 16.71 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 23.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 104.7 MB/s eta 0:00:00\n", + "#21 23.30 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 25.14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 115.6 MB/s eta 0:00:00\n", + "#21 25.14 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 25.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 116.8 MB/s eta 0:00:00\n", + "#21 25.64 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 26.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 114.0 MB/s eta 0:00:00\n", + "#21 26.77 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 28.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 110.3 MB/s eta 0:00:00\n", + "#21 28.66 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 30.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 78.8 MB/s eta 0:00:00\n", + "#21 30.58 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 32.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 117.2 MB/s eta 0:00:00\n", + "#21 32.20 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 32.39 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.1 MB/s eta 0:00:00\n", + "#21 32.39 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 32.40 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 32.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 113.4 MB/s eta 0:00:00\n", + "#21 32.47 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 35.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 92.7 MB/s eta 0:00:00\n", + "#21 35.21 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", + "#21 35.74 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 77.7 MB/s eta 0:00:00\n", + "#21 35.75 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#21 35.76 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", + "#21 37.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 68.2 MB/s eta 0:00:00\n", + "#21 37.10 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 37.10 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", + "#21 37.11 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", + "#21 37.11 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", + "#21 37.16 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 116.4 MB/s eta 0:00:00\n", + "#21 37.16 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#21 37.17 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 37.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 119.3 MB/s eta 0:00:00\n", + "#21 37.21 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", + "#21 37.22 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#21 37.24 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 115.0 MB/s eta 0:00:00\n", + "#21 37.25 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#21 37.25 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", + "#21 37.26 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#21 37.26 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", + "#21 37.27 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", + "#21 37.28 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 37.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 118.4 MB/s eta 0:00:00\n", + "#21 37.30 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", + "#21 37.31 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#21 37.31 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#21 37.32 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#21 37.32 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 37.33 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 37.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 168.9 MB/s eta 0:00:00\n", + "#21 37.34 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", + "#21 37.35 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", + "#21 37.37 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 123.9 MB/s eta 0:00:00\n", + "#21 37.38 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", + "#21 37.38 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", + "#21 50.73 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, requests, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, cupy-cuda12x, pydantic, nvidia-cusolver-cu12, highdicom, torch, python-on-whales, monai, holoscan\n", + "#21 120.9 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 importlib-resources-6.5.2 jinja2-3.1.5 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", + "#21 DONE 122.3s\n", "\n", "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 CACHED\n", + "#22 1.371 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 1.566 Collecting monai-deploy-app-sdk==2.0.0\n", + "#22 1.620 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", + "#22 1.653 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.6/132.6 KB 4.9 MB/s eta 0:00:00\n", + "#22 1.673 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", + "#22 1.735 Collecting colorama>=0.4.1\n", + "#22 1.742 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#22 1.803 Collecting typeguard>=3.0.0\n", + "#22 1.807 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", + "#22 1.817 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", + "#22 1.833 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", + "#22 1.834 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", + "#22 1.835 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", + "#22 1.836 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", + "#22 1.837 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", + "#22 1.838 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", + "#22 1.839 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", + "#22 1.839 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", + "#22 1.840 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", + "#22 1.911 Collecting pip>22.0.2\n", + "#22 1.924 Using cached pip-25.0-py3-none-any.whl (1.8 MB)\n", + "#22 1.949 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", + "#22 1.964 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", + "#22 1.968 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", + "#22 1.994 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", + "#22 2.005 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", + "#22 2.007 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", + "#22 2.008 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", + "#22 2.009 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", + "#22 2.018 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", + "#22 2.044 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", + "#22 2.045 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", + "#22 2.491 Installing collected packages: typeguard, pip, colorama, monai-deploy-app-sdk\n", + "#22 3.518 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 pip-25.0 typeguard-4.4.1\n", + "#22 DONE 3.7s\n", "\n", "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 3.7s\n", + "#23 DONE 2.4s\n", "\n", "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.2s\n", + "#24 DONE 0.1s\n", "\n", "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", "#25 DONE 0.1s\n", @@ -1745,90 +1965,94 @@ "\n", "#28 exporting to docker image format\n", "#28 exporting layers\n", - "#28 exporting layers 21.4s done\n", - "#28 exporting manifest sha256:160627d173b89b905ee42134a0bc000786ea24de749605087520765e4d8f75ad 0.0s done\n", - "#28 exporting config sha256:2cec2b8471b737b0a5cc08201001d101e3bf3c0acb122fbc66c3c407e559b849 0.0s done\n", + "#28 exporting layers 206.4s done\n", + "#28 exporting manifest sha256:7796b1f150f7b83d9b887b3a8fc46ac5edde925a0aae4b3502d7637952da2aca 0.0s done\n", + "#28 exporting config sha256:b9c42a576652b4a8d6579e9068e22d8fd09cdc9906a5b6d514c7e958be6f7862 0.0s done\n", "#28 sending tarball\n", "#28 ...\n", "\n", "#29 importing to docker\n", - "#29 loading layer 883c651eec94 288B / 288B\n", - "#29 loading layer 882e8f4cf156 65.54kB / 5.03MB\n", - "#29 loading layer 9f353f6d59ee 557.06kB / 3.28GB\n", - "#29 loading layer 9f353f6d59ee 172.13MB / 3.28GB 6.3s\n", - "#29 loading layer 9f353f6d59ee 450.66MB / 3.28GB 12.5s\n", - "#29 loading layer 9f353f6d59ee 705.79MB / 3.28GB 16.6s\n", - "#29 loading layer 9f353f6d59ee 1.00GB / 3.28GB 20.7s\n", - "#29 loading layer 9f353f6d59ee 1.27GB / 3.28GB 24.8s\n", - "#29 loading layer 9f353f6d59ee 1.58GB / 3.28GB 28.9s\n", - "#29 loading layer 9f353f6d59ee 1.87GB / 3.28GB 33.0s\n", - "#29 loading layer 9f353f6d59ee 2.05GB / 3.28GB 35.1s\n", - "#29 loading layer 9f353f6d59ee 2.16GB / 3.28GB 41.4s\n", - "#29 loading layer 9f353f6d59ee 2.34GB / 3.28GB 45.5s\n", - "#29 loading layer 9f353f6d59ee 2.60GB / 3.28GB 51.7s\n", - "#29 loading layer 9f353f6d59ee 2.87GB / 3.28GB 55.8s\n", - "#29 loading layer 9f353f6d59ee 3.07GB / 3.28GB 59.9s\n", - "#29 loading layer ca1fe5d06ea9 32.77kB / 579.10kB\n", - "#29 loading layer 5b004da2b414 557.06kB / 584.49MB\n", - "#29 loading layer 5b004da2b414 209.45MB / 584.49MB 2.1s\n", - "#29 loading layer 5b004da2b414 422.25MB / 584.49MB 4.2s\n", - "#29 loading layer fef80c23fbdb 491B / 491B\n", - "#29 loading layer c137f7238509 314B / 314B\n", - "#29 loading layer a4ec9d927738 327B / 327B\n", - "#29 loading layer 30d486f32260 4.04kB / 4.04kB\n", - "#29 loading layer c137f7238509 314B / 314B 0.7s done\n", - "#29 loading layer 883c651eec94 288B / 288B 73.6s done\n", - "#29 loading layer 882e8f4cf156 65.54kB / 5.03MB 73.5s done\n", - "#29 loading layer 9f353f6d59ee 3.21GB / 3.28GB 73.0s done\n", - "#29 loading layer ca1fe5d06ea9 32.77kB / 579.10kB 7.2s done\n", - "#29 loading layer 5b004da2b414 422.25MB / 584.49MB 6.6s done\n", - "#29 loading layer fef80c23fbdb 491B / 491B 0.8s done\n", - "#29 loading layer a4ec9d927738 327B / 327B 0.7s done\n", - "#29 loading layer 30d486f32260 4.04kB / 4.04kB 0.6s done\n", - "#29 DONE 73.6s\n", + "#29 loading layer 4e7654462151 557.06kB / 3.34GB\n", + "#29 loading layer 4e7654462151 140.38MB / 3.34GB 6.4s\n", + "#29 loading layer 4e7654462151 350.39MB / 3.34GB 12.7s\n", + "#29 loading layer 4e7654462151 549.26MB / 3.34GB 18.9s\n", + "#29 loading layer 4e7654462151 783.78MB / 3.34GB 23.1s\n", + "#29 loading layer 4e7654462151 968.16MB / 3.34GB 27.2s\n", + "#29 loading layer 4e7654462151 1.19GB / 3.34GB 31.3s\n", + "#29 loading layer 4e7654462151 1.37GB / 3.34GB 35.3s\n", + "#29 loading layer 4e7654462151 1.55GB / 3.34GB 39.4s\n", + "#29 loading layer 4e7654462151 1.80GB / 3.34GB 43.4s\n", + "#29 loading layer 4e7654462151 2.02GB / 3.34GB 47.5s\n", + "#29 loading layer 4e7654462151 2.27GB / 3.34GB 51.6s\n", + "#29 loading layer 4e7654462151 2.31GB / 3.34GB 58.3s\n", + "#29 loading layer 4e7654462151 2.43GB / 3.34GB 64.7s\n", + "#29 loading layer 4e7654462151 2.62GB / 3.34GB 68.7s\n", + "#29 loading layer 4e7654462151 2.86GB / 3.34GB 72.9s\n", + "#29 loading layer 4e7654462151 3.04GB / 3.34GB 77.0s\n", + "#29 loading layer 4e7654462151 3.23GB / 3.34GB 83.2s\n", + "#29 loading layer 23ba8544cc7e 65.54kB / 3.82MB\n", + "#29 loading layer 2a706ddec870 557.06kB / 584.49MB\n", + "#29 loading layer 2a706ddec870 100.83MB / 584.49MB 2.1s\n", + "#29 loading layer 2a706ddec870 289.11MB / 584.49MB 4.1s\n", + "#29 loading layer 2a706ddec870 445.64MB / 584.49MB 6.2s\n", + "#29 loading layer 2a706ddec870 584.49MB / 584.49MB 8.3s\n", + "#29 loading layer 14707cfba07c 492B / 492B\n", + "#29 loading layer d97f86cb4552 313B / 313B\n", + "#29 loading layer 1684cea86f9e 324B / 324B\n", + "#29 loading layer 6a14ef597340 4.04kB / 4.04kB\n", + "#29 loading layer d97f86cb4552 313B / 313B 0.5s done\n", + "#29 loading layer 4e7654462151 3.29GB / 3.34GB 96.8s done\n", + "#29 loading layer 23ba8544cc7e 65.54kB / 3.82MB 9.6s done\n", + "#29 loading layer 2a706ddec870 584.49MB / 584.49MB 8.9s done\n", + "#29 loading layer 14707cfba07c 492B / 492B 0.5s done\n", + "#29 loading layer 1684cea86f9e 324B / 324B 0.4s done\n", + "#29 loading layer 6a14ef597340 4.04kB / 4.04kB 0.3s done\n", + "#29 DONE 96.8s\n", "\n", "#28 exporting to docker image format\n", - "#28 sending tarball 126.9s done\n", - "#28 DONE 148.4s\n", + "#28 sending tarball 144.5s done\n", + "#28 DONE 351.0s\n", "\n", "#30 exporting cache to client directory\n", "#30 preparing build cache for export\n", - "#30 writing layer sha256:081bfe8f8e11e818382810bb80503f619230a484153219082adae168fbf8396c\n", - "#30 writing layer sha256:081bfe8f8e11e818382810bb80503f619230a484153219082adae168fbf8396c done\n", + "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", + "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:2168eca868b33ee70924a8965c5274a65760dc417df35352561a4df9541dbf27 0.0s done\n", "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:3ff1ad619531728d61adb57d27b79c10fa17f13b6a0693730bdf1d1e6d2eb2b0 0.0s done\n", - "#30 writing layer sha256:41e173df84c503c9e717e0e67c22260d4e6bb14660577b225dec5733b4155a78 done\n", - "#30 writing layer sha256:45a11df8fc21851a3008fe386358f1172c0c589095845f174d42bb86db2f1c49 done\n", + "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", + "#30 writing layer sha256:4ef542fe09116c53da73effaa3b0ebc83c3619f95ecea3bdd81b29c92ad0337f 0.0s done\n", "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:56e572a086410ad7549df560616c07004a546b5d93600169fc21e40cd8a6a079 0.0s done\n", + "#30 writing layer sha256:53d193b4273e718bc4bed3199afbc347e3e9e143091139ed90456d0377788704\n", + "#30 writing layer sha256:53d193b4273e718bc4bed3199afbc347e3e9e143091139ed90456d0377788704 53.5s done\n", + "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0\n", "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:89c3a6b85acef5455878126c639a22ed2e674198db08407234d146947e76f697 0.0s done\n", - "#30 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707\n", - "#30 writing layer sha256:94ea8fe9174939142272c5d49e179ba19f357ea997b5d4f3900d1fb7d4fe6707 done\n", + "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", + "#30 writing layer sha256:70d632523e65ac9d5b79c4b1edf7ded894919e27b1af66b6fed294a414b875ab 0.0s done\n", + "#30 writing layer sha256:90d2434bd2896a650e2f9268e355424f72f461e002af093a3e88f9ab55e8e980 0.0s done\n", + "#30 writing layer sha256:9206dd7b04116a7dc5c43818efa3d57c3d9c2bab68366d1098eac0743dbd231b\n", + "#30 writing layer sha256:9206dd7b04116a7dc5c43818efa3d57c3d9c2bab68366d1098eac0743dbd231b 10.4s done\n", + "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885\n", "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:a283c6a8d28511cd9103e071819da40cf00de2cb23de8d683fce476237e7a1f6\n", - "#30 writing layer sha256:a283c6a8d28511cd9103e071819da40cf00de2cb23de8d683fce476237e7a1f6 9.0s done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", - "#30 preparing build cache for export 9.4s done\n", + "#30 writing layer sha256:9f4298c73aaf415f67893215f4cfc6af9688163dfd98172a08fb2d13177eb027 0.0s done\n", + "#30 writing layer sha256:a7292bbf42d93ed9fca9e2ff7e5283d2e7f737dad14092919db7645628bb0838 done\n", + "#30 writing layer sha256:a8560dc90723760d8d4daf42b22f7760b034c87e9348697c113118b992d830ca done\n", "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:bfa5ec525f430f0d201578b006cd216f9bb89f61b91e96b5c2111bb04e7569e4 done\n", - "#30 writing layer sha256:c0e9112106766f6d918279426468ca3a81ddca90d82a7e3e41ed3d96b0464a94 done\n", - "#30 writing layer sha256:c8937b741c9ecd6b257aeb18daf07eddbf1c77b0c93f9ba4164faa8353cd1d3c done\n", + "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", + "#30 writing layer sha256:c44760856749b1b70a3f10d166baa2075f84fe4147e20efdc97ae6b8373575b0 0.1s done\n", + "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd\n", + "#30 preparing build cache for export 64.3s done\n", + "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:e540d242f419a27800d601d7275f4fbb3488b97d209b454f52e63f1eb413a912 done\n", - "#30 writing layer sha256:edd12bb5b9c08c2e288fc295bf1f84feac12beac66caaa8a19956942eb729aef done\n", "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing config sha256:ed69d9ef8eead28b494b1bed44df31c14eac706dab4d5670f81208f0b83550da 0.0s done\n", - "#30 writing cache manifest sha256:d1d2295a784c6dc449ae891839a3fb1d8606f4bc80fe5c05ecaca2454c9ed5df 0.0s done\n", - "#30 DONE 9.4s\n", - "[2025-01-16 19:03:59,507] [INFO] (packager) - Build Summary:\n", + "#30 writing config sha256:826f5efd34c54c319233472ed2d0b701e48d72c65ac5340a90c4583be4465fa7 0.0s done\n", + "#30 writing cache manifest sha256:b26c61f9f724af74f9758287216e114370ea6a82f8f653c7988e3f6dae5b164d 0.0s done\n", + "#30 DONE 64.3s\n", + "[2025-01-29 15:09:25,383] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1859,7 +2083,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 2cec2b8471b7 2 minutes ago 9.07GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 b9c42a576652 6 minutes ago 9.26GB\n" ] } ], @@ -1942,16 +2166,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-17 03:04:04 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-01-29 23:09:29 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-17 03:04:04 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-17 03:04:04 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-17 03:04:04 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-01-29 23:09:29 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-01-29 23:09:29 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-01-29 23:09:29 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-17 03:04:04 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-01-29 23:09:29 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2025-01-17 03:04:05 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-17 03:04:05 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-01-29 23:09:31 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-01-29 23:09:31 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -1983,22 +2207,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-16 19:04:08,393] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-16 19:04:08,393] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-01-29 15:09:34,608] [INFO] (runner) - Checking dependencies...\n", + "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-16 19:04:08,393] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-16 19:04:08,393] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-16 19:04:08,457] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmptukd3uti/app.json\n", - "Successfully copied 2.05kB to /tmp/tmptukd3uti/pkg.json\n", - "[2025-01-16 19:04:08,663] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-01-29 15:09:34,693] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpy9h8ea88/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpy9h8ea88/pkg.json\n", + "2e87441a06e4a01c5fdfaff50540f53f482fd9eed91ae31153adafbd852300e0\n", + "[2025-01-29 15:09:34,990] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-16 19:04:08,664] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-01-29 15:09:34,991] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-16 19:04:09,099] [INFO] (common) - Launching container (6555f263537b) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: amazing_galois\n", + "[2025-01-29 15:09:35,353] [INFO] (common) - Launching container (65c9ea7f2024) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: busy_buck\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2008,119 +2233,137 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-17 03:04:09 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-01-29 23:09:36 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[info] [fragment.cpp:585] Loading extensions from configs...\n", + "[info] [fragment.cpp:599] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:255] Creating context\n", + "[info] [gxf_executor.cpp:264] Creating context\n", "\n", - "[2025-01-17 03:04:13,133] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2025-01-29 23:09:42,422] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2025-01-17 03:04:13,145] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2025-01-29 23:09:42,436] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", "\n", - "[2025-01-17 03:04:13,149] [INFO] (root) - End compose\n", + "[2025-01-29 23:09:42,440] [INFO] (root) - End compose\n", "\n", - "[info] [app_driver.cpp:1176] Launching the driver/health checking service\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", "\n", - "[info] [gxf_executor.cpp:1973] Activating Graph...\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", "\n", - "[info] [gxf_executor.cpp:2003] Running Graph...\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", "\n", - "[info] [gxf_executor.cpp:2005] Waiting for completion...\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", "\n", - "[info] [server.cpp:87] Health checking server listening on 0.0.0.0:8777\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "\n", + "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "\n", + "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "\n", + "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "\n", + "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", "\n", - "[2025-01-17 03:04:13,156] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-01-29 23:09:42,481] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[2025-01-17 03:04:14,111] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-01-29 23:09:43,496] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[2025-01-17 03:04:14,111] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-01-29 23:09:43,496] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", " # of series: 1\n", "\n", - "[2025-01-17 03:04:14,111] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 23:09:43,496] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-17 03:04:14,111] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-01-29 23:09:43,496] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-17 03:04:14,111] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-01-29 23:09:43,496] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2025-01-17 03:04:14,111] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-17 03:04:14,112] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-01-29 23:09:43,497] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-17 03:04:14,112] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-17 03:04:14,112] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-17 03:04:14,112] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-01-29 23:09:43,497] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-17 03:04:14,112] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-17 03:04:14,112] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-17 03:04:14,112] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-01-29 23:09:43,497] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-17 03:04:14,400] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", + "[2025-01-29 23:09:44,150] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", "\n", " warnings.warn(\n", "\n", - "[2025-01-17 03:04:50,442] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", + "[2025-01-29 23:10:20,945] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " check_person_name(patient_name)\n", "\n", - "[2025-01-17 03:04:54,361] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 03:04:54,361] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-17 03:04:54,361] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 03:04:54,361] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-17 03:04:54,362] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-17 03:04:54,362] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 03:04:54,362] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-17 03:04:54,362] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-17 03:04:54,362] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", - "[2025-01-17 03:04:55,604] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 03:04:55,604] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-17 03:04:55,605] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 03:04:55,605] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-17 03:04:55,605] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-17 03:04:55,605] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-17 03:04:55,605] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-17 03:04:55,606] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-17 03:04:55,606] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2008] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2016] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", "\n", - "[2025-01-17 03:04:55,729] [INFO] (app.App) - End run\n", + "[2025-01-29 23:10:26,371] [INFO] (app.App) - End run\n", "\n", - "[2025-01-16 19:04:57,275] [INFO] (common) - Container 'amazing_galois'(6555f263537b) exited.\n" + "[2025-01-29 15:10:28,142] [INFO] (common) - Container 'busy_buck'(65c9ea7f2024) exited.\n" ] } ], @@ -2134,7 +2377,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the output folder are the DICOM segementation files." + "In the output folder are the DICOM segmentation files." ] }, { @@ -2146,8 +2389,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.25768072785891674853459165523063481.dcm\n", - "1.2.826.0.1.3680043.10.511.3.67783934117190980110357640109691807.dcm\n" + "1.2.826.0.1.3680043.10.511.3.64688317802311184609213362007999742.dcm\n", + "1.2.826.0.1.3680043.10.511.3.94198214068593573417987012030437034.dcm\n" ] } ], From d239890dddaaaae12a0c70881be64089b2c8d24b Mon Sep 17 00:00:00 2001 From: Vikash Gupta Date: Tue, 4 Feb 2025 15:02:57 -0800 Subject: [PATCH 077/118] Update README.md (#499) Added citation for our MONAI Deploy App SDK. Signed-off-by: Vikash Gupta Signed-off-by: Simone Bendazzoli --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 8b161a75..016fa9e1 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,10 @@ MONAI Deploy App SDK offers a framework and associated tools to design, develop User guide is available at [docs.monai.io](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/). +## Citation + +If you have used MONAI in your research, please cite us! The citation can be exported from: [https://arxiv.org/abs/2212.14177](https://arxiv.org/abs/2212.14177). + ## Installation To install [the current release](https://pypi.org/project/monai-deploy-app-sdk/), you can simply run: From 36b45d8f8cf771e1fbe5a67ab891b3b6c73ccb6d Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Tue, 4 Feb 2025 18:13:35 -0500 Subject: [PATCH 078/118] DICOMSeriesSelectorOperator Enhancements (#501) * initial commit Signed-off-by: bluna301 * range and RegEx matching added for numerical tags; sop instance # sorting parameter implemented Signed-off-by: bluna301 * series_selector op numerical type cleanup; fixed STL op to change temp_folder declare location per pytype check Signed-off-by: bluna301 * series selector op log + documentation updates Signed-off-by: bluna301 * finalized selected series logs added Signed-off-by: bluna301 --------- Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- .../dicom_series_selector_operator.py | 104 +++++++++++++++--- .../operators/stl_conversion_operator.py | 3 +- 2 files changed, 92 insertions(+), 15 deletions(-) diff --git a/monai/deploy/operators/dicom_series_selector_operator.py b/monai/deploy/operators/dicom_series_selector_operator.py index c7d21ccf..0a1a4545 100644 --- a/monai/deploy/operators/dicom_series_selector_operator.py +++ b/monai/deploy/operators/dicom_series_selector_operator.py @@ -30,20 +30,23 @@ class DICOMSeriesSelectorOperator(Operator): Named output: study_selected_series_list: A list of StudySelectedSeries objects. Downstream receiver optional. - This class can be considered a base class, and a derived class can override the 'filer' function to with + This class can be considered a base class, and a derived class can override the 'filter' function to with custom logics. In its default implementation, this class 1. selects a series or all matched series within the scope of a study in a list of studies 2. uses rules defined in JSON string, see below for details - 3. supports DICOM Study and Series module attribute matching, including regex for string types + 3. supports DICOM Study and Series module attribute matching 4. supports multiple named selections, in the scope of each DICOM study 5. outputs a list of SutdySelectedSeries objects, as well as a flat list of SelectedSeries (to be deprecated) The selection rules are defined in JSON, 1. attribute "selections" value is a list of selections 2. each selection has a "name", and its "conditions" value is a list of matching criteria - 3. each condition has uses the implicit equal operator, except for regex for str type and union for set type + 3. each condition uses the implicit equal operator; in addition, the following are supported: + - regex and range matching for float and int types + - regex matching for str type + - union matching for set type 4. DICOM attribute keywords are used, and only for those defined as DICOMStudy and DICOMSeries properties An example selection rules: @@ -64,18 +67,38 @@ class DICOMSeriesSelectorOperator(Operator): "BodyPartExamined": "Abdomen", "SeriesDescription" : "Not to be matched. For illustration only." } + }, + { + "name": "CT Series 3", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "ImageType": ["PRIMARY", "ORIGINAL", "AXIAL"], + "SliceThickness": [3, 5] + } } ] } """ - def __init__(self, fragment: Fragment, *args, rules: str = "", all_matched: bool = False, **kwargs) -> None: + def __init__( + self, + fragment: Fragment, + *args, + rules: str = "", + all_matched: bool = False, + sort_by_sop_instance_count: bool = False, + **kwargs, + ) -> None: """Instantiate an instance. Args: fragment (Fragment): An instance of the Application class which is derived from Fragment. rules (Text): Selection rules in JSON string. all_matched (bool): Gets all matched series in a study. Defaults to False for first match only. + sort_by_sop_instance_count (bool): If all_matched = True and multiple series are matched, sorts the matched series in + descending SOP instance count (i.e. the first Series in the returned List[StudySelectedSeries] will have the highest # + of DICOM images); Defaults to False for no sorting. """ # rules: Text = "", all_matched: bool = False, @@ -83,6 +106,7 @@ def __init__(self, fragment: Fragment, *args, rules: str = "", all_matched: bool # Delay loading the rules as JSON string till compute time. self._rules_json_str = rules if rules and rules.strip() else None self._all_matched = all_matched # all_matched + self._sort_by_sop_instance_count = sort_by_sop_instance_count # sort_by_sop_instance_count self.input_name_study_list = "dicom_study_list" self.output_name_selected_series = "study_selected_series_list" @@ -100,23 +124,44 @@ def compute(self, op_input, op_output, context): dicom_study_list = op_input.receive(self.input_name_study_list) selection_rules = self._load_rules() if self._rules_json_str else None - study_selected_series = self.filter(selection_rules, dicom_study_list, self._all_matched) + study_selected_series = self.filter( + selection_rules, dicom_study_list, self._all_matched, self._sort_by_sop_instance_count + ) + + # log Series Description and Series Instance UID of the first selected DICOM Series (i.e. the one to be used for inference) + if study_selected_series and len(study_selected_series) > 0: + inference_study = study_selected_series[0] + if inference_study.selected_series and len(inference_study.selected_series) > 0: + inference_series = inference_study.selected_series[0].series + logging.info("Series Selection finalized.") + logging.info( + f"Series Description of selected DICOM Series for inference: {inference_series.SeriesDescription}" + ) + logging.info( + f"Series Instance UID of selected DICOM Series for inference: {inference_series.SeriesInstanceUID}" + ) + op_output.emit(study_selected_series, self.output_name_selected_series) - def filter(self, selection_rules, dicom_study_list, all_matched: bool = False) -> List[StudySelectedSeries]: + def filter( + self, selection_rules, dicom_study_list, all_matched: bool = False, sort_by_sop_instance_count: bool = False + ) -> List[StudySelectedSeries]: """Selects the series with the given matching rules. If rules object is None, all series will be returned with series instance UID as the selection name. - Simplistic matching is used for demonstration: - Number: exactly matches + Supported matching logic: + Float + Int: exact matching, range matching (if a list with two numerical elements is provided), and regex matching String: matches case insensitive, if fails then tries RegEx search - String array matches as subset, case insensitive + String array (set): matches as subset, case insensitive Args: selection_rules (object): JSON object containing the matching rules. - dicom_study_list (list): A list of DICOMStudiy objects. + dicom_study_list (list): A list of DICOMStudy objects. all_matched (bool): Gets all matched series in a study. Defaults to False for first match only. + sort_by_sop_instance_count (bool): If all_matched = True and multiple series are matched, sorts the matched series in + descending SOP instance count (i.e. the first Series in the returned List[StudySelectedSeries] will have the highest # + of DICOM images); Defaults to False for no sorting. Returns: list: A list of objects of type StudySelectedSeries. @@ -153,7 +198,7 @@ def filter(self, selection_rules, dicom_study_list, all_matched: bool = False) - continue # Select only the first series that matches the conditions, list of one - series_list = self._select_series(conditions, study, all_matched) + series_list = self._select_series(conditions, study, all_matched, sort_by_sop_instance_count) if series_list and len(series_list) > 0: for series in series_list: selected_series = SelectedSeries(selection_name, series, None) # No Image obj yet. @@ -185,12 +230,17 @@ def _select_all_series(self, dicom_study_list: List[DICOMStudy]) -> List[StudySe study_selected_series_list.append(study_selected_series) return study_selected_series_list - def _select_series(self, attributes: dict, study: DICOMStudy, all_matched=False) -> List[DICOMSeries]: + def _select_series( + self, attributes: dict, study: DICOMStudy, all_matched=False, sort_by_sop_instance_count=False + ) -> List[DICOMSeries]: """Finds series whose attributes match the given attributes. Args: attributes (dict): Dictionary of attributes for matching all_matched (bool): Gets all matched series in a study. Defaults to False for first match only. + sort_by_sop_instance_count (bool): If all_matched = True and multiple series are matched, sorts the matched series in + descending SOP instance count (i.e. the first Series in the returned List[StudySelectedSeries] will have the highest # + of DICOM images); Defaults to False for no sorting. Returns: List of DICOMSeries. At most one element if all_matched is False. @@ -236,8 +286,17 @@ def _select_series(self, attributes: dict, study: DICOMStudy, all_matched=False) if not attr_value: matched = False - elif isinstance(attr_value, numbers.Number): - matched = value_to_match == attr_value + elif isinstance(attr_value, float) or isinstance(attr_value, int): + # range matching + if isinstance(value_to_match, list) and len(value_to_match) == 2: + lower_bound, upper_bound = map(float, value_to_match) + matched = lower_bound <= attr_value <= upper_bound + # RegEx matching + elif isinstance(value_to_match, str): + matched = bool(re.fullmatch(value_to_match, str(attr_value))) + # exact matching + else: + matched = value_to_match == attr_value elif isinstance(attr_value, str): matched = attr_value.casefold() == (value_to_match.casefold()) if not matched: @@ -268,6 +327,14 @@ def _select_series(self, attributes: dict, study: DICOMStudy, all_matched=False) if not all_matched: return found_series + # if sorting indicated and multiple series found + if sort_by_sop_instance_count and len(found_series) > 1: + # sort series in descending SOP instance count + logging.info( + "Multiple series matched the selection criteria; choosing series with the highest number of DICOM images." + ) + found_series.sort(key=lambda x: len(x.get_sop_instances()), reverse=True) + return found_series @staticmethod @@ -353,6 +420,15 @@ def test(): "BodyPartExamined": "Abdomen", "SeriesDescription" : "Not to be matched" } + }, + { + "name": "CT Series 3", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "ImageType": ["PRIMARY", "ORIGINAL", "AXIAL"], + "SliceThickness": [3, 5] + } } ] } diff --git a/monai/deploy/operators/stl_conversion_operator.py b/monai/deploy/operators/stl_conversion_operator.py index 12a078c7..d8940a83 100644 --- a/monai/deploy/operators/stl_conversion_operator.py +++ b/monai/deploy/operators/stl_conversion_operator.py @@ -174,6 +174,8 @@ def convert( if isinstance(output_file, Path): output_file.parent.mkdir(parents=True, exist_ok=True) + temp_folder = tempfile.mkdtemp() + s_image = self.SpatialImage(image) nda = s_image.image_array self._logger.info(f"Image ndarray shape:{nda.shape}") @@ -231,7 +233,6 @@ def convert( # Write out the STL file, and then load into trimesh try: - temp_folder = tempfile.mkdtemp() raw_stl_filename = os.path.join(temp_folder, "temp.stl") STLConverter.write_stl(verts, faces, raw_stl_filename) mesh_data = trimesh.load(raw_stl_filename) From 7e790bf3f021d9df9bc403c3fb27b8362d203f04 Mon Sep 17 00:00:00 2001 From: Vikash Gupta Date: Tue, 4 Feb 2025 17:13:23 -0800 Subject: [PATCH 079/118] Added a sample integration for LLM models in huggingface (#494) * Added a sample integration for LLM models in huggingface Signed-off-by: Vikash Gupta * Fixed minor issue Signed-off-by: Vikash Gupta --------- Signed-off-by: Vikash Gupta Co-authored-by: Vikash Gupta Signed-off-by: Simone Bendazzoli --- .../hugging_face_integration_app/Dockerfile | 9 ++++ .../hugging_face_integration_app/debug.sh | 6 +++ .../med_image_generation/app.py | 39 ++++++++++++++++++ .../med_image_generation/out.jpg | Bin 0 -> 29653 bytes .../med_image_generation/run.sh | 2 + 5 files changed, 56 insertions(+) create mode 100644 examples/apps/hugging_face_integration_app/Dockerfile create mode 100644 examples/apps/hugging_face_integration_app/debug.sh create mode 100644 examples/apps/hugging_face_integration_app/med_image_generation/app.py create mode 100644 examples/apps/hugging_face_integration_app/med_image_generation/out.jpg create mode 100644 examples/apps/hugging_face_integration_app/med_image_generation/run.sh diff --git a/examples/apps/hugging_face_integration_app/Dockerfile b/examples/apps/hugging_face_integration_app/Dockerfile new file mode 100644 index 00000000..0661a059 --- /dev/null +++ b/examples/apps/hugging_face_integration_app/Dockerfile @@ -0,0 +1,9 @@ +FROM nvcr.io/nvidia/clara-holoscan/holoscan:v2.1.0-dgpu +RUN pip install --upgrade pip +RUN pip install monai-deploy-app-sdk +RUN pip install transformers +RUN pip install hub +RUN pip install diffusers +RUN pip install torch +RUN pip install pydicom +RUN pip install accelerate diff --git a/examples/apps/hugging_face_integration_app/debug.sh b/examples/apps/hugging_face_integration_app/debug.sh new file mode 100644 index 00000000..0867c177 --- /dev/null +++ b/examples/apps/hugging_face_integration_app/debug.sh @@ -0,0 +1,6 @@ +IMAGE=vikash112/monai-hugging:0.1.0 +docker build -t $IMAGE . + +monai_dir=/raid/Vikash/Tools/HUGGINGFACE/med_image_generation + +NV_GPU=1 nvidia-docker run -it --rm --shm-size=4g --ulimit memlock=-1 --ulimit stack=67108864 -v $monai_dir:/workspace/app/test $IMAGE /bin/bash diff --git a/examples/apps/hugging_face_integration_app/med_image_generation/app.py b/examples/apps/hugging_face_integration_app/med_image_generation/app.py new file mode 100644 index 00000000..e4e37aa2 --- /dev/null +++ b/examples/apps/hugging_face_integration_app/med_image_generation/app.py @@ -0,0 +1,39 @@ +import logging +from pathlib import Path +import torch +from diffusers import StableDiffusionPipeline +from monai.deploy.core import AppContext, Application +from PIL import Image +import numpy as np +import argparse + + + +class App(Application): + name = "Diffusion Image App" + description = "Simple application showing diffusion to generate Images" + def compose(self): + model_id = "Nihirc/Prompt2MedImage" + device = "cuda" + parser = argparse.ArgumentParser() + parser.add_argument("--input_prompt", type=str, default="Generate a X-ray") + parser.add_argument("--output", type=str, default="./out.jpg") + args = parser.parse_args() + + input_prompt = args.input_prompt + output_path = args.output + print("Input Prompt: ", input_prompt) + pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16) + pipe = pipe.to(device) + prompt = "Show me an X ray pevic fracture" + image = pipe(prompt).images[0] + image.save(output_path) + + +if __name__ == "__main__": + logging.info(f"Begin {__name__}") + App().run() + logging.info(f"End {__name__}") + + + diff --git a/examples/apps/hugging_face_integration_app/med_image_generation/out.jpg b/examples/apps/hugging_face_integration_app/med_image_generation/out.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2431118b866b53ad2a4cf0f04a395907253bb93d GIT binary patch literal 29653 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 Lz@w%9-@^X@G^&wi literal 0 HcmV?d00001 diff --git a/examples/apps/hugging_face_integration_app/med_image_generation/run.sh b/examples/apps/hugging_face_integration_app/med_image_generation/run.sh new file mode 100644 index 00000000..02472ee7 --- /dev/null +++ b/examples/apps/hugging_face_integration_app/med_image_generation/run.sh @@ -0,0 +1,2 @@ + +python app.py --input_prompt "The patient had residual paralysis of the hand after poliomyelitis. It was necessary to stabilize the thumb with reference to the index finger. This was accomplished by placing a graft from the bone bank between the first and second metacarpals. The roentgenogram shows the complete healing of the graft one year later." --output out.jpg From de9842405b25e9132b92c955b54ec4eb54be36a9 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Wed, 12 Feb 2025 18:07:16 -0800 Subject: [PATCH 080/118] Editorial changes to correct typos, rename parameters, and add comments (#526) * Editorial changes to correct typos, rename parameters, adding comments. Retested examples. Signed-off-by: M Q * More editorial changes covering the whole repo Signed-off-by: M Q * Fix flake8 complaint Signed-off-by: M Q * Fix flake8 complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/_static/custom.css | 2 +- .../developing_with_sdk/packaging_app.md | 2 +- .../getting_started/tutorials/mednist_app.md | 2 +- .../tutorials/monai_bundle_app.md | 2 +- docs/source/release_notes/v0.3.0.md | 2 +- docs/source/release_notes/v0.4.0.md | 2 +- docs/source/release_notes/v0.5.0.md | 2 +- docs/srs.md | 2 +- examples/apps/ai_unetr_seg_app/app.py | 2 +- .../ai_unetr_seg_app/unetr_seg_operator.py | 8 +-- .../breast_density_classifier_app/README.md | 4 +- .../breast_density_classifier_operator.py | 8 +-- .../med_image_generation/app.py | 58 +++++++++---------- .../mednist_classifier_monaideploy.py | 6 +- examples/apps/simple_imaging_app/_version.py | 2 +- examples/apps/simple_imaging_app/app.py | 4 +- .../simple_imaging_app/gaussian_operator.py | 2 +- monai/deploy/core/domain/dicom_series.py | 2 +- .../deploy/core/domain/dicom_sop_instance.py | 2 +- monai/deploy/core/domain/dicom_study.py | 2 +- monai/deploy/operators/clara_viz_operator.py | 4 +- .../dicom_encapsulated_pdf_writer_operator.py | 6 +- .../operators/dicom_seg_writer_operator.py | 2 +- .../dicom_text_sr_writer_operator.py | 6 +- monai/deploy/operators/inference_operator.py | 2 +- .../monai_bundle_inference_operator.py | 2 +- .../operators/monai_seg_inference_operator.py | 18 ++++-- monai/deploy/operators/publisher_operator.py | 4 +- .../operators/stl_conversion_operator.py | 2 +- monai/deploy/utils/importutil.py | 2 +- notebooks/tutorials/02_mednist_app.ipynb | 20 +++---- run | 8 +-- 32 files changed, 99 insertions(+), 93 deletions(-) diff --git a/docs/_static/custom.css b/docs/_static/custom.css index e5d100e2..e2be75d5 100644 --- a/docs/_static/custom.css +++ b/docs/_static/custom.css @@ -107,7 +107,7 @@ blockquote p { } /* Mermaid -to avoid the lable text being cut off +to avoid the label text being cut off */ .edgeTerminals { font-size: 9px !important; diff --git a/docs/source/developing_with_sdk/packaging_app.md b/docs/source/developing_with_sdk/packaging_app.md index a81dd6a7..a46327ec 100644 --- a/docs/source/developing_with_sdk/packaging_app.md +++ b/docs/source/developing_with_sdk/packaging_app.md @@ -13,7 +13,7 @@ It is required that the application configuration yaml file as well as the depen ### Basic Usage of MONAI Application Packager ```bash -monai-deploy package --config --tag --platform [--models ] [--log-level ] [-h] +monai-deploy package --config --tag --platform [--models ] [--log-level ] [-h] ``` #### Required Arguments diff --git a/docs/source/getting_started/tutorials/mednist_app.md b/docs/source/getting_started/tutorials/mednist_app.md index 3a4a43ba..63809ae2 100644 --- a/docs/source/getting_started/tutorials/mednist_app.md +++ b/docs/source/getting_started/tutorials/mednist_app.md @@ -42,7 +42,7 @@ jupyter-lab
-

Video may show the use of previous SDK verson.

+

Video may show the use of previous SDK version.

``` diff --git a/docs/source/getting_started/tutorials/monai_bundle_app.md b/docs/source/getting_started/tutorials/monai_bundle_app.md index a8467d40..326b868a 100644 --- a/docs/source/getting_started/tutorials/monai_bundle_app.md +++ b/docs/source/getting_started/tutorials/monai_bundle_app.md @@ -32,7 +32,7 @@ jupyter-lab
-

Video may show the use of previous SDK verson.

+

Video may show the use of previous SDK version.

``` diff --git a/docs/source/release_notes/v0.3.0.md b/docs/source/release_notes/v0.3.0.md index 888f9d9c..959e0180 100644 --- a/docs/source/release_notes/v0.3.0.md +++ b/docs/source/release_notes/v0.3.0.md @@ -16,7 +16,7 @@ This operator uses [Clara Viz](https://pypi.org/project/clara-viz/) to provide i ### STL Surface Mesh Conversion Operator -This operator converts a volume image to surface mesh, in [STL file format](https://en.wikipedia.org/wiki/STL_(file_format)). Its API allows the client to control if smoothing needs to be applied, and if only keeping the largest connected component; the latter is useful when muliple disjoint segments are in a volume image, and the application needs to control if all or only the largest to be included in the output. +This operator converts a volume image to surface mesh, in [STL file format](https://en.wikipedia.org/wiki/STL_(file_format)). Its API allows the client to control if smoothing needs to be applied, and if only keeping the largest connected component; the latter is useful when multiple disjoint segments are in a volume image, and the application needs to control if all or only the largest to be included in the output. ## What's fixed/updated diff --git a/docs/source/release_notes/v0.4.0.md b/docs/source/release_notes/v0.4.0.md index 8704a927..5b6dd74d 100644 --- a/docs/source/release_notes/v0.4.0.md +++ b/docs/source/release_notes/v0.4.0.md @@ -9,7 +9,7 @@ The new operator, `MONAI Bundle Inference Operator`, is intended to automate the inference with a MONAI Bundle in TorchScript with the following functionalities: - Parse the model metadata and extra configuration data in the TorchScript file -- Instanciate MONAI transforms and inferer objects per bundle configuration data +- Instantiate MONAI transforms and inferer objects per bundle configuration data - Convert input/output of the operator to and from model network input - Support named model and can be used in a multi-model application diff --git a/docs/source/release_notes/v0.5.0.md b/docs/source/release_notes/v0.5.0.md index 32ac5af3..2aab6143 100644 --- a/docs/source/release_notes/v0.5.0.md +++ b/docs/source/release_notes/v0.5.0.md @@ -7,7 +7,7 @@ - Generated DICOM instances as AI evidence now have the attribute (0008,0201) Timezone Offset From UTC, in addition to the DICOM date and time which are set with values from the underlying operating system. The OS is expected to be synchronized with a known good timing source and have the correct timezone setting - Generated DICOM instance file names are now based on the SOP instance UID - Support DICOM instance level attribute matching in the DICOM Series Selection Operator -- Operators and example applications are verified to be re-runable without needing to reinitialize the application object or re-load the AI model network. This will allow a main function or an external script to instantiate the application object once and use it to process multiple discreet inputs, either in a batch processing mode or in a long running service +- Operators and example applications are verified to be re-runable without needing to reinitialize the application object or re-load the AI model network. This will allow a main function or an external script to instantiate the application object once and use it to process multiple discrete inputs, either in a batch processing mode or in a long running service - Tutorials, in Jupyter notebooks, are re-organized and updated - Reference added for MONAI Deploy Express for hosting MAPs in development environments - Removed is the reference to the deprecated MONAI Inference Service diff --git a/docs/srs.md b/docs/srs.md index f6a377af..a786357e 100644 --- a/docs/srs.md +++ b/docs/srs.md @@ -521,7 +521,7 @@ The SDK shall allow the packaging of the application in a standardized format so ### Background -Please refer to [MONAI Application Packge Spec](https://github.com/Project-MONAI/monai-deploy-experimental/blob/main/guidelines/monai-application-package.md)for details. +Please refer to [MONAI Application Package Spec](https://github.com/Project-MONAI/monai-deploy-experimental/blob/main/guidelines/monai-application-package.md)for details. ### Verification Strategy diff --git a/examples/apps/ai_unetr_seg_app/app.py b/examples/apps/ai_unetr_seg_app/app.py index 7a399828..d2f90db7 100644 --- a/examples/apps/ai_unetr_seg_app/app.py +++ b/examples/apps/ai_unetr_seg_app/app.py @@ -80,7 +80,7 @@ def compose(self): _algorithm_family = codes.DCM.ArtificialIntelligence _algorithm_version = "0.1.0" - # List of (Segment name, [Code menaing str]), not including background which is value of 0. + # List of (Segment name, [Code meaning str]), not including background which is value of 0. # User must provide correct codes, which can be looked at, e.g. # https://bioportal.bioontology.org/ontologies/SNOMEDCT # Alternatively, consult the concept and code dictionaries in PyDicom diff --git a/examples/apps/ai_unetr_seg_app/unetr_seg_operator.py b/examples/apps/ai_unetr_seg_app/unetr_seg_operator.py index d48b68b1..dbbb2b30 100644 --- a/examples/apps/ai_unetr_seg_app/unetr_seg_operator.py +++ b/examples/apps/ai_unetr_seg_app/unetr_seg_operator.py @@ -56,7 +56,7 @@ class UnetrSegOperator(Operator): def __init__( self, - frament: Fragment, + fragment: Fragment, *args, app_context: AppContext, model_path: Path, @@ -71,13 +71,13 @@ def __init__( self.model_path = model_path self.output_folder = output_folder self.output_folder.mkdir(parents=True, exist_ok=True) - self.fragement = frament # Cache and later pass the Fragment/Application to contained operator(s) + self.app_fragment = fragment # Cache and later pass the Fragment/Application to contained operator(s) self.app_context = app_context self.input_name_image = "image" self.output_name_seg = "seg_image" self.output_name_saved_images_folder = "saved_images_folder" - super().__init__(frament, *args, **kwargs) + super().__init__(fragment, *args, **kwargs) def setup(self, spec: OperatorSpec): spec.input(self.input_name_image) @@ -102,7 +102,7 @@ def compute(self, op_input, op_output, context): # Delegates inference and saving output to the built-in operator. infer_operator = MonaiSegInferenceOperator( - self.fragement, + self.app_fragment, roi_size=( 96, 96, diff --git a/examples/apps/breast_density_classifier_app/README.md b/examples/apps/breast_density_classifier_app/README.md index c1256c49..b5573e12 100644 --- a/examples/apps/breast_density_classifier_app/README.md +++ b/examples/apps/breast_density_classifier_app/README.md @@ -9,7 +9,7 @@ Sample data and a torchscript model can be downloaded from https://drive.google. python app.py -i -o -m ``` -## Package the application as a MONAI Application Package (contianer image) +## Package the application as a MONAI Application Package (container image) In order to build the MONAI App Package, go a level up and execute the following command. ``` monai-deploy package breast_density_classification_app -m -c breast_density_classifer_app/app.yaml --tag breast_density:0.1.0 --platform x64-workstation -l DEBUG @@ -20,4 +20,4 @@ monai-deploy package breast_density_classification_app -m monai-deploy run breast_density-x64-workstation-dgpu-linux-amd64:0.1.0 -i -o ``` -Once the container exits successfully, check the results in the output directory. There should be a newly creeated DICOM instance file and a `output.json` file containing the classification results. \ No newline at end of file +Once the container exits successfully, check the results in the output directory. There should be a newly created DICOM instance file and a `output.json` file containing the classification results. \ No newline at end of file diff --git a/examples/apps/breast_density_classifier_app/breast_density_classifier_operator.py b/examples/apps/breast_density_classifier_app/breast_density_classifier_operator.py index 4a442088..2d2b6f0f 100644 --- a/examples/apps/breast_density_classifier_app/breast_density_classifier_operator.py +++ b/examples/apps/breast_density_classifier_app/breast_density_classifier_operator.py @@ -40,7 +40,7 @@ class ClassifierOperator(Operator): def __init__( self, - frament: Fragment, + fragment: Fragment, *args, model_name: Optional[str] = "", app_context: AppContext, @@ -67,7 +67,7 @@ def __init__( # The name of the optional input port for passing data to override the output folder path. self.input_name_output_folder = "output_folder" - # The output folder set on the object can be overriden at each compute by data in the optional named input + # The output folder set on the object can be overridden at each compute by data in the optional named input self.output_folder = output_folder # Need the name when there are multiple models loaded @@ -80,7 +80,7 @@ def __init__( self.model = self._get_model(self.app_context, self.model_path, self._model_name) - super().__init__(frament, *args, **kwargs) + super().__init__(fragment, *args, **kwargs) def _get_model(self, app_context: AppContext, model_path: Path, model_name: str): """Load the model with the given name from context or model path @@ -116,7 +116,7 @@ def _convert_dicom_metadata_datatype(self, metadata: Dict): if not metadata: return metadata - # Try to convert data type for the well knowned attributes. Add more as needed. + # Try to convert data type for the well known attributes. Add more as needed. if metadata.get("SeriesInstanceUID", None): try: metadata["SeriesInstanceUID"] = str(metadata["SeriesInstanceUID"]) diff --git a/examples/apps/hugging_face_integration_app/med_image_generation/app.py b/examples/apps/hugging_face_integration_app/med_image_generation/app.py index e4e37aa2..de4ade6b 100644 --- a/examples/apps/hugging_face_integration_app/med_image_generation/app.py +++ b/examples/apps/hugging_face_integration_app/med_image_generation/app.py @@ -1,39 +1,35 @@ -import logging -from pathlib import Path -import torch -from diffusers import StableDiffusionPipeline -from monai.deploy.core import AppContext, Application -from PIL import Image -import numpy as np import argparse +import logging + +import torch +from diffusers import StableDiffusionPipeline +from monai.deploy.core import Application class App(Application): - name = "Diffusion Image App" - description = "Simple application showing diffusion to generate Images" - def compose(self): - model_id = "Nihirc/Prompt2MedImage" - device = "cuda" - parser = argparse.ArgumentParser() - parser.add_argument("--input_prompt", type=str, default="Generate a X-ray") - parser.add_argument("--output", type=str, default="./out.jpg") - args = parser.parse_args() - - input_prompt = args.input_prompt - output_path = args.output - print("Input Prompt: ", input_prompt) - pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16) - pipe = pipe.to(device) - prompt = "Show me an X ray pevic fracture" - image = pipe(prompt).images[0] - image.save(output_path) + name = "Diffusion Image App" + description = "Simple application showing diffusion to generate Images" + + def compose(self): + model_id = "Nihirc/Prompt2MedImage" + device = "cuda" + parser = argparse.ArgumentParser() + parser.add_argument("--input_prompt", type=str, default="Generate a X-ray") + parser.add_argument("--output", type=str, default="./out.jpg") + args = parser.parse_args() + + input_prompt = args.input_prompt + output_path = args.output + print("Input Prompt: ", input_prompt) + pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16) + pipe = pipe.to(device) + prompt = "Show me an X ray pevic fracture" + image = pipe(prompt).images[0] + image.save(output_path) if __name__ == "__main__": - logging.info(f"Begin {__name__}") - App().run() - logging.info(f"End {__name__}") - - - + logging.info(f"Begin {__name__}") + App().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py b/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py index 95d872e0..e4e83655 100644 --- a/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py +++ b/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py @@ -100,7 +100,7 @@ class MedNISTClassifierOperator(Operator): def __init__( self, - frament: Fragment, + fragment: Fragment, *args, app_context: AppContext, model_name: Optional[str] = "", @@ -127,7 +127,7 @@ def __init__( # The name of the optional input port for passing data to override the output folder path. self.input_name_output_folder = "output_folder" - # The output folder set on the object can be overriden at each compute by data in the optional named input + # The output folder set on the object can be overridden at each compute by data in the optional named input self.output_folder = output_folder # Need the name when there are multiple models loaded @@ -138,7 +138,7 @@ def __init__( self.model = self._get_model(self.app_context, self.model_path, self._model_name) # This needs to be at the end of the constructor. - super().__init__(frament, *args, **kwargs) + super().__init__(fragment, *args, **kwargs) def _get_model(self, app_context: AppContext, model_path: Path, model_name: str): """Load the model with the given name from context or model path diff --git a/examples/apps/simple_imaging_app/_version.py b/examples/apps/simple_imaging_app/_version.py index 9eeaaf17..3fc3de8a 100644 --- a/examples/apps/simple_imaging_app/_version.py +++ b/examples/apps/simple_imaging_app/_version.py @@ -307,7 +307,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): # TAG-NUM-gHEX mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) if not mo: - # unparseable. Maybe git-describe is misbehaving? + # unparsable. Maybe git-describe is misbehaving? pieces["error"] = ("unable to parse git-describe output: '%s'" % describe_out) return pieces diff --git a/examples/apps/simple_imaging_app/app.py b/examples/apps/simple_imaging_app/app.py index 6f38b2a3..82556ffa 100644 --- a/examples/apps/simple_imaging_app/app.py +++ b/examples/apps/simple_imaging_app/app.py @@ -49,10 +49,10 @@ def compose(self): output_data_path = Path(app_context.output_path) logging.info(f"sample_data_path: {sample_data_path}") - # Please note that the Application object, self, is passed as the first positonal argument + # Please note that the Application object, self, is passed as the first positional argument # and the others as kwargs. # Also note the CountCondition of 1 on the first operator, indicating to the application executor - # to invoke this operator, hence the pipleline, only once. + # to invoke this operator, hence the pipeline, only once. sobel_op = SobelOperator(self, CountCondition(self, 1), input_path=sample_data_path, name="sobel_op") median_op = MedianOperator(self, name="median_op") gaussian_op = GaussianOperator(self, output_folder=output_data_path, name="gaussian_op") diff --git a/examples/apps/simple_imaging_app/gaussian_operator.py b/examples/apps/simple_imaging_app/gaussian_operator.py index e924afc9..64f4014f 100644 --- a/examples/apps/simple_imaging_app/gaussian_operator.py +++ b/examples/apps/simple_imaging_app/gaussian_operator.py @@ -24,7 +24,7 @@ class GaussianOperator(Operator): single input: an image array object single output: - an image arrary object, without enforcing a downsteam receiver + an image array object, without enforcing a downstream receiver Besides, this operator also saves the image file in the given output folder. """ diff --git a/monai/deploy/core/domain/dicom_series.py b/monai/deploy/core/domain/dicom_series.py index 6bed23e0..6eed0178 100644 --- a/monai/deploy/core/domain/dicom_series.py +++ b/monai/deploy/core/domain/dicom_series.py @@ -51,7 +51,7 @@ def get_sop_instances(self): return self._sop_instances # Properties named after DICOM Series module attribute keywords - # There are two required (Type 1) attrbutes for a series: + # There are two required (Type 1) attributes for a series: # Keyword: SeriesInstanceUID, Tag: (0020,000E) # Keyword: Modality, Tag: (0008,0060) # diff --git a/monai/deploy/core/domain/dicom_sop_instance.py b/monai/deploy/core/domain/dicom_sop_instance.py index f2a2bdd7..015f60a5 100644 --- a/monai/deploy/core/domain/dicom_sop_instance.py +++ b/monai/deploy/core/domain/dicom_sop_instance.py @@ -27,7 +27,7 @@ class DICOMSOPInstance(Domain): - """This class representes a SOP Instance. + """This class represents a SOP Instance. An attribute can be looked up with a slice ([group_number, element number]). """ diff --git a/monai/deploy/core/domain/dicom_study.py b/monai/deploy/core/domain/dicom_study.py index 30bc053e..67c5b6be 100644 --- a/monai/deploy/core/domain/dicom_study.py +++ b/monai/deploy/core/domain/dicom_study.py @@ -35,7 +35,7 @@ def get_all_series(self): return list(self._series_dict.values()) # Properties named after DICOM Study module attribute keywords - # There is only one required (Type 1) attrbute for a study: + # There is only one required (Type 1) attribute for a study: # Keyword: StudyInstanceUID, Tag: (0020,000D) # @property diff --git a/monai/deploy/operators/clara_viz_operator.py b/monai/deploy/operators/clara_viz_operator.py index 6524cd19..743286c5 100644 --- a/monai/deploy/operators/clara_viz_operator.py +++ b/monai/deploy/operators/clara_viz_operator.py @@ -33,7 +33,7 @@ class ClaraVizOperator(Operator): seg_image: Image object of the segmentation image derived from the input image. """ - def __init__(self, fragement: Fragment, *args, **kwargs): + def __init__(self, fragment: Fragment, *args, **kwargs): """Constructor of the operator. Args: @@ -43,7 +43,7 @@ def __init__(self, fragement: Fragment, *args, **kwargs): self.input_name_image = "image" self.input_name_seg_image = "seg_image" - super().__init__(fragement, *args, **kwargs) + super().__init__(fragment, *args, **kwargs) def setup(self, spec: OperatorSpec): spec.input(self.input_name_image) diff --git a/monai/deploy/operators/dicom_encapsulated_pdf_writer_operator.py b/monai/deploy/operators/dicom_encapsulated_pdf_writer_operator.py index c2085c2b..b7a4465a 100644 --- a/monai/deploy/operators/dicom_encapsulated_pdf_writer_operator.py +++ b/monai/deploy/operators/dicom_encapsulated_pdf_writer_operator.py @@ -45,12 +45,12 @@ class DICOMEncapsulatedPDFWriterOperator(Operator): None File output: - Generaed DICOM instance file in the provided output folder. + Generated DICOM instance file in the provided output folder. """ # File extension for the generated DICOM Part 10 file. DCM_EXTENSION = ".dcm" - # The default output folder for saveing the generated DICOM instance file. + # The default output folder for saving the generated DICOM instance file. DEFAULT_OUTPUT_FOLDER = Path(os.getcwd()) / "output" def __init__( @@ -249,7 +249,7 @@ def _is_pdf_bytes(self, content: bytes): return True -# Commenting out the following as pttype complains about the contructor for no reason +# Commenting out the following as pttype complains about the constructor for no reason # def test(test_copy_tags: bool = True): # from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator # from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator diff --git a/monai/deploy/operators/dicom_seg_writer_operator.py b/monai/deploy/operators/dicom_seg_writer_operator.py index 41bad8af..1a39e644 100644 --- a/monai/deploy/operators/dicom_seg_writer_operator.py +++ b/monai/deploy/operators/dicom_seg_writer_operator.py @@ -206,7 +206,7 @@ def __init__( Object encapsulating the description of each segment present in the segmentation. output_folder: Folder for file output, overridden by named input on compute. Defaults to current working dir's child folder, output. - custom_tags: Optonal[Dict[str, str]], optional + custom_tags: Optional[Dict[str, str]], optional Dictionary for setting custom DICOM tags using Keywords and str values only omit_empty_frames: bool, optional Whether to omit frames that contain no segmented pixels from the output segmentation. diff --git a/monai/deploy/operators/dicom_text_sr_writer_operator.py b/monai/deploy/operators/dicom_text_sr_writer_operator.py index 1b0fd21c..273236bb 100644 --- a/monai/deploy/operators/dicom_text_sr_writer_operator.py +++ b/monai/deploy/operators/dicom_text_sr_writer_operator.py @@ -42,12 +42,12 @@ class DICOMTextSRWriterOperator(Operator): None File output: - Generaed DICOM instance file in the provided output folder. + Generated DICOM instance file in the provided output folder. """ # File extension for the generated DICOM Part 10 file. DCM_EXTENSION = ".dcm" - # The default output folder for saveing the generated DICOM instance file. + # The default output folder for saving the generated DICOM instance file. # DEFAULT_OUTPUT_FOLDER = Path(os.path.join(os.path.dirname(__file__))) / "output" DEFAULT_OUTPUT_FOLDER = Path.cwd() / "output" @@ -259,7 +259,7 @@ def write(self, content_text, dicom_series: Optional[DICOMSeries], output_dir: P self._logger.info(f"DICOM SOP instance saved in {file_path}") -# Commenting out the following as pttype complains about the contructor for no reason +# Commenting out the following as pttype complains about the constructor for no reason # def test(test_copy_tags: bool = True): # from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator # from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator diff --git a/monai/deploy/operators/inference_operator.py b/monai/deploy/operators/inference_operator.py index 81ee226e..f8d423d8 100644 --- a/monai/deploy/operators/inference_operator.py +++ b/monai/deploy/operators/inference_operator.py @@ -17,7 +17,7 @@ class InferenceOperator(Operator): """The base operator for operators that perform AI inference. - This operator preforms pre-transforms on a input image, inference with + This operator performs pre-transforms on a input image, inference with a given model, post-transforms, and final results generation. """ diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index 89d873a7..7ae4db4d 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -546,7 +546,7 @@ def compute(self, op_input, op_output, context): # `context.models.get(model_name)` returns a model instance if exists. # If model_name is not specified and only one model exists, it returns that model. - # The models are loaded on contruction via the AppContext object in turn the model factory. + # The models are loaded on construction via the AppContext object in turn the model factory. self._model_network = self.app_context.models.get(self._model_name) if self.app_context.models else None if self._model_network: diff --git a/monai/deploy/operators/monai_seg_inference_operator.py b/monai/deploy/operators/monai_seg_inference_operator.py index 9fa2c5b2..63d6007a 100644 --- a/monai/deploy/operators/monai_seg_inference_operator.py +++ b/monai/deploy/operators/monai_seg_inference_operator.py @@ -58,7 +58,7 @@ class InfererType(StrEnum): class MonaiSegInferenceOperator(InferenceOperator): """This segmentation operator uses MONAI transforms and Sliding Window Inference. - This operator preforms pre-transforms on a input image, inference + This operator performs pre-transforms on a input image, inference using a given model, and post-transforms. The segmentation image is saved as a named Image object in memory. @@ -241,7 +241,7 @@ def _convert_dicom_metadata_datatype(self, metadata: Dict): if not metadata: return metadata - # Try to convert data type for the well knowned attributes. Add more as needed. + # Try to convert data type for the well known attributes. Add more as needed. if metadata.get("SeriesInstanceUID", None): try: metadata["SeriesInstanceUID"] = str(metadata["SeriesInstanceUID"]) @@ -313,6 +313,7 @@ def compute_impl(self, input_image, context): with torch.no_grad(): for d in dataloader: images = d[self._input_dataset_key].to(device) + self._logger.info(f"Input of {type(images)} shape: {images.shape}") if self._inferer == InfererType.SLIDING_WINDOW: d[self._pred_dataset_key] = sliding_window_inference( inputs=images, @@ -331,7 +332,14 @@ def compute_impl(self, input_image, context): ) d = [post_transforms(i) for i in decollate_batch(d)] - out_ndarray = d[0][self._pred_dataset_key].cpu().numpy() + self._logger.info(f"Post transform length/batch size of output: {len(d)}") + self._logger.info( + f"Post transform pixel spacings for {self._pred_dataset_key}: {d[0][self._pred_dataset_key].pixdim}" + ) + out_ndarray = d[0][self._pred_dataset_key].cpu().numpy() # Single output to numpy on CPU + self._logger.info( + f"Post transform {self._pred_dataset_key} of {type(out_ndarray)} shape: {out_ndarray.shape}" + ) # Need to squeeze out the channel dim fist out_ndarray = np.squeeze(out_ndarray, 0) # NOTE: The domain Image object simply contains a Arraylike obj as image as of now. @@ -343,7 +351,9 @@ def compute_impl(self, input_image, context): # the resultant ndarray for the prediction image needs to be transposed back, so the # array index order is back to DHW, the same order as the in-memory input Image obj. out_ndarray = out_ndarray.T.astype(np.uint8) - self._logger.info(f"Output Seg image numpy array shaped: {out_ndarray.shape}") + self._logger.info( + f"Output Seg image numpy array of type {type(out_ndarray)} shape: {out_ndarray.shape}" + ) self._logger.info(f"Output Seg image pixel max value: {np.amax(out_ndarray)}") return Image(out_ndarray, input_img_metadata) diff --git a/monai/deploy/operators/publisher_operator.py b/monai/deploy/operators/publisher_operator.py index a46d9362..e4c0b1ce 100644 --- a/monai/deploy/operators/publisher_operator.py +++ b/monai/deploy/operators/publisher_operator.py @@ -29,10 +29,10 @@ class PublisherOperator(Operator): generates the render config file and the meta data file, then save all in the `publish` folder of the app. """ - # The default input folder for saveing the generated DICOM instance file. + # The default input folder for saving the generated DICOM instance file. DEFAULT_INPUT_FOLDER = Path(getcwd()) / "input" - # The default output folder for saveing the generated DICOM instance file. + # The default output folder for saving the generated DICOM instance file. DEFAULT_OUTPUT_FOLDER = Path(getcwd()) / "output" def __init__( diff --git a/monai/deploy/operators/stl_conversion_operator.py b/monai/deploy/operators/stl_conversion_operator.py index d8940a83..6cfe4020 100644 --- a/monai/deploy/operators/stl_conversion_operator.py +++ b/monai/deploy/operators/stl_conversion_operator.py @@ -41,7 +41,7 @@ class STLConversionOperator(Operator): """Converts volumetric image to surface mesh in STL format. If a file path is provided, the STL binary will be saved in the said output folder. - This operator also save the STL file as bytes in memory, idenfied by the named output. Being optional, + This operator also save the STL file as bytes in memory, identified by the named output. Being optional, this output does not require any downstream receiver. Named inputs: diff --git a/monai/deploy/utils/importutil.py b/monai/deploy/utils/importutil.py index d56b7d42..95e48784 100644 --- a/monai/deploy/utils/importutil.py +++ b/monai/deploy/utils/importutil.py @@ -27,7 +27,7 @@ def get_docstring(cls: Type) -> str: """Get docstring of a class. Tries to get docstring from class itself, from its __doc__. - It trims the preceeding whitespace from docstring. + It trims the preceding whitespace from docstring. If __doc__ is not available, it returns empty string. Args: diff --git a/notebooks/tutorials/02_mednist_app.ipynb b/notebooks/tutorials/02_mednist_app.ipynb index 000ae501..cb2371ae 100644 --- a/notebooks/tutorials/02_mednist_app.ipynb +++ b/notebooks/tutorials/02_mednist_app.ipynb @@ -416,7 +416,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -439,7 +439,7 @@ "# Choose a file as test input\n", "test_input_path = image_files[0][0]\n", "!rm -rf {input_folder} && mkdir -p {input_folder} && cp {test_input_path} {input_folder} && ls {input_folder}\n", - "# Need to copy the model file to its own clean subfolder for pacakging, to workaround an issue in the Packager\n", + "# Need to copy the model file to its own clean subfolder for packaging, to workaround an issue in the Packager\n", "!rm -rf {models_folder} && mkdir -p {models_folder}/model && cp classifier.zip {models_folder}/model && ls {models_folder}/model\n", "\n", "%env HOLOSCAN_INPUT_PATH {input_folder}\n", @@ -558,7 +558,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -579,7 +579,7 @@ "\n", " def __init__(\n", " self,\n", - " frament: Fragment,\n", + " fragment: Fragment,\n", " *args,\n", " app_context: AppContext,\n", " model_name: Optional[str] = \"\",\n", @@ -606,7 +606,7 @@ " # The name of the optional input port for passing data to override the output folder path.\n", " self.input_name_output_folder = \"output_folder\"\n", "\n", - " # The output folder set on the object can be overriden at each compute by data in the optional named input\n", + " # The output folder set on the object can be overridden at each compute by data in the optional named input\n", " self.output_folder = output_folder\n", "\n", " # Need the name when there are multiple models loaded\n", @@ -617,7 +617,7 @@ " self.model = self._get_model(self.app_context, self.model_path, self._model_name)\n", "\n", " # This needs to be at the end of the constructor.\n", - " super().__init__(frament, *args, **kwargs)\n", + " super().__init__(fragment, *args, **kwargs)\n", "\n", " def _get_model(self, app_context: AppContext, model_path: Path, model_name: str):\n", " \"\"\"Load the model with the given name from context or model path\n", @@ -839,7 +839,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -954,7 +954,7 @@ "\n", " def __init__(\n", " self,\n", - " frament: Fragment,\n", + " fragment: Fragment,\n", " *args,\n", " app_context: AppContext,\n", " model_name: Optional[str] = \"\",\n", @@ -981,7 +981,7 @@ " # The name of the optional input port for passing data to override the output folder path.\n", " self.input_name_output_folder = \"output_folder\"\n", "\n", - " # The output folder set on the object can be overriden at each compute by data in the optional named input\n", + " # The output folder set on the object can be overridden at each compute by data in the optional named input\n", " self.output_folder = output_folder\n", "\n", " # Need the name when there are multiple models loaded\n", @@ -992,7 +992,7 @@ " self.model = self._get_model(self.app_context, self.model_path, self._model_name)\n", "\n", " # This needs to be at the end of the constructor.\n", - " super().__init__(frament, *args, **kwargs)\n", + " super().__init__(fragment, *args, **kwargs)\n", "\n", " def _get_model(self, app_context: AppContext, model_path: Path, model_name: str):\n", " \"\"\"Load the model with the given name from context or model path\n", diff --git a/run b/run index c1b6ee4f..d391ef44 100755 --- a/run +++ b/run @@ -407,7 +407,7 @@ install_edit_mode() { setup_desc() { c_echo 'Setup development environment -Arguements: +Arguments: $1 - configuration (default: "dev") ' } @@ -468,7 +468,7 @@ build_desc() { c_echo 'Build distribution package Build a distribution package for this SDK using "build" (https://pypa-build.readthedocs.io/en/stable/index.html). -Arguements: +Arguments: $1 - destination folder (default: ${TOP}/dist) ' } @@ -970,7 +970,7 @@ setup_gen_docs() { gen_docs_desc() { c_echo 'Generate documents -Generated docs would be avaialable at ${TOP}/dist/docs. +Generated docs would be available at ${TOP}/dist/docs. Arguments: $1 - output folder path (html docs) @@ -1012,7 +1012,7 @@ gen_docs_dev_desc() { c_echo 'Generate documents (with dev-server) Launch dev-server for sphinx. -Generated docs would be avaialable at ${TOP}/dist/docs. +Generated docs would be available at ${TOP}/dist/docs. Arguments: -p - port number From bbc34e4ff3e3f42a86c199ea6b825d4f575ae75e Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Mon, 24 Feb 2025 20:42:56 -0500 Subject: [PATCH 081/118] slice removal fix (#527) Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- .../operators/dicom_series_to_volume_operator.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/monai/deploy/operators/dicom_series_to_volume_operator.py b/monai/deploy/operators/dicom_series_to_volume_operator.py index 6beb0e35..38b4beaf 100644 --- a/monai/deploy/operators/dicom_series_to_volume_operator.py +++ b/monai/deploy/operators/dicom_series_to_volume_operator.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -234,11 +234,17 @@ def prepare_series(self, series): series._sop_instances[slice_index].distance = distance series._sop_instances[slice_index].first_pixel_on_slice_normal = point else: - print("going to removing slice ", slice_index) + logging.debug(f"Slice index to remove: {slice_index}") slice_indices_to_be_removed.append(slice_index) - for sl_index, _ in enumerate(slice_indices_to_be_removed): + logging.debug(f"Total slices before removal (if applicable): {len(series._sop_instances)}") + + # iterate in reverse order to avoid affecting subsequent indices after a deletion + for sl_index in sorted(slice_indices_to_be_removed, reverse=True): del series._sop_instances[sl_index] + logging.info(f"Removed slice index: {sl_index}") + + logging.debug(f"Total slices after removal (if applicable): {len(series._sop_instances)}") series._sop_instances = sorted(series._sop_instances, key=lambda s: s.distance) series.depth_direction_cosine = copy.deepcopy(last_slice_normal) From 2ca23927f71c68d74ffd7e65629ff8cc93a68bc7 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Wed, 2 Apr 2025 15:00:47 +0000 Subject: [PATCH 082/118] Add nnUNet segmentation application and dependencies Signed-off-by: Simone Bendazzoli --- .../apps/ai_spleen_nnunet_seg_app/__init__.py | 18 ++ .../apps/ai_spleen_nnunet_seg_app/__main__.py | 19 ++ examples/apps/ai_spleen_nnunet_seg_app/app.py | 177 ++++++++++++++++++ .../apps/ai_spleen_nnunet_seg_app/app.yaml | 27 +++ .../ai_spleen_nnunet_seg_app/requirements.txt | 11 ++ monai/deploy/operators/__init__.py | 2 + .../monai_bundle_inference_operator.py | 4 +- .../monai_nnunet_bundle_inference_operator.py | 88 +++++++++ 8 files changed, 344 insertions(+), 2 deletions(-) create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/__init__.py create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/__main__.py create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/app.py create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/app.yaml create mode 100644 examples/apps/ai_spleen_nnunet_seg_app/requirements.txt create mode 100644 monai/deploy/operators/monai_nnunet_bundle_inference_operator.py diff --git a/examples/apps/ai_spleen_nnunet_seg_app/__init__.py b/examples/apps/ai_spleen_nnunet_seg_app/__init__.py new file mode 100644 index 00000000..526cee59 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/__init__.py @@ -0,0 +1,18 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys + +_current_dir = os.path.abspath(os.path.dirname(__file__)) +if sys.path and os.path.abspath(sys.path[0]) != _current_dir: + sys.path.insert(0, _current_dir) +del _current_dir diff --git a/examples/apps/ai_spleen_nnunet_seg_app/__main__.py b/examples/apps/ai_spleen_nnunet_seg_app/__main__.py new file mode 100644 index 00000000..07fe20a4 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/__main__.py @@ -0,0 +1,19 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging + +from app import AISpleennnUNetSegApp + +if __name__ == "__main__": + logging.info(f"Begin {__name__}") + AISpleennnUNetSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py new file mode 100644 index 00000000..60b09fb2 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -0,0 +1,177 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path + +from pydicom.sr.codedict import codes + +from monai.deploy.conditions import CountCondition +from monai.deploy.core import AppContext, Application +from monai.deploy.core.domain import Image +from monai.deploy.core.io_type import IOType +from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator +from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription +from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator +from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator +from monai.deploy.operators.monai_bundle_inference_operator import ( + BundleConfigNames, + IOMapping, + +) +from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator +from monai.deploy.operators.stl_conversion_operator import STLConversionOperator + + +# @resource(cpu=1, gpu=1, memory="7Gi") +# pip_packages can be a string that is a path(str) to requirements.txt file or a list of packages. +# The monai pkg is not required by this class, instead by the included operators. +class AISpleennnUNetSegApp(Application): + """Demonstrates inference with built-in MONAI nnUNet Bundle inference operator with DICOM files as input/output + + This application loads a set of DICOM instances, select the appropriate series, converts the series to + 3D volume image, performs inference with the built-in MONAI nnUNet Bundle inference operator, including pre-processing + and post-processing, save the segmentation image in a DICOM Seg OID in an instance file, and optionally the + surface mesh in STL format. + + Pertinent nnUNet MONAI Bundle: + + + Execution Time Estimate: + With a Nvidia RTXA600 48GB GPU, for an input DICOM Series of 139 instances, the execution time is around + 75 seconds with saving both DICOM Seg and surface mesh STL file. + """ + + def __init__(self, *args, **kwargs): + """Creates an application instance.""" + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + super().__init__(*args, **kwargs) + + def run(self, *args, **kwargs): + # This method calls the base class to run. Can be omitted if simply calling through. + self._logger.info(f"Begin {self.run.__name__}") + super().run(*args, **kwargs) + self._logger.info(f"End {self.run.__name__}") + + def compose(self): + """Creates the app specific operators and chain them up in the processing DAG.""" + + logging.info(f"Begin {self.compose.__name__}") + + # Use Commandline options over environment variables to init context. + app_context: AppContext = Application.init_app_context(self.argv) + app_input_path = Path(app_context.input_path) + app_output_path = Path(app_context.output_path) + + # Create the custom operator(s) as well as SDK built-in operator(s). + study_loader_op = DICOMDataLoaderOperator( + self, CountCondition(self, 1), input_folder=app_input_path, name="study_loader_op" + ) + series_selector_op = DICOMSeriesSelectorOperator(self, rules=Sample_Rules_Text, name="series_selector_op") + series_to_vol_op = DICOMSeriesToVolumeOperator(self, name="series_to_vol_op") + + # Create the inference operator that supports MONAI Bundle and automates the inference. + # The IOMapping labels match the input and prediction keys in the pre and post processing. + # The model_name is optional when the app has only one model. + # The bundle_path argument optionally can be set to an accessible bundle file path in the dev + # environment, so when the app is packaged into a MAP, the operator can complete the bundle parsing + # during init. + + config_names = BundleConfigNames(config_names=["inference"]) # Same as the default + + bundle_spleen_seg_op = MonainnUNetBundleInferenceOperator( + self, + input_mapping=[IOMapping("image", Image, IOType.IN_MEMORY)], + output_mapping=[IOMapping("pred", Image, IOType.IN_MEMORY)], + app_context=app_context, + bundle_config_names=config_names, + name="nnunet_bundle_spleen_seg_op", + ) + + # Create DICOM Seg writer providing the required segment description for each segment with + # the actual algorithm and the pertinent organ/tissue. The segment_label, algorithm_name, + # and algorithm_version are of DICOM VR LO type, limited to 64 chars. + # https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html + segment_descriptions = [ + SegmentDescription( + segment_label="Spleen", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Spleen, + algorithm_name="volumetric (3D) segmentation of the spleen from CT image", + algorithm_family=codes.DCM.ArtificialIntelligence, + algorithm_version="0.3.2", + ) + ] + + custom_tags = {"SeriesDescription": "AI generated Seg, not for clinical use."} + + dicom_seg_writer = DICOMSegmentationWriterOperator( + self, + segment_descriptions=segment_descriptions, + custom_tags=custom_tags, + output_folder=app_output_path, + name="dicom_seg_writer", + ) + + # Create the processing pipeline, by specifying the source and destination operators, and + # ensuring the output from the former matches the input of the latter, in both name and type. + self.add_flow(study_loader_op, series_selector_op, {("dicom_study_list", "dicom_study_list")}) + self.add_flow( + series_selector_op, series_to_vol_op, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(series_to_vol_op, bundle_spleen_seg_op, {("image", "image")}) + # Note below the dicom_seg_writer requires two inputs, each coming from a source operator. + self.add_flow( + series_selector_op, dicom_seg_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(bundle_spleen_seg_op, dicom_seg_writer, {("pred", "seg_image")}) + # Create the surface mesh STL conversion operator and add it to the app execution flow, if needed, by + # uncommenting the following couple lines. + stl_conversion_op = STLConversionOperator( + self, output_file=app_output_path.joinpath("stl/spleen.stl"), name="stl_conversion_op" + ) + self.add_flow(bundle_spleen_seg_op, stl_conversion_op, {("pred", "image")}) + + logging.info(f"End {self.compose.__name__}") + + +# This is a sample series selection rule in JSON, simply selecting CT series. +# If the study has more than 1 CT series, then all of them will be selected. +# Please see more detail in DICOMSeriesSelectorOperator. +Sample_Rules_Text = """ +{ + "selections": [ + { + "name": "CT Series", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "SeriesDescription": "(.*?)" + } + } + ] +} +""" + +if __name__ == "__main__": + # Creates the app and test it standalone. When running is this mode, please note the following: + # -m , for model file path + # -i , for input DICOM CT series folder + # -o , for the output folder, default $PWD/output + # e.g. + # monai-deploy exec app.py -i input -m model/model.ts + # + # export HOLOSCAN_INPUT_PATH=dcm + # export HOLOSCAN_MODEL_PATH=spleen_model/model.ts + # export HOLOSCAN_OUTPUT_PATH="output" + logging.info(f"Begin {__name__}") + AISpleennnUNetSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.yaml b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml new file mode 100644 index 00000000..62636118 --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml @@ -0,0 +1,27 @@ +%YAML 1.2 +# SPDX-FileCopyrightText: Copyright (c) 2022-2023 MONAI. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +application: + title: MONAI Deploy App Package - Spleen nnUNet Seg Inference + version: 1.0 + inputFormats: ["file"] + outputFormats: ["file"] + +resources: + cpu: 1 + gpu: 1 + memory: 1Gi + gpuMemory: 7Gi diff --git a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt new file mode 100644 index 00000000..ebce84bd --- /dev/null +++ b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt @@ -0,0 +1,11 @@ +scikit-image>=0.17.2 +pydicom>=2.3.0 +highdicom>=0.18.2 +SimpleITK>=2.0.0 +Pillow>=8.0.0 +numpy-stl>=2.12.0 +trimesh>=3.8.11 +nibabel>=3.2.1 +torch>=1.12.0 +monai>=1.0.0 +nnunetv2>=2.5.1 diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 75176dab..c875eea8 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -25,6 +25,7 @@ IOMapping ModelInfo MonaiBundleInferenceOperator + MonainnUNetBundleInferenceOperator MonaiSegInferenceOperator PNGConverterOperator PublisherOperator @@ -47,6 +48,7 @@ from .dicom_utils import EquipmentInfo, ModelInfo, random_with_n_digits, save_dcm_file, write_common_modules from .inference_operator import InferenceOperator from .monai_bundle_inference_operator import BundleConfigNames, IOMapping, MonaiBundleInferenceOperator +from .monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator from .monai_seg_inference_operator import MonaiSegInferenceOperator from .nii_data_loader_operator import NiftiDataLoader from .png_converter_operator import PNGConverterOperator diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index 7ae4db4d..94c118e3 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -60,7 +60,7 @@ def get_bundle_config(bundle_path, config_names): Gets the configuration parser from the specified Torchscript bundle file path. """ - bundle_suffixes = (".json", ".yaml", "yml") # The only supported file ext(s) + bundle_suffixes = (".json", ".yaml", ".yml") # The only supported file ext(s) config_folder = "extra" def _read_from_archive(archive, root_name: str, config_name: str, do_search=True): @@ -90,7 +90,7 @@ def _read_from_archive(archive, root_name: str, config_name: str, do_search=True name_list = archive.namelist() for suffix in bundle_suffixes: for n in name_list: - if (f"{config_name}{suffix}").casefold in n.casefold(): + if (f"{config_name}{suffix}").casefold() in n.casefold(): logging.debug(f"Trying to read content of config {config_name!r} from {n!r}.") content_text = archive.read(n) break diff --git a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py new file mode 100644 index 00000000..3bedb448 --- /dev/null +++ b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py @@ -0,0 +1,88 @@ +# Copyright 2002 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config +from monai.deploy.utils.importutil import optional_import +from typing import Any, Dict, Tuple, Union +from monai.deploy.core import Image +from pathlib import Path +MONAI_UTILS = "monai.utils" +nibabel, _ = optional_import("nibabel", "3.2.1") +torch, _ = optional_import("torch", "1.10.2") + +NdarrayOrTensor, _ = optional_import("monai.config", name="NdarrayOrTensor") +MetaTensor, _ = optional_import("monai.data.meta_tensor", name="MetaTensor") +PostFix, _ = optional_import("monai.utils.enums", name="PostFix") # For the default meta_key_postfix +first, _ = optional_import("monai.utils.misc", name="first") +ensure_tuple, _ = optional_import(MONAI_UTILS, name="ensure_tuple") +convert_to_dst_type, _ = optional_import(MONAI_UTILS, name="convert_to_dst_type") +Key, _ = optional_import(MONAI_UTILS, name="ImageMetaKey") +MetaKeys, _ = optional_import(MONAI_UTILS, name="MetaKeys") +SpaceKeys, _ = optional_import(MONAI_UTILS, name="SpaceKeys") +Compose_, _ = optional_import("monai.transforms", name="Compose") +ConfigParser_, _ = optional_import("monai.bundle", name="ConfigParser") +MapTransform_, _ = optional_import("monai.transforms", name="MapTransform") +SimpleInferer, _ = optional_import("monai.inferers", name="SimpleInferer") + +Compose: Any = Compose_ +MapTransform: Any = MapTransform_ +ConfigParser: Any = ConfigParser_ +__all__ = ["MonainnUNetBundleInferenceOperator"] + + +class MonainnUNetBundleInferenceOperator(MonaiBundleInferenceOperator): + """ + A specialized operator for performing inference using the MONAI nnUNet bundle. + This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific + configurations and prediction logic. It initializes the nnUNet predictor and provides + a method for performing inference on input data. + + Attributes + ---------- + _nnunet_predictor : torch.nn.Module + The nnUNet predictor module used for inference. + + Methods + ------- + _init_config(config_names) + Initializes the configuration for the nnUNet bundle, including parsing the bundle + configuration and setting up the nnUNet predictor. + predict(data, *args, **kwargs) + Performs inference on the input data using the nnUNet predictor. + """ + + def __init__( + self, + *args, + **kwargs, + ): + + + super().__init__(*args, **kwargs) + + self._nnunet_predictor : torch.nn.Module = None + + + def _init_config(self, config_names): + + super()._init_config(config_names) + parser = get_bundle_config(str(self._bundle_path), config_names) + parser['bundle_root'] = str(Path(self._bundle_path).parent.parent.parent) + self._parser = parser + + self._nnunet_predictor = parser.get_parsed_content("network_def") + + def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, ...], Dict[Any, Any]]: + """Predicts output using the inferer.""" + + self._nnunet_predictor.predictor.network = self._model_network + #os.environ['nnUNet_def_n_proc'] = "1" + return self._nnunet_predictor(torch.unsqueeze(data, 0)) From a8df76639629e5335bc96560178de36a26bc7f2b Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Thu, 27 Mar 2025 03:02:29 -0400 Subject: [PATCH 083/118] CCHMC Ped Abd CT Seg Example App (#525) * hugging_face_integration_app dependency cleanup Signed-off-by: bluna301 * cchmc_ped_abd_ct_seg example app Signed-off-by: bluna301 * license update + code optimizations Signed-off-by: bluna301 * cleanup Signed-off-by: bluna301 * spelling + dependency cleanup Signed-off-by: bluna301 * model DICOM tag cleanup Signed-off-by: bluna301 --------- Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- docs/source/getting_started/examples.md | 1 + .../apps/cchmc_ped_abd_ct_seg_app/README.md | 40 ++ .../apps/cchmc_ped_abd_ct_seg_app/__init__.py | 29 ++ .../apps/cchmc_ped_abd_ct_seg_app/__main__.py | 26 ++ .../abdomen_seg_operator.py | 294 +++++++++++++ examples/apps/cchmc_ped_abd_ct_seg_app/app.py | 281 +++++++++++++ .../apps/cchmc_ped_abd_ct_seg_app/app.yaml | 32 ++ .../dicom_sc_writer_operator.py | 253 ++++++++++++ .../mongodb_entry_creator_operator.py | 349 ++++++++++++++++ .../mongodb_writer_operator.py | 235 +++++++++++ .../post_transforms.py | 387 ++++++++++++++++++ .../cchmc_ped_abd_ct_seg_app/requirements.txt | 27 ++ .../scripts/map_build.sh | 29 ++ .../scripts/map_extract.sh | 31 ++ .../scripts/map_run.sh | 31 ++ .../scripts/map_run_interactive.sh | 37 ++ .../scripts/model_run.sh | 21 + requirements-examples.txt | 1 + 18 files changed, 2104 insertions(+) create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/README.md create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/app.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py create mode 100644 examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh create mode 100755 examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh diff --git a/docs/source/getting_started/examples.md b/docs/source/getting_started/examples.md index e16873c3..521a4e52 100644 --- a/docs/source/getting_started/examples.md +++ b/docs/source/getting_started/examples.md @@ -13,3 +13,4 @@ - ai_unetr_seg_app - dicom_series_to_image_app - breast_density_classifer_app +- cchmc_ped_abd_ct_seg_app diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/README.md b/examples/apps/cchmc_ped_abd_ct_seg_app/README.md new file mode 100644 index 00000000..5e1a8a21 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/README.md @@ -0,0 +1,40 @@ +# MONAI Application Package (MAP) for CCHMC Pediatric Abdominal CT Segmentation MONAI Bundle + +This MAP is based on the [CCHMC Pediatric Abdominal CT Segmentation MONAI Bundle](https://github.com/cchmc-dll/pediatric_abdominal_segmentation_bundle/tree/original). This model was developed at Cincinnati Children's Hospital Medical Center by the Department of Radiology. + +The PyTorch and TorchScript DynUNet models can be downloaded from the [MONAI Bundle Repository](https://github.com/cchmc-dll/pediatric_abdominal_segmentation_bundle/tree/original/models). + +For questions, please feel free to contact Elan Somasundaram (Elanchezhian.Somasundaram@cchmc.org) and Bryan Luna (Bryan.Luna@cchmc.org). + +## Unique Features + +Some unique features of this MAP pipeline include: +- **Custom Inference Operator:** custom `AbdomenSegOperator` enables either PyTorch or TorchScript model loading +- **DICOM Secondary Capture Output:** custom `DICOMSecondaryCaptureWriterOperator` writes a DICOM SC with organ contours +- **Output Filtering:** model produces Liver-Spleen-Pancreas segmentations, but seg visibility in the outputs (DICOM SEG, SC, SR) can be controlled in `app.py` +- **MONAI Deploy Express MongoDB Write:** custom operators (`MongoDBEntryCreatorOperator` and `MongoDBWriterOperator`) allow for writing to the MongoDB database associated with MONAI Deploy Express + +## Scripts +Several scripts have been compiled that quickly execute useful actions (such as running the app code locally with Python interpreter, MAP packaging, MAP execution, etc.). Some scripts require the input of command line arguments; review the `scripts` folder for more details. + +## Notes +The DICOM Series selection criteria has been customized based on the model's training and CCHMC use cases. By default, Axial CT series with Slice Thickness between 3.0 - 5.0 mm (inclusive) will be selected for. + +If MongoDB writing is not desired, please comment out the relevant sections in `app.py` and the `AbdomenSegOperator`. + +To execute the pipeline with MongoDB writing enabled, it is best to create a `.env` file that the `MongoDBWriterOperator` can load in. Below is an example `.env` file that follows the format outlined in this operator; note that these values are the default variable values as defined in the [.env](https://github.com/Project-MONAI/monai-deploy/blob/main/deploy/monai-deploy-express/.env) and [docker-compose.yaml](https://github.com/Project-MONAI/monai-deploy/blob/main/deploy/monai-deploy-express/docker-compose.yml) files of v0.6.0 of MONAI Deploy Express: + +```dotenv +MONGODB_USERNAME=root +MONGODB_PASSWORD=rootpassword +MONGODB_PORT=27017 +MONGODB_IP_DOCKER=172.17.0.1 # default Docker bridge network IP +``` + +Prior to packaging into a MAP, the MongoDB credentials should be hardcoded into the `MongoDBWriterOperator`. + +The MONAI Deploy Express MongoDB Docker container (`mdl-mongodb`) needs to be connected to the Docker bridge network in order for the MongoDB write to be successful. Executing the following command in a MONAI Deploy Express terminal will establish this connection: + +```bash +docker network connect bridge mdl-mongodb +``` diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py b/examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py new file mode 100644 index 00000000..06014cc7 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/__init__.py @@ -0,0 +1,29 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# __init__.py is used to initialize a Python package +# ensures that the directory __init__.py resides in is included at the start of the sys.path +# this is useful when you want to import modules from this directory, even if it’s not the +# directory where your Python script is running. + +# give access to operating system and Python interpreter +import os +import sys + +# grab absolute path of directory containing __init__.py +_current_dir = os.path.abspath(os.path.dirname(__file__)) + +# if sys.path is not the same as the directory containing the __init__.py file +if sys.path and os.path.abspath(sys.path[0]) != _current_dir: + # insert directory containing __init__.py file at the beginning of sys.path + sys.path.insert(0, _current_dir) +# delete variable +del _current_dir diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py b/examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py new file mode 100644 index 00000000..80cca2fa --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/__main__.py @@ -0,0 +1,26 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# __main__.py is needed for MONAI Application Packager to detect the main app code (app.py) when +# app.py is executed in the application folder path +# e.g., python my_app + +import logging + +# import AIAbdomenSegApp class from app.py +from app import AIAbdomenSegApp + +# if __main__.py is being run directly +if __name__ == "__main__": + logging.info(f"Begin {__name__}") + # create and run an instance of AIAbdomenSegApp + AIAbdomenSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py new file mode 100644 index 00000000..2f412f14 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/abdomen_seg_operator.py @@ -0,0 +1,294 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path +from typing import List + +import torch +from numpy import float32, int16 + +# import custom transforms from post_transforms.py +from post_transforms import CalculateVolumeFromMaskd, ExtractVolumeToTextd, LabelToContourd, OverlayImageLabeld + +import monai +from monai.deploy.core import AppContext, Fragment, Model, Operator, OperatorSpec +from monai.deploy.operators.monai_seg_inference_operator import InfererType, InMemImageReader, MonaiSegInferenceOperator +from monai.transforms import ( + Activationsd, + AsDiscreted, + CastToTyped, + Compose, + CropForegroundd, + EnsureChannelFirstd, + EnsureTyped, + Invertd, + LoadImaged, + Orientationd, + SaveImaged, + ScaleIntensityRanged, + Spacingd, +) + + +# this operator performs inference with the new version of the bundle +class AbdomenSegOperator(Operator): + """Performs segmentation inference with a custom model architecture.""" + + DEFAULT_OUTPUT_FOLDER = Path.cwd() / "output" + + def __init__( + self, + fragment: Fragment, + *args, + app_context: AppContext, + model_path: Path, + output_folder: Path = DEFAULT_OUTPUT_FOLDER, + output_labels: List[int], + **kwargs, + ): + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + self._input_dataset_key = "image" + self._pred_dataset_key = "pred" + + # self.model_path is compatible with TorchScript and PyTorch model workflows (pythonic and MAP) + self.model_path = self._find_model_file_path(model_path) + + self.output_folder = output_folder + self.output_folder.mkdir(parents=True, exist_ok=True) + self.output_labels = output_labels + self.app_context = app_context + self.input_name_image = "image" + self.output_name_seg = "seg_image" + self.output_name_text_dicom_sr = "result_text_dicom_sr" + self.output_name_text_mongodb = "result_text_mongodb" + self.output_name_sc_path = "dicom_sc_dir" + + # the base class has an attribute called fragment to hold the reference to the fragment object + super().__init__(fragment, *args, **kwargs) + + # find model path; supports TorchScript and PyTorch model workflows (pythonic and MAP) + def _find_model_file_path(self, model_path: Path): + # when executing pythonically, model_path is a file + # when executing as MAP, model_path is a directory (/opt/holoscan/models) + # torch.load() from PyTorch workflow needs file path; can't load model from directory + # returns first found file in directory in this case + if model_path: + if model_path.is_file(): + return model_path + elif model_path.is_dir(): + for file in model_path.rglob("*"): + if file.is_file(): + return file + + raise ValueError(f"Model file not found in the provided path: {model_path}") + + # load a PyTorch model and register it in app_context + def _load_pytorch_model(self): + + _device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + _kernel_size: tuple = (3, 3, 3, 3, 3, 3) + _strides: tuple = (1, 2, 2, 2, 2, (2, 2, 1)) + _upsample_kernel_size: tuple = (2, 2, 2, 2, (2, 2, 1)) + + # create DynUNet model with the specified architecture parameters + move to computational device (GPU or CPU) + # parameters pulled from inference.yaml file of the MONAI bundle + model = monai.networks.nets.dynunet.DynUNet( + spatial_dims=3, + in_channels=1, + out_channels=4, + kernel_size=_kernel_size, + strides=_strides, + upsample_kernel_size=_upsample_kernel_size, + norm_name="INSTANCE", + deep_supervision=False, + res_block=True, + ).to(_device) + + # load model state dictionary (i.e. mapping param names to tensors) via torch.load + # weights_only=True to avoid arbitrary code execution during unpickling + state_dict = torch.load(self.model_path, weights_only=True) + + # assign loaded weights to model architecture via load_state_dict + model.load_state_dict(state_dict) + + # set model in evaluation (inference) mode + model.eval() + + # create a MONAI Model object to encapsulate the PyTorch model and metadata + loaded_model = Model(self.model_path, name="ped_abd_ct_seg") + + # assign loaded PyTorch model as the predictor for the Model object + loaded_model.predictor = model + + # register the loaded Model object in the application context so other operators can access it + # MonaiSegInferenceOperator uses _get_model method to load models; looks at app_context.models first + self.app_context.models = loaded_model + + def setup(self, spec: OperatorSpec): + spec.input(self.input_name_image) + + # DICOM SEG + spec.output(self.output_name_seg) + + # DICOM SR + spec.output(self.output_name_text_dicom_sr) + + # MongoDB + spec.output(self.output_name_text_mongodb) + + # DICOM SC + spec.output(self.output_name_sc_path) + + def compute(self, op_input, op_output, context): + input_image = op_input.receive(self.input_name_image) + if not input_image: + raise ValueError("Input image is not found.") + + # this operator gets an in-memory Image object, so a specialized ImageReader is needed. + _reader = InMemImageReader(input_image) + + # preprocessing and postprocessing + pre_transforms = self.pre_process(_reader) + post_transforms = self.post_process(pre_transforms) + + # if PyTorch model + if self.model_path.suffix.lower() == ".pt": + # load the PyTorch model + self._logger.info("PyTorch model detected") + self._load_pytorch_model() + # else, we have TorchScript model + else: + self._logger.info("TorchScript model detected") + + # delegates inference and saving output to the built-in operator. + infer_operator = MonaiSegInferenceOperator( + self.fragment, + roi_size=(96, 96, 96), + pre_transforms=pre_transforms, + post_transforms=post_transforms, + overlap=0.75, + app_context=self.app_context, + model_name="", + inferer=InfererType.SLIDING_WINDOW, + sw_batch_size=4, + model_path=self.model_path, + name="monai_seg_inference_op", + ) + + # setting the keys used in the dictionary-based transforms + infer_operator.input_dataset_key = self._input_dataset_key + infer_operator.pred_dataset_key = self._pred_dataset_key + + seg_image = infer_operator.compute_impl(input_image, context) + + # DICOM SEG + op_output.emit(seg_image, self.output_name_seg) + + # grab result_text_dicom_sr and result_text_mongodb from ExractVolumeToTextd transform + result_text_dicom_sr, result_text_mongodb = self.get_result_text_from_transforms(post_transforms) + if not result_text_dicom_sr or not result_text_mongodb: + raise ValueError("Result text could not be generated.") + + # only log volumes for target organs so logs reflect MAP behavior + self._logger.info(f"Calculated Organ Volumes: {result_text_dicom_sr}") + + # DICOM SR + op_output.emit(result_text_dicom_sr, self.output_name_text_dicom_sr) + + # MongoDB + op_output.emit(result_text_mongodb, self.output_name_text_mongodb) + + # DICOM SC + # temporary DICOM SC (w/o source DICOM metadata) saved in output_folder / temp directory + dicom_sc_dir = self.output_folder / "temp" + + self._logger.info(f"Temporary DICOM SC saved at: {dicom_sc_dir}") + + op_output.emit(dicom_sc_dir, self.output_name_sc_path) + + def pre_process(self, img_reader) -> Compose: + """Composes transforms for preprocessing the input image before predicting on a model.""" + + my_key = self._input_dataset_key + + return Compose( + [ + # img_reader: specialized InMemImageReader, derived from MONAI ImageReader + LoadImaged(keys=my_key, reader=img_reader), + EnsureChannelFirstd(keys=my_key), + Orientationd(keys=my_key, axcodes="RAS"), + Spacingd(keys=my_key, pixdim=[1.5, 1.5, 3.0], mode=["bilinear"]), + ScaleIntensityRanged(keys=my_key, a_min=-250, a_max=400, b_min=0.0, b_max=1.0, clip=True), + CropForegroundd(keys=my_key, source_key=my_key, mode="minimum"), + EnsureTyped(keys=my_key), + CastToTyped(keys=my_key, dtype=float32), + ] + ) + + def post_process(self, pre_transforms: Compose) -> Compose: + """Composes transforms for postprocessing the prediction results.""" + + pred_key = self._pred_dataset_key + + labels = {"background": 0, "liver": 1, "spleen": 2, "pancreas": 3} + + return Compose( + [ + Activationsd(keys=pred_key, softmax=True), + Invertd( + keys=[pred_key, self._input_dataset_key], + transform=pre_transforms, + orig_keys=[self._input_dataset_key, self._input_dataset_key], + meta_key_postfix="meta_dict", + nearest_interp=[False, False], + to_tensor=True, + ), + AsDiscreted(keys=pred_key, argmax=True), + # custom post-processing steps + CalculateVolumeFromMaskd(keys=pred_key, label_names=labels), + # optional code for saving segmentation masks as a NIfTI + # SaveImaged( + # keys=pred_key, + # output_ext=".nii.gz", + # output_dir=self.output_folder / "NIfTI", + # meta_keys="pred_meta_dict", + # separate_folder=False, + # output_dtype=int16 + # ), + # volume data stored in dictionary under pred_key + '_volumes' key + ExtractVolumeToTextd( + keys=[pred_key + "_volumes"], label_names=labels, output_labels=self.output_labels + ), + # comment out LabelToContourd for seg masks instead of contours; organ filtering will be lost + LabelToContourd(keys=pred_key, output_labels=self.output_labels), + OverlayImageLabeld(image_key=self._input_dataset_key, label_key=pred_key, overlay_key="overlay"), + SaveImaged( + keys="overlay", + output_ext=".dcm", + # save temporary DICOM SC (w/o source DICOM metadata) in output_folder / temp directory + output_dir=self.output_folder / "temp", + separate_folder=False, + output_dtype=int16, + ), + ] + ) + + # grab volume data from ExtractVolumeToTextd transform + def get_result_text_from_transforms(self, post_transforms: Compose): + """Extracts the result_text variables from post-processing transforms output.""" + + # grab the result_text variables from ExractVolumeToTextd transfor + for transform in post_transforms.transforms: + if isinstance(transform, ExtractVolumeToTextd): + return transform.result_text_dicom_sr, transform.result_text_mongodb + return None diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/app.py b/examples/apps/cchmc_ped_abd_ct_seg_app/app.py new file mode 100644 index 00000000..845954b0 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/app.py @@ -0,0 +1,281 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path + +# custom inference operator +from abdomen_seg_operator import AbdomenSegOperator + +# custom DICOM Secondary Capture (SC) writer operator +from dicom_sc_writer_operator import DICOMSCWriterOperator + +# custom MongoDB operators +from mongodb_entry_creator_operator import MongoDBEntryCreatorOperator +from mongodb_writer_operator import MongoDBWriterOperator + +# required for setting SegmentDescription attributes +# direct import as this is not part of App SDK package +from pydicom.sr.codedict import codes + +from monai.deploy.conditions import CountCondition +from monai.deploy.core import Application +from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator +from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription +from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator +from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator +from monai.deploy.operators.dicom_text_sr_writer_operator import DICOMTextSRWriterOperator, EquipmentInfo, ModelInfo + + +# inherit new Application class instance, AIAbdomenSegApp, from MONAI Application base class +# base class provides support for chaining up operators and executing application +class AIAbdomenSegApp(Application): + """Demonstrates inference with customized CCHMC pediatric abdominal segmentation bundle inference operator, with + DICOM files as input/output + + This application loads a set of DICOM instances, selects the appropriate series, converts the series to + 3D volume image, performs inference with a custom inference operator, including pre-processing + and post-processing, saves a DICOM SEG (organ contours), a DICOM Secondary Capture (organ contours overlay), + and a DICOM SR (organ volumes), and writes organ volumes and relevant DICOM tags to the MONAI Deploy Express + MongoDB database (optional). + + Pertinent MONAI Bundle: + https://github.com/cchmc-dll/pediatric_abdominal_segmentation_bundle/tree/original + + Execution Time Estimate: + With a NVIDIA GeForce RTX 3090 24GB GPU, for an input DICOM Series of 204 instances, the execution time is around + 25 seconds for DICOM SEG, DICOM SC, and DICOM SR outputs, as well as the MDE MongoDB database write. + """ + + def __init__(self, *args, **kwargs): + """Creates an application instance.""" + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + super().__init__(*args, **kwargs) + + def run(self, *args, **kwargs): + # this method calls the base class to run; can be omitted if simply calling through + self._logger.info(f"Begin {self.run.__name__}") + super().run(*args, **kwargs) + self._logger.info(f"End {self.run.__name__}") + + # use compose method to instantiate operators and connect them to form a Directed Acyclic Graph (DAG) + def compose(self): + """Creates the app specific operators and chain them up in the processing DAG.""" + + logging.info(f"Begin {self.compose.__name__}") + + # use Commandline options over environment variables to init context + app_context = Application.init_app_context(self.argv) + app_input_path = Path(app_context.input_path) + app_output_path = Path(app_context.output_path) + model_path = Path(app_context.model_path) + + # create the custom operator(s) as well as SDK built-in operator(s) + # DICOM Data Loader op + study_loader_op = DICOMDataLoaderOperator( + self, CountCondition(self, 1), input_folder=app_input_path, name="study_loader_op" + ) + + # custom DICOM Series Selector op + # all_matched and sort_by_sop_instance_count = True; want all series that meet the selection criteria + # to be matched, and SOP sorting + series_selector_op = DICOMSeriesSelectorOperator( + self, rules=Sample_Rules_Text, all_matched=True, sort_by_sop_instance_count=True, name="series_selector_op" + ) + + # DICOM Series to Volume op + series_to_vol_op = DICOMSeriesToVolumeOperator(self, name="series_to_vol_op") + + # custom inference op + # output_labels specifies which of the organ segmentations are desired in the DICOM SEG, DICOM SC, and DICOM SR outputs + # 1 = Liver, 2 = Spleen, 3 = Pancreas; all segmentations performed, but visibility in outputs (SEG, SC, SR) controlled here + # all organ volumes will be written to MongoDB + output_labels = [1, 2, 3] + abd_seg_op = AbdomenSegOperator( + self, app_context=app_context, model_path=model_path, output_labels=output_labels, name="abd_seg_op" + ) + + # create DICOM Seg writer providing the required segment description for each segment with + # the actual algorithm and the pertinent organ/tissue; the segment_label, algorithm_name, + # and algorithm_version are of DICOM VR LO type, limited to 64 chars + # https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html + + # general algorithm information + _algorithm_name = "CCHMC Pediatric CT Abdominal Segmentation" + _algorithm_family = codes.DCM.ArtificialIntelligence + _algorithm_version = "0.4.3" + + segment_descriptions = [ + SegmentDescription( + segment_label="Liver", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Liver, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + SegmentDescription( + segment_label="Spleen", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Spleen, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + SegmentDescription( + segment_label="Pancreas", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Pancreas, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + ] + + # custom tags - add Device UID to DICOM SEG to match SR and SC tags + custom_tags_seg = {"SeriesDescription": "AI Generated DICOM SEG; Not for Clinical Use.", "DeviceUID": "0.0.1"} + custom_tags_sr = {"SeriesDescription": "AI Generated DICOM SR; Not for Clinical Use."} + custom_tags_sc = {"SeriesDescription": "AI Generated DICOM Secondary Capture; Not for Clinical Use."} + + # DICOM SEG Writer op writes content from segment_descriptions to output DICOM images as DICOM tags + dicom_seg_writer = DICOMSegmentationWriterOperator( + self, + segment_descriptions=segment_descriptions, + custom_tags=custom_tags_seg, + # store DICOM SEG in SEG subdirectory; necessary for routing in CCHMC MDE workflow definition + output_folder=app_output_path / "SEG", + # omit_empty_frames is a default parameteter (type bool) of DICOMSegmentationWriterOperator + # dictates whether or not to omit frames that contain no segmented pixels from the output segmentation + # default value is True; changed to False to ensure input and output DICOM series #'s match + omit_empty_frames=False, + name="dicom_seg_writer", + ) + + # model and equipment info + my_model_info = ModelInfo("CCHMC CAIIR", "CCHMC Pediatric CT Abdominal Segmentation", "0.4.3", "0.0.1") + my_equipment = EquipmentInfo(manufacturer="The MONAI Consortium", manufacturer_model="MONAI Deploy App SDK") + + # DICOM SR Writer op + dicom_sr_writer = DICOMTextSRWriterOperator( + self, + # copy_tags is a default parameteter (type bool) of DICOMTextSRWriterOperator; default value is True + # dictates whether or not to copy DICOM attributes from the selected DICOM series + # changed to True to copy DICOM attributes so DICOM SR has same Study UID + copy_tags=True, + model_info=my_model_info, + equipment_info=my_equipment, + custom_tags=custom_tags_sr, + # store DICOM SR in SR subdirectory; necessary for routing in CCHMC MDE workflow definition + output_folder=app_output_path / "SR", + ) + + # custom DICOM SC Writer op + dicom_sc_writer = DICOMSCWriterOperator( + self, + model_info=my_model_info, + equipment_info=my_equipment, + custom_tags=custom_tags_sc, + # store DICOM SC in SC subdirectory; necessary for routing in CCHMC MDE workflow definition + output_folder=app_output_path / "SC", + ) + + # MongoDB database, collection, and MAP version info + database_name = "CTLiverSpleenSegPredictions" + collection_name = "OrganVolumes" + map_version = "0.0.1" + + # custom MongoDB Entry Creator op + mongodb_entry_creator = MongoDBEntryCreatorOperator(self, map_version=map_version) + + # custom MongoDB Writer op + mongodb_writer = MongoDBWriterOperator(self, database_name=database_name, collection_name=collection_name) + + # create the processing pipeline, by specifying the source and destination operators, and + # ensuring the output from the former matches the input of the latter, in both name and type + # instantiate and connect operators using self.add_flow(); specify current operator, next operator, and tuple to match I/O + self.add_flow(study_loader_op, series_selector_op, {("dicom_study_list", "dicom_study_list")}) + self.add_flow( + series_selector_op, series_to_vol_op, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(series_to_vol_op, abd_seg_op, {("image", "image")}) + + # note below the dicom_seg_writer, dicom_sr_writer, dicom_sc_writer, and mongodb_entry_creator each require + # two inputs, each coming from a source operator + + # DICOM SEG + self.add_flow( + series_selector_op, dicom_seg_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, dicom_seg_writer, {("seg_image", "seg_image")}) + + # DICOM SR + self.add_flow( + series_selector_op, dicom_sr_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, dicom_sr_writer, {("result_text_dicom_sr", "text")}) + + # DICOM SC + self.add_flow( + series_selector_op, dicom_sc_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, dicom_sc_writer, {("dicom_sc_dir", "dicom_sc_dir")}) + + # MongoDB + self.add_flow( + series_selector_op, mongodb_entry_creator, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(abd_seg_op, mongodb_entry_creator, {("result_text_mongodb", "text")}) + self.add_flow(mongodb_entry_creator, mongodb_writer, {("mongodb_database_entry", "mongodb_database_entry")}) + + logging.info(f"End {self.compose.__name__}") + + +# series selection rule in JSON, which selects for axial CT series; flexible ST choices: +# StudyDescription: matches any value +# Modality: matches "CT" value (case-insensitive); filters out non-CT modalities +# ImageType: matches value that contains "PRIMARY", "ORIGINAL", and "AXIAL"; filters out most cor and sag views +# SeriesDescription: matches any values that do not contain "cor" or "sag" (case-insensitive); filters out cor and sag views +# SliceThickness: supports list, string, and numerical matching: +# [3, 5]: matches ST values between 3 and 5 +# "^(5(\\\\.0+)?|5)$": RegEx; matches ST values of 5, 5.0, 5.00, etc. +# 5: matches ST values of 5, 5.0, 5.00, etc. +# all valid series will be selected; downstream operators only perform inference and write outputs for 1st selected series +# please see more detail in DICOMSeriesSelectorOperator + +Sample_Rules_Text = """ +{ + "selections": [ + { + "name": "Axial CT Series", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "ImageType": ["PRIMARY", "ORIGINAL", "AXIAL"], + "SeriesDescription": "(?i)^(?!.*(cor|sag)).*$", + "SliceThickness": [3, 5] + } + } + ] +} +""" + +# if executing application code using python interpreter: +if __name__ == "__main__": + # creates the app and test it standalone; when running is this mode, please note the following: + # -m , for model file path + # -i , for input DICOM CT series folder + # -o , for the output folder, default $PWD/output + # e.g. + # monai-deploy exec app.py -i input -m model/dynunet_FT.ts + # + logging.info(f"Begin {__name__}") + AIAbdomenSegApp().run() + logging.info(f"End {__name__}") diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml b/examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml new file mode 100644 index 00000000..badfac7c --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/app.yaml @@ -0,0 +1,32 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +# app.yaml is a configuration file that specifies MAP settings +# used by MONAI App SDK to understand how to run our app in a MAP and what resources it needs + +# specifies high-level information about our app +application: + title: MONAI Deploy App Package - CCHMC Pediatric CT Abdominal Segmentation + version: 0.0.1 + inputFormats: ["file"] + outputFormats: ["file"] + +# specifies the resources our app needs to run +# per MONAI docs (https://docs.monai.io/projects/monai-deploy-app-sdk/en/latest/developing_with_sdk/executing_packaged_app_locally.html) +# MAR does not validate all of the resource requirements embedded in the MAP to ensure they are met in host system +# e.g, MAR will throw an error if gpu requirement is not met on host system; however, gpuMemory parameter doesn't appear to be validated +resources: + cpu: 1 + gpu: 1 + memory: 1Gi + # during MAP execution, for an input DICOM Series of 204 instances, GPU usage peaks at just under 8900 MiB ~= 9.3 GB ~= 8.7 Gi + gpuMemory: 9Gi diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py new file mode 100644 index 00000000..9479485e --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/dicom_sc_writer_operator.py @@ -0,0 +1,253 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os +from pathlib import Path +from typing import Dict, Optional, Union + +import pydicom + +from monai.deploy.core import Fragment, Operator, OperatorSpec +from monai.deploy.core.domain.dicom_series import DICOMSeries +from monai.deploy.core.domain.dicom_series_selection import StudySelectedSeries +from monai.deploy.operators.dicom_utils import EquipmentInfo, ModelInfo, write_common_modules +from monai.deploy.utils.importutil import optional_import +from monai.deploy.utils.version import get_sdk_semver + +dcmread, _ = optional_import("pydicom", name="dcmread") +dcmwrite, _ = optional_import("pydicom.filewriter", name="dcmwrite") +generate_uid, _ = optional_import("pydicom.uid", name="generate_uid") +ImplicitVRLittleEndian, _ = optional_import("pydicom.uid", name="ImplicitVRLittleEndian") +Dataset, _ = optional_import("pydicom.dataset", name="Dataset") +FileDataset, _ = optional_import("pydicom.dataset", name="FileDataset") +Sequence, _ = optional_import("pydicom.sequence", name="Sequence") + + +class DICOMSCWriterOperator(Operator): + """Class to write a new DICOM Secondary Capture (DICOM SC) instance with source DICOM Series metadata included. + + Named inputs: + dicom_sc_dir: file path of temporary DICOM SC (w/o source DICOM Series metadata). + study_selected_series_list: DICOM Series for copying metadata from. + + Named output: + None. + + File output: + New, updated DICOM SC file (with source DICOM Series metadata) in the provided output folder. + """ + + # file extension for the generated DICOM Part 10 file + DCM_EXTENSION = ".dcm" + # the default output folder for saving the generated DICOM instance file + # DEFAULT_OUTPUT_FOLDER = Path(os.path.join(os.path.dirname(__file__))) / "output" + DEFAULT_OUTPUT_FOLDER = Path.cwd() / "output" + + def __init__( + self, + fragment: Fragment, + *args, + output_folder: Union[str, Path], + model_info: ModelInfo, + equipment_info: Optional[EquipmentInfo] = None, + custom_tags: Optional[Dict[str, str]] = None, + **kwargs, + ): + """Class to write a new DICOM Secondary Capture (DICOM SC) instance with source DICOM Series metadata. + + Args: + output_folder (str or Path): The folder for saving the generated DICOM SC instance file. + model_info (ModelInfo): Object encapsulating model creator, name, version and UID. + equipment_info (EquipmentInfo, optional): Object encapsulating info for DICOM Equipment Module. + Defaults to None. + custom_tags (Dict[str, str], optional): Dictionary for setting custom DICOM tags using Keywords and str values only. + Defaults to None. + + Raises: + ValueError: If result cannot be found either in memory or from file. + """ + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + + # need to init the output folder until the execution context supports dynamic FS path + # not trying to create the folder to avoid exception on init + self.output_folder = Path(output_folder) if output_folder else DICOMSCWriterOperator.DEFAULT_OUTPUT_FOLDER + self.input_name_sc_dir = "dicom_sc_dir" + self.input_name_study_series = "study_selected_series_list" + + # for copying DICOM attributes from a provided DICOMSeries + # required input for write_common_modules; will always be True for this implementation + self.copy_tags = True + + self.model_info = model_info if model_info else ModelInfo() + self.equipment_info = equipment_info if equipment_info else EquipmentInfo() + self.custom_tags = custom_tags + + # set own Modality and SOP Class UID + # Standard SOP Classes: https://dicom.nema.org/dicom/2013/output/chtml/part04/sect_B.5.html + # Modality, e.g., + # "OT" for PDF + # "SR" for Structured Report. + # Media Storage SOP Class UID, e.g., + # "1.2.840.10008.5.1.4.1.1.88.11" for Basic Text SR Storage + # "1.2.840.10008.5.1.4.1.1.104.1" for Encapsulated PDF Storage, + # "1.2.840.10008.5.1.4.1.1.88.34" for Comprehensive 3D SR IOD + # "1.2.840.10008.5.1.4.1.1.66.4" for Segmentation Storage + self.modality_type = "OT" # OT Modality for Secondary Capture + self.sop_class_uid = ( + "1.2.840.10008.5.1.4.1.1.7.4" # SOP Class UID for Multi-frame True Color Secondary Capture Image Storage + ) + # custom OverlayImageLabeld post-processing transform creates an RBG overlay + + # equipment version may be different from contributing equipment version + try: + self.software_version_number = get_sdk_semver() # SDK Version + except Exception: + self.software_version_number = "" + self.operators_name = f"AI Algorithm {self.model_info.name}" + + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + """Set up the named input(s), and output(s) if applicable. + + This operator does not have an output for the next operator, rather file output only. + + Args: + spec (OperatorSpec): The Operator specification for inputs and outputs etc. + """ + + spec.input(self.input_name_sc_dir) + spec.input(self.input_name_study_series) + + def compute(self, op_input, op_output, context): + """Performs computation for this operator and handles I/O. + + For now, only a single result content is supported, which could be in memory or an accessible file. + The DICOM Series used during inference is required (and copy_tags is hardcoded to True). + + When there are multiple selected series in the input, the first series' containing study will + be used for retrieving DICOM Study module attributes, e.g. StudyInstanceUID. + + Raises: + NotADirectoryError: When temporary DICOM SC path is not a directory. + FileNotFoundError: When result object not in the input, and result file not found either. + ValueError: Content object and file path not in the inputs, or no DICOM series provided. + IOError: If the input content is blank. + """ + + # receive the temporary DICOM SC file path and study selected series list + dicom_sc_dir = Path(op_input.receive(self.input_name_sc_dir)) + if not dicom_sc_dir: + raise IOError("Temporary DICOM SC path is read but blank.") + if not dicom_sc_dir.is_dir(): + raise NotADirectoryError(f"Provided temporary DICOM SC path is not a directory: {dicom_sc_dir}") + self._logger.info(f"Received temporary DICOM SC path: {dicom_sc_dir}") + + study_selected_series_list = op_input.receive(self.input_name_study_series) + if not study_selected_series_list or len(study_selected_series_list) < 1: + raise ValueError("Missing input, list of 'StudySelectedSeries'.") + + # retrieve the DICOM Series used during inference in order to grab appropriate study/series level tags + # this will be the 1st Series in study_selected_series_list + dicom_series = None + for study_selected_series in study_selected_series_list: + if not isinstance(study_selected_series, StudySelectedSeries): + raise ValueError(f"Element in input is not expected type, {StudySelectedSeries}.") + selected_series = study_selected_series.selected_series[0] + dicom_series = selected_series.series + break + + # log basic DICOM metadata for the retrieved DICOM Series + self._logger.debug(f"Dicom Series: {dicom_series}") + + # the output folder should come from the execution context when it is supported + self.output_folder.mkdir(parents=True, exist_ok=True) + + # write the new DICOM SC instance + self.write(dicom_sc_dir, dicom_series, self.output_folder) + + def write(self, dicom_sc_dir, dicom_series: DICOMSeries, output_dir: Path): + """Writes a new, updated DICOM SC instance and deletes the temporary DICOM SC instance. + The new, updated DICOM SC instance is the temporary DICOM SC instance with source + DICOM Series metadata copied. + + Args: + dicom_sc_dir: temporary DICOM SC file path. + dicom_series (DICOMSeries): DICOMSeries object encapsulating the original series. + + Returns: + None + + File output: + New, updated DICOM SC file (with source DICOM Series metadata) in the provided output folder. + """ + + if not isinstance(output_dir, Path): + raise ValueError("output_dir is not a valid Path.") + + output_dir.mkdir(parents=True, exist_ok=True) # just in case + + # find the temporary DICOM SC file in the directory; there should only be one .dcm file present + dicom_files = list(dicom_sc_dir.glob("*.dcm")) + dicom_sc_file = dicom_files[0] + + # load the temporary DICOM SC file using pydicom + dicom_sc_dataset = pydicom.dcmread(dicom_sc_file) + self._logger.info(f"Loaded temporary DICOM SC file: {dicom_sc_file}") + + # use write_common_modules to copy metadata from dicom_series + # this will copy metadata and return an updated Dataset + ds = write_common_modules( + dicom_series, + self.copy_tags, # always True for this implementation + self.modality_type, + self.sop_class_uid, + self.model_info, + self.equipment_info, + ) + + # Secondary Capture specific tags + ds.ImageType = ["DERIVED", "SECONDARY"] + + # for now, only allow str Keywords and str value + if self.custom_tags: + for k, v in self.custom_tags.items(): + if isinstance(k, str) and isinstance(v, str): + try: + ds.update({k: v}) + except Exception as ex: + # best effort for now + logging.warning(f"Tag {k} was not written, due to {ex}") + + # merge the copied metadata into the loaded temporary DICOM SC file (dicom_sc_dataset) + for tag, value in ds.items(): + dicom_sc_dataset[tag] = value + + # save the updated DICOM SC file to the output folder + # instance file name is the same as the new SOP instance UID + output_file_path = self.output_folder.joinpath( + f"{dicom_sc_dataset.SOPInstanceUID}{DICOMSCWriterOperator.DCM_EXTENSION}" + ) + dicom_sc_dataset.save_as(output_file_path) + self._logger.info(f"Saved updated DICOM SC file at: {output_file_path}") + + # remove the temporary DICOM SC file + os.remove(dicom_sc_file) + self._logger.info(f"Removed temporary DICOM SC file: {dicom_sc_file}") + + # check if the temp directory is empty, then delete it + if not any(dicom_sc_dir.iterdir()): + os.rmdir(dicom_sc_dir) + self._logger.info(f"Removed temporary directory: {dicom_sc_dir}") + else: + self._logger.warning(f"Temporary directory {dicom_sc_dir} is not empty, skipping removal.") diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py new file mode 100644 index 00000000..4f2f275c --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_entry_creator_operator.py @@ -0,0 +1,349 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from datetime import datetime +from typing import Any, Dict, Union + +import pydicom +import pytz + +from monai.deploy.core import Fragment, Operator, OperatorSpec +from monai.deploy.core.domain.dicom_series import DICOMSeries +from monai.deploy.core.domain.dicom_series_selection import StudySelectedSeries + + +class MongoDBEntryCreatorOperator(Operator): + """Class to create a database entry for downstream MONAI Deploy Express MongoDB database writing. + Provided text input and source DICOM Series DICOM tags are used to create the entry. + + Named inputs: + text: text content to be included in the database entry. + study_selected_series_list: DICOM series for copying metadata from. + + Named output: + mongodb_database_entry: formatted MongoDB database entry. Downstream receiver MongoDBWriterOperator will write + the entry to the MONAI Deploy Express MongoDB database. + """ + + def __init__(self, fragment: Fragment, *args, map_version: str, **kwargs): + """Class to create a MONAI Deploy Express MongoDB database entry. Provided text input and + source DICOM Series DICOM tags are used to create the entry. + + Args: + map_version (str): version of the MAP. + + Raises: + ValueError: If result cannot be found either in memory or from file. + """ + + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + self.map_version = map_version + + self.input_name_text = "text" + self.input_name_dcm_series = "study_selected_series_list" + + self.output_name_db_entry = "mongodb_database_entry" + + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + """Set up the named input(s), and output(s). + + Args: + spec (OperatorSpec): The Operator specification for inputs and outputs etc. + """ + + spec.input(self.input_name_text) + spec.input(self.input_name_dcm_series) + + spec.output(self.output_name_db_entry) + + def compute(self, op_input, op_output, context): + """Performs computation for this operator and handles I/O. + + For now, only a single result content is supported, which could be in memory or an accessible file. + The DICOM Series used during inference is required. + + When there are multiple selected series in the input, the first series' containing study will + be used for retrieving DICOM Study module attributes, e.g. StudyInstanceUID. + + Raises: + FileNotFoundError: When result object not in the input, and result file not found either. + ValueError: Content object and file path not in the inputs, or no DICOM series provided. + IOError: If the input content is blank. + """ + + # receive the result text and study selected series list + result_text = str(op_input.receive(self.input_name_text)).strip() + if not result_text: + raise IOError("Input is read but blank.") + + study_selected_series_list = None + try: + study_selected_series_list = op_input.receive(self.input_name_dcm_series) + except Exception: + pass + if not study_selected_series_list or len(study_selected_series_list) < 1: + raise ValueError("Missing input, list of 'StudySelectedSeries'.") + + # retrieve the DICOM Series used during inference in order to grab appropriate Study/Series level tags + # this will be the 1st Series in study_selected_series_list + dicom_series = None + for study_selected_series in study_selected_series_list: + if not isinstance(study_selected_series, StudySelectedSeries): + raise ValueError(f"Element in input is not expected type, {StudySelectedSeries}.") + selected_series = study_selected_series.selected_series[0] + dicom_series = selected_series.series + break + + # create MongoDB entry + mongodb_database_entry = self.create_entry(result_text, dicom_series, self.map_version) + + # emit MongoDB entry + op_output.emit(mongodb_database_entry, self.output_name_db_entry) + + def create_entry(self, result_text: str, dicom_series: DICOMSeries, map_version: str): + """Creates the MONAI Deploy Express MongoDB database entry. + + Args: + result_text (str): text content to be included in the database entry. + dicom_series (DICOMSeries): DICOMSeries object encapsulating the original series. + map_version (str): version of the MAP. + + Returns: + mongodb_database_entry: formatted MongoDB database entry. + """ + + if not result_text or not len(result_text.strip()): + raise ValueError("Content is empty.") + + # get one of the SOP instance's native sop instance dataset + # we will pull Study level (and some Series level) DICOM tags from this SOP instance + # this same strategy is employed by write_common_modules + orig_ds = dicom_series.get_sop_instances()[0].get_native_sop_instance() + + # # loop through dicom series tags; look for discrepancies from SOP instances + # for sop_instance in dicom_series.get_sop_instances(): + # # get the native SOP instance dataset + # dicom_image = sop_instance.get_native_sop_instance() + + # # check if the tag is present in the dataset + # if hasattr(dicom_image, 'Exposure'): + # tag = dicom_image.Exposure + # print(f"Exposure: {tag}") + # else: + # print("Exposure tag not found in this SOP instance.") + + # DICOM TAG WRITING TO MONGODB + # edge cases addressed by looking at DICOM tag Type, Value Representation (VR), + # and Value Multiplicity (VM) specifically for the CT Image CIOD + # https://dicom.innolitics.com/ciods/ct-image + + # define Tag Absent variable + tag_absent = "Tag Absent" + + # STUDY AND SERIES LEVEL DICOM TAGS + + # AccessionNumber - Type: Required (2), VR: SH, VM: 1 + accession_number = orig_ds.AccessionNumber + + # StudyInstanceUID - Type: Required (1), VR: UI, VM: 1 + study_instance_uid = orig_ds.StudyInstanceUID + + # StudyDescription: Type: Optional (3), VR: LO, VM: 1 + # while Optional, only studies with this tag will be routed from Compass and MAP launched per workflow def + study_description = orig_ds.get("StudyDescription", tag_absent) + + # SeriesInstanceUID: Type: Required (1), VR: UI, VM: 1 + series_instance_uid = dicom_series._series_instance_uid + + # SeriesDescription: Type: Optional (3), VR: LO, VM: 1 + series_description = orig_ds.get("SeriesDescription", tag_absent) + + # sop instances should always be available on the MONAI DICOM Series object + series_sop_instances = len(dicom_series._sop_instances) + + # PATIENT DETAIL DICOM TAGS + + # PatientID - Type: Required (2), VR: LO, VM: 1 + patient_id = orig_ds.PatientID + + # PatientName - Type: Required (2), VR: PN, VM: 1 + # need to convert to str; pydicom can't encode PersonName object + patient_name = str(orig_ds.PatientName) + + # PatientSex - Type: Required (2), VR: CS, VM: 1 + patient_sex = orig_ds.PatientSex + + # PatientBirthDate - Type: Required (2), VR: DA, VM: 1 + patient_birth_date = orig_ds.PatientBirthDate + + # PatientAge - Type: Optional (3), VR: AS, VM: 1 + patient_age = orig_ds.get("PatientAge", tag_absent) + + # EthnicGroup - Type: Optional (3), VR: SH, VM: 1 + ethnic_group = orig_ds.get("EthnicGroup", tag_absent) + + # SCAN ACQUISITION PARAMETER DICOM TAGS + + # on CCHMC test cases, the following tags had consistent values for all SOP instances + + # Manufacturer - Type: Required (2), VR: LO, VM: 1 + manufacturer = orig_ds.Manufacturer + + # ManufacturerModelName - Type: Optional (3), VR: LO, VM: 1 + manufacturer_model_name = orig_ds.get("ManufacturerModelName", tag_absent) + + # BodyPartExamined - Type: Optional (3), VR: CS, VM: 1 + body_part_examined = orig_ds.get("BodyPartExamined", tag_absent) + + # row and column pixel spacing are derived from PixelSpacing + # PixelSpacing - Type: Required (1), VR: DS, VM: 2 (handled by MONAI) + row_pixel_spacing = dicom_series._row_pixel_spacing + column_pixel_spacing = dicom_series._col_pixel_spacing + + # per DICOMSeriesToVolumeOperator, depth pixel spacing will always be defined + depth_pixel_spacing = dicom_series._depth_pixel_spacing + + # SliceThickness - Type: Required (2), VR: DS, VM: 1 + slice_thickness = orig_ds.SliceThickness + + # PixelRepresentation - Type: Required (1), VR: US, VM: 1 + pixel_representation = orig_ds.PixelRepresentation + + # BitsStored - Type: Required (1), VR: US, VM: 1 + bits_stored = orig_ds.BitsStored + + # WindowWidth - Type: Conditionally Required (1C), VR: DS, VM: 1-n + window_width = orig_ds.get("WindowWidth", tag_absent) + # for MultiValue case: + if isinstance(window_width, pydicom.multival.MultiValue): + # join multiple values into a single string separated by a | + # convert DSfloat objects to strs to allow joining + window_width = " | ".join([str(window) for window in window_width]) + + # RevolutionTime - Type: Optional (3), VR: FD, VM: 1 + revolution_time = orig_ds.get("RevolutionTime", tag_absent) + + # FocalSpots - Type: Optional (3), VR: DS, VM: 1-n + focal_spots = orig_ds.get("FocalSpots", tag_absent) + # for MultiValue case: + if isinstance(focal_spots, pydicom.multival.MultiValue): + # join multiple values into a single string separated by a | + # convert DSfloat objects to strs to allow joining + focal_spots = " | ".join([str(spot) for spot in focal_spots]) + + # SpiralPitchFactor - Type: Optional (3), VR: FD, VM: 1 + spiral_pitch_factor = orig_ds.get("SpiralPitchFactor", tag_absent) + + # ConvolutionKernel - Type: Optional (3), VR: SH, VM: 1-n + convolution_kernel = orig_ds.get("ConvolutionKernel", tag_absent) + # for MultiValue case: + if isinstance(convolution_kernel, pydicom.multival.MultiValue): + # join multiple values into a single string separated by a | + convolution_kernel = " | ".join(convolution_kernel) + + # ReconstructionDiameter - Type: Optional (3), VR: DS, VM: 1 + reconstruction_diameter = orig_ds.get("ReconstructionDiameter", tag_absent) + + # KVP - Type: Required (2), VR: DS, VM: 1 + kvp = orig_ds.KVP + + # on CCHMC test cases, the following tags did NOT have consistent values for all SOP instances + # as such, if the tag value exists, it will be averaged over all SOP instances + + # initialize an averaged values dictionary + averaged_values: Dict[str, Union[float, str]] = {} + + # tags to check and average + tags_to_average = { + "XRayTubeCurrent": tag_absent, # Type: Optional (3), VR: IS, VM: 1 + "Exposure": tag_absent, # Type: Optional (3), VR: IS, VM: 1 + "CTDIvol": tag_absent, # Type: Optional (3), VR: FD, VM: 1 + } + + # check which tags are present on the 1st SOP instance + for tag, default_value in tags_to_average.items(): + # if the tag exists + if tag in orig_ds: + # loop through SOP instances, grab tag values + values = [] + for sop_instance in dicom_series.get_sop_instances(): + ds = sop_instance.get_native_sop_instance() + value = ds.get(tag, default_value) + # if tag is present on current SOP instance + if value != default_value: + # add tag value to values; convert to float for averaging + values.append(float(value)) + # compute the average if values were collected + if values: + averaged_values[tag] = round(sum(values) / len(values), 3) + else: + averaged_values[tag] = default_value + else: + # if the tag is absent in the first SOP instance, keep the default value + averaged_values[tag] = default_value + + # parse result_text (i.e. predicted organ volumes) and format + map_results = {} + for line in result_text.split("\n"): + if ":" in line: + key, value = line.split(":") + key = key.replace(" ", "") + map_results[key] = value.strip() + + # create the MongoDB database entry + mongodb_database_entry: Dict[str, Any] = { + "Timestamp": datetime.now(pytz.UTC), # timestamp in UTC + "MAPVersion": map_version, + "DICOMSeriesDetails": { + "AccessionNumber": accession_number, + "StudyInstanceUID": study_instance_uid, + "StudyDescription": study_description, + "SeriesInstanceUID": series_instance_uid, + "SeriesDescription": series_description, + "SeriesFileCount": series_sop_instances, + }, + "PatientDetails": { + "PatientID": patient_id, + "PatientName": patient_name, + "PatientSex": patient_sex, + "PatientBirthDate": patient_birth_date, + "PatientAge": patient_age, + "EthnicGroup": ethnic_group, + }, + "ScanAcquisitionDetails": { + "Manufacturer": manufacturer, + "ManufacturerModelName": manufacturer_model_name, + "BodyPartExamined": body_part_examined, + "RowPixelSpacing": row_pixel_spacing, + "ColumnPixelSpacing": column_pixel_spacing, + "DepthPixelSpacing": depth_pixel_spacing, + "SliceThickness": slice_thickness, + "PixelRepresentation": pixel_representation, + "BitsStored": bits_stored, + "WindowWidth": window_width, + "RevolutionTime": revolution_time, + "FocalSpots": focal_spots, + "SpiralPitchFactor": spiral_pitch_factor, + "ConvolutionKernel": convolution_kernel, + "ReconstructionDiameter": reconstruction_diameter, + "KVP": kvp, + }, + "MAPResults": map_results, + } + + # integrate averaged tags into MongoDB entry: + mongodb_database_entry["ScanAcquisitionDetails"].update(averaged_values) + + return mongodb_database_entry diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py new file mode 100644 index 00000000..6d18e395 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/mongodb_writer_operator.py @@ -0,0 +1,235 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os + +from dotenv import load_dotenv + +load_dotenv() + +from pymongo import MongoClient, errors + +from monai.deploy.core import Fragment, Operator, OperatorSpec + + +class MongoDBWriterOperator(Operator): + """Class to write the MONAI Deploy Express MongoDB database with provided database entry. + + Named inputs: + mongodb_database_entry: formatted MongoDB database entry. + + Named output: + None + + Result: + MONAI Deploy Express MongoDB database write of the database entry. + """ + + def __init__(self, fragment: Fragment, *args, database_name: str, collection_name: str, **kwargs): + """Class to write the MONAI Deploy Express MongoDB database with provided database entry. + + Args: + database_name (str): name of the MongoDB database that will be written. + collection_name (str): name of the MongoDB collection that will be written. + + Raises: + Relevant MongoDB errors if database writing is unsuccessful. + """ + + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + self.database_name = database_name + self.collection_name = collection_name + + self.input_name_db_entry = "mongodb_database_entry" + + # MongoDB credentials + self.mongodb_username = os.environ.get("MONGODB_USERNAME") + self.mongodb_password = os.environ.get("MONGODB_PASSWORD") + self.mongodb_port = os.environ.get("MONGODB_PORT") + self.docker_mongodb_ip = os.environ.get("MONGODB_IP_DOCKER") + + # determine the MongoDB IP address based on execution environment + self.mongo_ip = self._get_mongo_ip() + self._logger.info(f"Using MongoDB IP: {self.mongo_ip}") + + # connect to the MongoDB database + self.client = None + + try: + self.client = MongoClient( + f"mongodb://{self.mongodb_username}:{self.mongodb_password}@{self.mongo_ip}:{self.mongodb_port}/?authSource=admin", + serverSelectionTimeoutMS=10000, # 10s timeout for testing connection; 20s by default + ) + if self.client is None: + raise RuntimeError("MongoClient was not created successfully") + ping_response = self.client.admin.command("ping") + self._logger.info( + f"Successfully connected to MongoDB at: {self.client.address}. Ping response: {ping_response}" + ) + self.db = self.client[self.database_name] + self.collection = self.db[self.collection_name] + except errors.ServerSelectionTimeoutError as e: + self._logger.error("Failed to connect to MongoDB: Server selection timeout.") + self._logger.debug(f"Detailed error: {e}") + raise + except errors.ConnectionFailure as e: + self._logger.error("Failed to connect to MongoDB: Connection failure.") + self._logger.debug(f"Detailed error: {e}") + raise + except errors.OperationFailure as e: + self._logger.error("Failed to authenticate with MongoDB.") + self._logger.debug(f"Detailed error: {e}") + raise + except Exception as e: + self._logger.error("Unexpected error occurred while connecting to MongoDB.") + self._logger.debug(f"Detailed error: {e}") + raise + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + """Set up the named input(s), and output(s) if applicable. + + This operator does not have an output for the next operator - MongoDB write only. + + Args: + spec (OperatorSpec): The Operator specification for inputs and outputs etc. + """ + + spec.input(self.input_name_db_entry) + + def compute(self, op_input, op_output, context): + """Performs computation for this operator""" + + mongodb_database_entry = op_input.receive(self.input_name_db_entry) + + # write to MongoDB + self.write(mongodb_database_entry) + + def write(self, mongodb_database_entry): + """Writes the database entry to the MONAI Deploy Express MongoDB database. + + Args: + mongodb_database_entry: formatted MongoDB database entry. + + Returns: + None + """ + + # MongoDB writing + try: + insert_result = self.collection.insert_one(mongodb_database_entry) + if insert_result.acknowledged: + self._logger.info(f"Document inserted with ID: {insert_result.inserted_id}") + else: + self._logger.error("Failed to write document to MongoDB.") + except errors.PyMongoError as e: + self._logger.error("Failed to insert document into MongoDB.") + self._logger.debug(f"Detailed error: {e}") + raise + + def _get_mongo_ip(self): + """Determine the MongoDB IP based on the execution environment. + + If the pipeline is being run pythonically, use localhost. + + If MAP is being run via MAR or MONAI Deploy Express, use Docker bridge network IP. + """ + + # if running in a Docker container (/.dockerenv file present) + if os.path.exists("/.dockerenv"): + self._logger.info("Detected Docker environment") + return self.docker_mongodb_ip + + # if not executing as Docker container, we are executing pythonically + self._logger.info("Detected local environment (pythonic execution)") + return "localhost" + + +# Module function (helper function) +def test(): + """Test writing to and deleting from the MDE MongoDB instance locally""" + + # MongoDB credentials + mongodb_username = os.environ.get("MONGODB_USERNAME") + mongodb_password = os.environ.get("MONGODB_PASSWORD") + mongodb_port = os.environ.get("MONGODB_PORT") + + # sample information + database_name = "CTLiverSpleenSegPredictions" + collection_name = "OrganVolumes" + test_entry = {"test_key": "test_value"} + + # connect to MongoDB instance (localhost as we are testing locally) + try: + client = MongoClient( + f"mongodb://{mongodb_username}:{mongodb_password}@localhost:{mongodb_port}/?authSource=admin", + serverSelectionTimeoutMS=10000, # 10s timeout for testing connection; 20s by default + ) + if client is None: + raise RuntimeError("MongoClient was not created successfully") + ping_response = client.admin.command("ping") + print(f"Successfully connected to MongoDB at: {client.address}. Ping response: {ping_response}") + db = client[database_name] + collection = db[collection_name] + except errors.ServerSelectionTimeoutError as e: + print("Failed to connect to MongoDB: Server selection timeout.") + print(f"Detailed error: {e}") + raise + except errors.ConnectionFailure as e: + print("Failed to connect to MongoDB: Connection failure.") + print(f"Detailed error: {e}") + raise + except errors.OperationFailure as e: + print("Failed to authenticate with MongoDB.") + print(f"Detailed error: {e}") + raise + except Exception as e: + print("Unexpected error occurred while connecting to MongoDB.") + print(f"Detailed error: {e}") + raise + + # insert document + try: + insert_result = collection.insert_one(test_entry) + if insert_result.acknowledged: + print(f"Document inserted with ID: {insert_result.inserted_id}") + else: + print("Failed to write document to MongoDB.") + except errors.PyMongoError as e: + print("Failed to insert document into MongoDB.") + print(f"Detailed error: {e}") + raise + + # verify the inserted document + try: + inserted_doc = collection.find_one({"_id": insert_result.inserted_id}) + if inserted_doc: + print(f"Inserted document: {inserted_doc}") + else: + print("Document not found in the collection after insertion.") + except errors.PyMongoError as e: + print("Failed to retrieve the inserted document from MongoDB.") + print(f"Detailed error: {e}") + return + + # # delete a database + # try: + # client.drop_database(database_name) + # print(f"Test database '{database_name}' deleted successfully.") + # except errors.PyMongoError as e: + # print("Failed to delete the test database.") + # print(f"Detailed error: {e}") + + +if __name__ == "__main__": + test() diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py b/examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py new file mode 100644 index 00000000..607bcd47 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/post_transforms.py @@ -0,0 +1,387 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json +import logging +import os +from typing import List + +import matplotlib.cm as cm +import numpy as np + +from monai.config import KeysCollection +from monai.data import MetaTensor +from monai.transforms import LabelToContour, MapTransform + + +# Calculate segmentation volumes in ml +class CalculateVolumeFromMaskd(MapTransform): + """ + Dictionary-based transform to calculate the volume of predicted organ masks. + + Args: + keys (list): The keys corresponding to the predicted organ masks in the dictionary. + label_names (list): The list of organ names corresponding to the masks. + """ + + def __init__(self, keys, label_names): + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys) + self.label_names = label_names + + def __call__(self, data): + # Initialize a dictionary to store the volumes of each organ + pred_volumes = {} + + for key in self.keys: + for label_name in self.label_names.keys(): + # self._logger.info('Key: ', key, ' organ_name: ', label_name) + if label_name != "background": + # Get the predicted mask from the dictionary + pred_mask = data[key] + # Calculate the voxel size in cubic millimeters (voxel size should be in the metadata) + # Assuming the metadata contains 'spatial_shape' with voxel dimensions in mm + if hasattr(pred_mask, "affine"): + voxel_size = np.abs(np.linalg.det(pred_mask.affine[:3, :3])) + else: + raise ValueError("Affine transformation matrix with voxel spacing information is required.") + + # Calculate the volume in cubic millimeters + label_volume_mm3 = np.sum(pred_mask == self.label_names[label_name]) * voxel_size + + # Convert to milliliters (1 ml = 1000 mm^3) + label_volume_ml = label_volume_mm3 / 1000.0 + + # Store the result in the pred_volumes dictionary + # convert to int - radiologists prefer whole number with no decimals + pred_volumes[label_name] = int(round(label_volume_ml, 0)) + + # Add the calculated volumes to the data dictionary + key_name = key + "_volumes" + + data[key_name] = pred_volumes + # self._logger.info('pred_volumes: ', pred_volumes) + return data + + +class LabelToContourd(MapTransform): + def __init__(self, keys: KeysCollection, output_labels: list, allow_missing_keys: bool = False): + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys, allow_missing_keys) + + self.output_labels = output_labels + + def __call__(self, data): + d = dict(data) + for key in self.keys: + label_image = d[key] + assert isinstance(label_image, MetaTensor), "Input image must be a MetaTensor." + + # Initialize the contour image with the same shape as the label image + contour_image = np.zeros_like(label_image.cpu().numpy()) + + if label_image.ndim == 4: # Check if the label image is 4D with a channel dimension + # Process each 2D slice independently along the last axis (z-axis) + for i in range(label_image.shape[-1]): + slice_image = label_image[:, :, :, i].cpu().numpy() + + # Extract unique labels excluding background (assumed to be 0) + unique_labels = np.unique(slice_image) + unique_labels = unique_labels[unique_labels != 0] + + slice_contour = np.zeros_like(slice_image) + + # Generate contours for each label in the slice + for label in unique_labels: + # skip contour generation for labels that are not in output_labels + if label not in self.output_labels: + continue + + # Create a binary mask for the current label + binary_mask = np.zeros_like(slice_image) + binary_mask[slice_image == label] = 1.0 + + # Apply LabelToContour to the 2D slice (replace this with actual contour logic) + thick_edges = LabelToContour()(binary_mask) + + # Assign the label value to the contour image at the edge positions + slice_contour[thick_edges > 0] = label + + # Stack the processed slice back into the 4D contour image + contour_image[:, :, :, i] = slice_contour + else: + # If the label image is not 4D, process it directly + slice_image = label_image.cpu().numpy() + unique_labels = np.unique(slice_image) + unique_labels = unique_labels[unique_labels != 0] + + for label in unique_labels: + binary_mask = np.zeros_like(slice_image) + binary_mask[slice_image == label] = 1.0 + + thick_edges = LabelToContour()(binary_mask) + contour_image[thick_edges > 0] = label + + # Convert the contour image back to a MetaTensor with the original metadata + contour_image_meta = MetaTensor(contour_image, meta=label_image.meta) # , affine=label_image.affine) + + # Store the contour MetaTensor in the output dictionary + d[key] = contour_image_meta + + return d + + +class OverlayImageLabeld(MapTransform): + def __init__( + self, + image_key: KeysCollection, + label_key: str, + overlay_key: str = "overlay", + alpha: float = 0.7, + allow_missing_keys: bool = False, + ): + + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(image_key, allow_missing_keys) + + self.image_key = image_key + self.label_key = label_key + self.overlay_key = overlay_key + self.alpha = alpha + self.jet_colormap = cm.get_cmap("jet", 256) # Get the Jet colormap with 256 discrete colors + + def apply_jet_colormap(self, label_volume): + """ + Apply the Jet colormap to a 3D label volume using matplotlib's colormap. + """ + assert label_volume.ndim == 3, "Label volume should have 3 dimensions (H, W, D) after removing channel." + + label_volume_normalized = (label_volume / label_volume.max()) * 255.0 + label_volume_uint8 = label_volume_normalized.astype(np.uint8) + + # Apply the colormap to each label + label_rgb = self.jet_colormap(label_volume_uint8)[:, :, :, :3] # Only take the RGB channels + + label_rgb = (label_rgb * 255).astype(np.uint8) + # Rearrange axes to get (3, H, W, D) + label_rgb = np.transpose(label_rgb, (3, 0, 1, 2)) + + assert label_rgb.shape == ( + 3, + *label_volume.shape, + ), f"Label RGB shape should be (3,H, W, D) but got {label_rgb.shape}" + + return label_rgb + + def convert_to_rgb(self, image_volume): + """ + Convert a single-channel grayscale 3D image to an RGB 3D image. + """ + assert image_volume.ndim == 3, "Image volume should have 3 dimensions (H, W, D) after removing channel." + + image_volume_normalized = (image_volume - image_volume.min()) / (image_volume.max() - image_volume.min()) + image_rgb = np.stack([image_volume_normalized] * 3, axis=0) + image_rgb = (image_rgb * 255).astype(np.uint8) + + assert image_rgb.shape == ( + 3, + *image_volume.shape, + ), f"Image RGB shape should be (3,H, W, D) but got {image_rgb.shape}" + + return image_rgb + + def _create_overlay(self, image_volume, label_volume): + # Convert the image volume and label volume to RGB + image_rgb = self.convert_to_rgb(image_volume) + label_rgb = self.apply_jet_colormap(label_volume) + + # Create an alpha-blended overlay + overlay = image_rgb.copy() + mask = label_volume > 0 + + # Apply the overlay where the mask is present + for i in range(3): # For each color channel + overlay[i, mask] = (self.alpha * label_rgb[i, mask] + (1 - self.alpha) * overlay[i, mask]).astype(np.uint8) + + assert ( + overlay.shape == image_rgb.shape + ), f"Overlay shape should match image RGB shape: {overlay.shape} vs {image_rgb.shape}" + + return overlay + + def __call__(self, data): + d = dict(data) + + # Get the image and label tensors + image = d[self.image_key] # Expecting shape (1, H, W, D) + label = d[self.label_key] # Expecting shape (1, H, W, D) + + # uncomment when running pipeline with mask (non-contour) outputs, i.e. LabelToContourd transform absent + # if image.device.type == "cuda": + # image = image.cpu() + # d[self.image_key] = image + # if label.device.type == "cuda": + # label = label.cpu() + # d[self.label_key] = label + # # ----------------------- + + # Ensure that the input has the correct dimensions + assert image.shape[0] == 1 and label.shape[0] == 1, "Image and label must have a channel dimension of 1." + assert image.shape == label.shape, f"Image and label must have the same shape: {image.shape} vs {label.shape}" + + # Remove the channel dimension for processing + image_volume = image[0] # Shape: (H, W, D) + label_volume = label[0] # Shape: (H, W, D) + + # Convert to 3D overlay + overlay = self._create_overlay(image_volume, label_volume) + + # Add the channel dimension back + # d[self.overlay_key] = np.expand_dims(overlay, axis=0) # Shape: (1, H, W, D, 3) + d[self.overlay_key] = MetaTensor(overlay, meta=label.meta, affine=label.affine) # Shape: (3, H, W, D) + + # Assert the final output shape + # assert d[self.overlay_key].shape == (1, *image_volume.shape, 3), \ + # f"Final overlay shape should be (1, H, W, D, 3) but got {d[self.overlay_key].shape}" + + assert d[self.overlay_key].shape == ( + 3, + *image_volume.shape, + ), f"Final overlay shape should be (3, H, W, D) but got {d[self.overlay_key].shape}" + + # Log the overlay creation (debugging) + self._logger.info(f"Overlay created with shape: {overlay.shape}") + # self._logger.info(f"Dictionary keys: {d.keys()}") + + # self._logger.info('overlay_image shape: ', d[self.overlay_key].shape) + return d + + +class SaveData(MapTransform): + """ + Save the output dictionary into JSON files. + + The name of the saved file will be `{key}_{output_postfix}.json`. + + Args: + keys: keys of the corresponding items to be saved in the dictionary. + output_dir: directory to save the output files. + output_postfix: a string appended to all output file names, default is `data`. + separate_folder: whether to save each file in a separate folder. Default is `True`. + print_log: whether to print logs when saving. Default is `True`. + """ + + def __init__( + self, + keys: KeysCollection, + namekey: str = "image", + output_dir: str = "./", + output_postfix: str = "data", + separate_folder: bool = False, + print_log: bool = True, + allow_missing_keys: bool = False, + ): + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys, allow_missing_keys) + self.output_dir = output_dir + self.output_postfix = output_postfix + self.separate_folder = separate_folder + self.print_log = print_log + self.namekey = namekey + + def __call__(self, data): + d = dict(data) + image_name = os.path.basename(d[self.namekey].meta["filename_or_obj"]).split(".")[0] + for key in self.keys: + # Get the data + output_data = d[key] + + # Determine the file name + file_name = f"{image_name}_{self.output_postfix}.json" + if self.separate_folder: + file_path = os.path.join(self.output_dir, image_name, file_name) + os.makedirs(os.path.dirname(file_path), exist_ok=True) + else: + file_path = os.path.join(self.output_dir, file_name) + + # Save the dictionary as a JSON file + with open(file_path, "w") as f: + json.dump(output_data, f) + + if self.print_log: + self._logger.info(f"Saved data to {file_path}") + + return d + + +# custom transform (not in original post_transforms.py in bundle): +class ExtractVolumeToTextd(MapTransform): + """ + Custom transform to extract volume information from the segmentation results and format it as a textual summary. + Filters organ volumes based on output_labels for DICOM SR write, while including all organs for MongoDB write. + The upstream CalculateVolumeFromMaskd transform calculates organ volumes and stores them in the dictionary + under the pred_key + '_volumes' key. The input dictionary is outputted unchanged as to not affect downstream operators. + + Args: + keys: keys of the corresponding items to be saved in the dictionary. + label_names: dictionary mapping organ names to their corresponding label indices. + output_labels: list of target label indices for organs to include in the DICOM SR output. + """ + + def __init__( + self, + keys: KeysCollection, + label_names: dict, + output_labels: List[int], + allow_missing_keys: bool = False, + ): + self._logger = logging.getLogger(f"{__name__}.{type(self).__name__}") + super().__init__(keys, allow_missing_keys) + + self.label_names = label_names + self.output_labels = output_labels + + # create separate result_texts for DICOM SR write (target organs) and MongoDB write (all organs) + self.result_text_dicom_sr: str = "" + self.result_text_mongodb: str = "" + + def __call__(self, data): + d = dict(data) + # use the first key in `keys` to access the volume data (e.g., pred_key + '_volumes') + volumes_key = self.keys[0] + organ_volumes = d.get(volumes_key, None) + + if organ_volumes is None: + raise ValueError(f"Volume data not found for key {volumes_key}.") + + # create the volume text outputs + volume_text_dicom_sr = [] + volume_text_mongodb = [] + + # loop through calculated organ volumes + for organ, volume in organ_volumes.items(): + + # append all organ volumes for MongoDB entry + volume_entry = f"{organ.capitalize()} Volume: {volume} mL" + volume_text_mongodb.append(volume_entry) + + # if the organ's label index is in output_labels + label_index = self.label_names.get(organ, None) + if label_index in self.output_labels: + # append organ volume for DICOM SR entry + volume_text_dicom_sr.append(volume_entry) + + self.result_text_dicom_sr = "\n".join(volume_text_dicom_sr) + self.result_text_mongodb = "\n".join(volume_text_mongodb) + + # not adding result_text to dictionary; return dictionary unchanged as to not affect downstream operators + return d diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt b/examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt new file mode 100644 index 00000000..309428d7 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/requirements.txt @@ -0,0 +1,27 @@ +monai>=1.3.0 +torch>=1.12.0 +pytorch-ignite>=0.4.9 +fire>=0.4.0 +numpy>=1.22.2 +nibabel>=4.0.1 +# pydicom v3.0.0 removed pydicom._storage_sopclass_uids; don't meet or exceed this version +pydicom>=2.3.0,<3.0.0 +highdicom>=0.18.2 +itk>=5.3.0 +SimpleITK>=2.0.0 +scikit-image>=0.17.2 +Pillow>=8.0.0 +numpy-stl>=2.12.0 +trimesh>=3.8.11 +matplotlib>=3.7.2 +setuptools>=59.5.0 # for pkg_resources +python-dotenv>=1.0.1 + +# pymongo for MongoDB writing +pymongo>=4.10.1 + +# pytz for MongoDB Timestamp +pytz>=2024.1 + +# MONAI Deploy App SDK package installation +monai-deploy-app-sdk diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh new file mode 100755 index 00000000..d4302ad6 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_build.sh @@ -0,0 +1,29 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# build a MAP + +# check if the correct number of arguments are provided +if [ "$#" -ne 3 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 +sdk_version=$3 + +# load in environment variables +source .env + +# build MAP +monai-deploy package cchmc_ped_abd_ct_seg_app -m $HOLOSCAN_MODEL_PATH -c cchmc_ped_abd_ct_seg_app/app.yaml -t ${tag_prefix}:${image_version} --platform x64-workstation --sdk-version ${sdk_version} -l DEBUG diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh new file mode 100755 index 00000000..a87287cb --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_extract.sh @@ -0,0 +1,31 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# display and extract MAP contents + +# check if the correct number of arguments are provided +if [ "$#" -ne 2 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 + +# display basic MAP manifests +docker run --rm ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} show + +# remove and subsequently create export folder +rm -rf `pwd`/export && mkdir -p `pwd`/export + +# extract MAP contents +docker run --rm -v `pwd`/export/:/var/run/holoscan/export/ ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} extract diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh new file mode 100755 index 00000000..f4d5251a --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run.sh @@ -0,0 +1,31 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# execute MAP locally with MAR + +# check if the correct number of arguments are provided +if [ "$#" -ne 2 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 + +# load in environment variables +source .env + +# remove the output directory +rm -rf "$HOLOSCAN_OUTPUT_PATH" + +# execute MAP locally via MAR +monai-deploy run -i $HOLOSCAN_INPUT_PATH -o $HOLOSCAN_OUTPUT_PATH ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh new file mode 100755 index 00000000..422ae16e --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/map_run_interactive.sh @@ -0,0 +1,37 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# run an interactive MAP container + +# check if the correct number of arguments are provided +if [ "$#" -ne 2 ]; then + echo "Please provide all arguments. Usage: $0 " + exit 1 +fi + +# assign command-line arguments to variables +tag_prefix=$1 +image_version=$2 + +# load in environment variables +source .env + +# remove the output directory +rm -rf "$HOLOSCAN_OUTPUT_PATH" + +# execute MAP locally via MAR and start interactive container +monai-deploy run -i $HOLOSCAN_INPUT_PATH -o $HOLOSCAN_OUTPUT_PATH ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} --terminal + +# # start interactive MAP container without MAR +# docker run -it --entrypoint /bin/bash ${tag_prefix}-x64-workstation-dgpu-linux-amd64:${image_version} + +# # see dependencies installed in MAP +# pip freeze diff --git a/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh new file mode 100755 index 00000000..6decca04 --- /dev/null +++ b/examples/apps/cchmc_ped_abd_ct_seg_app/scripts/model_run.sh @@ -0,0 +1,21 @@ +# Copyright 2021-2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# execute model bundle locally (pythonically) + +# load in environment variables +source .env + +# remove the output directory +rm -rf "$HOLOSCAN_OUTPUT_PATH" + +# execute model bundle locally (pythonically) +python cchmc_ped_abd_ct_seg_app -i "$HOLOSCAN_INPUT_PATH" -o "$HOLOSCAN_OUTPUT_PATH" -m "$HOLOSCAN_MODEL_PATH" diff --git a/requirements-examples.txt b/requirements-examples.txt index 14756af7..56301f72 100644 --- a/requirements-examples.txt +++ b/requirements-examples.txt @@ -1,6 +1,7 @@ scikit-image>=0.17.2 pydicom>=2.3.0 PyPDF2>=2.11.1 +types-pytz>=2024.1.0.20240203 highdicom>=0.18.2 SimpleITK>=2.0.0 Pillow>=8.4.0 From edd84fbf2cb457dc1422f39d1f9a088e083f0be5 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Thu, 10 Apr 2025 09:18:07 +0000 Subject: [PATCH 084/118] Fix meta_data handling in MonaiBundleInferenceOperator to ensure it defaults to an empty dict Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/monai_bundle_inference_operator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index 94c118e3..a27f9770 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -577,6 +577,7 @@ def compute(self, op_input, op_output, context): # value: NdarrayOrTensor # MyPy complaints value, meta_data = self._receive_input(name, op_input, context) value = convert_to_dst_type(value, dst=value)[0] + meta_data = meta_data or {} if not isinstance(meta_data, dict): raise ValueError("`meta_data` must be a dict.") value = MetaTensor.ensure_torch_and_prune_meta(value, meta_data) From e888183353996855bf9d6a9d448d20cfe1a6f036 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Wed, 16 Apr 2025 06:41:36 +0000 Subject: [PATCH 085/118] Update requirements and fix data shape handling in Monai nUNet Bundle Inference Operator Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/requirements.txt | 5 +++-- .../operators/monai_nnunet_bundle_inference_operator.py | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt index ebce84bd..fede9fba 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt +++ b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt @@ -7,5 +7,6 @@ numpy-stl>=2.12.0 trimesh>=3.8.11 nibabel>=3.2.1 torch>=1.12.0 -monai>=1.0.0 -nnunetv2>=2.5.1 +git+https://github.com/SimoneBendazzoli93/dynamic-network-architectures.git +git+https://github.com/SimoneBendazzoli93/MONAI.git@dev +git+https://github.com/SimoneBendazzoli93/nnUNet.git diff --git a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py index 3bedb448..954e12e6 100644 --- a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py @@ -75,7 +75,6 @@ def _init_config(self, config_names): super()._init_config(config_names) parser = get_bundle_config(str(self._bundle_path), config_names) - parser['bundle_root'] = str(Path(self._bundle_path).parent.parent.parent) self._parser = parser self._nnunet_predictor = parser.get_parsed_content("network_def") @@ -85,4 +84,6 @@ def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, .. self._nnunet_predictor.predictor.network = self._model_network #os.environ['nnUNet_def_n_proc'] = "1" - return self._nnunet_predictor(torch.unsqueeze(data, 0)) + if len(data.shape) == 4: + data = data[None] + return self._nnunet_predictor(data) From d8aba039dcafa61cc6fefdcfbf7fa17dc135a9d6 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Wed, 16 Apr 2025 15:23:08 +0000 Subject: [PATCH 086/118] Add NiftiDataWriter operator and update NiftiDataLoader to return SimpleITK image Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/__init__.py | 1 + .../monai_bundle_inference_operator.py | 12 +++ .../operators/nii_data_loader_operator.py | 3 +- .../operators/nii_data_writer_operator.py | 100 ++++++++++++++++++ 4 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 monai/deploy/operators/nii_data_writer_operator.py diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index c875eea8..4599048d 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -54,3 +54,4 @@ from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter +from .nii_data_writer_operator import NiftiDataWriter diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index a27f9770..c15b0b66 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -23,6 +23,8 @@ import numpy as np +import SimpleITK +from SimpleITK import Image as SimpleITKImage from monai.deploy.core import AppContext, Fragment, Image, IOType, OperatorSpec from monai.deploy.utils.importutil import optional_import @@ -703,6 +705,16 @@ def _receive_input(self, name: str, op_input, context): logging.debug(f"Metadata of the converted input image: {metadata}") elif isinstance(value, np.ndarray): value = torch.from_numpy(value).to(self._device) + elif isinstance(value, SimpleITKImage): + metadata = {} + metadata["pixdim"] = np.asarray(value.GetSpacing()) + metadata["origin"] = np.asarray(value.GetOrigin()) + metadata["direction"] = np.asarray(value.GetDirection()) + if len(value.GetSize()) == 3: + metadata["pixdim"] = np.insert(np.asarray(value.GetSpacing()), 0, 1.0) + value = np.transpose(SimpleITK.GetArrayFromImage(value), [2, 1, 0]) + else: + value = np.transpose(SimpleITK.GetArrayFromImage(value), [0, 3, 2, 1]) # else value is some other object from memory diff --git a/monai/deploy/operators/nii_data_loader_operator.py b/monai/deploy/operators/nii_data_loader_operator.py index 67b0e070..e886df24 100644 --- a/monai/deploy/operators/nii_data_loader_operator.py +++ b/monai/deploy/operators/nii_data_loader_operator.py @@ -80,8 +80,7 @@ def convert_and_save(self, nii_path): image_reader = SimpleITK.ImageFileReader() image_reader.SetFileName(str(nii_path)) image = image_reader.Execute() - image_np = np.transpose(SimpleITK.GetArrayFromImage(image), [2, 1, 0]) - return image_np + return image def test(): diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py new file mode 100644 index 00000000..003395ce --- /dev/null +++ b/monai/deploy/operators/nii_data_writer_operator.py @@ -0,0 +1,100 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import logging +from pathlib import Path + +import numpy as np + +from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec +from monai.deploy.utils.importutil import optional_import + +SimpleITK, _ = optional_import("SimpleITK") + + +# @md.env(pip_packages=["SimpleITK>=2.0.2"]) +class NiftiDataWriter(Operator): + + def __init__(self, fragment: Fragment, *args, output_file: Path, **kwargs) -> None: + """Creates an instance with the file path to load image from. + + Args: + fragment (Fragment): An instance of the Application class which is derived from Fragment. + input_path (Path): The file Path to read from, overridden by valid named input on compute. + """ + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + self.output_file = output_file + self.input_name_seg = "seg_image" + self.input_name_output_file = "output_file" + + # Need to call the base class constructor last + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + spec.input(self.input_name_seg) + spec.input(self.input_name_output_file).condition(ConditionType.NONE) # Optional input not requiring sender. + + def compute(self, op_input, op_output, context): + """Performs computation with the provided context.""" + + + seg_image = op_input.receive(self.input_name_seg) + + + # If the optional named input, output_folder, has content, use it instead of the one set on the object. + # Since this input is optional, must check if data present and if Path or str. + output_file = None + try: + output_file = op_input.receive(self.input_name_output_file) + except Exception: + pass + + if not output_file or not isinstance(output_file, (Path, str)): + output_file = self.output_file + + self.convert_and_save(seg_image, output_file) + + def convert_and_save(self, seg_image, nii_path): + """ + reads the nifti image and returns a numpy image array + """ + image_writer = SimpleITK.ImageFileWriter() + + image = SimpleITK.GetImageFromArray(seg_image._data) + image.SetSpacing(seg_image.metadata()["pixdim"]) + + if len(seg_image.metadata()["direction"]) == 16: + direction = [] + direction.extend(seg_image.metadata()["direction"][0:3]) + direction.extend(seg_image.metadata()["direction"][4:7]) + direction.extend(seg_image.metadata()["direction"][8:11]) + image.SetDirection(direction) + else: + image.SetDirection(seg_image.metadata()["direction"]) + + image.SetOrigin(seg_image.metadata()["origin"]) + + image_writer.SetFileName(nii_path) + image_writer.Execute(image) + + +def test(): + ... + + +def main(): + test() + + +if __name__ == "__main__": + main() From 83521cf3cb45ae8ad3f6abe4e01a414b8c00eca0 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 22 Apr 2025 09:52:09 +0000 Subject: [PATCH 087/118] Add nvflare to requirements for ai_spleen_nnunet_seg_app Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt index fede9fba..1d80987c 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt +++ b/examples/apps/ai_spleen_nnunet_seg_app/requirements.txt @@ -7,6 +7,7 @@ numpy-stl>=2.12.0 trimesh>=3.8.11 nibabel>=3.2.1 torch>=1.12.0 +nvflare git+https://github.com/SimoneBendazzoli93/dynamic-network-architectures.git git+https://github.com/SimoneBendazzoli93/MONAI.git@dev git+https://github.com/SimoneBendazzoli93/nnUNet.git From 42310bee8becf2d61789a977965d1ed7935061fb Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:00:58 -0400 Subject: [PATCH 088/118] duplicate ipps non-loaded (#535) Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- .../operators/dicom_data_loader_operator.py | 123 +++++++++++++----- 1 file changed, 93 insertions(+), 30 deletions(-) diff --git a/monai/deploy/operators/dicom_data_loader_operator.py b/monai/deploy/operators/dicom_data_loader_operator.py index c31e1ef2..bc590cb6 100644 --- a/monai/deploy/operators/dicom_data_loader_operator.py +++ b/monai/deploy/operators/dicom_data_loader_operator.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -12,7 +12,9 @@ import logging import os from pathlib import Path -from typing import List +from typing import Dict, List, Optional, Tuple, cast + +from pydicom.dataset import Dataset from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec from monai.deploy.core.domain.dicom_series import DICOMSeries @@ -163,6 +165,7 @@ def _load_data(self, files: List[str]): study_dict = {} series_dict = {} sop_instances = [] + sop_map: Dict[Tuple[str, str], Dict[Optional[Tuple[float, float, float]], List[Dataset]]] = {} for file in files: try: @@ -171,34 +174,94 @@ def _load_data(self, files: List[str]): self._logger.warn(f"Ignored {file}, reason being: {ex}") for sop_instance in sop_instances: - study_instance_uid = sop_instance[0x0020, 0x000D].value.name # name is the UID as str - - # First need to eliminate the SOP instances whose SOP Class is to be ignored. - if "SOPInstanceUID" not in sop_instance: - self._logger.warn("Instance ignored due to missing SOP instance UID tag") - continue - sop_instance_uid = sop_instance["SOPInstanceUID"].value - if "SOPClassUID" not in sop_instance: - self._logger.warn(f"Instance ignored due to missing SOP Class UID tag, {sop_instance_uid}") - continue - if sop_instance["SOPClassUID"].value in DICOMDataLoaderOperator.SOP_CLASSES_TO_IGNORE: - self._logger.warn(f"Instance ignored for being in the ignored class, {sop_instance_uid}") - continue - - if study_instance_uid not in study_dict: - study = DICOMStudy(study_instance_uid) - self.populate_study_attributes(study, sop_instance) - study_dict[study_instance_uid] = study - - series_instance_uid = sop_instance[0x0020, 0x000E].value.name # name is the UID as str - - if series_instance_uid not in series_dict: - series = DICOMSeries(series_instance_uid) - series_dict[series_instance_uid] = series - self.populate_series_attributes(series, sop_instance) - study_dict[study_instance_uid].add_series(series) - - series_dict[series_instance_uid].add_sop_instance(sop_instance) + try: + study_instance_uid = sop_instance[0x0020, 0x000D].value.name # name is the UID as str + + # First need to eliminate the SOP instances whose SOP Class is to be ignored. + if "SOPInstanceUID" not in sop_instance: + self._logger.warn("Instance ignored due to missing SOP instance UID tag") + continue + sop_instance_uid = sop_instance["SOPInstanceUID"].value + if "SOPClassUID" not in sop_instance: + self._logger.warn(f"Instance ignored due to missing SOP Class UID tag, {sop_instance_uid}") + continue + if sop_instance["SOPClassUID"].value in DICOMDataLoaderOperator.SOP_CLASSES_TO_IGNORE: + self._logger.warn(f"Instance ignored for being in the ignored class, {sop_instance_uid}") + continue + + if study_instance_uid not in study_dict: + study = DICOMStudy(study_instance_uid) + self.populate_study_attributes(study, sop_instance) + study_dict[study_instance_uid] = study + + series_instance_uid = sop_instance[0x0020, 0x000E].value.name # name is the UID as str + + if series_instance_uid not in series_dict: + series = DICOMSeries(series_instance_uid) + series_dict[series_instance_uid] = series + self.populate_series_attributes(series, sop_instance) + study_dict[study_instance_uid].add_series(series) + + # Prepare sop_map entry + series_key = (study_instance_uid, series_instance_uid) + sop_map.setdefault(series_key, {}) + ipp = sop_instance.get("ImagePositionPatient", None) + if ipp is not None: + # Convert IPP to tuple + ipp_tuple = cast(Tuple[float, float, float], tuple(float(v) for v in ipp)) + else: + # Non-image files will be missing IPP; store SOP instance under "None" key, move on to next SOP instance + sop_map[series_key].setdefault(ipp, []).append(sop_instance) + continue + + sop_list = sop_map[series_key].setdefault(ipp_tuple, []) + + if not sop_list: + # First occurrence of this spatial position β€” store the SOP instance + sop_list.append(sop_instance) + else: + # Duplicate spatial location found β€” compare AcquisitionNumbers (if absent, set to -1) + exist = sop_list[0] + exist_acq_num = int(exist.get("AcquisitionNumber", -1)) + curr_acq_num = int(sop_instance.get("AcquisitionNumber", -1)) + if curr_acq_num > exist_acq_num: + # Current SOP instance AcquisitionNumber is greater - replace existing SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; removed SOP instance with lower AcquisitionNumber " + f"({curr_acq_num} < {exist_acq_num})" + ) + sop_list[0] = sop_instance + elif curr_acq_num < exist_acq_num: + # Existing SOP instance AcquisitionNumber is greater - don't store current SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; kept SOP instance with higher AcquisitionNumber " + f"({exist_acq_num} > {curr_acq_num})" + ) + elif curr_acq_num == -1: + # AcquisitionNumber tag is absent for compared SOP instances - don't store current SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; AcquisitionNumber tags are absent" + ) + else: + # AcquisitionNumber tag values are equal for compared SOP instances - don't store current SOP instance + self._logger.info( + f"Duplicate spatial coordinates detected; removing duplicate SOP at IPP {ipp_tuple} " + f"in Series {series_instance_uid}; AcquisitionNumber tag values are equal " + f"({exist_acq_num} = {curr_acq_num})" + ) + + except Exception as ex: + self._logger.warn(f"Error parsing SOP Instance: {ex}") + + # Add unique SOPs to series_dict following potential duplication removal + for (_, series_uid), ipp_dict in sop_map.items(): + for _, sop_list in ipp_dict.items(): + for sop_instance in sop_list: + series_dict[series_uid].add_sop_instance(sop_instance) + return list(study_dict.values()) def populate_study_attributes(self, study, sop_instance): From 7afd8b35aacc063e45429f016a8a20a1ced491bb Mon Sep 17 00:00:00 2001 From: Bryan Luna <121215062+bluna301@users.noreply.github.com> Date: Mon, 21 Apr 2025 15:05:10 -0400 Subject: [PATCH 089/118] ModelInfo arg added to DICOMSegWriterOp (#533) Signed-off-by: bluna301 Signed-off-by: Simone Bendazzoli --- .../operators/dicom_seg_writer_operator.py | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/dicom_seg_writer_operator.py b/monai/deploy/operators/dicom_seg_writer_operator.py index 1a39e644..e96490c1 100644 --- a/monai/deploy/operators/dicom_seg_writer_operator.py +++ b/monai/deploy/operators/dicom_seg_writer_operator.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -27,6 +27,7 @@ ImplicitVRLittleEndian, _ = optional_import("pydicom.uid", name="ImplicitVRLittleEndian") Dataset, _ = optional_import("pydicom.dataset", name="Dataset") FileDataset, _ = optional_import("pydicom.dataset", name="FileDataset") +PyDicomSequence, _ = optional_import("pydicom.sequence", name="Sequence") sitk, _ = optional_import("SimpleITK") codes, _ = optional_import("pydicom.sr.codedict", name="codes") if TYPE_CHECKING: @@ -39,6 +40,7 @@ from monai.deploy.core import ConditionType, Fragment, Image, Operator, OperatorSpec from monai.deploy.core.domain.dicom_series import DICOMSeries from monai.deploy.core.domain.dicom_series_selection import StudySelectedSeries +from monai.deploy.operators.dicom_utils import ModelInfo class SegmentDescription: @@ -183,6 +185,7 @@ def __init__( *args, segment_descriptions: List[SegmentDescription], output_folder: Path, + model_info: Optional[ModelInfo] = None, custom_tags: Optional[Dict[str, str]] = None, omit_empty_frames: bool = True, **kwargs, @@ -206,6 +209,7 @@ def __init__( Object encapsulating the description of each segment present in the segmentation. output_folder: Folder for file output, overridden by named input on compute. Defaults to current working dir's child folder, output. + model_info (ModelInfo, optional): Object encapsulating model creator, name, version and UID. custom_tags: Optional[Dict[str, str]], optional Dictionary for setting custom DICOM tags using Keywords and str values only omit_empty_frames: bool, optional @@ -217,6 +221,7 @@ def __init__( self._custom_tags = custom_tags self._omit_empty_frames = omit_empty_frames self.output_folder = output_folder if output_folder else DICOMSegmentationWriterOperator.DEFAULT_OUTPUT_FOLDER + self.model_info = model_info if model_info else ModelInfo() self.input_name_seg = "seg_image" self.input_name_series = "study_selected_series_list" @@ -356,6 +361,41 @@ def create_dicom_seg(self, image: np.ndarray, dicom_series: DICOMSeries, output_ # Best effort for now. logging.warning(f"Tag {k} was not written, due to {ex}") + # write model info + # code copied from write_common_modules method in monai.deploy.operators.dicom_utils + + # Contributing Equipment Sequence + # The Creator shall describe each algorithm that was used to generate the results in the + # Contributing Equipment Sequence (0018,A001). Multiple items may be included. The Creator + # shall encode the following details in the Contributing Equipment Sequence: + # β€’ Purpose of Reference Code Sequence (0040,A170) shall be (Newcode1, 99IHE, 1630 "Processing Algorithm") + # β€’ Manufacturer (0008,0070) + # β€’ Manufacturer’s Model Name (0008,1090) + # β€’ Software Versions (0018,1020) + # β€’ Device UID (0018,1002) + + if self.model_info: + # First create the Purpose of Reference Code Sequence + seq_purpose_of_reference_code = PyDicomSequence() + seg_purpose_of_reference_code = Dataset() + seg_purpose_of_reference_code.CodeValue = "Newcode1" + seg_purpose_of_reference_code.CodingSchemeDesignator = "99IHE" + seg_purpose_of_reference_code.CodeMeaning = '"Processing Algorithm' + seq_purpose_of_reference_code.append(seg_purpose_of_reference_code) + + seq_contributing_equipment = PyDicomSequence() + seg_contributing_equipment = Dataset() + seg_contributing_equipment.PurposeOfReferenceCodeSequence = seq_purpose_of_reference_code + # '(121014, DCM, β€œDevice Observer Manufacturer")' + seg_contributing_equipment.Manufacturer = self.model_info.creator + # u'(121015, DCM, β€œDevice Observer Model Name")' + seg_contributing_equipment.ManufacturerModelName = self.model_info.name + # u'(111003, DCM, β€œAlgorithm Version")' + seg_contributing_equipment.SoftwareVersions = self.model_info.version + seg_contributing_equipment.DeviceUID = self.model_info.uid # u'(121012, DCM, β€œDevice Observer UID")' + seq_contributing_equipment.append(seg_contributing_equipment) + seg.ContributingEquipmentSequence = seq_contributing_equipment + seg.save_as(output_path) try: From 399f4e54feda1ccbe442a6ed652fd059343d112b Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Mon, 21 Apr 2025 16:46:46 -0700 Subject: [PATCH 090/118] Support remote inference on Triton Inference Server with ease of use (#536) * Adding requirements for Triton client impl Signed-off-by: M Q * Updated/added core classes to support Triton remote inference, and added a new example Signed-off-by: M Q * GitHub build server complains about conflicts for tritonclient[]>=2.54 for no specific reasons Signed-off-by: M Q * Fix flake8 complaints Signed-off-by: M Q * Fix pytype complaints by simplifying code Signed-off-by: M Q * Remove now unused imports Signed-off-by: M Q * Addressed all pytype and mypy complaint in new code in the dev env Signed-off-by: M Q * No complaint in local dev env, but on GitHub Signed-off-by: M Q * Add model confgi.pbtxt and example env settings Signed-off-by: M Q * Doc update Signed-off-by: M Q * update license dates Signed-off-by: M Q * Updated the copyright year of new files Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/source/getting_started/examples.md | 1 + examples/apps/ai_remote_infer_app/__main__.py | 15 + examples/apps/ai_remote_infer_app/app.py | 143 +++++++++ .../env_settings_example.sh | 17 ++ .../models_client_side/spleen_ct/config.pbtxt | 44 +++ .../spleen_seg_operator.py | 165 +++++++++++ monai/deploy/core/app_context.py | 22 +- monai/deploy/core/arg_parser.py | 10 +- monai/deploy/core/models/__init__.py | 4 +- monai/deploy/core/models/model.py | 4 +- monai/deploy/core/models/named_model.py | 22 +- monai/deploy/core/models/triton_model.py | 273 ++++++++++++++---- monai/deploy/core/runtime_env.py | 14 +- requirements.txt | 1 + 14 files changed, 666 insertions(+), 69 deletions(-) create mode 100644 examples/apps/ai_remote_infer_app/__main__.py create mode 100644 examples/apps/ai_remote_infer_app/app.py create mode 100755 examples/apps/ai_remote_infer_app/env_settings_example.sh create mode 100644 examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt create mode 100644 examples/apps/ai_remote_infer_app/spleen_seg_operator.py diff --git a/docs/source/getting_started/examples.md b/docs/source/getting_started/examples.md index 521a4e52..55134a6c 100644 --- a/docs/source/getting_started/examples.md +++ b/docs/source/getting_started/examples.md @@ -14,3 +14,4 @@ - dicom_series_to_image_app - breast_density_classifer_app - cchmc_ped_abd_ct_seg_app +- ai_remote_infer_app diff --git a/examples/apps/ai_remote_infer_app/__main__.py b/examples/apps/ai_remote_infer_app/__main__.py new file mode 100644 index 00000000..b7039967 --- /dev/null +++ b/examples/apps/ai_remote_infer_app/__main__.py @@ -0,0 +1,15 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from app import AIRemoteInferSpleenSegApp + +if __name__ == "__main__": + AIRemoteInferSpleenSegApp().run() diff --git a/examples/apps/ai_remote_infer_app/app.py b/examples/apps/ai_remote_infer_app/app.py new file mode 100644 index 00000000..facd1dc2 --- /dev/null +++ b/examples/apps/ai_remote_infer_app/app.py @@ -0,0 +1,143 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import logging +from pathlib import Path + +from pydicom.sr.codedict import codes # Required for setting SegmentDescription attributes. +from spleen_seg_operator import SpleenSegOperator + +from monai.deploy.conditions import CountCondition +from monai.deploy.core import Application +from monai.deploy.operators.dicom_data_loader_operator import DICOMDataLoaderOperator +from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription +from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator +from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator +from monai.deploy.operators.stl_conversion_operator import STLConversionOperator + + +class AIRemoteInferSpleenSegApp(Application): + def __init__(self, *args, **kwargs): + """Creates an application instance.""" + + super().__init__(*args, **kwargs) + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + def run(self, *args, **kwargs): + # This method calls the base class to run. Can be omitted if simply calling through. + self._logger.info(f"Begin {self.run.__name__}") + super().run(*args, **kwargs) + self._logger.info(f"End {self.run.__name__}") + + def compose(self): + """Creates the app specific operators and chain them up in the processing DAG.""" + + # Use Commandline options over environment variables to init context. + app_context = Application.init_app_context(self.argv) + self._logger.debug(f"Begin {self.compose.__name__}") + app_input_path = Path(app_context.input_path) + app_output_path = Path(app_context.output_path) + model_path = Path(app_context.model_path) + + self._logger.info(f"App input and output path: {app_input_path}, {app_output_path}") + + # instantiates the SDK built-in operator(s). + study_loader_op = DICOMDataLoaderOperator( + self, CountCondition(self, 1), input_folder=app_input_path, name="dcm_loader_op" + ) + series_selector_op = DICOMSeriesSelectorOperator(self, rules=Sample_Rules_Text, name="series_selector_op") + series_to_vol_op = DICOMSeriesToVolumeOperator(self, name="series_to_vol_op") + + # Model specific inference operator, supporting MONAI transforms. + spleen_seg_op = SpleenSegOperator( + self, app_context=app_context, model_name="spleen_ct", model_path=model_path, name="seg_op" + ) + + # Create DICOM Seg writer providing the required segment description for each segment with + # the actual algorithm and the pertinent organ/tissue. + # The segment_label, algorithm_name, and algorithm_version are limited to 64 chars. + # https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html + # User can Look up SNOMED CT codes at, e.g. + # https://bioportal.bioontology.org/ontologies/SNOMEDCT + + _algorithm_name = "3D segmentation of the Spleen from a CT series" + _algorithm_family = codes.DCM.ArtificialIntelligence + _algorithm_version = "0.1.0" + + segment_descriptions = [ + SegmentDescription( + segment_label="Spleen", + segmented_property_category=codes.SCT.Organ, + segmented_property_type=codes.SCT.Spleen, + algorithm_name=_algorithm_name, + algorithm_family=_algorithm_family, + algorithm_version=_algorithm_version, + ), + ] + + custom_tags = {"SeriesDescription": "AI generated Seg, not for clinical use."} + + dicom_seg_writer = DICOMSegmentationWriterOperator( + self, + segment_descriptions=segment_descriptions, + custom_tags=custom_tags, + output_folder=app_output_path, + name="dcm_seg_writer_op", + ) + + # Create the processing pipeline, by specifying the source and destination operators, and + # ensuring the output from the former matches the input of the latter, in both name and type. + self.add_flow(study_loader_op, series_selector_op, {("dicom_study_list", "dicom_study_list")}) + self.add_flow( + series_selector_op, series_to_vol_op, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(series_to_vol_op, spleen_seg_op, {("image", "image")}) + + # Note below the dicom_seg_writer requires two inputs, each coming from a source operator. + self.add_flow( + series_selector_op, dicom_seg_writer, {("study_selected_series_list", "study_selected_series_list")} + ) + self.add_flow(spleen_seg_op, dicom_seg_writer, {("seg_image", "seg_image")}) + + # Create the surface mesh STL conversion operator and add it to the app execution flow, if needed, by + # uncommenting the following couple lines. + stl_conversion_op = STLConversionOperator( + self, output_file=app_output_path.joinpath("stl/spleen.stl"), name="stl_conversion_op" + ) + self.add_flow(spleen_seg_op, stl_conversion_op, {("pred", "image")}) + + self._logger.debug(f"End {self.compose.__name__}") + + +# This is a sample series selection rule in JSON, simply selecting CT series. +# If the study has more than 1 CT series, then all of them will be selected. +# Please see more detail in DICOMSeriesSelectorOperator. +# For list of string values, e.g. "ImageType": ["PRIMARY", "ORIGINAL"], it is a match if all elements +# are all in the multi-value attribute of the DICOM series. + +Sample_Rules_Text = """ +{ + "selections": [ + { + "name": "CT Series", + "conditions": { + "StudyDescription": "(.*?)", + "Modality": "(?i)CT", + "SeriesDescription": "(.*?)", + "ImageType": ["PRIMARY", "ORIGINAL"] + } + } + ] +} +""" + +if __name__ == "__main__": + # Creates the app and test it standalone. + AIRemoteInferSpleenSegApp().run() diff --git a/examples/apps/ai_remote_infer_app/env_settings_example.sh b/examples/apps/ai_remote_infer_app/env_settings_example.sh new file mode 100755 index 00000000..4581ce1b --- /dev/null +++ b/examples/apps/ai_remote_infer_app/env_settings_example.sh @@ -0,0 +1,17 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#!/bin/bash +export HOLOSCAN_INPUT_PATH="inputs/spleen_ct_tcia" +export HOLOSCAN_MODEL_PATH="examples/apps/ai_remote_infer_app/models_client_side" +export HOLOSCAN_OUTPUT_PATH="output_spleen" +export HOLOSCAN_LOG_LEVEL=DEBUG # TRACE can be used for verbose low-level logging +export TRITON_SERVER_NETLOC="localhost:8000" # Triton server network location, host:port diff --git a/examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt b/examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt new file mode 100644 index 00000000..6b5ecaeb --- /dev/null +++ b/examples/apps/ai_remote_infer_app/models_client_side/spleen_ct/config.pbtxt @@ -0,0 +1,44 @@ +platform: "pytorch_libtorch" + +max_batch_size: 16 # The maximum batch size. 0 for no batching with full shape in dims + +default_model_filename: "model_spleen_ct_segmentation_v1.ts" # The name of the TorchScript model file + +input [ + { + name: "INPUT_0" # The name of the input tensor (or should match the input tensor name in your model if used) + data_type: TYPE_FP32 # Data type is FP32 + dims: [ 1, 96, 96, 96 ] # Input dimensions: [channels, width, height, depth], to be stacked as a batch + } +] + +output [ + { + name: "OUTPUT_0" # The name of the output tensor (match this with your TorchScript model's output name) + data_type: TYPE_FP32 # Output is FP32 + dims: [ 2, 96, 96, 96 ] # Output dimensions: [channels, width, height, depth], stacked to match input batch size + } +] + +version_policy: { latest: { num_versions: 1}} # Only serve the latest version, which is the default + +instance_group [ + { + kind: KIND_GPU # Specify the hardware type (GPU in this case) + count: 1 # Number of instances created for each GPU listed in 'gpus' (adjust based on your resources) + } +] + +dynamic_batching { + preferred_batch_size: [ 4, 8, 16 ] # Preferred batch size(s) for dynamic batching. Matching the max_batch_size for sync calls. + max_queue_delay_microseconds: 1000 # Max delay before processing the batch. +} + +# The initial calls to a loaded TorchScript model take extremely long. +# Due to this longer model warmup issue, Triton allows execution of models without these optimizations. +parameters: { + key: "DISABLE_OPTIMIZED_EXECUTION" + value: { + string_value: "true" + } +} diff --git a/examples/apps/ai_remote_infer_app/spleen_seg_operator.py b/examples/apps/ai_remote_infer_app/spleen_seg_operator.py new file mode 100644 index 00000000..814feebb --- /dev/null +++ b/examples/apps/ai_remote_infer_app/spleen_seg_operator.py @@ -0,0 +1,165 @@ +# Copyright 2025 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from pathlib import Path + +from numpy import uint8 + +from monai.deploy.core import AppContext, ConditionType, Fragment, Operator, OperatorSpec +from monai.deploy.operators.monai_seg_inference_operator import InfererType, InMemImageReader, MonaiSegInferenceOperator +from monai.transforms import ( + Activationsd, + AsDiscreted, + Compose, + EnsureChannelFirstd, + EnsureTyped, + Invertd, + LoadImaged, + Orientationd, + SaveImaged, + ScaleIntensityRanged, + Spacingd, +) + + +class SpleenSegOperator(Operator): + """Performs Spleen segmentation with a 3D image converted from a DICOM CT series.""" + + DEFAULT_OUTPUT_FOLDER = Path.cwd() / "output/saved_images_folder" + + def __init__( + self, + fragment: Fragment, + *args, + app_context: AppContext, + model_path: Path, + model_name: str, + output_folder: Path = DEFAULT_OUTPUT_FOLDER, + **kwargs, + ): + + self.logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + self._input_dataset_key = "image" + self._pred_dataset_key = "pred" + + self.model_path = model_path + self.model_name = model_name + self.output_folder = output_folder + self.output_folder.mkdir(parents=True, exist_ok=True) + self.app_context = app_context + self.input_name_image = "image" + self.output_name_seg = "seg_image" + self.output_name_saved_images_folder = "saved_images_folder" + + # The base class has an attribute called fragment to hold the reference to the fragment object + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + spec.input(self.input_name_image) + spec.output(self.output_name_seg) + spec.output(self.output_name_saved_images_folder).condition( + ConditionType.NONE + ) # Output not requiring a receiver + + def compute(self, op_input, op_output, context): + input_image = op_input.receive(self.input_name_image) + if not input_image: + raise ValueError("Input image is not found.") + + # This operator gets an in-memory Image object, so a specialized ImageReader is needed. + _reader = InMemImageReader(input_image) + + pre_transforms = self.pre_process(_reader, str(self.output_folder)) + post_transforms = self.post_process(pre_transforms, str(self.output_folder)) + + # Delegates inference and saving output to the built-in operator. + infer_operator = MonaiSegInferenceOperator( + self.fragment, + roi_size=( + 96, + 96, + 96, + ), + pre_transforms=pre_transforms, + post_transforms=post_transforms, + overlap=0.6, + app_context=self.app_context, + model_name=self.model_name, + inferer=InfererType.SLIDING_WINDOW, + sw_batch_size=4, + model_path=self.model_path, + name="monai_seg_remote_inference_op", + ) + + # Setting the keys used in the dictionary based transforms may change. + infer_operator.input_dataset_key = self._input_dataset_key + infer_operator.pred_dataset_key = self._pred_dataset_key + + # Now emit data to the output ports of this operator + op_output.emit(infer_operator.compute_impl(input_image, context), self.output_name_seg) + op_output.emit(self.output_folder, self.output_name_saved_images_folder) + + def pre_process(self, img_reader, out_dir: str = "./input_images") -> Compose: + """Composes transforms for preprocessing input before predicting on a model.""" + + Path(out_dir).mkdir(parents=True, exist_ok=True) + my_key = self._input_dataset_key + + return Compose( + [ + LoadImaged(keys=my_key, reader=img_reader), + EnsureChannelFirstd(keys=my_key), + # The SaveImaged transform can be commented out to save 5 seconds. + # Uncompress NIfTI file, nii, is used favoring speed over size, but can be changed to nii.gz + SaveImaged( + keys=my_key, + output_dir=out_dir, + output_postfix="", + resample=False, + output_ext=".nii", + ), + Orientationd(keys=my_key, axcodes="RAS"), + Spacingd(keys=my_key, pixdim=[1.5, 1.5, 2.9], mode=["bilinear"]), + ScaleIntensityRanged(keys=my_key, a_min=-57, a_max=164, b_min=0.0, b_max=1.0, clip=True), + EnsureTyped(keys=my_key), + ] + ) + + def post_process(self, pre_transforms: Compose, out_dir: str = "./prediction_output") -> Compose: + """Composes transforms for postprocessing the prediction results.""" + + Path(out_dir).mkdir(parents=True, exist_ok=True) + pred_key = self._pred_dataset_key + + return Compose( + [ + Activationsd(keys=pred_key, softmax=True), + Invertd( + keys=pred_key, + transform=pre_transforms, + orig_keys=self._input_dataset_key, + nearest_interp=False, + to_tensor=True, + ), + AsDiscreted(keys=pred_key, argmax=True), + # The SaveImaged transform can be commented out to save 5 seconds. + # Uncompress NIfTI file, nii, is used favoring speed over size, but can be changed to nii.gz + SaveImaged( + keys=pred_key, + output_dir=out_dir, + output_postfix="seg", + output_dtype=uint8, + resample=False, + output_ext=".nii", + ), + ] + ) diff --git a/monai/deploy/core/app_context.py b/monai/deploy/core/app_context.py index fb6a7c24..12a4d879 100644 --- a/monai/deploy/core/app_context.py +++ b/monai/deploy/core/app_context.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -14,6 +14,7 @@ from typing import Dict, List, Optional from .arg_parser import parse_args, set_up_logging +from .models import TritonModel from .models.factory import ModelFactory from .models.model import Model from .runtime_env import RuntimeEnv @@ -45,6 +46,14 @@ def update(self, args: Dict[str, str]): # If model has not been loaded, or the model path has changed, get the path and load model(s) old_model_path = self.model_path self.model_path = args.get("model") or self.args.get("model") or self.runtime_env.model + + # This parameter must be set if models are hosted on the Triton Inference Server. + self.triton_server_netloc = ( + args.get("triton_server_netloc") + or self.args.get("triton_server_netloc") + or self.runtime_env.triton_server_netloc + ) + if old_model_path != self.model_path: self._model_loaded = False # path changed, reset the flag to re-load @@ -52,10 +61,19 @@ def update(self, args: Dict[str, str]): self.models: Optional[Model] = ModelFactory.create(abspath(self.model_path)) self._model_loaded = True + # TritonModel instances are just clients and must be connected to the Triton Inference Server + # at the provided network location. In-process hosting of Triton Inference Server is not supported. + if self.triton_server_netloc and self.models: + for _, model in self.models.items(): + if isinstance(model, TritonModel): + model.connect(self.triton_server_netloc, verbose=args.get("log_level", "INFO") == "DEBUG") + # Health check of the Triton Inference Server can be deferred. + logging.info(f"Model {model.name} set to connect to Triton server at {self.triton_server_netloc}") + def __repr__(self): return ( f"AppContext(input_path={self.input_path}, output_path={self.output_path}, " - f"model_path={self.model_path}, workdir={self.workdir})" + f"model_path={self.model_path}, workdir={self.workdir}), triton_server_netloc={self.triton_server_netloc}" ) diff --git a/monai/deploy/core/arg_parser.py b/monai/deploy/core/arg_parser.py index 97ecb127..fdab7dc0 100644 --- a/monai/deploy/core/arg_parser.py +++ b/monai/deploy/core/arg_parser.py @@ -1,4 +1,4 @@ -# Copyright 2021-2023 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -64,7 +64,15 @@ def parse_args(argv: Optional[List[str]] = None) -> argparse.Namespace: type=argparse_types.valid_dir_path, help="Path to workspace folder (default: A temporary '.monai_workdir' folder in the current folder)", ) + parser.add_argument( + "--triton-server-netloc", + "-t", + type=str, + default=None, + help="Triton server netloc, :. (default: None)", + ) + # triton_server_netloc args = parser.parse_args(argv[1:]) args.argv = argv # save argv for later use in runpy diff --git a/monai/deploy/core/models/__init__.py b/monai/deploy/core/models/__init__.py index d348af7f..aed4f7be 100644 --- a/monai/deploy/core/models/__init__.py +++ b/monai/deploy/core/models/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -23,6 +23,6 @@ from .model import Model from .named_model import NamedModel from .torch_model import TorchScriptModel -from .triton_model import TritonModel +from .triton_model import TritonModel, TritonRemoteModel Model.register([TritonModel, NamedModel, TorchScriptModel, Model]) diff --git a/monai/deploy/core/models/model.py b/monai/deploy/core/models/model.py index 218878dd..d69ebca5 100644 --- a/monai/deploy/core/models/model.py +++ b/monai/deploy/core/models/model.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -81,7 +81,7 @@ def __init__(self, path: str, name: str = ""): else: self._name = Path(path).stem - self._predictor = None + self._predictor: Any = None # Add self to the list of models self._items: Dict[str, Model] = {self.name: self} diff --git a/monai/deploy/core/models/named_model.py b/monai/deploy/core/models/named_model.py index 608d56af..be3f09a5 100644 --- a/monai/deploy/core/models/named_model.py +++ b/monai/deploy/core/models/named_model.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -12,9 +12,7 @@ import logging from pathlib import Path -from monai.deploy.core.models import ModelFactory - -from .model import Model +from monai.deploy.core.models import Model, ModelFactory logger = logging.getLogger(__name__) @@ -58,8 +56,12 @@ def __init__(self, path: str, name: str = ""): for model_folder in model_path.iterdir(): if model_folder.is_dir(): - # Pick one file (assume that only one file exists in the folder) + # Pick one file (assume that only one file exists in the folder), except for Triton model model_file = next(model_folder.iterdir()) + # If Triton model, then use the current folder + if (model_folder / "config.pbtxt").exists(): + model_file = model_folder + if model_file: # Recursive call to identify the model type model = ModelFactory.create(str(model_file), model_folder.name) @@ -81,10 +83,14 @@ def accept(cls, path: str): for model_folder in model_path.iterdir(): # 3) Each model folder must contain only one model definition file or folder. - if sum(1 for _ in model_folder.iterdir()) != 1: + # This would not be confused with Trion model repository which would have + # folders for named models which in turn contain at least one version folder + # and the config.pbtxt file. + # However, with detecting config.pbtxt, Triton model repository can also be accepted. + if sum(1 for _ in model_folder.iterdir()) != 1 and not (model_folder / "config.pbtxt").exists(): logger.warning( - f"Model repository {model_folder!r} contains more than one model definition file or folder " - "so not treated as NamedModel." + f"Model repository {model_folder!r} contains more than one model definition file or folder, " + "and is not a Triton model repository, so not treated as NamedModel." ) return False, None diff --git a/monai/deploy/core/models/triton_model.py b/monai/deploy/core/models/triton_model.py index f406877f..cb18f936 100644 --- a/monai/deploy/core/models/triton_model.py +++ b/monai/deploy/core/models/triton_model.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -9,10 +9,131 @@ # See the License for the specific language governing permissions and # limitations under the License. +import logging from pathlib import Path +from typing import Tuple + +import tritonclient.http as httpclient +from google.protobuf import text_format +from tritonclient.grpc.model_config_pb2 import DataType, ModelConfig + +from monai.deploy.utils.importutil import optional_import from .model import Model +torch, _ = optional_import("torch") + + +def parse_triton_config_pbtxt(pbtxt_path) -> ModelConfig: + """Parse a Triton model config.pbtxt file + + Args: + config_path: Path to the config.pbtxt file + + Returns: + ModelConfig object containing parsed configuration + + Raises: + ValueError: If config file is invalid or missing required fields + FileNotFoundError: If config file doesn't exist + """ + + if not pbtxt_path.exists(): + raise FileNotFoundError(f"Config file not found: {pbtxt_path}") + try: + # Read the config.pbtxt content + with open(pbtxt_path, "r") as f: + config_text = f.read() + # Parse using protobuf text_format + model_config = ModelConfig() + text_format.Parse(config_text, model_config) + return model_config + + except Exception as e: + raise ValueError(f"Failed to parse config file {pbtxt_path}") from e + + +class TritonRemoteModel: + """A remote model that is hosted on a Triton Inference Server. + + Args: + model_name (str): The name of the model. + netloc (str): The network location of the Triton Inference Server. + model_config (ModelConfig): The model config. + headers (dict): The headers to send to the Triton Inference Server. + """ + + def __init__(self, model_name, netloc, model_config, headers=None, **kwargs): + self._headers = headers + self._request_compression_algorithm = None + self._response_compression_algorithm = None + self._model_name = model_name + self._model_version = None + self._model_config = model_config + self._request_compression_algorithm = None + self._response_compression_algorithm = None + self._count = 0 + + try: + self._triton_client = httpclient.InferenceServerClient(url=netloc, verbose=kwargs.get("verbose", False)) + logging.info(f"Created triton client: {self._triton_client}") + except Exception as e: + logging.error("channel creation failed: " + str(e)) + raise + + def __call__(self, data, **kwds): + + self._count += 1 + logging.info(f"{self.__class__.__name__}.__call__: {self._model_name} count: {self._count}") + + inputs = [] + outputs = [] + + # For now support only one input and one output + input_name = self._model_config.input[0].name + input_type = str.split(DataType.Name(self._model_config.input[0].data_type), "_")[1] # remove the prefix + input_shape = list(self._model_config.input[0].dims) + data_shape = list(data.shape) + logging.info(f"Model config input data shape: {input_shape}") + logging.info(f"Actual input data shape: {data_shape}") + + # The server side will handle the batching, and with dynamic batching + # the model config does not have the batch size in the input dims. + logging.info(f"Effective input_name: {input_name}, input_type: {input_type}, input_shape: {data_shape}") + + inputs.append(httpclient.InferInput(input_name, data_shape, input_type)) + + # Move to tensor to CPU + input0_data_np = data.detach().cpu().numpy() + logging.debug(f"Input data shape: {input0_data_np.shape}") + + # Initialize the data + inputs[0].set_data_from_numpy(input0_data_np, binary_data=False) + + output_name = self._model_config.output[0].name + outputs.append(httpclient.InferRequestedOutput(output_name, binary_data=True)) + + query_params = {f"{self._model_name}_count": self._count} + results = self._triton_client.infer( + self._model_name, + inputs, + outputs=outputs, + query_params=query_params, + headers=self._headers, + request_compression_algorithm=self._request_compression_algorithm, + response_compression_algorithm=self._response_compression_algorithm, + ) + + logging.info(f"Got results{results.get_response()}") + output0_data = results.as_numpy(output_name) + logging.debug(f"as_numpy output0_data.shape: {output0_data.shape}") + logging.debug(f"as_numpy output0_data.dtype: {output0_data.dtype}") + + # Convert numpy array to torch tensor as expected by the anticipated clients, + # e.g. monai cliding window inference + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + return torch.as_tensor(output0_data).to(device) # from_numpy is fine too. + class TritonModel(Model): """Represents Triton models in the model repository. @@ -45,19 +166,23 @@ class TritonModel(Model): 1) The path should be a folder path. - 2) The directory should contain only sub folders (model folders). - - 3) Each model folder must contain a config.pbtxt file. + 2) The model folder must contain a config.pbtxt file. a. A config.pbtxt file may contain model name. In that case, model's name should match with the folder name. - 4) Each model folder must include one or more folders having a positive integer value as name. + 3) The model folder may include one or more folders having a positive integer value as version. + For the server side, the following is required, however, not required for the client side + which parses only the model config.pbtxt file. - a. Each such folder must contain a folder or file whose file name (without extension) is 'model'. + a. Each such folder must contain a folder or file whose file name (without extension) is 'model', + unless an attribute is used to specify model file name. - It currently doesn't identify which model version would be selected. + If no version policy is specified, the latest version of a model is loaded and served. Model items identified would have a folder path, not a specific model file path. + + This class encapuslates a single triton model. As such, the model repository folder + will first be parsed by the named_model class, and then each sub folder by this class. """ model_type: str = "triton" @@ -73,50 +198,96 @@ def __init__(self, path: str, name: str = ""): """ super().__init__(path, name) - # Clear existing model item and fill model items - self._items.clear() - model_path: Path = Path(path) + self._model_path: Path = Path(path) + self._name = self._model_path.stem + self._model_config = parse_triton_config_pbtxt(self._model_path / "config.pbtxt") + # The model name in the config.pbtxt, if present, must match the model folder name. + if self._model_config.name and self._model_config.name.casefold() != self._name.casefold(): + raise ValueError( + f"Model name in config.pbtxt ({self._model_config.name}) does not match the folder name ({self._name})." + ) + + self._netloc: str = "" + logging.info(f"Created Triton model: {self._name}") + + def connect(self, netloc: str, **kwargs): + """Connect to the Triton Inference Server at the network location. + + Args: + netloc (str): The network location of the Triton Inference Server. + """ + + if not netloc: + raise ValueError("Network location is required to connect to the Triton Inference Server.") + + if self._netloc and not self._netloc.casefold() == netloc.casefold(): + logging.warning(f"Reconnecting to a different Triton Inference Server at {netloc} from {self._netloc}.") - for model_folder in model_path.iterdir(): - if model_folder.is_dir(): - self._items[model_folder.name] = Model(str(model_folder), model_folder.name) + self._predictor = TritonRemoteModel(self._name, netloc, self._model_config, **kwargs) + self._netloc = netloc + + return self._predictor + + @property + def model_config(self): + return self._model_config + + @property + def net_loc(self): + """Get the network location of the Triton Inference Server, i.e. ":". + + Returns: + str: The network location of the Triton Inference Server. + """ + + return self._netloc + + @net_loc.setter + def net_loc(self, value: str): + """Set the network location of the Triton Inference Server, and causes re-connect.""" + if not value: + raise ValueError("Network location cannot be empty.") + self._netloc = value + # Reconnect to the Triton Inference Server at the new network location. + self.connect(value) + + @property + def predictor(self): + if not self._predictor: + raise ValueError("Model is not connected to the Triton Inference Server.") + return self._predictor + + @predictor.setter + def predictor(self, predictor: TritonRemoteModel): + if not isinstance(predictor, TritonRemoteModel): + raise ValueError("Predictor must be an instance of TritonRemoteModel.") + self._predictor = predictor @classmethod - def accept(cls, path: str): - model_path: Path = Path(path) - - # 1) The path should be a folder path. - if not model_path.is_dir(): - return False, None - - # 2) The directory should contain only sub folders (model folders). - if not all((p.is_dir() for p in model_path.iterdir())): - return False, None - - is_triton_model_repository = True - for model_folder in model_path.iterdir(): - # 3) Each model folder must contain a config.pbtxt file. - if not (model_folder / "config.pbtxt").exists(): - return False, None - # TODO(gigony): We do not check if the config.pbtxt file contains model name for now (3-1). - # We assume that the model name is the same as the folder name. - - # 4) Each model folder must include one or more folders having a positive integer value as name. - found_model = False - for version_folder in model_folder.iterdir(): - version_folder_name = version_folder.name - if version_folder.is_dir() and version_folder_name.isnumeric() and int(version_folder_name) > 0: - # 4-1) Each such folder must contain a folder or file whose file name (without extension) - # is 'model'. - # TODO(gigony): check config.pbtxt file to see actual model file if specified. - if any(version_folder.glob("model.*")): - found_model = True - else: - return False, None - if not found_model: - is_triton_model_repository = False - break - if is_triton_model_repository: - return True, cls.model_type - - return False, None + def accept(cls, path: str) -> Tuple[bool, str]: + model_folder: Path = Path(path) + + # The path should be a folder path, for an individual model, and must have the config.pbtxt file. + if not model_folder.is_dir() or not (model_folder / "config.pbtxt").exists(): + return False, "" + + # Delay parsing the config.pbtxt protobuf for model name, input and output information etc. + # Per convention, the model name is the same as the folder name, and the name in the config file, + # if specified, must match the folder name. + # For the server, each model folder must include one or more folders having a positive integer value as name, + # and each such folder must contain a folder or file for the model. + # At the client side, though there is no need to have the actual model file. + # So the following is not necessary at all, just checking for logging purpose. + found_model = False + for version_folder in model_folder.iterdir(): + version_folder_name = version_folder.name + if version_folder.is_dir() and version_folder_name.isnumeric() and int(version_folder_name) > 0: + # Each such folder must contain a folder or file whose file name (without extension) + # is 'model'. The config.pbtxt can specify the actual model file with an attribute. + if any(version_folder.glob("*")): + found_model = True + logging.info(f"Model {model_folder.name} version {version_folder_name} found in client workspace.") + if not found_model: + logging.info(f"Model {model_folder.name} only has config.pbtxt in client workspace.") + + return True, cls.model_type diff --git a/monai/deploy/core/runtime_env.py b/monai/deploy/core/runtime_env.py index f169e1c7..76a08cdf 100644 --- a/monai/deploy/core/runtime_env.py +++ b/monai/deploy/core/runtime_env.py @@ -1,4 +1,4 @@ -# Copyright 2021 MONAI Consortium +# Copyright 2021-2025 MONAI Consortium # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -17,8 +17,10 @@ class RuntimeEnv(ABC): """Class responsible for managing run time settings. - The expected environment variables are the keys in the defaults dictionary, - and they can be set to override the defaults. + The expected variables can be set via the host env vars which override the + default values in the internal dictionary. + Selective overriding of variables can be done by passing a dictionary to the constructor, + which should have the same structure as the internal dictionary. """ ENV_DEFAULT: Dict[str, Tuple[str, ...]] = { @@ -26,15 +28,21 @@ class RuntimeEnv(ABC): "output": ("HOLOSCAN_OUTPUT_PATH", "output"), "model": ("HOLOSCAN_MODEL_PATH", "models"), "workdir": ("HOLOSCAN_WORKDIR", ""), + "triton_server_netloc": ("TRITON_SERVER_NETLOC", ""), } + # Place holders as the values will be set in the __init__ method input: str = "" output: str = "" model: str = "" workdir: str = "" + triton_server_netloc: str = "" # Triton server host:port def __init__(self, defaults: Optional[Dict[str, Tuple[str, ...]]] = None): if defaults is None: defaults = self.ENV_DEFAULT + else: + defaults = {**self.ENV_DEFAULT, **defaults} + for key, (env, default) in defaults.items(): self.__dict__[key] = os.environ.get(env, default) diff --git a/requirements.txt b/requirements.txt index 73a56030..99bbb796 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ holoscan~=2.0 numpy>=1.21.6 colorama>=0.4.1 +tritonclient[all] typeguard>=3.0.0 From 8fe1077b98d82004126d4f96cd0c5cf0eb9741c9 Mon Sep 17 00:00:00 2001 From: WillButAgain <69763508+WillButAgain@users.noreply.github.com> Date: Mon, 21 Apr 2025 20:55:31 -0400 Subject: [PATCH 091/118] Fix DICOMSeriesToVolumeOperator casting bug (#529) * fix casting, add check Signed-off-by: will tepe * code review changes Signed-off-by: will tepe * fix fir slope as well --------- Signed-off-by: will tepe Co-authored-by: will tepe Signed-off-by: Simone Bendazzoli --- .../dicom_series_to_volume_operator.py | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/monai/deploy/operators/dicom_series_to_volume_operator.py b/monai/deploy/operators/dicom_series_to_volume_operator.py index 38b4beaf..d589354f 100644 --- a/monai/deploy/operators/dicom_series_to_volume_operator.py +++ b/monai/deploy/operators/dicom_series_to_volume_operator.py @@ -112,7 +112,8 @@ def generate_voxel_data(self, series): # with the NumPy array returned from the ITK GetArrayViewFromImage on the image # loaded from the same DICOM series. vol_data = np.stack([s.get_pixel_array() for s in slices], axis=0) - vol_data = vol_data.astype(np.int16) + if slices[0][0x0028,0x0103].value == 1: + vol_data = vol_data.astype(np.uint16) # For now we support monochrome image only, for which DICOM Photometric Interpretation # (0028,0004) has defined terms, MONOCHROME1 and MONOCHROME2, with the former being: @@ -154,11 +155,29 @@ def generate_voxel_data(self, series): except KeyError: slope = 1 + + # check if vol_data, intercept, and slope can be cast to uint16 without data loss + if np.can_cast(vol_data, np.uint16, casting='safe') and np.can_cast(intercept, np.uint16, casting='safe') and np.can_cast(slope, np.uint16, casting='safe'): + logging.info(f"Casting to uint16") + vol_data = np.array(vol_data, dtype=np.uint16) + intercept = np.uint16(intercept) + slope = np.uint16(slope) + elif np.can_cast(vol_data, np.float32, casting='safe') and np.can_cast(intercept, np.float32, casting='safe') and np.can_cast(slope, np.float32, casting='safe'): + logging.info(f"Casting to float32") + vol_data = np.array(vol_data, dtype=np.float32) + intercept = np.float32(intercept) + slope = np.float32(slope) + elif np.can_cast(vol_data, np.float64, casting='safe') and np.can_cast(intercept, np.float64, casting='safe') and np.can_cast(slope, np.float64, casting='safe'): + logging.info(f"Casting to float64") + vol_data = np.array(vol_data, dtype=np.float64) + intercept = np.float64(intercept) + slope = np.float64(slope) + if slope != 1: - vol_data = slope * vol_data.astype(np.float64) - vol_data = vol_data.astype(np.int16) - vol_data += np.int16(intercept) - return np.array(vol_data, dtype=np.int16) + vol_data = slope * vol_data + + vol_data += intercept + return vol_data def create_volumetric_image(self, vox_data, metadata): """Creates an instance of 3D image. From e7921619488b5e7ffb0afa448e1a656fe3c361c9 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Mon, 21 Apr 2025 18:55:05 -0700 Subject: [PATCH 092/118] Formatting changes and tag value for unsigned int is 0 (#537) * The tag value for usinged int is 0 Signed-off-by: M Q * Fix formmating complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .../dicom_series_to_volume_operator.py | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/monai/deploy/operators/dicom_series_to_volume_operator.py b/monai/deploy/operators/dicom_series_to_volume_operator.py index d589354f..57c60c17 100644 --- a/monai/deploy/operators/dicom_series_to_volume_operator.py +++ b/monai/deploy/operators/dicom_series_to_volume_operator.py @@ -112,7 +112,9 @@ def generate_voxel_data(self, series): # with the NumPy array returned from the ITK GetArrayViewFromImage on the image # loaded from the same DICOM series. vol_data = np.stack([s.get_pixel_array() for s in slices], axis=0) - if slices[0][0x0028,0x0103].value == 1: + # The above get_pixel_array() already considers the PixelRepresentation attribute, + # 0 is unsigned int, 1 is signed int + if slices[0][0x0028, 0x0103].value == 0: vol_data = vol_data.astype(np.uint16) # For now we support monochrome image only, for which DICOM Photometric Interpretation @@ -155,24 +157,35 @@ def generate_voxel_data(self, series): except KeyError: slope = 1 - # check if vol_data, intercept, and slope can be cast to uint16 without data loss - if np.can_cast(vol_data, np.uint16, casting='safe') and np.can_cast(intercept, np.uint16, casting='safe') and np.can_cast(slope, np.uint16, casting='safe'): - logging.info(f"Casting to uint16") + if ( + np.can_cast(vol_data, np.uint16, casting="safe") + and np.can_cast(intercept, np.uint16, casting="safe") + and np.can_cast(slope, np.uint16, casting="safe") + ): + logging.info("Casting to uint16") vol_data = np.array(vol_data, dtype=np.uint16) intercept = np.uint16(intercept) slope = np.uint16(slope) - elif np.can_cast(vol_data, np.float32, casting='safe') and np.can_cast(intercept, np.float32, casting='safe') and np.can_cast(slope, np.float32, casting='safe'): - logging.info(f"Casting to float32") + elif ( + np.can_cast(vol_data, np.float32, casting="safe") + and np.can_cast(intercept, np.float32, casting="safe") + and np.can_cast(slope, np.float32, casting="safe") + ): + logging.info("Casting to float32") vol_data = np.array(vol_data, dtype=np.float32) intercept = np.float32(intercept) slope = np.float32(slope) - elif np.can_cast(vol_data, np.float64, casting='safe') and np.can_cast(intercept, np.float64, casting='safe') and np.can_cast(slope, np.float64, casting='safe'): - logging.info(f"Casting to float64") + elif ( + np.can_cast(vol_data, np.float64, casting="safe") + and np.can_cast(intercept, np.float64, casting="safe") + and np.can_cast(slope, np.float64, casting="safe") + ): + logging.info("Casting to float64") vol_data = np.array(vol_data, dtype=np.float64) intercept = np.float64(intercept) slope = np.float64(slope) - + if slope != 1: vol_data = slope * vol_data From bb3907a17e0c3513ee30d844f177053228530963 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 17:20:48 -0700 Subject: [PATCH 093/118] Prepared changes for releasing v3 (#538) * Prepared changes for releasing v3 Signed-off-by: M Q * Bump the required version to 3.9 Signed-off-by: M Q * Update Python version references to 3.9 in documentation and configuration files - Updated .gitignore to include new input and test directories. - Changed Python version from 3.8 to 3.9 in .readthedocs.yml, setup.cfg, and run script. - Updated documentation to reflect the use of Python 3.9 in various tutorials. Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .github/workflows/pr.yml | 4 +- .readthedocs.yml | 2 +- CONTRIBUTING.md | 2 +- README.md | 16 +- docs/requirements.txt | 2 +- .../developing_with_sdk/packaging_app.md | 8 +- .../getting_started/tutorials/mednist_app.md | 6 +- .../tutorials/monai_bundle_app.md | 8 +- .../tutorials/multi_model_app.md | 6 +- .../tutorials/segmentation_app.md | 6 +- .../tutorials/segmentation_clara-viz_app.md | 4 +- .../getting_started/tutorials/simple_app.md | 6 +- docs/source/release_notes/index.md | 7 + docs/source/release_notes/v3.0.0.md | 29 + notebooks/tutorials/01_simple_app.ipynb | 737 +++------ .../tutorials/02_mednist_app-prebuilt.ipynb | 954 +++--------- notebooks/tutorials/02_mednist_app.ipynb | 9 +- notebooks/tutorials/03_segmentation_app.ipynb | 1357 +++++++++-------- notebooks/tutorials/04_monai_bundle_app.ipynb | 1271 +++++++-------- notebooks/tutorials/05_multi_model_app.ipynb | 989 +++++------- requirements.txt | 5 +- run | 6 +- setup.cfg | 6 +- 23 files changed, 2338 insertions(+), 3102 deletions(-) create mode 100644 docs/source/release_notes/v3.0.0.md diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index edd0fa5c..3ab1eb59 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -14,10 +14,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.9 uses: actions/setup-python@v2 with: - python-version: "3.8" + python-version: "3.9" - name: Setup Dev Environment run: | pip install virtualenv diff --git a/.readthedocs.yml b/.readthedocs.yml index 6c872c8b..59c6d31c 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -8,7 +8,7 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.8" + python: "3.9" # You can also specify other tool versions: # nodejs: "20" # rust: "1.70" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 535231d7..eaab3990 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -138,7 +138,7 @@ MONAI Deploy App SDK's code coverage report is available at [CodeCov](https://co #### Building the documentation :::{note} -Please note that the documentation builds successfully in Python 3.8 environment, but fails with Python 3.10. +Please note that the documentation builds successfully in Python 3.9 environment, but fails with Python 3.10. ::: MONAI's documentation is located at `docs/`. diff --git a/README.md b/README.md index 016fa9e1..956541fe 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ MONAI Deploy App SDK offers a framework and associated tools to design, develop - Build medical imaging inference applications using a flexible, extensible & usable Pythonic API - Easy management of inference applications via programmable Directed Acyclic Graphs (DAGs) - Built-in operators to load DICOM data to be ingested in an inference app -- Out-of-the-box support for in-proc PyTorch based inference +- Out-of-the-box support for in-proc PyTorch based inference, as well as remote inference via Triton Inference Server - Easy incorporation of MONAI based pre and post transformations in the inference application - Package inference application with a single command into a portable MONAI Application Package - Locally run and debug your inference application using App Runner @@ -33,7 +33,7 @@ If you have used MONAI in your research, please cite us! The citation can be exp To install [the current release](https://pypi.org/project/monai-deploy-app-sdk/), you can simply run: ```bash -pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. +pip install monai-deploy-app-sdk ``` ### Prerequisites @@ -48,7 +48,7 @@ pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. Getting started guide is available at [here](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/getting_started/index.html). ```bash -pip install monai-deploy-app-sdk # '--pre' to install a pre-release version. +pip install monai-deploy-app-sdk # Clone monai-deploy-app-sdk repository for accessing examples. git clone https://github.com/Project-MONAI/monai-deploy-app-sdk.git @@ -62,7 +62,7 @@ python examples/apps/simple_imaging_app/app.py -i examples/apps/simple_imaging_a # Package app (creating MAP Docker image), using `-l DEBUG` option to see progress. # Also please note that postfix will be added to user supplied tag for identifying CPU architecture and GPU type etc. -monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x64-workstation -l DEBUG +monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x86_64 -l DEBUG # Run the app with docker image and an input file locally ## Copy a test input file to 'input' folder @@ -86,7 +86,7 @@ YouTube Video (to be updated with the new version): ### [3) Creating a Segmentation app](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/getting_started/tutorials/segmentation_app.html) -YouTube Video (to be updated with the new version): +YouTube Video (demonstrating the previous version of the App SDK): - [Spleen Organ Segmentation - Jupyter Notebook Tutorial](https://www.youtube.com/watch?v=cqDVxzYt9lY) - [Spleen Organ Segmentation - Deep Dive](https://www.youtube.com/watch?v=nivgfD4pwWE) @@ -97,14 +97,16 @@ YouTube Video (to be updated with the new version): ### [Examples](https://docs.monai.io/projects/monai-deploy-app-sdk/en/stable/getting_started/examples.html) - has example apps that you can see. + has example apps that you can see, to name but a few +- simple_imaging_app - ai_livertumor_seg_app - ai_spleen_seg_app - ai_unetr_seg_app - dicom_series_to_image_app - mednist_classifier_monaideploy -- simple_imaging_app +- ai_remote_infer_app + ## Contributing diff --git a/docs/requirements.txt b/docs/requirements.txt index 3f64ba34..6f6372db 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,6 +1,6 @@ Sphinx==4.1.2 sphinx-autobuild==2021.3.14 -myst-nb==0.17.2 # this version is fine in python 3.8 and avoids pulling in multiple nbformat packages +myst-nb==0.17.2 # this version is fine in python 3.9 and avoids pulling in multiple nbformat packages myst-parser==0.18.0 lxml_html_clean # needed by myst-nb linkify-it-py==1.0.1 # https://myst-parser.readthedocs.io/en/latest/syntax/optional.html?highlight=linkify#linkify diff --git a/docs/source/developing_with_sdk/packaging_app.md b/docs/source/developing_with_sdk/packaging_app.md index a46327ec..f4e7ee0f 100644 --- a/docs/source/developing_with_sdk/packaging_app.md +++ b/docs/source/developing_with_sdk/packaging_app.md @@ -13,7 +13,7 @@ It is required that the application configuration yaml file as well as the depen ### Basic Usage of MONAI Application Packager ```bash -monai-deploy package --config --tag --platform [--models ] [--log-level ] [-h] +monai-deploy package --config --tag --platform [--models ] [--log-level ] [-h] ``` #### Required Arguments @@ -21,7 +21,7 @@ monai-deploy package --config --tag --platform `: A path to MONAI Deploy Application folder or main code. * `--config, -c `: Path to the application configuration file. * `--tag, -t `: A MAP name and optionally a tag in the 'name:tag' format. -* `--platform `: Platform type of the container image, must be `x64-workstation` for x86-64 system. +* `--platform `: Platform type of the container image, must be `x86_64` for x86-64 system. :::{note} If `` refers to a python code (such as `./my_app.py`), the whole parent folder of the file would be packaged into the MAP container image, effectively the same as specifying the application folder path which includes `__main__.py` file. In both cases, the image's environment variable, `HOLOSCAN_APPLICATION` will be set with the path of the application folder in the image, i.e. `HOLOSCAN_APPLICATION=/opt/holoscan/app`. So, it is essential to provide the `__main__.py` file in the application folder, which usually would look like below: @@ -54,7 +54,7 @@ The following lists a few most likely used [optional arguments](https://docs.nvi Given an example MONAI Deploy App SDK application with its code residing in a directory `./my_app`, packaging this application with the Packager to create a Docker image tagged `my_app:latest` would look like this: ```bash -$ monai-deploy package ./my_app -c --config ./my_app/app.yaml -t my_app:latest --models ./model.ts --platform x64-workstation +$ monai-deploy package ./my_app -c --config ./my_app/app.yaml -t my_app:latest --models ./model.ts --platform x86_64 Building MONAI Application Package... Successfully built my_app:latest @@ -65,7 +65,7 @@ The MAP image name will be postfixed with the platform info to become `my_app-x6 :::{note} * The current implementation of the Packager **ONLY** supports a set of [platform](https://docs.nvidia.com/holoscan/sdk-user-guide/cli/package.html#platform-platform) specific base images from `nvcr.io` as base images for the MAP. -* To package a MAP to run on ARMv8 AArch64 on Linux with discrete GPU, replace the commandline option `--platform x64-workstation` with `--platform igx-orin-devkit --platform-config dgpu`. It has been tested on [NVIDIA IGX Orin](https://www.nvidia.com/en-us/edge-computing/products/igx/). +* To package a MAP to run on ARMv8 AArch64 on Linux with discrete GPU, replace the commandline option `--platform x86_64` with `--platform igx-dgpu`. It has been tested on [NVIDIA IGX Orin](https://www.nvidia.com/en-us/edge-computing/products/igx/). ::: ## Next Step diff --git a/docs/source/getting_started/tutorials/mednist_app.md b/docs/source/getting_started/tutorials/mednist_app.md index 63809ae2..d762d917 100644 --- a/docs/source/getting_started/tutorials/mednist_app.md +++ b/docs/source/getting_started/tutorials/mednist_app.md @@ -5,9 +5,9 @@ This tutorial demos the process of packaging up a trained model using MONAI Depl ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n mednist python=3.8 pytorch jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n mednist python=3.9 pytorch jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate mednist # Launch JupyterLab if you want to work on Jupyter Notebook @@ -98,7 +98,7 @@ monai-deploy package examples/apps/mednist_classifier_monaideploy/mednist_classi --config examples/apps/mednist_classifier_monaideploy/app.yaml \ --tag mednist_app:latest \ --models mednist_model/classifier.zip \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/monai_bundle_app.md b/docs/source/getting_started/tutorials/monai_bundle_app.md index 326b868a..c259a947 100644 --- a/docs/source/getting_started/tutorials/monai_bundle_app.md +++ b/docs/source/getting_started/tutorials/monai_bundle_app.md @@ -5,9 +5,9 @@ This tutorial shows how to create an organ segmentation application for a PyTorc ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -38,7 +38,7 @@ jupyter-lab ```{raw} html

- + Download 04_monai_bundle_app.ipynb

@@ -86,7 +86,7 @@ monai-deploy package examples/apps/ai_spleen_seg_app \ --config examples/apps/ai_spleen_seg_app/app.yaml \ --tag seg_app:latest \ --models spleen_model/model.ts \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/multi_model_app.md b/docs/source/getting_started/tutorials/multi_model_app.md index 801aec20..515e88b8 100644 --- a/docs/source/getting_started/tutorials/multi_model_app.md +++ b/docs/source/getting_started/tutorials/multi_model_app.md @@ -7,9 +7,9 @@ The models used in this example are trained with MONAI, and are packaged in the ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -70,7 +70,7 @@ monai-deploy package examples/apps/ai_multi_ai_app \ --tag multi_model_app:latest \ --config examples/apps/ai_multi_ai_app/app.yaml \ --models multi_models \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/segmentation_app.md b/docs/source/getting_started/tutorials/segmentation_app.md index 6497c874..4493bc0e 100644 --- a/docs/source/getting_started/tutorials/segmentation_app.md +++ b/docs/source/getting_started/tutorials/segmentation_app.md @@ -7,9 +7,9 @@ Please note that the following steps are for demonstration purpose. The code pul ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -72,7 +72,7 @@ monai-deploy package examples/apps/ai_spleen_seg_app \ --config examples/apps/ai_spleen_seg_app/app.yaml \ --tag seg_app:latest \ --models spleen_model/model.ts \ - --platform x64-workstation \ + --platform x86_64 \ -l DEBUG # Note: for AMD GPUs, nvidia-docker is not required, but the dependency of the App SDK, namely Holoscan SDK diff --git a/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md b/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md index 1ce87b5a..6c9f3b44 100644 --- a/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md +++ b/docs/source/getting_started/tutorials/segmentation_clara-viz_app.md @@ -5,9 +5,9 @@ This tutorial shows how to create an organ segmentation application for a PyTorc ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook diff --git a/docs/source/getting_started/tutorials/simple_app.md b/docs/source/getting_started/tutorials/simple_app.md index d43fca0c..77dcd4bc 100644 --- a/docs/source/getting_started/tutorials/simple_app.md +++ b/docs/source/getting_started/tutorials/simple_app.md @@ -5,9 +5,9 @@ This tutorial shows how a simple image processing application can be created wit ## Setup ```bash -# Create a virtual environment with Python 3.8. +# Create a virtual environment with Python 3.9. # Skip if you are already in a virtual environment. -conda create -n monai python=3.8 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge +conda create -n monai python=3.9 pytorch torchvision jupyterlab cudatoolkit=12.2 -c pytorch -c conda-forge conda activate monai # Launch JupyterLab if you want to work on Jupyter Notebook @@ -69,7 +69,7 @@ ls output # This assumes that nvidia docker is installed in the local machine. # Please see https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker to install nvidia-docker2. -monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x64-workstation -l DEBUG +monai-deploy package examples/apps/simple_imaging_app -c examples/apps/simple_imaging_app/app.yaml -t simple_app:latest --platform x86_64 -l DEBUG # Show the application and package manifest files of the MONAI Application Package diff --git a/docs/source/release_notes/index.md b/docs/source/release_notes/index.md index fdb10dfc..84965f23 100644 --- a/docs/source/release_notes/index.md +++ b/docs/source/release_notes/index.md @@ -4,6 +4,13 @@ :hidden: :maxdepth: 2 +``` +## Version 3.0 + +```{toctree} +:maxdepth: 1 + +v3.0.0 ``` ## Version 2.0 diff --git a/docs/source/release_notes/v3.0.0.md b/docs/source/release_notes/v3.0.0.md new file mode 100644 index 00000000..2d229404 --- /dev/null +++ b/docs/source/release_notes/v3.0.0.md @@ -0,0 +1,29 @@ +# Version 2.0.0 (April 24th, 2024) + +## What's new in 3.0.0 + +- This version of the App SDK is based on the newly released [Holoscan SDK v3](https://pypi.org/project/holoscan/), and is expected to be so with future minor releases of Holoscan SDK v3. + +- Starting with version 3.0.0, [Holoscan SDK](https://pypi.org/project/holoscan/) and [Holoscan CLI](https://pypi.org/project/holoscan-cli/) are released in separate packages, and as such, this version of the MONAI Deploy App SDK has both as dependencies. As of now, version 3 of both packages are compatible. + +- Remote inference on [Triton Inference Server](https://github.com/triton-inference-server) is now supported. Effort was made to make it user-friendly so existing example applications can be easily converted to use this feature by simply providing the network location of the server as well as the [Triton model configuration file](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md) sans the actual model files. [An example application](https://github.com/Project-MONAI/monai-deploy-app-sdk/tree/main/examples/apps/ai_remote_infer_app) has been provided to demonstrate such use case. + +### Key changes + +- [Cincinnati Children's Hospital Medical Cente](https://www.cincinnatichildrens.org/) researchers, @[Bryan](https://github.com/bluna301) @[Will](https://github.com/WillButAgain) and Elan, contributed numerous enhancements from experience developing and deploying MONAI based AI applications in clinical environments, to name but a few + + - Enhanced the DICOM data loader to handle multi-phase DICOM series where multiple acquisitions exist and some DICOM SOP instances have the same image pospositiontion patient. + + - Enahnced the DICOM series to volume operator to better handle the data types of the converted volume image for improved efficiency and memory usage. + + - Enhanced the DICOM Segmentation operator to populate DICOM tags with AI model information which are consistent with other DICOM writers in the SDK. + + +Please also see the closed issues on Github and the closed pull requests on Github. + +## Additional information +Please visit [GETTING STARTED](/getting_started/index) guide and follow the tutorials. + +You can learn more about SDK usage through [DEVELOPING WITH SDK](/developing_with_sdk/index). + +Please let us know how you like it and what could be improved by [submitting an issue](https://github.com/Project-MONAI/monai-deploy-app-sdk/issues/new/choose) or [asking questions](https://github.com/Project-MONAI/monai-deploy-app-sdk/discussions) \ No newline at end of file diff --git a/notebooks/tutorials/01_simple_app.ipynb b/notebooks/tutorials/01_simple_app.ipynb index 8da2f1c1..beaf5a53 100644 --- a/notebooks/tutorials/01_simple_app.ipynb +++ b/notebooks/tutorials/01_simple_app.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 82, "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 83, "metadata": {}, "outputs": [ { @@ -96,23 +96,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/2727006292.py:16: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/2727006292.py:16: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(test_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 2, + "execution_count": 83, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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kZgjRPUIx7E+CMexPgjHsX4Ix7I+8BvHIJovUVMijhAhQoQIESJEdQgJOESIECFChNgAbFoCbmlpwWOPPRZm0KoR4TjWB+E41gfhONYP4VjWB5dyHDdlEFaIECFChAix2bFpNeAQIUKECBFiMyMk4BAhQoQIEWIDEBJwiBAhQoQIsQEICThEiBAhQoTYAIQEHCJEiBAhQmwANiUB/8M//AO2b9+OWCyGgwcP4sc//vFGd+mKwv/8z//g/e9/PwYGBhCJRPDkk09WfO84Dv70T/8U/f39iMfjOHz4ME6cOFFRZmZmBo888giSySTS6TQ+9rGPYX5+/jLexcbj8ccfxx133IH29nb09PTgl3/5l3H8+PGKMktLS3j00UfR2dmJtrY2fOhDH8LExERFmdHRUTz00ENobW1FT08PPve5z2F1dfVy3sqG4stf/jL27t2rMgkdOnQITz31lPo+HMPq8KUvfQmRSASf/vSn1WfhWNrhi1/8ojrFjD+7d+9W31+2cXQ2GZ544gmnubnZ+dd//Vfntddec37rt37LSafTzsTExEZ37YrBd77zHeeP/uiPnP/8z/90ADjf+MY3Kr7/0pe+5KRSKefJJ590Xn75ZeeXfumXnB07djilUkmVee973+vs27fPef75553//d//da6//nrn4Ycfvsx3srF44IEHnK985SvOsWPHnKNHjzq/+Iu/6Gzbts2Zn59XZT7+8Y87W7dudZ555hnnpz/9qXPXXXc5d999t/p+dXXVueWWW5zDhw87L730kvOd73zH6erqcr7whS9sxC1tCL75zW863/72t5233nrLOX78uPOHf/iHTlNTk3Ps2DHHccIxrAY//vGPne3btzt79+51PvWpT6nPw7G0w2OPPebcfPPNzvj4uPrJ5XLq+8s1jpuOgO+8807n0UcfVf+vra05AwMDzuOPP76BvbpyoRPw+vq609fX5/zVX/2V+mxubs5paWlx/v3f/91xHMd5/fXXHQDOT37yE1XmqaeeciKRiHP27NnL1vcrDZOTkw4A59lnn3Uc5/y4NTU1OV//+tdVmTfeeMMB4Bw5csRxnPPCUDQadbLZrCrz5S9/2Ukmk87y8vLlvYErCJlMxvmXf/mXcAyrQLFYdHbt2uU8/fTTzn333acIOBxLezz22GPOvn37jN9dznHcVCbocrmMF198EYcPH1afRaNRHD58GEeOHNnAnm0eDA8PI5vNVoxhKpXCwYMH1RgeOXIE6XQaBw4cUGUOHz6MaDSKF1544bL3+UpBPp8HAHR0dAAAXnzxRaysrFSM5e7du7Ft27aKsbz11lvR29uryjzwwAMoFAp47bXXLmPvrwysra3hiSeewMLCAg4dOhSOYRV49NFH8dBDD1WMGRDOx6A4ceIEBgYGcN111+GRRx7B6OgogMs7jpvqNKSpqSmsra1V3DQA9Pb24s0339ygXm0uZLNZADCOIb/LZrPo6emp+L6xsREdHR2qzLWG9fV1fPrTn8Y999yDW265BcD5cWpubkY6na4oq4+laaz53bWCV199FYcOHcLS0hLa2trwjW98AzfddBOOHj0ajmEAPPHEE/jZz36Gn/zkJxd9F85Hexw8eBBf/epXceONN2J8fBx/9md/hnvvvRfHjh27rOO4qQg4RIiNwqOPPopjx47hueee2+iubErceOONOHr0KPL5PP7jP/4DH/nIR/Dss89udLc2Fc6cOYNPfepTePrppxGLxTa6O5saDz74oPp77969OHjwIIaGhvC1r30N8Xj8svVjU5mgu7q60NDQcFE02sTEBPr6+jaoV5sLHCevMezr68Pk5GTF96urq5iZmbkmx/mTn/wkvvWtb+EHP/gBBgcH1ed9fX0ol8uYm5urKK+PpWms+d21gubmZlx//fXYv38/Hn/8cezbtw9/+7d/G45hALz44ouYnJzE7bffjsbGRjQ2NuLZZ5/F3/3d36GxsRG9vb3hWFaJdDqNG264ASdPnrysc3JTEXBzczP279+PZ555Rn22vr6OZ555BocOHdrAnm0e7NixA319fRVjWCgU8MILL6gxPHToEObm5vDiiy+qMt///vexvr6OgwcPXvY+bxQcx8EnP/lJfOMb38D3v/997Nixo+L7/fv3o6mpqWIsjx8/jtHR0YqxfPXVVysEmqeffhrJZBI33XTT5bmRKxDr6+tYXl4OxzAA3vOe9+DVV1/F0aNH1c+BAwfwyCOPqL/DsawO8/PzOHXqFPr7+y/vnKwqhGwD8cQTTzgtLS3OV7/6Vef11193fvu3f9tJp9MV0WjXOorFovPSSy85L730kgPA+eu//mvnpZdeckZGRhzHOb8NKZ1OO//1X//lvPLKK84HPvAB4zak2267zXnhhRec5557ztm1a9c1tw3pE5/4hJNKpZwf/vCHFdsVFhcXVZmPf/zjzrZt25zvf//7zk9/+lPn0KFDzqFDh9T33K5w//33O0ePHnW++93vOt3d3dfUto/Pf/7zzrPPPusMDw87r7zyivP5z3/eiUQizve+9z3HccIxrAUyCtpxwrG0xWc/+1nnhz/8oTM8POz86Ec/cg4fPux0dXU5k5OTjuNcvnHcdATsOI7z93//9862bduc5uZm584773Sef/75je7SFYUf/OAHDoCLfj7ykY84jnN+K9Kf/MmfOL29vU5LS4vznve8xzl+/HhFHdPT087DDz/stLW1Oclk0vnoRz/qFIvFDbibjYNpDAE4X/nKV1SZUqnk/M7v/I6TyWSc1tZW54Mf/KAzPj5eUc/bb7/tPPjgg048Hne6urqcz372s87KysplvpuNw2/+5m86Q0NDTnNzs9Pd3e285z3vUeTrOOEY1gKdgMOxtMOHP/xhp7+/32lubna2bNnifPjDH3ZOnjypvr9c4xieBxwiRIgQIUJsADaVDzhEiBAhQoS4WhAScIgQIUKECLEBCAk4RIgQIUKE2ACEBBwiRIgQIUJsAEICDhEiRIgQITYAIQGHCBEiRIgQG4CQgEOECBEiRIgNQEjAIUKECBEixAYgJOAQIUKECBFiAxAScIgQIUKECLEBCAk4RIgQIUKE2AD8Pz66mQm41jf1AAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAHVCAYAAAApYyiLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs/VmMrNt5Fo4/VV1dVV1z9dx7PHPsE9sx8RQLiylWjIiQInJBUAQBRUSK7EjBjEYQICAs5QYUYcgNSm5+kRAXCSIgi8QRiQLOZBLH8XDsc473OXvquWseu6r+F/1/1n7q3Wt931fde5/jvU+/Uqu7q75vzet93mm9KzWbzWa4pEu6pEu6pEu6pLeU0m93Ay7pki7pki7pkt6JdAnAl3RJl3RJl3RJbwNdAvAlXdIlXdIlXdLbQJcAfEmXdEmXdEmX9DbQJQBf0iVd0iVd0iW9DXQJwJd0SZd0SZd0SW8DXQLwJV3SJV3SJV3S20CXAHxJl3RJl3RJl/Q20CUAX9IlXdIlXdIlvQ10CcCXdEmXdEmXdElvA72tAPy5z30OzzzzDPL5PD7ykY/g93//99/O5lzSJV3SJV3SJb1l9LYB8H/5L/8Fn/70p/Ev/sW/wP/7f/8P3/M934NPfOIT2N/ff7uadEmXdEmXdEmX9JZR6u26jOEjH/kIPvShD+E//If/AACYTqe4fv06fuqnfgr/5J/8k8h3p9Mp7t27h3K5jFQq9VY095Iu6ZIu6ZIuyUuz2QztdhtXrlxBOp1cr808xjYFaTQa4Utf+hI+85nPuM/S6TQ+/vGP44tf/OJDzw+HQwyHQ/f/3bt38fLLL78lbb2kS7qkS7qkS0pCt2/fxrVr1xI//7YA8OHhISaTCba2tuY+39rawje+8Y2Hnv/sZz+Lf/Wv/tVDny8tLSGVSj2kBVOpj9OOkz4X9X7o3YuWrZRKpaCGCpb5KIwX2j5tc1TZcX2+SBvOW27ScbZzxr+n0+nCZSVtU6j9HOfQc6HPo9bdedoT2j9xFLXGfW0MtTtuvSV9zreW49oaekfrSrLPgTMlYtGx43v2c185vrbPZrPYOrUvvjGMmicf3/H1IWo9npd3JV0Xi1LcvuNni+yx2WyG09NTlMvlhdrytgDwovSZz3wGn/70p93/rVYL169fRzqdDm7oJPSowBF4eJHZz31MP8RYk2ySuM8XIZahCzPJBlRaZMH6BArLIEKMctFNH2Ja9vM4s5FlyLbsKOYUKtu2wzJwnRfSdDqdKy9qLKP6Euqb7/s4SgqqofGKqy8pkEe9E8cnfPvXt+ZCAlzSdvnei9rbUcJbkrp8ezuuHl2Hi8yTr97zfm+fe5RKB8uLasN51pzvvTh6WwB4fX0dS0tL2Nvbm/t8b28P29vbDz2fy+WQy+WC5Z1HIzivFqGki2IRgIzaVOep/6IU0hZCz0Uxrqj3Q+VYBmfpvEzAV18SDSrqmfNoj753fG2KAtLzAGtSitPQ7XM+weBRtcfXz0dpTbLlJumLna+ouUjSVrt/klg4krbP1x5fH6OErri+JaFFNdy49Z6Ep5wHA5LSo157pLclCjqbzeIDH/gAvvCFL7jPptMpvvCFL+CjH/3o29GkS7qkt4wWMVM+DhPcJV3SJX1n0Ntmgv70pz+NH/uxH8MHP/hBfPjDH8a///f/Ht1uF3/n7/ydhcrxmQUfl8QcoiT1LNKm7ySmm1RLvUh55zXjRWklSdsdksCjTOS+z33tj3I12LKs6d/3fIh82outO6mWFFVvlMaShEJa1nksK7bNIdMwhRhrirUU1Z6kFqKoeYh612dZSDK+cWP0qC0USbTkqPeixvE87Y57J+leeqvxQultA+C//tf/Og4ODvAzP/Mz2N3dxfvf/358/vOffygwK47Ow6x970UxrlB5j9InElXueZjdRWiRjWYZnf3MkgJNElPXIqa80DNRZuNQ+VGBMSHXgwXRKPMav1/E3OorO6m5MCRQhNocao9PGFlEow9RlEnU92zcZ9qvpGZ+W1bSfi0CfnFtD/EfnxChnyUdu0VAPa4sX3vPUyfLiVvTi5S3yPPnEUQeFT9+284BX4RarRaq1SqWl5cjpZwkEmno+0cNwEnpSQbgqM/i3knSlvPSokzFPhMC4NBzSbXPOMFAI7NtINdFrRDnBeAk71y0TY+K4tbxo6rzUY+Dr6xHDcBxfDCurPMKYSF6nPP/OMr1zc94PEaz2USlUklc1hMRBb0oRZl9kpobkjDpx2G64OSe19yzSD2Psuw4YSdkbuJzUZoI33lcAo+ty9dGPpPEHBkSouzz51mDIa3b15ck4+/TaOPakKTdccJXVJuSUFLN6zztX5TiBK2k78Rp/XEWBC03STnnGcOkbbVlJGnno+Z5j0tpScIDktJTA8BJGOlFFrjveVt+UopaxFYzWZSSLuIozeZRkU9qT0qLbEbWE9rUIQYSkvaTMDpf20Lv+8yriwop59HiLfkAOqRF8X/fs1HrJGo8krY5iQB9Xoqb28ct7C4CPKG2qAUibh3FWTYWecfWk/S7uP6H6non0FMBwFEMYRFG9ajAJ9Qea7rjZ6z7UQDgogs5CUjHvZ907C3DOI/2clEtIAQKFxGkbDk+AEmq9SetJ/R/FC2qYSQVEEPtexxWiyghJ+r/0Ofn0V4tJRUQ49rmey4OhH1tiAK8JGDoq8tHScH9vEJ4UnrU1jwfxfE5dRctQk88AD+uTZ50MhcxcZ3H5PgoaBGzz6NcxFFMIo6B2rZYs2rchogChfOSr84obTIKoKI0T0vaH9+4JNFGfWUm+U7rDZUf2i9x7yzaLt9zF9WokuzfJPNjn7MaqtVafUAY1ZY4EIyjuD0Qt1Z9dJ42nceCZN9f9B3f+4vixuPi3U88AC+iJSWVPM/LpB+VJBa3OB63xPcoFrl9PopZRwEtv7dMKmRJOK9GHyrP1y/f/yHwDbXBZ/GIEvxCjMu3dhdhBj7mHxrrKAEtSkBKukeTrjNt3+PWrkJl++bP107fuo8SEPme7/Oo50PgHSU0huaA75zHkmRpEV58HqFp0TmPa+9bTU88AMdRko2SdEE/TpNa3GdJvgvRoqAUZ1IKPZ+03XGbO0o7jKorqRYWVa+vrfpdnLDmezfp+0nGJAlIh6wJClhRFoJQ/6M0Bx8Qxs1Hkltj4iwlj0NQTVpn1Fz4hBh+HremF+UJ56XQ+CzCfxbVKJMIqVFtCFl/Hpfw9bjpqQfgS7qk7zSp962gR82YkgphvmefVOZ4SZf0uOmpBOAkUnKUBLbo5yQ64pOaus9Lb6WpzfddlLnSti9k5gqVZ/+PM/GF3vN97gOGKK1D31nUrREaD58lIIk2HzIB+z4LrUOfphJlSpzNZg+VFWWGXpQmk0mi56wpPKlpNW4/6rNRJvRFBIoos27S5239cZR0L9nPkpi6o0zlIUoyPo+irEWesbSIu+NxCu5PDQC/3VpOkon6TtDAosxdi5o2Q5+FyILIWzUeF93ESX1OFij0HR8YRpW5iDk9JFgkNW+H3gnVEeoLP6dp2ZbFW3YIjBc1DUeZw0OCRtI6QuAT+j6qHjs+SUAtrr3n3UNJgCepmTiunLg6rZATNZdJaJFnFzGBP04z91MDwJf0ZNFFwTdOWyc9qk0Tpa1G1b8Indd0a31hUWAf97lqmel02l35aT9T4v/2HV/ZBODZbIbJZILpdOr+18/4O+mYxAmHi8zJRQTEt8sn+SiF2UWA7Emnt7uvTx0AP24mmaS8kIk2ymS66HOhNiTV5OLeO8/CjHtH+5i0/JAmEqWBxGmfUZ+H2uCjRQDSvpdEw7Xg5wNFAFhaWporQ88kKrBpHT7zO8tfWlpCOp1GJpPB8vIylpaWsLS0hEwmg0wmg6Wlpbl3MpnMQ+3TZ9gGrXs2O7vAfDKZ4PT0FKenp5hOpxiNRhiPxxiNRu7z09NT1y8fKIfG2WeRsFYBn+nZ944PlONAP2qOffX43gl9l0S4iFr7oTqi3rPtDpHuzUXbFvddqD7f34u+G2fReFTtVXpqAPhRaFSkJOY2fhfaZBYo4ph10kW0iOnLtifUrzizWlKNYBHBIU5TiPs+aXm+SNsoZho3V1FCjG2DBRytP9ReXTfZbNYB3/LyMpaXl7GysuJAkWBnwWkymTxU53g8ds/wJ6Tlap35fN79zXu5s9mse0ff598K4gCcRjsej+fqAc78wKPRCKPRCJPJBIPBAOPxGMPhEMPhEIPBAO12G6PRyH1G7dg3fqH5snPCv1V7D5WVTqfntHQL2lpelJCp+zBqHSXpVxSF9mvc/o4jn2Abt459n4XWf+jvUHlKi4BgHL9btOyLaNFPDQDHURLt7Dyas26oqAXkK+NRaWfKGHxlh9po2xnSTKOk6FB9oXaS4jLHXGQDhtrCMn03HekYkeHy8zjmrKSMWusgKBHcVlZWkM1m537K5bID2kwmg1wuh6WlJSwvLyObzWJlZQW5XM6rWU6nU6ct8rvJZOIAleBGsJtOp95xWF5enjMhF4tFB7q5XA7pdBrlchmlUsm9T7BlO2azmatjOp2676nVctwymcwcgLMPqrWfnp6i2WxiMBig3++j1+uh0+lgb28P3W4X3W4Xg8EA3W53DphD68AKXXbvKNjaebZrQufArpO4/ajkW1u+daXt1veihNQkoBvFg3Qtq6XF92xUf5Ss1h/VJjuOFBxD7YiqM8nzPv7+OOkdA8CWfAvGt5GSlnVeCSgkjcVpq0n+Dy2muA0bBaQhitImoyRlPp90/KyGoZ+FBBf9LLSBbbmWmYba5zP3WoZOACWIraysYHV1FSsrK8jn8w50K5WK03oVsLPZrANlapIA3PcAcHp6ivF47L6zANzr9bC0tIRisejaTTBU5pbNZpHJZFw/1tfXkUqlHLhPJhMsLy+jVCohn8/PmZoJmNPpFM1m07WRZut0Oo3JZOLGJJfLOe2adcxmMycEsF+tVgvD4dAJD91uF+vr62g2m2g2m2i327h//74TMKxv2bc27d927vk/hYMQyNj1HSK7VuME77i9quvTtst+HhLSfe2zfYtqi5aXZA8n7buvXXHa8UV4cNTcXcQSkYSeaAA+j9nhPGXGSYs+sgs6iQZ3nu9Cz0Vpu1FMKKq9Fx2HJBpBlHAQaqNPq4lilmRGylytBh2llSjQ+rQQBd5cLoe1tTUUCgUUCgWsrKygUChgc3PT/U9NkKZljhPBlybf4XCIo6Mj9Ho9ZDIZVCoV1Go1pFIp9Pv9Oa2TgLy0tITZbIbd3V0sLS1hdXUV9Xodk8kEJycnTsNeWlrCcDjEdDp1QA8AW1tbGI/HODo6wsnJCU5PT5FKpZDL5Vz7J5MJhsPh3Ph2u10AcIBPAFfTNOvOZDJOMFpZWUG5XEahUHDt6HQ6GAwGGA6HTshYW1tDq9VCq9VCs9nEysoKGo0G2u02er2eGw87T3Y+7ZzqeuI8quDgm3tdW9aqEAIL31qz4Ohrk61PwScEsHbd++rx/Z2EQlp4El5zUX7CMpIoK1GCuz4Tej+KR11ES36iATgJJR3E0DtJFknUxCktIqUtWl4SwA1pn1EUArqk5fgEEdvWkODgGwPfhva9E7WRbDui6onSDOzzS0tLyOfzyOfzKBQKKBaLKBQK2NjYcGC1srKCYrGIarXqTLsEYGqYs9kMS0tLWFtbQzqdxng8RrvdxvHxMV5//XV0u12srKxgZ2cH5XIZV69exenpqdMSDw4OHFjx89dffx2VSsWBGwAMBgMHGqVSCVtbWwCAUqmE0WiEdrvt/LbpdBr9fh8nJyc4Pj7G3t4etre3sbq6ilqt5gAqlUphPB5jMBggn88jm83Omb9XVlYwHo/R6/VcPzmO1OipYXPM1tfXUalUMJvNHJBXKhV0Oh33U61WcXJygkajgUaj4dpIn7IPNAn6ClC++bXvhtaWFeh0bfnOU/vWpr6vdZxX8A/1yScYxwm/FED0PdtPXzuSaLH2syS8JqqMqPZE1Rv6LCleLEpPPQBf0ltLcaazpGX4BAufdB8lzYeYShKGpppMVOQtI4NpXl5bW0OpVHJAt7Kygu3tbacBF4tFFItF55flD32yGhVMc3O73cb+/j7u37+P119/HaPRCOVyGel0GoVCAfV6HdPpFL1ez5lj+/2+0zj7/T729vacaTmTOdv2+XzeBUhlMhlcu3YNlUoFGxsbGA6HuHPnDr761a8CgDMt0996cnKCw8ND1Ot17OzsIJPJOMAdjUbodDoOlMfjMbrdLsbjMUqlEiaTCdrtNobDodP4aQHo9XoYDAaoVquo1+uo1+tIpVJuPHO5HPL5PIrFoiu31+uhXq+j1Wqh0Wjg5OQER0dHKBQKaLfb6HQ66Pf7Dox1HYRiETjfGuwVtW58mm0UXWR/+MoKCeIXMc1e0uOnJxqAk0iFi2hv5zW/+N5NIlVFtcMnpUa946srSgqM0qp9ABgCvpC07tv42j8rTYfayPI0WMdXp+8zbb+v31bzUdIybcRtKnUWoVwoFHDz5k1Uq1WUy2VUKhVsbm463y7NqWtra04jHY1GGAwGzmc5HA7R7XYxGo1QLBYdQHW7XXz961/HbDZDv99Hq9VCr9fD3t4ehsMhWq2WC0b6oz/6I3S7XWeqBR6YVzOZDMbjMTqdDrLZrBMOaJputVpot9uYTqe4evUqlpeXHfAPh0O88sor6PV6rqxCoYBms+na8Oabb+JP/uRPHDBms1kAcKZzzh2DyprNJlKpFEajEY6Pj+eEj3w+j3a7jVarhevXrzv/8W/91m8hnU478325XMYLL7yAra0trK+vO/M8293v99HpdPDtb38bx8fHOD4+xv7+Pvb39/HNb34TnU4Hw+HQCTkk9bvrnOszVqtU0PXFA/B7CnQazMVnfGbrkKUntE5J1Oq1TlpVkpiDfftag+TsO6EykwggPuuY7VOoz3F1nFcAiuKLSctehJ5oAH5UFDeRi2pYSczB9u84CTvU3vP4HxZpm2U2/M63gaPMa7b8pCYen2ZhmU6oD/q8koK/bywt6LJvDIYisK6uruLZZ591wFkqlbC9ve0AmCB39+5dNBoNdDod9Ho9F73LfhGUW60W6vW6832qFkygohabSqUcCKbT6bkAJGXy9AsXi0X0ej3cvn0bAFAulzEajVxU8cnJCQaDAUqlEpaWlnB6euo0716vh1TqzO9LTTiVSrngKTJ41q8CE9uytLTkjjERyLPZrNOo+/3+nKm41+u5ujudDtLpNLrdLvL5PJrNJnq9HlZXV7G+vo5areZ86tSWK5UK0uk01tbWcHJygo2NDWxvbyOfz+Pw8BCNRgOtVgsnJydza0rBVteSBdek61af82mnvjUcEiT1t08o9JXla0/c/vF9b9u8iIIRtdejhPBFeOIi9CgANGTqX5QuAfiSzkWhDRjSOJNuoiRAn0QCTtL2KIah3zFKuVqtolQqoVarYXV1FWtra9jZ2XGmZWqXBB2Cx5tvvol+v+/MoL1eb+64EE3OKysrThukada2kQDGdweDwVwZfF8Z9Wx2Flnc6XTwxhtvoNVqoVKpOE2Pbbp//77TdGiaPjo6wmg0cuMAYC6YiqZntpkRzxr5bMc6lTpL3kHTObXWyWSCZrPpyqI5ejKZYGlpyQkitCQcHx/j8PAQq6urmE6nqFQqLqgtm81iY2MDpVLJmafX19extLSEo6MjHB8f4+joCK+//jr6/b7TiDlmUdpilFXFPudbd1H0KLWr814S/yjbcEnR9I4B4ChtbNF3Q/SotNeQmTWqvkU2zSLvRZm4Q/9badp+ZstOokWENNW4cfF9l6SsVCrlAoLoc7x69arTutbW1lCtVlGpVFzQVS6XQ7/fd+bgZrOJVquFg4MDpFIpF5lMgCOgAGe+5Gq16s7dplIpDAYDpz3ShFsqlVxwFbVkLZMaKH80+KfdbqPdbuPw8NAFixHMabZlmzgWqvES2On3nk6nTqulkMKoZhKDrKjpU8tcXl52gosCO03Mp6enc2eW1Q/PjFnT6RStVgvHx8eYTqcuIIxjyKA4RmyXSiUAwMbGBhqNBo6OjjCbzXB0dIRWq+X81BxDXYPn2Qchi5B10URpk1EgHtIOQ9Yda81KUq++k1QrTiqgxFGUJTFU90UoyqJp63hUQkpq9gSKO61WC9Vq1ZnAklDUQk4KSKEJiqovCeCGKEldUW3y9cvXBguKvojNuHp85S9invN9zu+SmLZsH+IEAl/7VKPb3Nx0x3yo8b7wwgvu/C79m4PBwJmPG40G7t69+9BZVAb/MOCKGilN2Uywsby87ACcfl8CLeeE4N7r9RwQEyTjGHoolaPVlrUcTZbBH55dppBC07T6c236Sn2fZ39LpZLzFdO/W6vV5jT86XTqjhbxh+eF0+m0iyKnz52gvrKy4vpB3zcj0Jl9q9/vY3d31wVuMXjr9ddfR6fTcfPIunSNxu0n7hkVpvmO7+iTnavQHrHrObSW7dza8rUvnHv7ThT/eRSmYVtGSHjxmfJ95UQJJEmsEaF6klouxuMxms0mKpVK7POkd4wGfEnxdNENdd7346T8R7HZo8onqFCTLZfLuHnzJtbW1ty52Uqlgq2tLeRyOQBn2tpgMMDBwYELHCJQUBNlXuNerwcAc0k51tfXUSwWkc/nndBzfHzsgqsY0ayR0gzOYkYpjo0CZxQjts/5rBE+qwO1X01ZqeWQ+aiAoeXyXSbYoGWh1+s5jZmWhm63i0KhMKdRVyoVFAoFDIdDd8aX2jqFEAaNUYChWZz9ZJDY+vq607in0ynK5bID6Hq9jrW1NWembrfbLtPWcDh0Y+IzSevfcWtVy1hEqPfRRd9/1HvrkhajdwwAx0lz9v8oyfG89UUt9vNuopDJKOqZRdtgTeKL+LZ8dUcxMAKKr54oiT9KYrVmZtVEyPx51rRaraJWq+GFF15wZuZyueyCqjRwqd1uY29vz/kQaQomODOwSAGAx5Doj+QZ2W63i3v37rlo58FggE6n4zRLNTezr5oLWsE4irnr+If+Vg3Yd7mCzYustxeplm2zUdFqQM253+87DZnzQACmQMRzwJoLezgcIpvNulzRPHfMfNH9ft+9z/Hp9/tYXl7GbDZzGrxq6Pl8HpVKBWtray5Q6/j42J0t3t/fnzP1+/aQ7xaoKCtSEuCLWvM+U3aUdmgpqi1x/GhRjfM8FOqXtWjF8TV9h89Fadi+v6PoIn19xwDwIvSoJUK7SS7yftKN4tNufO/bMqI2j6+cuAWr79jjFsrQo8oLgYOvHzbox5pUtS30Q5ZKJTzzzDOo1+suuOqZZ55BsVh0oHF6eorDw0O02+25jEua+nFpaQmdTsdFOc9mZ6bmK1euuKQcPBs8GAycj5hm5b29PfR6PQfm/X5/zmScSqXmcjXrMRMdA9/FARaYdVxDGhzH0z5DIEqlUs68rGWGLonQvhA0CcYE4F6vN3ekaXl5Gc1m0yXmoCC0tbXlkoN0Oh3cvXvXgS8tGvV6fS6Np5691rWYzWbnwLpUKuHq1avOT7y/vw8Abs7pf7br2I6rCpN2fEMAEErYYcuwwqRvj9h3LEUBNwWrEO9IyidCFMcPk4B43DM+AcPuizgLQpLvL0JPBQC/nWaUqEWv3z8KU1OS+pNIikm0xVCZ9n/7fJxEarVpW1eov0k3gd3YvroIhBrR/OKLL6Jer7tI50wmM3ds6PT01Jk/eeaUZTNgiDf3zGYzFAoF50NeW1tzbaFJ+t69ey5JBMttNpsO3DiOGtBEsNLz0MB8knx7fIp/+7Ql34UTVovzgT3N3zxmRQ1YfdUUCiww6zypdqaBZf1+3wV35XI5Fx3N413ZbBa1Wg3lchnlctn56ZmWkud8G42GA2CC8Hg8dpaOXC6HwWCA09NTd0FGLpfD6uqqs1RUKhWsrq7ORU/TZ6xuAI6974ILnYPQOrVjYr9TigIvX9R5iKL2ehTwx30Woiht3LYnKS1aVhS/XKR8+/15eftTH4RlJz3OpHMeWnRRXdS0EZLsHrUQoozbkpXUFVh9AGzL8AV9+EjLDeVuZlv5W5kitTEmziiXy3juueewtraGtbU11Ot11Go11Ot1ZzpmdiVmWjo6OnJMmsBCU3Or1ZrTBq9du+ZAPJU6S8t4cHDgTNLtdhsnJycuXSS1XZsQgqZR1RxVq9S++kBXx89qR9RKddwIkFarYlv0MgVN4cixUKGB2hNN1zoXoaMxnFuNmtbob+bVpgUhm83OCTrPPfccSqUSlpeXMZ1O0e128cYbb6Db7box1vXA9xiURYGiUCjg6tWrKJfLAOCOPR0eHrrI9uPjY7zyyis4OTlBq9VyeafpbgiNe1JgVYEoDrTtd6EENyw3VG8SgfeiSkRU2baeUH1J39Vnffzf991FiELkZRCWoSTge1HgWmQCH6W8EwVw+tmidfq0ZbtQbd1xEuUiQofV3nx9se2xgEJaXl52mgyDbF566SWsr69jfX3dZYXiZQPNZhP9fn/O9My66dPVn6WlJaysrLjyr1696hJjsLzDw0MH5rxAQP27Vjtk39Snys8J/CpoRGlaPiCImgsLAjwuRUAlqHLM7T2//NxngVDtHpjX1jRK2vqbebEDTdQ8b83vmESEQtXq6iq2t7dRLBbRbDadH7ff77txpQ+fkdg07fPWKOabZpT2aDRygWLMS31wcOB8xYyCt1YHG7jmG2ff+Pv+DwFTEnBfBHhCikkI+H0WsqRAmWQthpSLpHzbN+6hcqLac15+GkVPPQCTosyoj7u+pAv6IuCVhMEuKlGG+uArw9enRUF30fZH1cWbhHZ2dlwkM5nzc889586f9no9tFot3L592yV9YHnUiKlB2csJaK5kFqx8Po+DgwMHtDxORFBnRK1mtrL9Ztmq9WYyGdd3NX1bbZW/FcB1fuJAwPr8tG0a3Rx3jEbnyidM2XdV2KAmyn6r1UODoPQqxslk4jTUw8NDJwxtbW05d0Iul0On00Gj0ZirkxdYqMYNwOWXrtVqbn417zf9+nQzHB0dufL0WFgSQNQjTta6kERrjQMQO/fntdiFgDD0vK9sn4AY9V5SYTHqs7i2ngfIHxW9YwD4khanxy2kkBYxK/ne0b95xIUmxueffx6rq6suSQMTZ/BqPwZUtVqtufoIvIyu5a1CemQpn8+jWq0im826pBB7e3suWIfMnTmaaabUoCTg4YxFyvAYnJROp+eSUsSNlQ/0+H2U5hPFEDXPcFJtIKqtvjnUs8QEMN/FGEywoe1lhizm155MJi4zFi0hvDZRwZY+fFo1mOuaboN6vY6NjQ1XXzqdRqVSccDO88ej0cgJXvQt+/rgIx+Y+r6345aUFnnnUZllLyme3hEA/FYByaImipBWnvR9n+aZRGJM0q5FzJb6nq0vJJFGuQOstB7SpnzmvnK57M50rq+v4/nnn0elUnGJGBhV22g0cHh46AKsqGXSrMpAHvXP0gfJRA/ZbBZLS0uOUbdaLezv7zstl0kymDxC/bwhPyy/02QWjHVQAPaNtbUkaJkh4LTjHWfBUE0deODXDWlZdm7tGrDl6TzT3E4fNJ9hhDi1VroK9F3+z2CqXC7nfL+z2cz5lMvlsrvPmOd+GcnOSO1+v+8CtKgB8/w2wX1lZcWlx6RvmP5n7WNo/K12aJ+3e2AR3uHbg0m07NC8xX0XpVUuqn2fx7xt3417/u0UNp7oICzevPKdQnbznLcMOyXW3OQzCYVMTz6Kal/UprRMw/ddXBvOs9x8zJx9YCamYrGI1dVVfNd3fRdqtRqq1aqLdtZzuQyEYj7jVCrlbgtihC9NnDyHSm23UqkglUq5cnq9Hg4ODty5XWq8BHECMFNK6rjTpOvTEClMMFUk0z4y61YU6Rj5/Mq+ObCg6TOP8nuCIb+njzgOrK2G5wP6kClRfcM0SwNw53cpGGk+55WVFVy9etUd/+J7Ksz0+33nL15fX3f3IL/66qs4ODhw+akBuAseGHGdTqfd/DICnsfUeMnDyckJ7ty589BFE3b/hISUqL3oC4IMjWsSCgl0Wk6SS0x8vCVKwPY95xNSfH/H9cFXf1wZ56XZ7DII65KeAorbwLoRmVqQPr/19XVsb2+jVCq5XMCtVsuBIwGSWgkZKM2NLDeTybggHkbbkuEOh0OnIXU6HRwdHTnGr2kh7d9JtY3QmCS1QpCSMqNFyvMJgb6yL8rgQgyYgg0/YwCYHsOi4DMajVzSDmqwy8vL7nkKDiyLAlKlUsH169exvLyM4+NjZwlpNptOABqPx1hdXXVrRc3StFpQWOh2u+5iCVpFkpDdB0mF+kvz8ZNFTzwAfyctuBBTimNc+t0immzIpBT1TtL3VFL3Sdu2vXGSPf9PwkjitPpUKuWyV9G/y6xVPJ42nU7R7/fdESA9p6r/0zTMwJ9sNusuXmCOY6Y97HQ6c4k2GGylWaCYP5jgq/22fYqaa6stRQFwyDLhm1c731HaJ/+2aShteba9vjpt2VHWFFsG/9eocPXf2lzY/LzRaGAwGCCfz7uUk+12+6Fzwc1m04F5Op3GxsYGstkscrmcMyczNSV9xTRh0w1B9wctBPxpt9tu/Gg1sUfwfAKnz2QdxzsARPqao/ikXQc+ISiKkgiIvr4mJd+6sus7ziKobT1P3Y8DZ55oAH4rgNcniQLJFmSSz/S7pACqZM0zUfWFzMq+/lnTYxy4hjaIfS7qnKKvHGXYs9nMRTeXSiXcuHEDGxsbqNfrKJfL7rzoZDJxpsDDw0PHoKlBUQPWyxdWVlaQTp9d+l6v11Gv152vkeZrMmH6CpmQg0IKzc16WYCPifqAyTde9m+fsOObf98F7Mr0fSZBFbR886j/20hd/c6ntWm74uZZ7xBmGdZXzrFQ/zM1U/rPqe3OZg8iuAmIPE5UKBRQrVYxm83Qbrfd1Y6bm5vu7uBareYSpDDJx3g8njsKRWsLzyETfHkfsQLycDh8yI9vz3f79o8PXHwCkaW49eabD0s673HPRH13XvCNI8snotoQ9Yzv+UUtT4vSEw3AbwVFAdyjoPNM7nkkOF1IcUAd+i6Jdp50cdv22Lb5NCUm02B2IiZMWFlZcWkGaRpm5DFBUo/9EKipveiRFmpW+/v7LiEHLwHY29tzt+Ro0I8GXPHzkJWAv0PAHAW6PotCaHzt3MTNS0gTtslP7Dshi4Zvjn2g7RPsbF2+tI88n00LBkGMQWuZTMb54zWIi2e0O50OZrMZut2uC9IiaK+vr2NnZwe5XA7r6+uo1WooFAq4f/8+7t+/71JUquZNbZiXdVCQ6HQ6c7dA8e5l9Qn7xt6uDzu3vv2hYxVFSZSDkNUiylqRhJIK3yFtNiT4RZV3XhB9KxS8Jx6AQwwg7jslH+PzaXT277gy4yi06KO0Ybswk/bRV0fS56MWcBST97UtyeaxTGl5eRlbW1uoVqtztxOVy2XHhBkIdXh4OBc8Qw2Vmi6PDmkgEc/40mx9cnKCdrvtfMYMstEAKJqZmdzBp3GGxswHLr5nCBjnsbbEWRr0Xdv2kGbrA4WoOefa0SjpUNtDgBsCcf1sOp2i0Wg46wgFIT1LzGsLJ5OJu2lqMBjg3r17c1aQlZUV3L9/H9euXcPNmzfdOfL3vve9+K7v+i4cHR3hzTffxFe+8hUHxrwXent724EwU50ypSkj7xmX0G63XQYtvcNZ+619tnMRohCvsOMdJzjHCdtRa8aWk4TnLMrH4toaV995yyQtqlGH6IkHYCA8eeed0KRSVVJKurjihIlFKWTmCz2zyHfarhBzjWK4luH4tCBqM6VSCdvb2y5XM4OjqIHwuAh9shqVyyhpvS+WR0hms5kLiqFWyxuHeAyF/6v5lOdNecG8T7vTMQgJVDYy2o6DBV8LhvqcjpuOs0970TaFNFA+5zM3W9BWoLQMPrRfbJnW/KrP+daR7TPfZ2AVAGcZYT9ons7n8wDOjpUdHx+7ILx2u41cLofRaDR3RvyZZ55xlparV6+iVCrh+PjYxRdQyx0MBm7N8oRGsVicO0p2fHw8l/ULgLt0QwUuu2YW1frse4vwjyRzFgdAoeeSrgf7TBTfjeIz56U4nh0SZBalJx6AoxhcUloUTM9TdpwGaRlllEb+KEwjPqYf2mBxlET6tfVGlTGbzZyfjsn219bWHBPUTFHUftXsrOBLrYY5hHmeE8BDd8hq4g3e/6o+SQZv0ewZAiHVFlOp1Fx2LUsWYOwcJNF+fVph3DzaOffV5eubL8jHB7xJ+mAFCruPbfvtHvHtHfri+X0ul3NZyhTcaKKm8Ebf7HA4dFm1Op0OTk5OcHR0hHw+j83NTZc3/ObNm8hms84UzXPEs9nMnTnnZQ+acKVWqz00HhTwfP0PjUMIIJKCdpzSEgLVkLCWRMnwCZNxz0fxz4uAX5wilUR5iXo/KT3xAHxJTx8xoEVvutE7ebkheLMQA67IRGl6zOVyqNfrLpUgj6LwDt5er+fyNVMToklwOp26HMGpVMoxSYKvTYbBNoW0Vks+occ3DkmtEOehkOYe17akWo3vnUUYdqg+/dwCjgpGFNI0mxiFNs4jBTrmf+b5YApjTFVaqVTwzDPP4Pr169ja2sL29rZrAwOz+v2+awujonklYrfbRTqddseXNECPVxz6guceBT0ODfGtoqj98TTQUwHAi0pTPnrUCz/poomSwHzS7CJSpGVWURKvfd7HlOOkYzuGCkZRZiq+p0k1bty44W6rYbo/4IHv9fT0FPfu3XOaK4F3Y2MD6+vr2NjYwNraGq5fv46lpSXn5z08PMRXv/pV7O7uurzNGqyjiR5YL1MUqhkamM9YxXfUZGtNzKrl+Xy7OucUIFKplDOThzQCn/YZZRnyacqa/tGuMQWMyWTijvHw6I5tf5TQ4QNi4IHP2rdOQn7wKPCn1YJzx7GsVquo1+tO+Do9PXVpKgG45Crqitjb28Pdu3exubmJmzdv4j3veQ9+4Ad+AGtra9je3sbR0RGazSZ2d3ddAg4Kf+9973tx/fp1jEYj7O/v4/T01F2dyOsTZ7OZy5zFSG47Xr5YgZDlQsfb/q3vxPEo3zNJNEaOv6+9SS1sUVahkFbsW7u+cpNYTN8q0H8qADgJ2Ul71FLmRSkEuEko1KdFNQwF0bhxSmJODT3nax8DYZhYo1wuo1AouIhWPjuZTDAajdwdutPp1D1TqVTwvve9Dzs7O+6Wm8lkgqOjIxweHuL+/fvY3d3Ft771LXeNHAGzWCw6DXs2m80l6yD4MlhG284+80cvLdDfcZobMM+0rI9TBQOb7F+T+duxj2JkWndIq7VZqAC4m6J8N1D51kCI6fkAxAfQUea/KJNroVBArVbD5uYmisWim2vGA2SzWeeGoHC1tLTkLtHQbGXMntbr9dBsNnHjxg1cv34dhULBWUt4yxI1WpqveWHH5uYmDg8P3bhRsKjX6679TI26SMIOHbfQd1H8z2da1nG8KBiFLCyWLB9apKwka933flTZlhf6nr0ojrxjAPiSHj+ddzHyMnSCb6VSQaFQcJGrNMVS42IqSOCBllqtVrG9vY0XXngBxWLRPXf37l3s7+9jd3cXe3t7ODw8dNcDzmYzF6DFq+dSqZTzDdKkqZmstJ/WlAhEMw9LIW2T1gAAc8yax6YIGArCVrtIyvSiKJVKOasAtV4C8mQycYAMYE7wYLu1PwASg4qvvT5QiNKAU6mUS6pSrVbnri+kP5gBVzzrPRwOHUBzrXHuaSIejUbodrv4gz/4A/R6Pdy4cQOZTAbFYhFra2vuOBMv5Dg8PJxziaytrTmrAftQrVbnkozorVyhsTkPKD7Nptwnld5xAJzEXBNFUWYfa1I9T9t8DPw8mq1qRtq2uPrt3yEzji3XZ9byaUYWJMjwFHwrlYpLfK8XwavmOxqN3MUI9Xod29vbLn0kk2YcHx/jG9/4Bvb3952ZsNfrucxXy8vL7qKGQqHg6rGXJmgiB/bLroMQENo58Zlh7RhR49Qr+gh8NKVq9i1NNBI111EmOfuMar28gIACgPbD+sgtMGp/1cwcsqD4yLevfOtTx1UFAEY+U2vP5XIuOItabbfbRbvdRip1luKUJnkAc0F3TOTypS99yR1947WHTMSht1ednJw4IW19fR31et0FZnGtVSqVuUQxAB5yeYT6GdpXUWPqW3fnAeeQkBRVfxT/TSpAJrWqRfFJ5T+L7Jck3y1C7zgAJl0EJPV9H7ONAq1FTSuLtMl+tijohjZmyEzoezap8KBm11KpNAe+vKtXmYvmYOZFChsbG9jY2MD29jY2NzeRyWRw9+5dHB4e4ujoCEdHR/jmN7+JRqPhzILKgGmiJOMkcyXT1qMi1EqjNFz13elzFnh8TNL+AHjohh8KDgBc8hD1M6vZ2l55mMlkHtJQNaDNClLad/pSKQwx09Ty8rLTDlVY0Ho1WM32z669kGDjsxLYebDrbDKZuIs3Tk5OXER9tVp1Jmiam6md0uLC40S9Xg+pVGousp59e/31113Z73rXu3Djxg1cvXrVXQ5BLfvg4GCuv1tbW9jc3HQBX8Ph0JnHVZiyKSttH33++ijzrO+zODNqEqALzVNUmy5Sr60zSiGKolB7o8qJEhDOS0/0bUhk0ueh8wLweSiJ9GYX5qOcZLvg48q2izqkyfHvkCkwKhkEbxsqFou4du2a00Kp+eq74/EYx8fHLgVgvV7H6uoqrl275vy8PDLy2muv4fDwEMfHx2i1Wmg0Go6RUaNjggReI8ezxgS38XiMVqvl+sY80DyaZMdCAc9qeKHfCnTU9AkA+kPtSTVSzh81KLaNZ5k1YEpNm7aNdm5pFaCgodo/v6cWrBpcv9932nmxWHTR6zqeHFNNbjIejx9a6zZlZghkfBq2BRoeZeOa2drawvd+7/fOXSWp5nwKecyCxiCpRqPhAqj0MgjWQffHxz72MVy5csUdmctkMrh37567aWtlZQU7Ozsol8tYXl7GcDjE8fExvva1r6HT6ThAPzk5wZtvvumSweic2rVn5zDucx8A+56142nJCkVRVg1bjwUy/Z2k7kXpvGXbdsXxzMvbkALkA9vHCb4+yT60yBaVAi+yaXxttMdp+J1PwvXV4wOWuLZotHO5XHYBV8ypqxuajHE6naJYLGJ9fR1ra2uo1WrIZDLumAjvYb19+7bL2cz3qL2qP1OT5hN0yJTz+by7w5caH4FDwcmCrzIXgpRvjGez2UP1ZzIZ5/fm/xRG+KMpM1k3Lx3gWeZ+v+/OwbKt1OxVE9c26dGt5eVlAJgDb51HzTBGjQ2Auw5ybW3NZSvTYz80x+pFFoxCVnOvuk18KSjtGg1pYHQnUGiazc7M+K1Wa067LxQKri7OP6OmNXELz5jrcSFq/41GA+PxGF/5ylfQarVw7do1bG1tOUFxeXkZjUbD3ao0nU7ddZmZTAYHBwdOmeCY855ia1Hw7UG773yUlG9ElRMF6Ek+t+0ICYJRgHeePl9EmXncSto7AoDjFkPSQU46kaGFEweY5wXj0Hsh5qT/h8w3CoJJpOU4slqUgi+PGlHjo3Y1nU5dGshKpeJuP+KZYDLxw8NDF3F69+5ddLtdx7wUuBSA6dPk+eB8Pu/MqgBcoBYA9zlBzZp3fSZSMnhNM8hxJ8hrcNPy8rK7sYftJCAzsIcmYJ2b09NTFAoFB8C8gIImZgKPNWfbOaQGm8lk5nzKyvip8TF6mH7KQqGAnZ0dXL16FVtbW6hUKi7blAJIrVZzubp5i5QeI+PY6HrRIDT+r+PLfth0jvod11G73cbe3p4TNjTIjxdxMKp5ZWUFk8nEZV+jdspc4MyCxrZOJhN8/etfR6PRcM/duHEDN2/enLt1qdvtuvFgsOHOzo5bXxyvSqUyJwT1+/05ocNaDvjbHv3T75PsW2uhSUJx/MFqyL450rrtd0n530W1ZsvfrVD9OOgdAcCPikKmlDgKmYiinn+UEluU9h/acBaAk2wauxF8QTeaJ5fJNhhYpFqlpobM5XLY3Nx0z1K7uX//Pg4ODnB0dISTkxPn61UmrdojwaNSqThmS5CjNjKbzeZyPhPkCGQ6VirE2IApy3DYHraDpm/+sA16VZ4PgNU8Tw2U4EPLAs3CNBHPZjN3WQXnRf3ZFARSqQfHqDQDWCqVcho5BRQdi2vXruG5557DxsYGisXiQ5cf6JrgLUTFYtFp741GA91u9yGBhr8JkFGAYoGI57qVTk9PcXJy4oQuAiP7wzoYlc+/Z7MZdnZ2nNDGLFl6HIw3cBEseWtWtVp1JnC6C5ihjYKmWjmWl5dRKBRQLpfnkr5wTUbtRd//IZCK4i/WshD1nP7t0zjZ3jglwfK8UP2hes5DScYkSfkX0ZIvAfiSHqLHZXZhNGqxWHQAXCgU5rRKZaCz2YOUlAQsPtvv93Hnzh0cHBy4nL3UfFkXAYmgRvBfW1tzbSCgU/MaDocYDocuIQLBlWVyfHwWBBuFrIKImngt2PLHasVMZ2hN5mQ8BBmeWaaGura2hm63647W0GxKELamXQK7XmLAvhGMrf+X4JXL5XD9+nVsb2+jXC7PRUmz3xwfFTqYy5sm3uPjY6cNK/m0PZLVvHzMkpp9rVZzx454R2+r1ZoDfb1GUO8bnk6nTjNmAFoqlXIXdFBoYbIXprfs9XrY3t7G1atXXTY3Rk7rVZbUxmn2prtFb9mixSAp2bGx313Sdwa9owH4IkCjkqhPSgtpkKHF7zMbhdrpk2qjNF9ti09i9kmCVhr1mbtseyypb5SAsrm56bIREYQUUDRgSiNTCQC9Xg/7+/u4ffs2vvGNb7gjSQzo4VlePXdJxlYqlVxiBoIJL3G4d+/eHHNsNBqYzWbIZrMOGDOZzJx5nH23kcjWHMh+kMnyViY1jS8tLc2dfV5eXka9Xp9LwMHydIxSqbNEDsvLy85Pub297SKXGWnLSyoIDMy6xPbTpAzAtTWbzbr+2CNtHO/19XV893d/t8uvrUIL1xHbzb5wLeTzeWxvb2M4HKLb7eLo6AivvPIKWq3W3NlrapjsM/9X7YoClGrdTO5Sq9XcTUVHR0e4deuWO+er2j6Bl/Ot65Ka+8rKCmq1GqrVqnOBcCxpkh+NRmi1Wi4i/8aNG3jppZdw8+ZNrK+vo9ls4v79+zg5OcHW1hbe9a534cqVK+j3+2g0Gjg8PMTS0hIODw+doNrr9dw1hhQErHVB967VQHWs7D62mqxdZ1q2T2P1CUdRpmXbLt8zyq9sXUkp7tlHJYhECTtx9EQD8Hkm5XHUH/VdUhORNdWEQM5nztENFqorpCnYZ+Laaz+35freJ5jS9GijnckI2TdNVKCg1mw2cXBwgPv372Nvb28uhy7wwFRJH6uauHnOeHV1FYVCwZkDmRKQ5VHr0ExY1PholqRpl88pIFqhi+ZGgi8BVk3k6p/m33oOmmNhwd7+AA9MrxpYRrCngEMt8N69exgMBq6PqdTZGdjV1VVUq1XkcjmnSZPxn56eOsDR7GHWbOzTXK2VQ8eBWjGBWK/rs+X6yAIpzccUsu7evetcF1YgVU0/lUq5243083K5PAdMXNOVSgXpdNrdpqRR49PpFPv7+y66+uDgAO973/uQz+cxm81c8Ny1a9fcuqRpfHd3d+5Wr1qt5tqsdwn7xsEnPNvvo3gD10JSk+x5ACiKZy9iEo5SgkL/R1kGrDCinz8Oy8ETDcCX9J1PZK40PdPkqMnxeaG6LngNiALggneYw7nZbM5FpFKbJGMsl8uoVCqo1+suyxbPgTL4h/7HVquFk5MTZxbU4Be9mIG+agoOehzHlwRDAZAaJTV+9U9bX7X6UEk+rUZ/+J4GaykQcSwpVJRKJfT7fTSbTee7ZLrEq1evol6vI5fLudSKzD5GISWTyaBaraJarQaFQtt+BWAdR+3/zs4OVlZW0Gg00Gw2Xf0qgOq6scR61YxMKwfrjLJC6bEvXcNato41o6gZPa2XecxmM5f4hUlkSqUStra2nAm73W7j9ddfx2QycdYhAFhdXXUC5ng8Rq1Wm0uJ+rgubgCSaYaPq+53Gj3RAOzb+FEU0vweZXtsXXH1RH0fZ7b2PeszZfuYYUij8NVlpb84rVff0xzPvE6Q4KvApWXQV6wAxxuLDg8P5zJaAZgDHmY4oplwfX19znyYy+Wwv7+P4+NjHB8fzzF5zYKlGpCaQ5VJkxmnUqk5pstnLQCrRksAt2Zo1eJ8x5vULKraG/tu54zv8bIBarGFQsGBEgWPWq2Ga9eu4dq1a6hUKlheXkav13voZiCapuv1OjY2NubSZobWjz1TzHHk+FGrXFtbcwJTsVjEyckJdnd3nZbOsVPhTOvRcrnGCIqMBveZVlUQsL7ryWSCXq/n6mAUP/3LbBNjExhDoOeLaTF59dVX0e/3sba25sb+lVdecVrt9evXUa1WsbOz484An56eolqtzvmENTlIlIk2ZFXTfRv6O47itE7fM1Hk413naUfSOkLf2bJ9vPVR0VOXiOPtksySAFmS9/hu1KaKkuCT1hfVPh9Yn2dDMEczrxTkvayaoGFpaQnr6+uOyettO2Tag8EAr7/+urunlUdArJk1m826O1uZYnJjY8P1hz7Qr371qzg6OnIJLHiWVaOUCTKpVGouaxE1L2rI1uSqgF0qlZwQoGBLszuBhKZpnoPW1I8kBTmN8lazKMeLc6DHpaj56VWK7XYb+/v7eO2113BycoIPfOADePHFF+eEJBWQqLUNh0M33laYon9SjzLpkSy7RlSY4TMEmdPTU/T7fbz++utOUOr3+85FQQGI9Wl5AOYCnXRcrc9XAVstB9pudTWkUikXNZ/L5RxgMItWt9t1loJms+kCy/hesVh0wVlra2uu3ZVKBTdv3sR3f/d340Mf+hCGwyG+8pWv4Mtf/jK+9KUvod/v4/j4GHt7e9jf33f3D2ufLd/Q/0OmZ59iEqdARJmxo547L+l6CZmok9QTx1ttfSGyAgvjKC4TcVzSI6GL+jx4rpKajGq0LJ/gQ61MNREuaAZEHR0duUAiLnqCJYOsNECGdarfk2bng4MDl6iDoKDHfPRYDjcamTXbyh8LUMCDzUtmy7SEZPT0fVqN0ee/s8zGmqLt8zS7WpOv1TyBB5mvbFYw1Z6t+ZXjw+hx2w87Dmoq9mk2vnO+aqIuFAouaC6bzTrfsGqkNiCJggjBV49y6TEpjSq3goAyagowPBbEG7IIulo328x1Td85n7f+9OFwiJ2dHXeM6datW0ilUnjve9+L9fV1XL16Fffu3XPBhXyHQO9L0OHTgvV33L6OE/Avwhcehxb5JNNTB8BxUlBS03Co7CQmWi170QUXkhjjyrHS7qLlx70TR5Zp84aYYrHoGDvwgOFqUBKPytCUSkZDHyV9vtRAVXvRCGeanpnQIp1OOz9at9tFs9l0lzIwIT7wIEUlQVi1IQBzlhZl7nptnIIiGXa9XndJKVRb0yMuqilqgJAPyPSsMb+3a80HID4zumrRBDuNelaNg6TapJah0evW9G1B1+4/KxxwXFl3JpNxWc+4ZnjUR5OLUGjT+eH6YNwB3RPqe7dHrkgqvCgA08/LeaMlYzabuWxjtAww3SStDSq4MXvWYDCYSwBycnKC6XSKW7duuYQzentTqVRybTg8PJxLCGLXg64Tux5CZt4QH/P973vH92zo7yTlRH1ueaLytqh+RJFPq44bp4vQEw/AuriAxU0Hi1BoUm2dobLt577JDb3nK8My6qj3fQwvVF5oc/ra6TMHkVlQ+6PGRz8cj+LwMwaakJaWzhLh09zGNH4KGgzsYtICmp1rtZqLVh6Pxy7JA3P6Enxt8BZ9tGqGVNOkDYoiUbsj8+fxHGrjZJ4W2FOp1JxvkMBmtUklLd/6T0Nrgd+pOVnnSQFIg79CmiDbpjmR+Z1q13xX6+e60ufUTM72Eui5FqhtZ7NZd3yJmb/4rl2bNOlSMGNUOdej7bu2RceN86pH0OiDpWuCWv54PHYBhrz8IZVKOT+x5hPX3Nj5fB4bGxtYXV1FPp/HyckJvvzlL2N1ddVp+5PJxGnvrC+fz89FsOt86I+1YiwCHj6exc/PA0KsX60GvvWu6y7Ea22ffXXFtSOOHtUzIXqiAThuAh5F2ec11/ieSQr4URq1r42+ttgyFtHA49oaBfJklNQ4qFUSYJgZiBmFyMCsxnR0dISDgwOcnJy4u38VLPP5vLvntVKpOK2X18uROTYaDZfongxQ01SqtmJNk2qSVo1TNUc7LgRTamsa4atjQd+pmjVpluRxJh0PAHOanU/b0cCskCDlE/jYRgohfEZ9uD6N3LdHlHGqcGHBV/eugrb+r2NN8KTg0ev1XJCYdUtw3piZS5OtqG9f28D+8nPVrhXgFPB5C5QGR6mLYjabuQxhtVoN9+/fx507d+aOEY1GI9y/f98JFOvr61hZWcE3vvENp/0PBgOXSKTf7zvrEiOj1Rzv25+h+dH/dfx9z9ly4jRZ33taXpT2GlV+UsUprn0hRSwp339U9EQDcFLw801G3CSGJKqkC1IX2nnATL/TPkQ9H2K2vk2VpP8+gLFlK+kRID2DSzPaysoK1tfXkU6n0e/3HbOaTqdzV9sdHBzgm9/8pjtvCmAugxSPE21ubrrApel0ina7jcPDQ6dVn56eusAd+t7G47HTUOiX5hlf1VBtBipgPjJawYGkQT0KOHrBAs3PGtDFKxabzSbS6bS7jpEBPgxwslHEs9nsIRO4aoN812qv/JsgwXlSLV+1J77Hv236RuCBRkwAVO1RQU3BmO9aH6qO32w2m7NCUAvOZrMuKKnZbOLk5MSZaJlhjVYW1qVnuTmGOn8cG0Zk64UTVrOnsJLP5x0A8yIMHu1qNBqo1Wq4evUqnnnmGRwfH+P3f//3ce/ePWdGn0wmaLVa7hamQqGAra0tdDodvPrqq7h69SpefPFF/OiP/igODg7w2muv4bXXXsNkMsHzzz+PYrGIO3fuOC3Zty913+u8xJHlb1ZoCUW9JynPnhjw1RcCcd/z9p0oHhenUfvKjHvnvID9RANwEkqqdQKLR/4l0bx9i9j33aJaso/i2u2zGEQJJyFpNVQ3GaQGvRA4GZDFwCreiMMjMcDZWd/j42PHoPSsI03a9XrdmZuLxaIDbR6T6XQ6DmipDetl8dPp1AVs0bdL7VTNzpoIg2OnaSAVlAjMfBeY16Y0UIeMj2ZW+sZ5VIagYcvQuVRGqqCl31uGS9JI6dPTU2SzWezs7Lgc2lY7sHPuC+yyGi3rVvOt9okaIKO8tU62VdtN4YxEIYXaLOeJgt/KyoqLzNY1ZI8X+bRtmpKt0KDjz3lTCwHb0mg05szT1Hi3trawurqK559/HgBw//59tFotp0VzDdAitL6+jlQqhf39fdTrdVy9ehWVSgWz2cydiR+NRlhfX3fgq/mitb127djAQYIpyTcXKjDZPZCEl9j2RIGn1hmleNh3oxSQEO+Kshb4/o9ry6L0RANwUnNEkndDYLOIuSOpRh7637fRk5SlTDqJBGjrCn1mF39c/xj0QvOzpvPTgCWCsDJnpuA7PDycu8OX/t5yueyuu2NwCoNYqOEOBgMX3EKgsJmUKCSodquBSHosRTVWMiDLrPR9a2nwMX3VaBXIZrPZ3HllBSffjx4nUgZkwVc/832ey+VQr9fR6XQe0u5Vy9F+0B9q2wFg7go9W5ZSVFt1/ekap2asgsvKygoAuIQrep0iA6C4zqw/3wpVXG9sB60oXEMa/McxYPwC6+B6pkZ8fHzsrAKrq6u4cuWKW9NMR2nP9PZ6PTQaDWxtbeH09BS7u7u4ffs2tra2sL297dwz/X4f5XIZ6+vrLq7BCgy6by2o6Tj75sbOQRx4RvGyUH2hMkO85iI8P0l7kr5j3z9vm55oAL6k7yxiRLICsIIwLwQg86ZPlOdRNUKZTJ/ZhtbX17G+vu5SJALA0dGRy9LEc7qaoAOAq1MZLdtl/bsafGXBUwEYgFeLsJqVD3w0SlcDjmg+5fgp8Ku2q9qlanD6LEFHgV5zJfN9+p/pi85ms15GaLUj1qtgq4CtCVZ8woktX9tu62H9Og/Ag7SfXGd0IVCLpXmdlhAbWKdgzHnhmGYymbngOgqOumZoteG6IwhzTQMPAq1USNvc3MTOzs6c0LK7uzsnAEwmExwfHzt3S6fTwVe+8hWXTvXatWu4c+cOTk5OAMAJUKPRCM1mM3K8fbQI+D0qitJK30n0jgVgnxQYkuBC0k1IkgpJ8b53krQnVH9SKVM1m6g2hMhKnbZeMnj191pTtAIxmRyZ5e7urksswONBBF8Gm9CEx+v2aK7WdH08zqRtJFOkZquaCj/39UuJQoPVwkJzYKOmdbxtmksGVfFuYh7N0tzNCqQWiHQO2B49JqXzz7/5P29+4iXxBBW7VhSErXBh26GavRVOtJ0qRFghRf9Xk7m1MHCN8KiRlkmAtlq9BWEGnamP3frLCebUvDW/9srKissWNpvNsLKy4tJ2jsdjl22M7a/Vas7PyzqPjo7m6gDOkg0dHBw4AeNP/uRPsL29jRdffBFbW1vY2dnBnTt3kEqlnHWIFqAQ2XVghR7fWvLtdd93/N7Wo5/rHIbei3ou7n37XEi7tuUsyg8v8q6lJxqAL2qKsKQBJ0pJF5CP7EKMMg+dl+IWxKOoQ99V6R14kHSjWq26ox8EXyaZZ1J85vWdTqc4PDzEwcEB3njjjbm8zgCwtraG1dVVbG1tYXNzE6urqxiNRjg6OsLh4aEzw1HzIGhrNqlUKuWybSlokImqyVm1N9UYtWz+rwDANWPf84GWMjBqOvRnkpnTFw3AnTu1GaRs2kqrgdKCYAFH62fwD69w5HltTTaioM932EfWS6HG9pWaPYUHgqXewMRn7JEgHUMbbU7AZLQ4f6xPlkIez+nSt2rHTtuWzWYfEnoGgwE6nY6LtGc6Vc3oViqV3Flzrn0KOATiTqeDRqOB0WiEer2OarWKra0tVCoV9Pt9J4DqueKjoyOMx2OXH/tXf/VX8fLLL+O9730v3vve92J3dxe7u7uYTqfY3NxEJpNxQqkKLT5tM0opUD5oQZdkBTSrdccBte/7JAqN/d8nCPve0ecXUYh8dUUJLYvSEw3Al/SdQWSAmp5Qk/8T9FKplLvyjz7f4+PjOfAlk6zX69jc3MTW1hZqtRpGoxGOj4/d0SSa3CgMUOMmmJGhawCWtlXNiTafc4gss7GBT4yeBeaBWt8nqflTBQESgcCCW0hrsdohn7dBRyTVkgmEOgYhJqPCBj+35nh9R8si6GkdPqatFNKOORYK3r4+65xoG3yBY1YAp8DIXMwEX1opVLtWQYiXLDB5jPrJDw8PnbWmUCggnU5jY2PDxUgwGC6VOnNLML3hM888g+l0ivv372N5eRkvvPCC8/32ej1nhmeiDjWpx5FPMViEHrUi9E6iSwBOQIsuMJ/ESYrSpu17cfVG1ROq28ckQ5KdbYNPEmZQCk3PmqqQ2ijNhNSCm80mDg8PHZAq+FKLXV9fd5rv8vIyDg4O3CUKvPeW2hijrDXTkWp6g8HAgTw1HdWA9ZiRJjawPz6/poKv+psVrIGHLyrQOqmxK6CrNq7jbo/o6HyoAKOgZ82wLJ9pDcfjsctfq2Zraoh83vqhtSzWpVHeFmjVLK+grW0nwFvN165H1V61XgvQ+j/fUx+/gq8CMo+wDQYDF0BFCwEFOJ1jzl06ncZwOHRgrYk6aO4fj8fo9/vudrB6vT6Xb5zzTqGVQYarq6sYDoe4c+cOZrMZrly54to5Go2Qy+XcuWENRLR71jemoefi+EvIIhgyJ6vgFqrXCppWqAxRlAYd0t6j+hPV96TPxdElAAvFgaYPMEPv2e98iy30nk8ijQLm0HehBZmUdNGHtC57GQIBmb5b5kNeWlrCcDh0kc68yJxarGrKvLKNTK/X680BNoOulpaWXOQwEy4Ui8U5ZptKnd3vyiQcam60mifBjWCjmrQFNB+wWhBWxm6Pw1iQsGY/1X4tAFtTqwVjX9Yue6RkOp26oDX60Pm5AhTwwPSsJmmf1UCBOKTl6rpimfq/BR8+79OU1S2gz1lBRsfcasAaEa3CRrfbRavVwmw2cylFbSpRvm+BuFQqoVKpoFAozB3vYuwCTdO9Xg/lchnPPPMMNjc3HZgSUCkYTadTvPHGG84MDgCvv/46nnnmGdy4ccOZyUejEdbW1ly+bE0/quO1CPDE8Zo47TmkZFhFwPdsXJnaFmtBiSsrbgx8bbb1LdLmED2VAPyoBodl+CSx0LNxZT3Kz0JaUJK2+Bag9VNGPUuwJNBWq9W57FfpdBqrq6tIp88uKz85OcH+/j4ODw/RarUciKpfsVKpYHt7G8899xy2trYwHA5x69YtHB0d4datW+h0Oo6pZDIZrK2toVQqOfClIKCMeDY7u5Wo3W470E+nH+TrtfmPmb+XR1g0epg+Qqv16W89z6uZr+w6ItmkFcB8Wkst22caVuagIKCaIYUJrYOJJqgF835lMnjWq1ou1xQFF9ZnNXU1udKnrP0lWT8uQVCFFfXn80dTVXI81devY8jvNejKasV8huPbaDSwu7uLXC6Hra0tXL161R130vHWpCH8juUPh0Pcv3/fWXSoATOPMzNfdTodzGYzt4/e85734P79+7h9+zba7bbbY71eD7du3cLp6SnW1tYwmUzw5S9/GTdu3MBzzz2H09NTvPHGG64NKysr2N3dRbvd9u5d9pk/asZX8mmflkdYU3dSPnhRxUEF5qhnfQpEiBbVZi+i/QJPOACHANEntUU9FzWIScBoEYoD8TgA9ZlTfFq2T/PQMuw7Pm3XtsWadOj3pfmXvl/dzOPx2GUFYsCPpl5kHTSfMehqMBi4gKtms+m0ZY181cseaFZmukJtK4+VUKvQG4Bs5iWSXqxucwfrhlcGnMlk3PlmlfKtlhsaX9U0OU4W4K0mS+ZptWTLLFXr5jMKWAwWsn5tS9oPXRfWPK3tsWtUg8x8Zn2Ogw3OokDh29/6o9YDGwQWelf/5pnaer2O1dXVOauKrn8L4hSmNCEN9wjf0TSUelZ4NBq5XOYAXIAhTcvFYtFZLUajEbLZLO7fv4/JZIIXXnjBHVE6Pj52UdE8okdBzicA2n3v0059mp++E1IOfGsnikK81jf2ttykytEivN7WHdXP8yp7TzQAPwoN91FSksk9T5stA0taZ1yZtpzQ4vY9p4FXTPunYEENiRchqK9Xo3vJHIvFItbX17G1tYVyuYzXX38d+/v7c+BLLZTHnQi+euE9NVptr0bOjkYjJyjYSGJqwOyDz9Rrx0Y1S9U+rXlbNSz90TFWUyWjWFX7JNDxWTsnds60TQp02kYKTMzCFNIg+VvHymrmof6Q1LerlxtYAUH7ZIOJbGQ2y7eBVZxvWkwIiFFCZTqddsldcrkc1tbWUKlUXIS1zkdIGFABJ5fLuduw0uk08vm8u1JT01wyg1Umk8Hq6io2NzdRrVaxv7/vsrppudlsFrVaDYeHh7h79y4KhQKq1Sqq1Sqm06kTZnu93twVntreJGBl/w4B5Hl5W4iXJWkjn7cCVBLt2ydE+L6LqztU5iLktztE0G//9m/jr/7Vv4orV64glUrhV3/1Vx9q2M/8zM+40PmPf/zj+Na3vjX3zPHxMX70R3/USXw//uM/jk6nc64OJKGLArVP2k36znnrU4qa3JBkzv8XXRg+Ruory4KvZkeiBrC0tDTHBHmlm17nNpvN5hJtFAoFlxf3+PjYnQ1m8gMGrvDOVZvVSjVAAiSDxJgn2G5wfY6/CUw+wSRqPdjIat9zqm2oxmuBTMeeoBxVt9Vg9MdqpARBezzJlqHtDGkROuaW0WvZ1lSt1geuBwoGNppcrQIqzNg54TsK1AwI5JxaLV37QAsGU54yH7f2h4IQI8h1HnWs8vk81tbWsLa2hnq9jo2NDayvr7uLQ6jtM/iq3+87kzTrpouA2i99u9SKZ7OZi7amAJpKpRwIr66uPjSPPrJ7Pu55uxai1rpPo/at8ah1bev1zXsSigJOX18tOIeE3bcMgLvdLr7ne74Hn/vc57zf/9zP/Rx+/ud/Hr/wC7+A3/u930OxWMQnPvEJJ+UBwI/+6I/iq1/9Kn79138dv/Zrv4bf/u3fxk/8xE+cqwOX9PaQXg1HrZGfM+KZAT5kyNPpg9R96uerVCou4Go0GjlfcbvdnvOpEnxV6/WllLQ/FAgKhQJKpZJrq+9Z1TIITvZMpRVy9Ds1a4cYg2XWChgcE6vF68YPlZ1UI9F+slxNrxjSCOwY6fiquTj0vgVOgi3Xhu9ccGicfAFqFqQpZNjUqCEBdTqduiM9en7d135rzeD3mgCFGjBv7KrVatjY2MD29vZc+cxlTmtRu912Wm0qlXIm5NPTU5eg4/Dw0AWDNRoNHB8fYzgcumAxBkKur687UPatl/MCh48uWt5FlJYnlVKzC4xYKpXCr/zKr+CHfuiHAJxNwJUrV/D3//7fxz/4B/8AANBsNrG1tYVf+qVfwo/8yI/g61//Ol5++WX8wR/8AT74wQ8CAD7/+c/jr/yVv4I7d+7gypUrsfW2Wi1Uq1WvT+ciFDJhRJlhfORj0Octy9eupCafKMlRP/e1I2rDZjIZXLt2bc5EBwBXr17F6uoqZrOZy1TFi8ZbrRbu3r2L+/fvu+CT6fTsYoQPfOADKJfLGI/HODk5cXcA65nder3uNG0ymEql4kCYGqdm3AIe5GommPZ6PbTbbecvjjITMxhrOp06c7dlvGpC1WAiBSZqeL4ztmwrv1NBQoFEI6xtKk3VYmkSB+ajXlWCp/b2h3/4h7h79y4GgwF2dnbw4Q9/GNVqdU6AUJ+l+n7V5EuBiuBzenrq9qYmEuF7mgqS7dLc4NYMbv3VLEfHkn5+tcKoqV3HUNvAsZpMJmi327h//z5WV1dx48aNuQC54XDoLDmqpfMZAM5nq4BKbZSuEdY3HA5xfHyM3d1dvPrqq+6e4GKxiLW1Nbz44ouYzWa4desWDg4O3DlkAC615nve8x5kMhkcHR1hOp3iypUr+NCHPoRvfetb7kKTTCaDP/qjP8Le3p671tNnFbH7XoWKKGFvEb60KNT46rbWiFB9UZpukjaeR6tmKlAe6UtCC2vAUfTtb38bu7u7+PjHP+4+q1ar+MhHPoIvfvGLAIAvfvGLqNVqDnwB4OMf/zjS6TR+7/d+z1vucDhEq9Wa+1mUkgLnecpYRLr0mV7i2hbS1C7SPlu/1VT0M32fzIcmYPpXc7kcNjc3UavV3DEOMs/JZOLu5CXzA86YJtMv9no9F3TFyE2eJ6bpWX299qiNNZnyM6sZs/3qC/VpburHBeZvJrJzYLVtbQc/03HV530mLV+5IVOY1cCjfjj2nL9CoeCAwbbRrhEtR/2yygytVhoqw64xWg40T7idUxvYZudAXR3aV42UtfOrbRmNRs78Wy6XHzJXqzBkrQAUsKzFR6OuuZ5pxWEmrGvXrrn6KCAOBgMUi0WXiKZcLrv9xP0AnGm+w+HQmcn7/b5Lc1mr1dzerFar7ihg1J6xc+LjM1E8yPe5D0DjytL1H0UhPhhqi21HSPGI4ucqmOhYnZceKQDv7u4CALa2tuY+39ract/t7u5ic3Nz7nuafPiMpc9+9rMuyKBareL69euPstmX5KEQmNM8WygUHNNgIn9uekr/ZGzMCsQoWy5Y+mXH4zEajcbcZQw0HfIaQ5oRGUyjpkGSlYz5mW5o1YitFmbf4XMWAH0MQ4Hc14ZQO9X/66MoZhbH7CwpAGcyGadVKUjECYQ+AI1KuOFrJ99RUm3SBoyp5h4CUXukLRTUpd+RGHg1GAzc5R8hq4iOpYI/3/ed91ZNnIIPjx1tbm6iXq87c/Tp6Sm63S4AoFKpYHNzE2tra06zTqVS7jrNZrOJVquFVCrlIvBpvq7Vau7uY5rAbYCi0qLa6UVA55Ie0CMF4MdFn/nMZ9BsNt3P7du3ASzmc0iyYOKkn6TlJm2T1TqTlJGEOYa+i5MWQ58r06NWyshOptWjVsrIS71kntmryJBoaqUvt9VqzYHvZDLBysqK89lS2+YPtWDbdiudsi6V6K0J1zJoMkyWrSAA+P2vvjZYzcKOpx6VsZG+JKuVWJOyFR6sIGHrtVo/BVr6CH1tDkn8HFtqngRUNflqO3XcbL8VuH0amB0zHXeOCTM/+YQhfc+auAme/X7fuRry+bz7Xo/M+YQdvRJTTe0q4DGoT+/GpibLlKt05VAL7vf7yGazWFtbw9bWltNwed6ZST6YX3p5eRmTyQR37tzBdDpFqVRCrVbD0tISSqUS6vU6isXi3OUjdg3bdWfJrg3fu7pmfO8k5VFR/Cr0TpLnovaY7/Mk5V6EHukxpO3tbQDA3t4ednZ23Od7e3t4//vf757Z39+fe+/09BTHx8fufUtkvJYelxRmGVnomaRkzRRR4Bqqe1EJNURRm8X3jDLgVCrlNAQmpaBvjHO4t7eH/f19lxC+3W67BBqU2qfTqfPBzmYzHBwcoN1uuxtlaJrmEQ5Gd9KvSA1KAcNG3qq/jZ+TGTJIzEY5h4CV9SjgWQav79ogIi1LP9P39T0FHC3TFxms4Oprs89syjJ43V0ul3OAarU9q4GyDlo+9Oo/C7bWCqBl8X2f1cAKQvq5+oWtr1iPlunYsU++QDMmxBiNRu5CET1axmNArFPXGM/xamQyhQ/2TTPF0axNIYCC6NbWFtrt9lyCmlarhclkglKphPX1deRyOQwGA7RaLWfKTqfT6Ha7roxUKoVbt245LXt9fd3d88wALgrMui/s3zrmlqKUBh/51oEV7mwblA9a3hnXxjh+Fkc+ILaKyKPixcAjBuBnn30W29vb+MIXvuAAt9Vq4fd+7/fwkz/5kwCAj370o2g0GvjSl76ED3zgAwCA3/zN38R0OsVHPvKRhetMMrhJpC99bpH6kizUOKkvSTtDWk5UHUlAP659ugkYILKxseEYUrlcdkD8zW9+E7u7uzg9PXWBCDSblUolF/FJM1o6nZ5LeA/AmbKZfYjMSn1yqplYrc13BMaCKzU+BTJ9nmPC88rAg8xRNvsRf1tw0vJ8plTWrUeL7BEZn+ZsfxTYgPl8zArKahbmO3QB5PP5uShkfUbBSJlhlL/Xri2fYMMy7Lr2+ctVKPCNfTqddtnQUqmz4DWenVUQ1Lt6Cbzdbhe5XA7VatUldCHwMnMVA7cs+HAP0GRNgVIFErpRKDxqljC2/dq1a+44UrfbRb/fx927d7G9vY3nn38eN27cwPve9z7cunUL3W7Xpahk3vOTkxPMZjNsbW0hnU7j61//+lzMRKvVQqVSwYsvvoh8Po9vfOMbbl2H5sz3v29tciwsr9E9qKTz7bP62OdseT7+66srjk8nUbKSPHdRUF4YgDudDl599VX3/7e//W388R//sYsc/Omf/mn8m3/zb/Diiy/i2WefxT//5/8cV65ccZHS7373u/GX//Jfxt/9u38Xv/ALv4DxeIxPfepT+JEf+ZFEEdBKSSWbRSSgJJO5CC1ang8woqTApHWHyojaAFar47lfMilmpALOTHvdbtcFkJRKJfR6PQecNFeTyabTaQe6HBtqpzyvq1mtNApW/YdWK/ExafWz2nH1aX3KKGez2dy9wT7p3AeM2i8tl2OheXqttmfny9ajn/nAnWX6GKfVhuk6sH5oH8Bb7VrXkLZVx9l+p230aftcH1Y7s3Nk28d+cD4ZMa4mYJY7HA5dzmUGRVF75dww45TvLmKdN71IgyZ0mqxtVLsdCxLvgi6Xy8jn8659R0dHuHbtGorFIq5fv+7cOozOpxC7vLzshImrV6/i/v37GAwGDvzVbK3ni6MEfrve7HzEAU6I34U+j1Is7DtxykhUnb6yfZaAONCPqm8RWhiA//AP/xB/8S/+Rff/pz/9aQDAj/3Yj+GXfumX8I/+0T9Ct9vFT/zET6DRaOBjH/sYPv/5zzu/CgD8f//f/4dPfepT+P7v/36k02n88A//MH7+539+4cafF5ji3o2S2qKeI11EMAhJjo+CfODu+97XJg2Koq+Kx4TI2I6OjlxO53Q6jWaziVQq5TIJjUYjAPN5k2nGJKNkHfST8VnVfkkKivZ4kPoD1Qfo80f6xoWMV8/1WsCIAhqWbQHa5+/1mWyV+flM2voM61amr2NlNWiOi2qImlSC77BuH/Dx8+l06sy6+mMTkbB+TT+pJnXWaefHNyb2tiQVQrQNmu+bPlnGJdDEe+XKlTkfOHB26oKxCGynXR+63lQ45Hea5c0HFHbN8SrNfD6PdrvtTgW0Wi3UajVcu3bNCbjMkHV6euryPtOEXalU0Gq13MUlTGF5enqKfD7vLomgzzopb7NabxzF8cBFeHdS7ToKdH11+dqQVCu2ZbxlGvBf+At/IbKyVCqFn/3Zn8XP/uzPBp9ZXV3FL//yLy9a9SOlOPANMYDzAn7cAghJYrYNvrJ8EqFPgvPNW5xEOpvN3Canv3A2m7mjFPl83h0zms1mLnlAo9FwwSD0BQ+HQ6dt0Uw4mUyQzWYBPMgiZTNJqf+TzJ9tVHC1WpiPkVtTsQK1ApQ9d2pBzDd+ylR9oEXw8JneLCgp0Pm0WX3GN6f2O+sv9Wm49vYc7Z9PANC5seeFLWD52qRjy2fYFtU8dU7sHFrw1ShkvfeZ7zLYD4ALfNL6malNBTarkdtx0LnVda3rlhq5jqkSBVD6kMfjMTqdjrs9qVgsYmdnB51OxwU6ah3ZbNZdqlEsFp0WPRwOsba25uIwcrkc6vW6A3Mbjc72+QR1H9+xa95Hyp/s+tWykwJriGfp/xdVYBYVDt4yAH6nU0hiDD0X9axP60lStn3ftwh8YBq1yH3tJlUqFXe2kGa+5557Dvl8Hp1OB3fv3kWr1UI+n8fS0hL29/fR7/exs7ODdDrtrkcbDAbOr0rzXip15h8ms6QpkEzFamBW41SQTqVSc3mU7Rj7Nrz1JxN4mTdYtTzg4QsTWK4G+rAdVgO2WjkwfxuSttNqT2yfFT74uZLPLE9gIDgwLWin03H+zna7jVqt5hKrWADXsWf7bL2hFJ4cLwVyAi7HQ7VGq6nzh3NF64uOm2rxjDImqA0GAzQaDdy+fRvFYhGrq6uo1WpzQhzXJcu3GdY4Jpo20wIC20BrDtvMZ3QMWJ5m7+KaYEa4N998E+Vy2Z0bJlB/5StfcddrAmdH+sbjMb785S/jpZdeQq1WQzabxWAwwMc+9jH0ej288sor6PV6ePbZZ5HJZFyyDvqDLc+wvEL3UkhZ0H6FKATWi/CkEPn2eqiNSXm4bxyiFKRF6Ik4hnQROu/ghLSLi5ZrySdpav1x2k4SsiAfpYXY9jDApVKpOBDiFWmnp6c4OTlxmXjS6TRarRZ6vZ6T4tvttgscoRma/jVN2cco0VRqPoLUmovJpH2+W7Zf37WmUWX6qj3pJeZ27PS50Lip79GmVPS1VcFJy7LARTD2tV8FCBtQpnOtAV96FR61ID7DCFw7ZgR6zrGary1Y6ndsn2qwmqFK++Zjbj4Q5/9WoNB+EqTU395oNHB4eAgAc5eHsI08Z6vuEAVg637QtnPONSsajx1Z8PJpgyqU0goxnZ4ls9nf38fR0ZE7/16pVLCxsYG1tbW5LGPAmQWJJxHG47HLQjcajdxNY9y76+vrTvD1AYyOt48eNV89D69Nqqictw12LfrW5kX4MvAO0IB9pjv7v08iSyLV+UwyPuLkWaar/0eZcJK2Z9HvQ/VqXUwewMCrpaUlB76NRgONRgOpVMr5lXjsYXl5GYPBwAWM0GfF3yyLmgo1a590yfYpsybjtO21mrEG99jNopuKoG+1UDLUqDL0R/2GvvdUE7aAaZm0D6xTqdRDJnr7o/XwHfUjU0ujFsn5nEwm6PV6ziVgr5YE5q8NtGNuNWbOme4znWMrcNgy+Z22QcFdtX+dK1pTWAbPy7bb7YfuabbzMp1OH/p+Mpk4QUXnIAQAaqmwoOZbnxSKer3enDY6mUxweHiIN954Ax/84AddnufhcIidnR0cHR1hOBy6eeKaOzo6mstn/a1vfQvb29sucrrX66Farbobkwjklhf5tF2SD5Di/tayLM+xz8V9bsuIamtSoI7jwY+DnnoN+JIuRrz1CDhb5Pl8HtVqFd1uF61WC6PRyKWTZGAHGQGletV4yehTqdTcnak868tEG6zPB4ikkPTpY/AW1OyzNhjLxyB82nRUm3zWDfVZR/VBv2dZAOYYrQKr1eitsOJj/Ol0GisrK6hUKqjX6y46lu4CWgRsG3zMl99bk7EFcPu5FUJ8jF/f4Y/6ZW0bdWz4ve/aQzUh64/2bTweu6NB9HNHaUE6PwTv0Bql9svMcQrAbGe328W9e/dw69Ytl9u5Xq+74DH6rAE4s/dwOHQCRy6Xc8lwSqWSS+qxtLSEWq2GarXqzbEQR+fVPr9Tyv9OoadeAyb5GGroO/3MJ5XrMyGGHVe/r+wk5JMurTYfqi9pPXyX2aqy2Swmk4k7L1mr1XBwcIBOp+M2MlPx6YUEBFyaCjVjEo8w0edLrYMat9VGlTna/21/LQDrZ7aP+pwyZmuK9oFvCGx92p3th2rmPu2PdSpo8LvQ/1qvzV2sc8qsSRSAUqnUQ5fG07+oR2xsIBfLtUCv/VKgTaXm70+2bdQ+q4avY8i+2oAsO3bajqWlJeTzeRd0pFm79D0rrMxmZ5dEMNkFhcNQ3mwbrKXzZ60ZnKPxeOwuCOExIx2n8XiMo6MjfPWrX0UqlcIzzzyDlZUVbG5uolQq4eTkBMPh0PUpn8+j1+uh2+0ik8mgXC4jlTo7epXNZnHlyhX86Z/+qTsuWKvV0Ol00O/3g+uQ5NNGfYJtVBl2fYT4rJ13H+keiyJfOXEauv3OttXHP85DTzQA+zQMH1NMCkah5+JMMfZdHzBEAYWvPUnabCX4JGWFFrz9fnl52QV+UMO9efMmKpUKhsMh7t69i2q1inq97hIHkEmRsfBWGGYLGg6HSKVSLqK6UqmgUqlgZ2fH3ddKAKcWrP5L63tj2/kZGZf2UdMbcowYJKPPatCNZeIECvU/szx7PlmDs/ibSfHV/Kp+bgvcPp+oT9vSM6gKHPyOY8TyCB4UeAgoq6urDnSpkfFvzoues1WtToFVQVSDxdh/zr8FW99aDAlUuu5TqZTzYVpfOI8cAcDKygp2dnZQLBbx7W9/G91uF8ViEcVi8SHhiOXTgsNxW19fnwNeTU9p94+uUSv8UMCZTCYO3HmJDU3Kln/0+3387u/+Lr71rW/h+eefx7vf/W48//zzePbZZwGc3ThH8Oa8jsdjd5/2937v9yKXy+HWrVu4evUqrl27htdeew25XA7r6+sAzi524HiF+KINHvM9a7+P+tzOsRW4fWSfC5WfBLh9QnpIkEjSt/PQEw3Al/R4iJpvpVJx537L5TIKhQLG4zEODg7c/byz2Qz7+/sYDAYu+btqONR6yRx5zrdcLqNer6NarboALw12sZtBmatuUP6tGaWUrIYUR1GbLoqp2O9t5Kt914KKr0x9zjIuFRh8TEcDjOyY2ghfzY+cTqddQJJGFVshQbU69S/bNttnLXDzeX3WatKcQ18glD5r36P2yah2zVRlj1xZIdYKWGra9829ttUKSb6gOWq+zWbTndnVc/J2vRBQGRzGCx1KpRLa7bYrlwIPAyZ7vZ67MYnxGswTTX9/uVx2Vi4rPNn1GKKLaIEhitOAnwZ64gHYMp84rdYnYSdZXEna4Hs+pAnHlZNEEvPVmeS9qI01m50d4SgWi25jLi8vu4vsG40G9vf3XRL/VquFw8NDx+zIsMnoFISn07Pr1MrlMlZXV919wisrKw8xY2VkqnVZoLPahgViG4gUsgCoeTUEjAoUWoZq5vYIDrVd/V9B0Tcfdk7UXE0ik6Wmpt+T4aupVS0Bqnkr6JFp8zfdBjoPLM9q9FZLt8DIeoF5gUTnhX/byHefP1vHi+Von6bT6VygFE3vXCNW+w4BqY1kZ5/VSqG/7XEijfxm3wm+vAGMZ3Tpw+XxKlolKAyNRiOX7KZUKuHGjRsol8s4ODhwdVNLZ995/Gp5ednla7969SrW1tbcODB3NOvzjXOIrKDIz5KCd2gufb99ZS0K0j5BIbTXQ59Z/pN0rHz0RAOw3UBJ3wHCEtui5fnKCmk7doFFaWeLLP5FvvdpCPZ55gimL5aBWO12G3t7e2g2m7h27Rp6vZ67eKFSqcyZhsnEFHxTqZTzO62vr6Ner7uzktoGleYBOHOfFS4sILN+CzAWKO0PtUBlsj4g1bp8oGOP3ijTtWSPf1itUcuxm5z982Vo0jHUvtAMrO2xGiqfy+VyLnpdM1exLDXP+gQmtlHnZDqdPnTm2ZcHW+eXoKoWFa4jAoy6HnR8tEzN4R215xS0fXvV/nAMFYCtIGGD4wikFFz39/fdRSW1Ws1ZmmazM9MzTxo0Gg0AwGAwwOHhIb71rW/hmWeecdcOdrvduQBI/hQKBRwcHCCTyczlcK/X62i1Wk7AqlQqc4F3vvlQfsuxtEIIv0vCP0OgHadNL6KQ2Lb5/vYpTHa/x7VhEbxQeqIBOAmFANXHzPXzpEC8qPTlqyPpe772JCnLAm2oPdwElIjJ1BhteXR0hH6/j3w+j36/j8PDQ7RarYfSU1IL0KhnfkfTM3PS2o2tgMYN7svQpM+SAatWZudXn6dgwP7RRKk+XCaj8B0lslqfMiUrEOg7OsZ2/iyYsR++OeNzNuGIb836BAUfY9ExZDQ6E6eo5st+adn2+1Bf7Tj6/vcFp2nUtwK/b56txmn7TPBWAPeNh2XUdu34AFgDxLQdOl+DwQDNZhN7e3s4PDxEr9fD2tqaszgxH3Qmk8FoNHIWp6997WtuL43HY+zv77tjVaurq05Y0n1D4Zl7lefte70eyuUyarWa60+1WnXnwKkF++aP42zHLGrP+Z6xe0jf0WejntH5SQqIcfzd8ookdF7wBZ4CAA4tkrjvfaB7kTZcpI1x5UZJhIssvLg2UPtZX193OWSpod69exfNZtMFZ7366qvo9XouCtqa58hsyMSBs4QbV65cwc7ODiqVykOZj9Q0aAOaLIiolqHzSBOcHQt9lzcyqS+UmYTIkBgdrCBHpkYmBzwIrGGb7fPWTKtzqf0GHja36vxbS4We3dQ22Hr1SJgFCwUi1d6Zl3g6PUvOwbuZGT3NtaLjqj58ts9nNdDx0/byea5RNR/zPX5mLQQUEvU5tpVrYjabOV8oU6ha8FcBSMeb86rmcStUcUwVfDlGTG4yGAzw6quv4uDgAKPRCPl8HtevX8eNGzdc7nMGxlEgZJrXVCqFO3fuoNlsYjQaodls4rXXXsNzzz2Hq1evYjgc4uTk5KF7kbkGms0m+v2+u/Cm1+uhXq+7bHP9ft89T63c8gydH/6v/Q8JW0ohYPWRDyR9z4f4WhRoa1t875ynHeehJx6Ak4DveQbrUQ2wLc9qP1Htj9PCo963n+vCD5WXTqfdsSP+X61WXQAIN/VoNEKn03noyFAqlZozF+utMJTGmXBemSuAh0DH+v20H/rDcfBJ3zpOSj4t2ed31HZZpm/rUlCx4KBM3RdkZMeAnyvAal1quvUllOCzaopXwUDBV03Z2mZeYsB7na0vXYUO7RtNk2rKZf8pBNDcrxqbz5+s88W6Q0zQp32qkMTobkbqq0le28D67JjYuda+Wq1O26cZu5ilajgcol6vY319Haurq6hWqy7SnBm0stmsu8WoVqvhmWeecScJ6PNn9HOlUkG5XHYBV9TyOQYKsu12G+VyGc1m0904Vi6XcXh46O7g5p3dvmh3O+YhnuJTHuxndr3asbPv+CjEI6MUFtsn3zu2PVF1XYSe6kQclsnzb7tgQgPt+y7qOZ00H1AA8SY4HyX9LkpC80miuhHS6bQLkCIzq9VqqNfr7nYWahHNZtNpywz2sYCiYMz6NNdzaAysdsTvrdnTgpj6BwkSIfOx/UzNivxbNQmSMmnto/VRq7+SY6ttVgDTMdBydBx1zrTtvrGz/bf9BuBM7tZ6YJmp3n3s08rtj35HDVCPSVkNMsSAVWjR4DuNKbDvWaGCfWH7e70eer3eXMpTn3AXWm8MJvRZNHx94pocDAZot9vY39/H7u4u8vk8bt68iZs3b7rsVNlsdu4InI2BSKfT2NnZwdbW1lxKWN6ANJudXY6ysrIyJ0Rxnrn30umzvOz09fb7fZfYg/NNM3goGY4dqxD51oclu8d9vNF+b8sO7es4vu3juT7e7WurPnNReuI14Eu6OFHjWVlZQalUchuWkc+tVsuBDyMlyTSAh33MVjviZ9SCfRIzSZkfyQdkfJaMkWZuzfGrZbINcfUpowfmzz7yex8QhsiCGv+3vk5fWRa4dVyV8Wvf7NhahqRgaBmVHfeoOrQ8Ldc+p2VpfEDIkmDbEmLS/J9avprTKczw2dPTU3fpQLFYnEvioWBFjVHrIJgzQYavjyro2PWh5+EBYHt7G2tra87SZH3FfM+mhqxWq1hbW8PBwQEajQZGo5HLRsf9mMvl5gLW2CeC8Gx2lvO80+m4wC0eA6TGzWCw4XCIfr8fCWZRa1/7cklhekcAcJRmaD+zGywkJfk+C9VjGVEIEEKfh6IKLbO171kQ8gFfKnXmP+MG5xVt9JPdvn0bnU7H3XzEiFJeS6jgSw2HgEgQYz3WJGoDa2yUqTJqn29UtU9l6IVCYW4eNcJZAZBtt2ZmX6Yj7acGhSnz1YQb+rfmmdb+2Lm1Z3qtH5eMWcuhyZKkPnRN9mGPHel8aV85F3zfXpRhE24A8/5aZf7qfmBQkdWm2SZrQVDwt0Ic54BWm3w+726vooDIH+ZZns1mLmBJBSzdA6lUypl4rWatKVRV+FAwV+2Yc8ao5rW1NaeR6t5UbZ/jbiP40+k0KpUKrl27hna7jXa77dxA9+7dw+rqKra3t1Eul91Y6emD5557DsvLy2i1Wrh//z729vZcOtnT01M8//zzeOmll/Dtb38bk8kEV69eRTp9dp+3HQtdZz5hz/e3UogX6jv2mSRlR70bakeIp2qZVqCKasN56B0BwKQozctqIUmlvrjFEgXYcZ9pneeRKKMWtwIIL0RgIg1qE71ezwVn8EwofWi6OLXsTCYzBxJapwVK+5t/W+bMzW/9Unq0xAfQ7J8dP6tFh8ZN26JpNLUOnybnE7JCGrlvjrRe1YasBhZaM1ZDtxqcatZaP0FDk6fQ0uGrT8uwoKoR0bq3fPNr5039yVq+HVfNBEawUeGP5VIAUeuIWmdYHutkIhLuBdajWrl1R+jc6XzRr2v5S2j98Dvbf+AsiLFUKqFYLCKTybhbrY6OjtxFDRTi1AXBVJq8pYxZuAiyu7u7uHbtGprNpjuTTDM0BRW7r+xnSdajfTfqOR0nu1+TgHuIlBckbVcUz9fyzkPvKAC+pIcpk8nMRblSs+DNOGRElIT1mjXdGAxcUQ3XgguDUYD5c4Q+q4MFNTXRqRmVdStDtQBsTatalz6vbbHM1pfNyoKGttUGPSmAWiZsmbNtk21biCFZrYrkG2e212pbDFhin/X2IL4bAg0LoD7B0eZi9oGy9pH1qfalIO8TeOjqoPbKv/Xstc/yoRYBTcto15sKHBonQPDlmNt263z4hEXtry9f9fLyMgqFAkqlErLZrLtO8vDwEKurqyiXy+5CDR3Lk5MTLC0tzd20RLM1YzpeeOEFrK6u4uTkBI1Gwwnkg8HAu398dB4l4VG+/yTSEw/AcRpr6DufluIrN0n9STXfuHJC7y4i9cWNh5XYeOSE2gGz7vC+WL1GUJmxHg8iOOnZSvVhsV4GftC0CWCOgSl42c9Vo+Bnav6zeZrJ/Hy+Th0fO3d8VjVGa7q2pKZ1y+Bt+31gy3p96TTtu9pmjpENPrNrgOOhZao2r5HUHFMCpQpVrNMXJKfzp0fBtL/WUqFjqy4B1qP9t3NozedW62Y2KZrS+YwCLseB/VN/rJ65tcIf26mCg46Djotdx+ybBpdZ8Ffw5m/uL8ZpFAoFHB8fYzQauTu5CdCdTmcO4FutlusDBRLefcysXACcG4rni8vlskuRacffCkyWHiWIRmmg9jm7d+LaEuK7VsHQZ0NKw3noiQfgELgC/g0RejdqAH3PWS0jql7bBn0uBAyLkm/BRLWNTIQ5ZXlukpGb/D2bPTg3y6MSwMOZjvgZN7UyDtV+2u22S8KhZVjtyWoQ/N7eOKP9syZL/Zz9Vc1UQVrboADF8qhN6VhazckCoY6zBRLf+Fnfp84pn6GJkQzcjqH19WqfLCDb6wat9qbAqZqrZT6+dWd9ouxDyGxrv9Oxs1YMzoWaaXWMKQBw/RKMWY8vvzOFR6asBOCyVs1mM+e7tWvUClSz2WzOX2ytH3xGeYQCvBV0VMCiu4gXSXA9dzodHB0doVQqYWVlxR0d4/jRdUQzOgF4NBo53/xgMEChUMD6+jru3r2L6XSKarWKk5MTZ9qPAlz2K+qzON4W0rR9VgJffbb8EB+2eyIpQD8OeuIBOIpC2gYQP7BJJvm80o8PxEMg76v3vPVpnanUWeDJ1taWS7pwenrqApiGwyEGg4HbpKVSyQEQmYsGeqysrACAO6vIQBw1OafTady+fdtl/6lWqw78lfkyItOnuSno2EhlHSMNaiHzshq6AowFbd/Yh7RfHVMVRiyIal0s1wopNnDJApUeVfHNrxValLnb531aJK0UDFzS6wit5cOCdKhPLJ8gbuMAVJuy69yaeHU89JhTKFuaLU9Nu+yXarr2h/5S4MENUzpmtv+2Hp/mrgKSDbALCdEUJCqVCjY2NnB8fOyCpk5PT7G/v4/l5WW8/PLLKBaLc6kpfWthZWUFo9HIab+vv/46nn32WVy5cgWpVAqvvvoqNjc3MZ1Oce/ePRdFrmPq41O+/7UPKmicF9yiFCsfT46rK0qJS9KGKMUnjp5KAF5EwokrI/RZUg3YZ67wveOrw/e3ZSihsuO0awJdsVgEcMa4eTUdrxDkEQr6h7VcZaaUrlX6t4yWzGY8Hs/d3jKdTt05RAUsjSJm+1i/BTsyF5+w5TujHGL4GmykAEGyPkN+rxqK/cxqPXZOfT5C/Z7l+KKYWR6ZvU3DqBqh9pnf+VI2TqdTpx2lUg98/npjkibQ0HkLjVlIELYCkJL1+ZJYFteYau0hwdYKOBYAWZ4VwHxWCq47tdJo/XaP2XFXoccnHOn60/HkPmOe9nK5PGcNGo1Gbl9ls1lnYqYgzDbqGqd7aTgcotFooNlsolKpYHt7GwcHBzg8PES1WkWz2XTCuG2nnR9LccAUUjx8oGq/U37hG3tfPUkVL1tfFI741nZSeioBmBQlEUcNmJ3M0GKw5flA0gJkEoHAV7+v3dY8G9UvC0LczLlcDp1Ox2XcuXr1Km7duuUyB81mM2cuVilfmQ+ZtF54rle+qUZBBsYEBel02t2GpJtacztbH69qDRbY2D+tS/tuNRA10zJYR8FFGTcZkH3fmuHjJPSQhsP3+Yxq7wqWthz6q1Wrs4IBx0gBgO+z/fT18wgP55XjwvescGWPbfm0c+v7pdaqfmEVqnQOfTSZTJyQQNOqjqEV1HxjqvNILZjv6xjpmtBx13n3kfIDlqn5z/md/m0FLtbD4EjeTMbsWczbzLgNpoflvdxqJeIRQmryFIh5pOnw8BDlchnXr19HvV5HOp125u52u+1SYuoa1H4mGYeQsBYCdB8Yh56zlLR9ce2OKyMJTw/RUwHAcQOw6ESENn2UZKYUWkBxUhSfCYG8/T9qgYSkQZbPo0dk3rwjNJ1Oo9FouOMIzFxl6yHjyWQyc2co9RiITZlYKBSwvb3tUuAxIMQCo2qZCkCsP8pXpCBjGbrVbOxnyvBV46MAYE1w/NsCo4LybPbgfHBorhQ4tI9WCLNCnl1bWpYFGV1XKuRoHczdzbOw9mYdzguPmmm77Bq1GmFIQNVxs2Oifm0rbBJ0gPnbsnQube5obZddRxxL+kvV4mCDAqkx27n07WErGKnwqIIP50PnRceWdabTZ2eJa7WauxSF7pTT01P0ej3nLmJch689eg5/Op1iOBy6zFqp1FkWPI5fuVxGq9XCycnJQ3OWhKfqOliEF/vANikoRgnBoWftftN2LFLXIvRUAPAlLUbUOldWVtxZz5WVFZe0ndl1ALhsPVb7VdDQbEFW+02lUs53tbW1hWvXrj1k0raAG8XIlIEqWTNmSJBRJq3jYcGK/bJaiWUmCow+ZhECIW2TbR+Zswod/E3zp7bXlqX+Z/ZTk3zoeCu4TSYT9Pv9uQs0dExUy9f22PrtmPj+13dC7gMdC6vVEpAUiFmeL1DPMnPrM2Z56gu29fkEIvu/nQ+97MKmmiQA68UVnCtbh47j0tISisUiCoUC2u22+5yBkwzQsgKIrg/1Z/PIYbPZdHmg19fXXUQ1jz6FFI5F6CJg9TTSUwPAPslKFy0pToP1MUif9OX7P9SeKMkqSVt82oElnzna9x4vRFhfX0e5XMZkMkGlUkE6ncbh4SEODg6cqWltbQ21Ws2dDybTIvOwQTBM9s6jCwBQqVRw8+ZNPPvss9jZ2fEeHbIAowDBZ4EHPk593zIp5jjWMVDmSKaj51qt5q0JHvgOAYxRsSRrWtXPFbjYXk0RqIE+do0piFgQ0kAg1XQZwauJHxRMNIBKNTMm/59MJjg5OXEXbVggYF/0fz22owFkOjY0bY/H47n1wjHShCqhvaZaqLbD+rw1cI1gqnPJc878nhouI4Ht2tO51DWl825dLKrt2nuLCZIMVNR+ci74txUWde4rlQo2NzfR6XRcqtjT01O0Wi0XDc39yfXLOZ7NZiiXyxiPx+7u52aziUajgXa7jUqlgo997GN4+eWX8Yd/+Icuw9bt27ddu3XdRWmIVti1AoWOsT7nWwP8zCcUan2hdthyo/h5lNBs9/pF6KkA4DitwveM732fycOWm0SCC01OCFBD7QyBeJL2+9pNbZQbVE1j1H54m8rKygqq1aozn/oWpEr1s9nM5Y8lg1teXkatVnMRz2RAykC1fVq+BS37nG8cQ5ssShtSMPKNnzIYjQK3QTu+fpAsaOkYRmmLlrEr87GMyK4fH+OzfQ1potafre3zzR2BzVeXanwcC9tv22bL1G0/ff3X8Y8yf6v2p8IkwZvlaDu1Ts6Lb89ZM7P12yto+5QCXfN2fNSfz3qZ5pIXMgBnwVjj8Xju2JQdh+Fw6IS1QqGAbDaLwWDgckt/61vfwvPPP48rV65gbW0Nx8fHzmWlQrOu2RD5+hnFo0Lv6nO+tR7XBh8mhOoItSuKB58XkJ8KAL6kZMTgDGbSSaUe5MDlgfzBYIBsNuv8tHqmF5jXhjT1HYN3eE/tbHaWe5fJ3pl4IyR9atkamBPalBY87AbwCWWqUVjm7Us2wfe0DgUaAHPCgfbBMh77f5ywZ0EvJCD4xkDBRvvNtltg5zs6nzpmnH8dC61X67f1WXC1oGI1GAvASZiyvgdgToBQMFWgZFkaQa7Aqu2Lmkttr1pOfIKEXVdq+vfVawUylsHPma1K+8Pjg3QdKWnkONundxBz/+7u7uLNN9/E+9//fly7ds0F5ZVKJXeTkt1/cUB2SX56qgE4blH4tKmoDW+l6tB7+lyUlpa0/VHvRAGaBQVNZUfTFC8m7/f7LvVkpVJxt8bwnKCVyPXqN0ZMMwiLzzCbDrNsRfkLFXQt4/OBmw+A7Vz4tCRl1JZ5Ag+YlGo6BGcfcGtij1Tq4RScIclbtUOS1Y5C/VQA5efUuDTgy6fp8nPfESRqRVajtGtM59LXJ6sh0gzM+ACdX2vG1XHW77V+fcb6pbU/LINzov1iH6xgYdvmExJ8gpF1K4SEQnWnWH6igK0uB+27lpXP552pmYLveDzGYDBwF1RYoZJjMxgMXDvpgqCJutVq4Y033sD3fd/34bnnnsPx8TF6vR7K5bK7CEKzY/ksDbZftu3W3Ozro4/vJXkmjkK83u6VkGDh06DPK4A8lQDsW6xWGo17Jwkg2+dDmkycdnYRUo0jjvL5vAveoGabz+fRarXQ6XTclWlMOUkw0k3MtutxhuFw6MBbGbO9SUd9afR9cjws8PpAOMQIdSwUmPiZZbz83gKq+ioVmPP5/FxkrGohlvn4wMvHoDieOl7WR8txsMzc+sLZTp7X9Qk6llEq+LBNeuTIR3YdsEzri0+n0w4Q1F9o8yvrmGhfWYZtt+95tkfnU0mfsaDJcdMy1X+t9VvNVYUG++Mbazs+un7sd9q3KD5E4LT3NlNjpUDA9az1MsEIjyZlMhnk83knTN+/fx+TyQTPPPMM7ty5g0ajgXK5jGKx6ARtbWMUX/TxP59yEadE2OcuoszElXFRYE1KTx0A+yY0tIij6DwDbyXpuHLt5OtCXrT+KBAms9jY2MDa2przM5VKJZyenuL4+BjdbhepVAqFQsHdK9rv9wE8fE2e+tEGgwGazeZcphwCFbNczWYzd47RaiXAg4xWPs3VgpplWD5NRDUHZbDAgzSGFhTJkAgcvV7PMblisehM9/SXK2OmX8x+zrZrX1Vzs4xZ71e2DFjXkwVQ9TumUqm5wB+2SQGbPxqwZDUhDQLS9urfWr9PW9W0pApY1IRZv/Wnq6naNy5sF+dC61Qg9QXpUXBkW3QONFBK39XxswDuA1w+Z/cM94Jtrx7zY7vsMTgLQLPZWXpMFXAJpIPBACcnJ+j1ek4o0zWvghPXfaVSQa1WQ7FYxP7+PnZ3d3Hr1i187GMfw7ve9S536QOFbAK1lmnbZz/X8bF/n4d8AriPrIAQ4sEhAUAFJd97iwgClp46AF5kUuMGf9H64iYlCnC1LJ+0azUrX7lRC5BHF+jrYRasTqfjJGHNeGQTE1gNhRuY5ij6hRSgyVisT8syaqvl8W/L2BQQtG8+f6bvfW2LjTKm6ZxgRqGAzIvvWuZLjVFN72rytGBs+2M1Le2XNX+ybAVHBV4dPxVCFPh0jnxjrgKKHVOOj2/Mdf3ZPlnB0gKearvsj9Xi7T6xwO9j9FZDo0Ci5fqOI1mgt1YVn4VA59lmHrNj5OuLfm/XphU2tWzVvLk+CJLc06VS6SHrgi3r9PTUCV+5XM4Bbr/fR7lcdueCNTEHk4DE8T079yEeZnmp9j2KQoCflL/7eHiIr/v+T9pOHz11AAxED7xvgM9btq0jbiL5f9QiCUmOcc9EtYtHEBiwMZlMnLR77969OaClNM1UdqolKHGD02RLkxSZgQb0RAWVhIQO7auPGZHRWRCwflH7+XQ6dfmtNd2lau8MVlMG5wMNBSSSak8h7UCB3JouLUDxHX5HjZZtD5mLWYZqejouPj+lBXXbNzsW1oRt26/PAHBCmq4JXz0WcNTMboUd9seuUX2e31uTP4VI60dWgVAFSh0Hy3StIOn70Xm0gqiOrxV4Q8KbfZfrWM8YTyZnV0pagdQCHrVZWkEAYH9/H81mE+VyGevr60inz/IH8PY03rrkmze7Du3atO3xkfadZJUAnUvfnFiybUwi6PnovPhh6akE4KTSTpwUdpH6fVKTgocFaB+zDpVnn/X1SZ/JZDIu+cVsdma6qlar7k5RvXpPr3FjeaolaPk0RRGAVWtSpsXn7OZRidwyZrtJrUnWluGbSwsO/L/dbjsgy+Vy7opFBR4FBfXNWk1C/YE+jd8yD59m5GOstt0+vzbnRsePwGPr0bp9Qo0yMD3DattAs6/PP+/rm63TB9J8jpYJO7cqsHDcdf3NZrO5xC583zeWVpAKfa91qc+d4+C7qN4KAD6Gzt+qifN5jrnWpWvHjqlNeKPzQNJ1o/XbdvPmJ/KLbDaL+/fv486dO/gzf+bP4OrVqy6QjrEkjUYjGIyldfp4mv0sBNL2+SjADpGP39o2+9oQ1eZF3ouipxKAz0NJJtYy9CTPkeKkQ8twfe9GkW9BEVDL5TK2t7fdJt/a2kK1WsXR0RFOTk6caalQKKBQKKDX6835bK2WQJAeDAbodDpzz5OJ0I9IHxMZO9uofj3fbzWhWqZpNUbtvy8LktU22X7+TRC25mUrOPiEDAt+2n4bEU1SM6vPusC+6pEWPqN+XWo8/I6CBJmujXRme9RUyjI5dmrBIBhYMNYEHb7gJtW+6APWNuiY8juNQrdJQKxJluOsfVf/O9vC9inxXbVU8LceI+Kzun70fZ+Q4TsLrd/zbwqsHGdrNbIuBhX8tP28tUoDJZlK0+4P/T8kHDJxycrKCur1Ot544w18/vOfx9raGt71rnfhhRdewK1bt5yW3e12cXBwMDe2up5YryUr+Nj3OU76rH3X95yP74bqjhLeF6XzCAWkSwD+/1PUJERJPnETHwfYvkWXBORDbbaLikePisUiZrOzowvr6+su+810enY/KC9mAB6cS1STnGW0o9HIBS3ZIBv7owxBA118m4zl6LPAw4DMdvkEFv1MmSdBt1qtAngQya1MyTcPrNtmVrJaoNavPjmNBGZ51oxp67amaY4RtR7NQjYej511Q4UU1Yi0fgVhZYYKtNoPq33YdaH90++shqaAaLVNFXqsD12TvbAMKwz55kEFJb6n7bPt0jzQlixYqbuFpJqltdjYz1kOhVE7N1pmiOj+8T1v54KfaeIRFYh1LmezmQvEvHfvHm7fvo1nn30W169fx/7+PrrdrtOCDw8PI4FUKSmPTQqI5wVOy2+StEmf9WHAeempBOAkk5l0wn0SWOidJCAbRed5P2oB0JfJYzS5XA61Wg2FQgGHh4doNBpzRxkAuAAOuzFns5nTFjOZjAve0kT4yowY9FUqlVAoFNzxGPpaCU58Vpm8aiAKPpZ5W9CzTN2OE8uwGoLPvMf2kdHq/4A/S5RuUNXgfGvGSu788UX1sj7ggTlcmaUyVm0Tn2effd+pYGPBzgo3VgvlnNIcqwBnx8ZXhm1LSAOyY+Ebt9BnWo+2h2CvAM05thmsfEKh9lOFFCtU+Kwc1qrh84NbLVHXKT+nABw1V765CI2lCoy0CPX7fezt7aHRaOD69et47bXX0Gq1MBgM3JWIPOak5OOPobUQeicJuPn6E3pG67S/F6FQ385DTyUAX9IZZTIZB8DpdBr5fN6dAWbOX0Y+k/lbjYU/1KQZ0MFn7XlA4IyhMMqa7xAkgIf9yj7mYbVLy2iVLMjpjwKPj3mqOZZ/87fPT6dM1fqq9Tn9W8smKWD6gIOkwoH21fZTj/bwOXuLlWVUPsZlgceCG9+xmrmvnlBdKkwpeNmx089sO31jHhK6bLtUwNN+8EfjF6wQYcHdlqNCEDB/7IvvqdVFy7RtUYHR9oXmfZqy7Tqx5BPmQkAymUxcJi2amZvNJm7cuIH19XUcHByg2+06wZpCdajei2iITzs9lQBspZ2450i+ja7lLCL5hD4P1XFesloJ/yZo0rScSqXcFYCtVstdsq1mWAZUWQZAH3G9XneXfVMDU5MW6+Whfp4pZmS11fIsM9d+RGlQUfOh/kY7PlZQsM+qhqvar/pUQwBs5yMUTEayZ1+tZkZiu60LwM45rQvU3tRE7VsjFigsCGiAk5pydb594KX9U1OyCjYhE67VVNQMb9tr141vjdh37PqxgMsytV0+YUI/17KsyVf7a8302m87jtbEb4UU9a9zv7Ge0F6itcPGH/jmToXS8XjsYkU+8pGPYHNzE7dv30aj0cDKyoq7B9wniFqyQpwVLO1atGO/KJCHBHxfu+w7Uc/51sJ5hYynEoBJduMl+SyKQpK4r7y4CY+qM8TUfd9ZBq+Lrl6vo16vY2VlBdPpFFtbWwCA1157DScnJxiNRqhWq07aV+1XTaFbW1u4evUqisWiM0l1u13vjS4M+qrVanP5aHXDE8joZ7LZtuxzykDIaPi9MnYAc8zagi83s5rMtB71K2pQD59ThuUzY6tgwbFkf9SsqeBj51KZtmYQ0zGmUKQ+PAbljEYjrKysuLHQMdD2+oCT0fLUfHgrEiOM2Re7JtVnquOn1wTqGLJ+jRpnOQR4dYvoeFm/pwKorn/r+9bx17bb9aL+fV8fWT5v+9K5Vz+8ClH6Htuma8h3nE7HkcfmWPZ4PHb3defzeQBwR4I0uQqFcN1Ddh36xmg2m6HX67nP7t27h29+85v4G3/jb+C7v/u7cXJy4i6AYH5o67qKArUQbws9b4U0+1wcH/fVr2slCf8P8exFMcTSUw3A72RKp9NOQk2nH0T7ttttNBoN9Pt974a1izObzWJ1dRWVSgXT6YPIZ5uQXeu1x3isJBsSGvhdaCMr2bJZt2q61k/ra0fIlKqkmjLf0f6G+qf/W3ANaWIatOXT3OxYKeDwM/5WAPRlcuJ7quEykno6nbqbsaz/WRm6Wj9Yr31Of3yav86ngqACtjUbW6HErgkKbNo3X3SwlmdByLf2tCy6YFTI1HXBz3QMdSx8QpglHTe1VOm5XfbVChY6jlY5sHWqIKmUyWQwGo1wcnICAFhfX8fGxoZLxkGrGtfKRShOMXka6R0LwL6Jjpv882jKPiYTV45dyD6Th/3fSoZLS0tucywtLbm7f09OTtz5PTJcbnALSKlUCqVSCWtra1heXnbvNptNx2QVjNh2X1CKBSPb/tD3ypj1sxBTsf42BTsFRgVFy3TsO1aTs/NpA6J82qUFYRtopkKLmnr5rgUOZZY+bctnmdB5UZ888ODIkub41jOedi5VmGA/+L/mfNZ3Tk9P5/ql/Wfb9JIP9k3rY9t1PpUUtO0RH653NcGqAKVzZn3hKtQxWpxavl1fPssG+2KFyygNUMeaQhk14n6/7/qjrgf2e2lp6aGjdazLRpVH7VX2s9lsYjweo1qtYn19HZVKBQcHB+4mJaatjSJff318kp8nAfTzAHbUOz5e/TgFg6cOgKMGK0pitpLhRSfWV04UkNoNawHHaldRxI1JM14ul8Pq6iqazSZ2d3fRbrcxnU5dRPNwOHxIa0ylzq4q3NjYQKVSQavVwuHhIQ4PD9FqtRwjUg1IGZH6SZXJ+cYsBMD622oQ+jnL13esuddqTsoIfb5YnT8dG50LlqegYrVlbaOWp4xamT77wsQIdk1YjUZ9v3oBu/pf1VxtQdTWq3+rhkuihq7pKlmPnXOOD9uvmrEdIwIH1yTbl06nHwJutlOZpY06VwCy40yA8mniOs5WQNOxIjBpn3xgR+1U14bV5kl2z+u6IQDztqPBYPBQH30Ch65BrpHl5WXvrVQ+vsLx513BxWIRq6urqNfrLsYkn887nsJ37H7Uv+2+07XgGwvleVbYjCKfEBRVtl0HvnZHPXceeuoA2EdJJKnQM6EJSlKmr4wk5JMUQ5KyT8si6HLDFQoF1Ot13Lp1C41Gw5mzcrmcY/ZkgNwYuVwOa2trWF9fR7PZxN27d3F4eIhutzsX0OE7PkIAIOO0oAE8nBUqauwsU9Qfu5nJvK2Er3OogGz9YazTmmx9AoSaim2d2j8fc2HdPj8tP/Pdu6rAwe/4nM4fv+M6sP4+a7nwjelsNnP+VoK7zYKl7VMAtnOmfbD1KsBpLnL+b+uz7bRri+Pgu5tXXSO+876cV1u+T4DSSy98a9i2y46D70fn2e4lzvVoNHIR71wz2j8VFNXiQm3VCmJahrZVTe39fh/379/HzZs3USgUXG5oXonoi/S36173SBydl9dGlRf3ufKiqDb6vjsvED81ALzoJFlp00rASSaC5Fso1sx2njb7pD67MH3gWyqVsLq6ikwmg2q1iqtXr2Jrawu/8zu/g/39fcxmM1SrVVSrVZfFilmwgDNz5draGra3t3F6eoqvf/3raDQac1f12TSF/KHmxkQdDALRa+6s1qxM1jJYq/n6NjkwH6GsxzaU6ep7Fqx89du1oO0OMZc4sFBAIFjR78qxIHDYc55Ktm6afjlerENNpNT8CDyqiQFw5k2uAWo+PG7CMvQIDMdSwZe+Uash6lpW4CIT53WIHLNQClTrz+X3NosVtWkVAjRlJT+zWq6ua81Opcf07FlhTeXoE6r4P836VjBQoUj3kx3vbreLbreL6XTqjvdxbyloqsbLv9Vfy3ZwHfj+5p3g7XYb/X4fv/Ebv4Hv//7vR6VSwUsvvYTXXnsNBwcHqFaraDQaLjDMt4fYL8tPo3hZCKxteXHAGSfk27b4KIqHnxd8gacIgKMoSgIPPR8HmnFM0fde3ERZ7SP0DMvTBcjPVColGFerVaTTabRaLYxGI+RyOZdQvdlsumNGtVoNs9lZrmgGXR0dHaHVas1FSPuO4/AzZRY81qRXwAEPn0O0fbAA7JOqlWGy38pELCNluWRGGvmswKoah68eH8NQ8FZQsiZAC+QhZk+GqlHBlmHrWFgBkM9rogy909iab/mOTTRigVW1Wz5DE7gFM5ZH87hvrXKcuB416plt4RqyvnMLwGpRICkAqZClc8l1SkFF17aW7dMOdQ1zLNQUrnNn26tArXPKd3XdLS0tYTQaOdPz6empE1Y09aSuCQJzPp+fa6O15rAdekaf7SEfSaVS6PV6eOWVV/Dss8/ihRdecLEhTDubz+ddWszQurTCqOWhtg8+QTukHJ0HBG05dn/rePjeO2+9Sk8NANuB85EduJDU5JuIqLIsYIYmMo7ss1HvhCRDzW3MzFeVSgWDwQC9Xg+pVAorKytz2alopuYFDTRxHR0d4ejoaC6oxm4m/ZyMSzUg/raSqh1D3zj4mLb6HH2Arnmoyci0fQRrNT9yDBSAtY+s356LVSaibQ7Nqe2HBVSCJr/T1KChsin0WK1BTf9WI7NtVmAiKVBrgJnVsK2248vk5bMGsV3U+BUo435UYPEJJfxMBT8dGwVjaq4UItgmrYNauZ23qHm2bdLAMAV6337gOGp94/EY/X7fAS5vLLJrW+vnHdaMmOaaYsSyb0w5bkzQo8l2jo6O8MYbb6BUKrlz/hxjG+TnGxu7btnX0HM+CvHE8/BwH1nes+h7i9JTA8CXdLYIeJ9nNptFuVxGvV5HoVDAwcEBRqORu2Ce5wfpD1az1Xg8xnA4RLvdRrvdDjIv1SZ18ynw6o9lFiQbWKHgqppIiMlZ4FA/lwIw22g1BgvAasLmZxQsrNBhhQG+a0FZQcmChfZbfwjAvBrSmu6B+XOsbKdlxL6xVgBVAYu/VZOzVg4LiD6zu5J1G+h8MF4hm826tliNm6R9sj56q11S+/VptDpeGuDFNqpvnxcP0HTtA03bf2q9KjDq+rTnppWs0MnPKBQDcJotTzLY+WX92WwWpVLJCWm+kwvaXu7n5eVlrKysYDI5u3BhMBi4Z4fDIQCgVCphc3PTAa81/+v+S0oX1SYfBZ0XSM9L7ygADmmp/N/3XFQZfM+n/fie833nY0xWOgwFeVgGzmjnarWKfD6Pd73rXbhx4wYGgwFeeeUVTKdT1Ot1bG9vI5PJ4OTkBKnUmanp9PQUe3t7GA6HLqGDzbRDbWEymcxd4wdg7no2HpM4PT3FcDici87UH9+ZUPZZNQQFPWsSVsZB0NJ0jGr+41hq7mIyW/qq1RfLMtgPTdbPtmhQj70TWQUAe6yGJk+Or/aBDK1UKrl28JgHy1Yzr22D9leFI3vL0GAwcACj4EOT4mw2e8iaoIBME7OeAdV1Yq/K47yxr4VCAeVy2WlU/X7f+TcV3BVQVehTgYNaK+vwnSWeTCZz0boAXFAi3S6FQgGpVMrN+WAwcK4bFW4Z3MYxt4FwKtgpELO9anVQq4eufbaTQVDc41o3/1bhhfUtLy+jVCqhXC7j+PgYrVbLjaW6N9SfTHdUJpPBwcGBuy2tXq9jbW0Na2truHr1Kq5evTq3H3TfWaHZ+td9fNcH1qHn9X8VJJWsRSdKQ/a9E/W+FcB85SelpwKA7WD5aFGTQlQ5oToXAW5bnv4fpx1aAJ/NZk5qVV/f9vY2crkc9vb2sL+/73xtuVwO3W4XvV7PMRwCq2Wcto3cwBosQyauz1IL5tV/VmOywGp/Wy1LzZOqzapGSyZtwYBgR/BlcBNvEeKY6bvaXzIzG4CmvmI7f9p2O/9WW9Pn9H1qMWTweqG9rU+FEY6xWh2sz9IKeiyfAthwOHzId6k/egxHTfbqJ/ZZKtQKQUsMy9LALm2nalbWrx7qq08jT6VSaDab6HQ6rs208OTzeVdOsVh0fSQ4drtdtNtt5+KoVqsOjNU6YX3OFpC1TVY4sWNFzZWBcWoaZh0aic0x0HgMBljqueVcLueEOB1rCl65XM7xAV2ftVoN5XLZjcfe3t7ciQgrMOsa1X7zGd9e0/bE8etQfZaS4APLCwF11PsXwZanAoDfbnrUppPzlJfJZOYyX/EY0Xg8xuHhIU5OTpzvF4BLJVmpVJxpSQOPLDhahkiTIYA5f69qHdQa1JSomzBEdsPacVEG5dOudUMwgEeDq3q9nhM4VlZWnI9Ny1VSXyX/B+YlfSvlKwjpJvbVYYFLzebULtgPTZ5hzZsKTJbpkyGTSVOz5XPMrqSBPtSurJ9V+2iDbliHClvWF00BjuCrJn4rnClQhNZJ6Dutk+XpsZrRaIRutwsALoKZa5iCI9uQTp9Fpfd6PUynU/T7fRSLRVQqFbcuaBFSK4OCibbDp32x3foejx1xzHx3PnO/6brh/FALp8A8Go2Qz+fn+qfaerFYxMrKCk5OTuYE1+l0is3NTayvryOTyaDdbuPo6GhuvSUBuUuap6cOgEPgFVrwQLwZwYKR/dturvMuxijpMfSZasDM45vJZFCpVFCpVHD79m3s7e2h0+lgbW0N2WwWw+EQ3W7Xaajqr7V+HNahJjOrAasWwPZPp1On0ViNyAKT7XvUGCgIqIamUrgyf2p22hZGa7Kd7Lv1OdpxsGdSAf/tQVZw8JVn15y2w6cFr6ysPHS/rr6vwE1wVQABHgSRqSBBsKC/j5e8c46tj591q59f16GCsm2jWikIAqlUak5I0nZbjdYHaL4fFcRUIEylUiiXyy5vMd0srKvT6QCAsySxv5lMBuVyGalUCq1WC71ezx3PGgwGqFar7iys1skxV7Owzx+u/dG51DYSfCkIsq+au5rrheuJnzEpTzqddtp0Lpebc8Xwb6413hWufdjZ2cHW1hZyuZxLyMN5DQmvdo8rxQkhIbKCoK+8UBmLaKtJyrPPLUpPBQCHTBlAmJknGTSfppJEc/O1wfduqLyotukm03JzuZw7MpDL5bCxsYHl5WUcHx9jd3fXSb6pVArtdhuDwcCVo8cltE3sv2on1A7owwUeBD5Rq1TwU0bANquWo8wZePiyc6t56fxZ8NUAKNbPM48KwAAcQ6OWx3fZfjWpKSPTfqk/Vonf2f4qc7Zai/rxyFitkEEzLcslYGsEqrad46o+Y2stICBOp1M0m0135KxUKrnLNNRnr5oZx4EgTleEAo7OK9eOXpHJdmnbONcK7rreFaA0+MfuN+0/1wVNx6VSCcfHx04Y073AvcE4BwoM1A4zmQzeeOMNl5b1ypUrWF9fd5ee6JioVcLOg93TnI/ZbOY0X2apo9nYWiRs/3W8OX4c72w26zT4lZWVOd+97hdekqLC4Ww2w9bWFjY3N12g5mAweGh/c+60b3Zeovik/R3itz4hVsuL4vNRwr59ztcP/f+iWv9TAcBKUYMW+ixESbTRJOVa6dYnwfn+jtPSuaAzmQxqtZoD4RdeeAEf/vCH8eqrr+KP//iPcffuXefn7PV6OD4+RiqVcpGUtkxbDzczGSgZNoOtCLzqD6WZb2VlxTEmZu9RTcqCnDXl+iRr1qHMSKNiGWzT6XTcrS0UEsjI+L6euWVfFUBU+1fNke1UzZntsJqO1ehIbIf69fi9+tApIFQqFQBAr9dzQW6q8XI98LgZ20LhgwybwKpCzN7eHr761a86s+LW1haWlpbwrne9a04bZyIHzY+tjJjjan2iqvVms1nXZ7ZZTescKzWxc+woRLH9jASmK4Ft1fPDnA8Kp2xLtVrFeDx2eY41tSLXhI5/tVrF5uYmbt68iatXr+Lw8BD379/HrVu3cP/+fbz88stOG9YUkdoPNbmr31bbrn1m0JWantkfPXPOADsdl8FggHa7jeXlZdRqNXQ6HTd3FEB13bRaLXQ6HZchj2uT43j9+nUUCgU0m00cHR1hb2/PJd3hM2q9sVYL3b8hfqbz7/uc71prSOidOK17EbrIuyF66gD4vJTEvBBlTgl9FgfiFnjjpESWqcBErSKdTrvjAaurq3jllVdwdHTkfEhkTMrY7UbRRa3StLZDgUUDtzQTE/Agb7D+KENSLZfl2vHW760ZVDU9ggkAZ2Lv9XoA5oNLstnsnOamGbp0DPSoiLU66N++ObJjqX3guGmfaFZU5qJMWsGdPnzre1Xmp/MV0hbV1M0xo3kVOAN5aoLKpFVYYr80cErnh20i6BLYtDw7ZupGsPPO/zXS255RV8HNatD63NLSWWaotbU1p/2rQEMwI7hppPLy8jK2t7ddQOOdO3fQbrexu7s7V4cKVXZfq1vGt35YjwozCsAcX2vNYL+n06kLqKPgWygUvL5tnVM9qmTL5PzRd84b1dTvr30J8dQkfNKuJbtOfBSl6IS0alt2Uo32opov6akD4EWklCSDGDV5i5RjyyIlAXQfiHMh0kdILaher2NjYwOFQgG7u7totVpzzJebU49y+Nqk5kBuMAU8bjyarTRgQzVSBREyTh0HbnI1gWv9ltnoOKmZj2BN5tButzEajVAqlZzpkMkL1ByqR3OU+VhmZE3UOj/abh1PBWqr/fJ9tlvnRsvmuKkWqcIBjxKpOZljbCNmfeXRkkHAZVs5twqYbJuCuq4ZNUeqP1SDrpQp0pyu79l803xeLRzWbK9t0/baqGDWxedSqZQLVNRrNjk26ndVa0s6nUahUEA2m3W/33zzTdy+fXtOOLG+c7u22RZrdSF4W0FMhQzrStD9SqGEANzv91EoFJwFQrVV3V86RmwD9yaParHdGhSoyTq0nz7+dR6AWwQYQxr1ovVHtckKTlFCQRw9dQB8XgqZPOx3+pnPNLJIuVEUaoPVVgnANFPxqMBsNsPx8TF6vR5ms5lLTsHNqabgUN262QjALIemZ00QQIZOIKAZTBNJKLNUhqKMhXX7vg9Jr3y+1+uh0Wi4PNTlcvmh4y58Vxmq9l3rUW3bpyXoRlQGRAbGMqxAo+8rg9W+qbamggqjVVmGPdes4KeArBqxakoUSGh6ZD8YGWw1EfaRzJduDBWEVHjiutG0iFq/zomdZ5bDfnCdE7xJBFu2z86zAqGOMS8WoCDD/mhqUytwKBgy3gKA8wmzb2tra6jX63N1K7jZ9us6UUFF16pvXXK/0d3AttJF1O123fhlMhl3CkD3kG/d24hum+eZfeI6sMJ8nLaq9evc6Jqzzy9CIQUmJBD4+HcS4eEioH4JwE8wcSOTKa2srGBtbc1FZxKIUqmz9JPcRJYhhQQHHtZXrYCMaTgczh1dUkZAhk/NSpPt+6RjZZYaSKUMwac9ktRU1ul03HnNQqHgkjzQRM+jUfZ9ZbYk/cwHQMDDtyhZJqIanAKSrzxrjrd9U2asx8CYXEL9nXZctVxrTeBY0VdPJm7vA9ZxUearwKLrhAIH/c68PJ5k84v7hBfVCJmNamlpCf1+3x0dY/1WsLHAqYIWicKMXkxiz3Zrv1mezmepVAIAbG1todVqod/vuzgLap4hy48KPGpRsGvfArA+o5Hq2m8CcKfTmfO/t1otd85bLQah8tnuTqeD1dXVuTbr2Gv7HweFFIYnmZ5KAA5JPvYZH0O1i9CWEyrbaro+ycpKhPadqDZbkwcAl71ndXUVhUIB169fx7vf/W4UCgXcunULd+7cwWg0QrlcdtcKTqdTl+mGTN/WSU0jm826G06q1apjgKPRCI1Gw5ksqYEzdaJGG3c6HacJb21tOTOkaozWhGY/43jawBPVbpaXl9HpdHD37l2kUilcvXoV9XrdMX/VuHw+NAoRnBMeVVFgo6RPYqSqMi8KGWyjnh9me3kWVV0DqgUT2FTTAub9thrFTT+89QszsEhN7Na8qD7NUqmEdruNVCrlzktT06T2TS1RmTA1Z/ZNNVUCsj2qZjVTrhu9vIHfW9M155LP6DEynQsFO91zfJ/WgpWVFZdWkZmxrElWTeDqttB1+tJLL2F/f99lzjo6OkIqlUKtVkO9Xp9LkarCGNeaWhY4bj4BVMeLc8M2sA5ano6Pj3H//n3MZjNsbGygXC5jf38fx8fHKBQKmM0eZLrTtabWGQqvd+7cwebmphuT4XDo2kth3LqSfHyM88b/fRqq8kMrCOg4hP4PadNW89bP7OehMm1bQ98loacOgENSkm+yLlpH0vKsecW3CIDooAUf4DP5Bo8ZrK+vo1AoYDgc4ujoyGm/epyCma+0DSq5TqdTp61oAAiZFjNJcfORudLEq6YtNblSK63Vak4jIAD50gbqpvNpAjZqeDweo9FoIJVKYXNz00WFq4bK92yQkvVv+wQynxasWhef1WhV9k3NmarJKEATMFVQUI0rxICy2ay7Nk7TZZIZkxmSWRNwATi/Pc3PGv3KMngMRrVwrgOOJ9ON0terSWE0eCkk9Oo4+/5WPyTXFOtWYc7uJc6tRk7zR9cC+88bwGiC1nnXrFBaBwUSzl0+n3d/04LU6/UciFm3hQJSCJj0Pf3h2lDtU7O08TsGJOo80UXDsVDB1IKKriEVjjWPtvX/6rz6KAq4dI3YNeP7PlRO1Oe++qK+f1ya91MHwO8UIrMnoysUClhdXcXS0hI6nY7LZMNjFfR/kklS6ibphvCBApkJzcrcsDQNqjlN28jPCZDUwhXkFfxU42V7FIhVO1INhVG8KysrWF9fnztnquUpkBFM2Gd+7jOl2eAoHTf+qFaj5njrz1ZmqUdB1I+p/kbr11VGRA1Rx5zjaMeIAo9tP9uiySfYfvr/fe+xTQR9PWKUzWbnMjCphky3hgoAugZ0nqIYMMcWwNyViBYkVaDherTAQ02Y54AZCa1rQtvHeVEA5rrmfLBOZhlTK5GdJx0ffVfXrfZPwVctTqqR0zrAoMRKpeLOd3e73YfcMSFQ5DhZ4dgKAFEKhK9c/S70/dNOTz0Ax0lg9u+oMnRDRNURYtK+unyLUwHCPsuFz8AWAnC5XHb+mXa7jZOTExe5yAQdZCzM2sMIZttOglG/3587ikJGwnOmCr7AWdQlQYTt1+jh4XCIRqOB6XTqzgf7LAKqeQDz1/T5xu309BSdTsdl+6pWq47RK+BZ7YuMjG3V/+368P2wPT6zqgVeBQtqcip8EAjYXxu4o+CuzBB4cMk867K+URVE7Liy3Ywl4HxxzPWIidXYSCpw0B2hlg0CBDVyYD5DFNuiY61jqfvDgrT2IWS50HrUYsFx0Whp7g2dLws+qhUz0Qt9x9yXFFb5Pq1G1IRVsFDftT2ORrLCsrbBArBdQ/1+391sxn13cnLi/MAEYXWBhMbUt3/syQDL73xClM6h9kvfUbLz6vsuieYdpe36NF3fuvPVc17h4akDYB+QKUUBqF14vueUmdtJSQL255H4tGwy1JWVFVQqFZTLZRQKBbz00ku4fv06Dg4O8Nprr+G1117DysoKVldXUSwW0Ww20e12USwWsbOzg1QqhUajgdu3bz9k4kun02i1Wtjd3UWn00GhUECr1XLHNchIGNgBwH2uDFHvCyUzOD09RaPRQKPRcD7MjY0Nl6lHTbiWiVotiZJ3p9PB7du3MRgMsLOz4+48JUMhiHD+2E87X2pSVqAjo/YdtVBtgwKJCkkKxjp/ql0p0CjYhY7jWGBhju/pdIrBYODucFatWtui2gv9tQDmzPoa3KdjpWBB7c9mirJ5hhXwqS0yg5edS426JcDSAkChkYIlx4auFdVGtXxdO+rXp7DBGAWdD/W/+vajgo6Wp2trMpmg0+m442+ZzNkNVxxvlqXjwHXAshRoVeOczWZOGNabsgDMJQLhmjg+PnZ929rawng8xv7+PtrttstpTYFC82ED8ylMOR98hu3RM9c+hcUKtdp/23f9XIVySyoQLgKAIV4dp6GHyroIPXUA/E4gMjxK6wTayWSCg4MDHBwcoNvtuuhfAC4jjmWQwPwiI5PrdrvodrtzSTT0Rp5isegkZ5qzyehZJhm+HoHQaFcyv5OTEwfoNNNpMoSQGZBMrtfrod1uO+3e1y/d0AqGwMOJMuzz/N/nZ9R+anYnBT0VnmazB2ZQLd9qCao5kOHzOwUI1XQ4VpxzO8faR35nI6xZJs/tauCQahoKqjwPy+fVn+8LjPJFzLJen0ah2r7V3vm/msgVsHS++blvrq1QZYVmrmu2R8cbeKDRq0uDQoruH13DOs92TVnGrkDHfdhqtdwe5Tqg9YN+7fF47CLGu90uWq2WC1CkUN7v97G+vu7e51rXttg4EQ0IvCgIXYTe7vovSk88AEdNQMh0op/5ygt9H9J4oySnuMWh39vNF3qXzDGXyzkNqFarodvtYnd31wVgMfnE6enpnA8onU478zIwz+AymQwGg4G7iNsyL/oDK5WK27CaT1cjMjU9HrVDagMsczqduuvv+v2+A9FSqTSXCME3z+l0Gr1eDycnJ2g2my5RvJom1a+qIKTgwGd9ZkY1tVkTnWqvKmCwbb5MSPxOwcFnWSET13HSMVDg1HZQyKJwo2NlNWDVvLVuasXFYtFp9L4EJNSUqYHThK2arBWadOxUmybQczwIBFxXut98QK1jxbbZc8wcR31fhQ79Tm/2UhC3oKOWCY3G1nzpmqyCe0gFFC1H/9dxIpBTS+33+2g2m+78MueN7iHunXw+j8Fg4FxAzWYTk8kElUoFxWLRJWDhHlMLhBUW7HWYugZ17JV8/M1HPn4aEqCtcOT77qLAHNVWpaR8PkRPPAADyQf7UUyK/d9qFovUaRmz1e5CAoSaf6fTs2NFxWIRd+7cwfHxMTqdjvOzptNplxP2mWeeQb1eB3B2PKjb7c4BDxl0u912ZyJphiRDp7mPeXSZB5ZmQgAOiDQKlv9bgJxOp+64C7NYMSMR/VWMmrbA1+v1cP/+fdy5cwfNZtPdf0ympceGQkyXc2h9ndbUzDr5uQY1WcGDY2AFBwU7/q9mPA1KIhPVvlC7VjM526oaLNNVqgBig8KsYKEajp6N1ahxXauskwGAXI8U1NR6wTHQ3MwELB0H1egVzHTcCLTqDmB5di+p2VaBUveT/s+2qptC55HPsH2q8ep61nXAY2oMaBsMBg+5JKKAhuuCR/5oLqeFindbsw0A5u6tZjAcXSjUmnkkiRdwKGirUMhyaU5nGlsGduq4sf1WiYniuVHKk+WHlpR/RvFgHZsooI9qZxx2JAFrHz0VAJwEVBcZ7CSUBFhDbbSTZbXeOECnmZYMtVqtAgBOTk7cppzNZu6qwW63i1QqhXq97s46tttt9xzrJBNhlitlnqlUymmv+Xx+7v5YMiFqDcrk2WbV6gjM7C/bqQElFAIYVUqNm0xuMplgf38fBwcHaDQaOD09dZetU8sHMGdutxvWHkmygo4dG2WWCniWgWo9CnbKCAjcFjRUc7QmZDJkK4zYcdZzt75cyQp0+j7nsVAooFwuuyv4WK8N/qKfmEKVgjnBjeBFAUsFDBs4pPXYPumPWipUq7f7xLovgIfTl1qNVtug86jz6hPOuP6ZHY6BWbzcolgsolaruQxmOs8K2Lq+qS3Tr8220QSta0/HmmDLz7kHUqmUOxtcqVScG4vASrC263lpacn1hUI5LVTaBssvosjHO5NqnPbdOJ4ex09Dz9l18TjoqQBgINkkxA1iSMoihSZ+kfZFtVX/t4uY3y0tnd2Kwxy0xWIR165dQ7/fx71799But+eyXfGmmmeffRa1Wg2NRgN37txxEcvK6KiNsgxGbE6n07nL0yeTCXZ3d+eupPNl2FLNj6bRUqk0Z5q2fWT5vLllMBig1Wrh9ddfd4yIQM0Ibtb3xhtv4H//7/+NGzduuOAz6xu02qK2V/vnAwEVKlTjJfOz2pJl4jr/eheuBiCpP1e1VzJ4TVShGq5qbQDmmCnfUy1Ty1BNK5vNYmNjA9vb285awjkmLS0toVwuuzpUMOL3HG9qgFwj7I8G+VBoYF+syZnAzTFj2Zwvji0FOz0eZAUgBVICnDVpsz16zIrrWAUXrUc1YgLwdDpFq9VyGmYul8Pdu3fdpQhcNxoZzTZoAJYKE9qGUqmEUqk0d+f1aDRyFqTpdOriKWazmbuI5Nvf/jbG4zGq1aqLWj85OXGnB+hG4BrmfN69exeNRgPVatXVrVdWxpFPINc94fvffm7N4qE6lOIUorj2xpWXBFtC9FQAsNVCSFarjHvOlqnv8jPrs7Gadag8+wz/970fBeyUaLkJGQ19enrqgi2sVL28vOyYKX2/7JcyMABzjIu5e1Xj4DPUnjUy02rmymRotlJGQlJfG/BAKyBwMJEAoz6Z9Ul9rCzv29/+Nk5OTrCzs4PNzU13f6kyODX/qRmYn9nzuJYB6DzRbGfv5FVwV43Vp/WpqU/7orcMkcGrQMG6+DwBwY4rwdz6qVVAoIbFaGaChIInx4rCmCZ90DG1EchKOgYcf2rsmkmJZk/tn4IR2+4L9NI5pQanwp1daxxLfVf3oPp/7fdsg/po1ZWRy+XmbrBifnbGQ9hboqz5l/2lj5z/c27S6bNgK2rc1WrV8QKryafTaXci4v79+3O5nbvd7tz+1fgB9nUwGKDf76NcLj/kTrJjruvTx+P0e10bts4o4AzxT0u+Nvje9bXFx9cXUbzi6IkHYJ+UFJKMrEkhpPHGTXochSQiX50+IFcJ0bY3nX6Q4YiaSK1Wc/4lzc1MEGOQE3/Ur6b+PeBBQgNuMGX+1Aa42fmOPSeqkrvvR4/rAA/y4rIsPXZC0Ein006bUN+Xmj2n07Pzlp1OB41GA9ls1vkxQxm3rFbMsdD2c5wsGJMZqjZpP1d/oV2jZNiqdZG0TRY4fBqd9kkFGn2GbVOBg+/xCBnjCchcdQ2yTfZomWrRFALYDm2n7g2NUmab9JiR3RtWgCGo8l0tU9ckf3M+1OqjZXMdWuuArlkl9WFzbLi3dDx4tI4CjVoNdI3rOPj4gfVVK1jz//F4jEql4vYF+QHnezAYoFwuuzgP7i3O13A4nNP87VonH1laWkKpVHLBfhSiQrzRB3r2O+3zeT4P8XNLvueiFLAkdZ1X+wWeAgB+XHSRQb0IKdP3fadazPLysjNHHx8fO4augULUIglM1H5JuphoPtMNReal4EuzIjB/dtYHqKrh0ZxlTbX6PAB3tlRBu1qtuqxePDrRarUeYuSlUgmVSgW1Ws2Br0roekyK7SO4hSJ92U8VMnzakDJyCx4WHG3Ql93QqrmxTDV9ajuU1Adv221JBShaFJjaVIUVnUvtnxUWtX4FNr6r6Rx1LK1wo0Ckfmz2xzfeFuh1jhSkNLDLatZWC/X12bad+8tahfgczby8FITH5HwCn6432xbf8SBrTaIARSsWNXOODwXnXC7nrl/Us77M1mXbRqJWnc1mUS6XXSIdn9VAKQoYffX4/g+9G6d4fafTUwHAVkKKmtSQ1mvLshJoqE6flhECOLvJfJJdaEFxoas2l8vlnC/OJ/FrmaPR6KFbUAgIfIZ+VZZPAKePij4m9a2RmdHHy6hle9bYRpbqhqUWwHbbACWaNGnSJgNhMoZU6oEpmJmw1M9GZmWZhNWC+Tfr5rirtqj+SdtOO3fqn7VzqVYFn7RNYcXWpaDNsfNpcNoH4EECDatNsn2sj2ZR+lOp+VGL0rFQ4YHrwI6R7ieuPf6vPncVfnQ9WAC0mruucd/8+PaXBXo7vwpquk6s0EaBlJYlHuvjO5lMBmtraw54eXpB28R9p2MLYM59Q+1TrQN8X9c2+6K+aV6ukU6nXZKNWq3mLtvQ3OG0KmlmLJ1jvXyFe91q4touXc++/6OA2fJKJSsc272nYxtVtu/zJFp00vKS0FMBwCEKAXHoWR8g2vd9CyPJIvGVZRlUqCx+Tj8qTVnFYtFFNnOzjEYjFItF3LhxA7VaDbdu3XIb9+TkBOPx2AEqtZ7p9MHVZcPhEIVCwUU+knitmd6Ow5uY1tfXXSpM9Qtyw9Mvxs910ytjJ5DrpeGz2czlrgYwl+qQ2oWWpdHVKpCQFPSUydvnrJ8vlUo537O2054/tcd8VOtlWQqkbI9lYqoZ2uAkXRMhrU19fwRXa/LksyxnaWnJxRRQY2PgjtZJcNO1awUOFRgouNG1oCCpIKgWG63Lx+A1ylc/53gRKPgd16EVxmyktE/wZn0aGKXHxoAz102n05kzz+fzeXc+WuM2VAgF8JDpOpVKOVO1zrPeeKVWCwVMjUyngNput92aXl5exnve8x4Mh0N84xvfwOHhIUajkbtNLJ1Ou1MV3C/sD88dUwteX193goVm8/IBY+h3HOBZsA4pKNZ0r2Urn/VpzSFerRRVRhTYx1F86JrQZz/7WXzoQx9CuVzG5uYmfuiHfgivvPLK3DODwQCf/OQnsba2hlKphB/+4R/G3t7e3DNvvvkmfvAHfxCFQgGbm5v4h//wH84x+0vyEzeQNatphik1B6uWBcz7e63USAbFz5TxazYdlr+2tobr16/j2WefxbVr17C9ve00T5qKmaCBn/mSJZCZW0Cw/6vfjJmXisXiXApLjo2SAhnLspocyTIOZcoUgJR5a10+s6UtU4l91B9N6q/lK8NV37KaRW1dCs6qzbBPwPyVjjQz69lRtkl97NpXrV/XmAoOGhHMRB3q/1QtkBYQ1YpteaF5Co2p9l377NOi9DmtV4Uo9pWWmGKxiFKp5G4ZAx64cnq9nntXg658R310jflSsqrQZ33G1JRZNjVUZqvTAD6OLy1WGtyl8SKqabMORlgzHwAvf7Fuj8dJ59FQv5NpIQ34t37rt/DJT34SH/rQh3B6eop/+k//KX7gB34AX/va19z5tr/39/4e/sf/+B/4r//1v6JareJTn/oU/tpf+2v4P//n/wA4W5w/+IM/iO3tbfzf//t/cf/+ffytv/W3sLy8jH/7b//thTvkY3RJ3/NJvyFp6Txt8r3v24i+97nprfmWAKxJG7hR+LdlOGryS6fTc34sEhnv0tKSy7xD03Mul8P169exs7Pj7jnVgCPWo9JzlGZPpqACApmdArCaShVsrSamjNMHHFaSVWDWI0FWs1OtjwDCcnwmUtbpa6POqTJuzon6xLUPoYhZzjHf1zJms5kzH5IRkxlzvlgW1xL7r2tC50uD5vQ7HXe+r4F9BFprKrdaumqbdh/o/yFBSseD48e22zIV4FVQsX1Wt40Kwdx7u7u7TjPmT7Vandu7XOu6DnTNaYyErheWoWtJAZjriO+p9q37Np1O4+TkxAVBsi5a0ZjoQ7Va9pFurH6/76xvHBfLl0J8LPSZjzf6tOQQH0mqKbOMJBq4T5COa8eitBAAf/7zn5/7/5d+6ZewubmJL33pS/hzf+7Podls4j//5/+MX/7lX8Zf+kt/CQDwi7/4i3j3u9+N3/3d38X3fd/34X/9r/+Fr33ta/iN3/gNbG1t4f3vfz/+9b/+1/jH//gf41/+y385l6qQRB8LqdVqAQibfpOAcGiy7f9JFkWobB/z8DEKfu8zzyhT5eYkKaPVYx9MvqFak9arTFDNhDxjqqAznU6d9ksmWq1W8cwzz6BWqznmowBP0LHfaZSsArNK8+yX1XbIuPRojjXtqvnRF1BFZmsZNJ9RZkxmp6ZRy3R55tTOpe2TAjzHX9eAgrqOl2qyGmBnhYUQ+HB+ATgzcCaTcVYDGyin4Mx2q/lbx92CkdVYdb2rdkxA1xSjukdUaFNg4jipD1xN/Syff6u5Xp/Tv+1aYB80cQVJrQbcczrO1Cp5KQk1f0Yec/xUGNTx1P2sbbd8xgpdygPIB/g54zG4Rsk79vb2sLy87Hzy9E0zvoORzhR6ud4Z+Njv95HJZNxxJAJ4lBlY51j3iQ+U+bmPx6qf3MdPbV1xpG2wdfp486OmC9kMms0mAGB1dRUA8KUvfQnj8Rgf//jH3TPvete7cOPGDXzxi18EAHzxi1/Ee9/7XmxtbblnPvGJT6DVauGrX/2qt57PfvazqFar7uf69evnbrNKlEo+MLRaiy0nyf+h+mx77KL1MWFuCi1TpevhcOjSOqZSqTl/qaY51Hqm06k71rO09CCrFoGS94amUinUajW8+OKL+PCHP4ydnR0XhOE7tqFaA5k+j0BQkm61Wq69lqFwU9OXxbFQK4AyO00KYjUWTZbAMhRgScpkWY/6eX2mYdUm1RXANpERq0bn0wCtwMF6OJY0X3a7XZfJrNPpzJk5NXiOQUH0w+vRL84r8CAjF6NgNZm/9Y+y7G63O+eOUC1WtTsbIdxut+fu7VWBglq3AqwGISnYESy1PpJ+z/7RBcLyrQVITfpWqFFwttox+8i9xbPMg8HAxSyocEWg1jJSqZQDQMZd8JSBavh8l2tK17EKA/TJ8vwxNXB1MVFAp1ugVCqhVqs5MzqDsyaTiVtDk8nZpSf37t1Ds9nE8vIytre33Y1neoGKr48WLH28T/tsBStrIbPrzUdRyg4/Oy+watsvAtDnDsKaTqf46Z/+afzZP/tn8Z73vAcAsLu7i2w2i1qtNvfs1tYWdnd33TMKvvye3/noM5/5DD796U+7/1utFq5fvx5ptgD8gVQhCcdS6LsQkNq6fO3waWT2nTjNWiV4nxZLxqOH7LlQCRxWG9bLxBlhrH44glW1WsXW1hY2NjbmmJy2z7fplHHymIMCpvofrVmXY8PgJzJmCg9WE1YNwjIxZYKq8Shg2/HxCRT2b9VurH9Zma6PEamWqmPIcWQb+awN/mG92larEXLs1LqhAhmfo8bm03qVyJwJ6Awi4hizLEYI83nN4hXFpHXOCDSh8VHtmu/TYqEmVM6XBvfZcbfjp8KvBU/dq+qf9lkAfO4CrVs1XrY9lXpgTuZ4+AQHKyio0KJZtjQYDsBcZjTNTJdOpx8SANieyWTihOZUKuUCQlX4842pjqdvPem8WrLv+IDUPmv/9uFAHEXxfZ37OJ4dR+cG4E9+8pP40z/9U/zO7/zOuStPSpTofOSbjChQXvQz+33SwfY9Zz9TZuJbaLZu9WXxOW5uno3l93oemOWRAajWR00tnU67IA41J5JZLC8vY319HRsbG6hUKnOSuWX4lsGw/en0gyxK1IrG47G7KDyfz89tWgUINeVaJqz9s+OrAKfajI6FakFsqw8clJEqoHEsLHNUpq/lKUNn/Qo8Oo78m2Zrfq9MUlMh+jRFjTy3oKvtIQCrJYEWFxUuCAYa8a5Et4XmRFYLANcT22O1S9WCgPmjVjrP2l9aafg5BUd1S/hAVMtV8761yNj1ZAFqPB7PmWJVANb5CK0dFa41II3t0ZzrBFoVKFWwVH+w3gtMywctQgrSLEPXJdekurHa7bbTnmnZUiuQ3ffcT+yj/q+fWeE9CgDPw4N1nG274vi+r77zaryWzgXAn/rUp/Brv/Zr+O3f/m1cu3bNfb69vY3RaIRGozGnBe/t7WF7e9s98/u///tz5TFKms9clEKDcxHwTPJ+CDwvWi7L1g3Lz8gAeH2gLioFSZoP+Tk3CrUXveGE5iq+u7S05IIuSqXSXPCObioFSH5nJVa2heWSKZCJMQ2iTwu15ia1ANjPldHZcVZGqO9oP/Q5GzmrGokl1cZ92pIVtpS5KZDyHTWZqhak4KOfWZNt1LxY8NfgIR9QaX8Zk0GribbBugO4RhVQhsOh0850brR9dm4IDNacy3HnMwQva97XeVBQ5Hv83M6LXV8qLGn6zFqt5szPFDzsurFgzPKsOVVznfNv9RETPFULtuuWz7B8CoLaZs4h/ccUuLTtOu69Xs9delKr1eYAWAOxfGDrA9Uk4BYFyFYQt9/72qACfugdW2dI+fIpA4vQQj7g2WyGT33qU/iVX/kV/OZv/iaeffbZue8/8IEPYHl5GV/4whfcZ6+88grefPNNfPSjHwUAfPSjH8VXvvIV7O/vu2d+/dd/HZVKBS+//PK5OvE0UBIQtuZNMjLmd1b/mgKEDxRIenMSjySofw04Mw2XSiWUy+U5S0RoQbIe/q8/6sum74tHJRhs54uAJVnNQwHLArTVBnXjWWYWaq8+a6V1X31aHhm5LQ/AHGDxXR13PcJjU25qX6xWqlqQBjn5+qhA79NyOcY6ziT93wIZhSmblY3zRz8p/YsEbPVTWoDUebdCqAoYur7Uh63atNVG7Xq1liP9TWuC1k+gq1QqqFarKBaLTgtWIVAFRrs2CZB6dp65l6n9cqyt31cFSQ0+pMWpXq/P5aPWmAnO7dLSgyQsqVTKBctZS02/30ej0XCBsBaAVeB9q+lRaaVvJS2kAX/yk5/EL//yL+O//bf/hnK57Hy21WoVKysrqFar+PEf/3F8+tOfxurqKiqVCn7qp34KH/3oR/F93/d9AIAf+IEfwMsvv4y/+Tf/Jn7u534Ou7u7+Gf/7J/hk5/8ZNDMHEUhyeS85VjGbyWpKNBJUoc+75MOlTlajYuSMDfdZDLB0dER9vb23Pk8fU+1GKtZUePq9XrOlET/r2Wuq6uruHLlClZXV136uVC/lTnqeCpT1X4T+Om/ns3OMibpVWfKZDSSmhK3MmXVhPQ91R6ZS1vHSjV+C6SqWSrAKfO0Y+s77qLlaiANTcqci9ls5pixCgBsn40KphVjPB5jeXkZm5ubKBQKcyZFlqVgoFfaEQx53ITPW22G7V9aWpoL8OP3vNO53+8DeBB5yzZrKlNrzk2n0+5sqhV6dH1ZMLbgyrm2e4lAad/VPe+7RQmAy3usSWVoSmd56XQaOzs7mM1m6PV6ODk5mTM302zP/1l2r9dz9/vST14qldwca+Ch/nDM9UfX4fLyMra2tvDn//yfx97eHt58803s7e254FkNSgTgIqYbjYYTzLPZ7FzyjZOTE7z22mt47bXXcOPGDZeMg5c0MA+7XTtKPg3ZZ2EIAap+F+LJyodYpu//KNCO0oi1LRehhQD4P/2n/wQA+At/4S/Mff6Lv/iL+Nt/+28DAP7dv/t3SKfT+OEf/mEMh0N84hOfwH/8j//RPbu0tIRf+7Vfw0/+5E/iox/9KIrFIn7sx34MP/uzP3vuTvgmz1Loc/1ef5+3/kWe99Wl31kGTumbG0eBR4Op9H31G9l6+T6lVzJQXdRktLopbFm6IfR/ZY5Rfab/2WozPm2awDEajdyVjNbHa4UAX3k+YSg0j7o2fJqwApOWy3apP9CWS6ZO/6syV9sPfqZjOpvN5o6e0MTP+WS/mdzBAhTXiJq4lYkTiPgZQYf+RQ3E4lWWjMz2rQV1Xdg6mUSC5mquDQsyJN+aUoFTx0nnR4U6bY/uHbteCOIaEW+FZoJZLpfDysrKnBCmv3Xs+T4tQgwc00h9rVfrUgFC6+C4cR3U6/U5f3Cr1Zo7rkdzuaYfpSXKBifyBANBnFYx7mF79FDnx64Juxei/rc83n7Gz0O830eL8O2LAm2IFgLgJI3I5/P43Oc+h8997nPBZ27evIn/+T//5yJVf0dTSAp71KQ+J2uSVEYGYI7RqgYAzJvTZrPZXNpAjWjlO6PRCO12G+12290BavvtWxs+U57+ze9s4EbUOwBc2kze1qRt8QGwktXKfUAcEox8TEHHW4Nv7HMKRPxMAVqvs2M/rPnap+lQaGIf2AZqZGS8GhUMYI65cg2Uy2Un1OhRLF0PGrHO9tOP3263Xb5x3x231idqI4e5BglkBHg7n7peVEhgPWyfTzi0Pme71oF5M7XOs0+Y860RHp/TM/tsg7XM8HmuB+vD5tqyiTm07XYP6NwtLS3NHRccDAZ4/fXXnYlZXTmsi1YQXX9s6+npKTqdjjNBl8tld4SK82UpTvl5J9NTlws6NNFJTQ18dhFAtQvMSuQW+HwSa5R2pp+rNqVHVKzGSWamR4lU8leGqOdDFYDJEHh+s1KpoFwuo1gsOqCzUrgdR+snVOCxGkloPFUzppBAk5cCkpqPfRqKDbrSH9W0bHuUKdr3GZzCusm07HO+evXIGOdVNTeOm86tao4cW7oe+H+/38fS0tIcYxyNRnOmUIIuP8vn87h+/brLBa1pDTVqXNct/YjdbhedTsfd2zyZTFzdVvPToCG15LA9elyJ/VWfKcHFp63qGNGXyTWuwMy/7VxpHXYtqruCz+j61vm12qD9sX3Sozw2LoB1WteNFcL4Y03V1J75m+4JWikUgLmHbCS3toMBn9SiS6USisXinB9YxykpH00iOIfIx2PtuyHN+K1SnkL0RANw3MBZwAtNRAjwot7x1RUH8kmlwKhF5POB2SAZbj41LSropdMPbjbSNJb0A1oQb7Va6HQ6KJVKqNfrqNVqc6khrfBggU/7pBqAZcT8XP1bavqkn5MBPBqspUxS39dNZgOkdCxVMLGaqs9k6BOmqMmSOVMTpTao46rRxgqoKjgAD/s1VSvi2GkyEs6XapXAg8xTWo76sIvFIt7znvc48ynBmSZh1bq45gi2vnumOV5cgwQAHW+9Yo9zxwsEVHhkDmll8Opu4RjrvlFhTNemmkg5R9ovjSvQdcFnuBZ1DVi3AN/RPaLPWYGQc5NOp911oJYn+cBWzcj6rAU+BWKeZDg5OZmzppGH8DnufWs9m0zOEnK0Wi2X5YuZvmxGLJIVHHR9WErKI7W/uqYWpZCylPQdrf889EQDcIh80lPUIOn3dvHad6I01aj37Ab1tdNSiOGrxlAoFDCdTt2G0mhmbjCWoYyi3++j3++jXq8jn8/PpZkD4DQobjCmoJzNZmg0GqjX63NtitLuATy0kbVv9P/6zLPAA018OByi1Wqh0Wig3+9jc3MTwIMEHhZ4qS1qXdSeyGxp9rV98AkEVotmewkUPCqi80vQUGYHAO12e86aMZs9MCVTy7OCAoFJ+6vzSn8ej68wHel0Op07d8vx2Nvbc+OzvLyMYrGIyWSCbrc7pyXqPLDNeqyNddMaQLMxx5ZndAuFwlz2K7uH1A/OuhkURbMu50+vNkylUi55DOdYLUO6nzg2fE6D/wjINkgKmE8fquOh4KygzgA3/q/aviZBIXBxzRPAOJc6/lw/PsHTRiHbfci1uLa2hmvXrqHVaqHdbjvrCf3AepTIRr5zXTebTbz55pt48803USqVnFY9Go2c5cNaoEL80P7v4ylR5FOebJ1J+L6vjCjev4iGHkVPJQArXUTr5Oc+CS7uPd/3Ic2W5dqJ9YGaDxym0+lcCkpgXqu07Z7NZo7xaGYqbsZ0+iw/7Pr6Ora2trC2tuYipekf1Ew6UcKG/lYNie+qH9KCsAIpNUZqW3qFm2q3+pmdP5ZlgdQ3xvq8PmvNctb0TXO+ggH7p0F01OBUAOC7bAfr0PG1bgYtG8BDZmY9CmQFRJ4b53yybSpEEOjUHK0pL/XMuBVe+T9BwWqAJAUN1bpI7KOuee0717O6VKy2zbb66rfWCTtOBDjbB+0n3+Xc8jgR+6RaKufFatI+INB9oZYSArb2R3/YVt0bHJtyuewil9ku8gO1MtgATpY1Ho/RarWwv7+PZ555BtVq1WXFUgHC7i3tWxTgRj3vIzuGcc/GAbPv2aTgvCg90QCsi9B+HqIQIEUNYBw4+xhlUunN11bfpHMzqURKTYAmWZqUyWyA+ShS/k9T7mw2c7el6LVxy8vLqFQquHHjBm7evOl8rWRq9iykttXXJ8tEVPK3mrmOpQI33yVzs3eoqgai4OubC1sun2FZ6nclUasiaCmzUROfNXlqGdRqyOw4jgyI4REvgpoKOMoQWS4Da3QsqaVyrrVvbBf7TY0bOLtG9PDwEMvLyyiVSg5wKNSxvnQ6jUKhgJWVFecOIEjr8S6OL4C58+U6Bz7XgzJ8zjn7yHXKevgMhQg9s6wBZGyTlqfCgc4T51Dbx/nXMfTtb77HIEGeKOA8W41ZA590XXLc1bWkboCQ1maB1wfIGmzH2A7VgBmJzfVOq4augen0LC7k3r17eN/73oetrS0Ui0U0Go05DVrXvo6b3d/6ve1LHPmElag5iitDP1sEI+LAPERPNAD7tC/7PRAfVau0iGRjJyiurUnIV6YFN2XCZJBra2sol8vOh2uFAl1AGm3Lc356YUCxWMT6+jo2NzddQI41Rar5lgzfJjnQTaimM/ZpMpnM3W9sNUvtK+tRALZjlWQD2/HTOukDowSvGhS/18Adgq6OixUCZrOZs07QV0vGyjoUfNT/qWUoQKjGSMFI20Q3hM1+ZoNtFPDG4zH29/edv7pcLrujMexbNptFPp93kfD0p3a7XbcmCJR2bK0wpIKPMncFRI1hIJBRaFCzrVoeqHlSGOV8cJ46nY4zZzM4TQUvBQdtswU9XRP6PhNo6CUj6l9VAY/rud/vzwlTLNeax3U96H7k3tO2WWFSy+AdxsfHx3MauboXeBSJggPnjADc7/fx5ptvujvd6/U69vf3neCj1ji7J6N4XNzzvnd8gkmo7CiFx5bpK/9R0xMNwO90ms3OTG+5XA4vvfQSvv71r+P27dtuIarpTzesarCpVGou2xIA1Go1bGxsoFarzZ2zVaaqzM2aUa1pjW21GqEyCdVKrLam75JpUVv3kdbrs5Bo3fqOFdDU1KnM0zJLZW4avUsA4V3KNi8ytTLtt5oYrfaiGpT2z2pQ2WzW3QWrGpTeCcy28jue+1QNnXPJtbS8vOxuFuLnOj5sA8fOzoX2i221PlQdN+ub1YhmX8YljZC2c6vAbtvBdWTNz7pW7Dqxpn9+fnp66uIrKIho27W/tCBQWLBXROqetGtNzfQ6nlbQ0T7wmUKh4M7v0nKgpn+2hXEK1q0CnEXe7+7u4vT01KWp5dErXnUY2p+Pgx4HOL4V9MQDcEhK4mfKxOxGCmnGSSbTV25ImrN1xUlm9hkLSmR82WwW1WoV3/M934MPfvCDOD09xX//7/8dh4eHc8nhZ7OZk7IZxTgej5HNZtHv99HpdOZy+77wwgt49tlnUavVHFPx+Vv5s7S05LQ79fMqA2Vf1Jw1m83ce9RI1Iek2s9gMECn03FX8DH1pkZuWumfGr6WA8xHEGsQkoKG3qSjn1nftU+TVS2VoEZGS5OeFZIAzEUFax8IQGpW1aAbNWUycpnX0RHQmG+bghfXB9dDLpfDBz7wgYcEiXa7PXeulOZJam6j0cidM1azuloTFDSsIAj8/9h7sxhJs7Q8+InILfaM3LOqurburt6nZ+/pRmwaBkYwMkjMhS8swBZXowHZjIQQEhcsZhE3yJIHZFkI+QYhYdmyBNgsI2EkmDGjGZZZ0LR7rTUrt4iMNSMyM+K/yP85+XxPni8isqp6TFX3kUKZ8cX5zn7e593OexDAnUnBkiCnkvtwOAzSuI4P61NJXDUamUwGCwsLARiUGdLwjgp6uufUI93NF5SwGSt5b28vgDC1HwCCg5qGkKVZhnURmLkeuNeVPlDaV9W/M0PqgMeyj46OUK1Wcf78eezu7qLT6STMT7zN7vDwEBsbG+h2u8GEQOl4OByi1Wrhm9/8Jm7fvo3l5WU8/vjjeOONN7C9vY1isZg4paD7apxzlqZxkqn/lsbsnYWme9ti78WYtHtNDz0AA6O5H52wSQbOy0qbvDSAHJVGtcPLcNDlMxJZOkXNz88H8KEHIt+JOVGofZibWAPnz83NJe4GZVkOpNpOBSQSTld9KQevZajjChNBRYl5vV7H7u5uIuSm9k8ZIpVsYt6rmj/WHpUyleFQr1AdD+2b2l/Z/phES+aAhJVAreXq+KlE7r/7uqBEq8BAwKAkPhgMggREdTPzkWlTNb/2j8BLpkLt8RpK06V1vbRBmScFH7Wja7vZFzJBVHF6fp1ftl3Xux8NYl5lVpUB8vLSCLLuLf1ojGtlCpQZolaBR7Co+tU5d2ZdmS51nNK1T6ZB1zDHuFQqJSLJcU6Gw2GCedP1y/qoZeDVhNPT08ERi23x/R4bs1HJ+6vljKK1TptGJd/7k5b7INMjAcDvlkRCQcmHtiwu9P39/QTguOMHcELogePNRJUjN2ahUECxWExwzQ4EKtE4AGiKESwFIXdQYtlsF4lUv9/Hzs4OdnZ20Gq1TkmKaYmEyjelS5gKAkpMFai9zWyr9lnVm3Rs0djaPo4OPi4daLuVyGq/KLkpke52u4HwkygqaBMoKM2S4anX6xgMBiGwgjr+cD3t7+9jamoqAC/r8fnWgBvaBx1DtsXVqfyNa5d9VYBRiY2aEx1bXQNOvPWjzlVeR0xlrm1lYjsZmESPQFG7ACCo9ckEcD/n8/kEY6G2WB1HHZujo6PAwJGRImD6OHi/pqaObzfTuNvKFM3MzIToWWSAY6EwNW62RlCLnQV+L8XTIwPArn7wZ+PeSfttEsk2VpZLsLHyRr3DpN81vBztNLTH0YuVqi4SVZde1euWErDab0ulUiKOrY+lPnPJju+4vcolYe2bEjZudgBBZcpLCra2tlCv14P6XG19TmR9LTghcuk5JlmqKl3nxm1yetxF+0RJRgFYJS+WqedFNSnjpHZn7a86ZrGPR0cn55FZr8bZ1vFRia3RaOD27ds4OjrC/Pw8CoVCkGRYPtcJCbOuHR1XStHUGmi9HDdnPPQZpWSVtphPbZUqnanDma9XZWZUnQ0cq4T5nUATA2DV6mjbFdzUt4IMU6vVCr9RyiUgc3w5Vtyb7I+e3VYmh23lFaJ8n6DI5EyQAnA+n09IwGTEaeogDSAoc8x9z3Nc2A61ZTt9m1SSdVrpTNWoNCm99nVy1rLOIj2PSo8MAGuKTXzsmeePTcoowEwrLzYZLvmklR9ToSi3XCgUwsZbXFzE5cuXkc/n8frrr+Mb3/gGer1euNlIw82R2FN9yE3SaDTCAfxyuYzl5eVErGfvA0FEuXwlqv6dBDjm0coNTKaBfT08PLnfmFF3tra2gtSjUrI6qvC5tsFV0CRwLtU6YeX77C8lRY3bOxwOE7cGqQSjYT0dtNkuSvmcHwZV4di6pM41oQ5rrEuPz9DBR6Od0dmGgFypVLC7u4u9vT00m030ej3UajV0u11sbGxgdnYWxWIRH/3oR1EulwGcnAlW6ZegpUCtNk01RahN0IONMD/ni+NAVbb7FXA9ubqWzCmZBOA0g8L8mo9tdvD1sWdbYmYFnqulZ3Cr1cLu7i52d3eRy+XCUR0Gt6HHuarIc7kc8vn8Kc2AnjggQFcqlYTkr8yPR1DjO5yTQqEQbqzb3NwMdIF7kQ5V3W4XvV4veMS7sxbLrVarqFQqQZ2uTIGr+ydNsbyTgnEajWVyhjtW36gyztKPUemRBOBHNal6h56ulUoFU1NTqNVqaDQagcONqYDUzkPVqXLcuVwu2H6coVDpQjcVvwPJaEBAUuLhglVnHb5L2yfLIGHl+WY/10qCo96brI9/05iZ2GZUwspxUlWb9km9nLXPSpRdmvf2KRH3tuk4aJ5Ye12i17Jd8lSJZGrq+Lq7u3fvYnd3F41G45SjDJm0QqGAQqGQcFYiKKq06NKgg1NMYlDtgUr1KvnGVNQqeSnAe/36ns67ahQ8xQhtzMasfzlfZNTISA2HQ+zu7gZmiI5V1OAoIxLbJ142GSjuVT+OFmPwY7+z7RoCU9ettk+1DmllUqWtTEUaDXovJdMjA8CjJFr9P41zcSIY44a48dPq0Lyx+tJAQeuN/Rbj7mdnZ1EqlYIDTa1WCyEEY+ofSkvk/gkk/E67j95DGpMGtH8qCZJIuIrZnTFof1ZJmEwAn9NOrd60uVwuEWhhOBwm7GU6tmoPTZtvnWd1dNF+s/1O5HUu1casAKDg4Wpn1RZouzXoBROJrLbBHWt8nnW8CZTq1U1Tw2AwQLvdRr1eDypHeulSwqGdkF7zWqbaPl2aiK0VHXsAQW2sKnqWqX1zD2j2nRKdl68aEZ1TJgW7tHb6nGo9MdMH3+eYcW2TGXLpkqpidSzT8VEGT30LpqamAqNMgNT2OCj72uBvCv7q/U07v16m4QDsDHA2mw2XeNAkpicBYgzBKPrp62RUSps3f9/ri5WdJl3HmMdxeDJpeqgBeNwguiQ3aVkOfrHFHKtP0yjCr3liYB1jArio+WFAhGKxiGw2i+3tbezv7yfiBGt9DsAkZnSi4BnPUqkUNnZMAvS2aj5uUrUfq0ckgMAhAwjBP9TZh+pTjcql40TJ2CMFOQArsdaxZ91KuEh8fK4VDDwfy6AKWq9icwLq8+3tBE60E+rNqseegJMwmG6b1ohcWr/m075Q8uFcUKKlMxDtgDRluL1Wy3eir8nboA5PmlTCU8ZCQU7XlzJNXNMKYroOnQHUNXt0dJSQ9JwJUCDXj9qMfc8SUOlJPDs7G7zJOXfcv8ViEYVCIcEwO6Cr5on21Xw+H67idID2/aLrWdugjKCucUrqpDOxvcJ9QDMEE0NckpFTD/VYe3yt+P/j8o165u/qGKSB9Kg0CT2/l/RQA3AsnQV0me6HmznLO942B99RbVcJmH/5GQ6H2NnZCY4ezvXzf5UoVUqbmjq+RJwRchxwx3HTLhHEGAp+p3qOHsJTU1NBzax2P0oLJA5+/lVVcjp+2hZXXbpE5MRdv6uHMPMSIJz50O8EBFVNqzpYx1TbpcTNJTzXQBAEtN/KdLk9Vm2MfJ8BFCqVCnZ2dsIzEvC5uTmUy+WEpkTPPDuT4uPnwKfjpIQ/DXj0CJqqip1R82M9OuZuZ9Yx0PJ8fLWNvq51DxGsdZypnWI/SqUShsMTr20yuQyUogyX9s/r1VMPZIpiminXyMTWna5nXcME4F6vlxqAh+WqnwETGYpMJpNgvCehx85Y3kt6ECA5CvxHvXOvQPxQA3AaNzRqMHyjT1rmqN/HteFeuTZN5H717lBy2f1+H3fu3AlgOhye3PqiZdIjl2oiEgU6dK2trYVbjpQQTAKwTqB0HGL2LtoVDw8PUSgUQlACej/rsQfghOCq9zLVekp0XFWmoMbvHCdKeyT4TvCU2AI4JS0BQC6XC+8wQIgyBy41uC1dwVlVdkrYSSTZXpfWCTZqz2OZdLyjREIGbjAYYH5+Huvr69jb2wu2Sjr6LS8v4/z584FZ4lqhjZBt5JySeVIzgUuUavt35obOXAQkl3adcVLiT9W4qnWZR99xO6uuV62PTKDmVQZxOBwGEFTtwNzcHHK5XFir+Xweq6urmJubC1qbhYWFcHZfmT1XJXPMyVxVKpUwd2x3GmMFnDDsziAyH50be71e4ihat9sNISq53tVxTZncfr+PVqsV1t/CwgKWl5eRz+eDxze1FJ5itM6ZhUlSWj5n/jT/JPgwKsUk6HsR3oCHHICVK9NnaWkUOI8awEm5orTfJwFjAl0a16iODcPhidMUo1l1u92EOspBUJ+RYJJjpzqM5z+Zj233jeF2TW2jEhKVyBQEOW/sD21H9ODm0RASPVVRqtSrXqT01IwRdmcatH3qaKL91T66TZ3P1f7Jd/S4iHp+q4SqhJBzoOCpUpyrfPlcw0SSYXFzgP6voQGZl1cQViqVEBGJquhyuYxisZgAVpoGDg4OgqQcs/mzjyqtcuxVitLkzIoCr9fBdeBaIJ1DBXJde7q2fWxdwuP/nOc0yZ1l8DIN9QLP5XLh6Bzb5XZajrGuc3V0Uxu+7m/SCy3LQVfHjWv26Og4Mlq73U54mZPxoOezazdULc/yyTgzdgDjkKt0f5Y0TjBKA+k0bUssnz+LJS/rfkE7LT3UAKwpbcD9N80z6eKYVIUSU/3oc6/TwW3UZCthInipF6qGfnOVEXDi3MT3dZNTkmZQD29HbHGPa6P2TyUH35SZzEkYSUr5DB+5v78fjnZodCFy3IxXPTMzEwikEyAlpjqXbFesT/quqr8pkcQkfwVVV9X6uCgT4ADhY+7jriYIArDakQlQTuw5ZtreTOZY1VwqlVCpVNDr9YIzHteDMhtsvzKJejSG4JDJnNzxrHOm7eFYKcjomPi+YaJDE+eajAgZGeCEYVKPdc6LM0NpezLGKOj46zrSfPxOsw6d2DqdTth/al/Vs79sI23w1FooIxHba7oOvR++T4fDY+m32WyGsVBpXG+44jioJsP3DxkyAAm/AtW20PEyRh+9P2lpFCjHnsX6npZvXJ5J0r2C8CMDwA9jmoRR0KQqL32HEqASQd+wTux1o+dyuSBNxxiZ2IaJMTAKNkAyjGBa30iEVboAgIWFBXQ6ndA/lYCB4wAKKysrWFhYCGq/tHFlW9iXtHFV6cglMRJvP3qjY6t18XeXmGJJf9P8LoUBiDIYMWcZElaX+PRDh6x8Po9isRhUhqpCVCnc14N6ozvBU/BjX7QtHDf2lVoP97hVqUtV+3pBgM99jHFRYHctk7ZbGQ4tz9ewM9VumiADwBjnWo8yL+4foCpudWKK7SPvV1ry/jFSGo+ZcZ+xTTz+x3nkvKiGhuNCsAYQtGgcj7MeRbofSfJhTY8kAKdxN5OoHc7C9cTq9HrSQGqS8mKSpy5olkP7EsuPcfFKdAEkJEnartyL1yVob4vWp/328Xd1tW9iL296ejp4d5MgKHNBkOAVjHo2lfliDjRsC8dR60+L/OVjqmCtY6zE1/ulKkcHAQAJQusqdLZFgdkDWOhxEZXa1aaskq+OER178vl8aAeDKUxPTwdPdZXqdU51XmJrQMfagYLPVJvj60zXr6pd2WdKV3pZgbbJAVjH0cEvNncsR4/qcA5YrvaRie+r3wZ/J8OsZiL969otlp+2J2P70hlh/s95nJmZQblcDipn7iGaK9RvQP0stB2ZTCZcjgIgOHFyjGNt1vHR9TLqf80/rpw0GuVzHCt3FN1+p9IjAcAxCU1/A0arf0e9fz+g7GX7gvD2xPICOLXoef1XuVxGs9nEt771Lezv7wdnDhJmlslNRTUd7TaHh4col8uJ8JNqOwSSUocvUOf+vX+q2lLnLFUdanlqa+XtTU7AhsMhKpUKrly5gpWVlcChU13q4O6bmlI/v6cRYPZHbW6dTgeDwSDheMXf1Gat0hPHUPs2GAxCJDIfQwKpOqJxfHR+daxVAmU9vGWK3txU2zIfbXyZTCZ46jabTQAI0dbc/que0JwvElofM4037oCnhFwZAq4NqqM1zjTXAoAAFFqvOiRRWqNNm9Ky+j7oOWafR33GMl2LoYDENaKRtdgvqvO5ThuNRpDgySQx+hU/rhFSBkK1BBzPtPx8Rx3KMplMuOWs3++Htl2/fj2Md7vdxszMDJaWlsJ94TQz6AmMXC6H27dv4+bNm7h69Wo4X643mzFSlzIGaUDn+yYNHH2/jqPPo+r0fF72qN/HtW2S9EgA8LslcZMxFOX09DSazSZu376d8HrmpmRyIu3HZHyT63tp6i3lOGOcv4KPgqF7/VKa0fddelPAZtSdarV6SupQyYVJVZjaBiVS2le3C7sKTUGExF5BRIEkBvAEUtYfI5oqhWm7nUnj+BKQhsNhwkZJos8y1ImPNlldAwpUCqisxx3atM8OVhpv3OdEwcHXUQzEgBMtAdvuWhUFRGeudey1Da7qj82X5tf+aB/0OZAMmqKq2OFwGMLDUtOhsZNnZ2cT3v/KeCsjqKYGT6OEDJapfgTD4bEWIZ/PJy7x4Px5kA73/lZ1NeeJ9bCPk6Rvl8T5zy09EgA8jgvSTT4J95MmicbKnHThxOqOSV8sUzc5v/umzWaz2Nvbw61bt0LQd7Vhqe2MEgmABOfMDaKb2uv3cYkRYR2LmPrHAZnPYnYiAq4605A4TU9PhwhgXnYMtGLaDUpPCrDeL44hy2Ob+L4SJgdEleZj4KTvabAIH0edCxJAdwAiIKkjlGoXKDEpU8O8Gh2L4EfJTJkllbx0jCgt6vEiByaXHFmXvqNMCIGWY8zfCUzqSMh2ML+CMCVmXVv8X9vkc5O2FtL2pj7TPupe0DKozmWfeJMRvYc59sq46Hg5w8Ny3a6tvyn4qhmD62QwGKBarYb468rUcT7oIU1mgdoEjfAFIKwpBfoYjWRb037zcR+VnEZpv0eVM6ruSep9EOmRAOBRKQ3kgLgKOPZOLMXyxiY0JgGltXPUguHmIQBTRbi9vY0bN25gb28vXDGmnCcJk975q2pqRtThuUoN7s726sZW4srvsbFzgqTSixNl36Sqelaunc954F/HzcFLJW89S0tblxMtZUZU+mPbSCz1dhjtm/aD7+uc+Xjo76xTVfnaBu2fai74V6VFgjTLJdiqVzL7pcyDAgIJMz2OPWCDOvCxbbq+WLf2QwFfvdrVXsh2KFgAiN5Z62Osa93LVRBSUPC8un51XXsZBEAFNJ0bB08yT9xnrJNBNbjW1f4f0xw5A+QmHAdgBV7dn9p+hpxcX19Hs9kM3tqcTzJkpA9kjLhX1AkLQOIiCF37MToZYxj093sBwVFM01lTWjvGCXxnSY8MAE86WZOA5CT1jJuASfLFpEy+6+/pZmcs2Fwuh4ODA1Sr1cBJ+3lS4DjkY7fbTRAGlS4PDg7QbrfRarUSIRWVUCuxdsnPuX1uclct8z09DuLcPsughyZvRMpmsyHgOx2vKPHoeAMnsYMJOEpIddyV+DrT4epX1qHHqPTYj4KySnd0KFPQUMlXgVzLUBWeAozG7ta1ouEoXcXo0Y3YFnpJExxVCmO+WLQk9pHtJNMW85hm+1QNCyDYPpmX9lq+Q4Biv3VMVTLmnuB46Pvsr0qNBHKV+p1R0LPFMRUzgIQXtjJ4qoIdDI5jbe/s7GB7exvdbjdEwpqfnw/+F9VqNYQB1WNjbtpw7YJLtTo/aVK5zyvX2Pve974wXjdu3MDh4SE6nU7Ya5lMJqiltc5Go4F6vZ44UcHTFNRcuRnI6QWfp9HhNADne/p/Grin0WMXHkbR7XdCKn5kAHiSlAaGCoRn5WzGTZ4CzFlTbDORQFASzOVyWFtbQz6fP9UeJRAayYa/DYfHNikG8qA3tTpPaft9QXt/VXqLSdFMSgy1n8zLOinpq0pRL5hnGUo8vT4FdiUEXq8ecVLJWMFHGQYmegkzUpRLgcAJWLE9Cgq+PhSw9MiRS12aj++pvdH7z98VBHXeqG5UAHAJUMfcr7xT1bjOhasxtd3KuNAxStecEn6fAzIx/F/Hm8yH9k0BwOfCU6zPumZUYvb17hqMVquFRqMRjvosLS1haWkJCwsL4eiXx/zmu36uX9vvDGtsTes7ule8vQDCVaSLi4vY2tpCt9s9FQlO1f8cg263i0ajgf39/cBEqBZD17CDbIyuxFJMQIklHwvfU+PKnfS3e8mXlh56AFaCDTwYtYVzjpOA86jJ9/bF8voG09/8w4XNs4ILCwuYmZkJUoQTf6pNSSzVE7jZbIZzoPSGVichtkelMO+DctW6+WLMhxN9txWq9KkADCBIaQpgOqb6USKtc+uMBetV9VpMqlDgZB90TFQS0v5wDlxa8bl3260TY1XjcmxVba7AqPPEMVCbuoKj2xMVlDSqF+vjX5UcYzG5vZ/KQBDoNVSkg1BMSmK+TCaTYGoUSDgm9KRm3c6UsS5dQy5l+rwzn4OzmnRcam00Gmg0GkFT9dhjj2F5eTlx7lrL5kfV7Zp8fGNMsjN0LF/NBjq2g8HJHdFLS0soFouBsdSxU9MNP51OB/V6Ha1WKzATGqHMTxxoO52x0bk+Cx2P0exRwO4MqL43af1Kr2OM0KTpoQfgGHClgfG9gnPsPZ3E2CTEJtlBLTZpsYWjEpESaIKUqtXUhgSke6/yf43Kwyg4CtAxBiC2wTkGsXlgvhi3rsdaXCJWQq99U2BTIql1sgz16GW/XdLy93Q+XWrwvmn9Pr5sk6olY2W42pZ90z4rIdN1osdvlDFg3X5chnmVUVIbayyPt13zxOZBGUCOvQbt1+hZJNJaP/vmaljWT2ZTVcm8wceDyejY6P5zuqHPHVR1HHS9uGqcjAGZ3MPDQ+zs7KDT6aBUKmF1dRVLS0solUrBmUnXgJ4QcKYmNr7a9pg2iX3RNcyz/75Xs9mTEKSlUgnNZjPh3Me+6d7MZo/9D1qtFur1OiqVCgAEwYCMkO4VZbIUgL3tnmI0XcclVs690Hsve5J891PXQw/A74bk0hMJsp6zo6erbkRuGm4iJWRUDZ47dy5ElOKF2mncXBqn5xISiajbgGOJbXepUvvtgO8xoVUynWTjjON0YwR8HNMUk0qAE8cslwhj46AaBD5zgqpObLF2jZKGHNQ5dur1TCBQgFbwVknftSKu4madytRoPa5t0Hn0eVEGS6VX1b7oWPvYOoBquc4Uu3TmKmf9qwAMIGib+v0+2u02Go0GMpkMFhcXsbKyEs7J6hz43tRnzsD7XtB3vW3ME/vfUyaTCX4XjOucxlwASDBNnU4H29vbOHfuHICTI2PKQH+70/2A77czPZIAPIqoTkJwRyUvZxQHltYuJwQxoqmJYEuukrZQHtrvdDo4PDwMcZHVS1VvDNKjDIVCAY899hh+6Id+CIVCIWEz418Nladtd1sq2+3SohIF/q7ct0pvzK92Rc3DsIjdbhdbW1s4ODhApVIJ3r0q6en4ttvtADqqHVDCzzHXwPeU2FQKoVrTbZkq3bE9JD4k3Aoa6tGq4K3tAk4CTuhxH1ep6xxkMpmEuUH7paCkNleCL3Ci4lc7MNvO8WNcY6ojKS0qmCrIqtPY4eEh+v3+KZBRwFepTZkEPR7F4zBs43A4THhvK4DqPOm64LjqfiEDpA5WunaZVEWvMdh5frbT6WBnZwc3btzAYDDA1atXcfHixeB4xbL948fJdO3xmlHvk64njhu1Pvyf7fOjcWq3z2SO44LPz88HO/DOzg663W6QaHlDEwF6dnYWg8EAtVoNr732Gp588skQipJ7gRdUOCMQk1Jdc6K00Ne6P4sxyKOYZn/f06TM/P2mRxKANalE4tzjqDRqQtPKTlsk4xYC88XAne9RncO/5Cz7/X5w8HDbrarCNGWzx+EGq9VqAF8nWszHDRtrU1ofRklwMSZEVbAkHKyXBJtOO4zwBJxEy/L4zHyXBN89w2PSowKh9k//+pldt3uSgBOsOB/AyQ1EJNTOhMVAQsdE20dpRIFTmRodDwCJc8BeNsdILzPQPqtkptJpTDJnG3lshVqWUQyqMkcEV7ZX1yA1Hlz7vJSex2DILKj6OLanVELXvqQx5i516tpR4KYk2G63UavVAoBduXIFq6urKJfL4a5cBVx1tHJzkTIiMaY9bY04E+x2WP1f14kecSRwHx4eBrW+n92enp7G/v5+2KO6pphnnOYnDTCd2UhbP7FyPMXKSKs/rT3vFBA/8gD8MKRxE6zHizKZk/iyANDpdEIQDg1dCCTVhV4ej0PELhdQyZXtU4kg1n7gNDi7lMw8XOgx+6puPkoYBCwSBBKpZrMZjj6oMxJwctZUVdMxBkwJM7+rTTv20fElgKiqTp2eYmDlTICr7BVs3YNax1DHke+ohsHHkmtECaMyKhwHzeNz5OvUf9N55VrTfutxJPdriJXHfpOw63t6FKvX60WZ60lU/9pu9Rng95gKmnuLDHCv10O9Xsfe3h5qtRqazSaGw2G4sYuxtnVPKugq46BJtUa6XlT9rmvPAURNBeOSMkOq2lemlmuVDJ1fjqEhZ70976XT6ZEE4DQJbNLkBDOtjrTFlfZOjMPy7865A6djJ/OquKOjIzSbTTQajYQtTyUftZWy3dPT0wGAHXydADohj0kW3l7nXh1wlOCpJKkE4+joCL1eD+12O9xlq2rNo6Mj1Gq1wEAoAVBJguCs0msMTFyqVelDibJLqSrx8n91bHNHFo6/MymcP5WqVUWoa0TfcQlJpWGOMYBwWUXsbDEB7PDwMKgWXXpx+76vG22Dt4/5VNIdDocJplIdrpQBcdW9zgOdrlTVrQyAMidsY2x98zcFYKr7Y2PMNhwcHKDVaqFWq6HVamFnZwfNZhPtdhvD4RCLi4tYXFwMTldc765mVh8NrYNrQB0t01TXPl+6n9XHQpl93/M6Dmlgr+0i45nJZEKISjWtaIrV73m0Pd7OUUAeY7y8fN/r2u9RtEuf3wuWjEsPNQDfLwDeb/JJTVtYmkffHQXumlxKoCPH4eEharUaGo1GyKNHBaia0w1EGxevDnMpi21yjlwJg/dBN6WDfWwj6sbW/Po/g4PwjCHvHVU17u7ubrD9sR0EkkwmkzgWEZPmvI0xlZ8SNQ80oVIix5V/afPUY2AkWq7yV/MCzxMDSQDT7wRBAgZVfkqs2T73AudftU1TZdztdlGpVBLHeLSNmUwmXHvJdaPSEBkLvexAQVVtq5wjtpVjpG1inU7UVXXL25x4Y5aOmYKHxpjWPeZmBAUKZyr0d/oj1Go13LlzB/V6HfV6PVx6UalUcO7cOVQqlcQRMAVdVen7vHAcuGZcm8U94HvUtQl8ngaMuif5cZNTbL/qOOvajx0Pi9G6cbTYQdjbq/2bFKD9Hf9Nn/t3F0IeVHqoAfheAHUUSI4D0FEDn8Z9eZlpE+6bX39T56C5uTmUy2XMzs6i3+/j9u3b2N3dTVxMznFhcA1KDAxoUCqVwqH7GIHWje0EIm2s0vqnNi1V5amEovZM3ayFQgFra2toNBrY2toKQEGp8u7du+H/tbW1hKOQxo52iY9jpOCmEpY64jDpOClR1lCNGkyfKl09RqUEkgBHwFUpiPXwiki14/vZShJXqkM5bmRKCAiUUDKZk/OcjIRFFXSj0QjRxjRqFueR80sGgu/r+KhKUtcvJTFVXXa73VMAyXJV+lQA4hiqcyE1RBpmM5fLhXarhM12cl2rR71qHNR5SRkZ9r/T6aDRaODOnTshFvtgMMDc3BzOnTuHxx9/HE8++WS4aYpt0PO1zhTpGOnFGABCCEsF8G63i+Hw5Jw3115MS6Mg60wG/+/1emg2m+EIkkq6sb3DNqbRLt1TnhxcnVmfhE6fFdT9fX8nTWL276PynTU91AB8P0kHnv+P4g75/6Rlj0ppao60OlRCymazgdAfHR2h1Wqh1+slVHvcIAQrJTjqRc0jR/ohEVAA9rHw8UhbnDFpVwFJx0s3FYl6LpcLQQtyuVyIutNoNNBqtYIKsNFooFKpJCIL6VEPJxCjpEMCAmNkq4QEJG2KzoHr1X8EAwAJaY7903ed2dHfFIBU6tU2q2c0VaMqTbH/MVsi36G9nQ41Ol5q+yOTp9oK9bLW52wD6yQzwDWtErKqmtk2NQH4GVSVpAEkAnmok6KvKYKUA4WaF7wPvm4dPNjmmZkZVKtVrK+v49y5c5ifn0+UrycRfN1pvzjH3gaWQYZJzQo6x26vjjGAvoepcWo2m+h2uwmnOh0rpS9pzl36PM1k4UnXq+4FbaPXxZRGl33PnwUs+Y7PtbZP891retcCMDAZ95LGCcUWSFp5oxaIL25frMqFUiIg0Ozv76Ner2N/f/8UmCiQaj0EYAaBj/XNQQE4fURA+xVjKJxYsR38TYmvt4FEamZmJpxLXFlZwdHREer1Ou7evYuNjQ3cunUL3W4X9Xo92Nl4RIJgSEKum9slK/ZPpU8HKSX67AMlFSZe1uC2TDJQwEmABZXmdMy1LhJYJ/ppdkNe0EFpSTUnXEMqUSmoUVWuGhRdlzomelWd22mZFPB0LMkcqPTExLGgTVMlW1/HzjSrjZ99dPOBppikpv3QsfKkIETJM5M5Piq0vr6OCxcuYGVlJexRzpdKsMrk6nr0tar1sa0E4EzmWLNBTYm32d935ljpTKfTQa1WQ61WC22O7WFlxLiHlalQdbSbmFhvGq1zZjeW0n6LCTM+X7H3RzEEo9L9gK6mdzUA30+KgW9sAaRxULH/9bs+dycfxkM+PDxEo9EIISidy3NJCzgmiLlcLpSh9eq7aQSYv+lm8bp1bJzz5nGXWDQqvkvVLBNBZGZmBsvLy5ibm0OhUAjcOs9dzs3NYWFhISH9sI/avtgzl7TYLnfi8bYqwed7auf18VGnLAIkCXFM6vA6gWSsZWWMyBSkSVVciyT+zMvzq3qsRiUSXQ9cB1yTLFPf4zMHwMPDw4RmQu3MVCVTmlZAdYZG12PM6zvGHPv687FVu7TOrUr2yjgqo8u5vHz5Mq5evYrV1dVw0YQDFOtRe3eMgY9Jnc6s0BlTo3+NAlpN2ndG7Nre3kaj0TjlNOjrz8d9OBwGiTx29jetDbG+ah+0/HEp1sZxtNnfG0er34n0UAPwKI5n1O/8bdTgxjbFqLrHtSWWJ/ab58lms4HDJddJaa/f74dbVngzkqrS6D0MnEgV+XweCwsLKJVKCTsdkxIWJY6xRey2JQci5YhJpHu9XiBiqjLUemgro8REoCBwLy0tYXFxEbOzs7h9+zY2Nzdx9+7dRMg/4ET1qw4+6hykYMjfSPBZr9+tqw4+yuDwHVcRkzizX2pb8zlXWxvr0uQqdQUJvgMAlUolFVy0TgZX2N/fR7vdDswM143bzwncvPjDmQquFw2aQUltOByGgA7qAKZEV6VUPdfr9m/ODd9nX9RLXh2CnBjr2uM1e2QAWDfnTRkIZTbq9XoArMXFRSwvL+M7vuM7gtc9NQq9Xi+hbTg4OAhjogwY14RqPNgXMqTarkKhEK4e9f2q+1PHWhkPl5ZLpRIajUYqI6jr1EFxf38f29vb2Nvbw8rKCubn5xMaDl/Hmhx09fkkwD2Khsd+Gycpe/lp5Tyo9FADcGwwR4GuvzvqnUkHfRKw17xpHLqXpRKOgi+/A8cLv9VqBeKqnqUAEhuSm5xHN5TYpy08tknBhM/4PgkF/0/rD+vWIxjAifOO5lPgUNsxI1SRCF24cCH0pd/vo9VqYXNzE7lcLsSlZTt0/NwxJMZlq7pNx4XjrGpEV/U7OGv/RhEjJYgqMZHx4FipdzAjnrm0yr4qg8A6CDwsnyDEWOB6ty/V2lwDKrXqPGn9ajP18dc+6ZlulzT1o+p2LV8B2LUwnkclWN2Dqt7WNRIzWyjI1Wo11Ot1ZLNZXLp0CZcuXUKlUgl9cputPvP+aV2+/vTD+aOTIdeaMlVuOiLY6p7zNZHJZLC8vIyDg4Pg8KhArky2Mp+si74YZEBj/hfjJFRNOo9nFXTuFzTPQs8fRHqoATgtPQjOJfZujEObtKxxbUoDBN2gVB+TA9/a2kKz2QyLWTlXJZoqLamDCjevAmyMa1UCoFIP8ytR8XJ8DBhSUo9HKWeuhJqSD/8nMaFkMzc3h5WVlQDOt27dwsbGBjKZDC5cuBCcYICk9KggooRVx1ylEWWGfI6cOOpacSLm5Wk5MSaEbdA86nWsxFmdcXQdsE6V4FgOvZEZTnEwGKDT6QQboNfNsighq6e4g6DWzXHwiGzKpDhYs60O9PzuzIeGA2XZaqfUdrJsr5/tVqZQ17h7jE9NTeHy5cu4dOkSFhcXozZevchey9d2xCRLl2ZVba/qX/Y1VoavrVH/z87Oolwuh7vFte8xExP3MOeVAXMAJMLmqo9AmsQ6jo7qe2eh6TFhQJPTqRhNn6S994MzjyQAP0pJCdnU1FQIwMFwd4x1DCChflaOV8tSAqDg7ICvQKAApapBJepahxJsT9zMKuGpNM2/2nat1wnB3NwclpeXw6Z/9dVXcefOnUCkl5aWQrlKDFQ15+Dr7XJQ8DHVpIwP343lV8LO/CqpKFOj/aY6Uu33Sty1Py4F6XiyXXqcJZM5PrrWbrcTHstaXoxg+XpyhycfW51PPldGSN/jPDiTqIwHkA5CPj+aP3bdH/P4+qU6mJ74w+EQCwsLuHDhAhYXF8O+VHBy6VcZTB0Pr0f7x0SmWZkyHaMYwDnT74wf3+OY5nI5lEolFAqFhHZBGRLueze/ME40GTMF31Fan3d7euQAOMbFpCVfoPpeGlfkZcfqim2ENC7OiZOX41w8g/23223s7u6GeMh8X493uLrL2+JElfWpqpNETgFX1U8uKThxiP31TR0bv5jkxz5p1CtqBWhf3Nrawvb2Nra2tjAcDhOxrnU89X8lNmwn1WkunTsw6nMlTtoX1x44UKjjlxJwl2CYNCSjt4nPgeTZXe23gv3+/n6IJU5VfrvdDlKxrhUlyLqW1KnNpToFElfjuto8Lam5JGYWYJlevjMmLIvjy3Pxsb1BG+lweOKkRpNPvV5HuVzG0tJS0MD43KlXuc+DMzHaDz5z6dzP9ir4xcYypvJXJs7XMRkd3g1OM5fvEfeW12eU9PWqRe2z9jNG62LMg38fxWB4GkVbY2lUPm3PWTBmXHrkAFgH0QfN8/n/scGPLXr+nzYJsXLGAW1aPXxOIsaLs1utFprNJlqtVkIC0bB1wOnjMwQJ5bxZH7+ToDKvhlXkh3UouMQ491i/lWgDSEgiru5ifg1soU4/tCvPzMxgcXER3/u934t6vY6NjQ3U63W88cYbwemsUChgMBgkVGysk4SZxDamdnN7XDabTdxLm8lkAhFSQsuztWrDZ591DNUmp3OjRIyhIp1YayAGjmm/308cydL5LRQKuHv3Lm7duoWtra1wfrrf72NnZwdbW1vhtilKf2wj6+L6IBNAsCFgqGRPMPO55ppXByN9zvFw9b4yH6qO5jrr9/vodrsAEOYbQFCVqmMU55/2bo4Rg33wqFu73Q5r7cknn0Q+nw/9diDSj9YRA9IYQGvydeh/XeOh64p7TZkLOqnpGuX85nK5cEmLAj/L39/fx97eXiJYCJ34qDWhgyfbE/NR0D7oOtffPY+ncb+lCVGxcfT/0/JPkvcs6ZED4H+u6V65Jt2swAlYcCOp6k0lSyXmvrDpsESHLHWGYR1s89HRUeLyB6bYeUNtswOxj4FLzkBSWopxxJpPz8iqpMrgHTxDfPfu3XBZO+1SSpCdWVNpz+3EHCfVALgE4ly/S6gqsXl/nUgpOJHZcPsf26WXLWg/+L+2gUwAAy/Qq5i/UdLb399HoVAIYKrtV1W3gq6OAxPnh3ZnvqtzoGOuc+JA7MTZ+6i/cVzUgS22LrXtzKPgywAlmUwG+XwelUolrCHVzCjo+rEsPUqobfT++p7wderaCGdW3YPZVcA6h773+Jt6SPv4k+HgmuG7enRN/Se8DE8xYendlB45AE7jaJjSpF1fLGkcUlq+syygUXXEVC9ap6oR1ZGJv+tZVn1PwbnZbOLOnTtoNBool8sJiRI4fYNMtVpNEH/gxCYFJO2eWqfamNhPlcj5nCo8lhUjQApQKlk5sLG8hYWFcHctCSoDlqiEynZpOQ6SrN+9WWP2Xle9uQbCwZfvKgC40wo/Kqn73Kq2gu+xLa6lYDl0uNL2Mtxnu91Gp9PB6upq0DqoGtK9nJXouvSlZhRXJyuA6LirxiC2dnxutJ/8TonUz7v7XLualU5FBN/Dw8MQPW52dhbz8/PIZrOJ9cC6VEvEdabSr65fZRpcG+VJx1rHR/vBsjnueq5aaUcMuFULEzPT+PyoicSZGh/ftP6MkmD1d2e6RtFPH6+zJKdVOlZp5fk4njU9cgA8KsWIOjD5IMYmwRfHqHpGpbRF5Koir8cJvNoj+V0JzcHBAba3t7G9vR3O1AIn6mWWTymJku/MzAxyuVyCoDDxPd2UTEpstN3aPjIGfO7qbSfEKnEoIWdkL0o9xWIR58+fD9HCOp1O8Px1D2NtC5BUw7NevUyeTAvfY15lkJxo6ny4JOSS3HA4DGPP+XNJju/wnLWCsqqkOTYEZIIHpTrGfaYKlsDc7XYTUpuCE9cCI1XpOlUzhXtK69rWfjgw6Pz7muccUyvAPumY6O0/BnUAAPEtSURBVJzQQ1rnOyZRct5p71Vv71KpFNYH1fKq/latCJMDH9vjcb89prIzMZr0PR0T5tM6CcDMo2vTGTsFVh1nZU58LvQ731VJOjZvkwosowSpSQSXUXX5e+PadK/0e5L0rgLgtAmLEUxfMKPSqPedCxzH+WmdvrFcxefARCLt7+umo1ptOBwin8+jWq0mQJUgfXR0fNsLnbwODw+xsrISVJIkurqRHWxVMtHftF9OiN2xSPsRK9fHMpfLIZM5ORPNYPi012qc5tg8uQpVj844IKSBh48BQVOByaVdAAkGiHOuc63nWsns0Hbp4699YFkahIQ2dYKJriEHXe0fgATDxOcKQBrcROeakrSCq+8Nba+PpY4dy1CVvK8tfY9lEtzU1k+g4l9qADKZY89gBr3QMdYyVOpNG0df52nt1fnWuVRtkr/v7/rHzSNOF1i2asK0ba4titXFd5UW+Bxre/0594KmcXTSgdFpq9OYtHyj6tO+jgLqSUA6lt5VAKxp1GLQdK8Dm8b1n+UdB++ZmRmUy+VAyCiRUS1JgqRARmLFTbG/vw8AWFpawvr6Op588kkUCoVEcI7hcBikgHa7jY2NDdy4cQONRgNLS0tBvavtdvWwA657PetmU5U56+Y7qspT7lpjBFOq0GMQqvqsVCooFArh8nQGm1fCqypFqnhZZwwwVGUXUy0SLAiQLM/LijkXaR0q6bG9ZLRUXcj3NU4zx0uDbziYMi54NpsNYQiLxWKwcyrTAiCEPtQ11e12E+PIOjXqVQyYNUIY281nKr1T08ExcWZN966DB79zr2j4TY6Plnl0dBTUzsViMTjv6TtkZHVcWIY6WnGdK0gpE6daA7ZfwcsZPgeAmDnHgVdV37pXXWNApoz3izNiHWNN65l8/ZCxy+fzKJVKmJ6eRrPZDF702l6+nwbmTnvHAbD2KY0hidXp9Xn7zvJ/WtsnTY8MAKcB6KiUxi15uWmcjz/376O4vVgZzikq90mCxQg45L7V+3MwGIQNUywWEwtT6+DZ2bW1NSwvLwepFkgGrVfAZpB2Rv9ZWVk5xWFThamEFjh90QF/4zMFfuZxtbuPhbZVx1nVxErEecRieno6cact+6mMg0uSKuFRLcx8/E6GiIwM36emQKUabze/672xfO6qRAdVqlgJRgr2CoaZTCYwKCSs7K8Gz89mj0Of5vN5zM7OBqcixhvXvunc6zrnWtU2xCQiBWeOi4I2yyI4sxwNyqL1qvmFDJavRw3J6WOo7SLwktGhUxWZMw1vyrJdVRszv7CNTCqBqkQai8ccY8xjoBUDvBgt4jhx7fIIWqfTCdoBmqHUk9rrpYqeZgm/UUvbrGsgRn9jffI2+3Pdp7GU9tzp9L2CqNP0s6RHBoCZxnEjaVKog5ROqgNjLP+oMtPKHdUeTSqpEXz9KAUJCokGuXYdE0qOjHhTrVZD4PQY8DD/0tIScrkc6vU6Dg8P0Ww2sbS0FNqjhCiNCWH5SnTVu5dJ1aH863ZVV+vpeCunToZEE1XUlIa870xuz2LdqkZV72HtN9tLwFPNhIIexy62FsgoqYTE8XEnLJ1/HnHiWJNBaLVaYSxZJuMW0xbM/ukNOzqnZPaUGLOdziipbVbHThkQ1dbMzc2lqvT1u86LluXjz7XAeSZYe0xsXVtq01cbOvcb95wyiJwTBzpXISvDFwMb9sXXtgI3n6fRnBhzHxtDLYPBRbrdbrgPuNPphLnmsbcYALOu2dlZVKvVcAGFM9gxIWBcSssz6t1RjMmodFbw9DbcK/gCjyAA/79M48D/XspTaUZVylSBMR//UlrR6EZaHkPOUS0bkwI1fzabTUgCjUYD+/v7iSMqKtk66Kv0p3ZC/cRUbfquEqMYodWkjiQKsjqWGrhfpQ7lzt2xiOWpGlKlFwCniJT2R8fXQVXn1ucbOGEG1FlG++SSoKfh8DjgBiVY4PiccKFQQC6XQ7PZTBB62j15RC02twoIemRF69B1QKBVVbKCFSNJKQixrzoOujZ0fLm+fC3o+JLZUinVwYL9Ue0JJWQ1UajWQMdO10pMWtO/Xre2915TGjjEaAGAQEsIwrxfnPOl58jTAI6e4bykIyb5P6j0oGns/+v00APwKG4ktljGTZ5uxFH5lbAoBxwrT/8qx+1tVQAg0aBqkern2dnZwKnSUUQB5caNG2i329ja2gpqJNY7NzeHSqWC1dVVLC0toVQqnQITBQm2hcC9tLSEmZkZ7Ozs4M0338Ty8jIWFxeD6glIEklVv7INzKNtY7ACldB0vDRgggKsn0VWgNQLKjh2fget3tSjajNKpiotsd5er5cAPpcugBMPXbaRwKNjy7+U0Al8OvdkplSSUzDTvMDpqwK1fTx21O12g8p6YWEBi4uLgaEaDocoFotYXV1FtVrF1NRUAGdKzAxmwrWpNnP9UAXMdjGPah1U4tT95gyXM3jM70ehOPZct+ps58wWk6qzWS7XidqFnaFVT3pdD2oaGg6HCZOA2uV9zzmt0HFwWqI0w1XaLpnzw2dq7mHeo6MjtFottNvtwGBzvZHm+J3SqtnI5/NYXl5GuVwOKmg9nhXT8ji91O8+pzoOsTEYl9LyxNqk78TodKwN95MeegD2NGqyHnQ9XkcM/D2NapsuQGcEdEHMzMygWCwin88H5yMSIyUACmYkWNxQqjp1QuecO9tKVWGhUAjXsR0eHqJSqZySVnXTswz9KNGL1Qkk1cBejo5JTOr0cqgOVslGy3MpT+20MQlc6yK4UNXM93X+qAaNAVZaPXzfmaHYWKiZQpkOtqter6PZbGJvbw/7+/uYm5vD4uJiwrOawUtoJ2+1WtjZ2Qn1ZrNZVKtVLC4uhraScYg5WOlaYF4FADU9ACdA7XPhcw2cvgc5Nu8q5bkkqE6KzOtMpLZD61DwUoZapWTWoWOnjJz2z9eit9/XiL+je2fUGonV6Yykzpv3QRk+pbN8j8/dByQGpKPSJIxHWoqV72CfVtYkYP6g0yMHwN+udD/gfi/vKjhSjVwulwEghBzMZDKJO0gV4JQouDrJy6cE56pFSge0+ZFIA0gAuwar8Hq0/65CHsVtuvMW3x+1aUjw9B2qOPlbTCWexkC4mtqB0b+PApBYGaqe9d/ZX+0L8xB8NX6vnldttVp4++230Wq1QmCScrkcCCfXAy9Tp6Td7XZx69athK/B+vo65ufnA7hrf5xh0vFUu3BM2tHkAMx1rCpmr8PHRcdNjwgpo6jrR+dMvZVja9Kdrbg2yOTF8mg+X5OjUmzvxEA4lnfUO0BynfGvMyVKL9w0ou/r+DkA328aBaAPe3roAfidmJxRXFGMQ51ERZGWV9+JcbhMen6SEnC5XA5ONCSoDKHn501dWtSPgxDVcuqFy7wk7HTyYj7l6kloXCpiWS7BkkArIMaIeGye+dzzKDfukg3HxevTtvucuI1c66N6zqUKnXdlRugtrmOrkjTzaxAF9knrJqipelDLnZ6eDnckv/rqq6H8ubm5oC5UtSIvtNCx3d3dxd7eHrrdbpjTF154IXHG1Z3M+HEHQfegjpluYnPMsVR1q0uAruLPZpPHynxt6Fz7uLra1hkJlQAJ7DRZ6NqLMVWjmEwHsjTg9D7ou+PoiL6j69kl3OHwxAYck+SdkfIzwLE9rG1Ia5/23fN60n3raRIa7n2Ilf8gGYlYeqgBOCZdpeUD0lUZoxZE2rNYSssX2xie3+tPk764CdSuSWcsAAkVntpqvCwHRt2U/DixISGcmZnB/Px8kJrokKKer8xLexCJFz17YxvVCcCoDZCWx6VR7Qf7rxK6ElYntDpmfEaiSsJO0FMgBXBKxa9zokRNPYOdMMbWpNbDMY9JJfy/Vqvhxo0bePvtt5HL5VAul1EsFlEsFhMSDb1+ef6bXtBk8NrtNgaD4zO/BBqCNUN8UkrViyYAJKJwKWHV40XOVChDF2NWyCRyzfPcqmt4YnvOmSi2wRlRXUvK0Mb2i99QpfMYW5/6nW3xedQ1p3mZX8tSxs37pUylrh0txyX2weD4BMHc3NxICZhjwaNLuVzu1Bp2+qPt8BQbr7R0L4JXrC3j8rGudwKMH2oA1hQDrlEpjUOKAeE4DixWTtozJ0LOBOjvuqkAnJIiFBS1bF38lBqYnxcxdLtdFAqFxA0wClxaDs+AaoAKhrBMk1Sz2WwAZyVSdHxSIkaCq+PtAStIIHWMNGCHX4mnqkD9rkRbiSvPO/scKbFRxzFtFwHBnykB0rFVBx71ZHcCq0Tf++N1U2Lm0aGjoyPU63Xcvn0b29vbp+zPU1NT2NnZwf7+fhhH9o9+BP1+P5wp5zGc/f19bG5uhnooTSujxfnTOVamR00i7I8frSJjo/3TfaHnr9XU4gwVx0/Xl6unY2DBNnl9ylhwXXAf6pE3X78xCVgZXP2N9TlYaL6YeYfj5nvRGQpvA23/g8EA7XY7mLAWFhYSns1slx7pOjg4QKvVwu3bt3Hr1i0sLy8HL2qlXzE/jzSw9TYyr+bRdK/gGJOMx2GBt+d+0yMDwKOAN43T8nd1AsYB+agyx0m5sRRbDPq/AocTY77vBCS28UhEe71ewlErZs9h3e7FqL/HOG6+p2Wq9KKOKCp5eH/TOP/YuDj4axsUtNhm1SboWGmb9IiVH4HhezoHKhEoUVcHFf6mHsLso3r18pnW5YRcwV2BgMEzWq1WuNXIx5Ker7GQlCrF8dwr57Df76Ner2N5eTmc3VXHKiYFVp0vn3u2xRkvnS+fT33GxGspvY/aFv6m+0GB35kb7ZOPn7cxBm6xtangqfOsfYqVpW1xoNCk7zhQO2CzLjIP9PSmzZ/aGp0vahnIqHHdTk9Po9vthjvKY/3w/epj5P2M0eW0FOtXjEaPAl2fkzSQ9ef3ygAAjxAAM51lIGKTGuOEJy1z3CJJ23har35nHpWcKEHqcQBto3PVfJfAoDe9ULJ1AkVAdk6f5cTGJMZ8KNfL99RJS6UjB3gdIwUaJSoOYgCCOpxt8rL5zAmoguZwmLyX1qVzVXMyP6VLPxqjgKv1qReujpG+44DG53ociaCrYK1hRJvNZiCIqkKk1M8zrdPT0+h0Ouj1euGoFfPoZQYHBwfhbtx8Ph+8rvXYCQOU6JoDTjQdbKvOhYOPE980gON7HANdg2pK0XHX8nRc1XTiNmBvm69z9tMBUNupjJJLvmmMlvbJGWrdI94WLcfr0rXCPlPVTE0P17JK4qri57gVi0UsLy+HW7OoXeP46TqNAbD2ITZu/tu4NI4GaxonmN1POZOmhxqA76fjo96PcWOxNMlkx4ApjevzTebPlcir7RVIbjzdcKxPgbPX66HdbifONioxim1wcsZK9PibbxASNAURJWgKnkAy/KWWEdukMa44DaBJ2GLj4/MzajM6UfS2aJ/8bCiBTO+ldQbPgUPnw/us+fi/Al2/3w+e8DwrrmEk2R6Cqp535r3JXGeHh4dBnUjQPzg4QLfbDWDNtaiMnttrVeOg46xtZz4yAyqdOgBzPp3xcru+ajAUdFi2rwMt0wHQ14eq1xXwdT2mAbeDra83n2NVr/tvsfXg7Y6NvY4/55DjpacgGFmNe8kvBHn22Wfx4Q9/GM8++ywWFhawu7ubiBzmR640eX99LGJ0OI3m6l73sl248d/HpUkYgLMAv6aHGoDfTUkJSyaTCfeTqi3MOWkmEkRuGt720mq1EgH6nTho0g3h9joHQCdmnhw4lQgrt635Y4Rq1GYcRawUUFVtqZvMVeRelktmKm24NKaXRrhU4MCi5akjlwcfiTFIJJ4EYEojlHJpv1ObN8+usgxdJzRT6HNGWSMDx1CFOkeu1vez0WlzoYyZnsV1MPE51vL0NwUUzavzoFIyv8cksHHrzNvA/7U8n2N/NwbAMQYtrb60lAaAOt56Uxa1Eupbwe8e6/zxxx/Hc889h6tXr2JqaioEeiEjqCaz99Lp9K4FYCd6TP4sxj1pGvf7pJyXctReNjcFucrh8PgqQYZ/U8KkIKo2GnWEGAwGQQre399PROvxNiuRZJv8kwaQDjDOFHjfHYAVyJwB8fq07VqeEzqOFYGKdanKXcecicRI1wfrJFgwj5oMVGWsIMwPGSgfO3Us4ryrSlDn2ctvt9vY2dnBxsYG2u02hsNhOL89HA7RaDTQ7XZx+fJlHB0dodFoAACq1Srm5uawv7+PRqOBWq2WuLiCN1Dt7Ozg5s2boe2UgLlGdf5pHwSATqcT5hJIXj7B8VMVqK4F9k9V9nR6IsPB8eCccA1pu1RdT22A2s9Vy+TSHvcSVfHuTe+gSYBTYOf8KyMxitnk+65RSKM7aZIk+6B7imPAOnS9DQYD5HK5EI603++jUCigVCohk8kE5i6fz6NcLmNxcREzMzNoNBqo1+vY29tDp9M55Zyn9CCNMWA/YgxJWppESo29wzGKjZ3+5vk8nbVupkcCgGPEf1xKG1hdHA86xSY81h5vpxK0NJDW9jtYqt2JaqVCoYBisXjqyrhJ2uUL0CWeGID7ezFJQfO71KltdAnXbVxqZwRO36DCNqoa3NeAjxmJrv42bhz44dWNDsA+t8o4AMmwni5taxlkJNj3/f19tFotNJvNwIQRuNWpSq/k07HudDrodDpoNpun7Pg8qkQiS+9Z77cyTm735ZokIKjHs4JubJycuWK7yUTq/DroeZkODDGCr20lQPl+G8XscZ2RIY75HnDu9blLzqr5GMV8pgGRr0mdM+8r8xCslQHkVZTUpO3u7oZLWvQYG9vgvgy+13S8fUxifTkLKI9Kae9622I0S9t1P20AHhEAftRTTPrTjesb0N8lMaJKk6okBl7QBTUK4GPJF6jmd84+Vr4zDd4PlhkD0zTONUZUtYzYBh/FBXs/lJCpZOwbUx1dtEwFEQ++4SDGv3r8Q8tzNfrR0RE6nU7CGYb3teoxJDIFOi7qIc/jKM7E8dx5u93G3t4eyuVy4k7c2PpRANTxia1ptdM6MxZbNyyPYKEAScBUqReIO/3pHHv7dY2o5Or5Yv/H6kgj3r63ddzZH869MyI6Vs6I+N5z5oX/E2jZR0rGNFNwDep8MIY0mRQGAWJyFXSMOXg3p0cCgMeBBFMad8jfzvJ81O/eHic2Z0kk0mojU0KgNpkYF6kERAkB1ZmqitO83j8tIyZR6l/mc4LLd51Qe7tjREOJsktJMaDXMfB+ONDF5saJGsFWvVlpW1W7qUoOejyH5VOi5ji4tO5zwOexe3KZlOAdHh4GCZbHzGZmZpDL5YI6EECIhMV2DQaDYL+jFKNRxFR7ks1mg5PX3t5eIvKalufrQ9cF2+1rSQHY33cGx+21Oi4sw2/DUscgZZB0/H3tOvPmzl4KnM44+vrSMYq12/csn+mRQe2T7xdn9PjX14wzhZRoGU6T61dV0u5BzmNp1MDQFKD9d83GKAAexdQwOdMco7Oj3onR3zTh4NuRHgkABsZ7K8fARX+/nzpjnGxa20Zxyt5W54T5Do+PzM3NYWlpCXfu3ElcyOBgpmpUDTvI+2B1k+iGA5K2SAc+32T8LY17z2QyCXsl26gSUtr4KpjFbKlOEBUQVVqMqUud6CmR0zbQQ1ftccrU6NirCtvt80r8tW5eycfxVyKpfaLqlol10Wt5e3sbnU4nHC2htEsVeqFQwPz8PPr9PjqdDvb398NtULTnZrPZoF4GEC7hIKE+ODjA3t4eAGB9fR1zc3PB0Wtubi4E9VDg0mM6HAPt12AwSNiTdXzJ5LC/qhEh0HKcyFAyHrrebqSe/D7+/K53AY+y2eo6dmDQvMznwK/rXCVX32POPKpXe4wp03WsR+Zcs8CUyRzbdBuNRmDcOAbtdhudTicwWH4nci6XC7eh0fTBG7ycwRpFF2PfJwFG3d/O6KWV63XEfveyYvOr/98reD8yAPwoJt+YJCrcxFQjk8inSaYKAvyuGzMtKfF3+6RKgip1KMFxycWBLsbpK9FxQNV2OTg5QQFOn4kctxG1bH2uTAwBzcdDiTFwci0e32OKSdNav46FE5fhcBhARdcEgY0qZIIpnaQIYKoxGAwG4YyvjosyQ+okxfjf/X4/gC1BhYE+1FY6OzsblVDSmCWOnZ9x9rWTNuc+t8oAuRSfJkXpevU8vu693jTin5a8L/o3BkTKrKj2hGuJbdN1qf1NGy8+4/lvrgeuFz5nfq431p3P50P4STprsX0xk8R7KZneFQA8bhHECMX95IvVPS5vGgFWSe/oKHmtHrlPDz+nZTqgAcmADGltdQ5cCaFKIPo7yyQxda6ez2Jt9br5jGEbVeJMs6u6rVHbmkbcfIy1fiWMlKSoumd7KK2SOWLfVYLzIBwER2WCMpnMKanBib7acBWQ+R5tt+rtSmJKNTTr1rVEQu2gpFLW3NwcisVisAETSKemptDr9RIexARvnWdfCw6+qs5nm1T65MeZyZgan+3QOWTfGDHLwZbv+bxr0ryuhtb8Kp2nva/r0DVKnl/XkfZZTVOx/ejMpDMbWj41IXr3dCaTCQDMevw0BmOLA8cgvr+/f0qj5vOQRgvTGJtRjJY/i5UdG1e+dy9Ss5dxP+ldAcCTpEmA0sHXF8koDnZcebHfVJLk/1QB5fP5RFB9BT1d9L7YFMAcxBzkYhuYnDXzpkmLacnD2sXGS+vzqFmZTCZxRIT5FJR8HBXAFNQABPBye5lfpkBQ8UhbJEZUy7J8nTdKw3yHqju16fFDQsfvbL8CEMFagWl/fz/YZPVMJ+vSoPp61lbXjMbT1mc0WeTzeczOzmJ/fz+xfgjAekSKV1OqRkSBjoDr2huV6PmcjILuA44j7c88HuPStDMuqrlxkNA2utmA+RWIHFx0v8XWJuc1tk5H7QGWrXTGJXmq19lv3R+uaeHc6dluOu2p5iabzSbswjQNqAp6fn4+XIvK2AI6rs6EpPUtNgZpYB0TVnz808Z01Lg7UKe9k4YD95LSKWUk/c7v/A5efPFFVCoVVCoVvPLKK/if//N/ht/39/fx2c9+FktLSyiVSvj0pz+Nu3fvJsq4fv06PvWpT6FQKGB1dRU/+7M/myBQDyIpB3jWNOlgTpovtiC8fWnAob8RjBgcgUSRnswxzlk5ZefUR41PjIv2Z2mSNr87uDPpWVktPxZFSqVOAgFwWvpQ5kKlUrZRx8CBWutiHWrnZfump6eD6tXnRqP+8H1vs6ruVIWoQQu0XSyXbffAIJR86XTVaDTQbDaxv78fwJLSOqOmcSzdTKCEjuBHsNA1xvHiM34IwnT+ojSlak3ap2PfWScverh79y7u3LkTPjs7O6jX62g2m6GPBI5OpxOifekxH95trGfcde51nJUpU8ZL1by6h2ME36VLMje+d3S80xhclu3rW+cMQJhf9ZDndaT60bWiEmy320Wj0cDOzk4IysOyuf77/X4CgJ0BqlQqyOVy6PV6wYasGgAfP6cz3u9Rv4/L53n1WRrNGwXYaTTSy76fdCYJ+LHHHsNv/MZv4Nq1axgOh/gv/+W/4Ed+5Efwd3/3d3j++efxMz/zM/jjP/5j/OEf/iHm5+fxUz/1U/jRH/1R/PVf/zWAYyL0qU99Cuvr6/ibv/kb3LlzBz/+4z+OmZkZ/Nqv/dp9dUTT/Q6Kg8v9luvcq5anhEDr0w1NLrLf76PZbKLT6SCXy2EwGKBUKqFcLmNzc/OUVEmbDHDCkauTTxoou2RKCYCA4WpQ5vEoTe7k4v12Aua/qS1RwVe5fuZXiV1BhNJKbMxVhace4Wr/5P8k6IPBIMTRprMK26iqY5Vi0xgH5iW4dbvdxJzrNZMAwjlMAIGAttttbG1tBbtvNpsNHs501mM/FMipPmZZw+EwMBjK3BGUNNqV5lNNAj903GEgB4Ia28i1QS0AmZajo6Mghek+4dyoxoAhErku1Q5KRzCq2ufm5oIHOAN26JrnPGhflIHUsdJ5VoaT8+MMoQfQUObY93ps3/F/jol+2C5dt273ZfvZp6mpqWD7d4aJ+3pqagqFQgGHh4eo1+vhONvU1FRC25PP53HhwgVUKhXUajXs7u6i3W4nxkklYN2TTu9iyZmRUcnnQt8fld8Zp0nTWdo2Kp0JgP/Fv/gXie+/+qu/it/5nd/Bl770JTz22GP43d/9Xfz+7/8+Pv7xjwMAfu/3fg/PPvssvvSlL+Hll1/Gn/3Zn+Gb3/wm/uIv/gJra2v4wAc+gF/5lV/Bz/3cz+EXf/EXA3HxRE6OiZF7Jkk6wKNSbEL4fBJA9kkYNUFKfH3hOCgCp+MYt1otZDIZtNtt5HI5FAqFQEBizhoKUCo9uWpXnTi0fSRyKpEp2Oqm103nHDN/Hwe+sfHQ/jmRU9uzcuoxaYLtUkaEIK1EmOCvUh7nwseL0ru2ST3SmY/vE6hYDwk37bdKuN2hhW1lPGaewVRw4ruUdlV61bGjdEimCkACFHXd8H32VceCv7G+fr+PRqOBfr+PYrGY6m3vzCcBG0BCWtcxcHs96+aViQCC5oRBIwCciq7lTKKvQ+BEhe3rUNugEqyOle4/XQNqLtL16FLyuGAy7IMzA1oP+6bHFNUhULVLSjM4fjyOpqYP3d8zMzMol8vI5XJoNBphvSijp2PHdsZooj6L0ex7Acm0NKqsSbHC18q9pnu2AR8dHeEP//AP0W638corr+ArX/kKDg4O8IlPfCLkeeaZZ3Dp0iV88YtfxMsvv4wvfvGLeN/73oe1tbWQ55Of/CQ+85nP4Bvf+AY++MEPRuv69V//dfzSL/3SPbVTN+mowXJQiE3SpOqLSSbR30tTdbj0OBgM0Ol0gjOJHrPwjwKX3hOrqqlY0nEATns+KuA6+Gq7R40L2wLEzykyj5fpgKzAqBKtM1HerhhjwvcUTPk+vX0VrGJjzTGJtVUlL82j4EdHGErXfE/VhpRAVHL1sVVGgCEkPSwif6ekq4BAIKeNlfVTWuUY0k6s+4eBP1R9zTXoJgbXMnAs+Y5KhW4fZhtnZmZQLBbDBRF6/Mj3kEs8qs3h/5xvX7N8RxmUNGbd63MGX5+pxOpAFavf/3dGU8Fax4l5VG3tmjGOvYagZJ85RgT1QqEQ5leDdqjJK7b//Xls/PS7j3MaTRmVJ42x9/ofJNBPks4MwF/72tfwyiuvYH9/H6VSCf/9v/93PPfcc/j7v/97zM7OolqtJvKvra1hY2MDALCxsZEAX/7O39LSz//8z+Nzn/tc+N5oNHDx4sWzNv2hTL7hqAYGkHAKSgNw4EQtp96y3W43oVVgioGKSmDAie1JuW5996xpFLebtnFcLci/yq3HyveNmUb4qPIjCBwdHd+fq1KWxjnmGGmQjVj9yrSoZoESd8yezHfIBKhTUiaTCQDM9aHSB4mjX7rBpMxZrI0cMz0Cxz7zN2Uo2G9Ks8pE0BHMbf2qSVCpjeOq86Zrju1QW6gyJ2pv1/JjjKLWETOdKGMeW1+6jnTunbnU8fI82g5lPnwNsU3qPKjtioGflqFqcXrDc9wGg+Oz2LwfWuOls06u80qlEpg3rmd6TKe14b2UTGcG4Keffhp///d/j729PfzX//pf8RM/8RP43//7f78TbQuJnPT9pEkWgnPH/u69gMu4lCah6wJW9RsJ9szMTPCEpgTnIML/eXaVG0qvlIsRXpe4XZVGgsfftb2aYlKrg7b+HyOymkcJnBM6J4BO9GK2KAUNJZTk5JWIHx0dBXWvqmFpZ/Tx1/CQalrR+gCcAkv1XiWBdSBUtaMeZWK/1QbugVQU8HxOdQ5Us8FnCmYONqoqBpCw/bId7uSm4OFAyf6nOUF5HpVYqebXeXG1bMwU4hoQ9lnHxM08sfWn68ClW9d+sG2+hx1MHfAd5FRz4H3SPAr+3MfUdOgZYJ7zjgHw0dERcrkcFhYWgsmCWgMyhz5fmpzp1XXH3z2No9/OWI7K7xqD2G//bCXg2dlZPPnkkwCAD3/4w/jyl7+M//Af/gP+5b/8l+j3+6jX6wkp+O7du1hfXwdwHDHnb//2bxPl0Uuaec6aYoP4oNO4iT3r5J+lPCUmlF5brRZmZmaC9mB1dTV4KzqRIPgWCoXA4R4cHGBrawszMzO4cOHCKQck5YgVHEgc1ZNWiadLypTqvO9OjJQoEhQ02IQSEGVEVCWuZWlSsFZbKYkE/3pQEnr1MggBnU9oN2Mb5+fnA9i4h7fbwZyBUKIJnBwL4phxHpShKBQKoWx+VFoHTm4J4nu6xtRWvLe3F6RvtRPT9k1w5xpSr2g9n63HX8jo8bejo6OEBznHgm2OzbPbPfm7HoGhQ1C32w196/f7wfuazArnimuGzlg670x6moASnc9dbJ86uPMdNQ/5ulYfDJbDY2i61kfRCj/PzPzKJCktUCmZe5ntaLVa6PV6yGSONSqzs7PBQYuMIT3Xh8MhKpUKnnnmGayurmI4PD5H3O12gxNd7OSB9sOZnzRpOcboxNI4aXuU8BQbY8+fJpzdb7rvc8BUO3z4wx/GzMwMvvCFL+DTn/40AOBb3/oWrl+/jldeeQUA8Morr+BXf/VXsbm5idXVVQDAn//5n6NSqeC5556736Y8kkmlisFgkAjzNhweO9KUSiUACFGK3N7owEA78t7eHprNJgqFQgBhBSsuan03puZS+6sTewUGT9yA+lHunHlcClAAVq/eUZsYSEqfKr2ppMh29Ho97O3todFoBDsoCTpBmEBJdaurXNkmjeOrbeH/fvaSxFg9X308HJx0PBXU/HfWo+Ohz93xyYmOgpmuTWX2FNAVjNl2MhpqR2WbaEOMqYF9HxBwAQRPdDIkNK/wOBbL0XUaY/C8Hu23r3tlFnyMY+Or46hzkKam1vz+vrZJ2xCT4NLWgq5TZWzUa53ntdV/IJvNolgsYnV1FXNzc+FUgPolfLslyYc1nQmAf/7nfx4/+IM/iEuXLqHZbOL3f//38Zd/+Zf40z/9U8zPz+Mnf/In8bnPfQ6Li4uoVCr46Z/+abzyyit4+eWXAQA/8AM/gOeeew4/9mM/ht/8zd/ExsYGfuEXfgGf/exn71nF/KAmWDcXv6flm6RNvunSJHUvz9uhxJYcvB4FAIBisRjsfHRkca6XRzP29/eDHbHZbGJ3dxeDwSCcmQROH+9RANY+kaDFiFoMXP05y4mNiTIQzKdEgBKKxqaNETwlnAoYTkTZTwKMnpHkPbbAie2XsbQZGYpSQz6fT6hX2S6PI61joODOdzUwh7ZNCWMMIFzqUWlf50AlEAVurgG9uEEZHDLctClzTLi+OCaUfjlX7KeOu3oZsx5KWDpOuh4557ytSW9s4ngxIhjbpn2OJW2TrxWnBzGmIMak8LsyUczPOeYa0b2lf7PZbGLMWKYyTLF9OWoP6tyrNE7gJBPFdaZmATJeMzMzmJ+fx/r6ejg+pufZfVzT0v3+FmNYYsxO7B1/f9S7sXwPCnfOBMCbm5v48R//cdy5cwfz8/N48cUX8ad/+qf4/u//fgDAb/3WbyGbzeLTn/40er0ePvnJT+K3f/u3w/tTU1P4oz/6I3zmM5/BK6+8gmKxiJ/4iZ/AL//yL99XJyZRUdxP2WkT4/WlTYoTPuX6R3GsfK6OOeRWudiz2Wwg+vRY9LKnpqaQy+UCUeStJZ1OB1tbW4lNzE2vhN8JJZC0DSuB97L0PQcSlaII5kp8NaWp+GJSic+bbzBXk/M3Emu1kbfbbezv7wdwVS0CgaDf7we17WAwSHjw+lxof2Lj6CDq40qCGZNQtU98hwTS8xIIFIg511wjh4eHIc4v89ERbDA4vrCdGoFcLodisRiiZakJg+PlzJG2hXNC4I9pDJiPkZsYdOLw8BB7e3uByRkOh+h2uwkwUWZBpWtvC8c7BrQ69zofzvjp3OoZdK3HtUouhSvz4XtM30nTLmne2HOVfhU4yVwSgDUvGcVyuYylpSWsr68ntFG9Xi+cXY8xMd4GnwNnJvV5DDhj38eBaez7KFAel+4XjM8EwL/7u7878vdcLofPf/7z+PznP5+a5/Lly/iTP/mTs1Q7Ubpf4PVJTstzL+9pmqSONAD2SDbZ7HEouEqlEjYr69CNPD09jXK5jIWFBQDHAR8Idru7u+EoAT8qFbp6TCUhdwgip+xERPvCDapSTYzg6XMfNy2fEikBPEYU9aPOJG6X4zsHBweJ+3BnZ2dRLBaxtLQEACFoAQm92rpI+Kl1IEHTuchkMgn7urZBx0aJqzJEs7OzyOVyifPcOjYsV22E/l2Bl99Zj663g4ODBBOWzWZD2EeqmzOZY9s0AVklZqYYUGh71KdAy9AP29Pv98NxLI49f1PAoPpZxyaNAfDfY/vUmWS1H+vvyji4xoV9oZe7ah20bH1H50vrGQWw4+iMMnN61peMJsdU9zRNJaVSCaurq1hdXQ0AThsw8/h+1nrHScaxtsbowKg0Ccgy3zghahyA3096JGJBTzIpaQQn7f1RXNuDSqPK0nZ2u13s7+9jZmYGvV4vhOUbDodYWlrCuXPnMDs7i2azGSQb2sRI5PL5PJaWltDv97G5uRmuHdvZ2QkSz9HRESqVSrBlOvFSiVVBR88EK/FhHlVTs0+cC77rdkIHZm0H61InLFWfuz3Y1ZBavkqXVF82Gg1sbGyEuLaFQgFra2u4du0aut1uGP9Wq4V6vR6I1NTU1Knzr7lcDuvr66eYgNiZah9v1QwASJz3VqKtAfBpiiBzwTOx9HRVlShBgA5WwEmELY33SyaiUqkgn88DQCiXfdRLQXgUJbaeOdfZbDYRREQlVVVpUs1M84ve9sTx1tt4uM4IJAQOjt309PSpsJ+6JpURUM2FAirXke6BmCTLdanmGZ1XtTUzKdOo+wU4DeyuwlYm1MfcNVNsV7vdxu7uLo6OjgKjWS6X0e/30W63g4Yjm82i2WxidnYWFy9exAsvvICrV6+G+OO3b9/G7u5uiJpFDUhMAxBbFzFBxjUCnkYx5+Pou/52VnCPteFe00MNwE6w+UzTODWTP4u9cy/t8u+uYmI9usBUjaXv6GI+OjoKoeNIJBkNi2BKgssNyfdJlOg8RKmi2+2i2WwGZyK9KIAEMTZGJKYqQbpqlcklan0WGyutxyU8JVAx9RzLBpKxjfmXzwh+7pREBoMS1czMDBYWFrC0tIRGoxEI6OHhIWq1WgieMRgMQuSnfD4f7OoLCwthLniRAYkix4pt5nN6qHINkJARvPk/1b96E5OrQGP2TJ0PMgsEXrWrU4rkGpuenkan0wmSMe8JZn0uueucuD1UVexU3Q8GxxdLkOkk06Dn1wmonDOCMYGC65WXRLBO2tg1mIefDXZ7ua5frc/NGDFbu+4TbYPSq2w2m/Aads2BjpfuMy3TAWicBMz5Z6QrDTXJ89TU7MzOzia83cvlMlZWVrC2thaYvXa7HcKPUmvke1PHIwa2MeEmBqxuxkgTqjylCVRez72me8WMhxqAJ+FyYhPt744qa9SiSHvPF9MkHFYaMwAkI1GREPHqr263i1wuh6WlJdy8efOU2khVRPl8HtVqFdVqFbu7u8GD9ODgIBxtmpubw/z8fAIg0iRQJ+QKFuTE0wCWHw06oYDs3L9LLE7s1JEkjaGKaUH4GyVA9mt6ehqFQgHlchlXr17FxYsXA8PhFxGo2laPKZFYlUqlcKm5S+DavsPDw4SNXBlMAjxBhsd9SJBof/M6fC1otCMFVlU5c044hsyr3vQsV8MYuiTI/8kIaF8cxNg2vnN4eBiOwaj0SwDm0TrOQT6fx9HRUYKJIBPE9hBkYsydjrXv3xgQ6PpWJzMvR8uO0SJ9X5lKqnI1pa1tZwZcMPE1xzz0dWAMcvoxkHkhY0Nmvt/vo1qt4uLFi7hw4QIABNDlXKkN2Ne5tslpSxqAxeYjltfLSaPbaYLEqBRjDmJ57iU91AD8bkl65IYATK5zf38fhUIBS0tLCS5cOXtuNHovLiwsIJ/Po9VqhfK73S6mp6dRKpUSx0Rc+gROpIGYjVgJggas4AJWgFDJzB2VYoBLAqqJBD1mD1VQiIGwEi0G1OBv8/PzWFlZwcrKCq5cuYJyuYxGo3EqFKWe9eT4VioVLC4uYmVlBQsLCwn1u6oLdVzJuLintzIqfJ+g52ctM5lMuJaQwEw7LcdQmZRSqRRUx5Ti3aOdIEsA5kdVsTFpTPtJoszvaiLQeWH/1ZuZt/SQyNP+Xi6Xg4aBmhs6EvE9Hsmj2lzXYWyNeFJ1sCeuWfWbUHXrKMbfQUBBkXMe2w/aXn2uZboDY4yhZ106pnpWm5Ix26Nrcnl5GY899hhWVlYAIGgq2u12YH44dqo5ey/F00MPwKNUF2eZfFcxpSVd0KO4t0mkcy9Pv+v7PNdIb8Xd3V3cvHkT8/PzqFarWF1dxZNPPomvfvWrQWKgJEYnC15gsbS0hGvXrqFerwcPXnK8jIx18eJFFIvF4BGroEcCoJIQwVG9sP08qYKtjod7Weu4UiJQCVDfJZcOnPY4VcmWxIyaBCVSGoNYJaWnn346EBra3nd2doKdK5PJoFKp4MknnwzgOzs7i3PnzqFYLAYb/MHBAba3t0+pu9XZje3nh6pvvVJQE+eDf3O5XFCZd7td/N//+3/RbDYTR4NUyqWkWalUAAD1ej1oRNR+l8lkcOnSJczPz6NUKgVGw+317KvunZj5gvZXvquMjM61hkLkeXWqo7PZ49uennjiCSwvLwefBYIImYO9vT0sLi4GpzW2R0OJAoiCJhkx7afO03A4DLZ+PX+szGiaBMo5V2ZE26AaGK5j1XTEpHHVWMQ0KKqt4v7jutza2kKj0UCxWMT8/DxyuVxYD3NzcyiVSiEoRz6fx9NPP40nn3wyOHTu7Ozg5s2buH79Omq1WqBRPKqme3YU7YxJovpM351E2owxIfpc12ksn+Z/J5mIhx6AYxwe04MavHEAO2nSTcnvMU7Zn1FyITHjVWLNZhONRgNra2tYW1vD/Px8sOcACPYu5qeKs1KpoFqtolAoBMmX5fJe2UKhEGx7rq7hRlbPbII4z7MScLSvKr2p5KERiHx8XY0Xk5K1TUqwmMc9UdMYNtpDebtUr9cLzm60UVLyUjut2s7IuLg6XCV9Enfvh68L9RJWMPDx0RCWmcyxR3Kr1Qq2WgKu3wtL6ZLg1m63w3oBEGzZlCRJTDmvqoJWezP7qzZeZ7DUjk0mQz2ZOQ/5fB7tdjuA3dzcHIrFYriTnHZp9o93IZdKJVSrVZTL5RDr2hk4H38HUPVXcGlVb25in92JjmPE7w6kCsKaR+tLWxu6f1RT4nkV7PXDtc05r1arCabn4OAAxWIxjN3h4WEYUzq9AUCr1Qr3AHO9qkbKwS8m1aelGLNxL2kSAcj/d1r9TqWHHoDfDUk5ZT3H22630Wg0cHR0hPPnz2NlZQVbW1unnHFoT6PNl9xuuVzG3bt3E9JAs9nE7du3ARxLhwRh5VQJ1oxGpEdyqDqlrVRtheqwpcmZjpijhavktC1O0Ly9XhfBweudnp4OsbX1UnleAE+gpURFaYsqbHUC0ljQ2nYnkNoX7XvMA5eSNolcjIufmprC8vIyer0etre3g/aEgE6Q5FxTpatnaulFTACkl7QCMPtNYE4jZMoU8TuBSNeE+hGw/kqlEtY5x5xAzH6zbewby6FqmlGc0hiy2Dry9aJ9IcOj5er603d0nXlZmtwOnSa9aRvYfwXqmGo/VtbR0VGgHZ1OJ+FsR6dMMtLUgh0dHWF5eRlLS0sJmkBBgABMYUGdAnUs32lAe9jSIwfAaWoE/23SxRBTi6SVmfZeTL0SKzuN46PE4ABM7+Ver4e1tTWsr6/j9ddfD6pkAivV0OR2c7kcKpUKyuVykIpZz/7+Pm7duhWeM9qNEit6qqrjD+3IKhmRELoDT0wToMkdt3ScFaiYnNBpGU4Y1QvWz/9qUInhcBi4+2aziUwmg4WFheD4o+pkEuWpqakEwBFIVUJhe2M2VP6mko0yFmyzvuuSMACsrKwk1shgcBzrV48+DYfH9w+zDkY94ljm83lUKpXErUZkRDSiF3CixmV/tQ9sI8dDwVrB18eH2obhcBjCgRKA6X2r2geuDZahbdQxdpWjfmIeu1xL6hehZavfBfP6XLp5i3Oga0HHj//rX13n3h+tT8+3x1TinOu9vT3s7e0lAHhqairYdDkH2Ww2MGkXL17EuXPnUCqVwpy22+0AwARdRutTrY/vRR/jUbQwLbE/aTRfacakEvT9SNr3kh5qAB7FKcbyaIpxlvfbhlF5YuDqCyMm8bj0e3h4mDgfub+/j06ng3K5jPX1dRSLxUAoKZGRI221Wuh2uygUCigWiygWiwm7KDf39vZ2sOcOBgOsra0lgJOArtKvXgah7Xeunr8rIVYJRB28vBy15aYd2VCiqaDk+dw7mESLUj/PR9JWXigUEgSO46WE2Am81qVSV4xAaz4n3Ownbagq/TrADAYDzM/PhzHa2toKqkYScBJWRjpSBmQwGIQxoC1bnXP0fLC219ew2/75G5ky1XIwDyVYlkEnq+3t7XD8iwwBbdUsj+1h/xgURKVq9UNgvXo0ims7VqaGO2VgFWVmqDrXO41j6mZdF86o6Fp3qVjb7cwZkHS6jDET7C9BdmdnB/V6PTDNPHpI2gKcnDvnue7nnnsOV69exfz8fGDC9/b2UKvVAqPHsVCHyDTaqnthHP2NAbUzKWlamHHvj6rvnU4PNQDHOBtfzP7bvdQRKyOtjlg6yztpC4egR+BrtVrY29tDu91Gq9XChQsX8Oyzz+LrX/96cK6ijZfq4p2dnRCnm3Y0Je684pDXjB0cHODtt99Gr9cLRJhStYYZzGQyQa2tAMT/FeSVCCqosq8OzJpiQBb7+EbUNpHIk2ApMeORCgLE3NwclpeXsba2FgIUxMJyck5d0lai7utS28T31EGIUp4Sck0qgbLNetF6LpdDuVwONzgBCCBMJoKqaYIWj13Reevw8DAcT2OYSY4p1ZUk2NR0KMOj/SfxjzFllJp8DXAcL126FNY6Gcu5uTn0ej1sbGygUCiEQCPsL49/aShOLV/9JGLaE3eCUiBnf7geOQ5kRrlHyMw4UKpmgNoG1sV+c57SwJT5dT2zTo6fHvfib8PhEG+88QbefPPNYK6qVqsolUpB29Pr9YJtned7FxYW8L3f+724cOECpqamUKvVsLGxgbfeegs7OzuhDlVhu4ZG+6d9GJVitGBS6Tjtue/VbxfYxtJDDcDAaMP+KMBLkzwnnYyzguqkknhaG7jRaevSQ/T0AF1cXMT8/HwgTuqco842lFQ1+hClnunpaaysrASioLZOJTx6PEGlDuZVCVWlVidowIlHqgMwx0MJkJ6JVsnY50LB2D8qcfKjUgslq1KpFFSetD26dKLzq3OnUhbzqsSYZvdzrYAyKk5s+Q7HgtIqVbb0iNfjYApEPLdMO6rO4XA4DOuL4Mu8ylDouWI/ojRKQgGQuHOW76gKle0lwOZyuQDClNabzSYODg5QqVQSDmfqic426DrTcVdNg86jqnBdutS/VI3zfQVP3SOuXlYwZnKp0NeBr3Nfe67adiDnKYq9vT30+/3glAkgMPgcXwBBQq5Wq1hfXw/aB6qxOf66z1X6ja1rXfcxWjeKpk+anN7GaPykAtqkUvq9pIcegCdJowDQ83kaB8qjFpGWOW5BxYi5Jm4kEhkG16B6cWZmBktLS0F6bTQaCccgArDel6pOUfTsLJfLWF1dDSo8ArifN2Vbuek1gpZufjINCmzaNyd6MQAmUWY/eBaX7SbRcxuZj7dK3Hymzj/qDEQ1pM+PtsWBX4mOEk09R6l5Ve2t7VDAZR4FD2+/SnUcI9rmCJCqFtSyOe8knlwTNCnorUiqPlYpy1Xp2vcYoOi4u0aE39VfYGpqKsEM0R6szm5TU1Not9vBE7pYLCZUx67OZz2qSdCx1v44Y6USJceMl51Q28T9os546jWuYKxq8Jh0ph+tW1Xuuv7UVMP+q9aDZpWjo6OgueKaYaQ2novvdDqYnZ3F2toaHnvsMUxPTwcasrOzEzzp2TbWeS9Cje9X3XdpdPGsAlOs3Hsp70Glhx6AR4HZJHlj7511EmL1+SKKcV1KnGJ1O+EiweHG5pV5tVoN09PTWF1dxfnz51GtVsMtR3oet9VqBSJFiUUBKZPJBBCmUwYXvUqzTli8vXxHj9ro+wRmdxLR911txjpdtaXA5uDkc6TA5nljhCLGaMSkVf7v55Bj/YnV60xJTOLxs6kaQUyfMSIRj4Tp2KpECJx4EWcymaCO7vV6CS9jDb7Beuiko+pXt0vHbK4xxkjzEAC5Zn1ctQ8KcgcHB9jc3Azx0inF6/lYJj0L7TZnB97YfPC5rl9fHxw37x+ZLd17HGdf/743OdbeJl2rbuJh0B4GWaFHPNcHHd0qlUpwyKLz5ezsbDAvnD9/Hk8//XRgHvb397Gzs4M7d+4Eidn3aGxPOWOhSfdIbOx1/aTtP333LELXqHyTYMIk9aSlhx6A301JOVluyHa7jZ2dHfT7fZRKpRA84vr162EzkRhQYu52uwl7pktjHlzfpT+qk2OSGf/XzRZzhKE07NKnAoYTmRi3qurptDZw7Dw5cXDA9XZoHlcju9pd++Ngq9K7qsBjzFkaEXNpkm1gjPDhcJjwXteAEVo2jzXxmd4BS1urqqgV1NkOOgSmOT5pu3U89ViUStEKvnyu/VWpVfudyWTCOWCWr+ps9t/NI+y7AqhLvTp/ABLj6POh+0KP5rA/DJSTtuZ9vNhnrjtvl86nmifInLRarQQAM5xnoVAIZ6lv376dUD/T4Y82+GeffTasj729PWxvb2N7eztxI5UKCGnpfsDqUUyPPACPWgyxvDE1B1PseQwoPJ+rWdPaFyPC+j8dsegURU70+vXr2NrawtWrV/Hcc8/h5s2buHPnDm7cuIF8Po9isYhOp4N6vY47d+5gYWEBly9fDhtNjw1QlaxB2J2A0auaG49nNEmcnVBqn6iio7prMDj22i0Wi0HFOBwOwxlizokCv7aBdWl4RgV6BRg9GqHvUDXoIKqAoFKoj4eCDT1G1aauc69HbzQoCcdLNQvaDo4L7bbu3a32vpmZGVQqFWSz2XCnsUqX6hdAZohq2/39fbRaLeRyuRC2lKYF9oMAR0l5c3MTd+/exWBwHKowl8sF4NUITeofwCMs7Bvnm5KtAqGHyOSxKJ1bRvviMTE1UzgIu2QOnEj7KuFSquVY6zqmqla1BMpwcE3NzMwEBzMyzFSxk8FhPGsFeKclykgr46lMivZDzQyUbHn2m8fPzp07F+y6W1tbiXC0DIzyxBNP4JOf/CReeuklAMDt27fx6quv4tVXX8Xdu3fR7XaDSYvxupWxidHftOeT0l1nQDSPMzD+jn8fV2cafowrf9L0UANw2uDdy2DEgHRcuWnSSdo7sUWQ9o4+17alHUeic0qhUEC1Wg2OFYzxSpUSL5qnilKlFSX2ypXzo4wEAUvP1CoBA5LcOt9jm9UmVavVAmFmQACXAFgnx4LtJMEicdK62AZ95nlcyh0l/Wp7fMwUwDkeSlSd2McILt9jmeo97PZjrZ8MkNok3cGHa0bHpdPpJPrF97hmqAVhOWpzpYRMcOZxuH6/H+yhlMAJZLHxZ30EOQVCZXpUU0AGgmNOJoISuK5X3z8cZ9+XMWk2BnYsW23obJ/a2DU/+zccHp8tJ5OmNz259K32XV2n3l5f1zpOTlMoAZNOVCqVEGaVz6l+ZryAJ554AlevXkW1Wg0nLprNZtCkcX4ABJoUA9+YAJJG/0almJZgHA1Oex6bd/3N33snJPuHGoDfbcklUL2cfG9vD91uF7Ozs1hYWMDi4mJYXARg9ZwmEXCvSSXETC7FZjInqksAwfECiN/G4kBExx8SJh4f6ff7CVBlXb7B1IFHnVk8n28wjqESfyWWadw663E1oHtik4Cxfr7vY0hwUCcgEvXYhnewV0l+OBwm7rp1aU8J83A4TDjl0BueEijboZKZEnS1Q1IiY9xmEmQScp1DSsE+PxqgZWpq6pSd29X5fE+lS44N1eS6bnXc3dYcA1Vf4z4PWp6OLceF5avfhbY5k8kErYg6xVFC1jo84pqOZ9q6173BcWcdR0dHYe9ns9lwFBFAcKTSOen3+7h8+TI+/OEP4+LFiyiVStjd3Q0AzJgCSgO4j99Lk6eHGoDvhYOaJMW4x7TfYs/TCLnnTSO2ShQ0H4mH3tlKp4p6vY69vT0Ui0UsLi5idXU1EEIeTyGBZJhFEjfg5MYlbm6XzLRtQPJyeDp5aCAOlfpIREg0qUIk8Wm1WgmiEfO4VmcalRT43SWVcdoFBRbn2B3AVK3oc+Fqdj8/SmcdbXc2mw1ApdKySqgcN7ZXAVgBWfs0NTWVACUFHQVg9Wxmm9xerGYIAgAJuY47jy6RAeTRJ50fBz2tU5k9f0/Xjia3m8ckmdgcsw7XJrgdVpkYL4/f9Tf1yXCGzOeR4TGdiXbbNG32XBt+vtodtNgHZRK1bDLq+/v7mJ2dDRcvHBwcoNlsBtMFPf8PDg5w5coVfOxjHwt3/zYajeDIyduPOJ8ayjQm/cbSJDQzRotj0umoNA4ntLxRUm7aO/eTHmoAZjrLwKUlfd83YFr+UXnuZWJ8w+p3ljkcDoOky1tg6vU63nrrLVSrVTz33HO4cuUKPvrRj+K//bf/Fux7i4uLqNVqaLVa2NzcxPLyMgqFQrDjcZMyOpISLqqV2Aba6jhOfhsOiWpMJaixfElwlpaWTs2flscy3Q7sQM3/CSZK9JXoat9Yhs+dXqHH/tL+qm1iXQ4e2lYyK8CJ9yyl/1FnoFk/26Bnr9Pi7WqcYj1CdnR0HNuXsZ0PDg5CvGceQyLhZ0CWXC4X7PI6vgp62WwWq6urqNfrgZDPzc1hbW0ttJvMVkwC1vFiu9W2D5w4IGndDpw+x+w/n/N9zreDrpbLj6tznRnkb3rkiONNbQ7t9XzO9/QmJaqhNWLd1tYWcrlcCH/Ks9DaXjJFbhpi2FnG+qbPRb1eR6fTweOPPx7ut97e3satW7eC5E7pN5vN4ru/+7vxkY98BNlsFtvb2+E2sN3dXdRqtWD2omMWbc06J2lMbSzFmJ4YAOt8uJnL83rSvONotOKK1+vl3Sv+PBIA/G5LeoxCN8Du7i7a7XY4y1soFFCv1wNRpJ2KthxyvApGetRh1AJVQkUCx7JU4nW7MOvh/8q1ax6XuvUTc6LRpBvF++AAonUqgfVN7WWlla1jwzpU2lRCSQKieZ1w8T0FbWUqFOhVWlJHLYKJHkMiwSXgkslSxyJ1xOM7lPq1jblcDsViMUhHu7u7WFlZOWWzV8bSJXmWq05vWmds/MmMKEPGvDxbHVtT2naVxH2ded60xDZqXmUOtc9aDxP7TdU/QZQ2W2oZnBlwQOZ3OkORSaZ2ikwljxlSouX1mhwv3oR0+fLlhH1/OBwmjjFxvP3s86Tjdj/pfiXPfy7pkQDgd3Ki76Wu2OJw6WGSd12lxqRnL7nBGo1GiHBTLpexuLiIarWKvb29sKEoXfA4EqUhPTOpkq2DAtuigKF5SPRUgnbiqd6l+jxtzFgfGQM9CqVSEMvwsVX1n+bRdjt3rpKKSp5pIOJz5cwJibOWN+p3SlW+LvTYCnAagAliBFaN3OVOYZTKVLvC9jsYqHlAx5zjwFCVtAXv7u6GKEs6r+o0xfbreMUciNKYJVXbq0lGy1FNiM+LOnf5mdsYiOgaijEEvg60DjVF8Cq/mITIcZ+enka1WkWr1QoA5+vV1fDsh9p6yVSpepheztPT08FDnoFNlGFZW1vD1atXASDYfAeDQQhNqbHiCcBuFontDZ1TX9+TSKeTSK5al9bv/ztt898neX6/6aEG4HGDdVZgVm590ryTlpvWpjT1SdrmpspKA+PzSEetVgvSR7lcxtraGm7fvh2OHdDjcX9/H41GA6VSKaiJKVVzI2lSVZfbFl3i9fFRouHSEJ/FNq5+p5OX15/GoPjm9zb7//qOg4F66Mb6FZPKndj7fJJgaTkETSfyPhZ8rgCjKkwCNe3+CrQ6D5SI2R6qSCkZ8yx4TFL3dZzJZMLVhc1mMwT512NlQDL05KhALD6Hvl+Yjz4QGp5VpX0yMno0jceTdBx9feoa5Vz4Gokxm9wrnBNfZ5wbfVfXhjI4lUolMMYsUxk1laQVkKl+pgQ9HA7D0cXBYBC0FdSEUW3MuQGOJeQXX3wRV65cAYDgX8L7x9XOz3FXs4GrhWNMlNPP2P8xOjyK6Ymty1ialHZ/OwS7hxqA08DyLMDo+WPc2rj6mO+sE+aLLk2ScwKl9iICZ7fbDUE56vV6CB332muvodFoYDg8PlvLzcOISfR2pURN1ZIDp7dbn1OCoGTnHKfmdacYMhDabwdGJa5KzNI2sYPWKGIe+8QkDH0eK0/7mNb/mO1ZGRj+xn6qR7VKkw7csbozmUyw5c7OzqLdbgeCqRIZmSs9B67naX08lQlU9XQ+n0epVMLe3l4I6p/L5cKZYWeWdCzYfoKlj6GvDV977CsZSV1DHGtlGAmEnEv1Zo9Jab6WHLjJDGkfCZ4xZtLfVwaP+WgnVqcqV83remR7W61WkFBJJ8ikZLPZcMaX3sx0BgROYoqvra3hmWeeCe0hI8Ky9ay6elrH6KjOm9NPH+MYnfG1kAbaXq+v2Vi5sTLS6LunBwXODzUAA++MJ/S4SdbnvqA8xQA99v9ZEl3+ydlOT0+j2Wxie3sbGxsbWFpaQqlUwgsvvIDXX38dm5ub6PV6mJ+fD/acRqOBfD6ParUabLf9fj9sylKplNjwKhHEuFngdLQp/a5qXSWEBGAHNg9woaAb80bldwUVJcJsp3PjLI9XsJEwquTIvAqSPgb8zY9jaVJ1J+3xJNbqCaz1xaRXLQtAQkWpbZqZmcH8/Dx6vR52d3dPaQBarVaCoSmXy6hWq1hbW8Pi4mLi4nUtl0dWNNb4zMwMSqUSKpUKOp0Orl+/jm63i5WVlUSELNUI8C5aAiL7xflV9biDn46R2lC1reonoUyNSq7sn6r8YwyZmiCU8WGZHlSFdfrVfGR2dC1z3SpoEZQVnHU/EZBV89TtdnHr1q0AwL1eL9jlh8Mh5ufncfHiRfT7fbz11lvY3NxEp9MJdXI+e70e/vIv/xLZbBYvvvgizp07hwsXLuDGjRuJ+OCkQ6p+dnocA0JnxsalUWA6Ko0TzkYJW6PKelDgCzwCAHw/4PsgB3LUYkoD9NikxhZbGtipGprBOHgWbzAYJCIZ9fv94HnZarWCo4ba9PQsnzrbxPoTkwLTJAZ95hIyk27g2PdR9fpYKpFXQqvlKph5uS6RuBSs9Xn72D/38FUgIPiS8XDQUZCM1a/2dWoHSMQ1D9WdBEDtO+15bAPv/y2VSsEzWgNpxBgh/nZ0dBSOuAyHw3AZCPNXq9WgolYGS++tJpDTjqkBP9QL2m21qjVwTYCOi6qctU9U5Trz6OuKjJLOF+t2Ro3tVoYjtq59LSlD4EyCt8UZSKqUGYqUZg6qoqemplCpVFCpVIJHNPc/1zxPRezu7mJjYyP4ivzQD/0QLl68GNrPj0bEG5ViEqjvQR0jT+No5rg675XOx/b4g04PPQAznZVDikmiuijuheOKvaMANCmHNa584PT1hFRD86zvwcEBlpaWcO7cOVSrVdy6dQuVSgX5fD5s2P39fQBIqO/8eEtsjLwvLgGngZS+F2NKHLjT8vhzBR7N49KSz3HaBlOQ8z6mMQQsj8DrEo2PKb/TDksgYzkamCLGLMSkYm8vpSOGaWy322GOuX6Ak2hpc3NzQf2s3vFsGyV2Hhfi7wzQwHOhVJ0eHR2hVqvh4OAApVIJCwsLp4KZ6FGd2NzE1pKvM1+TDm5uo1UtA9vh8xWjBw58yuCRqfEQljqfABLSsK8hbbczoN4mnRPecsZgKARfSqecEzJCm5ubIT40y6PPAEPcHh0dBYc6HmHTI1XD4YnvgZ8aSGNmtB+x5zom+v842jiKppwlj6cYoz6uDWdNjwwAv9uSSj8eaJ3OFfPz87hw4QLW19dx48aNwOXyqjFywHoeVT2saQNkUklI1bwx4jAqOWHRZy6NaN4YMRpV/nA4PGWb0xRTE6f114+1aNu1PFWb6nMgeYGDenPzCBHfc6knTVKPtcNBmw5JuVwuSJzqlETwpaRcLBZPOV+R0OvxMfb14OAg3D88HA4T4Mt6eFECg3sogHDtERhj46p9jvkMxLQarlHQMlWS51r2elWi9lCg7H+sjTq+Kr2zfPe41vfVzquSpu4L943gc2rANO4zmWlqOKrVKqamphLhMJX5yOfzWF5extzcHHZ2drC0tIS1tbUQW5vgzv5xvcXO0k+aJhV0XDB6VNJDD8D3MymxSfey9HvaIplU0htXV1p5sXZwAxKAeYRID+Gvrq7iwoULuHDhAv7u7/4OU1NT4XJ1qqFpz6NEQ2Du9/vI5/OJdilBUFBRyWGcpJzG1TuRif0GJIOUqBSobXTQJhBR8nfJJdaGGDOg4RpZthJqb4u3k/n1ZhxeDamBOZhXQxCq/ZYgq8eSlPjruLhHNJCMBqUSaKFQQLlcDiEQVcoioeUaIVhwvQAITIr2jTZxlhML/6ljxzoV7H0NxiRYJrWzuxZH+85x8vnTefejZ7E267j73gQQjh3F3kkDYW2Daisc/HwdUQPGMsiYz87Oolwuo1wuYzgchitJ1f4+HA5RKpXw+OOP4+rVq9jc3ES1WsXzzz+PXC6HWq2Gzc1NNBqNwLgroxXb69pvHTv/Xfvv7/P/GCM6Ko2i1ZOCvrcprez7YQoeegA+y2DG3mNKA0wnqK4SA+LnAvX9s06Qc/MxpoAbrNvtIp/PB2LHYyD1eh35fB5PPfUUdnd38a1vfQt3795FqVQKDhW9Xg97e3tBXcaADNvb2+FcJ1WkattUxxHlyp2w+uZivxy4nIjGxszzqdTiZWpSdaXaGJ1JUGBRwGbbGcqPYEapiGDlzIUDOuvWeWU7CMLUOOhYa7+y2SwajQYajUaQKGlSUMmZbZiamkI+nw/SjQIwGRHmzeVyOHfuHObn51Olbn9OVaced9IIXO4dy/OnbKdKv/zO9RQDYR1f9RB3tbIyIHpGVW3L7Iee8da1rM5aur41aIfOFdvBOeNRP96vTCZHx5z1xTz89XIPMtcEYDIP7IeGqZydnQ1ez9SIUQs2MzODra2toFamdmRmZgaLi4v40Ic+hB/5kR/Byy+/jKOjI+zt7aHf76NWq+Htt9/GP/zDP6BWq4Vzw1NTU0Eq1nlyCd+ZYabYd/YpBsz+d9x7aUn36igwjTERsfrTnk2SHnoAfjcn5ZL1OFKr1cL+/j6mpqZQLpdx4cIFXL16FTdu3AhBEwjavNqQhJOe0FRTKXFS9Z7b4WLprExRWhlev5cd46zHtYlSikfq4m9aN4kNiZpK6ARgVXWqZOpEgQRTvZ7VIcuJiUqbZAQYKlAvX4iNh7af7dQ87NfU1FS4/ciZPq4xNT14fwnu7qREjQGTgm1szBXECKiUunVclJlhcrOFHveJqaF1bEYxuppPna9Uhc3f9X/Ozfb2Nubm5lCpVFAul4P5JyZ1xyT1tPY600UGOpfLBcAmA0RmmnZiMiHc8wz8cenSJVy5ciV4vzcajeCwtbOzEy5f4HjplaSjwO9+JEQv40HQlH9O6T0A/v/T/S4SV7WkgcVZUhph0ESOmCoqqp/b7TYAoFAoYH19HdeuXcMXvvAFdLvdEIqO0XLoVEMVIg/ct9vtxL2rsTY58R8FzDHVkUvG/l3rU5XZJACs7/jvakv09ijYsH88K82LLNQpySUgXjiht/1o0jCdJJQeApQgoiq+wWAQpDmXdl2joH0ZDoeJ4A8cLwdgBmNwUGI5MacwxpdW9blK/H6MJiZh+Pzox22tLNdDqOr8abxt5tex0Ppje9bXqTJVqmLXdruGgL9tbGxgZmYmxN7WcKCuteCccAx9TJSB0f4xHRwcnIoQBhzTgGw2G87+crzU/r+4uIjz589jbW0tzFWr1UKr1UKtVsPOzk7CfMMTE26393EbJ/WmpTSJcxQtnPS3GMN61vIeVHoPgMckXTAxQh7j/mL5vCzN67/HCIAvBgcSSsJUfTEG9NTUFObn5/H0008jm82i3W6jWCyGjdfr9cINLVRHcdPxLChVozFpVEFTwdf7of8rIdO+6HtqC9NnLpGwbB1DbU+MMLIP+rvbaVUdyTbn83kMBsf36FLTwHEm8eRRL3oTFwoFLCwsJMCAUrDadyldOyjQzk8VpF4hqIDn64T9UemadfGj6mICNMtS+6fbolWFTenamSKXPlmm20qZtF6V/rRNLI9r1X0S0uY9th51/XhSxssZDl/Tyuxon6hdun37dtBcFIvFoOLXdRfza/D94OOl4w6cxIdnfAD6cXCsGK6WISUBhEAtc3NzWF5extLSUriikOasTqcTLmJwmjPuCJLuXx87fmc/2SdNkzDxnieN7nqeSYSbUe14UOldC8CjVCZnTWfhvM5SVgywY9KiqoK63S62trbw1ltvodvthuAIr7zyCi5fvoxvfvOb2NzcTFwjR+I7NzeHUqmETqeDu3fvhvOdL7zwQuJGG+XQY313SSONafH+MI9/d1BQQqDEHTjxAgZOb2gfR7ftqW2YoSL5fDAYJIJJ8OOB/Gkr3t3dDeBFWy29gGmzJPBqvdRGAAiSNo+UUOLQuaBkFbOtUsLW8+I6jpRcCcZkyAj82h6uF203x9HHWUHU50iZH/UnYBvdgzibzQZHQT7j3DORoVF1vraB9StY87uq9yll8uIDbb8zOWyL3gTm0mwul8P8/Hy4gezo6PhSFIIw2xDzIVCveOBYinVaoOC7v7+PVqsVIuEdHh4in89jbW0Ng8EAOzs72NzcxN7eHobDYbiSsFqtolgs4ju/8zvxxBNPhLIZV35jYwM3b97Ezs5OsC2TEVRpOo3Zjgkczqg5GJ4FHJ1GnkW6npT+xxigB5UeeQBOG+x7Gcxx6hMHEX82aoHFylVOONZuLnQ98kGnjmazib29PczPz2N2dhb5fB6PPfYYXn/9dTSbzaCWImhQcmPYQm6wnZ0ddDodVKvVBPFUwqacrgOzS58xNWDMvhtb8O545WMVk3yAZPANlTZU0tLflOgqaFEFzHPWmUwmjKODCSWQo6OjEJmo0+kkojYRuNWpR7/T25Tl8UiJAqCCJ+NJq62SedRWp1Iv55/qS9ooOQZsC9/T8eQYqZrZpUPXJOh3lUL5jARdbZw8uqQAHmNEVRtEcPL59H3ljBjn2rUrMalXGUIya9qmfD6PS5cuBebp8PAQOzs7QZuiwO9tiTGrscQ+U/LlWuOlC4yExvt7uYZo86fd+Mknn8TS0lIol5e27O3tBX8Q9SCnhJ9GR7XNOv+ex/fpWZPTjVh7YrT3rMnLPSuIp6WHHoBHLdBJuZY0NUba90meO3iOWwAxoB63uJXwKGEj8X7rrbdQKpWwvr4OAHjiiSfwj//4j9ja2koQOA2mTkccngeu1+vY3d1FsVgMxM89SWN9jAEif1eOX7+n9YnEV/uvwK3Ei31iea7OVEbBGQl1pNHfCRSDwSAQOgIwVfn8q16wjA6lIR8JMJTS9FwopV3+7gxWJpMJAMuy+C4BlXf7quZApTnmU9t+t9tFo9EAcOwNrec9mcclQuAETPUSCF1X+o7OLcvTOVfmR8FTpXCWp0yUgzCTMgYKzGpDVXurvudq5Wz2JGyotlEB0/cnJelLly6FOnZ3d1Gv15HJZEKEOj9KxqRrku3S/cYyCYZk0trtNgaDAQqFAubn55HP57G5uZm4oIFt47gWi0VcvXoV1Wo11NXv94Mpi+tBmSQyFd5e/1+/j5J0YwAXKzON3k9K6+8HMO8VvEelhx6AgckN+6PeB+JOIePe0fcm/X0UGGtfvIwYMCtRcLDb3NxEs9kMl6Nfu3YNly9fxltvvZVwIOKG6/f7YWOSAB8eHgav6FwuFwiuEg0SIwUEnxMlvJrH+6uAo31VYhobVxJKfR4r31WJaYRc+8Ny9Vo3EmHayGmPoxRUKBQCE0NVHQmmRktS6ZngrbcFKWMBnKjLVXWpamxVlwNIqEmVmVFGZXp6Gt1uF5ubm5ifnw/v6Rjq2oppK2Lj5/OiN+YMh8PEUSjXjGhSidTn3uvW+nw/xNqledwPIAYknHvXBriUpTZx/qagyft1aZZwmqDrlO87c6PmAIaN7PV6KBaLwet6MBiE6Hhcd3QUHA6PA6ecP38epVIJAMJ+393dDfeL8122S+8bTgPGcfTR8znzHivHy4rRRC0nRmdHlR1L4wSm+02PBAC/25NKJroQ2+128GamJHzlyhV89atfTRxHINGnh+3c3FwiIhY3HD1PVSJNAy9XKzOlMR18R6UVJTaxjeOMUhoDFeO0ldARTEcxUlQFayhBVeVRTaofvVPX7Ynq9cxnJKraNmVcVDUcI9T8TmBjG2dmZkIePmcehp8slUqo1+sYDAbI5/NhPPz6Ppbp48lERkDV6j7+2l9nNn0Na5ud8dQ1ksaEav1apq4TlkGNRFpSxszbqWU7yPNZLpdDuVwOwTL6/X7Co1v76WvRwZdSOe2/PLkAIMT01utHuZe1rKmpKaysrODpp58OzleHh4eo1Wqo1WqJ0JZ8l/V1u92RDlgPMsXG41FJDz0AP8iJSSPasTyj1Cfj8o8Cplh53i4nTHqMhRuENyTxLs9isYjHH38c3/Vd34VXX30VX//618MNOUpg6SQCADs7OxgMBqjX6ygUCsGupOEEXU2s37Vf7IerI10q5DuU9BQY09R9wMnxFLZLpWgtM5PJJO48pvTIcHusRwMx8BnVbsPhMHiQUgJW5yAFg+FwGCQc2mhnZmbCtZCUqsjoOFevYKJRz1QtXS6Xw9hraFIFX6oaaSfsdrtYXl7G6uoqHnvsMSwtLSUCODD5hQwEVx3bo6OjRGAMXQuqLdHwlmT42E/VBLh0y3yqrqc6VQNcqAMWHdXcBOHrSuviewqIqgkh00CGivWzzb7mnHHMZo+vA8zn88GPoNPpBE9l1qHSro65A/r+/j5qtRpu376Nt99+Gzs7O1hbW8OlS5dQKBTCLVj0Zqadn+vwAx/4AH74h38Y3/M934O5uTk0Gg3cvXsXN27cwN27d7G7u4tarRbePTg4QL1eR61WC97UXKujmDLfq2m/exlpDDVTjF679sP/1++x9oxiwt+J9NAD8Kg0buDGLYj7SZOoXdKkOn/mC2Sc1KBqqU6nEzZ7uVzGxYsXgxq60WicCnrQ6/WwuLiIfD4fVNH1ej3ECaZEl8ZExD4xacHHSTeQfly69nI9v4IwVcYkrqPaFWtnbFxJDOmwRiLp86t1qKoOQFBBqqSqTlIq4ZDg87ytlqnncmmT1iNHSnj0gnra80qlEpaWlrC4uBhUkjyywj7FAFgZNoIx26E2Vl/LZFJU3a5nnJ3oKvOjDB/DLlLLwHJ0nnX+fD5i55m1/RpZStcGmYg04u5aAm2Hjw/ng8BG6Vu9+TWYiO4R9oHXiu7s7ARAXFpaCt7quvfVb6NcLuPKlSv46Ec/iqeeegrlchntdht7e3toNpsJL2cyOhx3dS7U8fH9My6NAjr/G6OJacm1JF6faikmEd7upQ1nSY80AL9bkhIw/d7pdBLOF4VCAZVKBZcuXUK1WsX29naC2FMtNj09jWKxiEKhELypZ2dnUalUwlV1MUmcKQZ0bBf/6jskMg6oaYteiZmCLgkw300jDHyuDjeTJAVgSl5sW5qTD5CMP8w89Cp1xyWtS6Upgj4lO1eFsx4FACX+lIRVOq5UKuEYihJo/agTkLaLEr1KZtrnmETCNgEnYSc1r86Pz5NqTxjzmEdzHFRZn5aRxljpbyphMnnetDXtdWrZyljpOmWfqAEio6X70deFrrdms4larRauFmTkOwAJj2ja3lnW8vIynnnmGbz44os4f/48pqensb29HQC33++j1WoFJpH7RB0Qx0mk76XJ0rsCgHXDaBq1YNKkT/89rezYO/4sjUPj90k5NEo2SrBjAAwce7leuXIFKysruH37Nvb29hKEjnYpXl9GL96pqang2EH7khIHlzK0D0pEtd2xfApIaX1VcFCpQYkc1a/T09PRC+tdQtL3VX3s/aIU5Jewk5Cq5KPgoCaCbDabuKtW20uiq20gAWQeSqpsM1W07tymwMT5AhC8YCuVCorFYnSMOBeetJ8aDCSmsWCb0hg0ptj8eT6Oi2oP9FhSjPmI1aV1+L6NMRA+JszjDK/W4+1W5sPLYvhXqs9jt3f5uqW3PCNUNRoNHB0dhft89dgRz5KTYZqZmcG5c+fwwgsv4MqVK6hUKhgMBuE6Sfp7MA60rj935vK9OU4CHiVNjpJI08ocRR9j7buf9E4xF48MAMcm90GkScqbFIRjkp8nzZNWZoy4qDRHosSIOFRDAUA+n8eTTz6J8+fP44033sDdu3cT9iaqJyldtNtt3LlzB4PBIHhX8niDAo32Z5QkwmcOyAqqrvYEkkeIXAJ2iVnHYWZmJnDxnjdGJJXAsl5NqhJ2J6Lh8CQMInDi9ctx1YhZlKRZH22PHP9s9tjBi4wV1X/KAKi6VcdIx01twTMzM+HcMhmp6enpxPg4U6Dny9kOAKckd9VC6Nwq4OnNW2pT1bmIzaV+KNkxgpPOt2ozXHLkuPiaiTGCMcYsjSF24PX86vMQczAk8+O/Mb+XMRyenDPf3t5GrVZDt9vF3NwcisViAEqCL8+Scw0wHsCzzz6LUqkUtDEEal4vube3l9A8MCgP/Sec5k0KUE4LfezS0jhgH0czJ21njCa9k5L9IwPAZ+GGYu9MymWlSb73soBiXN+oje71aBtIqJVjpRPGzZs3g72vUCjgmWeewXd/93ej0Wjg7bffToDH0dERtra2MD09jXPnzqFYLKLb7aJer+PGjRvhAP5HP/rRU7Yyl4aV22dSO5n2Q8EobSxUMiPBVwmYDlJqp2O5MZsViZueY6VNU8dR7Ys8O0lnFlXRaftdilZCBpzEg2a/CMg6HgwlyLGk0w5vZHIplX1WQKJD2ezsLIrFIpaXl5HNZrGwsIBKpYJsNhuIKteASu78MALScDg85XimzISOF78TtD0edewsrTrkadQlrruDgwMUCgUsLS0FUFd7uEviumdiTFjsPUqYqrrV6FiuYVDvYh0TNRMomDkTqMf4yDCxLL7DvclQs3fv3sWtW7fCbWgrKyuYn58PTleMB693MVcqFayvr+PjH/84PvaxjyUc93q9HhqNBjY2NnD9+vVgU6YXNG9O07Wi624SkFJAi9EzZ3r0+bhyx+V7J0H0ftIjA8D3kiaZlLNwV7F3zvLbpO2KLV719tSFzLCItVotUffly5dx5cqVoPbU6894ocPi4iLK5TKWl5cD91ur1QIo89aUWJuUwKQxGmxvLBiBl6NSQ0xVSOKVNlfOeav0owCrnrY6HyoZqgSvBDk2Dipd63lWHx9lVvTaQJalUiSjGXkZ2u+YVEbQV/V8JpNJXBuo5eixJ5bhkiXnRsdDx0g1CcpwqB2bHx0z9eamXXIwGIQ422w3GQSVptkuZ4C0/S6tAkiotZVB87FgGXoOlwzFYHBypE3z+/Esv3xD+63aDb7Hc/qM0767uxvigpdKpaDNoMezjhmPw5XLZZw/fx5PPvlk8AlQxo8BWdrtdoL5Yrti4KvjHEtc+578PV+vysTr81HpLKCdlu+stP5+JeR3NQDfT3KCN0leYHJJfVIAd2Kn7RoOh8EeRDsRieDly5dx7dq1EFxDHYW4EXmn8Pr6evC2bLfb2N7eRqPRCMcnYqoklYD8e4w4q/SsSaUBEmmVoEjoqMaLnalU9bVLFwqiCu6xM47KDJDwah0xguHSlQJYzG6q6mlK2FTd0u5LSdAdzrRu7y9Bl8ClgT6UeQOS0jvHge/zd3V6cubPGS9lalQTQIceDSTCfHpLlEpxvMnLAcKZIx2H2Fho+1RKZz/ZZrZNI2HpemT7nUnxceH/7qWt7WF5w+FJ9C/OV7fbDZ7KtVotEbmsUqmECGjtdjt4P3O/8ArS5eVlXLt2DdeuXUusa/aFdIIOgpzjwWCQ0Ag4PRpFA0cBlP8WK9v/j+2xSYSaWBpHu89K2+8lvQfAGM853e8gn0XqdXAdlc8lHxI2PiPXTG/bXq8XALhQKODcuXMolUrB8YoEn2dBG40GyuUyFhcXsbq6GohAs9nE3bt3MTMzg2q1mogX7Gpo7YtLj3weAxH/TUFO8yrxVvVfmn1PP8zrhJXqX/+dUqNKbdpfd8JSiVYldgJ8mspd32XZBAiNOU2JTQNt+PgysV2cW1XzOpPiala2y9XdBGcdBx9jZQxV8u31eiEYjDJ/NCPoXPMyC3rmExhVNeuRpzTpeKiTU0zqVwDnuLlZwbUY+q4eJwNOwE3H38c2dqyP2hyO1d7eXoh2RYCl3Tefz2M4HCY8n5UOFAoFrKys4Nq1a/jQhz4UbOcE7L29vXCJA6NpKVNBm7OvSV0rOu6jAFd/1304LsXKjrXnXtIo+n9Wifis6T0Avs80CiTT8ozi+mIpLY8+J/FiEI7p6Wn0ej20Wq0QH7bb7QYP2OnpaTz99NP4wAc+gK9+9atBnTU7Oxtsjdvb28hkMnj/+9+P5557DgBw48YN1Ot1fO1rX0Or1cLly5exsrKSuIGHRMwlRuDELkmJTu25HCuXSB3c2V91CNJ6lRiqepntURUv3+GtQgQ0ShAAgqRLJya9NtBV2WyjgrEGqVA7o0v0DMTBcVJJazAYBIcajoffcBRzhOJHj7coMWU9s7Oz6Ha7CScyPtd1rFIz+zg3N5cAMZXmNHoYJSn2XS+QINjwHd6+xBuF/Oo9LVvXipoRqCnguCrzouPoZ8d1HlkuQdLXIc/csv/qN6B7lEfIyOASWKmhcqc2Ssu89nJraysAMUFydXU1qOP5nOpjBffHH38cH/vYx/DDP/zDeP/7349MJhPivO/s7ODu3bv4x3/8x3BbUq/XS9jdGcyH/XEGcVRyJpzvjaN7MbDW7172WX47S3qngJfpXQPAoziZex3ktAXoahJfRGltSVs0oxYWk6phFeR4bKNWqyXsTgCwtLSED3/4w7h+/XqIeqXHIg4ODtBut3FwcIBqtYrl5eVwO0qtVgv33apkohIF2+4fEj1Vs8XGj4RSiZISfyVaLp2o5KWctjrdaLhEVWW6ZMry+B5Vuapa5e+qigXiUpKq07XPlHp8zWjc4U6nE/rFICrqNU6woJStdSsjpElt09pml6T1fZ1PN30o00VGSQOAZLPZAK4cU/aBwEkGjWE+1dygzIWCoo+zrwHOq+8DXR/O/Pn8K4jww/lxZkyZJq4XMsfD4XEcZh75UYcv5p2dnQ0XLFAK1Xt+i8Uistksut1usPvqXHCtnjt3Dk899RReeOEFFItFHBwcBDvy9vY2tre3sbW1FYJwACdMDqVqaiZiwoPuVx1Tz6eg7SYnf9/nZ1SK0Vgte9R7/6/TIw3AOjH3o6JIS2eRXp3Ypr0/CXcYS1THuUPNcHhsB6aKiffSMn3P93wP/uEf/gG3bt1Cq9VKEF9VFc7Pz2N5eRmtVgutVivYoorFYjj8zzOqThzZV1UVqxNQ2njpRz1KgWNV4tzc3Ck1pBJBV1HxrxI5Zw5Yt5ejIKvATcbAgZN1edluA09zCBoOhwlAJkhRiuK9wwcHB4n51D4qgHBt6G/q5KUSk0piej5Yx1Hbre3UDwGHjCC/601MKsEDx+pSji/XiKuB1eOf7VcJVccvTUPApPkdwPWT1kcd4xiTSZOFM4nUHJAJZXhQaifIiNTr9eDNTMk3mz0OokItl0a80/mhw9ozzzyD559/Pryzt7cXpN/NzU1sbm6Gs9XD4UkEOdqeGUcgtlfT6GoaUMdSTMqNCTCj0rh8MZp7r+WeBeTHpUcagN9NSQGYxEmJR71eR6PRQLVaDWEmM5lM8Ib+xje+gZ2dnUBY1MFkb28vRMFaWVnB3t4ednd30Wq1sL29HQJzFIvFaPAGto+qPQ1ioZIHEN8gKmWR8HsQBiVsrgXQMt1WyfxO0FX1q+Uo8Gg5fEfL0X55f/ibErFRm5nSTC6XS5wbpZlhMBgERxw90sW28h0dJx9fHxv+r2MQAx4Fch8PZeYIOjRXkKirlErAGg6TkbbYTne+Yltck6IgHXO8ihH9tMQ5dGlbx0jnk890Lnys+c7U1FTwYM5kMkH9S2mUfwnQg8HJVYOUsGn31WhmDF1arVbxwgsv4Nq1a8FXgNIvo2i54xXBl3dYUy3/Xnrw6V0FwPfLrQD3ZpSPSUdalqYYMY5JVkwqqVFt5NIiQbTVaoWbTCgRFItFPPbYY1hbW8PNmzfDERe1VbVaLezs7ODChQuYn5/H+vo6Xn/99cCh3717F4VCAYuLiyGovLZVpRbl+tOkRSVY2l+PukQ7Fe1lqkp1VWUMoBWAaQNWW6J6vyqgeJt1jh2AnSDHvitB1r9+zppEVZ3NaCNkHt4x60eqHLC0Hm2DrieXKNNAMSYZ8kPHPo6/ngXWcXMwZX5ntFTLoxoEZfyYV6Vfd6Ty/aNjr+3Svvs+djD295Vh87Wo5gGuO84n1dKUfAGECxEIvuVyGTs7O0H1rAwWtUPlchmrq6u4du0a1tbWABwzYrxqkN7UrVYr4e1NMKZ0nRZ60td42nffMzqGsXLH/Z5Wz6j8Z5WOx9XhtDtNuh+XHhkAjm0iVyvda4qpHMaBZFr77rXOmPoHSEpRBEuq+Xq9HmZnZwMnu7GxgeXlZRQKhQQhf+mll7C5uYnd3V28/vrrQaVJBxEewD86OsK5c+fw+OOP48033wz3DVMdWiwWsbCwgNnZ2UCoFcRIGGgDY1JiREKpBNWJIYlDr9fD1NRx2EyNikRA0XHkezHCPhwOQ1nAicMMkxMgJ/ZKWJVB0P7p794nZZacqCvB4hiy/VQxUk2pzj1qC3YJkOdJj46OAiBq25UxUI0K54dnx3U8fI6USWDZeuOPSqi+d5WBUM/8mOOVSvsAQv8JXOocqMyXM066r1TC1/FXLY0zTQ7EXFt+cxjHRX0RuL7m5uawtLSEfr8fgmxwDvT2qlKphP39fWxsbASAVPAtlUpYWVnBE088gZdffhnPP/98aPfW1hY2NzfD7Ul03lKbLx3Xtra20Gg0Qr+deWGZuna5RmLP04QIf+Zz4r95cubW643VlyYUpaVRQlDs+6TpkQHg99KJ3YuEih8STB4zWFlZCcHfs9ks1tfX8fjjj+PixYu4efNmghOmI1Ymc+xpWSqVMDc3h/X19eAQ0u/3sbe3h+3t7XCRA28L4uZVyTJtE/GvS1UATklAh4eHwZaoQQVc8vXx8U2uoKOqTQUB9WiNSYb6V8uOtYm/6TjEnNe8vV63jmexWAwEncES9OiTvj8YDII3Lc/Xaj06FlwDWp+30+fJGVQ/I+wMi44L63dtRgx8WYcyGArUlI7VDu0SrauG+VHtjK/VmKkktg68//5cy40xjQrw1BzRDDQcDtFoNBI3FfFdXpqytraGJ598Eh/5yEfC/d703eA9v+rUxfnm/9SUxZz23ksPLj0yADxOBZDGUXmeSTmZmCScJm3HJNiz1HGWNjCMHjcSudmpqalg86HqltIPb0h68skn8c1vfjMQIm7ATqeDqamp4P2cz+dx7ty5cOifZxO3t7fD3be0BythV4lMCR6TEkn9n31S9WMmkwnHqdzu60TPwctVhSodkTFRyYn2YG9nTHqLzRvLdelb31PCrNKq9s3rZ14CsEZmAk5CPwJIjJ8eZ+HcuLTN8nQ8CAxqL46Nh65FnS8FLy2L5fGjznlcw25a0f778STVuOgRNd8zqgHxtZgmocX2nI6fJw1Y4utO6yEA6zyqH8by8jLm5+cxPT0d9qEe6eKYlkolLC8v48qVK3juuefwvve9L9iKt7a2sLe3F2y+/KiXOutrt9uJs/BpY+L9iY1TLM8oWjuOno7L7++MkrYnKX/SPPeSHhkATksOfuNUI2llxN5x4jlpO8aB/1mZAP3OTUuPSBKlbDYbDtx3u11UKpXEu2tra3j22Wfxla98JUiA9KzkDSkzMzOo1WqYnZ3F1atX0el0wi0qR0dH2NnZCXZLAMFLmVKFq0JVElEpQIkj+9LtdkM5PJ5CVbkSIZc4fXzSiKZesn54eBhi/7oN09vPpDbGGLPnkp7aL2POT/7dbbQKPnrT0dHRUVAv80w41ZxkvKjybLfboV+ZzIn9muVzrFUajREun0+OPyUqtf2qTV0ZC3duU2ZKg3XoeLu9nn1T6Vcl+lh7XSrWtadzoICva5R5WIbn9/nUdaD2YV0n7LMGwFheXkaxWAz24b29vURQD+BYdb+4uIgLFy4Ez2dqqprNZggzSclZpV+OHdcNHft0rmMgG9N+6JicRTCKvZ/2Pa1d/pu/fy/AO6ot9wvMjwwAx7igtDyjfo+B6SjgHFfmpJJvrM40oE6rh5uChE+JGAC0221sbW1hZ2cHCwsLifKXl5fx3HPP4cUXX0S9Xkc2mw1nTlkebcn1eh3D4RCLi4s4d+4cWq1WcOYgAPN4jBNCJ9YKTvyoFE+woEqb9lnakf3dGJFNGzc+U8cfgj6JOANFqLQxzvGGZWqbYpK9t8WlMn2mwSIIAJTwtA/UQBBwSKRJTGdmZlCpVLC4uIhqtRrqi3n2KrgrsKoUrwCiNmP1yFdHKWW23HuaZei60ONTTBwblcwpybk0reMZm/sYcfU5i60Xf9fByPs17jf+1f1Gb+RCoYBqtYrBYBBCxPq53KmpKRQKBayvr+PKlSt45pln8PjjjwM4ifHs+5iBV4bDYZB86YHd7XZDv9Jo3Cjalib5upAxCYCNo6GjQPisaRJwfZD1PTIAPMkkpeUfJX2OAryztsfBYBTHN0kdsfyDwSBsMMYLBo6JRrvdxs2bN/Hqq68GCTibzQanpm63i+eeew537tzBG2+8EdTN7XYbvV4PwIm0ef369RBbtlKp4PXXX8dbb72F7e1tdDod3L17Fzs7O1hcXMT8/Hy4Ko1Sq6ofPRwhicLU1PEF4wzG4BKSArYyGw7GSjBV0lZpleOk45fL5cIVbtQI8N1YmS4psQ3q8MW/abZwlby4RnzdqBTuNu9MJoNqtRqAjgSXl7Zns1ksLS3hiSeewOLiYsKBh2W7NKpt6ff7wSfA26OA6eplja/MI0havs4ln8WO1bFeBd+Dg4MgsRHoPUhKLCmj4kQ1Jsnyo3OStod1XTlRd/s8nx8eHoaY6wzOUa1WceHCBWSzWdy8eRObm5vBjMSxn5qawvz8PFZXV/HRj34UP/ADP4DnnnsOy8vLABBit3e73RBGdmNjI0i8ZHjb7TZ2d3extbV1Sv3s/+uzUZKwr59RgBtjaEalGHPtDHis7WcRqCaRru8nPTIAHEs+eLFNxufvZL1exzhVjS8sZxBinLl7r3JzkSh2u13Mz8/j4OAAW1tb2N7extzcHPb29vD666/jzTffxN7eHtbW1nD16lXU63XcvHkzqA5VTXVwcBDsvSsrKzh//nwAd6qMB4PjS75LpVJCKlGplYCpbQUQzhSrN7IfreKYqJ1RCTjHQlWn+r6rAt1hicwLpUoCiNsx+R4JmTv8qPTKfARlBzqfTyX2Wp+Cm6qmmdTuSfBrNBoBjMkEKeOjjIWr2unIpBKsMj3KyOiYU43KNaQhQDVcos6HqvK9bAV8fnStcxy0/y79Ohg486LrQUHX50f/T5P2fB6VQfAy9UrARqMRzEaVSgXVajVIvvR2Z8pms+G87+LiIp566ik89dRTAXwBBAa60+mEUw1kxrjWeda41WpFo16ljZ8/i43JKGl3FIjGfvNyRkmsaYLOKEHo250eaQD2dL9qg7SF4NyW/sbfmWcUR3UvEm8aMA8Gx96uJH5U5R4eHmJ7ext37txBLpfDW2+9hb/6q7/Cm2++ienp6XBl2cbGBt58880ApArs3My1Wg0zMzNYWloK95Hu7OwEor2+vo6LFy9icXERpVIJs7OzgVBS4lQCzOc8RqXSZWwTO4BwDJzoukSs46VEV/MSPNgWAohGhnIiFGOm+F2P5bjaXAkBGQh1RoqtnVjdSvAVrAhsLF/twA5yrmZXDQWZIaq5+en3+6fWIcuk9kJV2Q54MakyBow6vnqVIgN6qLlD10GaBJY2hrEU288cX59rHQd/L807nY5x29vbaDabyGaz4SKUubk53LhxIzhGaZtnZmZQKpWC5/MHP/jBEJmOISdbrRaazWaIgNXtdkPbOH48T04tT2zPjWI0YgIGx0mZ1th4jkqxMfQ0iSQbS7q2xpV1v9iRlt5VAPywpjRuVH/3NBgcX76gwSVI2Cih8v5Q3hW8srKCCxcu4PHHH0en08GNGzdwdHSUuIibAMwQlXNzc+Fc8cLCQggGn8lksLa2htXV1RBMP5PJBGcqEiECjUp4LhWxjw6sHnaTKQZUqtplXpdyFIjVJqYSoNrUPaUBpIK7SkPu6KPPOEYKUOPWg+ZVqVbzElBV9cx2uYTP/JlMJiFlpqlQtf2qdtbY1KzfHZl0nt1u7f2jBElmglG2nPmIzbn+VcI6CYFNYxyY0jQa/o73mRGvGCCD5o+lpSWUy2UMBgPs7u4GZ0e+R+0M997jjz+Oy5cvh2NHVClT8qUUTQlanb0IvuOCbtxL+n8pYf5zT48EAKdxKKMmPpbfuddRZfgGTNvAaVxjWr40bn1Ue5QwKNGv1+sYDAaoVqvhqAp/40Z+4oknUK1WMT8/j8cffzzcFfr888/j0qVL+IM/+AO0Wq1wDIkbO5PJhHOE7XYbq6urOH/+PA4PD3H37l0cHR2hXC6jUCgk7pFVQu/SmdszlQjHJEcl4pTuXJqlxOCcrkpp+nHPWcbIpdc17ZcaWYrlqaOUEkk9S8xxpxTC9rqq3AFK26frQAFR1cMEAxJY2gAZpKPZbGJxcRHASSxnVfmz3XQEchMAcHI1Iu2xnGMydyybBJ9HoTjnen5bAd9BTRke1sW1xznXG5nUDKEptrf8mWoCVKpm+RzP2P5UNb0yAc4YKIgOBgPcunULb7/9Nm7cuIFarYZsNosnn3wSFy5cQKfTwe3bt7G9vX2q3YVCAUtLS7h8+TJ+8Ad/EN/3fd+HSqWC4fA44AYDdTQaDdy5cwc3btwIl64cHByg2+2GIDobGxuJiyOcYeH/sfHysYwxGWnzMI7Oav5YvlH0OZZP2zpOsGEiPXgn0iMBwPeiHhi1OWO/jypjFAjHmINRi8YXdVqeSZJ6PRYKhYRn7FtvvYWjoyO88MILWFxcRC6XQ6lUCu9WKhW8/PLL+OY3v4mvfe1rYdNSgiEhV+kwn8+jUCgEVTOJfD6fj6rdFEj9u9oYnQj4X9/4MVtxGjPj4KxAx7ZwHOfm5qKSjEruLvVqGzlW6iymYKGaCmVMtJ0+JplMJkjpalukpziPsuzu7gYVJh3K1JFJ1wYBnL+p/Vbnxo8G6TpnOw8ODk6BmubX+UrbR3rfMfPTK10ZmJi5whkvrYP91ue6LjQpYwfg1BEgtovzpmtCk6/9fr+Pu3fvBufFTCYTLjjp9/vhEhVvC72el5aW8Oyzz+KjH/0oHnvsMQAIwMo+1mo17OzshIhXOs/qsKm0ZxSTos98fzl9cvqXBnrjADOWYrQwBu5ezllo6Lg23G96JAD4vXQ6KbdO9THBeHZ2FrVaDQDw9NNPo1wuY3Z2NnhhVioVzMzMYHl5GR/5yEfwv/7X/wqqa402pIEqgJMbiubm5oLai6CtauZRwMv/HYDTCKmmNO3BuHHy8lTyAU6uemT0LW+L1j1Kk6EgrASbYKYBQACckoq1bdpudUDj3DAcKAksVZFaH6OIuV1enaTUVKBHyRR4WbcCDsuIga6+58xMLHlMbIIHy0sDg7R5jgGL542tVT1Oxd+UedC8/F2vigSSkbQYnYr38B4eHmJubg7z8/PIZrPhxrF2u51oH6XtarWKy5cv44Mf/CAuXboUGGjeWEYtwe7ubvCCJ0PJdULPaHeKmyTdi+DzXkqmdy0An3Wxxd5PexYjOGmAMaqccWU7MDnnqRIwpVYG9B8MjkNTbm1tBa9jcsflcjmU+8ILL+CJJ54IIK7h6uipSUmiUCgkHKgocSmxVGkFSEpUMYKW1n8FsBiH7ZLOqLFUgss2KQArM6PSjRNblX5cItDvGulJAYi3HcVCJ3o7ldhThaxzDiAEUGm1WqjX6wGYeb5X40qzfp8Tls1PNpsNGg4HHQCJcdE5VoB3xsvXtfZPJU8COpk6bZeXp2XpvPuaSds7Ot6qsWB9eg7dy44Brq87+mjQ7sugKZVKBQsLC0H65RWE2g/afi9cuIBnn30WH/rQh1CtVjE1NYVutxukZp71JYjTjKD0oN1uByfLUZKuj5GPr86Fmyo8xcq+l5QmdcfSvdQ1Sbn3Kx2/awEYmFwt4fkmSTEJadzCc8KghGCSemPEhk5TDGpBO2Aul0O/38frr7+O4XCI9fV1VKvVRJxl4DhC1ssvv4xmsxnsnzwzyPPDrKfZbIZLwgnAtNMByXjQwIkTVUytGpNqlHi6XcYBEUACFHR83PPX52A4PB25i4ERqI516VQBmM9Zp6uVFTRoC81kMsjn84nbpNKkXgV5PTfNeSDAHh4eBiJMu32hUECxWAzX2enYDwYDzMzMoFAoBNChDZwS7tzcXDApEJSU4LojFsdCJWgdN+2Pr2EHR9VEKDOnc6/goXOoTIGvE517XUvaTubXuVTmAMCp4DBsM+dpMBiENvV6PdRqNdy9ezfMTbFYxMrKCiqVSggbyf3FtnK95HK5oHp+4YUXQhtu374d7vbWvarSL2mBRrLzMYil2H5xRsjzeXlnASyu8bR5iqVJyh9F6yehs+MYuLOkdw0A34/EO+q9cRMQk9zSyo4BUEzCG9Uu5+QZ2WY4HGJ+fh6Hh4fY3NzE0tISSqUSXnvtNdTrdVy9ehXXrl3DhQsXUKvVUCqVUCgUAAA/+qM/igsXLuDLX/4yvvnNb+LNN9/EP/3TP52yG25tbYWACHQumZ+fDw5Meu0a269nNmOct4Kvc9Zq9wOSZ3t9HPldwS0GiMynhEXDOXa73cSl8tPT00Ey0/HXPmlf1C5Ke7nabkmsfQw41vQsVolMjwWxTM49PdR3dnawv7+P+fl5rKysYHl5GQcHB6fGmNIz+84AKpQ8eQRNna9UU6BjrBIjv7uzWMzE4N8JHDGPZ9XAxECdzzScJsvUedP61LbM52r31rI0jzJ6XEPOCPP2MDpJbW9vI5/Ph6N85XIZ9Xodt27dCpHotMxCoYDz58/j+eefx7/+1/86OE0Cx6rnN998M8xhu93G9evXsbOzE/rE+dvb28PW1lYwEynNiGkDdD36c3+WBnBnkXwnAUllktLyxH6/X6n1QaZHBoDTJncSNcK95NV6nYDHOKRY22L1a7lpbfJ8aX3nc0pCtP9S/UU7Ie/0nZ+fR7VaTRBzACgUCnjhhRdQr9dDHNp8Pp/wQs1kMgFY2OZ2u42dnR3UarVwnlG5ZQU4B2AnBC5teP99HmKMjxNKfcfHzjl7vudqWY/D7IAbmy+CiN7kFJt393hWgFNmRONvExz0QoZSqYSlpSXs7e0FRogMgq9PHzsFOzJLVIv2+/1gvnCp3hkaHR+djxjT6e0gULoqO1aOSsXKBMXq8PqVOXPP5Vg5viYdtFm+jku9Xker1cL29naQcFdWVlCtVlEoFMLNYjxypH2ampoKx41eeuklXL58ORFURa8OpO13Y2Mj7FG9jKPZbCb2r++3tBSjRb5/0kB8EuD1NOqdcbTxftI4TUBMULiX9FAD8FkWzLiJiQHpWeq/14kfJyGPqis2+bFnw+EwXCtYKBQwNzcX7IMLCwvY39/Hzs5OuC9Yj8UAx5e8X7x4Ee973/tQq9WwsbGBSqUSgFylBL1X9+DgADs7O9ja2sLy8jIqlcop9Z6q9PhMJRl9poTCwWjU/Clh1GdOYH28tQ7+VYkGQGAqCKyxNvgzSlG09Wrf9B2/gciJOduoIAmcqIGp4p+ZmcHCwgKOjo6vtVMAc09rNwXoeFAFTeaK3rY8psM2xCROTzqe2m8tg7/xDPJwODyl/nfmi0AVi53toKgAqmve17/WpXZtPf6l5fn+VLPF7u4uarVaiLc8HB7HVK9UKshkMqjX62g0GqdszlNTx9dOXrp0CR/+8Ifx/d///YkLVRiPfWZmBp1OBzs7O7h9+3Y41sRxHAwG4QYztaWPAxyOgT+LpbPQxbS1Nkk+fn8nJFoH2XFAf6/0/6EG4Jjkosk5/HFlxf5PG/hRHFCMQ0pr36Rtjj0bt/C0bYPBIEhA5Jp5Uw3Pe25vb+P27dtYXFzEcDhErVZDuVwOEhZDVNbrdbz++uuJOLIkeHrOEwCazWYAbDqYkJh54IeYLdEJJt8liLGfMU7c53FUHq07JikpcdWjHIeHh4Hg84hRTBrQK/GAkzO0DkBKcNP65W31teBgo1KpArOCl4+FS5R8N5PJBLDleVzaGz3iFcvUsjQ5eCog6u/Mox73qr7mGlZJ0eNvsw3UtlBDwDq9bb7fdJ1SMmX9eu2ht9tNLrS98pajQqGAhYUFTE9Ph0AZBGZdC6VSCefOncPzzz+PD37wg7h69Wqo6+DgIISX7Pf72N7eDp7VLIfqewbdoG3Z144ywuOku7Tn9wJGvg7H0d20eu4XjEcxBJMKc2dJDzUAv5cmT5RaGo0GyuVyiJZDdejR0REajQY2Njbw5JNPhjjRR0dHIa5ssVjEU089hV6vhy996UvY398Pt9DoBlK7Fb05b9y4gXK5HI5YuNQLJG26DkzeF3+PKQaemtclr7TN5JK6lkfGQaVeegdr4A++E+tHGiOgUhzHUuvXseVfBRMFIrW3sh0ayYzRydhXlRiZ3FZOwJmZmQnv0K5Jpom/azt1THVuHQCVaXDnpxjAMcUAWJPG4KaKWceG5Srj4qYKrZtjw/lnG2LrTeeKfgR0dKxWq+HYHu/q1TO8mcyxmWN+fh4XLlwIsZ6LxSKAEy1To9HA/v4+arUaNjc3g2f11NRUOIp4dHSEbrcbHOseZDqL1PswpHdCqo6lRxKA07iYs0ijMQLqxHSctDWuXi0vDcDG9S9GGGLtARDUTgcHBzh//jwKhQI2NzexsLAQVFevvfYa1tbWcOXKFSwtLaHdbieCdKyuruLjH/843n77bXzhC1/AP/3TP2FmZiYQYQ00wTOmvPz91q1byOVyuHDhQvC0VXul9kUlSkodqobV34BkzGMfVxJJV03qWI1ymtKzrAoGw+FxDN+jo6PEVYlqu4utASfKqsJUFatKQgQOdUICTsIJUiLVetRBjH3udrvY3NzEYDDAlStXgoaD7Zieng4akuFwGIi12vcVwPL5fPAH6PV6Ich/qVSKzpE60+mZao491c0aeYuMgs+ZgnPs6BbniaaR4XCY8NIn46nlqBTuYxlj7vQ9lqURsbQdBwcH2N3dRbPZRKVSwblz57C2tobt7W3cvXs3gCaAMN/M98wzz+Cll17Cd37nd+Kpp54CcOxktb29jZs3b6Lf76PVauGf/umfsLGxETyb6eOxv78f5r7ZbJ6iI5omkficWXGmahSAxehXrL5Rv+kzfT6OBt5PeicYi3QjzQTpN37jN5DJZPDv/t2/C8/29/fx2c9+NnjZfvrTn8bdu3cT712/fh2f+tSnUCgUsLq6ip/92Z+9b45snNQUk4omKW9U8glWAu4Snqt50hbhWZLWN0n/hsNhcPKgAwhVYiSwh4eHuHXrVriuLJfLoVarodPpJDxGX3nlFbz00ku4cOFCCL7h0hPbRkLUbDbx2muv4ebNm2i326cIn4+hfjToR8zOFpsbLzOtbAKf1uEq4Ngcu1qX54RZlpatwK11KRHXcUg7Z8v61DEp1l8gqT6mFLS/vx9UoHwWu9SCKWZTVWcqAOFsealUCrdY+T2+Ol8KTj4n7KsyHmorj+0d/82Zplgb3FnK901s/en80YGOjozqEe7vcV9R9Ts9PY1isYh8Pg8AwSascZgzmWPv9tXVVVy8eBFPP/003ve+92F9fT20kQFWyPhQha1ezZxf1s8zv2kpbTx0HDVf2p5LK1v/ppXtDICX7YxyrA3vZHqQ0vE9S8Bf/vKX8Z/+03/Ciy++mHj+Mz/zM/jjP/5j/OEf/iHm5+fxUz/1U/jRH/1R/PVf/zWAY479U5/6FNbX1/E3f/M3uHPnDn78x38cMzMz+LVf+7X76817aWQi8ex2u9jb28Pc3ByKxWI435rP55HJZLC5uRnuwT137hxyuRwGgwHW1taCau/SpUv4yEc+gkajEY45tdvtU5I8QYDHWG7cuBGI3/LyMgqFQpQgu+2Mf2OEelzS9qiUzHJU6nEJWMcupmVgXjInatv1Iy4E57m5uUCsnUlREHFmRtWm2j5lShyg2C9K6gwZymhnHBfvTxrI6Vjo72wDpe5YsAwgaS5w9brWwXyq1tX5SZPO9BhSDOD1nTTA0DWi4xj762vI+0uGqdPphHt8Z2dnQ9AaHhPk/DDR7ru4uIiVlZUQEKdarYY829vb2N7eTtxOxqNLmcyJUyRvO6Ka+r30zyfdEwC3Wi38q3/1r/Cf//N/xr//9/8+PN/b28Pv/u7v4vd///fx8Y9/HADwe7/3e3j22WfxpS99CS+//DL+7M/+DN/85jfxF3/xF1hbW8MHPvAB/Mqv/Ap+7ud+Dr/4i7+I2dnZe+qIEo5RHNC9cC9pnBb/xji2UfWP4txivzuRiNUT41ZjYzIcDkNw/lwuh7W1tSD9kjg3Go1Q5mAwCPf9Uq1IDv6ZZ54JdwNTveZX0wEnxHQwGCSCytO+XK1WT3HeafY5HQ+q6fx88CgJiR66MYlHQV/bzTK1X8pc8LnaGWMMQjZ7EnRD32Vb9CxrzBFKjxg5yKYxGcPhMBDg4XCIUqmE9fV1rK+vB4ZLx4VleL8dzNJsp1xHykgxj9vqXZLxM7zKQPgcuHNVDHDTtAGxNqfRDD5XJifGEKYB8HB4rHWq1+vY3d3FYDBAqVRCPp/HcDgMgTA0tnQmc+zoxjt+CcBra2vBPAAgqK0zmQz29vawu7ub8Olg0A06ylHKdjoTY6jSGBx9No7WenLm1Z+Neyftt3da4vUUq+9epeJ7AuDPfvaz+NSnPoVPfOITCQD+yle+goODA3ziE58Iz5555hlcunQJX/ziF/Hyyy/ji1/8It73vvdhbW0t5PnkJz+Jz3zmM/jGN76BD37wg6fqo9MIEwEC+PYYy8ctuDTg1Hdj3x1UNKVJWk7U9G+Mm4/VxeNDe3t7gZDR8YPnhBuNBm7cuIGpqSksLi7i6OgI29vbmJqaClz40tISPvCBDwQ77xtvvJGIzERCrU4xtCnSKeTo6AilUikQr7Qznk6wHSwViJ3Qe1n63UGd6ks+07FWYOQnFuBBJT8vB0AieIUGa3BGQgFN7c7q9Ebg1nrYB+YlAZ6amsLy8jIuXryIlZWVU56wqq3Q+dPY0LqeXBpVQk4nrbR16mvaGQcFS/bXned8fHUc0xgSfabvankO1vpMzQ7eTk3a53a7HRyjeJxoZmYmMMKUfrVfpVIJy8vLWF1dxeXLl/HMM88kyh8MBrh79y6azSamp6dRq9XQaDQSJgfa01utVjhbrHMUS6N+875yvO81PQja7e05S/mTMgGx5OB/r0zAmQH4D/7gD/DVr34VX/7yl0/9trGxgdnZ2YSaBDgOZ7ixsRHyKPjyd/4WS7/+67+OX/qlXzr1fBSApaUHyTVNwgGmSbTaFv1/0kUzLo3Lx8u633jjjSAN7e/vY3t7GysrKxgOh6jX67h+/Xo4w8vg7gcHB1hZWQEAVKtVfN/3fR8uXryI/f19/J//83/CrStqV2R4RAAhahYds4bDIZaWloJaTp1XdEycYx9FVJ148i+JJ7+7VEQGQqN2aVkePtO9jilxKjDHgMslarZHwVvfY3m0bSojwDax7SToJMKct8XFRSwsLIS4wcooqTaB48AyY4yNzocGY9ExdynUkzplUaMwMzOT0JjEjkzpnMekUY4Jx5b5XFUfAw+C6qhjYP6d5aiXNut57bXX8NZbb+Htt98Oc0AtU7PZDJcw8B0GTvnIRz6Cl156CS+//DKefvrpUFer1cLNmzfx9a9/HdevXw97amdnB+12G9lsNsw37f0bGxvRCx0moTmxfTTunbQyYtqOUQA6rj3j8k1S3rdDgBuVzgTAN27cwL/9t/8Wf/7nf55QhbzT6ed//ufxuc99LnxvNBq4ePHiRO86AT0r8I6SKLV8X9Cj6kljAryuGFB7X2IgPi4p4dzd3Q122Hw+H4g3OfR2u41arYapqalw1OTo6AiLi4sJafWpp57C937v92JjYwM3b95Eq9UKm14lEzrUHB4eBsC/fv06hsPjgAQEYQcwJbax/vDj+ZTIutSUJom57ZLj7CpnlqMArGDhgAWcEDHGVo6pRV2962ChTAq/E3CHw2EAMUrGDJRBL211qNK+qOOXazJiY61jo/vA+6QMhoOfjp/+z/rdGU3r032kmhFqBVS7wD6rDT22HrQcbZ/32eda548MQL/fx40bN3Dnzh20Wq0QupQ2W15WwvfoH1CpVPDEE0/g/e9/P5555plwb3Ov18PGxgZee+013LhxA81mM4QdpTZDGS86WHo86dj+YRoHxrGxH/dujEaNon1nlUwneTfWzphmZtI2xJiKe0lnAuCvfOUr2NzcxIc+9KHw7OjoCH/1V3+F//gf/yP+9E//NNg7VAq+e/du8N5bX1/H3/7t3ybKpZe0evhpopetJ+dEY+leATc2YWng55x5rMwYRzaqbfe6QEctptg7zWYTOzs7mJ2dDQEWDg4OwpjzeMP8/DxmZmbQ6/WwtbWFTqeDcrmcKOv7v//78eqrr2IwGISjEGqvpGTpIMygHoPBAKurq8E26Y4waVytEkXg9DV+fIeEVyMYMZ/abSmNKUHWsVPwc9Wkz5uW4/OkauWYpKhqVT1KpW1nv1hvNpsN8Zv1nDYBwMFRwYjAq+MQYzC9vzpGzgylMYjKaMT6w/XgGoFR0rB6lxOAvF5PqtZOa4/3y9vD39kOMq47Ozu4fv069vb2kM1mkcvlghOkXpDAdjCs58LCAq5du4b3ve99IXoccEwn33jjDdy4cSOsB84xj1nx9jNeHkK7r45t2nx4f3Wc/V19f1IaOylojwK1Ub9NIvRo3lHtHydMPSjJ+UwA/H3f93342te+lnj2b/7Nv8EzzzyDn/u5n8PFixcxMzODL3zhC/j0pz8NAPjWt76F69ev45VXXgEAvPLKK/jVX/1VbG5uYnV1FQDw53/+56hUKnjuuefO3IFJOJCzcCnjJjGmVoyVcS8TdNaFrO+Mq8/bxPcODw+DRzQP/He73eCFCRw711WrVVQqFRSLRUxNTWFnZweZTCbkAY7V0d/zPd+DVqsVVNwk6ioBUx1NEK7X63j77bfDUZ719XUsLCwkpBlnKBwgXH0bGx8nKJonRlBJ0Og97BKTE27gtJ0MOIm+pPW5d6+3RdvkErD30aVJ/iXgzs7OhmsOtV6CDwm0Ong58Ma0Agq+PjbKLGg7nejFAE3VzmmE0qUXHRsyWLzGzyVerzvNJjxqbnT82A5Kto1GI0SjarVayGaPTxhQ+iVTpHZfgu/i4iIuXrwYJF9GoWu327h16xbq9XoILcpyCL7D4TAcKWRbeEJh1JilPdM+j8rj8/MgwGlUGWmMw4MCxXeqvFg6EwCXy+XE1VfAcXSkpaWl8Pwnf/In8bnPfS7EN/3pn/5pvPLKK3j55ZcBAD/wAz+A5557Dj/2Yz+G3/zN38TGxgZ+4Rd+AZ/97GejUu64NCl3cr+qglFlj5Nkz7JANf849Ufs+ySbxKWSdruN27dvo9Pp4MKFC1hcXAzHF8rlMu7evRtCUF65cgXnzp1Du90O6kyeZ1xaWsKP/MiP4P3vfz+++MUv4jd+4zdQr9eDqo1qOV6nRo/3TqeD7e1t1Go1vPnmm1hdXcVHPvIRLC0thUD/CrDAyQUEKhFR+lFpktfyxSRWvp/JZNDpdNDpdJDJZEJ/1I7NOv3iCFc586IDH3MFIoKg3sbD/KrmpnrSwVDLI3MyPT0dHOjUoY4MEEGYjI87KqnNVMfHPZr5XCOAKagTeJXpiDE/vhc4zgQmzaNgrO/oHDLoB5m7XC6Hra0tZLNZFAqFRFudWdPoWOocp211TYfOLe3uN2/exNbWFnZ2drC3t4dOp5O4YpJncRkWkv0ql8vBOe6pp57Cd33Xd+E7vuM7wro4PDzEl7/8ZWxubqLX62Fubi5I2Dz6ByDYfXnP8NbWFhqNRvh9lAQ7KY1y8ItpbtJobVr+WL5RbXgQoBvTzIyiq6PacD/pgUfC+q3f+i1ks1l8+tOfRq/Xwyc/+Un89m//dvh9amoKf/RHf4TPfOYzeOWVV1AsFvETP/ET+OVf/uUH3ZREelADNkptoxPpi+gsXGda+bF6NO8kqhtvF9+jumpnZyccC2Jw99nZ2QDSs7OzKBaLuHDhQlBXE7CYrly5gtnZWfyP//E/8Prrr2NzczMAAYBAsCiVFQqFIBnwIvHl5WUcHh5ibW0tnJt1yUVByCVhVe1pRCYlpiphtVot9Pt95PP54MFLKZLl8YhHbA2wPhLymN1Q8+t8uKqW+QhiCtLsU8xBLaaCJ5PAcdAYyQpkOqYKMu5YNByeOH25tKjva/36u4KB/59mdx43dz4fnDdKwGTsOaZcM3SWc+2Cq59joKHOY3R0q9frIagGLyXh3clql9WAG9lsFuVyGYuLizh//jyeeeYZfOADH0jU1Ww2UavVQtt45pdXCU5PTwfmdjAYhJCzDHaj68TX2KikTN+4NCl99fJGgemkdd9velDYcC/pvgH4L//yLxPfc7kcPv/5z+Pzn/986juXL1/Gn/zJn9xv1dH0oCTde0kPEuTHAWnsf29D2hGBtPcJgL1eD4VCAUdHR2i320E93el0sLW1hWKxiMceeyxBrOg8xbS0tIRPfOITmJ+fx6uvvopbt25hc3MzEFhKd7Ozs4FI8VKIw8ND3LhxI0h3i4uLKJVKCYIfsxvGnGvcOSpNxaj2OGVm9BIFgpmPpRMRtyU6CKtE6N9dGlEbJfvjeZRQxqRMSobqfKX2VT5XBy0dA9pkOR9p4Ty9/zom/KhTVQxkmV9TTFrRery/7AtVsYzU5eCdxiBp/xXAYlqPfr8fVL28apBxnun0RnCkFkjnbnZ2FvPz8zh37hyeeuopfOxjHzsV7WpnZyfUR6Df3d1NnOnl9ZCMKd1utxNajQcBZFpObA3GaFAMVMcBq+8Dfz+t7HcipUnHDyo9krGg30v3lo6OjgIxoUqTRIOOLc1mE3fv3sXGxgYODw8xPz8fCLM6Zc3NzeE7vuM7gjqUKritra1AxEggCPBU8Xa7XdRqNQAnR1WYh88UgLlZPa6vblAFUgcYOs3QCY3xg5lXU+z4hP/O8hWo0jyDmRRQnNClETd/N00zMiqspo5nLOyjlsfvzpSkjYG3TT2Tte36NyZ96v9KnNVZzttIrUen08HMzAwWFxdPSeuaXxkzDR/J/ujcAAjexu12O4R23dvbw8HBQcLrnCYB2mvZf0rp+XweKysrePzxx/H888/j2rVrwa9iMBhgZ2cnBNvQcJNULbOdBHjGXSdD+f9SunsvjU+PDACP41TSiAnTvSzUUWXG1G6x77GU1sZRbRglNce4xjR1z8HBAer1erhcgOHscrkcMpkMer0ednd3cevWrVPOPzzOxHTt2jVsbm4G1Viv10OtVgv2Q4Iw7cL0xJ6eng6RfUhEFhYWQvkkuKrqJHDQoUhB2aVUBRhKFZ1OJ9yVTBV0TDKNOVz5b84AxMBMn/OZnvHVIzTM59KvSmQ6pwq26mmdtnbUjhuTynWO+Vfbpcd8VGJ2xsjV3rGx0bCkClbaz7T26byynF6vh1arFY59+ZyyLLUPq42e9bodutfrhfCOVD3z9qFcLheYOQbAUOmX/Zybm0O5XMbly5fx/PPP4/nnnw9Hjqh92t7eRqvVwmBwHBynVquFMjmvehEGfS5U0tY1H2PmYrTD94w+9zU0inY6vYsxnrH0oCXPUeWNordpDO+DatcjA8DjBiS2wPz/tMUwTu0xSvUSW7CjUtoiSFP96DsuWaUtnti7+oxHiPr9PpaXl9Fut4NaOpvNotvt4tVXX8XOzg7OnTuHy5cv49y5c5idnUWlUkmoNF955RU88cQTeOGFF/DFL34RrVYLW1tb6Ha7Qa3JoxKlUgmVSgVra2vI5/PhDHKz2cRgMMBjjz2G1dVVVCqVEMqPfVBA9uARJKp+oQBwHAh/a2sLCwsLeOyxx8IRnmw2e8pJiuXFiIgDBBM9qAkAMZBjPRrkw4mW2qEVYF2iIxhyLGgWoH3bJT2CTzabDUFWeNEAPwQ0joXHedaxduZGPypdxxyrWI5L2OoYpcyGHh3jOKsPQKVSwfb2Nra2trC+vo5qtRoc/3SNur8A62PfKUnrfO3t7aHVaoUIVP1+H6urq0HqpbRaq9UCA6qSb7FYxOrqKp544gl89rOfxbVr1xIapI2NDVy/fh37+/tot9v41re+FW4y4qUfGmSl2Wxid3cX29vbif44TYidFND1E9OQxAA0RtfSfotpG/h9lMCUprHRcicRUtLalCaMeBv0+4NOjwwAv5ceXDo8PAxelnNzc8jn88F5hEc8Op1OADZe6jA/P49erxcIPXCsXl5ZWQnOIV/84hdxdHSEWq0W7FZU0REcpqenUSqVAkHd39/HnTt3EkBKlbUHXFAVpktDLJ/vkEj2er1wPSMlHy3D1c4KfmkMjwOylutScxpgOfFRouRaAC1XgZD/EzS9ndpeHrmiLViPiqmDlB5bctBl+TFiqfV6v/UKx0mcorwOn/ujoyMUCgUUCoXgLdzr9VAsFhPj6N7p/p0gTCZwOBwGb+ZGoxGka16wMByeHEeix7Nriqanp1GpVHDx4kW8+OKLuHr1auI4H3B80QIl20ajgd3d3SDZshw/79toNFL9Pr4d6UFJhe+m9NAD8INQB5yFsxklOaa1SdU/afWN+s3fjXGr49ocI+z+m0pRVGfl83ksLy8jk8mE+35nZ2dDcIdM5tiztFwu49y5c9jf3w/XtZGY8dKHF154AVeuXAlEiQSDR094U0s2m8XKygqKxSKmp6eDmg84IZLT09NYXl4OkpmrCSmZOQCzj4yR22q1AACLi4unjiylSbbOmaep6wgsMQmC7YkBMOtw1XHsf1+Hfs6XUpDGj1bbOROlSD2Oo9Ikz2gTgFx9q21Jk3iUUVJ7vUq2OqZ8N9ZelqMaDWUIjo6OkM/nUS6XMTU1hVarFbzrnRHimMUAmGXpud3Dw8MQSrLf74egNZlMJkis7XY7aHk4FwBCqMkLFy7ghRdewEsvvYRKpZLoG30gGASHzl3K+JBhooqdEvlZ6Mw4SdWf+xzpGGpyBipGK339jpI006Tr+5FIJ3l30vG5n/RQA/CDAN9J67nfdkzSzlGgnkbgz5rSiKP+ToJGD8yLFy+iWCwGlZc6aO3t7QEA8vk8Hn/88SBFFgqFRLjSXC6HJ554Ak8//TT6/X44C6m3JxGEh8Pjs5HFYhFzc3OYmprCjRs3sLm5GdqeyWSwtLQU1KQEdfeEJkCopEaJcG9vD/v7+yHAiMbkpc3OwVfLcdsn26bAwn65NBuzH2u7WRf/Mo/aER2k3Oua/xM83Ttb15EzLmkfl3JdNehqYpXW1Q6qjIhL0aquZ5mxNus72kb2IZfLYX5+HqVSKahpGQPb1eZ6YYgzSWqOcM3J3Nxc0Na02200m000m81w6Yj2kftkfX0d73//+/Fd3/Vd+NjHPpbwmwCAO3fuYH9/PwA9nbuU0aG5YH9/P6jBycCO0kTo2DGNY/4nSWl1eZ5RbfL28HkMkMfVPwlNnjSPtymW515B+aEG4DTJgym2EN9JwJ50siZ97kR7XH0uOcQ42dg7MWmK3+kIQqn28PAwBBgAEIjExsYG7ty5E643JAH09Pzzzwev5vn5edy8eROvvfZaQpVMcBwMBiiXy5ibm0OhUEichzw8PMTy8jIWFhZClCFKVgqCfgyIBJ43BDH6lwNKbMxdKnXg5XMF03F59btKqMosuNOTgo/Wo8DB5/TCJRjECK/PuZ6R1XWlNuM0Au4f7beeH2bZKuG67VslZgXITObkjLRK01ovQY+BglxCJFOjY6WMjwK5BgnZ398PazOfzwe/CN7rSw9kBV917rp06RLe//7347u/+7vx/PPPY35+PvS33+9jZ2cn2HEp/TYajWDjpjOj3gFMc47vbV0X4+Zd51/3Shpg6vNRtCtW/iQCzVl/i+1V/S3WnlFCzSg66vnuB1MeagCeJH07JGTgtHowrd5JOUUvc1zecW1K24CjpO7h8Nie9cYbb2Bvbw8XLlxApVLBcHgc8o7RrHq9HjY3N/H1r38d7XYb6+vr6Pf7KJfLCVU0ALz00ku4cOECvv71r+PNN9/Eq6++GiL80M58+P+1d62xcR3n9ezytcsl98E3KUqULMuW/JBiS7Ysu47TRLXjOmmapkBguG2QBi2SOkXSpEGTvpz2Rx20QIu2aFMURZNfrZEUjRskcRDXSdw6lZ3EsWzLD1kPmhQlLrl87S7JJZeP2x/CGX07mnvv3N2VKEr3AATJ3bkzc+fOnfO95pvVVUxNTaFQKKjcuN3d3WhpaVFkPzk5iVKphC1btmDLli0qcItblZg0Qy4mXHDn5uYwNTUFANi6dWuF0EABgHsspfaia2om4tHJkGAAknz+UlMk6cntWPJwdY6j1PL050hzJ/2Wa2trihhKpZLRTM/nrgsIHD/6/BmcJBdd/Z5l3foY8F5lHm7ZD3ktffusk8KAPKRDZvSSB1FIk28kEkEikcC2bdswOjqK+fl5zMzMqHSqOgFLwYJjTf/qzMyMOru3XC4r9whdGRRUZQAghQb2t6enBx/4wAfwC7/wC9i9ezeSyaQaS27vGx0dxfr6OnK5nLL6MOvcysoKSqWSyrE+OjqKmZkZLC0t+ZKJ/sz1703X6muVXs5tHfGruxoEWRPdrq217XrWSVzVBBxU6qulDT/JzO8hmsr5TWKvF0B+b2tm0a/h56VSCVNTU2qLUDqdxuLiIhoaGtDa2orm5masrq5idnYW7e3tarsQ833LFKMk8JmZGbz55psoFovo6OhQC0upVFIEyFNcGhoa0N/fj1QqBcdxlLltbGxM+eai0Sh6enpUFLObNhuNRpU/LZPJqGMQ6V/TfaE6AXO8+GPaGkNiICTpSMKRvmuSKseeBEFBgCkupSara8t6247jqAPZpRlb3pv0UUvCleZXeW/8TpK5iWxlWUnw0kfNfupChcnUrFsxHMepqEsm+JB9oxbc1tamtsHJoyZ1k718D6jxcq/v0tKSClKj1lsqlZR/WR56QNIFzhNxKpXC0NAQ7rzzTtx5550V7x/3x3NrXyQSwdzcnAoeW18/n2pTCqjcAsXgRf399YJpXTCRtUmrrAfR6tYbHV4a56WGSQnxEjxqxaYn4HpIWpdDS7YheUnmuoZiY5axMbuY2jLVJdulyXZ6elpFyLa3t1eQMHA+ZV4ul0NrayuamprQ2tqKQqGA9vb2CnN0IpHALbfcgpdffhmNjY244447sLCwgDNnzuDMmTNq3yO1n2KxiEQioRZS9rFYLAJAxYJ73XXXXZSvWZ4kRK0+Ho+jv79f5ZoGzi+EjPjVfarAhaAcjokkTa/nqJOQblImechgMakls4wpj7H+I/tLzYq+T0lOOqGZ5oRen0lr1u9bCiU6Mes5o/Uyev26CVx+L/d307yrW6GkRp1IJFAoFJDL5ZRlRt/3KwURGQMxOTmprBGcE6VS6aJjBWW/ZdrPzs5O7Nq1C7fddttFaSaB81uOpqenlRbPdmkyb2xsxNLSkoqdKJVKmJ6eVmZnt/VBH1v9OxNx65Yd07wwPXOv9clGgZD1B1WI/NZHW+jtVtufINj0BByidthMLpraZmZmFLmWy2VlHuMiMTU1hXg8jlgshu7ubiwsLKgFiXtSGxsbkUqlcODAARWJTC2P+xpJvvRhFgoFAOeDuUj4pVJJbQ/h4khTNDUcSWwAlNDQ1taGTCZTkSdabrWhJigJQdeQ5N+64OJGVG6Ex37qpENCo2mV/TX1geRAXyHHjSfiUMCgRkVIouJYSlOqTsQy9zY1bjctTBKhmwnbZB7V/5fCDP/XrRRyoZTXUkiMx+OYmZlBPp9HLBZDW1tbRY5xXsetP9lsFtlsVqV9lJHrtNaQfOXZy9Jd0N3djR07duCWW27BbbfdphJtEOVyWW05chxHWZvy+TxWV1dV/0jA1HxnZmaUNSTE5sWmJ2AvE4YfsdRDe7aRvLw0U7frg0h0UgqVdZsWar1+udC5aRCsf3l5GRMTE5ifn0c6nUYikVAZezo7OxGPx1WygNnZWfT09CCTySjtoaurq6IPNMf98z//s0oZmEgkEI1GMTo6qvzLNG8Xi0W0t7cjmUwik8mgoaEB+XwehUIB09PTOHPmDJaWlrBz5050dXWhra1N1be4uIiJiQmcPHkS1113HXp6eiqiitlONBpV2bCkhuU4TkVwjdsz4jUUSiKRSIV5mz/SN05CY5s0HZNYGC2eSCRUIgmdBHV/bbFYxLlz53Du3Dnk83mUy2VMTEyorTldXV3KRMpxoFZYKpXUvepR3owG1k2W+olTct7pflmOnZy3JoLlNRQWTOUoPPFedGGBZShwnThxAisrKygUCti6dSu2bNmixpv+3qNHj2J8fBwLCwvK5MxAPbpGGPgktzRxrnGM4vE4Dh8+jP379+Puu+/Gtm3bKiKemZSG5LuwsIDh4WF1MhmFXPqY5+bmMDk5qQjbpLWaovb191o+Izmucg6brrHVNG3WXS/LkVs/vOoLAl3LNwltQeurFpuegE2wHUibctWYH3Qtx40gTX1wMyXJSVKPl8BkArQRSEhE09PTiEajyiS8uLiItrY2tLa2Yn19Hfl8HmNjY8oE19zcjHw+XxH1Sbzvfe/DG2+8gdOnT2NxcRFbt27F1NQUSqWS8n2SIHn82urqqtJ0m5ublV/3rbfewvz8vArM6u3tRblcRi6Xw7lz5zA1NYVbb71VaexyXLnQ829JblygudhL8uQ1rEuSgxxnGdVLjZC/9YWT48ztJnrQkuyrnA88GSefz2N6ehpzc3NKA25oaFAmaZ63LLU63dSrL0xec5oanyzHsZDk4KblmjRj3Yog+6nD5GuWlgXHcRQ5Tk9PV+y1pUmZEcUjIyPqNCOZg5yneC0uLqrtc+wjnyV99ky0sW/fPuzduxfbtm2riIXgPnp5dnY2m8XU1JSy0tD1w7SXfJbMr256d72gj6cca33u6dfYtqHDZs0z9dPPrF1NP0ztu/UliHJmuyabcFUScAh31KLtAxciZKemptQe3FgspoJDYrGY2ibB4wtZjguolL4BYGBgAMB58zKDpM6cOaOy/0QiF5IhcOGjZkKCbmpqUqkBmZyARxvOz88jm82qABy2I8lP+ieBSuJYXV2tCMChpqkvgPrYyiAj/pY+ZhKXzH8sSYSaL6Nek8mkOnXKJECRMGZnZzE5OYlcLleRN1gSsGkRJzgW+nMi2D+phcukFabyNguq6Z7keMgAMD3Htxw73ivHmQKcTPgiD6uPRCJqe9Hi4iKWlpYq5lY0GlWar3SRsI/09/Le29raMDg4iJtvvhnveMc71P54iXw+r/I253I5TE5OYmJiomLPL98j5mfns3SLPfAa13qSWYj6YdMTsMmkWyvJSHhJSzbmYzfJS//M7wXx04z1+r3Mo/pnurRn+l/X5Obm5ioOUKBfjBrD6uoqJicnVZYg+TnJWGJgYECdD7y4uIixsbGKZPP0SXJrDfcS8wAFHh7BQ8jl9hvmlC6Xy+jv768IviHJ6KTGcWHEqUy0L8lGN5nqpCyDnlgfD59gm1Jbo6ZGvzm1NgazdXV1qfGWJBCJRJSgMzU1hfHxcRVFy/zOy8vL6qzYUqmEeDyu6pACCIPYTM9fn2vsrz4/pJala15AZXISkqsbUcs2ZDlZH83l0icsfcTc9y3jCpaWlnDy5EnVn+XlZUSjUbX3XFoySMz6oQrS9L+2tqayXO3Zswd33HEHdu3ahUwmo+5lbW0NpVJJCUfz8/PKMpPP51VUMyOwKXQyKEvPQmbS1PTPTFYHOd/0Z62PvVfd8l3RrwsC2/Wvnmu7V92mdi5FHzY9AQP1sePXA7ZkKqGXDdp/fSHymyS6yUrPwsNr9Xr0vadLS0uYmZlRpNTe3q5MxsyGJTVO+h65gNCsJ9HR0YFbbrkF8Xgco6OjipDPnTuHcrmstjuRiAuFAlZXV5VfmDmouU2JpymRUJqbmyu0cBnQpO/T5cLHYBvgvGYTi8UuWrzkYixNzRw35tCWAgTL63tnSUzc7sW+nzt3DrlcDjt27EAsFlP+SW534f04joOzZ89ifHxcpfqk5s2guWKxqI5fBKCul4Fe+jzRBUk3YVQnUjk/daKW5ntpCpdkq5vzWZ8uJNDPLqO92S6D0ebm5irGbHV1VaU4pSWH85TXcesPBRnpKqDFgcJYS0sLBgYGsGfPHtx5551497vfXUG+wPnAwZMnT6qEHfPz85iamlKHLPC9oNWDMRY8RYz3rM8b/f31g41Fwq1+U1s2WraboG+DWtd1XWiptb5a7qWiX84mtE0UCgWkUimjJgX4a51u5Wt5KF7asZv2oJfTv3fTpN3qrQZuWrlOLCbfG4mUeaB37dqlIqSZIWhtbQ2xWAydnZ0qC1AikVDlYrGYkYyPHTuGY8eO4ejRozhx4gSOHj2qcuvK5Av0ATMl4MDAABoaGpTvjETFhZMnNPX19VWcDgRcCDAiSVLb4YHuPOmGY0NylXVwXKS5WddWgQsZkuQJQTTpMmKcaTh5eMXo6Cji8Ti2bNmCeDyuNP+mpiYsLCxgYmICp06dwvPPP6/2j7I/FLRaWlrQ0dGBXbt24fbbb6+IumYqQxKXTrS60MH7kNu+GEkuyVxPngFcMOvL/sl5p28B42/p65VCjnRNMPUmk7nwCD+5p5Zjz7kohRAKcPKwED34jlov+5TJZHD//fdj37592LdvH2644YaLIp7n5+dx7NgxldBjdnZWBQ/yWTHoikIS/cI8H1vet4lIvKwVOvzWF6/vbCxnpv64adRXGnThw299p9Cez+dVghUbbGoN2FaS8StXDZGZJpHfJPZ7WWykUltwEfPrl4TJtKX3U37HSVcoFNDU1IQtW7agvb1dJX7IZDLKbzY5OYn19XUMDAzAcRwkEglVv4mAd+7cqYKsGhoaMDIyUnFkH5NS0HTIRZenMtHEy61N9KctLy/jzJkzKJfLyGQyisSoOckFHIAiQqk9y3HQfcF6Yge+nDI1Ic3B1NJ0AUeSWSRyfntWT08PVlZWcPr0aZTLZfT19SGTySASiSg/4sjICE6ePKmEDkminAtMJUrrgMyjLTUrqX1KkOzk1jKSuJ4SUmaCIlFzPKjpsi1TpjCddOVn0jIjx4tC1/z8PEZGRtQB9bS8MHUpz+zlsZbr6+tqrs7Pz6socLk1jaCwwDHr6OjA9ddfj3e+853Ys2cPtm3bVqH5UlCbmZlRCTuYwEP6oenuYNDVzMxMRRyEaX2QY6VroSaroKzDT3szEaetYmFb5nKTsa3G6qfZ10P5ATY5AfvBxixiAy8N2TQhvSRGL0nKqw1Zt9fDr+Z+ZX2muvUsTfwttcDZ2VlMTU2pACcu0iRkkvDY2BjW1tbQ3d2tTH3yHFQiHo9j586d2LlzJ/r7+/Haa6+pjEPUQBhARVJeWVlBNptFuVxWyUC42Erz68jICObm5tDZ2akCm6TfT5qNqWFKMtCtAxwH/TnpCzWvJzGRzCXR6dtrqO3TvPn2229jeHgYhUJBbbWanZ3FxMQEzp07h4mJiQpi1wnYcc5vuZqbm1OR5HKfsTSxSs1ZSvnU+jk+1BylECF9sbpGrY+dJGiOi6xLD5AjZD2RyAVT88zMDKanpzE+Pq40Yx6ZOTQ0hEQiodwb8uhAqXnKwz1kOwz4o/Wlvb0du3btwh133IF3vetd6OjoUFvFiJWVFeRyOZVsg374QqGgIp5JvtTS8/m82vKnCwA6/NYGk6Zrq/3qbehrhelaN5L20oYvpybspVzYCBH17OumJmA3IvIjsWphelhukql+ndf/Em5aqP696XM3TdV0nZ/W7qWt678d5/w+ymw2i4aGBvT09Kho5ra2NhWARe2ThNzd3Y1UKoXm5maVFMGEvXv34td+7dfw1FNP4c0331RZgOjDlBoctb+2tjZlYqY2zIxcTHC/uLioMmz19fUpcyQApeHJ3Mz6kX4kSDn+cl7ohMNy0s+rky+v4eJPzZC+y76+PpUpKZfLKWGHJGJqX3+WDJgrFovKtE6ft4xs1rV9mv3j8bjKuy0PRaAgpPt6pX9Xjof04/JHZvvSx5PjJ4U/EtfY2JjaE04Tb2trK9LpNFpbW5FMJtHW1obOzk4AF4KuZmdnFfHKgxRkaks+G2nRaG5uRkdHB/bs2YN3vvOduOOOO9DR0XHRHKaPN5fLqSQac3NzKgKayVEWFxeVcLm8vIxcLqc0d/39C/Le6mXd/nZbV/QxMLVnUiK82pTf16IwVHOt3zU2a65pbayWlDc1AYdwRxBhQ2r4umBhez0jo9kutbb19XXl5+VeYH1LB4O2WE5/0VOpFA4dOoRUKoXvfe97OHbsGLLZbEVCCGo6UnNhUAvrJZE6jqPM0vPz8yrylFpzQ0MDent7VZ9NkbW8b6/FST4Lk0lLaqasQxK51JD5fyaTQU9PjyINCgUMGJL16AQsF73l5WVMT08r7Z8EK7f4kARJEoxgZzAa65IZtnTC1AUWea/S9UANWAaA6X5zOS8XFhbUVqJCoYDR0VHligDOpzulhYD5yZuamlSKSVpDcrmcIj8Z+CQFK6n9UhuPxWLYunUr7rvvPtxzzz3YuXPnRZovAExPT2N2dlYF8/F4QW4Fcxznohzo8gjCoPAi6cupZYaww1VPwG6an04wXoTlJR36taN/76f9epm7vdo0XSfL2uwd1KVSkoPed1mPJA1qEblcDplMBnv37lULH4Ok2tvbUSgUMDU1hbfffhvpdBqlUgk9PT1ob29XR7zpZmmeevTzP//z+NnPfoYf/vCH+OY3v4np6WkUi0VlBuV+ZG4bmZ+fRzweRyKRUEFfqVQKXV1diEajyhw4MjKiiK+pqQm33HILmpubkUwmFSlQk5fjKjVAkhe1Pv6va4Qyu5SuEUrNk6RFoSIajaKzs7PCxC/39TKoSZId2yapkkRWVlZw9uxZVac0N/P6crmMmZkZ5a/m0X7t7e0qWI0aqDSTSgKWQow0jZv2XUejUUXkDIwCoAKhqLXPzs7i5MmTKBQKWFlZQUNDg5of6XRane/c2tqqNF0eWj88PIxisajcGdRCdbO33CbmOA5aW1vR1tamsrPFYjHcdttt+OhHP6pORpJYWFjA22+/jdnZWayvr6NYLCqzOC0VDPabm5tTiTnGx8cxOTmp0rN6mYpNVhf+b7POmZ6XqT0pJNpY+kxWF7dyps916OtivQWJarRi2bdacNUTsA6/AQv6gKVJRdbtRrjVmJG86vAqZ3ONF3RtxqsM26B2NTc3h9HRUXR3d1dEBXJhjcfjKuL05MmTmJ+fR09PjyJGt+johoYG7N69G62trTh79ixOnTqFc+fOYXJyUmU1ohajH2lXLpdVYBcjtXXNiFr52NiYur+enh40NzdX5ErWg6ZMhKoniwBQoUXr38nFVO4D5tjSPMt91dSeuE+axCaTYeh1StM6LRTSnE9NlOPHTE0tLS1Kk5Raogwu0/sZiUQqLBrsC/up941WFG774rPjAfcMrqLG2tjYiEwmg1Qqheuvvx7JZFJFjrMuarrUlHmwAiOc5TGUfJ40r7PfDQ0N2Lp1K7q6utTJWX19fdi/f7862pDgGb0y4IpC6ezsrDIzc9zp42UZauSE1zqim+WBSquBl+nUy6QdZH3RLR38TH83vOrwqlO/pl7k61eP6b5sBISguOYIOER1sBEKpG9uaWkJ2WxWJRRIp9Nob29X+4K5f3J9/fzZp9RUaEbUs1zJBT6ZTOK6667Du971LnR1deGNN95AU1MTpqenUSgUlJblRsIkacdxlA+UEdE0bU5PT1dkTers7ERPT09FXmK5/cVk8pVan76YmF5sfVGVGpgeUUzTL8dLEpsuHAAXzqbl+DPoTGrtMvk/+0GzKIOY4vG4ak9q7oTUbqXmz74sLy8rwUJaE5g4hadh0ZJBDZv9oFDT0dGBVCqFzs5OZDIZDAwMIBqNqghjns9L0uYPk13ICGc5h+U4NzY2IhaLIZ1O4+6778bg4KCKPN+yZQu2b9+u7p2CAjNczc/PY21tTQWEMX8zhSMec0itfnp6WiVOCXLIgj7nQmwuXHUEbGtWtrle/8xUn58UaSsdmaRTP8nLy+xs0q6CwkZ716Vw6a+kH4taJQ874ELKrFLyeDUeeC4zXCUSiYo8ugDQ2tqKgwcPKg0oFovh9OnTGB4eVvVzrynJhSZqAEoDYhQ022CbuVxOLeD5fF5l0CJxydOdpFYso4jlGOlRzYT0KevjKPfX0jfNLVLywATprzQ9PxIL/eFtbW1IpVIV0ctSWHEjcZnNTNeq2Y4e+Sz9wvRvAucJt729vUITnJqawvDwcEXGKbmfmP1vbW3F4OAgurq6kEql1PnTdCfQxzozM6PGiT5e3c8rzeIU9JhgI5lMore3Fzt27MD999+PgYEBFeXMJCkA1POYmJhQgVwUJsfHx9VWIoJbpWhxIUHzfaEwpZte9XfRbY3x0nzdPjOZePX3X9dmbeG3fnn10caqZ6rH1lRu0w+buqsVgDZ1Ig5dWie8iInwIhMvBCkry/lNXjf/Dv+2JWNT23o/bProVk5quiynm5/4uZ4IIh6PY8eOHejo6FDEF4vFkEwmlZ+QJtIbb7wRXV1dFZoOk3vI+6LpeGJiAi+88AKefPJJnDt3TkU5MxuUDBRiHdRwWltb0dnZqTIhNTU1qcWxVCphcXERq6urSCQS6iSmjo4OdHV1Yfv27RUHvJP8JfHQpCu1TX389DGmqZ7X8e+33noLExMTyqRJn6iMXmY98sCGZDKpiIYE09HRgXQ6rUiFfWYwUblcxvj4ONbW1pBIJDA4OIiOjg60trZW9Fu2qUcxk9gXFxfxyiuvYHJyUh10QO2WQlc0eiGpCn2wPImIkdfcPkSBjNvLcrlcheuBbZII6UeWB9hLouO8a21txbvf/W4cOHAAe/fuxZYtW5BKpZTmK1Eul9UBDsViERMTE0r7piAwPz+vhKmVlRV10hEPFpmdnVUnNMl5oO/hd1vLvBQG/X30+swGtmueX/+4fvjV52Xy1cvUYgb2at+GpPku8BCUayYRR4jLDy9Bwa08f5itiYtiKpVSASwkGZLl2NiYIhf6hWmalifUNDQ0IJFIYOvWrXAcB8PDw2hqasLk5KSKPpX+URIxXxgmt6dvlcE7NNdycaYpk0n7JycnkUql1H0wMlhqUdzaQ8JgZLaM3pbjKH/YV2qDAFTATqlUUtHIa2tryOfzSpMj8ZJQOEaNjY0VBLS6uorOzk6VjCIej6OhoUH5LWU2MI4fszGZArv0581DBEiQc3NzGB4erjCx0swstWmZGEU+a7bHucPUjFJIIqjZSj8vSZlJXKSwwExn6XQa27dvxwc/+EHs3r1bbU0zRbjncjllHaHGncvl1NGBFCq4WPOoQ+4xpq+Ye4NNe+3198hLOw2xObGpCTiI78OLKPTvvKSzoJqvV/t+bQQxy/iZoYKYtaWWaypPzYGQUbdufaA2NDMzo0zS9A3zCD36hrnYU0PI5/PqbFTm6iXJsf2Wlhbs2rULBw8eREtLC06fPo1sNqsCdrjQMxk+SZB+3mg0qshuaWkJiURCaYw8yYbkzYQPPDKxo6MDmUxGacZM3sFtJ2tra+r8XZp9aSGQJmeOkxyrQqGgDn1nqjupLVIjlJYBmqtJMAwgk0FH1LJjsZiyAsRiMUQiERWVS8LmdXzObEcSMO9H5pymn1MSlJwT0uwrrR8yPSatCnJLDrVbPg+aqVmeBExzsyRgKaQwkQhTqd544414xzvegfvuu+8iLYb3RqGBvmpaWZgAhFq3PGyCJnYKcIwu53GRbm4L/b300izd1hKTudW0FpjeW781LIg1ztRPfX3xslj61X8pBBKTBdGvXFBsagKWsH0oNsTqNZmDDrbJPOvXR1tzdJA+6PV5fa+TsKmc7I9OwKZFhHXRt0dT3cLCAmKxWMXiRlLhwr+0tKRMgFw8o9HzZxHruPfee7Fz504cOXIEJ06cQLlcxtmzZ9WWFUbJ0k/HxZqnHdGfx4MluIUpkUhULMLcx3z69GmMj4+jra0NyWQSg4ODKliJxyMy73Q6nVbmXZm4giB5MTvTqVOnMDs7q0h4be38Ie9ybKXJmL5b+eykmZ3kRC2YvmzW1dDQgNbWVnUKj+M4yn8q5zC/l0KNTOG5tLSEQqGg7oOEJBObRKNRxONx1T5PuJKJJ/QAOkmkMhCMfednfKbUtqV5nsIItetUKoXrrrsOd9xxBx544AHccMMNxnkls73R5Ly0tKSsNNR6ZUBcNBpVwkexWFTC38zMDCYnJyuOhfR6pzhfJPh8pRndrZwOm89M66HuOtHL+ZGgSQiwIfR6wE2wqQdqMX9vagI2kZuJJG39DX5lvLRPU302sPXHeGm3bp/r/hEbzdnUnq3ZOYiPaHV1VZ1m1NLSgkwmo05L4uJPc+T6+jrGxsZQKpXQ29uL3t5eRCIRpaVKNDc3o7+/H4cPH8bNN98MAOjs7MTIyAgmJyfV2biMwpZJJri4U+NqbGxUZCOPPFxdXVV/MwqaC/Dc3Jz6jtr19PQ08vk8Ojo6VIYufUsTNTZaBngmsjRnsk/6nKd2SK2LGb142AC3DzHIrFQqqZShNOnSFRCJRJQ/vKWlBWNjY0pwIonwRCg+K6mNUohgxC/71NLSogQrOR9JGBx/aSGIRCIVRC/9+BSeWE5GtpOgabqnlk63AsckmUzirrvuwt13343bb78dnZ2dSsAhmOxjampKabE8SIFbmxgMJ0mFEeqzs7Pq+3K5jMnJSRXcx+emkx3J1+ud1f/2Wx90i5Yt3MzefkK8G3QiDELg9YDNOqqXtS1XDTZ1EJbbaUhXItxM0DbD72VeNmmqOtw0V68+mMzPJilZXq8nnDC9vHp2IwAq+IXRuel0Gr29vWqLEH2zXEDT6TT6+vpw2223qcQQpixEbO/MmTM4ffo03nzzTRw9ehSvvPKK0ipJfouLi0oL08eHfkL6eRmo1dDQUOFj1BdN1sF6qa0wAIq+zkgkorRwSWJM1E9SoVkYgFrwGdzG6OZ0Oo0dO3aoYLHu7m60trZiampKaW9M7k8SGhgYQFdXV4Uvl9rd8ePH1UlCJD8+k0gkonzQ9MXKk4No4pVBVdJ6wKMAZQAbzdByvGTSDhIyx4rXm3I2c35yK1Emk8Hg4CD6+/txww034Oabb8Zdd91Vsd+cGvzCwgImJyeV+Z9/06Uhjwek+4CCG60GTA/K+pizW5I1hQM5X3ThxPTuyXfK7fsg64IJUhBg+VqVjXqQeDXwswL6XWNDwtfcaUhXKkwT39ZEboJNXTbXub08biZjt+t0jZovpjR/mqB/x+u5PUWmFqTmy2AgLqTr6+uYmZnBysoKurq6AFzItmRCNBrF0NAQhoaGsG/fPgwNDaGpqQmjo6MYGxtT2ltjY2NFggZJxFwMqd3SX0oC1X2YLM8xksFl0kwrA4JoMpVbguQ2J2nWlOPc1NSktuNkMhn09vbi+uuvRzqdRldXFzKZjLqOoKm9o6MDPT092LJli8rwxP5T02UCCpqRaSJnkFQkEkFbWxsWFhbU/loG1MViMaVZ00pA8mWksEz7KLdk6Qkl5LiQhOV1dE3oCUx4ROWePXuwfft2tLW1oVgsViQkkaBvn2TLrXHZbFb5taXAxX7Jk4xoxVheXlb5qZkURD++0m2t0E3JXvB752zq8lsbTGV0C5sf9PXCJOTr5eulYNlaGk3X+MHNUmGDq5qA/UwIXn4ML5O2bbtBUIt0aGOmspkkQe7Vb0xNffC6lmY7RuEyOUZHR4daxGn65YIyOjp6UfpA3YQo0d7ejoMHD2Jubg59fX3o7u7GuXPnlIZHkzPTHkqTpiQB9pPRzfJYPhlxLTU3GVjERRi4YHqlyVLuJZakKdNUUvOjaZcabFdXF3p7ezE0NIT29nak0+kKSxF/0/TMJBYtLS0XHcZA4YAR3hwDRvNKi0ZjYyOSySQcx6kYCwoL9AVLoqRmLFNYklhlUJe0AMjnIffvsk5qk3QBDA0NYceOHThw4AAOHDiA3t5e/OhHP8LIyAjGxsaQy+WwZ88etLW1qTSQcusStxIxuYbcK01tVwpVUsCgFszMWwz8I1l6mWCrWT+kFYr/B9FMveoMWkeQ67zKynGql3Z8pVlMr2oCDnF54Pby+b00+sslF9dcLqfMmul0WqWnlAkUcrkcgAvbTnjWqxuamprQ2dmJO++8E9u2bcP27dtx8uRJjI2NYWRkROUIZk5lmQxCaiXcTkS/IwlHnpErcwmvra1VaIy8X7nVh+QutV05fpJoaHrmVqSuri709fWpfdPxeFyZfWnal0k3uK2Kgg0D4hhdzeeia956Fi6aw6UpXWbjoiBDAmIyCvZD1sd7ZbIW/UAE6U+WUdxySxG3E3Hf+Lvf/W7s2bMHu3fvxuDgIFpbW3H8+HEkEgl1Hu/IyAiSySRKpRImJyexurqqfL2FQgHFYlGRp/QtUxOm4MKUk9L8vLi4qJJr6Pu0TagHyWxCj+I1jauagHViMJlSva653AgaKOH3Mtv6OUzaqe7DdWtP91vxb71ur3szafskBOYA5nYRScCFQkGRwerqKrZs2YLu7u4KX6YJO3fuxMDAAAYHBzE4OIjXX38dkUhEBVHxVCdqMiRiGWVLYQGAImP6ikmO0g/J+9S37NBvqpMux5OkRm1S7jNmEhMGWTU3N6ux4zjJM455IAYFjLW1NRSLRWVmpWZN7RW4+HxgXsdocXmQgRQiSL40y5KkeP9Se5T3rGu5ch5S8ACgtFyOTWtrK1KpFHp6epRw9eCDD2L79u0VPrnBwUHs2rULHR0daGhowMzMjDpVinmZJyYmVN5m3l8kElHEy3lJAub95fP5ipOVWFZa1fzeSa93zlSPyWKnl9frMcGrTS/z9qVCkLqD3OelQC1tbvogLD1jzOWC7r+webHktUHgZ45288G4vaTyb1v/jd6+6d5Ni4ckEtP3OoGbzHCRyPmAIZ7n2tnZqYJqeHpSa2srMpkMDh48iG3btiGdThsPczDdyzPPPINTp07hnnvuQTKZxPT0NJ555hlks1mMj49jZGQEc3NzmJqaUr5QaY4kseqaokzJKAORqEGTcKgNysxVDNaS2t/6+npFEBi30mQyGWX+XltbU/ukpZlWBiaRQEkcJF6SpHxe0nTOfsqEItTipUmamqKu1cstN9Lnzbqlxq3PD2r/jEbnGGQyGfT19eGhhx7C3r170dfXh7a2NrS2tl50QhEPnZApPCcnJzE8PKwizploRUbFc9+31HaZ5EWarEng0o2gm5r1+e3mjnH7jp+bTMxuQq5JyPYyUXu177YWmd57N8h+1rL2XC7YtEmhMgzCCnHZYTtB3SBfREnU8ocBLHK7C9MRyvKnTp3C6uqqSpzPU4P0QCRifn5enYtLU25vby8aGxtRKBSQzWZx9OhRnD59GsePH1fnBzPIhsFU/DERMHBh3y/N0NyCIhciatJyLKVmyfugGVo/zYeEMTMzAwCKDKTJmoKC1EJZRtdG5fORBCKJmvXIOcB7ZZ+kxi/ngyRu/pb+c2l2p9+Ye7KHhobQ39+PoaEhbN26Ffv370d/f3+FC4L7bpkpbHV1Fe3t7Sp3+OrqKrLZLM6ePYtcLqeECkm0FFTm5+eVBszc5bSQcBxlOkk/EnRDEELSCWwT6lLXPDY1AXtJcfVuBwgWVGSSeINIbkHM0Kb+2Y6NnxQcpE+mxVvvo1u/9fGU30tNUUbC8sxgOdZnz55VGsng4CB6enoAoMI/K9uam5vD0tIStm3bpgi9paUFt956K4Dz1pa+vj4cP34c8XhcJdynv3hmZkYFL+kJ/uWPzBFNH6e8b94biYfBXLwvmblLN4kzDSOJTvaDkOZx1iv7zLHWNV79XuR2KV6jp9bk8+Lf/NGjcWWwGbVzZhEj4TIYL5FIqGQnmUwG+/fvx9DQELZv346uri4kEomL2mcKzDNnzij/Nv3D9H0fP35cRTjzWmrCHGcGZMnkMcwWJqOx9Xfc9D7o70E1Gp2NhqzXb2Mh0z83CRFu64Wb6dw0Jm7rhA1sLY3V1O32/C6lxr2pCbgWBDEJV/MATHXqD9T0wKtpy2QC9vIlmfriVqfpXrxI36+PsqybGU3+rWvD9LWVy2WkUikAUMTKFJZMEVgsFpUZl4s7D/EglpaWMDAwgHvvvdfoO04mk7jnnnvwjne8A5lMBseOHcPExARmZmYwNzeHxsZGtWAzQEfPvkSNlfdNM64+HiRgjoEkZF5PYuCWHwDK1C4J0bQvVvqkpVZNkpWRy1JYkGRMjVf2XxK4fFa6YKXPRykU8Zlwixd9up2dndi3bx/6+/vVtqquri7cdNNNpmkG4LzmPzc3h4mJCbWtaH5+Hk1NTcjn83j55ZdVXma515raLre5UWteXl5WdcjEKPIeadr3I1svmNw0fmX1uoOsa9UI2X598vusGrPz5YJN/wnTWl5Vm86VOhoe8EvEYSO5eF0nv/cjlXoOn80LKEnapEH6abQ22rpJAtbb9SJ3v/b9+i0XNfmdTtqJRELtZe3u7lZJJbgnuLm5GYODg0gmkyo9JPfvdnV1YXBwsKKP1EpNpmrggmmVATqlUgnj4+M4e/YshoeH8fbbb+Ps2bNKU5InKvF6/kjTr37fLOs2tjrJ6TAterJuPgOTZqKPtS4A8Ts/YpXBZjTHM7sWD4AYHBxEKpVCMplEKpXC4OAgbr31ViQSCZWQhadmuYHPgUf8kSDpj5NnAdNtQOFidXVVRS4zaIrbibhXmUFVzAImn4tp/GwI0Ou9Mll/TO35tWGC37qi9830fzXtV6vp1rK2Xm6ipwB3zfqAqyEEr5flUk2sekKfZH7k6wY3s5itJC7H0s3cpNfNsl7tuC1CXNjp36OvcHV1VS3mTDZx7tw5zMzMqGCtlpYWlWWrXC6rJBkLCwsVBxfQHyu1Rn7f29ur+rh7925MT09jZGQEp0+fxssvv6zSFc7MzGB2dhbZbFYFJsl9o7qZmGOjBy/JcTBpzn6Ck3xWehm5+OukrxO9KThKlqeZmyTLOul/7unpUUlDUqkUbr75ZmQyGbS1taG9vR1bt27Fjh07jHNBguS5trZWcRwg/bYywIrEy3FfXFysCK7K5/MV51DziEGSudxupM9B0xi7we0dkdf71Rm0nSDCuJsgZ1OfX/+Caom1aOF+fbFFkD7U0tZVQ8DVPLRqJbOg17ppKtX0yW1xtXlhq51UflKx24Kil9E1MJY13ZOuUcj/pcmPvjvWmUwmsb6+jvb2dsTjcRVQQxMkcxJzv2hHRwfK5TLeeOMN9Pf3I5PJYG1tDVNTUyqTE7fymMYvGo2iu7sb3d3dOHDgAHbt2qVM5GfPnsXIyAiOHTtWkSWJWpWMhnacSj8vzcJAJeHo+0nldaZnwTL6fls92In1yGA12b9IJFJxkIJ+AhN9thwzRmKTkGOxGG688UZcf/31KgnKjTfe6JrBzAsrKyuYmZnB/Pz8RXtv6QJYWVlRe8llkBm1YD4LEi+3TPFsabnFiuMnx9c03l7vY7Xvremd8YNb/V6CgxcZm66ptj+Xony1qAfRs55q+3xVELCbSYf/11q3G6HUW6Jze1mCmtLdvrMVBEymZpv7NWms/O1mQjP1y8+sKsvzaDq22dHRgUjk/J5NbluSuXbX19eRzWaRz+eRzWbR0tJSsa2oUCiorUKlUkmlLYzFYhWarxt27dqlFu5bb70VxWIRJ0+ehOOcD5bKZrN46623sLS0hHg8roKFpG+b2qY8ElAeSiAjowGofbcsY9pytLq6epEFQaZtjEQuZJNi+6xHPvdoNKrOTGYWsGQyic7OzopzkZPJpMrt3d7ejvb2dnR3d6v83gy28gIFAG7vkYFsPPKQiTKoAbOcNCnzM17DsWKqSOZspjmbWrJJa/UTNv2I10/71AnexmzsVUdQkvFSMIJo/V5rcFDrmlc/3O6vXuTK9vzqq7a9q4KAQ1w5qEbg0U3MJni9jCThhoYGzM3NqSjitbW1ij2j1PQYwVwsFhXZ8vxenlQk99oy41QikUBzc3PFYqzvNdWPsuvu7kZHRweA85rb5OSkCi6itk6CzeVySgt1HAfT09MXma1ZlgRDzXh+fl75PAEo7VamgpQaayRyPrc2ibqxsVEdl8g0kbQS0LxPQYc+9fb2dsRiMWVabmtrU8c9SksDfb/M5U0/rAnynqTZWJ5NzM951jBJk4IJNVpuXZM/JGBuIcrlchV+ZBK2PvfkfKtlcTfNcS/zb4irG1cFAftJoSa4mer072xMNl59CvKy6lJsEG3Vq48mjTSI9u6VX1a2YUqKIvsnt7To5XTtwO35yDIyWIr+wNdffx2ZTAY9PT1Ip9PKz0sCYIQtABSLRaXlNTU1YXp6WtXNzFI0u8ZiMWSzWRXMRZLq7OxUGjfzK0tSbmxsVIdGTExMqJOIHnroIavxtwVTIU5MTODkyZNKm25tbVXCBQ9RSKfT2LZtm8oaxqQVNBfXU3uQePvtt3HixAmV8vH2229HT0+PEloWFhYwNTVVsd+bUcn0zzILlYxeJqlLTVcmxuCxkKVSCVNTUxWZqubn5yvM8pxXbu+97hrR4WW9MWnRJoudae2QLgm/Nr00TtO75Wbhs/lMXu+mPZs+D2JRq6VvfvVXs8bqdcjfQXFVEHAQ2AyU24MJoqHVOiFsJmsQk7CN1G3jtzKZyLxMXm7CkdtCY6rbNMndxqpUKiktiH7feDyugm6Y11cGV9HMKk2vNHdy/ygT88fjcbS1talsS6VSSZlio9GoSoIBQB0M0NrairGxMbz11luYmJhQ26e8II/0swFNwbFYDN3d3RV5n2l65yJOgUIezuDnJqgFi4uLmJubw/j4ONra2lS+6tbWVkWcDQ0NKJVK6lQsaqg8tlDuAyfB0vrBWABJwMz1zLKMaJ6dna3YKuYl9HqZXN1cM35CvJeJWb4TNu+7myDrZUZ2uxe3dcerHrd6N1JzD9q215pXbZ1BcM0R8GZEtRPgSjVh2fRLl/ht74XZj7hQt7S0IJlMqgMKmC9ZJqXQD1XgyUvyiMH19XWVXJ+adCwWw+zsrKqbP/JABn4Xj8exZcsWZDIZTwIul8vI5XKYmJhQJxx5bcMhSKw8W7neINmtr6+r8VleXkYkcv44Qu6BpuAiCZ0nKC0sLKhDI3jN3NwcpqenlZZKk7A0B8vc1vJABP5N07I8a5haMjVfWgBoqpaa7KUSPOTYeWl8emS7ft1G4UpdP64mXFMEHGRCu0myNlJorX1kvUG1dV16deubzTjo/fCTpr0kaFMf/NoO4lbQtWTHcVQATiQSQTKZVH7LWCymzNI0L3PLkkwKQc2Y0b30pzITFCN8eXYxzyROpVKIx+PqZ2VlBYlEAp2dnSorF3Ah85XjXEhs0dzcjNnZWQwPD2N4eBi7du2q8EPXG9Il4DgXso3pY86+0j8bjUYVyTU1NWHLli0VUcU8dEFm3OK2Hl5PX/HS0hKy2SwKhUJFIBrHxnGcivzb0hfOv+VRgDKQitmrOBekFYDzxtYt42etcSsv/3bTar0sZ27t2kC+u7aWKZs6g5Q3wTQeQe7Pz8oQ9Fqb76tdy/xw1ROwnHzVTGI3TczN/FNtO/pLUutD9nrBaJLk327XVmPO8TLf6/WaTNfVmoC4mMrkFsyLPD8/j9nZWRW9m06nVYAQ/bnyjN2GhgbE43FFwNSkY7GYympFwsrn8xX3wMCkRCKhzuNNJBIqDzNBs+jq6ipyuRzK5TJ6e3sxNjaG2dlZFbCUz+fR3NyMzs5O6+dgCwodFEBIfo5TeeKTzIHME6OWlpbQ2NiogrR4DU273Ae8srKCxcVFzMzMqAMPSqUSdu7ciZWVFWSzWbVXm4SqCwUkdX4vtW1qyjJpBkmXkdFym5bbdjJTOkkv1wph884GWX9s16ug2nG9tOmgCoIX/Mz0NtfV0qYXqhVQguKqzIQVFCbyCyohye/cvq+lT16oRSqt5j5rhX5vXtK5zYtuut5E9vR3MhsWA6l41KFMjcgoaJqSW1pakEgkVBl5Dq3cTyuPIZSBTX19fSrgqFwuY2RkRBHI2toa+vr68N73vlfdw9raGs6ePasitAEozVL6rlk/yWptbU2ZzPWUlfq5xQsLCyoaPJ/PY2FhQZWRGjrJlcFJ1PZJzoy85vgCqMg4xXqoiQJQdci9uSsrK0rLlmft8h5kNDgPxeB1TKihH49ommumuedl5dHhNn+DaJEmwd1Uzq19t7qCtHul4VKuOdXCJHCYBAcpkF9zmbBqNWX4fWYLN1KudkLZTkjbF9jtfm3NXqZx9jJzeV3j1ge9Li+Lg1t/3QiZRMLkC9LHu7CwoMhTBinxJxaLqTzSLMcgK5mLmgTI4wGpgVHLa2pqUtuG2KdoNKoCkACoqN6JiQmlmUkzNQOzSPjxeFy1XS6X1T0ziIn7hxntTaGDflKeCUwNneZkEqNEY2MjOjs7VZ95MIHUMFmHtLKQvDkePE+XWjN9x/IQBGq7TIrBKGhaD+TeZ/r9ddJ1I1zT/HSDXsamDj+ysyFtr3ble+e3xvi5ka4UXA7i1deWINq2m2WvFlwVBOwFG2KQCGr+qIZgbYi1nuaiasu5EZub2d00Frbagcnkoy+ebguSyWTuNX66dhSJRJRJVRIryZgEvLy8rEzW8jxeqQXzOqlNNzU1qT2sACqyUkUi509KmpqawrFjxxCJRCqidpmMQibokEkyJPnLbWC8TpqS2R7LUWNmtHQsFqvIKsU+cyzpjikUChcd5iDngRxbSRJMCkJ/7vz8fEXqSPZZarrlclkJCBQMpOVA91uzD9KM7UaYXouxH+nyM0lsNuZov7rdBE5brdmmPT9c6ZpyLTAJMV7jf6lxVRCw14SpxXdjC5uXtRq4EV49J4dp7Nxedr+JaiJqE7Hq5fVr+L9cRG3M0H4LlJcEy4VcbkOSpt6GhgYsLCxUJJfg35Jo5d5h/pTL5YqIa37P9kk8x48fRyQSUcRCF4sMHtLP0KUGTWKV5Xk/8ohDeaCATDkJAPl8vsKvSjO29I/KsZICkq6NmU5I0vNhLy4uqr/lyUPU5PlTLBYriFmm5PR6tl5zQb9GzjWb+tzWnHot4F7vl41mXI+2+bfNvVTb7uUmPB1+/TYJQPXs61VBwCFCVANdoJA5mGWmJpZbWlqqSOpBvzAjpWkOZhmaqvmbkdP025KQ+WLzAAjCKwc1+6xrnzxOkKQpjyGUGi8XFJmGkxovtVTHcZT5Wv7IgDX2w42A9eukdkvTsvxZWlqqSJ9Jv7C0WvC+N2rRDhGiXtjUBKz7ekzfEzY+Epuypmttvvfrqwm2Wpxevw28TMN+Jmn9ei+fmL5Ie/VfXmMyK+swnSSkt2uKYjc9B11bM506JP2hJDuaf2kOZlYpkjB/WFameSQpU8tmmkuZGIMkLYlWkjSv1f+X96/nNZbbqSTZMdpYmoX156CTvmlcpO9Xjqc8lUj6dqXvVj8hSkI+L7cjI2VZP43My+zsNld1s7VXfaZ6g/YzqFbp15ZbGTftrpa1ygYbIUTpa40fN5j+dqsvKDY1AdeCIA+hHtjI+v18VLamFVt/VD3M+yaTtB/8ynq9TG5ChN+4UhuMRqNKg5QnDVErpn+ZZmppupbfsT1pOtbJRh9fGRlNkzS/k+ZraaKW2iZ/mKxC5luWkdBsW/crM7KZ3+vzhP2QhynIk5Z0wnYTmEzjbyIVKWDZkqT83g9uc8PP1F2tkO/Wh6B12JDzpYDtOG0EbMfRq1wtZv9rloBDXHvw8t3ZQF9IJTHpmrP0Hy8tLVWQKU3QMqKavmHpz5XBVSRVqR3r/ZK/JfmZCJT+WJngQp5/q2um+n1Lk7BpD60+7iRs+b9utg4R4lrDpiZgPxORVzkv2JhK67FgmLTwSyEd2prJvRBkkaxmjGo1gblp5W5jGpSMbU3nkrAAKE1SkqZuupbErH8mI56leVn+SBLTTdjsI7VN/i9JUR77x21CuuarX6eTuv6/aYzc5pCbQGEqZxIGTNf5aaN6fXo/9HvXtWo/a5Jfe7W+5/VeL+q5rvlBn7NBUE9hLUg9l2pcNjUBmyaN16T089HomoT8TtZfa59NJjL9JbZpp9oXsJrrghAhYVqo3MyG+jU2/dOfu+nFthGmvL4zzQ1Zt34ClE4mAC46ei8SiVy0v1a/Jy+iMhGHDhI3y5qikvX79MqO5vXMvE658ron+bkuuJigp5H06qMtoXiRvd81tubqIOWDoJ71XUritRGG/K53W5tt3nNTX6pRDiRM61o12NQEHCLElQo/bcwkZHi9yF6alPQR2wqTprZqtRyZrrsUFp0QIa4WXNUEXO+FoF5Sop/2EtTUW0v7QcrX0i8vM53f9SYNwvRs/T7T23AjHLfvbMbB9nkGnUteplFd+5Ym4iB99dIuTe3Jz0xjF1Qr0esyfefWB7eyQRDEMuRnbvf7bLPA7xleDtO1n0vCZH3xssS5lfNq/1JZMjY1AfuZvPw+M9VTT7+KV1v1qqPWBSNoe17fV7v4yL2wXmZpr8XOi3BsFmY3DVN+V6vZqpY+BQHH0+2eTH97CTHV9Kmaxcp2Xl+q99NL8KvW1eNW92ZBtSb8oAjiKtLntU1/bKxQtQr11WBTE7DbwmyDIA9bksOllPRsUK2A4CcR1qvdahZc00tgMs8GWfzdCN1LYq5m0Q/6LLxeere6vRYZP5O1l7YatE5+Z6rbNN42WripPdsx9dOEbbUbeY3b/bkJfzYug2rJ1/adu1RKw+Vc74JYXYISoduz8Jt3XvOrXtrwpiZgG+gPy23BNS3KOi7lZKzVfBYE9dbC3b5z06x06C+6l+blNeFt78vGrOZlBg1K1F5zKyjZ2Jp0bQjD9G54zX0vDdGtnFd/9S1bQRcz2/c0qPBoo/nrVgT9OpM1rRrBwK2f0irj91xMZWzmko3gZDsfbet0q9+W8Pyend9ccBN23e6hVuFn0xOwl1lSh5cpw69eXu+lOQe9Rm/PRtP2k8jqDd1EaepHtQuNlzTqVdYPfgRq077Xi2erpfuRmd9z0xfZoM/ZRAhe/dLblWW9nq8b6doKtEG0H7e2qrFeBIFpTtsSVC0am9/3XhYArzI2ROOFWse0WmGyVqFBL+M2t2yFuGtaAw5i5gmiiVVDZkE0Kq86bEhYr7cW8nWToG0W3lra1Ouupp8m2GoxXvfipVXY1O0nFOrPzG88TERqK2DYkJysQ9fW/cjWVI/fu2Dqp195vX6v+elVv63AXo2lw1SH22deQoSfwOI1/2oV0P0EHr092zrd+mZznbw2yDy2LRNUMKqHQEd4J1QNESJEXWCyIoQIEeLaxqbWgIlqpFEvbcPNPGNb3vZaL7hdV41JKyj8JHA32EryXmPsJW3baMFeEryXOcvGPWEytdvU51bGzbyvt+VnGpNtBtF63WCrMfqZZXVtPagJ3dQvrzlg886Y6vT7vB7jGPQzU5+r1chtTb1B62XdblYKv+u8rgniMrHtq00/bDRnvXwtgvWmJmDTAiVhu8DqD9vmBQ8y6PpC5Wf+tKmrXrB5cb1M1F6f+dXrN+ZBXsCgJuqg1+vmWJ08vRZsk8mUn7kRnKyP5/r6adGyT7KPpnLyt6lvfrAhgyBzwm/8bMrpMM0fG0Lxu0YXKi4FgtRbKwmwjqDt6uX9BMYgiorXdW5z2q1+G+Ha7TqvNTBofSaEJugQISxxpZuQg2hMl8p6EiJECHtsag2Y8DOfeElH/F7+HVT6tIVJKrzU5uRqEcRsV6u07taWrckyiLnLT7Px6oOtBcR2fExasG6u1bVTLzOsrvn6WYVkvTb35mXeNlkH9Gu8YGOBMrXrBZM1waYPQeuX12+UkFarRl6t+TaItfBSrHs2Wm8tz8WGW2pBIA34i1/8onrB+LN79271/dLSEh599FF0dnaira0NH/rQhzAxMVFRx+joKB566CG0traip6cHn/vc59SZqvWA3j8geACMfr1XXbbmUfnbZM6sFdX6h2QfqjWxB4Ebcej9CdIPr+fL72zmgO3ib1uflxnYr69+MM0bk4vD9FxNP279MX0WdM66tWH6PIhPTtZhe1+m+nWhxc3k7CfcbKSFJOgaV6825W/TvPAiaK8x93sP3drij9saXm9Fp9YxD6wB33zzzfjv//7vCxU0Xqji937v9/Dtb38bX//615FKpfDJT34Sv/Irv4If/ehHAM6fCvPQQw+hr68P//d//4fx8XH8xm/8BpqamvAXf/EXgTtvWuDcNIog8JLaTeRgo0nJiXApXhTTZNSJ3yQl16s/QSRwr7Ju9+HWd1lGv86rPVsN30sY8NPuvKRkkxCn1yevd9MwTeWCzF39XtzuXX7mJ+zp719QstL76fWcveCmrbv12+s7rzpq1T4vt/Zquh9duHSbs25zKOiz0dsN2l/9c6/29XJ6u7barNe9V/3snQBXfvGLX8STTz6Jo0ePXvRdPp9Hd3c3/u3f/g2/+qu/CgB48803sWfPHhw5cgR33XUXnnrqKbzvfe/DuXPn0NvbCwD4p3/6J/zBH/wBcrkcmpubrfpRKBSQSqXQ1NRkvqkqF0W/a/Trqpl0Nou2F5nK/tRbmmOdQUk06AKiE0WQ9vxgGivTyxekr7Iu/Tu3F9pGc/MSKkzt6d/r5fyI3q/funZnIwwEhZ9gZGrXph39qEIvzauaxdJNwPN7XkHbdLvfSyW41wM2Ckit9ddSp1v/vN5nE7zeL8dxsLq6inw+j2Qyad23wEFYJ06cwMDAAK677jo88sgjGB0dBQC8+OKLWFlZweHDh1XZ3bt3Y9u2bThy5AgA4MiRI7j11lsV+QLAAw88gEKhgNdee821zeXlZRQKhYofIsjCXM0ENmkKXlKiH2ykLL8JfSlMKYSXKcit3aBj66dtBKnHTwo3WUPcyKcecBOg9J9a6tfr8ZoP0vQmy5muMdUn57qbRml7b27vktd9epXzE4z9BJJannnQa22sEvXARpL0pVqXqq3TNG9M73w9+l3t9YEI+ODBg/jqV7+K7373u/jyl7+M4eFh3HvvvSgWi8hms2hubkY6na64pre3F9lsFgCQzWYryJff8zs3PP7440ilUupn69atFd+bFhgdNmUk3F56Ux31IhTZRjX11evlMy1Sboture3oi76XGUleU6u5T9ap/y3743atbf222r0bGW4kvIhM15aDolaNxq9dP03GbfENujbYCOR+gobeN9Pnfv8H6X+9UaslpB7wWqv1v2V5r77brHm1kncgH/CDDz6o/t67dy8OHjyIoaEhfO1rX0M8Hq+6E374whe+gM985jPq/0KhcBEJhwgRIkSIEJsJNe0DTqfTuOGGG3Dy5En09fWhXC5jbm6uoszExAT6+voAAH19fRdFRfN/ljGhpaUFyWSy4geojxbmBpPpzk27kdqAnz+rHv2q5rta26in5mmCXretP1O/1qaPbhqd13N2M4F6lffSHnUTL8sHsQrw+mphui+/+zXBZuz0e7J9T2znjcla4eY+8XIJ2GhGpjq9PqsGfnX4rQOXWxO2tRwEKa9f6zVfvcq7WZdM80CfJ0HXraCoiYDn5+dx6tQp9Pf3Y//+/WhqasIzzzyjvj9+/DhGR0dx6NAhAMChQ4fw6quvYnJyUpV5+umnkUwmcdNNN1XdDzdTYjUD4/ZCmuBnLt1oXEoBxRZuC64fgpQ3+TdlPaaXN6hLwqZP1SwONvXbzkG3e60X5HPU3xGvtk3k53YPOvxMi7Kc1/O0bdfNbOlF1iZUS4K1EudGtGmC2ztXb1QriLjNFV1YNF0TdC54IZAJ+vd///fx/ve/H0NDQzh37hwee+wxNDQ04OGHH0YqlcLHPvYxfOYzn0FHRweSySR+93d/F4cOHcJdd90FALj//vtx00034dd//dfxl3/5l8hms/jjP/5jPProo2hpaanqBkKECBEiRIjNiEAEPDY2hocffhjT09Po7u7Gz/3cz+H5559Hd3c3AOBv/uZvEI1G8aEPfQjLy8t44IEH8I//+I/q+oaGBnzrW9/CJz7xCRw6dAiJRAIf+chH8Od//udVdd7PvOsmJbvBrQ6bumU5L6lrI2BjSrkU8BuHaqRG07UmTdLGOlGNBUOfD15mWZv6bNtx+8ytflsTalALj9QOTWNp0pBtEdRS4jbGXu+hjRZs+76YLC5Bobdl8zy8ylRr9asFbi4Am7ptNWSbZyn7Ue27Lct5PZta1rCKNp2NtlFWAdM+YD+7fZCB1z9zq8eGzDeKdCU2ioDdYDN5/QSfIAtXkD551R3kpZPmrfX19ar6U4uAAthHygZZ9P3elSCEHvR6W9gK2brQ7EXO1QpaV9q7ZwtTv2u9F9s10dZFYbtW2/JBkHlj+nxlZSXwPuBNnwvaTfIipG9I/1wvUy9ZxNaX56ZFeNXjN0m8tBY31Euas4VNOzZjKF8w6ZuxkaRN0rNexgb6/KqXBugnYNRChKZ25XVBF8hqEUQQ8KvD9p1zg61lwVTGiwA2mnz9rAR6GfmZ3v/L5Z/2eqa2Qo7fs6vXc6l17dyUBMybPXjwYEUqTLeyQTViwH5g/er2W0T9tDyb9uoJOV711OKvhMXID1eS1eJqwGZ45lcS/Mar3u+jhNc6ZtuemyBYzzngZYmwtfjU2rapvtXVVTz33HOBiXhTEnCxWAQAPPfccxvckxAhQoQIEeI8isUiUqmUdflN6QNeX1/H8ePHcdNNN+HMmTOBbO4hKsGkJuE41oZwHOuDcBzrh3As6wObcXQcB8ViEQMDA4hG7Xf3bkoNOBqNYsuWLQBQkZgjRPUIx7E+CMexPgjHsX4Ix7I+8BvHIJovUVMijhAhQoQIESJEdQgJOESIECFChNgAbFoCbmlpwWOPPRZm0KoR4TjWB+E41gfhONYP4VjWB5dyHDdlEFaIECFChAix2bFpNeAQIUKECBFiMyMk4BAhQoQIEWIDEBJwiBAhQoQIsQEICThEiBAhQoTYAIQEHCJEiBAhQmwANiUB/8M//AO2b9+OWCyGgwcP4sc//vFGd+mKwv/8z//g/e9/PwYGBhCJRPDkk09WfO84Dv70T/8U/f39iMfjOHz4ME6cOFFRZmZmBo888giSySTS6TQ+9rGPYX5+/jLexcbj8ccfxx133IH29nb09PTgl3/5l3H8+PGKMktLS3j00UfR2dmJtrY2fOhDH8LExERFmdHRUTz00ENobW1FT08PPve5z2F1dfVy3sqG4stf/jL27t2rMgkdOnQITz31lPo+HMPq8KUvfQmRSASf/vSn1WfhWNrhi1/8ojrFjD+7d+9W31+2cXQ2GZ544gmnubnZ+dd//Vfntddec37rt37LSafTzsTExEZ37YrBd77zHeeP/uiPnP/8z/90ADjf+MY3Kr7/0pe+5KRSKefJJ590Xn75ZeeXfumXnB07djilUkmVee973+vs27fPef75553//d//da6//nrn4Ycfvsx3srF44IEHnK985SvOsWPHnKNHjzq/+Iu/6Gzbts2Zn59XZT7+8Y87W7dudZ555hnnpz/9qXPXXXc5d999t/p+dXXVueWWW5zDhw87L730kvOd73zH6erqcr7whS9sxC1tCL75zW863/72t5233nrLOX78uPOHf/iHTlNTk3Ps2DHHccIxrAY//vGPne3btzt79+51PvWpT6nPw7G0w2OPPebcfPPNzvj4uPrJ5XLq+8s1jpuOgO+8807n0UcfVf+vra05AwMDzuOPP76BvbpyoRPw+vq609fX5/zVX/2V+mxubs5paWlx/v3f/91xHMd5/fXXHQDOT37yE1XmqaeeciKRiHP27NnL1vcrDZOTkw4A59lnn3Uc5/y4NTU1OV//+tdVmTfeeMMB4Bw5csRxnPPCUDQadbLZrCrz5S9/2Ukmk87y8vLlvYErCJlMxvmXf/mXcAyrQLFYdHbt2uU8/fTTzn333acIOBxLezz22GPOvn37jN9dznHcVCbocrmMF198EYcPH1afRaNRHD58GEeOHNnAnm0eDA8PI5vNVoxhKpXCwYMH1RgeOXIE6XQaBw4cUGUOHz6MaDSKF1544bL3+UpBPp8HAHR0dAAAXnzxRaysrFSM5e7du7Ft27aKsbz11lvR29uryjzwwAMoFAp47bXXLmPvrwysra3hiSeewMLCAg4dOhSOYRV49NFH8dBDD1WMGRDOx6A4ceIEBgYGcN111+GRRx7B6OgogMs7jpvqNKSpqSmsra1V3DQA9Pb24s0339ygXm0uZLNZADCOIb/LZrPo6emp+L6xsREdHR2qzLWG9fV1fPrTn8Y999yDW265BcD5cWpubkY6na4oq4+laaz53bWCV199FYcOHcLS0hLa2trwjW98AzfddBOOHj0ajmEAPPHEE/jZz36Gn/zkJxd9F85Hexw8eBBf/epXceONN2J8fBx/9md/hnvvvRfHjh27rOO4qQg4RIiNwqOPPopjx47hueee2+iubErceOONOHr0KPL5PP7jP/4DH/nIR/Dss89udLc2Fc6cOYNPfepTePrppxGLxTa6O5saDz74oPp77969OHjwIIaGhvC1r30N8Xj8svVjU5mgu7q60NDQcFE02sTEBPr6+jaoV5sLHCevMezr68Pk5GTF96urq5iZmbkmx/mTn/wkvvWtb+EHP/gBBgcH1ed9fX0ol8uYm5urKK+PpWms+d21gubmZlx//fXYv38/Hn/8cezbtw9/+7d/G45hALz44ouYnJzE7bffjsbGRjQ2NuLZZ5/F3/3d36GxsRG9vb3hWFaJdDqNG264ASdPnrysc3JTEXBzczP279+PZ555Rn22vr6OZ555BocOHdrAnm0e7NixA319fRVjWCgU8MILL6gxPHToEObm5vDiiy+qMt///vexvr6OgwcPXvY+bxQcx8EnP/lJfOMb38D3v/997Nixo+L7/fv3o6mpqWIsjx8/jtHR0YqxfPXVVysEmqeffhrJZBI33XTT5bmRKxDr6+tYXl4OxzAA3vOe9+DVV1/F0aNH1c+BAwfwyCOPqL/DsawO8/PzOHXqFPr7+y/vnKwqhGwD8cQTTzgtLS3OV7/6Vef11193fvu3f9tJp9MV0WjXOorFovPSSy85L730kgPA+eu//mvnpZdeckZGRhzHOb8NKZ1OO//1X//lvPLKK84HPvAB4zak2267zXnhhRec5557ztm1a9c1tw3pE5/4hJNKpZwf/vCHFdsVFhcXVZmPf/zjzrZt25zvf//7zk9/+lPn0KFDzqFDh9T33K5w//33O0ePHnW++93vOt3d3dfUto/Pf/7zzrPPPusMDw87r7zyivP5z3/eiUQizve+9z3HccIxrAUyCtpxwrG0xWc/+1nnhz/8oTM8POz86Ec/cg4fPux0dXU5k5OTjuNcvnHcdATsOI7z93//9862bduc5uZm584773Sef/75je7SFYUf/OAHDoCLfj7ykY84jnN+K9Kf/MmfOL29vU5LS4vznve8xzl+/HhFHdPT087DDz/stLW1Oclk0vnoRz/qFIvFDbibjYNpDAE4X/nKV1SZUqnk/M7v/I6TyWSc1tZW54Mf/KAzPj5eUc/bb7/tPPjgg048Hne6urqcz372s87KysplvpuNw2/+5m86Q0NDTnNzs9Pd3e285z3vUeTrOOEY1gKdgMOxtMOHP/xhp7+/32lubna2bNnifPjDH3ZOnjypvr9c4xieBxwiRIgQIUJsADaVDzhEiBAhQoS4WhAScIgQIUKECLEBCAk4RIgQIUKE2ACEBBwiRIgQIUJsAEICDhEiRIgQITYAIQGHCBEiRIgQG4CQgEOECBEiRIgNQEjAIUKECBEixAYgJOAQIUKECBFiAxAScIgQIUKECLEBCAk4RIgQIUKE2AD8Pz66mQm41jf1AAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -153,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 84, "metadata": {}, "outputs": [ { @@ -187,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 85, "metadata": {}, "outputs": [], "source": [ @@ -220,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 86, "metadata": {}, "outputs": [], "source": [ @@ -291,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 87, "metadata": {}, "outputs": [], "source": [ @@ -343,7 +343,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 88, "metadata": {}, "outputs": [], "source": [ @@ -436,7 +436,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 89, "metadata": {}, "outputs": [ { @@ -515,16 +515,16 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 90, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:08:18,760] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 12:08:18,775] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=)\n" + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:03:07,039] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 12:03:07,047] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app/normal-brain-mri-4.png, output_path=output, model_path=models, workdir=), triton_server_netloc=\n" ] }, { @@ -540,12 +540,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n" ] }, @@ -565,9 +563,9 @@ "text": [ "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[info] [gxf_executor.cpp:294] Destroying context\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[info] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -578,7 +576,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 91, "metadata": {}, "outputs": [ { @@ -595,30 +593,30 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 92, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/1643627018.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/1643627018.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 11, + "execution_count": 92, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAHVCAYAAAApYyiLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsvXuMJdt1Fv7V6fN+dPfM3LffSiLiG/KQnGBfgRAP/2LAIKI4UiJFiUEREZEdKTGEYCkEFBBG4Y9AhJP8E+H8gQUKUkCYxME4kAhy8zJECglxIDa51/ad+5iZfpz36T71+6P17f5qnbV31enpuTM9U5/U6nPqVO1XVa1vrbXXXjvL8zxHjRo1atSoUeN1ReN+N6BGjRo1atR4FFETcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjVq1KhxH1ATcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjVq1KhxH1ATcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjVq1KhxH3BfCfijH/0o3vrWt6Lb7eKd73wnfuM3fuN+NqdGjRo1atR43XDfCPjf/Jt/gw996EP4+3//7+N//I//ga/92q/Fe97zHrzyyiv3q0k1atSoUaPG64bsfm3G8M53vhPf8A3fgH/xL/4FAGC9XuNNb3oTvvd7vxd/9+/+3eS16/UaX/rSlzAajZBl2evR3Bo1atSoUcNFnuc4Pj7GM888g0ajul3bvIdtimK5XOIzn/kMPvzhD4djjUYD7373u/H8889vnL9YLLBYLML3L37xi3j22Wdfl7bWqFGjRo0aVfDiiy/ijW98Y+Xz74sL+rXXXsPp6SmefPLJwvEnn3wSN2/e3Dj/Ix/5CPb29sJfTb41atSoUeNBw2g02ur8KxEF/eEPfxiHh4fh78UXX7zfTapRo0aNGjUK2HZK9L64oB977DHs7Ozg5ZdfLhx/+eWX8dRTT22c3+l00Ol0Xq/m1ahRo0aNGvcc98UCbrfbeMc73oFPf/rT4dh6vcanP/1pPPfcc/ejSTVq1KhRo8brivtiAQPAhz70Ibz//e/H13/91+NP/Ik/gX/2z/4ZJpMJ/vpf/+v3q0k1atSoUaPG64b7RsDf+q3fildffRU//MM/jJs3b+Lrvu7r8MlPfnIjMKtGjRo1atR4GHHf1gHfDY6OjrC3t3e/m1GjRo0aNWoEHB4eYnd3t/L5VyIKukaNGjVq1HjYUBNwjRo1atSocR9QE3CNGjVq1KhxH1ATcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjUuBVmWRVPx1buW1aixiZqAa9R4CPF6E57WV5NtjRrVcN8ScdSoUSMNS2RVl+zzuizLKl+zTf1VCNY7h8eqluO13ZZRo8ZVRk3ANWo8ICgjpItYlttco6RGd3Kj0SgQuudm9n5P1ZvnOfI8x3q9Dp9Zt3cs1q8qJFy1/zWh17gfqAm4Ro0KuFtr8jLq9whOP7N92k495v1uXcdKvI1GAzs7O+Gz/uk1JOkUUXuEul6vC395nuPk5ATr9Rqnp6c4PT0Nn73rbfnemFWFV1ZZ+TVq3C1qAq7x0ONu3ZZVyLdKHd45KZIg+en/VqsVvpPkrNUYIztrdcYs1hgB7+zsbNTtWbusx4JEqv3Tay0hn56e4uTkBPP5HCcnJ+G7V3ZVBakqUdfz2DVeD9QEXOOhRllUrlo7F7GiPHestaBIdvYcS3TNZtP9TuLb2dlBu90OZSqZ8pitS0GLktfF+q0kXuZOvkw0Go3QZ9ab5zmWyyVOTk6wWq2wXC6xWq0CKcf64rU5RtDsp+c5YFn32wNS4+FETcA1HmqkhG7suwrbiwhdK/xbrRaazWawYJvNJvr9/gbZaH2NRmOjDaenpzg6OsLJyUkom9frvKrXDpbRbDbDcVtOrK/r9RrL5RLL5RIA0Ol0Cpax1k2SXywWoS3WdU3Fo9VqIcuyUBaAoHhQ4ciyDN1ut+DebjQaBUJeLpc4OjrCarXaIGV7X1JKVlVlqybiGpeFmoAfcjzKmvtF+343rmoFyWQwGBRIuNlsotVqAcCGO5VEtlqtsF6vAzGdnJxgsVgU2sdzm81mgXxXq9WGG7rT6SDPc6xWq0BsSpDr9dolbF7juX3ZzsVigdPT03Cs1WoVLG3+RtCqV2WD1+7s7KDT6YTxUuLmdcCZItFsNtHr9XBycoJms4n5fI7FYhGsZOvy9u5RmddgG9K9rDnjbZ/bR/kdv+qoCfghx6PwYt6vYBnPcmq1WuGv3W6j1Wqh1+sFIvEEOklqNpsVyK7T6QAozp3qvC9xcnJSOgfcaDQCEfI/LVqdW9b2zefzgtXL9gyHQ3Q6Hcznc0wmk+TY3A1ozS4WC3Q6nYJLvtPpBGJuNpu4ceNGsIjn8znm83mwiq0CYNtpx6uqRZxCGSnGntmLkO9FrqvxYKAm4BpXClXXkt4tAcQCpjwhx7nLVquFwWCAdruNdru9EWSksNaaBh8BCBayRiX3+313rnI+n4fPtEoV3W43zB3P5/NA+Iw6Zj1UHAaDAbIsw+3btwMBZ1mGZvNcXGRZhsFggMFggNlshsViEeqlK1rb0Wq1Cu2mBavt3tnZwWAwCC7n2WwWzl8sFphOp6EsehXUFU6lZzgcYrlcotVqYbFYhHFmIJeFN6YxgoyR3LbPmzfvnCq/xsOJmoBrXBl4gUwXLafqtV6QlX7u9XrB0m2324Ek7bkaNHVycoLZbFaYg03V3+/3g+WnbmP+J9HRbUurT8+l+7vT6eDw8DCQEYOclFxZ7+7uLmazWXCbs71HR0fI8xyDwQAAgnXKOVi6rdvtdhgDJeRtlSa6nUmeeZ5jPB4XFJ08z8OccpZl6HQ6uHHjBpbLJRaLBWazGWazGY6Pj6NR1BZVyfGiyt5lkG2MyInaMn6wkeVX8O4cHR1hb2/vfjejRgT3IlilipBLBdhUmQv0ftfrSYLtdhvdbhe9Xg+9Xi9cQ4LkHwOFFJ1OB1mWYblcbsyB0hrmcUtgLC/Pc+zs7KDX66HT6aDf74fy5/M5jo+PA1nx+vV6jbe+9a2hntu3bweLstfrYWdnB9euXcNoNApW5WQywZ07dwpW82q1wmw2C8pEs9kMFjZJnEFbxOnpaaG/DASjYsBrTk9P0Wg0AqnqfaHFy/bzuvF4HOoAzqx9usvpMtd7Ox6PMZvNMJ1OsVgsggt9W4uXiD2XZRH1ZWR+Ge/OZZVVB59Vx+HhIXZ3dyufX1vANa4ELirQUuVtY7kwcpnE2+12Q/ASyYgBSZZ0Y/XQCiX5KFlyqQ2JSNtNcucaWVp1aoGyXpbZ6XQwHo8DkV2/fh3tdrtA1CQsQuvW8aLCwGQZnCvW+tgOBpLpGNCSpsVqoZYyx2a5XBaWZA2HQ7RarSDs7ty5gzzPg6ULALu7u0ExIHnTbU6rmMqQvWdVsc1zVGat8pwHDdu+KzWqoybgGpeOyxIiVd1nFxVoXuCNrb/ZbAZX5+7u7oZltVwuNwgYwAZxAiisXz05OdlYlsP+qhVMYvYscgYpcSmQ51plOScnJzg8PASAMB/c7XaDVZ1lGRaLBbIsKwRpaRCTdX9rWzRQzAsw06VGdBdrRi1a+3Rls3/L5TLUT6uXbeR8+87ODvb39wvzxHme4/DwEDs7O8Eq5jQB6+O89HQ6DfPYsYCtq0aaNa4GagKuAeDBmSvaRtO+V+0lEbRarYI7k9bWzs5OsP5oxfIzcEZsxGq1wng83iAokpmSq/bJI1x+t3Oi2m66ym15wBmhHh4eYjQaBSLS8yaTSbAKgXNXsioEGjGsbdQ/4DyC2Y6pFwkeGwOLk5OT0PfZbIblcoler4d+vx/mtzudToiE5v2Yz+dhrOhiZzn9fh+9Xg/T6TT8afCXfS8uwx17t+9a1TZc5vvxIMiGhxH1HHCN+46Lzu9eZt26dKjb7WI0Gm1YaZz/5LwjrU/Owe7s7ATXpraX7k09ptdoMBYtbpbvkTWTT5AMY4kniNQyG2tRl5Vj80AzepoE60U367V2cwf+5zUcO7ZD+67rnDViHEAIhtO5aM9Cn06nwcsAAHt7e+h2uyFILc/zYEmT5NXLYcdjW9zNtEmNBx/1HHCNu8L9sITt3FhZgNRlgQTSbDbD2la6KrnEhXUvl0vcuXOnIPQpuIn5fI7ZbBZcrgwqajabheva7XaYPwbOibzb7W4EH6Wgkcw6dt61ZUFmZVBCtBY2FQidu7VpNHktE35YMiboPVitVoV5WR0vJvqgux84X9Os7eP1DJyjq17nyg8ODsKcfrfbDeu2e71eWE88m81wdHRUiMLWsasaqGUVoRo1agKuUcC9FhAeQaTI4F5GUtPapHuZ84Ksl0FOnFcEzohAg5VoMSkZ8LjOA9uIXHUlk/g1qIsubbVy1+t1iEhmWVXnJj3rLeZKjo1djNjtciqOiZZLMma/lRRp3WqmK45zo9EIFqgqJ+v1unAfdF2zuuj5B6CgDAAI48k5+ZOTk4JLWwO2AIRgM9vflFVbBy/VSKEm4BqvG7ZZsnGZddooTrqaO51OsHxIBsSdO3c22kbrjMd0GQvrAs7zM9uUi8B5cFaWna0htsKbQVGa4tFLVxkT9PytyphaC7SKG1vJsup9owvY5p6mi183oPASmChx0tKlhb1cLkNuaiYkoeLipaL0wLnu09PToGzRGgbOFKQnnngiRFjPZjNMJpOtdmXaxkqu8eigJuAarxteT+GiAlyJsdlsYnd3N0TG2t2FKFxXq1UgBnUzM5KZVpEVnIz2pXXWarVCUM9qtSqQv+Lk5ATT6TSQrwY+afmetyBlZSlxlv0WmwLw6tHc0bSctTxLRPbe04Ws92ZnZwfL5XLDUtV1wbY8LgcDzubVSYokUqtg6D3lfbHLoW7duhXuEf+oMPV6vRCoxiVnOk/twXvu7ZjH7tG2eFCCKWtUQ03ANV5X3AtNPyW4ms1mwdKltasCfTqd4vDw0LXqaJFqykYVlvqfOZ+BM6HOAB4usdHfJ5NJwdpVV6kltG36u825MUstZrF71rW2NbUMSs+NtYVuYIJkSbeyuqD1HugOT3l+nhGLVjAVK7rGGTjXarU25pnpIufcLxWqXq9XyO/9xBNPIM/zcB7/Vw3UuoiVXAU1+V4t1ARc43XH6yEkGAi0t7cXMkbRpQicW5zAmSvZJp3Q6OIYCeraXbV4+Ttd1koqTJgxnU435ih5HdsQ65dFWRS0ZxWlrFNbdhnhW1fv3Vhz2lYS6Hw+D8vCGNDGiGZ6Jzj+auHyeuB8zTNdzZPJpHAe+0Gi7/f74Vyuk+a0AK1jBs7xu+5iVRNhjSqoCbjG64rXI8iLwVW9Xg/Xrl0DgIIb+eDgAAA2AnkAFIKcKJxpuZ2enoZjun+tl9PZWtM6v8vNAaoQp10qpOUpUdnrFHcz5tat7NXjtcMj4bK5aU3woWVr5i9GqJP0Gak8HA6DwsN5Yt4Xtc49xUCt5dPT0+Ah6fV6WK/XmE6nIdOXBoVx+oJEvL+/X9iYQrObVZ0DrnJujYcHNQHXiOJBnk+ylhKFNt3MnK/jciCSHzdBsIkoOP9KMECKxAucu2NJ5mo1n56eFlyfGlmrUc26I0+VsVXBzCjpFPlaWCKMzdGWXV+lnm3gna9LlADfva1LnehepjW8WCyCpdxqtcLYazS5BZ8D9URMp9Pgbqa7+ujoKLjCdRMLjZznMrJmsxki4y+a4rLGo4GagGu40LnNB4WEU8FBTOK/v78fyJOWki4l0kCc1WqFyWQSIlp1TtGb7+TGCxTWailz3TDndHWNLokiRp4a/KSEaVM+EmWWpJ6n/1NjeBHYcqs+J6l5UbW4eZ+0fLp5SY52j2NCrV87naA7SRHMegacJVOg67nX64V14sxoRlCpIgkzmQeXMbF9fLaqTCs8KO9ajdcHdSasGlcCHnHoUiINcALO94+17mIm9lf3r+Yo5o5GdokQcD5/S4tH55SVeFkW/3vzySkLlpaf9keTS7yer6wXbX3ZxFulbpv8g8uYCI47FTEucVLvA1C8Z0Bx7vjk5CQE7Z2cnOD4+DhYsLu7u8HjsVgsQjY0AMHq5XIoLqOii1z3I67nhx9u1JmwajyUUCsRQLBKGGCl0cXz+Ty4HjUvs4LCWedqSZBM4A8gpJYEzq0knU9WV3Mskb8XpPQwwU4H3Avorkp8BkiY9jzO43OJEiObgeKWkVYB457HvMe7u7th/ncymRSWrtHboX3WFJwkYbq42W6bsKXGo42agGtcKdC1zOxVFJ42upjJ+dUKsrmVWR4FKN2GzWazMG9MaOYmXsNMSuo65n91PQN+YFJV12TVsWE9l40qbbmsQCNvTPSYDQgjwerc+nw+D2uL1Xq29a9Wq2DBcu74+Pg4uJG5WcNisUCe5yFinh4S3bnJBuPxWdF9nXVqokaNmoBrXBnoml66nHXvXEa/0g3ICGXNJkX3JQWiEiQFMYCw/6xuLqCu6tVqVdgpSAnCEi+v0f8p3K1w9sjysgT+ZZSzrcta58Y99zfd9TqHzOxWdnkZ76m1pnkelTs+Nzy/1+vh+Pi4QLS0sBeLRajPgpYwXd+cAvHSd9Z49FATcI0rAbr/6HIGzkhSN2AHUJi75VpfdTdS+FqBx1zDnONl9iPrnj49PQ1zehYacHUZ2NYCtoR1mbAu9G0Dh2Lzx1Wv1/N0Xj+WkYtzukBxIweNntb7rDmor1+/jtu3bxcsW+4HfXJyglu3bgVCpXVLhYztUze0urhZH6+p8WijDsKq8cBC3c16v+kKPD4+DudxG7osy4LrWK1QtXxsZDIFIqNYWZa6rZkn2LqaWUaKdC/yiqnVpLifQViEnY/3frusOqpcpxHT1hLWZUb6nXVo6lDe//39/UCa3AmJ93dvbw9ZluHWrVsbViwVMz5LdGmzXCV/PqPMlnbRsavxYKEOwqpx5aHLiuhyJpbLJRaLRdhkXZcAAefRyGr18ncKVd1Ll8KSVhCXING9bF3YNkmEl4TD689FhWuK7O4VYskq2B47/3o/iYN1ewqQ3nN9HmySD41eZwT1aDRCs9nEaDTCYDDAF7/4RQBnAnZvbw97e3s4Pj4OG0DoXK8qf3a5GqHpMxkdXePRQ03ANR5I0NVMocY0gkxwQOuFBAwgEKdatQymofWhZMFALbtjEefzaG1aguEx3cC+jCDLAotiuN9WkRc4ljr3onUA25G55wJXb4cqVqk2sn9UsjTJxt7eXtiM4emnn8bR0RFu376NV155BTdu3AhTIdwRi88i15hTQWQ9zIxFl/jOzk6wkFNR9JeBeq3xg4magGs8UOD6Tt0OLs9zzGazAikCZ9aKuhRJvrSe2+32Rj5mLl1hhiMmS9D0hfxT8tVEEBpJ7UU1E2WRvlquNw6vp9XrYZuo5ntdXyoJi16rng2d2+XyH0bIe+NO9/VsNgvu4d3dXezu7gaFsNvt4ubNm+F5YcAWpydIqK1Wa2PHLG0z66KbmriXJKz11yT8YKCeA65RGfdqmQsFJdP/0epV9yBdfcB5MItuYM/jTz31VDiPwkyDtPr9fmHudjKZhKVLSq5KkBTiXF/qBRIpYuPjRfDaceD/Vqu1MUetllrVOu8WGkSkx7TftBo9F+9l1G+Rsph16RE9KAzImk6n4TnjObPZrLDGGEBBAQMQLOD9/X2MRiMAwB/+4R/i5OSkcE+4/pzXMI6AaLfbhflpDRrTHOGp1Jk1HmzUc8A1rhyUfJlPWbcBJDFqcAtwvoSo0WhgMBhgNBoFUqZbkEuWBoMBgPNlILPZDMfHx4WIVU1tyDrVPV1FKFYh39R5Sm7WGiIxU0mwWZUuKwpaSU8jeVUJ8M73lgkptm1TmXKTUmDoSVHlod1uhwAoWqqDwWBju0k+X4xSXiwWePXVV8NGC9evX8db3/pWvPjii5jNZmE8Op1OIX4AOHv+dA0xd03iPdTlT9qnOkL60UBNwDUq415o5BR4mj4QgBsAZcn39PQUnU4Hw+EwuJMZGa3ErBYZhamSt1oqOkdXxc2s41L1eGos9Fq7DIrtBc633VMytmXdLQkrocWgbbBt9sq822coVkbMzct5WiVY4DwBB58/zttqRDzP445IzA99cnKCxx9/HG9605vwxS9+EUdHR1gul0F57HQ6YQ6YewkzFznboAoU6+IuXpwvfj3c0TXuL2oCrnFfobl7KVx15yBanbRYFIPBAMPhMLgYlaSGw2EhAGaxWGAymWA8HgdhaJekUACri1Dnez1UtXjLyMfuABTbi5huT+sGttHZVdtp4ZWt7lJVXAhacbHlWF4EtQ3uqjqOsTZ75+tx2y4G0dHDwefQy9VMRZA7Zq1WK1y/fh07Ozt4wxvegE6ng1dffRWLxaIQf8CNQKhg0r1MNzmfLZ2X5tRDlX2F67ncq4+agGvcN9D1rO43Ch+73lWT6wNnwoduZQqx+XyO3d3dgiXNRB3T6TRsRcjrSSSce9OsSSnhdjdkYZGyNC0Rll2vFrd1Y3vWeew6j3y9/tm0nCwjz/NC+kW7VtqLrPbquCi5WOJqNBoYjUY4OjoqKFSLxSIofpqGlGXQglW3+2q1wtHREV588UU88cQTIWd0t9vF5z73uRBBzyxZnNtl+fP5PCSL0bXmQDFrFpfDVVnmVuPqog7CqrGBe61Ze3O+mntZl2RwqREF9Gg0CpYr59+Ys5dJ8rMsC4Lv9u3bIUjIEoxGo6plopuuA+frNzWRftXxiZ2niSN02YwGA7Eteo5XpkZuL5fLwkbw6lWItYnfOb+sbm+Wo1sDWgJl25g3mXOhuiwIOF+jzQhjbgO5zfjFFBLP8uXe0PwDgPF4jMlkEjwmXIZGEtbdjDRI6uDgILiVGRjXbrcxHA6xt7eH0WiEVquF+XyOo6OjQt90+Vur1Qrzu51OB4PBoLB0juA8MhN16D2p8eCiDsKq8UDDI19aGx75aorA4XAYArQYTNVutzEYDAoubG5FaC1ea93Z/WZ5DDgTlBo9bVFVSdHzlBRppWtw00WXHnGus9PphM0EbBu8dgDnZGr33bWfLTHb8nUf5tRY6PKwPM+Tm1nYNsYQ+51eFM6n9no99Pt95Hke3MmLxSIobtpO4DxZRqvVwnA4DFsLstzlchn2CF6tVnjsscfQbrdx48YNdLtd3Lp1q7BjEv+47pfBWYzU1nHV6RPWlbo/dpxror4aqAm4RgHWcrpsaIo+1kXLjRHPHhnRgiHBco0mN2Vge7msaDabua5VtXJtkgR1b6tAVosyBUsEbJO1uKlYWPJnGdYN6wVY6Wc7H9vtdjeSiHjt59wncK54eHOl9lqdAyb56nQAXf62z7ptJF237XY7RBen5o9Tz2PKKmbUM5eQ9Xq98CwxsErHDjjzdFAxpLel2WyGpC7MxAacB2mtVit0Oh2MRiNkWYbhcIh2u40XXnih0C+uQ2d/5vN5qEPvNZ9BTs9o7nFemwpGq0n4aqAm4BoF3KuXlgSoli/rswk2LGgd0CVHIcUIZxIo5+fUVazLaEi6XAdK13NMgJcFD8XmP73Plny9Om2mLhXcMVcty2Q9TGKys7MT3NEk2lhQT5mwJhmQlKzi0O/30Wq1MJ1OcXh4GBJZsH3sO9fG6h+nDqg06e5S9j5sSyp2jFXJolWr94JECpw/l4wNIGnz2eU0B70xs9kMr7zySohDoCv+xo0bePXVV0OZDPTj9oms09sykefleV7YbnGb/tck/GCjJuBHHN5LGptrvJs6AISk9DqXyHlfavSx4BzOv/Gcvb29QMwkcLVMKPQ5r6pbC9o6NIMWcDY3RyuIYxCzQq2F6fVB53HVsub5+qflKzHoshW1ktg/nselWTxOrwLnymkR2nletdZtAJP2jaRB4up2u2g2m4F8p9NpoXwbBEYLkOTLqGEqJgcHBxuWu21XmUtaCVvJnsk4aIlz4w3tb6fTCVnXiNPTUxwfH4clTVQkaQ2TtJnUY7VaYXd3F6PRCNeuXUOj0cArr7wS1pkzuIu7b9mocvvsUGksi4q+LNTE/fqhDsKqcc9BAcJdhoCihcF5WmsxqmXHP7o7KazpjlaBSeGmGY94LMuy4O4kKVFAKxHa7FgeNLjJU1qoBNiEEFQ8FHb+k/8psFPBSprdSwN8dJMKbQ+tt+Pj4wKZs40kVVpfGgikVlir1cLjjz+OPM/x8ssvl+7UpKSpFjG3mcyyLJAkreEqVp8qEVoP19VSGdF7qfnBeQ3HgBHctFhVSeR0BMeH90g3AeHz1uv18Ja3vKWwfeYf/uEfhnlg9p8em16vF9zRHG+2mVb2YrHYeF8uE3Y6pMZ2qIOwajxQsG5f4NwVRxcpjwFFQUhQwDLSVAOttAxez/lGkj3LswEtTFXIOjRgh2WyHR4RUBB7JK1KhPaFxG+hVh7/89yySGFapCTX9XodLDMqGLrmGUAhCIrCvtFoYG9vD/1+v3BPuMRLz93Z2QlrsDWquCq4XIfktlqtAgENh0N0Op1Qp6Yh1fFNzW+z/VRI7DNgx1WVPEbEswybmlTnbu36XV5zenqK8XiMV155Bfv7+2Ef4OvXr+Pw8BDA2Vxzs9nE/v5+mDpZr9fodrth3TDrJGGzPWzTZZNkmXehxuWiJuAa9wzWBUhysLl29XxrxRAaPLNarQIZ6KbrwHmeaF2HqpjNZmg0GsHKA4rz0LorjrXY2F51+aasY7WSeL4uY1F4CoedE45BXZiaOlOTedAqI1lrUBFw5hom+ep6a7at2+0WMjxlWRY0/Sp7FKubW9vN/pJU+JzQcm21WhteACXLVLYy9n21WrmKkk57qHtbvSnsvzd1wCh8Kj5MvqGR/IeHh1itVmFbQwarkYTn8zn29vbw2GOPhT2G5/N5mBtnfmmWz3HylJLLQm35vn6oCbjGPYNuF6jrbZWA1eojdO5TA3gIbklI8lUr0yNfrRdAIT0lgCD0yvLvxuaDPajLm9d4ZKGuaxvspf8t9DwqNRxjtfRojWnfSO4MFALOFBNuNEAXvM7XkvB0GgE4z60da6O9vzES1rSMXJvL+97tdoOyZdd0q1fFjg3LzbKsYOXb+1QGqwjpc6AkzLHi3C6fuePj4xDpv7e3F/pDlzI9Cjdu3Ajr1jmFQg8DQSuY97Ser73aqOeAa9wTqMtY3aKquWuUpw1EUoFP12Se5yGzFQnHLiuiMKQlQhc1A276/T6azWawojmHrGQPFAWzJQ99ZSic7Vwq3eDA+VIVhTd3bC3smEJgrT0lJM99r/UROzs72NvbQ6/XC+cxUImWmOZ3Vm8G3dmnp6dh/Gx91nsAFD0G6u2wQV/8z3uvS3G4JzTJh2V5BGytVg2essFlOt9qn0W2XacmNJWkziszAl3nkDUqfzQaFZLJMGq80WjgySefxHA4BHCWMES30/yjP/ojAOdR2MvlErdv3y54EWKo53VfP9RzwDXuOyisNTkG53wVGmTluaNT5AucW5kMsqGlRvJdLBY4PT1Fq9UKllSr1cJyuQxzi3Sf2nXHWocmzFCLS61UCmQSC13cSrSWaFLrXlNj68Fzp6asaY6RLVfXY6twbzTON5mnYmCnEWLC3SMJq2zpcSpsdL/u7+8DQFCudnZ2CjtZ2XqtpavBeBed39TnwM4da9+Y2IN18tnkunTuG8w10Ht7e4Ggb926BQChv9ov9fZQCeKew1XJl98vSsI1kV8+agJ+CPCguaE0gQDdv7p+VzNQefOhAEJkLK3I8XgcUk+qlUmrTAOQOJ/LgBYSMHBmVdL1p2tObSYiD2px2fW8Oo9J680Sn3U9e+ShlqFXv2f92u+WiD2o1a7lW8vX9sHu0mOnD7Qsr32xtljhroQ2m83CtAKJlB4Mj8j5LDDy3muLZ+1apUr/U/HifdcAKet50MQcmnSGkfWTyQR5nocNQ/b398Oxw8PD4J1gMhPd8pAbSNg5523e//spL+yUxIMkt+4HagKucanQuTAKOY1EJRHqulaLLDvLK6zLN6bTaSFpPS1sXdfLujSCWTdxoOC2KSrVemU5KlStsIgRpAbrkOBooXiWCJMr2HJjhBY77o1hrE6PsPV3j5StohBzgXuIuYe9dnhl0PNxcnJSSOLCpVfz+XxjDPl8dLvdQvs1CE4JuApoVauLPObB0Mh5Tn30ej0cHx+Hdc6cY+/3++j3+xgMBuFZOTo6wmg0Qr/fD+f1er1A+qvVKpRJhSj2Hmn79djdkvBFr/cUzkeZhGsCfgjwoDzAOk+oQVcUrpoQwc4LqoBgIA6AsNxIyZfEqyn9dJ6VQk+FIQN4uOwFQIG8LUi8/F3neO18r5I1CZgudw2U0aUt2jbdh1aFvFoL/NNxuoz7HrOgy5QND7a9tnzPA2Dr9kiD95b3j65oRmxzKoHKHy1P1qEZwVKKX2ps9J7pvSrzAKxWqzAvvLe3V1Am2W5a1VyLDpxv/MEAO3qU2BYlYXqYUm2/DNh7+aiT52WgDsKqcWmg4GOULN2ZwDlZ0fKkhcxoUR7jco35fI7pdBqsAs57cT0lgEJkLIUYBa/NDqUJFVQ4e25HtjfmJtbrrNVqy02RESNmNTsSXafAmdtdz2cZSuTso4cUeWbZ2Tw11/xyzLhncoqAU+Wyfbq8ScvScbWBYSkrWtvYbDYLwVkAwlIjtiHP87BRQozYY/V599sugdLIe7vOW6O3m81m2Bzj2rVrYX3z4eFhWD+tFjvvB2MXGCTHJVrs6/HxceH5OTg42HDJl41rqs8peGO5LR5WF3QdhFXjvsGul7TEQDLUrFOc0+10OhgOh4VE+bQCSBaazF+DgXTLQgpATcHI5SA6B61uScC31Ow5ep49n9/tMhl+VqvLuih17a4qBzFc1PWnRJZlZ9mwptNpIXLcWqm2fxYxF7N33t20nSBpM2kFPR26WQcjjy1xXqT+WH/sc66kzDgEKoSj0QjHx8e4c+cO3vCGN4RlcI1GA+PxOFj4VCa5VphzwErKvLbb7WIymYR3ot/vh6j0quO5jXfjIudXacOjjpqAa1wKaNFZ8rIuUyUwEmi328Xe3h6yLAtChMuVdDkKiYvrgDXyWa1BCjTNe2zdvhrla6HCQYkzNtfqufuU8GIuT0sQSr46r2fXqsbcnhYxy1v/dDMKb+mVfo/1wZ4X8xzo8Yu4MHmurnmmZUhC5DIljQNIzY+m2qCBfbrGWi1fPrNaJkl4Npuh2+2i0TjbSnM8HuPOnTthLTBx586d0BdugUkSXi6XGAwGGI1GGI/HWCwWgZBp4dN65rRHmWu/7HhV1CR696gJuMalQKOCKUxoVQFForKpI7nsAjjLDMQlG1xLy7SSDGqiZTAYDDYidjnf580tx2CJWN28eiyGmIDXdtnj/EwXpJZFxQGIJ4ooE55qVaesV02qETvHa3usLTHlJVW+bWfMba9QxYr12AxrVLjssiFVAlLTD7r8TH/jc84/ZuvibwDCc8hEHVl2tkUhk2pwLfDu7i6Ojo5CH0jCg8EgZL46PDzE/v5+2DuZzz+AMKXCbGVHR0fu2MXGcVsF6GF1Hd8v1ARc465h58RU8HKeTgWmWqOa+H42m4XkGCRfXYrERAwapEWSp9Wo9bBtCis4PPeyfo9Z8ilB5M2RxVzc/K/EwPlqL1mEbZ8ldAAbhG7bxrHnvdFjdm2wR0werLD3yLqKxWvriF2jUwckX+vmVwvWg7eeV7/bTGZq/fIYPTB8/nWTB+bQBhASbzQajeAmHg6HaLVa6Pf7gZhJwiRu1rNYLHDt2jXcuXNno61c8sSVAbrq4LKJsibey0UdhFXjrpBlWQiO0ghgDRohQfJvZ2ensMzo+Pi4sK1bo9HAjRs3QsDVer0OAUk8luc5jo+PC/u36tZ8PEZrUud/uX5SXcBAMdKZ19vftN96jufSjBG1usL1OtajbeW1qrhYaNmaWcyDRtzu7OwEwmUA3eHhYSGi1o6J5zouU0I8eG5q9Tx45G37bMnaXqOuaV12ZtcAaxkkWa7fBc6eX83DrNMcwPmYMhMWn/vj42NMp9NCAKFG97NuLjHSvawZ5c8539Vqhf39ffT7/VA/35nlchneQ6a+1AQdV1DEX1nUQVg1XldQ+6egs9Gi9lxuGE9BxIxVmhSDEaQsj+TLeTEVPrRMNNuRCh6b1lHdh/xdrSZtf1W3s9fPmNVlr9Vj6k61xGJJvWxONmZl2z+OD7N2eZas7WcVyzZ1buzaGMl6/dLj3njzmJeOMnXveEy3kLQeAt0cwrq0+TwCZ1bvZDIppBSlksiMbGw3d4Fi2Sx3MplgOBwiy7KwgQNwvnSNSgLXvzMC2+b/rvFgojwTeY0aESj5UvhoRKiSMAUY57boamWSBXVZa35iuuYs+VJ40VXNHL+2fbR4dXlUqj9lllvV68vK8gg6pbzE6isr1ztH17Lyb2dnZyPgzJ5T1hZL6hdpvy3Lwk4LpKx9PX8b2C0kaRWT5DT5BZUmu40lLVL2gZYqA8RUOVDvzmAw2Jh6GI/HQSE9PDwMyUfo3uauVhqQxYC+Gg82agKucWFo1ivOe1nXIOdmd3Z20Ov1gqCg5auuMm6RR7KlYGJZvMbOBSvxqiDUeTsKwzIyUcUh5g7lsZhgVwGamjNVl6YNTFOXtDf3q+d6ZXuf9XxLlJ7ykqojVaceuwgBsk7PIo7VXfXc1O8sgwodn5lOpxOeOxvoxf92vTmAwn7UeZ4XcpBzWoT3gNHPupuXJpEBUFgfzueFdQwGgzCl4K2TrvFgonZB17gQdF6LrlsVttySbb1ehw0VsiwLEc4MNKFw6ff72N3dRb/fR57nODg4CMcBhAAtav10ZZP4vQxHJH+6p3u9XjjHazMFsE1NmQrUIqz1q7vl8JhHjHrMujxTCTbKSDFVPsu1m0X0+/3CNo96jZbluY1tX7328DrrPvbGRpWlsvlvW67+pu3kmMbmRkl6vHec06UV6gVtadtIqq1WKyiRnU6nEOmuu0eR5BlIeHR0hG63G9YNsz2MhGbQ1nQ6xXK5xNNPPx3q531kQpJer4dmsxks5noe+MFETcA1LgRav2olWgGlkah5nm9YDvyzQVmz2QxZlgVXNPfrXS6XQUBqMg8lX5tYgwRtLTxCr1HL1WbwsvOjsblIb/mSRw4pMtHreG7VOVYtK/Wd0DlybtWo58esaY/YqyI2HrH5Zz03Nads748qMRoRnZrnZqpUpn9st9uYzWbJOX0th2TI8zmXzDGi+xhAIGLd63o+n6Pb7aLb7QZlU/Oqs0wuR+L9ojXNMumWZjllz0uN+4OagGtsjSzLCq5nkqu61FRYAHB/p5Dq9XqFbD8kA7rt+MfylCgp7DSqWclLg4yA8yhj/SM0qrUKqaTmMHUM9HiKQHiNnYe116asX68OHteEElYxYC5lXT8cQ8p9m7JWbRmeEhM7p6x/VeqJtV0tbruNIHM3p5Qoe7/yPA/RzJodjgqa7tZFi1WzaKl7Wb0ROpXDHb1sn+jVoALR7/fDOuOLjF+Ne4ut54B/5Vd+BX/lr/wVPPPMM8iyDP/u3/27wu95nuOHf/iH8fTTT6PX6+Hd7343/s//+T+Fc27fvo1v//Zvx+7uLvb39/Fd3/Vdhby3NR58aJQoLQbgPGDFCiwSpFoiDNgi+QJnS8yI5XIZ9gC2daqloeuA1RLW4BgryBSW9Nh2b6ci7zqdB7TWVRXCTcHWcTew/QTKrdeYu9Yi5RYva3+Zizn1PdUO28eydqiyyOmR6XSajCaOtVmVRlvHYDDAYDDYiGDmtpkkWpuZjNHRXO97enoalAOSPp9BbmGo671rPHjYmoAnkwm+9mu/Fh/96Efd33/0R38UP/7jP46f+qmfwq//+q9jMBjgPe95T3CnAMC3f/u343d/93fxqU99Cp/4xCfwK7/yK/ju7/7ui/eixusOTTup637tciS7fyzgu6s5z8aySb7clN2Sr3U9K1ladyGt6rKlQSyT7fUCslLXa9+qZIGKtSF1XcxFXWVe2LZVpwno5vTGqKoSEXPBx8q5yPhse666oVUJ89But4Nnh3O3TO2oY1zFA0ErlxuA6DIhuoZHoxE6nc7G+8BARfX2MAobQMh6xXdLiV6nfGgha0BWbf0+WLirRBxZluHnfu7n8E3f9E0Azm7uM888g7/1t/4W/vbf/tsAzsLmn3zySXzsYx/Dt33bt+F//+//jWeffRa/+Zu/ia//+q8HAHzyk5/EX/pLfwlf+MIX8Mwzz5TWWyfiuLdIzRcxong0GiHP8zA3y3lcuqOBoqXJnLiMeqYw4bIkZr9qtVrI8xyvvfYaABTcgSRHGxRFAtbv2l72yeaNVuK2fbXLONgvtdS8OUeFZz3btnsWWwo2NSKwadHHwLpIALu7u+E+tNvtsMsOlR5eU0bAZVa9HSd7XEkj5t6uqpiwXDuu3r3QYyQpzX51cHBQmENWBckqg5qXPNZmurgZJMXAxFu3bgVXNIMaWWar1Qq7U6knZzQahdgI4GwemXsks83T6RSNRiME1x0dHblWuY5LTdB3h20TcVzqMqTPf/7zuHnzJt797neHY3t7e3jnO9+J559/HgDw/PPPY39/P5AvALz73e9Go9HAr//6r7vl8uHRvxr3DilBqAFQuhUgCTbP842EGMyypNYqLQ3gfAkG16JqpLPuLazkG7MWU8I+FQFry7BzyV4dniWk1m/MarKWq7a3zLoqa3usP/Y775PeB7uMLOVS1vba88sIuqx9qfpi0DZYQo8pEDxf4wOokJCo1Kr3XOV8J6iw6dSH5wlhHVz/3mg0MBqNwvvBTUZ0PpoblWgZ3OJQrV2eo1az7jZml+zVuP+4VAK+efMmAODJJ58sHH/yySfDbzdv3sQTTzxR+L3ZbOL69evhHIuPfOQj2NvbC39vetObLrPZNbYAhQ2Awq4ztCAo0HUNJN1n0+m0sOyF1i5wbqkuFgvMZrNA2jyuLuaq5FtlvtUK95gbO4YYWaXaUtVVbOux5ep3HQ8dH69/JAF6M+w127THtqWsjNi4VM0c5o2lTSxi2xNrN5UQPmd5nheebUvmXr/5HJPsYm587SfHn/PLDELks85AK9bJNvG9UmucxH16ehoUWYIETqWB+aJjY1xbv68/rkQijg9/+MM4PDwMfy+++OL9btJDD0/AqsXE3V6A8wjjPM+Dps0AKwoLTVBA6NwXtXgNuGI7qgr11DydZxGVEYa1YDz3r7YhVk7Ko6DnbEPM7GNMgYjVw3M0sMgmAtHyY22ya37L+u99j92nMne+tWA9C9wjbTtGJE/tj877AtggYNtWO62hY8LPqiDo/tTc2SvLsrAMj++BVWJJ8qow8V1hlixmjbNjrtt+anauGvcfl0rATz31FADg5ZdfLhx/+eWXw29PPfUUXnnllcLvJycnuH37djjHotPpYHd3t/BX497CEzhMvpFlWSGDFYCNSFHVxqntA+dJLjQHNINJdBtCCi4lwdhfClaY61yxkk4V7d+6WMsEmUZkV3GjenVp+8r6XKVsXk8rTP+0HCUrz31u27Rt0JlHWFVd0XqNfrZKiVWYrPuV39XtDiAkrrAbZnj1AXCnHIjYkjmmpeQzzyxwJGG7i5gGt+m+0Zyu0f2F+U5RqdAAWM4T13gwcKkE/La3vQ1PPfUUPv3pT4djR0dH+PVf/3U899xzAIDnnnsOBwcH+MxnPhPO+aVf+iWs12u8853vvMzm1LhEME8tlz9wXW+Wne3Uws3CJ5MJDg8PC0KHiTVoAazX5zsUMUKZyyk6nQ6Gw2GBfC0BA5suVe83wgpGzl3rb/ZcLwNUigCrkoc3p8jjtuwysrXttH21RKplcT0q5yEZnRsj25jSUTYeqXHx5tk9BavM68Dr1f2r7dXNQgCE9bH01GiGMJKv7m0dW4akKU+1Xs8VTg+QjdyfTqdBOWUCDgAhbzpwZtnu7e1hOBwG65xxGKenpyHaeXd3F7dv38ZkMikot7PZDC+//HLYtnA4HNZzwQ8Itk7EMR6P8X//7/8N3z//+c/jt3/7t3H9+nW8+c1vxvd93/fhH/2jf4Sv+IqvwNve9jb8vb/39/DMM8+ESOm3v/3t+At/4S/gb/yNv4Gf+qmfwmq1wgc/+EF827d9W6UI6BqvP+gCI4HqlmlKHPP5PLzYtHTVymSSAN3tBSi6MzWvtK7rvegc1baWp15nLbMyF+tF59BiJFOlzdv2S8mBAXQqjC+6kYLnprXfPUuXfY9Zt/aYd080wYi91iaG0b2kmTcZQFAKufyH13gR5tpWLi3S+mydStD2WcmyDPP5PJBtu93G8fExTk5O0O120e/3wy5I3W4Xg8EguJo576zBc1ofgx1Z13g8DpuXaPxGjfuHrQn4t37rt/Bn/+yfDd8/9KEPAQDe//7342Mf+xj+zt/5O5hMJvju7/5uHBwc4E/9qT+FT37ykwUXyb/6V/8KH/zgB/Hn//yfR6PRwPve9z78+I//+CV0p8a9AF3PupECA670JVZBQ0uZwpGuOJvSETgXwnoOrQWdN65qeabcph5iBJqyTqu6Te8VLlKvtcys9QdsErCek5oL9dpmlZ+UK7sMSmbeXK8eJ9TFTDDpiyaO4ZpdW1/s2bPu+djYETYoy/aX885chwycTeEwOGs8HmO1WqHVamFvby8k2WBbaLl3u10Mh0NMJpPCVEu/3w9u6JOTk7Ddp+6Tfb+e40cdd7UO+H6hXgf8+qLf7wfBxWTyTFKvL7Bues79TvmdiR70mIKuQs5RzWazcK7OsSlSFleZKzVVDrApTK27WK2NGGJzhxy32O8ebBs1mtVTamLt0baPRqNCClDgbL5wOp0WMowBm5syeHOw/C3mrbBJWmJt1LI8WAvTm/Pl82Tbw/XrtH5ns1mBfNlGJbjU9Id+17STCi3fU+QGgwH29vaCFfzqq6+i2WwGj+Dt27cxHo/x+OOPAzi7R7du3Sq4tIHzlK5K0LpqgSQ/GAywWq1weHgYYjmuIA08kNh2HXCdC7pGEiRF4Jx8rduS6xfp8qJrjOfpTjBe0gW1VFarVSFSM0YuqbnRFGJuSrUEvblEW37MvepZy7bN+t8SThUCotUTs0g9kBy89IYAwo49nU6nkEbR62+MgGLfbX9SilRVa9hunGHr1N2oSHKdTidsTMCt+5bLZfhOcIrEIqUw2edV22YVhJgCosrs0dERhsMhhsMh9vf3cXh4iFdffRU3btzAcDhEnp8nq+HzNpvN0O/3g/eJdfL9pQfr9PQUnU4H+/v7ODo6CoFgNV5/XIllSDXuD2i5Euv1OhCyJVeuK2XwFK1hCkFv2QqADTJX16Cel4JaKFXnIfW7kqeSsb0+Ru5Vg4SqINUX295ty7ZWvQYQWSuw6oYUth2epVh2rVdW1WkDrx7OB5P8ut3uxvpXKns8n4iRr2Zki7UnFjBo26zlq2Kke1mfnJyEuV7ejzzPg8VKEqbywOeWGbU45bdarTbuD63+LMvcsanx+qEm4BpRaCJ3Wrh2HvH09DRYFXQz63ILYFNAk4w1g5CiCvGkUEZgeo51y9r+ldUXs5TKyvDOqQK1/CwJ2TJTVhwJiBYb92/WADtVjDw3s4XXx5gy43336in73bvXdgx0L2q1TJVsU6TPPXsJG8XutaGqcsQUliyT9wQ4C5oiCd+4cQNAMe2o98zO5/NCcNlqtSp4NDR6utFohHX7F30ea9wdagKuEYXmZuZ37tFLKPkC51aVJ4ysUNJlLyQWFRApt2dVVCHrWCYlCz3HtucyXHgxIqli2Xvt9D7zP8dY15laC46Wlb0+1vZUe7ZBrL7U/L26m7dpX1nbmABDtwysAusJ8O4BLVuNxObSMOBM6T04OMBsNsP169cDCVNJUk+UZvPiGvx2u12IxWi324V1/Ayw0wDZKu9BjctDTcA1XDDrjs4z9nq9woup84Sa69kDj2uUNAmYgo1CxM7DKmLEkhIa1gL3ylQSvgjJl1nClyHYtmmXV49nPel0ga5P1TanSLhKf2L99hQarZOI3buy8eDzo/OhGpwUayvPtYk87Gfvz1OWYmOnBMzfNMMccGYF3759G41GA48//njYBWm5XIb18oSmw+RGDO12G+v1OpA8p5B4DlDc2Yyo54RfH9TO/xob4G4tTFTAtZEqtKiF616juqzBCm5dl9jtdgvlMRkELTKuNa5itVRx9VoB7hGKCk6buaqKmzJWv60jdZ3tl7bBWsa62UVMUVFCyLKsQKysk0qUBsIpSbXb7cJaU9sedeOn5jy1vTxWlm+bZXpuaR63Zer5VOLG43FhtyOCG97r+To+PMb285ln/bE5Xdt3/U9vQ6vVCvv/NhoNnJycYDabhUBFvbe3b98GADz++OO4ceMGJpMJJpMJ1us19vf3cXBwEN4b3j++Q6PRKCT86HQ6Yd6ba4Fnsxm63S56vV4IxqrJ9/VDTcA1NtBut8O8EEEBziQGmt2q0+kEbTpGIvxPt1i73Q4vO/dMjSWz9/LxesJP61SBdxGrM+Xu9OARgZbjEZQV/Pa4tl0ts1SbeE1smVNMwDIKOsuywvpu3YnKK8trg8VF7wHriZUZq9cSKYPM7Mb0jAqO3Wu9h942fp4CYH+zyhs9PkwIwvdAl0NpbnUqg0dHR6Espq3k/tnA5mYlrJ+bPSwWi6BA8B3W8ej1eoWo8JqEXx/UBFxjA5rwnYnh+Z1zvsB5kNZ8Pg/RljEoAesyo9VqFQJHrDBLWakqZFJu0RTx6by0tWJiy5CqIFaf9z2mSOjvqetTVqRap7HfKORZrmYyA1CwxsramkKMqF4PUMlLzRFblOXvTkVDE9595nwyN0YAENbttlqtYKlT4V0ul+H9Ojo6QqPRwPXr1wvPNQnWgorDYDAIEdLAmfdKc00vFouw/EzHqSbhe4+agGsUYJcWAZtCntaALvC3AsuL1uU6U11SMZ1Og/Dw5srUiolZPSkLq4p1Zq0gJeDLQMxdeRFC0zGKpRK0lleMLGy9FLwaHGe/V21javqgaln2+fHGzp5roR6Bqpa4rsfdhrTtffY8HO12O0zvAOd5yZmfmtD197PZLGxgc3h4GPYIjnldtC3su04n6W9qBXe73aAQvx5I3c9HBXUQVo0CNL+z5ovl/CyTwTO4g9+VICl8LHlqpiBuwGBfdivs1Pqq6gKucr7WlSJ3PVdduNvMlXmu87I2xa4ntlEQqrqKtVxNP2nXRnvg+HjnlRGYfV7sWFclbXudFxRotwaMjYlHZrFjGj3uPfsEYyu63S6yLAtuYW4MEUOv1wtZsvI8x8HBQXAVA+dk7Y3Ter0OS5k08FHXB6vSoOuCU2O+jSJVBa+3V+RBQW0B1wBw9gK02+0QIUmrVHeFoaULnGnymrJQBbe+nOriHAwG2NnZwXw+x+HhYSBv72VWYecJ0ipEZecpVSiynbq5uZ6Xctt6Yxdrg2dBVS3HO6csd2/MXc12xFzrOgZMNarntNvt4BHxLFJbns245VmGqb56CpUFr4vt06zHdAs/Rn0riXnwPDKEjqO6l2176UGghcspG/42GAyCYktrWMm80+lgNBrhqaeewng8DgFXL730Ep5++umw5IjeJcZm6PPMDHa7u7sh8Aw430iChEwZMBgMMB6Pk5s1XLbFWlvANR5p6FpCXbRvNWbgTNBw+0C1NKxwVYHP8gAUEgOUwXsxbR3bugitdeRd7y1TKRPyHrZ1jXtKhP5tI6isC1eVIf3uWXYkA10nXGWcq7j8YyRsLfWqfY1ZfnqccQckldgWgyyvyvEUQbP9fK+41pbR/dzghBmv6A0iWXK/4PF4vLEbkqLX64VxSlnRAMI7a5dY7ezsFLY57HQ6GwFr9xKPKvkCtQVcA2cChC8ehTyP8Xdgc+mHut6885SAObfM/X95XmyOsorFy2N6vbanjORoCXvWlm1/FQKs6l6uQlJVfvfKswSXGkfPrUowlzfTj5b1KdZ260pO9cdepwSXUsTsvbHPqS714fPBz7ZvVVzenlcldg6VWFqbXJsLnO+VrRsi2GeX63UZpc6djWzQlV1SZcddl/zpul++O5xSonXMvNn3Eo8y8RI1AddAs9ks7IGqrj0A7jpQkq+X3AHw10PqWt9trBvCm8/zyNsqBVYgsyz2w/7mCfyYouC1rSrRKqpat1UIogpihFbF9eu1J3Zu1XtWBR7hMYmLHX/WQdcscK5U8HlmmfZZsZ/ted5zFGuftZJ1V7DFYlFIB+r1Fzgjzel0itFohHa7jW63G6xkq0Do8w6cR13reerR4PhxZyj+RqXlonsGp97bGueoCfgRB5c+MAXkdDotCLUsyzCZTAqCny5pD3ypuZaULzDz6a5WK3ceM/bCqkD0XNxW+LPt2r6yslMCQgWZRzZVSKcKIceEutdWJZiyMjxyiLXDji+jc2MZzqwSk2oPgKQbO3a9ncbQMjllwrayDg0gA4oZ2+z0R56fR8HzWusB8RQ4bbe9N9oXPoeM/NfYh9jzr2Xxt4ODA/R6Pezs7GAwGGA2m+Hg4AA3btxAr9cLgVa8Vq1/dSdzaROTgOgYMlEH6+73++Hdt2Nfhpp0q6GeA37EoanwPE08JdQt1N3MpTwUBrSYY9dXeWFT1ym5xNyqVS3HmDVVRtRVrVLbRq+s2LHUtSnlgO0jyaQCl6ySQ5Ly6rZ1ee5gWzafByKW8jHlFVCitclbvGeAf9ais65fawV7977KfVYCXywWOD4+xsHBAebz+ca0hmc1W8uZmyoA5x4rzX5FaIIbvQfaf3qhdPlflmUhUE3d0PVOSfcWNQE/4tB8zxQO9mWNzbXF4G28rqkoSfgx4XM3oHBPlVtWh+1vGVKEWdbWi1oKMULQe1RWvucOjt2X2LKnsvZbItHyUh6NGFifnff32sJnQZVAa1nyPHutJcmy9niIXRfb/EPvmZI/SVHnfTmPzMAqDcZSqLW/Wq3C3DejrZkEhNno6MFar9cbSXPuNbZRYh8W1OrNIwzdbpDaNLAZLauWEwB3XkgtLE+w8QWn6yu1CXgsEYa1dr0lNdaasf8vYn2yrpgLskq5ljBtG+3xVFtYXkzJiHkAYu58uxRLx4tjXGXdsdemWPti964qPEWQSqNNHOLdm5TLW610rl3X/a2r3Bf+eXOvXps8T5Nt52q1KiwXAs6SdGhkNC1ZupJ1SaGNvWDg1nq9DnJA54KB85zR7H+Ny0VtAT/CUOEwn883XFYAwoun+ZgtOXsCxwp7FQS9Xg/9fn/D9bgN+egfNfqyYJZU2Z72reWnkHLNXiZSFpN3bgyeizJVT1m5nrs3dp1niaZglZvYGOh3XUJFxc8qmF4b7XI6T1GoYqHHlDXvvNgyMO+esC9AcStPWsHMnGU3QVkulyH2QseAVjA9XxwvknGWZSFfddVlaDW2Q20BP6Lg2sQ8z8Oi+yzLwnpFnS9jAIkKMRvowvMYzGU15izLMJ/PwzZpg8EA3W43HFO3N61tL7sWoQI5Zkmkzi8jmBg5efXEwHqqnJs6z+u/Htex0vM8y98bE02iovs6AyhYf7E2biuYvXtUFuwUq9PzJPB4TCmy46H32k5f8Fnexj3O51iXBbFe621g31WJjfV/NpuFjVKAc2v18PAwLG9ilHez2SxYwUrYLN/mb9e6OcfcbDYxGo2QZVkI9Kp6j7bFvSjzQUdNwI8gaKkyEQCAsDE3BfBqtQpzQUCRkLUcXgsgGbBBDZrZh3SNsV3uYIWqCjZP0PLcKlZHCuoetCQW27GoDGWkklIGrDuT9Vry4BjqdbadlkD0M0lBU4XG+rmNmzzWpzJ446XPgt5zL0hq27GuYt1e9Dnz6vSmCvT+2OddFSXuF0xll5jP58nIeO85Ac6XZvH+0x2tW4MCZ3POk8mktoIvGbUL+hGEzv1yvod79Co581wA0TkgvtRWeFtyYCIOTxjFrBfPurGu05Qb1v7uuTEtwdl2ad8uInzKLO2qbljbL/6vaqGnSMP2k8K92WwGclZFrIo1GEPqvto2eZ8Jdd2y3Ta627v3Xt1lbm1VemKxCbHxtc+Rh1gUuLaXdTNTFvcT5v1ZLBZYr9cFUtbPloC1jvV6HRRuXZbE31Qe1Lhc1BbwIwZan/qiWWvIyw5kBY8Kv9QcKevjDjB0bXFeLiXUUigjlNQ5qeMxl6bnOixDGfmyzotayPYc7XdKsWEbVNCqUkZwLbe9R561nSJQ/R4b321hN43YFnasvDam6raWd8w1z3cp1f9txmK5XGI2m2F3dxftdruw3n6xWIQpJEK9WLZthM4te7/rdMTdJuZ4FN3MKdQW8COGLDvfgozClfO2wHlgFgOmtsmGY0mAZfd6Pezu7rq5anWDB0WZZevVrf9j7YuBJGPr1M93E4jiWdoXtSSr7EzkwfbLkjGfC13Pba+z3z0Xt6e8ZFlWsFq1nNTUQqxvvF+akS0ViGfbZS1CvbdVXNExq1r/YhuTqLtflWC9JlX3fD7HcrlEu90uKE06V88yrLIUU/h0QxXgTPniDkv8ftE1wTX5xlFbwI8QdnZ2gquZbitN45fnZwEns9ksuCIpNDyrRzdt5/88Pw9A6XQ6uH79egj2mkwmePnllwH4c3oWVc6xbeI1sexJeg5/8+Y1PTekZkqqsizHq89rcxk8gtI22757VplHmvZcKkjj8RhA0bth6/PGVMdSiYWkYtOWemPs9TulhMXiEth+2177TFmXte1rzJK3x5S8PdLTd4bnawIRbYsNfAOKW2ZOp1McHR3h2rVrGA6HIcqZymyv1wv30CoAHBdN1QmcxXzcuXMHb3vb2wo7Nu3s7GA8HuPk5AS7u7shk1fKa2NRE28ctQX8CIFzORpoRXjEBWAj6TvPtYJI50jpWtagrul0ijt37hQEkmflepYisN1LXMU9bb/H6mV5KfetnlPWHq+vPO7Vn7IeUi5mr35roSk4f8i8wap8VYW1IJV8U/ck9RxURep5iq1Nj9Xt7RjFz6l+23q8ZUb2N4W3vM+rBzh/L2kFa3mxgDxC26lpOPM8x61bt4Iyxq0N1QrmnsI1Lgc1AT9C4LwvoymtpUKtnGSq7mGPcFWTVrc23Vm0qJhMnnUCcSvKQt1mVRAjIWullAn4GMnqb1VSVHrtqtJvPV7FhWdd22Vt8b5bgvYsx6qIKR1aVhWX77bwCBWIu+15biqVJY/pf8LrgxKvPd8urbOosoYYQFjXGwuQUgUq9q6RdHW5FLc+BIDhcIjBYIDhcBjGj0udbJ9rXAw1AT9C0MArtWw5H0XXMbA5X+QJBQoaEjZfZl5HUmbkZkqIxay5bSzfMiJLnUPYiFpGAsfOjWFbt5sdZ4/4YkqDp1AoiabaGBPQ+nsVlLmTt7GkWd4251R5fsqyUFniLHsGvXEv8+yUlZtKUqLPhrre1WtBBdizUnk/mf0K8Of5b926BeBsKmIymRQ8IrS4Lxr8VqOIehQfEWiQjXUr616hsQ3LPaFFLVqTuGsQDImZEc8WVSxR1lWGlMAqK5vn6TIWkq8ux/HqrBI0c1HELFBvTs+zXD0rzvNAqEs0RcjbwLOivX7crRVlrfdUe+x5Ok7af9vOsnK0LSlPh21zlT7Fztc26/1fLpeFtf1euUrC7K++n7SCaQF3u92QZQs4U+R1HX/V97jGJuogrEcAWXaW4SrLsrCZNy1ULltgNqpGo1HIoBNbfsTPdH9pkgCgmEGJZO4JLGs9WKgwi1l/sfalBILnoqQL3gouDbyy7kMbmFXVZWvPU2s1Nk7qNuT5dr6vahpElqXzmyqg2Y6YByTWXu+YbZPnuvfGIQVLTmUKh/ZH++WV4/XHW5oXUy74HMXKjSk4ntciNhbqrVIrdrVaFdZ083227eH7yuu5nInfX3zxRXzZl30ZptMpAKDb7YZgLL7zut1ojYuhtoAfATBNHXC2hIHka5cVeJaBhf2NAoNLQZQsdFmIWosXtVa1/thvXn8sbFIEz9JQYrVCPjY+qWQL2/YnZv3ouHvRtmXlpsq2CleZJWfPY9kpQrZtjOVCTuFuvB1l5XhtT80fx77HFMuUpbjtOMTun753+j7GYEnUuqn1OD1DGswZa0+NctQW8EMOfWF0azK6VRuNRkjGrnO5Mc3dls3f7NwVCVivs5bHNq5OzyrcJgjKGxO6x63lastjUJlHSNZispZlCqmx9c5l+VqXQsvS++CVn7I0vajfy3Ivxogp5uGIXXtRVKnHs9a3RWp8vTljT6GKlee50QGEPOrqnbHnK7Q8jaA+OTkJVnW328Xx8XHhOhJxq9UK01k1+V4MNQE/5FDrV5cuZFkWgjdiydpja2ntC27PJUjAdnkFy6viboydU+VaT4jZTF/e3sV5ngdlxbMs9b9th3VxVm2bXm+/byvcrHs1VYdH7EQs//U2ilNZ/Qq11i6qmJVB50y1Xu9z2fTItlClUctU71CqrpjypVMj7J9dklTlXdFytJ29Xg/A2TyxknGdnvLuUbugH2Jo4g2u9+v1emE9H9f6aWJ3JU1vHSOtZs3Co6nsVJioW1oFhArasuxSSmj6XaFWRApKHLHAJe23jYi119lyeb2OU5U+eW30+qPt0DJojXjE4hFszCUac1mql8POD8fGVhNOqELA52K9XkfvV+y5iLnZq5KjKk822Ezb6o2JvSamdNl+2P/e9Ic3j59aFqXlNBqNsFzQ1u+tUtD2KtRbxfiNz3/+82g2myFOZH9/v5DNjtsU1rg46tF7iKHJ1VUA8lgssATYnBcCzl5cBnbo/I8XrBUT4lqX99mDFWQxbEvC/E4Xs5cIIfanEdMWqrSkSPgisK5wCkxgM1AoVmfM6vXIzBKVRwaxetj3bZYgKcFdxIOQQuoZ5O9WMUtdnyrfI3YejxHhNi5/fa40zsJem4rqts+vff6ZDQs4X8I4HA7DsiSg/JmrkUZNwA8xNGvNcrlEp9MpJM7QpBm0VoEi+apA6nQ6wW3NF9fOj/IafUn1eCpwyKLMJafnpcjeYrVaYTabYTabhV1kyspMtdcToilhmnL7ltXnWWNeez0S8cpSlGVn0janSFyPb7v+l2V4lnis3dvgoorPRduQ8hRULVc9NASnjvS91fpsnanngMe8uf+DgwMA53JgNBoVzuESxG3evxrnqAn4IUWWZW7ydLWAgXOhq+sCPeFH1zXd1yqI7fIcWt72d9Yfi0K22Ma96PUz9hc7X9cApwjYWoReu1PfU21N/R4rT8efHooq5O4dy/Pcte7L2ua5W209nrKQ6ve9QtX6Yla/llFV+VKFJFZWleeG7xjnebn2vizdJuBvzOBBlaajoyOMRiPs7u6GY5wTzvO8Tspxl6hH7iEGI301OYa6nrnGDzjP3+y9lNxKUDNE6dpDfWE5H0nyp4CwO9VYIk65MokU6XnXehah1q1tsKQTE2J2HtH7jXVVsZjLLJMq/bUudEvCVRUZfUZ0HWms/WXWaao/23o19NhFSXub61Ju8CoKk1eeLTv2e1l5vDd5noco/pQrm89qlf7bfk8mk41zBoMBgPP1w3YfcK/NNXzUUdAPKSg8KZjVHb2zs4PlconFYoE8zwuBUhbNZhOj0Sic02g00Ol0MJ/PcXJyEoib5XLPXwoHmwUrFhHtoYp16f1OoRO7ToWEtXI86yRmDbM/KYGbckXbery2po4RNiOSKjbazpR7EzhzzQ+Hw8LvnU6nkF7UtteOn9Zvs59VccWqcmTb7I1R2bh51rmF96ykLF4dM69P27j9U4qagoSrHqzpdIrVahW8XVmWhSQ6AAqBldZyTlm/WZYFj1i328XNmzfxzDPPhFSXvV4Pg8EA0+k0JPNhEOZFPVaPKmoCfgih7me7rRldSSRfwA+4As5eeqagI3Eyo5aXXpIvOLDpeo4JIhVoZYSs/agKryxGhAPnWa62JcxY2zwhnGpXzB2bEpJViCQ2r52yyDWHsGZF0mut0sL//E3bb+uoMp4k79jcsUdYqX5VqbeKF8Ker5neLGL3f1sPh+fFoYeJCq62X8/V91Dvky0z5bHI87Pc7tzakMsYW61WIGB+T41HjThqF/RDCL6kCi47IpbLZdCqCSs0er0eut1ueLG63W4gLGra+lJXcXnGyK7sOq99ZcdTsJZhzC3ouQ7tmG3rjvTaYstMrd8ss9Kr5HMuc4PSqqZlFeujVTisQhOr2yJWh05RxO4Tf7ffvaC/Kigbc2thVik/9RxUVbRI/OwTpx7UawBgQwm2Cl6V+8m/k5MTTCaTQkQ0cCYbeD1jQ8r6WWMTNQE/hGAQFNcAMs8rs1/NZjMAKMzJWrTb7TDXw+90C87n843IS4UKSU+IeBp7zMVrUcXleJmgEKtC1LE+2/N4zjbjRlglx1o1MWuQ19iyPIsoz/PCrjp2Ta8tTwW/9WJsoxxoYKD+XpYhyhsjbYv3vHn3MqU4xJ67WDBhqn+Kbb0cNvbC3n8vOY4l7pTCaD1XwFn62ul0WsgXDZzLBLsssUZ11AT8kIHWrwodCtFG4ywxOwMrms1mYW6I5zebzQL56ks/n88DgXtkERPy9jd7zLMwUu4xRZnlYf80wOiihB2zHqsqEmVlb2OlsN7YOG/TR7V8mJIwRsAauGbnnT0yS7mVlSBiHhJtI+u35VTprx0/L+FMrFy9xmvHZSuAngLLxDc6laJ943/+6X26SPuWyyUmk0lIyMENXfgdKG51WlvB1VGrLQ8RGo0Gut1uYZkAXxJmrrp161Yh/SIFLK3jPM+D+3o2m4U80tPpFLPZrPBi2/lCCm3Vhqkd61aHwKalpt9T2nkVV69n8ehvnqC3SoTui5yCZ3GWXVPmHeBfu90uBNXwWjtuvI+xOthn62KOlQUUMyMxj3is3Tqe9j4oaXljxQ3l+Rt38/GUNRttb6Hla1s8UtJrPAs7dY9IwNrHsufXWqr2uNapn1VJpMKc52epUu2KBA2Ws0o1/3gdEE+2w3p5XwDgj/7oj/DYY49hZ2cHk8kkTE/xmel0OiGznpazjQJa5kF4GFET8EMEO/erKSbtecB5Xly97vT0NAh9Xs+kFapxey8LXZdWCKr2HRPEKcTcrJ5L1FtO5JURA89hogOvLdr/iwqKmHKgZMMlHnZTixRsm732euXY/lgi9rCt+9Q7T5O6eJnI7taDkCJfwE8Zaq/RY2ybPVZlLayn6HnnsA4SPZVYjb/Qtth30vNI8Df1ZnlgeVZurNfrEIwFIBCt1qsrL+4WF733Vw01AT9E0OxT6/U6uJHb7XbQXO3LQU1XtWK+sNS4Z7NZIcIxJWAZGGLdctu+mLEXMEZ8nsXgXWevjb3k3jra2JKjy3K5edYWA+UsOaWsbioitqxtCJP12VSGZUSU+s2zPPV5JdnrtbSwVHFLeUiIMne4WompZ42/26V6HjF73z1PTwoxlzL7o++hdStrn5SwYxHx3jG+954XgsRvN3qw7Yn1a1ul+1FAPQf8kIAvjloUBEl2Pp8XtFS6/4BNAag7KKkb1BKZdaHZRPtqjZQJnzKLg59TJKiWjzevp21UN2wsWYi14C+LbFOwpFGmjPAae8z7bmHnwu0m6xyjy5zfUzdnigAJS6w8P0XuKYu/7H56zxv3v7Ukw+fDtiFWt2ddp6DvD9fm2ufTtpUeLXtvNRmHJyOoEMXusY2EZnIeLSP2/D0qhLotagv4AcW2GmOr1SrM/ZJ0dekRgALJ5nke1vapUAQQrF7OK9kdVVSINRqNsH0f0+NpIBjPV626jFAUav14xGwFrlorWicFjGbvOT09DUEtSs5abowobApO1p+y0rbpM6OQNcmCd11sTK1r0v6ma3z53859sx2eFWWtTI/4YsSYZWe5xdW69NZkx94Bvb+xMdR2s7+9Xq8QWAYUN7K3wU1qUdKTBJwpprppved1iBHyNu81ydRuuKCKkb2PSqS2Pi4/ZL/4m816lud5qBdAmKJar9dBOe/1eoXpLC5Huuh64EeRpGsCfoCxjfaouZctAaiVq9DsNapZ8wWy2rYHvoC6EJ9WlJKWpxlXtXpS13guOxU6JE/9s9dwvtdzM9JbUBb0sy2quFRJwPRuWOu0rHy2sYoyYPunc4Ax0lAy0HNTyhI/a5YmBgZlWTH7lWfh6njZ8feeVc89G+s/lR2d6yT4bPB+DAYDrFarkBFOFRDrubBt9NoXe645TtarpOdZK5Tn21wA3rlWQeG1rId1UQEBztNT9nq9ggzxnrVHkVS3QU3ADwn4svGl2t3dDRYxj5FkGNhDq0pfEhtEBaTdmvxMAqYQ5bpj79xt4F2TUgrs2kglXr3eEzLeOlSSrxWiqTZU7WcZCef5WTQ2o1HtOkyvLPudf9a1rm1lv210rEbd2v7pdTY+wI6PRxjNZhPr9brgOeGzc9FxsxZ/7N7oOLJ+TdXa6XSCZ8iWzXZyUxLGVqh3wrY1Rk56joeYFaufvWArPt9K2J7HRMlYvUJe3AF3QtN7PZvNwvhZxbYm3mqoCfgBRtWHmEKN7kLmbwbOifnw8BAAAvlakilzj3nuNOA8raO6EJWAY8FXKavgIlDhA5yPiRUMHhFVsapjFojFNl6LMgWH95Nj2Ww23eVA1irUNqtVY92kSqKazYjE2+l0Qn0xq8tLBhFT4OyyGW4kb8eg6vPgCfzUdUqGJBOOk2b9ovdGPQ66wxfLoit7NBphMpkU7o23Ucc2z7gdY8+1zzLtVIBOo9jy7G+UB0rkfI/0XWm1WiGOBDjfkCEWkFWjGmoCfkCxLfnyc6PRwGg0KuxctF6vcXBwENZYqnBQt6u+1NoOu8bUWiqey01fzG36ErOcqkDP17lTtidGvLb/sbJTllWKxKv0w1p0ej3XVqv1Zq2glPs11gZd4tJut9Hr9cIzQXjZ0rRcDexhPR6pqjfC3g+vjVVdtfY369GwAWXqUWi322E/6EajETw4tj1KgOrVUUtyMBhsBPFZWCXRG0/rjdH6Y+Nlr7fPsbqPqTDrO8w1+rZvGlDJGJOXXnoJQHFLQv3/euMicuJBQk3AVxh8kZhsI8vO5qa44QJf4lu3bgVBpNHOXgaglLuZUDccsEnAAIJWTVjhFnOPldXN4zZgRwms2+2GtmmQmbfUSturZcUEsYV1W3vWs3V/az+0XV7wF6/RpCgAQuCYjhPvrV13DRQ3VWB/Wc7u7m7YdINBOsz1O5vNClaT5/LU+rWf7Lt6IixBxNzE3nfPvW3PscqfKmDA2Rac8/k87OKzu7tbcKXqPaLFmOdnGeCorHQ6Hezt7YXx45rYxx57LJS/XC6j0wWWwGPKhRK/NzfuWZ0a0MZ5YFUuGDDZ7XYL7WNQmc45W6WVe4J7bVWZou/BVSbH1wM1AV9xqKUHnLmGrMV6fHwcXma+iKkXo4q15y1LsdGP3rpZW7dXj2eFp8rQa0hStOR4zAriWLkeYmNgLXbvHK+smMJjBZcVYhpdrolTrBJlidH+Zt2iJKPxeBwUFkYLe/PfHuHGYOfgPYvJEqtXhrW6bR8sUs/3er0Oygszx+lcZmzKhHPWjKPg5iS9Xg/Hx8cAgH6/H/q6XC7diOCYgqFt1sA/+9yWQb1QlqRtVjOFjf/gZ91ogasqvH559/BeW6hXneBrAr7i0CUV/Exh0ul0MB6PXYHlzVEBm0tFvDkm4DxqFDiPeuZ1bI8XiFUFsfM9YrbHaLlRADHJiHWpWWuszMUXIzNrhenvdr7VnlfVSlASXK1WwYXKbelsAgtv3OyYadnsH6N6gTMBSxJOCX9vbOxzYJdw2eVbKas49jzGtuIrIwDP4wEAw+EwbK/nPQscY53S6ff72N3dRaPRwN7eHg4ODoKVOBgMwjtgx55tZVlWYeK5MWUx9rzoc2W9FvYeartoIQPFuWsdb/Vm6PUxxahGNdQz51cUfPA1OYBd85tlWVgy4L2AqRSHfPlsIn6+kLqOksEs+oJaYvAW+Fvh7bXDc8vFXOesR+tW8rWRqp7g9wS55+qMnWvbY8cttRwq1mc9zmU7PIcu6aooE5Acj9VqVcis5iF2P+1zo0uMbMBf6k/r8MbRtlnrirVLsV6vCykVqdDEAvdUiTs5OcF0OsXh4WFhekVTtvZ6vULglufdsFMptn2ed8P227sfnI6gEqzn8x3h82TX5+tnu5TQG0ceqwl4e9QW8BWG5nrO8/ONF/QlIAED55sveG5AhQo6mxNWyZYvsGe5UEh1Op0gMHXe0sKzXLaFCmcG27CNDDTZxpKwbeH/1Fpcey4/e0LLWt7WArLXkAAs+Wq+aK8t1tthy9RkKwTvk73/njKi7bW/K5nFCMVTxLz7r+Nl582rKG/2eJZlYW6dysZqtQrt9iKJFZz/zfMcg8EgLF+aTqchSIkbFtg5Zs+bE2t7ykNjyZzvZZZl4ZlXJUDnamPBe16fbUyHErXnIatRDTUBX1E0Go0QbJTnediNhC/AaDTCCy+8EF44RnyqdahBP/oi65pifQFp2VAor1arQOp0t6mAXa1WODo6Qr/fR6fTwXA4DPNoMcIte4FVC9dzd3Z2MBwOA5H0+32sViuMx2PXio4JeVs+NXtPAKqw86zxlGCyLj6OsS2fx3mv2BbORfK+q5KRInt+Z7mnp6cYj8cYDAYYDodBYVutVmHLuVarFVyUNjpXBbj+pmSuaT496FhY4tEIZa1HLW1ae94Y6xpnvVf6jB4cHGA4HKLROMs6RRLmvdcxs6BHYrVaBbdzo9EIc8Ldbhfdbhftdjtkl1PLM6ZolB1jPzw3Nd9PbiO4t7eHbrcb7q31RlglxioGp6enmEwmhR3N7Jw+xyL2rtTwUbugryi4LpGCotvt4uTkBIvFIgTSTCaTgrC1L2zMmgE2o10tSL4qRDzrkm4+DXphDlkVpFVgXWAqMDRCU+v13J7aX1u/JUvrmosJKR03r0yFZ13HhK5nWWofOa70VliC1L7bceTx1WqF5XIZ8h0TXLamx9Sa9dps3cPAZn5pDzGBbZfNeX3yLDP+KYHqvbHeGi5H0vfDs9b1/lMBIObz+UYgk3p8rDfBs4Tt9E4MntfAtlfnyu2Y6vxzzHLVMnkPOUY6PWHHvEZ11BbwFYS1RAFszP9q4nRLNtaF5wnnLDvfkEHLonCwEZZqeakA4jnUvnd2dgo5gHVZlEd8HlRo5XkeXIi6jIJLQaoKhJTAi1nLtp0e6aaEm5JgmdWj91DLVoFP4e3lc+ZnJQxVzngN50GB4n7Rtv/ec2PdzSzbEo21QhUpl7wdG/W+xFy0bIvnHldYl7tmiIs9QzbRy8nJSWGKh8d4rkYT839MEUwpZvYavj92OohjrFHbfJetm73Mak254+041SRcHTUBX0F41o6Cazq55AA4X9PIyGDg7EWZzWZRFypBQUfYFyxm3ajgzrIsuDSB89R3eZ4Hy0ERE8JWwJPQNbCJ/fJg3bFaR1XS1+8UYp6VmrKarfUSq9+6jW1ZeZ4XFA/NdGafj1j/lMhtUn67lMzrI+CnIlQXpyUNKnFKzlWIV9sFIAQZxebBU94H2yfr6o+RkyqWeozX25zKei9SQVdlxBXzUmk99vw8z4N3g8c0CIvXVfVCxdpUW8AXQ03AVxCc9wPONVmdo+Nv1HyBs/mgXq9XEHoUDJ6bjmVMp9ONl5UCX4WUuvuAc+vAauQMWgEQ8ukOh8NCYgjONdk5RtZDZNnZUhxa1Dznzp07G+daIR+zaq2LMWW9KvHa1IzeNZ4VaOu0QozCXklL+88xW6/Pd6NptVohzaPth87R8XolE3U57+zsBNespzAQrVarEAzIHYW0nXy2+D0W3espHHYe1l7HpVk2MLDMo2LHW5ep2Wv0+YrdYz3HEi3Hm+k9vakBr22EKjj0dHQ6nfA+6hy5poHNsgzj8TjEYTBOpN1uYzqdBs+VJXFVMPmn+aJ1iRNQz/9eFDUBX0HYuSRalcCZ1Xt6ehq1ANViswRnhR9wLoRiAUIkf+uW9iwES3gkDq5rpcBotVqFOTltp85LU6B51nmKXGO/x6AkZgVqjMhjLv6y61hfipy8fmlwDN2ddpMESyyeB4VWsJJ72fyt7sSl0ebe88TzPEUipfSUQYnTy3lcdr/LrFK9Xu+t5/ng77pBCaFro70Ibs/boMoL76/Ov3J1gbbFBuMtl0t0Oh20Wq2w25MqWhpLoGSu/VGUBafVqIaagK8grPtZtwWjq3c8HmM+n4eUcwzaYvCUWm0WdFfRfa1CiJGiqjVTaNpgGE/wqguS17Htuqa13W6H+WGPBLIsw2g0wt7eXrD+sizD4eFhQRnw3LvbCo2Utayk5lm1qfJSbbJKkI6vZykDZ0KX1iCj46sKSttu3uPFYlGYD7Xl2Gjn2F6wtr0pJaRsHGPPlrYvdr9S12r9+l/dq/ZadVt7UeDqweDvVI6sK9hrtyqmrMOOuVU2WC/fe75ji8UiKK18R8qeD+sdsPAUhhrVURPwFQRfKiXRnZ2dQGDT6TRk9QHOAkqYIcpGN8eIgpp17KXSF1ezb3nuOwvV1DXTkrVY6PLSuWz+1micZR9SYWk9A7bOVF/L4JGH/V2FdBUi1vK2OdezqAmmqwTOBX3MHWu9Fvoby1gsFhtJTbQtam1qxK1nZceITn9PeQhibl/vt9R9sIqThSqKtm4dO29MVUkCzt3zWp8qmrF30AZ4ed4XLitU5cxa1lr2bDYLuxrxXpGMeT73ZrZW8MnJSSGoUQPKUt6cGmnUBHzFYANkaCkqdCmSvjR8wYBzS5nHrbCx6071RVYLmueqps8yUi+m/qZaPevRLD6NRiNsMEHBqPmdx+MxdnZ28Pjjj2N3dzekVKQbzgrNlEvXE7ra3pSF5fVtW3hWtfebZ0Hz+2q1ChawLjexfbLrQD3EooHVoqPl61lhulQtNfYeEcXOT5Gm3qcqXogqilmMrD33s3U38xjn5unVYZIYfX+0PrVyOc/LNqSs0dh7zHLG4zGuX79e2GgCKBK3zl9TSWPmL4IKmtf/Koqk1/aLXHfVURPwFUKWnef/5cvCfX/n83lYz8lAJxWKeZ4XlhPpJuL6EnU6HaxWq4LgJXSZA4OwtA4boKGuZps3mm3K8/PIW/vHslSIk/SXy2XYPODk5ASNRgOLxQJPP/00nnrqqZCE4OjoqOAmVFiC86wN+xt/1/5566U9t6JnFXrnx9qoSo4XCMTzdIw9q9UjVArkfr8f7qtav8C54qX9JaGUWacxi1GVMH2uvb7FCJHf1ZqPEbbtvyoHeq79b++xjoP+TlB55PPLeVrdrIFjpwTMP92rWJ9ffTZ1LliDJxeLRQj0sjmbNRtdnueFz7EgqsViESzla9euFRQAtbzvxgp+FMkXqAn4gUNKcHiL9DUaGkDIWGMjkjWVHOcKvbqzLNuYx/NeDp178iwfr9xYWRRAKix0g3gPVBIUy+WykAZQo4c1+KzsZa+qjVN5UOsuZV179bCcu4W18olYIJKNfGfSBr3WxgDws1WObPvVmuI1KUvRfo5ZuPZ3b4ytclQ2trFnNXYdf1Oij7nKVXlJ5dS25FsGfW50npe/Me5Dy9M2Hx4ehqWKbKcqvfxu32vNsOX1VxVuPb4NHjVLuCbgKwRdIkJrmGAktAbCNBoNNzWhjY5NaflKivqS2pdQXzxGf8asopQLkZ9Xq1VY7qRzaLT+OBa6BtazRFWg2v+x9pe1j7CW4DYBT2Uu1TJ47kb9rcz9qiA5cEqCsPOAFOhlO/zE4K2ZtmMes3Jj901/8/ro3VPP4q1KHN6zZcdHl/dRaWakvyotah1bNzS9Qoxo16VL3rhoOxqNRkg9aceb92c+nxdSyKos0XFTcO7arrBQ+VFFmUrhUSJfoCbgKwW+kBT0XHIEnM/JeIFM6t5Tt5MVOGpxqkauL6+dU2Q59uVrNpsbCdz1fE/btyQMnK8LzvO8sNwKOFc66JputVrBhRrb9EHbEKuzioWsLshtyNdzc6fIxcJzs6YUHY+cLKxSpVMJHslre+2Y2TlftkWVM/vs8Dptt+1HrA+xZ6jME+HVkzrPs8Bt7IKSKJ8JRpPfLbz7YL1cPMaVCt1utzBva5cIagatFCg/+L5xnb22xfME1ChHTcAPGGLCFCjudgKckS7ndZWcuNxIk+gvl8tgMXLNIKHk6a291fN0XonodDoh4Tz7sF6vwxIW7Zctwwq3mFXHOWuu+6VV0el0goVsXWZeKkorzD3LybOOvbHQ8SpDjFwvYiF4ZMDvXrkxUrLneBsuWHgKRFkbqazEXKJe+TH3chVFxVuf641NjNxThK/9ic3la/tIhozRUI+SvnOq8ALFdbyqBOj46XiQeDn3nGXnST/0fW82m0FWTCaTUA7jKHT9uLrb9X7ZvYTZ1pqAt0dNwFcAeZ4HVywfeAAhqnKxWODatWsAzkiH7ivOhb722ms4PT3FfD4vvFQKkqedP6awsfOxe3t7GI1GQcCQ2PnCUyC02+1CQIklYu0jz4m9zJz35dKObrcbdgXiH1113hh6n60Fxt9t/Z7b1F5n+2LP9ZCyVK0ArlJOrP2epR+z/Dl/aJUnfrZLi2Ll0QNDWDerJRNeYwPN2HYeS5GztiNGDJ4HxuuXN+7W0gfO3cXcC1jr0OU73p9OY2j71U3N99+2116vSi0V1d3dXdy+fTucPxqNQj3MhjWZTAqxE81mcyP6PcvOY0OY131vb6/g0bB92Va5fBSx1W5IH/nIR/AN3/ANGI1GeOKJJ/BN3/RN+OxnP1s4Zz6f4wMf+ABu3LiB4XCI973vfXj55ZcL57zwwgt473vfi36/jyeeeAI/8AM/EF3AX+MM6vK0Qgnwd6FRxKxaABuBXayD/9WNTaG6v78fEj7M53NMJhPcuXMHh4eHmE6nmM/nYUMEr+4UMXmCxmvfeDzG0dERjo+PQ51l5Bv7TYVfFQuwSturIKYYeO2KEU+qrXTP87P9075q4JtNqhGrx2uTlk/YjQLs/LklJkvWhBdtm/JieJ9j1nuMrGMgAaormt9brVbU/cz+AUWlxLrh1bti5aO9j9ofXcLHuWc+B1SUGYip94KKQswLocsbARSy0KniVKM6tiLgX/7lX8YHPvAB/Nqv/Ro+9alPYbVa4Ru/8RsLm75///d/P/7Df/gP+Nmf/Vn88i//Mr70pS/hm7/5m8Pvp6eneO9734vlcolf/dVfxc/8zM/gYx/7GH74h3/48nr1EELnXwkVonTLKhHPZjNMJpONLdL4n2XZRAEetN7hcBhevPF4jMPDQxwdHWE+nxdyOfNPrQZdHpOqU4Wh97uWb+dgt3GHpdzRXjtSRGTLSpUXK8tag7Ycqxyo4FNlzH7W/15Erl0CZgODUn3nNV5/dZmSp2BYxSxWR6odMQWN45NSLi9KGLQ41crm/tx2lzKb2tMutdL3mM+GXXoEbMZ3xBQPtYZt+bonOO+NPhO6pNB6epjgp9/vh+VU+iyp7Kmt32rYygX9yU9+svD9Yx/7GJ544gl85jOfwZ/+038ah4eH+Omf/ml8/OMfx5/7c38OAPAv/+W/xNvf/nb82q/9Gt71rnfhP/2n/4Tf+73fw3/+z/8ZTz75JL7u674O//Af/kP84A/+IP7BP/gHhSwxhNW8jo6OLtLXBxL6kJcJd0/4ApsJ9AEELdcSr9aV57kbRKLQAK5Go4HhcIj9/X0AZ8sZxuNxcDlbC9e6bSnYidQGBjH3KAVUVRdXVUEQc8+myospDqky7kYwsd+xaO/YGOrvPMalaWrFKbx5SZajimCsTWXejtT9i7mZqyL1LHljxt/VrWzbYa+znpZerxeW/1ii7HQ6mM1mlbx8sfdVf7dLoDylxOYG1z4xJWWeF+f9td1WqQMQyJeuaqC4vKrKPsaXiTKj4SpgKwvY4vDwEABw/fp1AMBnPvMZrFYrvPvd7w7nfOVXfiXe/OY34/nnnwcAPP/88/jqr/5qPPnkk+Gc97znPTg6OsLv/u7vuvV85CMfwd7eXvh705vedDfNfqBQ5eGxVo5q3fzr9Xro9XquGy/1YtjNDJj+UYUy89Y+9thjuHHjBprNJl588UXcunWrsAm598dlFnbemn2gxWDbGEvuABTd6RwbVRSU0D0rMnXMuy+psmL3y7rxyqznKvAUGrU+lUgseXLMqZip4G61WiGKPOU6tQqfZ2WyTN5bztfzHqunxo6pHX97D8q8Blq3dYlmWVZwl3ptttenlDC1NJm0hFYwgHCMy4iqlOUluCD0PquFa9uulq0u41OrnAaNXdpk58AVOzs7ODw8xPXr13Hjxo0QU9LtdgtKXaqvl43UO3VVcGECXq/X+L7v+z78yT/5J/HH//gfBwDcvHkT7XY7WEjEk08+iZs3b4ZzlHz5O3/z8OEPfxiHh4fh78UXX7xosx9IXPRBslHRtqyqEbrA5vIKa9F0u10MBgNkWRYCrbZps7qf7VaFFP66yUTMIo/1K9ZPT8DHLNeY1c3fU0iRw7ZQclUC8chc3coxArNtUCHPOnTdqd0T2FMoeL0lfZ5TtvzGKj9VxsSDpxyllKlUvXzm9PeYBeydo7/F2uKV4T27ek9tGep9sPdZ78N6vQ6kqOC7ps8MLWu1qq0yq5n0GBBp1+in4idqbOLCUdAf+MAH8L/+1//Cf/tv/+0y2+NC9799FFEmxL1gjTJXFuC70jR9Hl9ujajO8xxHR0dJ92tMWHqEal2Y9lxPSHruS3vMXptScrZRgO5W444pAWx/LMjI3k8da48cPQvc9sOSqV1Xaq+1wppubNtW68bVOlm21ql9SK1JLSMyD0pGakFWgUfiMfJl+QzAsikgvTK9e2M9A9pmJVjPetd26DHd11m9XeoVsHVbdzld11ZeUFmL9fdeIKVIXzVcSF354Ac/iE984hP4L//lv+CNb3xjOM4cvAcHB4XzX375ZTz11FPhHBsVze88p8YmrAZuXVfUSHVzbqsRl70csYxSXNQPnGnBXNwfI2H+pqTBv1jS/jzPCy5Kr9+xsdjmpY8pJmUWrI5lLELX9jXVB8+yseTr9UtdjWVlqgVly1Pi49grYhaw3kPP+tN4BBvhq22n8NeN46tYUGWWpQfvnsTKjn2OkT/7pvej2+0GV75tQ6pPqQhv6/XwyuRnTt/wv7ZDAxet90DhBeotFgvMZjPMZrPCtIIN+ruXxLit5+RBx1YEnOc5PvjBD+Lnfu7n8Eu/9Et429veVvj9He94B1qtFj796U+HY5/97Gfxwgsv4LnnngMAPPfcc/id3/kdvPLKK+GcT33qU9jd3cWzzz57N315aKECRAlBs0Qp8RLeOkpPYOoSI62T33V/WS4t0vNYVqzttk0aHa1rPjVwpCpSgtgbN4+MyuAJz7LvqetiY5bqh02QogJWryeh6Ty+5wnQqHEgnavY64sKXH5Xi8qSbyzQzj6X27oxVYnw3hGrQFl4wUZatlVEvM8sm1v5MTEN50e9urVtumzJTs/o+Rap55uxF8vlEoPBAHt7e6FcJWHto/V66b0FztzOXPHCSGgqzFbpez3wMFjAW7mgP/CBD+DjH/84/v2///cYjUZhznZvbw+9Xg97e3v4ru/6LnzoQx/C9evXsbu7i+/93u/Fc889h3e9610AgG/8xm/Es88+i+/4ju/Aj/7oj+LmzZv4oR/6IXzgAx94pN3MZSBBUZvN8xzT6TSQl92Pl+corPVn879SGHF+N8sytNvtwv6hsbW2Wq4KVauh8xiFADeQ1+vt8gstk581AUDqRUwpCLZtsfGqQpTbWGMqJNkvva/eGtFYH1XBosBU0tBdqPjdjm/ZRgH6n+drgB7rbLVa4Tgj4wH/mbTZlDSIjtdUtVyrtDl1noW9l17UuaeQMCh1NBphNBqFsWEQoi2X13OtLnD+THirCqxioe+DdcvSZXz79m089dRTIYB1PB7j5s2bQSmiF4Jt1XXgrVYrrA2m/HnllVfw9re/HcD5ahRGeQPYmPu/bJJ8GEhXsRUB/+RP/iQA4M/8mT9TOP4v/+W/xF/7a38NAPBjP/ZjaDQaeN/73ofFYoH3vOc9+Imf+Ilw7s7ODj7xiU/ge77ne/Dcc89hMBjg/e9/P37kR37k7nrykCMWeGSFg2c9xIKZeK51Z9plIPZazvnErEkrHJTIPFJbrVaFXYVigtuSlZ2rsoSfgmeNXebLHRsTjxzsPVTyibUvZrVRibLeEDsvaJ8Tb4mMtsvWb+eLmRI0Zplr/6xFaL0vrNtTxPSaFGyd3nVlBFyVwPW5tZuU2PPtmMba5j2PnkISU/x4v1erFQ4PDzEajUIgZa/XC4RJS9jbeczOF2dZhtlsFu7LYrFAo9EIexuzzTonXCONrQi4ioDqdrv46Ec/io9+9KPRc97ylrfg53/+57ep+pFHjJj43ROsKUGi6wPzPA8Wpecu0wALvrwxUvfaF2ur9s1aCN55JF8ld6bNuwwCjdXpEci2ruxY+6z15wlmXhvzKNiyGBwVi4L3lDQdf8+qtmTI35mTWxUoqxRpe5W07LIXe//tpvHbwhsvb9VA6h7Gxt17ToBiBjEvQM2DXX/staGqN8C69PM8L2zI0Ol00O/3NzLU2YC62HNjp6AAbORuKHuPa5yjzgV9RUAB7Vm9ipTmrL9R4/XKUKGn2woyEcdsNsPx8bFbt63XQ8wdrFau1xcN8OHvtLbKrJayc2Jjab97JKznpsbftsUmwFD3YcwD4bkaSVb8PcvOkj9wKsEKbxKRzu0dHx9jNBoV1grbvtM1qkJelbg8z0Nu7pQQtvfauzdavkc81pPieQf0mdfPZd4dW75HtrZ+gnOv/ByDWviq4HrTDva/tsPCki/vCXC+3G8wGITUrZQr1mtic1qz7uVyieVyGeJCeP/p/VitVvVSpC1QE/AVQcxCojC1c2f8zZZBcL7OS3hhhSCAsOg+z3P0+32Mx+Nw7mVquCosbX80oUCsj2VlW3juXg8xYvVIuOw6YHPrR56birD2oB4LL4sTy/TaSA/C6ekpZrNZcO2Px+OwcYf20xI3wfl8YHMzD09ZtGPuKW7MZcwy7JhYS9YrI3W/Yi58e21MWfTqs8pAajtOHQer7Gi7U/euDPpsLJdLTKdTDAaDECDGdb2qbCuo7NuljcvlMrizWQY9UcB2QZSPOmoCvkKw5ESB2Wq1AiFySRI/8zoF3bh8+TX4jdpyq9UK80bcdzjPcywWC8zn8+gcXUoo2mMpa8RagVwKZV2u6oau2gb7m1p2sbbFyvP6oAKcVq6uQ9XIb0XZvGiq/bQ+8vx8mRAJE0BhaRCvodXCaw4PD0OZmtpUM53pZz5rGvlqFTqPeLXtluz0XtCasolhbLpHtlPL9YKYUpmevDYqUufrObqMTpPV8BmwzwHbavujXoaY4mPJOeYN4L2aTqc4OjrCY489FjxZXD2ha4RVufW8F7dv3w7ZCG/fvo0sy9Dv93F4eLiR+OMylfOHETUBXyHEtHK+3JqGzl6jsKknFYx+HI1G2NvbK5Qxn88DAVtrAojnztVzPCFYZlnyOi9hvFdnylVsERO4HtGyTrbBs3piZdk1uSn3ZMrtaYnL3gObolCVJBXqbIMSgrqtafmoNRerM0ayrEPJ03uGVdDHBHYVhUSfLZtYRAksRQpVnsWUcqZu2VjAlZIy/5e9L7HnTO9rrA/6G3Pq04Ws7nKPgG05eZ6HAC7gTCb0er2gxOsSuNQzXuMMNQFfMejL7D3gnvVhhZu1bngOy+v3+9jf3w/1HBwcBE2ZCT8Ia4V5AtZz91mLJgVaCzYgiNursRyPCMqEdsrVaM/TrEQUMDFrz7bfzpWWXRdTAKogZcXZQL48zwv5nymUeZ/ViuZ91GkAS9Re/SmPRExR0npt37woW/bNEtY245MiaM96t/VzKZYl4JOTk6h3hXENbH/snbXKlG2ztfxtH/k71yqzrZpeMkaatqz5fB48bsCZvNDrX+9NGa4yagK+IvBeptPT0/CyM1UkE5zEhIh9MTT/Ml1+g8EglDGdTnFwcLDhJrPWFACXlDzt3JJzSlu25+r/suQRVdzPbFPsHCVyK4jsHLodC+8z61PB6ikKMSvea6uSKi0Qm01M52ltOScnJ+h2uxsucL2XGmEds2JjsO592z9bhrpnPcVKFaEYYsSuzxDblfJeVOkfwSAnQt+H2PNj99P15nyVfD149yHWfy2H0euq7HjL+vicc7wWiwUODg6wv78fyBc4Xw+skfg10qhny68QVFjz5RgMBmg0Grhx40bYqcgTdh5peUEiOzs76Ha7aDQaWC6XODw83NjDNGVZWsK1woEuclpNtA5Va7b/tVz9s1HEVdpjy61ynX5OuUm98q3LXYlNl4FsAyUqPgdaJgnKtoNjbJUpG9im6SH5X++R7m61LRHacbXj5o21/nmKn8JTAFmWpk1MPRdWQYrBPp9KwN7UiNZtlaSyulJtSI2Jd4z3v91uh/Z67eG5NriP8QI8fzabFXZG4ntZW8HlqC3gKwKP1NrtNh577DEA58FTb33rW/F7v/d7hbV6fDlPTk7QbrcL2XaY6Ybn9Xq9sN7v1q1bhfkeFRAaeetZZ94x+5lWGQW+BqpY8ut2u+GF16xflryrkIEV8t7nWJ+8/ugcnl6vY0PFQ5dNZVlWCI6ybffuuXUh2+tUWFLJoRWjfxqklednwXXD4RB5nod13oyQprsSOJ8LtvOFXps9a84TyjFrjdAUpTyHblv2MWZl6+eTk5MwPqpApJ4H1ulFYtt6ut1u8EQdHx9vlKnxFtqO2L20nz3Pko5FypNDrNdrHB8fY29vD/1+H/P5vDDVQIs2y7Lw7nOqR7ex5K52tJiHwyE6nQ6Oj4/D2nBdBvd6oYoceJBQE/AVgrrmgOICeCWA2NywDWTyHlIuNZrNZlgsFqUPstWQvfNTQppClJa7as8qYDRSW+egqwbXWHhuOyuoUmThlef1U8nOKgA6brxez/EUGguWb603jptG4lqlxhOOeh3L12cqz/OClyVGGLYPqnTouTxm++DdH88VzTnrMgLib1XcolZZqGpZWre/Kqlsp/ZR86Hbe2SnA2J9sxHH2tfY88tALABhzlpXQ+h46/Olz8B0OsV0OsVwOAzl6BjcLws45Z17EFET8BWCEihw9rBTUCoZWwJWK0gFgBIfX7p2u43lcon5fB6dM7SC1MvkU5UMWRbns1kug4IovFi+3RLNut5iL6A95gl122avrLKXm9fovYoRnRJhWfkpy8v2X+91q9XaCALy6mo2m0GIakwA4T1T+t/Op8b6EFPWqtwf717okh+vPgtPCbC/e/VWeTZ0flwVXG8+3iocXvKSWD3sgy4n1GmFWDlsz2KxCO82o7Z1Oiq205btw3K5DMlb7HlVpofuFa6K9QvUBHxloOH9/K4WzrVr1wAAt27dCi+bPojr9XpjezSLTqeDnZ2dQrq5lPWq8NYxekhZchQsJGL2kQLi5OQkbAah7kgL60aMwSPfMg26ilWsxMDfPY/DNoLCts+SmY4/Cdcuc7HPhbpO1cPQaDTCfB6tJV7Hsfcse4uYlewpHnpNjPyU5FX5sGuVU/DIKXZe1fujSpdG5c9mszCuVhnzlnjZpWp6r633gmXq1EZZn1jmcrnEarUq7MCk3i6WRWWc5GzbxYjn2LpsbfNVIsXXEzUBXwFQyKjG2+l0gvvntddew1ve8hYAwBe+8IVwnRVInP/VhfcnJyeFSOrVaoXpdLphUVSxULx2x7R3hV3mou47zj1Ra+fxTqcTSKhs2YPnkrPttq5c79oqxK45kSlode6MqKKweO3Wzzo3qnXqPLM358l5c7V6T05OQnrRLDuLBaB3hOkp1cpS8k15EyyheONWlTR5fZadB4Jptixrhcfc2DHXsr3OelqUEO35HPfZbFbY4GA6nQaFhlMpHE96mbznSt8B3jP7LpNMY14cj/iyLAvbCj7xxBMAzhSw6XS6YUF3u92QZ52ywipQOzs7hXiTdruN6XQastYx53QNHzUBXxGQaGiB2K0EmXCdL4O3VtK6/1RAt1qtIMxsSroqbtEyYtKX1hPOei21ayA+V60uM9XOLVnFBH7KJRuz+j0CSbmRdYmSd50VnDoXqIJOz7F9LIMSpd7vLMswHA7Det/FYrGxnpeZ0G7fvu2uH47BjlPV9qYUJP6ufVGL3Dsv1T6rUGmdZV6OWH/sJgyq/Mzn80L+ZJKXV0dsvS/bzCmZshiNlMKoskHjQtR1bP97SqhOg7VarcJUWB0JXY6agK8IVHgCCHN7wNlCeBJwTIh4czi61lITCKgg9l7gbVx3/Gxf5ljgEH9Tdx7L1WU0JCyW6QnhWFs9K9xru3e9kosnYGLkfhHEyCE2xrF6Y4TUaJxtHj+ZTArWLMuhlWUtXa0z9n3bcU99LyNKfRZiikLMMiwj26rg86qBV1SU6fJlnIP1Pqj7vEw51FSPd7PO1ib9oKfDy7XueWAoQzSZB9PFsh8cg3o9cBw1AV8RqLDn3KjdFmw8Hm+4/BSqWVvtWy1qj4AvAi1Dg6zselQrJOlO1ChRba9q5ABKXdAWZQpE1TK8c6sGnpQRlke0ep5aI/Z+63dLXFRuTk9P0e12w2/W69FsNtFut3F0dLThZvbIwiO8WDtifUl5T8qgyqSnHJRZxV4fPI+NHrfnci6Wz2+320Wr1SpMnaiyQHhz6dZjpISW5/nG/doGKQteYwFSy6L4DGnEvN2W8H4GYl0V1KNzH1FV2HtLc3gtU0T2+/2NtYcebLJ8zi3z5dEkC7Fyyo557aTGrKCQp9ZNcmY7SdB2izyruadcXSmh7llaXvvtuZbUPOtqmwQb3j1TQrFLUrx2WMTcwBoDQCgRcyz5PGiqQlu2Z7FZQtaxixFXrC923C0ZxoLQvPJjdaTq88ouU3BVceTYcD5Un29e762VJdnGrHOmCvXqjvWB13rKBd8rbTflCs/1xioWXW/fI/18Wd6hhwW1BXwFQAtQLUSSFqNUm80mDg4OCi5aBQO4+KJyHinPcwyHw2ABW4snpsF6VoZaZLEXk3OO7ANdcZ1Op+BGZBIAdel5lhh/KyPhGNl6QrSMnL1rbSBUzOVpkbJgLfHG+pciDVq8VvADwGQyQafTwWg0wnK5xGKxCJnQer1e2PuV/eO1XsStjS+wFnDsv71v9rrYWGsUvEcsKUXUnqvZw7RfsfX0VinScbGKk37nfxKoEpg+BzqW2q71er1BvCmFzBtH1tPr9cK0FVcWLBaLoIxxO0qtWz1OOzs7IeCMVjNlEe+NKh5VldFHDTUB30dsYyHRrQUU1wOr5cqX0woIXh8TaOp+1ixTsXaWvVDqMtNrFMzCpS8wz282myECUyMvte1UJgAUkkZ4QrNM6471xbOiUihzpWq5MQUlRhxWUNux0Gti1qBeT4HLe8/oXJ2b1Gsv23JJKRSeckdYt6ZHQKklUnbsdMxSucW9YC/7O93QHGO7fEehbmm7IxnL0z55Oce9vleRKSRZusxVYbeubS9mg/XRSqab3a4HjqW3rHGOmoCvAKyVpO43EjDXyQK+5q7r9azlQgFgdzrS+i+iwVqhpeXonFien++j2m63g5Blsnh1mfK/Lp9hOj0PVZSFWNtjZcXKtALfW8bCz/zvWdoxizjW9pR17ZVLUMEhdGMA66b2SCtWT5VnRS0rzzpPXaOeFlunknCMTGw9noKn0N9Tioj1DGTZ2RaPnCdVorOJM2x79HPVMU3BPnOr1SqkGlVouk6FXddLJY5KG6eJ7OoMG0FdpZ2PkrVcE/AVQcy9ZCMi7Twpz+Vie4IWsS4/mk6n7jZv1urS8qtYl1Zztseo3VMoUatmu70lF9yEghGmZYLbE7iK2DrgWB9tn2xdNsrUa59HwNZlqeXHhLHnErXtsm5WoDjfr+tRWYcN8rPtsnXErE3PNa99V0vRI0JPSUnBWsL87LXXUyxiZFilbp5DS5jKpO69S+iyM22DVeIui5BUcef6XuBMiWf+b+aLt0vieD3bDZwr/a1WK2xPyI1c7EqFqn14lMgXqAn4SiBFANQ4uSA/Joj1hdLy1P1lA7BidZe5Dz2h7JGUQtvNzxQEbCfnjtvtNkajEQAUkhmUCe6y9qeUCWt9eW5dW4f3mfAIIRXJa8vif5ugwWuPWl1q3WigDetUgU+lJzUuqX6mlAJvSsLz9HjXlikBMeXIK6eKZatlp36z7dD+k4A1BaT1AnlknEJVT4ktk3PPnKPVHAMkYGDTovdSagJn0xdU1qjQe1NZVVBbwDUeWFBAcX4UONNkr127hhdeeCHMw9iHmIEQ+sJrQg++LKk8y3ptFaLiZ2v16NpdXYbE9qlVtFwu0Wq1ggXBNty4cQOtVgtf/OIXCxl8LFJEWya0rHBT96ySoCU7b+mGHRN7vp7rtdF6IWz5GpRky7FlWQ8JsxZR+KqnRGMKvPbqOMX667VH2237b+d41U2r85E265V3f/R7zJK1pO+1dxsSsfeWhMa9cjVQi5npSGbqCfI8IF75Hry+ah9JwGxbq9VCv9/HeDwOsRma5lLbqylq8zwPuyfxueI00nK5LNyzGj5qAn7A4VkMjEDkw71cLjGdTsMDb12pfJnKrCr9ru7KmGCq2n5rnWqfrBDmnJLWzd8pZBm0xejNbdoRw7a/xayumODU7ymCjNXvzaVb6826qj3Bbe+D3Q5PN1K3CkZMCdvWyqnSd3V3em76lKLjlVnFSrTjmkJK0bDPhiqdugGK1stzrJuaZVois/d423ug3qROp4N+vx8yonntAja9LVonPXHaX/vcVsGjZP0CNQE/0NCXyxKqYrFYYD6fb+zGAhSDrKyAILkpicUiifW62G+e4Le/xdyl1sqyS2eAc0ue5V80GUGKJG2bLfnw+pTbU8uNzYHFSNtrI+u3lq79LVZGmRvWa5tG83rleZZmrP0pN29sDC4qiO0743kMqra5Sj3esZiCkmXZxj7duoQu1lavnTHyraIs8pzFYoFms4lerxfywHvz/sCmzAGKskIDOVUO3Y1y9iigJuAHFDG3pWqVmsSCCRMsgepSALV+1J1HIvOWeFzkBUpd572YKRK0/ebm42Wo4gaNtUfLUIWmjLQsCXplpshW74lebz0Q3nFtn3Vf22OpseFnu+zFJpfQcmL9TJGUrc+z3m0/qyoSXkBXqk33Cp4LlsoN30nd8EKt+jLyvRuolT+ZTLCzs4N+vx/Wg0+n08JYcmrCvgNZlm0QMC18TwGrsYmagK8A1A3HzFUKChu+8Oq29dxdao3qsgPu1mKjiqtYajGB58EKchUqPLZcLgv7AHMZR6vVCgkEUi/2thq4Z+l6bbZQYe+1SYVUmZVn22zbrl6NKkSmgV7aP+sm1OVpdilbzKLy7l3My8E22/vseUNiyg3L0HNt+zjW9J7YyO7Y81KmSHhtrGLNk9gAhF2B9vb2wjpc3ovJZBIC4uz90XZ4bbHttMqLB33/8jzHwcEBbty4gU6ngyeeeAI3b97EbDYLpKrz1OpNy7Lz7So5hzybzUKfea0nG2qcoZ4hf0CR0nTVFWnzsKrQybIsaK4esdh5NCZ6t/O/25CZvW7bl47XaABIo9EoBKlQWJUJmipQ5SUmgGP9oMITs4zv1lrhOKSsQm0LoWumY21KtdO622NWaqxvKY9GDCklT9uS+s5yUklnqpRb9lzFyETHyZtCabVahW0egfO12Boh7T2PVcjXHi/rk95HBmABCATKJDj0qtGbpvKHBMxIaCrOWkeV+/6ooibgBxwxa6LRaGA+n2M+n4flBHqNzi8BxZ1TUi8iy4/hIqRXJqxjZar2rFl7rEJRpu3HEHNRxshAxylGSl79KWKv0odt+pS6pqx/VeqJkbDtT+wZ8u6156r1yixThEh6ZffE62OV5zpm9drjbAd3GCNRMSkHtyecTCaYzWYby/+qku82Cl7ZeboHuGbKUk+Il9mKKSuVgK2HxnqJapyjdkFfAZQ9vDaVndXEgfiaTCa8uKi1FnMlaju0XZ5giQk2O+fEfmybXSd2jmchxVzRKQskVsfdWFGxclJu2rIyUwqCjrfnRtf/nvKjBO/B+y01hmWWE70iWlYZcVVpk71Ox4LWoP1s20Wi6na7OD09xXQ6RafTCUv+ZrNZyN6WUsTUA2LvQeqds2XYa+wzRFfyfD4PG7N0Op1CYh4SMFBcnsZrgGJQpEfAXpvvxkP0MKC2gK8AbGAUtX21cL3lC3qO9xL3er2wEYO3tEPLSuEiLkdbtgrPGAkCxV2SbF0XcdlVRRXhrmRmz61K0JZsU+dchgXkBf5457Mtat2kyNa7d6n22l267Pl2XD2rKhZNXIa7sXx1LEi8XAvbarUKGxQAKJBv7H1jH2JrrlPvaFUr055nd1iyWwt60xLqgo71AfBjFmpr+Ay1BXwfUKZ1W9ilJ9REdRE855LUKqB1y3O0vOvXr2N/fx9ZluHw8BCz2Sxs+edZQhd1l3pWjs34pPWpQPOW3HD9c7fbRb/fD8kNbH1KFtZdyrr13CoCextitUpEmRVrLSpPoNpIZyuQPRdzqm+e69SzknSsSDA65raPVS1/u0TL3g/bL1sOE1mQvDW6OFWv7b+2Q+v2xpjQWAk+w51OB+12G91ut5Bnud/v4/T0FJPJpDDXmiIlTTQSUyy8Z/EiRMcy6Q4HzpTzo6OjQjyBZk3jsfF4HIIi9/f3Q526l7e3d3mNM9QEfB9R5mYD0u7nZrNZEDh2f05dkqSuLAoJALh9+zZmsxkmk0lok9atn1OuzKr9qXI9/1SIaV9WqxW63W5w8WkGLyWKLMsKx9kHTykog0cudqw1AM6Wva2V5ZGr/e8pEFWsY494tb2pbFceyVVVKGMKT9Vnzt4/Wp1slyWhi1pZKU+AKg86DgywarfbgYCm0yn29vawXp9tI2gTx8Tum1W0PEXUK0PbV6Xv+n4AxQ0iGGylgWEaFAkUU5laaGYsT4Y96q5noibg+4wqDyIjmb1rmBUK2NxZhp+ty7bVagXreLFYYDKZJNtRZiGmCJXX2+MpkuILrnNLSqBMGNDpdNDpdIKA47VefmSvL1WEVZW2a7urWiGxOj0yspZZqp0xJSjWJk0EQSELoJDSNHa/vDqsBW3bFFNkUu322kBPDQOd2O5UjEDsOU4RbuwaEiOnb+h2ZhlHR0chNmO5XBZ27EopLDbbWOpZsmOZ8vBUAeWEPhNeG70EOUBxQxibva6Gj5qA7wOqWoqA787UeZdr166F37gvpyUyuzRJE3ho0vQqRHoRzTXVX0ssKjQ0uw77Q0t+Pp8Hi8NunUdoNqdYEJpn4XiCq6oyEXOrVh2PWPu2cZHH6rZtsx4HjrldEmNdsp416vXRttsSir3vvE9q9XmkotdwWz2P8FNxDV5bvbG0v7NsRjnbNa8AcHx8DADY29sLlu9isdjwUJW1I0bAMXL22sprqtTnfddnhjKGoHXLY3xP7YYuXtk1zlAT8H3CNg+kfYHU9WNzsHrzoep+ptauZVUVqlXbp8erlGfHwlry9rc8z0NiA5IGd4PiOSyDQtxzZcbaawVXKiLaugc9crPHvT57bSjzSlQ5pqB1Y/vPsdYxj+0Lnfpe1jfPkk55DLznR7/zc4zYPMUxVpa9pqztJF9VFNTKvXbtGrIsw3Q6xXw+d1212v8y5deOC7D57MXa7ymVVchXYZV6fqYyAmBjjrhGOWoCfkChL4y61PifVrAGN2jgBr/zHF7LxOua2MKWrSgjgrI+eC++LTMmPLnB92AwCP1iwnimzOt2u8ENPR6PAyFb6z9mDVgLMOa213bZa2MEbYPLYkKtzGrxLGxvnlZdhHmeu5aIt6GCJnHhmnI+X7Eoaa8f2mfv/tKK0vGwJJwaJ68Ndo7ftkV/s9fb++L9j3kV+B4BwOHhIY6Pj7Fer7G7u4tr166h0WhgNpvh+Pi4EMdglTzWY70Rtq0e8aXIOUaoGkthy+j1euH55/pe205d8miV5Ng77SWEqXGGmoAfcHjkpA8+BaUKM0vA6k7UpB3enp0xMvBe6Nh1MfKI9S/mZpxMJhgMBqG/XJ84HA4xmUwwmUzQbDZDAMxyuSy42y352vrKLLpUO8t+s8I8Jlj1+phikrJOUlacjWoG/O0PVVmxa8rL+m7bEyMGrUfb7Y2Td62ek+d51PPgtcGWbYmtrH/2Wk9ZzfMcvV4Pu7u7geTG43Foawoxq7XKmMSUu1gfYudRkaWsiHlA7DromBKg+edr4o2jJuAHHPaFY1j/YDAAcL4JA8nUWkZq5fJaLzuW1ue9NGWuO4Vq83pMy6kidPI8x3Q6xWKxwO7ubjiPVvFkMgmZwLIsw2AwwPHxcSgnlorR9odjo5/tZuRe/8oswhgJ02r2SCil9Og5eg8uqvzYvitZpCxtbwzK2pLKjOVZ2Or1sXmpY/dESaHMavfaqGXFflNFxgY27u/vF7wxnAtOwaurjLSs4mSPx8hb+6BlZFmGXq8HAGEpItcp2+v0ubCyQvdkZixBqh016kQcDyysINYXhkne6QJjgAdJh/DmiNTC8Qg4BiXUlGCy7fd+T7kElTiJk5MT3L59Gy+99BKOjo6wWCzQarWwt7cH4FwJ6Xa7G8tSUpsrVO1v6noleyX8lNWaKqcMsXGNWc/aD2+DBZvQRZNJlI2Bbdc2lk5sLawHz+rTcda/VNCVd9xzXQPF5BExElFFqNVqYTgcAgAmk0lYQ5saw6pWa8zTZFPNKuFV6TfBe53neSBf9R5ZQicRU75wOku9a61WayOLV6xPjzJqC/gBBR9QzudRYHU6nfDSjUYjAMDnPve54HLlw811fBpk1el00O12g3uJxGWREgxVXhy+dLHEEVpOzALw5k/zPMfx8TGOj4/RbrfxzDPPYDgchjy2JycnuH79eljXrEEhnmWvbVBlhGtdY3NXFEC2zFj5Fh4RemOUgh3LmEXsrTvVe9JutzfWs/I/pzdiJMCybXS1PQ84H1PPgrfjmHJje/WkoBa0LYskYhXRVIY5AIFolsslVqsV2u02rl27hqOjI9y+fRuTyWSDpLTtntLp9S9m4bJcJUrbP+9+xcrVd21nZ8dNkWmhzwBzCAyHw0Dg3W43bGtolzRtc/8edtQW8AMIfYls1ii+eHzx2+025vN54UXP8zzsyakkSMsmz/Ow1KRMOyZimrC1jLXN3nV6PFYXcO7ii1k0y+UyuPj6/X4IJNrZ2cFwOES/3w+uaY/470aoe9aRogqRVh33GKqU760ptf1Xj4gSFZ+fVD+3bZvey5jlru0vU2a8Z4/Xeh4Xz8plu6y1GvOecMtOACEDFN2tr776KqbTafT+q4VuSTHlMdLftc2x99ciZYGzTWrBdrvd6PhZT0Oe52H6S4P5dFOMVBseddQE/ADDklyWnc2tjMfjkNJuvV4XLFm+kGrBEbSKgc2dTqwgsK6mMg02RdqxOuy59rslYFvH7du3cXh4COAsgpNaNwAMBgP0+/2oouC1PaUo6LmWlGJEoZZeSgB5SoJtk60j1Qd7XcrC0o3UVagyo1Osn15/PUL0xsNrS6wPqQjaWP+8tul39WBY6zimcPDda7VahdSKJKXDw8ONvMhVCN3rj3f/9RwmnrHvRRWSUyLV8ylPSMC6VLGMgOlRa7VahS0MdR5/G+/Oo4SagB9g6ENL67XZbGI2m2E2m2E6nWI6nW7kQ+Y8MUnWs1o96zJGNhRYJHB9ET0hGCPMKm4te44NdrHC6eDgAHfu3Amkked5cIn1+/2QqSiW3SclGLY5t8rvbLNXh/e/LHrWlpsiaW/safHQilmv14X9XbUcvTeaOesilr4SbGqMy5Q6vcZCCcA7hxZaWdIIVXy5UxBQzLg1Ho9xeHjovmcsL0W+KUXJ/pbnxekSb6zKlF0Fr2NKV6LdbhcC8ux7rwRMi1czknnLpmpsoibgBxD2RSaYfYfgUhzmQlbNk3mUy0jP1hsjTx6zgk2vqyIcq7TFWnGeG1rHhnNvq9UqBKbNZjMsFouQGJ9CwLrHbTu1j+pGi42HhzKXXwzbuOxiHgs9FiuHY6A73sxmM+R5HqLKW61WgYRjfagi4GP9qqKQVTkvZul6gWRZlhWCjsoyZfF8Jd88L27Nd3h4WEgzaS3sbQIBU2TslWWfg9T7WwZLwBrVbBUxGzOh89IaxKfX19hEHYT1AEOtVQBhAwK6DRn9rJmA+BtfBi3LvsCj0Wgje40nvHUemfBc3FWgbrZUv62Q13zQKuD4O93yN27cCBtNLBYL5HleiMi0c9822CsmzPk5tvYx5QGwySlUEYhZg1XGiWXZNtj5TK/NjUYDN27cAHDmyqfrcDabYblcot1uY39/H4vFoiB4bV+9/qbayO9ViTt2Xhlxc06z3W5vLKnxyEwJmc8WFTe7bK/ZbGK9XofkG0DR4tb7sVqtCvfbvjMpZc1+Ljs35lFQeOvA+XmxWGA2m4WYimazGRJyaH+A83XCdMdTOVkul8FI2NnZCc+PXW9d5Rl4FFAT8AMOfVD5EKsVTJLRF40C11vqsVgsgiu53W5jd3d34wVXLZxuSQpoW4+dR97WKvTOqSJ0NV2lEsRrr72G0WgUXGjWBR/L3uO5bLVs9tfryzZWvXeMnosYsWmd1kJK3Q/P8lRSJmwMwXw+DxtdpIhT22TL954p247YmGxL1h50jOxmJoAfHa7tU7erulWp4E4mE9ca1bLKllqlCNX7jcfL3hNbfmqcLQlrLnkPdn08ZYQm3tD3pCbZNGoX9AMM6/bhMfsboWs5LSHSAtat+xqNRtgVyXPTcdvCwWBQcL9ZjTtmPcb6FOun/e6VG3MbqrV5eHgYgkq4zESFoY3Q9NpjFRiPnHU8YtZhrM9lv1ui0z9bv7bP/rdlKE5OToICp5jNZtG2Vb3XOh6eNVcmmFMKi7bD/q6xDWrlVpl60GO6/I/Pka57pefIjocqrkpGilg8Qgz2ndc+2OcvNT7af89Lo/9j9XoR4zo+Xrurfn8UUVvADzBiQsZ+VwtNBYW13DRvtK4nBjZfPK232WxiNBrh+Pg4bHpQxVKx5BDr40WggtEKAwBhbXC/38fOzk4IMqL1b4ncs3hjngGeo9aRd74dg5SrMFanHScKdU9QavusoFaljN/X6/XGRul5fhaQpVMT3hREGYmlUNUq8kglNj7etXw+2H71Mug91L/1urjjj1p3fF7UCrSWoG2DvTdl4xAbm6pKj1rwsTJTdZQFPfJYrLxtnoGagGsCvlKICSA9poLGPuC6XdhisShspeaBAocCaDgcYjweF/JP2/bZ9lhUFQYebJ84l0uL1s4zMTlHlmUhKE2TlWh7PcuCfVDS5Z/nMvbambJCPFQVSiQWu05cy0gJeEY/xzZUt3OFKQXL61Ps+fTOLYMlSi0rRtJ2Gsae4/0HNpNUaGY1/vG8GLmWPeMpRayqZyH1+7bEpu+OrcMj/ti7kmprFWPiUURNwA8g7IOqmxGQRJn2TgUoo1ete0sFNXcYYqKK09PToPGrVcm5LrWSsiwLARpHR0cb7dX/nsYf62vVF9ETLNZFqAKTWXrU1W4tGOslAIqEYz/rObZtti+eQpISWjErR+fXrFuc/bHuwhg52ut0/pfPTa/Xi2bQsutyvWAyPe5Zz15/9fqYAuN5Ezyl1P5PRQ5bYudxfR5ia26tF8WiyjsQ83xUGRdPMapCwFoX3xtGPTMTFnC+x3hMWWObGJQGFGVULDVmjXPUBHwJ2IZEUmUAvhsR2Eybp24xtYb4UvGlsWg2m2F97M7OTliuY6ODOQfMhAz2BfTIxHvxU8LAI61txkpBQUjFQdd5cu6bJExUdWdu0xavPzHCsOfEpg60fwrvPD3utYHtVeForTp9dlJWtIcyi9gqAvrZkk3Zb1VhlSlbjr47/B6bntDr7TmX+RxpvWX9tc9Xqiy9RpcsqvKqqyf4W2rcO51OUNKp1Jch5aV5lFAT8F3iIu4eoPqDZ18ovvQ8xjV4zGJj50RtOdzSb2dnBycnJ5jP52ENqOLk5ATL5TLM/1p0u91CsI7tk/fCe30DitG7ZShzY2mACBUWjhfXKHrXaXlWICu8NJtlbkTPMq7q5mOfLCmlnp8YGXjH1GIhOD+ske9lAt4idj9T1jDbbsupYtHFSMcjXFsP77mWoWTMZ8m2q0wZuBvFPPW82N+3rUvfO90dDTh775lQQ4M6U+9nr9cLnpTU1EyNTdQE/DoiJUisEIl9puuQL4euAbbEYYUarVq6EpfLpUu+WtdqtQob36vbrdvtRoN4LjIGZVq2lm/drGopqMCkNaeWvV1mYce2ivWoFpXX51gfY2St1m/M9eq1SdvsuSxTZMc+MLsaU1FqPl9NzHARoWrbYL/byPSLlhsjX5160eOxMmO/lSlDsWu2GbNtFXOvfmuhl8HLcKX7AWtOAS3TPmNcd69rhmPtjX1/VFET8F1imwcp5lbzyuI5KigJJV0u9M+yDOPxGJ1OB4PBACcnJwVtNM/zsLaThDSdTqNrFfX7YrHAcrlEr9crZE9ivuXZbBaSHViySllQ3gttERPgMYHJNigR69jFXIved63Xa2Ps/pVZxWVjwb9UKkqriNjyrJLCtJPqhudzNBgMMB6PAZxZMxTE6/Uag8FgY2s65tv2xs7OUac8FtpWXb/sletdnxpf+/zZsUoRsVqIhKZ1TXksyp6lWF+2Id6UF8IbX9suPYckqwGLnI6y6Ui9Z5XxJABw69atcNy+Z1WU60cRNQHfB1R5EKu+aEqIAAqRmrYem9XHm6vxBAn/qBVzWU+n0wnKQZ7nhWCtVL88gvKEUYrE+L3MarUuROvuTgnkKtZkrG1lJGy/VxFQKWvLWil6H3d2dsLeybo9pc3exGC8PD+b72c6SqZizLKzOfUvfvGL4dlRb0xsDMvGLtbHMoXMQ4ywPYKOeQ+8eqpMkcSyXVVtb1nf7W9VrU2FVULse1fmWQCK22mq94LPRKfTcQO2amyiJuArCLoMAYQdfwhvjahH5jFLxPvPc23aS2/3F/uiKTmo+84jihQJpgRvmTeBddsxUKvIO9+WV0aosfNsP1LKR6pPXp2x5SNUjLIsw40bN9But7FcLgvzep4CplMKdh6chE2LucyarIKYUpU6z96vmEdJz9cyUopMjJy8crz2WfL1SC1mEapi8HpBvVbqdVFi9fprY1EU9GjUpFuOmoCvCDSjD91EwJnLkC5G4DxgwmbiSQkd7793DnAepKFztp4wibnpYkLH/l6VpKoILEsU21hkWpdtr22znhdTdlIEXXYtf4uRuCdEb9y4EZasTafTQt5eD57iQcVrb28PWXY25zefzzeCtzz3a+zeeIpPTBkrI74q91O9IVpPLPjK1usppfZY2XInfk6Nidf/VJ/K3tdUPWVl6NSNVdaUYO0OSPY9tgp3TcznqAn4CoAviZ2TAhBcg3xZ1NrU6+1nT6h4lpQFiZ9b/7EuT/PXMokyEo71X6+3iJGjLUNdjlXrKwPLSlkEdizKLLXYuerNUNh7zXMYwd5sNnHnzp1CYvxGo7FBoFwjTtANzemKw8ND7O3thUT9Xn5wj9S8MUv1X5UMdXeWKSNV3Lb2WNnzomNu67EWq7Wgy+rnNVWOp56ZiyiUer2nTJS1X999ek1UsVOFpybcOGoCfkBhNWYv807MGuI5Wg6t5uVyiW63Gxbfc/mAJ0Q9ty3X1NroZ63T9qGKlX0Rd6Yn/FPnegoCr1NBYZdSVLV+q7TXa2dK2HnWoLVGPGWq0Whgd3c3CMjbt28DOAuco5I2n8+DoFytViFhCUGC5T1fLBbhuRkMBoWlSmVt9saiTBFJeTi0v1YxqeoRsWWlPCVVlKZYP7267OfYsTLirqJYpBRDerQYDU9P2mw2K8zjUhZoDmw+G7oEablc4vT0NCQvse2oybiImoAfYHiWjga8xFyR9rO6yFR4N5vNUu35bknHtumiqKrlVxGaVSxmD573ACgP0PEIaRsL0brxyuricrNms7lh5QLn87y02mPpKDW4huXMZjN0u110Oh3MZrPCRhfav3sBa2Fa69PWvY0r925R5VnyFNCYt8Ajbk8x8N5/7/lJtVszXlH59BL5eOWQsAGE7HitVquwP3KsTzVqAr4yIHlSW2XiDSDunrOgIGU5JOCYhaFuJi84w9YdExI8715gG2unCtlal5yWEROg3m8pAVq1fao4VWk33cu0ZHif1FvB+nRHH2Bzhx4u38rzPDwzeZ4Ha4eZ1KwyY4kx1tbYedu6U9VD5OEi4+6dlyK1Mu+NfS9S45MaN1XEqrqu7XHvXeX7Te8H5UNK+aby9thjj4Vz+Tw1Go2oUlejiJqAH0DEyJOaKd1+dn2rLUMForqQmBEqRsBKJh4Jp9qacjnFhF6Z4NrWSk+V6bW1KmlaQZ8i5lh96rmoqpSkLL2YoqCWCXeC0lSmCj4H9jdmS9NcyLE0hVq/bZf9rcxKjd2P1PdYG1IWsm1nlXNihByD92x478U25VVREsu8P/YcfWZUuSe8tfSNRgOPPfYY2u32xooIvR+16zmOmoAfUMReFM2ApS+JJUrrJqWrCTgTogyYaLVahYT8MVIiiW+zj2nqpauSYtBrR6wOFUjbENtloEyA6u8XsfCqXEeByP+ak5fCkXO9tHTsM2IVLq73jlkztLJ5TWpnppQbPeZSLVNS9H5vQ/Cpsmy5qekAT1Etw91a/FXKvMh11rNFb4rNUNZqtcLzxN9PT09x584dAOerMli+R8DbjNfDjpqAH0DE3Lp86UmYTAHXbrcL+7dSsHquYhKx7gjE3/nfar/W5bqNxu71zQr+WF1lL2nKCkzBs0Y8i80j9Zi703OrqjvXa5tXtv5W1WNgyaPb7YYdaiaTCRaLRbhmsVhgvV6H/aA1ep0eEibeWK1WIb0gCRkAjo+P0e/3Q8IFWtipuWC95zES3vZ4jAD5XXfJYr3emNrnm2XHrE3v2a1CKtsSzzaWt6c4p66xUyfqgmaOd84L22va7XbYRU2DtrLsbLc0Llvj+fq5zOv0qCGe667GA4HLekApRKi1UjBVcQ/FrAvvvHvpcooJvm3OB9LtrOK6847FXMMxZWObMU+Vw990JyzdepGRzlXGQusgoXqR8JqKkrnFy/qi4+IpO5bAPQIpIxUtv2z8tR7vc6rssnKqXreNgqkKgVe+/i8ryx7P89yVCdYC1vHnb2xXt9tFt9tFq9VCnueBdFPy4FEnX6C2gB9oWMEYs5hiifzteSzDrif2rDaiisC5iHs1Zt1558TckmVW1TZtsG3xBJXnmvTO8+qJeTTssbuFClG6ClV4p9JG6rPBtb/6jBGnp6chGpqxBPY50r579Xnn2mOeYqC/pZ5Ve69i98u7H7Z+25YU7D1N5fOugm28PGWeEa99/OzFk/BZYhAfg7MU9KTREm42mxtLFL1tG2vyPUNNwFcA1FDttmD8zHkYXcNprycoZHksthlDDB7hlVkl3vXbwHMBesJwm3ZUtXwvomjY33WMtxE8to+eBahjQUHKc+bz+YZbmOt49bu2Uc9XUrX1zWazkKy/1Wpt7CetbfbGpErfvc9lx6oQtdc27z5vU0fs/BQu8i5oqtmq9VWph1MWADbW+mpu+SpeAo0Z8LxNNfmeoybgBxQxbfb09LQQNAWc5YPmTiR6bixq2cuopS+pF1FtkZrXrPqiliFFeJ6QrFp3FQFgz7EbF/Ac/fPcn1URczGqoqT3zvMCkFxPTk5C2klbjh0fdTlay0WD+ehu5Lmr1Qq3bt3CYDAIwVgsi2Rsx6CM8KzVmvJQWItK+2bHSNti5731PK+uFPlXUaiq/B6zblNWfBVrvKwNOoZUppiQBTj3glDe2HI0Lzznjff39+slSFugJuAHGPqi82XQNXbq/vHmcz13myXgFKrMKXnn341bOFbeZWr7em5M0fEsTSC+N6qSlbXWvTZZqyDWpjIi0v8kwtVqheVy6ZI03cVqRel8Xay96jlRBW0+nxeSNrAd3vaCXr+qKCspBUwVl9g4e0SWIl3bbv0ea9NFPCUX8YaknoVYu2Nt99qnqys4heFltSKsLPE2Yagt3jhqAn5AYS0ruoL0JSABt9ttd30qESOEKll4UlbANu6+bXERK9Jen7Iu7Hm2LnXTe+RrE9Cn5lZpHcaEoubStoLWWnqegOWyI+bntulFU+vFlXy1Hv2sz5YlMC8TFgN07HGdW+R3LSsWrWznHW1d7EeK4O+l+zOl9Fa5piq8hCyekm2/lykbtH4BFJJp6JpvzQNgo8uB8zlg9X4QNQHHURPwAwwKIr54fLDt/pup3W2AojAqW8d70ZeljNyqWCje9bHfPM3eu9777BFu2TUe+Xrn8ZyLuqJjwtwqTdby5TOghBgbP3pS7CYa1iL1lBjtu+fWVktbI5vzPN9Yt+5lW2Kecm0DLTCNzAaKXgdNUEPQ2k9Zjwo7Xp4yZH+/CPnaOlMu4pilnXqXPCs+9n622230+/0w/UAC1nvFDTkIPj+dTifkgubzx6xpZYpvjTNsFaL3kz/5k/iar/ka7O7uYnd3F8899xx+4Rd+Ifw+n8/xgQ98IGyB9r73vQ8vv/xyoYwXXngB733ve9Hv9/HEE0/gB37gB+o5gwjsg8v0ge12O8z12YQc9vqLPPxK/LF9PasQY+y/nlvFTZcS9GXXVbF8PNexggFwHiGVkWxZO1Up8gS6rdu7lsIvz/MwF2cFMZ+V1WrlBlyVjQUVD64h52duyKDkx3brUhV+1qUr244V4bn7bfIZfmdaztgUgYfYc3NZ5Lut67nseJX3gv3Wcel0OiGXANdz817aZUaeh4eW82QyCXXYpWtWGahRxFYW8Bvf+Eb8k3/yT/AVX/EVyPMcP/MzP4O/+lf/Kv7n//yf+Kqv+ip8//d/P/7jf/yP+Nmf/Vns7e3hgx/8IL75m78Z//2//3cAZwTy3ve+F0899RR+9Vd/FS+99BK+8zu/E61WC//4H//je9LBqw66GIGzlIIMkjg9PcXx8TEGg0Fhc3UvO5Z1fSppVCU0K7i86GkrFPTaFIlXcXHH3Lcx2LaUueq8ttHToB6HlBDWuU9ep2REMCMVgHAvaZEqyWvgFctRlzPdgDZdpO2HtzWlRrra9mo72W/tr6cUZVkWxqfRaKDX6xX6ZDcCUXj3R9elqmD31ifzd+sq51jFvB9lFmaVZyj1HHkKk5adIk7v3Y2VH3vv9N7Y+8znh2PJ51Ejoel9AIpTMnxO9vf3sV6v8dprrwEArl27Vmkcapwjy+9ydK5fv45/+k//Kb7lW74Fjz/+OD7+8Y/jW77lWwAAv//7v4+3v/3teP755/Gud70Lv/ALv4C//Jf/Mr70pS/hySefBAD81E/9FH7wB38Qr776atSVyq3QiKOjI7zpTW+6m2Y/8KB7iFmNgDNX87Vr18IuNM1mE0888QQA4Ld+67cAnGmlHEdNmKDu6mvXrgUh8NJLL4X6CPtiq/VgBYedt4sJrTLXme17FevYlmvdhbZM+z2lgKjwVzLk+SQUFW5W67dZw1KKBonLLuHQttEqUeEJnOdntuSqc6c6V2rHwBsj9YLorll06dpxtmOg77K3M47XR15nk8Vwnlr/lOy1bVbZUOuNv1viS5FyrJ+x/nh9U8SUgdj5KaTK0uP2WWeyFo1NoDVLOWsDsQhVfJ599ll0u1187nOfA3BOwK+++mohov7g4CA65g8bDg8Psbu7W/n8C68SPz09xb/+1/8ak8kEzz33HD7zmc9gtVrh3e9+dzjnK7/yK/HmN78Zzz//PADg+eefx1d/9VcH8gWA97znPTg6OsLv/u7vRuv6yEc+gr29vfD3sJOvwr5AFICr1Sqkf7OC3xOsKoBpLdgsNzF41qcNwvDaXQWeFbGNxRojETseXtme0pAq2wZTWYWExGADm9Rla923bAc/2+mEWPvo+mWaSU/xUMvVG8cquywpKZUpEtoOmwVJha8lWG3TarXCYrHAZDLB4eEhbt++jaOjI0wmE8xmM8zncywWi8J4pu4hxzbW15Rlyfbyv33ObP+8/paVXUXJ5HVlz6otP/aZ0OxpvF73BPaWI+r7w3Sleo1XV9n3RxlbE/Dv/M7vYDgcotPp4G/+zb+Jn/u5n8Ozzz6Lmzdvot1uY39/v3D+k08+iZs3bwIAbt68WSBf/s7fYvjwhz+Mw8PD8Pfiiy9u2+yHAiRgAEmhQtBtaclSN+FOCQArIGwUK9vkzRVvI1z0fO+6mBC8CGLXexaz/tlxtILLwrs3VYgLON+dyM5r8nzmaOZ8boz0tE5PeOvzlBqDlPD32qftoCuzzOqhQsElVF50tv1Ta5ht4T2KRVRru70+ePfTU27vRsH0UFZelfe0rC59TlarVfBMMPe3KoEkVKY1VS9Dlp2lnmy322FKTOf465ie6tg6CvqP/bE/ht/+7d/G4eEh/u2//bd4//vfj1/+5V++F20L6HQ6hVD5RwWewDw5OQmboQPnbkZPA1bLN8/zgkuPiG3a7rkjgU3yTWnltiy1pDyrN9V2FcTbuOys5RZz1XmC1VpoWrem/4yRnEdovNaeQ0JRguc9s9dbKAFpf23iELvxghWq2qfYGHuEa5FlWVQ5tITPPzv+qXaUkVEVq9bzGNjyrSemjEhjbfUU0zLrNFW+XudZ5VWuVwWe68dtHInNiEU0Gg0MBgN0Oh28+uqrAM4DFYHze2w9ZGXPzaOIrQm43W7jy7/8ywEA73jHO/Cbv/mb+Of//J/jW7/1W7FcLnFwcFCwgl9++WU89dRTAICnnnoKv/Ebv1Eoj1HSPKfGGTzX2Xq9xnK5RLfbxd7eHoDzl4UBOtYS5Uuhc3m0oNrtNkajESaTSWHHEl7D8oDNuV5dQ6wBGjH3nV1XW9Wa8qwTJZQq86y2Du+7Pc5Ic242YElFrS9aFJqK0d4DT1mxZEiL1IuK9pQYfrfLjqzgU0VBFSmu1eVxxhV4sMuf7BhqvXadL6+xkdJ2LPI8LyiU9lnTe8W5cA/qteCUgB63Yx9D1XNjz1QMMcWs7LzYOTHlxCtX+7Jen+1w1e/3w/MLYOM/cK68ccyfeuoprFYrvPLKKwCAxx57LJzrZUGr2p9HDXe9G9J6vcZiscA73vEOtFotfPrTnw6/ffazn8ULL7yA5557DgDw3HPP4Xd+53fCTQOAT33qU9jd3cWzzz57t0156KDClXOHaq00Go3gilQXkkaJWvdQlp1FqzK4gkFbdn6T9QO+1UuoUIy9YNqP2G8qbD03o7aH0KUSbINnYW8rQIEz11vZ+mptR6vVKgS2WFeotoWkoHO0SsJ2PauFJXnb16oJG+x6W1WSyvpry6Pbkn/Wg5Fqk1XUNLWlPsN6bzUK3C6Z4TU2+pyoMvftwVOiysiW58Q8MbF69Dpbvy2zShu8NgHn7mclW7qnPYWJis1wONwoTxXimmyrYSsL+MMf/jD+4l/8i3jzm9+M4+NjfPzjH8d//a//Fb/4i7+Ivb09fNd3fRc+9KEP4fr169jd3cX3fu/34rnnnsO73vUuAMA3fuM34tlnn8V3fMd34Ed/9Edx8+ZN/NAP/RA+8IEPPJIu5iqwD7NdyjGfzzEYDNDtdkPyfc8ionBlWQx22dnZCft7eoEzngCo4uKL/e655GLlWbcXj1vh42Vduhvs7Oyg0+mEtlHJsX2xgWxKYGoNqwJh+8r+2PZbS5jl2GN6j7xzeVzbbeHdZ89iVuj5Nhe07avnmbFKh2e5p46plwZAoX4dS/Ve2H7GcFkuYe9c9d6k6vTKit332HXefaeXgeOq87aqzNqpAo5hs9nEYDDAYDAAUMwEV5Pu9tiKgF955RV853d+J1566SXs7e3ha77ma/CLv/iL+P/+v/8PAPBjP/ZjaDQaeN/73ofFYoH3vOc9+Imf+Ilw/c7ODj7xiU/ge77ne/Dcc89hMBjg/e9/P37kR37kcnv1kCBGhAAK5LC3t1dQYFSgqRVGlxNwljx9Mplgd3e3kNRDSVgFpKf5W43ec/Hp5zwvrsu0a4m1n9bK88pTy0jdqXYMq7gIlQgYeAKcLcOwuXBpxQJnlrJVDijkvN2BvHZ4bbTjbcdedz2q0kc+DyTmmDJlBbhnYVklQK1VWvC8F1UUIyVZVSBtxLmdk9dzU+kqbf/0/93AGzuFp2wSSlhVgik9BbZMsSoDPTfA+VIxupg5HeH1yVq/9Ebwurtt16OErQj4p3/6p5O/d7tdfPSjH8VHP/rR6Dlvectb8PM///PbVPvIwhOQFL7A+TpfXfvL61QzJTnriz6fzwvBWErC3gvuCZIYIds+EGWRqTbgyEsgYctWS48Es+2Lr+2mSw5AcMOdnJyg1WqF1HvL5TKQq1Ui+Nkj4ZS70LM6yyw2XQus52s9KSuqbDy0PHtvtE+q4OkmEFaZ8+pIuVh5nWbTUiuXUzK81k69cPxt8NlFYctIjWXZu2DP9d7zsntV5tFI1cdxbbfbhUQcfPb12bIehdFoFM5frVZhX2jgTGGNKdE1NlHngn6AoZaWHtO8qwBCMJUGYqlF3O/3AQC3b9/GYDBAq9XCZDLBYrHA8fEx+v1+CMbI8/ON3K2VFBNesWhlImZJ6TVl7ryYZW2t70ajURizmOvUkhXLVaLl+O7u7oZcwwDCEgym76Mws5Zcnudhg3I7NeApNZ6At2PIcmzAkxddrNcBCDslaf/tNoOea1d32zo9PcVyuSy4tzmfHcsB7N1Hz4NCcB7ZpuC069aVaKwiRALRJCCXYTnae+M9TzGFNVVmTGHSsqu2t0zJ4zm9Xg+9Xg/AZn75LMs2MqC1Wi3s7++H5D8vvfQSOp0OBoNBeDc0N4GWp22rCfkcNQE/4LCEow803UWz2Qy9Xs99uFVYA+cbN7TbbSwWi0AiDMTqdrvBiolZqgpP4MaEj0e2lry3qa8KUsqDCjYV3PyNJDAajUKwobabQksT2Cup08VnrbAy1y/bGyMoOx7884K3rNClVehZttbCZJ9oFVmLkwTp7YDDulJKGYANpYSEr3O61vrl+bpcxrPItR7ve9nzmoJ3v6z1buvZhoi9+31Z5MW2850HiglgqLyQhLVdusLl8PAwBB4C57nqdarLex5rnKMm4AccFIb68uoc2Xq9xtHREXZ3dzEcDnF0dFQQoJqoQN3UvV4P0+m0YNG02220Wq2Ctacvfcoq1RcrFZDhWbq2jDLXq1emDTKziAlHW45aMI1GA3t7e4U9di1xMf+zbS89ECQotiE13+f12Y6xd461RtUl7Al/DcBRC9pbn6yBOXZuNmXlKOlb5UOv8whH15R6fVQBz+s1qYS2O8/zjfSe1htjn3E7Xno89Q6UPbMpb1IZuZZZ7ak+2LJ53Eb5l7V/Z2cHN27cQLvdxmQyCd4zvZ9MDkNCrwk3jZqAH3B4gpdWLZchLZfLQMAHBwfhHApMLlMCzuZoOp0O+v0+jo+PQ4QvrTW1LFLzqZ4lYY+n+sNzrTBMCTIlSH735iZTwsy2lZaafj89PcXOzk4g3zzPcXBwUBCCPIfKCkmDm2MACMu9qlj2rN+2Uftlz+O5+jzo3tCsV0nZI2IAhWVs+pt1UV8EdlpAPTmWLFIJPDRZBJ9XPrt8Fvif7eYeyXbJF+tMPSepZ1mfm5glnRovzx2eUsDsNd7zYJ+fWF/Zbmay8tpm84sDZ1MvtIApZ4DiNIgt7zJXJzyMqAn4AYcKe2I8HmM0GhUIaL1e48knn8QXvvAF5HmO5XIZSHc+n6PX64WAIiYLv3btGr74xS8COAvoajTOMtyMRiPMZjN3/swjMBV8wPkSHM9CttbRtmOhFgzb5a0TTgk2z1pXlyrLG4/HhWAfG+SV52fzYr1eL7hN1+s1ptMpptMp5vN5gdTtmFioJW3HTO+zLqnRceDyKd4DlsN9cXVcNAKWx+jKpfWvLvTlchmCz6zSowE7VmH0rEUdY+0D+3V6eorBYIBGo4HFYhHmFdmHTqeDXq8XXPucGsiyLMxpKqgAcDw9j0UZ+dnjuv+y9sMbAx7zEHtPUtdo26q2W8tar9fY29sLfTg+Pg7neHsqcy79DW94Q/Am3Lx5E61WK8SNsJzZbIZWqxXey9gOWDXOUBPwFYDNwERhyN2S5vN5SATR7XYxm80Kc78k0m63GwSW7gXKF2ixWGAwGAQr6uTkJOz1aZFlWZj/scKAL60myi+zNlIWlrV8rTDxiK2M5D3L25ZlA6w4N65LXyicuFRpOp0Wli3F+hUbj5jgtgFO+hstcJbb6/UwHo/djQpiwtmex+h59lszfdm4gpSV41nz9r8qBZpVjBb9fD4vtAtAcHUuFotokg+StnqD7DnbeniAYna5WJKYWHmx8bDwSNy2p8o6b/sM8lwN0pzP5xtL5rRuPnv9fj8oYdztSD1rPGaVxRpx3HUmrBr3Hja7jAbDAGcvS7fbRbfbxWg0CkKSLxCX0/ClYx5pOwekOyy1Wi3s7e0Fi8IKTA2+SCElmPiClrm6Y2SqY+JZD56wsxaZPY/jRk1ficbuaDSfz4O1O51OQ2S5tQa9v1h/bNtsOV4/aDXqfD69HHaLPp5vly9ppjUAISCPY+JF43tjzGP2nnoWZ4w4OLYkAV2XDZyTr+eNsUKfGzvYuqvCto3enotad/b5SylEXv2x67xnOza+9JRoRrwY1FPB9b+qlDNinTJGUbYOvkZNwFcCVtjx5feiT+1elHQ7cy2rhdWi6XZtNpsh57TdnUfnBTXykbvZ2LzIWoftS9UXVF2V1iJOXZMqi6CgbzQaBUGiRMo+WhJm/3V3GS03ZuWmvAFV2mzP573gnDNw9iyo+1UVHt4vPkN6PMuy4C3x1jFbktU556rtjvWZbZjNZphOp8jzvJDsRLdz1LpZh+1jjARS7bLPmR7zln0BfnrOqmNS5qq24+89v7F6PHAZHYCwtaPOm3t9UWX76Ohoox/e83+RNfmPGmoX9AMISy7WHWWFSrvdDi/FaDQKRKuWwGq1Qq/X2xCWGrHM/4eHh2HtcJ7nhfljbRMFHC0CaxFbl6Znien/lDVgo163sWI82Hk3HZeTkxMMBoOCJQwUhZB173oWoeeGtr9XaaNntXtg2yeTSZgjpQfDKkU8ZjMYZVkW5ox5X4HN9cba3yoKkT3fgsSv4zWZTIIFbMtgYCHXWeu7wXN1OY3nDbHj6Y23Z2VbcMysN8f2NdZ3bUesrVXI3SN1HVN+5rsNnCfzSYH1tFotLBYL3Lp1CwDCMqbFYhE8FoT12tXwURPwAwjPJXdychK0Vlpc3W43CKcvfOEL+PIv/3J0u11cv34dr7zySshQk+c5ZrNZyBm9WCwwHo9DCktadxQkFGpsi1ob1lICziNCNYhJXXT68luBV+UFtURQZnHFBGBqrGlZcbyWy+WGQqFeB+vCtfXFiLasPSlBq+MQI4YsywqJMuzyHP1Oq5nX0fJhH7vdbmG9syVhzysRE7zeeNgkKZbM8zzH0dER9vf3A9nOZrOC16Hdbgfy47PKtul0QMzi1O+WiD1iVmWNx+z6b+1LbBw8UvWUAk9JLXvGgHOFptFohFUNDKrjWv/Dw8PCmGs2K6D4Trz1rW8FAPzBH/wBFosFWq0WhsMhlssl7ty5g/F4vGER1wFY5agJ+ApA3YcESUBztxJeJKhujE5yBc4DiYDzpAsaRBGDFSAMzFErxUbHWgujjCCt0IwJH0VK4MXKVsJQi1dT7DFhiTcXGiuzDFX64gljb8w0MxbnTGkp8hpvDDxioiUNIGRJ45IfPc9ziXrRzXeLyWQSsi2ppblarQJxWA9LlmUhGM56YqoQmMJ6MlLLvCx0rGIuWe8Zsv+990h/j9WtCgKD2tRVnGVZ2IzFWuGss9Vq4fr16yFzXpadTVF0Oh3M5/OCoqOJXGrrtxw1AV8B2KUnwLk1Zs8DgOFw6CZV8KAWjlp8MXexB7aLAo+IkZzWbX8re2n5uxW29lrPmkkJK/u7N59lXbgpi94T2LZtXhlV4ZE9y6KnhNHLwHm0qibY98YfOHevq4taCY5123SYKXKxfbRL1+yzrOeuViuMx+PgreHvVCY1oxNwHlwY85DYtmyjLHnQcUnVybG3XoLY86PXqzvdluv1gZ4i+8c6mAue7mgq8nRJs7ydnR08/vjjuHbtGr70pS+F8rkb0mw2Kyj0bGcdgFUNNQFfEZCENf0e3Ty0XI+PjzEajUJSDrqKCM+1TQtYXZBcUK+72lgBpAKE1/C4nTfU863gZdne3FnKMoxZut5xK6QsAcaOe0kK+Jt+9ix7r42xssrOiwlZvVY9ECQpqxDZazVAy95PW4dnddlkHaxzW0+AnhsjOl3va88jCQObkf22X9YitbD30PaD19n7Zpdm2fIIEmEssjx2Le9X2XPFPrIeb6UCx1E9JQqbJOUNb3gDsizDK6+8gkajgX6/HyLk7VadWZYFuVGjHHUU9BWBEhtwvh5Yl2vcvn0bzWYTw+EQe3t7heQPfDHyPEen0wnLEOxOMyQeGyHL+SAlK/vZusljFpFGU+vG6imXZVVXpnfeNm47Dx45xYSljmUsMlaFpNeelIKRaiPHXoW7tfj0edB75vXHi5rXMnkPWaZuS6f9smNn2+MRf6yPMTIFivEBuiuTtlfL8vpj6/Ha4CmYQHngkY49n/1YH/XeWLe+tttey+P2+WPb+B5z/lyfQy7vUjz22GPY29sLZff7/UKAJq/Rtt1L9/O27+6DjtoCviKgy5kvbp7nIZhKk2owP+sb3/hGvPTSS4XMRQy8arfbgbwZ2QicL85nMgkv2EoFiCXbMgKlkAawQfy6pMfTym25aolcFNYKV6Tcqfpdr1VrUTc6T/XFIx8tV8u07dTzWA7X0HKcmZUI8N28tKp03r/RaKDX6wWXr7c0i/ePBMx52EajETIref3y2q+WmnpcPI+CPn+qwPBvuVyGpTX22fUsWg+xe2LHzXpyvDIsEVqloNPpuMosCVg/63VlCkKr1QreAK7753HgfA9fTe3JuVzKlt3dXXzVV30VAODWrVtYrVbY3d1Fq9XCyclJkBM217xdLXGZuFfEfr9QE/AVgWdharRxp9MJc2X9fj8EYmn0tLok7dwgUCQktYxUUFMIqrVB6CbxCttu73ctA/CX+ZRFQG8Dj3C3IfOYtaSWZRWr1dbvWYSWfGPWnNcmPaZka4Wv1qGKEgWsvX9U7DQhC4N8NGdz2fjZjFremFlLl+PrzWFXnXv0lKKU9arXUflTYo0pGmwPxzNlteofx9wqcDHFzIP1sDAYixHueh2zYSmeeuopAGfPwGuvvQYAhXvrJd8AyoM3td+POmoX9BWCpynzJQXOLNfxeBzOt2t3dd9WLpxXwWN3oYlZDKrdA5vuwCpExs3APTdcLKLUc5eWub09V6MNSLF980jVuv68/npj5JFirI0pqyb13Rtzz0WrFpsdD4/8VQHzCJXPl90LWTd2YHkeuZYFCqaENJ97VdT4XHukpuNgy0/9niJl2yfP1c3zNCDOrmm3bmaeQ2+XZ717z4zWrVM61sNg0Wg0QrpPRpcDwJve9CYMh0PM53PcunWroKzr+AMIqydSXoaHzX18Gagt4CsEWrt2OZLNiMWE6ITVyL1ygbjLzSMYDdxSIevNAWrmLLoPFbpHrW2vxbaWqneNfrbBX945hFUMVDBaa8RzY9rzvDqs0PLujXUX2wjlsiUx6tIEzsffuhJT7eIxVfAYJNhutzGdTgvPgxJ8jOi88q3Fp8f5zGjwoLY1ds9tf7axyjxytXP92l5LSDpe3v3Xe6r32WYkS7VN1/7yOAn99PS0kIgj9qzodMKLL7648Vyr4s/zeU9SimRNwkXUBHyFkOd5SMBBLBYLTKdTDAYDDAYDjMdjfOlLX8Jb3vIWPPPMM7h58yYWi0W4Zjweh4Qc6k5j+cDmfq/8TV8gdfmpwPGWBylsKkEABfecum9jlp7ndrPWm57jKRbWata+2T5aweFZIzH3sRKIvd7WZ8cutqbWc9/q2Om5nKtXBUeTpgDnaQSVTPT+WtLQ52WxWODatWsAzjev6Ha7IZsW+08lQcdI22THuczi0/MYTBhbVmXH345z6t7FYD0FloA10JDn09K1AWJMfgNs3lP2i/Pa3hjo85FlWdidK8/PE8poO7jDla1P5/dv3LiBZrOJmzdvYjweB9nDc1arVViyRNnCPbNj47aNolMFnhy4aqhd0FcMHqnElstcv369cB1fSIVeG4vu1HotobBcLyCKySsWi0VhWZMKYloFGuzjufZs0ItnbabGKUagHix5e25Fr76Y5eURaMzy0GsUMStLv8fKIUl41onu5KRto9BOzd9bomOSDM4F2/NsMJJnIcaQUshIUuq2te5QO0ZWiSmzLj14zxbLsmNNq9Q7d7VaFQiW5/E98KzsVFvs8iL1ONkpH01sonjssccAAK+++moog/ew0WgEr5s+xzbwzWvfZeOqW9Q1AV9BWLckiQ44XyD/2muv4caNGxiNRgBQIF4Ks/l8HiJmdc9Y72WnsPMiOmME6M37lX230Hpj89NlL2GVl1QF2Dbk652TstT1nNg4p8q23gPP0tcdjbz0oLp5BK1b7T+vURJIQXfUYfs0Tao+C543wHogeNz7bMcpRkzqxYndQ0+RrGpR2bK9esq8OHoeLePZbFbYUMOz1j3wfK5koGKbio8g+VqL/Nq1a3j66ac32qHkzV2mvPzoLCfVzhpnqF3QVwx8We2Dv1wug8BrNBph6cH+/j4ODg4AnJGztwUZ3VUnJych/aJHRLYdHgnE5lT53ZJSmWCM1Z2Ksk25H1NC1vbZSyQSa2/sN94vPTdVr15nLSy2wXMf6pjTza/CWK1Qqxxp+zmHy2NlySIAFBK+0GrudDpBSMcsUetVidURe2ZSXgT+Hrsn28K20VOc7P2wLnevPfZdWa/PEo5wCRt/8/rv9YP3TpUwKlLAWZpaa6WSaBnVzujnL33pSyGwjWVRkecxnacuU9Yum3wfBjKvLeArAEsi3oNOQafH1+s1rl27thHdTAK22jhz2tqoVg8qOPinS1Y8t2VMaMUsCGuhaFIQbUMKKcHujYEe177pvKf98/pmx0iPsTwvY1CsT969ta58bSNJmC5JqyB59TQaDXQ6ndB3nTKw7dN7R6JQixc4s8boDo5ZRFUVJO8+sV3eWPAaW64lMqsgpdqg16X6wGPWY5OKmrZK1nK5DP0qW8Zn28t752WnA4rTTpweUoLWNf7aB7ZRrV/e29RqhCoeqEcVtQV8BaCuOxKdXaKwWCywWCzQbrfR6XQwHo/R6/XQ6/Vw/fp13LlzB8D5XA5fEApParbr9TosD/JS/2k7YpauRcrNqtfHrOyYYPUsgTKLx7vW9sdaXGX9tNexzFhQkNcWtVK0DKsI6HWxqHPgzCsym83CZgqahJ/X2Wj0fr8frOaTkxPMZrPKxKlCnEGBrVYL+/v7mM/nWC6XhWkQWtvsr7XI7dha8Lhm/PLWBqcSZZRZ2rH+xjwW6i3QmAV9f2LWrAUT0tj+2jbxP/fvpizQZ5DtGg6H4Vom4Dk+Pg7pbHd2djCbzfDyyy8DAJ555hnM53P8/u//PgCE6On5fO564WLvycNgqd4r1BbwFYElPOsapAVsrV0AhVRyej7JV8tiRKlGybLOy2i7flfBy8+x74BP/jxeBs9K0X5ZazzVjzLrKGXJW8QIInZNlb5q8A4tYSpV2j4leev10OfD9sm2gVGw6/U6TH2Mx+NCEgrOCTOIxz5fqX6Vjbnte2wapMr98+ouO+aVGfM02HaVtSXVXgZ2cYvBdrvtTi3YYCmmoeWGDMD5Ot4syzCZTAIJ7+zs4C1veQtGo1FBtlhFx66kqFENtQV8BaHEpe5jfdGazWZYcnTt2jW88MILODk5KbgjFbrtHrMbqaYfE77btts7tu08nWeBlFkv+jmlWMRIr6pg8eZldWmPjWj1rOSyMa7iQWB5VKi49MQSEoNrNI+zbsahlnysflqfdr53PB4Xlth46Ut5fZV7x+/2fO9+2t/tMxB7Fu3zWOV599rCsfXaby1i28aYtWuna2z0t/UkaFnMjKd1a5CVXXsMnFm6/K5xAQrrtblXSI3NVUZNwFcQqnWSKHV9LXAm7G7duoV2u43hcIjBYIDJZBI0XbtTEoDgrqK1pAke+DvrB7YjppjALHNPVymrahtirkOvXisYOcZ6rqeg6PX8TUnX251G2+d9t22JZTWiwNd6GfVMS4mkzPZZggTOd9oCisqDN858hrhXso2gZrS1pinVcjT1qPZbXfKe+zdGWPp7ym1rr9sGdjyscqpts/dIFRrr1fKu5/k63+p5TfSe6zE9RwOzmJmL9dJLoZstMEraq0ehFrCOz2XhbpT+Bx01AV9BqHtWlwZoNiMAODg4wNNPPw3gbE2wpqnMssydZ1qtVmEhf7PZ3FimwvNi7bLnWpS9TKkXN1V+WZu8tJmxMr3PWZYVEhh45wKbAtBrg65R9TwLqX5aN6A396aWHJ8TClldD6xkrpYPydTCLn8DzoQ0g3KA8ykMkkYqYC7mbbDegar3u8p9VdLe5jkoey6tZespaR5i3hzvswcNtuN42/X8vV5vI1sa5+NZfrfbxWg0wtNPP10IrJpOp7h58yb29vaQZVlItsH7zTXBqeVONeKoCfiKgi4/JWC1NigEmRXry77sy/D5z38ex8fHGAwGgVx1lxuS8mg0QqfTQb/f38i3S6gVYq0BFXIxy9dDmVBNWbC2XfZ3G6DjCUr1HliNXl1xWrYSVcoNRyLkUo88P49UZQCMRrJ7blYvwUWWZYVlZXoNnxHdqUijr3lcd845OjoKGY68+2jdtLSQvIhfu+VejNSVpO35VZ4hbZta7LFlP96ysBQJWovbO1+/c6zVu8BkG55rOuV94Xdv0wNVUNjXZrNZ8DhkWRYC66iwLxYLzOfzgqLz5je/OWQ0WywW+OxnPxtImnP8R0dHuHXrVnje6Jb2tjG8TNh3+mFCTcBXFGoFqzA8PT0NmXAAFLaG8yw4m4OZ5fB8TSkIpAWT52L02s1y9MVKWbBW+HmI/V5mxaRy4XpCRd3+GonO33QXG+uRYBtIDradnlDW83hfdfmNPd8jBlU+tDx1aTIC1mZKK7MIbTpJ2y4lZrusqUxRivXHkr0qK/zO++eRm/VIxNyqnndC+xez4LUNJC+SIIPUrAJr+2vvZ8wrw37ws05JsQ02fzwJVOeUd3d30e12MR6P8Qd/8AdYLBbheioR0+m0oOxRNpTtfHUZeFit6pqArzDU0gDO5+6sy2k8HmN/fz+8pIvFIgiEWJlMyNButzcsrKraaMpyqULWHradX/Lcg1qvdc3xN3UT65jwPA1aUQuTQp33YrlcYjKZhHq5UxDJW93B6vJn25QgadV4c9EpKEl6Ll7+t65nW65nBdLlrOOkc9F2s4ZUtKynRNj7nZpDZx2WwD0lUX+3Hhyv73puFdCrodHe3FlI6+Szk7Ig2X79A3wFgr9rmXmeh3de74lGozOD3sHBAcbjMdbrdVjCRu8MlQegSPSXaf1u+35fddQEfIVhAySYklJ3POFenru7u7h+/TpeeeWVQoJ960IGiok6ut1uwYouQ8pyqIqLzJulzvXaaKORtVy1cq2ioFZDWRtarVZw7zKqmB4KBdtCa8PWxd84RaDj6ylEsekAhe27JUuPfLUctVg9UlVXtY3Yr+IhibWZ8Kx/vc6zIGPWpoUqFClF0Y69bUev1wvH2u12CIC0y6RSbnUl25i3hn2zy8yAs2dwuVwWFEMSv7quCb7rNmgwz/PCvLHdt7vGxVAT8BUH5xApLCaTCXZ2dtDtdvHEE0/gi1/8Im7duoXr16/jK7/yK7FYLHBwcIDlchm0dLWQ1us1jo6O0O/3MRgM0Ov1sLu7i6Ojo6g7uMzSvQgRp0il7IVPCTUVxCpEtP96rtal7n0SFoUb5/usMsPEJlwGwnKsV0F3lfLczxTa3g5C1iq0FqNaQzpna61dKgI6BsyOpnVai8eSlOdp8BQd/c5zPSvTrhmOEbrXRqtExZ4dtRytUmqvsQqmZ4HyOL0c3Cnq+vXrmM1mmM1m7lSCjpt9Xr2205PS6/XQbreR5zmm0ynyPC/M/fI3ZqujcqDej4ODA7z66qshcYu1fjW4i0rkZc//PmpkXifiuKJQYaXCiMJ9Op2GlyjPc9y6dQtZluHJJ58EsLmRPV90Cub5fB5IgtsX2kQVViik3MwXcTXHrLAq13qIWT8pK0bboURALwLJV0mTli+PrVarsPHFfD4P1rCum/WEmKb11OAp/eO912UqhJdYhBYL56spQDnfr0JZx8r7s2NUdn/0nJiXJOWa1rbE7pOOQcoTE7s+RXZemZ5LGzi7n0x0oSTH7QH1fSrzCPB+eeNPktfdq2J9Bs4z3/H8nZ0dDIdDLJdL3Lp1q9BPWux6HeCvdb8bVHl2HlbUBHzFoS8jH+TVahWWHO3t7QEAbt26hb29PTz99NNhvkdJQF8qvsgkDOB8KUNMmFV5gVSjt8LYO27ruBuUubTtuR7JKNF6LnzrjmOGIrsFHFBcTkRo/l7gXEmya7xVKKv7Wt2FXh+zLCtEFlOoc16y3+9Hycsjpapk6VmQqWfGKm5Kap7S6FnQMaUqZYl77bbvlvec2vZSseFaW75jvLccd0YR67XbQqcueH/VQuUcPRU4u3Iiy7Kw9eCtW7cKiVt4PftBaArcsmegCh41q1dRu6CvMPTFt+43at/q+pzNZmi323jssccCQdsyKJizLAuBRPqC83cgbTl6LlwPtgwrwJUI7AvvWbGxOj2hoMLVXmODeWhlAptJI5QMeR0TX9iN1lkGrTVa0jovqII61u6YMqNLejwCtFHIbNdiscDJyQn6/X4haKyKhabja++ffrZ9sYFuXrmEVW48C1afTa9NlkxjrmVrYeo1KWTZeYQ623twcBCUNwbgqTVppwLKyldQ6dLnLM/z4JbmHsOcVlBvB6+/du0a9vf3cfPmzWBNMw8AFQl1M+vSMm+nK23rNsT6qJJwTcBXBGXauoVaTN1uN1iyAHDjxg186UtfKmzEDpxv1BCr384Xl1mVVjinyvYINCbMY2XFSFjJShELxLLXWWgUKc+jlUphyi3lKHiV7Cy89cnW+qrSb0+J8BQXHtP5Q15PhUstNkXsnsaUwbuFkpo97h3Tex9rS+qYvQdlnhnvOfMsdj4bnhLnRUHbfnjPDslX14aznRpsxbZYxXF3dxdPPvkkOp0OXn75ZcxmM/R6vUDQupROlyYSKQJ+VAl1W9QEfEUQe6D5gvDF8KzTbreLyWSCz33uc/jyL/9yPPHEE3jDG96Al156Kbgfl8tlwQXJMk5OToLLejgcYjweFzbwZts8YWcFYUpoEp7VVyaA7byfCmKbwMAjWLru+DsJyApjPYfnqWVhLSfWzwAc4HwemXXYRBS2jdomWjyaeUiXoHnWJF2OLLPX64Vo1uFwGJ4b7lhEYWvJJKU8ecfs2Ol4E1WCd6wXBDh3u+p487sNIrP1pJQZj3jtud7zY58V7zqOq256weu4Pj/2HHjlNRqNECjJ4L/pdFpwN/M8up5ZfrfbxZvf/GY8/fTTaLfbeOmllzCbzTAYDNDpdMK1fHaZ+YqR3AAKMSK2jTWqoybghww22hVAcBkdHByE8/b29nD79u1CQnabyxcoCoNerxdeZC8zj0WZ21e/e4hZ91p+yjWoxOyRgOfiTkFdnOry9dYR2zbq73pdjOBSAk2Xm2gwllUC9BxvOQm3r2NULj0iVrlKQd3IZajiAo55eZR8damWPS+2JCqlKPBzrK32mPe96hjwHlmLVhWyMi8QvVGdTidcN51OMZ/Pwztqy1QF4Nq1a4F8Dw8P8eKLL27MGbM+JW7KESoLtfV796iDsK44PFeltazoahyPx4GEmflGCUJfPl6XZVmw4FqtVljuoLiI9lvFoip7ka2iYIVNlp3vOVvmPqxy3P7muWk1IYcqCHos1h6eZxULJWlP8Nk5ZC2P12l5mqo0yzJMp9OwzMQrh2VpX/jf6wvvhSVc7zd7fdmz5CW4IGyksI5dDJ6ylFL8vHLLPDve+KiiwGdVld/U9VRCuMqB/aZCxbXiVkmkHLhx4waAs6hsWr+8l+otYPCVLj9SUq6J9u5RE/BDAGrUqlWrS4trVE9PT3H79m3keR7cV8D5C07NmUKO0ZQ6f9zr9QqBXRdFGdGqINjGSuZ3XSZURUHwrOkyYoiRlS3Pu9YLKvIEr0dczCvMNZ2e9ctrPLTb7cLm6nQlxpa6EPqMxe7ftgSo8OpUwrdLrVRZTN2LKrDjrMdi7ayiRMSUEw3Y43HbHu95pFLZ6XTCO03vBYOmNCDLBn11Oh1cu3YN7XYbR0dHePnllwuu7/X6fHvKxWLhTmnZaP0aF0dNwA8B1MJRDZ4RkJrP9fbt2+G63d3dDQHBxB4ErV2moWs2m4G4tf6qSLmMU0QZc+um2kEhUZbzN+X+TdXl/aUEUxk5pvqvS5J4PefnPOK0f9a6zbIsJOX32sPv1qK3Y5IivpS1qL/ZMtRjoH8a56BjFQtus3V6/UxZmd69T1nHXjkeUdt7ovcv5lXgdwb1Mcc0VypwD2+7PE4V2VarFZJzzOdz3Lx5E8B58CXJl/DSkpZZv7VVvB3qOeCHAPYF50s3m82C1TAajfDqq6/izp07+PznP483velNeOyxxwoR0uv1GrPZDN1utzAnNBwOMZvNMB6Psbu7i16vFwKyyoRRimis0PFcl/a/Z6kAm4E5/I3CWsdFQbd7bAztsRiJKqFopLiNcI0pBVpnLMevkiL7ZNcHx8ac6zh1PScTtsSSN1jisu2zwVp6n/Q7YeeLte/2HmuwkkWWZSEQUAnNI79Yn+xzpsd1fHVsYs+yvd62wY6ZHScAQVm2bdfrSbxck39wcBC8POv1OiT54HVMypNlZyllh8MhnnrqKZyenuKVV17B//t//w8AMBqN0Gg0QpDVyckJJpNJYew4787ljVW9LTXSqC3ghwBKOvrSrFYrzGazjZeDVjDndNXNR9jF+twoYDqdhshoTSRQhpg7tswVzWu83MWeq1CJMOUmJDxS9gjQsypj/VTY+u0OSvZctQhj/bqI+4+WFtd1AullJLZNHrGk3Oyp54L3kxZZp9NBt9tFt9tFp9NBu91Gs9l0CbiM6PRz6l5413tjXmY9V33+9Rp6pKySoWRr+8DlRtzKkmv9rTKkS8h03W+328Xu7m7YcvDVV18N9XIVRbfbDUsNVVHj+6/BV2XvVY1qqAn4IYAlYP7RPUXhS6v28PAQr776KvI8x2g02tiUncsOVDhwXoguz+FwiH6/v2G9KspezJTwruqO1mMxYooJW8/9WRVl2n/K8rdtsK7CmHKh361lpb9542qzSPGYrc/2wRsj68pOkaElaU0eoek6CevuZnl6PFWfjoP9nII3NvY+aPCaDbTTc71x88Y/1T5N2KK5mTkNwUh2PvM2g5pmuet2uxiNRrh+/f9v78pjJDvq89f3Od09Pefu2usjxjjGB8GA2UQoUrzCcawc4D8sZCUoQYmAJeKwkHAODIkUo0QiChGxohw4UqJYOAok4RKODU4wC5jFBtsQY5tdz+7OtXP0fU9X/hh9Nb9XU+919+54Z2e3Pqk1Pe+o672ur35nFZFKpbCwsID19XVPOkouxFm2LI9tkT4HDjsDR8AXCfwIWP5YqEaiMxawaQc2d+dhOAonzF6vp1MqdjodVCoVhEKhbSTMdkgMkoyGkSLkZBakOvQr15wcbe3wU3fapNJB5GvWa9Ztm6yHITEbhj3O8kh8VFsOE4trluHXXhtpAVsZm0gktFfyPjrMSWchmQRCkl6/39+2kUWQ5sT2fvgtyMzx8FuoBUn+Nk2J7VnK49Kr21ysUDUs+0F1M6+jGYK/b6a/pLo7k8lgfHxc+24sLS15kvQwLzUArSWRBGzal81xdoR89nA24D0Ic1LhJEa1MW2a3ANUpkPkJLa0tIRkMomrr74avV4Pc3Nz2qbLCY5ZcWhLYqIO7raSTCYxNTWFaDSKarWqf6AmUUnJTPaBP/pBTh3DkqvtGlMylmpF/uXYmfukckJmOXIrQL9nYR4HtidHMSdg2z2yTFPKNSfoYaR5pdQ2swJt1XLhZotpls/SJDJb/2XbZJvNbf5kXVRzcrx4L/tn5iMm/LQesj5Zj98YSV+BILWz2X8pCdt8BExHJj/thBw3uXCRKWD5vGSWK2YuY1+52QefTTKZxIEDBzA+Po5ut4sTJ06g0WhoWzIXZEptxhLXajU9zqFQSMcam97UfuPjMBqcBHyRwG8CkblcE4mEZxuxlZUVJJNJXHbZZcjlcp7yaAeSE3ez2UQikUAkEkG9XtcTUDqd1jHFRBBpSvK1SYg2mOpV87gJqfqT9ciJX46dLEsSiyzLJE2TdILaPcw50yPWT4Ji3RxD2ktt6lu/ukaZOIMWOIMQpKUYtm6TfP1If9D7F1SHlIBt76Pf/XLjBdtC0kwGI0N4+DugRkLWIbUGktylJobvralNYNnRaBTJZFKHHbXbbSwsLCAcDmtHS5Jrs9lEvV73jLNc4NkcrxzOHY6ALxJIUpESEx2nNjY2tLqJ15dKJe0BXSwWPaouqv+ozpI/zFwuh3a7rSXlRCKBVCplTY4A+JOmjQyD1HZ+6mu/kBFZnm28TFIeRBTmJD1oMhqVoGQ9trbaFlecaCUJ28rihC0/tv75tcEPg8bBT43LfnGB2Ol00Gg0tPqT75yZZMQmOdrA60ZRsZvtHRXsI9XptnebbeKigpIsnfNkvdJGzjbJtKZMrkGYKUoTiQSy2Szi8Tg6nQ4WFxfR7/c9+Z45to1Gw5MVD/DOI2beeIedgSPgiwRyUpWqP65uGSsobYByo/BCoaDtufIHLmOJJQl3Oh3U63WtLuQOKuaK3yRPqRq2xX8GSTFBx4MkYz9itpUhMcgu7Pe/Xx1+/TFVj/Jak7yoWuVixyRhqV2w9U0uIMz6bHX6LXwGwba4Yv3S0ceU9GXeYlvssnx/CLO/HCPbcxnmuduebdCzGwY2qZpE3Ov19O+Si2Dpl8FxonQrdzOSOxPJGOB4PI5kMqm3Iy2VStrxknWwXzQxyT5JtbZpn3fYOTgC3oOwqcYkAZsqXibapzOLVGutr68DADKZDLLZrLVMOZFSYqZKi3GkdBaR2Ypsk7ctVteEJOsgmIka5P2mNGsr0+8cicemzh1VlWsjgGGlMpMIpIpTtk8ek8/YzBzFcvwWCyYJE/JZ2hzu/J61Sa4yFMpG+HKhMWiRZdZtO2YzPwwLv/aZdZjvoDkWfuXIetrttvZqZggWn7fpeUwNFlNRsgxzx6J4PI5UKoV8Pq+lX7ZbvhMkX0rPZgiezSmL5TicO5wT1h6FOVHyxyonYJmmsFKpYHx8HOl0Wjtq0PmqUChgbGwMV155Jer1Osrlsi6z1+ttc+ZqtVrI5/OoVCqo1+vodDrI5XLI5/OIRqNoNpuejDkkiSDJV/ZFHpPf5eTmN9n7lWeWaR6jty2dsaS0afbDVnYQbBOyOQnbYOtPp9PZNuGb0omcRElE3BWJUk08HkcikdDvgdkO9j2oXfJawK7u9SM/sy45rqaJwtxBSDrHmc/ajLEe9MxYnx+h2J6TqT0wxyJI42Jqh/idJDg2NqaT4zD7nFJKZ6Dju8iFLNX3/E0xSU6hUMC+ffswNjaGH/zgB6hWqwA2F9psC1NNckEkF1d89u12W7fDtqhwODc4Ar6IQMKUKmZga+IOhUI60QETsFcqFaysrOhA/Hw+j1qtpstkeZz0pONPLpdDuVzWCT+YSIEEZgtLGUQ2JvijD4oDBbyOVMOSpN95OqZI4h92wrFNzrbFxKD+mhO2BNtmOuHwnFwsyPaYhMq0hEHtkJKV2U9e5yfR29TFw0AuHABYyVeWz2tMpyH5/PzeD79FWdD4A9i2AGB5ZpmDnre81/zL9xDYJE6aGhhyxKQ4ckErCTgWi6Hb7aLRaOhz5jjS1i61SHQMM30/humHw2hwKuiLBObkRNhUegwtCIfDaLfbnvzQ9JiUsZq020lQomJSf5krmjsmBUkCg44RUrVtHudEeS6J4eWEJz1IbRK1+T2oTJuKdBBs6vGg80GSyKCJ0vT8HgbD9onnza0tg2BKszYPX2kSMcuV6nE/L3fZh2H6OQxs6mn5v/mbHKSSZl/M/+W7TucsUz0diUSQyWSQy+V0fL/0/5DjIbVj0nbMcgB4EnI4qffVgSPgiwj8gfoREqXgdDqNeDyuJyxmxgI2vaFjsZjHxsQfOvPvAluEy3SCdChRSukUl2Z4DNs46IccCoV0uTK2mSpUTki2vpqTm1/5hBl2YqokB0lC5iQ6Ktn4lSmv8VNh80MpiOpav/JNpyabjdSm4jelRj+vc2kTldtASnI0Vc9BkIss0x/BrF8uFiXhmd7usr82nM1iSfbrXIjKlOjleLIvMtJAej2Hw2EkEglkMhmd27nb7WJ+ft6T1938zZi5yWV9zvP51YdTQV9E4ERl7mhE1Ot1vXpOpVJ6s4Zer4elpSXthMWwBaq8aHckEokENjY2UK1WkUqlkMlk0Ol00Gw2tZqLNivatoCtlbcpycn/TYcqqhRN+IXSsMxhSN6mqqZkL9XQnAhtiTj8yja/m+0ZRRNgU5VKc4AcC6WUVlPKfnLc6R/Ad4UqRqn2lY5ytvHie2GOH8u3Pd8gVbW81ubBbS4cWJdt3Gz2ett1En5k6qeeNssalaT83iE+G3OBk8lktC8Cn12r1fKMJ52uqKoGNnO+r6ys+NryKf3K9lPzZW7y4fDqwBHwHsCwdjRp+2JYQ6vV0hNbqVTSe8Hm83l0u12MjY1hdnYWqVRKezWPjY3prerkaph19Pt9TcK1Wg3pdBoTExNYXFxEu93WNmhKwpzo5YTPftmkPGBrMwjpbGLaI202OPmX3/0mWL9rpB1dbm4ubXKyDTbYSMiUMge1I6jNgN3pSW6+LvMJU5tB8gSg9xSWdduIknWbIWYsz7RBm4ssGRYnjw0yHUjp11R/y3bId4RlSzW2bK9Zvo1Qbe9LkC3XL1zNVrftneXvNZ1Oe0w6NPHwvUskElBqM2aX2eiYxzmbzWrpd2NjA6dOncLS0pJnPKidYvn09eC7TdMUd0NyaudXH04FfRHA/FHLzejN8/xhEbOzs0in09p7uVwuawcrZrfipMzVMidO6SkJbIVIkCxlsnebupKQE7tUV7IvjJU0icEWJnS2konftVLS88syNWy55mIjaEyC6hmkwga2xo1kyA9V+dLb27RX2tS9fnHK/M53zswGZd5rPt+g8TJVx/J+czFj2jGH0YDY6txpmItCvzAuxu0SpiaGz0LuAU3ipvMj87V3u10sLS3pqAjWIctjOKHtHH9vOzUufu+7g5OALwqYkhPJkitaebzRaOiYQ8C7TymwFYcIbGa8qlQqnkB8qii73a52tGIIVDab1RK3UkpLXa1WS+ettZGO7cdJiXkUteG5TBjmGHIBYUqro2gjJBlI2560o0pJzZQUh40XttUt+wFAmxeCMIw0b9YTJLUD/rs1DTuGZjvMRYoZcmW7z1aO37lRMUxZtkWhPEb1MaXTdrutf4fUGiWTSXS7XY9JR+4qxe0Ge70e5ufnteOV3Ota5ouWec+lVsT09dgpOEnaDkfAewDDvrwmgTBcQcZ5mlltOIk2m029W4pSChMTEwCAarWq7U0yzInlcwJsNBrIZDJIp9PodDqIx+PalkyblVQ/+03cNo9r2T85ibOcoDAYiSDbntkm9o2TvOmsMgzhSwnNr15ThWs7HqRal20eVrXtZ9sLUtf7SetBpGOqkIPIyrTbDiPJysVjkHRua7ft/CgLkEHS3CikL1O5bmxsoNFoaAdEPqtut6t/QxzPaDTqCR/M5/NYWFjQMb+yPrkQosZKLn459n45rUeBk3SHhyPgiwTmxCXjduUm3gD0inpsbAxra2vI5XJ6w+1arYZyuYxYLIapqSlce+21KJfLiEQiOn9tu91GOBxGp9PxhDd0Oh09abDuZrOJSqXisTXyL7/72XVtEpP8Oyg+1bx30DU2tSalA7kdWxA5mBO6zXZJla2MbTbHAfBKxLKNcvzk5GpK2Txm5v2VUo/Nacm2yPE7J8u1jYU5Hn7XmnUNUlnLNIm2unjsXDCsScBPvew3JrJvsVgMhUIB0WgU7XZbk2ckEtH+FLFYDJVKRSfOYF3pdBrFYhFXX321Vj2//PLLHi1Wr9dDKpXS6uVarabNU3yv6M/BpDrnOm5+vwGH7XAEfJFBTqamMwx/cPV6XdsBAeg0dcDWSvuVV17B5OSkdvCoVqua9MxQBmkLNichOjPJNpjS0LASho2ARpFOTOL0u99UZ1IdLc+b34MkRJIey6VELQkxKMmIWSfLJ6GZx03ilupFeZx9kiQcNA42KTqonWZ5ZirNQf21vSvyfJDH87AY5t5hpf9B77VJvoyZ5+KOTlEkX9l/2n3lvZlMBhMTEzrhxunTp611U2PV6XTQarU8i0Hafpm9bqfhyDcYzgnrIoQpWUqpEthcFdO2C2ylsZSeyuvr65ibm0Oz2cTU1JTevox2X7lhOidCmZWHhMOYYolhVVSS8E3nIJtEPEgi9atj0DWsc5R+mOVKVSxgz+5E8qTjmpRyh4HtOpYHbDnwAN6sWKbWwc/2baq6zX76jb8tZMxv4WK7xvxrStJBz92mUTERpNEwVce2vpi/Lz9I4mOCmXQ6rTVPJFs6/rHMVqu1bcEbjUaRz+cxOTmJUCiEWq2GpaUlHYPNd4h+GL1eT5uSJPnynZbpLM8GTu18dnAEfJFCEhd/8NL212q1UKlU9JZlpterUgoLCwuoVCrI5XIoFot6O8N4PO7xeiUB88csk7eTgM3JW35sGEYq8VNXjwpbXeYkK6VH2QZbu/yOSRI2tQJ8RqO2P4hUpGQtkyrI5zFo0vWT/iSCFj9+kntQfbZnKbUHAHz9BPzqGYbozXb79cvPTyHo+cm20yzEhDitVktLvPF4XJs+qCmROxWRYBOJBKampvRvdX5+XvthyMVVJBJBv9/XGz7IceR7wMWzn7ZhGDhJ9+zgVNAXMWxJOaTDSr1ex8TEhLYHc3tBOm7V63XMzc3hxhtvxPT0NJRSqNfrALZW5aZkB2z+GJlfFtgiYZKAOTkGSR6mCjTIzjfs5GGWY0pAkpykatg2QfklCvGDvJYTpWkHluFBJomYk7yNIGXoCUmY5giGlslJ11x4DQr3Ole1r6wr6LyszxaDHHS9X5nyWdpgvgPShCDbbI6brN/mqGeqfdPptE5aw1zNMmMVs8s1m00PcVKqpdMVvZ5XVlYAbIXNNRoNXR79NuT7RC2HUspj93VEen7hCPgihrk/aCgU8oTXAMDp06cxNTWlA/lXV1c1CXc6HSwtLaFYLGJiYgKTk5NaCq7X6zokotfrac9nYGviabVaSCaTKBQK6Pf7Oue0/LH7SUTDql7PhpRN9ap5j5yo5CTLRYW0nZLkzAnZLIfHzZSMJEd5vyntybbZPJhl9jBqJDhZkzgSiYQnvzd3QbL12xxPKbnxr1JKq8mp1g5SK9vIyAbbM2c/lFLbNBG2Zx1EtHLc/RZVZvl8NmZaSLNvZv1mm5g0g/G6DAuU4UIM76M3NImTKuuJiQnMzs7iwIEDKJfLOH78uCZfmUAHgK5neXlZZ7Pju8D3oNlseiTsUXGuC7FLHU4FfRGDExYnSP7w5MTb6XS052UoFNIek1ST9ft9LC4uotFoIBwOI5vNahKWHtCsix9OLsDmyj6TyWiCNtto+1CqDvr44dWwR7E+qar3s6P6tclMs8kFkV/av2FU9bxHLmr4od2PsdnAVpIWP4ebIJWrzfEqFArp9KZ+5diIeZCUKonLRnp+kAsP08vcpg631eu3gJD1m2XbrpWaIS56uQNVr9fTMfmMUmDyjVAo5MlSRqk5m81iamoKBw4cALC5eF5ZWdEL5lAopH/r2WxW72hkJt2QizD6fZwtHPmeGxwBX+QgMbbbbe28weOUvrivL9PdSQIOhUJYX1/H4uKilgJyuRxSqZTecIHlSScsqqspsWQymW3JIEwpI4hchyXcYcn3XCYO6TQlMciGayMpc7cZEoBftqig8aH6WtonmfWIEzo/gyQ/W/kkb3ktJ3Q69JgkO2zqTvMaU93u58Rl3jPq4mvQwkZeYyNhW5Y32/tsqv+73a4258j+UTKXXs9ME1ksFjEzM6Prm5+f179JuRjMZDJavc1NU+QY8d1qt9vnHPPrcG5wBHyRg5MGV8a0x8qcwQBQqVQ8Nk8ilUpBKYXl5WUsLy8DgM5ZS3WaWRdJmNI1J6BCoTB0u/0kC3luWCnKr5xR6jYhY52D6rCpSKWUb6vXZkMcViVva4eUem0EatZva5NJQma/ScRm2NkwbQ96VqGQf25qWztlfX4q8WGkVj+CB+zx2sMsmKgxkvvsJhIJ/V3G7spMVZFIBNlsFsViUZd76tSpbZotpRRSqZQnn3S1WvVoBaj6Zkz/uUi/DucOR8CXAKR6WMYeypUzf6z9fl+TqpyEut0uFhcXsb6+DmBz32AScCKR8NjcJMFUq1VNwsyUxbJtakqJYSQ0v8k9aEK3TfhnI0GZcda2+s2/bLPf9baJ3EbiEjKpgs1ubEJu7SjvNSVPP/sew9YIcxK3SYV+8HvGQepdeZ+ftiBI3cz/Zf/OdnEz6NnwOrZTJsWRCTMA6EgFaZONRCJIJpNIp9Paw7ler+vYfe6Vzd83zTz8Pcuc0qwfgEfCdtg9hNQe1D9UKhXk8/ndbsaeA/cLjcfjWkUMeMMqstksJiYm0Ov1tEMWs2BxxV0sFvGmN70JAHDy5EksLS2hVqtpm6+cJDkp5XI5zMzMIB6Po1QqYW1tzaMe81OJ+mHYyc9sh1QJyjr9bJjDSMucRM3YVHMczF2DTKcrXivv81M3B0muLJcTbygU0mlGZTwznejMyViSsZ80KceRDn5y4RUkSQaNq0wiYnpn2563KZXaiNaMuZZ1DRv7Kt8h830y+2N+D4VCGBsbw+TkpLb9muDOZfV6XS9uUqkU8vk8xsbGUCgUtAnnxRdfxMrKig5jkili6SDJOH9qJaQKvFKp7Fi+Z7939FJFuVxGLpcb+vpzkoA/+clPIhQK4YMf/KA+1mq1cOTIEUxMTCCbzeKuu+7S22IRc3NzuPPOO5FOpzE9PY2PfOQjr0oWFgcv6JAhJ05pZwKgs/EkEgnk83lNGoz/VUqhVCrpMvfv34/x8XEtBZvgj7NSqWhvzVwuh/HxcaTT6UACDLIJm9KqeY1pU5X32a63lW9rl61/fhmZ/CRqU9qV15i2wFFhm/z91KNmm0wCtal+/ULOhm2r34LCdsw2fjYti+mRzP6Yiwi/fo8K870cZCYg+QHwOEQB0ClJmaWKYxmJRPT2gjKZxpkzZ1CpVKCUQjKZ1M82Go0iHo+j2+2i0Wh4diMDoElYKbXN+91h93DWBPzUU0/hb//2b3HTTTd5jn/oQx/Cf/3Xf+GRRx7BE088gfn5ebzjHe/Q5zc2NnDnnXei0+ngW9/6Fv7pn/4JDz30ED72sY+dfS8chgKzXFHFJb2Y5UTESWJsbAy5XE5LUVRd9/t9nDhxAsAmUV922WU6n20QqtWqXt3n83kUCgUtmbENQWo8P7vcuZKxvEaSjB8Jm+X4kYCtXB4LkqZsfTDbbBKRKaVK0qWqmZBbz0mHLdt4DAOl1FBb2PlpLAaZC0zp+2wxiCiDYNMyBEn68hhVyIzRldEClPRNr2du0BCPx7XtttFo4MyZMzrkT0r2bJ+UoKXmRXo+O9XzhYOzIuBarYZ77rkHf/d3f4fx8XF9vFwu4x/+4R/wqU99Cr/0S7+EW265BZ/97GfxrW99C9/+9rcBAF/72tfwox/9CP/8z/+M17/+9bjjjjvwp3/6p/jMZz7j2SbPYefB1S+9H03JiP+XSiUtKdO5gz9khiktLCxgYWEBADAxMYHLLrtM26NkffJvv9/H+vq61nbkcjkPwctrg/owjJTJc0H3jlpPUPnDOGX5TdijqkBtDlAmoVE1zmT+wObil+FjzB8sc1IPCz+VNG3Dfgkq5L1+9Q0i2yCtQhBBD1IVj1IW7w36EEy6EQptxpFT3S8dI+mZLmOc6V/BrQq73S7OnDmDcrkMAB5bLsHEHaZnNMlaKaXjis8Gw4yLw2g4KwI+cuQI7rzzThw+fNhz/NixY+h2u57j1113HQ4ePIijR48CAI4ePYobb7wRMzMz+prbb78dlUoFzz//vLW+druNSqXi+TicHSitcGcV0+EqHA6jXq9rGy0dN0iSyWQSkUgElUoFc3Nz2hlkZmYGuVzOc61NaiiVSh4SHhsbQzqdtpLKoH7Yrg+awE315CA1t4mgRYJN1WmTimRMrSS/oPvkAsU2ribhJpNJpFIpvaUdnaI4EYdCIR0iNmxs7SgIKnPUskbRCvD7sOrnUc0Qw7wr5vl0Ou1RI0vJmceoPSBisRjGxsaQzWYxNjaGVCqFUqmkTTjhcFh7RJO8AegwQBkexe8MR9sJISdI2+QwGkbOhPXwww/j+9//Pp566qlt5xYXFxGPx7eFm8zMzOiJenFx0UO+PM9zNjzwwAP4xCc+MWpTHXzA5O+9Xg/j4+OIRqOePURDoc3k7t1uF+Pj49q2BGyqM6enp3H69Gmsr6/j2LFjWFxcxPXXX4+3vOUteOWVV3D8+HGdxcecHHu9HtbW1lAqlbQaet++fahUKqjValo6H4YY/OyE8pztuGyPPGYL/5EwJ3VT1UuCDXJM4X2DpGu/41IbYbbLhJk0RNohG42GtY3m4okLBD8nJ9sig2pV2/GgfppEZz4f2+LKpqY2n4lZl3xvgsqW/w96ruY9oVAI6XQa+/fvh1IK1WoV6+vrUErpeGlKvJRKI5EIEokEcrkcDh48qBPhLC8v4/Tp0wiFQpiamkKhUIBSCktLS7ouqcKWiUiSySS63a7OeHWu6mc5To58zx0jScAnT57EBz7wAfzLv/yLJ/7z1cZ9992HcrmsPydPnjxvdV+skLGAsVhMB+6HQluZjXq9nsdTmUkewuGwtt0qpbC4uIif/OQniMViuOKKK1AsFrWqmjBXzf1+H+VyWTt05XI5ZLNZnQhkFNjswKPaM2UZw2yKMCy5y++yjbY2+8Gm7vWzOZqqbmC7RCpV5abEaLbJJMNBGEYNHHSfqaUYtuyga0yJeJjrZZuHNXnwPLcKpCDSbDY1+coyqY1SSnk2WZAJblZXV7Wph57Q/f7Wvr60JTO2WGbokjsdyXzSOwFHvjuDkWa6Y8eOYXl5GW94wxt05psnnngCn/70pxGNRjEzM4NOp+PxkgWApaUlzM7OAgBmZ2e3eUXzf15jgqtC+XE4d8iAfxmTSBKipEwopdBsNlGpVBCNRvUirNvt4tSpU3oCmJ2dRT6f1+Epfj96pRTK5bImCD5b6d05DEax7bJ/8l7zGP83CWlUdaa814zVHdQ/m9rTJFlzO8hB4PMOCtmR/TE1EYMWHbY+yD7L/phlmHZlPxPBsG2wjfsg6V3WPWzfJGjvLRQKmJiYQDqdRqPRwMrKih5POa5UH5MsE4mEVllHo1E0m03Mz8+jWq1qhyxg00djdXUVADzvAdvAttHZbicdr3aKwB02MRIB33bbbXj22WfxzDPP6M8b3/hG3HPPPfp7LBbDY489pu954YUXMDc3h0OHDgEADh06hGeffVZnVQKARx99FLlcDtdff/0OdcthWDSbTa26kh7JdKjiREHHnY2NjW3J3oFNEqZmYmZmBgcOHNA2SAmbhLW6uqq3YGPMo7QlD8K5kq9sl01KHaXsUa9nO/zIXRKuqS6VkKpi2vip4eA9koAH2TFNT/BR4DcOpqrZrFOeG4Z4/dTuQfUEqcFt5Ov3TGz3kTwzmYwOLVpZWdESqiRBpg2Vqmfez12OlpaWUC6XoZRCLpdDKLQZw1sqlTz9tJkIZGz6ToV4jrrQdRiMkWzAY2NjuOGGGzzHMpkMJiYm9PF3v/vd+PCHP4xisYhcLoff//3fx6FDh/CWt7wFAPC2t70N119/PX7zN38Tf/7nf47FxUX80R/9EY4cOaITlTucPzSbTWxsbCCdTuttCWkPZpD/+vo6JicntYRarVZ1MgFum7axsYEf/OAHWFpaws/8zM9gdnYWSimcOnUK5XJZ26iobpNoNBpoNBrafyCdTuPyyy/XCQXo2WlKSNKeB2Dbd3ktISUrCRmSZSOfQTZdP7Uljw+SJOV9sl8yWYTNdmneL8uRqmaGwADYtverTc3qF4dsTvRmWwZJj4MI0KwH8I+J9lsg9Pt9z/PktRwTk2j9nt0w/aKkGY/HkU6nEYlE0O12PXZ21ik3laDUGg6HdbKNfD6vfTKee+45rbbOZDIIhUIol8toNpsIhTadIelY1ev1tAo7FArpdLNKKZ3jXfbP4cLBjm9H+Jd/+ZcIh8O466670G63cfvtt+Nv/uZv9PlIJIIvfvGLeO9734tDhw4hk8ngXe96F/7kT/5kp5viMCQ4YXBbNE76VJV2u12sr68jFotpc0Cn09FqL6bXY7pKYHPSHB8f1+kvpZOVqZKU7VhdXdVELyXyer1ulWxsakWbajVImpMhG8z8JWNaJSmasE3Sg+ozydlWtknsZplB9ww6JgldEo5fOFiQNHg2sC2SzPYNC9uihFKlWebZqGH93iVg672Jx+Pa3NLvb+4CRt8J2zOUKmOG9tFmzL24Sb6JRALZbFZrqki+kUhkW+xwKLS1MQYAT/Y6jovDhQWXitIBwOZkwnyz0vkqFApp0qS2IxqNevYDppq60WjoFfjs7CxuvPFGdDodlMtlrK+vY319XduuaJ8izIlqdnZWJ46v1WpYW1vbpkozidiUkuVEKa+TKjsAegIFtsiJkoY5sZuwSeXmOb97g2ySJEM/VayN+P3KYSwpQa2HtB1zUeSnAg5SB5sLFT+p2ESQennYaclclLENMrSN56ial8dMUvZ73uaCkeTLfZbpuNhsNj2/HbNcOe70ozhw4AAmJiaQy+XQbrcxPz+PEydOIBQKIZ/PIxaL6bCxWCymNVNra2t6ocxMdHzOGxsb+je6B6f4PYtRU1HuuATssHcgJxtm4+GkwH2EOVH0ej3U63XE43GMjY15vOCZh5Y2416vh5WVFb36TqfTup5KpaI3g5e5imWbwuEwSqUSCoUCwuHNPYiZt9rmcMT76TgGbCc/P2IkQfE8VYi2a4PG0JROh71flhFE4H73DIKfVGwr30a6w9RpHjfr9FPxmu2R1w5SZduulcc3NjaQyWQ890utho30/cwVtjqpdpbk22630W63tcrclHxJwAC05EyNEvM8VyoVz65jUpXOhaJSSntAU+I1287FsSPfCxtuN6RLGOaPk6poANuyWnESqdfr2kbMnZAoHch8s/TgpHMV89rScYuTpMz+I//2ej3tbAJs+hrQqcuU0s7GU5cTFr2/KdHIzF/nClOq95v0g641JWy/8v3qN68Nkpb9vst7/ch0UFuCyrf9H9QXvzaaZMvFHJ+rLUubH4nLcvmhSYbkSVsry5O7GBFyZyhpP6c5J5lMYnx8HKFQCK1WC4uLi6jX61rSBTbjtlkn+yalbNbB/nEhINOMOlyYcBKwgwetVgvNZhOJRAJjY2PamcT8cQPQjlvcgYVOJQz4f+mll7C+vq7DkiYmJtBqtbC2toZarabtyHSaYR2cHDc2NrTKenJyEplMBs1mUzttSWlXOteYUqlNqgyHw0ilUlrC4JZustxhpDC/6yQhmMQq22vCTzxI69wAADYYSURBVOVs1iXrM9WoNtW+X55u2XbzGpu3tI3AB5HpILIzFxx+fbaNs81+zbE1CTebzaJWq/m+G2Z/zG0Veb3c95iOUDLPNwBPLD3TTNI2Tam3WCxiZmYGoVAIc3NzmJub0xI0JWIuiNPpNLrdLmq1Gur1OpRSepFMcg6FNjOc0WnR4cKHI2CHbeCKm7GJcvs0qqMbjYZOyMGdW2q1mvbGZN7btbU1AFtOWZlMRq/OJdHK9HnAljMUsBVCE4vFPLY9xij7qQr9CI7pNeUEHYvFtFovSG07LILaQ2nKj6iC6hqU5tEkaBIGJXt5rXmdrTwbUfnZ2v1gU88HqbPlfX7nzPOsw9YXm0f0MO3mO+i3YKDUS98EPhu5P7aZ4zkSiSCdTmN8fFynb/3pT3+K+fl5tFothEIhHQ3C8pLJpDYBkVylRE4NjlLK7fO7x+AI2GEbTK/oaDTqUWcxSQBJk0kC4vE4Op2OJ1F8u93G2tqaJmmu5AlKnPTwZL5iTlxc2ZfLZRSLRc+GELQLA9ulI9vkSumGTitS4qMTmVmeWWYQcQURWdB5s41m/YMk8UGSJfNB2yZmmzTJhQl36/FTO8t6TLu6rb2DyDeob7K8YcwDtnaa582yzHZJ6dqmlZDky+Pcc9dMkMHzqVRKk2+xWESv18OpU6f0YjISiSCbzXr2+AWgnbtYH00xzP9Nsnfbuu4tOBuwwzbQIYtxjDIcCICWpur1Omq1mp5kMpmMtqnSXgVsTlQrKys649nY2JiOe+RuSIA3ZZ5MVM8Jb319XUvLqVQKY2NjQ2/iICdQ0wZNid02KQ+rDrZdbztnpom0TfhB9shhYNZPAh4mA9egckfRBEjbqWke4Hlb+WY9fmYEU3Utj9EPAdhKoSoXFH7qbFv/uBAl4UWjUR1/KyE3Nun1etoJUY5DsVjUXs8AsLy8rH0qGBNM1bWMFGi1Wp5sV/yQoOVe3w57B46AHaxgxqtms6lz20pwkqvVaqhWq3qPUkqsnCCAzQmp1WpheXlZSwbxeFzv9kKpgSo0ki5VcbQ5K6Wwvr6ObreLaDSKiYkJjI+Pb1MxEuaEzg8daBKJhFYXSunXvF/2OQh+6lMSryRgGZfqRzh+ZDQM5GKDz+FsCJj1m2rnYeoOKs9Pkrb9bxKmSbZ+EjVJkpoYbscox9bWbnlOqnkl4TG9o21MaH4h4bOcZDKJ6elp/V4vLCzgxIkTWqUsd00CoE0HGxsb+jcgnycdIGmHlpolh70Bp4J28EW320W1WtVb3MXjcb3hdyKR0JLF+vo62u02ZmZm9OTS6XR0AgFOHuvr65ibm9OxxMBW/txEIqFVbFIKTiaTWr1GSWplZQWhUAj79+/H+Pg4CoWCTtFHVTZhTvZ0oFFqK1mDzAxFgpLHTCIYZKs1zw9SJ8vzUn1rOqXxvJ+NzyYNcpKW+z9TRepHXH6Zk2xSpt8YBGXMst1rGyNTdS/7Ls0JLI/neIwOTYyNbbfbSKVSet9cmy1Yfud7n0gk9HvV6XS0rVYSMwCd+tN04otGo8jn85iZmcHU1BS63S6ee+45nDp1Co1GA6lUSmuCaONl9ituxcr2sG+Uylutlv5NOul378FJwA6BoGewDCfiRE5pVymlr6HjlrxGrurX19c9YUzA1p6pxWJRq7B7vd627dNM1S1twKFQSG9tGOTcw4mL6kgSvtxwwkYEfhhWGjVVqPKY33G5q42UXIetE8A2+yBhKytozEwMq4oO0gjYpE/5bP3qNWHbWEIuuszQoGQyiXQ67Qlns4G+BpSYAWjyZX2MAZYmFOkgRU1QLpfD9PQ0pqenAWyqnefn57XWhaYUmn6ALbtzvV5Hq9XS/hYkfW4RSsnXke/ehCPgSxx+k6yEzGtLEiakx2e9XveQMCcFZgsCNlNKrq6uepIQcFJJJpMoFAqasKkGV0rp+yUhr6+va+kgFAqhUChskxrlZCgzBlG91263tURjSlx+YzMKCZpSaZBN2XRekm1g+21EZhIWr2XKQqnClPWYbfCT7AdJ+kH9Nq8ftBEEIYnVb1Hld62sT9pigU2SZCgQ7brmM6IjFFXC4XAYrVbLM4YMAVJKeZLWAN7xleQbj8exvLyMV155RZOvdJDjsXg8jn6/r72eeYwLMb7DrVbLU6/D3oMjYIeBoLTIyYBkyB8+JVnuUQrAk/qQ91AVWi6Xsbi4qLMVAZsTUSqVQjab9ewlLHdfYoJ52taU2tzOkCQMQNuEbYQk1YXM2CWlX/bJjCm2qVz9JFdZnxnCMsxEKe3EJqQ9MYgkKZ0x6YkcM0plZpmD2jhIgh0GQfZf2zV+ZG2WM6gtcs9dAHrnIfM95nMbHx9HsVjcJt0S0lShlNKqZ3mc79DExASKxaI2zZw8eVLvcESipwYJgI6r73Q6Ot5XakNIxJTuXbKNvQ2XC9phaFCqospMEh9X5OFwGIVCAfl8HhsbGzr1JAAdy0hks1ns27cPExMTKJfLmow7nQ5efvllbYeVRC9ttGbC/Ww2i2KxCGAzvKlWq+mJjflZmbeabZF2Q9kXwD+USX437cR+15vX+d0niVfuDkbSpBTmR04k32Kx6MmlvbGxoVN7AtALILaFNmI5DuFweNs2ejZp1E+KDtIUDFIzmwsoOW62Osy/Ekxskclk0Ol0kEgktJaF73AkEtH2XmBz4VcqlXTiDi4s5U5Dcj9tOV7AZkTAzMwMrrnmGgCbYUQnT57EK6+8op9RNpvVWhiSMe3MS0tLUEppSZ1qZ4bo0fHR4cKCywXt8KqBq/1Go6F3KyKJyV2USqWSVgnncjlNwpzgOaHX63W88sorejcYgh7SdC5h3a1WS5NwNBpFp9Px7GRUr9eRzWYRi8WQSqWQSqXQbDa1pENJWimFarU6kARMych2PGisJExp2kagklxkZiczX7Zstyn5hkIhrUUw+9zr9fQ4M3uZvG8Y1bPfMb/2+cGm+uVxG2wLmFERCoU8pJnJZDA1NeXRbvT7fVQqFb0bkaxbalBkzC3bJcudnp7GzMwMgM0F5eLiIs6cOQNgKwsb39tIJIKxsTFdF5+LDH8i+VIbda4ez4PU+g7nB04F7TA0KClxUk8mk3qi7/f7nrhFShbcvEGmfJSTaKfTwfLyssc2JxPUSwcuYCsekio81k2srq5qJy9gexYkm9pxkMOP3DRCxrTarjfVojZVNm3QMsGDjUilSlOGwNgg1ZRmbDWddKS0JjfTYJ0cS0lGo8I2LoPUzcOWZxunIMhnINXJ/X4f1WrVo40BNrUq1WoV5XJZH+N4yLzPcpN7810gqc/MzCCfz2vyXV5e1jtsMYWrXDCxvbVaTSe5kaYCGW60E5LvIM2Nw/mBk4AdRoJ0bKGUKZ18ZBarVqulPUmZ85lqT7lTy+rqKjY2NjA9Pa2dsOhtHYlEUKlUPJKczNLFlTwTagDQ27DJDdIpCZvEY5NmpRQqJ13WZYYC+UmOnOTMyW5YuyuJ2kyJSAmaMKXlVCqFVqulP1zcMLsSneTMumw27mEI0rzGHJ+zneSD7rOdszlh0ZuZfgV8d/nOsp3dbtcT2yvNCyyb52zku7GxgVQqhcnJSczMzGB8fBzApqp/YWFBLwozmYy2+8px4wYLtVpNL2YJM7PcTtp9nRS8u3AE7DAyqCYLhze38uN2g7QjkmzL5bK2XUn7Lj1IqQ7sdrt6v1+lFCYnJ7WdmROc3NeUkjOlb1NFDEDbnznZ8jra3ejBak628iMzZgFb2x0yJIttkePiR7SDpEB5D7+TdKVTGVX6hBwjqv1Zbq1W08kolFKaZGSmMlOtLtsU1G7TRjsIg+zdfoQa1Aa/OvjhjkKFQgGxWEz3n+pbhvFwcSIXiDafADNXuNQahEIhTE9PY3Z2VvshdLtdzM/Pexz9pN2X722329XhRjKMCdiKRWZmup1MtuHId/fhnLAczgokKKaEBKBX71RfMqNVPp9HsVhEOBxGtVrV+Z9J2jILFR1mXv/61+tjzWYTc3NzqNVqegKSzlMyHpMTqZTCeAzYjLkcHx/X3tjM52vbmJ19oXrXtt2cjYDZLlkWy+HEzf7b1KrSwzYU2syQRImVZTQaDb0oiUQiyOfzWupaXV1FuVz2pCZkuZlMBhMTE4jFYjh58qSnTzaVsE01Lhc7frZjm4rT/N/Mk2zaooe1Qcv7SbrczYv1dTodVCoVXSezofFdpU2X2gb5bPgu+5ktmGTj6quvBrC5WJyfn8f8/DzK5TJCoZB2XgyFQnrfbY4lU6zS1gtA504HNt/1lZUV5/G8B+CcsBzOC6iKowSRTqf1jkiSbIAte3CxWNRSK0mYHp5yR5larYZTp05h//792oZMqaJaraLX62mC5eQJwJPEQy4EaCsmcWUyGUSjUWSzWR3yYSY04P2cbIOyT/mpsW0Sn8zcJO8xbcjy3mq16rGvA5sLiWw2i36/rzOJsZ1cWJhtYqIHqY6n2lX2R/ZBHpeLAzOlpa2/fvZgU0Ngu28UuUCSL/fYpcQLQKubw+Ew0um0Hgv+pcmEmhF5jlKxn800n8/jwIEDmJmZQSQSQbVaxdLSEubn51GtVjX5ZrNZhMNhvSiV75VcFLB8GcbXbDYd+V6kcATscE7gLkKUXLnnKgC9i5JSSsc+jo+Paw9QZqKidCdJeGFhAa1WC1dccQWKxSKuvvpqZLNZnDx5EpVKRZMZpVuqmkmuVFPbpLpqtaqldkodnGBNSYfSnpwAbWRjwk9CtMX4miQsiZoolUo60Qj7JL1yOXalUsmjrjfbQ3t4LpdDMpnUJGFLHQnAo76XbWKIkyntBhGnjdBlXUFjYusP28QQHr5HtPvzHtq8Y7GYdqCSz1SGX/F94iKOHz/yPXjwIA4ePAhgU/Nw+vRprK2t6Rheki/fSbaHY8WFkiRfLiaoHWL8vcPFB0fADmcNToIkYXotMwc0z3HCq1QqWupMpVJ6VxlJVry22WzqZAQHDx7ENddcg8suuwzpdBpzc3NYX1/X3qC8h+krORHLnWKALfVtr9dDqVTScc1UY3NjcybTN/MO+5FuEFmY90kHL/OYhJTceU2tVsP4+LgmTNpzpQ2ROY5tz4rlUuJPpVJIp9N6AWXrFyVvSoZ0EKKWg1KmHAO/+uX4BHmTm8RsK49e4fSal+2nVB8KebO2MQc0AL1tpgyN44KC95taEIlcLoeDBw/iwIED+tjLL7+sNwsh6OFM+7F0HOTGI7a9qQFou6/bYvDihSNgh3MGJxOqdzkh1ut1rRYm0a6vryOXy2kpmPsDSxUnJ0A6Uh0/fhzFYhGXXXaZ9mKORqNYXFzc5iBDRxY6LklHKik10/GGoSj0kuU9lNCDJFb2XR7nhC1Jexhbpvm/VPdSUpPb21F6Wl9f1/dI6U620yybCyaGetGz1o/oqAUgWZGw2B4Z3uM3VrZx8FvQ+C12eIw2b1Pi5Rixzcz5TGmWUmkoFNIqe9bHBY102mOdpvSvlEI+n8f+/fv1piTHjx/H2tqaZ0Ei1cimBkXmlZbhZfSrcOR7acA5YTlYMYodTk6yVLlxcpT2K0pxvDaXy+l8u7QnM261Xq977uP111xzjU5wsLi4qLMVUWKWRMKQHDMBCInKL66WiRGi0SgqlYq2O8u++o2NeTyIvG3Xy/M2NS+3tOPYVqtVPU5UuwY5KlGajUajKBQKWs0p97eVpCPjsM3sUeZ4mOpo6UzG58JjfoScSCQ89m4eo3OVOa5U4cpnKQkV2FogUMrkYozqeG7OwTIZoy3bxRSnJOKbb74Z6XQalUoFTz75pA4z4qLSTIRCMwdDiVgX+2Tap8+cOTOU3TdoEeNw/uGcsBx2BLYfcJA0x3OUdDc2NvRERFIFNtMr0s7KMKGpqSmdCjAajWrPZDrHkIQqlQpefPFFtFotXH755ZienkY2m8X6+rremIH1sw2MGeYELaU4OUFLsmCsLEk/FouhUql4PIb9iNicEOXmEKM6FklSI0gW3FbRdDrze04m+VJyo5Rvu9aMRTVTf8r+S8ciE9JjXV5jtjGZTCKfz3u82kOh0Dbvc2aCkqkjWYcM+ZE2coLvFU0j5r6+bCf7xL2wL7/8cr044N9KpYKlpSVNsswxbYaryYWDjXxNaVmmSA2CI9+9D0fADiNhGAmQTkDmhCWT4tPG2mq1UKvVdHJ8EgSTRzBWmPfWajXMzc2h0+ng2muv1SE6vPfMmTOeCZWevzK5AeuQ5UspORKJYH19XUs9sVgM6XQaS0tL1lAk2XdznGy2UflXqq3lvZIEgO1ex/KY9KT1g9zKjjZck3ylt7j8C8Djvc46TdK1kat04uIzYj1ycw960ZuZzwguyggu1ghqUAjp1CTHiOVIqdd0uuPYMiPb5OQkCoWCZ6x6vR6Wlpbwyiuv6D5wD18u4uS49fubux1J8pUez1Tz05YfBLk44/8OexOOgB0GYtQfOEm4Wq1qYqVESTss7XYbGxtaxUuJmdKwzK4lvVLr9TpOnz6NYrGIfD6PaDSKyclJRCIR7TVKKZYTIeuijU1KhHTMMiXH9fV17ViWTCaxf/9+1Go11Ot1NBoNTTjsE7Bd5WwbRxvpmteZhEzI/ZWlo5CtDDlBS+lVquJt7ZPP0VwAmN7SJuTiwiw/k8noxQ8AbaPl8+B9lHC5OJLaCwmZ15kOdWb/ZDgaCZjEK/siP7FYTIe+TU9Pe9Tb3HKzXC6jVCppSdxcOEgHL6a4pK+D3MJTPhv57poY9jfopN+9BWcDdhgafiroQQ423OuXZEwJgZKIjEWl5yozOtFWx/SSMmEC7WbT09NaRVitVrG+vq4TUVDKs6mASWaUCGXMp62f4+Pj2quW0nK9Xtc2aKq9zbha2+Rpk16CJllKZKyfKk46kpkSkZm6UtpnZRIIec5MOCEzcDEz2cbGBtbW1jx9sLWfBMTFVDqd1osVgurjdruNWq3myeGtlPJkApN9Y/tlPuVweGvPXnMXLfaNHs4SUjOQTqcxNTWFK6+8EoVCAaVSCRsbG1hYWMDzzz+vr6damVsHAvAQPd8NOh3yGJN/UHvA/7mgk23z+52Z2IPT90UNZwN2eNUwyo9dSk/S1lgoFPSkyhAaYMu2CWxKGZQqGCJkerxSkqnX61hcXES/38dll13mie9lsg9z03KSLNXgbAslFt5DcJKnnTmTyWhpLpfLIZfLodlsotFooFwu6z5R3SsdgmzwI95UKqXbRkKTebaldMrJX6pRzfZTsiK5JZNJj2aBpCB3rpJjxrIzmYz1XTBtzGy3zNEtN7bn4ovfbeBzYtmElEq5r7PpyW3a0c1zfLdSqRTy+bxOJUlTxunTp7GysrJt04ZYLObZ2pHjKbO0tdtt7ZFPZ0B63gNbmbiALZv2qGTqyHfvwxGww8jwk3iDJgRuo8YJj7ZASkUmSZRKJc/G6bSTSRssbWqNRgOLi4vo9Xr42Z/9WWSzWaTTaZRKJQCbiTekvZMTISUiTs5sD6UVMxaYbS2XyzqmeWJiAgD0goFOZxwTStelUslD6qY9mN/5fyKR0Hv68pxMOGKW46f6lkRKT1wSNtvHdvEYr5PJI2TbGDvNj1S3Uqq2tadSqXhCaySB2ZJdSNW+aW8mMZPEqd6VMNsu9zzmZ2xsDFNTU1qDEolEcPLkSZw+fVqHeEnTBdXmJqg9YSgTtTpyAxA5viTfRqOxbYFo87OQfXPEe/HAEbDDWcEmtQ0iYTpRdbtdvUsSbXdULUt7L3fzoYRClSMnTzpX0ft6cXERhUIBMzMzCIfDmJiYQCKR0F7S1WpVXy9JmCpLLgo4wXKSlKpZSoKRSERvdkDbNaU9mZ1KKYV0Oo1sNotyuezJ4cwJmf2hOpwhN8x6JSE3hrfF7srnwjJlWA2JkeQqd6fiPVJ9zfHiwsdGPn4gITWbzW27+EgbsfkumU5dkqhDoZBWv0u1rx+kHZh9o2NdPB7HNddcg3w+rzO4lUol/PjHP/Z4mzMdKlXVZrwzx4ehc3wm0i7N6xgjz/db5kE3x8L8PTnivfjgbMAOZwVzlW5boQfZNCkZpFIpJBIJPalxcpV24Ugkone04WTcbrdx5syZbbG/6XQak5OTmJ2dxfj4uL6+VCrhzJkzWF1d9XiZmpMpyZBe0rJPVDFK8pTnk8mk9pwGtkJeOHkDW8Qn9zW2SZnMPNVutz0ewLR/snzpWCRVxFTb0zlIpuyUdbHvLItSsVxIMFaWhGBLTykTVcgx5Viwr4zBlglDJGQ5HAeWKd8rfoKkROnMxH5lMhmMjY3pXNqMKW+32/jpT3+K+fl5NJtNvRCjt7XZP4LmALnAYF0yzEhKvwC0f8KwuxvtwWn6ksSoNmBHwA47BpvqzHae13DiZnpKhmZQoiApyPtlbl3agOkEJSd1Sn8HDx7E7Oysvq9Wq2FpaUkn2JBkLLebY33SrikT9ZPI5PWUmEwbrFQDs58kI1N6I8EppbTt0U/9SEmcGxDwIyd+tpUSHcN1pGMQpUnG0FKtLENrCG7hZ7ZBto02frkQ4fOUdmg6j8mybIRqhmQRg2JluRfw+Pg4xsfHtRYCgF6clEolzM/Pe0wbfmpmtpvmFDPxiRlmRciFI+3gcnEQtGDdg9PzJQ3nhOWw6/BTRZN0Te/UWq2GTqejCYRqv0gkgk6n4/FqpQ2Ral8pXUqJgiq+EydOYG1tDVNTUzpvb7FYRDabRalUQrlc1vZhhi3R0YmTLVWptBEylASAbh8AHV5iqloZEkVPXRkPaiankGpV2kU5bjYbZyi0mSyE42WStbRj20KJWA9VoaybHudU1Q4TBiPV6SZYpmxHLBbz2MtlOabq1azfzNpFcDwjkQgmJycxPT2N/fv3A9gkPyZ64e5IbJPMwGWWybbwWcuFBOviIs3sOxdkdMSTz96ETavicHHDEbDDjkFOIIPswbwG2CJLejcnk0m9q5GcMOVEqJTSSQ4opYXDYb1TEtHpdPT+uKurq9i/f7+O7aQ6kmFLTMIhs3FJNW2r1dI2Wko5lBZtYyDHQTpzSVUl65SSr7RbSvLlh8TM0BkpgTKu2nTOonc4FzccQyY5YXvkc+v3+1hfX/doAFg/FyoAPLZvEhCdkcw+s19+hG6Sn2kDlhKnfIdInFwwZDIZXHvttXqhxqQfVNlTKxAKbYa9yS0uTUKnpkUurKTq3fyYCyqZZtVUpZu/EUe6lxYcATvsKAaRcJBkQ3tar9fTYTIAtI2YqlIAOjaYBMRdZ+jwY9bZ7Xaxtramtz+kCYPqIpYtw5ZkpiySIqVjOeFKkBhZryQfW6iNJBdpE7aNG9XGVIvLLfakbdXWLkpsUrXPYzIWGtjy6LWpyIMg22iDzdmKTk3mu2LagmX5PC/roQd6NptFLpdDoVDQG300Gg2cOnUK/X4fY2NjyOVyHk0JIRcHrFuqm2W7aIuXH9u4U5PA98bsz6uBYRa/DhcGHAE77DhMZxl5bJh7u90uarUaer2e9pSW6SxJHJRqJAnXajXfuFtmMDpx4gQKhQImJye1ZEdnm2QyiXq9rpPhMyZW2qM5UZOIZT+lTZSQjkRSwpIqYTMtImEbP0qxVHfLkCpeT4I2HaMorXN86L1N0jdjf+WeubIc6aQl1b4sX8a8Sru8zc4rj/sRvjk2cozD4TAmJycxOTmJqakpAJtSebfbxdLSEhYXF3VI0Wtf+1pPDm3uOiT7zecpE7nIhZVst3z+5mKS5G8LG3NwAJwTlsN5QNCKfJBtkRNfoVDQiTlIsFLSTSQSOv6X2/RVq1XPNaaElUgk8JrXvAbA5oRJCYrZpujMVCqVsLq6ipWVFR3jadoCzf6YakzTm1c6btlUkubihZIZCU4SHlW/MoSJ40ZPc+49S49dSWg2yVuqWCUxSiIiGcsFiVxI+C0m2CcZSmSq6YGtrFNS6ifxU5IdHx/XcwEXWAsLC1hZWfFsDSjJM5lM6vHMZDJ6bLgQkmFiwJYTlRwb00mLZhSZ4W0PTq0O5wjnhOVwweFsyZf3MtMRyYTSnZRKOWmm02kkEglMTEzoTRXkBG/GjnIiJXnMz89jY2MDV111lSbgQqGgpUnG8cptE20erbJ/JhlJJzTpZGWqL03vWBu5y/JleA+zZjWbTZ2QBNgiTaliZj02r3O5cDCPcRxl/0wil9/N2Flzi0fAS7p0bkqn0zp5BcOr9u3bB2ArneWZM2ewtLSE1dVVbX+OxWLIZrOeDRGkGQPwLjSYTpRtkhIu22ZqNyThBu2r7OBggyNgh12DzRnH7xjjZvv9vg4TSSaTmgiV8m4AEYlEUCwW9X3AllqQiUBof2Q4DlXPTCuZyWQwPT2NXC6HcDiMAwcOoFwuo1qtaqmJnrRy60Rgu7RHdbVNKjTzNvOv9FI2bY20QUpy43eq5uXCwyxXnpcELtvFMTPVxOb2hza1sUnONgnXpiWggxuJNp1OY9++fchkMtonQDqA1et1rK2t4cSJE1orQi0AHc8kmCZzbGxML6gajYYn5Eva8DleHG+q1tkGU+J15OswChwBO1wQsEmIgFeKZHIOqospEcusWGtra+h2u8jn8wiFQsjn8zpGmBKUtHdWq1XtyHTmzBntRb2wsIBwOIwzZ85gamoK09PTKBQK2rmHRFSpVHQyfXpyc3I2pcBBWwbawElfqj9tmaHk2Mn4VJta2Y+AWZ+5eJBSOoBtBGw+M2C7qp31S8hc0UzMMj4+rk0BjPc2s0UBwOrqKtbW1lAqlXRcMs0KlIoJaYaQHuvApjlL7iFs2oK52KE3NJ30+E6ZUr2DwyhwNmCHXcPZeGtKByZO1gSdXhj+kkwmUSwW9XnTXkkVMq+lA5ckTglmUMrlcshkMkin08jlcrofSimdk5pZp5rNJiqViseT2kZ8hI2wBqm1gxzdbA5Cfv0bpDInIdmcxXiealqbIxrHjfHexWJxGyFyU4NqtYpKpYJyuay916VTGNtKJzLTAYplsS/UfNgI1uw/Y3flc2X8uZ9913keOwDOBuyww3i1JpazLZeSWL/fR7PZRCgU0k419GYOhUI6vrVUKulJWoIkQRV2JBLB2NiYVt9y8qZEC2yqdmlTZQhQsVjUmZYAaNszsEkEzLxlZqOSYTAcB5sacyfG3iZ9+9mdh4GZmlGm76Q0K7cjpPPU1NSUZ3IyPdVrtRpOnTqFZrOpPZDb7fa2BCPA1laSJtFzDOX10nNeqpXlNWZfeC3tyXIzDxsc+TqcDZwE7BCIC3VlT2mLami5Sb3clUbaZGlfzGQyiMfjno3RSbzS1gxs2TK5paIpPTL3MsOaJicnt6VmTKVSugxuWdjpdLStkSTPFJEsl8QpvYtZruncZF4jyYXnJUwClp7apr3ZHHfGDZOImeyCixKONVNk8tmYquTV1VWtum82m6hWqzpVpCRBkrh0ipJJP/iMSL5ycWC+Ayb5Sics/k8vey7OpMR7If4WHC4cOAnYYUexExOOTf25E2DiDtYhpVx6SpNYpYcvScK0FQKbMcWUriWYM9nct3VjY0PnlV5cXMTU1BQSiYROk1koFLbVkc/nEY/H9VaLADyLAIKbIEjClVK0mSBEhhhJ4qQ6nONEyGvobSwlVrZRlqGU8ki5sVjM4+xEhzQbms0m1tbWsLq6inq9riVduROT2SY6yMn/Tdjs4AC2eVnb7uUiiFoVZr0yiffVRJAJweHihiNgh1cdr+bEIkmYhCZVhcyiBWx563JLROmcQwcewlR5hkIhZLNZHWpC4pN7/ALAysoKAHh20xkfH9eevUz4QVIJAiU9Eo/cKhHYWlSQOChJNhoNj4TOawkuTmR/uXEBSZUk67d3L73A/dBsNlEul/WWkkwnSkL3AxOu2GzIVEVLCdYke5tq2fxfxhWzT1xc8b0YJQPYKHBk6yDhVNAOewLDSNHRaBQTExOefXxlDmneS+K1eQPzuLRhStsmJ22Sn6mmlHWRGElu6XRaE71SCqdPn9ZqWUrktGkzP7HsPzNgkcDZHobWMAaa6nJC7jIFQDuuyU0uNjY20Gg0NAlRBcv2SUlUqvg7nY4nFtpmr6Xamjm72c9SqeRxrJL5pk21sHx+UhNgpog0vbx5Tm7jKCVktv18qZkvVJOOw87AqaAdLgr4TVRBk1ev19NxwMyaxY0HZLnxeHybvdQsl+fpzCW31wOgSTmZTGqpibG+0h5JomB7GDZ14sQJz7Z+APTGDPJ/ADqjl59URkmZJD85OaljZimxSsm51WppeyvV2ZIITUiJUW56EAqFtqnkbW2jVEuylFs5cizlln0mpKQvP2bsNL/bbNi0qcv4XblhBLFb5PhqmWkcLmw4AnbYExh2UiJRyb1xZfIEkhzjOilRmdKR6cTUbDbR6XS06pZqWgAecqZEzPJpW+z1ep44WtuGDqFQCGNjY1piTSQS29Ii+o0NpTk6M5lSo9kfc2/es/GGZt/ZX7lAkfZ2qo8laRLUCHDBwEUJ+2Ru/WdCSr7meErw+TM3s5l7+0KQTHe7fofzD0fADhckznYyotqZJEMnKGlXJBHTeYffZeynzamHKtdqtapVwLQ7SwmTduhoNKpV0Gwb7bOUoOmNzfMylIpklEqlNIEMGhfpQGbmc7YtLiS48YUt/aJ0VmIGMXNbRdk283pJislkEs1mUzurme3hIsYGW6yuJGB+l6FdVFVz8wW/zF3nA371OPK9NOEI2OGihIzfTSQSnphRuXuPLXxHJmAA4JGYCZkVSca7ynokyTK8iWXkcjnPpgaE9IqWqQ6TySTa7fY2u7VtC71hJnOpGqZzWDwe3xayNExZqVTKo96VIU6mTZiaCUq81EIwvae0e8uQIwlK7GYsMp8b+8Cxk2lCHdE5XEhwTlgOFzVsySLoyCQlO1v8LODNGiWdlsydgOT9UqUcjUZ11iyzHumJLYmbi4PV1VV9jsRsS38oJWPpLWySFCV+kpKss9/vo1QqefIxc3yoTWD9lOIZUy3Vz6b3tYyplfsP02FMLkyoprdJ6EFSLsfAtGdLFfugd2QPToMOFyCcE5aDgwGqlOUuQCQXU8VqwnTq8Ut2YUsbCWxlw+IGELynXC57CInJRGg3BrYSeEhIj17pGMU+SnuvLY6VBJtOpzWZUzUrIUO3TNVyoVDYZs827bR+48TvMrMU2xyNRq1E6GfXlQshxhObOzwNA0e+DrsFR8AOFzXMECSlFDqdzjbHHXop87iZeQnYUinLzFMm8cq/Zraqer2uj3FjCdp6uc2iH+it67dQ8IPcopALDUlmlE6VUlozIFXZckFgk06HlR7pfU6YKn0/qTfIoUqaD9gHR6YOewmOgB0uOciJmiTQ6/W2ETD/ylhbYEu1TDKWZGuqpAH4Eqt0KGo0Gp44W+YfBrbniyZknLLN/islfmknlosG6ajFRQglZz9nJfPDvkgSlW2y9dlG3HKxY+uH/Ehp17zewWGvwBGwgwOwjaRkTmbpsCUzUwH27fskGfManiPxyG0Rea5arQLwkuwwkI5Lsi9+kOekKlvCT/pk+RKDQpj8JOhBTmNcPNBz2fw40nXY63AE7OCA7Vvw2SCzQknJWNpi+b90QjIJT9YnpWbpSCX/2tpqlmc7bxKebIvcY1ieM8sOUov7OayZ381rpKey6dBGdbmpWXBwuBjhCNjBYUSQPKRXLknX3IbPJlkC29Mr8pzNZs065f0mkUvYyjaP2+ozr/eLFzZhSsQ2wrSRLkOWpNreka3DpQRHwA4OQ8JGViQfErIkZknEptfyILsw4JWATYKSpG2znQbZV3netCdLQvaTQM3wHz9bsW3spD1aem3b2uvgcCnAEbCDwznAT2IFtshRbmDPY5SUTU/rnQKJcpRySYpm3mWeM68dVkVsI2rZNke+DpcqHAE7OOwgTHWyjJGVsJGPHxlLtbNNjWzCVgalXZs0S3I0k3z4tXMYDBOe5IjX4VKHI2AHh1cBZ0M+plrYhmEkWpk4RJZtU/cOcpw6F5J0GaYcHILhCNjB4QKBSVZBHs5+/5v3SYl8lLp3Ao58HRyC4QjYweECxdkS2CBJNih8yMHB4fzBEbCDwyWIV5t0Hak7OAzG2e3C7eDgsGfhyNHB4cKAI2AHh/OAnQ4zcnBw2PtwBOzg4ODg4LALcATs4HAe4NS+Dg4OJhwBOzg4ODg47AIcATs4ODg4OOwCHAE7ODg4ODjsAhwBOzhcYnAe2Q4OFwZGIuCPf/zjnjyzoVAI1113nT7farVw5MgRTExMIJvN4q677sLS0pKnjLm5Odx5551Ip9OYnp7GRz7yEWuyegcHh1cHziHMweHCwMiZsF73utfhv//7v7cKiG4V8aEPfQhf+tKX8MgjjyCfz+P9738/3vGOd+DJJ58EsLkjy5133onZ2Vl861vfwsLCAn7rt34LsVgMf/Znf7YD3XFwcHBwcNgjUCPg/vvvVzfffLP1XKlUUrFYTD3yyCP62I9//GMFQB09elQppdSXv/xlFQ6H1eLior7mwQcfVLlcTrXb7aHbUS6XFQD3cR/3cR/3cZ8L5lMul0ehVDWyDfjFF1/E/v37cfXVV+Oee+7B3NwcAODYsWPodrs4fPiwvva6667DwYMHcfToUQDA0aNHceONN2JmZkZfc/vtt6NSqeD555/3rbPdbqNSqXg+Dg4ODg4OexkjEfCtt96Khx56CF/96lfx4IMP4vjx43jrW9+KarWKxcVFxONxFAoFzz0zMzNYXFwEACwuLnrIl+d5zg8PPPAA8vm8/lx++eWjNNvBwcHBweGCw0g24DvuuEN/v+mmm3DrrbfiiiuuwOc+9zmkUqkdbxxx33334cMf/rD+v1KpOBJ2cHBwcNjTOKcwpEKhgGuvvRYvvfQSZmdn0el0UCqVPNcsLS1hdnYWADA7O7vNK5r/8xobEokEcrmc5+Pg4ODg4LCXcU4EXKvV8PLLL2Pfvn245ZZbEIvF8Nhjj+nzL7zwAubm5nDo0CEAwKFDh/Dss89ieXlZX/Poo48il8vh+uuvP5emODg4ODg47C2M4rF17733qm984xvq+PHj6sknn1SHDx9Wk5OTanl5WSml1Hve8x518OBB9fjjj6vvfe976tChQ+rQoUP6/l6vp2644Qb1tre9TT3zzDPqq1/9qpqamlL33XffSJ5jzgvafdzHfdzHfS60z6he0CMR8N1336327dun4vG4OnDggLr77rvVSy+9pM83m031vve9T42Pj6t0Oq3e/va3q4WFBU8ZJ06cUHfccYdKpVJqcnJS3Xvvvarb7Y7UaEfA7uM+7uM+7nOhfUYl4JBSey8tTqVSQT6f3+1mODg4ODg4aJTL5ZF8lFwuaAcHBwcHh13AniTgPSi0Ozg4ODhc5BiVm/YkAVer1d1ugoODg4ODgwejctOetAH3+3288MILuP7663Hy5EkXF3wOYFITN47nBjeOOwM3jjsHN5Y7g2HGUSmFarWK/fv3IxweXq4deTekCwHhcBgHDhwAAJeYY4fgxnFn4MZxZ+DGcefgxnJnMGgcz8YxeE+qoB0cHBwcHPY6HAE7ODg4ODjsAvYsAScSCdx///1IJBK73ZQ9DTeOOwM3jjsDN447BzeWO4NXcxz3pBOWg4ODg4PDXseelYAdHBwcHBz2MhwBOzg4ODg47AIcATs4ODg4OOwCHAE7ODg4ODjsAhwBOzg4ODg47AL2JAF/5jOfwZVXXolkMolbb70V3/3ud3e7SRcU/ud//ge/+qu/iv379yMUCuELX/iC57xSCh/72Mewb98+pFIpHD58GC+++KLnmrW1Ndxzzz3I5XIoFAp497vfjVqtdh57sft44IEH8KY3vQljY2OYnp7Gb/zGb+CFF17wXNNqtXDkyBFMTEwgm83irrvuwtLSkueaubk53HnnnUin05iensZHPvIR9Hq989mVXcWDDz6Im266SWcSOnToEL7yla/o824Mzw6f/OQnEQqF8MEPflAfc2M5HD7+8Y8jFAp5Ptddd50+f97GcaTdgy8APPzwwyoej6t//Md/VM8//7z63d/9XVUoFNTS0tJuN+2CwZe//GX1h3/4h+rf//3fFQD1+c9/3nP+k5/8pMrn8+oLX/iC+sEPfqB+7dd+TV111VWq2Wzqa375l39Z3Xzzzerb3/62+t///V91zTXXqHe+853nuSe7i9tvv1199rOfVc8995x65pln1K/8yq+ogwcPqlqtpq95z3veoy6//HL12GOPqe9973vqLW95i/r5n/95fb7X66kbbrhBHT58WD399NPqy1/+spqcnFT33XffbnRpV/Cf//mf6ktf+pL6yU9+ol544QX1B3/wByoWi6nnnntOKeXG8Gzw3e9+V1155ZXqpptuUh/4wAf0cTeWw+H+++9Xr3vd69TCwoL+nDlzRp8/X+O45wj4zW9+szpy5Ij+f2NjQ+3fv1898MADu9iqCxcmAff7fTU7O6v+4i/+Qh8rlUoqkUiof/3Xf1VKKfWjH/1IAVBPPfWUvuYrX/mKCoVC6vTp0+et7RcalpeXFQD1xBNPKKU2xy0Wi6lHHnlEX/PjH/9YAVBHjx5VSm0uhsLhsFpcXNTXPPjggyqXy6l2u31+O3ABYXx8XP393/+9G8OzQLVaVa95zWvUo48+qn7xF39RE7Aby+Fx//33q5tvvtl67nyO455SQXc6HRw7dgyHDx/Wx8LhMA4fPoyjR4/uYsv2Do4fP47FxUXPGObzedx66616DI8ePYpCoYA3vvGN+prDhw8jHA7jO9/5znlv84WCcrkMACgWiwCAY8eOodvtesbyuuuuw8GDBz1jeeONN2JmZkZfc/vtt6NSqeD5558/j62/MLCxsYGHH34Y9Xodhw4dcmN4Fjhy5AjuvPNOz5gB7n0cFS+++CL279+Pq6++Gvfccw/m5uYAnN9x3FO7Ia2srGBjY8PTaQCYmZnB//3f/+1Sq/YWFhcXAcA6hjy3uLiI6elpz/loNIpisaivudTQ7/fxwQ9+EL/wC7+AG264AcDmOMXjcRQKBc+15ljaxprnLhU8++yzOHToEFqtFrLZLD7/+c/j+uuvxzPPPOPGcAQ8/PDD+P73v4+nnnpq2zn3Pg6PW2+9FQ899BBe+9rXYmFhAZ/4xCfw1re+Fc8999x5Hcc9RcAODruFI0eO4LnnnsM3v/nN3W7KnsRrX/taPPPMMyiXy/i3f/s3vOtd78ITTzyx283aUzh58iQ+8IEP4NFHH0Uymdzt5uxp3HHHHfr7TTfdhFtvvRVXXHEFPve5zyGVSp23duwpFfTk5CQikcg2b7SlpSXMzs7uUqv2FjhOQWM4OzuL5eVlz/ler4e1tbVLcpzf//7344tf/CK+/vWv47LLLtPHZ2dn0el0UCqVPNebY2kba567VBCPx3HNNdfglltuwQMPPICbb74Zf/VXf+XGcAQcO3YMy8vLeMMb3oBoNIpoNIonnngCn/70pxGNRjEzM+PG8ixRKBRw7bXX4qWXXjqv7+SeIuB4PI5bbrkFjz32mD7W7/fx2GOP4dChQ7vYsr2Dq666CrOzs54xrFQq+M53vqPH8NChQyiVSjh27Ji+5vHHH0e/38ett9563tu8W1BK4f3vfz8+//nP4/HHH8dVV13lOX/LLbcgFot5xvKFF17A3NycZyyfffZZz4Lm0UcfRS6Xw/XXX39+OnIBot/vo91uuzEcAbfddhueffZZPPPMM/rzxje+Effcc4/+7sby7FCr1fDyyy9j37595/edPCsXsl3Eww8/rBKJhHrooYfUj370I/V7v/d7qlAoeLzRLnVUq1X19NNPq6effloBUJ/61KfU008/rV555RWl1GYYUqFQUP/xH/+hfvjDH6pf//Vft4Yh/dzP/Zz6zne+o775zW+q17zmNZdcGNJ73/telc/n1Te+8Q1PuEKj0dDXvOc971EHDx5Ujz/+uPre976nDh06pA4dOqTPM1zhbW97m3rmmWfUV7/6VTU1NXVJhX189KMfVU888YQ6fvy4+uEPf6g++tGPqlAopL72ta8ppdwYngukF7RSbiyHxb333qu+8Y1vqOPHj6snn3xSHT58WE1OTqrl5WWl1Pkbxz1HwEop9dd//dfq4MGDKh6Pqze/+c3q29/+9m436YLC17/+dQVg2+dd73qXUmozFOmP//iP1czMjEokEuq2225TL7zwgqeM1dVV9c53vlNls1mVy+XUb//2b6tqtboLvdk92MYQgPrsZz+rr2k2m+p973ufGh8fV+l0Wr397W9XCwsLnnJOnDih7rjjDpVKpdTk5KS69957VbfbPc+92T38zu/8jrriiitUPB5XU1NT6rbbbtPkq5Qbw3OBScBuLIfD3Xffrfbt26fi8bg6cOCAuvvuu9VLL72kz5+vcXT7ATs4ODg4OOwC9pQN2MHBwcHB4WKBI2AHBwcHB4ddgCNgBwcHBweHXYAjYAcHBwcHh12AI2AHBwcHB4ddgCNgBwcHBweHXYAjYAcHBwcHh12AI2AHBwcHB4ddgCNgBwcHBweHXYAjYAcHBwcHh12AI2AHBwcHB4ddwP8D9K/uwZOBTY4AAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -659,7 +657,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 93, "metadata": {}, "outputs": [], "source": [ @@ -677,14 +675,14 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/sobel_operator.py\n" + "Overwriting simple_imaging_app/sobel_operator.py\n" ] } ], @@ -757,14 +755,14 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 95, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/median_operator.py\n" + "Overwriting simple_imaging_app/median_operator.py\n" ] } ], @@ -819,14 +817,14 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 96, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/gaussian_operator.py\n" + "Overwriting simple_imaging_app/gaussian_operator.py\n" ] } ], @@ -894,7 +892,7 @@ " # Some details can be found at https://stackoverflow.com/questions/55319949/pil-typeerror-cannot-handle-this-data-type\n", " print(f\"Data type of output: {type(data_out)!r}, max = {np.max(data_out)!r}\")\n", " if np.max(data_out) <= 1:\n", - " data_out = (data_out*255).astype(np.uint8)\n", + " data_out = (data_out * 255).astype(np.uint8)\n", " print(f\"Data type of output post conversion: {type(data_out)!r}, max = {np.max(data_out)!r}\")\n", "\n", " # For now, use attribute of self to find the output path.\n", @@ -915,14 +913,14 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 97, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/app.py\n" + "Overwriting simple_imaging_app/app.py\n" ] } ], @@ -936,7 +934,7 @@ "from sobel_operator import SobelOperator\n", "\n", "from monai.deploy.conditions import CountCondition\n", - "from monai.deploy.core import AppContext, Application\n", + "from monai.deploy.core import Application\n", "\n", "\n", "# Decorator support is not available in this version of the SDK, to be re-introduced later\n", @@ -1017,14 +1015,14 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 98, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/__main__.py\n" + "Overwriting simple_imaging_app/__main__.py\n" ] } ], @@ -1038,15 +1036,15 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 99, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "app.py\t\t __main__.py\t sobel_operator.py\n", - "gaussian_operator.py median_operator.py\n" + "app.py\t gaussian_operator.py\tmedian_operator.py requirements.txt\n", + "app.yaml __main__.py\t\t__pycache__\t sobel_operator.py\n" ] } ], @@ -1068,94 +1066,92 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 100, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:08:26,105] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", - "[2025-01-29 12:08:26,111] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=)\n", - "[2025-01-29 12:08:26,111] [INFO] (root) - sample_data_path: /tmp/simple_app\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:03:12,662] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/tmp/simple_app'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=None, workdir=None, triton_server_netloc=None, argv=['simple_imaging_app', '-i', '/tmp/simple_app', '-o', 'output', '-l', 'DEBUG'])\n", + "[2025-04-22 12:03:12,666] [INFO] (root) - AppContext object: AppContext(input_path=/tmp/simple_app, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 12:03:12,666] [INFO] (root) - sample_data_path: /tmp/simple_app\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "Input from: /tmp/simple_app, whose absolute path: /tmp/simple_app\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", - "[2025-01-29 12:08:26,144] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", - "[2025-01-29 12:08:26,149] [DEBUG] (PIL.Image) - Error closing: Operation on closed image\n", + "[2025-04-22 12:03:12,705] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IHDR' 16 13\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'sRGB' 41 1\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'gAMA' 54 4\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'pHYs' 70 9\n", + "[2025-04-22 12:03:12,706] [DEBUG] (PIL.PngImagePlugin) - STREAM b'IDAT' 91 65445\n", "Number of times operator median_op whose class is defined in median_operator called: 1\n", "Number of times operator gaussian_op whose class is defined in gaussian_operator called: 1\n", "Data type of output: , max = 0.35821119421406195\n", "Data type of output post conversion: , max = 91\n", - "[2025-01-29 12:08:26,378] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", - "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", - "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", - "[2025-01-29 12:08:26,379] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", - "[2025-01-29 12:08:26,380] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", - "[2025-01-29 12:08:26,380] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", - "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", - "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", - "[2025-01-29 12:08:26,384] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", - "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", - "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", - "[2025-01-29 12:08:26,385] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", - "[2025-01-29 12:08:26,386] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", - "[2025-01-29 12:08:26,387] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", - "[2025-01-29 12:08:26,387] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", - "[2025-01-29 12:08:26,388] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", - "[2025-01-29 12:08:26,388] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", - "[2025-01-29 12:08:26,389] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", - "[2025-01-29 12:08:26,390] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", - "[2025-01-29 12:08:26,391] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", - "[2025-01-29 12:08:26,391] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", - "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", - "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", - "[2025-01-29 12:08:26,392] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", - "[2025-01-29 12:08:26,397] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", - "[2025-01-29 12:08:26,397] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", - "[2025-01-29 12:08:26,398] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", - "[2025-01-29 12:08:26,399] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", - "[2025-01-29 12:08:26,401] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", - "[2025-01-29 12:08:26,401] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", - "[2025-01-29 12:08:26,402] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", - "[2025-01-29 12:08:26,402] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", + "[2025-04-22 12:03:12,985] [DEBUG] (PIL.Image) - Importing AvifImagePlugin\n", + "[2025-04-22 12:03:12,986] [DEBUG] (PIL.Image) - Importing BlpImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing BmpImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing BufrStubImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing CurImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing DcxImagePlugin\n", + "[2025-04-22 12:03:12,987] [DEBUG] (PIL.Image) - Importing DdsImagePlugin\n", + "[2025-04-22 12:03:12,990] [DEBUG] (PIL.Image) - Importing EpsImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FitsImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FliImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FpxImagePlugin\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Image: failed to import FpxImagePlugin: No module named 'olefile'\n", + "[2025-04-22 12:03:12,991] [DEBUG] (PIL.Image) - Importing FtexImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing GbrImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing GifImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing GribStubImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing Hdf5StubImagePlugin\n", + "[2025-04-22 12:03:12,992] [DEBUG] (PIL.Image) - Importing IcnsImagePlugin\n", + "[2025-04-22 12:03:12,993] [DEBUG] (PIL.Image) - Importing IcoImagePlugin\n", + "[2025-04-22 12:03:12,993] [DEBUG] (PIL.Image) - Importing ImImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing ImtImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing IptcImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing JpegImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing Jpeg2KImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing McIdasImagePlugin\n", + "[2025-04-22 12:03:12,994] [DEBUG] (PIL.Image) - Importing MicImagePlugin\n", + "[2025-04-22 12:03:12,995] [DEBUG] (PIL.Image) - Image: failed to import MicImagePlugin: No module named 'olefile'\n", + "[2025-04-22 12:03:12,995] [DEBUG] (PIL.Image) - Importing MpegImagePlugin\n", + "[2025-04-22 12:03:12,995] [DEBUG] (PIL.Image) - Importing MpoImagePlugin\n", + "[2025-04-22 12:03:12,996] [DEBUG] (PIL.Image) - Importing MspImagePlugin\n", + "[2025-04-22 12:03:12,996] [DEBUG] (PIL.Image) - Importing PalmImagePlugin\n", + "[2025-04-22 12:03:12,997] [DEBUG] (PIL.Image) - Importing PcdImagePlugin\n", + "[2025-04-22 12:03:12,997] [DEBUG] (PIL.Image) - Importing PcxImagePlugin\n", + "[2025-04-22 12:03:12,997] [DEBUG] (PIL.Image) - Importing PdfImagePlugin\n", + "[2025-04-22 12:03:13,001] [DEBUG] (PIL.Image) - Importing PixarImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing PngImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing PpmImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing PsdImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing QoiImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing SgiImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing SpiderImagePlugin\n", + "[2025-04-22 12:03:13,002] [DEBUG] (PIL.Image) - Importing SunImagePlugin\n", + "[2025-04-22 12:03:13,003] [DEBUG] (PIL.Image) - Importing TgaImagePlugin\n", + "[2025-04-22 12:03:13,003] [DEBUG] (PIL.Image) - Importing TiffImagePlugin\n", + "[2025-04-22 12:03:13,003] [DEBUG] (PIL.Image) - Importing WebPImagePlugin\n", + "[2025-04-22 12:03:13,004] [DEBUG] (PIL.Image) - Importing WmfImagePlugin\n", + "[2025-04-22 12:03:13,004] [DEBUG] (PIL.Image) - Importing XbmImagePlugin\n", + "[2025-04-22 12:03:13,006] [DEBUG] (PIL.Image) - Importing XpmImagePlugin\n", + "[2025-04-22 12:03:13,006] [DEBUG] (PIL.Image) - Importing XVThumbImagePlugin\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1166,30 +1162,30 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 101, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 20, + "execution_count": 101, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAHVCAYAAAApYyiLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsvXuMJdt1Fv7V6fN+dPfM3LffSiLiG/KQnGBfgRAP/2LAIKI4UiJFiUEREZEdKTGEYCkEFBBG4Y9AhJP8E+H8gQUKUkCYxME4kAhy8zJECglxIDa51/ad+5iZfpz36T71+6P17f5qnbV31enpuTM9U5/U6nPqVO1XVa1vrbXXXjvL8zxHjRo1atSoUeN1ReN+N6BGjRo1atR4FFETcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjVq1KhxH1ATcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjVq1KhxH1ATcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjVq1KhxH3BfCfijH/0o3vrWt6Lb7eKd73wnfuM3fuN+NqdGjRo1atR43XDfCPjf/Jt/gw996EP4+3//7+N//I//ga/92q/Fe97zHrzyyiv3q0k1atSoUaPG64bsfm3G8M53vhPf8A3fgH/xL/4FAGC9XuNNb3oTvvd7vxd/9+/+3eS16/UaX/rSlzAajZBl2evR3Bo1atSoUcNFnuc4Pj7GM888g0ajul3bvIdtimK5XOIzn/kMPvzhD4djjUYD7373u/H8889vnL9YLLBYLML3L37xi3j22Wdfl7bWqFGjRo0aVfDiiy/ijW98Y+Xz74sL+rXXXsPp6SmefPLJwvEnn3wSN2/e3Dj/Ix/5CPb29sJfTb41atSoUeNBw2g02ur8KxEF/eEPfxiHh4fh78UXX7zfTapRo0aNGjUK2HZK9L64oB977DHs7Ozg5ZdfLhx/+eWX8dRTT22c3+l00Ol0Xq/m1ahRo0aNGvcc98UCbrfbeMc73oFPf/rT4dh6vcanP/1pPPfcc/ejSTVq1KhRo8brivtiAQPAhz70Ibz//e/H13/91+NP/Ik/gX/2z/4ZJpMJ/vpf/+v3q0k1atSoUaPG64b7RsDf+q3fildffRU//MM/jJs3b+Lrvu7r8MlPfnIjMKtGjRo1atR4GHHf1gHfDY6OjrC3t3e/m1GjRo0aNWoEHB4eYnd3t/L5VyIKukaNGjVq1HjYUBNwjRo1atSocR9QE3CNGjVq1KhxH1ATcI0aNWrUqHEfUBNwjRo1atSocR9QE3CNGjUuBVmWRVPx1buW1aixiZqAa9R4CPF6E57WV5NtjRrVcN8ScdSoUSMNS2RVl+zzuizLKl+zTf1VCNY7h8eqluO13ZZRo8ZVRk3ANWo8ICgjpItYlttco6RGd3Kj0SgQuudm9n5P1ZvnOfI8x3q9Dp9Zt3cs1q8qJFy1/zWh17gfqAm4Ro0KuFtr8jLq9whOP7N92k495v1uXcdKvI1GAzs7O+Gz/uk1JOkUUXuEul6vC395nuPk5ATr9Rqnp6c4PT0Nn73rbfnemFWFV1ZZ+TVq3C1qAq7x0ONu3ZZVyLdKHd45KZIg+en/VqsVvpPkrNUYIztrdcYs1hgB7+zsbNTtWbusx4JEqv3Tay0hn56e4uTkBPP5HCcnJ+G7V3ZVBakqUdfz2DVeD9QEXOOhRllUrlo7F7GiPHestaBIdvYcS3TNZtP9TuLb2dlBu90OZSqZ8pitS0GLktfF+q0kXuZOvkw0Go3QZ9ab5zmWyyVOTk6wWq2wXC6xWq0CKcf64rU5RtDsp+c5YFn32wNS4+FETcA1HmqkhG7suwrbiwhdK/xbrRaazWawYJvNJvr9/gbZaH2NRmOjDaenpzg6OsLJyUkom9frvKrXDpbRbDbDcVtOrK/r9RrL5RLL5RIA0Ol0Cpax1k2SXywWoS3WdU3Fo9VqIcuyUBaAoHhQ4ciyDN1ut+DebjQaBUJeLpc4OjrCarXaIGV7X1JKVlVlqybiGpeFmoAfcjzKmvtF+343rmoFyWQwGBRIuNlsotVqAcCGO5VEtlqtsF6vAzGdnJxgsVgU2sdzm81mgXxXq9WGG7rT6SDPc6xWq0BsSpDr9dolbF7juX3ZzsVigdPT03Cs1WoVLG3+RtCqV2WD1+7s7KDT6YTxUuLmdcCZItFsNtHr9XBycoJms4n5fI7FYhGsZOvy9u5RmddgG9K9rDnjbZ/bR/kdv+qoCfghx6PwYt6vYBnPcmq1WuGv3W6j1Wqh1+sFIvEEOklqNpsVyK7T6QAozp3qvC9xcnJSOgfcaDQCEfI/LVqdW9b2zefzgtXL9gyHQ3Q6Hcznc0wmk+TY3A1ozS4WC3Q6nYJLvtPpBGJuNpu4ceNGsIjn8znm83mwiq0CYNtpx6uqRZxCGSnGntmLkO9FrqvxYKAm4BpXClXXkt4tAcQCpjwhx7nLVquFwWCAdruNdru9EWSksNaaBh8BCBayRiX3+313rnI+n4fPtEoV3W43zB3P5/NA+Iw6Zj1UHAaDAbIsw+3btwMBZ1mGZvNcXGRZhsFggMFggNlshsViEeqlK1rb0Wq1Cu2mBavt3tnZwWAwCC7n2WwWzl8sFphOp6EsehXUFU6lZzgcYrlcotVqYbFYhHFmIJeFN6YxgoyR3LbPmzfvnCq/xsOJmoBrXBl4gUwXLafqtV6QlX7u9XrB0m2324Ek7bkaNHVycoLZbFaYg03V3+/3g+WnbmP+J9HRbUurT8+l+7vT6eDw8DCQEYOclFxZ7+7uLmazWXCbs71HR0fI8xyDwQAAgnXKOVi6rdvtdhgDJeRtlSa6nUmeeZ5jPB4XFJ08z8OccpZl6HQ6uHHjBpbLJRaLBWazGWazGY6Pj6NR1BZVyfGiyt5lkG2MyInaMn6wkeVX8O4cHR1hb2/vfjejRgT3IlilipBLBdhUmQv0ftfrSYLtdhvdbhe9Xg+9Xi9cQ4LkHwOFFJ1OB1mWYblcbsyB0hrmcUtgLC/Pc+zs7KDX66HT6aDf74fy5/M5jo+PA1nx+vV6jbe+9a2hntu3bweLstfrYWdnB9euXcNoNApW5WQywZ07dwpW82q1wmw2C8pEs9kMFjZJnEFbxOnpaaG/DASjYsBrTk9P0Wg0AqnqfaHFy/bzuvF4HOoAzqx9usvpMtd7Ox6PMZvNMJ1OsVgsggt9W4uXiD2XZRH1ZWR+Ge/OZZVVB59Vx+HhIXZ3dyufX1vANa4ELirQUuVtY7kwcpnE2+12Q/ASyYgBSZZ0Y/XQCiX5KFlyqQ2JSNtNcucaWVp1aoGyXpbZ6XQwHo8DkV2/fh3tdrtA1CQsQuvW8aLCwGQZnCvW+tgOBpLpGNCSpsVqoZYyx2a5XBaWZA2HQ7RarSDs7ty5gzzPg6ULALu7u0ExIHnTbU6rmMqQvWdVsc1zVGat8pwHDdu+KzWqoybgGpeOyxIiVd1nFxVoXuCNrb/ZbAZX5+7u7oZltVwuNwgYwAZxAiisXz05OdlYlsP+qhVMYvYscgYpcSmQ51plOScnJzg8PASAMB/c7XaDVZ1lGRaLBbIsKwRpaRCTdX9rWzRQzAsw06VGdBdrRi1a+3Rls3/L5TLUT6uXbeR8+87ODvb39wvzxHme4/DwEDs7O8Eq5jQB6+O89HQ6DfPYsYCtq0aaNa4GagKuAeDBmSvaRtO+V+0lEbRarYI7k9bWzs5OsP5oxfIzcEZsxGq1wng83iAokpmSq/bJI1x+t3Oi2m66ym15wBmhHh4eYjQaBSLS8yaTSbAKgXNXsioEGjGsbdQ/4DyC2Y6pFwkeGwOLk5OT0PfZbIblcoler4d+vx/mtzudToiE5v2Yz+dhrOhiZzn9fh+9Xg/T6TT8afCXfS8uwx17t+9a1TZc5vvxIMiGhxH1HHCN+46Lzu9eZt26dKjb7WI0Gm1YaZz/5LwjrU/Owe7s7ATXpraX7k09ptdoMBYtbpbvkTWTT5AMY4kniNQyG2tRl5Vj80AzepoE60U367V2cwf+5zUcO7ZD+67rnDViHEAIhtO5aM9Cn06nwcsAAHt7e+h2uyFILc/zYEmT5NXLYcdjW9zNtEmNBx/1HHCNu8L9sITt3FhZgNRlgQTSbDbD2la6KrnEhXUvl0vcuXOnIPQpuIn5fI7ZbBZcrgwqajabheva7XaYPwbOibzb7W4EH6Wgkcw6dt61ZUFmZVBCtBY2FQidu7VpNHktE35YMiboPVitVoV5WR0vJvqgux84X9Os7eP1DJyjq17nyg8ODsKcfrfbDeu2e71eWE88m81wdHRUiMLWsasaqGUVoRo1agKuUcC9FhAeQaTI4F5GUtPapHuZ84Ksl0FOnFcEzohAg5VoMSkZ8LjOA9uIXHUlk/g1qIsubbVy1+t1iEhmWVXnJj3rLeZKjo1djNjtciqOiZZLMma/lRRp3WqmK45zo9EIFqgqJ+v1unAfdF2zuuj5B6CgDAAI48k5+ZOTk4JLWwO2AIRgM9vflFVbBy/VSKEm4BqvG7ZZsnGZddooTrqaO51OsHxIBsSdO3c22kbrjMd0GQvrAs7zM9uUi8B5cFaWna0htsKbQVGa4tFLVxkT9PytyphaC7SKG1vJsup9owvY5p6mi183oPASmChx0tKlhb1cLkNuaiYkoeLipaL0wLnu09PToGzRGgbOFKQnnngiRFjPZjNMJpOtdmXaxkqu8eigJuAarxteT+GiAlyJsdlsYnd3N0TG2t2FKFxXq1UgBnUzM5KZVpEVnIz2pXXWarVCUM9qtSqQv+Lk5ATT6TSQrwY+afmetyBlZSlxlv0WmwLw6tHc0bSctTxLRPbe04Ws92ZnZwfL5XLDUtV1wbY8LgcDzubVSYokUqtg6D3lfbHLoW7duhXuEf+oMPV6vRCoxiVnOk/twXvu7ZjH7tG2eFCCKWtUQ03ANV5X3AtNPyW4ms1mwdKltasCfTqd4vDw0LXqaJFqykYVlvqfOZ+BM6HOAB4usdHfJ5NJwdpVV6kltG36u825MUstZrF71rW2NbUMSs+NtYVuYIJkSbeyuqD1HugOT3l+nhGLVjAVK7rGGTjXarU25pnpIufcLxWqXq9XyO/9xBNPIM/zcB7/Vw3UuoiVXAU1+V4t1ARc43XH6yEkGAi0t7cXMkbRpQicW5zAmSvZJp3Q6OIYCeraXbV4+Ttd1koqTJgxnU435ih5HdsQ65dFWRS0ZxWlrFNbdhnhW1fv3Vhz2lYS6Hw+D8vCGNDGiGZ6Jzj+auHyeuB8zTNdzZPJpHAe+0Gi7/f74Vyuk+a0AK1jBs7xu+5iVRNhjSqoCbjG64rXI8iLwVW9Xg/Xrl0DgIIb+eDgAAA2AnkAFIKcKJxpuZ2enoZjun+tl9PZWtM6v8vNAaoQp10qpOUpUdnrFHcz5tat7NXjtcMj4bK5aU3woWVr5i9GqJP0Gak8HA6DwsN5Yt4Xtc49xUCt5dPT0+Ah6fV6WK/XmE6nIdOXBoVx+oJEvL+/X9iYQrObVZ0DrnJujYcHNQHXiOJBnk+ylhKFNt3MnK/jciCSHzdBsIkoOP9KMECKxAucu2NJ5mo1n56eFlyfGlmrUc26I0+VsVXBzCjpFPlaWCKMzdGWXV+lnm3gna9LlADfva1LnehepjW8WCyCpdxqtcLYazS5BZ8D9URMp9Pgbqa7+ujoKLjCdRMLjZznMrJmsxki4y+a4rLGo4GagGu40LnNB4WEU8FBTOK/v78fyJOWki4l0kCc1WqFyWQSIlp1TtGb7+TGCxTWailz3TDndHWNLokiRp4a/KSEaVM+EmWWpJ6n/1NjeBHYcqs+J6l5UbW4eZ+0fLp5SY52j2NCrV87naA7SRHMegacJVOg67nX64V14sxoRlCpIgkzmQeXMbF9fLaqTCs8KO9ajdcHdSasGlcCHnHoUiINcALO94+17mIm9lf3r+Yo5o5GdokQcD5/S4tH55SVeFkW/3vzySkLlpaf9keTS7yer6wXbX3ZxFulbpv8g8uYCI47FTEucVLvA1C8Z0Bx7vjk5CQE7Z2cnOD4+DhYsLu7u8HjsVgsQjY0AMHq5XIoLqOii1z3I67nhx9u1JmwajyUUCsRQLBKGGCl0cXz+Ty4HjUvs4LCWedqSZBM4A8gpJYEzq0knU9WV3Mskb8XpPQwwU4H3Avorkp8BkiY9jzO43OJEiObgeKWkVYB457HvMe7u7th/ncymRSWrtHboX3WFJwkYbq42W6bsKXGo42agGtcKdC1zOxVFJ42upjJ+dUKsrmVWR4FKN2GzWazMG9MaOYmXsNMSuo65n91PQN+YFJV12TVsWE9l40qbbmsQCNvTPSYDQgjwerc+nw+D2uL1Xq29a9Wq2DBcu74+Pg4uJG5WcNisUCe5yFinh4S3bnJBuPxWdF9nXVqokaNmoBrXBnoml66nHXvXEa/0g3ICGXNJkX3JQWiEiQFMYCw/6xuLqCu6tVqVdgpSAnCEi+v0f8p3K1w9sjysgT+ZZSzrcta58Y99zfd9TqHzOxWdnkZ76m1pnkelTs+Nzy/1+vh+Pi4QLS0sBeLRajPgpYwXd+cAvHSd9Z49FATcI0rAbr/6HIGzkhSN2AHUJi75VpfdTdS+FqBx1zDnONl9iPrnj49PQ1zehYacHUZ2NYCtoR1mbAu9G0Dh2Lzx1Wv1/N0Xj+WkYtzukBxIweNntb7rDmor1+/jtu3bxcsW+4HfXJyglu3bgVCpXVLhYztUze0urhZH6+p8WijDsKq8cBC3c16v+kKPD4+DudxG7osy4LrWK1QtXxsZDIFIqNYWZa6rZkn2LqaWUaKdC/yiqnVpLifQViEnY/3frusOqpcpxHT1hLWZUb6nXVo6lDe//39/UCa3AmJ93dvbw9ZluHWrVsbViwVMz5LdGmzXCV/PqPMlnbRsavxYKEOwqpx5aHLiuhyJpbLJRaLRdhkXZcAAefRyGr18ncKVd1Ll8KSVhCXING9bF3YNkmEl4TD689FhWuK7O4VYskq2B47/3o/iYN1ewqQ3nN9HmySD41eZwT1aDRCs9nEaDTCYDDAF7/4RQBnAnZvbw97e3s4Pj4OG0DoXK8qf3a5GqHpMxkdXePRQ03ANR5I0NVMocY0gkxwQOuFBAwgEKdatQymofWhZMFALbtjEefzaG1aguEx3cC+jCDLAotiuN9WkRc4ljr3onUA25G55wJXb4cqVqk2sn9UsjTJxt7eXtiM4emnn8bR0RFu376NV155BTdu3AhTIdwRi88i15hTQWQ9zIxFl/jOzk6wkFNR9JeBeq3xg4magGs8UOD6Tt0OLs9zzGazAikCZ9aKuhRJvrSe2+32Rj5mLl1hhiMmS9D0hfxT8tVEEBpJ7UU1E2WRvlquNw6vp9XrYZuo5ntdXyoJi16rng2d2+XyH0bIe+NO9/VsNgvu4d3dXezu7gaFsNvt4ubNm+F5YcAWpydIqK1Wa2PHLG0z66KbmriXJKz11yT8YKCeA65RGfdqmQsFJdP/0epV9yBdfcB5MItuYM/jTz31VDiPwkyDtPr9fmHudjKZhKVLSq5KkBTiXF/qBRIpYuPjRfDaceD/Vqu1MUetllrVOu8WGkSkx7TftBo9F+9l1G+Rsph16RE9KAzImk6n4TnjObPZrLDGGEBBAQMQLOD9/X2MRiMAwB/+4R/i5OSkcE+4/pzXMI6AaLfbhflpDRrTHOGp1Jk1HmzUc8A1rhyUfJlPWbcBJDFqcAtwvoSo0WhgMBhgNBoFUqZbkEuWBoMBgPNlILPZDMfHx4WIVU1tyDrVPV1FKFYh39R5Sm7WGiIxU0mwWZUuKwpaSU8jeVUJ8M73lgkptm1TmXKTUmDoSVHlod1uhwAoWqqDwWBju0k+X4xSXiwWePXVV8NGC9evX8db3/pWvPjii5jNZmE8Op1OIX4AOHv+dA0xd03iPdTlT9qnOkL60UBNwDUq415o5BR4mj4QgBsAZcn39PQUnU4Hw+EwuJMZGa3ErBYZhamSt1oqOkdXxc2s41L1eGos9Fq7DIrtBc633VMytmXdLQkrocWgbbBt9sq822coVkbMzct5WiVY4DwBB58/zttqRDzP445IzA99cnKCxx9/HG9605vwxS9+EUdHR1gul0F57HQ6YQ6YewkzFznboAoU6+IuXpwvfj3c0TXuL2oCrnFfobl7KVx15yBanbRYFIPBAMPhMLgYlaSGw2EhAGaxWGAymWA8HgdhaJekUACri1Dnez1UtXjLyMfuABTbi5huT+sGttHZVdtp4ZWt7lJVXAhacbHlWF4EtQ3uqjqOsTZ75+tx2y4G0dHDwefQy9VMRZA7Zq1WK1y/fh07Ozt4wxvegE6ng1dffRWLxaIQf8CNQKhg0r1MNzmfLZ2X5tRDlX2F67ncq4+agGvcN9D1rO43Ch+73lWT6wNnwoduZQqx+XyO3d3dgiXNRB3T6TRsRcjrSSSce9OsSSnhdjdkYZGyNC0Rll2vFrd1Y3vWeew6j3y9/tm0nCwjz/NC+kW7VtqLrPbquCi5WOJqNBoYjUY4OjoqKFSLxSIofpqGlGXQglW3+2q1wtHREV588UU88cQTIWd0t9vF5z73uRBBzyxZnNtl+fP5PCSL0bXmQDFrFpfDVVnmVuPqog7CqrGBe61Ze3O+mntZl2RwqREF9Gg0CpYr59+Ys5dJ8rMsC4Lv9u3bIUjIEoxGo6plopuuA+frNzWRftXxiZ2niSN02YwGA7Eteo5XpkZuL5fLwkbw6lWItYnfOb+sbm+Wo1sDWgJl25g3mXOhuiwIOF+jzQhjbgO5zfjFFBLP8uXe0PwDgPF4jMlkEjwmXIZGEtbdjDRI6uDgILiVGRjXbrcxHA6xt7eH0WiEVquF+XyOo6OjQt90+Vur1Qrzu51OB4PBoLB0juA8MhN16D2p8eCiDsKq8UDDI19aGx75aorA4XAYArQYTNVutzEYDAoubG5FaC1ea93Z/WZ5DDgTlBo9bVFVSdHzlBRppWtw00WXHnGus9PphM0EbBu8dgDnZGr33bWfLTHb8nUf5tRY6PKwPM+Tm1nYNsYQ+51eFM6n9no99Pt95Hke3MmLxSIobtpO4DxZRqvVwnA4DFsLstzlchn2CF6tVnjsscfQbrdx48YNdLtd3Lp1q7BjEv+47pfBWYzU1nHV6RPWlbo/dpxror4aqAm4RgHWcrpsaIo+1kXLjRHPHhnRgiHBco0mN2Vge7msaDabua5VtXJtkgR1b6tAVosyBUsEbJO1uKlYWPJnGdYN6wVY6Wc7H9vtdjeSiHjt59wncK54eHOl9lqdAyb56nQAXf62z7ptJF237XY7RBen5o9Tz2PKKmbUM5eQ9Xq98CwxsErHDjjzdFAxpLel2WyGpC7MxAacB2mtVit0Oh2MRiNkWYbhcIh2u40XXnih0C+uQ2d/5vN5qEPvNZ9BTs9o7nFemwpGq0n4aqAm4BoF3KuXlgSoli/rswk2LGgd0CVHIcUIZxIo5+fUVazLaEi6XAdK13NMgJcFD8XmP73Plny9Om2mLhXcMVcty2Q9TGKys7MT3NEk2lhQT5mwJhmQlKzi0O/30Wq1MJ1OcXh4GBJZsH3sO9fG6h+nDqg06e5S9j5sSyp2jFXJolWr94JECpw/l4wNIGnz2eU0B70xs9kMr7zySohDoCv+xo0bePXVV0OZDPTj9oms09sykefleV7YbnGb/tck/GCjJuBHHN5LGptrvJs6AISk9DqXyHlfavSx4BzOv/Gcvb29QMwkcLVMKPQ5r6pbC9o6NIMWcDY3RyuIYxCzQq2F6fVB53HVsub5+qflKzHoshW1ktg/nselWTxOrwLnymkR2nletdZtAJP2jaRB4up2u2g2m4F8p9NpoXwbBEYLkOTLqGEqJgcHBxuWu21XmUtaCVvJnsk4aIlz4w3tb6fTCVnXiNPTUxwfH4clTVQkaQ2TtJnUY7VaYXd3F6PRCNeuXUOj0cArr7wS1pkzuIu7b9mocvvsUGksi4q+LNTE/fqhDsKqcc9BAcJdhoCihcF5WmsxqmXHP7o7KazpjlaBSeGmGY94LMuy4O4kKVFAKxHa7FgeNLjJU1qoBNiEEFQ8FHb+k/8psFPBSprdSwN8dJMKbQ+tt+Pj4wKZs40kVVpfGgikVlir1cLjjz+OPM/x8ssvl+7UpKSpFjG3mcyyLJAkreEqVp8qEVoP19VSGdF7qfnBeQ3HgBHctFhVSeR0BMeH90g3AeHz1uv18Ja3vKWwfeYf/uEfhnlg9p8em16vF9zRHG+2mVb2YrHYeF8uE3Y6pMZ2qIOwajxQsG5f4NwVRxcpjwFFQUhQwDLSVAOttAxez/lGkj3LswEtTFXIOjRgh2WyHR4RUBB7JK1KhPaFxG+hVh7/89yySGFapCTX9XodLDMqGLrmGUAhCIrCvtFoYG9vD/1+v3BPuMRLz93Z2QlrsDWquCq4XIfktlqtAgENh0N0Op1Qp6Yh1fFNzW+z/VRI7DNgx1WVPEbEswybmlTnbu36XV5zenqK8XiMV155Bfv7+2Ef4OvXr+Pw8BDA2Vxzs9nE/v5+mDpZr9fodrth3TDrJGGzPWzTZZNkmXehxuWiJuAa9wzWBUhysLl29XxrxRAaPLNarQIZ6KbrwHmeaF2HqpjNZmg0GsHKA4rz0LorjrXY2F51+aasY7WSeL4uY1F4CoedE45BXZiaOlOTedAqI1lrUBFw5hom+ep6a7at2+0WMjxlWRY0/Sp7FKubW9vN/pJU+JzQcm21WhteACXLVLYy9n21WrmKkk57qHtbvSnsvzd1wCh8Kj5MvqGR/IeHh1itVmFbQwarkYTn8zn29vbw2GOPhT2G5/N5mBtnfmmWz3HylJLLQm35vn6oCbjGPYNuF6jrbZWA1eojdO5TA3gIbklI8lUr0yNfrRdAIT0lgCD0yvLvxuaDPajLm9d4ZKGuaxvspf8t9DwqNRxjtfRojWnfSO4MFALOFBNuNEAXvM7XkvB0GgE4z60da6O9vzES1rSMXJvL+97tdoOyZdd0q1fFjg3LzbKsYOXb+1QGqwjpc6AkzLHi3C6fuePj4xDpv7e3F/pDlzI9Cjdu3Ajr1jmFQg8DQSuY97Ser73aqOeAa9wTqMtY3aKquWuUpw1EUoFP12Se5yGzFQnHLiuiMKQlQhc1A276/T6azWawojmHrGQPFAWzJQ99ZSic7Vwq3eDA+VIVhTd3bC3smEJgrT0lJM99r/UROzs72NvbQ6/XC+cxUImWmOZ3Vm8G3dmnp6dh/Gx91nsAFD0G6u2wQV/8z3uvS3G4JzTJh2V5BGytVg2essFlOt9qn0W2XacmNJWkziszAl3nkDUqfzQaFZLJMGq80WjgySefxHA4BHCWMES30/yjP/ojAOdR2MvlErdv3y54EWKo53VfP9RzwDXuOyisNTkG53wVGmTluaNT5AucW5kMsqGlRvJdLBY4PT1Fq9UKllSr1cJyuQxzi3Sf2nXHWocmzFCLS61UCmQSC13cSrSWaFLrXlNj68Fzp6asaY6RLVfXY6twbzTON5mnYmCnEWLC3SMJq2zpcSpsdL/u7+8DQFCudnZ2CjtZ2XqtpavBeBed39TnwM4da9+Y2IN18tnkunTuG8w10Ht7e4Ggb926BQChv9ov9fZQCeKew1XJl98vSsI1kV8+agJ+CPCguaE0gQDdv7p+VzNQefOhAEJkLK3I8XgcUk+qlUmrTAOQOJ/LgBYSMHBmVdL1p2tObSYiD2px2fW8Oo9J680Sn3U9e+ShlqFXv2f92u+WiD2o1a7lW8vX9sHu0mOnD7Qsr32xtljhroQ2m83CtAKJlB4Mj8j5LDDy3muLZ+1apUr/U/HifdcAKet50MQcmnSGkfWTyQR5nocNQ/b398Oxw8PD4J1gMhPd8pAbSNg5523e//spL+yUxIMkt+4HagKucanQuTAKOY1EJRHqulaLLDvLK6zLN6bTaSFpPS1sXdfLujSCWTdxoOC2KSrVemU5KlStsIgRpAbrkOBooXiWCJMr2HJjhBY77o1hrE6PsPV3j5StohBzgXuIuYe9dnhl0PNxcnJSSOLCpVfz+XxjDPl8dLvdQvs1CE4JuApoVauLPObB0Mh5Tn30ej0cHx+Hdc6cY+/3++j3+xgMBuFZOTo6wmg0Qr/fD+f1er1A+qvVKpRJhSj2Hmn79djdkvBFr/cUzkeZhGsCfgjwoDzAOk+oQVcUrpoQwc4LqoBgIA6AsNxIyZfEqyn9dJ6VQk+FIQN4uOwFQIG8LUi8/F3neO18r5I1CZgudw2U0aUt2jbdh1aFvFoL/NNxuoz7HrOgy5QND7a9tnzPA2Dr9kiD95b3j65oRmxzKoHKHy1P1qEZwVKKX2ps9J7pvSrzAKxWqzAvvLe3V1Am2W5a1VyLDpxv/MEAO3qU2BYlYXqYUm2/DNh7+aiT52WgDsKqcWmg4GOULN2ZwDlZ0fKkhcxoUR7jco35fI7pdBqsAs57cT0lgEJkLIUYBa/NDqUJFVQ4e25HtjfmJtbrrNVqy02RESNmNTsSXafAmdtdz2cZSuTso4cUeWbZ2Tw11/xyzLhncoqAU+Wyfbq8ScvScbWBYSkrWtvYbDYLwVkAwlIjtiHP87BRQozYY/V599sugdLIe7vOW6O3m81m2Bzj2rVrYX3z4eFhWD+tFjvvB2MXGCTHJVrs6/HxceH5OTg42HDJl41rqs8peGO5LR5WF3QdhFXjvsGul7TEQDLUrFOc0+10OhgOh4VE+bQCSBaazF+DgXTLQgpATcHI5SA6B61uScC31Ow5ep49n9/tMhl+VqvLuih17a4qBzFc1PWnRJZlZ9mwptNpIXLcWqm2fxYxF7N33t20nSBpM2kFPR26WQcjjy1xXqT+WH/sc66kzDgEKoSj0QjHx8e4c+cO3vCGN4RlcI1GA+PxOFj4VCa5VphzwErKvLbb7WIymYR3ot/vh6j0quO5jXfjIudXacOjjpqAa1wKaNFZ8rIuUyUwEmi328Xe3h6yLAtChMuVdDkKiYvrgDXyWa1BCjTNe2zdvhrla6HCQYkzNtfqufuU8GIuT0sQSr46r2fXqsbcnhYxy1v/dDMKb+mVfo/1wZ4X8xzo8Yu4MHmurnmmZUhC5DIljQNIzY+m2qCBfbrGWi1fPrNaJkl4Npuh2+2i0TjbSnM8HuPOnTthLTBx586d0BdugUkSXi6XGAwGGI1GGI/HWCwWgZBp4dN65rRHmWu/7HhV1CR696gJuMalQKOCKUxoVQFForKpI7nsAjjLDMQlG1xLy7SSDGqiZTAYDDYidjnf580tx2CJWN28eiyGmIDXdtnj/EwXpJZFxQGIJ4ooE55qVaesV02qETvHa3usLTHlJVW+bWfMba9QxYr12AxrVLjssiFVAlLTD7r8TH/jc84/ZuvibwDCc8hEHVl2tkUhk2pwLfDu7i6Ojo5CH0jCg8EgZL46PDzE/v5+2DuZzz+AMKXCbGVHR0fu2MXGcVsF6GF1Hd8v1ARc465h58RU8HKeTgWmWqOa+H42m4XkGCRfXYrERAwapEWSp9Wo9bBtCis4PPeyfo9Z8ilB5M2RxVzc/K/EwPlqL1mEbZ8ldAAbhG7bxrHnvdFjdm2wR0werLD3yLqKxWvriF2jUwckX+vmVwvWg7eeV7/bTGZq/fIYPTB8/nWTB+bQBhASbzQajeAmHg6HaLVa6Pf7gZhJwiRu1rNYLHDt2jXcuXNno61c8sSVAbrq4LKJsibey0UdhFXjrpBlWQiO0ghgDRohQfJvZ2ensMzo+Pi4sK1bo9HAjRs3QsDVer0OAUk8luc5jo+PC/u36tZ8PEZrUud/uX5SXcBAMdKZ19vftN96jufSjBG1usL1OtajbeW1qrhYaNmaWcyDRtzu7OwEwmUA3eHhYSGi1o6J5zouU0I8eG5q9Tx45G37bMnaXqOuaV12ZtcAaxkkWa7fBc6eX83DrNMcwPmYMhMWn/vj42NMp9NCAKFG97NuLjHSvawZ5c8539Vqhf39ffT7/VA/35nlchneQ6a+1AQdV1DEX1nUQVg1XldQ+6egs9Gi9lxuGE9BxIxVmhSDEaQsj+TLeTEVPrRMNNuRCh6b1lHdh/xdrSZtf1W3s9fPmNVlr9Vj6k61xGJJvWxONmZl2z+OD7N2eZas7WcVyzZ1buzaGMl6/dLj3njzmJeOMnXveEy3kLQeAt0cwrq0+TwCZ1bvZDIppBSlksiMbGw3d4Fi2Sx3MplgOBwiy7KwgQNwvnSNSgLXvzMC2+b/rvFgojwTeY0aESj5UvhoRKiSMAUY57boamWSBXVZa35iuuYs+VJ40VXNHL+2fbR4dXlUqj9lllvV68vK8gg6pbzE6isr1ztH17Lyb2dnZyPgzJ5T1hZL6hdpvy3Lwk4LpKx9PX8b2C0kaRWT5DT5BZUmu40lLVL2gZYqA8RUOVDvzmAw2Jh6GI/HQSE9PDwMyUfo3uauVhqQxYC+Gg82agKucWFo1ivOe1nXIOdmd3Z20Ov1gqCg5auuMm6RR7KlYGJZvMbOBSvxqiDUeTsKwzIyUcUh5g7lsZhgVwGamjNVl6YNTFOXtDf3q+d6ZXuf9XxLlJ7ykqojVaceuwgBsk7PIo7VXfXc1O8sgwodn5lOpxOeOxvoxf92vTmAwn7UeZ4XcpBzWoT3gNHPupuXJpEBUFgfzueFdQwGgzCl4K2TrvFgonZB17gQdF6LrlsVttySbb1ehw0VsiwLEc4MNKFw6ff72N3dRb/fR57nODg4CMcBhAAtav10ZZP4vQxHJH+6p3u9XjjHazMFsE1NmQrUIqz1q7vl8JhHjHrMujxTCTbKSDFVPsu1m0X0+/3CNo96jZbluY1tX7328DrrPvbGRpWlsvlvW67+pu3kmMbmRkl6vHec06UV6gVtadtIqq1WKyiRnU6nEOmuu0eR5BlIeHR0hG63G9YNsz2MhGbQ1nQ6xXK5xNNPPx3q531kQpJer4dmsxks5noe+MFETcA1LgRav2olWgGlkah5nm9YDvyzQVmz2QxZlgVXNPfrXS6XQUBqMg8lX5tYgwRtLTxCr1HL1WbwsvOjsblIb/mSRw4pMtHreG7VOVYtK/Wd0DlybtWo58esaY/YqyI2HrH5Zz03Nads748qMRoRnZrnZqpUpn9st9uYzWbJOX0th2TI8zmXzDGi+xhAIGLd63o+n6Pb7aLb7QZlU/Oqs0wuR+L9ojXNMumWZjllz0uN+4OagGtsjSzLCq5nkqu61FRYAHB/p5Dq9XqFbD8kA7rt+MfylCgp7DSqWclLg4yA8yhj/SM0qrUKqaTmMHUM9HiKQHiNnYe116asX68OHteEElYxYC5lXT8cQ8p9m7JWbRmeEhM7p6x/VeqJtV0tbruNIHM3p5Qoe7/yPA/RzJodjgqa7tZFi1WzaKl7Wb0ROpXDHb1sn+jVoALR7/fDOuOLjF+Ne4ut54B/5Vd+BX/lr/wVPPPMM8iyDP/u3/27wu95nuOHf/iH8fTTT6PX6+Hd7343/s//+T+Fc27fvo1v//Zvx+7uLvb39/Fd3/Vdhby3NR58aJQoLQbgPGDFCiwSpFoiDNgi+QJnS8yI5XIZ9gC2daqloeuA1RLW4BgryBSW9Nh2b6ci7zqdB7TWVRXCTcHWcTew/QTKrdeYu9Yi5RYva3+Zizn1PdUO28eydqiyyOmR6XSajCaOtVmVRlvHYDDAYDDYiGDmtpkkWpuZjNHRXO97enoalAOSPp9BbmGo671rPHjYmoAnkwm+9mu/Fh/96Efd33/0R38UP/7jP46f+qmfwq//+q9jMBjgPe95T3CnAMC3f/u343d/93fxqU99Cp/4xCfwK7/yK/ju7/7ui/eixusOTTup637tciS7fyzgu6s5z8aySb7clN2Sr3U9K1ladyGt6rKlQSyT7fUCslLXa9+qZIGKtSF1XcxFXWVe2LZVpwno5vTGqKoSEXPBx8q5yPhse666oVUJ89But4Nnh3O3TO2oY1zFA0ErlxuA6DIhuoZHoxE6nc7G+8BARfX2MAobQMh6xXdLiV6nfGgha0BWbf0+WLirRBxZluHnfu7n8E3f9E0Azm7uM888g7/1t/4W/vbf/tsAzsLmn3zySXzsYx/Dt33bt+F//+//jWeffRa/+Zu/ia//+q8HAHzyk5/EX/pLfwlf+MIX8Mwzz5TWWyfiuLdIzRcxong0GiHP8zA3y3lcuqOBoqXJnLiMeqYw4bIkZr9qtVrI8xyvvfYaABTcgSRHGxRFAtbv2l72yeaNVuK2fbXLONgvtdS8OUeFZz3btnsWWwo2NSKwadHHwLpIALu7u+E+tNvtsMsOlR5eU0bAZVa9HSd7XEkj5t6uqpiwXDuu3r3QYyQpzX51cHBQmENWBckqg5qXPNZmurgZJMXAxFu3bgVXNIMaWWar1Qq7U6knZzQahdgI4GwemXsks83T6RSNRiME1x0dHblWuY5LTdB3h20TcVzqMqTPf/7zuHnzJt797neHY3t7e3jnO9+J559/HgDw/PPPY39/P5AvALz73e9Go9HAr//6r7vl8uHRvxr3DilBqAFQuhUgCTbP842EGMyypNYqLQ3gfAkG16JqpLPuLazkG7MWU8I+FQFry7BzyV4dniWk1m/MarKWq7a3zLoqa3usP/Y775PeB7uMLOVS1vba88sIuqx9qfpi0DZYQo8pEDxf4wOokJCo1Kr3XOV8J6iw6dSH5wlhHVz/3mg0MBqNwvvBTUZ0PpoblWgZ3OJQrV2eo1az7jZml+zVuP+4VAK+efMmAODJJ58sHH/yySfDbzdv3sQTTzxR+L3ZbOL69evhHIuPfOQj2NvbC39vetObLrPZNbYAhQ2Awq4ztCAo0HUNJN1n0+m0sOyF1i5wbqkuFgvMZrNA2jyuLuaq5FtlvtUK95gbO4YYWaXaUtVVbOux5ep3HQ8dH69/JAF6M+w127THtqWsjNi4VM0c5o2lTSxi2xNrN5UQPmd5nheebUvmXr/5HJPsYm587SfHn/PLDELks85AK9bJNvG9UmucxH16ehoUWYIETqWB+aJjY1xbv68/rkQijg9/+MM4PDwMfy+++OL9btJDD0/AqsXE3V6A8wjjPM+Dps0AKwoLTVBA6NwXtXgNuGI7qgr11DydZxGVEYa1YDz3r7YhVk7Ko6DnbEPM7GNMgYjVw3M0sMgmAtHyY22ya37L+u99j92nMne+tWA9C9wjbTtGJE/tj877AtggYNtWO62hY8LPqiDo/tTc2SvLsrAMj++BVWJJ8qow8V1hlixmjbNjrtt+anauGvcfl0rATz31FADg5ZdfLhx/+eWXw29PPfUUXnnllcLvJycnuH37djjHotPpYHd3t/BX497CEzhMvpFlWSGDFYCNSFHVxqntA+dJLjQHNINJdBtCCi4lwdhfClaY61yxkk4V7d+6WMsEmUZkV3GjenVp+8r6XKVsXk8rTP+0HCUrz31u27Rt0JlHWFVd0XqNfrZKiVWYrPuV39XtDiAkrrAbZnj1AXCnHIjYkjmmpeQzzyxwJGG7i5gGt+m+0Zyu0f2F+U5RqdAAWM4T13gwcKkE/La3vQ1PPfUUPv3pT4djR0dH+PVf/3U899xzAIDnnnsOBwcH+MxnPhPO+aVf+iWs12u8853vvMzm1LhEME8tlz9wXW+Wne3Uws3CJ5MJDg8PC0KHiTVoAazX5zsUMUKZyyk6nQ6Gw2GBfC0BA5suVe83wgpGzl3rb/ZcLwNUigCrkoc3p8jjtuwysrXttH21RKplcT0q5yEZnRsj25jSUTYeqXHx5tk9BavM68Dr1f2r7dXNQgCE9bH01GiGMJKv7m0dW4akKU+1Xs8VTg+QjdyfTqdBOWUCDgAhbzpwZtnu7e1hOBwG65xxGKenpyHaeXd3F7dv38ZkMikot7PZDC+//HLYtnA4HNZzwQ8Itk7EMR6P8X//7/8N3z//+c/jt3/7t3H9+nW8+c1vxvd93/fhH/2jf4Sv+IqvwNve9jb8vb/39/DMM8+ESOm3v/3t+At/4S/gb/yNv4Gf+qmfwmq1wgc/+EF827d9W6UI6BqvP+gCI4HqlmlKHPP5PLzYtHTVymSSAN3tBSi6MzWvtK7rvegc1baWp15nLbMyF+tF59BiJFOlzdv2S8mBAXQqjC+6kYLnprXfPUuXfY9Zt/aYd080wYi91iaG0b2kmTcZQFAKufyH13gR5tpWLi3S+mydStD2WcmyDPP5PJBtu93G8fExTk5O0O120e/3wy5I3W4Xg8EguJo576zBc1ofgx1Z13g8DpuXaPxGjfuHrQn4t37rt/Bn/+yfDd8/9KEPAQDe//7342Mf+xj+zt/5O5hMJvju7/5uHBwc4E/9qT+FT37ykwUXyb/6V/8KH/zgB/Hn//yfR6PRwPve9z78+I//+CV0p8a9AF3PupECA670JVZBQ0uZwpGuOJvSETgXwnoOrQWdN65qeabcph5iBJqyTqu6Te8VLlKvtcys9QdsErCek5oL9dpmlZ+UK7sMSmbeXK8eJ9TFTDDpiyaO4ZpdW1/s2bPu+djYETYoy/aX885chwycTeEwOGs8HmO1WqHVamFvby8k2WBbaLl3u10Mh0NMJpPCVEu/3w9u6JOTk7Ddp+6Tfb+e40cdd7UO+H6hXgf8+qLf7wfBxWTyTFKvL7Bues79TvmdiR70mIKuQs5RzWazcK7OsSlSFleZKzVVDrApTK27WK2NGGJzhxy32O8ebBs1mtVTamLt0baPRqNCClDgbL5wOp0WMowBm5syeHOw/C3mrbBJWmJt1LI8WAvTm/Pl82Tbw/XrtH5ns1mBfNlGJbjU9Id+17STCi3fU+QGgwH29vaCFfzqq6+i2WwGj+Dt27cxHo/x+OOPAzi7R7du3Sq4tIHzlK5K0LpqgSQ/GAywWq1weHgYYjmuIA08kNh2HXCdC7pGEiRF4Jx8rduS6xfp8qJrjOfpTjBe0gW1VFarVSFSM0YuqbnRFGJuSrUEvblEW37MvepZy7bN+t8SThUCotUTs0g9kBy89IYAwo49nU6nkEbR62+MgGLfbX9SilRVa9hunGHr1N2oSHKdTidsTMCt+5bLZfhOcIrEIqUw2edV22YVhJgCosrs0dERhsMhhsMh9vf3cXh4iFdffRU3btzAcDhEnp8nq+HzNpvN0O/3g/eJdfL9pQfr9PQUnU4H+/v7ODo6CoFgNV5/XIllSDXuD2i5Euv1OhCyJVeuK2XwFK1hCkFv2QqADTJX16Cel4JaKFXnIfW7kqeSsb0+Ru5Vg4SqINUX295ty7ZWvQYQWSuw6oYUth2epVh2rVdW1WkDrx7OB5P8ut3uxvpXKns8n4iRr2Zki7UnFjBo26zlq2Kke1mfnJyEuV7ejzzPg8VKEqbywOeWGbU45bdarTbuD63+LMvcsanx+qEm4BpRaCJ3Wrh2HvH09DRYFXQz63ILYFNAk4w1g5CiCvGkUEZgeo51y9r+ldUXs5TKyvDOqQK1/CwJ2TJTVhwJiBYb92/WADtVjDw3s4XXx5gy43336in73bvXdgx0L2q1TJVsU6TPPXsJG8XutaGqcsQUliyT9wQ4C5oiCd+4cQNAMe2o98zO5/NCcNlqtSp4NDR6utFohHX7F30ea9wdagKuEYXmZuZ37tFLKPkC51aVJ4ysUNJlLyQWFRApt2dVVCHrWCYlCz3HtucyXHgxIqli2Xvt9D7zP8dY15laC46Wlb0+1vZUe7ZBrL7U/L26m7dpX1nbmABDtwysAusJ8O4BLVuNxObSMOBM6T04OMBsNsP169cDCVNJUk+UZvPiGvx2u12IxWi324V1/Ayw0wDZKu9BjctDTcA1XDDrjs4z9nq9woup84Sa69kDj2uUNAmYgo1CxM7DKmLEkhIa1gL3ylQSvgjJl1nClyHYtmmXV49nPel0ga5P1TanSLhKf2L99hQarZOI3buy8eDzo/OhGpwUayvPtYk87Gfvz1OWYmOnBMzfNMMccGYF3759G41GA48//njYBWm5XIb18oSmw+RGDO12G+v1OpA8p5B4DlDc2Yyo54RfH9TO/xob4G4tTFTAtZEqtKiF616juqzBCm5dl9jtdgvlMRkELTKuNa5itVRx9VoB7hGKCk6buaqKmzJWv60jdZ3tl7bBWsa62UVMUVFCyLKsQKysk0qUBsIpSbXb7cJaU9sedeOn5jy1vTxWlm+bZXpuaR63Zer5VOLG43FhtyOCG97r+To+PMb285ln/bE5Xdt3/U9vQ6vVCvv/NhoNnJycYDabhUBFvbe3b98GADz++OO4ceMGJpMJJpMJ1us19vf3cXBwEN4b3j++Q6PRKCT86HQ6Yd6ba4Fnsxm63S56vV4IxqrJ9/VDTcA1NtBut8O8EEEBziQGmt2q0+kEbTpGIvxPt1i73Q4vO/dMjSWz9/LxesJP61SBdxGrM+Xu9OARgZbjEZQV/Pa4tl0ts1SbeE1smVNMwDIKOsuywvpu3YnKK8trg8VF7wHriZUZq9cSKYPM7Mb0jAqO3Wu9h942fp4CYH+zyhs9PkwIwvdAl0NpbnUqg0dHR6Espq3k/tnA5mYlrJ+bPSwWi6BA8B3W8ej1eoWo8JqEXx/UBFxjA5rwnYnh+Z1zvsB5kNZ8Pg/RljEoAesyo9VqFQJHrDBLWakqZFJu0RTx6by0tWJiy5CqIFaf9z2mSOjvqetTVqRap7HfKORZrmYyA1CwxsramkKMqF4PUMlLzRFblOXvTkVDE9595nwyN0YAENbttlqtYKlT4V0ul+H9Ojo6QqPRwPXr1wvPNQnWgorDYDAIEdLAmfdKc00vFouw/EzHqSbhe4+agGsUYJcWAZtCntaALvC3AsuL1uU6U11SMZ1Og/Dw5srUiolZPSkLq4p1Zq0gJeDLQMxdeRFC0zGKpRK0lleMLGy9FLwaHGe/V21javqgaln2+fHGzp5roR6Bqpa4rsfdhrTtffY8HO12O0zvAOd5yZmfmtD197PZLGxgc3h4GPYIjnldtC3su04n6W9qBXe73aAQvx5I3c9HBXUQVo0CNL+z5ovl/CyTwTO4g9+VICl8LHlqpiBuwGBfdivs1Pqq6gKucr7WlSJ3PVdduNvMlXmu87I2xa4ntlEQqrqKtVxNP2nXRnvg+HjnlRGYfV7sWFclbXudFxRotwaMjYlHZrFjGj3uPfsEYyu63S6yLAtuYW4MEUOv1wtZsvI8x8HBQXAVA+dk7Y3Ter0OS5k08FHXB6vSoOuCU2O+jSJVBa+3V+RBQW0B1wBw9gK02+0QIUmrVHeFoaULnGnymrJQBbe+nOriHAwG2NnZwXw+x+HhYSBv72VWYecJ0ipEZecpVSiynbq5uZ6Xctt6Yxdrg2dBVS3HO6csd2/MXc12xFzrOgZMNarntNvt4BHxLFJbns245VmGqb56CpUFr4vt06zHdAs/Rn0riXnwPDKEjqO6l2176UGghcspG/42GAyCYktrWMm80+lgNBrhqaeewng8DgFXL730Ep5++umw5IjeJcZm6PPMDHa7u7sh8Aw430iChEwZMBgMMB6Pk5s1XLbFWlvANR5p6FpCXbRvNWbgTNBw+0C1NKxwVYHP8gAUEgOUwXsxbR3bugitdeRd7y1TKRPyHrZ1jXtKhP5tI6isC1eVIf3uWXYkA10nXGWcq7j8YyRsLfWqfY1ZfnqccQckldgWgyyvyvEUQbP9fK+41pbR/dzghBmv6A0iWXK/4PF4vLEbkqLX64VxSlnRAMI7a5dY7ezsFLY57HQ6GwFr9xKPKvkCtQVcA2cChC8ehTyP8Xdgc+mHut6885SAObfM/X95XmyOsorFy2N6vbanjORoCXvWlm1/FQKs6l6uQlJVfvfKswSXGkfPrUowlzfTj5b1KdZ260pO9cdepwSXUsTsvbHPqS714fPBz7ZvVVzenlcldg6VWFqbXJsLnO+VrRsi2GeX63UZpc6djWzQlV1SZcddl/zpul++O5xSonXMvNn3Eo8y8RI1AddAs9ks7IGqrj0A7jpQkq+X3AHw10PqWt9trBvCm8/zyNsqBVYgsyz2w/7mCfyYouC1rSrRKqpat1UIogpihFbF9eu1J3Zu1XtWBR7hMYmLHX/WQdcscK5U8HlmmfZZsZ/ted5zFGuftZJ1V7DFYlFIB+r1Fzgjzel0itFohHa7jW63G6xkq0Do8w6cR13reerR4PhxZyj+RqXlonsGp97bGueoCfgRB5c+MAXkdDotCLUsyzCZTAqCny5pD3ypuZaULzDz6a5WK3ceM/bCqkD0XNxW+LPt2r6yslMCQgWZRzZVSKcKIceEutdWJZiyMjxyiLXDji+jc2MZzqwSk2oPgKQbO3a9ncbQMjllwrayDg0gA4oZ2+z0R56fR8HzWusB8RQ4bbe9N9oXPoeM/NfYh9jzr2Xxt4ODA/R6Pezs7GAwGGA2m+Hg4AA3btxAr9cLgVa8Vq1/dSdzaROTgOgYMlEH6+73++Hdt2Nfhpp0q6GeA37EoanwPE08JdQt1N3MpTwUBrSYY9dXeWFT1ym5xNyqVS3HmDVVRtRVrVLbRq+s2LHUtSnlgO0jyaQCl6ySQ5Ly6rZ1ee5gWzafByKW8jHlFVCitclbvGeAf9ais65fawV7977KfVYCXywWOD4+xsHBAebz+ca0hmc1W8uZmyoA5x4rzX5FaIIbvQfaf3qhdPlflmUhUE3d0PVOSfcWNQE/4tB8zxQO9mWNzbXF4G28rqkoSfgx4XM3oHBPlVtWh+1vGVKEWdbWi1oKMULQe1RWvucOjt2X2LKnsvZbItHyUh6NGFifnff32sJnQZVAa1nyPHutJcmy9niIXRfb/EPvmZI/SVHnfTmPzMAqDcZSqLW/Wq3C3DejrZkEhNno6MFar9cbSXPuNbZRYh8W1OrNIwzdbpDaNLAZLauWEwB3XkgtLE+w8QWn6yu1CXgsEYa1dr0lNdaasf8vYn2yrpgLskq5ljBtG+3xVFtYXkzJiHkAYu58uxRLx4tjXGXdsdemWPti964qPEWQSqNNHOLdm5TLW610rl3X/a2r3Bf+eXOvXps8T5Nt52q1KiwXAs6SdGhkNC1ZupJ1SaGNvWDg1nq9DnJA54KB85zR7H+Ny0VtAT/CUOEwn883XFYAwoun+ZgtOXsCxwp7FQS9Xg/9fn/D9bgN+egfNfqyYJZU2Z72reWnkHLNXiZSFpN3bgyeizJVT1m5nrs3dp1niaZglZvYGOh3XUJFxc8qmF4b7XI6T1GoYqHHlDXvvNgyMO+esC9AcStPWsHMnGU3QVkulyH2QseAVjA9XxwvknGWZSFfddVlaDW2Q20BP6Lg2sQ8z8Oi+yzLwnpFnS9jAIkKMRvowvMYzGU15izLMJ/PwzZpg8EA3W43HFO3N61tL7sWoQI5Zkmkzi8jmBg5efXEwHqqnJs6z+u/Htex0vM8y98bE02iovs6AyhYf7E2biuYvXtUFuwUq9PzJPB4TCmy46H32k5f8Fnexj3O51iXBbFe621g31WJjfV/NpuFjVKAc2v18PAwLG9ilHez2SxYwUrYLN/mb9e6OcfcbDYxGo2QZVkI9Kp6j7bFvSjzQUdNwI8gaKkyEQCAsDE3BfBqtQpzQUCRkLUcXgsgGbBBDZrZh3SNsV3uYIWqCjZP0PLcKlZHCuoetCQW27GoDGWkklIGrDuT9Vry4BjqdbadlkD0M0lBU4XG+rmNmzzWpzJ446XPgt5zL0hq27GuYt1e9Dnz6vSmCvT+2OddFSXuF0xll5jP58nIeO85Ac6XZvH+0x2tW4MCZ3POk8mktoIvGbUL+hGEzv1yvod79Co581wA0TkgvtRWeFtyYCIOTxjFrBfPurGu05Qb1v7uuTEtwdl2ad8uInzKLO2qbljbL/6vaqGnSMP2k8K92WwGclZFrIo1GEPqvto2eZ8Jdd2y3Ta627v3Xt1lbm1VemKxCbHxtc+Rh1gUuLaXdTNTFvcT5v1ZLBZYr9cFUtbPloC1jvV6HRRuXZbE31Qe1Lhc1BbwIwZan/qiWWvIyw5kBY8Kv9QcKevjDjB0bXFeLiXUUigjlNQ5qeMxl6bnOixDGfmyzotayPYc7XdKsWEbVNCqUkZwLbe9R561nSJQ/R4b321hN43YFnasvDam6raWd8w1z3cp1f9txmK5XGI2m2F3dxftdruw3n6xWIQpJEK9WLZthM4te7/rdMTdJuZ4FN3MKdQW8COGLDvfgozClfO2wHlgFgOmtsmGY0mAZfd6Pezu7rq5anWDB0WZZevVrf9j7YuBJGPr1M93E4jiWdoXtSSr7EzkwfbLkjGfC13Pba+z3z0Xt6e8ZFlWsFq1nNTUQqxvvF+akS0ViGfbZS1CvbdVXNExq1r/YhuTqLtflWC9JlX3fD7HcrlEu90uKE06V88yrLIUU/h0QxXgTPniDkv8ftE1wTX5xlFbwI8QdnZ2gquZbitN45fnZwEns9ksuCIpNDyrRzdt5/88Pw9A6XQ6uH79egj2mkwmePnllwH4c3oWVc6xbeI1sexJeg5/8+Y1PTekZkqqsizHq89rcxk8gtI22757VplHmvZcKkjj8RhA0bth6/PGVMdSiYWkYtOWemPs9TulhMXiEth+2177TFmXte1rzJK3x5S8PdLTd4bnawIRbYsNfAOKW2ZOp1McHR3h2rVrGA6HIcqZymyv1wv30CoAHBdN1QmcxXzcuXMHb3vb2wo7Nu3s7GA8HuPk5AS7u7shk1fKa2NRE28ctQX8CIFzORpoRXjEBWAj6TvPtYJI50jpWtagrul0ijt37hQEkmflepYisN1LXMU9bb/H6mV5KfetnlPWHq+vPO7Vn7IeUi5mr35roSk4f8i8wap8VYW1IJV8U/ck9RxURep5iq1Nj9Xt7RjFz6l+23q8ZUb2N4W3vM+rBzh/L2kFa3mxgDxC26lpOPM8x61bt4Iyxq0N1QrmnsI1Lgc1AT9C4LwvoymtpUKtnGSq7mGPcFWTVrc23Vm0qJhMnnUCcSvKQt1mVRAjIWullAn4GMnqb1VSVHrtqtJvPV7FhWdd22Vt8b5bgvYsx6qIKR1aVhWX77bwCBWIu+15biqVJY/pf8LrgxKvPd8urbOosoYYQFjXGwuQUgUq9q6RdHW5FLc+BIDhcIjBYIDhcBjGj0udbJ9rXAw1AT9C0MArtWw5H0XXMbA5X+QJBQoaEjZfZl5HUmbkZkqIxay5bSzfMiJLnUPYiFpGAsfOjWFbt5sdZ4/4YkqDp1AoiabaGBPQ+nsVlLmTt7GkWd4251R5fsqyUFniLHsGvXEv8+yUlZtKUqLPhrre1WtBBdizUnk/mf0K8Of5b926BeBsKmIymRQ8IrS4Lxr8VqOIehQfEWiQjXUr616hsQ3LPaFFLVqTuGsQDImZEc8WVSxR1lWGlMAqK5vn6TIWkq8ux/HqrBI0c1HELFBvTs+zXD0rzvNAqEs0RcjbwLOivX7crRVlrfdUe+x5Ok7af9vOsnK0LSlPh21zlT7Fztc26/1fLpeFtf1euUrC7K++n7SCaQF3u92QZQs4U+R1HX/V97jGJuogrEcAWXaW4SrLsrCZNy1ULltgNqpGo1HIoBNbfsTPdH9pkgCgmEGJZO4JLGs9WKgwi1l/sfalBILnoqQL3gouDbyy7kMbmFXVZWvPU2s1Nk7qNuT5dr6vahpElqXzmyqg2Y6YByTWXu+YbZPnuvfGIQVLTmUKh/ZH++WV4/XHW5oXUy74HMXKjSk4ntciNhbqrVIrdrVaFdZ083227eH7yuu5nInfX3zxRXzZl30ZptMpAKDb7YZgLL7zut1ojYuhtoAfATBNHXC2hIHka5cVeJaBhf2NAoNLQZQsdFmIWosXtVa1/thvXn8sbFIEz9JQYrVCPjY+qWQL2/YnZv3ouHvRtmXlpsq2CleZJWfPY9kpQrZtjOVCTuFuvB1l5XhtT80fx77HFMuUpbjtOMTun753+j7GYEnUuqn1OD1DGswZa0+NctQW8EMOfWF0azK6VRuNRkjGrnO5Mc3dls3f7NwVCVivs5bHNq5OzyrcJgjKGxO6x63lastjUJlHSNZispZlCqmx9c5l+VqXQsvS++CVn7I0vajfy3Ivxogp5uGIXXtRVKnHs9a3RWp8vTljT6GKlee50QGEPOrqnbHnK7Q8jaA+OTkJVnW328Xx8XHhOhJxq9UK01k1+V4MNQE/5FDrV5cuZFkWgjdiydpja2ntC27PJUjAdnkFy6viboydU+VaT4jZTF/e3sV5ngdlxbMs9b9th3VxVm2bXm+/byvcrHs1VYdH7EQs//U2ilNZ/Qq11i6qmJVB50y1Xu9z2fTItlClUctU71CqrpjypVMj7J9dklTlXdFytJ29Xg/A2TyxknGdnvLuUbugH2Jo4g2u9+v1emE9H9f6aWJ3JU1vHSOtZs3Co6nsVJioW1oFhArasuxSSmj6XaFWRApKHLHAJe23jYi119lyeb2OU5U+eW30+qPt0DJojXjE4hFszCUac1mql8POD8fGVhNOqELA52K9XkfvV+y5iLnZq5KjKk822Ezb6o2JvSamdNl+2P/e9Ic3j59aFqXlNBqNsFzQ1u+tUtD2KtRbxfiNz3/+82g2myFOZH9/v5DNjtsU1rg46tF7iKHJ1VUA8lgssATYnBcCzl5cBnbo/I8XrBUT4lqX99mDFWQxbEvC/E4Xs5cIIfanEdMWqrSkSPgisK5wCkxgM1AoVmfM6vXIzBKVRwaxetj3bZYgKcFdxIOQQuoZ5O9WMUtdnyrfI3YejxHhNi5/fa40zsJem4rqts+vff6ZDQs4X8I4HA7DsiSg/JmrkUZNwA8xNGvNcrlEp9MpJM7QpBm0VoEi+apA6nQ6wW3NF9fOj/IafUn1eCpwyKLMJafnpcjeYrVaYTabYTabhV1kyspMtdcToilhmnL7ltXnWWNeez0S8cpSlGVn0janSFyPb7v+l2V4lnis3dvgoorPRduQ8hRULVc9NASnjvS91fpsnanngMe8uf+DgwMA53JgNBoVzuESxG3evxrnqAn4IUWWZW7ydLWAgXOhq+sCPeFH1zXd1yqI7fIcWt72d9Yfi0K22Ma96PUz9hc7X9cApwjYWoReu1PfU21N/R4rT8efHooq5O4dy/Pcte7L2ua5W209nrKQ6ve9QtX6Yla/llFV+VKFJFZWleeG7xjnebn2vizdJuBvzOBBlaajoyOMRiPs7u6GY5wTzvO8Tspxl6hH7iEGI301OYa6nrnGDzjP3+y9lNxKUDNE6dpDfWE5H0nyp4CwO9VYIk65MokU6XnXehah1q1tsKQTE2J2HtH7jXVVsZjLLJMq/bUudEvCVRUZfUZ0HWms/WXWaao/23o19NhFSXub61Ju8CoKk1eeLTv2e1l5vDd5noco/pQrm89qlf7bfk8mk41zBoMBgPP1w3YfcK/NNXzUUdAPKSg8KZjVHb2zs4PlconFYoE8zwuBUhbNZhOj0Sic02g00Ol0MJ/PcXJyEoib5XLPXwoHmwUrFhHtoYp16f1OoRO7ToWEtXI86yRmDbM/KYGbckXbery2po4RNiOSKjbazpR7EzhzzQ+Hw8LvnU6nkF7UtteOn9Zvs59VccWqcmTb7I1R2bh51rmF96ykLF4dM69P27j9U4qagoSrHqzpdIrVahW8XVmWhSQ6AAqBldZyTlm/WZYFj1i328XNmzfxzDPPhFSXvV4Pg8EA0+k0JPNhEOZFPVaPKmoCfgih7me7rRldSSRfwA+4As5eeqagI3Eyo5aXXpIvOLDpeo4JIhVoZYSs/agKryxGhAPnWa62JcxY2zwhnGpXzB2bEpJViCQ2r52yyDWHsGZF0mut0sL//E3bb+uoMp4k79jcsUdYqX5VqbeKF8Ker5neLGL3f1sPh+fFoYeJCq62X8/V91Dvky0z5bHI87Pc7tzakMsYW61WIGB+T41HjThqF/RDCL6kCi47IpbLZdCqCSs0er0eut1ueLG63W4gLGra+lJXcXnGyK7sOq99ZcdTsJZhzC3ouQ7tmG3rjvTaYstMrd8ss9Kr5HMuc4PSqqZlFeujVTisQhOr2yJWh05RxO4Tf7ffvaC/Kigbc2thVik/9RxUVbRI/OwTpx7UawBgQwm2Cl6V+8m/k5MTTCaTQkQ0cCYbeD1jQ8r6WWMTNQE/hGAQFNcAMs8rs1/NZjMAKMzJWrTb7TDXw+90C87n843IS4UKSU+IeBp7zMVrUcXleJmgEKtC1LE+2/N4zjbjRlglx1o1MWuQ19iyPIsoz/PCrjp2Ta8tTwW/9WJsoxxoYKD+XpYhyhsjbYv3vHn3MqU4xJ67WDBhqn+Kbb0cNvbC3n8vOY4l7pTCaD1XwFn62ul0WsgXDZzLBLsssUZ11AT8kIHWrwodCtFG4ywxOwMrms1mYW6I5zebzQL56ks/n88DgXtkERPy9jd7zLMwUu4xRZnlYf80wOiihB2zHqsqEmVlb2OlsN7YOG/TR7V8mJIwRsAauGbnnT0yS7mVlSBiHhJtI+u35VTprx0/L+FMrFy9xmvHZSuAngLLxDc6laJ943/+6X26SPuWyyUmk0lIyMENXfgdKG51WlvB1VGrLQ8RGo0Gut1uYZkAXxJmrrp161Yh/SIFLK3jPM+D+3o2m4U80tPpFLPZrPBi2/lCCm3Vhqkd61aHwKalpt9T2nkVV69n8ehvnqC3SoTui5yCZ3GWXVPmHeBfu90uBNXwWjtuvI+xOthn62KOlQUUMyMxj3is3Tqe9j4oaXljxQ3l+Rt38/GUNRttb6Hla1s8UtJrPAs7dY9IwNrHsufXWqr2uNapn1VJpMKc52epUu2KBA2Ws0o1/3gdEE+2w3p5XwDgj/7oj/DYY49hZ2cHk8kkTE/xmel0OiGznpazjQJa5kF4GFET8EMEO/erKSbtecB5Xly97vT0NAh9Xs+kFapxey8LXZdWCKr2HRPEKcTcrJ5L1FtO5JURA89hogOvLdr/iwqKmHKgZMMlHnZTixRsm732euXY/lgi9rCt+9Q7T5O6eJnI7taDkCJfwE8Zaq/RY2ybPVZlLayn6HnnsA4SPZVYjb/Qtth30vNI8Df1ZnlgeVZurNfrEIwFIBCt1qsrL+4WF733Vw01AT9E0OxT6/U6uJHb7XbQXO3LQU1XtWK+sNS4Z7NZIcIxJWAZGGLdctu+mLEXMEZ8nsXgXWevjb3k3jra2JKjy3K5edYWA+UsOaWsbioitqxtCJP12VSGZUSU+s2zPPV5JdnrtbSwVHFLeUiIMne4WompZ42/26V6HjF73z1PTwoxlzL7o++hdStrn5SwYxHx3jG+954XgsRvN3qw7Yn1a1ul+1FAPQf8kIAvjloUBEl2Pp8XtFS6/4BNAag7KKkb1BKZdaHZRPtqjZQJnzKLg59TJKiWjzevp21UN2wsWYi14C+LbFOwpFGmjPAae8z7bmHnwu0m6xyjy5zfUzdnigAJS6w8P0XuKYu/7H56zxv3v7Ukw+fDtiFWt2ddp6DvD9fm2ufTtpUeLXtvNRmHJyOoEMXusY2EZnIeLSP2/D0qhLotagv4AcW2GmOr1SrM/ZJ0dekRgALJ5nke1vapUAQQrF7OK9kdVVSINRqNsH0f0+NpIBjPV626jFAUav14xGwFrlorWicFjGbvOT09DUEtSs5abowobApO1p+y0rbpM6OQNcmCd11sTK1r0v6ma3z53859sx2eFWWtTI/4YsSYZWe5xdW69NZkx94Bvb+xMdR2s7+9Xq8QWAYUN7K3wU1qUdKTBJwpprppved1iBHyNu81ydRuuKCKkb2PSqS2Pi4/ZL/4m816lud5qBdAmKJar9dBOe/1eoXpLC5Huuh64EeRpGsCfoCxjfaouZctAaiVq9DsNapZ8wWy2rYHvoC6EJ9WlJKWpxlXtXpS13guOxU6JE/9s9dwvtdzM9JbUBb0sy2quFRJwPRuWOu0rHy2sYoyYPunc4Ax0lAy0HNTyhI/a5YmBgZlWTH7lWfh6njZ8feeVc89G+s/lR2d6yT4bPB+DAYDrFarkBFOFRDrubBt9NoXe645TtarpOdZK5Tn21wA3rlWQeG1rId1UQEBztNT9nq9ggzxnrVHkVS3QU3ADwn4svGl2t3dDRYxj5FkGNhDq0pfEhtEBaTdmvxMAqYQ5bpj79xt4F2TUgrs2kglXr3eEzLeOlSSrxWiqTZU7WcZCef5WTQ2o1HtOkyvLPudf9a1rm1lv210rEbd2v7pdTY+wI6PRxjNZhPr9brgOeGzc9FxsxZ/7N7oOLJ+TdXa6XSCZ8iWzXZyUxLGVqh3wrY1Rk56joeYFaufvWArPt9K2J7HRMlYvUJe3AF3QtN7PZvNwvhZxbYm3mqoCfgBRtWHmEKN7kLmbwbOifnw8BAAAvlakilzj3nuNOA8raO6EJWAY8FXKavgIlDhA5yPiRUMHhFVsapjFojFNl6LMgWH95Nj2Ww23eVA1irUNqtVY92kSqKazYjE2+l0Qn0xq8tLBhFT4OyyGW4kb8eg6vPgCfzUdUqGJBOOk2b9ovdGPQ66wxfLoit7NBphMpkU7o23Ucc2z7gdY8+1zzLtVIBOo9jy7G+UB0rkfI/0XWm1WiGOBDjfkCEWkFWjGmoCfkCxLfnyc6PRwGg0KuxctF6vcXBwENZYqnBQt6u+1NoOu8bUWiqey01fzG36ErOcqkDP17lTtidGvLb/sbJTllWKxKv0w1p0ej3XVqv1Zq2glPs11gZd4tJut9Hr9cIzQXjZ0rRcDexhPR6pqjfC3g+vjVVdtfY369GwAWXqUWi322E/6EajETw4tj1KgOrVUUtyMBhsBPFZWCXRG0/rjdH6Y+Nlr7fPsbqPqTDrO8w1+rZvGlDJGJOXXnoJQHFLQv3/euMicuJBQk3AVxh8kZhsI8vO5qa44QJf4lu3bgVBpNHOXgaglLuZUDccsEnAAIJWTVjhFnOPldXN4zZgRwms2+2GtmmQmbfUSturZcUEsYV1W3vWs3V/az+0XV7wF6/RpCgAQuCYjhPvrV13DRQ3VWB/Wc7u7m7YdINBOsz1O5vNClaT5/LU+rWf7Lt6IixBxNzE3nfPvW3PscqfKmDA2Rac8/k87OKzu7tbcKXqPaLFmOdnGeCorHQ6Hezt7YXx45rYxx57LJS/XC6j0wWWwGPKhRK/NzfuWZ0a0MZ5YFUuGDDZ7XYL7WNQmc45W6WVe4J7bVWZou/BVSbH1wM1AV9xqKUHnLmGrMV6fHwcXma+iKkXo4q15y1LsdGP3rpZW7dXj2eFp8rQa0hStOR4zAriWLkeYmNgLXbvHK+smMJjBZcVYhpdrolTrBJlidH+Zt2iJKPxeBwUFkYLe/PfHuHGYOfgPYvJEqtXhrW6bR8sUs/3er0Oygszx+lcZmzKhHPWjKPg5iS9Xg/Hx8cAgH6/H/q6XC7diOCYgqFt1sA/+9yWQb1QlqRtVjOFjf/gZ91ogasqvH559/BeW6hXneBrAr7i0CUV/Exh0ul0MB6PXYHlzVEBm0tFvDkm4DxqFDiPeuZ1bI8XiFUFsfM9YrbHaLlRADHJiHWpWWuszMUXIzNrhenvdr7VnlfVSlASXK1WwYXKbelsAgtv3OyYadnsH6N6gTMBSxJOCX9vbOxzYJdw2eVbKas49jzGtuIrIwDP4wEAw+EwbK/nPQscY53S6ff72N3dRaPRwN7eHg4ODoKVOBgMwjtgx55tZVlWYeK5MWUx9rzoc2W9FvYeartoIQPFuWsdb/Vm6PUxxahGNdQz51cUfPA1OYBd85tlWVgy4L2AqRSHfPlsIn6+kLqOksEs+oJaYvAW+Fvh7bXDc8vFXOesR+tW8rWRqp7g9wS55+qMnWvbY8cttRwq1mc9zmU7PIcu6aooE5Acj9VqVcis5iF2P+1zo0uMbMBf6k/r8MbRtlnrirVLsV6vCykVqdDEAvdUiTs5OcF0OsXh4WFhekVTtvZ6vULglufdsFMptn2ed8P227sfnI6gEqzn8x3h82TX5+tnu5TQG0ceqwl4e9QW8BWG5nrO8/ONF/QlIAED55sveG5AhQo6mxNWyZYvsGe5UEh1Op0gMHXe0sKzXLaFCmcG27CNDDTZxpKwbeH/1Fpcey4/e0LLWt7WArLXkAAs+Wq+aK8t1tthy9RkKwTvk73/njKi7bW/K5nFCMVTxLz7r+Nl582rKG/2eJZlYW6dysZqtQrt9iKJFZz/zfMcg8EgLF+aTqchSIkbFtg5Zs+bE2t7ykNjyZzvZZZl4ZlXJUDnamPBe16fbUyHErXnIatRDTUBX1E0Go0QbJTnediNhC/AaDTCCy+8EF44RnyqdahBP/oi65pifQFp2VAor1arQOp0t6mAXa1WODo6Qr/fR6fTwXA4DPNoMcIte4FVC9dzd3Z2MBwOA5H0+32sViuMx2PXio4JeVs+NXtPAKqw86zxlGCyLj6OsS2fx3mv2BbORfK+q5KRInt+Z7mnp6cYj8cYDAYYDodBYVutVmHLuVarFVyUNjpXBbj+pmSuaT496FhY4tEIZa1HLW1ae94Y6xpnvVf6jB4cHGA4HKLROMs6RRLmvdcxs6BHYrVaBbdzo9EIc8Ldbhfdbhftdjtkl1PLM6ZolB1jPzw3Nd9PbiO4t7eHbrcb7q31RlglxioGp6enmEwmhR3N7Jw+xyL2rtTwUbugryi4LpGCotvt4uTkBIvFIgTSTCaTgrC1L2zMmgE2o10tSL4qRDzrkm4+DXphDlkVpFVgXWAqMDRCU+v13J7aX1u/JUvrmosJKR03r0yFZ13HhK5nWWofOa70VliC1L7bceTx1WqF5XIZ8h0TXLamx9Sa9dps3cPAZn5pDzGBbZfNeX3yLDP+KYHqvbHeGi5H0vfDs9b1/lMBIObz+UYgk3p8rDfBs4Tt9E4MntfAtlfnyu2Y6vxzzHLVMnkPOUY6PWHHvEZ11BbwFYS1RAFszP9q4nRLNtaF5wnnLDvfkEHLonCwEZZqeakA4jnUvnd2dgo5gHVZlEd8HlRo5XkeXIi6jIJLQaoKhJTAi1nLtp0e6aaEm5JgmdWj91DLVoFP4e3lc+ZnJQxVzngN50GB4n7Rtv/ec2PdzSzbEo21QhUpl7wdG/W+xFy0bIvnHldYl7tmiIs9QzbRy8nJSWGKh8d4rkYT839MEUwpZvYavj92OohjrFHbfJetm73Mak254+041SRcHTUBX0F41o6Cazq55AA4X9PIyGDg7EWZzWZRFypBQUfYFyxm3ajgzrIsuDSB89R3eZ4Hy0ERE8JWwJPQNbCJ/fJg3bFaR1XS1+8UYp6VmrKarfUSq9+6jW1ZeZ4XFA/NdGafj1j/lMhtUn67lMzrI+CnIlQXpyUNKnFKzlWIV9sFIAQZxebBU94H2yfr6o+RkyqWeozX25zKei9SQVdlxBXzUmk99vw8z4N3g8c0CIvXVfVCxdpUW8AXQ03AVxCc9wPONVmdo+Nv1HyBs/mgXq9XEHoUDJ6bjmVMp9ONl5UCX4WUuvuAc+vAauQMWgEQ8ukOh8NCYgjONdk5RtZDZNnZUhxa1Dznzp07G+daIR+zaq2LMWW9KvHa1IzeNZ4VaOu0QozCXklL+88xW6/Pd6NptVohzaPth87R8XolE3U57+zsBNespzAQrVarEAzIHYW0nXy2+D0W3espHHYe1l7HpVk2MLDMo2LHW5ep2Wv0+YrdYz3HEi3Hm+k9vakBr22EKjj0dHQ6nfA+6hy5poHNsgzj8TjEYTBOpN1uYzqdBs+VJXFVMPmn+aJ1iRNQz/9eFDUBX0HYuSRalcCZ1Xt6ehq1ANViswRnhR9wLoRiAUIkf+uW9iwES3gkDq5rpcBotVqFOTltp85LU6B51nmKXGO/x6AkZgVqjMhjLv6y61hfipy8fmlwDN2ddpMESyyeB4VWsJJ72fyt7sSl0ebe88TzPEUipfSUQYnTy3lcdr/LrFK9Xu+t5/ng77pBCaFro70Ibs/boMoL76/Ov3J1gbbFBuMtl0t0Oh20Wq2w25MqWhpLoGSu/VGUBafVqIaagK8grPtZtwWjq3c8HmM+n4eUcwzaYvCUWm0WdFfRfa1CiJGiqjVTaNpgGE/wqguS17Htuqa13W6H+WGPBLIsw2g0wt7eXrD+sizD4eFhQRnw3LvbCo2Utayk5lm1qfJSbbJKkI6vZykDZ0KX1iCj46sKSttu3uPFYlGYD7Xl2Gjn2F6wtr0pJaRsHGPPlrYvdr9S12r9+l/dq/ZadVt7UeDqweDvVI6sK9hrtyqmrMOOuVU2WC/fe75ji8UiKK18R8qeD+sdsPAUhhrVURPwFQRfKiXRnZ2dQGDT6TRk9QHOAkqYIcpGN8eIgpp17KXSF1ezb3nuOwvV1DXTkrVY6PLSuWz+1micZR9SYWk9A7bOVF/L4JGH/V2FdBUi1vK2OdezqAmmqwTOBX3MHWu9Fvoby1gsFhtJTbQtam1qxK1nZceITn9PeQhibl/vt9R9sIqThSqKtm4dO29MVUkCzt3zWp8qmrF30AZ4ed4XLitU5cxa1lr2bDYLuxrxXpGMeT73ZrZW8MnJSSGoUQPKUt6cGmnUBHzFYANkaCkqdCmSvjR8wYBzS5nHrbCx6071RVYLmueqps8yUi+m/qZaPevRLD6NRiNsMEHBqPmdx+MxdnZ28Pjjj2N3dzekVKQbzgrNlEvXE7ra3pSF5fVtW3hWtfebZ0Hz+2q1ChawLjexfbLrQD3EooHVoqPl61lhulQtNfYeEcXOT5Gm3qcqXogqilmMrD33s3U38xjn5unVYZIYfX+0PrVyOc/LNqSs0dh7zHLG4zGuX79e2GgCKBK3zl9TSWPmL4IKmtf/Koqk1/aLXHfVURPwFUKWnef/5cvCfX/n83lYz8lAJxWKeZ4XlhPpJuL6EnU6HaxWq4LgJXSZA4OwtA4boKGuZps3mm3K8/PIW/vHslSIk/SXy2XYPODk5ASNRgOLxQJPP/00nnrqqZCE4OjoqOAmVFiC86wN+xt/1/5566U9t6JnFXrnx9qoSo4XCMTzdIw9q9UjVArkfr8f7qtav8C54qX9JaGUWacxi1GVMH2uvb7FCJHf1ZqPEbbtvyoHeq79b++xjoP+TlB55PPLeVrdrIFjpwTMP92rWJ9ffTZ1LliDJxeLRQj0sjmbNRtdnueFz7EgqsViESzla9euFRQAtbzvxgp+FMkXqAn4gUNKcHiL9DUaGkDIWGMjkjWVHOcKvbqzLNuYx/NeDp178iwfr9xYWRRAKix0g3gPVBIUy+WykAZQo4c1+KzsZa+qjVN5UOsuZV179bCcu4W18olYIJKNfGfSBr3WxgDws1WObPvVmuI1KUvRfo5ZuPZ3b4ytclQ2trFnNXYdf1Oij7nKVXlJ5dS25FsGfW50npe/Me5Dy9M2Hx4ehqWKbKcqvfxu32vNsOX1VxVuPb4NHjVLuCbgKwRdIkJrmGAktAbCNBoNNzWhjY5NaflKivqS2pdQXzxGf8asopQLkZ9Xq1VY7qRzaLT+OBa6BtazRFWg2v+x9pe1j7CW4DYBT2Uu1TJ47kb9rcz9qiA5cEqCsPOAFOhlO/zE4K2ZtmMes3Jj901/8/ro3VPP4q1KHN6zZcdHl/dRaWakvyotah1bNzS9Qoxo16VL3rhoOxqNRkg9aceb92c+nxdSyKos0XFTcO7arrBQ+VFFmUrhUSJfoCbgKwW+kBT0XHIEnM/JeIFM6t5Tt5MVOGpxqkauL6+dU2Q59uVrNpsbCdz1fE/btyQMnK8LzvO8sNwKOFc66JputVrBhRrb9EHbEKuzioWsLshtyNdzc6fIxcJzs6YUHY+cLKxSpVMJHslre+2Y2TlftkWVM/vs8Dptt+1HrA+xZ6jME+HVkzrPs8Bt7IKSKJ8JRpPfLbz7YL1cPMaVCt1utzBva5cIagatFCg/+L5xnb22xfME1ChHTcAPGGLCFCjudgKckS7ndZWcuNxIk+gvl8tgMXLNIKHk6a291fN0XonodDoh4Tz7sF6vwxIW7Zctwwq3mFXHOWuu+6VV0el0goVsXWZeKkorzD3LybOOvbHQ8SpDjFwvYiF4ZMDvXrkxUrLneBsuWHgKRFkbqazEXKJe+TH3chVFxVuf641NjNxThK/9ic3la/tIhozRUI+SvnOq8ALFdbyqBOj46XiQeDn3nGXnST/0fW82m0FWTCaTUA7jKHT9uLrb9X7ZvYTZ1pqAt0dNwFcAeZ4HVywfeAAhqnKxWODatWsAzkiH7ivOhb722ms4PT3FfD4vvFQKkqedP6awsfOxe3t7GI1GQcCQ2PnCUyC02+1CQIklYu0jz4m9zJz35dKObrcbdgXiH1113hh6n60Fxt9t/Z7b1F5n+2LP9ZCyVK0ArlJOrP2epR+z/Dl/aJUnfrZLi2Ll0QNDWDerJRNeYwPN2HYeS5GztiNGDJ4HxuuXN+7W0gfO3cXcC1jr0OU73p9OY2j71U3N99+2116vSi0V1d3dXdy+fTucPxqNQj3MhjWZTAqxE81mcyP6PcvOY0OY131vb6/g0bB92Va5fBSx1W5IH/nIR/AN3/ANGI1GeOKJJ/BN3/RN+OxnP1s4Zz6f4wMf+ABu3LiB4XCI973vfXj55ZcL57zwwgt473vfi36/jyeeeAI/8AM/EF3AX+MM6vK0Qgnwd6FRxKxaABuBXayD/9WNTaG6v78fEj7M53NMJhPcuXMHh4eHmE6nmM/nYUMEr+4UMXmCxmvfeDzG0dERjo+PQ51l5Bv7TYVfFQuwSturIKYYeO2KEU+qrXTP87P9075q4JtNqhGrx2uTlk/YjQLs/LklJkvWhBdtm/JieJ9j1nuMrGMgAaormt9brVbU/cz+AUWlxLrh1bti5aO9j9ofXcLHuWc+B1SUGYip94KKQswLocsbARSy0KniVKM6tiLgX/7lX8YHPvAB/Nqv/Ro+9alPYbVa4Ru/8RsLm75///d/P/7Df/gP+Nmf/Vn88i//Mr70pS/hm7/5m8Pvp6eneO9734vlcolf/dVfxc/8zM/gYx/7GH74h3/48nr1EELnXwkVonTLKhHPZjNMJpONLdL4n2XZRAEetN7hcBhevPF4jMPDQxwdHWE+nxdyOfNPrQZdHpOqU4Wh97uWb+dgt3GHpdzRXjtSRGTLSpUXK8tag7Ycqxyo4FNlzH7W/15Erl0CZgODUn3nNV5/dZmSp2BYxSxWR6odMQWN45NSLi9KGLQ41crm/tx2lzKb2tMutdL3mM+GXXoEbMZ3xBQPtYZt+bonOO+NPhO6pNB6epjgp9/vh+VU+iyp7Kmt32rYygX9yU9+svD9Yx/7GJ544gl85jOfwZ/+038ah4eH+Omf/ml8/OMfx5/7c38OAPAv/+W/xNvf/nb82q/9Gt71rnfhP/2n/4Tf+73fw3/+z/8ZTz75JL7u674O//Af/kP84A/+IP7BP/gHhSwxhNW8jo6OLtLXBxL6kJcJd0/4ApsJ9AEELdcSr9aV57kbRKLQAK5Go4HhcIj9/X0AZ8sZxuNxcDlbC9e6bSnYidQGBjH3KAVUVRdXVUEQc8+myospDqky7kYwsd+xaO/YGOrvPMalaWrFKbx5SZajimCsTWXejtT9i7mZqyL1LHljxt/VrWzbYa+znpZerxeW/1ii7HQ6mM1mlbx8sfdVf7dLoDylxOYG1z4xJWWeF+f9td1WqQMQyJeuaqC4vKrKPsaXiTKj4SpgKwvY4vDwEABw/fp1AMBnPvMZrFYrvPvd7w7nfOVXfiXe/OY34/nnnwcAPP/88/jqr/5qPPnkk+Gc97znPTg6OsLv/u7vuvV85CMfwd7eXvh705vedDfNfqBQ5eGxVo5q3fzr9Xro9XquGy/1YtjNDJj+UYUy89Y+9thjuHHjBprNJl588UXcunWrsAm598dlFnbemn2gxWDbGEvuABTd6RwbVRSU0D0rMnXMuy+psmL3y7rxyqznKvAUGrU+lUgseXLMqZip4G61WiGKPOU6tQqfZ2WyTN5bztfzHqunxo6pHX97D8q8Blq3dYlmWVZwl3ptttenlDC1NJm0hFYwgHCMy4iqlOUluCD0PquFa9uulq0u41OrnAaNXdpk58AVOzs7ODw8xPXr13Hjxo0QU9LtdgtKXaqvl43UO3VVcGECXq/X+L7v+z78yT/5J/HH//gfBwDcvHkT7XY7WEjEk08+iZs3b4ZzlHz5O3/z8OEPfxiHh4fh78UXX7xosx9IXPRBslHRtqyqEbrA5vIKa9F0u10MBgNkWRYCrbZps7qf7VaFFP66yUTMIo/1K9ZPT8DHLNeY1c3fU0iRw7ZQclUC8chc3coxArNtUCHPOnTdqd0T2FMoeL0lfZ5TtvzGKj9VxsSDpxyllKlUvXzm9PeYBeydo7/F2uKV4T27ek9tGep9sPdZ78N6vQ6kqOC7ps8MLWu1qq0yq5n0GBBp1+in4idqbOLCUdAf+MAH8L/+1//Cf/tv/+0y2+NC9799FFEmxL1gjTJXFuC70jR9Hl9ujajO8xxHR0dJ92tMWHqEal2Y9lxPSHruS3vMXptScrZRgO5W444pAWx/LMjI3k8da48cPQvc9sOSqV1Xaq+1wppubNtW68bVOlm21ql9SK1JLSMyD0pGakFWgUfiMfJl+QzAsikgvTK9e2M9A9pmJVjPetd26DHd11m9XeoVsHVbdzld11ZeUFmL9fdeIKVIXzVcSF354Ac/iE984hP4L//lv+CNb3xjOM4cvAcHB4XzX375ZTz11FPhHBsVze88p8YmrAZuXVfUSHVzbqsRl70csYxSXNQPnGnBXNwfI2H+pqTBv1jS/jzPCy5Kr9+xsdjmpY8pJmUWrI5lLELX9jXVB8+yseTr9UtdjWVlqgVly1Pi49grYhaw3kPP+tN4BBvhq22n8NeN46tYUGWWpQfvnsTKjn2OkT/7pvej2+0GV75tQ6pPqQhv6/XwyuRnTt/wv7ZDAxet90DhBeotFgvMZjPMZrPCtIIN+ruXxLit5+RBx1YEnOc5PvjBD+Lnfu7n8Eu/9Et429veVvj9He94B1qtFj796U+HY5/97Gfxwgsv4LnnngMAPPfcc/id3/kdvPLKK+GcT33qU9jd3cWzzz57N315aKECRAlBs0Qp8RLeOkpPYOoSI62T33V/WS4t0vNYVqzttk0aHa1rPjVwpCpSgtgbN4+MyuAJz7LvqetiY5bqh02QogJWryeh6Ty+5wnQqHEgnavY64sKXH5Xi8qSbyzQzj6X27oxVYnw3hGrQFl4wUZatlVEvM8sm1v5MTEN50e9urVtumzJTs/o+Rap55uxF8vlEoPBAHt7e6FcJWHto/V66b0FztzOXPHCSGgqzFbpez3wMFjAW7mgP/CBD+DjH/84/v2///cYjUZhznZvbw+9Xg97e3v4ru/6LnzoQx/C9evXsbu7i+/93u/Fc889h3e9610AgG/8xm/Es88+i+/4ju/Aj/7oj+LmzZv4oR/6IXzgAx94pN3MZSBBUZvN8xzT6TSQl92Pl+corPVn879SGHF+N8sytNvtwv6hsbW2Wq4KVauh8xiFADeQ1+vt8gstk581AUDqRUwpCLZtsfGqQpTbWGMqJNkvva/eGtFYH1XBosBU0tBdqPjdjm/ZRgH6n+drgB7rbLVa4Tgj4wH/mbTZlDSIjtdUtVyrtDl1noW9l17UuaeQMCh1NBphNBqFsWEQoi2X13OtLnD+THirCqxioe+DdcvSZXz79m089dRTIYB1PB7j5s2bQSmiF4Jt1XXgrVYrrA2m/HnllVfw9re/HcD5ahRGeQPYmPu/bJJ8GEhXsRUB/+RP/iQA4M/8mT9TOP4v/+W/xF/7a38NAPBjP/ZjaDQaeN/73ofFYoH3vOc9+Imf+Ilw7s7ODj7xiU/ge77ne/Dcc89hMBjg/e9/P37kR37k7nrykCMWeGSFg2c9xIKZeK51Z9plIPZazvnErEkrHJTIPFJbrVaFXYVigtuSlZ2rsoSfgmeNXebLHRsTjxzsPVTyibUvZrVRibLeEDsvaJ8Tb4mMtsvWb+eLmRI0Zplr/6xFaL0vrNtTxPSaFGyd3nVlBFyVwPW5tZuU2PPtmMba5j2PnkISU/x4v1erFQ4PDzEajUIgZa/XC4RJS9jbeczOF2dZhtlsFu7LYrFAo9EIexuzzTonXCONrQi4ioDqdrv46Ec/io9+9KPRc97ylrfg53/+57ep+pFHjJj43ROsKUGi6wPzPA8Wpecu0wALvrwxUvfaF2ur9s1aCN55JF8ld6bNuwwCjdXpEci2ruxY+6z15wlmXhvzKNiyGBwVi4L3lDQdf8+qtmTI35mTWxUoqxRpe5W07LIXe//tpvHbwhsvb9VA6h7Gxt17ToBiBjEvQM2DXX/staGqN8C69PM8L2zI0Ol00O/3NzLU2YC62HNjp6AAbORuKHuPa5yjzgV9RUAB7Vm9ipTmrL9R4/XKUKGn2woyEcdsNsPx8bFbt63XQ8wdrFau1xcN8OHvtLbKrJayc2Jjab97JKznpsbftsUmwFD3YcwD4bkaSVb8PcvOkj9wKsEKbxKRzu0dHx9jNBoV1grbvtM1qkJelbg8z0Nu7pQQtvfauzdavkc81pPieQf0mdfPZd4dW75HtrZ+gnOv/ByDWviq4HrTDva/tsPCki/vCXC+3G8wGITUrZQr1mtic1qz7uVyieVyGeJCeP/p/VitVvVSpC1QE/AVQcxCojC1c2f8zZZBcL7OS3hhhSCAsOg+z3P0+32Mx+Nw7mVquCosbX80oUCsj2VlW3juXg8xYvVIuOw6YHPrR56birD2oB4LL4sTy/TaSA/C6ekpZrNZcO2Px+OwcYf20xI3wfl8YHMzD09ZtGPuKW7MZcwy7JhYS9YrI3W/Yi58e21MWfTqs8pAajtOHQer7Gi7U/euDPpsLJdLTKdTDAaDECDGdb2qbCuo7NuljcvlMrizWQY9UcB2QZSPOmoCvkKw5ESB2Wq1AiFySRI/8zoF3bh8+TX4jdpyq9UK80bcdzjPcywWC8zn8+gcXUoo2mMpa8RagVwKZV2u6oau2gb7m1p2sbbFyvP6oAKcVq6uQ9XIb0XZvGiq/bQ+8vx8mRAJE0BhaRCvodXCaw4PD0OZmtpUM53pZz5rGvlqFTqPeLXtluz0XtCasolhbLpHtlPL9YKYUpmevDYqUufrObqMTpPV8BmwzwHbavujXoaY4mPJOeYN4L2aTqc4OjrCY489FjxZXD2ha4RVufW8F7dv3w7ZCG/fvo0sy9Dv93F4eLiR+OMylfOHETUBXyHEtHK+3JqGzl6jsKknFYx+HI1G2NvbK5Qxn88DAVtrAojnztVzPCFYZlnyOi9hvFdnylVsERO4HtGyTrbBs3piZdk1uSn3ZMrtaYnL3gObolCVJBXqbIMSgrqtafmoNRerM0ayrEPJ03uGVdDHBHYVhUSfLZtYRAksRQpVnsWUcqZu2VjAlZIy/5e9L7HnTO9rrA/6G3Pq04Ws7nKPgG05eZ6HAC7gTCb0er2gxOsSuNQzXuMMNQFfMejL7D3gnvVhhZu1bngOy+v3+9jf3w/1HBwcBE2ZCT8Ia4V5AtZz91mLJgVaCzYgiNursRyPCMqEdsrVaM/TrEQUMDFrz7bfzpWWXRdTAKogZcXZQL48zwv5nymUeZ/ViuZ91GkAS9Re/SmPRExR0npt37woW/bNEtY245MiaM96t/VzKZYl4JOTk6h3hXENbH/snbXKlG2ztfxtH/k71yqzrZpeMkaatqz5fB48bsCZvNDrX+9NGa4yagK+IvBeptPT0/CyM1UkE5zEhIh9MTT/Ml1+g8EglDGdTnFwcLDhJrPWFACXlDzt3JJzSlu25+r/suQRVdzPbFPsHCVyK4jsHLodC+8z61PB6ikKMSvea6uSKi0Qm01M52ltOScnJ+h2uxsucL2XGmEds2JjsO592z9bhrpnPcVKFaEYYsSuzxDblfJeVOkfwSAnQt+H2PNj99P15nyVfD149yHWfy2H0euq7HjL+vicc7wWiwUODg6wv78fyBc4Xw+skfg10qhny68QVFjz5RgMBmg0Grhx40bYqcgTdh5peUEiOzs76Ha7aDQaWC6XODw83NjDNGVZWsK1woEuclpNtA5Va7b/tVz9s1HEVdpjy61ynX5OuUm98q3LXYlNl4FsAyUqPgdaJgnKtoNjbJUpG9im6SH5X++R7m61LRHacbXj5o21/nmKn8JTAFmWpk1MPRdWQYrBPp9KwN7UiNZtlaSyulJtSI2Jd4z3v91uh/Z67eG5NriP8QI8fzabFXZG4ntZW8HlqC3gKwKP1NrtNh577DEA58FTb33rW/F7v/d7hbV6fDlPTk7QbrcL2XaY6Ybn9Xq9sN7v1q1bhfkeFRAaeetZZ94x+5lWGQW+BqpY8ut2u+GF16xflryrkIEV8t7nWJ+8/ugcnl6vY0PFQ5dNZVlWCI6ybffuuXUh2+tUWFLJoRWjfxqklednwXXD4RB5nod13oyQprsSOJ8LtvOFXps9a84TyjFrjdAUpTyHblv2MWZl6+eTk5MwPqpApJ4H1ulFYtt6ut1u8EQdHx9vlKnxFtqO2L20nz3Pko5FypNDrNdrHB8fY29vD/1+H/P5vDDVQIs2y7Lw7nOqR7ex5K52tJiHwyE6nQ6Oj4/D2nBdBvd6oYoceJBQE/AVgrrmgOICeCWA2NywDWTyHlIuNZrNZlgsFqUPstWQvfNTQppClJa7as8qYDRSW+egqwbXWHhuOyuoUmThlef1U8nOKgA6brxez/EUGguWb603jptG4lqlxhOOeh3L12cqz/OClyVGGLYPqnTouTxm++DdH88VzTnrMgLib1XcolZZqGpZWre/Kqlsp/ZR86Hbe2SnA2J9sxHH2tfY88tALABhzlpXQ+h46/Olz8B0OsV0OsVwOAzl6BjcLws45Z17EFET8BWCEihw9rBTUCoZWwJWK0gFgBIfX7p2u43lcon5fB6dM7SC1MvkU5UMWRbns1kug4IovFi+3RLNut5iL6A95gl122avrLKXm9fovYoRnRJhWfkpy8v2X+91q9XaCALy6mo2m0GIakwA4T1T+t/Op8b6EFPWqtwf717okh+vPgtPCbC/e/VWeTZ0flwVXG8+3iocXvKSWD3sgy4n1GmFWDlsz2KxCO82o7Z1Oiq205btw3K5DMlb7HlVpofuFa6K9QvUBHxloOH9/K4WzrVr1wAAt27dCi+bPojr9XpjezSLTqeDnZ2dQrq5lPWq8NYxekhZchQsJGL2kQLi5OQkbAah7kgL60aMwSPfMg26ilWsxMDfPY/DNoLCts+SmY4/Cdcuc7HPhbpO1cPQaDTCfB6tJV7Hsfcse4uYlewpHnpNjPyU5FX5sGuVU/DIKXZe1fujSpdG5c9mszCuVhnzlnjZpWp6r633gmXq1EZZn1jmcrnEarUq7MCk3i6WRWWc5GzbxYjn2LpsbfNVIsXXEzUBXwFQyKjG2+l0gvvntddew1ve8hYAwBe+8IVwnRVInP/VhfcnJyeFSOrVaoXpdLphUVSxULx2x7R3hV3mou47zj1Ra+fxTqcTSKhs2YPnkrPttq5c79oqxK45kSlode6MqKKweO3Wzzo3qnXqPLM358l5c7V6T05OQnrRLDuLBaB3hOkp1cpS8k15EyyheONWlTR5fZadB4Jptixrhcfc2DHXsr3OelqUEO35HPfZbFbY4GA6nQaFhlMpHE96mbznSt8B3jP7LpNMY14cj/iyLAvbCj7xxBMAzhSw6XS6YUF3u92QZ52ywipQOzs7hXiTdruN6XQastYx53QNHzUBXxGQaGiB2K0EmXCdL4O3VtK6/1RAt1qtIMxsSroqbtEyYtKX1hPOei21ayA+V60uM9XOLVnFBH7KJRuz+j0CSbmRdYmSd50VnDoXqIJOz7F9LIMSpd7vLMswHA7Det/FYrGxnpeZ0G7fvu2uH47BjlPV9qYUJP6ufVGL3Dsv1T6rUGmdZV6OWH/sJgyq/Mzn80L+ZJKXV0dsvS/bzCmZshiNlMKoskHjQtR1bP97SqhOg7VarcJUWB0JXY6agK8IVHgCCHN7wNlCeBJwTIh4czi61lITCKgg9l7gbVx3/Gxf5ljgEH9Tdx7L1WU0JCyW6QnhWFs9K9xru3e9kosnYGLkfhHEyCE2xrF6Y4TUaJxtHj+ZTArWLMuhlWUtXa0z9n3bcU99LyNKfRZiikLMMiwj26rg86qBV1SU6fJlnIP1Pqj7vEw51FSPd7PO1ib9oKfDy7XueWAoQzSZB9PFsh8cg3o9cBw1AV8RqLDn3KjdFmw8Hm+4/BSqWVvtWy1qj4AvAi1Dg6zselQrJOlO1ChRba9q5ABKXdAWZQpE1TK8c6sGnpQRlke0ep5aI/Z+63dLXFRuTk9P0e12w2/W69FsNtFut3F0dLThZvbIwiO8WDtifUl5T8qgyqSnHJRZxV4fPI+NHrfnci6Wz2+320Wr1SpMnaiyQHhz6dZjpISW5/nG/doGKQteYwFSy6L4DGnEvN2W8H4GYl0V1KNzH1FV2HtLc3gtU0T2+/2NtYcebLJ8zi3z5dEkC7Fyyo557aTGrKCQp9ZNcmY7SdB2izyruadcXSmh7llaXvvtuZbUPOtqmwQb3j1TQrFLUrx2WMTcwBoDQCgRcyz5PGiqQlu2Z7FZQtaxixFXrC923C0ZxoLQvPJjdaTq88ouU3BVceTYcD5Un29e762VJdnGrHOmCvXqjvWB13rKBd8rbTflCs/1xioWXW/fI/18Wd6hhwW1BXwFQAtQLUSSFqNUm80mDg4OCi5aBQO4+KJyHinPcwyHw2ABW4snpsF6VoZaZLEXk3OO7ANdcZ1Op+BGZBIAdel5lhh/KyPhGNl6QrSMnL1rbSBUzOVpkbJgLfHG+pciDVq8VvADwGQyQafTwWg0wnK5xGKxCJnQer1e2PuV/eO1XsStjS+wFnDsv71v9rrYWGsUvEcsKUXUnqvZw7RfsfX0VinScbGKk37nfxKoEpg+BzqW2q71er1BvCmFzBtH1tPr9cK0FVcWLBaLoIxxO0qtWz1OOzs7IeCMVjNlEe+NKh5VldFHDTUB30dsYyHRrQUU1wOr5cqX0woIXh8TaOp+1ixTsXaWvVDqMtNrFMzCpS8wz282myECUyMvte1UJgAUkkZ4QrNM6471xbOiUihzpWq5MQUlRhxWUNux0Gti1qBeT4HLe8/oXJ2b1Gsv23JJKRSeckdYt6ZHQKklUnbsdMxSucW9YC/7O93QHGO7fEehbmm7IxnL0z55Oce9vleRKSRZusxVYbeubS9mg/XRSqab3a4HjqW3rHGOmoCvAKyVpO43EjDXyQK+5q7r9azlQgFgdzrS+i+iwVqhpeXonFien++j2m63g5Blsnh1mfK/Lp9hOj0PVZSFWNtjZcXKtALfW8bCz/zvWdoxizjW9pR17ZVLUMEhdGMA66b2SCtWT5VnRS0rzzpPXaOeFlunknCMTGw9noKn0N9Tioj1DGTZ2RaPnCdVorOJM2x79HPVMU3BPnOr1SqkGlVouk6FXddLJY5KG6eJ7OoMG0FdpZ2PkrVcE/AVQcy9ZCMi7Twpz+Vie4IWsS4/mk6n7jZv1urS8qtYl1Zztseo3VMoUatmu70lF9yEghGmZYLbE7iK2DrgWB9tn2xdNsrUa59HwNZlqeXHhLHnErXtsm5WoDjfr+tRWYcN8rPtsnXErE3PNa99V0vRI0JPSUnBWsL87LXXUyxiZFilbp5DS5jKpO69S+iyM22DVeIui5BUcef6XuBMiWf+b+aLt0vieD3bDZwr/a1WK2xPyI1c7EqFqn14lMgXqAn4SiBFANQ4uSA/Joj1hdLy1P1lA7BidZe5Dz2h7JGUQtvNzxQEbCfnjtvtNkajEQAUkhmUCe6y9qeUCWt9eW5dW4f3mfAIIRXJa8vif5ugwWuPWl1q3WigDetUgU+lJzUuqX6mlAJvSsLz9HjXlikBMeXIK6eKZatlp36z7dD+k4A1BaT1AnlknEJVT4ktk3PPnKPVHAMkYGDTovdSagJn0xdU1qjQe1NZVVBbwDUeWFBAcX4UONNkr127hhdeeCHMw9iHmIEQ+sJrQg++LKk8y3ptFaLiZ2v16NpdXYbE9qlVtFwu0Wq1ggXBNty4cQOtVgtf/OIXCxl8LFJEWya0rHBT96ySoCU7b+mGHRN7vp7rtdF6IWz5GpRky7FlWQ8JsxZR+KqnRGMKvPbqOMX667VH2237b+d41U2r85E265V3f/R7zJK1pO+1dxsSsfeWhMa9cjVQi5npSGbqCfI8IF75Hry+ah9JwGxbq9VCv9/HeDwOsRma5lLbqylq8zwPuyfxueI00nK5LNyzGj5qAn7A4VkMjEDkw71cLjGdTsMDb12pfJnKrCr9ru7KmGCq2n5rnWqfrBDmnJLWzd8pZBm0xejNbdoRw7a/xayumODU7ymCjNXvzaVb6826qj3Bbe+D3Q5PN1K3CkZMCdvWyqnSd3V3em76lKLjlVnFSrTjmkJK0bDPhiqdugGK1stzrJuaZVois/d423ug3qROp4N+vx8yonntAja9LVonPXHaX/vcVsGjZP0CNQE/0NCXyxKqYrFYYD6fb+zGAhSDrKyAILkpicUiifW62G+e4Le/xdyl1sqyS2eAc0ue5V80GUGKJG2bLfnw+pTbU8uNzYHFSNtrI+u3lq79LVZGmRvWa5tG83rleZZmrP0pN29sDC4qiO0743kMqra5Sj3esZiCkmXZxj7duoQu1lavnTHyraIs8pzFYoFms4lerxfywHvz/sCmzAGKskIDOVUO3Y1y9iigJuAHFDG3pWqVmsSCCRMsgepSALV+1J1HIvOWeFzkBUpd572YKRK0/ebm42Wo4gaNtUfLUIWmjLQsCXplpshW74lebz0Q3nFtn3Vf22OpseFnu+zFJpfQcmL9TJGUrc+z3m0/qyoSXkBXqk33Cp4LlsoN30nd8EKt+jLyvRuolT+ZTLCzs4N+vx/Wg0+n08JYcmrCvgNZlm0QMC18TwGrsYmagK8A1A3HzFUKChu+8Oq29dxdao3qsgPu1mKjiqtYajGB58EKchUqPLZcLgv7AHMZR6vVCgkEUi/2thq4Z+l6bbZQYe+1SYVUmZVn22zbrl6NKkSmgV7aP+sm1OVpdilbzKLy7l3My8E22/vseUNiyg3L0HNt+zjW9J7YyO7Y81KmSHhtrGLNk9gAhF2B9vb2wjpc3ovJZBIC4uz90XZ4bbHttMqLB33/8jzHwcEBbty4gU6ngyeeeAI3b97EbDYLpKrz1OpNy7Lz7So5hzybzUKfea0nG2qcoZ4hf0CR0nTVFWnzsKrQybIsaK4esdh5NCZ6t/O/25CZvW7bl47XaABIo9EoBKlQWJUJmipQ5SUmgGP9oMITs4zv1lrhOKSsQm0LoWumY21KtdO622NWaqxvKY9GDCklT9uS+s5yUklnqpRb9lzFyETHyZtCabVahW0egfO12Boh7T2PVcjXHi/rk95HBmABCATKJDj0qtGbpvKHBMxIaCrOWkeV+/6ooibgBxwxa6LRaGA+n2M+n4flBHqNzi8BxZ1TUi8iy4/hIqRXJqxjZar2rFl7rEJRpu3HEHNRxshAxylGSl79KWKv0odt+pS6pqx/VeqJkbDtT+wZ8u6156r1yixThEh6ZffE62OV5zpm9drjbAd3GCNRMSkHtyecTCaYzWYby/+qku82Cl7ZeboHuGbKUk+Il9mKKSuVgK2HxnqJapyjdkFfAZQ9vDaVndXEgfiaTCa8uKi1FnMlaju0XZ5giQk2O+fEfmybXSd2jmchxVzRKQskVsfdWFGxclJu2rIyUwqCjrfnRtf/nvKjBO/B+y01hmWWE70iWlYZcVVpk71Ox4LWoP1s20Wi6na7OD09xXQ6RafTCUv+ZrNZyN6WUsTUA2LvQeqds2XYa+wzRFfyfD4PG7N0Op1CYh4SMFBcnsZrgGJQpEfAXpvvxkP0MKC2gK8AbGAUtX21cL3lC3qO9xL3er2wEYO3tEPLSuEiLkdbtgrPGAkCxV2SbF0XcdlVRRXhrmRmz61K0JZsU+dchgXkBf5457Mtat2kyNa7d6n22l267Pl2XD2rKhZNXIa7sXx1LEi8XAvbarUKGxQAKJBv7H1jH2JrrlPvaFUr055nd1iyWwt60xLqgo71AfBjFmpr+Ay1BXwfUKZ1W9ilJ9REdRE855LUKqB1y3O0vOvXr2N/fx9ZluHw8BCz2Sxs+edZQhd1l3pWjs34pPWpQPOW3HD9c7fbRb/fD8kNbH1KFtZdyrr13CoCextitUpEmRVrLSpPoNpIZyuQPRdzqm+e69SzknSsSDA65raPVS1/u0TL3g/bL1sOE1mQvDW6OFWv7b+2Q+v2xpjQWAk+w51OB+12G91ut5Bnud/v4/T0FJPJpDDXmiIlTTQSUyy8Z/EiRMcy6Q4HzpTzo6OjQjyBZk3jsfF4HIIi9/f3Q526l7e3d3mNM9QEfB9R5mYD0u7nZrNZEDh2f05dkqSuLAoJALh9+zZmsxkmk0lok9atn1OuzKr9qXI9/1SIaV9WqxW63W5w8WkGLyWKLMsKx9kHTykog0cudqw1AM6Wva2V5ZGr/e8pEFWsY494tb2pbFceyVVVKGMKT9Vnzt4/Wp1slyWhi1pZKU+AKg86DgywarfbgYCm0yn29vawXp9tI2gTx8Tum1W0PEXUK0PbV6Xv+n4AxQ0iGGylgWEaFAkUU5laaGYsT4Y96q5noibg+4wqDyIjmb1rmBUK2NxZhp+ty7bVagXreLFYYDKZJNtRZiGmCJXX2+MpkuILrnNLSqBMGNDpdNDpdIKA47VefmSvL1WEVZW2a7urWiGxOj0yspZZqp0xJSjWJk0EQSELoJDSNHa/vDqsBW3bFFNkUu322kBPDQOd2O5UjEDsOU4RbuwaEiOnb+h2ZhlHR0chNmO5XBZ27EopLDbbWOpZsmOZ8vBUAeWEPhNeG70EOUBxQxibva6Gj5qA7wOqWoqA787UeZdr166F37gvpyUyuzRJE3ho0vQqRHoRzTXVX0ssKjQ0uw77Q0t+Pp8Hi8NunUdoNqdYEJpn4XiCq6oyEXOrVh2PWPu2cZHH6rZtsx4HjrldEmNdsp416vXRttsSir3vvE9q9XmkotdwWz2P8FNxDV5bvbG0v7NsRjnbNa8AcHx8DADY29sLlu9isdjwUJW1I0bAMXL22sprqtTnfddnhjKGoHXLY3xP7YYuXtk1zlAT8H3CNg+kfYHU9WNzsHrzoep+ptauZVUVqlXbp8erlGfHwlry9rc8z0NiA5IGd4PiOSyDQtxzZcbaawVXKiLaugc9crPHvT57bSjzSlQ5pqB1Y/vPsdYxj+0Lnfpe1jfPkk55DLznR7/zc4zYPMUxVpa9pqztJF9VFNTKvXbtGrIsw3Q6xXw+d1212v8y5deOC7D57MXa7ymVVchXYZV6fqYyAmBjjrhGOWoCfkChL4y61PifVrAGN2jgBr/zHF7LxOua2MKWrSgjgrI+eC++LTMmPLnB92AwCP1iwnimzOt2u8ENPR6PAyFb6z9mDVgLMOa213bZa2MEbYPLYkKtzGrxLGxvnlZdhHmeu5aIt6GCJnHhmnI+X7Eoaa8f2mfv/tKK0vGwJJwaJ68Ndo7ftkV/s9fb++L9j3kV+B4BwOHhIY6Pj7Fer7G7u4tr166h0WhgNpvh+Pi4EMdglTzWY70Rtq0e8aXIOUaoGkthy+j1euH55/pe205d8miV5Ng77SWEqXGGmoAfcHjkpA8+BaUKM0vA6k7UpB3enp0xMvBe6Nh1MfKI9S/mZpxMJhgMBqG/XJ84HA4xmUwwmUzQbDZDAMxyuSy42y352vrKLLpUO8t+s8I8Jlj1+phikrJOUlacjWoG/O0PVVmxa8rL+m7bEyMGrUfb7Y2Td62ek+d51PPgtcGWbYmtrH/2Wk9ZzfMcvV4Pu7u7geTG43Foawoxq7XKmMSUu1gfYudRkaWsiHlA7DromBKg+edr4o2jJuAHHPaFY1j/YDAAcL4JA8nUWkZq5fJaLzuW1ue9NGWuO4Vq83pMy6kidPI8x3Q6xWKxwO7ubjiPVvFkMgmZwLIsw2AwwPHxcSgnlorR9odjo5/tZuRe/8oswhgJ02r2SCil9Og5eg8uqvzYvitZpCxtbwzK2pLKjOVZ2Or1sXmpY/dESaHMavfaqGXFflNFxgY27u/vF7wxnAtOwaurjLSs4mSPx8hb+6BlZFmGXq8HAGEpItcp2+v0ubCyQvdkZixBqh016kQcDyysINYXhkne6QJjgAdJh/DmiNTC8Qg4BiXUlGCy7fd+T7kElTiJk5MT3L59Gy+99BKOjo6wWCzQarWwt7cH4FwJ6Xa7G8tSUpsrVO1v6noleyX8lNWaKqcMsXGNWc/aD2+DBZvQRZNJlI2Bbdc2lk5sLawHz+rTcda/VNCVd9xzXQPF5BExElFFqNVqYTgcAgAmk0lYQ5saw6pWa8zTZFPNKuFV6TfBe53neSBf9R5ZQicRU75wOku9a61WayOLV6xPjzJqC/gBBR9QzudRYHU6nfDSjUYjAMDnPve54HLlw811fBpk1el00O12g3uJxGWREgxVXhy+dLHEEVpOzALw5k/zPMfx8TGOj4/RbrfxzDPPYDgchjy2JycnuH79eljXrEEhnmWvbVBlhGtdY3NXFEC2zFj5Fh4RemOUgh3LmEXsrTvVe9JutzfWs/I/pzdiJMCybXS1PQ84H1PPgrfjmHJje/WkoBa0LYskYhXRVIY5AIFolsslVqsV2u02rl27hqOjI9y+fRuTyWSDpLTtntLp9S9m4bJcJUrbP+9+xcrVd21nZ8dNkWmhzwBzCAyHw0Dg3W43bGtolzRtc/8edtQW8AMIfYls1ii+eHzx2+025vN54UXP8zzsyakkSMsmz/Ow1KRMOyZimrC1jLXN3nV6PFYXcO7ii1k0y+UyuPj6/X4IJNrZ2cFwOES/3w+uaY/470aoe9aRogqRVh33GKqU760ptf1Xj4gSFZ+fVD+3bZvey5jlru0vU2a8Z4/Xeh4Xz8plu6y1GvOecMtOACEDFN2tr776KqbTafT+q4VuSTHlMdLftc2x99ciZYGzTWrBdrvd6PhZT0Oe52H6S4P5dFOMVBseddQE/ADDklyWnc2tjMfjkNJuvV4XLFm+kGrBEbSKgc2dTqwgsK6mMg02RdqxOuy59rslYFvH7du3cXh4COAsgpNaNwAMBgP0+/2oouC1PaUo6LmWlGJEoZZeSgB5SoJtk60j1Qd7XcrC0o3UVagyo1Osn15/PUL0xsNrS6wPqQjaWP+8tul39WBY6zimcPDda7VahdSKJKXDw8ONvMhVCN3rj3f/9RwmnrHvRRWSUyLV8ylPSMC6VLGMgOlRa7VahS0MdR5/G+/Oo4SagB9g6ENL67XZbGI2m2E2m2E6nWI6nW7kQ+Y8MUnWs1o96zJGNhRYJHB9ET0hGCPMKm4te44NdrHC6eDgAHfu3Amkked5cIn1+/2QqSiW3SclGLY5t8rvbLNXh/e/LHrWlpsiaW/safHQilmv14X9XbUcvTeaOesilr4SbGqMy5Q6vcZCCcA7hxZaWdIIVXy5UxBQzLg1Ho9xeHjovmcsL0W+KUXJ/pbnxekSb6zKlF0Fr2NKV6LdbhcC8ux7rwRMi1czknnLpmpsoibgBxD2RSaYfYfgUhzmQlbNk3mUy0jP1hsjTx6zgk2vqyIcq7TFWnGeG1rHhnNvq9UqBKbNZjMsFouQGJ9CwLrHbTu1j+pGi42HhzKXXwzbuOxiHgs9FiuHY6A73sxmM+R5HqLKW61WgYRjfagi4GP9qqKQVTkvZul6gWRZlhWCjsoyZfF8Jd88L27Nd3h4WEgzaS3sbQIBU2TslWWfg9T7WwZLwBrVbBUxGzOh89IaxKfX19hEHYT1AEOtVQBhAwK6DRn9rJmA+BtfBi3LvsCj0Wgje40nvHUemfBc3FWgbrZUv62Q13zQKuD4O93yN27cCBtNLBYL5HleiMi0c9822CsmzPk5tvYx5QGwySlUEYhZg1XGiWXZNtj5TK/NjUYDN27cAHDmyqfrcDabYblcot1uY39/H4vFoiB4bV+9/qbayO9ViTt2Xhlxc06z3W5vLKnxyEwJmc8WFTe7bK/ZbGK9XofkG0DR4tb7sVqtCvfbvjMpZc1+Ljs35lFQeOvA+XmxWGA2m4WYimazGRJyaH+A83XCdMdTOVkul8FI2NnZCc+PXW9d5Rl4FFAT8AMOfVD5EKsVTJLRF40C11vqsVgsgiu53W5jd3d34wVXLZxuSQpoW4+dR97WKvTOqSJ0NV2lEsRrr72G0WgUXGjWBR/L3uO5bLVs9tfryzZWvXeMnosYsWmd1kJK3Q/P8lRSJmwMwXw+DxtdpIhT22TL954p247YmGxL1h50jOxmJoAfHa7tU7erulWp4E4mE9ca1bLKllqlCNX7jcfL3hNbfmqcLQlrLnkPdn08ZYQm3tD3pCbZNGoX9AMM6/bhMfsboWs5LSHSAtat+xqNRtgVyXPTcdvCwWBQcL9ZjTtmPcb6FOun/e6VG3MbqrV5eHgYgkq4zESFoY3Q9NpjFRiPnHU8YtZhrM9lv1ui0z9bv7bP/rdlKE5OToICp5jNZtG2Vb3XOh6eNVcmmFMKi7bD/q6xDWrlVpl60GO6/I/Pka57pefIjocqrkpGilg8Qgz2ndc+2OcvNT7af89Lo/9j9XoR4zo+Xrurfn8UUVvADzBiQsZ+VwtNBYW13DRvtK4nBjZfPK232WxiNBrh+Pg4bHpQxVKx5BDr40WggtEKAwBhbXC/38fOzk4IMqL1b4ncs3hjngGeo9aRd74dg5SrMFanHScKdU9QavusoFaljN/X6/XGRul5fhaQpVMT3hREGYmlUNUq8kglNj7etXw+2H71Mug91L/1urjjj1p3fF7UCrSWoG2DvTdl4xAbm6pKj1rwsTJTdZQFPfJYrLxtnoGagGsCvlKICSA9poLGPuC6XdhisShspeaBAocCaDgcYjweF/JP2/bZ9lhUFQYebJ84l0uL1s4zMTlHlmUhKE2TlWh7PcuCfVDS5Z/nMvbambJCPFQVSiQWu05cy0gJeEY/xzZUt3OFKQXL61Ps+fTOLYMlSi0rRtJ2Gsae4/0HNpNUaGY1/vG8GLmWPeMpRayqZyH1+7bEpu+OrcMj/ti7kmprFWPiUURNwA8g7IOqmxGQRJn2TgUoo1ete0sFNXcYYqKK09PToPGrVcm5LrWSsiwLARpHR0cb7dX/nsYf62vVF9ETLNZFqAKTWXrU1W4tGOslAIqEYz/rObZtti+eQpISWjErR+fXrFuc/bHuwhg52ut0/pfPTa/Xi2bQsutyvWAyPe5Zz15/9fqYAuN5Ezyl1P5PRQ5bYudxfR5ia26tF8WiyjsQ83xUGRdPMapCwFoX3xtGPTMTFnC+x3hMWWObGJQGFGVULDVmjXPUBHwJ2IZEUmUAvhsR2Eybp24xtYb4UvGlsWg2m2F97M7OTliuY6ODOQfMhAz2BfTIxHvxU8LAI61txkpBQUjFQdd5cu6bJExUdWdu0xavPzHCsOfEpg60fwrvPD3utYHtVeForTp9dlJWtIcyi9gqAvrZkk3Zb1VhlSlbjr47/B6bntDr7TmX+RxpvWX9tc9Xqiy9RpcsqvKqqyf4W2rcO51OUNKp1Jch5aV5lFAT8F3iIu4eoPqDZ18ovvQ8xjV4zGJj50RtOdzSb2dnBycnJ5jP52ENqOLk5ATL5TLM/1p0u91CsI7tk/fCe30DitG7ZShzY2mACBUWjhfXKHrXaXlWICu8NJtlbkTPMq7q5mOfLCmlnp8YGXjH1GIhOD+ske9lAt4idj9T1jDbbsupYtHFSMcjXFsP77mWoWTMZ8m2q0wZuBvFPPW82N+3rUvfO90dDTh775lQQ4M6U+9nr9cLnpTU1EyNTdQE/DoiJUisEIl9puuQL4euAbbEYYUarVq6EpfLpUu+WtdqtQob36vbrdvtRoN4LjIGZVq2lm/drGopqMCkNaeWvV1mYce2ivWoFpXX51gfY2St1m/M9eq1SdvsuSxTZMc+MLsaU1FqPl9NzHARoWrbYL/byPSLlhsjX5160eOxMmO/lSlDsWu2GbNtFXOvfmuhl8HLcKX7AWtOAS3TPmNcd69rhmPtjX1/VFET8F1imwcp5lbzyuI5KigJJV0u9M+yDOPxGJ1OB4PBACcnJwVtNM/zsLaThDSdTqNrFfX7YrHAcrlEr9crZE9ivuXZbBaSHViySllQ3gttERPgMYHJNigR69jFXIved63Xa2Ps/pVZxWVjwb9UKkqriNjyrJLCtJPqhudzNBgMMB6PAZxZMxTE6/Uag8FgY2s65tv2xs7OUac8FtpWXb/sletdnxpf+/zZsUoRsVqIhKZ1TXksyp6lWF+2Id6UF8IbX9suPYckqwGLnI6y6Ui9Z5XxJABw69atcNy+Z1WU60cRNQHfB1R5EKu+aEqIAAqRmrYem9XHm6vxBAn/qBVzWU+n0wnKQZ7nhWCtVL88gvKEUYrE+L3MarUuROvuTgnkKtZkrG1lJGy/VxFQKWvLWil6H3d2dsLeybo9pc3exGC8PD+b72c6SqZizLKzOfUvfvGL4dlRb0xsDMvGLtbHMoXMQ4ywPYKOeQ+8eqpMkcSyXVVtb1nf7W9VrU2FVULse1fmWQCK22mq94LPRKfTcQO2amyiJuArCLoMAYQdfwhvjahH5jFLxPvPc23aS2/3F/uiKTmo+84jihQJpgRvmTeBddsxUKvIO9+WV0aosfNsP1LKR6pPXp2x5SNUjLIsw40bN9But7FcLgvzep4CplMKdh6chE2LucyarIKYUpU6z96vmEdJz9cyUopMjJy8crz2WfL1SC1mEapi8HpBvVbqdVFi9fprY1EU9GjUpFuOmoCvCDSjD91EwJnLkC5G4DxgwmbiSQkd7793DnAepKFztp4wibnpYkLH/l6VpKoILEsU21hkWpdtr22znhdTdlIEXXYtf4uRuCdEb9y4EZasTafTQt5eD57iQcVrb28PWXY25zefzzeCtzz3a+zeeIpPTBkrI74q91O9IVpPLPjK1usppfZY2XInfk6Nidf/VJ/K3tdUPWVl6NSNVdaUYO0OSPY9tgp3TcznqAn4CoAviZ2TAhBcg3xZ1NrU6+1nT6h4lpQFiZ9b/7EuT/PXMokyEo71X6+3iJGjLUNdjlXrKwPLSlkEdizKLLXYuerNUNh7zXMYwd5sNnHnzp1CYvxGo7FBoFwjTtANzemKw8ND7O3thUT9Xn5wj9S8MUv1X5UMdXeWKSNV3Lb2WNnzomNu67EWq7Wgy+rnNVWOp56ZiyiUer2nTJS1X999ek1UsVOFpybcOGoCfkBhNWYv807MGuI5Wg6t5uVyiW63Gxbfc/mAJ0Q9ty3X1NroZ63T9qGKlX0Rd6Yn/FPnegoCr1NBYZdSVLV+q7TXa2dK2HnWoLVGPGWq0Whgd3c3CMjbt28DOAuco5I2n8+DoFytViFhCUGC5T1fLBbhuRkMBoWlSmVt9saiTBFJeTi0v1YxqeoRsWWlPCVVlKZYP7267OfYsTLirqJYpBRDerQYDU9P2mw2K8zjUhZoDmw+G7oEablc4vT0NCQvse2oybiImoAfYHiWjga8xFyR9rO6yFR4N5vNUu35bknHtumiqKrlVxGaVSxmD573ACgP0PEIaRsL0brxyuricrNms7lh5QLn87y02mPpKDW4huXMZjN0u110Oh3MZrPCRhfav3sBa2Fa69PWvY0r925R5VnyFNCYt8Ajbk8x8N5/7/lJtVszXlH59BL5eOWQsAGE7HitVquwP3KsTzVqAr4yIHlSW2XiDSDunrOgIGU5JOCYhaFuJi84w9YdExI8715gG2unCtlal5yWEROg3m8pAVq1fao4VWk33cu0ZHif1FvB+nRHH2Bzhx4u38rzPDwzeZ4Ha4eZ1KwyY4kx1tbYedu6U9VD5OEi4+6dlyK1Mu+NfS9S45MaN1XEqrqu7XHvXeX7Te8H5UNK+aby9thjj4Vz+Tw1Go2oUlejiJqAH0DEyJOaKd1+dn2rLUMForqQmBEqRsBKJh4Jp9qacjnFhF6Z4NrWSk+V6bW1KmlaQZ8i5lh96rmoqpSkLL2YoqCWCXeC0lSmCj4H9jdmS9NcyLE0hVq/bZf9rcxKjd2P1PdYG1IWsm1nlXNihByD92x478U25VVREsu8P/YcfWZUuSe8tfSNRgOPPfYY2u32xooIvR+16zmOmoAfUMReFM2ApS+JJUrrJqWrCTgTogyYaLVahYT8MVIiiW+zj2nqpauSYtBrR6wOFUjbENtloEyA6u8XsfCqXEeByP+ak5fCkXO9tHTsM2IVLq73jlkztLJ5TWpnppQbPeZSLVNS9H5vQ/Cpsmy5qekAT1Etw91a/FXKvMh11rNFb4rNUNZqtcLzxN9PT09x584dAOerMli+R8DbjNfDjpqAH0DE3Lp86UmYTAHXbrcL+7dSsHquYhKx7gjE3/nfar/W5bqNxu71zQr+WF1lL2nKCkzBs0Y8i80j9Zi703OrqjvXa5tXtv5W1WNgyaPb7YYdaiaTCRaLRbhmsVhgvV6H/aA1ep0eEibeWK1WIb0gCRkAjo+P0e/3Q8IFWtipuWC95zES3vZ4jAD5XXfJYr3emNrnm2XHrE3v2a1CKtsSzzaWt6c4p66xUyfqgmaOd84L22va7XbYRU2DtrLsbLc0Llvj+fq5zOv0qCGe667GA4HLekApRKi1UjBVcQ/FrAvvvHvpcooJvm3OB9LtrOK6847FXMMxZWObMU+Vw990JyzdepGRzlXGQusgoXqR8JqKkrnFy/qi4+IpO5bAPQIpIxUtv2z8tR7vc6rssnKqXreNgqkKgVe+/i8ryx7P89yVCdYC1vHnb2xXt9tFt9tFq9VCnueBdFPy4FEnX6C2gB9oWMEYs5hiifzteSzDrif2rDaiisC5iHs1Zt1558TckmVW1TZtsG3xBJXnmvTO8+qJeTTssbuFClG6ClV4p9JG6rPBtb/6jBGnp6chGpqxBPY50r579Xnn2mOeYqC/pZ5Ve69i98u7H7Z+25YU7D1N5fOugm28PGWeEa99/OzFk/BZYhAfg7MU9KTREm42mxtLFL1tG2vyPUNNwFcA1FDttmD8zHkYXcNprycoZHksthlDDB7hlVkl3vXbwHMBesJwm3ZUtXwvomjY33WMtxE8to+eBahjQUHKc+bz+YZbmOt49bu2Uc9XUrX1zWazkKy/1Wpt7CetbfbGpErfvc9lx6oQtdc27z5vU0fs/BQu8i5oqtmq9VWph1MWADbW+mpu+SpeAo0Z8LxNNfmeoybgBxQxbfb09LQQNAWc5YPmTiR6bixq2cuopS+pF1FtkZrXrPqiliFFeJ6QrFp3FQFgz7EbF/Ac/fPcn1URczGqoqT3zvMCkFxPTk5C2klbjh0fdTlay0WD+ehu5Lmr1Qq3bt3CYDAIwVgsi2Rsx6CM8KzVmvJQWItK+2bHSNti5731PK+uFPlXUaiq/B6zblNWfBVrvKwNOoZUppiQBTj3glDe2HI0Lzznjff39+slSFugJuAHGPqi82XQNXbq/vHmcz13myXgFKrMKXnn341bOFbeZWr7em5M0fEsTSC+N6qSlbXWvTZZqyDWpjIi0v8kwtVqheVy6ZI03cVqRel8Xay96jlRBW0+nxeSNrAd3vaCXr+qKCspBUwVl9g4e0SWIl3bbv0ea9NFPCUX8YaknoVYu2Nt99qnqys4heFltSKsLPE2Yagt3jhqAn5AYS0ruoL0JSABt9ttd30qESOEKll4UlbANu6+bXERK9Jen7Iu7Hm2LnXTe+RrE9Cn5lZpHcaEoubStoLWWnqegOWyI+bntulFU+vFlXy1Hv2sz5YlMC8TFgN07HGdW+R3LSsWrWznHW1d7EeK4O+l+zOl9Fa5piq8hCyekm2/lykbtH4BFJJp6JpvzQNgo8uB8zlg9X4QNQHHURPwAwwKIr54fLDt/pup3W2AojAqW8d70ZeljNyqWCje9bHfPM3eu9777BFu2TUe+Xrn8ZyLuqJjwtwqTdby5TOghBgbP3pS7CYa1iL1lBjtu+fWVktbI5vzPN9Yt+5lW2Kecm0DLTCNzAaKXgdNUEPQ2k9Zjwo7Xp4yZH+/CPnaOlMu4pilnXqXPCs+9n622230+/0w/UAC1nvFDTkIPj+dTifkgubzx6xpZYpvjTNsFaL3kz/5k/iar/ka7O7uYnd3F8899xx+4Rd+Ifw+n8/xgQ98IGyB9r73vQ8vv/xyoYwXXngB733ve9Hv9/HEE0/gB37gB+o5gwjsg8v0ge12O8z12YQc9vqLPPxK/LF9PasQY+y/nlvFTZcS9GXXVbF8PNexggFwHiGVkWxZO1Up8gS6rdu7lsIvz/MwF2cFMZ+V1WrlBlyVjQUVD64h52duyKDkx3brUhV+1qUr244V4bn7bfIZfmdaztgUgYfYc3NZ5Lut67nseJX3gv3Wcel0OiGXANdz817aZUaeh4eW82QyCXXYpWtWGahRxFYW8Bvf+Eb8k3/yT/AVX/EVyPMcP/MzP4O/+lf/Kv7n//yf+Kqv+ip8//d/P/7jf/yP+Nmf/Vns7e3hgx/8IL75m78Z//2//3cAZwTy3ve+F0899RR+9Vd/FS+99BK+8zu/E61WC//4H//je9LBqw66GIGzlIIMkjg9PcXx8TEGg0Fhc3UvO5Z1fSppVCU0K7i86GkrFPTaFIlXcXHH3Lcx2LaUueq8ttHToB6HlBDWuU9ep2REMCMVgHAvaZEqyWvgFctRlzPdgDZdpO2HtzWlRrra9mo72W/tr6cUZVkWxqfRaKDX6xX6ZDcCUXj3R9elqmD31ifzd+sq51jFvB9lFmaVZyj1HHkKk5adIk7v3Y2VH3vv9N7Y+8znh2PJ51Ejoel9AIpTMnxO9vf3sV6v8dprrwEArl27Vmkcapwjy+9ydK5fv45/+k//Kb7lW74Fjz/+OD7+8Y/jW77lWwAAv//7v4+3v/3teP755/Gud70Lv/ALv4C//Jf/Mr70pS/hySefBAD81E/9FH7wB38Qr776atSVyq3QiKOjI7zpTW+6m2Y/8KB7iFmNgDNX87Vr18IuNM1mE0888QQA4Ld+67cAnGmlHEdNmKDu6mvXrgUh8NJLL4X6CPtiq/VgBYedt4sJrTLXme17FevYlmvdhbZM+z2lgKjwVzLk+SQUFW5W67dZw1KKBonLLuHQttEqUeEJnOdntuSqc6c6V2rHwBsj9YLorll06dpxtmOg77K3M47XR15nk8Vwnlr/lOy1bVbZUOuNv1viS5FyrJ+x/nh9U8SUgdj5KaTK0uP2WWeyFo1NoDVLOWsDsQhVfJ599ll0u1187nOfA3BOwK+++mohov7g4CA65g8bDg8Psbu7W/n8C68SPz09xb/+1/8ak8kEzz33HD7zmc9gtVrh3e9+dzjnK7/yK/HmN78Zzz//PADg+eefx1d/9VcH8gWA97znPTg6OsLv/u7vRuv6yEc+gr29vfD3sJOvwr5AFICr1Sqkf7OC3xOsKoBpLdgsNzF41qcNwvDaXQWeFbGNxRojETseXtme0pAq2wZTWYWExGADm9Rla923bAc/2+mEWPvo+mWaSU/xUMvVG8cquywpKZUpEtoOmwVJha8lWG3TarXCYrHAZDLB4eEhbt++jaOjI0wmE8xmM8zncywWi8J4pu4hxzbW15Rlyfbyv33ObP+8/paVXUXJ5HVlz6otP/aZ0OxpvF73BPaWI+r7w3Sleo1XV9n3RxlbE/Dv/M7vYDgcotPp4G/+zb+Jn/u5n8Ozzz6Lmzdvot1uY39/v3D+k08+iZs3bwIAbt68WSBf/s7fYvjwhz+Mw8PD8Pfiiy9u2+yHAiRgAEmhQtBtaclSN+FOCQArIGwUK9vkzRVvI1z0fO+6mBC8CGLXexaz/tlxtILLwrs3VYgLON+dyM5r8nzmaOZ8boz0tE5PeOvzlBqDlPD32qftoCuzzOqhQsElVF50tv1Ta5ht4T2KRVRru70+ePfTU27vRsH0UFZelfe0rC59TlarVfBMMPe3KoEkVKY1VS9Dlp2lnmy322FKTOf465ie6tg6CvqP/bE/ht/+7d/G4eEh/u2//bd4//vfj1/+5V++F20L6HQ6hVD5RwWewDw5OQmboQPnbkZPA1bLN8/zgkuPiG3a7rkjgU3yTWnltiy1pDyrN9V2FcTbuOys5RZz1XmC1VpoWrem/4yRnEdovNaeQ0JRguc9s9dbKAFpf23iELvxghWq2qfYGHuEa5FlWVQ5tITPPzv+qXaUkVEVq9bzGNjyrSemjEhjbfUU0zLrNFW+XudZ5VWuVwWe68dtHInNiEU0Gg0MBgN0Oh28+uqrAM4DFYHze2w9ZGXPzaOIrQm43W7jy7/8ywEA73jHO/Cbv/mb+Of//J/jW7/1W7FcLnFwcFCwgl9++WU89dRTAICnnnoKv/Ebv1Eoj1HSPKfGGTzX2Xq9xnK5RLfbxd7eHoDzl4UBOtYS5Uuhc3m0oNrtNkajESaTSWHHEl7D8oDNuV5dQ6wBGjH3nV1XW9Wa8qwTJZQq86y2Du+7Pc5Ic242YElFrS9aFJqK0d4DT1mxZEiL1IuK9pQYfrfLjqzgU0VBFSmu1eVxxhV4sMuf7BhqvXadL6+xkdJ2LPI8LyiU9lnTe8W5cA/qteCUgB63Yx9D1XNjz1QMMcWs7LzYOTHlxCtX+7Jen+1w1e/3w/MLYOM/cK68ccyfeuoprFYrvPLKKwCAxx57LJzrZUGr2p9HDXe9G9J6vcZiscA73vEOtFotfPrTnw6/ffazn8ULL7yA5557DgDw3HPP4Xd+53fCTQOAT33qU9jd3cWzzz57t0156KDClXOHaq00Go3gilQXkkaJWvdQlp1FqzK4gkFbdn6T9QO+1UuoUIy9YNqP2G8qbD03o7aH0KUSbINnYW8rQIEz11vZ+mptR6vVKgS2WFeotoWkoHO0SsJ2PauFJXnb16oJG+x6W1WSyvpry6Pbkn/Wg5Fqk1XUNLWlPsN6bzUK3C6Z4TU2+pyoMvftwVOiysiW58Q8MbF69Dpbvy2zShu8NgHn7mclW7qnPYWJis1wONwoTxXimmyrYSsL+MMf/jD+4l/8i3jzm9+M4+NjfPzjH8d//a//Fb/4i7+Ivb09fNd3fRc+9KEP4fr169jd3cX3fu/34rnnnsO73vUuAMA3fuM34tlnn8V3fMd34Ed/9Edx8+ZN/NAP/RA+8IEPPJIu5iqwD7NdyjGfzzEYDNDtdkPyfc8ionBlWQx22dnZCft7eoEzngCo4uKL/e655GLlWbcXj1vh42Vduhvs7Oyg0+mEtlHJsX2xgWxKYGoNqwJh+8r+2PZbS5jl2GN6j7xzeVzbbeHdZ89iVuj5Nhe07avnmbFKh2e5p46plwZAoX4dS/Ve2H7GcFkuYe9c9d6k6vTKit332HXefaeXgeOq87aqzNqpAo5hs9nEYDDAYDAAUMwEV5Pu9tiKgF955RV853d+J1566SXs7e3ha77ma/CLv/iL+P/+v/8PAPBjP/ZjaDQaeN/73ofFYoH3vOc9+Imf+Ilw/c7ODj7xiU/ge77ne/Dcc89hMBjg/e9/P37kR37kcnv1kCBGhAAK5LC3t1dQYFSgqRVGlxNwljx9Mplgd3e3kNRDSVgFpKf5W43ec/Hp5zwvrsu0a4m1n9bK88pTy0jdqXYMq7gIlQgYeAKcLcOwuXBpxQJnlrJVDijkvN2BvHZ4bbTjbcdedz2q0kc+DyTmmDJlBbhnYVklQK1VWvC8F1UUIyVZVSBtxLmdk9dzU+kqbf/0/93AGzuFp2wSSlhVgik9BbZMsSoDPTfA+VIxupg5HeH1yVq/9Ebwurtt16OErQj4p3/6p5O/d7tdfPSjH8VHP/rR6Dlvectb8PM///PbVPvIwhOQFL7A+TpfXfvL61QzJTnriz6fzwvBWErC3gvuCZIYIds+EGWRqTbgyEsgYctWS48Es+2Lr+2mSw5AcMOdnJyg1WqF1HvL5TKQq1Ui+Nkj4ZS70LM6yyw2XQus52s9KSuqbDy0PHtvtE+q4OkmEFaZ8+pIuVh5nWbTUiuXUzK81k69cPxt8NlFYctIjWXZu2DP9d7zsntV5tFI1cdxbbfbhUQcfPb12bIehdFoFM5frVZhX2jgTGGNKdE1NlHngn6AoZaWHtO8qwBCMJUGYqlF3O/3AQC3b9/GYDBAq9XCZDLBYrHA8fEx+v1+CMbI8/ON3K2VFBNesWhlImZJ6TVl7ryYZW2t70ajURizmOvUkhXLVaLl+O7u7oZcwwDCEgym76Mws5Zcnudhg3I7NeApNZ6At2PIcmzAkxddrNcBCDslaf/tNoOea1d32zo9PcVyuSy4tzmfHcsB7N1Hz4NCcB7ZpuC069aVaKwiRALRJCCXYTnae+M9TzGFNVVmTGHSsqu2t0zJ4zm9Xg+9Xg/AZn75LMs2MqC1Wi3s7++H5D8vvfQSOp0OBoNBeDc0N4GWp22rCfkcNQE/4LCEow803UWz2Qy9Xs99uFVYA+cbN7TbbSwWi0AiDMTqdrvBiolZqgpP4MaEj0e2lry3qa8KUsqDCjYV3PyNJDAajUKwobabQksT2Cup08VnrbAy1y/bGyMoOx7884K3rNClVehZttbCZJ9oFVmLkwTp7YDDulJKGYANpYSEr3O61vrl+bpcxrPItR7ve9nzmoJ3v6z1buvZhoi9+31Z5MW2850HiglgqLyQhLVdusLl8PAwBB4C57nqdarLex5rnKMm4AccFIb68uoc2Xq9xtHREXZ3dzEcDnF0dFQQoJqoQN3UvV4P0+m0YNG02220Wq2Ctacvfcoq1RcrFZDhWbq2jDLXq1emDTKziAlHW45aMI1GA3t7e4U9di1xMf+zbS89ECQotiE13+f12Y6xd461RtUl7Al/DcBRC9pbn6yBOXZuNmXlKOlb5UOv8whH15R6fVQBz+s1qYS2O8/zjfSe1htjn3E7Xno89Q6UPbMpb1IZuZZZ7ak+2LJ53Eb5l7V/Z2cHN27cQLvdxmQyCd4zvZ9MDkNCrwk3jZqAH3B4gpdWLZchLZfLQMAHBwfhHApMLlMCzuZoOp0O+v0+jo+PQ4QvrTW1LFLzqZ4lYY+n+sNzrTBMCTIlSH735iZTwsy2lZaafj89PcXOzk4g3zzPcXBwUBCCPIfKCkmDm2MACMu9qlj2rN+2Uftlz+O5+jzo3tCsV0nZI2IAhWVs+pt1UV8EdlpAPTmWLFIJPDRZBJ9XPrt8Fvif7eYeyXbJF+tMPSepZ1mfm5glnRovzx2eUsDsNd7zYJ+fWF/Zbmay8tpm84sDZ1MvtIApZ4DiNIgt7zJXJzyMqAn4AYcKe2I8HmM0GhUIaL1e48knn8QXvvAF5HmO5XIZSHc+n6PX64WAIiYLv3btGr74xS8COAvoajTOMtyMRiPMZjN3/swjMBV8wPkSHM9CttbRtmOhFgzb5a0TTgk2z1pXlyrLG4/HhWAfG+SV52fzYr1eL7hN1+s1ptMpptMp5vN5gdTtmFioJW3HTO+zLqnRceDyKd4DlsN9cXVcNAKWx+jKpfWvLvTlchmCz6zSowE7VmH0rEUdY+0D+3V6eorBYIBGo4HFYhHmFdmHTqeDXq8XXPucGsiyLMxpKqgAcDw9j0UZ+dnjuv+y9sMbAx7zEHtPUtdo26q2W8tar9fY29sLfTg+Pg7neHsqcy79DW94Q/Am3Lx5E61WK8SNsJzZbIZWqxXey9gOWDXOUBPwFYDNwERhyN2S5vN5SATR7XYxm80Kc78k0m63GwSW7gXKF2ixWGAwGAQr6uTkJOz1aZFlWZj/scKAL60myi+zNlIWlrV8rTDxiK2M5D3L25ZlA6w4N65LXyicuFRpOp0Wli3F+hUbj5jgtgFO+hstcJbb6/UwHo/djQpiwtmex+h59lszfdm4gpSV41nz9r8qBZpVjBb9fD4vtAtAcHUuFotokg+StnqD7DnbeniAYna5WJKYWHmx8bDwSNy2p8o6b/sM8lwN0pzP5xtL5rRuPnv9fj8oYdztSD1rPGaVxRpx3HUmrBr3Hja7jAbDAGcvS7fbRbfbxWg0CkKSLxCX0/ClYx5pOwekOyy1Wi3s7e0Fi8IKTA2+SCElmPiClrm6Y2SqY+JZD56wsxaZPY/jRk1ficbuaDSfz4O1O51OQ2S5tQa9v1h/bNtsOV4/aDXqfD69HHaLPp5vly9ppjUAISCPY+JF43tjzGP2nnoWZ4w4OLYkAV2XDZyTr+eNsUKfGzvYuqvCto3enotad/b5SylEXv2x67xnOza+9JRoRrwY1FPB9b+qlDNinTJGUbYOvkZNwFcCVtjx5feiT+1elHQ7cy2rhdWi6XZtNpsh57TdnUfnBTXykbvZ2LzIWoftS9UXVF2V1iJOXZMqi6CgbzQaBUGiRMo+WhJm/3V3GS03ZuWmvAFV2mzP573gnDNw9iyo+1UVHt4vPkN6PMuy4C3x1jFbktU556rtjvWZbZjNZphOp8jzvJDsRLdz1LpZh+1jjARS7bLPmR7zln0BfnrOqmNS5qq24+89v7F6PHAZHYCwtaPOm3t9UWX76Ohoox/e83+RNfmPGmoX9AMISy7WHWWFSrvdDi/FaDQKRKuWwGq1Qq/X2xCWGrHM/4eHh2HtcJ7nhfljbRMFHC0CaxFbl6Znien/lDVgo163sWI82Hk3HZeTkxMMBoOCJQwUhZB173oWoeeGtr9XaaNntXtg2yeTSZgjpQfDKkU8ZjMYZVkW5ox5X4HN9cba3yoKkT3fgsSv4zWZTIIFbMtgYCHXWeu7wXN1OY3nDbHj6Y23Z2VbcMysN8f2NdZ3bUesrVXI3SN1HVN+5rsNnCfzSYH1tFotLBYL3Lp1CwDCMqbFYhE8FoT12tXwURPwAwjPJXdychK0Vlpc3W43CKcvfOEL+PIv/3J0u11cv34dr7zySshQk+c5ZrNZyBm9WCwwHo9DCktadxQkFGpsi1ob1lICziNCNYhJXXT68luBV+UFtURQZnHFBGBqrGlZcbyWy+WGQqFeB+vCtfXFiLasPSlBq+MQI4YsywqJMuzyHP1Oq5nX0fJhH7vdbmG9syVhzysRE7zeeNgkKZbM8zzH0dER9vf3A9nOZrOC16Hdbgfy47PKtul0QMzi1O+WiD1iVmWNx+z6b+1LbBw8UvWUAk9JLXvGgHOFptFohFUNDKrjWv/Dw8PCmGs2K6D4Trz1rW8FAPzBH/wBFosFWq0WhsMhlssl7ty5g/F4vGER1wFY5agJ+ApA3YcESUBztxJeJKhujE5yBc4DiYDzpAsaRBGDFSAMzFErxUbHWgujjCCt0IwJH0VK4MXKVsJQi1dT7DFhiTcXGiuzDFX64gljb8w0MxbnTGkp8hpvDDxioiUNIGRJ45IfPc9ziXrRzXeLyWQSsi2ppblarQJxWA9LlmUhGM56YqoQmMJ6MlLLvCx0rGIuWe8Zsv+990h/j9WtCgKD2tRVnGVZ2IzFWuGss9Vq4fr16yFzXpadTVF0Oh3M5/OCoqOJXGrrtxw1AV8B2KUnwLk1Zs8DgOFw6CZV8KAWjlp8MXexB7aLAo+IkZzWbX8re2n5uxW29lrPmkkJK/u7N59lXbgpi94T2LZtXhlV4ZE9y6KnhNHLwHm0qibY98YfOHevq4taCY5123SYKXKxfbRL1+yzrOeuViuMx+PgreHvVCY1oxNwHlwY85DYtmyjLHnQcUnVybG3XoLY86PXqzvdluv1gZ4i+8c6mAue7mgq8nRJs7ydnR08/vjjuHbtGr70pS+F8rkb0mw2Kyj0bGcdgFUNNQFfEZCENf0e3Ty0XI+PjzEajUJSDrqKCM+1TQtYXZBcUK+72lgBpAKE1/C4nTfU863gZdne3FnKMoxZut5xK6QsAcaOe0kK+Jt+9ix7r42xssrOiwlZvVY9ECQpqxDZazVAy95PW4dnddlkHaxzW0+AnhsjOl3va88jCQObkf22X9YitbD30PaD19n7Zpdm2fIIEmEssjx2Le9X2XPFPrIeb6UCx1E9JQqbJOUNb3gDsizDK6+8gkajgX6/HyLk7VadWZYFuVGjHHUU9BWBEhtwvh5Yl2vcvn0bzWYTw+EQe3t7heQPfDHyPEen0wnLEOxOMyQeGyHL+SAlK/vZusljFpFGU+vG6imXZVVXpnfeNm47Dx45xYSljmUsMlaFpNeelIKRaiPHXoW7tfj0edB75vXHi5rXMnkPWaZuS6f9smNn2+MRf6yPMTIFivEBuiuTtlfL8vpj6/Ha4CmYQHngkY49n/1YH/XeWLe+tttey+P2+WPb+B5z/lyfQy7vUjz22GPY29sLZff7/UKAJq/Rtt1L9/O27+6DjtoCviKgy5kvbp7nIZhKk2owP+sb3/hGvPTSS4XMRQy8arfbgbwZ2QicL85nMgkv2EoFiCXbMgKlkAawQfy6pMfTym25aolcFNYKV6Tcqfpdr1VrUTc6T/XFIx8tV8u07dTzWA7X0HKcmZUI8N28tKp03r/RaKDX6wWXr7c0i/ePBMx52EajETIref3y2q+WmnpcPI+CPn+qwPBvuVyGpTX22fUsWg+xe2LHzXpyvDIsEVqloNPpuMosCVg/63VlCkKr1QreAK7753HgfA9fTe3JuVzKlt3dXXzVV30VAODWrVtYrVbY3d1Fq9XCyclJkBM217xdLXGZuFfEfr9QE/AVgWdharRxp9MJc2X9fj8EYmn0tLok7dwgUCQktYxUUFMIqrVB6CbxCttu73ctA/CX+ZRFQG8Dj3C3IfOYtaSWZRWr1dbvWYSWfGPWnNcmPaZka4Wv1qGKEgWsvX9U7DQhC4N8NGdz2fjZjFremFlLl+PrzWFXnXv0lKKU9arXUflTYo0pGmwPxzNlteofx9wqcDHFzIP1sDAYixHueh2zYSmeeuopAGfPwGuvvQYAhXvrJd8AyoM3td+POmoX9BWCpynzJQXOLNfxeBzOt2t3dd9WLpxXwWN3oYlZDKrdA5vuwCpExs3APTdcLKLUc5eWub09V6MNSLF980jVuv68/npj5JFirI0pqyb13Rtzz0WrFpsdD4/8VQHzCJXPl90LWTd2YHkeuZYFCqaENJ97VdT4XHukpuNgy0/9niJl2yfP1c3zNCDOrmm3bmaeQ2+XZ717z4zWrVM61sNg0Wg0QrpPRpcDwJve9CYMh0PM53PcunWroKzr+AMIqydSXoaHzX18Gagt4CsEWrt2OZLNiMWE6ITVyL1ygbjLzSMYDdxSIevNAWrmLLoPFbpHrW2vxbaWqneNfrbBX945hFUMVDBaa8RzY9rzvDqs0PLujXUX2wjlsiUx6tIEzsffuhJT7eIxVfAYJNhutzGdTgvPgxJ8jOi88q3Fp8f5zGjwoLY1ds9tf7axyjxytXP92l5LSDpe3v3Xe6r32WYkS7VN1/7yOAn99PS0kIgj9qzodMKLL7648Vyr4s/zeU9SimRNwkXUBHyFkOd5SMBBLBYLTKdTDAYDDAYDjMdjfOlLX8Jb3vIWPPPMM7h58yYWi0W4Zjweh4Qc6k5j+cDmfq/8TV8gdfmpwPGWBylsKkEABfecum9jlp7ndrPWm57jKRbWata+2T5aweFZIzH3sRKIvd7WZ8cutqbWc9/q2Om5nKtXBUeTpgDnaQSVTPT+WtLQ52WxWODatWsAzjev6Ha7IZsW+08lQcdI22THuczi0/MYTBhbVmXH345z6t7FYD0FloA10JDn09K1AWJMfgNs3lP2i/Pa3hjo85FlWdidK8/PE8poO7jDla1P5/dv3LiBZrOJmzdvYjweB9nDc1arVViyRNnCPbNj47aNolMFnhy4aqhd0FcMHqnElstcv369cB1fSIVeG4vu1HotobBcLyCKySsWi0VhWZMKYloFGuzjufZs0ItnbabGKUagHix5e25Fr76Y5eURaMzy0GsUMStLv8fKIUl41onu5KRto9BOzd9bomOSDM4F2/NsMJJnIcaQUshIUuq2te5QO0ZWiSmzLj14zxbLsmNNq9Q7d7VaFQiW5/E98KzsVFvs8iL1ONkpH01sonjssccAAK+++moog/ew0WgEr5s+xzbwzWvfZeOqW9Q1AV9BWLckiQ44XyD/2muv4caNGxiNRgBQIF4Ks/l8HiJmdc9Y72WnsPMiOmME6M37lX230Hpj89NlL2GVl1QF2Dbk652TstT1nNg4p8q23gPP0tcdjbz0oLp5BK1b7T+vURJIQXfUYfs0Tao+C543wHogeNz7bMcpRkzqxYndQ0+RrGpR2bK9esq8OHoeLePZbFbYUMOz1j3wfK5koGKbio8g+VqL/Nq1a3j66ac32qHkzV2mvPzoLCfVzhpnqF3QVwx8We2Dv1wug8BrNBph6cH+/j4ODg4AnJGztwUZ3VUnJych/aJHRLYdHgnE5lT53ZJSmWCM1Z2Ksk25H1NC1vbZSyQSa2/sN94vPTdVr15nLSy2wXMf6pjTza/CWK1Qqxxp+zmHy2NlySIAFBK+0GrudDpBSMcsUetVidURe2ZSXgT+Hrsn28K20VOc7P2wLnevPfZdWa/PEo5wCRt/8/rv9YP3TpUwKlLAWZpaa6WSaBnVzujnL33pSyGwjWVRkecxnacuU9Yum3wfBjKvLeArAEsi3oNOQafH1+s1rl27thHdTAK22jhz2tqoVg8qOPinS1Y8t2VMaMUsCGuhaFIQbUMKKcHujYEe177pvKf98/pmx0iPsTwvY1CsT969ta58bSNJmC5JqyB59TQaDXQ6ndB3nTKw7dN7R6JQixc4s8boDo5ZRFUVJO8+sV3eWPAaW64lMqsgpdqg16X6wGPWY5OKmrZK1nK5DP0qW8Zn28t752WnA4rTTpweUoLWNf7aB7ZRrV/e29RqhCoeqEcVtQV8BaCuOxKdXaKwWCywWCzQbrfR6XQwHo/R6/XQ6/Vw/fp13LlzB8D5XA5fEApParbr9TosD/JS/2k7YpauRcrNqtfHrOyYYPUsgTKLx7vW9sdaXGX9tNexzFhQkNcWtVK0DKsI6HWxqHPgzCsym83CZgqahJ/X2Wj0fr8frOaTkxPMZrPKxKlCnEGBrVYL+/v7mM/nWC6XhWkQWtvsr7XI7dha8Lhm/PLWBqcSZZRZ2rH+xjwW6i3QmAV9f2LWrAUT0tj+2jbxP/fvpizQZ5DtGg6H4Vom4Dk+Pg7pbHd2djCbzfDyyy8DAJ555hnM53P8/u//PgCE6On5fO564WLvycNgqd4r1BbwFYElPOsapAVsrV0AhVRyej7JV8tiRKlGybLOy2i7flfBy8+x74BP/jxeBs9K0X5ZazzVjzLrKGXJW8QIInZNlb5q8A4tYSpV2j4leev10OfD9sm2gVGw6/U6TH2Mx+NCEgrOCTOIxz5fqX6Vjbnte2wapMr98+ouO+aVGfM02HaVtSXVXgZ2cYvBdrvtTi3YYCmmoeWGDMD5Ot4syzCZTAIJ7+zs4C1veQtGo1FBtlhFx66kqFENtQV8BaHEpe5jfdGazWZYcnTt2jW88MILODk5KbgjFbrtHrMbqaYfE77btts7tu08nWeBlFkv+jmlWMRIr6pg8eZldWmPjWj1rOSyMa7iQWB5VKi49MQSEoNrNI+zbsahlnysflqfdr53PB4Xlth46Ut5fZV7x+/2fO9+2t/tMxB7Fu3zWOV599rCsfXaby1i28aYtWuna2z0t/UkaFnMjKd1a5CVXXsMnFm6/K5xAQrrtblXSI3NVUZNwFcQqnWSKHV9LXAm7G7duoV2u43hcIjBYIDJZBI0XbtTEoDgrqK1pAke+DvrB7YjppjALHNPVymrahtirkOvXisYOcZ6rqeg6PX8TUnX251G2+d9t22JZTWiwNd6GfVMS4mkzPZZggTOd9oCisqDN858hrhXso2gZrS1pinVcjT1qPZbXfKe+zdGWPp7ym1rr9sGdjyscqpts/dIFRrr1fKu5/k63+p5TfSe6zE9RwOzmJmL9dJLoZstMEraq0ehFrCOz2XhbpT+Bx01AV9BqHtWlwZoNiMAODg4wNNPPw3gbE2wpqnMssydZ1qtVmEhf7PZ3FimwvNi7bLnWpS9TKkXN1V+WZu8tJmxMr3PWZYVEhh45wKbAtBrg65R9TwLqX5aN6A396aWHJ8TClldD6xkrpYPydTCLn8DzoQ0g3KA8ykMkkYqYC7mbbDegar3u8p9VdLe5jkoey6tZespaR5i3hzvswcNtuN42/X8vV5vI1sa5+NZfrfbxWg0wtNPP10IrJpOp7h58yb29vaQZVlItsH7zTXBqeVONeKoCfiKgi4/JWC1NigEmRXry77sy/D5z38ex8fHGAwGgVx1lxuS8mg0QqfTQb/f38i3S6gVYq0BFXIxy9dDmVBNWbC2XfZ3G6DjCUr1HliNXl1xWrYSVcoNRyLkUo88P49UZQCMRrJ7blYvwUWWZYVlZXoNnxHdqUijr3lcd845OjoKGY68+2jdtLSQvIhfu+VejNSVpO35VZ4hbZta7LFlP96ysBQJWovbO1+/c6zVu8BkG55rOuV94Xdv0wNVUNjXZrNZ8DhkWRYC66iwLxYLzOfzgqLz5je/OWQ0WywW+OxnPxtImnP8R0dHuHXrVnje6Jb2tjG8TNh3+mFCTcBXFGoFqzA8PT0NmXAAFLaG8yw4m4OZ5fB8TSkIpAWT52L02s1y9MVKWbBW+HmI/V5mxaRy4XpCRd3+GonO33QXG+uRYBtIDradnlDW83hfdfmNPd8jBlU+tDx1aTIC1mZKK7MIbTpJ2y4lZrusqUxRivXHkr0qK/zO++eRm/VIxNyqnndC+xez4LUNJC+SIIPUrAJr+2vvZ8wrw37ws05JsQ02fzwJVOeUd3d30e12MR6P8Qd/8AdYLBbheioR0+m0oOxRNpTtfHUZeFit6pqArzDU0gDO5+6sy2k8HmN/fz+8pIvFIgiEWJlMyNButzcsrKraaMpyqULWHradX/Lcg1qvdc3xN3UT65jwPA1aUQuTQp33YrlcYjKZhHq5UxDJW93B6vJn25QgadV4c9EpKEl6Ll7+t65nW65nBdLlrOOkc9F2s4ZUtKynRNj7nZpDZx2WwD0lUX+3Hhyv73puFdCrodHe3FlI6+Szk7Ig2X79A3wFgr9rmXmeh3de74lGozOD3sHBAcbjMdbrdVjCRu8MlQegSPSXaf1u+35fddQEfIVhAySYklJ3POFenru7u7h+/TpeeeWVQoJ960IGiok6ut1uwYouQ8pyqIqLzJulzvXaaKORtVy1cq2ioFZDWRtarVZw7zKqmB4KBdtCa8PWxd84RaDj6ylEsekAhe27JUuPfLUctVg9UlVXtY3Yr+IhibWZ8Kx/vc6zIGPWpoUqFClF0Y69bUev1wvH2u12CIC0y6RSbnUl25i3hn2zy8yAs2dwuVwWFEMSv7quCb7rNmgwz/PCvLHdt7vGxVAT8BUH5xApLCaTCXZ2dtDtdvHEE0/gi1/8Im7duoXr16/jK7/yK7FYLHBwcIDlchm0dLWQ1us1jo6O0O/3MRgM0Ov1sLu7i6Ojo6g7uMzSvQgRp0il7IVPCTUVxCpEtP96rtal7n0SFoUb5/usMsPEJlwGwnKsV0F3lfLczxTa3g5C1iq0FqNaQzpna61dKgI6BsyOpnVai8eSlOdp8BQd/c5zPSvTrhmOEbrXRqtExZ4dtRytUmqvsQqmZ4HyOL0c3Cnq+vXrmM1mmM1m7lSCjpt9Xr2205PS6/XQbreR5zmm0ynyPC/M/fI3ZqujcqDej4ODA7z66qshcYu1fjW4i0rkZc//PmpkXifiuKJQYaXCiMJ9Op2GlyjPc9y6dQtZluHJJ58EsLmRPV90Cub5fB5IgtsX2kQVViik3MwXcTXHrLAq13qIWT8pK0bboURALwLJV0mTli+PrVarsPHFfD4P1rCum/WEmKb11OAp/eO912UqhJdYhBYL56spQDnfr0JZx8r7s2NUdn/0nJiXJOWa1rbE7pOOQcoTE7s+RXZemZ5LGzi7n0x0oSTH7QH1fSrzCPB+eeNPktfdq2J9Bs4z3/H8nZ0dDIdDLJdL3Lp1q9BPWux6HeCvdb8bVHl2HlbUBHzFoS8jH+TVahWWHO3t7QEAbt26hb29PTz99NNhvkdJQF8qvsgkDOB8KUNMmFV5gVSjt8LYO27ruBuUubTtuR7JKNF6LnzrjmOGIrsFHFBcTkRo/l7gXEmya7xVKKv7Wt2FXh+zLCtEFlOoc16y3+9Hycsjpapk6VmQqWfGKm5Kap7S6FnQMaUqZYl77bbvlvec2vZSseFaW75jvLccd0YR67XbQqcueH/VQuUcPRU4u3Iiy7Kw9eCtW7cKiVt4PftBaArcsmegCh41q1dRu6CvMPTFt+43at/q+pzNZmi323jssccCQdsyKJizLAuBRPqC83cgbTl6LlwPtgwrwJUI7AvvWbGxOj2hoMLVXmODeWhlAptJI5QMeR0TX9iN1lkGrTVa0jovqII61u6YMqNLejwCtFHIbNdiscDJyQn6/X4haKyKhabja++ffrZ9sYFuXrmEVW48C1afTa9NlkxjrmVrYeo1KWTZeYQ623twcBCUNwbgqTVppwLKyldQ6dLnLM/z4JbmHsOcVlBvB6+/du0a9vf3cfPmzWBNMw8AFQl1M+vSMm+nK23rNsT6qJJwTcBXBGXauoVaTN1uN1iyAHDjxg186UtfKmzEDpxv1BCr384Xl1mVVjinyvYINCbMY2XFSFjJShELxLLXWWgUKc+jlUphyi3lKHiV7Cy89cnW+qrSb0+J8BQXHtP5Q15PhUstNkXsnsaUwbuFkpo97h3Tex9rS+qYvQdlnhnvOfMsdj4bnhLnRUHbfnjPDslX14aznRpsxbZYxXF3dxdPPvkkOp0OXn75ZcxmM/R6vUDQupROlyYSKQJ+VAl1W9QEfEUQe6D5gvDF8KzTbreLyWSCz33uc/jyL/9yPPHEE3jDG96Al156Kbgfl8tlwQXJMk5OToLLejgcYjweFzbwZts8YWcFYUpoEp7VVyaA7byfCmKbwMAjWLru+DsJyApjPYfnqWVhLSfWzwAc4HwemXXYRBS2jdomWjyaeUiXoHnWJF2OLLPX64Vo1uFwGJ4b7lhEYWvJJKU8ecfs2Ol4E1WCd6wXBDh3u+p487sNIrP1pJQZj3jtud7zY58V7zqOq256weu4Pj/2HHjlNRqNECjJ4L/pdFpwN/M8up5ZfrfbxZvf/GY8/fTTaLfbeOmllzCbzTAYDNDpdMK1fHaZ+YqR3AAKMSK2jTWqoybghww22hVAcBkdHByE8/b29nD79u1CQnabyxcoCoNerxdeZC8zj0WZ21e/e4hZ91p+yjWoxOyRgOfiTkFdnOry9dYR2zbq73pdjOBSAk2Xm2gwllUC9BxvOQm3r2NULj0iVrlKQd3IZajiAo55eZR8damWPS+2JCqlKPBzrK32mPe96hjwHlmLVhWyMi8QvVGdTidcN51OMZ/Pwztqy1QF4Nq1a4F8Dw8P8eKLL27MGbM+JW7KESoLtfV796iDsK44PFeltazoahyPx4GEmflGCUJfPl6XZVmw4FqtVljuoLiI9lvFoip7ka2iYIVNlp3vOVvmPqxy3P7muWk1IYcqCHos1h6eZxULJWlP8Nk5ZC2P12l5mqo0yzJMp9OwzMQrh2VpX/jf6wvvhSVc7zd7fdmz5CW4IGyksI5dDJ6ylFL8vHLLPDve+KiiwGdVld/U9VRCuMqB/aZCxbXiVkmkHLhx4waAs6hsWr+8l+otYPCVLj9SUq6J9u5RE/BDAGrUqlWrS4trVE9PT3H79m3keR7cV8D5C07NmUKO0ZQ6f9zr9QqBXRdFGdGqINjGSuZ3XSZURUHwrOkyYoiRlS3Pu9YLKvIEr0dczCvMNZ2e9ctrPLTb7cLm6nQlxpa6EPqMxe7ftgSo8OpUwrdLrVRZTN2LKrDjrMdi7ayiRMSUEw3Y43HbHu95pFLZ6XTCO03vBYOmNCDLBn11Oh1cu3YN7XYbR0dHePnllwuu7/X6fHvKxWLhTmnZaP0aF0dNwA8B1MJRDZ4RkJrP9fbt2+G63d3dDQHBxB4ErV2moWs2m4G4tf6qSLmMU0QZc+um2kEhUZbzN+X+TdXl/aUEUxk5pvqvS5J4PefnPOK0f9a6zbIsJOX32sPv1qK3Y5IivpS1qL/ZMtRjoH8a56BjFQtus3V6/UxZmd69T1nHXjkeUdt7ovcv5lXgdwb1Mcc0VypwD2+7PE4V2VarFZJzzOdz3Lx5E8B58CXJl/DSkpZZv7VVvB3qOeCHAPYF50s3m82C1TAajfDqq6/izp07+PznP483velNeOyxxwoR0uv1GrPZDN1utzAnNBwOMZvNMB6Psbu7i16vFwKyyoRRimis0PFcl/a/Z6kAm4E5/I3CWsdFQbd7bAztsRiJKqFopLiNcI0pBVpnLMevkiL7ZNcHx8ac6zh1PScTtsSSN1jisu2zwVp6n/Q7YeeLte/2HmuwkkWWZSEQUAnNI79Yn+xzpsd1fHVsYs+yvd62wY6ZHScAQVm2bdfrSbxck39wcBC8POv1OiT54HVMypNlZyllh8MhnnrqKZyenuKVV17B//t//w8AMBqN0Gg0QpDVyckJJpNJYew4787ljVW9LTXSqC3ghwBKOvrSrFYrzGazjZeDVjDndNXNR9jF+twoYDqdhshoTSRQhpg7tswVzWu83MWeq1CJMOUmJDxS9gjQsypj/VTY+u0OSvZctQhj/bqI+4+WFtd1AullJLZNHrGk3Oyp54L3kxZZp9NBt9tFt9tFp9NBu91Gs9l0CbiM6PRz6l5413tjXmY9V33+9Rp6pKySoWRr+8DlRtzKkmv9rTKkS8h03W+328Xu7m7YcvDVV18N9XIVRbfbDUsNVVHj+6/BV2XvVY1qqAn4IYAlYP7RPUXhS6v28PAQr776KvI8x2g02tiUncsOVDhwXoguz+FwiH6/v2G9KspezJTwruqO1mMxYooJW8/9WRVl2n/K8rdtsK7CmHKh361lpb9542qzSPGYrc/2wRsj68pOkaElaU0eoek6CevuZnl6PFWfjoP9nII3NvY+aPCaDbTTc71x88Y/1T5N2KK5mTkNwUh2PvM2g5pmuet2uxiNRrh+/f9v78pjJDvq89f3Od09Pefu2usjxjjGB8GA2UQoUrzCcawc4D8sZCUoQYmAJeKwkHAODIkUo0QiChGxohw4UqJYOAok4RKODU4wC5jFBtsQY5tdz+7OtXP0fU9X/hh9Nb9XU+919+54Z2e3Pqk1Pe+o672ur35nFZFKpbCwsID19XVPOkouxFm2LI9tkT4HDjsDR8AXCfwIWP5YqEaiMxawaQc2d+dhOAonzF6vp1MqdjodVCoVhEKhbSTMdkgMkoyGkSLkZBakOvQr15wcbe3wU3fapNJB5GvWa9Ztm6yHITEbhj3O8kh8VFsOE4trluHXXhtpAVsZm0gktFfyPjrMSWchmQRCkl6/39+2kUWQ5sT2fvgtyMzx8FuoBUn+Nk2J7VnK49Kr21ysUDUs+0F1M6+jGYK/b6a/pLo7k8lgfHxc+24sLS15kvQwLzUArSWRBGzal81xdoR89nA24D0Ic1LhJEa1MW2a3ANUpkPkJLa0tIRkMomrr74avV4Pc3Nz2qbLCY5ZcWhLYqIO7raSTCYxNTWFaDSKarWqf6AmUUnJTPaBP/pBTh3DkqvtGlMylmpF/uXYmfukckJmOXIrQL9nYR4HtidHMSdg2z2yTFPKNSfoYaR5pdQ2swJt1XLhZotpls/SJDJb/2XbZJvNbf5kXVRzcrx4L/tn5iMm/LQesj5Zj98YSV+BILWz2X8pCdt8BExHJj/thBw3uXCRKWD5vGSWK2YuY1+52QefTTKZxIEDBzA+Po5ut4sTJ06g0WhoWzIXZEptxhLXajU9zqFQSMcam97UfuPjMBqcBHyRwG8CkblcE4mEZxuxlZUVJJNJXHbZZcjlcp7yaAeSE3ez2UQikUAkEkG9XtcTUDqd1jHFRBBpSvK1SYg2mOpV87gJqfqT9ciJX46dLEsSiyzLJE2TdILaPcw50yPWT4Ji3RxD2ktt6lu/ukaZOIMWOIMQpKUYtm6TfP1If9D7F1SHlIBt76Pf/XLjBdtC0kwGI0N4+DugRkLWIbUGktylJobvralNYNnRaBTJZFKHHbXbbSwsLCAcDmtHS5Jrs9lEvV73jLNc4NkcrxzOHY6ALxJIUpESEx2nNjY2tLqJ15dKJe0BXSwWPaouqv+ozpI/zFwuh3a7rSXlRCKBVCplTY4A+JOmjQyD1HZ+6mu/kBFZnm28TFIeRBTmJD1oMhqVoGQ9trbaFlecaCUJ28rihC0/tv75tcEPg8bBT43LfnGB2Ol00Gg0tPqT75yZZMQmOdrA60ZRsZvtHRXsI9XptnebbeKigpIsnfNkvdJGzjbJtKZMrkGYKUoTiQSy2Szi8Tg6nQ4WFxfR7/c9+Z45to1Gw5MVD/DOI2beeIedgSPgiwRyUpWqP65uGSsobYByo/BCoaDtufIHLmOJJQl3Oh3U63WtLuQOKuaK3yRPqRq2xX8GSTFBx4MkYz9itpUhMcgu7Pe/Xx1+/TFVj/Jak7yoWuVixyRhqV2w9U0uIMz6bHX6LXwGwba4Yv3S0ceU9GXeYlvssnx/CLO/HCPbcxnmuduebdCzGwY2qZpE3Ov19O+Si2Dpl8FxonQrdzOSOxPJGOB4PI5kMqm3Iy2VStrxknWwXzQxyT5JtbZpn3fYOTgC3oOwqcYkAZsqXibapzOLVGutr68DADKZDLLZrLVMOZFSYqZKi3GkdBaR2Ypsk7ctVteEJOsgmIka5P2mNGsr0+8cicemzh1VlWsjgGGlMpMIpIpTtk8ek8/YzBzFcvwWCyYJE/JZ2hzu/J61Sa4yFMpG+HKhMWiRZdZtO2YzPwwLv/aZdZjvoDkWfuXIetrttvZqZggWn7fpeUwNFlNRsgxzx6J4PI5UKoV8Pq+lX7ZbvhMkX0rPZgiezSmL5TicO5wT1h6FOVHyxyonYJmmsFKpYHx8HOl0Wjtq0PmqUChgbGwMV155Jer1Osrlsi6z1+ttc+ZqtVrI5/OoVCqo1+vodDrI5XLI5/OIRqNoNpuejDkkiSDJV/ZFHpPf5eTmN9n7lWeWaR6jty2dsaS0afbDVnYQbBOyOQnbYOtPp9PZNuGb0omcRElE3BWJUk08HkcikdDvgdkO9j2oXfJawK7u9SM/sy45rqaJwtxBSDrHmc/ajLEe9MxYnx+h2J6TqT0wxyJI42Jqh/idJDg2NqaT4zD7nFJKZ6Dju8iFLNX3/E0xSU6hUMC+ffswNjaGH/zgB6hWqwA2F9psC1NNckEkF1d89u12W7fDtqhwODc4Ar6IQMKUKmZga+IOhUI60QETsFcqFaysrOhA/Hw+j1qtpstkeZz0pONPLpdDuVzWCT+YSIEEZgtLGUQ2JvijD4oDBbyOVMOSpN95OqZI4h92wrFNzrbFxKD+mhO2BNtmOuHwnFwsyPaYhMq0hEHtkJKV2U9e5yfR29TFw0AuHABYyVeWz2tMpyH5/PzeD79FWdD4A9i2AGB5ZpmDnre81/zL9xDYJE6aGhhyxKQ4ckErCTgWi6Hb7aLRaOhz5jjS1i61SHQMM30/humHw2hwKuiLBObkRNhUegwtCIfDaLfbnvzQ9JiUsZq020lQomJSf5krmjsmBUkCg44RUrVtHudEeS6J4eWEJz1IbRK1+T2oTJuKdBBs6vGg80GSyKCJ0vT8HgbD9onnza0tg2BKszYPX2kSMcuV6nE/L3fZh2H6OQxs6mn5v/mbHKSSZl/M/+W7TucsUz0diUSQyWSQy+V0fL/0/5DjIbVj0nbMcgB4EnI4qffVgSPgiwj8gfoREqXgdDqNeDyuJyxmxgI2vaFjsZjHxsQfOvPvAluEy3SCdChRSukUl2Z4DNs46IccCoV0uTK2mSpUTki2vpqTm1/5hBl2YqokB0lC5iQ6Ktn4lSmv8VNh80MpiOpav/JNpyabjdSm4jelRj+vc2kTldtASnI0Vc9BkIss0x/BrF8uFiXhmd7usr82nM1iSfbrXIjKlOjleLIvMtJAej2Hw2EkEglkMhmd27nb7WJ+ft6T1938zZi5yWV9zvP51YdTQV9E4ERl7mhE1Ot1vXpOpVJ6s4Zer4elpSXthMWwBaq8aHckEokENjY2UK1WkUqlkMlk0Ol00Gw2tZqLNivatoCtlbcpycn/TYcqqhRN+IXSsMxhSN6mqqZkL9XQnAhtiTj8yja/m+0ZRRNgU5VKc4AcC6WUVlPKfnLc6R/Ad4UqRqn2lY5ytvHie2GOH8u3Pd8gVbW81ubBbS4cWJdt3Gz2ett1En5k6qeeNssalaT83iE+G3OBk8lktC8Cn12r1fKMJ52uqKoGNnO+r6ys+NryKf3K9lPzZW7y4fDqwBHwHsCwdjRp+2JYQ6vV0hNbqVTSe8Hm83l0u12MjY1hdnYWqVRKezWPjY3prerkaph19Pt9TcK1Wg3pdBoTExNYXFxEu93WNmhKwpzo5YTPftmkPGBrMwjpbGLaI202OPmX3/0mWL9rpB1dbm4ubXKyDTbYSMiUMge1I6jNgN3pSW6+LvMJU5tB8gSg9xSWdduIknWbIWYsz7RBm4ssGRYnjw0yHUjp11R/y3bId4RlSzW2bK9Zvo1Qbe9LkC3XL1zNVrftneXvNZ1Oe0w6NPHwvUskElBqM2aX2eiYxzmbzWrpd2NjA6dOncLS0pJnPKidYvn09eC7TdMUd0NyaudXH04FfRHA/FHLzejN8/xhEbOzs0in09p7uVwuawcrZrfipMzVMidO6SkJbIVIkCxlsnebupKQE7tUV7IvjJU0icEWJnS2konftVLS88syNWy55mIjaEyC6hmkwga2xo1kyA9V+dLb27RX2tS9fnHK/M53zswGZd5rPt+g8TJVx/J+czFj2jGH0YDY6txpmItCvzAuxu0SpiaGz0LuAU3ipvMj87V3u10sLS3pqAjWIctjOKHtHH9vOzUufu+7g5OALwqYkhPJkitaebzRaOiYQ8C7TymwFYcIbGa8qlQqnkB8qii73a52tGIIVDab1RK3UkpLXa1WS+ettZGO7cdJiXkUteG5TBjmGHIBYUqro2gjJBlI2560o0pJzZQUh40XttUt+wFAmxeCMIw0b9YTJLUD/rs1DTuGZjvMRYoZcmW7z1aO37lRMUxZtkWhPEb1MaXTdrutf4fUGiWTSXS7XY9JR+4qxe0Ge70e5ufnteOV3Ota5ouWec+lVsT09dgpOEnaDkfAewDDvrwmgTBcQcZ5mlltOIk2m029W4pSChMTEwCAarWq7U0yzInlcwJsNBrIZDJIp9PodDqIx+PalkyblVQ/+03cNo9r2T85ibOcoDAYiSDbntkm9o2TvOmsMgzhSwnNr15ThWs7HqRal20eVrXtZ9sLUtf7SetBpGOqkIPIyrTbDiPJysVjkHRua7ft/CgLkEHS3CikL1O5bmxsoNFoaAdEPqtut6t/QxzPaDTqCR/M5/NYWFjQMb+yPrkQosZKLn459n45rUeBk3SHhyPgiwTmxCXjduUm3gD0inpsbAxra2vI5XJ6w+1arYZyuYxYLIapqSlce+21KJfLiEQiOn9tu91GOBxGp9PxhDd0Oh09abDuZrOJSqXisTXyL7/72XVtEpP8Oyg+1bx30DU2tSalA7kdWxA5mBO6zXZJla2MbTbHAfBKxLKNcvzk5GpK2Txm5v2VUo/Nacm2yPE7J8u1jYU5Hn7XmnUNUlnLNIm2unjsXDCsScBPvew3JrJvsVgMhUIB0WgU7XZbk2ckEtH+FLFYDJVKRSfOYF3pdBrFYhFXX321Vj2//PLLHi1Wr9dDKpXS6uVarabNU3yv6M/BpDrnOm5+vwGH7XAEfJFBTqamMwx/cPV6XdsBAeg0dcDWSvuVV17B5OSkdvCoVqua9MxQBmkLNichOjPJNpjS0LASho2ARpFOTOL0u99UZ1IdLc+b34MkRJIey6VELQkxKMmIWSfLJ6GZx03ilupFeZx9kiQcNA42KTqonWZ5ZirNQf21vSvyfJDH87AY5t5hpf9B77VJvoyZ5+KOTlEkX9l/2n3lvZlMBhMTEzrhxunTp611U2PV6XTQarU8i0Hafpm9bqfhyDcYzgnrIoQpWUqpEthcFdO2C2ylsZSeyuvr65ibm0Oz2cTU1JTevox2X7lhOidCmZWHhMOYYolhVVSS8E3nIJtEPEgi9atj0DWsc5R+mOVKVSxgz+5E8qTjmpRyh4HtOpYHbDnwAN6sWKbWwc/2baq6zX76jb8tZMxv4WK7xvxrStJBz92mUTERpNEwVce2vpi/Lz9I4mOCmXQ6rTVPJFs6/rHMVqu1bcEbjUaRz+cxOTmJUCiEWq2GpaUlHYPNd4h+GL1eT5uSJPnynZbpLM8GTu18dnAEfJFCEhd/8NL212q1UKlU9JZlpterUgoLCwuoVCrI5XIoFot6O8N4PO7xeiUB88csk7eTgM3JW35sGEYq8VNXjwpbXeYkK6VH2QZbu/yOSRI2tQJ8RqO2P4hUpGQtkyrI5zFo0vWT/iSCFj9+kntQfbZnKbUHAHz9BPzqGYbozXb79cvPTyHo+cm20yzEhDitVktLvPF4XJs+qCmROxWRYBOJBKampvRvdX5+XvthyMVVJBJBv9/XGz7IceR7wMWzn7ZhGDhJ9+zgVNAXMWxJOaTDSr1ex8TEhLYHc3tBOm7V63XMzc3hxhtvxPT0NJRSqNfrALZW5aZkB2z+GJlfFtgiYZKAOTkGSR6mCjTIzjfs5GGWY0pAkpykatg2QfklCvGDvJYTpWkHluFBJomYk7yNIGXoCUmY5giGlslJ11x4DQr3Ole1r6wr6LyszxaDHHS9X5nyWdpgvgPShCDbbI6brN/mqGeqfdPptE5aw1zNMmMVs8s1m00PcVKqpdMVvZ5XVlYAbIXNNRoNXR79NuT7RC2HUspj93VEen7hCPgihrk/aCgU8oTXAMDp06cxNTWlA/lXV1c1CXc6HSwtLaFYLGJiYgKTk5NaCq7X6zokotfrac9nYGviabVaSCaTKBQK6Pf7Oue0/LH7SUTDql7PhpRN9ap5j5yo5CTLRYW0nZLkzAnZLIfHzZSMJEd5vyntybbZPJhl9jBqJDhZkzgSiYQnvzd3QbL12xxPKbnxr1JKq8mp1g5SK9vIyAbbM2c/lFLbNBG2Zx1EtHLc/RZVZvl8NmZaSLNvZv1mm5g0g/G6DAuU4UIM76M3NImTKuuJiQnMzs7iwIEDKJfLOH78uCZfmUAHgK5neXlZZ7Pju8D3oNlseiTsUXGuC7FLHU4FfRGDExYnSP7w5MTb6XS052UoFNIek1ST9ft9LC4uotFoIBwOI5vNahKWHtCsix9OLsDmyj6TyWiCNtto+1CqDvr44dWwR7E+qar3s6P6tclMs8kFkV/av2FU9bxHLmr4od2PsdnAVpIWP4ebIJWrzfEqFArp9KZ+5diIeZCUKonLRnp+kAsP08vcpg631eu3gJD1m2XbrpWaIS56uQNVr9fTMfmMUmDyjVAo5MlSRqk5m81iamoKBw4cALC5eF5ZWdEL5lAopH/r2WxW72hkJt2QizD6fZwtHPmeGxwBX+QgMbbbbe28weOUvrivL9PdSQIOhUJYX1/H4uKilgJyuRxSqZTecIHlSScsqqspsWQymW3JIEwpI4hchyXcYcn3XCYO6TQlMciGayMpc7cZEoBftqig8aH6WtonmfWIEzo/gyQ/W/kkb3ktJ3Q69JgkO2zqTvMaU93u58Rl3jPq4mvQwkZeYyNhW5Y32/tsqv+73a4258j+UTKXXs9ME1ksFjEzM6Prm5+f179JuRjMZDJavc1NU+QY8d1qt9vnHPPrcG5wBHyRg5MGV8a0x8qcwQBQqVQ8Nk8ilUpBKYXl5WUsLy8DgM5ZS3WaWRdJmNI1J6BCoTB0u/0kC3luWCnKr5xR6jYhY52D6rCpSKWUb6vXZkMcViVva4eUem0EatZva5NJQma/ScRm2NkwbQ96VqGQf25qWztlfX4q8WGkVj+CB+zx2sMsmKgxkvvsJhIJ/V3G7spMVZFIBNlsFsViUZd76tSpbZotpRRSqZQnn3S1WvVoBaj6Zkz/uUi/DucOR8CXAKR6WMYeypUzf6z9fl+TqpyEut0uFhcXsb6+DmBz32AScCKR8NjcJMFUq1VNwsyUxbJtakqJYSQ0v8k9aEK3TfhnI0GZcda2+s2/bLPf9baJ3EbiEjKpgs1ubEJu7SjvNSVPP/sew9YIcxK3SYV+8HvGQepdeZ+ftiBI3cz/Zf/OdnEz6NnwOrZTJsWRCTMA6EgFaZONRCJIJpNIp9Paw7ler+vYfe6Vzd83zTz8Pcuc0qwfgEfCdtg9hNQe1D9UKhXk8/ndbsaeA/cLjcfjWkUMeMMqstksJiYm0Ov1tEMWs2BxxV0sFvGmN70JAHDy5EksLS2hVqtpm6+cJDkp5XI5zMzMIB6Po1QqYW1tzaMe81OJ+mHYyc9sh1QJyjr9bJjDSMucRM3YVHMczF2DTKcrXivv81M3B0muLJcTbygU0mlGZTwznejMyViSsZ80KceRDn5y4RUkSQaNq0wiYnpn2563KZXaiNaMuZZ1DRv7Kt8h830y+2N+D4VCGBsbw+TkpLb9muDOZfV6XS9uUqkU8vk8xsbGUCgUtAnnxRdfxMrKig5jkili6SDJOH9qJaQKvFKp7Fi+Z7939FJFuVxGLpcb+vpzkoA/+clPIhQK4YMf/KA+1mq1cOTIEUxMTCCbzeKuu+7S22IRc3NzuPPOO5FOpzE9PY2PfOQjr0oWFgcv6JAhJ05pZwKgs/EkEgnk83lNGoz/VUqhVCrpMvfv34/x8XEtBZvgj7NSqWhvzVwuh/HxcaTT6UACDLIJm9KqeY1pU5X32a63lW9rl61/fhmZ/CRqU9qV15i2wFFhm/z91KNmm0wCtal+/ULOhm2r34LCdsw2fjYti+mRzP6Yiwi/fo8K870cZCYg+QHwOEQB0ClJmaWKYxmJRPT2gjKZxpkzZ1CpVKCUQjKZ1M82Go0iHo+j2+2i0Wh4diMDoElYKbXN+91h93DWBPzUU0/hb//2b3HTTTd5jn/oQx/Cf/3Xf+GRRx7BE088gfn5ebzjHe/Q5zc2NnDnnXei0+ngW9/6Fv7pn/4JDz30ED72sY+dfS8chgKzXFHFJb2Y5UTESWJsbAy5XE5LUVRd9/t9nDhxAsAmUV922WU6n20QqtWqXt3n83kUCgUtmbENQWo8P7vcuZKxvEaSjB8Jm+X4kYCtXB4LkqZsfTDbbBKRKaVK0qWqmZBbz0mHLdt4DAOl1FBb2PlpLAaZC0zp+2wxiCiDYNMyBEn68hhVyIzRldEClPRNr2du0BCPx7XtttFo4MyZMzrkT0r2bJ+UoKXmRXo+O9XzhYOzIuBarYZ77rkHf/d3f4fx8XF9vFwu4x/+4R/wqU99Cr/0S7+EW265BZ/97GfxrW99C9/+9rcBAF/72tfwox/9CP/8z/+M17/+9bjjjjvwp3/6p/jMZz7j2SbPYefB1S+9H03JiP+XSiUtKdO5gz9khiktLCxgYWEBADAxMYHLLrtM26NkffJvv9/H+vq61nbkcjkPwctrg/owjJTJc0H3jlpPUPnDOGX5TdijqkBtDlAmoVE1zmT+wObil+FjzB8sc1IPCz+VNG3Dfgkq5L1+9Q0i2yCtQhBBD1IVj1IW7w36EEy6EQptxpFT3S8dI+mZLmOc6V/BrQq73S7OnDmDcrkMAB5bLsHEHaZnNMlaKaXjis8Gw4yLw2g4KwI+cuQI7rzzThw+fNhz/NixY+h2u57j1113HQ4ePIijR48CAI4ePYobb7wRMzMz+prbb78dlUoFzz//vLW+druNSqXi+TicHSitcGcV0+EqHA6jXq9rGy0dN0iSyWQSkUgElUoFc3Nz2hlkZmYGuVzOc61NaiiVSh4SHhsbQzqdtpLKoH7Yrg+awE315CA1t4mgRYJN1WmTimRMrSS/oPvkAsU2ribhJpNJpFIpvaUdnaI4EYdCIR0iNmxs7SgIKnPUskbRCvD7sOrnUc0Qw7wr5vl0Ou1RI0vJmceoPSBisRjGxsaQzWYxNjaGVCqFUqmkTTjhcFh7RJO8AegwQBkexe8MR9sJISdI2+QwGkbOhPXwww/j+9//Pp566qlt5xYXFxGPx7eFm8zMzOiJenFx0UO+PM9zNjzwwAP4xCc+MWpTHXzA5O+9Xg/j4+OIRqOePURDoc3k7t1uF+Pj49q2BGyqM6enp3H69Gmsr6/j2LFjWFxcxPXXX4+3vOUteOWVV3D8+HGdxcecHHu9HtbW1lAqlbQaet++fahUKqjValo6H4YY/OyE8pztuGyPPGYL/5EwJ3VT1UuCDXJM4X2DpGu/41IbYbbLhJk0RNohG42GtY3m4okLBD8nJ9sig2pV2/GgfppEZz4f2+LKpqY2n4lZl3xvgsqW/w96ruY9oVAI6XQa+/fvh1IK1WoV6+vrUErpeGlKvJRKI5EIEokEcrkcDh48qBPhLC8v4/Tp0wiFQpiamkKhUIBSCktLS7ouqcKWiUiSySS63a7OeHWu6mc5To58zx0jScAnT57EBz7wAfzLv/yLJ/7z1cZ9992HcrmsPydPnjxvdV+skLGAsVhMB+6HQluZjXq9nsdTmUkewuGwtt0qpbC4uIif/OQniMViuOKKK1AsFrWqmjBXzf1+H+VyWTt05XI5ZLNZnQhkFNjswKPaM2UZw2yKMCy5y++yjbY2+8Gm7vWzOZqqbmC7RCpV5abEaLbJJMNBGEYNHHSfqaUYtuyga0yJeJjrZZuHNXnwPLcKpCDSbDY1+coyqY1SSnk2WZAJblZXV7Wph57Q/f7Wvr60JTO2WGbokjsdyXzSOwFHvjuDkWa6Y8eOYXl5GW94wxt05psnnngCn/70pxGNRjEzM4NOp+PxkgWApaUlzM7OAgBmZ2e3eUXzf15jgqtC+XE4d8iAfxmTSBKipEwopdBsNlGpVBCNRvUirNvt4tSpU3oCmJ2dRT6f1+Epfj96pRTK5bImCD5b6d05DEax7bJ/8l7zGP83CWlUdaa814zVHdQ/m9rTJFlzO8hB4PMOCtmR/TE1EYMWHbY+yD7L/phlmHZlPxPBsG2wjfsg6V3WPWzfJGjvLRQKmJiYQDqdRqPRwMrKih5POa5UH5MsE4mEVllHo1E0m03Mz8+jWq1qhyxg00djdXUVADzvAdvAttHZbicdr3aKwB02MRIB33bbbXj22WfxzDPP6M8b3/hG3HPPPfp7LBbDY489pu954YUXMDc3h0OHDgEADh06hGeffVZnVQKARx99FLlcDtdff/0OdcthWDSbTa26kh7JdKjiREHHnY2NjW3J3oFNEqZmYmZmBgcOHNA2SAmbhLW6uqq3YGPMo7QlD8K5kq9sl01KHaXsUa9nO/zIXRKuqS6VkKpi2vip4eA9koAH2TFNT/BR4DcOpqrZrFOeG4Z4/dTuQfUEqcFt5Ov3TGz3kTwzmYwOLVpZWdESqiRBpg2Vqmfez12OlpaWUC6XoZRCLpdDKLQZw1sqlTz9tJkIZGz6ToV4jrrQdRiMkWzAY2NjuOGGGzzHMpkMJiYm9PF3v/vd+PCHP4xisYhcLoff//3fx6FDh/CWt7wFAPC2t70N119/PX7zN38Tf/7nf47FxUX80R/9EY4cOaITlTucPzSbTWxsbCCdTuttCWkPZpD/+vo6JicntYRarVZ1MgFum7axsYEf/OAHWFpaws/8zM9gdnYWSimcOnUK5XJZ26iobpNoNBpoNBrafyCdTuPyyy/XCQXo2WlKSNKeB2Dbd3ktISUrCRmSZSOfQTZdP7Uljw+SJOV9sl8yWYTNdmneL8uRqmaGwADYtverTc3qF4dsTvRmWwZJj4MI0KwH8I+J9lsg9Pt9z/PktRwTk2j9nt0w/aKkGY/HkU6nEYlE0O12PXZ21ik3laDUGg6HdbKNfD6vfTKee+45rbbOZDIIhUIol8toNpsIhTadIelY1ev1tAo7FArpdLNKKZ3jXfbP4cLBjm9H+Jd/+ZcIh8O466670G63cfvtt+Nv/uZv9PlIJIIvfvGLeO9734tDhw4hk8ngXe96F/7kT/5kp5viMCQ4YXBbNE76VJV2u12sr68jFotpc0Cn09FqL6bXY7pKYHPSHB8f1+kvpZOVqZKU7VhdXdVELyXyer1ulWxsakWbajVImpMhG8z8JWNaJSmasE3Sg+ozydlWtknsZplB9ww6JgldEo5fOFiQNHg2sC2SzPYNC9uihFKlWebZqGH93iVg672Jx+Pa3NLvb+4CRt8J2zOUKmOG9tFmzL24Sb6JRALZbFZrqki+kUhkW+xwKLS1MQYAT/Y6jovDhQWXitIBwOZkwnyz0vkqFApp0qS2IxqNevYDppq60WjoFfjs7CxuvPFGdDodlMtlrK+vY319XduuaJ8izIlqdnZWJ46v1WpYW1vbpkozidiUkuVEKa+TKjsAegIFtsiJkoY5sZuwSeXmOb97g2ySJEM/VayN+P3KYSwpQa2HtB1zUeSnAg5SB5sLFT+p2ESQennYaclclLENMrSN56ial8dMUvZ73uaCkeTLfZbpuNhsNj2/HbNcOe70ozhw4AAmJiaQy+XQbrcxPz+PEydOIBQKIZ/PIxaL6bCxWCymNVNra2t6ocxMdHzOGxsb+je6B6f4PYtRU1HuuATssHcgJxtm4+GkwH2EOVH0ej3U63XE43GMjY15vOCZh5Y2416vh5WVFb36TqfTup5KpaI3g5e5imWbwuEwSqUSCoUCwuHNPYiZt9rmcMT76TgGbCc/P2IkQfE8VYi2a4PG0JROh71flhFE4H73DIKfVGwr30a6w9RpHjfr9FPxmu2R1w5SZduulcc3NjaQyWQ890utho30/cwVtjqpdpbk22630W63tcrclHxJwAC05EyNEvM8VyoVz65jUpXOhaJSSntAU+I1287FsSPfCxtuN6RLGOaPk6poANuyWnESqdfr2kbMnZAoHch8s/TgpHMV89rScYuTpMz+I//2ej3tbAJs+hrQqcuU0s7GU5cTFr2/KdHIzF/nClOq95v0g641JWy/8v3qN68Nkpb9vst7/ch0UFuCyrf9H9QXvzaaZMvFHJ+rLUubH4nLcvmhSYbkSVsry5O7GBFyZyhpP6c5J5lMYnx8HKFQCK1WC4uLi6jX61rSBTbjtlkn+yalbNbB/nEhINOMOlyYcBKwgwetVgvNZhOJRAJjY2PamcT8cQPQjlvcgYVOJQz4f+mll7C+vq7DkiYmJtBqtbC2toZarabtyHSaYR2cHDc2NrTKenJyEplMBs1mUzttSWlXOteYUqlNqgyHw0ilUlrC4JZustxhpDC/6yQhmMQq22vCTzxI69wAADYYSURBVOVs1iXrM9WoNtW+X55u2XbzGpu3tI3AB5HpILIzFxx+fbaNs81+zbE1CTebzaJWq/m+G2Z/zG0Veb3c95iOUDLPNwBPLD3TTNI2Tam3WCxiZmYGoVAIc3NzmJub0xI0JWIuiNPpNLrdLmq1Gur1OpRSepFMcg6FNjOc0WnR4cKHI2CHbeCKm7GJcvs0qqMbjYZOyMGdW2q1mvbGZN7btbU1AFtOWZlMRq/OJdHK9HnAljMUsBVCE4vFPLY9xij7qQr9CI7pNeUEHYvFtFovSG07LILaQ2nKj6iC6hqU5tEkaBIGJXt5rXmdrTwbUfnZ2v1gU88HqbPlfX7nzPOsw9YXm0f0MO3mO+i3YKDUS98EPhu5P7aZ4zkSiSCdTmN8fFynb/3pT3+K+fl5tFothEIhHQ3C8pLJpDYBkVylRE4NjlLK7fO7x+AI2GEbTK/oaDTqUWcxSQBJk0kC4vE4Op2OJ1F8u93G2tqaJmmu5AlKnPTwZL5iTlxc2ZfLZRSLRc+GELQLA9ulI9vkSumGTitS4qMTmVmeWWYQcQURWdB5s41m/YMk8UGSJfNB2yZmmzTJhQl36/FTO8t6TLu6rb2DyDeob7K8YcwDtnaa582yzHZJ6dqmlZDky+Pcc9dMkMHzqVRKk2+xWESv18OpU6f0YjISiSCbzXr2+AWgnbtYH00xzP9Nsnfbuu4tOBuwwzbQIYtxjDIcCICWpur1Omq1mp5kMpmMtqnSXgVsTlQrKys649nY2JiOe+RuSIA3ZZ5MVM8Jb319XUvLqVQKY2NjQ2/iICdQ0wZNid02KQ+rDrZdbztnpom0TfhB9shhYNZPAh4mA9egckfRBEjbqWke4Hlb+WY9fmYEU3Utj9EPAdhKoSoXFH7qbFv/uBAl4UWjUR1/KyE3Nun1etoJUY5DsVjUXs8AsLy8rH0qGBNM1bWMFGi1Wp5sV/yQoOVe3w57B46AHaxgxqtms6lz20pwkqvVaqhWq3qPUkqsnCCAzQmp1WpheXlZSwbxeFzv9kKpgSo0ki5VcbQ5K6Wwvr6ObreLaDSKiYkJjI+Pb1MxEuaEzg8daBKJhFYXSunXvF/2OQh+6lMSryRgGZfqRzh+ZDQM5GKDz+FsCJj1m2rnYeoOKs9Pkrb9bxKmSbZ+EjVJkpoYbscox9bWbnlOqnkl4TG9o21MaH4h4bOcZDKJ6elp/V4vLCzgxIkTWqUsd00CoE0HGxsb+jcgnycdIGmHlpolh70Bp4J28EW320W1WtVb3MXjcb3hdyKR0JLF+vo62u02ZmZm9OTS6XR0AgFOHuvr65ibm9OxxMBW/txEIqFVbFIKTiaTWr1GSWplZQWhUAj79+/H+Pg4CoWCTtFHVTZhTvZ0oFFqK1mDzAxFgpLHTCIYZKs1zw9SJ8vzUn1rOqXxvJ+NzyYNcpKW+z9TRepHXH6Zk2xSpt8YBGXMst1rGyNTdS/7Ls0JLI/neIwOTYyNbbfbSKVSet9cmy1Yfud7n0gk9HvV6XS0rVYSMwCd+tN04otGo8jn85iZmcHU1BS63S6ee+45nDp1Co1GA6lUSmuCaONl9ituxcr2sG+Uylutlv5NOul378FJwA6BoGewDCfiRE5pVymlr6HjlrxGrurX19c9YUzA1p6pxWJRq7B7vd627dNM1S1twKFQSG9tGOTcw4mL6kgSvtxwwkYEfhhWGjVVqPKY33G5q42UXIetE8A2+yBhKytozEwMq4oO0gjYpE/5bP3qNWHbWEIuuszQoGQyiXQ67Qlns4G+BpSYAWjyZX2MAZYmFOkgRU1QLpfD9PQ0pqenAWyqnefn57XWhaYUmn6ALbtzvV5Hq9XS/hYkfW4RSsnXke/ehCPgSxx+k6yEzGtLEiakx2e9XveQMCcFZgsCNlNKrq6uepIQcFJJJpMoFAqasKkGV0rp+yUhr6+va+kgFAqhUChskxrlZCgzBlG91263tURjSlx+YzMKCZpSaZBN2XRekm1g+21EZhIWr2XKQqnClPWYbfCT7AdJ+kH9Nq8ftBEEIYnVb1Hld62sT9pigU2SZCgQ7brmM6IjFFXC4XAYrVbLM4YMAVJKeZLWAN7xleQbj8exvLyMV155RZOvdJDjsXg8jn6/r72eeYwLMb7DrVbLU6/D3oMjYIeBoLTIyYBkyB8+JVnuUQrAk/qQ91AVWi6Xsbi4qLMVAZsTUSqVQjab9ewlLHdfYoJ52taU2tzOkCQMQNuEbYQk1YXM2CWlX/bJjCm2qVz9JFdZnxnCMsxEKe3EJqQ9MYgkKZ0x6YkcM0plZpmD2jhIgh0GQfZf2zV+ZG2WM6gtcs9dAHrnIfM95nMbHx9HsVjcJt0S0lShlNKqZ3mc79DExASKxaI2zZw8eVLvcESipwYJgI6r73Q6Ot5XakNIxJTuXbKNvQ2XC9phaFCqospMEh9X5OFwGIVCAfl8HhsbGzr1JAAdy0hks1ns27cPExMTKJfLmow7nQ5efvllbYeVRC9ttGbC/Ww2i2KxCGAzvKlWq+mJjflZmbeabZF2Q9kXwD+USX437cR+15vX+d0niVfuDkbSpBTmR04k32Kx6MmlvbGxoVN7AtALILaFNmI5DuFweNs2ejZp1E+KDtIUDFIzmwsoOW62Osy/Ekxskclk0Ol0kEgktJaF73AkEtH2XmBz4VcqlXTiDi4s5U5Dcj9tOV7AZkTAzMwMrrnmGgCbYUQnT57EK6+8op9RNpvVWhiSMe3MS0tLUEppSZ1qZ4bo0fHR4cKCywXt8KqBq/1Go6F3KyKJyV2USqWSVgnncjlNwpzgOaHX63W88sorejcYgh7SdC5h3a1WS5NwNBpFp9Px7GRUr9eRzWYRi8WQSqWQSqXQbDa1pENJWimFarU6kARMych2PGisJExp2kagklxkZiczX7Zstyn5hkIhrUUw+9zr9fQ4M3uZvG8Y1bPfMb/2+cGm+uVxG2wLmFERCoU8pJnJZDA1NeXRbvT7fVQqFb0bkaxbalBkzC3bJcudnp7GzMwMgM0F5eLiIs6cOQNgKwsb39tIJIKxsTFdF5+LDH8i+VIbda4ez4PU+g7nB04F7TA0KClxUk8mk3qi7/f7nrhFShbcvEGmfJSTaKfTwfLyssc2JxPUSwcuYCsekio81k2srq5qJy9gexYkm9pxkMOP3DRCxrTarjfVojZVNm3QMsGDjUilSlOGwNgg1ZRmbDWddKS0JjfTYJ0cS0lGo8I2LoPUzcOWZxunIMhnINXJ/X4f1WrVo40BNrUq1WoV5XJZH+N4yLzPcpN7810gqc/MzCCfz2vyXV5e1jtsMYWrXDCxvbVaTSe5kaYCGW60E5LvIM2Nw/mBk4AdRoJ0bKGUKZ18ZBarVqulPUmZ85lqT7lTy+rqKjY2NjA9Pa2dsOhtHYlEUKlUPJKczNLFlTwTagDQ27DJDdIpCZvEY5NmpRQqJ13WZYYC+UmOnOTMyW5YuyuJ2kyJSAmaMKXlVCqFVqulP1zcMLsSneTMumw27mEI0rzGHJ+zneSD7rOdszlh0ZuZfgV8d/nOsp3dbtcT2yvNCyyb52zku7GxgVQqhcnJSczMzGB8fBzApqp/YWFBLwozmYy2+8px4wYLtVpNL2YJM7PcTtp9nRS8u3AE7DAyqCYLhze38uN2g7QjkmzL5bK2XUn7Lj1IqQ7sdrt6v1+lFCYnJ7WdmROc3NeUkjOlb1NFDEDbnznZ8jra3ejBak628iMzZgFb2x0yJIttkePiR7SDpEB5D7+TdKVTGVX6hBwjqv1Zbq1W08kolFKaZGSmMlOtLtsU1G7TRjsIg+zdfoQa1Aa/OvjhjkKFQgGxWEz3n+pbhvFwcSIXiDafADNXuNQahEIhTE9PY3Z2VvshdLtdzM/Pexz9pN2X722329XhRjKMCdiKRWZmup1MtuHId/fhnLAczgokKKaEBKBX71RfMqNVPp9HsVhEOBxGtVrV+Z9J2jILFR1mXv/61+tjzWYTc3NzqNVqegKSzlMyHpMTqZTCeAzYjLkcHx/X3tjM52vbmJ19oXrXtt2cjYDZLlkWy+HEzf7b1KrSwzYU2syQRImVZTQaDb0oiUQiyOfzWupaXV1FuVz2pCZkuZlMBhMTE4jFYjh58qSnTzaVsE01Lhc7frZjm4rT/N/Mk2zaooe1Qcv7SbrczYv1dTodVCoVXSezofFdpU2X2gb5bPgu+5ktmGTj6quvBrC5WJyfn8f8/DzK5TJCoZB2XgyFQnrfbY4lU6zS1gtA504HNt/1lZUV5/G8B+CcsBzOC6iKowSRTqf1jkiSbIAte3CxWNRSK0mYHp5yR5larYZTp05h//792oZMqaJaraLX62mC5eQJwJPEQy4EaCsmcWUyGUSjUWSzWR3yYSY04P2cbIOyT/mpsW0Sn8zcJO8xbcjy3mq16rGvA5sLiWw2i36/rzOJsZ1cWJhtYqIHqY6n2lX2R/ZBHpeLAzOlpa2/fvZgU0Ngu28UuUCSL/fYpcQLQKubw+Ew0um0Hgv+pcmEmhF5jlKxn800n8/jwIEDmJmZQSQSQbVaxdLSEubn51GtVjX5ZrNZhMNhvSiV75VcFLB8GcbXbDYd+V6kcATscE7gLkKUXLnnKgC9i5JSSsc+jo+Paw9QZqKidCdJeGFhAa1WC1dccQWKxSKuvvpqZLNZnDx5EpVKRZMZpVuqmkmuVFPbpLpqtaqldkodnGBNSYfSnpwAbWRjwk9CtMX4miQsiZoolUo60Qj7JL1yOXalUsmjrjfbQ3t4LpdDMpnUJGFLHQnAo76XbWKIkyntBhGnjdBlXUFjYusP28QQHr5HtPvzHtq8Y7GYdqCSz1SGX/F94iKOHz/yPXjwIA4ePAhgU/Nw+vRprK2t6Rheki/fSbaHY8WFkiRfLiaoHWL8vcPFB0fADmcNToIkYXotMwc0z3HCq1QqWupMpVJ6VxlJVry22WzqZAQHDx7ENddcg8suuwzpdBpzc3NYX1/X3qC8h+krORHLnWKALfVtr9dDqVTScc1UY3NjcybTN/MO+5FuEFmY90kHL/OYhJTceU2tVsP4+LgmTNpzpQ2ROY5tz4rlUuJPpVJIp9N6AWXrFyVvSoZ0EKKWg1KmHAO/+uX4BHmTm8RsK49e4fSal+2nVB8KebO2MQc0AL1tpgyN44KC95taEIlcLoeDBw/iwIED+tjLL7+sNwsh6OFM+7F0HOTGI7a9qQFou6/bYvDihSNgh3MGJxOqdzkh1ut1rRYm0a6vryOXy2kpmPsDSxUnJ0A6Uh0/fhzFYhGXXXaZ9mKORqNYXFzc5iBDRxY6LklHKik10/GGoSj0kuU9lNCDJFb2XR7nhC1Jexhbpvm/VPdSUpPb21F6Wl9f1/dI6U620yybCyaGetGz1o/oqAUgWZGw2B4Z3uM3VrZx8FvQ+C12eIw2b1Pi5Rixzcz5TGmWUmkoFNIqe9bHBY102mOdpvSvlEI+n8f+/fv1piTHjx/H2tqaZ0Ei1cimBkXmlZbhZfSrcOR7acA5YTlYMYodTk6yVLlxcpT2K0pxvDaXy+l8u7QnM261Xq977uP111xzjU5wsLi4qLMVUWKWRMKQHDMBCInKL66WiRGi0SgqlYq2O8u++o2NeTyIvG3Xy/M2NS+3tOPYVqtVPU5UuwY5KlGajUajKBQKWs0p97eVpCPjsM3sUeZ4mOpo6UzG58JjfoScSCQ89m4eo3OVOa5U4cpnKQkV2FogUMrkYozqeG7OwTIZoy3bxRSnJOKbb74Z6XQalUoFTz75pA4z4qLSTIRCMwdDiVgX+2Tap8+cOTOU3TdoEeNw/uGcsBx2BLYfcJA0x3OUdDc2NvRERFIFNtMr0s7KMKGpqSmdCjAajWrPZDrHkIQqlQpefPFFtFotXH755ZienkY2m8X6+rremIH1sw2MGeYELaU4OUFLsmCsLEk/FouhUql4PIb9iNicEOXmEKM6FklSI0gW3FbRdDrze04m+VJyo5Rvu9aMRTVTf8r+S8ciE9JjXV5jtjGZTCKfz3u82kOh0Dbvc2aCkqkjWYcM+ZE2coLvFU0j5r6+bCf7xL2wL7/8cr044N9KpYKlpSVNsswxbYaryYWDjXxNaVmmSA2CI9+9D0fADiNhGAmQTkDmhCWT4tPG2mq1UKvVdHJ8EgSTRzBWmPfWajXMzc2h0+ng2muv1SE6vPfMmTOeCZWevzK5AeuQ5UspORKJYH19XUs9sVgM6XQaS0tL1lAk2XdznGy2UflXqq3lvZIEgO1ex/KY9KT1g9zKjjZck3ylt7j8C8Djvc46TdK1kat04uIzYj1ycw960ZuZzwguyggu1ghqUAjp1CTHiOVIqdd0uuPYMiPb5OQkCoWCZ6x6vR6Wlpbwyiuv6D5wD18u4uS49fubux1J8pUez1Tz05YfBLk44/8OexOOgB0GYtQfOEm4Wq1qYqVESTss7XYbGxtaxUuJmdKwzK4lvVLr9TpOnz6NYrGIfD6PaDSKyclJRCIR7TVKKZYTIeuijU1KhHTMMiXH9fV17ViWTCaxf/9+1Go11Ot1NBoNTTjsE7Bd5WwbRxvpmteZhEzI/ZWlo5CtDDlBS+lVquJt7ZPP0VwAmN7SJuTiwiw/k8noxQ8AbaPl8+B9lHC5OJLaCwmZ15kOdWb/ZDgaCZjEK/siP7FYTIe+TU9Pe9Tb3HKzXC6jVCppSdxcOEgHL6a4pK+D3MJTPhv57poY9jfopN+9BWcDdhgafiroQQ423OuXZEwJgZKIjEWl5yozOtFWx/SSMmEC7WbT09NaRVitVrG+vq4TUVDKs6mASWaUCGXMp62f4+Pj2quW0nK9Xtc2aKq9zbha2+Rpk16CJllKZKyfKk46kpkSkZm6UtpnZRIIec5MOCEzcDEz2cbGBtbW1jx9sLWfBMTFVDqd1osVgurjdruNWq3myeGtlPJkApN9Y/tlPuVweGvPXnMXLfaNHs4SUjOQTqcxNTWFK6+8EoVCAaVSCRsbG1hYWMDzzz+vr6damVsHAvAQPd8NOh3yGJN/UHvA/7mgk23z+52Z2IPT90UNZwN2eNUwyo9dSk/S1lgoFPSkyhAaYMu2CWxKGZQqGCJkerxSkqnX61hcXES/38dll13mie9lsg9z03KSLNXgbAslFt5DcJKnnTmTyWhpLpfLIZfLodlsotFooFwu6z5R3SsdgmzwI95UKqXbRkKTebaldMrJX6pRzfZTsiK5JZNJj2aBpCB3rpJjxrIzmYz1XTBtzGy3zNEtN7bn4ovfbeBzYtmElEq5r7PpyW3a0c1zfLdSqRTy+bxOJUlTxunTp7GysrJt04ZYLObZ2pHjKbO0tdtt7ZFPZ0B63gNbmbiALZv2qGTqyHfvwxGww8jwk3iDJgRuo8YJj7ZASkUmSZRKJc/G6bSTSRssbWqNRgOLi4vo9Xr42Z/9WWSzWaTTaZRKJQCbiTekvZMTISUiTs5sD6UVMxaYbS2XyzqmeWJiAgD0goFOZxwTStelUslD6qY9mN/5fyKR0Hv68pxMOGKW46f6lkRKT1wSNtvHdvEYr5PJI2TbGDvNj1S3Uqq2tadSqXhCaySB2ZJdSNW+aW8mMZPEqd6VMNsu9zzmZ2xsDFNTU1qDEolEcPLkSZw+fVqHeEnTBdXmJqg9YSgTtTpyAxA5viTfRqOxbYFo87OQfXPEe/HAEbDDWcEmtQ0iYTpRdbtdvUsSbXdULUt7L3fzoYRClSMnTzpX0ft6cXERhUIBMzMzCIfDmJiYQCKR0F7S1WpVXy9JmCpLLgo4wXKSlKpZSoKRSERvdkDbNaU9mZ1KKYV0Oo1sNotyuezJ4cwJmf2hOpwhN8x6JSE3hrfF7srnwjJlWA2JkeQqd6fiPVJ9zfHiwsdGPn4gITWbzW27+EgbsfkumU5dkqhDoZBWv0u1rx+kHZh9o2NdPB7HNddcg3w+rzO4lUol/PjHP/Z4mzMdKlXVZrwzx4ehc3wm0i7N6xgjz/db5kE3x8L8PTnivfjgbMAOZwVzlW5boQfZNCkZpFIpJBIJPalxcpV24Ugkone04WTcbrdx5syZbbG/6XQak5OTmJ2dxfj4uL6+VCrhzJkzWF1d9XiZmpMpyZBe0rJPVDFK8pTnk8mk9pwGtkJeOHkDW8Qn9zW2SZnMPNVutz0ewLR/snzpWCRVxFTb0zlIpuyUdbHvLItSsVxIMFaWhGBLTykTVcgx5Viwr4zBlglDJGQ5HAeWKd8rfoKkROnMxH5lMhmMjY3pXNqMKW+32/jpT3+K+fl5NJtNvRCjt7XZP4LmALnAYF0yzEhKvwC0f8KwuxvtwWn6ksSoNmBHwA47BpvqzHae13DiZnpKhmZQoiApyPtlbl3agOkEJSd1Sn8HDx7E7Oysvq9Wq2FpaUkn2JBkLLebY33SrikT9ZPI5PWUmEwbrFQDs58kI1N6I8EppbTt0U/9SEmcGxDwIyd+tpUSHcN1pGMQpUnG0FKtLENrCG7hZ7ZBto02frkQ4fOUdmg6j8mybIRqhmQRg2JluRfw+Pg4xsfHtRYCgF6clEolzM/Pe0wbfmpmtpvmFDPxiRlmRciFI+3gcnEQtGDdg9PzJQ3nhOWw6/BTRZN0Te/UWq2GTqejCYRqv0gkgk6n4/FqpQ2Ral8pXUqJgiq+EydOYG1tDVNTUzpvb7FYRDabRalUQrlc1vZhhi3R0YmTLVWptBEylASAbh8AHV5iqloZEkVPXRkPaiankGpV2kU5bjYbZyi0mSyE42WStbRj20KJWA9VoaybHudU1Q4TBiPV6SZYpmxHLBbz2MtlOabq1azfzNpFcDwjkQgmJycxPT2N/fv3A9gkPyZ64e5IbJPMwGWWybbwWcuFBOviIs3sOxdkdMSTz96ETavicHHDEbDDjkFOIIPswbwG2CJLejcnk0m9q5GcMOVEqJTSSQ4opYXDYb1TEtHpdPT+uKurq9i/f7+O7aQ6kmFLTMIhs3FJNW2r1dI2Wko5lBZtYyDHQTpzSVUl65SSr7RbSvLlh8TM0BkpgTKu2nTOonc4FzccQyY5YXvkc+v3+1hfX/doAFg/FyoAPLZvEhCdkcw+s19+hG6Sn2kDlhKnfIdInFwwZDIZXHvttXqhxqQfVNlTKxAKbYa9yS0uTUKnpkUurKTq3fyYCyqZZtVUpZu/EUe6lxYcATvsKAaRcJBkQ3tar9fTYTIAtI2YqlIAOjaYBMRdZ+jwY9bZ7Xaxtramtz+kCYPqIpYtw5ZkpiySIqVjOeFKkBhZryQfW6iNJBdpE7aNG9XGVIvLLfakbdXWLkpsUrXPYzIWGtjy6LWpyIMg22iDzdmKTk3mu2LagmX5PC/roQd6NptFLpdDoVDQG300Gg2cOnUK/X4fY2NjyOVyHk0JIRcHrFuqm2W7aIuXH9u4U5PA98bsz6uBYRa/DhcGHAE77DhMZxl5bJh7u90uarUaer2e9pSW6SxJHJRqJAnXajXfuFtmMDpx4gQKhQImJye1ZEdnm2QyiXq9rpPhMyZW2qM5UZOIZT+lTZSQjkRSwpIqYTMtImEbP0qxVHfLkCpeT4I2HaMorXN86L1N0jdjf+WeubIc6aQl1b4sX8a8Sru8zc4rj/sRvjk2cozD4TAmJycxOTmJqakpAJtSebfbxdLSEhYXF3VI0Wtf+1pPDm3uOiT7zecpE7nIhZVst3z+5mKS5G8LG3NwAJwTlsN5QNCKfJBtkRNfoVDQiTlIsFLSTSQSOv6X2/RVq1XPNaaElUgk8JrXvAbA5oRJCYrZpujMVCqVsLq6ipWVFR3jadoCzf6YakzTm1c6btlUkubihZIZCU4SHlW/MoSJ40ZPc+49S49dSWg2yVuqWCUxSiIiGcsFiVxI+C0m2CcZSmSq6YGtrFNS6ifxU5IdHx/XcwEXWAsLC1hZWfFsDSjJM5lM6vHMZDJ6bLgQkmFiwJYTlRwb00mLZhSZ4W0PTq0O5wjnhOVwweFsyZf3MtMRyYTSnZRKOWmm02kkEglMTEzoTRXkBG/GjnIiJXnMz89jY2MDV111lSbgQqGgpUnG8cptE20erbJ/JhlJJzTpZGWqL03vWBu5y/JleA+zZjWbTZ2QBNgiTaliZj02r3O5cDCPcRxl/0wil9/N2Flzi0fAS7p0bkqn0zp5BcOr9u3bB2ArneWZM2ewtLSE1dVVbX+OxWLIZrOeDRGkGQPwLjSYTpRtkhIu22ZqNyThBu2r7OBggyNgh12DzRnH7xjjZvv9vg4TSSaTmgiV8m4AEYlEUCwW9X3AllqQiUBof2Q4DlXPTCuZyWQwPT2NXC6HcDiMAwcOoFwuo1qtaqmJnrRy60Rgu7RHdbVNKjTzNvOv9FI2bY20QUpy43eq5uXCwyxXnpcELtvFMTPVxOb2hza1sUnONgnXpiWggxuJNp1OY9++fchkMtonQDqA1et1rK2t4cSJE1orQi0AHc8kmCZzbGxML6gajYYn5Eva8DleHG+q1tkGU+J15OswChwBO1wQsEmIgFeKZHIOqospEcusWGtra+h2u8jn8wiFQsjn8zpGmBKUtHdWq1XtyHTmzBntRb2wsIBwOIwzZ85gamoK09PTKBQK2rmHRFSpVHQyfXpyc3I2pcBBWwbawElfqj9tmaHk2Mn4VJta2Y+AWZ+5eJBSOoBtBGw+M2C7qp31S8hc0UzMMj4+rk0BjPc2s0UBwOrqKtbW1lAqlXRcMs0KlIoJaYaQHuvApjlL7iFs2oK52KE3NJ30+E6ZUr2DwyhwNmCHXcPZeGtKByZO1gSdXhj+kkwmUSwW9XnTXkkVMq+lA5ckTglmUMrlcshkMkin08jlcrofSimdk5pZp5rNJiqViseT2kZ8hI2wBqm1gxzdbA5Cfv0bpDInIdmcxXiealqbIxrHjfHexWJxGyFyU4NqtYpKpYJyuay916VTGNtKJzLTAYplsS/UfNgI1uw/Y3flc2X8uZ9913keOwDOBuyww3i1JpazLZeSWL/fR7PZRCgU0k419GYOhUI6vrVUKulJWoIkQRV2JBLB2NiYVt9y8qZEC2yqdmlTZQhQsVjUmZYAaNszsEkEzLxlZqOSYTAcB5sacyfG3iZ9+9mdh4GZmlGm76Q0K7cjpPPU1NSUZ3IyPdVrtRpOnTqFZrOpPZDb7fa2BCPA1laSJtFzDOX10nNeqpXlNWZfeC3tyXIzDxsc+TqcDZwE7BCIC3VlT2mLami5Sb3clUbaZGlfzGQyiMfjno3RSbzS1gxs2TK5paIpPTL3MsOaJicnt6VmTKVSugxuWdjpdLStkSTPFJEsl8QpvYtZruncZF4jyYXnJUwClp7apr3ZHHfGDZOImeyCixKONVNk8tmYquTV1VWtum82m6hWqzpVpCRBkrh0ipJJP/iMSL5ycWC+Ayb5Sics/k8vey7OpMR7If4WHC4cOAnYYUexExOOTf25E2DiDtYhpVx6SpNYpYcvScK0FQKbMcWUriWYM9nct3VjY0PnlV5cXMTU1BQSiYROk1koFLbVkc/nEY/H9VaLADyLAIKbIEjClVK0mSBEhhhJ4qQ6nONEyGvobSwlVrZRlqGU8ki5sVjM4+xEhzQbms0m1tbWsLq6inq9riVduROT2SY6yMn/Tdjs4AC2eVnb7uUiiFoVZr0yiffVRJAJweHihiNgh1cdr+bEIkmYhCZVhcyiBWx563JLROmcQwcewlR5hkIhZLNZHWpC4pN7/ALAysoKAHh20xkfH9eevUz4QVIJAiU9Eo/cKhHYWlSQOChJNhoNj4TOawkuTmR/uXEBSZUk67d3L73A/dBsNlEul/WWkkwnSkL3AxOu2GzIVEVLCdYke5tq2fxfxhWzT1xc8b0YJQPYKHBk6yDhVNAOewLDSNHRaBQTExOefXxlDmneS+K1eQPzuLRhStsmJ22Sn6mmlHWRGElu6XRaE71SCqdPn9ZqWUrktGkzP7HsPzNgkcDZHobWMAaa6nJC7jIFQDuuyU0uNjY20Gg0NAlRBcv2SUlUqvg7nY4nFtpmr6Xamjm72c9SqeRxrJL5pk21sHx+UhNgpog0vbx5Tm7jKCVktv18qZkvVJOOw87AqaAdLgr4TVRBk1ev19NxwMyaxY0HZLnxeHybvdQsl+fpzCW31wOgSTmZTGqpibG+0h5JomB7GDZ14sQJz7Z+APTGDPJ/ADqjl59URkmZJD85OaljZimxSsm51WppeyvV2ZIITUiJUW56EAqFtqnkbW2jVEuylFs5cizlln0mpKQvP2bsNL/bbNi0qcv4XblhBLFb5PhqmWkcLmw4AnbYExh2UiJRyb1xZfIEkhzjOilRmdKR6cTUbDbR6XS06pZqWgAecqZEzPJpW+z1ep44WtuGDqFQCGNjY1piTSQS29Ii+o0NpTk6M5lSo9kfc2/es/GGZt/ZX7lAkfZ2qo8laRLUCHDBwEUJ+2Ru/WdCSr7meErw+TM3s5l7+0KQTHe7fofzD0fADhckznYyotqZJEMnKGlXJBHTeYffZeynzamHKtdqtapVwLQ7SwmTduhoNKpV0Gwb7bOUoOmNzfMylIpklEqlNIEMGhfpQGbmc7YtLiS48YUt/aJ0VmIGMXNbRdk283pJislkEs1mUzurme3hIsYGW6yuJGB+l6FdVFVz8wW/zF3nA371OPK9NOEI2OGihIzfTSQSnphRuXuPLXxHJmAA4JGYCZkVSca7ynokyTK8iWXkcjnPpgaE9IqWqQ6TySTa7fY2u7VtC71hJnOpGqZzWDwe3xayNExZqVTKo96VIU6mTZiaCUq81EIwvae0e8uQIwlK7GYsMp8b+8Cxk2lCHdE5XEhwTlgOFzVsySLoyCQlO1v8LODNGiWdlsydgOT9UqUcjUZ11iyzHumJLYmbi4PV1VV9jsRsS38oJWPpLWySFCV+kpKss9/vo1QqefIxc3yoTWD9lOIZUy3Vz6b3tYyplfsP02FMLkyoprdJ6EFSLsfAtGdLFfugd2QPToMOFyCcE5aDgwGqlOUuQCQXU8VqwnTq8Ut2YUsbCWxlw+IGELynXC57CInJRGg3BrYSeEhIj17pGMU+SnuvLY6VBJtOpzWZUzUrIUO3TNVyoVDYZs827bR+48TvMrMU2xyNRq1E6GfXlQshxhObOzwNA0e+DrsFR8AOFzXMECSlFDqdzjbHHXop87iZeQnYUinLzFMm8cq/Zraqer2uj3FjCdp6uc2iH+it67dQ8IPcopALDUlmlE6VUlozIFXZckFgk06HlR7pfU6YKn0/qTfIoUqaD9gHR6YOewmOgB0uOciJmiTQ6/W2ETD/ylhbYEu1TDKWZGuqpAH4Eqt0KGo0Gp44W+YfBrbniyZknLLN/islfmknlosG6ajFRQglZz9nJfPDvkgSlW2y9dlG3HKxY+uH/Ehp17zewWGvwBGwgwOwjaRkTmbpsCUzUwH27fskGfManiPxyG0Rea5arQLwkuwwkI5Lsi9+kOekKlvCT/pk+RKDQpj8JOhBTmNcPNBz2fw40nXY63AE7OCA7Vvw2SCzQknJWNpi+b90QjIJT9YnpWbpSCX/2tpqlmc7bxKebIvcY1ieM8sOUov7OayZ381rpKey6dBGdbmpWXBwuBjhCNjBYUSQPKRXLknX3IbPJlkC29Mr8pzNZs065f0mkUvYyjaP2+ozr/eLFzZhSsQ2wrSRLkOWpNreka3DpQRHwA4OQ8JGViQfErIkZknEptfyILsw4JWATYKSpG2znQbZV3netCdLQvaTQM3wHz9bsW3spD1aem3b2uvgcCnAEbCDwznAT2IFtshRbmDPY5SUTU/rnQKJcpRySYpm3mWeM68dVkVsI2rZNke+DpcqHAE7OOwgTHWyjJGVsJGPHxlLtbNNjWzCVgalXZs0S3I0k3z4tXMYDBOe5IjX4VKHI2AHh1cBZ0M+plrYhmEkWpk4RJZtU/cOcpw6F5J0GaYcHILhCNjB4QKBSVZBHs5+/5v3SYl8lLp3Ao58HRyC4QjYweECxdkS2CBJNih8yMHB4fzBEbCDwyWIV5t0Hak7OAzG2e3C7eDgsGfhyNHB4cKAI2AHh/OAnQ4zcnBw2PtwBOzg4ODg4LALcATs4HAe4NS+Dg4OJhwBOzg4ODg47AIcATs4ODg4OOwCHAE7ODg4ODjsAhwBOzhcYnAe2Q4OFwZGIuCPf/zjnjyzoVAI1113nT7farVw5MgRTExMIJvN4q677sLS0pKnjLm5Odx5551Ip9OYnp7GRz7yEWuyegcHh1cHziHMweHCwMiZsF73utfhv//7v7cKiG4V8aEPfQhf+tKX8MgjjyCfz+P9738/3vGOd+DJJ58EsLkjy5133onZ2Vl861vfwsLCAn7rt34LsVgMf/Znf7YD3XFwcHBwcNgjUCPg/vvvVzfffLP1XKlUUrFYTD3yyCP62I9//GMFQB09elQppdSXv/xlFQ6H1eLior7mwQcfVLlcTrXb7aHbUS6XFQD3cR/3cR/3cZ8L5lMul0ehVDWyDfjFF1/E/v37cfXVV+Oee+7B3NwcAODYsWPodrs4fPiwvva6667DwYMHcfToUQDA0aNHceONN2JmZkZfc/vtt6NSqeD555/3rbPdbqNSqXg+Dg4ODg4OexkjEfCtt96Khx56CF/96lfx4IMP4vjx43jrW9+KarWKxcVFxONxFAoFzz0zMzNYXFwEACwuLnrIl+d5zg8PPPAA8vm8/lx++eWjNNvBwcHBweGCw0g24DvuuEN/v+mmm3DrrbfiiiuuwOc+9zmkUqkdbxxx33334cMf/rD+v1KpOBJ2cHBwcNjTOKcwpEKhgGuvvRYvvfQSZmdn0el0UCqVPNcsLS1hdnYWADA7O7vNK5r/8xobEokEcrmc5+Pg4ODg4LCXcU4EXKvV8PLLL2Pfvn245ZZbEIvF8Nhjj+nzL7zwAubm5nDo0CEAwKFDh/Dss89ieXlZX/Poo48il8vh+uuvP5emODg4ODg47C2M4rF17733qm984xvq+PHj6sknn1SHDx9Wk5OTanl5WSml1Hve8x518OBB9fjjj6vvfe976tChQ+rQoUP6/l6vp2644Qb1tre9TT3zzDPqq1/9qpqamlL33XffSJ5jzgvafdzHfdzHfS60z6he0CMR8N1336327dun4vG4OnDggLr77rvVSy+9pM83m031vve9T42Pj6t0Oq3e/va3q4WFBU8ZJ06cUHfccYdKpVJqcnJS3Xvvvarb7Y7UaEfA7uM+7uM+7nOhfUYl4JBSey8tTqVSQT6f3+1mODg4ODg4aJTL5ZF8lFwuaAcHBwcHh13AniTgPSi0Ozg4ODhc5BiVm/YkAVer1d1ugoODg4ODgwejctOetAH3+3288MILuP7663Hy5EkXF3wOYFITN47nBjeOOwM3jjsHN5Y7g2HGUSmFarWK/fv3IxweXq4deTekCwHhcBgHDhwAAJeYY4fgxnFn4MZxZ+DGcefgxnJnMGgcz8YxeE+qoB0cHBwcHPY6HAE7ODg4ODjsAvYsAScSCdx///1IJBK73ZQ9DTeOOwM3jjsDN447BzeWO4NXcxz3pBOWg4ODg4PDXseelYAdHBwcHBz2MhwBOzg4ODg47AIcATs4ODg4OOwCHAE7ODg4ODjsAhwBOzg4ODg47AL2JAF/5jOfwZVXXolkMolbb70V3/3ud3e7SRcU/ud//ge/+qu/iv379yMUCuELX/iC57xSCh/72Mewb98+pFIpHD58GC+++KLnmrW1Ndxzzz3I5XIoFAp497vfjVqtdh57sft44IEH8KY3vQljY2OYnp7Gb/zGb+CFF17wXNNqtXDkyBFMTEwgm83irrvuwtLSkueaubk53HnnnUin05iensZHPvIR9Hq989mVXcWDDz6Im266SWcSOnToEL7yla/o824Mzw6f/OQnEQqF8MEPflAfc2M5HD7+8Y8jFAp5Ptddd50+f97GcaTdgy8APPzwwyoej6t//Md/VM8//7z63d/9XVUoFNTS0tJuN+2CwZe//GX1h3/4h+rf//3fFQD1+c9/3nP+k5/8pMrn8+oLX/iC+sEPfqB+7dd+TV111VWq2Wzqa375l39Z3Xzzzerb3/62+t///V91zTXXqHe+853nuSe7i9tvv1199rOfVc8995x65pln1K/8yq+ogwcPqlqtpq95z3veoy6//HL12GOPqe9973vqLW95i/r5n/95fb7X66kbbrhBHT58WD399NPqy1/+spqcnFT33XffbnRpV/Cf//mf6ktf+pL6yU9+ol544QX1B3/wByoWi6nnnntOKeXG8Gzw3e9+V1155ZXqpptuUh/4wAf0cTeWw+H+++9Xr3vd69TCwoL+nDlzRp8/X+O45wj4zW9+szpy5Ij+f2NjQ+3fv1898MADu9iqCxcmAff7fTU7O6v+4i/+Qh8rlUoqkUiof/3Xf1VKKfWjH/1IAVBPPfWUvuYrX/mKCoVC6vTp0+et7RcalpeXFQD1xBNPKKU2xy0Wi6lHHnlEX/PjH/9YAVBHjx5VSm0uhsLhsFpcXNTXPPjggyqXy6l2u31+O3ABYXx8XP393/+9G8OzQLVaVa95zWvUo48+qn7xF39RE7Aby+Fx//33q5tvvtl67nyO455SQXc6HRw7dgyHDx/Wx8LhMA4fPoyjR4/uYsv2Do4fP47FxUXPGObzedx66616DI8ePYpCoYA3vvGN+prDhw8jHA7jO9/5znlv84WCcrkMACgWiwCAY8eOodvtesbyuuuuw8GDBz1jeeONN2JmZkZfc/vtt6NSqeD5558/j62/MLCxsYGHH34Y9Xodhw4dcmN4Fjhy5AjuvPNOz5gB7n0cFS+++CL279+Pq6++Gvfccw/m5uYAnN9x3FO7Ia2srGBjY8PTaQCYmZnB//3f/+1Sq/YWFhcXAcA6hjy3uLiI6elpz/loNIpisaivudTQ7/fxwQ9+EL/wC7+AG264AcDmOMXjcRQKBc+15ljaxprnLhU8++yzOHToEFqtFrLZLD7/+c/j+uuvxzPPPOPGcAQ8/PDD+P73v4+nnnpq2zn3Pg6PW2+9FQ899BBe+9rXYmFhAZ/4xCfw1re+Fc8999x5Hcc9RcAODruFI0eO4LnnnsM3v/nN3W7KnsRrX/taPPPMMyiXy/i3f/s3vOtd78ITTzyx283aUzh58iQ+8IEP4NFHH0Uymdzt5uxp3HHHHfr7TTfdhFtvvRVXXHEFPve5zyGVSp23duwpFfTk5CQikcg2b7SlpSXMzs7uUqv2FjhOQWM4OzuL5eVlz/ler4e1tbVLcpzf//7344tf/CK+/vWv47LLLtPHZ2dn0el0UCqVPNebY2kba567VBCPx3HNNdfglltuwQMPPICbb74Zf/VXf+XGcAQcO3YMy8vLeMMb3oBoNIpoNIonnngCn/70pxGNRjEzM+PG8ixRKBRw7bXX4qWXXjqv7+SeIuB4PI5bbrkFjz32mD7W7/fx2GOP4dChQ7vYsr2Dq666CrOzs54xrFQq+M53vqPH8NChQyiVSjh27Ji+5vHHH0e/38ett9563tu8W1BK4f3vfz8+//nP4/HHH8dVV13lOX/LLbcgFot5xvKFF17A3NycZyyfffZZz4Lm0UcfRS6Xw/XXX39+OnIBot/vo91uuzEcAbfddhueffZZPPPMM/rzxje+Effcc4/+7sby7FCr1fDyyy9j37595/edPCsXsl3Eww8/rBKJhHrooYfUj370I/V7v/d7qlAoeLzRLnVUq1X19NNPq6effloBUJ/61KfU008/rV555RWl1GYYUqFQUP/xH/+hfvjDH6pf//Vft4Yh/dzP/Zz6zne+o775zW+q17zmNZdcGNJ73/telc/n1Te+8Q1PuEKj0dDXvOc971EHDx5Ujz/+uPre976nDh06pA4dOqTPM1zhbW97m3rmmWfUV7/6VTU1NXVJhX189KMfVU888YQ6fvy4+uEPf6g++tGPqlAopL72ta8ppdwYngukF7RSbiyHxb333qu+8Y1vqOPHj6snn3xSHT58WE1OTqrl5WWl1Pkbxz1HwEop9dd//dfq4MGDKh6Pqze/+c3q29/+9m436YLC17/+dQVg2+dd73qXUmozFOmP//iP1czMjEokEuq2225TL7zwgqeM1dVV9c53vlNls1mVy+XUb//2b6tqtboLvdk92MYQgPrsZz+rr2k2m+p973ufGh8fV+l0Wr397W9XCwsLnnJOnDih7rjjDpVKpdTk5KS69957VbfbPc+92T38zu/8jrriiitUPB5XU1NT6rbbbtPkq5Qbw3OBScBuLIfD3Xffrfbt26fi8bg6cOCAuvvuu9VLL72kz5+vcXT7ATs4ODg4OOwC9pQN2MHBwcHB4WKBI2AHBwcHB4ddgCNgBwcHBweHXYAjYAcHBwcHh12AI2AHBwcHB4ddgCNgBwcHBweHXYAjYAcHBwcHh12AI2AHBwcHB4ddgCNgBwcHBweHXYAjYAcHBwcHh12AI2AHBwcHB4ddwP8D9K/uwZOBTY4AAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -1212,13 +1208,6 @@ "## Packaging app" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "attachments": {}, "cell_type": "markdown", @@ -1231,14 +1220,14 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 102, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/app.yaml\n" + "Overwriting simple_imaging_app/app.yaml\n" ] } ], @@ -1261,22 +1250,21 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 103, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Writing simple_imaging_app/requirements.txt\n" + "Overwriting simple_imaging_app/requirements.txt\n" ] } ], "source": [ "%%writefile simple_imaging_app/requirements.txt\n", "scikit-image\n", - "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue\n" + "setuptools>=59.5.0 # for pkg_resources\n" ] }, { @@ -1288,21 +1276,21 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 104, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:08:28,758] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 12:08:29,206] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 12:08:29,206] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", - "[2025-01-29 12:08:29,207] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 12:08:29,207] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", - "[2025-01-29 12:08:29,212] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 12:08:29,213] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 12:08:29,217] [DEBUG] (common) - \n", + "[2025-04-22 12:03:14,884] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 12:03:14,921] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 12:03:14,922] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app\n", + "[2025-04-22 12:03:14,922] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 12:03:14,922] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml...\n", + "[2025-04-22 12:03:14,927] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 12:03:14,928] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 12:03:14,932] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1330,14 +1318,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"3.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 12:08:29,218] [DEBUG] (common) - \n", + "[2025-04-22 12:03:14,933] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1355,7 +1343,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 12:08:29,222] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:03:14,938] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/simple_imaging_app/app.yaml'),\n", @@ -1373,13 +1361,13 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '3.0.0',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1396,7 +1384,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 12:08:29,222] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:03:14,939] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -1406,15 +1394,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'simple_imaging_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 12:08:29,246] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:03:14,964] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1478,9 +1466,9 @@ "LABEL tag=\"simple_imaging_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Simple Imaging App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"3.0.0\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1493,7 +1481,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1552,7 +1540,7 @@ "# Install MONAI Deploy App SDK\n", "\n", "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", + "RUN pip install monai-deploy-app-sdk==3.0.0\n", "\n", "\n", "\n", @@ -1567,7 +1555,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 12:08:29,246] [INFO] (packager.builder) - \n", + "[2025-04-22 12:03:14,964] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1575,335 +1563,120 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", + " Holoscan SDK Package: 3.1.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 12:08:29,559] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 12:08:29,559] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 12:03:15,380] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 12:03:15,380] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", "#1 transferring dockerfile: 4.53kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", - "#2 DONE 0.0s\n", + "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#2 DONE 0.1s\n", "\n", - "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#3 DONE 0.5s\n", + "#3 [internal] load .dockerignore\n", + "#3 transferring context: 1.80kB done\n", + "#3 DONE 0.1s\n", "\n", - "#4 [internal] load .dockerignore\n", - "#4 transferring context: 1.80kB done\n", - "#4 DONE 0.1s\n", + "#4 [internal] load build context\n", + "#4 DONE 0.0s\n", "\n", - "#5 [internal] load build context\n", + "#5 importing cache manifest from local:2851983977013277839\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", "#6 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", "#6 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#6 DONE 0.0s\n", + "#6 DONE 0.1s\n", "\n", - "#7 importing cache manifest from local:930277721408013411\n", - "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", - "#7 DONE 0.0s\n", + "#7 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#7 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", + "#7 DONE 0.3s\n", "\n", - "#8 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#8 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#8 DONE 0.7s\n", + "#4 [internal] load build context\n", + "#4 transferring context: 24.82kB 0.0s done\n", + "#4 DONE 0.1s\n", "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 24.94kB 0.0s done\n", - "#5 DONE 0.1s\n", + "#8 [release 9/17] WORKDIR /var/holoscan\n", + "#8 CACHED\n", "\n", - "#9 [release 7/17] COPY ./tools /var/holoscan/tools\n", + "#9 [release 2/17] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#9 CACHED\n", "\n", - "#10 [release 5/17] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#10 CACHED\n", "\n", - "#11 [release 6/17] WORKDIR /var/holoscan\n", + "#11 [release 5/17] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#11 CACHED\n", "\n", - "#12 [release 2/17] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#12 [release 8/17] RUN chmod +x /var/holoscan/tools\n", "#12 CACHED\n", "\n", - "#13 [release 3/17] RUN groupadd -f -g 1000 holoscan\n", + "#13 [release 10/17] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#13 CACHED\n", "\n", - "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#14 [release 6/17] WORKDIR /var/holoscan\n", "#14 CACHED\n", "\n", "#15 [release 4/17] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#15 CACHED\n", "\n", - "#16 [release 8/17] RUN chmod +x /var/holoscan/tools\n", + "#16 [release 11/17] RUN pip install --upgrade pip\n", "#16 CACHED\n", "\n", "#17 [release 1/17] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#17 CACHED\n", "\n", - "#18 [release 9/17] WORKDIR /var/holoscan\n", + "#18 [release 7/17] COPY ./tools /var/holoscan/tools\n", "#18 CACHED\n", "\n", - "#19 [release 10/17] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#19 DONE 0.1s\n", - "\n", - "#20 [release 11/17] RUN pip install --upgrade pip\n", - "#20 0.754 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 0.787 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 0.944 Collecting pip\n", - "#20 1.016 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#20 1.091 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 27.0 MB/s eta 0:00:00\n", - "#20 1.121 Installing collected packages: pip\n", - "#20 1.914 Successfully installed pip-25.0\n", - "#20 DONE 2.1s\n", - "\n", - "#21 [release 12/17] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.746 Collecting scikit-image (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.765 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", - "#21 0.783 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 2)) (59.6.0)\n", - "#21 0.866 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 3))\n", - "#21 0.873 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.134 Collecting numpy>=1.24 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.139 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.257 Collecting scipy>=1.11.2 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.261 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.285 Collecting networkx>=3.0 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.290 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 1.462 Collecting pillow>=10.1 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.468 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.510 Collecting imageio!=2.35.0,>=2.33 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.514 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", - "#21 1.568 Collecting tifffile>=2022.8.12 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.572 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", - "#21 1.601 Collecting packaging>=21 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.605 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 1.618 Collecting lazy-loader>=0.4 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.622 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", - "#21 1.629 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3)) (25.0)\n", - "#21 1.650 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.655 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 1.674 Collecting numpy>=1.24 (from scikit-image->-r /tmp/requirements.txt (line 1))\n", - "#21 1.678 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.690 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.694 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 1.718 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.722 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.734 Collecting Jinja2<4.0,>=3.1.3 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.738 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 1.795 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.799 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 1.824 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.828 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 1.884 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.888 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 1.967 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 1.976 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.022 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.027 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.112 Collecting MarkupSafe>=2.0 (from Jinja2<4.0,>=3.1.3->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.116 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.265 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.269 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 2.282 Collecting typing-extensions (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.286 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 2.354 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.358 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 2.369 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.376 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 2.437 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.441 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 2.457 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.460 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 2.489 Collecting filelock (from wheel-axle-runtime<1.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.492 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 2.507 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 2.511 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 3.029 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 3))\n", - "#21 3.033 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 3.055 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", - "#21 3.185 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 120.3 MB/s eta 0:00:00\n", - "#21 3.193 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 3.660 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 89.5 MB/s eta 0:00:00\n", - "#21 3.668 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 3.677 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 4.557 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 103.5 MB/s eta 0:00:00\n", - "#21 4.566 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", - "#21 4.576 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 4.582 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", - "#21 4.589 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 4.605 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 124.4 MB/s eta 0:00:00\n", - "#21 4.610 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 4.771 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.4 MB/s eta 0:00:00\n", - "#21 4.778 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 4.785 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 4.825 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 116.1 MB/s eta 0:00:00\n", - "#21 4.830 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 4.840 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 4.849 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 4.859 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 124.1 MB/s eta 0:00:00\n", - "#21 4.865 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 4.870 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", - "#21 5.265 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 103.7 MB/s eta 0:00:00\n", - "#21 5.273 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", - "#21 5.280 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 5.286 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 5.291 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 5.299 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 5.304 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 5.309 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 5.315 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 5.323 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 5.344 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 110.5 MB/s eta 0:00:00\n", - "#21 5.352 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 5.357 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 5.363 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 5.370 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 6.034 Installing collected packages: fastrlock, urllib3, typing-extensions, pyyaml, psutil, pillow, packaging, numpy, networkx, MarkupSafe, idna, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, tifffile, scipy, requests, pydantic-core, lazy-loader, Jinja2, imageio, cupy-cuda12x, scikit-image, pydantic, python-on-whales, holoscan\n", - "#21 17.54 Successfully installed Jinja2-3.1.5 MarkupSafe-3.0.2 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 holoscan-2.9.0 idna-3.10 imageio-2.37.0 lazy-loader-0.4 networkx-3.4.2 numpy-1.26.4 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 scikit-image-0.25.1 scipy-1.15.1 tifffile-2025.1.10 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 19.4s\n", - "\n", - "#22 [release 13/17] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 0.791 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 0.999 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.009 WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))': /packages/fa/5a/e4bc7bad613a21b80d0d2835598af5ad82083cc076fec6f4d14c455d23eb/monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata\n", - "#22 1.021 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.039 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.041 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.079 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.089 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.176 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.181 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.206 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", - "#22 1.208 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.209 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.209 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.210 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.211 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.212 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.213 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.214 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.214 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.219 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.227 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.231 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.242 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 1.247 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.248 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.250 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.250 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.253 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 1.265 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 1.266 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 1.285 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.306 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.325 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 1.453 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 1.652 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.0s\n", - "\n", - "#23 [release 14/17] COPY ./map/app.json /etc/holoscan/app.json\n", - "#23 DONE 0.1s\n", - "\n", - "#24 [release 15/17] COPY ./app.config /var/holoscan/app.yaml\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/17] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#25 DONE 0.1s\n", - "\n", - "#26 [release 17/17] COPY ./app /opt/holoscan/app\n", - "#26 DONE 0.1s\n", - "\n", - "#27 exporting to docker image format\n", - "#27 exporting layers\n", - "#27 exporting layers 21.8s done\n", - "#27 exporting manifest sha256:53ff7da31e7d5c6946b56e187e574f38dcf580354efae32e00d50b4986bb3ea0 0.0s done\n", - "#27 exporting config sha256:a00c56131135404d07ea4a88014855a80f5a306b51d023abfe17aecad923f4f8 0.0s done\n", - "#27 sending tarball\n", - "#27 ...\n", - "\n", - "#28 importing to docker\n", - "#28 loading layer 9d60bef8e444 230B / 230B\n", - "#28 loading layer c90115fa1f34 65.54kB / 5.10MB\n", - "#28 loading layer 8c9e9b65f01e 557.06kB / 230.97MB\n", - "#28 loading layer 8c9e9b65f01e 42.89MB / 230.97MB 2.1s\n", - "#28 loading layer 8c9e9b65f01e 111.41MB / 230.97MB 4.1s\n", - "#28 loading layer 8c9e9b65f01e 145.95MB / 230.97MB 6.1s\n", - "#28 loading layer 8c9e9b65f01e 175.47MB / 230.97MB 8.2s\n", - "#28 loading layer 8c9e9b65f01e 213.91MB / 230.97MB 10.2s\n", - "#28 loading layer 78921c5c83a7 32.77kB / 578.02kB\n", - "#28 loading layer 2b15b8f81b52 491B / 491B\n", - "#28 loading layer 5b542f78e0ea 314B / 314B\n", - "#28 loading layer 59edd496942a 294B / 294B\n", - "#28 loading layer 318a06f5a29c 3.20kB / 3.20kB\n", - "#28 loading layer 318a06f5a29c 3.20kB / 3.20kB 0.2s done\n", - "#28 loading layer 9d60bef8e444 230B / 230B 12.6s done\n", - "#28 loading layer c90115fa1f34 65.54kB / 5.10MB 12.6s done\n", - "#28 loading layer 8c9e9b65f01e 213.91MB / 230.97MB 11.9s done\n", - "#28 loading layer 78921c5c83a7 32.77kB / 578.02kB 0.7s done\n", - "#28 loading layer 2b15b8f81b52 491B / 491B 0.5s done\n", - "#28 loading layer 5b542f78e0ea 314B / 314B 0.4s done\n", - "#28 loading layer 59edd496942a 294B / 294B 0.3s done\n", - "#28 DONE 12.6s\n", - "\n", - "#27 exporting to docker image format\n", - "#27 sending tarball 27.3s done\n", - "#27 DONE 49.1s\n", - "\n", - "#29 exporting cache to client directory\n", - "#29 preparing build cache for export\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#29 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#29 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#29 writing layer sha256:310210c018e9123f7e4dd12747f657a167962dc86770b58db1309651c1e4fff0 0.1s done\n", - "#29 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#29 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#29 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#29 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#29 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#29 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#29 writing layer sha256:6b55a0ece27da2213382510598c60a658a0090ecc1b77924381aa52e03dde663 0.0s done\n", - "#29 writing layer sha256:765c241f999d7e08875cebc322e3685bc995f5bcd51b1ae00e7a8d37d580c6d0\n", - "#29 writing layer sha256:765c241f999d7e08875cebc322e3685bc995f5bcd51b1ae00e7a8d37d580c6d0 4.1s done\n", - "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885\n", - "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#29 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#29 writing layer sha256:b6b7f5fd2c4d2a1139bf709d79900ce0959f21bbf09cd203ddf5a01540ca11cb 0.0s done\n", - "#29 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#29 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#29 writing layer sha256:c6e43c0a1312306b0a277e2331a8040cbcb07a7dd18c1818cab4890b7ea6d1fd 0.0s done\n", - "#29 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#29 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#29 writing layer sha256:d7bc8c1388631bfc461cb46725c245871c4e7c8b55d39dbcabe50c11e67ee6d8 0.0s done\n", - "#29 writing layer sha256:dcea0ee16845c3ea8a82f6e3ff8448f3ab26316873f456d68d26d1ea1cc48cae 0.0s done\n", - "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31\n", - "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#29 writing layer sha256:f22f9b836cbd9aef6d19af4591090720cabcc90d50397bde4bfb5df30c3c0074 0.1s done\n", - "#29 preparing build cache for export 4.7s done\n", - "#29 writing config sha256:a4f75b166426c5bb67adf94166174f47e6bbad714871ff611d617fc530aa5585 0.0s done\n", - "#29 writing cache manifest sha256:7f136b3980378eddd091fe709e3147397eee5acd8a045ed9aa3e46e605540a0d 0.0s done\n", - "#29 DONE 4.7s\n", - "[2025-01-29 12:09:49,701] [INFO] (packager) - Build Summary:\n", + "#19 [release 3/17] RUN groupadd -f -g 1000 holoscan\n", + "#19 CACHED\n", + "\n", + "#20 [release 12/17] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#20 CACHED\n", + "\n", + "#21 [release 13/17] RUN pip install monai-deploy-app-sdk==3.0.0\n", + "#21 0.756 Defaulting to user installation because normal site-packages is not writeable\n", + "#21 0.918 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "#21 1.066 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "#21 ERROR: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "------\n", + " > [release 13/17] RUN pip install monai-deploy-app-sdk==3.0.0:\n", + "0.756 Defaulting to user installation because normal site-packages is not writeable\n", + "0.918 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "1.066 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "------\n", + "Dockerfile:137\n", + "--------------------\n", + " 135 | \n", + " 136 | # Install MONAI Deploy from PyPI org\n", + " 137 | >>> RUN pip install monai-deploy-app-sdk==3.0.0\n", + " 138 | \n", + " 139 | \n", + "--------------------\n", + "ERROR: failed to solve: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "[2025-04-22 12:03:17,946] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", - " Status: Succeeded\n", - " Docker Tag: simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Tarball: None\n" + " Status: Failure\n", + " Error: Error building image: see Docker output for additional details.\n", + " \n" ] } ], "source": [ "tag_prefix = \"simple_imaging_app\"\n", "\n", - "!monai-deploy package simple_imaging_app -c simple_imaging_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package simple_imaging_app -c simple_imaging_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -1921,14 +1694,14 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 105, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 a00c56131135 55 seconds ago 2.98GB\n" + "simple_imaging_app-x64-workstation-dgpu-linux-amd64 1.0 ffe41584f515 2 hours ago 3.49GB\n" ] } ], @@ -1950,7 +1723,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 106, "metadata": {}, "outputs": [ { @@ -1986,7 +1759,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -2008,17 +1781,17 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-04-22 19:03:20 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 20:09:54 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 20:09:54 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-04-22 19:03:20 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-04-22 19:03:20 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-04-22 19:03:20 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", - "2025-01-29 20:09:54 [INFO] '/opt/holoscan/models' cannot be found.\n", + "2025-04-22 19:03:20 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-04-22 19:03:20 [INFO] '/opt/holoscan/models' cannot be found.\n", "\n", - "2025-01-29 20:09:54 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 20:09:54 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-04-22 19:03:20 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-04-22 19:03:20 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config\n" ] @@ -2045,30 +1818,30 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 107, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:09:56,049] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 12:09:56,049] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 12:03:21,611] [INFO] (runner) - --> Verifying if \"simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 12:09:56,111] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpvqx0u9zd/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpvqx0u9zd/pkg.json\n", - "d89d96d29bdf06ffe093ea7a304454c174b70705e522d5cc48fcdc332533b32c\n", - "[2025-01-29 12:09:56,396] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 12:03:21,668] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmp743z7364/app.json\n", + "Successfully copied 2.05kB to /tmp/tmp743z7364/pkg.json\n", + "a1173c75c310b2aad23825b7ac8ec738134ee182f68590011dc0c8f3d3fb2853\n", + "[2025-04-22 12:03:21,918] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 12:09:56,396] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 12:03:21,918] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 12:09:56,655] [INFO] (common) - Launching container (cdaa371aba2f) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: zealous_bohr\n", + "[2025-04-22 12:03:22,256] [INFO] (common) - Launching container (652dede999f5) using image 'simple_imaging_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: frosty_hofstadter\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2078,27 +1851,23 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 20:09:57 [INFO] Launching application python3 /opt/holoscan/app ...\n", - "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "2025-04-22 19:03:22 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2025-01-29 20:09:57,994] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[2025-01-29 20:09:57,995] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 20:09:57,995] [INFO] (root) - sample_data_path: /var/holoscan/input\n", + "[2025-04-22 19:03:23,790] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", + "[2025-04-22 19:03:23,790] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'in1'\n", + "[2025-04-22 19:03:23,790] [INFO] (root) - sample_data_path: /var/holoscan/input\n", "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", "\n", @@ -2106,11 +1875,11 @@ "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[info] [gxf_executor.cpp:294] Destroying context\n", + "[info] [gxf_executor.cpp:295] Destroying context\n", "\n", "Number of times operator sobel_op whose class is defined in sobel_operator called: 1\n", "\n", @@ -2124,7 +1893,7 @@ "\n", "Data type of output post conversion: , max = 91\n", "\n", - "[2025-01-29 12:09:58,979] [INFO] (common) - Container 'zealous_bohr'(cdaa371aba2f) exited.\n" + "[2025-04-22 12:03:24,743] [INFO] (common) - Container 'frosty_hofstadter'(652dede999f5) exited.\n" ] } ], @@ -2136,30 +1905,30 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 108, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_58609/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", + "/tmp/ipykernel_895166/3197869135.py:3: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images.\n", " io.imshow(output_image)\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 27, + "execution_count": 108, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] diff --git a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb index ef574499..eebaf896 100644 --- a/notebooks/tutorials/02_mednist_app-prebuilt.ipynb +++ b/notebooks/tutorials/02_mednist_app-prebuilt.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -28,12 +28,12 @@ "output_type": "stream", "text": [ "Cloning into 'source'...\n", - "remote: Enumerating objects: 281, done.\u001b[K\n", - "remote: Counting objects: 100% (281/281), done.\u001b[K\n", - "remote: Compressing objects: 100% (229/229), done.\u001b[K\n", - "remote: Total 281 (delta 59), reused 149 (delta 30), pack-reused 0 (from 0)\u001b[K\n", - "Receiving objects: 100% (281/281), 1.40 MiB | 13.06 MiB/s, done.\n", - "Resolving deltas: 100% (59/59), done.\n" + "remote: Enumerating objects: 314, done.\u001b[K\n", + "remote: Counting objects: 100% (314/314), done.\u001b[K\n", + "remote: Compressing objects: 100% (254/254), done.\u001b[K\n", + "remote: Total 314 (delta 71), reused 184 (delta 36), pack-reused 0 (from 0)\u001b[K\n", + "Receiving objects: 100% (314/314), 1.47 MiB | 3.95 MiB/s, done.\n", + "Resolving deltas: 100% (71/71), done.\n" ] } ], @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -70,45 +70,68 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (2.0.0)\n", + "Requirement already satisfied: monai-deploy-app-sdk in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (0.5.1+37.g96f7e31.dirty)\n", "Requirement already satisfied: numpy>=1.21.6 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (1.26.4)\n", - "Requirement already satisfied: holoscan~=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (2.9.0)\n", + "Requirement already satisfied: holoscan~=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (3.1.0)\n", + "Requirement already satisfied: holoscan-cli~=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (3.1.0)\n", "Requirement already satisfied: colorama>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (0.4.6)\n", - "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.4.1)\n", - "Requirement already satisfied: pip>22.0.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (25.0)\n", - "Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (13.3.0)\n", - "Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.1)\n", - "Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.60.1)\n", - "Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (3.1.5)\n", - "Requirement already satisfied: packaging>=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (24.2)\n", - "Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.0.2)\n", - "Requirement already satisfied: requests<3.0,>=2.31.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (2.32.3)\n", - "Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (6.1.1)\n", - "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk) (0.0.6)\n", - "Requirement already satisfied: typing-extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.12.2)\n", - "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk) (0.8.3)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk) (3.0.2)\n", - "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.10.21)\n", - "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (4.67.1)\n", - "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.15.1)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.4.1)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (3.10)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2.3.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk) (2024.12.14)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk) (3.17.0)\n", - "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (8.1.8)\n", - "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (1.5.4)\n", - "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (13.9.4)\n", - "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (3.0.0)\n", - "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (2.19.1)\n", - "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk) (0.1.2)\n" + "Requirement already satisfied: tritonclient>=2.53.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.56.0)\n", + "Requirement already satisfied: typeguard>=3.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai-deploy-app-sdk) (4.4.2)\n", + "Requirement already satisfied: pip>22.0.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (25.0.1)\n", + "Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (13.4.1)\n", + "Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (3.1.1)\n", + "Requirement already satisfied: wheel-axle-runtime<1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk) (0.0.6)\n", + "Requirement already satisfied: Jinja2<4.0.0,>=3.1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (3.1.6)\n", + "Requirement already satisfied: packaging<24.0,>=23.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (23.2)\n", + "Requirement already satisfied: psutil<7.0.0,>=6.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (6.1.1)\n", + "Requirement already satisfied: python-on-whales<0.61.0,>=0.60.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (0.60.1)\n", + "Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (6.0.2)\n", + "Requirement already satisfied: requests<3.0.0,>=2.31.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk) (2.32.3)\n", + "Requirement already satisfied: python-rapidjson>=0.9.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.20)\n", + "Requirement already satisfied: urllib3>=2.0.7 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.4.0)\n", + "Requirement already satisfied: aiohttp<4.0.0,>=3.8.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (3.11.18)\n", + "Requirement already satisfied: cuda-python in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (12.8.0)\n", + "Requirement already satisfied: geventhttpclient>=2.3.3 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.3.3)\n", + "Requirement already satisfied: grpcio<1.68,>=1.63.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.67.1)\n", + "Requirement already satisfied: protobuf<6.0dev,>=5.26.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (5.29.4)\n", + "Requirement already satisfied: typing_extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk) (4.13.2)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2.6.1)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.3.2)\n", + "Requirement already satisfied: async-timeout<6.0,>=4.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (5.0.1)\n", + "Requirement already satisfied: attrs>=17.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (25.3.0)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.6.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (6.4.3)\n", + "Requirement already satisfied: propcache>=0.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (0.3.1)\n", + "Requirement already satisfied: yarl<2.0,>=1.17.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.20.0)\n", + "Requirement already satisfied: fastrlock>=0.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=3.0->monai-deploy-app-sdk) (0.8.3)\n", + "Requirement already satisfied: gevent in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (25.4.1)\n", + "Requirement already satisfied: certifi in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (2025.1.31)\n", + "Requirement already satisfied: brotli in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (1.1.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from Jinja2<4.0.0,>=3.1.5->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.0.2)\n", + "Requirement already satisfied: pydantic<2,>=1.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (1.10.21)\n", + "Requirement already satisfied: tqdm in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (4.67.1)\n", + "Requirement already satisfied: typer>=0.4.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (0.15.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.4.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.10)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=3.0->monai-deploy-app-sdk) (3.18.0)\n", + "Requirement already satisfied: cuda-bindings~=12.8.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from cuda-python->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (12.8.0)\n", + "Requirement already satisfied: click>=8.0.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (8.1.8)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (1.5.4)\n", + "Requirement already satisfied: rich>=10.11.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (14.0.0)\n", + "Requirement already satisfied: greenlet>=3.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (3.2.0)\n", + "Requirement already satisfied: zope.event in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (5.0)\n", + "Requirement already satisfied: zope.interface in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (7.2)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (2.19.1)\n", + "Requirement already satisfied: setuptools in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from zope.event->gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk) (79.0.0)\n", + "Requirement already satisfied: mdurl~=0.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk) (0.1.2)\n" ] } ], @@ -126,7 +149,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -134,14 +157,14 @@ "output_type": "stream", "text": [ "Requirement already satisfied: monai in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (1.4.0)\n", - "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (11.1.0)\n", + "Requirement already satisfied: Pillow in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (11.2.1)\n", "Requirement already satisfied: numpy<2.0,>=1.24 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (1.26.4)\n", - "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.5.1)\n", - "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.17.0)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.12.2)\n", + "Requirement already satisfied: torch>=1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from monai) (2.6.0)\n", + "Requirement already satisfied: filelock in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.18.0)\n", + "Requirement already satisfied: typing-extensions>=4.10.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (4.13.2)\n", "Requirement already satisfied: networkx in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.4.2)\n", - "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.5)\n", - "Requirement already satisfied: fsspec in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2024.12.0)\n", + "Requirement already satisfied: jinja2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.6)\n", + "Requirement already satisfied: fsspec in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2025.3.2)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", @@ -151,10 +174,11 @@ "Requirement already satisfied: nvidia-curand-cu12==10.3.5.147 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (10.3.5.147)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.6.1.9 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (11.6.1.9)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.3.1.170 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.3.1.170)\n", + "Requirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (0.6.2)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (2.21.5)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12==12.4.127 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (12.4.127)\n", - "Requirement already satisfied: triton==3.1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.1.0)\n", + "Requirement already satisfied: triton==3.2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (3.2.0)\n", "Requirement already satisfied: sympy==1.13.1 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from torch>=1.9->monai) (1.13.1)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from sympy==1.13.1->torch>=1.9->monai) (1.3.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages (from jinja2->torch>=1.9->monai) (3.0.2)\n" @@ -179,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -193,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -233,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -269,456 +293,30 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:12:36,857] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 12:12:36,871] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 12:12:36,871] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py\n", - "[2025-01-29 12:12:36,871] [INFO] (packager.parameters) - Detected application type: Python File\n", - "[2025-01-29 12:12:36,871] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-29 12:12:36,871] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-29 12:12:36,872] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml...\n", - "[2025-01-29 12:12:36,874] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 12:12:36,874] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 12:12:36,876] [DEBUG] (common) - \n", - "=============== Begin app.json ===============\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"command\": \"[\\\"python3\\\", \\\"/opt/holoscan/app/mednist_classifier_monaideploy.py\\\"]\",\n", - " \"environment\": {\n", - " \"HOLOSCAN_APPLICATION\": \"/opt/holoscan/app\",\n", - " \"HOLOSCAN_INPUT_PATH\": \"input/\",\n", - " \"HOLOSCAN_OUTPUT_PATH\": \"output/\",\n", - " \"HOLOSCAN_WORKDIR\": \"/var/holoscan\",\n", - " \"HOLOSCAN_MODEL_PATH\": \"/opt/holoscan/models\",\n", - " \"HOLOSCAN_CONFIG_PATH\": \"/var/holoscan/app.yaml\",\n", - " \"HOLOSCAN_APP_MANIFEST_PATH\": \"/etc/holoscan/app.json\",\n", - " \"HOLOSCAN_PKG_MANIFEST_PATH\": \"/etc/holoscan/pkg.json\",\n", - " \"HOLOSCAN_DOCS_PATH\": \"/opt/holoscan/docs\",\n", - " \"HOLOSCAN_LOGS_PATH\": \"/var/holoscan/logs\"\n", - " },\n", - " \"input\": {\n", - " \"path\": \"input/\",\n", - " \"formats\": null\n", - " },\n", - " \"liveness\": null,\n", - " \"output\": {\n", - " \"path\": \"output/\",\n", - " \"formats\": null\n", - " },\n", - " \"readiness\": null,\n", - " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", - " \"timeout\": 0,\n", - " \"version\": 1.0,\n", - " \"workingDirectory\": \"/var/holoscan\"\n", - "}\n", - "================ End app.json ================\n", - " \n", - "[2025-01-29 12:12:36,876] [DEBUG] (common) - \n", - "=============== Begin pkg.json ===============\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"applicationRoot\": \"/opt/holoscan/app\",\n", - " \"modelRoot\": \"/opt/holoscan/models\",\n", - " \"models\": {\n", - " \"model\": \"/opt/holoscan/models/model\"\n", - " },\n", - " \"resources\": {\n", - " \"cpu\": 1,\n", - " \"gpu\": 1,\n", - " \"memory\": \"1Gi\",\n", - " \"gpuMemory\": \"1Gi\"\n", - " },\n", - " \"version\": 1.0,\n", - " \"platformConfig\": \"dgpu\"\n", - "}\n", - "================ End pkg.json ================\n", - " \n", - "[2025-01-29 12:12:36,901] [DEBUG] (packager.builder) - \n", - "========== Begin Build Parameters ==========\n", - "{'additional_lib_paths': '',\n", - " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/app.yaml'),\n", - " 'app_dir': PosixPath('/opt/holoscan/app'),\n", - " 'app_json': '/etc/holoscan/app.json',\n", - " 'application': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/mednist_classifier_monaideploy.py'),\n", - " 'application_directory': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy'),\n", - " 'application_type': 'PythonFile',\n", - " 'build_cache': PosixPath('/home/mqin/.holoscan_build_cache'),\n", - " 'cmake_args': '',\n", - " 'command': '[\"python3\", '\n", - " '\"/opt/holoscan/app/mednist_classifier_monaideploy.py\"]',\n", - " 'command_filename': 'mednist_classifier_monaideploy.py',\n", - " 'config_file_path': PosixPath('/var/holoscan/app.yaml'),\n", - " 'docs_dir': PosixPath('/opt/holoscan/docs'),\n", - " 'full_input_path': PosixPath('/var/holoscan/input'),\n", - " 'full_output_path': PosixPath('/var/holoscan/output'),\n", - " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", - " 'includes': [],\n", - " 'input_dir': 'input/',\n", - " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", - " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", - " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", - " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", - " 'no_cache': False,\n", - " 'output_dir': 'output/',\n", - " 'pip_packages': None,\n", - " 'pkg_json': '/etc/holoscan/pkg.json',\n", - " 'requirements_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/source/examples/apps/mednist_classifier_monaideploy/requirements.txt'),\n", - " 'sdk': ,\n", - " 'sdk_type': 'monai-deploy',\n", - " 'tarball_output': None,\n", - " 'timeout': 0,\n", - " 'title': 'MONAI Deploy App Package - MedNIST Classifier App',\n", - " 'uid': 1000,\n", - " 'username': 'holoscan',\n", - " 'version': 1.0,\n", - " 'working_dir': PosixPath('/var/holoscan')}\n", - "=========== End Build Parameters ===========\n", - "\n", - "[2025-01-29 12:12:36,902] [DEBUG] (packager.builder) - \n", - "========== Begin Platform Parameters ==========\n", - "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", - " 'build_image': None,\n", - " 'cuda_deb_arch': 'x86_64',\n", - " 'custom_base_image': False,\n", - " 'custom_holoscan_sdk': False,\n", - " 'custom_monai_deploy_sdk': False,\n", - " 'gpu_type': 'dgpu',\n", - " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", - " 'monai_deploy_sdk_file': None,\n", - " 'monai_deploy_sdk_filename': None,\n", - " 'tag': 'mednist_app:1.0',\n", - " 'target_arch': 'x86_64'}\n", - "=========== End Platform Parameters ===========\n", - "\n", - "[2025-01-29 12:12:36,919] [DEBUG] (packager.builder) - \n", - "========== Begin Dockerfile ==========\n", - "\n", - "ARG GPU_TYPE=dgpu\n", - "\n", - "\n", - "\n", - "\n", - "FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04 AS base\n", - "\n", - "RUN apt-get update \\\n", - " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", - " curl \\\n", - " jq \\\n", - " && rm -rf /var/lib/apt/lists/*\n", - "\n", - "\n", - "\n", - "\n", - "# FROM base AS mofed-installer\n", - "# ARG MOFED_VERSION=23.10-2.1.3.1\n", - "\n", - "# # In a container, we only need to install the user space libraries, though the drivers are still\n", - "# # needed on the host.\n", - "# # Note: MOFED's installation is not easily portable, so we can't copy the output of this stage\n", - "# # to our final stage, but must inherit from it. For that reason, we keep track of the build/install\n", - "# # only dependencies in the `MOFED_DEPS` variable (parsing the output of `--check-deps-only`) to\n", - "# # remove them in that same layer, to ensure they are not propagated in the final image.\n", - "# WORKDIR /opt/nvidia/mofed\n", - "# ARG MOFED_INSTALL_FLAGS=\"--dpdk --with-mft --user-space-only --force --without-fw-update\"\n", - "# RUN UBUNTU_VERSION=$(cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d= -f2) \\\n", - "# && OFED_PACKAGE=\"MLNX_OFED_LINUX-${MOFED_VERSION}-ubuntu${UBUNTU_VERSION}-$(uname -m)\" \\\n", - "# && curl -S -# -o ${OFED_PACKAGE}.tgz -L \\\n", - "# https://www.mellanox.com/downloads/ofed/MLNX_OFED-${MOFED_VERSION}/${OFED_PACKAGE}.tgz \\\n", - "# && tar xf ${OFED_PACKAGE}.tgz \\\n", - "# && MOFED_INSTALLER=$(find . -name mlnxofedinstall -type f -executable -print) \\\n", - "# && MOFED_DEPS=$(${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} --check-deps-only 2>/dev/null | tail -n1 | cut -d' ' -f3-) \\\n", - "# && apt-get update \\\n", - "# && apt-get install --no-install-recommends -y ${MOFED_DEPS} \\\n", - "# && ${MOFED_INSTALLER} ${MOFED_INSTALL_FLAGS} \\\n", - "# && rm -r * \\\n", - "# && apt-get remove -y ${MOFED_DEPS} && apt-get autoremove -y \\\n", - "# && rm -rf /var/lib/apt/lists/*\n", - "\n", - "FROM base AS release\n", - "ENV DEBIAN_FRONTEND=noninteractive\n", - "ENV TERM=xterm-256color\n", - "\n", - "ARG GPU_TYPE\n", - "ARG UNAME\n", - "ARG UID\n", - "ARG GID\n", - "\n", - "RUN mkdir -p /etc/holoscan/ \\\n", - " && mkdir -p /opt/holoscan/ \\\n", - " && mkdir -p /var/holoscan \\\n", - " && mkdir -p /opt/holoscan/app \\\n", - " && mkdir -p /var/holoscan/input \\\n", - " && mkdir -p /var/holoscan/output\n", - "\n", - "LABEL base=\"nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\"\n", - "LABEL tag=\"mednist_app:1.0\"\n", - "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MedNIST Classifier App\"\n", - "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", - "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", - "\n", - "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", - "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", - "ENV HOLOSCAN_WORKDIR=/var/holoscan\n", - "ENV HOLOSCAN_APPLICATION=/opt/holoscan/app\n", - "ENV HOLOSCAN_TIMEOUT=0\n", - "ENV HOLOSCAN_MODEL_PATH=/opt/holoscan/models\n", - "ENV HOLOSCAN_DOCS_PATH=/opt/holoscan/docs\n", - "ENV HOLOSCAN_CONFIG_PATH=/var/holoscan/app.yaml\n", - "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", - "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", - "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "# If torch is installed, we can skip installing Python\n", - "ENV PYTHON_VERSION=3.10.6-1~22.04\n", - "ENV PYTHON_PIP_VERSION=22.0.2+dfsg-*\n", - "\n", - "RUN apt update \\\n", - " && apt-get install -y --no-install-recommends --no-install-suggests \\\n", - " python3-minimal=${PYTHON_VERSION} \\\n", - " libpython3-stdlib=${PYTHON_VERSION} \\\n", - " python3=${PYTHON_VERSION} \\\n", - " python3-venv=${PYTHON_VERSION} \\\n", - " python3-pip=${PYTHON_PIP_VERSION} \\\n", - " && rm -rf /var/lib/apt/lists/*\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "RUN groupadd -f -g $GID $UNAME\n", - "RUN useradd -rm -d /home/$UNAME -s /bin/bash -g $GID -G sudo -u $UID $UNAME\n", - "RUN chown -R holoscan /var/holoscan && \\\n", - " chown -R holoscan /var/holoscan/input && \\\n", - " chown -R holoscan /var/holoscan/output\n", - "\n", - "# Set the working directory\n", - "WORKDIR /var/holoscan\n", - "\n", - "# Copy HAP/MAP tool script\n", - "COPY ./tools /var/holoscan/tools\n", - "RUN chmod +x /var/holoscan/tools\n", - "\n", - "# Set the working directory\n", - "WORKDIR /var/holoscan\n", - "\n", - "USER $UNAME\n", - "\n", - "ENV PATH=/home/${UNAME}/.local/bin:/opt/nvidia/holoscan/bin:$PATH\n", - "ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/${UNAME}/.local/lib/python3.10/site-packages/holoscan/lib\n", - "\n", - "COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "\n", - "RUN pip install --upgrade pip\n", - "RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "\n", - "\n", - "# Install MONAI Deploy App SDK\n", - "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", - "\n", - "\n", - "COPY ./models /opt/holoscan/models\n", - "\n", - "\n", - "COPY ./map/app.json /etc/holoscan/app.json\n", - "COPY ./app.config /var/holoscan/app.yaml\n", - "COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "\n", - "COPY ./app /opt/holoscan/app\n", - "\n", - "\n", - "ENTRYPOINT [\"/var/holoscan/tools\"]\n", - "=========== End Dockerfile ===========\n", - "\n", - "[2025-01-29 12:12:36,920] [INFO] (packager.builder) - \n", - "===============================================================================\n", - "Building image for: x64-workstation\n", - " Architecture: linux/amd64\n", - " Base Image: nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - " Build Image: N/A\n", - " Cache: Enabled\n", - " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", - " MONAI Deploy App SDK Package: N/A\n", - " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", - " SDK: monai-deploy\n", - " Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Included features/dependencies: N/A\n", - " \n", - "[2025-01-29 12:12:37,236] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 12:12:37,236] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", - "\n", - "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 4.57kB done\n", - "#1 DONE 0.1s\n", - "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 DONE 0.1s\n", - "\n", - "#3 [internal] load .dockerignore\n", - "#3 transferring context: 1.80kB done\n", - "#3 DONE 0.1s\n", - "\n", - "#4 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#4 ...\n", - "\n", - "#5 [internal] load build context\n", - "#5 DONE 0.0s\n", - "\n", - "#6 importing cache manifest from local:16465729945619348226\n", - "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", - "#6 DONE 0.0s\n", - "\n", - "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#7 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#7 DONE 0.0s\n", - "\n", - "#4 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#4 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#4 DONE 0.4s\n", - "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 28.60MB 0.2s done\n", - "#5 DONE 0.3s\n", - "\n", - "#8 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", - "#8 CACHED\n", - "\n", - "#9 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#9 CACHED\n", - "\n", - "#10 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", - "#10 CACHED\n", - "\n", - "#11 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#11 CACHED\n", - "\n", - "#12 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#12 CACHED\n", - "\n", - "#13 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", - "#13 CACHED\n", - "\n", - "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", - "#14 CACHED\n", - "\n", - "#15 [release 9/18] WORKDIR /var/holoscan\n", - "#15 CACHED\n", - "\n", - "#16 [release 7/18] COPY ./tools /var/holoscan/tools\n", - "#16 CACHED\n", - "\n", - "#17 [release 6/18] WORKDIR /var/holoscan\n", - "#17 CACHED\n", - "\n", - "#18 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", - "#18 CACHED\n", - "\n", - "#19 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#19 CACHED\n", - "\n", - "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 CACHED\n", - "\n", - "#21 [release 8/18] RUN chmod +x /var/holoscan/tools\n", - "#21 CACHED\n", - "\n", - "#22 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#22 CACHED\n", - "\n", - "#23 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", - "#23 CACHED\n", - "\n", - "#24 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#24 CACHED\n", - "\n", - "#25 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", - "#25 CACHED\n", - "\n", - "#26 [release 18/18] COPY ./app /opt/holoscan/app\n", - "#26 CACHED\n", - "\n", - "#27 exporting to docker image format\n", - "#27 exporting layers done\n", - "#27 exporting manifest sha256:0b41598c260304f5f4973c45507027d6f6d311cf96b376966f1bb76389f67124 0.0s done\n", - "#27 exporting config sha256:709aec1f6ab81acd9aca94f56c56022d894fd418e507ce39c07cfa36c5d1df5e 0.0s done\n", - "#27 sending tarball\n", - "#27 ...\n", - "\n", - "#28 importing to docker\n", - "#28 DONE 0.3s\n", - "\n", - "#27 exporting to docker image format\n", - "#27 sending tarball 42.6s done\n", - "#27 DONE 42.6s\n", - "\n", - "#29 exporting cache to client directory\n", - "#29 preparing build cache for export\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", - "#29 preparing build cache for export 0.2s done\n", - "#29 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#29 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#29 writing layer sha256:1aec4523578214a9e9ce44e1d35ef14baaa0adc445ee1d6c04b7a1410286be38 done\n", - "#29 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#29 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#29 writing layer sha256:2662727f69a3c4fe16ed7b9563dc330c8e3d78c0e96c6f7452c9feebf4240230 done\n", - "#29 writing layer sha256:2c27de1203ae9e9310d46119db6142d91f2dc9f3696febdeda1f19fc94cc322e done\n", - "#29 writing layer sha256:2eab43e0230c8932e1ecc65ee0bfb04e09997d2fe628464a9aeee2e7c3342e70 done\n", - "#29 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#29 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#29 writing layer sha256:3d39307d2f870435b87759c9c8fc19aef39983c9770bacebcfcffe4995566ace done\n", - "#29 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#29 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#29 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#29 writing layer sha256:661c1acfe226bb081b6c704a60812b6478d91d96b5fd54809955559a13e1de7a done\n", - "#29 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#29 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#29 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#29 writing layer sha256:9c13069733b0b63267a044a5a9096728e6abacbc29bc2c95c5f612d18fddd5c0 done\n", - "#29 writing layer sha256:a86de304afb6316ba8fdb2348e518ea07b80a2bae0094710c44433a2f21f0179 done\n", - "#29 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#29 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#29 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#29 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#29 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#29 writing layer sha256:db35cf0f285944390b7654050f2f598898d655184084cf06a69ec9b97ce0aef7 done\n", - "#29 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#29 writing config sha256:5dc9836ff3abdef93b2f148be23a0b066d0a7a2852c914b765917464c3015748 done\n", - "#29 writing cache manifest sha256:1010d1046d6cbc0e3d13f82a6ae20739105dc9f11c703119f1961a90c2f5851e done\n", - "#29 DONE 0.2s\n", - "[2025-01-29 12:13:21,748] [INFO] (packager) - Build Summary:\n", - "\n", - "Platform: x64-workstation/dgpu\n", - " Status: Succeeded\n", - " Docker Tag: mednist_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Tarball: None\n" + "usage: monai-deploy package [-h] [-l {DEBUG,INFO,WARN,ERROR,CRITICAL}]\n", + " --config CONFIG [--docs DOCS] [--models MODELS]\n", + " --platform PLATFORM [--add ADDITIONAL_LIBS]\n", + " [--timeout TIMEOUT] [--version VERSION]\n", + " [--base-image BASE_IMAGE]\n", + " [--build-image BUILD_IMAGE]\n", + " [--includes [{debug,holoviz,torch,onnx} ...]]\n", + " [--build-cache BUILD_CACHE]\n", + " [--cmake-args CMAKE_ARGS]\n", + " [--holoscan-sdk-file HOLOSCAN_SDK_FILE]\n", + " [--monai-deploy-sdk-file MONAI_DEPLOY_SDK_FILE]\n", + " [--no-cache] [--sdk SDK] [--source SOURCE]\n", + " [--sdk-version SDK_VERSION] [--output OUTPUT]\n", + " --tag TAG [--username USERNAME] [--uid UID]\n", + " [--gid GID]\n", + " application\n", + "monai-deploy package: error: argument --platform: x64-workstation is not a valid option for --platforms.\n" ] } ], @@ -737,17 +335,9 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 9, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mednist_app-x64-workstation-dgpu-linux-amd64 1.0 709aec1f6ab8 19 hours ago 8.62GB\n" - ] - } - ], + "outputs": [], "source": [ "!docker image ls | grep {tag_prefix}" ] @@ -766,7 +356,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -774,70 +364,14 @@ "output_type": "stream", "text": [ "Display manifests and extract MAP contents to the host folder, ./export\n", + "Unable to find image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0' locally\n", + "docker: Error response from daemon: pull access denied for mednist_app-x64-workstation-dgpu-linux-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n", "\n", - "============================== app.json ==============================\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"command\": \"[\\\"python3\\\", \\\"/opt/holoscan/app/mednist_classifier_monaideploy.py\\\"]\",\n", - " \"environment\": {\n", - " \"HOLOSCAN_APPLICATION\": \"/opt/holoscan/app\",\n", - " \"HOLOSCAN_INPUT_PATH\": \"input/\",\n", - " \"HOLOSCAN_OUTPUT_PATH\": \"output/\",\n", - " \"HOLOSCAN_WORKDIR\": \"/var/holoscan\",\n", - " \"HOLOSCAN_MODEL_PATH\": \"/opt/holoscan/models\",\n", - " \"HOLOSCAN_CONFIG_PATH\": \"/var/holoscan/app.yaml\",\n", - " \"HOLOSCAN_APP_MANIFEST_PATH\": \"/etc/holoscan/app.json\",\n", - " \"HOLOSCAN_PKG_MANIFEST_PATH\": \"/etc/holoscan/pkg.json\",\n", - " \"HOLOSCAN_DOCS_PATH\": \"/opt/holoscan/docs\",\n", - " \"HOLOSCAN_LOGS_PATH\": \"/var/holoscan/logs\"\n", - " },\n", - " \"input\": {\n", - " \"path\": \"input/\",\n", - " \"formats\": null\n", - " },\n", - " \"liveness\": null,\n", - " \"output\": {\n", - " \"path\": \"output/\",\n", - " \"formats\": null\n", - " },\n", - " \"readiness\": null,\n", - " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", - " \"timeout\": 0,\n", - " \"version\": 1,\n", - " \"workingDirectory\": \"/var/holoscan\"\n", - "}\n", - "\n", - "============================== pkg.json ==============================\n", - "{\n", - " \"apiVersion\": \"1.0.0\",\n", - " \"applicationRoot\": \"/opt/holoscan/app\",\n", - " \"modelRoot\": \"/opt/holoscan/models\",\n", - " \"models\": {\n", - " \"model\": \"/opt/holoscan/models/model\"\n", - " },\n", - " \"resources\": {\n", - " \"cpu\": 1,\n", - " \"gpu\": 1,\n", - " \"memory\": \"1Gi\",\n", - " \"gpuMemory\": \"1Gi\"\n", - " },\n", - " \"version\": 1,\n", - " \"platformConfig\": \"dgpu\"\n", - "}\n", - "\n", - "2025-01-29 20:13:24 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "Run 'docker run --help' for more information\n", + "Unable to find image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0' locally\n", + "docker: Error response from daemon: pull access denied for mednist_app-x64-workstation-dgpu-linux-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n", "\n", - "2025-01-29 20:13:24 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 20:13:24 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 20:13:24 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", - "\n", - "2025-01-29 20:13:24 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", - "\n", - "2025-01-29 20:13:24 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 20:13:24 [INFO] '/opt/holoscan/docs/' cannot be found.\n", - "\n", - "app config models\n" + "Run 'docker run --help' for more information\n" ] } ], @@ -860,92 +394,28 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 12:13:26,378] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", - "\n", - "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", - "\n", - "[2025-01-29 12:13:26,378] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", - "\n", - "[2025-01-29 12:13:26,457] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmp37cky0tg/app.json\n", - "Successfully copied 2.05kB to /tmp/tmp37cky0tg/pkg.json\n", - "8b09681d6e2452afa9a9506bd30dc868461412ea13e53a3913f9054fe877e4e0\n", - "[2025-01-29 12:13:26,739] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", - "\n", - "[2025-01-29 12:13:26,739] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", - "\n", - "[2025-01-29 12:13:27,109] [INFO] (common) - Launching container (6900c4ea8775) using image 'mednist_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: frosty_gould\n", - " host name: mingq-dt\n", - " network: host\n", - " user: 1000:1000\n", - " ulimits: memlock=-1:-1, stack=67108864:67108864\n", - " cap_add: CAP_SYS_PTRACE\n", - " ipc mode: host\n", - " shared memory size: 67108864\n", - " devices: \n", - " group_add: 44\n", - "2025-01-29 20:13:27 [INFO] Launching application python3 /opt/holoscan/app/mednist_classifier_monaideploy.py ...\n", + "[2025-04-22 10:01:00,178] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 10:01:00,178] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[2025-04-22 10:01:00,179] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "[2025-04-22 10:01:00,179] [INFO] (runner) - --> Verifying if \"mednist_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 20:13:32,718] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app/mednist_classifier_monaideploy.py'])\n", - "\n", - "[2025-01-29 20:13:32,723] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", - "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", - "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", - "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", - "\n", - " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", - "\n", - "[2025-01-29 20:13:34,583] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "\n", - "[2025-01-29 20:13:34,583] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "\n", - "[2025-01-29 20:13:34,586] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "\n", - "[2025-01-29 20:13:34,589] [INFO] (root) - Finished writing DICOM instance to file /var/holoscan/output/1.2.826.0.1.3680043.8.498.31374249995216483316246551805036524135.dcm\n", - "\n", - "[2025-01-29 20:13:34,590] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /var/holoscan/output/1.2.826.0.1.3680043.8.498.31374249995216483316246551805036524135.dcm\n", - "\n", - "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", - "\n", - "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "\n", - "[info] [gxf_executor.cpp:294] Destroying context\n", - "\n", - "AbdomenCT\n", - "\n", - "[2025-01-29 12:13:35,983] [INFO] (common) - Container 'frosty_gould'(6900c4ea8775) exited.\n" + "[2025-04-22 10:01:00,206] [INFO] (common) - Attempting to pull image mednist_app-x64-workstation-dgpu-linux-amd64:1.0..\n", + "Error response from daemon: pull access denied for mednist_app-x64-workstation-dgpu-linux-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n", + "[2025-04-22 10:01:01,166] [ERROR] (common) - The docker command executed was `/usr/bin/docker image pull mednist_app-x64-workstation-dgpu-linux-amd64:1.0`.\n", + "It returned with code 1\n", + "The content of stdout can be found above the stacktrace (it wasn't captured).\n", + "The content of stderr can be found above the stacktrace (it wasn't captured).\n", + "[2025-04-22 10:01:01,166] [ERROR] (runner) - Unable to fetch required image.\n", + "[2025-04-22 10:01:01,167] [ERROR] (runner) - Execution Aborted\n" ] } ], @@ -957,14 +427,14 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\"AbdomenCT\"" + "cat: output/output.json: No such file or directory\n" ] } ], @@ -1010,7 +480,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -1041,7 +511,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -1112,7 +582,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -1251,7 +721,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -1302,31 +772,31 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:13:36,663] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 12:13:36,682] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=)\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:01:06,211] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 10:01:06,224] [INFO] (root) - AppContext object: AppContext(input_path=input, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", - "[2025-01-29 12:13:37,924] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:37,926] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:37,928] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", - "[2025-01-29 12:13:37,936] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "[2025-01-29 12:13:37,945] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.73614944052626475782727074691876362838.dcm\n", - "[2025-01-29 12:13:37,958] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.73614944052626475782727074691876362838.dcm\n" + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:203.)\n", + " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", + "[2025-04-22 10:01:07,561] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:07,562] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:07,565] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + " warn_and_log(msg)\n", + "[2025-04-22 10:01:07,575] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-04-22 10:01:07,581] [INFO] (root) - Finished writing DICOM instance to file output/1.2.826.0.1.3680043.8.498.59762034317112105131069375575619402726.dcm\n", + "[2025-04-22 10:01:07,585] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in output/1.2.826.0.1.3680043.8.498.59762034317112105131069375575619402726.dcm\n" ] }, { @@ -1342,9 +812,9 @@ "text": [ "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[info] [gxf_executor.cpp:294] Destroying context\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[info] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1355,7 +825,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1389,7 +859,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -1399,7 +869,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -1664,63 +1134,59 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 12:13:46,068] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", - "[2025-01-29 12:13:46,073] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'text'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:01:12,273] [INFO] (root) - Parsed args: Namespace(log_level='DEBUG', input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, triton_server_netloc=None, argv=['mednist_app/mednist_classifier_monaideploy.py', '-i', 'input', '-o', 'output', '-m', 'models', '-l', 'DEBUG'])\n", + "[2025-04-22 10:01:12,278] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/input, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=), triton_server_netloc=\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 3 entities\n", - "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ../torch/csrc/utils/tensor_numpy.cpp:206.)\n", + "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/data/meta_tensor.py:116: UserWarning: The given NumPy array is not writable, and PyTorch does not support non-writable tensors. This means writing to this tensor will result in undefined behavior. You may want to copy the array to protect its data or make it writable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:203.)\n", " return torch.as_tensor(x, *args, **_kwargs).as_subclass(cls)\n", "AbdomenCT\n", - "[2025-01-29 12:13:47,618] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", + "[2025-04-22 10:01:13,572] [DEBUG] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - Writing DICOM object...\n", "\n", - "[2025-01-29 12:13:47,618] [DEBUG] (root) - Writing DICOM common modules...\n", - "[2025-01-29 12:13:47,619] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:47,619] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", - "[2025-01-29 12:13:47,620] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", + "[2025-04-22 10:01:13,572] [DEBUG] (root) - Writing DICOM common modules...\n", + "[2025-04-22 10:01:13,573] [WARNING] (pydicom) - 'Dataset.is_implicit_VR' will be removed in v4.0, set the Transfer Syntax UID or use the 'implicit_vr' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:13,573] [WARNING] (pydicom) - 'Dataset.is_little_endian' will be removed in v4.0, set the Transfer Syntax UID or use the 'little_endian' argument with Dataset.save_as() or dcmwrite() instead\n", + "[2025-04-22 10:01:13,574] [WARNING] (pydicom) - Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/pydicom/valuerep.py:440: UserWarning: Invalid value for VR UI: 'xyz'. Please see for allowed values for each VR.\n", " warn_and_log(msg)\n", - "[2025-01-29 12:13:47,626] [DEBUG] (root) - DICOM common modules written:\n", + "[2025-04-22 10:01:13,576] [DEBUG] (root) - DICOM common modules written:\n", "Dataset.file_meta -------------------------------\n", "(0002,0000) File Meta Information Group Length UL: 198\n", "(0002,0001) File Meta Information Version OB: b'01'\n", "(0002,0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", + "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", "(0002,0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002,0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002,0013) Implementation Version Name SH: '2.0.0'\n", + "(0002,0013) Implementation Version Name SH: '0.5.1+37.g96f7e'\n", "-------------------------------------------------\n", "(0008,0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008,0012) Instance Creation Date DA: '20250129'\n", - "(0008,0013) Instance Creation Time TM: '121347'\n", + "(0008,0012) Instance Creation Date DA: '20250422'\n", + "(0008,0013) Instance Creation Time TM: '100113'\n", "(0008,0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", - "(0008,0020) Study Date DA: '20250129'\n", - "(0008,0021) Series Date DA: '20250129'\n", - "(0008,0023) Content Date DA: '20250129'\n", - "(0008,002A) Acquisition DateTime DT: '20250129121347'\n", - "(0008,0030) Study Time TM: '121347'\n", - "(0008,0031) Series Time TM: '121347'\n", - "(0008,0033) Content Time TM: '121347'\n", + "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", + "(0008,0020) Study Date DA: '20250422'\n", + "(0008,0021) Series Date DA: '20250422'\n", + "(0008,0023) Content Date DA: '20250422'\n", + "(0008,002A) Acquisition DateTime DT: '20250422100113'\n", + "(0008,0030) Study Time TM: '100113'\n", + "(0008,0031) Series Time TM: '100113'\n", + "(0008,0033) Content Time TM: '100113'\n", "(0008,0050) Accession Number SH: ''\n", "(0008,0060) Modality CS: 'SR'\n", "(0008,0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", "(0008,0090) Referring Physician's Name PN: ''\n", - "(0008,0201) Timezone Offset From UTC SH: '-0800'\n", + "(0008,0201) Timezone Offset From UTC SH: '-0700'\n", "(0008,1030) Study Description LO: 'AI results.'\n", "(0008,103E) Series Description LO: 'CAUTION: Not for Diagnostic Use, for research use only.'\n", "(0008,1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", @@ -1730,7 +1196,7 @@ "(0010,0030) Patient's Birth Date DA: ''\n", "(0010,0040) Patient's Sex CS: ''\n", "(0018,0015) Body Part Examined CS: ''\n", - "(0018,1020) Software Versions LO: '2.0.0'\n", + "(0018,1020) Software Versions LO: '0.5.1+37.g96f7e'\n", "(0018,A001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008,0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008,1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1742,38 +1208,38 @@ " (0008,0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.46747993953820320366351594900569871942\n", - "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.86323530137357157956886829965721763612\n", + "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.21427650624285250793329047854027764031\n", + "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.53141607669515853472048821908030378483\n", "(0020,0010) Study ID SH: '1'\n", - "(0020,0011) Series Number IS: '5312'\n", + "(0020,0011) Series Number IS: '1679'\n", "(0020,0013) Instance Number IS: '1'\n", "(0040,1001) Requested Procedure ID SH: ''\n", - "[2025-01-29 12:13:47,627] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", + "[2025-04-22 10:01:13,577] [DEBUG] (root) - DICOM dataset to be written:Dataset.file_meta -------------------------------\n", "(0002,0000) File Meta Information Group Length UL: 198\n", "(0002,0001) File Meta Information Version OB: b'01'\n", "(0002,0002) Media Storage SOP Class UID UI: Basic Text SR Storage\n", - "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", + "(0002,0003) Media Storage SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", "(0002,0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", "(0002,0012) Implementation Class UID UI: 1.2.40.0.13.1.1.1\n", - "(0002,0013) Implementation Version Name SH: '2.0.0'\n", + "(0002,0013) Implementation Version Name SH: '0.5.1+37.g96f7e'\n", "-------------------------------------------------\n", "(0008,0005) Specific Character Set CS: 'ISO_IR 100'\n", - "(0008,0012) Instance Creation Date DA: '20250129'\n", - "(0008,0013) Instance Creation Time TM: '121347'\n", + "(0008,0012) Instance Creation Date DA: '20250422'\n", + "(0008,0013) Instance Creation Time TM: '100113'\n", "(0008,0016) SOP Class UID UI: Basic Text SR Storage\n", - "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428\n", - "(0008,0020) Study Date DA: '20250129'\n", - "(0008,0021) Series Date DA: '20250129'\n", - "(0008,0023) Content Date DA: '20250129'\n", - "(0008,002A) Acquisition DateTime DT: '20250129121347'\n", - "(0008,0030) Study Time TM: '121347'\n", - "(0008,0031) Series Time TM: '121347'\n", - "(0008,0033) Content Time TM: '121347'\n", + "(0008,0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229\n", + "(0008,0020) Study Date DA: '20250422'\n", + "(0008,0021) Series Date DA: '20250422'\n", + "(0008,0023) Content Date DA: '20250422'\n", + "(0008,002A) Acquisition DateTime DT: '20250422100113'\n", + "(0008,0030) Study Time TM: '100113'\n", + "(0008,0031) Series Time TM: '100113'\n", + "(0008,0033) Content Time TM: '100113'\n", "(0008,0050) Accession Number SH: ''\n", "(0008,0060) Modality CS: 'SR'\n", "(0008,0070) Manufacturer LO: 'MOANI Deploy App SDK'\n", "(0008,0090) Referring Physician's Name PN: ''\n", - "(0008,0201) Timezone Offset From UTC SH: '-0800'\n", + "(0008,0201) Timezone Offset From UTC SH: '-0700'\n", "(0008,1030) Study Description LO: 'AI results.'\n", "(0008,103E) Series Description LO: 'Not for clinical use. The result is for research use only.'\n", "(0008,1090) Manufacturer's Model Name LO: 'DICOM SR Writer'\n", @@ -1783,7 +1249,7 @@ "(0010,0030) Patient's Birth Date DA: ''\n", "(0010,0040) Patient's Sex CS: ''\n", "(0018,0015) Body Part Examined CS: ''\n", - "(0018,1020) Software Versions LO: '2.0.0'\n", + "(0018,1020) Software Versions LO: '0.5.1+37.g96f7e'\n", "(0018,A001) Contributing Equipment Sequence 1 item(s) ---- \n", " (0008,0070) Manufacturer LO: 'MONAI WG Trainer'\n", " (0008,1090) Manufacturer's Model Name LO: 'MEDNIST Classifier'\n", @@ -1795,10 +1261,10 @@ " (0008,0104) Code Meaning LO: '\"Processing Algorithm'\n", " ---------\n", " ---------\n", - "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.46747993953820320366351594900569871942\n", - "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.86323530137357157956886829965721763612\n", + "(0020,000D) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.21427650624285250793329047854027764031\n", + "(0020,000E) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.53141607669515853472048821908030378483\n", "(0020,0010) Study ID SH: '1'\n", - "(0020,0011) Series Number IS: '5312'\n", + "(0020,0011) Series Number IS: '1679'\n", "(0020,0013) Instance Number IS: '1'\n", "(0040,1001) Requested Procedure ID SH: ''\n", "(0040,A040) Value Type CS: 'CONTAINER'\n", @@ -1819,14 +1285,14 @@ " ---------\n", " (0040,A160) Text Value UT: 'AbdomenCT'\n", " ---------\n", - "[2025-01-29 12:13:47,627] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", - "[2025-01-29 12:13:47,635] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428.dcm\n", - "[2025-01-29 12:13:47,636] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.40930607307693667945884211523087566428.dcm\n", + "[2025-04-22 10:01:13,577] [WARNING] (pydicom) - 'write_like_original' is deprecated and will be removed in v4.0, please use 'enforce_file_format' instead\n", + "[2025-04-22 10:01:13,580] [INFO] (root) - Finished writing DICOM instance to file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229.dcm\n", + "[2025-04-22 10:01:13,581] [INFO] (monai.deploy.operators.dicom_text_sr_writer_operator.DICOMTextSRWriterOperator) - DICOM SOP instance saved in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/1.2.826.0.1.3680043.8.498.41171981535561245877202758927925418229.dcm\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1836,7 +1302,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1863,7 +1329,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -1893,7 +1359,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -1902,17 +1368,6 @@ "text": [ "Writing mednist_app/requirements.txt\n" ] - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", - "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", - "\u001b[1;31mClick here for more info. \n", - "\u001b[1;31mView Jupyter log for further details." - ] } ], "source": [ @@ -1922,8 +1377,7 @@ "pydicom>=2.3.0\n", "highdicom>=0.18.2\n", "SimpleITK>=2.0.0\n", - "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "setuptools>=59.5.0 # for pkg_resources\n" ] }, { diff --git a/notebooks/tutorials/02_mednist_app.ipynb b/notebooks/tutorials/02_mednist_app.ipynb index cb2371ae..f2ef775d 100644 --- a/notebooks/tutorials/02_mednist_app.ipynb +++ b/notebooks/tutorials/02_mednist_app.ipynb @@ -1201,7 +1201,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1219,13 +1219,12 @@ "pydicom>=2.3.0\n", "highdicom>=0.18.2\n", "SimpleITK>=2.0.0\n", - "setuptools>=59.5.0 # for pkg_resources\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "setuptools>=59.5.0 # for pkg_resources\n" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1945,7 +1944,7 @@ "source": [ "tag_prefix = \"mednist_app\"\n", "\n", - "!monai-deploy package \"mednist_app/mednist_classifier_monaideploy.py\" -m {models_folder} -c \"mednist_app/app.yaml\" -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package \"mednist_app/mednist_classifier_monaideploy.py\" -m {models_folder} -c \"mednist_app/app.yaml\" -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { diff --git a/notebooks/tutorials/03_segmentation_app.ipynb b/notebooks/tutorials/03_segmentation_app.ipynb index ab0b9031..57886cc8 100644 --- a/notebooks/tutorials/03_segmentation_app.ipynb +++ b/notebooks/tutorials/03_segmentation_app.ipynb @@ -730,100 +730,113 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:30:17,208] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 14:30:17,220] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-29 14:30:17,222] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:06:42,869] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 10:06:42,879] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:06:42,880] [INFO] (__main__.AISpleenSegApp) - App input and output path: dcm, output\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", - "[2025-01-29 14:30:17,274] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:30:17,612] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:30:17,613] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:06:42,916] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:06:43,413] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:06:43,414] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:30:17,614] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:17,614] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:17,615] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:30:17,616] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:17,617] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:30:17,618] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:30:17,619] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:17,620] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:17,622] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:30:17,623] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:17,624] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2025-01-29 14:30:17,625] [INFO] (root) - Series attribute ImageType value: None\n", - "[2025-01-29 14:30:17,626] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:18,261] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2025-01-29 14:30:18,262] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2025-01-29 14:30:18,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2025-01-29 14:30:18,263] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2025-01-29 14:30:18,265] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2025-01-29 14:30:18,266] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2025-01-29 14:30:18,268] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2025-01-29 14:30:18,269] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2025-01-29 14:30:18,271] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:18,272] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:18,273] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2025-01-29 14:30:18,275] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2025-01-29 14:30:18,276] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2025-01-29 14:30:18,277] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2025-01-29 14:30:18,279] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-04-22 10:06:43,416] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:43,417] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:43,418] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:06:43,420] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:43,421] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:06:43,422] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:06:43,426] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:43,427] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:43,429] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:43,430] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:43,432] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-04-22 10:06:43,434] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-04-22 10:06:43,436] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:43,437] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:06:43,438] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:43,438] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:43,669] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:06:43,735] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-04-22 10:06:43,737] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-04-22 10:06:43,737] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-04-22 10:06:43,738] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-04-22 10:06:43,739] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-04-22 10:06:43,739] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-04-22 10:06:43,740] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-04-22 10:06:43,740] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-04-22 10:06:43,741] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:43,742] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:43,743] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-04-22 10:06:43,744] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-04-22 10:06:43,745] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-04-22 10:06:43,746] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-04-22 10:06:43,747] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:18,282] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-04-22 10:06:43,749] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:18,283] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2025-01-29 14:30:18,284] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2025-01-29 14:30:18,285] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2025-01-29 14:30:18,286] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2025-01-29 14:30:18,290] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2025-01-29 14:30:18,291] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2025-01-29 14:30:18,292] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" + "[2025-04-22 10:06:43,750] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-04-22 10:06:43,751] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-04-22 10:06:43,754] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-04-22 10:06:43,755] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-04-22 10:06:43,756] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-04-22 10:06:43,757] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-04-22 10:06:43,758] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2025-01-29 14:30:19,501 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2025-01-29 14:30:23,998 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" + "2025-04-22 10:06:44,648 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[2025-01-29 14:30:26,134] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2025-01-29 14:30:26,142] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-04-22 10:06:46,578] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Input of shape: torch.Size([1, 1, 270, 270, 106])\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2025-04-22 10:06:47,732 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-04-22 10:06:49,272] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform length/batch size of output: 1\n", + "[2025-04-22 10:06:49,277] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pixel spacings for pred: tensor([0.7891, 0.7891, 1.5000], dtype=torch.float64)\n", + "[2025-04-22 10:06:49,408] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pred of shape: (1, 512, 512, 204)\n", + "[2025-04-22 10:06:49,448] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array of type shape: (204, 512, 512)\n", + "[2025-04-22 10:06:49,453] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:30:28,033] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:28,034] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:30:28,035] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:28,036] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:30:28,038] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:30:28,040] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:28,041] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:30:28,042] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:30:28,044] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:06:50,720] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:06:50,721] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:06:50,722] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:06:50,723] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:06:50,725] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:06:50,726] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:06:50,727] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:06:50,728] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:06:50,730] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:30:28,156] [INFO] (__main__.AISpleenSegApp) - End run\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:06:50,833] [INFO] (__main__.AISpleenSegApp) - End run\n" ] } ], @@ -1262,89 +1275,90 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:30:34,908] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2025-01-29 14:30:34,910] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-29 14:30:34,910] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:06:55,953] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['my_app'])\n", + "[2025-04-22 10:06:55,955] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:06:55,955] [INFO] (app.AISpleenSegApp) - App input and output path: dcm, output\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", - "[2025-01-29 14:30:34,938] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:06:55,974] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:06:56,476] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:30:35,857] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:30:35,858] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", - "[2025-01-29 14:30:35,858] [INFO] (root) - Series attribute ImageType value: None\n", - "[2025-01-29 14:30:35,858] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", - "[2025-01-29 14:30:36,487] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:06:56,477] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:06:56,909] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", " [ 0. 0.7890625 0. -398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", " [ 0. 0. 1.5 -383. ]\n", " [ 0. 0. 0. 1. ]], type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", - "[2025-01-29 14:30:36,488] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", - "2025-01-29 14:30:37,548 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", - "2025-01-29 14:30:41,063 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", - "[2025-01-29 14:30:42,975] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", - "[2025-01-29 14:30:42,981] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "[2025-04-22 10:06:57,053] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "2025-04-22 10:06:57,920 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "[2025-04-22 10:06:59,901] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Input of shape: torch.Size([1, 1, 270, 270, 106])\n", + "2025-04-22 10:07:00,973 INFO image_writer.py:197 - writing: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "[2025-04-22 10:07:02,569] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform length/batch size of output: 1\n", + "[2025-04-22 10:07:02,570] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pixel spacings for pred: tensor([0.7891, 0.7891, 1.5000], dtype=torch.float64)\n", + "[2025-04-22 10:07:02,697] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pred of shape: (1, 512, 512, 204)\n", + "[2025-04-22 10:07:02,820] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array of type shape: (204, 512, 512)\n", + "[2025-04-22 10:07:02,825] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:30:44,652] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:30:44,653] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:07:04,062] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:07:04,063] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:30:44,748] [INFO] (app.AISpleenSegApp) - End run\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:294] Destroying context\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:07:04,175] [INFO] (app.AISpleenSegApp) - End run\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:295] Destroying context\n" ] } ], @@ -1363,7 +1377,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.51643712983429462828738370758191766.dcm\n", + "1.2.826.0.1.3680043.10.511.3.17902633705887989912813743024111302.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", @@ -1447,8 +1461,7 @@ "pydicom>=2.3.0\n", "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", - "torch>=1.12.0\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "torch>=1.12.0\n" ] }, { @@ -1471,16 +1484,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 14:30:47,335] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 14:30:47,539] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 14:30:47,539] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-29 14:30:47,540] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 14:30:47,540] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-29 14:30:47,540] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-29 14:30:47,540] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-29 14:30:47,544] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 14:30:47,544] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 14:30:47,549] [DEBUG] (common) - \n", + "[2025-04-22 10:07:06,268] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 10:07:06,478] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 10:07:06,478] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-04-22 10:07:06,478] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 10:07:06,478] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-04-22 10:07:06,478] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-04-22 10:07:06,478] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-04-22 10:07:06,480] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 10:07:06,481] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 10:07:06,483] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1508,14 +1521,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 14:30:47,550] [DEBUG] (common) - \n", + "[2025-04-22 10:07:06,484] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1535,7 +1548,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 14:30:47,581] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:07:06,504] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1553,14 +1566,14 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '0.5.1',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1577,25 +1590,25 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 14:30:47,581] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:07:06,504] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", " 'cuda_deb_arch': 'x86_64',\n", " 'custom_base_image': False,\n", " 'custom_holoscan_sdk': False,\n", - " 'custom_monai_deploy_sdk': False,\n", + " 'custom_monai_deploy_sdk': True,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", - " 'monai_deploy_sdk_file': None,\n", - " 'monai_deploy_sdk_filename': None,\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", + " 'monai_deploy_sdk_file': PosixPath('/home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl'),\n", + " 'monai_deploy_sdk_filename': 'monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl',\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 14:30:47,602] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:07:06,521] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1659,9 +1672,9 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1674,7 +1687,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1731,10 +1744,9 @@ "\n", "\n", "# Install MONAI Deploy App SDK\n", - "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", - "\n", + "# Copy user-specified MONAI Deploy SDK file\n", + "COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", "\n", "COPY ./models /opt/holoscan/models\n", "\n", @@ -1749,7 +1761,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 14:30:47,602] [INFO] (packager.builder) - \n", + "[2025-04-22 10:07:06,522] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1757,27 +1769,27 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", - " MONAI Deploy App SDK Package: N/A\n", + " Holoscan SDK Package: 3.1.0\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 14:30:48,162] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 14:30:48,163] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 10:07:06,841] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 10:07:06,841] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 4.56kB done\n", + "#1 transferring dockerfile: 4.74kB done\n", "#1 DONE 0.1s\n", "\n", "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", "#2 DONE 0.0s\n", "\n", "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#3 DONE 0.5s\n", + "#3 DONE 0.4s\n", "\n", "#4 [internal] load .dockerignore\n", "#4 transferring context: 1.80kB done\n", @@ -1789,394 +1801,491 @@ "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from local:9689312761338090214\n", + "#7 importing cache manifest from local:9106061615573359344\n", "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#7 DONE 0.0s\n", "\n", "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", - "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#8 DONE 0.0s\n", + "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.1s done\n", + "#8 DONE 0.1s\n", "\n", "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#5 DONE 0.4s\n", + "#5 DONE 0.3s\n", "\n", "#6 [internal] load build context\n", - "#6 transferring context: 19.43MB 0.2s done\n", + "#6 transferring context: 19.58MB 0.1s done\n", "#6 DONE 0.3s\n", "\n", - "#9 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#9 [release 4/19] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#9 CACHED\n", "\n", - "#10 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#10 [release 5/19] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#11 [release 2/19] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#11 CACHED\n", "\n", - "#12 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#12 [release 3/19] RUN groupadd -f -g 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 6/18] WORKDIR /var/holoscan\n", + "#13 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#13 CACHED\n", "\n", - "#14 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#14 [release 1/19] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#14 CACHED\n", "\n", - "#15 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#15 [release 6/19] WORKDIR /var/holoscan\n", "#15 CACHED\n", "\n", - "#16 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#16 [release 7/19] COPY ./tools /var/holoscan/tools\n", "#16 CACHED\n", "\n", - "#17 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#17 [release 8/19] RUN chmod +x /var/holoscan/tools\n", "#17 CACHED\n", "\n", - "#18 [release 9/18] WORKDIR /var/holoscan\n", + "#18 [release 9/19] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", - "#19 DONE 0.8s\n", - "\n", - "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 0.933 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 0.985 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 1.141 Collecting pip\n", - "#20 1.201 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#20 1.272 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 27.4 MB/s eta 0:00:00\n", - "#20 1.298 Installing collected packages: pip\n", - "#20 2.043 Successfully installed pip-25.0\n", + "#19 [release 10/19] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 DONE 1.4s\n", + "\n", + "#20 [release 11/19] RUN pip install --upgrade pip\n", + "#20 0.781 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.831 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 0.968 Collecting pip\n", + "#20 1.063 Downloading pip-25.0.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.220 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 12.3 MB/s eta 0:00:00\n", + "#20 1.247 Installing collected packages: pip\n", + "#20 1.992 Successfully installed pip-25.0.1\n", "#20 DONE 2.2s\n", "\n", - "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.735 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.749 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", - "#21 0.838 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 0.844 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 0.927 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 0.932 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.065 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.069 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.101 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.106 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.114 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.144 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.148 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.180 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.184 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.204 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.209 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.369 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.374 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.475 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.481 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 1.498 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.502 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 1.513 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.518 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.543 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.547 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 1.671 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.674 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 1.707 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.712 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 1.758 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.763 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 1.792 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.797 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 1.824 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.828 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 1.905 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.910 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 1.923 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.927 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 1.943 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.948 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 1.963 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.968 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 1.981 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 1.985 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 1.998 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.003 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.015 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.020 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.032 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.036 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.050 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.055 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.068 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.074 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", - "#21 2.085 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.090 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 2.103 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.107 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 2.119 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.123 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.141 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.147 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#21 2.169 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.174 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 2.211 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.215 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 2.224 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9)) (25.0)\n", - "#21 2.240 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.246 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 2.284 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.288 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 2.314 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.320 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 2.366 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.371 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 2.397 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.401 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.485 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.489 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 2.564 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.572 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.614 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.619 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.659 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.662 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.676 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 2.677 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 2.683 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 2.693 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 2.827 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.832 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 2.950 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.953 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 2.967 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.971 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 3.000 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.005 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 3.029 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.033 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.056 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.060 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 3.675 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.679 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 3.702 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", - "#21 3.720 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 91.2 MB/s eta 0:00:00\n", - "#21 3.727 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 3.742 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 133.6 MB/s eta 0:00:00\n", - "#21 3.748 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 3.779 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 118.0 MB/s eta 0:00:00\n", - "#21 3.787 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 3.945 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.2 MB/s eta 0:00:00\n", - "#21 3.955 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 3.979 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 116.7 MB/s eta 0:00:00\n", - "#21 3.988 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 4.526 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 98.5 MB/s eta 0:00:00\n", - "#21 4.536 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", - "#21 12.90 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 88.0 MB/s eta 0:00:00\n", - "#21 12.91 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 16.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 92.2 MB/s eta 0:00:00\n", - "#21 16.69 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 16.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 111.5 MB/s eta 0:00:00\n", - "#21 16.83 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 17.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 116.7 MB/s eta 0:00:00\n", - "#21 17.05 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 17.06 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 123.2 MB/s eta 0:00:00\n", - "#21 17.07 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 23.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 111.9 MB/s eta 0:00:00\n", - "#21 23.63 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 28.53 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 43.2 MB/s eta 0:00:00\n", - "#21 28.54 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 29.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 60.0 MB/s eta 0:00:00\n", - "#21 29.49 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 31.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 79.9 MB/s eta 0:00:00\n", - "#21 31.10 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 33.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 89.2 MB/s eta 0:00:00\n", - "#21 33.44 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", - "#21 34.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 111.4 MB/s eta 0:00:00\n", - "#21 34.80 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 36.81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 94.3 MB/s eta 0:00:00\n", - "#21 36.82 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 37.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 95.0 MB/s eta 0:00:00\n", - "#21 37.05 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 37.06 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 37.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 105.9 MB/s eta 0:00:00\n", - "#21 37.13 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", - "#21 40.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 82.0 MB/s eta 0:00:00\n", - "#21 40.23 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 40.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 113.5 MB/s eta 0:00:00\n", - "#21 40.60 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 40.61 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 41.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 104.0 MB/s eta 0:00:00\n", - "#21 41.49 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 41.50 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 41.51 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 41.51 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 41.56 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 117.2 MB/s eta 0:00:00\n", - "#21 41.56 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 41.58 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 41.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 114.3 MB/s eta 0:00:00\n", - "#21 41.62 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 41.63 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 41.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 153.4 MB/s eta 0:00:00\n", - "#21 41.64 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 41.65 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 41.66 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 41.67 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 41.67 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 41.68 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 41.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 124.5 MB/s eta 0:00:00\n", - "#21 41.71 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 41.72 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 41.72 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 41.73 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 41.73 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 41.74 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 41.75 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 116.8 MB/s eta 0:00:00\n", - "#21 41.75 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 41.76 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 41.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 116.5 MB/s eta 0:00:00\n", - "#21 41.78 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 41.79 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 54.16 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, requests, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, cupy-cuda12x, pydantic, nvidia-cusolver-cu12, highdicom, torch, python-on-whales, monai, holoscan\n", - "#21 123.1 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 importlib-resources-6.5.2 jinja2-3.1.5 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 124.4s\n", - "\n", - "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.361 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.564 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.579 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.602 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.604 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.647 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.652 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.725 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.731 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.768 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", - "#22 1.769 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.770 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.771 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.772 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.773 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.774 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.776 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.776 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.777 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.781 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.788 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.789 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.799 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 1.804 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.805 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.805 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.806 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.811 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 1.830 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 1.831 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 1.849 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.872 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.894 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 2.064 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 2.201 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.6s\n", - "\n", - "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.2s\n", - "\n", - "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", + "#21 [release 12/19] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 0.752 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.790 Downloading highdicom-0.25.1-py3-none-any.whl.metadata (5.0 kB)\n", + "#21 0.829 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.842 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.945 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.956 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.134 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.144 Downloading numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.183 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.195 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.203 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.236 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.247 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.295 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.307 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.462 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.474 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (8.9 kB)\n", + "#21 1.580 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.658 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.694 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.706 Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.723 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.734 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.773 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.784 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.865 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.876 Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 1.922 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.932 Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 1.984 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.995 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 2.036 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.046 Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.076 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.087 Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.150 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.163 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.182 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.194 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.220 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.232 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.266 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.277 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.303 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.316 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.343 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.355 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.376 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.389 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.415 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.427 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.455 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.467 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.486 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.499 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.522 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.535 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.561 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.574 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.599 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.612 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.640 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.653 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 2.688 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.699 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 2.734 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.745 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 2.771 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 2.771 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 2.783 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.798 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.868 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.879 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.896 Downloading highdicom-0.25.1-py3-none-any.whl (1.1 MB)\n", + "#21 2.925 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 52.9 MB/s eta 0:00:00\n", + "#21 2.944 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 2.962 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 125.9 MB/s eta 0:00:00\n", + "#21 2.976 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.029 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 70.7 MB/s eta 0:00:00\n", + "#21 3.043 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 3.293 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 74.5 MB/s eta 0:00:00\n", + "#21 3.311 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 3.347 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 74.4 MB/s eta 0:00:00\n", + "#21 3.360 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 4.004 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 81.9 MB/s eta 0:00:00\n", + "#21 4.020 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 11.28 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 102.9 MB/s eta 0:00:00\n", + "#21 11.30 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 15.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 102.0 MB/s eta 0:00:00\n", + "#21 15.10 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 15.23 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 113.9 MB/s eta 0:00:00\n", + "#21 15.25 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 15.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 115.1 MB/s eta 0:00:00\n", + "#21 15.48 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 15.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 240.5 MB/s eta 0:00:00\n", + "#21 15.51 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 21.44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 116.6 MB/s eta 0:00:00\n", + "#21 21.46 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 23.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 105.6 MB/s eta 0:00:00\n", + "#21 23.48 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 23.98 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 114.1 MB/s eta 0:00:00\n", + "#21 23.99 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 25.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 116.7 MB/s eta 0:00:00\n", + "#21 25.11 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 27.11 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 104.4 MB/s eta 0:00:00\n", + "#21 27.13 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 28.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 110.5 MB/s eta 0:00:00\n", + "#21 28.50 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 30.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 117.2 MB/s eta 0:00:00\n", + "#21 30.13 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 30.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 100.3 MB/s eta 0:00:00\n", + "#21 30.37 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 30.38 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 30.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 97.0 MB/s eta 0:00:00\n", + "#21 30.47 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 33.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 88.9 MB/s eta 0:00:00\n", + "#21 33.34 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 33.35 Downloading packaging-25.0-py3-none-any.whl (66 kB)\n", + "#21 33.37 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.6 MB)\n", + "#21 33.42 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 83.5 MB/s eta 0:00:00\n", + "#21 33.44 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 33.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 94.7 MB/s eta 0:00:00\n", + "#21 33.48 Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)\n", + "#21 33.50 Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n", + "#21 33.51 Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n", + "#21 33.53 Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "#21 33.54 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 33.56 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 91.2 MB/s eta 0:00:00\n", + "#21 33.58 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 33.59 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 33.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 126.9 MB/s eta 0:00:00\n", + "#21 40.78 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, typing-extensions, sympy, pydicom, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, fsspec, filelock, pyjpegls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, nvidia-cusolver-cu12, highdicom, torch, monai\n", + "#21 93.44 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 filelock-3.18.0 fsspec-2025.3.2 highdicom-0.25.1 importlib-resources-6.5.2 jinja2-3.1.6 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-25.0 pillow-11.2.1 pydicom-3.0.1 pyjpegls-1.4.0 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.13.2\n", + "#21 DONE 98.6s\n", + "\n", + "#22 [release 13/19] COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#22 DONE 0.3s\n", + "\n", + "#23 [release 14/19] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.726 Defaulting to user installation because normal site-packages is not writeable\n", + "#23 0.853 Processing /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.864 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (1.26.4)\n", + "#23 1.007 Collecting holoscan~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.044 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.0 kB)\n", + "#23 1.097 Collecting holoscan-cli~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.111 Downloading holoscan_cli-3.1.0-py3-none-any.whl.metadata (4.0 kB)\n", + "#23 1.185 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.196 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#23 1.272 Collecting tritonclient>=2.53.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.283 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl.metadata (2.8 kB)\n", + "#23 1.381 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.395 Downloading typeguard-4.4.2-py3-none-any.whl.metadata (3.8 kB)\n", + "#23 1.423 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (25.0.1)\n", + "#23 1.468 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.483 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", + "#23 1.553 Collecting cloudpickle<4.0,>=3.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.566 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#23 1.687 Collecting wheel-axle-runtime<1.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.702 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#23 1.726 Requirement already satisfied: Jinja2<4.0.0,>=3.1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.1.6)\n", + "#23 1.775 Collecting packaging<24.0,>=23.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.788 Downloading packaging-23.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#23 1.916 Collecting psutil<7.0.0,>=6.0.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.927 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 2.013 Collecting python-on-whales<0.61.0,>=0.60.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.025 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", + "#23 2.113 Collecting pyyaml<7.0,>=6.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.124 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#23 2.202 Collecting requests<3.0.0,>=2.31.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.213 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#23 2.352 Collecting python-rapidjson>=0.9.1 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.364 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 2.445 Collecting urllib3>=2.0.7 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.456 Downloading urllib3-2.4.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#23 2.887 Collecting aiohttp<4.0.0,>=3.8.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.898 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)\n", + "#23 2.991 Collecting cuda-python (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.002 Downloading cuda_python-12.8.0-py3-none-any.whl.metadata (15 kB)\n", + "#23 3.159 Collecting geventhttpclient>=2.3.3 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.170 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.7 kB)\n", + "#23 3.657 Collecting grpcio<1.68,>=1.63.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.669 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.9 kB)\n", + "#23 3.979 Collecting protobuf<6.0dev,>=5.26.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.990 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl.metadata (592 bytes)\n", + "#23 4.008 Requirement already satisfied: typing_extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (4.13.2)\n", + "#23 4.054 Collecting aiohappyeyeballs>=2.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.067 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)\n", + "#23 4.125 Collecting aiosignal>=1.1.2 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.138 Downloading aiosignal-1.3.2-py2.py3-none-any.whl.metadata (3.8 kB)\n", + "#23 4.199 Collecting async-timeout<6.0,>=4.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.212 Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)\n", + "#23 4.277 Collecting attrs>=17.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.289 Downloading attrs-25.3.0-py3-none-any.whl.metadata (10 kB)\n", + "#23 4.407 Collecting frozenlist>=1.1.1 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.417 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (16 kB)\n", + "#23 4.625 Collecting multidict<7.0,>=4.5 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.636 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.3 kB)\n", + "#23 4.722 Collecting propcache>=0.2.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.733 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (10 kB)\n", + "#23 5.044 Collecting yarl<2.0,>=1.17.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.055 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (72 kB)\n", + "#23 5.139 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.150 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#23 5.306 Collecting gevent (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.317 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 5.398 Collecting certifi (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.411 Downloading certifi-2025.1.31-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 5.486 Collecting brotli (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.498 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (5.5 kB)\n", + "#23 5.527 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0.0,>=3.1.5->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.0.2)\n", + "#23 5.679 Collecting pydantic<2,>=1.5 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.691 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", + "#23 5.793 Collecting tqdm (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.804 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "#23 5.917 Collecting typer>=0.4.1 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.928 Downloading typer-0.15.2-py3-none-any.whl.metadata (15 kB)\n", + "#23 6.053 Collecting charset-normalizer<4,>=2 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.064 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#23 6.138 Collecting idna<4,>=2.5 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.150 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#23 6.201 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.18.0)\n", + "#23 6.232 Collecting cuda-bindings~=12.8.0 (from cuda-python->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.247 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 6.352 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.363 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", + "#23 6.427 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.438 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "#23 6.530 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.540 Downloading rich-14.0.0-py3-none-any.whl.metadata (18 kB)\n", + "#23 6.781 Collecting greenlet>=3.2.0 (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.792 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (4.1 kB)\n", + "#23 6.843 Collecting zope.event (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.855 Downloading zope.event-5.0-py3-none-any.whl.metadata (4.4 kB)\n", + "#23 7.003 Collecting zope.interface (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.014 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (44 kB)\n", + "#23 7.104 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.116 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", + "#23 7.189 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.200 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 7.227 Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from zope.event->gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (59.6.0)\n", + "#23 7.259 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 7.271 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "#23 7.320 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#23 7.349 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl (39.8 MB)\n", + "#23 8.075 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 39.8/39.8 MB 55.3 MB/s eta 0:00:00\n", + "#23 8.089 Downloading holoscan_cli-3.1.0-py3-none-any.whl (72 kB)\n", + "#23 8.123 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl (14.4 MB)\n", + "#23 8.397 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.4/14.4 MB 53.1 MB/s eta 0:00:00\n", + "#23 8.411 Downloading typeguard-4.4.2-py3-none-any.whl (35 kB)\n", + "#23 8.442 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB)\n", + "#23 8.495 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 29.5 MB/s eta 0:00:00\n", + "#23 8.509 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#23 8.541 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl (104.6 MB)\n", + "#23 10.27 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.6/104.6 MB 60.5 MB/s eta 0:00:00\n", + "#23 10.28 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (112 kB)\n", + "#23 10.32 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)\n", + "#23 10.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.9/5.9 MB 53.1 MB/s eta 0:00:00\n", + "#23 10.44 Downloading packaging-23.2-py3-none-any.whl (53 kB)\n", + "#23 10.47 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl (319 kB)\n", + "#23 10.51 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 10.54 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", + "#23 10.57 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)\n", + "#23 10.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 33.7 MB/s eta 0:00:00\n", + "#23 10.63 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#23 10.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 18.4 MB/s eta 0:00:00\n", + "#23 10.68 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#23 10.71 Downloading urllib3-2.4.0-py3-none-any.whl (128 kB)\n", + "#23 10.74 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#23 10.77 Downloading cuda_python-12.8.0-py3-none-any.whl (11 kB)\n", + "#23 10.80 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)\n", + "#23 10.83 Downloading aiosignal-1.3.2-py2.py3-none-any.whl (7.6 kB)\n", + "#23 10.87 Downloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)\n", + "#23 10.90 Downloading attrs-25.3.0-py3-none-any.whl (63 kB)\n", + "#23 10.93 Downloading certifi-2025.1.31-py3-none-any.whl (166 kB)\n", + "#23 10.97 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#23 11.00 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB)\n", + "#23 11.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 57.7 MB/s eta 0:00:00\n", + "#23 11.22 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#23 11.25 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 11.29 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#23 11.32 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (219 kB)\n", + "#23 11.35 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206 kB)\n", + "#23 11.39 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", + "#23 11.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 45.0 MB/s eta 0:00:00\n", + "#23 11.48 Downloading typer-0.15.2-py3-none-any.whl (45 kB)\n", + "#23 11.51 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (333 kB)\n", + "#23 11.54 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (3.0 MB)\n", + "#23 11.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 45.0 MB/s eta 0:00:00\n", + "#23 11.63 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB)\n", + "#23 11.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 39.6 MB/s eta 0:00:00\n", + "#23 11.70 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "#23 11.73 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", + "#23 11.77 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (580 kB)\n", + "#23 11.80 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 580.6/580.6 kB 14.2 MB/s eta 0:00:00\n", + "#23 11.81 Downloading rich-14.0.0-py3-none-any.whl (243 kB)\n", + "#23 11.85 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", + "#23 11.88 Downloading zope.event-5.0-py3-none-any.whl (6.8 kB)\n", + "#23 11.91 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254 kB)\n", + "#23 11.94 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", + "#23 11.97 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", + "#23 12.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 28.2 MB/s eta 0:00:00\n", + "#23 12.03 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "#23 12.84 Installing collected packages: fastrlock, cuda-bindings, brotli, zope.interface, zope.event, wheel-axle-runtime, urllib3, typeguard, tqdm, shellingham, pyyaml, python-rapidjson, pygments, pydantic, psutil, protobuf, propcache, packaging, multidict, mdurl, idna, grpcio, greenlet, frozenlist, cupy-cuda12x, cuda-python, colorama, cloudpickle, click, charset-normalizer, certifi, attrs, async-timeout, aiohappyeyeballs, yarl, tritonclient, requests, markdown-it-py, holoscan, gevent, aiosignal, rich, geventhttpclient, aiohttp, typer, python-on-whales, holoscan-cli, monai-deploy-app-sdk\n", + "#23 14.78 Attempting uninstall: packaging\n", + "#23 14.78 Found existing installation: packaging 25.0\n", + "#23 14.79 Uninstalling packaging-25.0:\n", + "#23 14.81 Successfully uninstalled packaging-25.0\n", + "#23 19.62 Successfully installed aiohappyeyeballs-2.6.1 aiohttp-3.11.18 aiosignal-1.3.2 async-timeout-5.0.1 attrs-25.3.0 brotli-1.1.0 certifi-2025.1.31 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-3.1.1 colorama-0.4.6 cuda-bindings-12.8.0 cuda-python-12.8.0 cupy-cuda12x-13.4.1 fastrlock-0.8.3 frozenlist-1.6.0 gevent-25.4.1 geventhttpclient-2.3.3 greenlet-3.2.1 grpcio-1.67.1 holoscan-3.1.0 holoscan-cli-3.1.0 idna-3.10 markdown-it-py-3.0.0 mdurl-0.1.2 monai-deploy-app-sdk-0.5.1+37.g96f7e31.dirty multidict-6.4.3 packaging-23.2 propcache-0.3.1 protobuf-5.29.4 psutil-6.1.1 pydantic-1.10.21 pygments-2.19.1 python-on-whales-0.60.1 python-rapidjson-1.20 pyyaml-6.0.2 requests-2.32.3 rich-14.0.0 shellingham-1.5.4 tqdm-4.67.1 tritonclient-2.56.0 typeguard-4.4.2 typer-0.15.2 urllib3-2.4.0 wheel-axle-runtime-0.0.6 yarl-1.20.0 zope.event-5.0 zope.interface-7.2\n", + "#23 DONE 21.6s\n", + "\n", + "#24 [release 15/19] COPY ./models /opt/holoscan/models\n", + "#24 DONE 0.3s\n", + "\n", + "#25 [release 16/19] COPY ./map/app.json /etc/holoscan/app.json\n", "#25 DONE 0.1s\n", "\n", - "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 [release 17/19] COPY ./app.config /var/holoscan/app.yaml\n", "#26 DONE 0.1s\n", "\n", - "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", + "#27 [release 18/19] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#27 DONE 0.1s\n", "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 203.4s done\n", - "#28 exporting manifest sha256:089e3612567f5b5a28edd5e2ffd6ddf01264ddbcdc641694b12620fdbfa40828 0.0s done\n", - "#28 exporting config sha256:a863c524e0de40b25e7e8b519c4009196f543dc45dde5399124c1f9317a67b4e 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer 4dfc251f5c56 289B / 289B\n", - "#29 loading layer 74089dc02aa9 65.54kB / 5.10MB\n", - "#29 loading layer efdd29e523f7 557.06kB / 3.34GB\n", - "#29 loading layer efdd29e523f7 159.32MB / 3.34GB 6.4s\n", - "#29 loading layer efdd29e523f7 330.33MB / 3.34GB 10.4s\n", - "#29 loading layer efdd29e523f7 557.06MB / 3.34GB 16.6s\n", - "#29 loading layer efdd29e523f7 797.70MB / 3.34GB 20.7s\n", - "#29 loading layer efdd29e523f7 1.01GB / 3.34GB 24.7s\n", - "#29 loading layer efdd29e523f7 1.25GB / 3.34GB 28.9s\n", - "#29 loading layer efdd29e523f7 1.45GB / 3.34GB 33.0s\n", - "#29 loading layer efdd29e523f7 1.74GB / 3.34GB 37.1s\n", - "#29 loading layer efdd29e523f7 1.95GB / 3.34GB 41.1s\n", - "#29 loading layer efdd29e523f7 2.17GB / 3.34GB 45.2s\n", - "#29 loading layer efdd29e523f7 2.31GB / 3.34GB 51.9s\n", - "#29 loading layer efdd29e523f7 2.53GB / 3.34GB 58.0s\n", - "#29 loading layer efdd29e523f7 2.74GB / 3.34GB 62.1s\n", - "#29 loading layer efdd29e523f7 3.03GB / 3.34GB 66.3s\n", - "#29 loading layer efdd29e523f7 3.21GB / 3.34GB 72.4s\n", - "#29 loading layer 47536db86449 32.77kB / 578.01kB\n", - "#29 loading layer 56926067dc15 196.61kB / 17.81MB\n", - "#29 loading layer a90406bd7fe1 492B / 492B\n", - "#29 loading layer 04571d3d4439 315B / 315B\n", - "#29 loading layer 6f5c809ef192 302B / 302B\n", - "#29 loading layer b97e5e112e3f 3.94kB / 3.94kB\n", - "#29 loading layer 04571d3d4439 315B / 315B 0.5s done\n", - "#29 loading layer 4dfc251f5c56 289B / 289B 78.7s done\n", - "#29 loading layer 74089dc02aa9 65.54kB / 5.10MB 78.6s done\n", - "#29 loading layer efdd29e523f7 3.25GB / 3.34GB 78.1s done\n", - "#29 loading layer 47536db86449 32.77kB / 578.01kB 1.2s done\n", - "#29 loading layer 56926067dc15 196.61kB / 17.81MB 0.9s done\n", - "#29 loading layer a90406bd7fe1 492B / 492B 0.6s done\n", - "#29 loading layer 6f5c809ef192 302B / 302B 0.4s done\n", - "#29 loading layer b97e5e112e3f 3.94kB / 3.94kB 0.4s done\n", - "#29 DONE 78.7s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 123.2s done\n", - "#28 DONE 326.7s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:05b02574544ba690caa3ab6304a23e2eb00610e44ca586c3f6045abe235d4886\n", - "#30 writing layer sha256:05b02574544ba690caa3ab6304a23e2eb00610e44ca586c3f6045abe235d4886 0.0s done\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#30 writing layer sha256:0e0b90cb6cbd645ccffb017000cd0ff199c69273a69425adf3ccd1ebb3f573aa 0.0s done\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#30 writing layer sha256:69f904b6c73e074809a57dc05803a5c6c37f5baf25e7fb407edc341511a2f9ba\n", - "#30 writing layer sha256:69f904b6c73e074809a57dc05803a5c6c37f5baf25e7fb407edc341511a2f9ba 49.2s done\n", - "#30 writing layer sha256:7420a5aefb199de2dd8aa67797672d53bafd18356d3bf7a2f1aec1f67f86020b\n", - "#30 writing layer sha256:7420a5aefb199de2dd8aa67797672d53bafd18356d3bf7a2f1aec1f67f86020b 0.0s done\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:a7292bbf42d93ed9fca9e2ff7e5283d2e7f737dad14092919db7645628bb0838 0.0s done\n", - "#30 writing layer sha256:a8560dc90723760d8d4daf42b22f7760b034c87e9348697c113118b992d830ca 0.1s done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:b2d7a44feb1d1dd34b73842e1048b1b2ee32c381943f40f9ee7d3945b9818b09 0.0s done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:bdb033062d61ab2282e08a5a8fcaee9d08e5c93b46d0b1d9b5f378b458e4ea07 0.0s done\n", - "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing layer sha256:fa35667ed3d919e87dc31994d8dfd51eab483c48ae72fb0ad2ab83e2b544c7c3\n", - "#30 writing layer sha256:fa35667ed3d919e87dc31994d8dfd51eab483c48ae72fb0ad2ab83e2b544c7c3 0.3s done\n", - "#30 preparing build cache for export 50.1s done\n", - "#30 writing config sha256:dff8a5cdb36509e072452e50bce7b5a26df3d17fd6570f7f4ab9dc79ea47e02e 0.0s done\n", - "#30 writing cache manifest sha256:bf6b0dabb704fd0021d37ae93daa4ad6ff38ef9d7b58d131e90451dbbcdcd709 0.0s done\n", - "#30 DONE 50.1s\n", - "[2025-01-29 14:39:18,007] [INFO] (packager) - Build Summary:\n", + "#28 [release 19/19] COPY ./app /opt/holoscan/app\n", + "#28 DONE 0.1s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 exporting layers\n", + "#29 exporting layers 175.3s done\n", + "#29 exporting manifest sha256:f63297f6525a89f74b13e561b30821ab4985a18db4b815eb995ac1aed030557b 0.0s done\n", + "#29 exporting config sha256:7266e968de607504eff9dfbb7c4e0c00adf190678ce9232099aab9c0d2d1cb24 0.0s done\n", + "#29 sending tarball\n", + "#29 ...\n", + "\n", + "#30 importing to docker\n", + "#30 loading layer 481caafed616 251B / 251B\n", + "#30 loading layer e39cf4d7d38e 65.54kB / 5.09MB\n", + "#30 loading layer 3795307a2740 557.06kB / 3.20GB\n", + "#30 loading layer 3795307a2740 130.91MB / 3.20GB 6.2s\n", + "#30 loading layer 3795307a2740 278.53MB / 3.20GB 12.4s\n", + "#30 loading layer 3795307a2740 483.52MB / 3.20GB 16.5s\n", + "#30 loading layer 3795307a2740 677.94MB / 3.20GB 20.7s\n", + "#30 loading layer 3795307a2740 851.18MB / 3.20GB 24.8s\n", + "#30 loading layer 3795307a2740 1.06GB / 3.20GB 31.0s\n", + "#30 loading layer 3795307a2740 1.25GB / 3.20GB 35.1s\n", + "#30 loading layer 3795307a2740 1.48GB / 3.20GB 39.2s\n", + "#30 loading layer 3795307a2740 1.70GB / 3.20GB 43.3s\n", + "#30 loading layer 3795307a2740 1.91GB / 3.20GB 47.5s\n", + "#30 loading layer 3795307a2740 2.07GB / 3.20GB 51.6s\n", + "#30 loading layer 3795307a2740 2.17GB / 3.20GB 57.8s\n", + "#30 loading layer 3795307a2740 2.25GB / 3.20GB 64.8s\n", + "#30 loading layer 3795307a2740 2.49GB / 3.20GB 71.1s\n", + "#30 loading layer 3795307a2740 2.70GB / 3.20GB 75.2s\n", + "#30 loading layer 3795307a2740 2.88GB / 3.20GB 81.4s\n", + "#30 loading layer 3795307a2740 3.05GB / 3.20GB 87.4s\n", + "#30 loading layer 14bfd28d96ba 32.77kB / 144.30kB\n", + "#30 loading layer 643060716c54 557.06kB / 398.53MB\n", + "#30 loading layer 643060716c54 155.42MB / 398.53MB 2.1s\n", + "#30 loading layer 643060716c54 223.38MB / 398.53MB 4.2s\n", + "#30 loading layer 643060716c54 259.59MB / 398.53MB 6.2s\n", + "#30 loading layer 643060716c54 338.13MB / 398.53MB 8.4s\n", + "#30 loading layer 643060716c54 391.61MB / 398.53MB 10.5s\n", + "#30 loading layer bccb4e460f68 196.61kB / 17.81MB\n", + "#30 loading layer 61be03e60d84 492B / 492B\n", + "#30 loading layer aeec4a674fef 315B / 315B\n", + "#30 loading layer 54cba3cb0592 301B / 301B\n", + "#30 loading layer 462f716907a1 3.91kB / 3.91kB\n", + "#30 loading layer 462f716907a1 3.91kB / 3.91kB 0.4s done\n", + "#30 loading layer 481caafed616 251B / 251B 105.8s done\n", + "#30 loading layer e39cf4d7d38e 5.09MB / 5.09MB 105.7s done\n", + "#30 loading layer 3795307a2740 3.20GB / 3.20GB 105.1s done\n", + "#30 loading layer 14bfd28d96ba 144.30kB / 144.30kB 12.5s done\n", + "#30 loading layer 643060716c54 398.53MB / 398.53MB 12.4s done\n", + "#30 loading layer bccb4e460f68 17.81MB / 17.81MB 0.9s done\n", + "#30 loading layer 61be03e60d84 492B / 492B 0.6s done\n", + "#30 loading layer aeec4a674fef 315B / 315B 0.5s done\n", + "#30 loading layer 54cba3cb0592 301B / 301B 0.4s done\n", + "#30 DONE 105.8s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 sending tarball 135.1s done\n", + "#29 DONE 310.5s\n", + "\n", + "#31 exporting cache to client directory\n", + "#31 preparing build cache for export\n", + "#31 writing layer sha256:0081cdb9958a9d50332b830133ae001192a5065ac4f0e3c095b3a1d5d5ff0265\n", + "#31 writing layer sha256:0081cdb9958a9d50332b830133ae001192a5065ac4f0e3c095b3a1d5d5ff0265 0.0s done\n", + "#31 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#31 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#31 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#31 writing layer sha256:287e630d01a5fdd05d03906401ef55472af7d087036f46dbc2bd8e3922500d1a 0.0s done\n", + "#31 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#31 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#31 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", + "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#31 writing layer sha256:5b90b93bdc8509aa597670e5542315cfcf5e462fd5f032cd9f20105de9574874\n", + "#31 writing layer sha256:5b90b93bdc8509aa597670e5542315cfcf5e462fd5f032cd9f20105de9574874 50.6s done\n", + "#31 writing layer sha256:60aea8801e5272305832cc3e60cd84c63f0d58d80a872b7357356957d261c574\n", + "#31 writing layer sha256:60aea8801e5272305832cc3e60cd84c63f0d58d80a872b7357356957d261c574 0.0s done\n", + "#31 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#31 writing layer sha256:78f2accaffaf576042c7ebead20caa88db32984713ae7e35691a3be4f3301d0c\n", + "#31 writing layer sha256:78f2accaffaf576042c7ebead20caa88db32984713ae7e35691a3be4f3301d0c 7.9s done\n", + "#31 writing layer sha256:7f9be78d50c54946e6e71991e35dd38adb2967f404f207bcc854e528571f923c\n", + "#31 writing layer sha256:7f9be78d50c54946e6e71991e35dd38adb2967f404f207bcc854e528571f923c 0.0s done\n", + "#31 writing layer sha256:935b4cb3480886ca00a46c28cd98797870cfc7389818c85cd243869f4548fda4 done\n", + "#31 writing layer sha256:95dbda2f5f8116a35367b28d397faae7d34bd4a713aefe01ccfe5e326b0b0250 done\n", + "#31 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#31 writing layer sha256:9ebe27a7cf7d039e6f4d4b82e9f34985c02f5dca091fa01f4585191f6facaec1 0.0s done\n", + "#31 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#31 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#31 writing layer sha256:d0b9db5eaf93e490f07bab8abb1ac5475febcf822c25f2e1d1c82ff4273a7d0d done\n", + "#31 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#31 writing layer sha256:da44fb0aa6d6f7c651c7eec8e11510c9c048b066b2ba36b261cefea12ff5ee3e done\n", + "#31 writing layer sha256:dd250fa54efc49bc2c03cccb8d3a56ebf8ce96ad291d924e6ead2036c0d251da\n", + "#31 writing layer sha256:dd250fa54efc49bc2c03cccb8d3a56ebf8ce96ad291d924e6ead2036c0d251da 0.4s done\n", + "#31 writing layer sha256:dec17c052060552bd6c5810c57aa0195e7c9776da97eeb16984d2f31a35d816b\n", + "#31 writing layer sha256:dec17c052060552bd6c5810c57aa0195e7c9776da97eeb16984d2f31a35d816b 0.0s done\n", + "#31 writing layer sha256:e7cb8fb70ca3287e6c873a5263dfc4f8e333b6f965e6027a24a5f4b6fdc89a69 0.1s done\n", + "#31 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31\n", + "#31 preparing build cache for export 59.4s done\n", + "#31 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#31 writing layer sha256:f3af93a430a247328c59fb2228f6fa43a0ce742b03464db94acf7c45311e31cd done\n", + "#31 writing config sha256:ae0dee53261b5588107aa98a4ac08135ba44a7551d5ee93e258b0bbe7f352c58 0.0s done\n", + "#31 writing cache manifest sha256:c2e62667fa04d787de4d2de795baa75004e61b473a5ab4129713ad2d397c78b8 0.0s done\n", + "#31 DONE 59.4s\n", + "[2025-04-22 10:15:23,826] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -2188,7 +2297,7 @@ "source": [ "tag_prefix = \"my_app\"\n", "\n", - "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -2209,7 +2318,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 a863c524e0de 6 minutes ago 8.63GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 7266e968de60 6 minutes ago 9.07GB\n" ] } ], @@ -2237,23 +2346,23 @@ "text": [ "output\n", "dcm\n", - "[2025-01-29 14:39:20,640] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 10:15:26,072] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 10:15:26,072] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 10:15:26,074] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 14:39:20,641] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 10:15:26,074] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 14:39:20,713] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpguo6yiqf/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpguo6yiqf/pkg.json\n", - "2f1c2c8df19c8ecc58cc0d8136bdd27b4143e88c67da72b5340f86b49eec22bb\n", - "[2025-01-29 14:39:21,151] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 10:15:26,152] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpxd644i6e/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpxd644i6e/pkg.json\n", + "3e8dc45282382e26bf37bf8ab8bafbfe8a12c219cfb364cc1a38bc3c645bcbf8\n", + "[2025-04-22 10:15:26,569] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 14:39:21,152] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 10:15:26,579] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 14:39:21,443] [INFO] (common) - Launching container (d6429624e9ee) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: relaxed_zhukovsky\n", + "[2025-04-22 10:15:27,009] [INFO] (common) - Launching container (81398038b14f) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: youthful_pare\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2263,103 +2372,97 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 22:39:22 [INFO] Launching application python3 /opt/holoscan/app ...\n", - "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "2025-04-22 17:15:27 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[2025-01-29 22:39:28,954] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[2025-01-29 22:39:28,960] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 22:39:28,961] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", + "[2025-04-22 17:15:33,511] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[2025-04-22 17:15:33,514] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[2025-04-22 17:15:33,514] [INFO] (app.AISpleenSegApp) - App input and output path: /var/holoscan/input, /var/holoscan/output\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[2025-04-22 17:15:33,524] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 5 entities\n", + " # of series: 1\n", "\n", - "[2025-01-29 22:39:29,005] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - " # of series: 1\n", + "[2025-04-22 17:15:33,962] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:39:29,927] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series attribute ImageType value: None\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series Selection finalized.\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - On attribute: 'ImageType' to match value: ['PRIMARY', 'ORIGINAL']\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:39:29,928] [INFO] (root) - Series attribute ImageType value: None\n", + "[2025-04-22 17:15:33,963] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:39:29,929] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:15:34,270] [INFO] (root) - Casting to float32\n", "\n", - "[2025-01-29 22:39:30,619] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Converted Image object metadata:\n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDate: 20090831, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesTime: 101721.452, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Modality: CT, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesDescription: ABD/PANC 3.0 B31f, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - PatientPosition: HFS, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - SeriesNumber: 8, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_pixel_spacing: 0.7890625, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_pixel_spacing: 0.7890625, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_pixel_spacing: 1.5, type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - row_direction_cosine: [1.0, 0.0, 0.0], type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - col_direction_cosine: [0.0, 1.0, 0.0], type \n", "\n", - "[2025-01-29 22:39:30,620] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - depth_direction_cosine: [0.0, 0.0, 1.0], type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", + "[2025-04-22 17:15:34,406] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - dicom_affine_transform: [[ 0.7890625 0. 0. -197.60547 ]\n", "\n", " [ 0. 0.7890625 0. -398.60547 ]\n", "\n", @@ -2367,7 +2470,7 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - nifti_affine_transform: [[ -0.7890625 -0. -0. 197.60547 ]\n", "\n", " [ -0. -0.7890625 -0. 398.60547 ]\n", "\n", @@ -2375,63 +2478,71 @@ "\n", " [ 0. 0. 0. 1. ]], type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyInstanceUID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291, type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "\n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyID: , type \n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDate: 20090831, type \n", + "[2025-04-22 17:15:34,407] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyTime: 095948.599, type \n", + "2025-04-22 17:15:35,292 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - StudyDescription: CT ABDOMEN W IV CONTRAST, type \n", + "[2025-04-22 17:15:37,261] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Input of shape: torch.Size([1, 1, 270, 270, 106])\n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - AccessionNumber: 5471978513296937, type \n", + "2025-04-22 17:15:39,032 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", "\n", - "[2025-01-29 22:39:30,621] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - selection_name: CT Series, type \n", + "[2025-04-22 17:15:40,582] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform length/batch size of output: 1\n", "\n", - "2025-01-29 22:39:31,772 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626.nii\n", + "[2025-04-22 17:15:40,587] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pixel spacings for pred: tensor([0.7891, 0.7891, 1.5000], dtype=torch.float64)\n", "\n", - "2025-01-29 22:39:36,704 INFO image_writer.py:197 - writing: /var/holoscan/output/saved_images_folder/1.3.6.1.4.1.14519.5.2.1.7085.2626/1.3.6.1.4.1.14519.5.2.1.7085.2626_seg.nii\n", + "[2025-04-22 17:15:40,719] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Post transform pred of shape: (1, 512, 512, 204)\n", "\n", - "[2025-01-29 22:39:38,595] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array shaped: (204, 512, 512)\n", + "[2025-04-22 17:15:40,758] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image numpy array of type shape: (204, 512, 512)\n", "\n", - "[2025-01-29 22:39:38,601] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", + "[2025-04-22 17:15:40,763] [INFO] (monai.deploy.operators.monai_seg_inference_operator.MonaiSegInferenceOperator) - Output Seg image pixel max value: 1\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " check_person_name(patient_name)\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:39:40,097] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 17:15:41,997] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-29 22:39:40,098] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 17:15:41,998] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-29 22:39:40,099] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 17:15:41,999] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[2025-01-29 22:39:40,203] [INFO] (app.AISpleenSegApp) - End run\n", + "[2025-04-22 17:15:42,103] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[info] [gxf_executor.cpp:294] Destroying context\n", + "[info] [gxf_executor.cpp:295] Destroying context\n", "\n", - "[2025-01-29 14:39:42,029] [INFO] (common) - Container 'relaxed_zhukovsky'(d6429624e9ee) exited.\n" + "[2025-04-22 10:15:44,346] [INFO] (common) - Container 'youthful_pare'(81398038b14f) exited.\n" ] } ], @@ -2453,7 +2564,7 @@ "output_type": "stream", "text": [ "output:\n", - "1.2.826.0.1.3680043.10.511.3.9998962080747738621710125447135664.dcm\n", + "1.2.826.0.1.3680043.10.511.3.89222091780069825813597121405605044.dcm\n", "saved_images_folder\n", "\n", "output/saved_images_folder:\n", diff --git a/notebooks/tutorials/04_monai_bundle_app.ipynb b/notebooks/tutorials/04_monai_bundle_app.ipynb index 4dccc832..671377ce 100644 --- a/notebooks/tutorials/04_monai_bundle_app.ipynb +++ b/notebooks/tutorials/04_monai_bundle_app.ipynb @@ -612,62 +612,57 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:44:44,206] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 14:44:44,212] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=)\n", - "[2025-01-29 14:44:44,222] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:18:02,158] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 10:18:02,166] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:18:02,176] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", - "[2025-01-29 14:44:44,263] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:44:44,616] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:44:44,617] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:18:02,203] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:18:02,743] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:18:02,744] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:44:44,618] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:44:44,618] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:44:44,619] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:44:44,620] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:44:44,621] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:44:44,622] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:44:44,623] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:44:44,627] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:44:44,629] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:44:44,630] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:44:44,632] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:44:45,069] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2025-04-22 10:18:02,745] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:02,746] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:02,746] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:18:02,747] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:02,748] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:18:02,748] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:18:02,749] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:02,750] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:02,751] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:02,752] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:02,753] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:02,753] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:18:02,754] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:02,755] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:02,968] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:18:03,025] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 14:44:48,663] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", - "[2025-01-29 14:44:50,440] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2025-01-29 14:44:50,441] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-04-22 10:18:06,025] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file output/stl/spleen.stl.\n", + "[2025-04-22 10:18:07,405] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-04-22 10:18:07,406] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:45:02,816] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:02,817] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:45:02,819] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:02,821] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:45:02,824] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:45:02,827] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:02,829] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:45:02,832] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:45:02,836] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:18:17,835] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:17,836] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:18:17,837] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:17,838] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:18:17,839] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:18:17,839] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:17,840] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:18:17,841] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:18:17,842] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:45:03,007] [INFO] (__main__.AISpleenSegApp) - End run\n", - "[2025-01-29 14:45:03,009] [INFO] (root) - End __main__\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:18:17,958] [INFO] (__main__.AISpleenSegApp) - End run\n", + "[2025-04-22 10:18:17,960] [INFO] (root) - End __main__\n" ] } ], @@ -968,61 +963,56 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:45:09,784] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", - "[2025-01-29 14:45:09,786] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=)\n", - "[2025-01-29 14:45:09,788] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 10:18:22,991] [INFO] (root) - Parsed args: Namespace(log_level=None, input=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm'), output=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output'), model=PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models'), workdir=None, triton_server_netloc=None, argv=['my_app', '-i', 'dcm', '-o', 'output', '-m', 'models'])\n", + "[2025-04-22 10:18:22,993] [INFO] (root) - AppContext object: AppContext(input_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/dcm, output_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output, model_path=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models, workdir=), triton_server_netloc=\n", + "[2025-04-22 10:18:22,994] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", - "[2025-01-29 14:45:09,806] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:45:10,337] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 10:18:23,011] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:45:10,338] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:45:10,638] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:23,326] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 10:18:23,327] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 10:18:23,535] [INFO] (root) - Casting to float32\n", + "[2025-04-22 10:18:23,592] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 14:45:14,192] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", - "[2025-01-29 14:45:15,947] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", - "[2025-01-29 14:45:15,947] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-04-22 10:18:26,690] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/output/stl/spleen.stl.\n", + "[2025-04-22 10:18:28,072] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-04-22 10:18:28,072] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:28,343] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:45:28,344] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:38,458] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 10:18:38,459] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:45:28,464] [INFO] (app.AISpleenSegApp) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 10:18:38,554] [INFO] (app.AISpleenSegApp) - End run\n" ] } ], @@ -1040,7 +1030,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.48925922417984937382434580199910089.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.141985674848102250562862177103472.dcm stl\n" ] } ], @@ -1114,10 +1104,14 @@ "scikit-image>=0.17.2\n", "numpy-stl>=2.12.0\n", "trimesh>=3.8.11\n", - "torch>=1.12.0\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue" + "torch>=1.12.0\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -1138,16 +1132,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 14:45:31,019] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 14:45:31,266] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 14:45:31,267] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-29 14:45:31,267] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 14:45:31,267] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", - "[2025-01-29 14:45:31,267] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", - "[2025-01-29 14:45:31,267] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-29 14:45:31,271] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 14:45:31,271] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 14:45:31,277] [DEBUG] (common) - \n", + "[2025-04-22 10:18:40,556] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 10:18:40,770] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 10:18:40,771] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-04-22 10:18:40,771] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 10:18:40,771] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models...\n", + "[2025-04-22 10:18:40,772] [DEBUG] (packager) - Model model=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model added.\n", + "[2025-04-22 10:18:40,772] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-04-22 10:18:40,776] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 10:18:40,776] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 10:18:40,780] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1175,14 +1169,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 14:45:31,278] [DEBUG] (common) - \n", + "[2025-04-22 10:18:40,781] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1202,7 +1196,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 14:45:31,305] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:18:40,804] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1220,14 +1214,14 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", " 'logs_dir': PosixPath('/var/holoscan/logs'),\n", " 'models': {'model': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/models/model')},\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '0.5.1',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1244,25 +1238,25 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 14:45:31,305] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:18:40,805] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", " 'cuda_deb_arch': 'x86_64',\n", " 'custom_base_image': False,\n", " 'custom_holoscan_sdk': False,\n", - " 'custom_monai_deploy_sdk': False,\n", + " 'custom_monai_deploy_sdk': True,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", - " 'monai_deploy_sdk_file': None,\n", - " 'monai_deploy_sdk_filename': None,\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", + " 'monai_deploy_sdk_file': PosixPath('/home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl'),\n", + " 'monai_deploy_sdk_filename': 'monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl',\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 14:45:31,336] [DEBUG] (packager.builder) - \n", + "[2025-04-22 10:18:40,822] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1326,9 +1320,9 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - MONAI Bundle AI App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"0.5.1\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1341,7 +1335,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1398,10 +1392,9 @@ "\n", "\n", "# Install MONAI Deploy App SDK\n", - "\n", - "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", - "\n", + "# Copy user-specified MONAI Deploy SDK file\n", + "COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", "\n", "COPY ./models /opt/holoscan/models\n", "\n", @@ -1416,7 +1409,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 14:45:31,336] [INFO] (packager.builder) - \n", + "[2025-04-22 10:18:40,822] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1424,40 +1417,37 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", - " MONAI Deploy App SDK Package: N/A\n", + " Holoscan SDK Package: 3.1.0\n", + " MONAI Deploy App SDK Package: /home/mqin/src/monai-deploy-app-sdk/dist/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 14:45:31,944] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 14:45:31,944] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 10:18:41,210] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 10:18:41,210] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile: 4.56kB done\n", + "#1 transferring dockerfile: 4.74kB done\n", "#1 DONE 0.1s\n", "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 ...\n", + "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", + "#2 DONE 0.0s\n", "\n", - "#3 [auth] nvidia/cuda:pull token for nvcr.io\n", - "#3 DONE 0.0s\n", - "\n", - "#2 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", - "#2 DONE 0.5s\n", + "#3 [internal] load metadata for nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", + "#3 DONE 0.5s\n", "\n", "#4 [internal] load .dockerignore\n", "#4 transferring context: 1.80kB done\n", "#4 DONE 0.1s\n", "\n", - "#5 [internal] load build context\n", + "#5 importing cache manifest from local:3932312145486245041\n", + "#5 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#5 DONE 0.0s\n", "\n", - "#6 importing cache manifest from local:6099231199924646769\n", - "#6 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", + "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", "#7 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", @@ -1468,410 +1458,505 @@ "#8 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", "#8 DONE 0.3s\n", "\n", - "#5 [internal] load build context\n", - "#5 transferring context: 19.43MB 0.2s done\n", - "#5 DONE 0.5s\n", + "#6 [internal] load build context\n", + "#6 transferring context: 19.58MB 0.1s done\n", + "#6 DONE 0.5s\n", "\n", - "#9 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#9 [release 4/19] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#9 CACHED\n", "\n", - "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#10 [release 5/19] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#10 CACHED\n", "\n", - "#11 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#11 [release 3/19] RUN groupadd -f -g 1000 holoscan\n", "#11 CACHED\n", "\n", - "#12 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", + "#12 [release 6/19] WORKDIR /var/holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", + "#13 [release 7/19] COPY ./tools /var/holoscan/tools\n", "#13 CACHED\n", "\n", - "#14 [release 6/18] WORKDIR /var/holoscan\n", + "#14 [release 8/19] RUN chmod +x /var/holoscan/tools\n", "#14 CACHED\n", "\n", - "#15 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#15 [release 1/19] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#15 CACHED\n", "\n", - "#16 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#16 [release 2/19] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#16 CACHED\n", "\n", - "#17 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#17 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#17 CACHED\n", "\n", - "#18 [release 9/18] WORKDIR /var/holoscan\n", + "#18 [release 9/19] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 [release 10/19] COPY ./pip/requirements.txt /tmp/requirements.txt\n", "#19 DONE 0.2s\n", "\n", - "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 1.108 Defaulting to user installation because normal site-packages is not writeable\n", - "#20 1.137 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", - "#20 1.383 Collecting pip\n", - "#20 1.456 Downloading pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#20 1.577 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 15.8 MB/s eta 0:00:00\n", - "#20 1.600 Installing collected packages: pip\n", - "#20 2.543 Successfully installed pip-25.0\n", - "#20 DONE 2.8s\n", - "\n", - "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 0.685 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 0.699 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", - "#21 0.720 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 0.725 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 0.855 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 0.914 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.079 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.083 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.099 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.105 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.110 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.137 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.141 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.200 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.205 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", - "#21 1.235 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.239 Downloading numpy_stl-3.2.0-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.324 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", - "#21 1.330 Downloading trimesh-4.6.0-py3-none-any.whl.metadata (18 kB)\n", - "#21 1.385 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", - "#21 1.389 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.407 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 12))\n", - "#21 1.412 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.583 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.587 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.607 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.612 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 1.624 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.628 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 1.640 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.644 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.675 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.680 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 1.725 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.731 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 1.831 Collecting scipy>=1.11.2 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.836 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.860 Collecting networkx>=3.0 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.864 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 1.891 Collecting imageio!=2.35.0,>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.896 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", - "#21 1.950 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.953 Downloading tifffile-2025.1.10-py3-none-any.whl.metadata (31 kB)\n", - "#21 1.970 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", - "#21 1.974 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", - "#21 1.992 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", - "#21 1.997 Downloading python_utils-3.9.1-py2.py3-none-any.whl.metadata (9.8 kB)\n", - "#21 2.029 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.033 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 2.050 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.054 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 2.074 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.078 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 2.125 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.129 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.140 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.144 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.155 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.158 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.170 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.174 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.183 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.187 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.198 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.202 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.212 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.216 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.227 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.230 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.242 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.246 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.255 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.258 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", - "#21 2.272 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.276 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 2.293 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.301 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 2.317 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.322 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.333 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.337 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#21 2.352 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.355 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 2.380 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.384 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 2.391 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12)) (25.0)\n", - "#21 2.403 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.407 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 2.475 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.479 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 2.500 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.504 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 2.580 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.585 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 2.636 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.640 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.746 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.750 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 2.761 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.765 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.804 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 2.810 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 2.856 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", - "#21 2.860 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 2.884 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 2.885 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 2.889 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 2.896 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.012 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.017 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 3.106 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.110 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 3.124 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.129 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 3.155 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.159 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 3.184 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.189 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.226 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.230 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 3.817 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 12))\n", - "#21 3.822 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 3.848 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", - "#21 3.863 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 104.9 MB/s eta 0:00:00\n", - "#21 3.868 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 3.886 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 115.5 MB/s eta 0:00:00\n", - "#21 3.896 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 3.928 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 116.2 MB/s eta 0:00:00\n", - "#21 3.934 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 4.103 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 112.1 MB/s eta 0:00:00\n", - "#21 4.112 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 4.141 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 95.7 MB/s eta 0:00:00\n", - "#21 4.151 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 4.640 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 108.5 MB/s eta 0:00:00\n", - "#21 4.649 Downloading scikit_image-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", - "#21 4.803 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 98.1 MB/s eta 0:00:00\n", - "#21 4.811 Downloading numpy_stl-3.2.0-py3-none-any.whl (20 kB)\n", - "#21 4.816 Downloading trimesh-4.6.0-py3-none-any.whl (706 kB)\n", - "#21 4.826 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 707.0/707.0 kB 141.2 MB/s eta 0:00:00\n", - "#21 4.833 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", - "#21 12.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 84.6 MB/s eta 0:00:00\n", - "#21 12.83 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 15.99 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 114.6 MB/s eta 0:00:00\n", - "#21 15.99 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 16.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.7 MB/s eta 0:00:00\n", - "#21 16.13 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 16.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.6 MB/s eta 0:00:00\n", - "#21 16.34 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 16.36 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 127.5 MB/s eta 0:00:00\n", - "#21 16.36 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 22.23 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 109.9 MB/s eta 0:00:00\n", - "#21 22.24 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 24.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 104.8 MB/s eta 0:00:00\n", - "#21 24.27 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 24.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 114.1 MB/s eta 0:00:00\n", - "#21 24.77 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 25.91 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 112.5 MB/s eta 0:00:00\n", - "#21 25.92 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 27.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 115.7 MB/s eta 0:00:00\n", - "#21 27.73 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", - "#21 29.05 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 114.0 MB/s eta 0:00:00\n", - "#21 29.06 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 30.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 116.5 MB/s eta 0:00:00\n", - "#21 30.69 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 30.88 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.2 MB/s eta 0:00:00\n", - "#21 30.89 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 30.89 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 30.95 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 116.5 MB/s eta 0:00:00\n", - "#21 30.96 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", - "#21 33.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 100.3 MB/s eta 0:00:00\n", - "#21 33.50 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 33.96 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 89.8 MB/s eta 0:00:00\n", - "#21 33.96 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 33.97 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 35.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 86.0 MB/s eta 0:00:00\n", - "#21 35.03 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", - "#21 35.04 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 35.05 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 35.05 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", - "#21 35.06 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 35.08 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 121.0 MB/s eta 0:00:00\n", - "#21 35.08 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 35.09 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 35.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 117.8 MB/s eta 0:00:00\n", - "#21 35.14 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 35.15 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 35.18 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 117.6 MB/s eta 0:00:00\n", - "#21 35.19 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 35.19 Downloading python_utils-3.9.1-py2.py3-none-any.whl (32 kB)\n", - "#21 35.20 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 35.21 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 148.8 MB/s eta 0:00:00\n", - "#21 35.21 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 35.22 Downloading scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.6 MB)\n", - "#21 35.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 MB 117.2 MB/s eta 0:00:00\n", - "#21 35.57 Downloading tifffile-2025.1.10-py3-none-any.whl (227 kB)\n", - "#21 35.58 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 35.59 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 35.59 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 35.60 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 35.60 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 35.61 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 35.62 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 35.62 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 35.63 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 35.63 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 35.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 117.8 MB/s eta 0:00:00\n", - "#21 35.64 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 35.65 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 35.67 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 110.5 MB/s eta 0:00:00\n", - "#21 35.68 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 35.68 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 43.57 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, trimesh, tifffile, scipy, requests, python-utils, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, lazy-loader, jinja2, imageio, cupy-cuda12x, scikit-image, pydantic, nvidia-cusolver-cu12, numpy-stl, highdicom, torch, python-on-whales, monai, holoscan\n", - "#21 112.3 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 imageio-2.37.0 importlib-resources-6.5.2 jinja2-3.1.5 lazy-loader-0.4 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 numpy-stl-3.2.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 python-utils-3.9.1 pyyaml-6.0.2 requests-2.32.3 scikit-image-0.25.1 scipy-1.15.1 sympy-1.13.1 tifffile-2025.1.10 torch-2.6.0 trimesh-4.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 114.1s\n", - "\n", - "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.281 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.447 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.474 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl.metadata (7.6 kB)\n", - "#22 1.501 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.503 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.544 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.549 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", - "#22 1.627 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==2.0.0)\n", - "#22 1.632 Downloading typeguard-4.4.1-py3-none-any.whl.metadata (3.7 kB)\n", - "#22 1.655 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (25.0)\n", - "#22 1.656 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.658 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.659 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.660 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.661 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.662 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.662 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.663 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.664 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.670 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.678 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.680 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.687 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 1.692 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 1.693 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 1.694 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 1.694 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 1.697 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 1.713 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 1.715 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 1.734 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.762 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.784 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 2.132 Installing collected packages: typeguard, colorama, monai-deploy-app-sdk\n", - "#22 2.316 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 typeguard-4.4.1\n", - "#22 DONE 2.7s\n", - "\n", - "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 0.2s\n", - "\n", - "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", + "#20 [release 11/19] RUN pip install --upgrade pip\n", + "#20 0.826 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.854 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.009 Collecting pip\n", + "#20 1.083 Downloading pip-25.0.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.257 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 10.9 MB/s eta 0:00:00\n", + "#20 1.288 Installing collected packages: pip\n", + "#20 2.028 Successfully installed pip-25.0.1\n", + "#20 DONE 2.2s\n", + "\n", + "#21 [release 12/19] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", + "#21 0.646 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.682 Downloading highdicom-0.25.1-py3-none-any.whl.metadata (5.0 kB)\n", + "#21 0.718 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.731 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.833 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.845 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.074 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.085 Downloading numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.122 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.136 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.144 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.183 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.193 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.259 Collecting scikit-image>=0.17.2 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.270 Downloading scikit_image-0.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", + "#21 1.303 Collecting numpy-stl>=2.12.0 (from -r /tmp/requirements.txt (line 9))\n", + "#21 1.315 Downloading numpy_stl-3.2.0-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.414 Collecting trimesh>=3.8.11 (from -r /tmp/requirements.txt (line 10))\n", + "#21 1.425 Downloading trimesh-4.6.8-py3-none-any.whl.metadata (18 kB)\n", + "#21 1.477 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 11))\n", + "#21 1.488 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.650 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.662 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (8.9 kB)\n", + "#21 1.711 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.724 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.757 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.771 Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.797 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.819 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.859 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.871 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.923 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.934 Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 2.041 Collecting scipy>=1.11.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.052 Downloading scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 2.086 Collecting networkx>=3.0 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.097 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 2.139 Collecting imageio!=2.35.0,>=2.33 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.151 Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)\n", + "#21 2.212 Collecting tifffile>=2022.8.12 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.224 Downloading tifffile-2025.3.30-py3-none-any.whl.metadata (32 kB)\n", + "#21 2.248 Collecting lazy-loader>=0.4 (from scikit-image>=0.17.2->-r /tmp/requirements.txt (line 8))\n", + "#21 2.259 Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n", + "#21 2.293 Collecting python-utils>=3.4.5 (from numpy-stl>=2.12.0->-r /tmp/requirements.txt (line 9))\n", + "#21 2.305 Downloading python_utils-3.9.1-py2.py3-none-any.whl.metadata (9.8 kB)\n", + "#21 2.367 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.378 Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.412 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.423 Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 2.457 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.468 Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.550 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.561 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.581 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.592 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.612 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.623 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.642 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.653 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.672 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.683 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.702 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.714 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.733 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.743 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.762 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.773 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.804 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.815 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.831 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.842 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.861 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.872 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.895 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.907 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.930 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.941 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.960 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 2.972 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 3.045 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 3.055 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 3.090 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 3.102 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 3.144 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 3.145 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 3.156 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.170 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 3.252 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 11))\n", + "#21 3.263 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 3.280 Downloading highdicom-0.25.1-py3-none-any.whl (1.1 MB)\n", + "#21 3.313 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 51.4 MB/s eta 0:00:00\n", + "#21 3.328 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 3.349 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 89.2 MB/s eta 0:00:00\n", + "#21 3.364 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.416 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 67.6 MB/s eta 0:00:00\n", + "#21 3.431 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 3.685 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 73.4 MB/s eta 0:00:00\n", + "#21 3.700 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 3.736 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 75.0 MB/s eta 0:00:00\n", + "#21 3.751 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 4.363 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 86.5 MB/s eta 0:00:00\n", + "#21 4.377 Downloading scikit_image-0.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n", + "#21 4.533 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 97.9 MB/s eta 0:00:00\n", + "#21 4.556 Downloading numpy_stl-3.2.0-py3-none-any.whl (20 kB)\n", + "#21 4.571 Downloading trimesh-4.6.8-py3-none-any.whl (709 kB)\n", + "#21 4.581 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 709.3/709.3 kB 201.3 MB/s eta 0:00:00\n", + "#21 4.598 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 11.67 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 106.7 MB/s eta 0:00:00\n", + "#21 11.69 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 14.89 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 115.9 MB/s eta 0:00:00\n", + "#21 14.90 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 15.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 100.5 MB/s eta 0:00:00\n", + "#21 15.06 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 15.31 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 98.3 MB/s eta 0:00:00\n", + "#21 15.32 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 15.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 95.7 MB/s eta 0:00:00\n", + "#21 15.35 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 21.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 109.3 MB/s eta 0:00:00\n", + "#21 21.34 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 23.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 116.0 MB/s eta 0:00:00\n", + "#21 23.19 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 23.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 95.6 MB/s eta 0:00:00\n", + "#21 23.80 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 25.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 103.4 MB/s eta 0:00:00\n", + "#21 25.05 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 26.90 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 112.6 MB/s eta 0:00:00\n", + "#21 26.92 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 28.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 112.3 MB/s eta 0:00:00\n", + "#21 28.27 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 30.00 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 109.4 MB/s eta 0:00:00\n", + "#21 30.01 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 30.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 113.9 MB/s eta 0:00:00\n", + "#21 30.21 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 30.23 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 30.29 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 119.1 MB/s eta 0:00:00\n", + "#21 30.30 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 32.93 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 96.3 MB/s eta 0:00:00\n", + "#21 32.95 Downloading imageio-2.37.0-py3-none-any.whl (315 kB)\n", + "#21 32.96 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 32.98 Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n", + "#21 32.99 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 33.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 113.8 MB/s eta 0:00:00\n", + "#21 33.02 Downloading packaging-25.0-py3-none-any.whl (66 kB)\n", + "#21 33.04 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.6 MB)\n", + "#21 33.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 107.2 MB/s eta 0:00:00\n", + "#21 33.10 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 33.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 104.8 MB/s eta 0:00:00\n", + "#21 33.14 Downloading python_utils-3.9.1-py2.py3-none-any.whl (32 kB)\n", + "#21 33.15 Downloading scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.6 MB)\n", + "#21 33.50 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 37.6/37.6 MB 111.2 MB/s eta 0:00:00\n", + "#21 33.51 Downloading tifffile-2025.3.30-py3-none-any.whl (226 kB)\n", + "#21 33.53 Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)\n", + "#21 33.54 Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n", + "#21 33.56 Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n", + "#21 33.57 Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "#21 33.59 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 33.60 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 33.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 201.5 MB/s eta 0:00:00\n", + "#21 41.09 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, typing-extensions, sympy, pydicom, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, fsspec, filelock, trimesh, tifffile, scipy, python-utils, pyjpegls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, lazy-loader, jinja2, imageio, scikit-image, nvidia-cusolver-cu12, numpy-stl, highdicom, torch, monai\n", + "#21 113.8 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 filelock-3.18.0 fsspec-2025.3.2 highdicom-0.25.1 imageio-2.37.0 importlib-resources-6.5.2 jinja2-3.1.6 lazy-loader-0.4 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 numpy-stl-3.2.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-25.0 pillow-11.2.1 pydicom-3.0.1 pyjpegls-1.4.0 python-utils-3.9.1 scikit-image-0.25.2 scipy-1.15.2 sympy-1.13.1 tifffile-2025.3.30 torch-2.6.0 trimesh-4.6.8 triton-3.2.0 typing-extensions-4.13.2\n", + "#21 DONE 117.7s\n", + "\n", + "#22 [release 13/19] COPY ./monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#22 DONE 0.5s\n", + "\n", + "#23 [release 14/19] RUN pip install /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.662 Defaulting to user installation because normal site-packages is not writeable\n", + "#23 0.785 Processing /tmp/monai_deploy_app_sdk-0.5.1+37.g96f7e31.dirty-py3-none-any.whl\n", + "#23 0.794 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (1.26.4)\n", + "#23 0.876 Collecting holoscan~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 0.901 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.0 kB)\n", + "#23 0.960 Collecting holoscan-cli~=3.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 0.967 Downloading holoscan_cli-3.1.0-py3-none-any.whl.metadata (4.0 kB)\n", + "#23 1.037 Collecting colorama>=0.4.1 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.043 Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)\n", + "#23 1.119 Collecting tritonclient>=2.53.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.124 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl.metadata (2.8 kB)\n", + "#23 1.217 Collecting typeguard>=3.0.0 (from monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.222 Downloading typeguard-4.4.2-py3-none-any.whl.metadata (3.8 kB)\n", + "#23 1.252 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (25.0.1)\n", + "#23 1.303 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.308 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.6 kB)\n", + "#23 1.380 Collecting cloudpickle<4.0,>=3.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.385 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", + "#23 1.439 Collecting wheel-axle-runtime<1.0 (from holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.445 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", + "#23 1.467 Requirement already satisfied: Jinja2<4.0.0,>=3.1.5 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.1.6)\n", + "#23 1.515 Collecting packaging<24.0,>=23.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.520 Downloading packaging-23.2-py3-none-any.whl.metadata (3.2 kB)\n", + "#23 1.646 Collecting psutil<7.0.0,>=6.0.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.650 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 1.724 Collecting python-on-whales<0.61.0,>=0.60.1 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.731 Downloading python_on_whales-0.60.1-py3-none-any.whl.metadata (16 kB)\n", + "#23 1.816 Collecting pyyaml<7.0,>=6.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.820 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", + "#23 1.904 Collecting requests<3.0.0,>=2.31.0 (from holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 1.908 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "#23 2.039 Collecting python-rapidjson>=0.9.1 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.044 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", + "#23 2.122 Collecting urllib3>=2.0.7 (from tritonclient>=2.53.0->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.126 Downloading urllib3-2.4.0-py3-none-any.whl.metadata (6.5 kB)\n", + "#23 2.575 Collecting aiohttp<4.0.0,>=3.8.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.579 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)\n", + "#23 2.661 Collecting cuda-python (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.665 Downloading cuda_python-12.8.0-py3-none-any.whl.metadata (15 kB)\n", + "#23 2.815 Collecting geventhttpclient>=2.3.3 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 2.825 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.7 kB)\n", + "#23 3.334 Collecting grpcio<1.68,>=1.63.0 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.339 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.9 kB)\n", + "#23 3.555 Collecting protobuf<6.0dev,>=5.26.1 (from tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.559 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl.metadata (592 bytes)\n", + "#23 3.577 Requirement already satisfied: typing_extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (4.13.2)\n", + "#23 3.626 Collecting aiohappyeyeballs>=2.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.632 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)\n", + "#23 3.676 Collecting aiosignal>=1.1.2 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.681 Downloading aiosignal-1.3.2-py2.py3-none-any.whl.metadata (3.8 kB)\n", + "#23 3.748 Collecting async-timeout<6.0,>=4.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.753 Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)\n", + "#23 3.817 Collecting attrs>=17.3.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.823 Downloading attrs-25.3.0-py3-none-any.whl.metadata (10 kB)\n", + "#23 3.935 Collecting frozenlist>=1.1.1 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 3.940 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (16 kB)\n", + "#23 4.201 Collecting multidict<7.0,>=4.5 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.205 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.3 kB)\n", + "#23 4.297 Collecting propcache>=0.2.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.301 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (10 kB)\n", + "#23 4.611 Collecting yarl<2.0,>=1.17.0 (from aiohttp<4.0.0,>=3.8.1->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.615 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (72 kB)\n", + "#23 4.699 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.704 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", + "#23 4.843 Collecting gevent (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.847 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 4.925 Collecting certifi (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 4.929 Downloading certifi-2025.1.31-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 5.003 Collecting brotli (from geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.007 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (5.5 kB)\n", + "#23 5.027 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0.0,>=3.1.5->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.0.2)\n", + "#23 5.170 Collecting pydantic<2,>=1.5 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.175 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (153 kB)\n", + "#23 5.306 Collecting tqdm (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.310 Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "#23 5.387 Collecting typer>=0.4.1 (from python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.393 Downloading typer-0.15.2-py3-none-any.whl.metadata (15 kB)\n", + "#23 5.514 Collecting charset-normalizer<4,>=2 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.558 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "#23 5.628 Collecting idna<4,>=2.5 (from requests<3.0.0,>=2.31.0->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.633 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "#23 5.678 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (3.18.0)\n", + "#23 5.710 Collecting cuda-bindings~=12.8.0 (from cuda-python->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.716 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\n", + "#23 5.807 Collecting click>=8.0.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.812 Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)\n", + "#23 5.872 Collecting shellingham>=1.3.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.878 Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "#23 5.971 Collecting rich>=10.11.0 (from typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 5.975 Downloading rich-14.0.0-py3-none-any.whl.metadata (18 kB)\n", + "#23 6.146 Collecting greenlet>=3.2.0 (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.150 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (4.1 kB)\n", + "#23 6.201 Collecting zope.event (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.208 Downloading zope.event-5.0-py3-none-any.whl.metadata (4.4 kB)\n", + "#23 6.362 Collecting zope.interface (from gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.367 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (44 kB)\n", + "#23 6.448 Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.453 Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", + "#23 6.524 Collecting pygments<3.0.0,>=2.13.0 (from rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.529 Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n", + "#23 6.548 Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from zope.event->gevent->geventhttpclient>=2.3.3->tritonclient[all]>=2.53.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty) (59.6.0)\n", + "#23 6.591 Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.4.1->python-on-whales<0.61.0,>=0.60.1->holoscan-cli~=3.0->monai-deploy-app-sdk==0.5.1+37.g96f7e31.dirty)\n", + "#23 6.598 Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "#23 6.645 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", + "#23 6.667 Downloading holoscan-3.1.0-cp310-cp310-manylinux_2_35_x86_64.whl (39.8 MB)\n", + "#23 8.166 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 39.8/39.8 MB 26.6 MB/s eta 0:00:00\n", + "#23 8.172 Downloading holoscan_cli-3.1.0-py3-none-any.whl (72 kB)\n", + "#23 8.194 Downloading tritonclient-2.56.0-py3-none-manylinux1_x86_64.whl (14.4 MB)\n", + "#23 8.442 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.4/14.4 MB 59.4 MB/s eta 0:00:00\n", + "#23 8.449 Downloading typeguard-4.4.2-py3-none-any.whl (35 kB)\n", + "#23 8.477 Downloading aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB)\n", + "#23 8.516 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 39.9 MB/s eta 0:00:00\n", + "#23 8.522 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", + "#23 8.545 Downloading cupy_cuda12x-13.4.1-cp310-cp310-manylinux2014_x86_64.whl (104.6 MB)\n", + "#23 10.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.6/104.6 MB 67.4 MB/s eta 0:00:00\n", + "#23 10.11 Downloading geventhttpclient-2.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (112 kB)\n", + "#23 10.14 Downloading grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)\n", + "#23 10.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.9/5.9 MB 54.0 MB/s eta 0:00:00\n", + "#23 10.26 Downloading packaging-23.2-py3-none-any.whl (53 kB)\n", + "#23 10.28 Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl (319 kB)\n", + "#23 10.31 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 10.34 Downloading python_on_whales-0.60.1-py3-none-any.whl (103 kB)\n", + "#23 10.36 Downloading python_rapidjson-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)\n", + "#23 10.41 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 37.3 MB/s eta 0:00:00\n", + "#23 10.41 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", + "#23 10.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 18.5 MB/s eta 0:00:00\n", + "#23 10.45 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "#23 10.48 Downloading urllib3-2.4.0-py3-none-any.whl (128 kB)\n", + "#23 10.50 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", + "#23 10.53 Downloading cuda_python-12.8.0-py3-none-any.whl (11 kB)\n", + "#23 10.55 Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)\n", + "#23 10.57 Downloading aiosignal-1.3.2-py2.py3-none-any.whl (7.6 kB)\n", + "#23 10.59 Downloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)\n", + "#23 10.62 Downloading attrs-25.3.0-py3-none-any.whl (63 kB)\n", + "#23 10.64 Downloading certifi-2025.1.31-py3-none-any.whl (166 kB)\n", + "#23 10.67 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", + "#23 10.69 Downloading cuda_bindings-12.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB)\n", + "#23 10.89 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 59.7 MB/s eta 0:00:00\n", + "#23 10.90 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", + "#23 10.92 Downloading frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", + "#23 10.95 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", + "#23 10.97 Downloading multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (219 kB)\n", + "#23 10.99 Downloading propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206 kB)\n", + "#23 11.02 Downloading pydantic-1.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n", + "#23 11.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 49.4 MB/s eta 0:00:00\n", + "#23 11.10 Downloading typer-0.15.2-py3-none-any.whl (45 kB)\n", + "#23 11.13 Downloading yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (333 kB)\n", + "#23 11.16 Downloading Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (3.0 MB)\n", + "#23 11.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 51.6 MB/s eta 0:00:00\n", + "#23 11.22 Downloading gevent-25.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB)\n", + "#23 11.27 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 44.4 MB/s eta 0:00:00\n", + "#23 11.28 Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "#23 11.31 Downloading click-8.1.8-py3-none-any.whl (98 kB)\n", + "#23 11.34 Downloading greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (580 kB)\n", + "#23 11.37 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 580.6/580.6 kB 15.5 MB/s eta 0:00:00\n", + "#23 11.37 Downloading rich-14.0.0-py3-none-any.whl (243 kB)\n", + "#23 11.40 Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n", + "#23 11.42 Downloading zope.event-5.0-py3-none-any.whl (6.8 kB)\n", + "#23 11.45 Downloading zope.interface-7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254 kB)\n", + "#23 11.47 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", + "#23 11.50 Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)\n", + "#23 11.54 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 31.5 MB/s eta 0:00:00\n", + "#23 11.54 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "#23 12.43 Installing collected packages: fastrlock, cuda-bindings, brotli, zope.interface, zope.event, wheel-axle-runtime, urllib3, typeguard, tqdm, shellingham, pyyaml, python-rapidjson, pygments, pydantic, psutil, protobuf, propcache, packaging, multidict, mdurl, idna, grpcio, greenlet, frozenlist, cupy-cuda12x, cuda-python, colorama, cloudpickle, click, charset-normalizer, certifi, attrs, async-timeout, aiohappyeyeballs, yarl, tritonclient, requests, markdown-it-py, holoscan, gevent, aiosignal, rich, geventhttpclient, aiohttp, typer, python-on-whales, holoscan-cli, monai-deploy-app-sdk\n", + "#23 14.37 Attempting uninstall: packaging\n", + "#23 14.37 Found existing installation: packaging 25.0\n", + "#23 14.38 Uninstalling packaging-25.0:\n", + "#23 14.40 Successfully uninstalled packaging-25.0\n", + "#23 19.15 Successfully installed aiohappyeyeballs-2.6.1 aiohttp-3.11.18 aiosignal-1.3.2 async-timeout-5.0.1 attrs-25.3.0 brotli-1.1.0 certifi-2025.1.31 charset-normalizer-3.4.1 click-8.1.8 cloudpickle-3.1.1 colorama-0.4.6 cuda-bindings-12.8.0 cuda-python-12.8.0 cupy-cuda12x-13.4.1 fastrlock-0.8.3 frozenlist-1.6.0 gevent-25.4.1 geventhttpclient-2.3.3 greenlet-3.2.1 grpcio-1.67.1 holoscan-3.1.0 holoscan-cli-3.1.0 idna-3.10 markdown-it-py-3.0.0 mdurl-0.1.2 monai-deploy-app-sdk-0.5.1+37.g96f7e31.dirty multidict-6.4.3 packaging-23.2 propcache-0.3.1 protobuf-5.29.4 psutil-6.1.1 pydantic-1.10.21 pygments-2.19.1 python-on-whales-0.60.1 python-rapidjson-1.20 pyyaml-6.0.2 requests-2.32.3 rich-14.0.0 shellingham-1.5.4 tqdm-4.67.1 tritonclient-2.56.0 typeguard-4.4.2 typer-0.15.2 urllib3-2.4.0 wheel-axle-runtime-0.0.6 yarl-1.20.0 zope.event-5.0 zope.interface-7.2\n", + "#23 DONE 22.0s\n", + "\n", + "#24 [release 15/19] COPY ./models /opt/holoscan/models\n", + "#24 DONE 0.3s\n", + "\n", + "#25 [release 16/19] COPY ./map/app.json /etc/holoscan/app.json\n", "#25 DONE 0.1s\n", "\n", - "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", + "#26 [release 17/19] COPY ./app.config /var/holoscan/app.yaml\n", "#26 DONE 0.1s\n", "\n", - "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", + "#27 [release 18/19] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", "#27 DONE 0.1s\n", "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 211.4s done\n", - "#28 exporting manifest sha256:9912b1b79735694e28133b372df9befe4a729581a452a6ab2ad63b786c87a253 0.0s done\n", - "#28 exporting config sha256:fa77b2f3975cd2da99ca7aabe147114e6dd897a3c7e6f129d44599b80cb260b6 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer f1af28197cc7 320B / 320B\n", - "#29 loading layer 20850dd17414 65.54kB / 5.10MB\n", - "#29 loading layer b9f62cf91cea 557.06kB / 3.40GB\n", - "#29 loading layer b9f62cf91cea 144.83MB / 3.40GB 6.4s\n", - "#29 loading layer b9f62cf91cea 353.17MB / 3.40GB 12.6s\n", - "#29 loading layer b9f62cf91cea 531.43MB / 3.40GB 16.7s\n", - "#29 loading layer b9f62cf91cea 759.27MB / 3.40GB 20.7s\n", - "#29 loading layer b9f62cf91cea 964.82MB / 3.40GB 24.8s\n", - "#29 loading layer b9f62cf91cea 1.20GB / 3.40GB 28.8s\n", - "#29 loading layer b9f62cf91cea 1.40GB / 3.40GB 33.0s\n", - "#29 loading layer b9f62cf91cea 1.66GB / 3.40GB 37.1s\n", - "#29 loading layer b9f62cf91cea 1.86GB / 3.40GB 41.2s\n", - "#29 loading layer b9f62cf91cea 2.17GB / 3.40GB 45.4s\n", - "#29 loading layer b9f62cf91cea 2.35GB / 3.40GB 51.7s\n", - "#29 loading layer b9f62cf91cea 2.38GB / 3.40GB 56.8s\n", - "#29 loading layer b9f62cf91cea 2.62GB / 3.40GB 63.0s\n", - "#29 loading layer b9f62cf91cea 2.88GB / 3.40GB 67.1s\n", - "#29 loading layer b9f62cf91cea 3.13GB / 3.40GB 71.4s\n", - "#29 loading layer b9f62cf91cea 3.31GB / 3.40GB 77.5s\n", - "#29 loading layer 00a02d1497ac 32.77kB / 578.05kB\n", - "#29 loading layer c39f31c9dcbe 196.61kB / 17.81MB\n", - "#29 loading layer c27d336afe81 492B / 492B\n", - "#29 loading layer ad1723897556 315B / 315B\n", - "#29 loading layer c4a750e42b61 302B / 302B\n", - "#29 loading layer 8d8c67a7dde8 3.36kB / 3.36kB\n", - "#29 loading layer f1af28197cc7 320B / 320B 81.6s done\n", - "#29 loading layer 20850dd17414 65.54kB / 5.10MB 81.5s done\n", - "#29 loading layer b9f62cf91cea 3.31GB / 3.40GB 80.9s done\n", - "#29 loading layer 00a02d1497ac 32.77kB / 578.05kB 1.0s done\n", - "#29 loading layer c39f31c9dcbe 196.61kB / 17.81MB 0.8s done\n", - "#29 loading layer c27d336afe81 492B / 492B 0.5s done\n", - "#29 loading layer ad1723897556 315B / 315B 0.5s done\n", - "#29 loading layer c4a750e42b61 302B / 302B 0.4s done\n", - "#29 loading layer 8d8c67a7dde8 3.36kB / 3.36kB 0.4s done\n", - "#29 DONE 81.6s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 124.3s done\n", - "#28 DONE 335.8s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:0514616033bece7aa07be14e038e2deaff1febaded164a7df509159ddeb68afb\n", - "#30 writing layer sha256:0514616033bece7aa07be14e038e2deaff1febaded164a7df509159ddeb68afb 0.0s done\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#30 writing layer sha256:10dca05c4c1d17a0351e6109694f44743a7fab7484c2096ac9e4e6f83d455964 0.1s done\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:400106ccc6c0e4c57943fea0ee16adf7d7f37bc155b2a8a704b41ad227590e75 0.1s done\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#30 writing layer sha256:4d62fb97f3e572427881e00c0d7d2424446cf788a2ff1e7a5864b790880d37bc 0.0s done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#30 writing layer sha256:8e8eda206fe85e2e966fe8e06f6acba89eaf2e6b6cddb66e3e84fc0efc9c6906 0.0s done\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:a8fe21bec5ef4d30051879815a94c399cea9a8a7c5e62d0b2d8dc6ab35851f40\n", - "#30 writing layer sha256:a8fe21bec5ef4d30051879815a94c399cea9a8a7c5e62d0b2d8dc6ab35851f40 0.3s done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:dbe5a881b951fb16a98081093b857b9127105681762f778e9ff16b31ffb07055 0.0s done\n", - "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing layer sha256:f734d777b5a1efc673bfc51bbe4634866e8b0c1735a3ba60913a1c95b8f85844 0.0s done\n", - "#30 writing layer sha256:fcc4d28973337beed9179216a0a6c14235ef3508532b9ebe1f727a9f684c5ab5\n", - "#30 writing layer sha256:fcc4d28973337beed9179216a0a6c14235ef3508532b9ebe1f727a9f684c5ab5 49.9s done\n", - "#30 preparing build cache for export 50.7s done\n", - "#30 writing config sha256:fb02d957d3bc2e55f202f36038ebe4b6dd16cd559d9a96a331e39ae6f5e63b3c 0.0s done\n", - "#30 writing cache manifest sha256:a97d212bf82fe3968fa658499603f14288678605e74c4bf6a3ae8e306dd1f1ff 0.0s done\n", - "#30 DONE 50.7s\n", - "[2025-01-29 14:54:01,342] [INFO] (packager) - Build Summary:\n", + "#28 [release 19/19] COPY ./app /opt/holoscan/app\n", + "#28 DONE 0.1s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 exporting layers\n", + "#29 exporting layers 187.0s done\n", + "#29 exporting manifest sha256:cac1ac4d69726995d3c9e061377448492061d466def990799cc72e811e162e90 0.0s done\n", + "#29 exporting config sha256:aacceda07071b8e9c4e0b360fd0b819d987eef71230c11c95f76c3053bfbd861 0.0s done\n", + "#29 sending tarball\n", + "#29 ...\n", + "\n", + "#30 importing to docker\n", + "#30 loading layer 49b545b4149c 283B / 283B\n", + "#30 loading layer c44b5ca75fdc 65.54kB / 5.09MB\n", + "#30 loading layer 3370fbb67e83 557.06kB / 3.26GB\n", + "#30 loading layer 3370fbb67e83 210.01MB / 3.26GB 6.3s\n", + "#30 loading layer 3370fbb67e83 337.02MB / 3.26GB 12.5s\n", + "#30 loading layer 3370fbb67e83 550.37MB / 3.26GB 18.7s\n", + "#30 loading layer 3370fbb67e83 735.31MB / 3.26GB 22.8s\n", + "#30 loading layer 3370fbb67e83 963.15MB / 3.26GB 27.0s\n", + "#30 loading layer 3370fbb67e83 1.18GB / 3.26GB 31.0s\n", + "#30 loading layer 3370fbb67e83 1.33GB / 3.26GB 37.2s\n", + "#30 loading layer 3370fbb67e83 1.56GB / 3.26GB 41.3s\n", + "#30 loading layer 3370fbb67e83 1.75GB / 3.26GB 45.4s\n", + "#30 loading layer 3370fbb67e83 2.02GB / 3.26GB 49.4s\n", + "#30 loading layer 3370fbb67e83 2.19GB / 3.26GB 55.6s\n", + "#30 loading layer 3370fbb67e83 2.24GB / 3.26GB 62.9s\n", + "#30 loading layer 3370fbb67e83 2.36GB / 3.26GB 69.0s\n", + "#30 loading layer 3370fbb67e83 2.56GB / 3.26GB 73.1s\n", + "#30 loading layer 3370fbb67e83 2.75GB / 3.26GB 77.1s\n", + "#30 loading layer 3370fbb67e83 2.93GB / 3.26GB 83.3s\n", + "#30 loading layer 3370fbb67e83 3.10GB / 3.26GB 89.5s\n", + "#30 loading layer af8c5ba7bee3 32.77kB / 144.30kB\n", + "#30 loading layer 8f8123670c0a 557.06kB / 398.53MB\n", + "#30 loading layer 8f8123670c0a 197.20MB / 398.53MB 2.1s\n", + "#30 loading layer 8f8123670c0a 228.95MB / 398.53MB 4.1s\n", + "#30 loading layer 8f8123670c0a 270.73MB / 398.53MB 6.2s\n", + "#30 loading layer 8f8123670c0a 334.23MB / 398.53MB 8.2s\n", + "#30 loading layer 8f8123670c0a 368.21MB / 398.53MB 10.3s\n", + "#30 loading layer c277737c154f 196.61kB / 17.81MB\n", + "#30 loading layer 01f35eabeadd 493B / 493B\n", + "#30 loading layer 21a6f7132dd0 316B / 316B\n", + "#30 loading layer 22aecd36f9de 302B / 302B\n", + "#30 loading layer ab9d985fcc93 3.33kB / 3.33kB\n", + "#30 loading layer 8f8123670c0a 398.53MB / 398.53MB 13.6s done\n", + "#30 loading layer 49b545b4149c 283B / 283B 109.9s done\n", + "#30 loading layer c44b5ca75fdc 5.09MB / 5.09MB 109.9s done\n", + "#30 loading layer 3370fbb67e83 3.26GB / 3.26GB 109.2s done\n", + "#30 loading layer af8c5ba7bee3 144.30kB / 144.30kB 13.7s done\n", + "#30 loading layer c277737c154f 17.81MB / 17.81MB 1.1s done\n", + "#30 loading layer 01f35eabeadd 493B / 493B 0.7s done\n", + "#30 loading layer 21a6f7132dd0 316B / 316B 0.6s done\n", + "#30 loading layer 22aecd36f9de 302B / 302B 0.5s done\n", + "#30 loading layer ab9d985fcc93 3.33kB / 3.33kB 0.5s done\n", + "#30 DONE 109.9s\n", + "\n", + "#29 exporting to docker image format\n", + "#29 sending tarball 147.3s done\n", + "#29 DONE 334.4s\n", + "\n", + "#31 exporting cache to client directory\n", + "#31 preparing build cache for export\n", + "#31 writing layer sha256:000344a04deee760c0681e29294ee3f527b8299026aef2cfc3fa93e327c63df7\n", + "#31 writing layer sha256:000344a04deee760c0681e29294ee3f527b8299026aef2cfc3fa93e327c63df7 0.1s done\n", + "#31 writing layer sha256:048e6a80d9e1847dcc9526191c8d16c8bdda32e8440cb0e287ba48983787b2ea 0.0s done\n", + "#31 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", + "#31 writing layer sha256:21ef12df128643f4e171d286035dc9c1a1e744f0ff52681473844fa3ebf148f9\n", + "#31 writing layer sha256:21ef12df128643f4e171d286035dc9c1a1e744f0ff52681473844fa3ebf148f9 51.1s done\n", + "#31 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24\n", + "#31 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", + "#31 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", + "#31 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", + "#31 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", + "#31 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", + "#31 writing layer sha256:4984bf91ddd07bd551024b1b6bda153f7d4f5a5caf35d9e2ca01c95afb531638 0.0s done\n", + "#31 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", + "#31 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", + "#31 writing layer sha256:76cf1f2adf6fbbaa3d9ff2c120fc0ccf97b4b5388ee0a0dee82f894ea811caf8 0.1s done\n", + "#31 writing layer sha256:8a18a20487f64bf7fe1ac7ead38280d387b11f3d714179e19b4ecfba68a09f93\n", + "#31 writing layer sha256:8a18a20487f64bf7fe1ac7ead38280d387b11f3d714179e19b4ecfba68a09f93 0.0s done\n", + "#31 writing layer sha256:935b4cb3480886ca00a46c28cd98797870cfc7389818c85cd243869f4548fda4 done\n", + "#31 writing layer sha256:95dbda2f5f8116a35367b28d397faae7d34bd4a713aefe01ccfe5e326b0b0250 done\n", + "#31 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", + "#31 writing layer sha256:9897f28322ebd7b633908503d8877b342e03a47293fcacdc8206b2e5d9f20923\n", + "#31 writing layer sha256:9897f28322ebd7b633908503d8877b342e03a47293fcacdc8206b2e5d9f20923 0.4s done\n", + "#31 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847\n", + "#31 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", + "#31 writing layer sha256:b0436fe850f9a3fce99cc083d570eb3393b83444edf2dc04800a8e4d050d2d83 0.0s done\n", + "#31 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", + "#31 writing layer sha256:d0b9db5eaf93e490f07bab8abb1ac5475febcf822c25f2e1d1c82ff4273a7d0d done\n", + "#31 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", + "#31 writing layer sha256:da44fb0aa6d6f7c651c7eec8e11510c9c048b066b2ba36b261cefea12ff5ee3e done\n", + "#31 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", + "#31 writing layer sha256:f1e6c0e7271e4ce12dd1113858066e0d41d50b338596aea2c15a21da034a7d3d 0.0s done\n", + "#31 writing layer sha256:f3af93a430a247328c59fb2228f6fa43a0ce742b03464db94acf7c45311e31cd done\n", + "#31 writing layer sha256:ff7fc9bdba2b206dc4eb678f49b36a99daf566bf71753dc2cec30a0195f7a41a\n", + "#31 writing layer sha256:ff7fc9bdba2b206dc4eb678f49b36a99daf566bf71753dc2cec30a0195f7a41a 6.8s done\n", + "#31 preparing build cache for export 58.8s done\n", + "#31 writing config sha256:1401476261a3e0a96b4b64a3270960c3fa51a70d62e0cd7a30991c3da24af97e 0.0s done\n", + "#31 writing cache manifest sha256:b4e7496beec087df8709332743a34f2f69a9993f4fdf0ac0d1871c03d8664448 0.0s done\n", + "#31 DONE 58.8s\n", + "[2025-04-22 10:27:40,090] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", " Status: Succeeded\n", @@ -1883,7 +1968,7 @@ "source": [ "tag_prefix = \"my_app\"\n", "\n", - "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -1902,7 +1987,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 fa77b2f3975c 6 minutes ago 8.82GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 aacceda07071 6 minutes ago 9.25GB\n" ] } ], @@ -1960,7 +2045,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -1984,16 +2069,16 @@ " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-04-22 17:27:43 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 22:54:05 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 22:54:05 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-04-22 17:27:43 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-04-22 17:27:43 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-04-22 17:27:43 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-04-22 17:27:43 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2025-01-29 22:54:05 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 22:54:05 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-04-22 17:27:43 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-04-22 17:27:43 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -2025,23 +2110,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 14:54:07,456] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 14:54:07,456] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 10:27:44,899] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 10:27:44,899] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 14:54:07,457] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 10:27:44,899] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 14:54:07,457] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 10:27:44,900] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 14:54:07,521] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpieorgxpy/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpieorgxpy/pkg.json\n", - "969dfb951c65e83ccab09c48eaad70245f27a19206b7c42f68cf2020047ab48a\n", - "[2025-01-29 14:54:07,774] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 10:27:44,977] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmpmnebv7ra/app.json\n", + "Successfully copied 2.05kB to /tmp/tmpmnebv7ra/pkg.json\n", + "bb0cf20f8662e86bcda22ed7a5faae90e0b66cdd38d6f64a8e2ceb4e95a0ebca\n", + "[2025-04-22 10:27:45,406] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 14:54:07,774] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 10:27:45,407] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 14:54:08,049] [INFO] (common) - Launching container (b7f0dfdee19f) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: peaceful_bose\n", + "[2025-04-22 10:27:45,714] [INFO] (common) - Launching container (21c6001bf0ef) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: youthful_jepsen\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2051,119 +2136,109 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 22:54:08 [INFO] Launching application python3 /opt/holoscan/app ...\n", - "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "2025-04-22 17:27:46 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[2025-01-29 22:54:16,150] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 22:54:16,156] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2025-04-22 17:27:53,854] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2025-01-29 22:54:16,159] [INFO] (root) - End compose\n", + "[2025-04-22 17:27:53,858] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[2025-04-22 17:27:53,860] [INFO] (root) - End compose\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_file'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", + "[2025-04-22 17:27:53,886] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", + " # of series: 1\n", "\n", - "[2025-01-29 22:54:16,194] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:54:17,214] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 17:27:54,799] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:54:17,214] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - " # of series: 1\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:54:17,214] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series Selection finalized.\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 17:27:54,800] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 22:54:17,215] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 17:27:55,081] [INFO] (root) - Casting to float32\n", "\n", - "[2025-01-29 22:54:18,043] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", + "[2025-04-22 17:27:55,383] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", "\n", " warnings.warn(\n", "\n", - "[2025-01-29 22:54:21,728] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", + "[2025-04-22 17:27:59,716] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", "\n", - "[2025-01-29 22:54:23,417] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", + "[2025-04-22 17:28:01,195] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", "\n", - "[2025-01-29 22:54:23,417] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", + "[2025-04-22 17:28:01,196] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", " check_person_name(patient_name)\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:54:38,746] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 17:28:12,576] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 17:28:12,577] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-29 22:54:38,747] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 17:28:12,578] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[2025-01-29 22:54:38,864] [INFO] (app.AISpleenSegApp) - End run\n", + "[2025-04-22 17:28:12,698] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[2025-01-29 14:54:40,627] [INFO] (common) - Container 'peaceful_bose'(b7f0dfdee19f) exited.\n" + "[2025-04-22 10:28:14,349] [INFO] (common) - Container 'youthful_jepsen'(21c6001bf0ef) exited.\n" ] } ], @@ -2182,7 +2257,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.91779897402861840368941310038395885.dcm stl\n" + "1.2.826.0.1.3680043.10.511.3.36310308785029269065941040056862019.dcm stl\n" ] } ], diff --git a/notebooks/tutorials/05_multi_model_app.ipynb b/notebooks/tutorials/05_multi_model_app.ipynb index 0edc6d75..f87b8d35 100644 --- a/notebooks/tutorials/05_multi_model_app.ipynb +++ b/notebooks/tutorials/05_multi_model_app.ipynb @@ -730,70 +730,63 @@ "name": "stderr", "output_type": "stream", "text": [ - "[info] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:58:28,687] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=[])\n", - "[2025-01-29 14:58:28,703] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2025-01-29 14:58:28,709] [INFO] (root) - End compose\n", - "[info] [gxf_executor.cpp:264] Creating context\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:14:06,240] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=[])\n", + "[2025-04-22 12:14:06,259] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=), triton_server_netloc=\n", + "[2025-04-22 12:14:06,266] [INFO] (root) - End compose\n", + "[info] [gxf_executor.cpp:265] Creating context\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", - "[2025-01-29 14:58:28,793] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:58:29,154] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:58:29,155] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 12:14:06,293] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 12:14:06,864] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 12:14:06,865] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:58:29,156] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:58:29,157] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:58:29,157] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:58:29,158] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:58:29,159] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:58:29,160] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:58:29,160] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:58:29,161] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:58:29,163] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:58:29,164] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:58:29,165] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:58:29,932] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2025-04-22 12:14:06,866] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:06,866] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:06,867] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 12:14:06,867] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:06,868] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 12:14:06,868] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 12:14:06,869] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:06,869] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:06,871] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:06,871] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:06,872] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:06,872] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 12:14:06,873] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:06,873] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:07,392] [INFO] (root) - Casting to float32\n", + "[2025-04-22 12:14:07,618] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 14:59:07,045] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "[2025-04-22 12:14:45,024] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 14:59:11,588] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:11,589] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:59:11,590] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:11,591] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:59:11,592] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:59:11,593] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:11,594] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:59:11,596] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:59:11,599] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2025-01-29 14:59:12,924] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:12,925] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 14:59:12,926] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:12,926] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 14:59:12,928] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 14:59:12,930] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 14:59:12,932] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 14:59:12,934] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 14:59:12,936] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:14:48,476] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:48,477] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:14:48,478] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:48,478] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:14:48,479] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:14:48,480] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:48,480] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:14:48,481] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:14:48,482] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:14:49,557] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:49,559] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:14:49,560] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:49,561] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:14:49,561] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:14:49,562] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:14:49,563] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:14:49,564] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:14:49,564] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 14:59:13,097] [INFO] (__main__.App) - End run\n" + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 12:14:49,692] [INFO] (__main__.App) - End run\n" ] } ], @@ -1165,70 +1158,63 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[32minfo\u001b[m] [fragment.cpp:599] Loading extensions from configs...\n", - "[2025-01-29 14:59:22,117] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['my_app'])\n", - "[2025-01-29 14:59:22,124] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=)\n", - "[2025-01-29 14:59:22,127] [INFO] (root) - End compose\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:264] Creating context\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2208] Activating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2238] Running Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2240] Waiting for completion...\n", + "[\u001b[32minfo\u001b[m] [fragment.cpp:705] Loading extensions from configs...\n", + "[2025-04-22 12:14:54,730] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['my_app'])\n", + "[2025-04-22 12:14:54,735] [INFO] (root) - AppContext object: AppContext(input_path=dcm, output_path=output, model_path=multi_models, workdir=), triton_server_netloc=\n", + "[2025-04-22 12:14:54,737] [INFO] (root) - End compose\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:265] Creating context\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2396] Activating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2426] Running Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2428] Waiting for completion...\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", - "[2025-01-29 14:59:22,158] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", - "[2025-01-29 14:59:23,236] [INFO] (root) - Finding series for Selection named: CT Series\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 12:14:54,756] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", " # of series: 1\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute Modality value: CT\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", - "[2025-01-29 14:59:23,237] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "[2025-01-29 14:59:23,521] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 12:14:55,597] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series Selection finalized.\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", + "[2025-04-22 12:14:55,598] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 12:14:55,815] [INFO] (root) - Casting to float32\n", + "[2025-04-22 12:14:55,872] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", " warnings.warn(\n", - "[2025-01-29 15:00:02,766] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", + "[2025-04-22 12:15:29,019] [INFO] (root) - Parsing from bundle_path: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct/model.ts\n", "/home/mqin/src/monai-deploy-app-sdk/.venv/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", " check_person_name(patient_name)\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 15:00:07,249] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 15:00:07,250] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:08,661] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", - "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "[2025-01-29 15:00:08,662] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "[2025-01-29 15:00:08,663] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", - "[2025-01-29 15:00:08,663] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:15:32,361] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:15:32,362] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:15:32,363] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 12:15:33,346] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 12:15:33,347] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 12:15:33,347] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "[\u001b[32minfo\u001b[m] [greedy_scheduler.cpp:401] Scheduler finished.\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2243] Deactivating Graph...\n", - "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2251] Graph execution finished.\n", - "[2025-01-29 15:00:08,802] [INFO] (app.App) - End run\n" + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2431] Deactivating Graph...\n", + "[\u001b[32minfo\u001b[m] [gxf_executor.cpp:2439] Graph execution finished.\n", + "[2025-04-22 12:15:33,435] [INFO] (app.App) - End run\n" ] } ], @@ -1246,8 +1232,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.6770039896233970278223165829656417.dcm\n", - "1.2.826.0.1.3680043.10.511.3.99914275872478204692034716344119025.dcm\n" + "1.2.826.0.1.3680043.10.511.3.34841928451888108286361340675987576.dcm\n", + "1.2.826.0.1.3680043.10.511.3.36403385704959959901485544349934328.dcm\n" ] } ], @@ -1324,8 +1310,7 @@ "pydicom>=2.3.0\n", "setuptools>=59.5.0 # for pkg_resources\n", "SimpleITK>=2.0.0\n", - "torch>=1.12.0\n", - "holoscan>=2.9.0 # avoid v2.7 and v2.8 for a known issue\n" + "torch>=1.12.0\n" ] }, { @@ -1348,17 +1333,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 15:00:11,881] [INFO] (common) - Downloading CLI manifest file...\n", - "[2025-01-29 15:00:12,062] [DEBUG] (common) - Validating CLI manifest file...\n", - "[2025-01-29 15:00:12,063] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", - "[2025-01-29 15:00:12,063] [INFO] (packager.parameters) - Detected application type: Python Module\n", - "[2025-01-29 15:00:12,064] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", - "[2025-01-29 15:00:12,064] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", - "[2025-01-29 15:00:12,064] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", - "[2025-01-29 15:00:12,064] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", - "[2025-01-29 15:00:12,071] [INFO] (packager) - Generating app.json...\n", - "[2025-01-29 15:00:12,071] [INFO] (packager) - Generating pkg.json...\n", - "[2025-01-29 15:00:12,075] [DEBUG] (common) - \n", + "[2025-04-22 12:15:35,532] [INFO] (common) - Downloading CLI manifest file...\n", + "[2025-04-22 12:15:35,793] [DEBUG] (common) - Validating CLI manifest file...\n", + "[2025-04-22 12:15:35,794] [INFO] (packager.parameters) - Application: /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app\n", + "[2025-04-22 12:15:35,794] [INFO] (packager.parameters) - Detected application type: Python Module\n", + "[2025-04-22 12:15:35,794] [INFO] (packager) - Scanning for models in /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models...\n", + "[2025-04-22 12:15:35,795] [DEBUG] (packager) - Model spleen_ct=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct added.\n", + "[2025-04-22 12:15:35,795] [DEBUG] (packager) - Model pancreas_ct_dints=/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints added.\n", + "[2025-04-22 12:15:35,795] [INFO] (packager) - Reading application configuration from /home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml...\n", + "[2025-04-22 12:15:35,798] [INFO] (packager) - Generating app.json...\n", + "[2025-04-22 12:15:35,798] [INFO] (packager) - Generating pkg.json...\n", + "[2025-04-22 12:15:35,804] [DEBUG] (common) - \n", "=============== Begin app.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1386,14 +1371,14 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"3.0.0\",\n", " \"timeout\": 0,\n", " \"version\": 1.0,\n", " \"workingDirectory\": \"/var/holoscan\"\n", "}\n", "================ End app.json ================\n", " \n", - "[2025-01-29 15:00:12,076] [DEBUG] (common) - \n", + "[2025-04-22 12:15:35,804] [DEBUG] (common) - \n", "=============== Begin pkg.json ===============\n", "{\n", " \"apiVersion\": \"1.0.0\",\n", @@ -1414,7 +1399,7 @@ "}\n", "================ End pkg.json ================\n", " \n", - "[2025-01-29 15:00:12,629] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:15:36,273] [DEBUG] (packager.builder) - \n", "========== Begin Build Parameters ==========\n", "{'additional_lib_paths': '',\n", " 'app_config_file_path': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/my_app/app.yaml'),\n", @@ -1432,7 +1417,7 @@ " 'full_input_path': PosixPath('/var/holoscan/input'),\n", " 'full_output_path': PosixPath('/var/holoscan/output'),\n", " 'gid': 1000,\n", - " 'holoscan_sdk_version': '2.9.0',\n", + " 'holoscan_sdk_version': '3.1.0',\n", " 'includes': [],\n", " 'input_dir': 'input/',\n", " 'lib_dir': PosixPath('/opt/holoscan/lib'),\n", @@ -1440,7 +1425,7 @@ " 'models': {'pancreas_ct_dints': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/pancreas_ct_dints'),\n", " 'spleen_ct': PosixPath('/home/mqin/src/monai-deploy-app-sdk/notebooks/tutorials/multi_models/spleen_ct')},\n", " 'models_dir': PosixPath('/opt/holoscan/models'),\n", - " 'monai_deploy_app_sdk_version': '2.0.0',\n", + " 'monai_deploy_app_sdk_version': '3.0.0',\n", " 'no_cache': False,\n", " 'output_dir': 'output/',\n", " 'pip_packages': None,\n", @@ -1457,7 +1442,7 @@ " 'working_dir': PosixPath('/var/holoscan')}\n", "=========== End Build Parameters ===========\n", "\n", - "[2025-01-29 15:00:12,629] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:15:36,273] [DEBUG] (packager.builder) - \n", "========== Begin Platform Parameters ==========\n", "{'base_image': 'nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04',\n", " 'build_image': None,\n", @@ -1467,15 +1452,15 @@ " 'custom_monai_deploy_sdk': False,\n", " 'gpu_type': 'dgpu',\n", " 'holoscan_deb_arch': 'amd64',\n", - " 'holoscan_sdk_file': '2.9.0',\n", - " 'holoscan_sdk_filename': '2.9.0',\n", + " 'holoscan_sdk_file': '3.1.0',\n", + " 'holoscan_sdk_filename': '3.1.0',\n", " 'monai_deploy_sdk_file': None,\n", " 'monai_deploy_sdk_filename': None,\n", " 'tag': 'my_app:1.0',\n", " 'target_arch': 'x86_64'}\n", "=========== End Platform Parameters ===========\n", "\n", - "[2025-01-29 15:00:12,672] [DEBUG] (packager.builder) - \n", + "[2025-04-22 12:15:36,293] [DEBUG] (packager.builder) - \n", "========== Begin Dockerfile ==========\n", "\n", "ARG GPU_TYPE=dgpu\n", @@ -1539,9 +1524,9 @@ "LABEL tag=\"my_app:1.0\"\n", "LABEL org.opencontainers.image.title=\"MONAI Deploy App Package - Multi Model App\"\n", "LABEL org.opencontainers.image.version=\"1.0\"\n", - "LABEL org.nvidia.holoscan=\"2.9.0\"\n", + "LABEL org.nvidia.holoscan=\"3.1.0\"\n", "\n", - "LABEL org.monai.deploy.app-sdk=\"2.0.0\"\n", + "LABEL org.monai.deploy.app-sdk=\"3.0.0\"\n", "\n", "ENV HOLOSCAN_INPUT_PATH=/var/holoscan/input\n", "ENV HOLOSCAN_OUTPUT_PATH=/var/holoscan/output\n", @@ -1554,7 +1539,7 @@ "ENV HOLOSCAN_APP_MANIFEST_PATH=/etc/holoscan/app.json\n", "ENV HOLOSCAN_PKG_MANIFEST_PATH=/etc/holoscan/pkg.json\n", "ENV HOLOSCAN_LOGS_PATH=/var/holoscan/logs\n", - "ENV HOLOSCAN_VERSION=2.9.0\n", + "ENV HOLOSCAN_VERSION=3.1.0\n", "\n", "\n", "\n", @@ -1613,7 +1598,7 @@ "# Install MONAI Deploy App SDK\n", "\n", "# Install MONAI Deploy from PyPI org\n", - "RUN pip install monai-deploy-app-sdk==2.0.0\n", + "RUN pip install monai-deploy-app-sdk==3.0.0\n", "\n", "\n", "COPY ./models /opt/holoscan/models\n", @@ -1629,7 +1614,7 @@ "ENTRYPOINT [\"/var/holoscan/tools\"]\n", "=========== End Dockerfile ===========\n", "\n", - "[2025-01-29 15:00:12,672] [INFO] (packager.builder) - \n", + "[2025-04-22 12:15:36,294] [INFO] (packager.builder) - \n", "===============================================================================\n", "Building image for: x64-workstation\n", " Architecture: linux/amd64\n", @@ -1637,22 +1622,21 @@ " Build Image: N/A\n", " Cache: Enabled\n", " Configuration: dgpu\n", - " Holoscan SDK Package: 2.9.0\n", + " Holoscan SDK Package: 3.1.0\n", " MONAI Deploy App SDK Package: N/A\n", " gRPC Health Probe: N/A\n", - " SDK Version: 2.9.0\n", + " SDK Version: 3.1.0\n", " SDK: monai-deploy\n", " Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", " Included features/dependencies: N/A\n", " \n", - "[2025-01-29 15:00:13,368] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", - "[2025-01-29 15:00:13,368] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", + "[2025-04-22 12:15:36,708] [INFO] (common) - Using existing Docker BuildKit builder `holoscan_app_builder`\n", + "[2025-04-22 12:15:36,708] [DEBUG] (packager.builder) - Building Holoscan Application Package: tag=my_app-x64-workstation-dgpu-linux-amd64:1.0\n", "#0 building with \"holoscan_app_builder\" instance using docker-container driver\n", "\n", "#1 [internal] load build definition from Dockerfile\n", - "#1 transferring dockerfile:\n", - "#1 transferring dockerfile: 4.55kB 0.0s done\n", - "#1 DONE 0.4s\n", + "#1 transferring dockerfile: 4.55kB done\n", + "#1 DONE 0.1s\n", "\n", "#2 [auth] nvidia/cuda:pull token for nvcr.io\n", "#2 DONE 0.0s\n", @@ -1670,401 +1654,234 @@ "#6 [internal] load build context\n", "#6 DONE 0.0s\n", "\n", - "#7 importing cache manifest from local:16203137030623613086\n", + "#7 importing cache manifest from local:2851983977013277839\n", "#7 inferred cache manifest type: application/vnd.oci.image.index.v1+json done\n", "#7 DONE 0.0s\n", "\n", "#8 [base 1/2] FROM nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186\n", "#8 resolve nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04@sha256:22fc009e5cea0b8b91d94c99fdd419d2366810b5ea835e47b8343bc15800c186 0.0s done\n", - "#8 DONE 0.0s\n", + "#8 DONE 0.1s\n", "\n", "#5 importing cache manifest from nvcr.io/nvidia/cuda:12.6.0-runtime-ubuntu22.04\n", "#5 inferred cache manifest type: application/vnd.docker.distribution.manifest.list.v2+json done\n", - "#5 DONE 0.4s\n", + "#5 DONE 0.7s\n", "\n", "#6 [internal] load build context\n", - "#6 transferring context: 635.92MB 4.4s done\n", - "#6 DONE 4.6s\n", + "#6 transferring context: 635.92MB 3.7s done\n", + "#6 DONE 3.7s\n", "\n", - "#9 [release 8/18] RUN chmod +x /var/holoscan/tools\n", + "#9 [release 7/18] COPY ./tools /var/holoscan/tools\n", "#9 CACHED\n", "\n", - "#10 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", + "#10 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", "#10 CACHED\n", "\n", - "#11 [release 6/18] WORKDIR /var/holoscan\n", + "#11 [release 8/18] RUN chmod +x /var/holoscan/tools\n", "#11 CACHED\n", "\n", "#12 [release 3/18] RUN groupadd -f -g 1000 holoscan\n", "#12 CACHED\n", "\n", - "#13 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", + "#13 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", "#13 CACHED\n", "\n", - "#14 [base 2/2] RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl jq && rm -rf /var/lib/apt/lists/*\n", + "#14 [release 6/18] WORKDIR /var/holoscan\n", "#14 CACHED\n", "\n", - "#15 [release 7/18] COPY ./tools /var/holoscan/tools\n", + "#15 [release 2/18] RUN apt update && apt-get install -y --no-install-recommends --no-install-suggests python3-minimal=3.10.6-1~22.04 libpython3-stdlib=3.10.6-1~22.04 python3=3.10.6-1~22.04 python3-venv=3.10.6-1~22.04 python3-pip=22.0.2+dfsg-* && rm -rf /var/lib/apt/lists/*\n", "#15 CACHED\n", "\n", - "#16 [release 9/18] WORKDIR /var/holoscan\n", + "#16 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", "#16 CACHED\n", "\n", - "#17 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#17 [release 5/18] RUN chown -R holoscan /var/holoscan && chown -R holoscan /var/holoscan/input && chown -R holoscan /var/holoscan/output\n", "#17 CACHED\n", "\n", - "#18 [release 4/18] RUN useradd -rm -d /home/holoscan -s /bin/bash -g 1000 -G sudo -u 1000 holoscan\n", + "#18 [release 9/18] WORKDIR /var/holoscan\n", "#18 CACHED\n", "\n", - "#19 [release 1/18] RUN mkdir -p /etc/holoscan/ && mkdir -p /opt/holoscan/ && mkdir -p /var/holoscan && mkdir -p /opt/holoscan/app && mkdir -p /var/holoscan/input && mkdir -p /var/holoscan/output\n", - "#19 CACHED\n", + "#19 [release 10/18] COPY ./pip/requirements.txt /tmp/requirements.txt\n", + "#19 DONE 4.0s\n", "\n", "#20 [release 11/18] RUN pip install --upgrade pip\n", - "#20 CACHED\n", + "#20 0.851 Defaulting to user installation because normal site-packages is not writeable\n", + "#20 0.897 Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)\n", + "#20 1.075 Collecting pip\n", + "#20 1.173 Downloading pip-25.0.1-py3-none-any.whl (1.8 MB)\n", + "#20 1.340 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 11.4 MB/s eta 0:00:00\n", + "#20 1.372 Installing collected packages: pip\n", + "#20 2.121 Successfully installed pip-25.0.1\n", + "#20 DONE 2.3s\n", "\n", "#21 [release 12/18] RUN pip install --no-cache-dir --user -r /tmp/requirements.txt\n", - "#21 1.022 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", - "#21 1.037 Downloading highdicom-0.24.0-py3-none-any.whl.metadata (4.7 kB)\n", - "#21 1.121 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", - "#21 1.127 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 1.262 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", - "#21 1.267 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", - "#21 1.541 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.546 Downloading numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", - "#21 1.564 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", - "#21 1.570 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", - "#21 1.579 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", - "#21 1.627 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", - "#21 1.631 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", - "#21 1.662 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", - "#21 1.667 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", - "#21 1.682 Collecting holoscan>=2.9.0 (from -r /tmp/requirements.txt (line 9))\n", - "#21 1.686 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (7.3 kB)\n", - "#21 1.823 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.827 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (9.1 kB)\n", - "#21 1.847 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.852 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 1.871 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 1.874 Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)\n", - "#21 1.883 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", - "#21 1.886 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", - "#21 1.917 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.922 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", - "#21 1.982 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", - "#21 1.986 Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n", - "#21 2.023 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.027 Downloading filelock-3.17.0-py3-none-any.whl.metadata (2.9 kB)\n", - "#21 2.066 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.071 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", - "#21 2.103 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.110 Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)\n", - "#21 2.137 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.141 Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n", - "#21 2.219 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.223 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.235 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.240 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.247 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.251 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.271 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.276 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.287 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.291 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.301 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.304 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.313 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.317 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.325 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.328 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.339 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.342 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", - "#21 2.348 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.351 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", - "#21 2.359 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.363 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", - "#21 2.377 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.382 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", - "#21 2.396 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.401 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", - "#21 2.418 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.423 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", - "#21 2.445 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.450 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", - "#21 2.488 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 2.492 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", - "#21 2.502 Requirement already satisfied: pip>22.0.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9)) (25.0)\n", - "#21 2.517 Collecting cupy-cuda12x<14.0,>=12.2 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.523 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl.metadata (2.7 kB)\n", - "#21 2.564 Collecting cloudpickle<4.0,>=3.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.568 Downloading cloudpickle-3.1.1-py3-none-any.whl.metadata (7.1 kB)\n", - "#21 2.669 Collecting python-on-whales<1.0,>=0.60.1 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.673 Downloading python_on_whales-0.75.1-py3-none-any.whl.metadata (18 kB)\n", - "#21 2.707 Collecting pyyaml<7.0,>=6.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.711 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)\n", - "#21 2.742 Collecting requests<3.0,>=2.31.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.748 Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", - "#21 2.862 Collecting psutil<7.0,>=6.0.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.867 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n", - "#21 2.884 Collecting wheel-axle-runtime<1.0 (from holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.889 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl.metadata (8.1 kB)\n", - "#21 2.939 Collecting fastrlock>=0.5 (from cupy-cuda12x<14.0,>=12.2->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 2.946 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl.metadata (7.7 kB)\n", - "#21 3.034 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", - "#21 3.040 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", - "#21 3.057 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", - "#21 3.058 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", - "#21 3.064 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.074 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", - "#21 3.266 Collecting pydantic!=2.0.*,<3,>=2 (from python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.271 Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)\n", - "#21 3.394 Collecting charset-normalizer<4,>=2 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.398 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", - "#21 3.417 Collecting idna<4,>=2.5 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.426 Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", - "#21 3.479 Collecting urllib3<3,>=1.21.1 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.484 Downloading urllib3-2.3.0-py3-none-any.whl.metadata (6.5 kB)\n", - "#21 3.515 Collecting certifi>=2017.4.17 (from requests<3.0,>=2.31.0->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.520 Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB)\n", - "#21 3.578 Collecting annotated-types>=0.6.0 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 3.583 Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", - "#21 4.171 Collecting pydantic-core==2.27.2 (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan>=2.9.0->-r /tmp/requirements.txt (line 9))\n", - "#21 4.175 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)\n", - "#21 4.199 Downloading highdicom-0.24.0-py3-none-any.whl (1.1 MB)\n", - "#21 4.216 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 99.0 MB/s eta 0:00:00\n", - "#21 4.222 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", - "#21 4.240 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 106.6 MB/s eta 0:00:00\n", - "#21 4.246 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", - "#21 4.277 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 116.6 MB/s eta 0:00:00\n", - "#21 4.284 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "#21 4.443 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 117.0 MB/s eta 0:00:00\n", - "#21 4.453 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", - "#21 4.475 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 119.4 MB/s eta 0:00:00\n", - "#21 4.482 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", - "#21 5.193 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 74.2 MB/s eta 0:00:00\n", - "#21 5.203 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", - "#21 12.95 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 95.8 MB/s eta 0:00:00\n", - "#21 12.96 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", - "#21 16.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 106.8 MB/s eta 0:00:00\n", - "#21 16.34 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", - "#21 16.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 117.7 MB/s eta 0:00:00\n", - "#21 16.47 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", - "#21 16.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 117.0 MB/s eta 0:00:00\n", - "#21 16.69 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", - "#21 16.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 148.8 MB/s eta 0:00:00\n", - "#21 16.71 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", - "#21 23.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 104.7 MB/s eta 0:00:00\n", - "#21 23.30 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", - "#21 25.14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 115.6 MB/s eta 0:00:00\n", - "#21 25.14 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", - "#21 25.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 116.8 MB/s eta 0:00:00\n", - "#21 25.64 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", - "#21 26.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 114.0 MB/s eta 0:00:00\n", - "#21 26.77 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", - "#21 28.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 110.3 MB/s eta 0:00:00\n", - "#21 28.66 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", - "#21 30.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 78.8 MB/s eta 0:00:00\n", - "#21 30.58 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", - "#21 32.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 117.2 MB/s eta 0:00:00\n", - "#21 32.20 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", - "#21 32.39 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.1 MB/s eta 0:00:00\n", - "#21 32.39 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", - "#21 32.40 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", - "#21 32.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 113.4 MB/s eta 0:00:00\n", - "#21 32.47 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", - "#21 35.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 92.7 MB/s eta 0:00:00\n", - "#21 35.21 Downloading holoscan-2.9.0-cp310-cp310-manylinux_2_35_x86_64.whl (41.1 MB)\n", - "#21 35.74 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 77.7 MB/s eta 0:00:00\n", - "#21 35.75 Downloading cloudpickle-3.1.1-py3-none-any.whl (20 kB)\n", - "#21 35.76 Downloading cupy_cuda12x-13.3.0-cp310-cp310-manylinux2014_x86_64.whl (90.6 MB)\n", - "#21 37.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 MB 68.2 MB/s eta 0:00:00\n", - "#21 37.10 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", - "#21 37.10 Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)\n", - "#21 37.11 Downloading packaging-24.2-py3-none-any.whl (65 kB)\n", - "#21 37.11 Downloading pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", - "#21 37.16 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 116.4 MB/s eta 0:00:00\n", - "#21 37.16 Downloading psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (287 kB)\n", - "#21 37.17 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", - "#21 37.20 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 119.3 MB/s eta 0:00:00\n", - "#21 37.21 Downloading python_on_whales-0.75.1-py3-none-any.whl (114 kB)\n", - "#21 37.22 Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)\n", - "#21 37.24 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 115.0 MB/s eta 0:00:00\n", - "#21 37.25 Downloading requests-2.32.3-py3-none-any.whl (64 kB)\n", - "#21 37.25 Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)\n", - "#21 37.26 Downloading wheel_axle_runtime-0.0.6-py3-none-any.whl (14 kB)\n", - "#21 37.26 Downloading filelock-3.17.0-py3-none-any.whl (16 kB)\n", - "#21 37.27 Downloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n", - "#21 37.28 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", - "#21 37.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 118.4 MB/s eta 0:00:00\n", - "#21 37.30 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB)\n", - "#21 37.31 Downloading charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (146 kB)\n", - "#21 37.31 Downloading fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl (53 kB)\n", - "#21 37.32 Downloading idna-3.10-py3-none-any.whl (70 kB)\n", - "#21 37.32 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", - "#21 37.33 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", - "#21 37.34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 168.9 MB/s eta 0:00:00\n", - "#21 37.34 Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)\n", - "#21 37.35 Downloading pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)\n", - "#21 37.37 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 123.9 MB/s eta 0:00:00\n", - "#21 37.38 Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)\n", - "#21 37.38 Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", - "#21 50.73 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, fastrlock, urllib3, typing-extensions, sympy, pyyaml, pydicom, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, idna, fsspec, filelock, cloudpickle, charset-normalizer, certifi, annotated-types, wheel-axle-runtime, requests, pyjpegls, pydantic-core, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, cupy-cuda12x, pydantic, nvidia-cusolver-cu12, highdicom, torch, python-on-whales, monai, holoscan\n", - "#21 120.9 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 annotated-types-0.7.0 certifi-2024.12.14 charset-normalizer-3.4.1 cloudpickle-3.1.1 cupy-cuda12x-13.3.0 fastrlock-0.8.3 filelock-3.17.0 fsspec-2024.12.0 highdicom-0.24.0 holoscan-2.9.0 idna-3.10 importlib-resources-6.5.2 jinja2-3.1.5 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-24.2 pillow-11.1.0 psutil-6.1.1 pydantic-2.10.6 pydantic-core-2.27.2 pydicom-3.0.1 pyjpegls-1.4.0 python-on-whales-0.75.1 pyyaml-6.0.2 requests-2.32.3 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.12.2 urllib3-2.3.0 wheel-axle-runtime-0.0.6\n", - "#21 DONE 122.3s\n", - "\n", - "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==2.0.0\n", - "#22 1.371 Defaulting to user installation because normal site-packages is not writeable\n", - "#22 1.566 Collecting monai-deploy-app-sdk==2.0.0\n", - "#22 1.620 Downloading monai_deploy_app_sdk-2.0.0-py3-none-any.whl (132 kB)\n", - "#22 1.653 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.6/132.6 KB 4.9 MB/s eta 0:00:00\n", - "#22 1.673 Requirement already satisfied: numpy>=1.21.6 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (1.26.4)\n", - "#22 1.735 Collecting colorama>=0.4.1\n", - "#22 1.742 Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", - "#22 1.803 Collecting typeguard>=3.0.0\n", - "#22 1.807 Downloading typeguard-4.4.1-py3-none-any.whl (35 kB)\n", - "#22 1.817 Requirement already satisfied: holoscan~=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from monai-deploy-app-sdk==2.0.0) (2.9.0)\n", - "#22 1.833 Requirement already satisfied: psutil<7.0,>=6.0.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.1.1)\n", - "#22 1.834 Requirement already satisfied: wheel-axle-runtime<1.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.0.6)\n", - "#22 1.835 Requirement already satisfied: Jinja2<4.0,>=3.1.3 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.5)\n", - "#22 1.836 Requirement already satisfied: requests<3.0,>=2.31.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.32.3)\n", - "#22 1.837 Requirement already satisfied: packaging>=23.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (24.2)\n", - "#22 1.838 Requirement already satisfied: cloudpickle<4.0,>=3.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.1.1)\n", - "#22 1.839 Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (6.0.2)\n", - "#22 1.839 Requirement already satisfied: python-on-whales<1.0,>=0.60.1 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.75.1)\n", - "#22 1.840 Requirement already satisfied: cupy-cuda12x<14.0,>=12.2 in /home/holoscan/.local/lib/python3.10/site-packages (from holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (13.3.0)\n", - "#22 1.911 Collecting pip>22.0.2\n", - "#22 1.924 Using cached pip-25.0-py3-none-any.whl (1.8 MB)\n", - "#22 1.949 Requirement already satisfied: typing-extensions>=4.10.0 in /home/holoscan/.local/lib/python3.10/site-packages (from typeguard>=3.0.0->monai-deploy-app-sdk==2.0.0) (4.12.2)\n", - "#22 1.964 Requirement already satisfied: fastrlock>=0.5 in /home/holoscan/.local/lib/python3.10/site-packages (from cupy-cuda12x<14.0,>=12.2->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.8.3)\n", - "#22 1.968 Requirement already satisfied: MarkupSafe>=2.0 in /home/holoscan/.local/lib/python3.10/site-packages (from Jinja2<4.0,>=3.1.3->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.0.2)\n", - "#22 1.994 Requirement already satisfied: pydantic!=2.0.*,<3,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.10.6)\n", - "#22 2.005 Requirement already satisfied: certifi>=2017.4.17 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2024.12.14)\n", - "#22 2.007 Requirement already satisfied: idna<4,>=2.5 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.10)\n", - "#22 2.008 Requirement already satisfied: urllib3<3,>=1.21.1 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.3.0)\n", - "#22 2.009 Requirement already satisfied: charset-normalizer<4,>=2 in /home/holoscan/.local/lib/python3.10/site-packages (from requests<3.0,>=2.31.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.4.1)\n", - "#22 2.018 Requirement already satisfied: filelock in /home/holoscan/.local/lib/python3.10/site-packages (from wheel-axle-runtime<1.0->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (3.17.0)\n", - "#22 2.044 Requirement already satisfied: pydantic-core==2.27.2 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (2.27.2)\n", - "#22 2.045 Requirement already satisfied: annotated-types>=0.6.0 in /home/holoscan/.local/lib/python3.10/site-packages (from pydantic!=2.0.*,<3,>=2->python-on-whales<1.0,>=0.60.1->holoscan~=2.0->monai-deploy-app-sdk==2.0.0) (0.7.0)\n", - "#22 2.491 Installing collected packages: typeguard, pip, colorama, monai-deploy-app-sdk\n", - "#22 3.518 Successfully installed colorama-0.4.6 monai-deploy-app-sdk-2.0.0 pip-25.0 typeguard-4.4.1\n", - "#22 DONE 3.7s\n", - "\n", - "#23 [release 14/18] COPY ./models /opt/holoscan/models\n", - "#23 DONE 2.4s\n", - "\n", - "#24 [release 15/18] COPY ./map/app.json /etc/holoscan/app.json\n", - "#24 DONE 0.1s\n", - "\n", - "#25 [release 16/18] COPY ./app.config /var/holoscan/app.yaml\n", - "#25 DONE 0.1s\n", - "\n", - "#26 [release 17/18] COPY ./map/pkg.json /etc/holoscan/pkg.json\n", - "#26 DONE 0.1s\n", - "\n", - "#27 [release 18/18] COPY ./app /opt/holoscan/app\n", - "#27 DONE 0.1s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 exporting layers\n", - "#28 exporting layers 206.4s done\n", - "#28 exporting manifest sha256:7796b1f150f7b83d9b887b3a8fc46ac5edde925a0aae4b3502d7637952da2aca 0.0s done\n", - "#28 exporting config sha256:b9c42a576652b4a8d6579e9068e22d8fd09cdc9906a5b6d514c7e958be6f7862 0.0s done\n", - "#28 sending tarball\n", - "#28 ...\n", - "\n", - "#29 importing to docker\n", - "#29 loading layer 4e7654462151 557.06kB / 3.34GB\n", - "#29 loading layer 4e7654462151 140.38MB / 3.34GB 6.4s\n", - "#29 loading layer 4e7654462151 350.39MB / 3.34GB 12.7s\n", - "#29 loading layer 4e7654462151 549.26MB / 3.34GB 18.9s\n", - "#29 loading layer 4e7654462151 783.78MB / 3.34GB 23.1s\n", - "#29 loading layer 4e7654462151 968.16MB / 3.34GB 27.2s\n", - "#29 loading layer 4e7654462151 1.19GB / 3.34GB 31.3s\n", - "#29 loading layer 4e7654462151 1.37GB / 3.34GB 35.3s\n", - "#29 loading layer 4e7654462151 1.55GB / 3.34GB 39.4s\n", - "#29 loading layer 4e7654462151 1.80GB / 3.34GB 43.4s\n", - "#29 loading layer 4e7654462151 2.02GB / 3.34GB 47.5s\n", - "#29 loading layer 4e7654462151 2.27GB / 3.34GB 51.6s\n", - "#29 loading layer 4e7654462151 2.31GB / 3.34GB 58.3s\n", - "#29 loading layer 4e7654462151 2.43GB / 3.34GB 64.7s\n", - "#29 loading layer 4e7654462151 2.62GB / 3.34GB 68.7s\n", - "#29 loading layer 4e7654462151 2.86GB / 3.34GB 72.9s\n", - "#29 loading layer 4e7654462151 3.04GB / 3.34GB 77.0s\n", - "#29 loading layer 4e7654462151 3.23GB / 3.34GB 83.2s\n", - "#29 loading layer 23ba8544cc7e 65.54kB / 3.82MB\n", - "#29 loading layer 2a706ddec870 557.06kB / 584.49MB\n", - "#29 loading layer 2a706ddec870 100.83MB / 584.49MB 2.1s\n", - "#29 loading layer 2a706ddec870 289.11MB / 584.49MB 4.1s\n", - "#29 loading layer 2a706ddec870 445.64MB / 584.49MB 6.2s\n", - "#29 loading layer 2a706ddec870 584.49MB / 584.49MB 8.3s\n", - "#29 loading layer 14707cfba07c 492B / 492B\n", - "#29 loading layer d97f86cb4552 313B / 313B\n", - "#29 loading layer 1684cea86f9e 324B / 324B\n", - "#29 loading layer 6a14ef597340 4.04kB / 4.04kB\n", - "#29 loading layer d97f86cb4552 313B / 313B 0.5s done\n", - "#29 loading layer 4e7654462151 3.29GB / 3.34GB 96.8s done\n", - "#29 loading layer 23ba8544cc7e 65.54kB / 3.82MB 9.6s done\n", - "#29 loading layer 2a706ddec870 584.49MB / 584.49MB 8.9s done\n", - "#29 loading layer 14707cfba07c 492B / 492B 0.5s done\n", - "#29 loading layer 1684cea86f9e 324B / 324B 0.4s done\n", - "#29 loading layer 6a14ef597340 4.04kB / 4.04kB 0.3s done\n", - "#29 DONE 96.8s\n", - "\n", - "#28 exporting to docker image format\n", - "#28 sending tarball 144.5s done\n", - "#28 DONE 351.0s\n", - "\n", - "#30 exporting cache to client directory\n", - "#30 preparing build cache for export\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542\n", - "#30 writing layer sha256:067153055e77a79b3715e3a56caac895ee686a2fa6cadc4423c28d2eb20f0542 done\n", - "#30 writing layer sha256:1a0d52c93099897b518eb6cc6cd0fa3d52ff733e8606b4d8c92675ba9e7101ff done\n", - "#30 writing layer sha256:234b866f57e0c5d555af2d87a1857a17ec4ac7e70d2dc6c31ff0a072a4607f24 done\n", - "#30 writing layer sha256:255905badeaa82f032e1043580eed8b745c19cd4a2cb7183883ee5a30f851d6d done\n", - "#30 writing layer sha256:3713021b02770a720dea9b54c03d0ed83e03a2ef5dce2898c56a327fee9a8bca done\n", - "#30 writing layer sha256:3a80776cdc9c9ef79bb38510849c9160f82462d346bf5a8bf29c811391b4e763 done\n", - "#30 writing layer sha256:440849e3569a74baf883d1a14010854807280727ba17c36f82beee5b7d5052b2 done\n", - "#30 writing layer sha256:46c9c54348df10b0d7700bf932d5de7dc5bf9ab91e685db7086e29e381ff8e12 done\n", - "#30 writing layer sha256:4ef542fe09116c53da73effaa3b0ebc83c3619f95ecea3bdd81b29c92ad0337f 0.0s done\n", - "#30 writing layer sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done\n", - "#30 writing layer sha256:53d193b4273e718bc4bed3199afbc347e3e9e143091139ed90456d0377788704\n", - "#30 writing layer sha256:53d193b4273e718bc4bed3199afbc347e3e9e143091139ed90456d0377788704 53.5s done\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0\n", - "#30 writing layer sha256:67b3546b211deefd67122e680c0932886e0b3c6bd6ae0665e3ab25d2d9f0cda0 done\n", - "#30 writing layer sha256:695ba418a525cecd1c5442c010ea5f070327d38dfa8f533e63ae845fc3660be8 done\n", - "#30 writing layer sha256:70d632523e65ac9d5b79c4b1edf7ded894919e27b1af66b6fed294a414b875ab 0.0s done\n", - "#30 writing layer sha256:90d2434bd2896a650e2f9268e355424f72f461e002af093a3e88f9ab55e8e980 0.0s done\n", - "#30 writing layer sha256:9206dd7b04116a7dc5c43818efa3d57c3d9c2bab68366d1098eac0743dbd231b\n", - "#30 writing layer sha256:9206dd7b04116a7dc5c43818efa3d57c3d9c2bab68366d1098eac0743dbd231b 10.4s done\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885\n", - "#30 writing layer sha256:980c13e156f90218b216bc6b0430472bbda71c0202804d350c0e16ef02075885 done\n", - "#30 writing layer sha256:9f4298c73aaf415f67893215f4cfc6af9688163dfd98172a08fb2d13177eb027 0.0s done\n", - "#30 writing layer sha256:a7292bbf42d93ed9fca9e2ff7e5283d2e7f737dad14092919db7645628bb0838 done\n", - "#30 writing layer sha256:a8560dc90723760d8d4daf42b22f7760b034c87e9348697c113118b992d830ca done\n", - "#30 writing layer sha256:ac52600be001236a2c291a4c5902c915bf5ec9d2441c06d2a54c587b76345847 done\n", - "#30 writing layer sha256:bc25d810fc1fd99656c1b07d422e88cdb896508730175bc3ec187b79f3787044 done\n", - "#30 writing layer sha256:be0dad9c160128582482df5e64337c99c213a48988d5d12d453bd03bc2a4c1b1 done\n", - "#30 writing layer sha256:c44760856749b1b70a3f10d166baa2075f84fe4147e20efdc97ae6b8373575b0 0.1s done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd\n", - "#30 preparing build cache for export 64.3s done\n", - "#30 writing layer sha256:c94af7742e07c9041104260b79637c243ef8dd25eb4241f06ef1a3899a99f2bd done\n", - "#30 writing layer sha256:d339273dfb7fc3b7fd896d3610d360ab9a09ab33a818093cb73b4be7639b6e99 done\n", - "#30 writing layer sha256:efc9014e2a4cb1e133b80bb4f047e9141e98685eb95b8d2471a8e35b86643e31 done\n", - "#30 writing config sha256:826f5efd34c54c319233472ed2d0b701e48d72c65ac5340a90c4583be4465fa7 0.0s done\n", - "#30 writing cache manifest sha256:b26c61f9f724af74f9758287216e114370ea6a82f8f653c7988e3f6dae5b164d 0.0s done\n", - "#30 DONE 64.3s\n", - "[2025-01-29 15:09:25,383] [INFO] (packager) - Build Summary:\n", + "#21 0.675 Collecting highdicom>=0.18.2 (from -r /tmp/requirements.txt (line 1))\n", + "#21 0.728 Downloading highdicom-0.25.1-py3-none-any.whl.metadata (5.0 kB)\n", + "#21 0.822 Collecting monai>=1.0 (from -r /tmp/requirements.txt (line 2))\n", + "#21 0.835 Downloading monai-1.4.0-py3-none-any.whl.metadata (11 kB)\n", + "#21 0.931 Collecting nibabel>=3.2.1 (from -r /tmp/requirements.txt (line 3))\n", + "#21 0.961 Downloading nibabel-5.3.2-py3-none-any.whl.metadata (9.1 kB)\n", + "#21 1.149 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.161 Downloading numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "#21 1.211 Collecting pydicom>=2.3.0 (from -r /tmp/requirements.txt (line 5))\n", + "#21 1.224 Downloading pydicom-3.0.1-py3-none-any.whl.metadata (9.4 kB)\n", + "#21 1.233 Requirement already satisfied: setuptools>=59.5.0 in /usr/lib/python3/dist-packages (from -r /tmp/requirements.txt (line 6)) (59.6.0)\n", + "#21 1.259 Collecting SimpleITK>=2.0.0 (from -r /tmp/requirements.txt (line 7))\n", + "#21 1.272 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)\n", + "#21 1.310 Collecting torch>=1.12.0 (from -r /tmp/requirements.txt (line 8))\n", + "#21 1.323 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl.metadata (28 kB)\n", + "#21 1.489 Collecting pillow>=8.3 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.500 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (8.9 kB)\n", + "#21 1.605 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.619 Downloading pyjpegls-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 1.641 Collecting typing-extensions>=4.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 1.652 Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)\n", + "#21 1.670 Collecting numpy>=1.21.6 (from -r /tmp/requirements.txt (line 4))\n", + "#21 1.681 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "#21 1.746 Collecting importlib-resources>=5.12 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.759 Downloading importlib_resources-6.5.2-py3-none-any.whl.metadata (3.9 kB)\n", + "#21 1.817 Collecting packaging>=20 (from nibabel>=3.2.1->-r /tmp/requirements.txt (line 3))\n", + "#21 1.828 Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)\n", + "#21 1.857 Collecting filelock (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.869 Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 1.897 Collecting networkx (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.909 Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "#21 1.929 Collecting jinja2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.940 Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "#21 1.966 Collecting fsspec (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 1.979 Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n", + "#21 2.031 Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.044 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.060 Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.073 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.097 Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.111 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.126 Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.140 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.160 Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.212 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.232 Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.245 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.268 Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.282 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.298 Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.312 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.331 Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.344 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "#21 2.359 Collecting nvidia-cusparselt-cu12==0.6.2 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.373 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", + "#21 2.387 Collecting nvidia-nccl-cu12==2.21.5 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.399 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "#21 2.416 Collecting nvidia-nvtx-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.429 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.7 kB)\n", + "#21 2.445 Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.457 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "#21 2.483 Collecting triton==3.2.0 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.497 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.4 kB)\n", + "#21 2.525 Collecting sympy==1.13.1 (from torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.537 Downloading sympy-1.13.1-py3-none-any.whl.metadata (12 kB)\n", + "#21 2.566 Collecting mpmath<1.4,>=1.1.0 (from sympy==1.13.1->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.577 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n", + "#21 2.597 INFO: pip is looking at multiple versions of pyjpegls to determine which version is compatible with other requirements. This could take a while.\n", + "#21 2.597 Collecting pyjpegls>=1.0.0 (from highdicom>=0.18.2->-r /tmp/requirements.txt (line 1))\n", + "#21 2.609 Downloading pyjpegls-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.622 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.5 kB)\n", + "#21 2.679 Collecting MarkupSafe>=2.0 (from jinja2->torch>=1.12.0->-r /tmp/requirements.txt (line 8))\n", + "#21 2.690 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "#21 2.717 Downloading highdicom-0.25.1-py3-none-any.whl (1.1 MB)\n", + "#21 3.009 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 4.1 MB/s eta 0:00:00\n", + "#21 3.027 Downloading monai-1.4.0-py3-none-any.whl (1.5 MB)\n", + "#21 3.342 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 5.3 MB/s eta 0:00:00\n", + "#21 3.356 Downloading nibabel-5.3.2-py3-none-any.whl (3.3 MB)\n", + "#21 3.851 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 6.7 MB/s eta 0:00:00\n", + "#21 3.867 Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "#21 5.943 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 8.8 MB/s eta 0:00:00\n", + "#21 5.957 Downloading pydicom-3.0.1-py3-none-any.whl (2.4 MB)\n", + "#21 6.217 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 9.5 MB/s eta 0:00:00\n", + "#21 6.232 Downloading SimpleITK-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.4 MB)\n", + "#21 16.76 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.4/52.4 MB 5.0 MB/s eta 0:00:00\n", + "#21 16.77 Downloading torch-2.6.0-cp310-cp310-manylinux1_x86_64.whl (766.7 MB)\n", + "#21 30.05 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 766.7/766.7 MB 106.7 MB/s eta 0:00:00\n", + "#21 30.07 Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "#21 33.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 109.6 MB/s eta 0:00:00\n", + "#21 33.34 Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "#21 33.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 113.6 MB/s eta 0:00:00\n", + "#21 33.48 Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "#21 33.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 113.8 MB/s eta 0:00:00\n", + "#21 33.71 Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "#21 33.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 194.7 MB/s eta 0:00:00\n", + "#21 33.74 Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "#21 43.59 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 77.9 MB/s eta 0:00:00\n", + "#21 43.61 Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "#21 45.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 96.9 MB/s eta 0:00:00\n", + "#21 45.81 Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "#21 46.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 109.8 MB/s eta 0:00:00\n", + "#21 46.34 Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "#21 47.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 116.1 MB/s eta 0:00:00\n", + "#21 47.46 Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "#21 49.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 111.0 MB/s eta 0:00:00\n", + "#21 49.35 Downloading nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl (150.1 MB)\n", + "#21 50.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.1/150.1 MB 112.2 MB/s eta 0:00:00\n", + "#21 50.70 Downloading nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl (188.7 MB)\n", + "#21 52.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.7/188.7 MB 117.0 MB/s eta 0:00:00\n", + "#21 52.34 Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "#21 52.52 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 117.9 MB/s eta 0:00:00\n", + "#21 52.53 Downloading nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (99 kB)\n", + "#21 52.54 Downloading sympy-1.13.1-py3-none-any.whl (6.2 MB)\n", + "#21 52.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2/6.2 MB 122.9 MB/s eta 0:00:00\n", + "#21 52.62 Downloading triton-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.1 MB)\n", + "#21 55.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253.1/253.1 MB 101.2 MB/s eta 0:00:00\n", + "#21 55.14 Downloading importlib_resources-6.5.2-py3-none-any.whl (37 kB)\n", + "#21 55.15 Downloading packaging-25.0-py3-none-any.whl (66 kB)\n", + "#21 55.17 Downloading pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.6 MB)\n", + "#21 55.21 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 113.8 MB/s eta 0:00:00\n", + "#21 55.30 Downloading pyjpegls-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)\n", + "#21 55.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 112.6 MB/s eta 0:00:00\n", + "#21 55.34 Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)\n", + "#21 55.35 Downloading filelock-3.18.0-py3-none-any.whl (16 kB)\n", + "#21 55.37 Downloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n", + "#21 55.38 Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "#21 55.40 Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "#21 55.42 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 115.7 MB/s eta 0:00:00\n", + "#21 55.43 Downloading MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)\n", + "#21 55.45 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "#21 55.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 183.2 MB/s eta 0:00:00\n", + "#21 63.66 Installing collected packages: triton, SimpleITK, nvidia-cusparselt-cu12, mpmath, typing-extensions, sympy, pydicom, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, importlib-resources, fsspec, filelock, pyjpegls, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nibabel, jinja2, nvidia-cusolver-cu12, highdicom, torch, monai\n", + "#21 126.4 Successfully installed MarkupSafe-3.0.2 SimpleITK-2.4.1 filelock-3.18.0 fsspec-2025.3.2 highdicom-0.25.1 importlib-resources-6.5.2 jinja2-3.1.6 monai-1.4.0 mpmath-1.3.0 networkx-3.4.2 nibabel-5.3.2 numpy-1.26.4 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-cusparselt-cu12-0.6.2 nvidia-nccl-cu12-2.21.5 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.4.127 packaging-25.0 pillow-11.2.1 pydicom-3.0.1 pyjpegls-1.4.0 sympy-1.13.1 torch-2.6.0 triton-3.2.0 typing-extensions-4.13.2\n", + "#21 DONE 127.8s\n", + "\n", + "#22 [release 13/18] RUN pip install monai-deploy-app-sdk==3.0.0\n", + "#22 0.957 Defaulting to user installation because normal site-packages is not writeable\n", + "#22 1.121 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "#22 1.240 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "#22 ERROR: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "------\n", + " > [release 13/18] RUN pip install monai-deploy-app-sdk==3.0.0:\n", + "0.957 Defaulting to user installation because normal site-packages is not writeable\n", + "1.121 ERROR: Could not find a version that satisfies the requirement monai-deploy-app-sdk==3.0.0 (from versions: 0.1.0a2, 0.1.0rc1, 0.1.0rc2, 0.1.0rc3, 0.1.0, 0.1.1rc1, 0.1.1, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 1.0.0, 2.0.0)\n", + "1.240 ERROR: No matching distribution found for monai-deploy-app-sdk==3.0.0\n", + "------\n", + "Dockerfile:137\n", + "--------------------\n", + " 135 | \n", + " 136 | # Install MONAI Deploy from PyPI org\n", + " 137 | >>> RUN pip install monai-deploy-app-sdk==3.0.0\n", + " 138 | \n", + " 139 | \n", + "--------------------\n", + "ERROR: failed to solve: process \"/bin/sh -c pip install monai-deploy-app-sdk==3.0.0\" did not complete successfully: exit code: 1\n", + "[2025-04-22 12:17:58,073] [INFO] (packager) - Build Summary:\n", "\n", "Platform: x64-workstation/dgpu\n", - " Status: Succeeded\n", - " Docker Tag: my_app-x64-workstation-dgpu-linux-amd64:1.0\n", - " Tarball: None\n" + " Status: Failure\n", + " Error: Error building image: see Docker output for additional details.\n", + " \n" ] } ], "source": [ "tag_prefix = \"my_app\"\n", "\n", - "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x64-workstation -l DEBUG" + "!monai-deploy package my_app -m {models_folder} -c my_app/app.yaml -t {tag_prefix}:1.0 --platform x86_64 -l DEBUG" ] }, { @@ -2083,7 +1900,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "my_app-x64-workstation-dgpu-linux-amd64 1.0 b9c42a576652 6 minutes ago 9.26GB\n" + "my_app-x64-workstation-dgpu-linux-amd64 1.0 aacceda07071 2 hours ago 9.25GB\n" ] } ], @@ -2141,7 +1958,7 @@ " },\n", " \"readiness\": null,\n", " \"sdk\": \"monai-deploy\",\n", - " \"sdkVersion\": \"2.0.0\",\n", + " \"sdkVersion\": \"0.5.1\",\n", " \"timeout\": 0,\n", " \"version\": 1,\n", " \"workingDirectory\": \"/var/holoscan\"\n", @@ -2153,29 +1970,28 @@ " \"applicationRoot\": \"/opt/holoscan/app\",\n", " \"modelRoot\": \"/opt/holoscan/models\",\n", " \"models\": {\n", - " \"spleen_ct\": \"/opt/holoscan/models/spleen_ct\",\n", - " \"pancreas_ct_dints\": \"/opt/holoscan/models/pancreas_ct_dints\"\n", + " \"model\": \"/opt/holoscan/models/model\"\n", " },\n", " \"resources\": {\n", " \"cpu\": 1,\n", " \"gpu\": 1,\n", " \"memory\": \"1Gi\",\n", - " \"gpuMemory\": \"10Gi\"\n", + " \"gpuMemory\": \"6Gi\"\n", " },\n", " \"version\": 1,\n", " \"platformConfig\": \"dgpu\"\n", "}\n", "\n", - "2025-01-29 23:09:29 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", + "2025-04-22 19:18:00 [INFO] Copying application from /opt/holoscan/app to /var/run/holoscan/export/app\n", "\n", - "2025-01-29 23:09:29 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", - "2025-01-29 23:09:29 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", - "2025-01-29 23:09:29 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", + "2025-04-22 19:18:00 [INFO] Copying application manifest file from /etc/holoscan/app.json to /var/run/holoscan/export/config/app.json\n", + "2025-04-22 19:18:00 [INFO] Copying pkg manifest file from /etc/holoscan/pkg.json to /var/run/holoscan/export/config/pkg.json\n", + "2025-04-22 19:18:00 [INFO] Copying application configuration from /var/holoscan/app.yaml to /var/run/holoscan/export/config/app.yaml\n", "\n", - "2025-01-29 23:09:29 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", + "2025-04-22 19:18:00 [INFO] Copying models from /opt/holoscan/models to /var/run/holoscan/export/models\n", "\n", - "2025-01-29 23:09:31 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", - "2025-01-29 23:09:31 [INFO] '/opt/holoscan/docs/' cannot be found.\n", + "2025-04-22 19:18:00 [INFO] Copying documentation from /opt/holoscan/docs/ to /var/run/holoscan/export/docs\n", + "2025-04-22 19:18:00 [INFO] '/opt/holoscan/docs/' cannot be found.\n", "\n", "app config models\n" ] @@ -2207,23 +2023,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "[2025-01-29 15:09:34,608] [INFO] (runner) - Checking dependencies...\n", - "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", + "[2025-04-22 12:18:02,444] [INFO] (runner) - Checking dependencies...\n", + "[2025-04-22 12:18:02,444] [INFO] (runner) - --> Verifying if \"docker\" is installed...\n", "\n", - "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", + "[2025-04-22 12:18:02,445] [INFO] (runner) - --> Verifying if \"docker-buildx\" is installed...\n", "\n", - "[2025-01-29 15:09:34,608] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", + "[2025-04-22 12:18:02,445] [INFO] (runner) - --> Verifying if \"my_app-x64-workstation-dgpu-linux-amd64:1.0\" is available...\n", "\n", - "[2025-01-29 15:09:34,693] [INFO] (runner) - Reading HAP/MAP manifest...\n", - "Successfully copied 2.56kB to /tmp/tmpy9h8ea88/app.json\n", - "Successfully copied 2.05kB to /tmp/tmpy9h8ea88/pkg.json\n", - "2e87441a06e4a01c5fdfaff50540f53f482fd9eed91ae31153adafbd852300e0\n", - "[2025-01-29 15:09:34,990] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", + "[2025-04-22 12:18:02,523] [INFO] (runner) - Reading HAP/MAP manifest...\n", + "Successfully copied 2.56kB to /tmp/tmprw2gvfwr/app.json\n", + "Successfully copied 2.05kB to /tmp/tmprw2gvfwr/pkg.json\n", + "991136f12d4255c8e8f7bdbf80acfad80770e774a5441551832ddc3d52c5c4cf\n", + "[2025-04-22 12:18:02,786] [INFO] (runner) - --> Verifying if \"nvidia-ctk\" is installed...\n", "\n", - "[2025-01-29 15:09:34,991] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", + "[2025-04-22 12:18:02,787] [INFO] (runner) - --> Verifying \"nvidia-ctk\" version...\n", "\n", - "[2025-01-29 15:09:35,353] [INFO] (common) - Launching container (65c9ea7f2024) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", - " container name: busy_buck\n", + "[2025-04-22 12:18:03,056] [INFO] (common) - Launching container (4ba4a525283c) using image 'my_app-x64-workstation-dgpu-linux-amd64:1.0'...\n", + " container name: zealous_mclaren\n", " host name: mingq-dt\n", " network: host\n", " user: 1000:1000\n", @@ -2233,137 +2049,109 @@ " shared memory size: 67108864\n", " devices: \n", " group_add: 44\n", - "2025-01-29 23:09:36 [INFO] Launching application python3 /opt/holoscan/app ...\n", + "2025-04-22 19:18:03 [INFO] Launching application python3 /opt/holoscan/app ...\n", "\n", - "[info] [fragment.cpp:599] Loading extensions from configs...\n", + "[info] [fragment.cpp:705] Loading extensions from configs...\n", "\n", - "[info] [gxf_executor.cpp:264] Creating context\n", + "[info] [gxf_executor.cpp:265] Creating context\n", "\n", - "[2025-01-29 23:09:42,422] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, argv=['/opt/holoscan/app'])\n", + "[2025-04-22 19:18:11,324] [INFO] (root) - Parsed args: Namespace(log_level=None, input=None, output=None, model=None, workdir=None, triton_server_netloc=None, argv=['/opt/holoscan/app'])\n", "\n", - "[2025-01-29 23:09:42,436] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan)\n", + "[2025-04-22 19:18:11,326] [INFO] (root) - AppContext object: AppContext(input_path=/var/holoscan/input, output_path=/var/holoscan/output, model_path=/opt/holoscan/models, workdir=/var/holoscan), triton_server_netloc=\n", "\n", - "[2025-01-29 23:09:42,440] [INFO] (root) - End compose\n", + "[2025-04-22 19:18:11,329] [INFO] (root) - End compose\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'input_folder'\n", + "[info] [gxf_executor.cpp:2396] Activating Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'dicom_study_list'\n", + "[info] [gxf_executor.cpp:2426] Running Graph...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[info] [gxf_executor.cpp:2428] Waiting for completion...\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[info] [greedy_scheduler.cpp:191] Scheduling 6 entities\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'image'\n", + "[2025-04-22 19:18:11,356] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", + "[2025-04-22 19:18:12,402] [INFO] (root) - Finding series for Selection named: CT Series\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'output_folder'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'study_selected_series_list'\n", - "\n", - "[info] [gxf_executor.cpp:1797] creating input IOSpec named 'seg_image'\n", - "\n", - "[info] [gxf_executor.cpp:2208] Activating Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2238] Running Graph...\n", - "\n", - "[info] [gxf_executor.cpp:2240] Waiting for completion...\n", + " # of series: 1\n", "\n", - "[info] [greedy_scheduler.cpp:191] Scheduling 7 entities\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 23:09:42,481] [INFO] (monai.deploy.operators.dicom_data_loader_operator.DICOMDataLoaderOperator) - No or invalid input path from the optional input port: None\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Finding series for Selection named: CT Series\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Searching study, : 1.3.6.1.4.1.14519.5.2.1.7085.2626.822645453932810382886582736291\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - " # of series: 1\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Working on series, instance UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute Modality value: CT\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - On attribute: 'StudyDescription' to match value: '(.*?)'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 23:09:43,496] [INFO] (root) - Series attribute StudyDescription value: CT ABDOMEN W IV CONTRAST\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - On attribute: 'Modality' to match value: '(?i)CT'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute Modality value: CT\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series Selection finalized.\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - On attribute: 'SeriesDescription' to match value: '(.*?)'\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series Description of selected DICOM Series for inference: ABD/PANC 3.0 B31f\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute SeriesDescription value: ABD/PANC 3.0 B31f\n", + "[2025-04-22 19:18:12,403] [INFO] (root) - Series Instance UID of selected DICOM Series for inference: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Series attribute string value did not match. Try regEx.\n", + "[2025-04-22 19:18:12,611] [INFO] (root) - Casting to float32\n", "\n", - "[2025-01-29 23:09:43,497] [INFO] (root) - Selected Series, UID: 1.3.6.1.4.1.14519.5.2.1.7085.2626.119403521930927333027265674239\n", - "\n", - "[2025-01-29 23:09:44,150] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/pancreas_ct_dints/model.ts\n", + "[2025-04-22 19:18:12,667] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/model/model.ts\n", "\n", "/home/holoscan/.local/lib/python3.10/site-packages/monai/bundle/reference_resolver.py:216: UserWarning: Detected deprecated name 'optional_packages_version' in configuration file, replacing with 'required_packages_version'.\n", "\n", " warnings.warn(\n", "\n", - "[2025-01-29 23:10:20,945] [INFO] (root) - Parsing from bundle_path: /opt/holoscan/models/spleen_ct/model.ts\n", + "[2025-04-22 19:18:16,253] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConversionOperator) - Output will be saved in file /var/holoscan/output/stl/spleen.stl.\n", "\n", - "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", + "[2025-04-22 19:18:17,650] [INFO] (monai.deploy.operators.stl_conversion_operator.SpatialImage) - 3D image\n", "\n", - " check_person_name(patient_name)\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 19:18:17,650] [INFO] (monai.deploy.operators.stl_conversion_operator.STLConverter) - Image ndarray shape:(204, 512, 512)\n", "\n", - "[2025-01-29 23:10:24,852] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", - "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", - "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", - "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "/home/holoscan/.local/lib/python3.10/site-packages/highdicom/base.py:163: UserWarning: The string \"C3N-00198\" is unlikely to represent the intended person name since it contains only a single component. Construct a person name according to the format in described in https://dicom.nema.org/dicom/2013/output/chtml/part05/sect_6.2.html#sect_6.2.1.2, or, in pydicom 2.2.0 or later, use the pydicom.valuerep.PersonName.from_named_components() method to construct the person name correctly. If a single-component name is really intended, add a trailing caret character to disambiguate the name.\n", "\n", - "[2025-01-29 23:10:24,853] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + " check_person_name(patient_name)\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy Image-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"Specimen\"\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy Patient-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 23:10:26,177] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"Patient\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Subject\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy Study-related attributes from dataset \"1.3.6.1.4.1.14519.5.2.1.7085.2626.936983343951485811186213470191\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", + "[2025-04-22 19:18:28,324] [INFO] (highdicom.base) - copy attributes of module \"General Study\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", + "[2025-04-22 19:18:28,325] [INFO] (highdicom.base) - copy attributes of module \"Patient Study\"\n", "\n", - "[2025-01-29 23:10:26,178] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", + "[2025-04-22 19:18:28,325] [INFO] (highdicom.base) - copy attributes of module \"Clinical Trial Study\"\n", "\n", "[info] [greedy_scheduler.cpp:372] Scheduler stopped: Some entities are waiting for execution, but there are no periodic or async entities to get out of the deadlock.\n", "\n", "[info] [greedy_scheduler.cpp:401] Scheduler finished.\n", "\n", - "[info] [gxf_executor.cpp:2243] Deactivating Graph...\n", + "[info] [gxf_executor.cpp:2431] Deactivating Graph...\n", "\n", - "[info] [gxf_executor.cpp:2251] Graph execution finished.\n", + "[info] [gxf_executor.cpp:2439] Graph execution finished.\n", "\n", - "[2025-01-29 23:10:26,371] [INFO] (app.App) - End run\n", + "[2025-04-22 19:18:28,421] [INFO] (app.AISpleenSegApp) - End run\n", "\n", - "[2025-01-29 15:10:28,142] [INFO] (common) - Container 'busy_buck'(65c9ea7f2024) exited.\n" + "[2025-04-22 12:18:29,792] [INFO] (common) - Container 'zealous_mclaren'(4ba4a525283c) exited.\n" ] } ], @@ -2389,8 +2177,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.2.826.0.1.3680043.10.511.3.64688317802311184609213362007999742.dcm\n", - "1.2.826.0.1.3680043.10.511.3.94198214068593573417987012030437034.dcm\n" + "1.2.826.0.1.3680043.10.511.3.11413742162001654228707576103547421.dcm stl\n" ] } ], diff --git a/requirements.txt b/requirements.txt index 99bbb796..ff677186 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ -holoscan~=2.0 +holoscan~=3.0 +holoscan-cli~=3.0 numpy>=1.21.6 colorama>=0.4.1 -tritonclient[all] +tritonclient[all]>=2.53.0 typeguard>=3.0.0 diff --git a/run b/run index d391ef44..4ef9e042 100755 --- a/run +++ b/run @@ -344,10 +344,10 @@ install_python_dev_deps() { # Copy the cuda runtime library to the fixed location (workaround for readthedocs) so that # we can leverage the existing LD_LIBRARY_PATH (configured by the readthedocs UI) to locate the cuda runtime library. # (LD_LIBRARY_PATH is set to /home/docs/ for that purpose) - # Note that 'python3.8' is hard-coded here, it should be updated if the Python version changes by + # Note that 'python3.9' is hard-coded here, it should be updated if the Python version changes by # .readthedocs.yml or other configurations. - run_command ls -al /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.8/site-packages/nvidia/cuda_runtime/lib/ - run_command cp /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.8/site-packages/nvidia/cuda_runtime/lib/*.so* /home/docs/ + run_command ls -al /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.9/site-packages/nvidia/cuda_runtime/lib/ + run_command cp /home/docs/checkouts/readthedocs.org/user_builds/${READTHEDOCS_PROJECT}/envs/${READTHEDOCS_VERSION}/lib/python3.9/site-packages/nvidia/cuda_runtime/lib/*.so* /home/docs/ run_command ls -al /home/docs/ fi } diff --git a/setup.cfg b/setup.cfg index 80a51572..e07a9ab4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -16,7 +16,7 @@ project_urls = Source Code=https://github.com/Project-MONAI/monai-deploy-app-sdk [options] -python_requires = >= 3.8 +python_requires = >= 3.9 # for compiling and develop setup only # no need to specify the versions so that we could # compile for multiple targeted versions. @@ -24,8 +24,10 @@ python_requires = >= 3.8 # cucim install_requires = numpy>=1.21.6 - holoscan~=2.0 + holoscan~=3.0 + holoscan-cli~=3.0 colorama>=0.4.1 + tritonclient[all]>=2.53.0 typeguard>=3.0.0 [options.extras_require] From 57f378acb4981efb1f87244a37670e02e6192bd7 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:08:16 -0700 Subject: [PATCH 094/118] Fix _version.py and various version-related issues (#539) - Removed unnecessary logic in setup.py - Fix versioneer issues Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- docs/source/release_notes/v3.0.0.md | 2 +- monai/deploy/__init__.py | 3 + monai/deploy/_version.py | 632 +++++++++++++++++++++++++++- setup.py | 66 +-- 4 files changed, 622 insertions(+), 81 deletions(-) diff --git a/docs/source/release_notes/v3.0.0.md b/docs/source/release_notes/v3.0.0.md index 2d229404..9c33ad22 100644 --- a/docs/source/release_notes/v3.0.0.md +++ b/docs/source/release_notes/v3.0.0.md @@ -1,4 +1,4 @@ -# Version 2.0.0 (April 24th, 2024) +# Version 3.0.0 (April 22nd, 2025) ## What's new in 3.0.0 diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 05090b52..415119da 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,3 +23,6 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] + +from . import _version +__version__ = _version.get_versions()['version'] diff --git a/monai/deploy/_version.py b/monai/deploy/_version.py index f1502cc2..9eeaaf17 100644 --- a/monai/deploy/_version.py +++ b/monai/deploy/_version.py @@ -1,21 +1,623 @@ -# This file was generated by 'versioneer.py' (0.19) from -# revision-control system data, or from the parent directory name of an -# unpacked source archive. Distribution tarballs contain a pre-generated copy -# of this file. +# This file helps to compute a version number in source trees obtained from +# git-archive tarball (such as those provided by githubs download-from-tag +# feature). Distribution tarballs (built by setup.py sdist) and build +# directories (produced by setup.py build) will contain a much shorter file +# that just contains the computed version number. -import json +# This file is released into the public domain. Generated by +# versioneer-0.20 (https://github.com/python-versioneer/python-versioneer) -version_json = ''' -{ - "date": "2024-04-24T16:20:37-0700", - "dirty": false, - "error": null, - "full-revisionid": "d0760904a1248ce316ae0237c8a1127ac5673d7f", - "version": "2.0.0" -} -''' # END VERSION_JSON +"""Git implementation of _version.py.""" + +import errno +import os +import re +import subprocess +import sys + + +def get_keywords(): + """Get the keywords needed to look up the version information.""" + # these strings will be replaced by git during git-archive. + # setup.py/versioneer.py will grep for the variable names, so they must + # each be defined on a line of their own. _version.py will just call + # get_keywords(). + git_refnames = "$Format:%d$" + git_full = "$Format:%H$" + git_date = "$Format:%ci$" + keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} + return keywords + + +class VersioneerConfig: # pylint: disable=too-few-public-methods + """Container for Versioneer configuration parameters.""" + + +def get_config(): + """Create, populate and return the VersioneerConfig() object.""" + # these strings are filled in when 'setup.py versioneer' creates + # _version.py + cfg = VersioneerConfig() + cfg.VCS = "git" + cfg.style = "pep440" + cfg.tag_prefix = "" + cfg.parentdir_prefix = "" + cfg.versionfile_source = "monai/deploy/_version.py" + cfg.verbose = False + return cfg + + +class NotThisMethod(Exception): + """Exception raised if a method is not valid for the current scenario.""" + + +LONG_VERSION_PY = {} +HANDLERS = {} + + +def register_vcs_handler(vcs, method): # decorator + """Create decorator to mark a method as the handler of a VCS.""" + def decorate(f): + """Store f in HANDLERS[vcs][method].""" + if vcs not in HANDLERS: + HANDLERS[vcs] = {} + HANDLERS[vcs][method] = f + return f + return decorate + + +# pylint:disable=too-many-arguments,consider-using-with # noqa +def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, + env=None): + """Call the given command(s).""" + assert isinstance(commands, list) + process = None + for command in commands: + try: + dispcmd = str([command] + args) + # remember shell=False, so use git.cmd on windows, not just git + process = subprocess.Popen([command] + args, cwd=cwd, env=env, + stdout=subprocess.PIPE, + stderr=(subprocess.PIPE if hide_stderr + else None)) + break + except EnvironmentError: + e = sys.exc_info()[1] + if e.errno == errno.ENOENT: + continue + if verbose: + print("unable to run %s" % dispcmd) + print(e) + return None, None + else: + if verbose: + print("unable to find command, tried %s" % (commands,)) + return None, None + stdout = process.communicate()[0].strip().decode() + if process.returncode != 0: + if verbose: + print("unable to run %s (error)" % dispcmd) + print("stdout was %s" % stdout) + return None, process.returncode + return stdout, process.returncode + + +def versions_from_parentdir(parentdir_prefix, root, verbose): + """Try to determine the version from the parent directory name. + + Source tarballs conventionally unpack into a directory that includes both + the project name and a version string. We will also support searching up + two directory levels for an appropriately named parent directory + """ + rootdirs = [] + + for _ in range(3): + dirname = os.path.basename(root) + if dirname.startswith(parentdir_prefix): + return {"version": dirname[len(parentdir_prefix):], + "full-revisionid": None, + "dirty": False, "error": None, "date": None} + rootdirs.append(root) + root = os.path.dirname(root) # up a level + + if verbose: + print("Tried directories %s but none started with prefix %s" % + (str(rootdirs), parentdir_prefix)) + raise NotThisMethod("rootdir doesn't start with parentdir_prefix") + + +@register_vcs_handler("git", "get_keywords") +def git_get_keywords(versionfile_abs): + """Extract version information from the given file.""" + # the code embedded in _version.py can just fetch the value of these + # keywords. When used from setup.py, we don't want to import _version.py, + # so we do it with a regexp instead. This function is not used from + # _version.py. + keywords = {} + try: + with open(versionfile_abs, "r") as fobj: + for line in fobj: + if line.strip().startswith("git_refnames ="): + mo = re.search(r'=\s*"(.*)"', line) + if mo: + keywords["refnames"] = mo.group(1) + if line.strip().startswith("git_full ="): + mo = re.search(r'=\s*"(.*)"', line) + if mo: + keywords["full"] = mo.group(1) + if line.strip().startswith("git_date ="): + mo = re.search(r'=\s*"(.*)"', line) + if mo: + keywords["date"] = mo.group(1) + except EnvironmentError: + pass + return keywords + + +@register_vcs_handler("git", "keywords") +def git_versions_from_keywords(keywords, tag_prefix, verbose): + """Get version information from git keywords.""" + if "refnames" not in keywords: + raise NotThisMethod("Short version file found") + date = keywords.get("date") + if date is not None: + # Use only the last line. Previous lines may contain GPG signature + # information. + date = date.splitlines()[-1] + + # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant + # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 + # -like" string, which we must then edit to make compliant), because + # it's been around since git-1.5.3, and it's too difficult to + # discover which version we're using, or to work around using an + # older one. + date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) + refnames = keywords["refnames"].strip() + if refnames.startswith("$Format"): + if verbose: + print("keywords are unexpanded, not using") + raise NotThisMethod("unexpanded keywords, not a git-archive tarball") + refs = {r.strip() for r in refnames.strip("()").split(",")} + # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of + # just "foo-1.0". If we see a "tag: " prefix, prefer those. + TAG = "tag: " + tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} + if not tags: + # Either we're using git < 1.8.3, or there really are no tags. We use + # a heuristic: assume all version tags have a digit. The old git %d + # expansion behaves like git log --decorate=short and strips out the + # refs/heads/ and refs/tags/ prefixes that would let us distinguish + # between branches and tags. By ignoring refnames without digits, we + # filter out many common branch names like "release" and + # "stabilization", as well as "HEAD" and "master". + tags = {r for r in refs if re.search(r'\d', r)} + if verbose: + print("discarding '%s', no digits" % ",".join(refs - tags)) + if verbose: + print("likely tags: %s" % ",".join(sorted(tags))) + for ref in sorted(tags): + # sorting will prefer e.g. "2.0" over "2.0rc1" + if ref.startswith(tag_prefix): + r = ref[len(tag_prefix):] + # Filter out refs that exactly match prefix or that don't start + # with a number once the prefix is stripped (mostly a concern + # when prefix is '') + if not re.match(r'\d', r): + continue + if verbose: + print("picking %s" % r) + return {"version": r, + "full-revisionid": keywords["full"].strip(), + "dirty": False, "error": None, + "date": date} + # no suitable tags, so version is "0+unknown", but full hex is still there + if verbose: + print("no suitable tags, using unknown + full revision id") + return {"version": "0+unknown", + "full-revisionid": keywords["full"].strip(), + "dirty": False, "error": "no suitable tags", "date": None} + + +@register_vcs_handler("git", "pieces_from_vcs") +def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): + """Get version from 'git describe' in the root of the source tree. + + This only gets called if the git-archive 'subst' keywords were *not* + expanded, and _version.py hasn't already been rewritten with a short + version string, meaning we're inside a checked out source tree. + """ + GITS = ["git"] + if sys.platform == "win32": + GITS = ["git.cmd", "git.exe"] + + _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, + hide_stderr=True) + if rc != 0: + if verbose: + print("Directory %s not under git control" % root) + raise NotThisMethod("'git rev-parse --git-dir' returned error") + + # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] + # if there isn't one, this yields HEX[-dirty] (no NUM) + describe_out, rc = runner(GITS, ["describe", "--tags", "--dirty", + "--always", "--long", + "--match", "%s*" % tag_prefix], + cwd=root) + # --long was added in git-1.5.5 + if describe_out is None: + raise NotThisMethod("'git describe' failed") + describe_out = describe_out.strip() + full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) + if full_out is None: + raise NotThisMethod("'git rev-parse' failed") + full_out = full_out.strip() + + pieces = {} + pieces["long"] = full_out + pieces["short"] = full_out[:7] # maybe improved later + pieces["error"] = None + + branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], + cwd=root) + # --abbrev-ref was added in git-1.6.3 + if rc != 0 or branch_name is None: + raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") + branch_name = branch_name.strip() + + if branch_name == "HEAD": + # If we aren't exactly on a branch, pick a branch which represents + # the current commit. If all else fails, we are on a branchless + # commit. + branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) + # --contains was added in git-1.5.4 + if rc != 0 or branches is None: + raise NotThisMethod("'git branch --contains' returned error") + branches = branches.split("\n") + + # Remove the first line if we're running detached + if "(" in branches[0]: + branches.pop(0) + + # Strip off the leading "* " from the list of branches. + branches = [branch[2:] for branch in branches] + if "master" in branches: + branch_name = "master" + elif not branches: + branch_name = None + else: + # Pick the first branch that is returned. Good or bad. + branch_name = branches[0] + + pieces["branch"] = branch_name + + # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] + # TAG might have hyphens. + git_describe = describe_out + + # look for -dirty suffix + dirty = git_describe.endswith("-dirty") + pieces["dirty"] = dirty + if dirty: + git_describe = git_describe[:git_describe.rindex("-dirty")] + + # now we have TAG-NUM-gHEX or HEX + + if "-" in git_describe: + # TAG-NUM-gHEX + mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) + if not mo: + # unparseable. Maybe git-describe is misbehaving? + pieces["error"] = ("unable to parse git-describe output: '%s'" + % describe_out) + return pieces + + # tag + full_tag = mo.group(1) + if not full_tag.startswith(tag_prefix): + if verbose: + fmt = "tag '%s' doesn't start with prefix '%s'" + print(fmt % (full_tag, tag_prefix)) + pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" + % (full_tag, tag_prefix)) + return pieces + pieces["closest-tag"] = full_tag[len(tag_prefix):] + + # distance: number of commits since tag + pieces["distance"] = int(mo.group(2)) + + # commit: short hex revision ID + pieces["short"] = mo.group(3) + + else: + # HEX: no tags + pieces["closest-tag"] = None + count_out, rc = runner(GITS, ["rev-list", "HEAD", "--count"], cwd=root) + pieces["distance"] = int(count_out) # total number of commits + + # commit date: see ISO-8601 comment in git_versions_from_keywords() + date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() + # Use only the last line. Previous lines may contain GPG signature + # information. + date = date.splitlines()[-1] + pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) + + return pieces + + +def plus_or_dot(pieces): + """Return a + if we don't already have one, else return a .""" + if "+" in pieces.get("closest-tag", ""): + return "." + return "+" + + +def render_pep440(pieces): + """Build up version string, with post-release "local version identifier". + + Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you + get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty + + Exceptions: + 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += plus_or_dot(pieces) + rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + else: + # exception #1 + rendered = "0+untagged.%d.g%s" % (pieces["distance"], + pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + return rendered + + +def render_pep440_branch(pieces): + """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . + + The ".dev0" means not master branch. Note that .dev0 sorts backwards + (a feature branch will appear "older" than the master branch). + + Exceptions: + 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += plus_or_dot(pieces) + rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + else: + # exception #1 + rendered = "0" + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += "+untagged.%d.g%s" % (pieces["distance"], + pieces["short"]) + if pieces["dirty"]: + rendered += ".dirty" + return rendered + + +def render_pep440_pre(pieces): + """TAG[.post0.devDISTANCE] -- No -dirty. + + Exceptions: + 1: no tags. 0.post0.devDISTANCE + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"]: + rendered += ".post0.dev%d" % pieces["distance"] + else: + # exception #1 + rendered = "0.post0.dev%d" % pieces["distance"] + return rendered + + +def render_pep440_post(pieces): + """TAG[.postDISTANCE[.dev0]+gHEX] . + + The ".dev0" means dirty. Note that .dev0 sorts backwards + (a dirty tree will appear "older" than the corresponding clean one), + but you shouldn't be releasing software with -dirty anyways. + + Exceptions: + 1: no tags. 0.postDISTANCE[.dev0] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += ".post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + rendered += plus_or_dot(pieces) + rendered += "g%s" % pieces["short"] + else: + # exception #1 + rendered = "0.post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + rendered += "+g%s" % pieces["short"] + return rendered + + +def render_pep440_post_branch(pieces): + """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . + + The ".dev0" means not master branch. + + Exceptions: + 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += ".post%d" % pieces["distance"] + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += plus_or_dot(pieces) + rendered += "g%s" % pieces["short"] + if pieces["dirty"]: + rendered += ".dirty" + else: + # exception #1 + rendered = "0.post%d" % pieces["distance"] + if pieces["branch"] != "master": + rendered += ".dev0" + rendered += "+g%s" % pieces["short"] + if pieces["dirty"]: + rendered += ".dirty" + return rendered + + +def render_pep440_old(pieces): + """TAG[.postDISTANCE[.dev0]] . + + The ".dev0" means dirty. + + Exceptions: + 1: no tags. 0.postDISTANCE[.dev0] + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"] or pieces["dirty"]: + rendered += ".post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + else: + # exception #1 + rendered = "0.post%d" % pieces["distance"] + if pieces["dirty"]: + rendered += ".dev0" + return rendered + + +def render_git_describe(pieces): + """TAG[-DISTANCE-gHEX][-dirty]. + + Like 'git describe --tags --dirty --always'. + + Exceptions: + 1: no tags. HEX[-dirty] (note: no 'g' prefix) + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + if pieces["distance"]: + rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) + else: + # exception #1 + rendered = pieces["short"] + if pieces["dirty"]: + rendered += "-dirty" + return rendered + + +def render_git_describe_long(pieces): + """TAG-DISTANCE-gHEX[-dirty]. + + Like 'git describe --tags --dirty --always -long'. + The distance/hash is unconditional. + + Exceptions: + 1: no tags. HEX[-dirty] (note: no 'g' prefix) + """ + if pieces["closest-tag"]: + rendered = pieces["closest-tag"] + rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) + else: + # exception #1 + rendered = pieces["short"] + if pieces["dirty"]: + rendered += "-dirty" + return rendered + + +def render(pieces, style): + """Render the given version pieces into the requested style.""" + if pieces["error"]: + return {"version": "unknown", + "full-revisionid": pieces.get("long"), + "dirty": None, + "error": pieces["error"], + "date": None} + + if not style or style == "default": + style = "pep440" # the default + + if style == "pep440": + rendered = render_pep440(pieces) + elif style == "pep440-branch": + rendered = render_pep440_branch(pieces) + elif style == "pep440-pre": + rendered = render_pep440_pre(pieces) + elif style == "pep440-post": + rendered = render_pep440_post(pieces) + elif style == "pep440-post-branch": + rendered = render_pep440_post_branch(pieces) + elif style == "pep440-old": + rendered = render_pep440_old(pieces) + elif style == "git-describe": + rendered = render_git_describe(pieces) + elif style == "git-describe-long": + rendered = render_git_describe_long(pieces) + else: + raise ValueError("unknown style '%s'" % style) + + return {"version": rendered, "full-revisionid": pieces["long"], + "dirty": pieces["dirty"], "error": None, + "date": pieces.get("date")} def get_versions(): - return json.loads(version_json) + """Get version information or return default if unable to do so.""" + # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have + # __file__, we can work backwards from there to the root. Some + # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which + # case we can only use expanded keywords. + + cfg = get_config() + verbose = cfg.verbose + + try: + return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, + verbose) + except NotThisMethod: + pass + + try: + root = os.path.realpath(__file__) + # versionfile_source is the relative path from the top of the source + # tree (where the .git directory might live) to this file. Invert + # this to find the root from __file__. + for _ in cfg.versionfile_source.split('/'): + root = os.path.dirname(root) + except NameError: + return {"version": "0+unknown", "full-revisionid": None, + "dirty": None, + "error": "unable to find root of source tree", + "date": None} + + try: + pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) + return render(pieces, cfg.style) + except NotThisMethod: + pass + + try: + if cfg.parentdir_prefix: + return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) + except NotThisMethod: + pass + + return {"version": "0+unknown", "full-revisionid": None, + "dirty": None, + "error": "unable to compute version", "date": None} diff --git a/setup.py b/setup.py index 74bfd8c9..0f4a71f3 100644 --- a/setup.py +++ b/setup.py @@ -24,73 +24,9 @@ # (https://github.com/pypa/pip/issues/7953#issuecomment-645133255) site.ENABLE_USER_SITE = "--user" in sys.argv[1:] - -class PostInstallCommand(install): - """Contains post install actions.""" - - def __init__(self, *args, **kwargs): - super(PostInstallCommand, self).__init__(*args, **kwargs) - atexit.register(PostInstallCommand.patch_holoscan) - - @staticmethod - def patch_holoscan(): - """Patch Holoscan for its known issue of missing one import.""" - - import importlib.util - from pathlib import Path - - def needed_to_patch(): - from importlib.metadata import version - - try: - version = version("holoscan") - # This issue exists in the following versions - if "2.7" in version or "2.8" in version: - print("Need to patch holoscan v2.7 and 2.8.") - return True - except Exception: - pass - - return False - - if not needed_to_patch(): - return - - print("Patching holoscan as needed...") - spec = importlib.util.find_spec("holoscan") - if spec: - # holoscan core misses one class in its import in __init__.py - module_to_add = " MultiMessageConditionInfo," - module_path = Path(str(spec.origin)).parent.joinpath("core/__init__.py") - print(f"Patching file {module_path}") - if module_path.exists(): - lines_r = [] - existed = False - with module_path.open("r") as f_to_patch: - in_block = False - for line_r in f_to_patch.readlines(): - if "from ._core import (\n" in line_r: - in_block = True - elif in_block and module_to_add.strip() in line_r: - existed = True - break - elif in_block and ")\n" in line_r: - # Need to add the missing class. - line_r = f"{module_to_add}\n{line_r}" - in_block = False - print("Added missing module in holoscan.") - - lines_r.append(line_r) - - if not existed: - with module_path.open("w") as f_w: - f_w.writelines(lines_r) - print("Completed patching holoscan.") - - setup( version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass({"install": PostInstallCommand}), + cmdclass=versioneer.get_cmdclass(), packages=find_namespace_packages(include=["monai.*"]), include_package_data=True, zip_safe=False, From d275a2679093dd9485e54268265ea3d94b81ef49 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 21:00:44 -0700 Subject: [PATCH 095/118] =?UTF-8?q?Bump=20version:=202.0.0=20=E2=86=92=203?= =?UTF-8?q?.0.0=20(#540)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump version: 2.0.0 β†’ 3.0.0 Signed-off-by: M Q * Bump version: 2.0.0 -> 3.0.0 with __init__.py fix Signed-off-by: M Q * Remove blank line complained by black Signed-off-by: M Q * Fix more formatting complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- .bumpversion.cfg | 2 +- monai/deploy/__init__.py | 3 - setup.py | 2 - versioneer.py | 247 +++++++++++++++++++++------------------ 4 files changed, 137 insertions(+), 117 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 646aa46b..a2048e4c 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.0.0 +current_version = 3.0.0 parse = (?P\d+)\.(?P\d+)\.(?P\d+)((?Pa|b|rc)(?P\d+))? serialize = {major}.{minor}.{patch}{release}{build} diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 415119da..05090b52 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,6 +23,3 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] - -from . import _version -__version__ = _version.get_versions()['version'] diff --git a/setup.py b/setup.py index 0f4a71f3..e1720bc8 100644 --- a/setup.py +++ b/setup.py @@ -10,12 +10,10 @@ # limitations under the License. -import atexit import site import sys from setuptools import find_namespace_packages, setup -from setuptools.command.install import install import versioneer diff --git a/versioneer.py b/versioneer.py index 97130070..41ab6a21 100644 --- a/versioneer.py +++ b/versioneer.py @@ -1,4 +1,3 @@ - # Version: 0.20 """The Versioneer - like a rocketeer, but for versions. @@ -303,11 +302,13 @@ def get_root(): setup_py = os.path.join(root, "setup.py") versioneer_py = os.path.join(root, "versioneer.py") if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - err = ("Versioneer was unable to run the project root directory. " - "Versioneer requires setup.py to be executed from " - "its immediate directory (like 'python setup.py COMMAND'), " - "or in a way that lets it use sys.argv[0] to find the root " - "(like 'python path/to/setup.py COMMAND').") + err = ( + "Versioneer was unable to run the project root directory. " + "Versioneer requires setup.py to be executed from " + "its immediate directory (like 'python setup.py COMMAND'), " + "or in a way that lets it use sys.argv[0] to find the root " + "(like 'python path/to/setup.py COMMAND')." + ) raise VersioneerBadRootError(err) try: # Certain runtime workflows (setup.py install/develop in a setuptools @@ -320,8 +321,7 @@ def get_root(): me_dir = os.path.normcase(os.path.splitext(my_path)[0]) vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0]) if me_dir != vsr_dir: - print("Warning: build in %s is using versioneer.py from %s" - % (os.path.dirname(my_path), versioneer_py)) + print("Warning: build in %s is using versioneer.py from %s" % (os.path.dirname(my_path), versioneer_py)) except NameError: pass return root @@ -367,16 +367,17 @@ class NotThisMethod(Exception): def register_vcs_handler(vcs, method): # decorator """Create decorator to mark a method as the handler of a VCS.""" + def decorate(f): """Store f in HANDLERS[vcs][method].""" HANDLERS.setdefault(vcs, {})[method] = f return f + return decorate # pylint:disable=too-many-arguments,consider-using-with # noqa -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, - env=None): +def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): """Call the given command(s).""" assert isinstance(commands, list) process = None @@ -384,10 +385,13 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, try: dispcmd = str([command] + args) # remember shell=False, so use git.cmd on windows, not just git - process = subprocess.Popen([command] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None)) + process = subprocess.Popen( + [command] + args, + cwd=cwd, + env=env, + stdout=subprocess.PIPE, + stderr=(subprocess.PIPE if hide_stderr else None), + ) break except EnvironmentError: e = sys.exc_info()[1] @@ -410,7 +414,9 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, return stdout, process.returncode -LONG_VERSION_PY['git'] = r''' +LONG_VERSION_PY[ + "git" +] = r''' # This file helps to compute a version number in source trees obtained from # git-archive tarball (such as those provided by githubs download-from-tag # feature). Distribution tarballs (built by setup.py sdist) and build @@ -1091,7 +1097,7 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of # just "foo-1.0". If we see a "tag: " prefix, prefer those. TAG = "tag: " - tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} + tags = {r[len(TAG) :] for r in refs if r.startswith(TAG)} if not tags: # Either we're using git < 1.8.3, or there really are no tags. We use # a heuristic: assume all version tags have a digit. The old git %d @@ -1100,7 +1106,7 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): # between branches and tags. By ignoring refnames without digits, we # filter out many common branch names like "release" and # "stabilization", as well as "HEAD" and "master". - tags = {r for r in refs if re.search(r'\d', r)} + tags = {r for r in refs if re.search(r"\d", r)} if verbose: print("discarding '%s', no digits" % ",".join(refs - tags)) if verbose: @@ -1108,24 +1114,31 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): for ref in sorted(tags): # sorting will prefer e.g. "2.0" over "2.0rc1" if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] + r = ref[len(tag_prefix) :] # Filter out refs that exactly match prefix or that don't start # with a number once the prefix is stripped (mostly a concern # when prefix is '') - if not re.match(r'\d', r): + if not re.match(r"\d", r): continue if verbose: print("picking %s" % r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} + return { + "version": r, + "full-revisionid": keywords["full"].strip(), + "dirty": False, + "error": None, + "date": date, + } # no suitable tags, so version is "0+unknown", but full hex is still there if verbose: print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} + return { + "version": "0+unknown", + "full-revisionid": keywords["full"].strip(), + "dirty": False, + "error": "no suitable tags", + "date": None, + } @register_vcs_handler("git", "pieces_from_vcs") @@ -1140,8 +1153,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): if sys.platform == "win32": GITS = ["git.cmd", "git.exe"] - _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=True) + _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) if rc != 0: if verbose: print("Directory %s not under git control" % root) @@ -1149,10 +1161,9 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = runner(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", - "--match", "%s*" % tag_prefix], - cwd=root) + describe_out, rc = runner( + GITS, ["describe", "--tags", "--dirty", "--always", "--long", "--match", "%s*" % tag_prefix], cwd=root + ) # --long was added in git-1.5.5 if describe_out is None: raise NotThisMethod("'git describe' failed") @@ -1167,8 +1178,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): pieces["short"] = full_out[:7] # maybe improved later pieces["error"] = None - branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], - cwd=root) + branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], cwd=root) # --abbrev-ref was added in git-1.6.3 if rc != 0 or branch_name is None: raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") @@ -1208,17 +1218,16 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): dirty = git_describe.endswith("-dirty") pieces["dirty"] = dirty if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] + git_describe = git_describe[: git_describe.rindex("-dirty")] # now we have TAG-NUM-gHEX or HEX if "-" in git_describe: # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) + mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe) if not mo: # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%s'" - % describe_out) + pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out return pieces # tag @@ -1227,10 +1236,9 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): if verbose: fmt = "tag '%s' doesn't start with prefix '%s'" print(fmt % (full_tag, tag_prefix)) - pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" - % (full_tag, tag_prefix)) + pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % (full_tag, tag_prefix) return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] + pieces["closest-tag"] = full_tag[len(tag_prefix) :] # distance: number of commits since tag pieces["distance"] = int(mo.group(2)) @@ -1303,15 +1311,18 @@ def versions_from_parentdir(parentdir_prefix, root, verbose): for _ in range(3): dirname = os.path.basename(root) if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} + return { + "version": dirname[len(parentdir_prefix) :], + "full-revisionid": None, + "dirty": False, + "error": None, + "date": None, + } rootdirs.append(root) root = os.path.dirname(root) # up a level if verbose: - print("Tried directories %s but none started with prefix %s" % - (str(rootdirs), parentdir_prefix)) + print("Tried directories %s but none started with prefix %s" % (str(rootdirs), parentdir_prefix)) raise NotThisMethod("rootdir doesn't start with parentdir_prefix") @@ -1340,11 +1351,9 @@ def versions_from_file(filename): contents = f.read() except EnvironmentError: raise NotThisMethod("unable to read _version.py") - mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) + mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON", contents, re.M | re.S) if not mo: - mo = re.search(r"version_json = '''\r\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) + mo = re.search(r"version_json = '''\r\n(.*)''' # END VERSION_JSON", contents, re.M | re.S) if not mo: raise NotThisMethod("no version_json in _version.py") return json.loads(mo.group(1)) @@ -1353,8 +1362,7 @@ def versions_from_file(filename): def write_to_version_file(filename, versions): """Write the given version number to the given _version.py file.""" os.unlink(filename) - contents = json.dumps(versions, sort_keys=True, - indent=1, separators=(",", ": ")) + contents = json.dumps(versions, sort_keys=True, indent=1, separators=(",", ": ")) with open(filename, "w") as f: f.write(SHORT_VERSION_PY % contents) @@ -1386,8 +1394,7 @@ def render_pep440(pieces): rendered += ".dirty" else: # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) + rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered @@ -1416,8 +1423,7 @@ def render_pep440_branch(pieces): rendered = "0" if pieces["branch"] != "master": rendered += ".dev0" - rendered += "+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) + rendered += "+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered @@ -1560,11 +1566,13 @@ def render_git_describe_long(pieces): def render(pieces, style): """Render the given version pieces into the requested style.""" if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} + return { + "version": "unknown", + "full-revisionid": pieces.get("long"), + "dirty": None, + "error": pieces["error"], + "date": None, + } if not style or style == "default": style = "pep440" # the default @@ -1588,9 +1596,13 @@ def render(pieces, style): else: raise ValueError("unknown style '%s'" % style) - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} + return { + "version": rendered, + "full-revisionid": pieces["long"], + "dirty": pieces["dirty"], + "error": None, + "date": pieces.get("date"), + } class VersioneerBadRootError(Exception): @@ -1613,8 +1625,7 @@ def get_versions(verbose=False): handlers = HANDLERS.get(cfg.VCS) assert handlers, "unrecognized VCS '%s'" % cfg.VCS verbose = verbose or cfg.verbose - assert cfg.versionfile_source is not None, \ - "please set versioneer.versionfile_source" + assert cfg.versionfile_source is not None, "please set versioneer.versionfile_source" assert cfg.tag_prefix is not None, "please set versioneer.tag_prefix" versionfile_abs = os.path.join(root, cfg.versionfile_source) @@ -1668,9 +1679,13 @@ def get_versions(verbose=False): if verbose: print("unable to compute version") - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, "error": "unable to compute version", - "date": None} + return { + "version": "0+unknown", + "full-revisionid": None, + "dirty": None, + "error": "unable to compute version", + "date": None, + } def get_version(): @@ -1723,6 +1738,7 @@ def run(self): print(" date: %s" % vers.get("date")) if vers["error"]: print(" error: %s" % vers["error"]) + cmds["version"] = cmd_version # we override "build_py" in both distutils and setuptools @@ -1741,8 +1757,8 @@ def run(self): # setup.py egg_info -> ? # we override different "build_py" commands for both environments - if 'build_py' in cmds: - _build_py = cmds['build_py'] + if "build_py" in cmds: + _build_py = cmds["build_py"] elif "setuptools" in sys.modules: from setuptools.command.build_py import build_py as _build_py else: @@ -1757,14 +1773,14 @@ def run(self): # now locate _version.py in the new build/ directory and replace # it with an updated value if cfg.versionfile_build: - target_versionfile = os.path.join(self.build_lib, - cfg.versionfile_build) + target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) + cmds["build_py"] = cmd_build_py - if 'build_ext' in cmds: - _build_ext = cmds['build_ext'] + if "build_ext" in cmds: + _build_ext = cmds["build_ext"] elif "setuptools" in sys.modules: from setuptools.command.build_ext import build_ext as _build_ext else: @@ -1784,14 +1800,15 @@ def run(self): return # now locate _version.py in the new build/ directory and replace # it with an updated value - target_versionfile = os.path.join(self.build_lib, - cfg.versionfile_build) + target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) print("UPDATING %s" % target_versionfile) write_to_version_file(target_versionfile, versions) + cmds["build_ext"] = cmd_build_ext if "cx_Freeze" in sys.modules: # cx_freeze enabled? from cx_Freeze.dist import build_exe as _build_exe + # nczeczulin reports that py2exe won't like the pep440-style string # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g. # setup(console=[{ @@ -1812,17 +1829,21 @@ def run(self): os.unlink(target_versionfile) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) + f.write( + LONG + % { + "DOLLAR": "$", + "STYLE": cfg.style, + "TAG_PREFIX": cfg.tag_prefix, + "PARENTDIR_PREFIX": cfg.parentdir_prefix, + "VERSIONFILE_SOURCE": cfg.versionfile_source, + } + ) + cmds["build_exe"] = cmd_build_exe del cmds["build_py"] - if 'py2exe' in sys.modules: # py2exe enabled? + if "py2exe" in sys.modules: # py2exe enabled? from py2exe.distutils_buildexe import py2exe as _py2exe class cmd_py2exe(_py2exe): @@ -1838,18 +1859,22 @@ def run(self): os.unlink(target_versionfile) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) + f.write( + LONG + % { + "DOLLAR": "$", + "STYLE": cfg.style, + "TAG_PREFIX": cfg.tag_prefix, + "PARENTDIR_PREFIX": cfg.parentdir_prefix, + "VERSIONFILE_SOURCE": cfg.versionfile_source, + } + ) + cmds["py2exe"] = cmd_py2exe # we override different "sdist" commands for both environments - if 'sdist' in cmds: - _sdist = cmds['sdist'] + if "sdist" in cmds: + _sdist = cmds["sdist"] elif "setuptools" in sys.modules: from setuptools.command.sdist import sdist as _sdist else: @@ -1874,8 +1899,8 @@ def make_release_tree(self, base_dir, files): # updated value target_versionfile = os.path.join(base_dir, cfg.versionfile_source) print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, - self._versioneer_generated_versions) + write_to_version_file(target_versionfile, self._versioneer_generated_versions) + cmds["sdist"] = cmd_sdist return cmds @@ -1935,11 +1960,9 @@ def do_setup(): root = get_root() try: cfg = get_config_from_root(root) - except (EnvironmentError, configparser.NoSectionError, - configparser.NoOptionError) as e: + except (EnvironmentError, configparser.NoSectionError, configparser.NoOptionError) as e: if isinstance(e, (EnvironmentError, configparser.NoSectionError)): - print("Adding sample versioneer config to setup.cfg", - file=sys.stderr) + print("Adding sample versioneer config to setup.cfg", file=sys.stderr) with open(os.path.join(root, "setup.cfg"), "a") as f: f.write(SAMPLE_CONFIG) print(CONFIG_ERROR, file=sys.stderr) @@ -1948,15 +1971,18 @@ def do_setup(): print(" creating %s" % cfg.versionfile_source) with open(cfg.versionfile_source, "w") as f: LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - - ipy = os.path.join(os.path.dirname(cfg.versionfile_source), - "__init__.py") + f.write( + LONG + % { + "DOLLAR": "$", + "STYLE": cfg.style, + "TAG_PREFIX": cfg.tag_prefix, + "PARENTDIR_PREFIX": cfg.parentdir_prefix, + "VERSIONFILE_SOURCE": cfg.versionfile_source, + } + ) + + ipy = os.path.join(os.path.dirname(cfg.versionfile_source), "__init__.py") if os.path.exists(ipy): try: with open(ipy, "r") as f: @@ -2004,8 +2030,7 @@ def do_setup(): else: print(" 'versioneer.py' already in MANIFEST.in") if cfg.versionfile_source not in simple_includes: - print(" appending versionfile_source ('%s') to MANIFEST.in" % - cfg.versionfile_source) + print(" appending versionfile_source ('%s') to MANIFEST.in" % cfg.versionfile_source) with open(manifest_in, "a") as f: f.write("include %s\n" % cfg.versionfile_source) else: From f8fbea0dc92a8df3bcd7281f6dbbe7c22e347a42 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Mon, 12 May 2025 20:12:56 +0000 Subject: [PATCH 096/118] Fix NiftiDataWriter spacing handling for 1mm pixel dimensions Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/nii_data_writer_operator.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py index 003395ce..ed717c05 100644 --- a/monai/deploy/operators/nii_data_writer_operator.py +++ b/monai/deploy/operators/nii_data_writer_operator.py @@ -70,8 +70,11 @@ def convert_and_save(self, seg_image, nii_path): """ image_writer = SimpleITK.ImageFileWriter() + pixdim = seg_image.metadata()["pixdim"] + if pixdim[0] == 1: + pixdim = np.array(pixdim[1:4]) image = SimpleITK.GetImageFromArray(seg_image._data) - image.SetSpacing(seg_image.metadata()["pixdim"]) + image.SetSpacing(pixdim) if len(seg_image.metadata()["direction"]) == 16: direction = [] From 26b1244db1d1c4ed1e93d319ba13147707f2cf31 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:22:11 +0000 Subject: [PATCH 097/118] Refactor nnUNet bundle inference operator to MONetBundleInferenceOperator and add implementation Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 4 ++-- monai/deploy/operators/__init__.py | 2 +- ...rence_operator.py => monet_bundle_inference_operator.py} | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename monai/deploy/operators/{monai_nnunet_bundle_inference_operator.py => monet_bundle_inference_operator.py} (96%) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 60b09fb2..37b86f09 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -27,7 +27,7 @@ IOMapping, ) -from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator +from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MONetBundleInferenceOperator from monai.deploy.operators.stl_conversion_operator import STLConversionOperator @@ -87,7 +87,7 @@ def compose(self): config_names = BundleConfigNames(config_names=["inference"]) # Same as the default - bundle_spleen_seg_op = MonainnUNetBundleInferenceOperator( + bundle_spleen_seg_op = MONetBundleInferenceOperator( self, input_mapping=[IOMapping("image", Image, IOType.IN_MEMORY)], output_mapping=[IOMapping("pred", Image, IOType.IN_MEMORY)], diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 4599048d..53f8c2c4 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -48,7 +48,7 @@ from .dicom_utils import EquipmentInfo, ModelInfo, random_with_n_digits, save_dcm_file, write_common_modules from .inference_operator import InferenceOperator from .monai_bundle_inference_operator import BundleConfigNames, IOMapping, MonaiBundleInferenceOperator -from .monai_nnunet_bundle_inference_operator import MonainnUNetBundleInferenceOperator +from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .monai_seg_inference_operator import MonaiSegInferenceOperator from .nii_data_loader_operator import NiftiDataLoader from .png_converter_operator import PNGConverterOperator diff --git a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py similarity index 96% rename from monai/deploy/operators/monai_nnunet_bundle_inference_operator.py rename to monai/deploy/operators/monet_bundle_inference_operator.py index 954e12e6..d1c4bbbf 100644 --- a/monai/deploy/operators/monai_nnunet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -13,7 +13,7 @@ from monai.deploy.utils.importutil import optional_import from typing import Any, Dict, Tuple, Union from monai.deploy.core import Image -from pathlib import Path + MONAI_UTILS = "monai.utils" nibabel, _ = optional_import("nibabel", "3.2.1") torch, _ = optional_import("torch", "1.10.2") @@ -35,10 +35,10 @@ Compose: Any = Compose_ MapTransform: Any = MapTransform_ ConfigParser: Any = ConfigParser_ -__all__ = ["MonainnUNetBundleInferenceOperator"] +__all__ = ["MONetBundleInferenceOperator"] -class MonainnUNetBundleInferenceOperator(MonaiBundleInferenceOperator): +class MONetBundleInferenceOperator(MonaiBundleInferenceOperator): """ A specialized operator for performing inference using the MONAI nnUNet bundle. This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific From 16b110c0e080329a0f2fc99219265afe1608a227 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:27:50 +0000 Subject: [PATCH 098/118] Update documentation to reflect changes from nnUNet to MONet Bundle inference operator Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 18 ++++-------------- .../monet_bundle_inference_operator.py | 2 +- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 37b86f09..8b3d1227 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -35,10 +35,10 @@ # pip_packages can be a string that is a path(str) to requirements.txt file or a list of packages. # The monai pkg is not required by this class, instead by the included operators. class AISpleennnUNetSegApp(Application): - """Demonstrates inference with built-in MONAI nnUNet Bundle inference operator with DICOM files as input/output + """Demonstrates inference with built-in MONet Bundle inference operator with DICOM files as input/output This application loads a set of DICOM instances, select the appropriate series, converts the series to - 3D volume image, performs inference with the built-in MONAI nnUNet Bundle inference operator, including pre-processing + 3D volume image, performs inference with the built-in MONet Bundle inference operator, including nnUNet resampling,pre-processing and post-processing, save the segmentation image in a DICOM Seg OID in an instance file, and optionally the surface mesh in STL format. @@ -46,8 +46,8 @@ class AISpleennnUNetSegApp(Application): Execution Time Estimate: - With a Nvidia RTXA600 48GB GPU, for an input DICOM Series of 139 instances, the execution time is around - 75 seconds with saving both DICOM Seg and surface mesh STL file. + With a Nvidia RTXA600 48GB GPU, for an input DICOM Series of size 106x415x415 and patches of size 64x192x160, the execution time is around + 50 seconds with saving both DICOM Seg and surface mesh STL file. """ def __init__(self, *args, **kwargs): @@ -162,16 +162,6 @@ def compose(self): """ if __name__ == "__main__": - # Creates the app and test it standalone. When running is this mode, please note the following: - # -m , for model file path - # -i , for input DICOM CT series folder - # -o , for the output folder, default $PWD/output - # e.g. - # monai-deploy exec app.py -i input -m model/model.ts - # - # export HOLOSCAN_INPUT_PATH=dcm - # export HOLOSCAN_MODEL_PATH=spleen_model/model.ts - # export HOLOSCAN_OUTPUT_PATH="output" logging.info(f"Begin {__name__}") AISpleennnUNetSegApp().run() logging.info(f"End {__name__}") diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index d1c4bbbf..9b926a64 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -40,7 +40,7 @@ class MONetBundleInferenceOperator(MonaiBundleInferenceOperator): """ - A specialized operator for performing inference using the MONAI nnUNet bundle. + A specialized operator for performing inference using the MONet bundle. This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific configurations and prediction logic. It initializes the nnUNet predictor and provides a method for performing inference on input data. From a44803fda74d240a59b4fa83b058bf90711a9c15 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:32:56 +0000 Subject: [PATCH 099/118] Refactor import statements in app.py and monet_bundle_inference_operator.py for clarity Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 6 +---- .../monet_bundle_inference_operator.py | 23 +++++++++---------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 8b3d1227..71a59f93 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -22,11 +22,7 @@ from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator, SegmentDescription from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator -from monai.deploy.operators.monai_bundle_inference_operator import ( - BundleConfigNames, - IOMapping, - -) +from monai.deploy.operators.monai_bundle_inference_operator import BundleConfigNames, IOMapping from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MONetBundleInferenceOperator from monai.deploy.operators.stl_conversion_operator import STLConversionOperator diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index 9b926a64..811c439f 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -9,10 +9,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config -from monai.deploy.utils.importutil import optional_import from typing import Any, Dict, Tuple, Union + from monai.deploy.core import Image +from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config +from monai.deploy.utils.importutil import optional_import MONAI_UTILS = "monai.utils" nibabel, _ = optional_import("nibabel", "3.2.1") @@ -44,12 +45,12 @@ class MONetBundleInferenceOperator(MonaiBundleInferenceOperator): This operator extends the `MonaiBundleInferenceOperator` to support nnUNet-specific configurations and prediction logic. It initializes the nnUNet predictor and provides a method for performing inference on input data. - + Attributes ---------- _nnunet_predictor : torch.nn.Module The nnUNet predictor module used for inference. - + Methods ------- _init_config(config_names) @@ -65,16 +66,14 @@ def __init__( **kwargs, ): - super().__init__(*args, **kwargs) - - self._nnunet_predictor : torch.nn.Module = None - - - def _init_config(self, config_names): + + self._nnunet_predictor: torch.nn.Module = None + + def _init_config(self, config_names): super()._init_config(config_names) - parser = get_bundle_config(str(self._bundle_path), config_names) + parser = get_bundle_config(str(self._bundle_path), config_names) self._parser = parser self._nnunet_predictor = parser.get_parsed_content("network_def") @@ -83,7 +82,7 @@ def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, .. """Predicts output using the inferer.""" self._nnunet_predictor.predictor.network = self._model_network - #os.environ['nnUNet_def_n_proc'] = "1" + # os.environ['nnUNet_def_n_proc'] = "1" if len(data.shape) == 4: data = data[None] return self._nnunet_predictor(data) From 1f51edc5d3ac064f9a866df6c4d25b03e1763335 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:38:33 +0000 Subject: [PATCH 100/118] Update application title and fix operator name in imports for MONet Bundle Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.yaml | 2 +- monai/deploy/operators/__init__.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.yaml b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml index 62636118..9f65281c 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.yaml +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.yaml @@ -15,7 +15,7 @@ # limitations under the License. --- application: - title: MONAI Deploy App Package - Spleen nnUNet Seg Inference + title: MONAI Deploy App Package - Spleen MONet Seg Inference version: 1.0 inputFormats: ["file"] outputFormats: ["file"] diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 53f8c2c4..18bc61a7 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -25,7 +25,7 @@ IOMapping ModelInfo MonaiBundleInferenceOperator - MonainnUNetBundleInferenceOperator + MONetBundleInferenceOperator MonaiSegInferenceOperator PNGConverterOperator PublisherOperator @@ -48,10 +48,10 @@ from .dicom_utils import EquipmentInfo, ModelInfo, random_with_n_digits, save_dcm_file, write_common_modules from .inference_operator import InferenceOperator from .monai_bundle_inference_operator import BundleConfigNames, IOMapping, MonaiBundleInferenceOperator -from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .monai_seg_inference_operator import MonaiSegInferenceOperator +from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .nii_data_loader_operator import NiftiDataLoader +from .nii_data_writer_operator import NiftiDataWriter from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter -from .nii_data_writer_operator import NiftiDataWriter From 96ab7cbc3b7fc410379aabf75f3249e5b9296860 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:39:56 +0000 Subject: [PATCH 101/118] Refactor NiftiDataLoader to return transposed numpy array from NIfTI image Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/nii_data_loader_operator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/nii_data_loader_operator.py b/monai/deploy/operators/nii_data_loader_operator.py index e886df24..67b0e070 100644 --- a/monai/deploy/operators/nii_data_loader_operator.py +++ b/monai/deploy/operators/nii_data_loader_operator.py @@ -80,7 +80,8 @@ def convert_and_save(self, nii_path): image_reader = SimpleITK.ImageFileReader() image_reader.SetFileName(str(nii_path)) image = image_reader.Execute() - return image + image_np = np.transpose(SimpleITK.GetArrayFromImage(image), [2, 1, 0]) + return image_np def test(): From 420fe54c7b5691f5718447c24ac43841f429d8f8 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:42:28 +0000 Subject: [PATCH 102/118] Remove NiftiDataWriter operator and clean up imports in __init__.py Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/__init__.py | 1 - .../operators/nii_data_writer_operator.py | 103 ------------------ 2 files changed, 104 deletions(-) delete mode 100644 monai/deploy/operators/nii_data_writer_operator.py diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 18bc61a7..bd9de71a 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -51,7 +51,6 @@ from .monai_seg_inference_operator import MonaiSegInferenceOperator from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .nii_data_loader_operator import NiftiDataLoader -from .nii_data_writer_operator import NiftiDataWriter from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py deleted file mode 100644 index ed717c05..00000000 --- a/monai/deploy/operators/nii_data_writer_operator.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright 2021-2023 MONAI Consortium -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import logging -from pathlib import Path - -import numpy as np - -from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec -from monai.deploy.utils.importutil import optional_import - -SimpleITK, _ = optional_import("SimpleITK") - - -# @md.env(pip_packages=["SimpleITK>=2.0.2"]) -class NiftiDataWriter(Operator): - - def __init__(self, fragment: Fragment, *args, output_file: Path, **kwargs) -> None: - """Creates an instance with the file path to load image from. - - Args: - fragment (Fragment): An instance of the Application class which is derived from Fragment. - input_path (Path): The file Path to read from, overridden by valid named input on compute. - """ - self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) - - self.output_file = output_file - self.input_name_seg = "seg_image" - self.input_name_output_file = "output_file" - - # Need to call the base class constructor last - super().__init__(fragment, *args, **kwargs) - - def setup(self, spec: OperatorSpec): - spec.input(self.input_name_seg) - spec.input(self.input_name_output_file).condition(ConditionType.NONE) # Optional input not requiring sender. - - def compute(self, op_input, op_output, context): - """Performs computation with the provided context.""" - - - seg_image = op_input.receive(self.input_name_seg) - - - # If the optional named input, output_folder, has content, use it instead of the one set on the object. - # Since this input is optional, must check if data present and if Path or str. - output_file = None - try: - output_file = op_input.receive(self.input_name_output_file) - except Exception: - pass - - if not output_file or not isinstance(output_file, (Path, str)): - output_file = self.output_file - - self.convert_and_save(seg_image, output_file) - - def convert_and_save(self, seg_image, nii_path): - """ - reads the nifti image and returns a numpy image array - """ - image_writer = SimpleITK.ImageFileWriter() - - pixdim = seg_image.metadata()["pixdim"] - if pixdim[0] == 1: - pixdim = np.array(pixdim[1:4]) - image = SimpleITK.GetImageFromArray(seg_image._data) - image.SetSpacing(pixdim) - - if len(seg_image.metadata()["direction"]) == 16: - direction = [] - direction.extend(seg_image.metadata()["direction"][0:3]) - direction.extend(seg_image.metadata()["direction"][4:7]) - direction.extend(seg_image.metadata()["direction"][8:11]) - image.SetDirection(direction) - else: - image.SetDirection(seg_image.metadata()["direction"]) - - image.SetOrigin(seg_image.metadata()["origin"]) - - image_writer.SetFileName(nii_path) - image_writer.Execute(image) - - -def test(): - ... - - -def main(): - test() - - -if __name__ == "__main__": - main() From 22ca8e5f16c29369ea711747e93d95351c78416c Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:44:11 +0000 Subject: [PATCH 103/118] Remove SimpleITK image handling from MonaiBundleInferenceOperator Signed-off-by: Simone Bendazzoli --- .../operators/monai_bundle_inference_operator.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index c15b0b66..d5aa9ee3 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -22,9 +22,9 @@ from typing import Any, Dict, List, Optional, Tuple, Type, Union import numpy as np - import SimpleITK from SimpleITK import Image as SimpleITKImage + from monai.deploy.core import AppContext, Fragment, Image, IOType, OperatorSpec from monai.deploy.utils.importutil import optional_import @@ -705,16 +705,6 @@ def _receive_input(self, name: str, op_input, context): logging.debug(f"Metadata of the converted input image: {metadata}") elif isinstance(value, np.ndarray): value = torch.from_numpy(value).to(self._device) - elif isinstance(value, SimpleITKImage): - metadata = {} - metadata["pixdim"] = np.asarray(value.GetSpacing()) - metadata["origin"] = np.asarray(value.GetOrigin()) - metadata["direction"] = np.asarray(value.GetDirection()) - if len(value.GetSize()) == 3: - metadata["pixdim"] = np.insert(np.asarray(value.GetSpacing()), 0, 1.0) - value = np.transpose(SimpleITK.GetArrayFromImage(value), [2, 1, 0]) - else: - value = np.transpose(SimpleITK.GetArrayFromImage(value), [0, 3, 2, 1]) # else value is some other object from memory From 326c859ee2b7f40e2d5cc748dd7533dff6e76c1a Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 24 Jun 2025 15:03:51 +0000 Subject: [PATCH 104/118] Fix import statement for MONetBundleInferenceOperator to use the correct module path Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index 71a59f93..dfb2aa37 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -23,7 +23,7 @@ from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator from monai.deploy.operators.monai_bundle_inference_operator import BundleConfigNames, IOMapping -from monai.deploy.operators.monai_nnunet_bundle_inference_operator import MONetBundleInferenceOperator +from monai.deploy.operators.monet_bundle_inference_operator import MONetBundleInferenceOperator from monai.deploy.operators.stl_conversion_operator import STLConversionOperator From 71c2e7e70e5425ee2438fcd585ca6c3d168431f7 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:08:16 -0700 Subject: [PATCH 105/118] Fix _version.py and various version-related issues (#539) - Removed unnecessary logic in setup.py - Fix versioneer issues Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- monai/deploy/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 05090b52..415119da 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,3 +23,6 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] + +from . import _version +__version__ = _version.get_versions()['version'] From bb9424dbf93d353ee322af9b2364c6b02b2f0e73 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 21:00:44 -0700 Subject: [PATCH 106/118] =?UTF-8?q?Bump=20version:=202.0.0=20=E2=86=92=203?= =?UTF-8?q?.0.0=20(#540)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump version: 2.0.0 β†’ 3.0.0 Signed-off-by: M Q * Bump version: 2.0.0 -> 3.0.0 with __init__.py fix Signed-off-by: M Q * Remove blank line complained by black Signed-off-by: M Q * Fix more formatting complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- monai/deploy/__init__.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 415119da..05090b52 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,6 +23,3 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] - -from . import _version -__version__ = _version.get_versions()['version'] From 3246307cea5e91b2fccee7a63b2c67af48368239 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Thu, 26 Jun 2025 19:35:13 +0000 Subject: [PATCH 107/118] Fix formatting in docstring and remove unused import statements in MONetBundleInferenceOperator Signed-off-by: Simone Bendazzoli --- examples/apps/ai_spleen_nnunet_seg_app/app.py | 2 +- .../monet_bundle_inference_operator.py | 21 +------------------ 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/examples/apps/ai_spleen_nnunet_seg_app/app.py b/examples/apps/ai_spleen_nnunet_seg_app/app.py index dfb2aa37..9402e233 100644 --- a/examples/apps/ai_spleen_nnunet_seg_app/app.py +++ b/examples/apps/ai_spleen_nnunet_seg_app/app.py @@ -34,7 +34,7 @@ class AISpleennnUNetSegApp(Application): """Demonstrates inference with built-in MONet Bundle inference operator with DICOM files as input/output This application loads a set of DICOM instances, select the appropriate series, converts the series to - 3D volume image, performs inference with the built-in MONet Bundle inference operator, including nnUNet resampling,pre-processing + 3D volume image, performs inference with the built-in MONet Bundle inference operator, including nnUNet resampling, pre-processing and post-processing, save the segmentation image in a DICOM Seg OID in an instance file, and optionally the surface mesh in STL format. diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index 811c439f..575c23e6 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -15,27 +15,8 @@ from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config from monai.deploy.utils.importutil import optional_import -MONAI_UTILS = "monai.utils" -nibabel, _ = optional_import("nibabel", "3.2.1") torch, _ = optional_import("torch", "1.10.2") -NdarrayOrTensor, _ = optional_import("monai.config", name="NdarrayOrTensor") -MetaTensor, _ = optional_import("monai.data.meta_tensor", name="MetaTensor") -PostFix, _ = optional_import("monai.utils.enums", name="PostFix") # For the default meta_key_postfix -first, _ = optional_import("monai.utils.misc", name="first") -ensure_tuple, _ = optional_import(MONAI_UTILS, name="ensure_tuple") -convert_to_dst_type, _ = optional_import(MONAI_UTILS, name="convert_to_dst_type") -Key, _ = optional_import(MONAI_UTILS, name="ImageMetaKey") -MetaKeys, _ = optional_import(MONAI_UTILS, name="MetaKeys") -SpaceKeys, _ = optional_import(MONAI_UTILS, name="SpaceKeys") -Compose_, _ = optional_import("monai.transforms", name="Compose") -ConfigParser_, _ = optional_import("monai.bundle", name="ConfigParser") -MapTransform_, _ = optional_import("monai.transforms", name="MapTransform") -SimpleInferer, _ = optional_import("monai.inferers", name="SimpleInferer") - -Compose: Any = Compose_ -MapTransform: Any = MapTransform_ -ConfigParser: Any = ConfigParser_ __all__ = ["MONetBundleInferenceOperator"] @@ -82,7 +63,7 @@ def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, .. """Predicts output using the inferer.""" self._nnunet_predictor.predictor.network = self._model_network - # os.environ['nnUNet_def_n_proc'] = "1" + if len(data.shape) == 4: data = data[None] return self._nnunet_predictor(data) From d650d7ab145d7d398c68df87baa58e860c433621 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Thu, 26 Jun 2025 19:39:29 +0000 Subject: [PATCH 108/118] Enhance predict method to support multimodal data concatenation and update docstring Signed-off-by: Simone Bendazzoli --- .../operators/monet_bundle_inference_operator.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/monai/deploy/operators/monet_bundle_inference_operator.py b/monai/deploy/operators/monet_bundle_inference_operator.py index 575c23e6..ef567c90 100644 --- a/monai/deploy/operators/monet_bundle_inference_operator.py +++ b/monai/deploy/operators/monet_bundle_inference_operator.py @@ -14,9 +14,10 @@ from monai.deploy.core import Image from monai.deploy.operators.monai_bundle_inference_operator import MonaiBundleInferenceOperator, get_bundle_config from monai.deploy.utils.importutil import optional_import +from monai.transforms import ConcatItemsd, ResampleToMatch torch, _ = optional_import("torch", "1.10.2") - +MetaTensor, _ = optional_import("monai.data.meta_tensor", name="MetaTensor") __all__ = ["MONetBundleInferenceOperator"] @@ -60,10 +61,18 @@ def _init_config(self, config_names): self._nnunet_predictor = parser.get_parsed_content("network_def") def predict(self, data: Any, *args, **kwargs) -> Union[Image, Any, Tuple[Any, ...], Dict[Any, Any]]: - """Predicts output using the inferer.""" + """Predicts output using the inferer. If multimodal data is provided as keyword arguments, + it concatenates the data with the main input data.""" self._nnunet_predictor.predictor.network = self._model_network + if len(kwargs) > 0: + multimodal_data = {"image": data} + for key in kwargs.keys(): + if isinstance(kwargs[key], MetaTensor): + multimodal_data[key] = ResampleToMatch(mode="bilinear")(kwargs[key], img_dst=data + ) + data = ConcatItemsd(keys=list(multimodal_data.keys()),name="image")(multimodal_data)["image"] if len(data.shape) == 4: data = data[None] return self._nnunet_predictor(data) From 8e158036fa541aefa07820fac6e9c5515bb4d812 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Wed, 16 Apr 2025 15:23:08 +0000 Subject: [PATCH 109/118] Add NiftiDataWriter operator and update NiftiDataLoader to return SimpleITK image Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/__init__.py | 1 + .../monai_bundle_inference_operator.py | 12 +++ .../operators/nii_data_loader_operator.py | 3 +- .../operators/nii_data_writer_operator.py | 100 ++++++++++++++++++ 4 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 monai/deploy/operators/nii_data_writer_operator.py diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index bd9de71a..9e47195c 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -54,3 +54,4 @@ from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter +from .nii_data_writer_operator import NiftiDataWriter diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index d5aa9ee3..9b880876 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -25,6 +25,8 @@ import SimpleITK from SimpleITK import Image as SimpleITKImage +import SimpleITK +from SimpleITK import Image as SimpleITKImage from monai.deploy.core import AppContext, Fragment, Image, IOType, OperatorSpec from monai.deploy.utils.importutil import optional_import @@ -705,6 +707,16 @@ def _receive_input(self, name: str, op_input, context): logging.debug(f"Metadata of the converted input image: {metadata}") elif isinstance(value, np.ndarray): value = torch.from_numpy(value).to(self._device) + elif isinstance(value, SimpleITKImage): + metadata = {} + metadata["pixdim"] = np.asarray(value.GetSpacing()) + metadata["origin"] = np.asarray(value.GetOrigin()) + metadata["direction"] = np.asarray(value.GetDirection()) + if len(value.GetSize()) == 3: + metadata["pixdim"] = np.insert(np.asarray(value.GetSpacing()), 0, 1.0) + value = np.transpose(SimpleITK.GetArrayFromImage(value), [2, 1, 0]) + else: + value = np.transpose(SimpleITK.GetArrayFromImage(value), [0, 3, 2, 1]) # else value is some other object from memory diff --git a/monai/deploy/operators/nii_data_loader_operator.py b/monai/deploy/operators/nii_data_loader_operator.py index 67b0e070..e886df24 100644 --- a/monai/deploy/operators/nii_data_loader_operator.py +++ b/monai/deploy/operators/nii_data_loader_operator.py @@ -80,8 +80,7 @@ def convert_and_save(self, nii_path): image_reader = SimpleITK.ImageFileReader() image_reader.SetFileName(str(nii_path)) image = image_reader.Execute() - image_np = np.transpose(SimpleITK.GetArrayFromImage(image), [2, 1, 0]) - return image_np + return image def test(): diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py new file mode 100644 index 00000000..003395ce --- /dev/null +++ b/monai/deploy/operators/nii_data_writer_operator.py @@ -0,0 +1,100 @@ +# Copyright 2021-2023 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import logging +from pathlib import Path + +import numpy as np + +from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec +from monai.deploy.utils.importutil import optional_import + +SimpleITK, _ = optional_import("SimpleITK") + + +# @md.env(pip_packages=["SimpleITK>=2.0.2"]) +class NiftiDataWriter(Operator): + + def __init__(self, fragment: Fragment, *args, output_file: Path, **kwargs) -> None: + """Creates an instance with the file path to load image from. + + Args: + fragment (Fragment): An instance of the Application class which is derived from Fragment. + input_path (Path): The file Path to read from, overridden by valid named input on compute. + """ + self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) + + self.output_file = output_file + self.input_name_seg = "seg_image" + self.input_name_output_file = "output_file" + + # Need to call the base class constructor last + super().__init__(fragment, *args, **kwargs) + + def setup(self, spec: OperatorSpec): + spec.input(self.input_name_seg) + spec.input(self.input_name_output_file).condition(ConditionType.NONE) # Optional input not requiring sender. + + def compute(self, op_input, op_output, context): + """Performs computation with the provided context.""" + + + seg_image = op_input.receive(self.input_name_seg) + + + # If the optional named input, output_folder, has content, use it instead of the one set on the object. + # Since this input is optional, must check if data present and if Path or str. + output_file = None + try: + output_file = op_input.receive(self.input_name_output_file) + except Exception: + pass + + if not output_file or not isinstance(output_file, (Path, str)): + output_file = self.output_file + + self.convert_and_save(seg_image, output_file) + + def convert_and_save(self, seg_image, nii_path): + """ + reads the nifti image and returns a numpy image array + """ + image_writer = SimpleITK.ImageFileWriter() + + image = SimpleITK.GetImageFromArray(seg_image._data) + image.SetSpacing(seg_image.metadata()["pixdim"]) + + if len(seg_image.metadata()["direction"]) == 16: + direction = [] + direction.extend(seg_image.metadata()["direction"][0:3]) + direction.extend(seg_image.metadata()["direction"][4:7]) + direction.extend(seg_image.metadata()["direction"][8:11]) + image.SetDirection(direction) + else: + image.SetDirection(seg_image.metadata()["direction"]) + + image.SetOrigin(seg_image.metadata()["origin"]) + + image_writer.SetFileName(nii_path) + image_writer.Execute(image) + + +def test(): + ... + + +def main(): + test() + + +if __name__ == "__main__": + main() From bafd8699a93804c8023362855900fc130a7e8071 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:08:16 -0700 Subject: [PATCH 110/118] Fix _version.py and various version-related issues (#539) - Removed unnecessary logic in setup.py - Fix versioneer issues Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- monai/deploy/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 05090b52..415119da 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,3 +23,6 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] + +from . import _version +__version__ = _version.get_versions()['version'] From 0a4e21f53eee71392a8ba97b98d42f379f687d2a Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 21:00:44 -0700 Subject: [PATCH 111/118] =?UTF-8?q?Bump=20version:=202.0.0=20=E2=86=92=203?= =?UTF-8?q?.0.0=20(#540)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump version: 2.0.0 β†’ 3.0.0 Signed-off-by: M Q * Bump version: 2.0.0 -> 3.0.0 with __init__.py fix Signed-off-by: M Q * Remove blank line complained by black Signed-off-by: M Q * Fix more formatting complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- monai/deploy/__init__.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 415119da..05090b52 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,6 +23,3 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] - -from . import _version -__version__ = _version.get_versions()['version'] From d5d4477ab648062b7d49adce3ab82cdd20048a05 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Mon, 12 May 2025 20:12:56 +0000 Subject: [PATCH 112/118] Fix NiftiDataWriter spacing handling for 1mm pixel dimensions Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/nii_data_writer_operator.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py index 003395ce..ed717c05 100644 --- a/monai/deploy/operators/nii_data_writer_operator.py +++ b/monai/deploy/operators/nii_data_writer_operator.py @@ -70,8 +70,11 @@ def convert_and_save(self, seg_image, nii_path): """ image_writer = SimpleITK.ImageFileWriter() + pixdim = seg_image.metadata()["pixdim"] + if pixdim[0] == 1: + pixdim = np.array(pixdim[1:4]) image = SimpleITK.GetImageFromArray(seg_image._data) - image.SetSpacing(seg_image.metadata()["pixdim"]) + image.SetSpacing(pixdim) if len(seg_image.metadata()["direction"]) == 16: direction = [] From 39f66cdf8d1d37524f7a3623e3e5dc051921ff5f Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:38:33 +0000 Subject: [PATCH 113/118] Update application title and fix operator name in imports for MONet Bundle Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 9e47195c..18bc61a7 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -51,7 +51,7 @@ from .monai_seg_inference_operator import MonaiSegInferenceOperator from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .nii_data_loader_operator import NiftiDataLoader +from .nii_data_writer_operator import NiftiDataWriter from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter -from .nii_data_writer_operator import NiftiDataWriter From f1e0dbb0ec53d274307995eb13ba4bfa69ce8382 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:39:56 +0000 Subject: [PATCH 114/118] Refactor NiftiDataLoader to return transposed numpy array from NIfTI image Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/nii_data_loader_operator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monai/deploy/operators/nii_data_loader_operator.py b/monai/deploy/operators/nii_data_loader_operator.py index e886df24..67b0e070 100644 --- a/monai/deploy/operators/nii_data_loader_operator.py +++ b/monai/deploy/operators/nii_data_loader_operator.py @@ -80,7 +80,8 @@ def convert_and_save(self, nii_path): image_reader = SimpleITK.ImageFileReader() image_reader.SetFileName(str(nii_path)) image = image_reader.Execute() - return image + image_np = np.transpose(SimpleITK.GetArrayFromImage(image), [2, 1, 0]) + return image_np def test(): From d035ab3d7842ea705c7dc59358ae70c997df4938 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:42:28 +0000 Subject: [PATCH 115/118] Remove NiftiDataWriter operator and clean up imports in __init__.py Signed-off-by: Simone Bendazzoli --- monai/deploy/operators/__init__.py | 1 - .../operators/nii_data_writer_operator.py | 103 ------------------ 2 files changed, 104 deletions(-) delete mode 100644 monai/deploy/operators/nii_data_writer_operator.py diff --git a/monai/deploy/operators/__init__.py b/monai/deploy/operators/__init__.py index 18bc61a7..bd9de71a 100644 --- a/monai/deploy/operators/__init__.py +++ b/monai/deploy/operators/__init__.py @@ -51,7 +51,6 @@ from .monai_seg_inference_operator import MonaiSegInferenceOperator from .monet_bundle_inference_operator import MONetBundleInferenceOperator from .nii_data_loader_operator import NiftiDataLoader -from .nii_data_writer_operator import NiftiDataWriter from .png_converter_operator import PNGConverterOperator from .publisher_operator import PublisherOperator from .stl_conversion_operator import STLConversionOperator, STLConverter diff --git a/monai/deploy/operators/nii_data_writer_operator.py b/monai/deploy/operators/nii_data_writer_operator.py deleted file mode 100644 index ed717c05..00000000 --- a/monai/deploy/operators/nii_data_writer_operator.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright 2021-2023 MONAI Consortium -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import logging -from pathlib import Path - -import numpy as np - -from monai.deploy.core import ConditionType, Fragment, Operator, OperatorSpec -from monai.deploy.utils.importutil import optional_import - -SimpleITK, _ = optional_import("SimpleITK") - - -# @md.env(pip_packages=["SimpleITK>=2.0.2"]) -class NiftiDataWriter(Operator): - - def __init__(self, fragment: Fragment, *args, output_file: Path, **kwargs) -> None: - """Creates an instance with the file path to load image from. - - Args: - fragment (Fragment): An instance of the Application class which is derived from Fragment. - input_path (Path): The file Path to read from, overridden by valid named input on compute. - """ - self._logger = logging.getLogger("{}.{}".format(__name__, type(self).__name__)) - - self.output_file = output_file - self.input_name_seg = "seg_image" - self.input_name_output_file = "output_file" - - # Need to call the base class constructor last - super().__init__(fragment, *args, **kwargs) - - def setup(self, spec: OperatorSpec): - spec.input(self.input_name_seg) - spec.input(self.input_name_output_file).condition(ConditionType.NONE) # Optional input not requiring sender. - - def compute(self, op_input, op_output, context): - """Performs computation with the provided context.""" - - - seg_image = op_input.receive(self.input_name_seg) - - - # If the optional named input, output_folder, has content, use it instead of the one set on the object. - # Since this input is optional, must check if data present and if Path or str. - output_file = None - try: - output_file = op_input.receive(self.input_name_output_file) - except Exception: - pass - - if not output_file or not isinstance(output_file, (Path, str)): - output_file = self.output_file - - self.convert_and_save(seg_image, output_file) - - def convert_and_save(self, seg_image, nii_path): - """ - reads the nifti image and returns a numpy image array - """ - image_writer = SimpleITK.ImageFileWriter() - - pixdim = seg_image.metadata()["pixdim"] - if pixdim[0] == 1: - pixdim = np.array(pixdim[1:4]) - image = SimpleITK.GetImageFromArray(seg_image._data) - image.SetSpacing(pixdim) - - if len(seg_image.metadata()["direction"]) == 16: - direction = [] - direction.extend(seg_image.metadata()["direction"][0:3]) - direction.extend(seg_image.metadata()["direction"][4:7]) - direction.extend(seg_image.metadata()["direction"][8:11]) - image.SetDirection(direction) - else: - image.SetDirection(seg_image.metadata()["direction"]) - - image.SetOrigin(seg_image.metadata()["origin"]) - - image_writer.SetFileName(nii_path) - image_writer.Execute(image) - - -def test(): - ... - - -def main(): - test() - - -if __name__ == "__main__": - main() From 8bfc852cb88a11b13e7e389fb4a146210404b055 Mon Sep 17 00:00:00 2001 From: Simone Bendazzoli Date: Tue, 17 Jun 2025 12:44:11 +0000 Subject: [PATCH 116/118] Remove SimpleITK image handling from MonaiBundleInferenceOperator Signed-off-by: Simone Bendazzoli --- .../operators/monai_bundle_inference_operator.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/monai/deploy/operators/monai_bundle_inference_operator.py b/monai/deploy/operators/monai_bundle_inference_operator.py index 9b880876..3959a794 100644 --- a/monai/deploy/operators/monai_bundle_inference_operator.py +++ b/monai/deploy/operators/monai_bundle_inference_operator.py @@ -707,16 +707,6 @@ def _receive_input(self, name: str, op_input, context): logging.debug(f"Metadata of the converted input image: {metadata}") elif isinstance(value, np.ndarray): value = torch.from_numpy(value).to(self._device) - elif isinstance(value, SimpleITKImage): - metadata = {} - metadata["pixdim"] = np.asarray(value.GetSpacing()) - metadata["origin"] = np.asarray(value.GetOrigin()) - metadata["direction"] = np.asarray(value.GetDirection()) - if len(value.GetSize()) == 3: - metadata["pixdim"] = np.insert(np.asarray(value.GetSpacing()), 0, 1.0) - value = np.transpose(SimpleITK.GetArrayFromImage(value), [2, 1, 0]) - else: - value = np.transpose(SimpleITK.GetArrayFromImage(value), [0, 3, 2, 1]) # else value is some other object from memory From 7141271bf46d7055036f07ffe50d641a1e43ed2f Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:08:16 -0700 Subject: [PATCH 117/118] Fix _version.py and various version-related issues (#539) - Removed unnecessary logic in setup.py - Fix versioneer issues Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- monai/deploy/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 05090b52..415119da 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,3 +23,6 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] + +from . import _version +__version__ = _version.get_versions()['version'] From bb93b261fda0dcebc3b306a9fba117e128561f30 Mon Sep 17 00:00:00 2001 From: Ming M Qin <38891913+MMelQin@users.noreply.github.com> Date: Tue, 22 Apr 2025 21:00:44 -0700 Subject: [PATCH 118/118] =?UTF-8?q?Bump=20version:=202.0.0=20=E2=86=92=203?= =?UTF-8?q?.0.0=20(#540)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump version: 2.0.0 β†’ 3.0.0 Signed-off-by: M Q * Bump version: 2.0.0 -> 3.0.0 with __init__.py fix Signed-off-by: M Q * Remove blank line complained by black Signed-off-by: M Q * Fix more formatting complaints Signed-off-by: M Q --------- Signed-off-by: M Q Signed-off-by: Simone Bendazzoli --- monai/deploy/__init__.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/monai/deploy/__init__.py b/monai/deploy/__init__.py index 415119da..05090b52 100644 --- a/monai/deploy/__init__.py +++ b/monai/deploy/__init__.py @@ -23,6 +23,3 @@ from . import _version, conditions, core, exceptions, logger, resources, utils __version__ = _version.get_versions()["version"] - -from . import _version -__version__ = _version.get_versions()['version']