Skip to content

Commit

Permalink
xpu: support xpu backend from stock pytorch (>=2.4)
Browse files Browse the repository at this point in the history
Fixes: huggingface#31237

XPU backend is available in the stock PyTorch starting from
version 2.4, see [1]. This commit extends huggingface transformers
to support XPU from both IPEX and the stock pytorch. IPEX is being
tried first.

See: pytorch/pytorch#114842
Requires: huggingface/accelerate#2825
Signed-off-by: Dmitry Rogozhkin <dmitry.v.rogozhkin@intel.com>
  • Loading branch information
dvrogozh committed Jun 4, 2024
1 parent 485d913 commit 68a1c24
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
15 changes: 8 additions & 7 deletions src/transformers/testing_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -813,23 +813,24 @@ def require_torch_multi_npu(test_case):

def require_torch_xpu(test_case):
"""
Decorator marking a test that requires XPU and IPEX.
Decorator marking a test that requires XPU (in PyTorch).
These tests are skipped when Intel Extension for PyTorch isn't installed or it does not match current PyTorch
version.
These tests are skipped when XPU backend is not available. XPU backend might be available either via stock
PyTorch (>=2.4) or via Intel Extension for PyTorch. In the latter case, if IPEX is installed, its version
must match match current PyTorch version.
"""
return unittest.skipUnless(is_torch_xpu_available(), "test requires IPEX and an XPU device")(test_case)
return unittest.skipUnless(is_torch_xpu_available(), "test requires XPU device")(test_case)


def require_torch_multi_xpu(test_case):
"""
Decorator marking a test that requires a multi-XPU setup with IPEX and at least one XPU device. These tests are
skipped on a machine without IPEX or multiple XPUs.
Decorator marking a test that requires a multi-XPU setup (in PyTorch). These tests are skipped on a machine without
multiple XPUs.
To run *only* the multi_xpu tests, assuming all test names contain multi_xpu: $ pytest -sv ./tests -k "multi_xpu"
"""
if not is_torch_xpu_available():
return unittest.skip("test requires IPEX and at least one XPU device")(test_case)
return unittest.skip("test requires PyTorch XPU")(test_case)

return unittest.skipUnless(torch.xpu.device_count() > 1, "test requires multiple XPUs")(test_case)

Expand Down
13 changes: 8 additions & 5 deletions src/transformers/utils/import_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -747,13 +747,16 @@ def get_major_and_minor_from_version(full_version):

@lru_cache
def is_torch_xpu_available(check_device=False):
"Checks if `intel_extension_for_pytorch` is installed and potentially if a XPU is in the environment"
if not is_ipex_available():
return False

import intel_extension_for_pytorch # noqa: F401
r"""
Checks if XPU acceleration is available either via `intel_extension_for_pytorch` or
via stock PyTorch (>=2.4) and potentially if a XPU is in the environment
"""
if is_ipex_available():
import intel_extension_for_pytorch # noqa: F401
import torch

#torch.set_default_device('xpu:0')

if check_device:
try:
# Will raise a RuntimeError if no XPU is found
Expand Down

0 comments on commit 68a1c24

Please sign in to comment.