From a39262443e42667d06aa124d179dc8ced1fdf807 Mon Sep 17 00:00:00 2001 From: Vikash Gupta Date: Mon, 17 Jun 2024 10:18:28 -0400 Subject: [PATCH 1/2] Added a sample integration for LLM models in huggingface Signed-off-by: Vikash Gupta --- .../hugging_face_integration_app/Dockerfile | 9 ++++ .../hugging_face_integration_app/debug.sh | 6 +++ .../med_image_generation/app.py | 40 ++++++++++++++++++ .../med_image_generation/out.jpg | Bin 0 -> 29653 bytes .../med_image_generation/run.sh | 2 + 5 files changed, 57 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..8751d03c --- /dev/null +++ b/examples/apps/hugging_face_integration_app/med_image_generation/app.py @@ -0,0 +1,40 @@ +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 of ankle with a fractured toe" + 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 d03c0ebeb3bbff5c65c875d9d88b9803148e5f76 Mon Sep 17 00:00:00 2001 From: Vikash Gupta Date: Mon, 17 Jun 2024 10:35:29 -0400 Subject: [PATCH 2/2] Fixed minor issue Signed-off-by: Vikash Gupta --- .../hugging_face_integration_app/med_image_generation/app.py | 1 - 1 file changed, 1 deletion(-) 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 8751d03c..e4e37aa2 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 @@ -25,7 +25,6 @@ def compose(self): 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 of ankle with a fractured toe" prompt = "Show me an X ray pevic fracture" image = pipe(prompt).images[0] image.save(output_path)