mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-06 12:20:52 +01:00
Summary: Diagram preview:  Pull Request resolved: https://github.com/pytorch/pytorch/pull/17189 Differential Revision: D14141362 Pulled By: kostmo fbshipit-source-id: 0625a1234d0307c6be79f17e756ddb1cc445b374
188 lines
5.1 KiB
Python
188 lines
5.1 KiB
Python
from collections import OrderedDict
|
|
|
|
import conf_tree
|
|
import miniutils
|
|
import make_build_configs
|
|
|
|
|
|
class Conf:
|
|
def __init__(self, os, cuda_version, pydistro, parms, smoke=False, libtorch_variant=None):
|
|
|
|
self.os = os
|
|
self.cuda_version = cuda_version
|
|
self.pydistro = pydistro
|
|
self.parms = parms
|
|
self.smoke = smoke
|
|
self.libtorch_variant = libtorch_variant
|
|
|
|
def genBuildEnvParms(self):
|
|
return [self.pydistro] + self.parms + [make_build_configs.get_processor_arch_name(self.cuda_version)]
|
|
|
|
def genDockerImage(self):
|
|
|
|
docker_word_substitution = {
|
|
"manywheel": "manylinux",
|
|
"libtorch": "manylinux",
|
|
}
|
|
|
|
docker_distro_prefix = miniutils.override(self.pydistro, docker_word_substitution)
|
|
|
|
alt_docker_suffix = self.cuda_version or "80"
|
|
docker_distro_suffix = "" if self.pydistro == "conda" else alt_docker_suffix
|
|
return miniutils.quote("soumith/" + docker_distro_prefix + "-cuda" + docker_distro_suffix)
|
|
|
|
def getNamePrefix(self):
|
|
return "smoke" if self.smoke else "binary"
|
|
|
|
def genBuildName(self, build_or_test):
|
|
parts = [self.getNamePrefix(), self.os] + self.genBuildEnvParms()
|
|
|
|
if self.smoke:
|
|
if self.libtorch_variant:
|
|
parts.append(self.libtorch_variant)
|
|
else:
|
|
parts.append(build_or_test)
|
|
|
|
return "_".join(parts)
|
|
|
|
def genYamlTree(self, build_or_test):
|
|
|
|
env_dict = OrderedDict({
|
|
"BUILD_ENVIRONMENT": miniutils.quote(" ".join(self.genBuildEnvParms())),
|
|
})
|
|
|
|
if self.libtorch_variant:
|
|
env_dict["LIBTORCH_VARIANT"] = miniutils.quote(self.libtorch_variant)
|
|
|
|
os_word_substitution = {
|
|
"macos": "mac",
|
|
}
|
|
|
|
os_name = miniutils.override(self.os, os_word_substitution)
|
|
|
|
d = {
|
|
"environment": env_dict,
|
|
"<<": "*" + "_".join([self.getNamePrefix(), os_name, build_or_test]),
|
|
}
|
|
|
|
if build_or_test == "test":
|
|
tuples = []
|
|
if self.cuda_version:
|
|
tuples.append(("USE_CUDA_DOCKER_RUNTIME", miniutils.quote("1")))
|
|
|
|
if not (self.smoke and self.os == "macos"):
|
|
tuples.append(("DOCKER_IMAGE", self.genDockerImage()))
|
|
|
|
if self.smoke:
|
|
# TODO: Fix this discrepancy upstream
|
|
tuples.reverse()
|
|
|
|
for (k, v) in tuples:
|
|
env_dict[k] = v
|
|
|
|
else:
|
|
if self.os == "linux" and build_or_test != "upload":
|
|
d["docker"] = [{"image": self.genDockerImage()}]
|
|
|
|
if build_or_test == "test":
|
|
if self.cuda_version:
|
|
d["resource_class"] = "gpu.medium"
|
|
|
|
return d
|
|
|
|
|
|
def gen_build_env_list(smoke):
|
|
|
|
root = make_build_configs.TopLevelNode(
|
|
"Builds",
|
|
make_build_configs.CONFIG_TREE_DATA,
|
|
smoke,
|
|
)
|
|
|
|
config_list, dot = conf_tree.dfs(root)
|
|
|
|
newlist = []
|
|
for c in config_list:
|
|
conf = Conf(
|
|
c.find_prop("os_name"),
|
|
c.find_prop("cu"),
|
|
c.find_prop("package_format"),
|
|
[c.find_prop("pyver")],
|
|
c.find_prop("smoke"),
|
|
c.find_prop("libtorch_variant")
|
|
)
|
|
newlist.append(conf)
|
|
|
|
return newlist, dot
|
|
|
|
|
|
def add_build_entries(jobs_dict, phase, smoke):
|
|
|
|
configs, _ = gen_build_env_list(smoke)
|
|
for conf_options in configs:
|
|
jobs_dict[conf_options.genBuildName(phase)] = conf_options.genYamlTree(phase)
|
|
|
|
|
|
def add_binary_build_specs(jobs_dict):
|
|
add_build_entries(jobs_dict, "build", False)
|
|
|
|
|
|
def add_binary_build_uploads(jobs_dict):
|
|
add_build_entries(jobs_dict, "upload", False)
|
|
|
|
|
|
def add_smoke_test_specs(jobs_dict):
|
|
add_build_entries(jobs_dict, "test", True)
|
|
|
|
|
|
def add_binary_build_tests(jobs_dict):
|
|
|
|
def testable_binary_predicate(x):
|
|
return x.os == "linux" and (x.smoke or x.pydistro != "libtorch")
|
|
|
|
configs, _ = gen_build_env_list(False)
|
|
filtered_configs = filter(testable_binary_predicate, configs)
|
|
|
|
for conf_options in filtered_configs:
|
|
jobs_dict[conf_options.genBuildName("test")] = conf_options.genYamlTree("test")
|
|
|
|
|
|
def gen_schedule_tree(cron_timing):
|
|
return [{
|
|
"schedule": {
|
|
"cron": miniutils.quote(cron_timing),
|
|
"filters": {
|
|
"branches": {
|
|
"only": ["master"],
|
|
},
|
|
},
|
|
},
|
|
}]
|
|
|
|
|
|
def add_jobs_and_render(jobs_dict, toplevel_key, smoke, cron_schedule):
|
|
|
|
jobs_list = []
|
|
|
|
configs, graph = gen_build_env_list(smoke)
|
|
for build_config in configs:
|
|
build_name = build_config.genBuildName("build")
|
|
jobs_list.append(build_name)
|
|
|
|
d = OrderedDict(
|
|
triggers=gen_schedule_tree(cron_schedule),
|
|
jobs=jobs_list,
|
|
)
|
|
|
|
jobs_dict[toplevel_key] = d
|
|
|
|
graph.draw(toplevel_key + "-config-dimensions.png", prog="twopi")
|
|
|
|
|
|
def add_binary_build_jobs(jobs_dict):
|
|
add_jobs_and_render(jobs_dict, "binarybuilds", False, "5 5 * * *")
|
|
|
|
|
|
def add_binary_smoke_test_jobs(jobs_dict):
|
|
add_jobs_and_render(jobs_dict, "binarysmoketests", True, "15 16 * * *")
|