From f4efe8b78765185f38de32359953f3870dc72010 Mon Sep 17 00:00:00 2001 From: joaquincabezas <1833086+joaquincabezas@users.noreply.github.com> Date: Mon, 9 Oct 2023 17:24:28 +0200 Subject: [PATCH 1/4] fix torchserve version --- docker/serve/Dockerfile | 5 +- tools/torchserve/mmpretrain2torchserve.py | 88 +++++++++++++---------- 2 files changed, 53 insertions(+), 40 deletions(-) diff --git a/docker/serve/Dockerfile b/docker/serve/Dockerfile index bff871b7..c8080d0d 100644 --- a/docker/serve/Dockerfile +++ b/docker/serve/Dockerfile @@ -1,6 +1,7 @@ ARG PYTORCH="1.12.1" ARG CUDA="11.3" ARG CUDNN="8" +ARG TORCHSERVE="0.7.1" FROM pytorch/torchserve:latest-gpu ARG MMPRE="1.0.2" @@ -11,8 +12,8 @@ ENV HOME="/home/model-server" ENV PATH="/opt/conda/bin:$HOME/.local/bin:$PATH" RUN export FORCE_CUDA=1 -# TORCHSEVER -RUN pip install torchserve torch-model-archiver +# TORCHSERVE +RUN pip install torchserve==${TORCHSERVE} torch-model-archiver==${TORCHSERVE} RUN pip install nvgpu # OPEN-MMLAB diff --git a/tools/torchserve/mmpretrain2torchserve.py b/tools/torchserve/mmpretrain2torchserve.py index 8d53bf3f..008833cc 100644 --- a/tools/torchserve/mmpretrain2torchserve.py +++ b/tools/torchserve/mmpretrain2torchserve.py @@ -10,8 +10,9 @@ try: from model_archiver.model_packaging_utils import ModelExportUtils except ImportError: raise ImportError( - 'Please run `pip install torchserve torch-model-archiver"` to ' - 'install required third-party libraries.') + 'Please run `pip install torchserve==0.7.1 torch-model-archiver==0.7.1"` to ' + "install required third-party libraries." + ) def mmpretrain2torchserve( @@ -19,7 +20,7 @@ def mmpretrain2torchserve( checkpoint_file: str, output_folder: str, model_name: str, - model_version: str = '1.0', + model_version: str = "1.0", force: bool = False, ): """Converts mmpretrain model (config + checkpoint) to TorchServe `.mar`. @@ -49,64 +50,75 @@ def mmpretrain2torchserve( config = mmengine.Config.fromfile(config_file) with TemporaryDirectory() as tmpdir: - config.dump(f'{tmpdir}/config.py') + config.dump(f"{tmpdir}/config.py") args = Namespace( **{ - 'model_file': f'{tmpdir}/config.py', - 'serialized_file': checkpoint_file, - 'handler': f'{Path(__file__).parent}/mmpretrain_handler.py', - 'model_name': model_name or Path(checkpoint_file).stem, - 'version': model_version, - 'export_path': output_folder, - 'force': force, - 'requirements_file': None, - 'extra_files': None, - 'runtime': 'python', - 'archive_format': 'default' - }) + "model_file": f"{tmpdir}/config.py", + "serialized_file": checkpoint_file, + "handler": f"{Path(__file__).parent}/mmpretrain_handler.py", + "model_name": model_name or Path(checkpoint_file).stem, + "version": model_version, + "export_path": output_folder, + "force": force, + "requirements_file": None, + "extra_files": None, + "runtime": "python", + "archive_format": "default", + } + ) manifest = ModelExportUtils.generate_manifest_json(args) package_model(args, manifest) def parse_args(): parser = ArgumentParser( - description='Convert mmpretrain models to TorchServe `.mar` format.') - parser.add_argument('config', type=str, help='config file path') - parser.add_argument('checkpoint', type=str, help='checkpoint file path') + description="Convert mmpretrain models to TorchServe `.mar` format." + ) + parser.add_argument("config", type=str, help="config file path") + parser.add_argument("checkpoint", type=str, help="checkpoint file path") parser.add_argument( - '--output-folder', + "--output-folder", type=str, required=True, - help='Folder where `{model_name}.mar` will be created.') + help="Folder where `{model_name}.mar` will be created.", + ) parser.add_argument( - '--model-name', + "--model-name", type=str, default=None, - help='If not None, used for naming the `{model_name}.mar`' - 'file that will be created under `output_folder`.' - 'If None, `{Path(checkpoint_file).stem}` will be used.') + help="If not None, used for naming the `{model_name}.mar`" + "file that will be created under `output_folder`." + "If None, `{Path(checkpoint_file).stem}` will be used.", + ) parser.add_argument( - '--model-version', - type=str, - default='1.0', - help='Number used for versioning.') + "--model-version", type=str, default="1.0", help="Number used for versioning." + ) parser.add_argument( - '-f', - '--force', - action='store_true', - help='overwrite the existing `{model_name}.mar`') + "-f", + "--force", + action="store_true", + help="overwrite the existing `{model_name}.mar`", + ) args = parser.parse_args() return args -if __name__ == '__main__': +if __name__ == "__main__": args = parse_args() if package_model is None: - raise ImportError('`torch-model-archiver` is required.' - 'Try: pip install torch-model-archiver') + raise ImportError( + "`torch-model-archiver` is required." + "Try: pip install torch-model-archiver==0.7.1" + ) - mmpretrain2torchserve(args.config, args.checkpoint, args.output_folder, - args.model_name, args.model_version, args.force) + mmpretrain2torchserve( + args.config, + args.checkpoint, + args.output_folder, + args.model_name, + args.model_version, + args.force, + ) From aaf9e4002aacebfd25a664d9b7f681b091584bd0 Mon Sep 17 00:00:00 2001 From: joaquincabezas <1833086+joaquincabezas@users.noreply.github.com> Date: Mon, 9 Oct 2023 17:30:01 +0200 Subject: [PATCH 2/4] undo black formatting --- tools/torchserve/mmpretrain2torchserve.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/torchserve/mmpretrain2torchserve.py b/tools/torchserve/mmpretrain2torchserve.py index 008833cc..02a8e177 100644 --- a/tools/torchserve/mmpretrain2torchserve.py +++ b/tools/torchserve/mmpretrain2torchserve.py @@ -10,7 +10,7 @@ try: from model_archiver.model_packaging_utils import ModelExportUtils except ImportError: raise ImportError( - 'Please run `pip install torchserve==0.7.1 torch-model-archiver==0.7.1"` to ' + 'Please run `pip install torchserve==0.7.1 torch-model-archiver==0.7.1 "` to ' "install required third-party libraries." ) From dd920d40f5b19f8f180bc54e7bf819e1d48cbec2 Mon Sep 17 00:00:00 2001 From: joaquincabezas <1833086+joaquincabezas@users.noreply.github.com> Date: Mon, 9 Oct 2023 17:31:38 +0200 Subject: [PATCH 3/4] return to mmpretrain style --- tools/torchserve/mmpretrain2torchserve.py | 86 ++++++++++------------- 1 file changed, 37 insertions(+), 49 deletions(-) diff --git a/tools/torchserve/mmpretrain2torchserve.py b/tools/torchserve/mmpretrain2torchserve.py index 02a8e177..3aba9934 100644 --- a/tools/torchserve/mmpretrain2torchserve.py +++ b/tools/torchserve/mmpretrain2torchserve.py @@ -11,8 +11,7 @@ try: except ImportError: raise ImportError( 'Please run `pip install torchserve==0.7.1 torch-model-archiver==0.7.1 "` to ' - "install required third-party libraries." - ) + 'install required third-party libraries.') def mmpretrain2torchserve( @@ -20,7 +19,7 @@ def mmpretrain2torchserve( checkpoint_file: str, output_folder: str, model_name: str, - model_version: str = "1.0", + model_version: str = '1.0', force: bool = False, ): """Converts mmpretrain model (config + checkpoint) to TorchServe `.mar`. @@ -50,75 +49,64 @@ def mmpretrain2torchserve( config = mmengine.Config.fromfile(config_file) with TemporaryDirectory() as tmpdir: - config.dump(f"{tmpdir}/config.py") + config.dump(f'{tmpdir}/config.py') args = Namespace( **{ - "model_file": f"{tmpdir}/config.py", - "serialized_file": checkpoint_file, - "handler": f"{Path(__file__).parent}/mmpretrain_handler.py", - "model_name": model_name or Path(checkpoint_file).stem, - "version": model_version, - "export_path": output_folder, - "force": force, - "requirements_file": None, - "extra_files": None, - "runtime": "python", - "archive_format": "default", - } - ) + 'model_file': f'{tmpdir}/config.py', + 'serialized_file': checkpoint_file, + 'handler': f'{Path(__file__).parent}/mmpretrain_handler.py', + 'model_name': model_name or Path(checkpoint_file).stem, + 'version': model_version, + 'export_path': output_folder, + 'force': force, + 'requirements_file': None, + 'extra_files': None, + 'runtime': 'python', + 'archive_format': 'default' + }) manifest = ModelExportUtils.generate_manifest_json(args) package_model(args, manifest) def parse_args(): parser = ArgumentParser( - description="Convert mmpretrain models to TorchServe `.mar` format." - ) - parser.add_argument("config", type=str, help="config file path") - parser.add_argument("checkpoint", type=str, help="checkpoint file path") + description='Convert mmpretrain models to TorchServe `.mar` format.') + parser.add_argument('config', type=str, help='config file path') + parser.add_argument('checkpoint', type=str, help='checkpoint file path') parser.add_argument( - "--output-folder", + '--output-folder', type=str, required=True, - help="Folder where `{model_name}.mar` will be created.", - ) + help='Folder where `{model_name}.mar` will be created.') parser.add_argument( - "--model-name", + '--model-name', type=str, default=None, - help="If not None, used for naming the `{model_name}.mar`" - "file that will be created under `output_folder`." - "If None, `{Path(checkpoint_file).stem}` will be used.", - ) + help='If not None, used for naming the `{model_name}.mar`' + 'file that will be created under `output_folder`.' + 'If None, `{Path(checkpoint_file).stem}` will be used.') parser.add_argument( - "--model-version", type=str, default="1.0", help="Number used for versioning." - ) + '--model-version', + type=str, + default='1.0', + help='Number used for versioning.') parser.add_argument( - "-f", - "--force", - action="store_true", - help="overwrite the existing `{model_name}.mar`", - ) + '-f', + '--force', + action='store_true', + help='overwrite the existing `{model_name}.mar`') args = parser.parse_args() return args -if __name__ == "__main__": +if __name__ == '__main__': args = parse_args() if package_model is None: - raise ImportError( - "`torch-model-archiver` is required." - "Try: pip install torch-model-archiver==0.7.1" - ) + raise ImportError('`torch-model-archiver` is required.' + 'Try: pip install torch-model-archiver==0.7.1') - mmpretrain2torchserve( - args.config, - args.checkpoint, - args.output_folder, - args.model_name, - args.model_version, - args.force, - ) + mmpretrain2torchserve(args.config, args.checkpoint, args.output_folder, + args.model_name, args.model_version, args.force) From 79efd27a7ec15c84b3dd718644e900ffc31f7409 Mon Sep 17 00:00:00 2001 From: joaquincabezas <1833086+joaquincabezas@users.noreply.github.com> Date: Mon, 9 Oct 2023 18:08:03 +0200 Subject: [PATCH 4/4] linting --- tools/torchserve/mmpretrain2torchserve.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/torchserve/mmpretrain2torchserve.py b/tools/torchserve/mmpretrain2torchserve.py index 3aba9934..a0e0384a 100644 --- a/tools/torchserve/mmpretrain2torchserve.py +++ b/tools/torchserve/mmpretrain2torchserve.py @@ -10,7 +10,8 @@ try: from model_archiver.model_packaging_utils import ModelExportUtils except ImportError: raise ImportError( - 'Please run `pip install torchserve==0.7.1 torch-model-archiver==0.7.1 "` to ' + 'Please run ' + '`pip install torchserve==0.7.1 torch-model-archiver==0.7.1"` to ' 'install required third-party libraries.')