diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..1a5fbf0af68a3f9fd37ba297a58b85291179377b --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,38 @@ +image: hpvm/gitlab-ci +variables: + GIT_SUBMODULE_STRATEGY: recursive + # Use a better compressor + FF_USE_FASTZIP: "true" + # output upload and download progress every 2 seconds + TRANSFER_METER_FREQUENCY: "2s" + # Use no compression for artifacts + CACHE_COMPRESSION_LEVEL: "fastest" +cache: + key: "$CI_COMMIT_REF_SLUG" + paths: + - hpvm/build/ + - hpvm/llvm/ + - hpvm/test/dnn_benchmarks/model_params/ + +build: + stage: build + tags: + - hpvm + script: + - pwd + - source activate hpvm && cd hpvm + - ./install.sh -j32 -t "X86" DCMAKE_BUILD_TYPE=Release + - cd .. + only: + changes: + - hpvm/scripts/hpvm_installer.py + +tests: + stage: test + tags: + - hpvm + script: + - pwd + - source activate hpvm && cd hpvm + - ./install.sh -j32 -t "X86" DCMAKE_BUILD_TYPE=Release + - cd build && make -j32 check-hpvm-pass diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..be6d1e0985998a369e994efc434ed3d417b26bc3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +ARG IMAGE_NAME=nvidia/cuda +FROM nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 + +# Install dependencies: python 3.6, curl, git, libboost +RUN apt-get update && apt-get install -y --no-install-recommends python3 curl git libboost-dev + +# Install cmake +RUN curl -L https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0-linux-x86_64.sh -o cmake.sh && \ + bash ./cmake.sh --skip-license --prefix=/usr && rm cmake.sh + +# Install conda +RUN curl https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh -o anaconda.sh && \ + bash anaconda.sh -b && rm anaconda.sh + +# Set PATH to include conda +ENV PATH="/root/anaconda3/bin:${PATH}" + +# Send conda env spec into container +COPY . /root/hpvm/ + +# Create conda env named hpvm based on spec +RUN conda env create -n hpvm -f /root/hpvm/hpvm/env.yaml diff --git a/README.md b/README.md index 7fb3736d8b631233cdc150a83b716564499f1e7b..ac589bb111e227c214339bb27d479527cc2972b2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # The HPVM Compiler Infrastructure [](https://hpvm.readthedocs.io/en/latest/?badge=latest) +[](https://gitlab.engr.illinois.edu/llvm/hpvm/-/commits/approx_hpvm_devops) This repository contains the source code and documentation for the HPVM Compiler Infrastructure. diff --git a/hpvm/install.sh b/hpvm/install.sh index dd737034f043e2022710a94982467e60456d2bd4..3676a61972ff32566102d0eebdb490f00eaccb4b 100755 --- a/hpvm/install.sh +++ b/hpvm/install.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Run installer script -# Pass on args to installer that can parse them +# Run installer script and pass on args to installer that can parse them scripts/hpvm_installer.py "$@" -# Set path. -export PATH=$BUILD_DIR/bin:$PATH +ret_code=$? +echo "Installer returned with code $ret_code" +exit $ret_code diff --git a/hpvm/scripts/hpvm_installer.py b/hpvm/scripts/hpvm_installer.py index 26166d6b58443f65deb37b2c5a8370c35b91eeff..215db6e2a43103e893639ee5fdb96af80c33f426 100755 --- a/hpvm/scripts/hpvm_installer.py +++ b/hpvm/scripts/hpvm_installer.py @@ -7,7 +7,7 @@ from typing import List VERSION = "9.0.0" URL = "http://releases.llvm.org" -WGET = "wget" +DOWNLOADER = "curl" CLANG_DIR = f"cfe-{VERSION}.src" CLANG_TARBALL = f"{CLANG_DIR}.tar.xz" LLVM_DIR = f"llvm-{VERSION}.src" @@ -181,7 +181,7 @@ def check_download_llvm_clang(): else: print(f"Downloading {LLVM_TARBALL}...") print(f"=============================") - check_call([WGET, f"{URL}/{VERSION}/{LLVM_TARBALL}"]) + download(f"{URL}/{VERSION}/{LLVM_TARBALL}", LLVM_TARBALL) check_call(["tar", "xf", LLVM_TARBALL]) check_call(["mv", LLVM_DIR, "llvm"]) tools = Path("llvm/tools") @@ -196,7 +196,7 @@ def check_download_llvm_clang(): chdir(tools) print(f"Downloading {CLANG_TARBALL}...") print(f"=============================") - check_call([WGET, f"{URL}/{VERSION}/{CLANG_TARBALL}"]) + download(f"{URL}/{VERSION}/{CLANG_TARBALL}", CLANG_TARBALL) check_call(["tar", "xf", CLANG_TARBALL]) check_call(["mv", CLANG_DIR, "clang"]) assert Path("clang/").is_dir(), "Problem with clang download. Exiting!" @@ -214,7 +214,7 @@ def check_download_model_params(): else: print(f"Downloading DNN model parameters: {MODEL_PARAMS_TAR}...") print(f"=============================") - check_call([WGET, MODEL_PARAMS_LINK, "-O", MODEL_PARAMS_TAR]) + download(MODEL_PARAMS_LINK, MODEL_PARAMS_TAR) print( f"Extracting DNN model parameters {MODEL_PARAMS_TAR} => {MODEL_PARAMS_DIR}..." ) @@ -310,6 +310,10 @@ def input_with_check(prompt: str, parse, prompt_when_invalid: str): return value +def download(link: str, output: Path): + check_call(["curl", "-L", link, "-o", output]) + + def main(): from sys import argv