zww commited on
Commit
ba99fa4
1 Parent(s): 4929721

functional handler with gcs support

Browse files
Files changed (3) hide show
  1. Dockerfile +30 -0
  2. replace_handler.ipynb +143 -0
  3. stable_diffusion_handler.py +6 -5
Dockerfile ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM pytorch/torchserve:latest-gpu
2
+
3
+ # set user root
4
+ USER root
5
+
6
+ RUN pip install --upgrade pip
7
+
8
+ # Install dependencies
9
+ RUN pip install diffusers transformers accelerate invisible-watermark nvgpu google-cloud-storage tensorrt
10
+
11
+ # Copying model files
12
+ COPY ./config.properties /home/model-server/config.properties
13
+ COPY ./sketch-model-3.mar /home/model-server/sketch-model-3.mar
14
+
15
+ USER model-server
16
+
17
+ # Expose health and prediction listener ports from the image
18
+ EXPOSE 7080
19
+ EXPOSE 7081
20
+
21
+ # # Generate MAR file
22
+
23
+ CMD ["torchserve", \
24
+ "--start", \
25
+ "--ts-config=/home/model-server/config.properties", \
26
+ "--models", \
27
+ "sketch-model-3.mar", \
28
+ "--model-store", \
29
+ "/home/model-server"]
30
+
replace_handler.ipynb ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 2,
6
+ "id": "db06489e-2e2e-4d7f-bfab-13cf42261688",
7
+ "metadata": {},
8
+ "outputs": [
9
+ {
10
+ "name": "stdout",
11
+ "output_type": "stream",
12
+ "text": [
13
+ "im here\n"
14
+ ]
15
+ }
16
+ ],
17
+ "source": [
18
+ "print('im here')\n"
19
+ ]
20
+ },
21
+ {
22
+ "cell_type": "code",
23
+ "execution_count": 5,
24
+ "id": "9217fed7-ed85-4592-a480-ef15f0632501",
25
+ "metadata": {},
26
+ "outputs": [
27
+ {
28
+ "name": "stdout",
29
+ "output_type": "stream",
30
+ "text": [
31
+ "/home/jupyter\n"
32
+ ]
33
+ }
34
+ ],
35
+ "source": [
36
+ "cd .."
37
+ ]
38
+ },
39
+ {
40
+ "cell_type": "code",
41
+ "execution_count": 6,
42
+ "id": "502b64af-59f1-4ae9-89f3-378458ba52be",
43
+ "metadata": {},
44
+ "outputs": [
45
+ {
46
+ "name": "stdout",
47
+ "output_type": "stream",
48
+ "text": [
49
+ "replacing old file\n",
50
+ "Untitled.ipynb\n",
51
+ "README.md\n",
52
+ "config.properties\n",
53
+ ".gitattributes\n",
54
+ "model_index.json\n",
55
+ "Untitled1.ipynb\n",
56
+ "Dockerfile\n",
57
+ "stable_diffusion_handler.py\n",
58
+ "replacing stable_diffusion_handler.py\n",
59
+ "tokenizer_2/tokenizer_config.json\n",
60
+ "tokenizer_2/special_tokens_map.json\n",
61
+ "tokenizer_2/vocab.json\n",
62
+ "tokenizer_2/merges.txt\n",
63
+ "text_encoder/config.json\n",
64
+ "text_encoder/pytorch_model.bin\n",
65
+ "text_encoder_2/config.json\n",
66
+ "text_encoder_2/pytorch_model.bin\n",
67
+ "unet/config.json\n",
68
+ "unet/diffusion_pytorch_model.bin\n",
69
+ "tokenizer/tokenizer_config.json\n",
70
+ "tokenizer/special_tokens_map.json\n",
71
+ "tokenizer/vocab.json\n",
72
+ "tokenizer/merges.txt\n",
73
+ "scheduler/scheduler_config.json\n",
74
+ "vae/config.json\n",
75
+ "vae/diffusion_pytorch_model.bin\n",
76
+ "MAR-INF/MANIFEST.json\n"
77
+ ]
78
+ }
79
+ ],
80
+ "source": [
81
+ "import zipfile\n",
82
+ "\n",
83
+ "# Path to the existing .mar file and the file to be replaced\n",
84
+ "mar_path = \"export/sketch-model-3.mar\"\n",
85
+ "file_to_replace = \"stable_diffusion_handler.py\"\n",
86
+ "new_file_path = \"sketch-model-3/stable_diffusion_handler.py\"\n",
87
+ "\n",
88
+ "# # Create a temporary .mar file\n",
89
+ "temp_mar_path = \"sketch-model-3-updated.mar\"\n",
90
+ "\n",
91
+ "print(\"replacing old file\")\n",
92
+ "# Open the existing .mar and the temporary .mar\n",
93
+ "with zipfile.ZipFile(mar_path, 'r') as zip_ref, zipfile.ZipFile(temp_mar_path, 'w', zipfile.ZIP_STORED) as new_zip:\n",
94
+ " # Loop through existing files\n",
95
+ " for item in zip_ref.infolist():\n",
96
+ " print(item.filename)\n",
97
+ " buffer = zip_ref.read(item.filename)\n",
98
+ " \n",
99
+ " # Replace the file if it matches the target file name\n",
100
+ " if item.filename == file_to_replace:\n",
101
+ " print('replacing ', item.filename)\n",
102
+ " with open(new_file_path, \"rb\") as f:\n",
103
+ " new_buffer = f.read()\n",
104
+ " new_zip.writestr(item, new_buffer)\n",
105
+ " else:\n",
106
+ " new_zip.writestr(item, buffer)\n",
107
+ "\n",
108
+ "print('done')\n",
109
+ "# Remove the original .mar file and replace it with the new one\n",
110
+ "import os\n",
111
+ "os.remove(mar_path)\n",
112
+ "os.rename(temp_mar_path, mar_path)"
113
+ ]
114
+ }
115
+ ],
116
+ "metadata": {
117
+ "environment": {
118
+ "kernel": "conda-root-py",
119
+ "name": "workbench-notebooks.m110",
120
+ "type": "gcloud",
121
+ "uri": "gcr.io/deeplearning-platform-release/workbench-notebooks:m110"
122
+ },
123
+ "kernelspec": {
124
+ "display_name": "Python 3",
125
+ "language": "python",
126
+ "name": "conda-root-py"
127
+ },
128
+ "language_info": {
129
+ "codemirror_mode": {
130
+ "name": "ipython",
131
+ "version": 3
132
+ },
133
+ "file_extension": ".py",
134
+ "mimetype": "text/x-python",
135
+ "name": "python",
136
+ "nbconvert_exporter": "python",
137
+ "pygments_lexer": "ipython3",
138
+ "version": "3.10.12"
139
+ }
140
+ },
141
+ "nbformat": 4,
142
+ "nbformat_minor": 5
143
+ }
stable_diffusion_handler.py CHANGED
@@ -36,6 +36,7 @@ class DiffusersHandler(BaseHandler, ABC):
36
  """
37
 
38
  logger.info("Loading diffusion model")
 
39
 
40
  self.manifest = ctx.manifest
41
  properties = ctx.system_properties
@@ -97,10 +98,10 @@ class DiffusersHandler(BaseHandler, ABC):
97
  logger.info("Generated image: '%s'", inferences)
98
  return inferences
99
 
100
- def postprocess(self, inference_output):
101
  """Post Process Function converts the generated image into Torchserve readable format.
102
  Args:
103
- inference_output (list): It contains the generated image of the input text.
104
  Returns:
105
  (list): Returns a list of the images.
106
  """
@@ -108,7 +109,7 @@ class DiffusersHandler(BaseHandler, ABC):
108
  client = storage.Client()
109
  bucket = client.get_bucket(bucket_name)
110
  outputs = []
111
- for image in inference_output.images:
112
  image_name = str(uuid.uuid4())
113
 
114
  blob = bucket.blob(image_name + '.png')
@@ -119,8 +120,8 @@ class DiffusersHandler(BaseHandler, ABC):
119
  blob.upload_from_file(tmp, content_type='image/png')
120
 
121
  # generate txt file with the image name and the prompt inside
122
- blob = bucket.blob(image_name + '.txt')
123
- blob.upload_from_string(self.prompt)
124
 
125
  outputs.append('https://storage.googleapis.com/' + bucket_name + '/' + image_name + '.png')
126
  return outputs
 
36
  """
37
 
38
  logger.info("Loading diffusion model")
39
+ logger.info("I'm totally new and updated")
40
 
41
  self.manifest = ctx.manifest
42
  properties = ctx.system_properties
 
98
  logger.info("Generated image: '%s'", inferences)
99
  return inferences
100
 
101
+ def postprocess(self, inference_outputs):
102
  """Post Process Function converts the generated image into Torchserve readable format.
103
  Args:
104
+ inference_outputs (list): It contains the generated image of the input text.
105
  Returns:
106
  (list): Returns a list of the images.
107
  """
 
109
  client = storage.Client()
110
  bucket = client.get_bucket(bucket_name)
111
  outputs = []
112
+ for image in inference_outputs:
113
  image_name = str(uuid.uuid4())
114
 
115
  blob = bucket.blob(image_name + '.png')
 
120
  blob.upload_from_file(tmp, content_type='image/png')
121
 
122
  # generate txt file with the image name and the prompt inside
123
+ # blob = bucket.blob(image_name + '.txt')
124
+ # blob.upload_from_string(self.prompt)
125
 
126
  outputs.append('https://storage.googleapis.com/' + bucket_name + '/' + image_name + '.png')
127
  return outputs