mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-08-02 03:42:50 +08:00
Summary: Add builds corresponding to the new pytorch 1.10.0. We omit CUDA 11.3 testing because it fails with current hardware, and omit the main build too for the moment. Also move to the newer GPU circle CI executors. Reviewed By: gkioxari Differential Revision: D32335934 fbshipit-source-id: 416d92a8eecd06ef7fc742664a5f2d46f93415f8
168 lines
4.5 KiB
Python
Executable File
168 lines
4.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under the BSD-style license found in the
|
|
# LICENSE file in the root directory of this source tree.
|
|
|
|
"""
|
|
This script is adapted from the torchvision one.
|
|
"""
|
|
|
|
import os.path
|
|
|
|
import jinja2
|
|
import yaml
|
|
|
|
|
|
# The CUDA versions which have pytorch conda packages available for linux for each
|
|
# version of pytorch.
|
|
# Pytorch 1.4 also supports cuda 10.0 but we no longer build for cuda 10.0 at all.
|
|
CONDA_CUDA_VERSIONS = {
|
|
"1.6.0": ["cu92", "cu101", "cu102"],
|
|
"1.7.0": ["cu101", "cu102", "cu110"],
|
|
"1.7.1": ["cu101", "cu102", "cu110"],
|
|
"1.8.0": ["cu101", "cu102", "cu111"],
|
|
"1.8.1": ["cu101", "cu102", "cu111"],
|
|
"1.9.0": ["cu102", "cu111"],
|
|
"1.9.1": ["cu102", "cu111"],
|
|
"1.10.0": ["cu102", "cu113"],
|
|
}
|
|
|
|
|
|
def conda_docker_image_for_cuda(cuda_version):
|
|
if cuda_version == "cu113":
|
|
return "pytorch/conda-builder:cuda113"
|
|
return None
|
|
|
|
|
|
def pytorch_versions_for_python(python_version):
|
|
if python_version in ["3.6", "3.7", "3.8"]:
|
|
return list(CONDA_CUDA_VERSIONS)
|
|
pytorch_without_py39 = ["1.4", "1.5.0", "1.5.1", "1.6.0", "1.7.0"]
|
|
return [i for i in CONDA_CUDA_VERSIONS if i not in pytorch_without_py39]
|
|
|
|
|
|
def workflows(prefix="", filter_branch=None, upload=False, indentation=6):
|
|
w = []
|
|
for btype in ["conda"]:
|
|
for python_version in ["3.6", "3.7", "3.8", "3.9"]:
|
|
for pytorch_version in pytorch_versions_for_python(python_version):
|
|
for cu_version in CONDA_CUDA_VERSIONS[pytorch_version]:
|
|
w += workflow_pair(
|
|
btype=btype,
|
|
python_version=python_version,
|
|
pytorch_version=pytorch_version,
|
|
cu_version=cu_version,
|
|
prefix=prefix,
|
|
upload=upload,
|
|
filter_branch=filter_branch,
|
|
)
|
|
|
|
return indent(indentation, w)
|
|
|
|
|
|
def workflow_pair(
|
|
*,
|
|
btype,
|
|
python_version,
|
|
pytorch_version,
|
|
cu_version,
|
|
prefix="",
|
|
upload=False,
|
|
filter_branch,
|
|
):
|
|
|
|
w = []
|
|
py = python_version.replace(".", "")
|
|
pyt = pytorch_version.replace(".", "")
|
|
base_workflow_name = f"{prefix}linux_{btype}_py{py}_{cu_version}_pyt{pyt}"
|
|
|
|
w.append(
|
|
generate_base_workflow(
|
|
base_workflow_name=base_workflow_name,
|
|
python_version=python_version,
|
|
pytorch_version=pytorch_version,
|
|
cu_version=cu_version,
|
|
btype=btype,
|
|
filter_branch=filter_branch,
|
|
)
|
|
)
|
|
|
|
if upload:
|
|
w.append(
|
|
generate_upload_workflow(
|
|
base_workflow_name=base_workflow_name,
|
|
btype=btype,
|
|
cu_version=cu_version,
|
|
filter_branch=filter_branch,
|
|
)
|
|
)
|
|
|
|
return w
|
|
|
|
|
|
def generate_base_workflow(
|
|
*,
|
|
base_workflow_name,
|
|
python_version,
|
|
cu_version,
|
|
pytorch_version,
|
|
btype,
|
|
filter_branch=None,
|
|
):
|
|
|
|
d = {
|
|
"name": base_workflow_name,
|
|
"python_version": python_version,
|
|
"cu_version": cu_version,
|
|
"pytorch_version": pytorch_version,
|
|
"context": "DOCKERHUB_TOKEN",
|
|
}
|
|
|
|
conda_docker_image = conda_docker_image_for_cuda(cu_version)
|
|
if conda_docker_image is not None:
|
|
d["conda_docker_image"] = conda_docker_image
|
|
|
|
if filter_branch is not None:
|
|
d["filters"] = {"branches": {"only": filter_branch}}
|
|
|
|
return {f"binary_linux_{btype}": d}
|
|
|
|
|
|
def generate_upload_workflow(*, base_workflow_name, btype, cu_version, filter_branch):
|
|
d = {
|
|
"name": f"{base_workflow_name}_upload",
|
|
"context": "org-member",
|
|
"requires": [base_workflow_name],
|
|
}
|
|
|
|
if btype == "wheel":
|
|
d["subfolder"] = cu_version + "/"
|
|
|
|
if filter_branch is not None:
|
|
d["filters"] = {"branches": {"only": filter_branch}}
|
|
|
|
return {f"binary_{btype}_upload": d}
|
|
|
|
|
|
def indent(indentation, data_list):
|
|
if len(data_list) == 0:
|
|
return ""
|
|
return ("\n" + " " * indentation).join(
|
|
yaml.dump(data_list, default_flow_style=False).splitlines()
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
d = os.path.dirname(__file__)
|
|
env = jinja2.Environment(
|
|
loader=jinja2.FileSystemLoader(d),
|
|
lstrip_blocks=True,
|
|
autoescape=False,
|
|
keep_trailing_newline=True,
|
|
)
|
|
|
|
with open(os.path.join(d, "config.yml"), "w") as f:
|
|
f.write(env.get_template("config.in.yml").render(workflows=workflows))
|