echarlaix HF staff commited on
Commit
edf5256
·
1 Parent(s): 872b151

Add support of private repo

Browse files
Files changed (2) hide show
  1. app.py +44 -18
  2. requirements.txt +1 -2
app.py CHANGED
@@ -1,7 +1,7 @@
1
  import os
2
  import shutil
3
  import gradio as gr
4
- from huggingface_hub import HfApi, whoami, ModelCard
5
  from gradio_huggingfacehub_search import HuggingfaceHubSearch
6
  from textwrap import dedent
7
  from pathlib import Path
@@ -9,9 +9,6 @@ from pathlib import Path
9
  from tempfile import TemporaryDirectory
10
 
11
  from huggingface_hub.file_download import repo_folder_name
12
- from optimum.exporters.tasks import TasksManager
13
- from optimum.intel.utils.constant import _TASK_ALIASES
14
- from optimum.intel.openvino.utils import _HEAD_TO_AUTOMODELS
15
  from optimum.exporters import TasksManager
16
 
17
  from optimum.intel.utils.modeling_utils import _find_files_matching_pattern
@@ -28,9 +25,23 @@ from optimum.intel import (
28
  OVStableDiffusionPipeline,
29
  OVStableDiffusionXLPipeline,
30
  OVLatentConsistencyModelPipeline,
31
- OVModelForPix2Struct,
32
  OVWeightQuantizationConfig,
33
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
  def quantize_model(
36
  model_id: str,
@@ -42,23 +53,33 @@ def quantize_model(
42
  oauth_token: gr.OAuthToken,
43
  ):
44
  if oauth_token.token is None:
45
- raise ValueError("You must be logged in to use this space")
 
 
 
46
 
47
  model_name = model_id.split("/")[-1]
48
  username = whoami(oauth_token.token)["name"]
49
  new_repo_id = f"{username}/{model_name}-openvino-{dtype}"
50
- task = TasksManager.infer_task_from_model(model_id)
51
- library_name = TasksManager.infer_library_from_model(model_id)
52
- # task = TasksManager.infer_task_from_model(model_id, token=oauth_token.token)
53
- # library_name = TasksManager.infer_library_from_model(model_id, token=oauth_token.token)
54
 
55
- if task not in _HEAD_TO_AUTOMODELS:
56
- raise ValueError(
57
- f"The task '{task}' is not supported, only {_HEAD_TO_AUTOMODELS.keys()} tasks are supported"
58
- )
 
 
 
 
 
 
 
59
 
60
  if task == "text2text-generation":
61
- raise ValueError("Export of Seq2Seq models is currently disabled.")
 
 
 
62
 
63
  auto_model_class = _HEAD_TO_AUTOMODELS[task]
64
  ov_files = _find_files_matching_pattern(
@@ -85,7 +106,7 @@ def quantize_model(
85
 
86
  api = HfApi(token=oauth_token.token)
87
  if api.repo_exists(new_repo_id) and not overwritte:
88
- raise Exception(f"Model {new_repo_id} already exist, please set overwritte=True to push on an existing repo")
89
 
90
  with TemporaryDirectory() as d:
91
  folder = os.path.join(d, repo_folder_name(repo_id=model_id, repo_type="models"))
@@ -129,7 +150,7 @@ def quantize_model(
129
  repo_id=new_repo_id,
130
  )
131
  except Exception as e:
132
- raise Exception(f"Error uploading file {file_path}: {e}")
133
 
134
  try:
135
  card = ModelCard.load(model_id, token=oauth_token.token)
@@ -169,6 +190,8 @@ def quantize_model(
169
  repo_id=new_repo_id,
170
  )
171
  return f"This model was successfully quantized, find it under your repo {new_repo_url}'"
 
 
172
  finally:
173
  shutil.rmtree(folder, ignore_errors=True)
174
 
@@ -177,6 +200,8 @@ DESCRIPTION = """
177
  This Space uses [Optimum Intel](https://huggingface.co/docs/optimum/main/en/intel/openvino/optimization) to automatically apply NNCF weight only quantization on a model hosted on the [Hub](https://huggingface.co/models) and convert it to the [OpenVINO format](https://docs.openvino.ai/2024/documentation/openvino-ir-format.html) if not already.
178
 
179
  The resulting model will then be pushed under your HF user namespace. For now we only support conversion for models that are hosted on public repositories.
 
 
180
  """
181
 
182
  model_id = HuggingfaceHubSearch(
@@ -202,6 +227,7 @@ quant_method = gr.Dropdown(
202
  """
203
  calibration_dataset = gr.Dropdown(
204
  [
 
205
  "wikitext2",
206
  "c4",
207
  "c4-new",
@@ -209,7 +235,7 @@ calibration_dataset = gr.Dropdown(
209
  "laion/220k-GPT4Vision-captions-from-LIVIS",
210
  "laion/filtered-wit",
211
  ],
212
- value="wikitext2",
213
  label="Calibration dataset",
214
  filterable=False,
215
  visible=True,
 
1
  import os
2
  import shutil
3
  import gradio as gr
4
+ from huggingface_hub import HfApi, whoami, ModelCard, model_info
5
  from gradio_huggingfacehub_search import HuggingfaceHubSearch
6
  from textwrap import dedent
7
  from pathlib import Path
 
9
  from tempfile import TemporaryDirectory
10
 
11
  from huggingface_hub.file_download import repo_folder_name
 
 
 
12
  from optimum.exporters import TasksManager
13
 
14
  from optimum.intel.utils.modeling_utils import _find_files_matching_pattern
 
25
  OVStableDiffusionPipeline,
26
  OVStableDiffusionXLPipeline,
27
  OVLatentConsistencyModelPipeline,
 
28
  OVWeightQuantizationConfig,
29
  )
30
+ from diffusers import ConfigMixin
31
+
32
+ _HEAD_TO_AUTOMODELS = {
33
+ "feature-extraction": OVModelForFeatureExtraction,
34
+ "fill-mask": OVModelForMaskedLM,
35
+ "text-generation": OVModelForCausalLM,
36
+ "text-classification": OVModelForSequenceClassification,
37
+ "token-classification": OVModelForTokenClassification,
38
+ "question-answering": OVModelForQuestionAnswering,
39
+ "image-classification": OVModelForImageClassification,
40
+ "audio-classification": OVModelForAudioClassification,
41
+ "stable-diffusion": OVStableDiffusionPipeline,
42
+ "stable-diffusion-xl": OVStableDiffusionXLPipeline,
43
+ "latent-consistency": OVLatentConsistencyModelPipeline,
44
+ }
45
 
46
  def quantize_model(
47
  model_id: str,
 
53
  oauth_token: gr.OAuthToken,
54
  ):
55
  if oauth_token.token is None:
56
+ return "You must be logged in to use this space"
57
+
58
+ if not model_id:
59
+ return f"### Invalid input 🐞 Please specify a model name, got {model_id}"
60
 
61
  model_name = model_id.split("/")[-1]
62
  username = whoami(oauth_token.token)["name"]
63
  new_repo_id = f"{username}/{model_name}-openvino-{dtype}"
64
+ library_name = TasksManager.infer_library_from_model(model_id, token=oauth_token.token)
 
 
 
65
 
66
+ if library_name == "diffusers":
67
+ ConfigMixin.config_name = "model_index.json"
68
+ class_name = ConfigMixin.load_config(model_id, token=oauth_token.token)["_class_name"].lower()
69
+ if "xl" in class_name:
70
+ task = "stable-diffusion-xl"
71
+ elif "consistency" in class_name:
72
+ task = "latent-consistency"
73
+ else:
74
+ task = "stable-diffusion"
75
+ else:
76
+ task = TasksManager.infer_task_from_model(model_id, token=oauth_token.token)
77
 
78
  if task == "text2text-generation":
79
+ return "Export of Seq2Seq models is currently disabled."
80
+
81
+ if task not in _HEAD_TO_AUTOMODELS:
82
+ return f"The task '{task}' is not supported, only {_HEAD_TO_AUTOMODELS.keys()} tasks are supported"
83
 
84
  auto_model_class = _HEAD_TO_AUTOMODELS[task]
85
  ov_files = _find_files_matching_pattern(
 
106
 
107
  api = HfApi(token=oauth_token.token)
108
  if api.repo_exists(new_repo_id) and not overwritte:
109
+ return f"Model {new_repo_id} already exist, please set overwritte=True to push on an existing repo"
110
 
111
  with TemporaryDirectory() as d:
112
  folder = os.path.join(d, repo_folder_name(repo_id=model_id, repo_type="models"))
 
150
  repo_id=new_repo_id,
151
  )
152
  except Exception as e:
153
+ return f"Error uploading file {file_path}: {e}"
154
 
155
  try:
156
  card = ModelCard.load(model_id, token=oauth_token.token)
 
190
  repo_id=new_repo_id,
191
  )
192
  return f"This model was successfully quantized, find it under your repo {new_repo_url}'"
193
+ except Exception as e:
194
+ return f"### Error: {e}"
195
  finally:
196
  shutil.rmtree(folder, ignore_errors=True)
197
 
 
200
  This Space uses [Optimum Intel](https://huggingface.co/docs/optimum/main/en/intel/openvino/optimization) to automatically apply NNCF weight only quantization on a model hosted on the [Hub](https://huggingface.co/models) and convert it to the [OpenVINO format](https://docs.openvino.ai/2024/documentation/openvino-ir-format.html) if not already.
201
 
202
  The resulting model will then be pushed under your HF user namespace. For now we only support conversion for models that are hosted on public repositories.
203
+
204
+ The list of the supported architectures can be found in the [documentation](https://huggingface.co/docs/optimum/main/en/intel/openvino/models)
205
  """
206
 
207
  model_id = HuggingfaceHubSearch(
 
227
  """
228
  calibration_dataset = gr.Dropdown(
229
  [
230
+ "None",
231
  "wikitext2",
232
  "c4",
233
  "c4-new",
 
235
  "laion/220k-GPT4Vision-captions-from-LIVIS",
236
  "laion/filtered-wit",
237
  ],
238
+ value="None",
239
  label="Calibration dataset",
240
  filterable=False,
241
  visible=True,
requirements.txt CHANGED
@@ -3,7 +3,6 @@ gradio[oauth]>=4.37.2
3
  gradio_huggingfacehub_search==0.0.6
4
  transformers==4.42.4
5
  diffusers==0.29.1
6
- optimum==1.21.2
7
- optimum-intel==1.18.1
8
  openvino
9
  nncf
 
 
3
  gradio_huggingfacehub_search==0.0.6
4
  transformers==4.42.4
5
  diffusers==0.29.1
 
 
6
  openvino
7
  nncf
8
+ git+https://github.com/huggingface/optimum-intel.git