8000 Update on "torch.sgn for complex tensors" · pytorch/pytorch@f48f5d8 · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f48f5d8

Browse files
committed
Update on "torch.sgn for complex tensors"
resolves #36323 by adding `torch.sgn` for complex tensors. `torch.sgn` returns `x/abs(x)` for `x != 0` and returns `0 + 0j` for `x==0` TODO: 1. add tests for backward (waiting on gradcheck PR for complex) [ghstack-poisoned]
2 parents 74a456d + e324ea8 commit f48f5d8

File tree

1,335 files changed

+67268
-31176
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,335 files changed

+67268
-31176
lines changed

.circleci/cimodel/data/binary_build_data.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ def get_processor_arch_name(cuda_version):
5959
)),
6060
)
6161

62-
CONFIG_TREE_DATA_NO_WINDOWS = CONFIG_TREE_DATA.copy()
63-
CONFIG_TREE_DATA_NO_WINDOWS.pop("windows")
64-
6562
# GCC config variants:
6663
#
6764
# All the nightlies (except libtorch with new gcc ABI) are built with devtoolset7,

.circleci/cimodel/data/binary_build_definitions.py

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,7 @@ def gen_workflow_job(self, phase, upload_phase_dependency=None, nightly=False):
6969
"update_s3_htmls",
7070
]
7171
job_def["filters"] = branch_filters.gen_filter_dict(
72-
branches_list=["nightly"],
73-
tags_list=[branch_filters.RC_PATTERN],
72+
branches_list=["postnightly"],
7473
)
7574
else:
7675
if phase in ["upload"]:
@@ -113,18 +112,11 @@ def gen_workflow_job(self, phase, upload_phase_dependency=None, nightly=False):
113112

114113
def get_root(smoke, name):
115114

116-
if smoke:
117-
return binary_build_data.TopLevelNode(
118-
name,
119-
binary_build_data.CONFIG_TREE_DATA_NO_WINDOWS,
120-
smoke,
121-
)
122-
else:
123-
return binary_build_data.TopLevelNode(
124-
name,
125-
binary_build_data.CONFIG_TREE_DATA,
126-
smoke,
127-
)
115+
return binary_build_data.TopLevelNode(
116+
name,
117+
binary_build_data.CONFIG_TREE_DATA,
118+
smoke,
119+
)
128120

129121

130122
def gen_build_env_list(smoke):
@@ -161,27 +153,14 @@ def get_nightly_uploads():
161153
return mylist
162154

163155
def get_post_upload_jobs():
164-
"""Generate jobs to update HTML indices and report binary sizes"""
165-
configs = gen_build_env_list(False)
166-
common_job_def = {
167-
"context": "org-member",
168-
"filters": branch_filters.gen_filter_dict(
169-
branches_list=["nightly"],
170-
tags_list=[branch_filters.RC_PATTERN],
171-
),
172-
"requires": [],
173-
}
174-
for conf in configs:
175-
upload_job_name = conf.gen_build_name(
176-
build_or_test="upload",
177-
nightly=True
178-
)
179-
common_job_def["requires"].append(upload_job_name)
180156
return [
181157
{
182158
"update_s3_htmls": {
183159
"name": "update_s3_htmls",
184-
**common_job_def,
160+
"context": "org-member",
161+
"filters": branch_filters.gen_filter_dict(
162+
branches_list=["postnightly"],
163+
),
185164
},
186165
},
187166
]

.circleci/cimodel/data/pytorch_build_data.py

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33

44
CONFIG_TREE_DATA = [
55
("xenial", [
6-
(None, [
7-
X("nightly"),
6+
("rocm", [
7+
("3.5.1", [
8+
X("3.6"),
9+
]),
810
]),
911
("gcc", [
1012
("5.4", [ # All this subtree rebases to master and then build
@@ -36,15 +38,11 @@
3638
("libtorch", [XImportant(True)])
3739
]),
3840
]),
39-
]),
40-
("android", [
41-
("r19c", [
42-
("3.6", [
43-
("android_abi", [XImportant("x86_32")]),
44-
("android_abi", [X("x86_64")]),
45-
("android_abi", [X("arm-v7a")]),
46-
("android_abi", [X("arm-v8a")]),
47-
])
41+
("11.0", [
42+
X("3.8"),
43+
("3.8", [
44+
("libtorch", [X(True)])
45+
]),
4846
]),
4947
]),
5048
]),
@@ -134,7 +132,6 @@ def child_constructor(self):
134132
"libtorch": LibTorchConfigNode,
135133
"important": ImportantConfigNode,
136134
"build_only": BuildOnlyConfigNode,
137-
"android_abi": AndroidAbiConfigNode,
138135
"cuda_gcc_override": CudaGccOverrideConfigNode
139136
}
140137
return next_nodes[experimental_feature]
@@ -184,14 +181,6 @@ def child_constructor(self):
184181
return ImportantConfigNode
185182

186183

187-
class AndroidAbiConfigNode(TreeConfigNode):
188-
189-
def init2(self, node_name):
190-
self.props["android_abi"] = node_name
191-
192-
def child_constructor(self):
193-
return ImportantConfigNode
194-
195184
class CudaGccOverrideConfigNode(TreeConfigNode):
196185
def init2(self, node_name):
197186
self.props["cuda_gcc_override"] = node_name

.circleci/cimodel/data/pytorch_build_definitions.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from collections import OrderedDict
2+
from dataclasses import dataclass, field
3+
from typing import List, Optional
24

35
from cimodel.data.pytorch_build_data import TopLevelNode, CONFIG_TREE_DATA
46
import cimodel.data.dimensions as dimensions
@@ -7,8 +9,6 @@
79
from cimodel.data.simple.util.branch_filters import gen_filter_dict
810
from cimodel.data.simple.util.docker_constants import gen_docker_image_path
911

10-
from dataclasses import dataclass, field
11-
from typing import List, Optional
1212

1313

1414
@dataclass
@@ -18,10 +18,12 @@ class Conf:
1818
parms_list_ignored_for_docker_image: Optional[List[str]] = None
1919
pyver: Optional[str] = None
2020
cuda_version: Optional[str] = None
21+
rocm_version: Optional[str] = None
2122
# TODO expand this to cover all the USE_* that we want to test for
2223
# tesnrorrt, leveldb, lmdb, redis, opencv, mkldnn, ideep, etc.
2324
# (from https://github.com/pytorch/pytorch/pull/17323#discussion_r259453608)
2425
is_xla: bool = False
26+
vulkan: bool = False
2527
restrict_phases: Optional[List[str]] = None
2628
gpu_resource: Optional[str] = None
2729
dependent_tests: List = field(default_factory=list)
@@ -48,7 +50,10 @@ def get_parms(self, for_docker):
4850

4951
cuda_parms = []
5052
if self.cuda_version:
51-
cuda_parms.extend(["cuda" + self.cuda_version, "cudnn7"])
53+
cudnn = "cudnn8" if self.cuda_version.startswith("11.") else "cudnn7"
54+
cuda_parms.extend(["cuda" + self.cuda_version, cudnn])
55+
if self.rocm_version:
56+
cuda_parms.extend([f"rocm{self.rocm_version}"])
5257
result = leading + ["linux", self.distro] + cuda_parms + self.parms
5358
if not for_docker and self.parms_list_ignored_for_docker_image is not None:
5459
result = result + self.parms_list_ignored_for_docker_image
@@ -59,7 +64,8 @@ def gen_docker_image_path(self):
5964
parms_source = self.parent_build or self
6065
base_build_env_name = "-".join(parms_source.get_parms(True))
6166

62-
return miniutils.quote(gen_docker_image_path(base_build_env_name))
67+
image_path = gen_docker_image_path(base_build_env_name)
68+
return miniutils.quote(image_path)
6369

6470
def get_build_job_name_pieces(self, build_or_test):
6571
return self.get_parms(False) + [build_or_test]
@@ -83,14 +89,18 @@ def gen_workflow_params(self, phase):
8389
resource_class = "large"
8490
if self.gpu_resource:
8591
resource_class = "gpu." + self.gpu_resource
92+
if self.rocm_version is not None:
93+
resource_class = "pytorch/amd-gpu"
8694
parameters["resource_class"] = resource_class
95+
if phase == "build" and self.rocm_version is not None:
96+
parameters["resource_class"] = "xlarge"
8797
return parameters
8898

8999
def gen_workflow_job(self, phase):
90100
job_def = OrderedDict()
91101
job_def["name"] = self.gen_build_name(phase)
92102

93-
if phase == "test":
103+
if phase in ["test", "test1", "test2"]:
94104

95105
# TODO When merging the caffe2 and pytorch jobs, it might be convenient for a while to make a
96106
# caffe2 test job dependent on a pytorch build job. This way we could quickly dedup the repeated
@@ -187,6 +197,10 @@ def instantiate_configs():
187197
is_xla = fc.find_prop("is_xla") or False
188198
parms_list_ignored_for_docker_image = []
189199

200+
vulkan = fc.find_prop("vulkan") or False
201+
if vulkan:
202+
parms_list_ignored_for_docker_image.append("vulkan")
203+
190204
python_version = None
191205
if compiler_name == "cuda" or compiler_name == "android":
192206
python_version = fc.find_prop("pyver")
@@ -195,9 +209,14 @@ def instantiate_configs():
195209
parms_list = ["py" + fc.find_prop("pyver")]
196210

197211
cuda_version = None
212+
rocm_version = None
198213
if compiler_name == "cuda":
199214
cuda_version = fc.find_prop("compiler_version")
200215

216+
elif compiler_name == "rocm":
217+
rocm_version = fc.find_prop("compiler_version")
218+
restrict_phases = ["build", "test1", "test2"]
219+
201220
elif compiler_name == "android":
202221
android_ndk_version = fc.find_prop("compiler_version")
203222
# TODO: do we need clang to compile host binaries like protoc?
@@ -216,9 +235,9 @@ def instantiate_configs():
216235
parms_list.append("asan")
217236
python_version = fc.find_prop("pyver")
218237
parms_list[0] = fc.find_prop("abbreviated_pyver")
238+
restrict_phases = ["build", "test1", "test2"]
219239

220-
if cuda_version in ["9.2", "10", "10.1", "10.2"]:
221-
# TODO The gcc version is orthogonal to CUDA version?
240+
if cuda_version:
222241
cuda_gcc_version = fc.find_prop("cuda_gcc_override") or "gcc7"
223242
parms_list.append(cuda_gcc_version)
224243

@@ -239,7 +258,9 @@ def instantiate_configs():
239258
parms_list_ignored_for_docker_image,
240259
python_version,
241260
cuda_version,
261+
rocm_version,
242262
is_xla,
263+
vulkan,
243264
restrict_phases,
244265
gpu_resource,
245266
is_libtorch=is_libtorch,
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import cimodel.data.simple.util.branch_filters as branch_filters
2+
from cimodel.data.simple.util.docker_constants import DOCKER_IMAGE_NDK
3+
4+
5+
class AndroidJob:
6+
def __init__(self,
7+
variant,
8+
template_name,
9+
is_master_only=True):
10+
11+
self.variant = variant
12+
self.template_name = template_name
13+
self.is_master_only = is_master_only
14+
15+
def gen_tree(self):
16+
17+
base_name_parts = [
18+
"pytorch",
19+
"linux",
20+
"xenial",
21+
"py3",
22+
"clang5",
23+
"android",
24+
"ndk",
25+
"r19c",
26+
] + self 10000 .variant + [
27+
"build",
28+
]
29+
30+
full_job_name = "_".join(base_name_parts)
31+
build_env_name = "-".join(base_name_parts)
32+
33+
props_dict = {
34+
"name": full_job_name,
35+
"build_environment": "\"{}\"".format(build_env_name),
36+
"docker_image": "\"{}\"".format(DOCKER_IMAGE_NDK),
37+
}
38+
39+
if self.is_master_only:
40+
props_dict["filters"] = branch_filters.gen_filter_dict(branch_filters.NON_PR_BRANCH_LIST)
41+
42+
return [{self.template_name: props_dict}]
43+
44+
45+
class AndroidGradleJob:
46+
def __init__(self,
47+
job_name,
48+
template_name,
49+
dependencies,
50+
is_master_only=True,
51+
is_pr_only=False):
52+
53+
self.job_name = job_name
54+
self.template_name = template_name
55+
self.dependencies = dependencies
56+
self.is_master_only = is_master_only
57+
self.is_pr_only = is_pr_only
58+
59+
def gen_tree(self):
60+
61+
props_dict = {
62+
"name": self.job_name,
63+
"requires": self.dependencies,
64+
}
65+
66+
if self.is_master_only:
67+
props_dict["filters"] = branch_filters.gen_filter_dict(branch_filters.NON_PR_BRANCH_LIST)
68+
elif self.is_pr_only:
69+
props_dict["filters"] = branch_filters.gen_filter_dict(branch_filters.PR_BRANCH_LIST)
70+
71+
return [{self.template_name: props_dict}]
72+
73+
74+
WORKFLOW_DATA = [
75+
AndroidJob(["x86_32"], "pytorch_linux_build", is_master_only=False),
76+
AndroidJob(["x86_64"], "pytorch_linux_build"),
77+
AndroidJob(["arm", "v7a"], "pytorch_linux_build"),
78+
AndroidJob(["arm", "v8a"], "pytorch_linux_build"),
79+
AndroidJob(["vulkan", "x86_32"], "pytorch_linux_build", is_master_only=False),
80+
AndroidGradleJob(
81+
"pytorch-linux-xenial-py3-clang5-android-ndk-r19c-gradle-build-x86_32",
82+
"pytorch_android_gradle_build-x86_32",
83+
["pytorch_linux_xenial_py3_clang5_android_ndk_r19c_x86_32_build"],
84+
is_master_only=False,
85+
is_pr_only=True),
86+
AndroidGradleJob(
87+
"pytorch-linux-xenial-py3-clang5-android-ndk-r19c-gradle-custom-build-single",
88+
"pytorch_android_gradle_custom_build_single",
89+
[],
90+
is_master_only=False,
91+
is_pr_only=True),
92+
AndroidGradleJob(
93+
"pytorch-linux-xenial-py3-clang5-android-ndk-r19c-gradle-build",
94+
"pytorch_android_gradle_build",
95+
["pytorch_linux_xenial_py3_clang5_android_ndk_r19c_x86_32_build",
96+
"pytorch_linux_xenial_py3_clang5_android_ndk_r19c_x86_64_build",
97+
"pytorch_linux_xenial_py3_clang5_android_ndk_r19c_arm_v7a_build",
98+
"pytorch_linux_xenial_py3_clang5_android_ndk_r19c_arm_v8a_build"]),
99+
]
100+
101+
102+
def get_workflow_jobs():
103+
return [item.gen_tree() for item in WORKFLOW_DATA]

.circleci/cimodel/data/simple/android_gradle.py

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)
0