mirror of
https://github.com/linkedin/Liger-Kernel.git
synced 2026-10-12 02:17:47 +00:00
>[!IMPORTANT] >Do not merge this PR before all issues are resolved! > >Testing with three versions: `4.52.0` , `4.57.6` and the latest stable version >[!NOTE] >nvi-ci is split into correctness test ci and convergence test ci to speed up testing in this PR >, and more jobs for testing bc with transformers v4 (4.49.0 and 4.57.6) > >Whether keeping this change or not is yet to be discussed ## Summary <!--- This is a required section; please describe the main purpose of this proposed code change. ---> This is a dev branch for aggregating PRs related to transformers v5 changes. <!--- ## Details This is an optional section; is there anything specific that reviewers should be aware of? ---> ## Testing Done <!--- This is a required section; please describe how this change was tested. ---> <!-- Replace BLANK with your device type. For example, A100-80G-PCIe Complete the following tasks before sending your PR, and replace `[ ]` with `[x]` to indicate you have done them. --> - Hardware Type: <BLANK> - [x] run `make test` to ensure correctness - [x] run `make checkstyle` to ensure code style - [x] run `make test-convergence` to ensure convergence --------- Signed-off-by: Tcc0403 <[email protected]> Co-authored-by: Yunwei Dai <[email protected]> Co-authored-by: Vaibhav Jindal <[email protected]> Co-authored-by: Yuki Uehara <[email protected]> Co-authored-by: Chun-Mao Lai <[email protected]> Co-authored-by: Vaibhav Jindal <[email protected]> Co-authored-by: Michael Lai <[email protected]>
133 lines
3.7 KiB
Python
133 lines
3.7 KiB
Python
# setup.py
|
|
|
|
import subprocess
|
|
|
|
from typing import Literal
|
|
|
|
from setuptools import setup
|
|
|
|
|
|
def get_default_dependencies():
|
|
"""Determine the appropriate dependencies based on detected hardware."""
|
|
platform = get_platform()
|
|
|
|
if platform in ["cuda", "cpu"]:
|
|
return [
|
|
"torch>=2.1.2",
|
|
"triton>=2.3.1",
|
|
]
|
|
elif platform == "rocm":
|
|
return [
|
|
"triton>=3.0.0",
|
|
]
|
|
elif platform == "xpu":
|
|
return [
|
|
"torch>=2.6.0",
|
|
]
|
|
# TODO: Currently, triton-ascend is not compatible with torch 2.7.1. We will upgrade it later.
|
|
elif platform == "npu":
|
|
return ["torch==2.6.0", "torch_npu==2.6.0", "triton-ascend"]
|
|
|
|
|
|
def get_optional_dependencies():
|
|
"""Get optional dependency groups."""
|
|
return {
|
|
"dev": [
|
|
"transformers>=4.52.0",
|
|
"matplotlib>=3.7.2",
|
|
"ruff>=0.12.0",
|
|
"pytest>=7.1.2",
|
|
"pytest-xdist",
|
|
"pytest-cov",
|
|
"pytest-asyncio",
|
|
"pytest-rerunfailures",
|
|
"datasets>=2.19.2",
|
|
"seaborn",
|
|
"mkdocs-material",
|
|
"torchvision>=0.20",
|
|
"prek>=0.2.28",
|
|
]
|
|
}
|
|
|
|
|
|
def is_xpu_available():
|
|
"""
|
|
Check if Intel XPU is available.
|
|
xpu-smi is often missing right now.
|
|
"""
|
|
try:
|
|
subprocess.run(["xpu-smi"], check=True)
|
|
return True
|
|
except (subprocess.SubprocessError, FileNotFoundError):
|
|
pass
|
|
|
|
try:
|
|
result = subprocess.run("sycl-ls", check=True, capture_output=True, shell=True)
|
|
if "level_zero:gpu" in result.stdout.decode():
|
|
return True
|
|
except (subprocess.SubprocessError, FileNotFoundError):
|
|
pass
|
|
|
|
return False
|
|
|
|
|
|
def is_ascend_available() -> bool:
|
|
"""Best-effort Ascend detection.
|
|
|
|
Checks for common Ascend environment variables and a possible `npu-smi`
|
|
utility if present.
|
|
"""
|
|
try:
|
|
subprocess.run(["npu-smi", "info"], check=True)
|
|
return True
|
|
except (subprocess.SubprocessError, FileNotFoundError):
|
|
pass
|
|
return False
|
|
|
|
|
|
def get_platform() -> Literal["cuda", "rocm", "cpu", "xpu", "npu"]:
|
|
"""
|
|
Detect whether the system has NVIDIA or AMD GPU without torch dependency.
|
|
"""
|
|
# Try nvidia-smi first
|
|
try:
|
|
subprocess.run(["nvidia-smi"], check=True)
|
|
print("NVIDIA GPU detected")
|
|
return "cuda"
|
|
except (subprocess.SubprocessError, FileNotFoundError):
|
|
# If nvidia-smi fails, check for ROCm
|
|
try:
|
|
subprocess.run(["rocm-smi"], check=True)
|
|
print("ROCm GPU detected")
|
|
return "rocm"
|
|
except (subprocess.SubprocessError, FileNotFoundError):
|
|
if is_xpu_available():
|
|
print("Intel GPU detected")
|
|
return "xpu"
|
|
elif is_ascend_available():
|
|
print("Ascend NPU detected")
|
|
return "npu"
|
|
else:
|
|
print("No GPU detected")
|
|
return "cpu"
|
|
|
|
|
|
setup(
|
|
name="liger_kernel",
|
|
package_dir={"": "src"},
|
|
packages=["liger_kernel"],
|
|
install_requires=get_default_dependencies(),
|
|
extras_require=get_optional_dependencies(),
|
|
classifiers=[
|
|
"Development Status :: 5 - Production/Stable",
|
|
"Intended Audience :: Developers",
|
|
"Intended Audience :: Education",
|
|
"Intended Audience :: Science/Research",
|
|
"Programming Language :: Python :: 3",
|
|
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
"License :: OSI Approved :: BSD-2-Clause Software License",
|
|
"Operating System :: OS Independent",
|
|
],
|
|
)
|