-
Notifications
You must be signed in to change notification settings - Fork 57
Expand file tree
/
Copy pathenvironment.py
More file actions
82 lines (66 loc) · 2.87 KB
/
environment.py
File metadata and controls
82 lines (66 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#################################################################################################
# Copyright (c) 2022-2025 Ali Hassani.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
#################################################################################################
import os
import torch
from natten.utils.device import get_device_cc
def parse_env_flag(env_var: str, default: bool) -> bool:
default_str = "1" if default else "0"
out_str = os.getenv(env_var, default_str)
if out_str.strip() == "":
return default
if out_str == "0":
return False
if out_str == "1":
return True
return default
def parse_env_int(env_var: str, default: int) -> int:
out_str = os.getenv(env_var, str(default))
if out_str.strip() == "":
return default
try:
return int(out_str)
except ValueError:
return default
def parse_env_str(env_var: str, default: str) -> str:
return os.getenv(env_var, str(default))
_IS_CUDA_AVAILABLE = torch.cuda.is_available()
_IS_XPU_AVAILABLE = torch.xpu.is_available() if hasattr(torch, "xpu") else False
_TORCH_VERSION = [int(x) for x in torch.__version__.split(".")[:2]]
# NOTE: Triton does not recognize SM103 yet.
# TODO: remove the extra condition once Triton adds SM103 support.
_IS_TORCH_COMPILE_SUPPORTED = (
_TORCH_VERSION >= [2, 6] and get_device_cc() >= 70 and get_device_cc() not in [103]
)
# Guard registering libnatten APIs as torch ops
# In case any unusual bugs from torch compile come up again
DISABLE_TORCH_OPS = not _IS_TORCH_COMPILE_SUPPORTED or parse_env_flag(
"NATTEN_DISABLE_TORCH_OPS", False
)
# Controls all regions guarded against torch compile
# Logs, and certain assertions cause graph breaks.
def is_torch_compiling() -> bool:
try:
return torch.compiler.is_compiling()
except:
# Assume too old to support torch compile
return False