-
Notifications
You must be signed in to change notification settings - Fork 525
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Integrate paddle backend in devel branch #4157
base: devel
Are you sure you want to change the base?
Changes from 17 commits
59b9af5
7f32618
217bf36
0ad720d
1d7b0d1
f6eeef6
ec021f7
55f71f6
ebdbed2
e0aeb73
0896c90
2e79d68
482d588
a3c4663
2b4832a
f1100e4
3068869
68a2d62
ff7e0ef
023ba53
8a1834f
396bd54
66734bc
ba02ae8
40157dd
8d53aec
e39d466
b97571e
50092c6
e02dd11
8343077
09c54f3
bc854b2
892fd80
04b9064
b3a6408
15a7e75
c792563
72241ea
8694476
e246a34
5ee8bcf
e3c1ceb
49ba5a5
f1cae59
a83fb63
f7f64b1
d5a313e
299548a
97828b3
d67e27c
87069e5
d6e3fdb
8004a52
8e951cd
3a0f700
73c0d17
8a59a53
7821997
ed51258
13c7f55
e013860
4c4568f
7525dac
312a3ef
5e4edd7
0146f24
834d512
9e90416
cfacca3
d492397
de24e27
264286f
fd6aff0
6651e87
39ca3b7
2de0d2b
11d0344
3650214
754b948
f007fb4
da4fb97
f8a4279
1643c6c
0d0662f
8b9ee50
d10a3f7
f6253cf
690dec2
ec47dd8
03084d2
10e4a0d
a1adc8a
5edc0ae
6d13376
9b1f322
2b34756
dad72c8
cbc9c65
afd4746
7b2476f
26047e9
d03702a
c611955
3b27c49
541dae6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,145 @@ | ||||||||||||||||||||||||||
# SPDX-License-Identifier: LGPL-3.0-or-later | ||||||||||||||||||||||||||
import importlib | ||||||||||||||||||||||||||
import os | ||||||||||||||||||||||||||
import site | ||||||||||||||||||||||||||
from functools import ( | ||||||||||||||||||||||||||
lru_cache, | ||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||
from importlib.machinery import ( | ||||||||||||||||||||||||||
FileFinder, | ||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||
from importlib.util import ( | ||||||||||||||||||||||||||
find_spec, | ||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||
from pathlib import ( | ||||||||||||||||||||||||||
Path, | ||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||
from sysconfig import ( | ||||||||||||||||||||||||||
get_path, | ||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||
from typing import ( | ||||||||||||||||||||||||||
List, | ||||||||||||||||||||||||||
Optional, | ||||||||||||||||||||||||||
Tuple, | ||||||||||||||||||||||||||
Union, | ||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
from packaging.version import ( | ||||||||||||||||||||||||||
Version, | ||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
@lru_cache | ||||||||||||||||||||||||||
def find_paddle() -> Tuple[Optional[str], List[str]]: | ||||||||||||||||||||||||||
"""Find PaddlePadle library. | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Tries to find PaddlePadle in the order of: | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
1. Environment variable `PADDLE_ROOT` if set | ||||||||||||||||||||||||||
2. The current Python environment. | ||||||||||||||||||||||||||
3. user site packages directory if enabled | ||||||||||||||||||||||||||
4. system site packages directory (purelib) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Considering the default PaddlePadle package still uses old CXX11 ABI, we | ||||||||||||||||||||||||||
cannot install it automatically. | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Returns | ||||||||||||||||||||||||||
------- | ||||||||||||||||||||||||||
str, optional | ||||||||||||||||||||||||||
PaddlePadle library path if found. | ||||||||||||||||||||||||||
list of str | ||||||||||||||||||||||||||
TensorFlow requirement if not found. Empty if found. | ||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||
if os.environ.get("DP_ENABLE_PADDLE", "0") == "0": | ||||||||||||||||||||||||||
return None, [] | ||||||||||||||||||||||||||
requires = [] | ||||||||||||||||||||||||||
pd_spec = None | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
if (pd_spec is None or not pd_spec) and os.environ.get("PADDLE_ROOT") is not None: | ||||||||||||||||||||||||||
site_packages = Path(os.environ.get("PADDLE_ROOT")).parent.absolute() | ||||||||||||||||||||||||||
pd_spec = FileFinder(str(site_packages)).find_spec("paddle") | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# get paddle spec | ||||||||||||||||||||||||||
# note: isolated build will not work for backend | ||||||||||||||||||||||||||
if pd_spec is None or not pd_spec: | ||||||||||||||||||||||||||
pd_spec = find_spec("paddle") | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
if not pd_spec and site.ENABLE_USER_SITE: | ||||||||||||||||||||||||||
# first search TF from user site-packages before global site-packages | ||||||||||||||||||||||||||
site_packages = site.getusersitepackages() | ||||||||||||||||||||||||||
if site_packages: | ||||||||||||||||||||||||||
pd_spec = FileFinder(site_packages).find_spec("paddle") | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
if not pd_spec: | ||||||||||||||||||||||||||
# purelib gets site-packages path | ||||||||||||||||||||||||||
site_packages = get_path("purelib") | ||||||||||||||||||||||||||
if site_packages: | ||||||||||||||||||||||||||
pd_spec = FileFinder(site_packages).find_spec("paddle") | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# get install dir from spec | ||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||
pd_install_dir = pd_spec.submodule_search_locations[0] # type: ignore | ||||||||||||||||||||||||||
# AttributeError if ft_spec is None | ||||||||||||||||||||||||||
# TypeError if submodule_search_locations are None | ||||||||||||||||||||||||||
# IndexError if submodule_search_locations is an empty list | ||||||||||||||||||||||||||
except (AttributeError, TypeError, IndexError): | ||||||||||||||||||||||||||
pd_install_dir = None | ||||||||||||||||||||||||||
requires.extend(get_pd_requirement()["paddle"]) | ||||||||||||||||||||||||||
return pd_install_dir, requires | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
@lru_cache | ||||||||||||||||||||||||||
def get_pd_requirement(pd_version: str = "") -> dict: | ||||||||||||||||||||||||||
"""Get PaddlePadle requirement when Paddle is not installed. | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
If pd_version is not given and the environment variable `PADDLE_VERSION` is set, use it as the requirement. | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Parameters | ||||||||||||||||||||||||||
---------- | ||||||||||||||||||||||||||
pd_version : str, optional | ||||||||||||||||||||||||||
Paddle version | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Returns | ||||||||||||||||||||||||||
------- | ||||||||||||||||||||||||||
dict | ||||||||||||||||||||||||||
PaddlePadle requirement. | ||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||
if pd_version is None: | ||||||||||||||||||||||||||
return {"paddle": []} | ||||||||||||||||||||||||||
if pd_version == "": | ||||||||||||||||||||||||||
pd_version = os.environ.get("PADDLE_VERSION", "") | ||||||||||||||||||||||||||
Comment on lines
+86
to
+104
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Inconsistent handling of In Apply this diff to address the issue: If -def get_pd_requirement(pd_version: str = "") -> dict:
+def get_pd_requirement(pd_version: Optional[str] = "") -> dict: Alternatively, if - if pd_version is None:
- return {"paddle": []}
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||
"paddle": [ | ||||||||||||||||||||||||||
# uv has different local version behaviors, i.e. `==2.3.1` cannot match `==2.3.1+cpu` | ||||||||||||||||||||||||||
# https://github.com/astral-sh/uv/blob/main/PIP_COMPATIBILITY.md#local-version-identifiers | ||||||||||||||||||||||||||
# luckily, .* (prefix matching) defined in PEP 440 can match any local version | ||||||||||||||||||||||||||
# https://peps.python.org/pep-0440/#version-matching | ||||||||||||||||||||||||||
f"paddle=={Version(pd_version).base_version}.*" | ||||||||||||||||||||||||||
if pd_version != "" | ||||||||||||||||||||||||||
else "paddle>=3.0.0", | ||||||||||||||||||||||||||
], | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
@lru_cache | ||||||||||||||||||||||||||
def get_pd_version(pd_path: Optional[Union[str, Path]]) -> str: | ||||||||||||||||||||||||||
"""Get Paddle version from a Paddle Python library path. | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Parameters | ||||||||||||||||||||||||||
---------- | ||||||||||||||||||||||||||
pd_path : str or Path | ||||||||||||||||||||||||||
pd Python library path | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Returns | ||||||||||||||||||||||||||
------- | ||||||||||||||||||||||||||
str | ||||||||||||||||||||||||||
version | ||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||
if pd_path is None or pd_path == "": | ||||||||||||||||||||||||||
return "" | ||||||||||||||||||||||||||
version_file = Path(pd_path) / "version.py" | ||||||||||||||||||||||||||
spec = importlib.util.spec_from_file_location("paddle.version", version_file) | ||||||||||||||||||||||||||
module = importlib.util.module_from_spec(spec) | ||||||||||||||||||||||||||
spec.loader.exec_module(module) | ||||||||||||||||||||||||||
Comment on lines
+130
to
+132
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add error handling for potential The function Apply this diff to enhance error handling: version_file = Path(pd_path) / "version" / "__init__.py"
+ if not version_file.exists():
+ return ""
spec = importlib.util.spec_from_file_location("paddle.version", version_file)
+ if spec is None or spec.loader is None:
+ return ""
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module.full_version 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||
return module.__version__ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The change to this file should be reverted
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I annotate mirrors-prettier and mirrors-bibtex-tidy because that can not be installed in my development env.
I guess this file can be restored at the last commit in this PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see.