|
| 1 | +# run python regenerate.py to generate config.yml from config.yml.in |
| 2 | + |
| 3 | +version: 2.1 |
| 4 | + |
| 5 | +executors: |
| 6 | + windows-with-nvidia-gpu: |
| 7 | + machine: |
| 8 | + resource_class: windows.gpu.nvidia.medium |
| 9 | + image: windows-server-2019-nvidia:stable |
| 10 | + shell: bash.exe |
| 11 | + |
| 12 | +install_official_git_client: &install_official_git_client |
| 13 | + name: Install Official Git Client |
| 14 | + no_output_timeout: "1h" |
| 15 | + command: | |
| 16 | + set -e |
| 17 | + sudo apt-get -qq update |
| 18 | + sudo apt-get -qq install openssh-client git |
| 19 | + |
| 20 | +# This system setup script is meant to run before the CI-related scripts, e.g., |
| 21 | +# installing Git client, checking out code, setting up CI env, and |
| 22 | +# building/testing. |
| 23 | +setup_linux_system_environment: &setup_linux_system_environment |
| 24 | + name: Set Up System Environment |
| 25 | + no_output_timeout: "1h" |
| 26 | + command: | |
| 27 | + set -ex |
| 28 | + |
| 29 | + # Stop background apt updates. Hypothetically, the kill should not |
| 30 | + # be necessary, because stop is supposed to send a kill signal to |
| 31 | + # the process, but we've added it for good luck. Also |
| 32 | + # hypothetically, it's supposed to be unnecessary to wait for |
| 33 | + # the process to block. We also have that line for good luck. |
| 34 | + # If you like, try deleting them and seeing if it works. |
| 35 | + sudo systemctl stop apt-daily.service || true |
| 36 | + sudo systemctl kill --kill-who=all apt-daily.service || true |
| 37 | + |
| 38 | + sudo systemctl stop unattended-upgrades.service || true |
| 39 | + sudo systemctl kill --kill-who=all unattended-upgrades.service || true |
| 40 | + |
| 41 | + # wait until `apt-get update` has been killed |
| 42 | + while systemctl is-active --quiet apt-daily.service |
| 43 | + do |
| 44 | + sleep 1; |
| 45 | + done |
| 46 | + while systemctl is-active --quiet unattended-upgrades.service |
| 47 | + do |
| 48 | + sleep 1; |
| 49 | + done |
| 50 | + |
| 51 | + # See if we actually were successful |
| 52 | + systemctl list-units --all | cat |
| 53 | + |
| 54 | + sudo apt-get purge -y unattended-upgrades |
| 55 | + |
| 56 | + cat /etc/apt/sources.list |
| 57 | + |
| 58 | + ps auxfww | grep [a]pt |
| 59 | + ps auxfww | grep dpkg |
| 60 | + |
| 61 | +pytorch_tutorial_build_defaults: &pytorch_tutorial_build_defaults |
| 62 | + machine: |
| 63 | + image: ubuntu-2004-cuda-11.4:202110-01 |
| 64 | + steps: |
| 65 | + - checkout |
| 66 | + - run: |
| 67 | + <<: *setup_linux_system_environment |
| 68 | + - run: |
| 69 | + name: Set Up CI Environment |
| 70 | + no_output_timeout: "1h" |
| 71 | + command: | |
| 72 | + set -e |
| 73 | + |
| 74 | + sudo apt-get -y update |
| 75 | + sudo apt-get -y install expect-dev moreutils |
| 76 | + |
| 77 | + sudo pip3 -q install awscli==1.16.35 |
| 78 | + |
| 79 | + if [ -n "${CUDA_VERSION}" ]; then |
| 80 | + nvidia-smi |
| 81 | + fi |
| 82 | + |
| 83 | + # This IAM user only allows read-write access to ECR |
| 84 | + export AWS_ACCESS_KEY_ID=${CIRCLECI_AWS_ACCESS_KEY_FOR_ECR_READ_ONLY} |
| 85 | + export AWS_SECRET_ACCESS_KEY=${CIRCLECI_AWS_SECRET_KEY_FOR_ECR_READ_ONLY} |
| 86 | + eval $(aws ecr get-login --region us-east-1 --no-include-email) |
| 87 | + - run: |
| 88 | + name: Build |
| 89 | + no_output_timeout: "20h" |
| 90 | + command: | |
| 91 | + set -e |
| 92 | + |
| 93 | + # for some reason, pip installs it in a different place than what is looked at in the py file |
| 94 | + sudo pip3 install requests --target=/opt/circleci/.pyenv/versions/3.9.4/lib/python3.9/site-packages |
| 95 | + export pyTorchDockerImageTag=$(python3 .jenkins/get_docker_tag.py) |
| 96 | + echo "PyTorchDockerImageTag: "${pyTorchDockerImageTag} |
| 97 | + |
| 98 | + cat >/home/circleci/project/ci_build_script.sh \<<EOL |
| 99 | + # =================== The following code will be executed inside Docker container =================== |
| 100 | + set -ex |
| 101 | + |
| 102 | + .jenkins/build.sh |
| 103 | + # =================== The above code will be executed inside Docker container =================== |
| 104 | + EOL |
| 105 | + chmod +x /home/circleci/project/ci_build_script.sh |
| 106 | + |
| 107 | + export DOCKER_IMAGE=${DOCKER_IMAGE}:${pyTorchDockerImageTag} |
| 108 | + echo "DOCKER_IMAGE: "${DOCKER_IMAGE} |
| 109 | + docker pull ${DOCKER_IMAGE} >/dev/null |
| 110 | + if [ -n "${CUDA_VERSION}" ]; then |
| 111 | + export id=$(docker run --gpus all -t -d -w /var/lib/jenkins ${DOCKER_IMAGE}) |
| 112 | + else |
| 113 | + export id=$(docker run -t -d -w /var/lib/jenkins ${DOCKER_IMAGE}) |
| 114 | + fi |
| 115 | + |
| 116 | + echo "declare -x JOB_BASE_NAME=${CIRCLE_JOB}" > /home/circleci/project/env |
| 117 | + echo "declare -x COMMIT_ID=${CIRCLE_SHA1}" >> /home/circleci/project/env |
| 118 | + echo "declare -x COMMIT_SOURCE=${CIRCLE_BRANCH}" >> /home/circleci/project/env |
| 119 | + # DANGER! DO NOT REMOVE THE `set +x` SETTING HERE! |
| 120 | + set +x |
| 121 | + if [[ "$CIRCLE_BRANCH" == master ]]; then |
| 122 | + if [ -z "${CIRCLECI_AWS_ACCESS_KEY_FOR_PYTORCH_TUTORIAL_BUILD_MASTER_S3_BUCKET}" ]; then exit 1; fi |
| 123 | + if [ -z "${CIRCLECI_AWS_SECRET_KEY_FOR_PYTORCH_TUTORIAL_BUILD_MASTER_S3_BUCKET}" ]; then exit 1; fi |
| 124 | + if [ -z "${GITHUB_PYTORCHBOT_USERNAME}" ]; then exit 1; fi |
| 125 | + if [ -z "${GITHUB_PYTORCHBOT_TOKEN}" ]; then exit 1; fi |
| 126 | + |
| 127 | + echo "declare -x AWS_ACCESS_KEY_ID=${CIRCLECI_AWS_ACCESS_KEY_FOR_PYTORCH_TUTORIAL_BUILD_MASTER_S3_BUCKET}" >> /home/circleci/project/env |
| 128 | + echo "declare -x AWS_SECRET_ACCESS_KEY=${CIRCLECI_AWS_SECRET_KEY_FOR_PYTORCH_TUTORIAL_BUILD_MASTER_S3_BUCKET}" >> /home/circleci/project/env |
| 129 | + echo "declare -x GITHUB_PYTORCHBOT_USERNAME=${GITHUB_PYTORCHBOT_USERNAME}" >> /home/circleci/project/env |
| 130 | + echo "declare -x GITHUB_PYTORCHBOT_TOKEN=${GITHUB_PYTORCHBOT_TOKEN}" >> /home/circleci/project/env |
| 131 | + else |
| 132 | + echo "declare -x AWS_ACCESS_KEY_ID=${CIRCLECI_AWS_ACCESS_KEY_FOR_PYTORCH_TUTORIAL_BUILD_PR_S3_BUCKET}" >> /home/circleci/project/env |
| 133 | + echo "declare -x AWS_SECRET_ACCESS_KEY=${CIRCLECI_AWS_SECRET_KEY_FOR_PYTORCH_TUTORIAL_BUILD_PR_S3_BUCKET}" >> /home/circleci/project/env |
| 134 | + fi |
| 135 | + set -x |
| 136 | + |
| 137 | + docker cp /home/circleci/project/. "$id:/var/lib/jenkins/workspace" |
| 138 | + |
| 139 | + export COMMAND='((echo "source ./workspace/env" && echo "sudo chown -R jenkins workspace && cd workspace && ./ci_build_script.sh") | docker exec -u jenkins -i "$id" bash) 2>&1' |
| 140 | + echo ${COMMAND} > ./command.sh && unbuffer bash ./command.sh | ts |
| 141 | + |
| 142 | +pytorch_tutorial_build_worker_defaults: &pytorch_tutorial_build_worker_defaults |
| 143 | + environment: |
| 144 | + DOCKER_IMAGE: "308535385114.dkr.ecr.us-east-1.amazonaws.com/pytorch/pytorch-linux-xenial-cuda10.2-cudnn7-py3-gcc7" |
| 145 | + CUDA_VERSION: "9" |
| 146 | + resource_class: gpu.nvidia.small |
| 147 | + <<: *pytorch_tutorial_build_defaults |
| 148 | + |
| 149 | +pytorch_tutorial_build_manager_defaults: &pytorch_tutorial_build_manager_defaults |
| 150 | + environment: |
| 151 | + DOCKER_IMAGE: "308535385114.dkr.ecr.us-east-1.amazonaws.com/pytorch/pytorch-linux-xenial-cuda10.2-cudnn7-py3-gcc7" |
| 152 | + resource_class: medium |
| 153 | + <<: *pytorch_tutorial_build_defaults |
| 154 | +{% raw %} |
| 155 | +pytorch_windows_build_worker: &pytorch_windows_build_worker |
| 156 | + executor: windows-with-nvidia-gpu |
| 157 | + steps: |
| 158 | + - checkout |
| 159 | + - run: |
| 160 | + name: Install Cuda |
| 161 | + no_output_timeout: 30m |
| 162 | + command: | |
| 163 | + .circleci/scripts/windows_cuda_install.sh |
| 164 | + - run: |
| 165 | + name: Generate cache key |
| 166 | + # This will refresh cache on Sundays, build should generate new cache. |
| 167 | + command: echo "$(date +"%Y-%U")" > .circleci-weekly |
| 168 | + - restore_cache: |
| 169 | + keys: |
| 170 | + - data-{{ checksum "Makefile" }}-{{ checksum ".circleci-weekly" }} |
| 171 | + - run: |
| 172 | + name: test |
| 173 | + no_output_timeout: "1h" |
| 174 | + command: | |
| 175 | + .circleci/scripts/build_for_windows.sh |
| 176 | + - save_cache: |
| 177 | + key: data-{{ checksum "Makefile" }}-{{ checksum ".circleci-weekly" }} |
| 178 | + paths: |
| 179 | + - advanced_source/data |
| 180 | + - beginner_source/data |
| 181 | + - intermediate_source/data |
| 182 | + - prototype_source/data |
| 183 | +{% endraw %} |
| 184 | +jobs: |
| 185 | + {{ jobs("pr") }} |
| 186 | + |
| 187 | + {{ jobs("master") }} |
| 188 | + |
| 189 | + {{ windows_jobs() }} |
| 190 | + |
| 191 | +workflows: |
| 192 | + build: |
| 193 | + jobs: |
| 194 | + # Build jobs that only run on PR |
| 195 | + {{ workflows_jobs("pr") }} |
| 196 | + # Build jobs that only run on master |
| 197 | + {{ workflows_jobs("master") }} |
| 198 | +# {{ windows_workflows_jobs() }} |
0 commit comments