source/bazel/libtorch.bzl (183 lines of code) (raw):
load("//bazel:version.bzl", "NEUROPOD_VERSION")
# https://docs.bazel.build/versions/master/skylark/repository_rules.html
def _impl(repository_ctx):
# The `or` pattern below handles empty strings and unset env variables
# Using a default value only handles unset env variables
version = repository_ctx.os.environ.get("NEUROPOD_TORCH_VERSION") or "1.1.0"
IS_MAC = repository_ctx.os.name.startswith("mac")
IS_GPU = (repository_ctx.os.environ.get("NEUROPOD_IS_GPU") or None) != None
CUDA_VERSION = repository_ctx.os.environ.get("NEUROPOD_CUDA_VERSION") or "10.0"
# TODO(vip): Fix this once we have a better way of dealing with CUDA 11.2
if CUDA_VERSION == "11.2.1":
CUDA_VERSION = "10.1"
IS_GPU = False
# Get the torch cuda string (e.g. cpu, cu90, cu92, cu100)
torch_cuda_string = "cu" + CUDA_VERSION.replace(".", "") if IS_GPU else "cpu"
defines = ["TORCH_VERSION=" + version]
# If this is a nightly build, we want to define a variable
# to let our code know what nightly version this is
# See https://github.com/pytorch/pytorch/issues/23094
if "dev" in version:
version_base, version_date = version.split(".dev")
defines.append("CAFFE2_NIGHTLY_VERSION=" + version_date)
MAPPING = {
# Linux CPU
"1.1.0-linux-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.1.0.zip",
"sha256": "c863a0073ff4c7b6feb958799c7dc3202b3449e86ff1cec9c85c7da9d1fe0218",
},
"1.2.0-linux-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.2.0.zip",
"sha256": "6b0cc8840e05e5e2742e5c59d75f8379f4eda8737aeb24b5ec653735315102b2",
},
"1.3.0-linux-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.3.0%2Bcpu.zip",
"sha256": "a1a4bfe2090c418150cf38b37e43b3238b9639806f0c3483097d073792c2e114",
},
"1.4.0-linux-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.4.0%2Bcpu.zip",
"sha256": "cf2d79574e08198419fd53d3b0edab3e12587649a22185431e3f5c8937177a47",
},
"1.5.0-linux-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.5.0%2Bcpu.zip",
"sha256": "db3545b0d2b144db4292c2f0bec236febec44aa658dd54f6b3532f2848c50c8a",
},
"1.6.0-linux-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.6.0%2Bcpu.zip",
"sha256": "31d3c5a59b1394f9d958501e392cedc91476358accea76c7094d103e9335b80c",
},
"1.7.0-linux-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.7.0%2Bcpu.zip",
"sha256": "4cf8635fb41774c3b38fcb9955ff86b4ed7eb8e73d1595a09297196b7c28db28",
},
"1.8.1-linux-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.8.1%2Bcpu.zip",
"sha256": "b2df0393b3a5445e4e644729c6e0610437af983ddea4b0f5c46e01651a64bd74",
},
"1.9.0-linux-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.9.0%2Bcpu.zip",
"sha256": "",
},
"1.10.2-linux-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.10.2%2Bcpu.zip",
"sha256": "fa3fad287c677526277f64d12836266527d403f21f41cc2e7fb9d904969d4c4a",
},
# Linux GPU
"1.1.0-linux-cu90": {
"url": "https://download.pytorch.org/libtorch/cu90/libtorch-shared-with-deps-1.1.0.zip",
"sha256": "57ff5faa79c9729f35a2a753717abcef8096cc5646a7b79ddcef2288be5281a9",
},
"1.2.0-linux-cu100": {
"url": "https://download.pytorch.org/libtorch/cu100/libtorch-shared-with-deps-1.2.0.zip",
"sha256": "bd385169dd6137f532648398eeee8d6479be1f6b81314a4373800fcc72bb375d",
},
"1.3.0-linux-cu100": {
"url": "https://download.pytorch.org/libtorch/cu100/libtorch-shared-with-deps-1.3.0.zip",
"sha256": "5943ed9d25f473f9baf4301fc6526f048f89061f38e8cf0cc01506c96ad58ed4",
},
"1.4.0-linux-cu100": {
"url": "https://download.pytorch.org/libtorch/cu100/libtorch-shared-with-deps-1.4.0%2Bcu100.zip",
"sha256": "1557927c9929c8eb8caf8860d0ffdce39ae931af924f0fde859ad1dc0843575c",
},
"1.5.0-linux-cu101": {
"url": "https://download.pytorch.org/libtorch/cu101/libtorch-shared-with-deps-1.5.0%2Bcu101.zip",
"sha256": "04c0fdb46ca1b74c39715d735a4906d08b976f1d57aef31a020eaf967a6a48b7",
},
"1.6.0-linux-cu101": {
"url": "https://download.pytorch.org/libtorch/cu101/libtorch-shared-with-deps-1.6.0%2Bcu101.zip",
"sha256": "6a5a215da3dff3f3183674187de3290bd66be3f0ca686ea61f3dd34530da8e23",
},
"1.7.0-linux-cu101": {
"url": "https://download.pytorch.org/libtorch/cu101/libtorch-shared-with-deps-1.7.0%2Bcu101.zip",
"sha256": "e0816a692e4540739b6832c118f186b5e65d1fac56edb2048b600b756ae42687",
},
"1.8.1-linux-cu102": {
"url": "https://download.pytorch.org/libtorch/cu102/libtorch-shared-with-deps-1.8.1%2Bcu102.zip",
"sha256": "b1d82045bba9f69752165ed46dbe1996ecc646a4ff31ce5883192d4b52a84f3e",
},
"1.9.0-linux-cu102": {
"url": "https://download.pytorch.org/libtorch/cu102/libtorch-shared-with-deps-1.9.0%2Bcu102.zip",
"sha256": "",
},
"1.10.2-linux-cu102": {
"url": "https://download.pytorch.org/libtorch/cu102/libtorch-shared-with-deps-1.10.2%2Bcu102.zip",
"sha256": "206ab3f44d482a1d9837713cafbde9dd9d7907efac2dc94f1dc86e9a1101296f",
},
# Mac CPU
"1.1.0-mac-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.1.0.zip",
"sha256": "2db31f6c7e69ea9142396d8ed0a7ad70dde2a9993cc8c23cc48c03ffeea13f0f",
},
"1.2.0-mac-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.2.0.zip",
"sha256": "927cd63106d4055d4a415cf75b2ecffb430c27736b78f609350b57934883240f",
},
"1.3.0-mac-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.3.0.zip",
"sha256": "c44050d28bf21676f68fa0f87caa27bc610cd9802c41b5c83e87295d22e048a4",
},
"1.4.0-mac-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.4.0.zip",
"sha256": "84e9112b442ee1e3dc9e078d9066a855a2344ec566616cffbff1662e08cd8bf7",
},
"1.5.0-mac-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.5.0.zip",
"sha256": "90bd7e5df2a73af1d80cdaa1403b6f5cc5ac9127be4bb5b7616bf32a868cf7d8",
},
"1.6.0-mac-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.6.0.zip",
"sha256": "e1140bed7bd56c26638bae28aebbdf68e588a9fae92c6684645bcdd996e4183c",
},
"1.7.0-mac-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.7.0.zip",
"sha256": "2dccb83f1beb16ef3129d9f7af5abafb2f5d9220d0c7da8fde3531bd4ef0e655",
},
"1.8.1-mac-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.8.1.zip",
"sha256": "",
},
"1.9.0-mac-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.9.0.zip",
"sha256": "",
},
"1.10.2-mac-cpu": {
"url": "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.10.2.zip",
"sha256": "d1711e844dc69c2338adfc8ce634806a9ae36e54328afbe501bafd2d70f550e2",
},
}
download_mapping = MAPPING["{}-{}-{}".format(
version,
"mac" if IS_MAC else "linux",
torch_cuda_string,
)]
download_url = download_mapping["url"]
sha256 = download_mapping["sha256"]
repository_ctx.download_and_extract(download_url, stripPrefix = "libtorch", sha256 = sha256)
# Generate a build file based on the template
repository_ctx.template(
"BUILD.bazel",
repository_ctx.path(Label(repository_ctx.attr.build_file_template)),
substitutions = {
"{TORCH_DEFINES}": "{}".format(defines),
},
)
# Create a file that specifies versioning information
repository_ctx.file(
"neuropod_backend_path.bzl",
content = """
NEUROPOD_BACKEND_PATH = "{}/backends/torchscript_{}{}/"
""".format(
NEUROPOD_VERSION,
version,
"_gpu" if IS_GPU else "",
).strip(),
)
libtorch_repository = repository_rule(
implementation = _impl,
environ = [
"NEUROPOD_TORCH_VERSION",
"NEUROPOD_IS_GPU",
"NEUROPOD_CUDA_VERSION",
],
attrs = {"build_file_template": attr.string(mandatory = True)},
)