Skip to content

Commit

Permalink
Merge branch 'enable-ort-gpu-tests' of https://github.com/huggingface…
Browse files Browse the repository at this point in the history
…/optimum into enable-ort-gpu-tests
  • Loading branch information
IlyasMoutawwakil committed Jan 13, 2025
2 parents a318c0a + d271637 commit 7597692
Show file tree
Hide file tree
Showing 14 changed files with 99 additions and 68 deletions.
5 changes: 3 additions & 2 deletions .github/workflows/test_export_onnx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ['3.9']
python-version: ["3.9"]
os: [ubuntu-20.04]

runs-on: ${{ matrix.os }}
Expand All @@ -27,13 +27,14 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Install dependencies for pytorch export
run: |
pip install .[tests,exporters]
pip install .[tests,exporters,diffusers]
- name: Test with unittest
working-directory: tests
run: |
pytest exporters/onnx/test_onnx_*.py -s -n auto -m "not tensorflow_test and not timm_test" --durations=0
- name: Install dependencies for tensorflow export
run: |
pip uninstall diffusers -y
pip install .[tests,exporters-tf]
- name: Test with unittest
working-directory: tests
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test_export_onnx_cli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: [3.9]
python-version: ["3.9"]
os: [ubuntu-20.04]

runs-on: ${{ matrix.os }}
Expand All @@ -27,7 +27,7 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Install dependencies for pytorch export
run: |
pip install .[tests,exporters]
pip install .[tests,exporters,diffusers]
- name: Test with unittest
working-directory: tests
run: |
Expand Down
41 changes: 21 additions & 20 deletions .github/workflows/test_exporters_slow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,27 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ['3.9']
python-version: ["3.9"]

runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies for pytorch export
run: |
pip install .[tests,exporters]
- name: Test with unittest
working-directory: tests
run: |
RUN_SLOW=1 pytest exporters -s -m "not tensorflow_test and run_slow" --durations=0
- name: Install dependencies for tensorflow export
run: |
pip install .[tests,exporters-tf]
- name: Test with unittest
working-directory: tests
run: |
RUN_SLOW=1 pytest exporters -s -m "tensorflow_test and run_slow" --durations=0
- uses: actions/checkout@v2
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies for pytorch export
run: |
pip install .[tests,exporters,diffusers]
- name: Test with unittest
working-directory: tests
run: |
RUN_SLOW=1 pytest exporters -s -m "not tensorflow_test and run_slow" --durations=0
- name: Install dependencies for tensorflow export
run: |
pip uninstall diffusers -y
pip install .[tests,exporters-tf]
- name: Test with unittest
working-directory: tests
run: |
RUN_SLOW=1 pytest exporters -s -m "tensorflow_test and run_slow" --durations=0
2 changes: 1 addition & 1 deletion .github/workflows/test_onnx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
pip install .[tests,exporters]
pip install .[tests,exporters,diffusers]
- name: Test with unittest
working-directory: tests
run: |
Expand Down
12 changes: 9 additions & 3 deletions .github/workflows/test_onnxruntime.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,23 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.9'
python-version: "3.9"

- name: Install dependencies
run: |
pip install --upgrade pip
pip install --no-cache-dir torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install .[tests,onnxruntime]
pip install .[tests,onnxruntime,diffusers]
- name: Install transformers ${{ matrix.transformers-version }}
if: ${{ matrix.transformers-version != 'latest' }}
run: pip install transformers==${{ matrix.transformers-version }}
run: |
pip install "transformers==${{ matrix.transformers-version }}"
- name: Downgrade diffusers
if: matrix.transformers-version == '4.36.*'
run: |
pip install "diffusers<0.32.0"
- name: Test with pytest (in series)
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test_onnxruntime_slow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
run: |
pip install --upgrade pip
pip install --no-cache-dir torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install .[tests,onnxruntime]
pip install .[tests,onnxruntime,diffusers]
- name: Test with pytest
run: |
Expand Down
2 changes: 1 addition & 1 deletion optimum/exporters/onnx/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ def main_export(

if task == "auto":
try:
task = TasksManager.infer_task_from_model(model_name_or_path)
task = TasksManager.infer_task_from_model(model_name_or_path, library_name=library_name)
except KeyError as e:
raise KeyError(
f"The task could not be automatically inferred. Please provide the argument --task with the relevant task from {', '.join(TasksManager.get_all_tasks())}. Detailed error: {e}"
Expand Down
5 changes: 3 additions & 2 deletions optimum/exporters/onnx/model_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,9 @@ def inputs(self) -> Dict[str, Dict[int, str]]:
return {"input_ids": dynamic_axis, "attention_mask": dynamic_axis}


class ModernBertOnnxConfig(DistilBertOnnxConfig):
pass
# TODO: uncomment when transformers>=4.48.0
# class ModernBertOnnxConfig(DistilBertOnnxConfig):
# pass


class MPNetOnnxConfig(DistilBertOnnxConfig):
Expand Down
52 changes: 34 additions & 18 deletions optimum/exporters/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -893,15 +893,15 @@ class TasksManager:
"image-classification",
onnx="MobileNetV2OnnxConfig",
),
"modernbert": supported_tasks_mapping(
"feature-extraction",
"fill-mask",
"text-classification",
"multiple-choice",
"token-classification",
"question-answering",
onnx="ModernBertOnnxConfig",
),
# "modernbert": supported_tasks_mapping(
# "feature-extraction",
# "fill-mask",
# "text-classification",
# "multiple-choice",
# "token-classification",
# "question-answering",
# onnx="ModernBertOnnxConfig",
# ),
"mpnet": supported_tasks_mapping(
"feature-extraction",
"fill-mask",
Expand Down Expand Up @@ -1782,6 +1782,7 @@ def _infer_task_from_model_name_or_path(
revision: Optional[str] = None,
cache_dir: str = HUGGINGFACE_HUB_CACHE,
token: Optional[Union[bool, str]] = None,
library_name: Optional[str] = None,
) -> str:
inferred_task_name = None

Expand All @@ -1803,13 +1804,14 @@ def _infer_task_from_model_name_or_path(
raise RuntimeError(
f"Hugging Face Hub is not reachable and we cannot infer the task from a cached model. Make sure you are not offline, or otherwise please specify the `task` (or `--task` in command-line) argument ({', '.join(TasksManager.get_all_tasks())})."
)
library_name = cls.infer_library_from_model(
model_name_or_path,
subfolder=subfolder,
revision=revision,
cache_dir=cache_dir,
token=token,
)
if library_name is None:
library_name = cls.infer_library_from_model(
model_name_or_path,
subfolder=subfolder,
revision=revision,
cache_dir=cache_dir,
token=token,
)

if library_name == "timm":
inferred_task_name = "image-classification"
Expand All @@ -1828,6 +1830,8 @@ def _infer_task_from_model_name_or_path(
break
if inferred_task_name is not None:
break
elif library_name == "sentence_transformers":
inferred_task_name = "feature-extraction"
elif library_name == "transformers":
pipeline_tag = model_info.pipeline_tag
transformers_info = model_info.transformersInfo
Expand Down Expand Up @@ -1864,6 +1868,7 @@ def infer_task_from_model(
revision: Optional[str] = None,
cache_dir: str = HUGGINGFACE_HUB_CACHE,
token: Optional[Union[bool, str]] = None,
library_name: Optional[str] = None,
) -> str:
"""
Infers the task from the model repo, model instance, or model class.
Expand All @@ -1882,7 +1887,9 @@ def infer_task_from_model(
token (`Optional[Union[bool,str]]`, defaults to `None`):
The token to use as HTTP bearer authorization for remote files. If `True`, will use the token generated
when running `huggingface-cli login` (stored in `huggingface_hub.constants.HF_TOKEN_PATH`).
library_name (`Optional[str]`, defaults to `None`):
The library name of the model. Can be any of "transformers", "timm", "diffusers", "sentence_transformers". See `TasksManager.infer_library_from_model` for the priority should
none be provided.
Returns:
`str`: The task name automatically detected from the HF hub repo, model instance, or model class.
"""
Expand All @@ -1895,6 +1902,7 @@ def infer_task_from_model(
revision=revision,
cache_dir=cache_dir,
token=token,
library_name=library_name,
)
elif type(model) == type:
inferred_task_name = cls._infer_task_from_model_or_model_class(model_class=model)
Expand Down Expand Up @@ -2170,6 +2178,9 @@ def get_model_from_task(
none be provided.
model_kwargs (`Dict[str, Any]`, *optional*):
Keyword arguments to pass to the model `.from_pretrained()` method.
library_name (`Optional[str]`, defaults to `None`):
The library name of the model. Can be any of "transformers", "timm", "diffusers", "sentence_transformers". See `TasksManager.infer_library_from_model` for the priority should
none be provided.
Returns:
The instance of the model.
Expand All @@ -2189,7 +2200,12 @@ def get_model_from_task(
original_task = task
if task == "auto":
task = TasksManager.infer_task_from_model(
model_name_or_path, subfolder=subfolder, revision=revision, cache_dir=cache_dir, token=token
model_name_or_path,
subfolder=subfolder,
revision=revision,
cache_dir=cache_dir,
token=token,
library_name=library_name,
)

model_type = None
Expand Down
9 changes: 7 additions & 2 deletions optimum/exporters/tflite/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def main():
task = args.task
if task == "auto":
try:
task = TasksManager.infer_task_from_model(args.model)
task = TasksManager.infer_task_from_model(args.model, library_name="transformers")
except KeyError as e:
raise KeyError(
"The task could not be automatically inferred. Please provide the argument --task with the task "
Expand All @@ -58,7 +58,12 @@ def main():
)

model = TasksManager.get_model_from_task(
task, args.model, framework="tf", cache_dir=args.cache_dir, trust_remote_code=args.trust_remote_code
task,
args.model,
framework="tf",
cache_dir=args.cache_dir,
trust_remote_code=args.trust_remote_code,
library_name="transformers",
)

tflite_config_constructor = TasksManager.get_exporter_config_constructor(
Expand Down
2 changes: 1 addition & 1 deletion optimum/exporters/tflite/convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ def prepare_converter_for_quantization(
if task is None:
from ...exporters import TasksManager

task = TasksManager.infer_task_from_model(model)
task = TasksManager.infer_task_from_model(model, library_name="transformers")

preprocessor_kwargs = {}
if isinstance(preprocessor, PreTrainedTokenizerBase):
Expand Down
3 changes: 1 addition & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
"Pillow",
"sacremoses",
"torchvision",
"diffusers>=0.17.0,<0.32.0",
"torchaudio",
"einops",
"timm",
Expand Down Expand Up @@ -93,7 +92,7 @@
"torch-ort",
"onnxruntime-training",
],
"diffusers": ["diffusers<0.32.0"],
"diffusers": ["diffusers"],
"intel": "optimum-intel>=1.18.0",
"openvino": "optimum-intel[openvino]>=1.18.0",
"nncf": "optimum-intel[nncf]>=1.18.0",
Expand Down
4 changes: 2 additions & 2 deletions tests/exporters/exporters_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
"mobilenet-v2": "hf-internal-testing/tiny-random-MobileNetV2Model",
"mobilenet-v1": "google/mobilenet_v1_0.75_192",
"mobilevit": "hf-internal-testing/tiny-random-mobilevit",
"modernbert": "hf-internal-testing/tiny-random-ModernBertForMaskedLM",
# "modernbert": "hf-internal-testing/tiny-random-ModernBertForMaskedLM",
"mpnet": "hf-internal-testing/tiny-random-MPNetModel",
"mpt": "hf-internal-testing/tiny-random-MptForCausalLM",
"mt5": "lewtun/tiny-random-mt5",
Expand Down Expand Up @@ -269,7 +269,7 @@
# "mobilenet_v1": "google/mobilenet_v1_0.75_192",
# "mobilenet_v2": "google/mobilenet_v2_0.35_96",
"mobilevit": "apple/mobilevit-small",
"modernbert": "answerdotai/ModernBERT-base",
# "modernbert": "answerdotai/ModernBERT-base",
"mpt": "mosaicml/mpt-7b",
"mt5": "lewtun/tiny-random-mt5", # Not using google/mt5-small because it takes too much time for testing.
"musicgen": "facebook/musicgen-small",
Expand Down
Loading

0 comments on commit 7597692

Please sign in to comment.