@@ -2,18 +2,21 @@ version: 0.2
22
33env :
44  variables :
5-     FRAMEWORK_VERSION : ' 1.15.0 ' 
5+     FRAMEWORK_VERSION : ' 1.15.2 ' 
66    ECR_REPO : ' sagemaker-test' 
77    GITHUB_REPO : ' sagemaker-tensorflow-container' 
88    SETUP_FILE : ' setup_cmds.sh' 
99    SETUP_CMDS : ' #!/bin/bash\npip install --upgrade pip\npip install -U -e .\npip install -U -e .[test]' 
10+     CPU_DOCKERFILE : ' Dockerfile.cpu' 
11+     GPU_DOCKERFILE : ' Dockerfile.gpu' 
1012
1113phases :
1214  pre_build :
1315    commands :
1416      - start-dockerd 
1517      - ACCOUNT=$(aws --region $AWS_DEFAULT_REGION sts --endpoint-url https://sts.$AWS_DEFAULT_REGION.amazonaws.com get-caller-identity --query 'Account' --output text) 
1618      - PREPROD_IMAGE="$ACCOUNT.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$ECR_REPO" 
19+       - PROD_IMAGE="763104351884.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/tensorflow-training" 
1720      - PR_NUM=$(echo $CODEBUILD_SOURCE_VERSION | grep -o '[0-9]\+') 
1821      - echo 'Pull request number:' $PR_NUM '. No value means this build is not from pull request.' 
1922
@@ -36,43 +39,50 @@ phases:
3639      - tar_name=$(ls dist) 
3740
3841      #  Find build artifacts
39-       - build_artifacts=$root_dir/docker/artifacts 
42+       - build_artifacts=$root_dir/docker/build_artifacts 
43+ 
44+       #  login so we can pull prod images for cache
45+       - $(aws ecr get-login --registry-ids 763104351884 --no-include-email --region $AWS_DEFAULT_REGION) 
4046
4147      #  build py2 images
4248
4349      #  prepare build context
4450      - build_dir="$root_dir/docker/$FRAMEWORK_VERSION/py2" 
4551      - cp $root_dir/dist/$tar_name $build_dir 
46-       - cp $build_artifacts/* $build_dir/ 
52+       - cp $build_artifacts/*.py  $build_dir/ 
4753      - cd $build_dir 
4854
4955      #  build cpu image
50-       - cpu_dockerfile="Dockerfile.cpu" 
51-       - CPU_TAG_PY2="$FRAMEWORK_VERSION-cpu-py2-$build_id" 
52-       - docker build -f $cpu_dockerfile -t $PREPROD_IMAGE:$CPU_TAG_PY2 . 
56+       - prod_tag="$FRAMEWORK_VERSION-cpu-py2" 
57+       - CPU_TAG_PY2="$prod_tag-$build_id" 
58+       - docker pull $PROD_IMAGE:$prod_tag 
59+       - docker build --cache-from $PROD_IMAGE:$prod_tag -f $CPU_DOCKERFILE -t $PREPROD_IMAGE:$CPU_TAG_PY2 . 
5360
5461      #  build gpu image
55-       - gpu_dockerfile="Dockerfile.gpu" 
56-       - GPU_TAG_PY2="$FRAMEWORK_VERSION-gpu-py2-$build_id" 
57-       - docker build -f $gpu_dockerfile -t $PREPROD_IMAGE:$GPU_TAG_PY2 . 
62+       - prod_tag="$FRAMEWORK_VERSION-gpu-py2" 
63+       - GPU_TAG_PY2="$prod_tag-$build_id" 
64+       - docker pull $PROD_IMAGE:$prod_tag 
65+       - docker build --cache-from $PROD_IMAGE:$prod_tag -f $GPU_DOCKERFILE -t $PREPROD_IMAGE:$GPU_TAG_PY2 . 
5866
5967      #  build py3 images
6068
6169      #  prepare build context
6270      - build_dir="$root_dir/docker/$FRAMEWORK_VERSION/py3" 
6371      - cp $root_dir/dist/$tar_name $build_dir 
64-       - cp $build_artifacts/* $build_dir/ 
72+       - cp $build_artifacts/*.py  $build_dir/ 
6573      - cd $build_dir 
6674
6775      #  build cpu image
68-       - cpu_dockerfile="Dockerfile.cpu" 
69-       - CPU_TAG_PY3="$FRAMEWORK_VERSION-cpu-py3-$build_id" 
70-       - docker build -f $cpu_dockerfile -t $PREPROD_IMAGE:$CPU_TAG_PY3 . 
76+       - prod_tag="$FRAMEWORK_VERSION-cpu-py3" 
77+       - CPU_TAG_PY3="$prod_tag-$build_id" 
78+       - docker pull $PROD_IMAGE:$prod_tag 
79+       - docker build --cache-from $PROD_IMAGE:$prod_tag -f $CPU_DOCKERFILE -t $PREPROD_IMAGE:$CPU_TAG_PY3 . 
7180
7281      #  build gpu image
73-       - gpu_dockerfile="Dockerfile.gpu" 
74-       - GPU_TAG_PY3="$FRAMEWORK_VERSION-gpu-py3-$build_id" 
75-       - docker build -f $gpu_dockerfile -t $PREPROD_IMAGE:$GPU_TAG_PY3 . 
82+       - prod_tag="$FRAMEWORK_VERSION-gpu-py3" 
83+       - GPU_TAG_PY3="$prod_tag-$build_id" 
84+       - docker pull $PROD_IMAGE:$prod_tag 
85+       - docker build --cache-from $PROD_IMAGE:$prod_tag -f $GPU_DOCKERFILE -t $PREPROD_IMAGE:$GPU_TAG_PY3 . 
7686
7787      #  push images to ecr
7888      - $(aws ecr get-login --registry-ids $ACCOUNT --no-include-email --region $AWS_DEFAULT_REGION) 
@@ -87,29 +97,29 @@ phases:
8797      - launch-ec2-instance --instance-type $instance_type --ami-name dlami-ubuntu 
8898
8999      #  run cpu integration tests
90-       - py3_cmd="pytest test/integration/local --region $AWS_DEFAULT_REGION --docker-base-name $PREPROD_IMAGE --tag $CPU_TAG_PY2 --framework-version $FRAMEWORK_VERSION --py-version 2 --processor cpu" 
91-       - py2_cmd="pytest test/integration/local --region $AWS_DEFAULT_REGION --docker-base-name $PREPROD_IMAGE --tag $CPU_TAG_PY3 --framework-version $FRAMEWORK_VERSION --py-version 3 --processor cpu" 
100+       - py3_cmd="IGNORE_COVERAGE=- tox -e py36 -- test/integration/local --region $AWS_DEFAULT_REGION --docker-base-name $PREPROD_IMAGE --tag $CPU_TAG_PY3 --framework-version $FRAMEWORK_VERSION --py-version 3 --processor cpu --durations 10" 
92101      - execute-command-if-has-matching-changes "$py3_cmd" "test/" "src/*.py" "setup.py" "docker/*" "buildspec.yml" 
102+       - py2_cmd="IGNORE_COVERAGE=- tox -e py27 -- test/integration/local --region $AWS_DEFAULT_REGION --docker-base-name $PREPROD_IMAGE --tag $CPU_TAG_PY2 --framework-version $FRAMEWORK_VERSION --py-version 2 --processor cpu --durations 10" 
93103      - execute-command-if-has-matching-changes "$py2_cmd" "test/" "src/*.py" "setup.py" "docker/*" "buildspec.yml" 
94104
95105      #  run gpu integration tests
96106      - printf "$SETUP_CMDS" > $SETUP_FILE 
97-       - cmd="pytest  test/integration/local -- region $AWS_DEFAULT_REGION --docker-base-name $PREPROD_IMAGE --tag $GPU_TAG_PY2  --framework-version $FRAMEWORK_VERSION --py-version 2  --processor gpu" 
107+       - cmd="IGNORE_COVERAGE=- tox -e py36 --  test/integration/local -n 4 -- region $AWS_DEFAULT_REGION --docker-base-name $PREPROD_IMAGE --tag $GPU_TAG_PY3  --framework-version $FRAMEWORK_VERSION --py-version 3  --processor gpu --durations 10 " 
98108      - py3_cmd="remote-test --github-repo $GITHUB_REPO --test-cmd \"$cmd\" --setup-file $SETUP_FILE --pr-number \"$PR_NUM\"" 
99109      - execute-command-if-has-matching-changes "$py3_cmd" "test/" "src/*.py" "setup.py" "docker/*" "buildspec.yml" 
100110
101-       - cmd="pytest  test/integration/local -- region $AWS_DEFAULT_REGION --docker-base-name $PREPROD_IMAGE --tag $GPU_TAG_PY3  --framework-version $FRAMEWORK_VERSION --py-version 3  --processor gpu" 
102-       - py2_cmd="remote-test --github-repo $GITHUB_REPO --test-cmd \"$cmd\" --setup-file $SETUP_FILE --pr-number \"$PR_NUM\"" 
111+       - cmd="IGNORE_COVERAGE=- tox -e py27 --  test/integration/local -n 4 -- region $AWS_DEFAULT_REGION --docker-base-name $PREPROD_IMAGE --tag $GPU_TAG_PY2  --framework-version $FRAMEWORK_VERSION --py-version 2  --processor gpu --durations 10 " 
112+       - py2_cmd="remote-test --github-repo $GITHUB_REPO --test-cmd \"$cmd\" --setup-file $SETUP_FILE --pr-number \"$PR_NUM\" --skip-setup " 
103113      - execute-command-if-has-matching-changes "$py2_cmd" "test/" "src/*.py" "setup.py" "docker/*" "buildspec.yml" 
104114
105115      #  run sagemaker tests
106-       - test_cmd="pytest  test/integration/sagemaker -n 8 --region $AWS_DEFAULT_REGION --docker-base-name $ECR_REPO --account-id $ACCOUNT --tag $CPU_TAG_PY2  --py-version 2  --processor cpu" 
116+       - test_cmd="IGNORE_COVERAGE=- tox -e py36 --  test/integration/sagemaker -n 8 --region $AWS_DEFAULT_REGION --docker-base-name $ECR_REPO --account-id $ACCOUNT --tag $CPU_TAG_PY3  --py-version 3  --processor cpu --durations 10 " 
107117      - execute-command-if-has-matching-changes "$test_cmd" "test/" "src/*.py" "setup.py" "docker/*" "buildspec.yml" 
108-       - test_cmd="pytest  test/integration/sagemaker -n 8 --region $AWS_DEFAULT_REGION --docker-base-name $ECR_REPO --account-id $ACCOUNT --tag $GPU_TAG_PY2  --py-version 2  --processor gpu" 
118+       - test_cmd="IGNORE_COVERAGE=- tox -e py36 --  test/integration/sagemaker -n 8 --region $AWS_DEFAULT_REGION --docker-base-name $ECR_REPO --account-id $ACCOUNT --tag $GPU_TAG_PY3  --py-version 3  --processor gpu --durations 10 " 
109119      - execute-command-if-has-matching-changes "$test_cmd" "test/" "src/*.py" "setup.py" "docker/*" "buildspec.yml" 
110-       - test_cmd="pytest  test/integration/sagemaker -n 8 --region $AWS_DEFAULT_REGION --docker-base-name $ECR_REPO --account-id $ACCOUNT --tag $CPU_TAG_PY3  --py-version 3  --processor cpu" 
120+       - test_cmd="IGNORE_COVERAGE=- tox -e py27 --  test/integration/sagemaker -n 8 --region $AWS_DEFAULT_REGION --docker-base-name $ECR_REPO --account-id $ACCOUNT --tag $CPU_TAG_PY2  --py-version 2  --processor cpu --durations 10 " 
111121      - execute-command-if-has-matching-changes "$test_cmd" "test/" "src/*.py" "setup.py" "docker/*" "buildspec.yml" 
112-       - test_cmd="pytest  test/integration/sagemaker -n 8 --region $AWS_DEFAULT_REGION --docker-base-name $ECR_REPO --account-id $ACCOUNT --tag $GPU_TAG_PY3  --py-version 3  --processor gpu" 
122+       - test_cmd="IGNORE_COVERAGE=- tox -e py27 --  test/integration/sagemaker -n 8 --region $AWS_DEFAULT_REGION --docker-base-name $ECR_REPO --account-id $ACCOUNT --tag $GPU_TAG_PY2  --py-version 2  --processor gpu --durations 10 " 
113123      - execute-command-if-has-matching-changes "$test_cmd" "test/" "src/*.py" "setup.py" "docker/*" "buildspec.yml" 
114124
115125    finally :
0 commit comments