Skip to content

Commit 0f29eeb

Browse files
authored
Add windows CI test for tutorials and parallelize with 4 workers (#1148)
1 parent 12cecd1 commit 0f29eeb

File tree

2 files changed

+115
-18
lines changed

2 files changed

+115
-18
lines changed

.circleci/config.yml

Lines changed: 83 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ pytorch_tutorial_build_manager_defaults: &pytorch_tutorial_build_manager_default
182182
resource_class: medium
183183
<<: *pytorch_tutorial_build_defaults
184184

185-
pytorch_windows_build: &pytorch_windows_build
185+
pytorch_windows_build_worker: &pytorch_windows_build_worker
186186
executor: windows-with-nvidia-gpu
187187
steps:
188188
- checkout
@@ -191,10 +191,25 @@ pytorch_windows_build: &pytorch_windows_build
191191
no_output_timeout: 30m
192192
command: |
193193
.circleci/scripts/windows_cuda_install.sh
194+
- run:
195+
name: Generate cache key
196+
# This will refresh cache on Sundays, build should generate new cache.
197+
command: echo "$(date +"%Y-%U")" > .circleci-weekly
198+
- restore_cache:
199+
keys:
200+
- data-{{ checksum "Makefile" }}-{{ checksum ".circleci-weekly" }}
194201
- run:
195202
name: test
203+
no_output_timeout: "1h"
196204
command: |
197205
.circleci/scripts/build_for_windows.sh
206+
- save_cache:
207+
key: data-{{ checksum "Makefile" }}-{{ checksum ".circleci-weekly" }}
208+
paths:
209+
- advanced_source/data
210+
- beginner_source/data
211+
- intermediate_source/data
212+
- prototype_source/data
198213

199214
jobs:
200215
pytorch_tutorial_pr_build_worker_0:
@@ -323,8 +338,29 @@ jobs:
323338
pytorch_tutorial_master_build_manager:
324339
<<: *pytorch_tutorial_build_manager_defaults
325340

326-
pytorch_windows_build_worker:
327-
<<: *pytorch_windows_build
341+
pytorch_tutorial_windows_pr_build_worker_0:
342+
<<: *pytorch_windows_build_worker
343+
344+
pytorch_tutorial_windows_pr_build_worker_1:
345+
<<: *pytorch_windows_build_worker
346+
347+
pytorch_tutorial_windows_pr_build_worker_2:
348+
<<: *pytorch_windows_build_worker
349+
350+
pytorch_tutorial_windows_pr_build_worker_3:
351+
<<: *pytorch_windows_build_worker
352+
353+
pytorch_tutorial_windows_master_build_worker_0:
354+
<<: *pytorch_windows_build_worker
355+
356+
pytorch_tutorial_windows_master_build_worker_1:
357+
<<: *pytorch_windows_build_worker
358+
359+
pytorch_tutorial_windows_master_build_worker_2:
360+
<<: *pytorch_windows_build_worker
361+
362+
pytorch_tutorial_windows_master_build_worker_3:
363+
<<: *pytorch_windows_build_worker
328364

329365
workflows:
330366
build:
@@ -562,11 +598,48 @@ workflows:
562598
branches:
563599
only:
564600
- master
565-
# - pytorch_windows_build_worker:
566-
# name: win_test_worker
567-
# type: approval
568-
# filters:
569-
# branches:
570-
# only:
571-
# - master
601+
- pytorch_tutorial_windows_pr_build_worker_0:
602+
filters:
603+
branches:
604+
ignore:
605+
- master
606+
- pytorch_tutorial_windows_pr_build_worker_1:
607+
filters:
608+
branches:
609+
ignore:
610+
- master
611+
- pytorch_tutorial_windows_pr_build_worker_2:
612+
filters:
613+
branches:
614+
ignore:
615+
- master
616+
- pytorch_tutorial_windows_pr_build_worker_3:
617+
filters:
618+
branches:
619+
ignore:
620+
- master
621+
- pytorch_tutorial_windows_master_build_worker_0:
622+
context: org-member
623+
filters:
624+
branches:
625+
only:
626+
- master
627+
- pytorch_tutorial_windows_master_build_worker_1:
628+
context: org-member
629+
filters:
630+
branches:
631+
only:
632+
- master
633+
- pytorch_tutorial_windows_master_build_worker_2:
634+
context: org-member
635+
filters:
636+
branches:
637+
only:
638+
- master
639+
- pytorch_tutorial_windows_master_build_worker_3:
640+
context: org-member
641+
filters:
642+
branches:
643+
only:
644+
- master
572645

.circleci/scripts/build_for_windows.sh

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ mingw32/bin/mingw-get.exe install mingw32-make
1616
mingw32/bin/mingw-get.exe install msys-findutils
1717
mv mingw32/bin/mingw32-make.exe mingw32/bin/make.exe
1818
curl -k https://eternallybored.org/misc/wget/1.20.3/64/wget.exe -o mingw32/bin/wget.exe
19-
export PATH="${SOURCE_DIR}/mingw32/bin:$PATH"
19+
export PATH="${SOURCE_DIR}/mingw32/bin:${SOURCE_DIR}/mingw32/msys/1.0/bin:$PATH"
2020

2121
#install anaconda3
2222
export CONDA_HOME="${SOURCE_DIR}/conda"
@@ -32,18 +32,42 @@ conda create -qyn testenv python=3.7
3232
conda activate testenv
3333

3434
conda install sphinx
35-
pip install sphinx_gallery==0.3.1 flask pandas spacy ipython scipy pySoundFile scikit-image
35+
pip install sphinx_gallery==0.3.1 sphinx-copybutton flask pandas spacy ipython scipy pySoundFile scikit-image
3636
pip install -e git+git://github.com/pytorch/pytorch_sphinx_theme.git#egg=pytorch_sphinx_theme
37+
pip install ray[tune] tabulate
3738
conda install -yq -c pytorch "cudatoolkit=10.1" pytorch torchvision torchtext
3839
conda install torchaudio -c pytorch-test
3940
python -m spacy download de
4041
python -m spacy download en
4142
pushd ${PROJECT_DIR}
4243
DIR=.jenkins
43-
python $DIR/remove_runnable_code.py beginner_source/aws_distributed_training_tutorial.py beginner_source/aws_distributed_training_tutorial.py || true
44-
python $DIR/remove_runnable_code.py beginner_source/data_loading_tutorial.py beginner_source/data_loading_tutorial.py || true
45-
python $DIR/remove_runnable_code.py beginner_source/dcgan_faces_tutorial.py beginner_source/dcgan_faces_tutorial.py || true
46-
python $DIR/remove_runnable_code.py intermediate_source/model_parallel_tutorial.py intermediate_source/model_parallel_tutorial.py || true
47-
python $DIR/remove_runnable_code.py intermediate_source/memory_format_tutorial.py intermediate_source/memory_format_tutorial.py || true
44+
export NUM_WORKERS=4
4845

49-
make docs
46+
if [[ "${CIRCLE_JOB}" == *worker_* ]]; then
47+
python $DIR/remove_runnable_code.py intermediate_source/model_parallel_tutorial.py intermediate_source/model_parallel_tutorial.py || true
48+
python $DIR/remove_runnable_code.py advanced_source/static_quantization_tutorial.py advanced_source/static_quantization_tutorial.py || true
49+
python $DIR/remove_runnable_code.py beginner_source/hyperparameter_tuning_tutorial.py beginner_source/hyperparameter_tuning_tutorial.py || true
50+
51+
export WORKER_ID=$(echo "${CIRCLE_JOB}" | tr -dc '0-9')
52+
count=0
53+
FILES_TO_RUN=()
54+
for work_directory in beginner_source intermediate_source advanced_source recipes_source prototype_source; do
55+
for filename in $(find $work_directory -name '\*.py' -not -path '\*/data/\*'); do
56+
if [ $(($count % $NUM_WORKERS)) != $WORKER_ID ]; then
57+
echo "Removing runnable code from "$filename
58+
python $DIR/remove_runnable_code.py $filename $filename
59+
else
60+
echo "Keeping "$filename
61+
FILES_TO_RUN+=($(basename $filename .py))
62+
fi
63+
count=$((count+1))
64+
done
65+
done
66+
echo "FILES_TO_RUN: " ${FILES_TO_RUN[@]}
67+
fi
68+
69+
if [[ ! -d advanced_source/data || ! -d beginner_source/data || ! -d intermediate_source/data || ! -d prototype_source/data ]];then
70+
make download
71+
fi
72+
73+
make html

0 commit comments

Comments
 (0)