|
1 | 1 | #!/bin/bash |
2 | 2 | # shellcheck disable=SC2086 |
3 | 3 | # This script is for users to build docker images locally. It is most useful for users wishing to edit the |
4 | | -# base-deps, ray-deps, or ray images. This script is *not* tested. |
5 | | - |
6 | | -set -x |
| 4 | +# base-deps, or ray images. This script is *not* tested. |
7 | 5 |
|
8 | 6 | GPU="" |
9 | 7 | BASE_IMAGE="ubuntu:22.04" |
10 | 8 | WHEEL_URL="https://s3-us-west-2.amazonaws.com/ray-wheels/latest/ray-3.0.0.dev0-cp39-cp39-manylinux2014_x86_64.whl" |
11 | | -PYTHON_VERSION="3.9.19" |
| 9 | +CPP_WHEEL_URL="https://s3-us-west-2.amazonaws.com/ray-wheels/latest/ray_cpp-3.0.0.dev0-cp39-cp39-manylinux2014_x86_64.whl" |
| 10 | +PYTHON_VERSION="3.9" |
12 | 11 |
|
| 12 | +BUILD_ARGS=() |
13 | 13 |
|
14 | | -while [[ $# -gt 0 ]] |
15 | | -do |
16 | | -key="$1" |
17 | | -case $key in |
18 | | - --gpu) |
19 | | - GPU="-gpu" |
20 | | - BASE_IMAGE="nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04" |
21 | | - ;; |
22 | | - --base-image) |
23 | | - # Override for the base image. |
24 | | - shift |
25 | | - BASE_IMAGE=$1 |
26 | | - ;; |
27 | | - --no-cache-build) |
28 | | - NO_CACHE="--no-cache" |
29 | | - ;; |
30 | | - --build-development-image) |
31 | | - BUILD_DEV=YES |
32 | | - ;; |
33 | | - --build-examples) |
34 | | - BUILD_EXAMPLES=YES |
35 | | - ;; |
36 | | - --shas-only) |
37 | | - # output the SHA sum of each build. This is useful for scripting tests, |
38 | | - # especially when builds of different versions are running on the same machine. |
39 | | - # It also can facilitate cleanup. |
40 | | - OUTPUT_SHA=YES |
41 | | - ;; |
42 | | - --python-version) |
43 | | - # Python version to install. e.g. 3.9.19. |
44 | | - # Changing python versions may require a different wheel. |
45 | | - # If not provided defaults to 3.9.19 |
| 14 | +while [[ $# -gt 0 ]]; do |
| 15 | + case "$1" in |
| 16 | + --gpu) |
| 17 | + GPU="-gpu" |
| 18 | + BASE_IMAGE="nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04" |
| 19 | + ;; |
| 20 | + --base-image) |
| 21 | + # Override for the base image. |
| 22 | + shift |
| 23 | + BASE_IMAGE="$1" |
| 24 | + ;; |
| 25 | + --no-cache-build) |
| 26 | + BUILD_ARGS+=("--no-cache") |
| 27 | + ;; |
| 28 | + --shas-only) |
| 29 | + # output the SHA sum of each build. This is useful for scripting tests, |
| 30 | + # especially when builds of different versions are running on the same machine. |
| 31 | + # It also can facilitate cleanup. |
| 32 | + OUTPUT_SHA=YES |
| 33 | + BUILD_ARGS+=("-q") |
| 34 | + ;; |
| 35 | + --python-version) |
| 36 | + # Python version to install. e.g. 3.9 |
| 37 | + # Changing python versions may require a different wheel. |
| 38 | + # If not provided defaults to 3.9 |
| 39 | + shift |
| 40 | + PYTHON_VERSION="$1" |
| 41 | + ;; |
| 42 | + *) |
| 43 | + echo "Usage: build-docker.sh [ --gpu ] [ --base-image ] [ --no-cache-build ] [ --shas-only ] [ --build-development-image ] [ --build-examples ] [ --python-version ]" |
| 44 | + exit 1 |
| 45 | + esac |
46 | 46 | shift |
47 | | - PYTHON_VERSION=$1 |
48 | | - ;; |
49 | | - *) |
50 | | - echo "Usage: build-docker.sh [ --gpu ] [ --base-image ] [ --no-cache-build ] [ --shas-only ] [ --build-development-image ] [ --build-examples ] [ --python-version ]" |
51 | | - exit 1 |
52 | | -esac |
53 | | -shift |
54 | 47 | done |
55 | 48 |
|
56 | | -WHEEL_DIR=$(mktemp -d) |
57 | | -wget --quiet "$WHEEL_URL" -P "$WHEEL_DIR" |
58 | | -WHEEL="$WHEEL_DIR/$(basename "$WHEEL_DIR"/*.whl)" |
59 | | -# Build base-deps, ray-deps, and ray. |
60 | | -for IMAGE in "base-deps" "ray-deps" "ray" |
61 | | -do |
62 | | - cp "$WHEEL" "docker/$IMAGE/$(basename "$WHEEL")" |
63 | | - if [ "$OUTPUT_SHA" ]; then |
64 | | - IMAGE_SHA=$(docker build $NO_CACHE --build-arg GPU="$GPU" --build-arg BASE_IMAGE="$BASE_IMAGE" --build-arg WHEEL_PATH="$(basename "$WHEEL")" --build-arg PYTHON_VERSION="$PYTHON_VERSION" -q -t "rayproject/$IMAGE:nightly$GPU" "docker/$IMAGE") |
65 | | - echo "rayproject/$IMAGE:nightly$GPU SHA:$IMAGE_SHA" |
66 | | - else |
67 | | - docker build $NO_CACHE --build-arg GPU="$GPU" --build-arg BASE_IMAGE="$BASE_IMAGE" --build-arg WHEEL_PATH="$(basename "$WHEEL")" --build-arg PYTHON_VERSION="$PYTHON_VERSION" -t "rayproject/$IMAGE:nightly$GPU" "docker/$IMAGE" |
68 | | - fi |
69 | | - rm "docker/$IMAGE/$(basename "$WHEEL")" |
70 | | -done |
| 49 | +export DOCKER_BUILDKIT=1 |
| 50 | + |
71 | 51 |
|
| 52 | +# Build base-deps image |
| 53 | +if [[ "$OUTPUT_SHA" != "YES" ]]; then |
| 54 | + echo "=== Building base-deps image ===" >/dev/stderr |
| 55 | +fi |
| 56 | + |
| 57 | +BUILD_CMD=( |
| 58 | + docker build "${BUILD_ARGS[@]}" |
| 59 | + --build-arg BASE_IMAG="$BASE_IMAGE" |
| 60 | + --build-arg PYTHON_VERSION="${PYTHON_VERSION}" |
| 61 | + -t "rayproject/base-deps:dev$GPU" "docker/base-deps" |
| 62 | +) |
72 | 63 |
|
73 | | -# Build the current Ray source |
74 | | -if [ $BUILD_DEV ]; then |
75 | | - git rev-parse HEAD > ./docker/development/git-rev |
76 | | - git archive -o ./docker/development/ray.tar "$(git rev-parse HEAD)" |
77 | | - if [ $OUTPUT_SHA ]; then |
78 | | - IMAGE_SHA=$(docker build $NO_CACHE -q -t rayproject/development docker/development) |
79 | | - echo "rayproject/development:latest SHA:$IMAGE_SHA" |
80 | | - else |
81 | | - docker build $NO_CACHE -t rayproject/development docker/development |
82 | | - fi |
83 | | - rm ./docker/development/ray.tar ./docker/development/git-rev |
| 64 | +if [[ "$OUTPUT_SHA" == "YES" ]]; then |
| 65 | + IMAGE_SHA="$("${BUILD_CMD[@]}")" |
| 66 | + echo "rayproject/base-deps:dev$GPU SHA:$IMAGE_SHA" |
| 67 | +else |
| 68 | + "${BUILD_CMD[@]}" |
84 | 69 | fi |
85 | 70 |
|
86 | | -if [ $BUILD_EXAMPLES ]; then |
87 | | - if [ $OUTPUT_SHA ]; then |
88 | | - IMAGE_SHA=$(docker build $NO_CACHE -q -t rayproject/examples docker/examples) |
89 | | - echo "rayproject/examples:latest SHA:$IMAGE_SHA" |
90 | | - else |
91 | | - docker build $NO_CACHE -t rayproject/examples docker/examples |
92 | | - fi |
| 71 | + |
| 72 | +# Build ray image |
| 73 | +if [[ "$OUTPUT_SHA" != "YES" ]]; then |
| 74 | + echo "=== Building ray image ===" >/dev/stderr |
| 75 | +fi |
| 76 | + |
| 77 | +RAY_BUILD_DIR="$(mktemp -d)" |
| 78 | +mkdir -p "$RAY_BUILD_DIR/.whl" |
| 79 | +wget --quiet "$WHEEL_URL" -P "$RAY_BUILD_DIR/.whl" |
| 80 | +wget --quiet "$CPP_WHEEL_URL" -P "$RAY_BUILD_DIR/.whl" |
| 81 | +cp python/requirements_compiled.txt "$RAY_BUILD_DIR" |
| 82 | +cp docker/ray/Dockerfile "$RAY_BUILD_DIR" |
| 83 | + |
| 84 | +WHEEL="$(basename "$WHEEL_DIR"/.whl/ray-*.whl)" |
| 85 | + |
| 86 | +BUILD_CMD=( |
| 87 | + docker build "${BUILD_ARGS[@]}" |
| 88 | + --build-arg FULL_BASE_IMAGE="rayproject/base-deps:dev$GPU" |
| 89 | + --build-arg WHEEL_PATH=".whl/${WHEEL}" |
| 90 | + -t "rayproject/ray:dev$GPU" "$RAY_BUILD_DIR" |
| 91 | +) |
| 92 | + |
| 93 | +if [[ "$OUTPUT_SHA" == "YES" ]]; then |
| 94 | + IMAGE_SHA="$("${BUILD_CMD[@]}")" |
| 95 | + echo "rayproject/ray:dev$GPU SHA:$IMAGE_SHA" |
| 96 | +else |
| 97 | + "${BUILD_CMD[@]}" |
93 | 98 | fi |
94 | 99 |
|
95 | 100 | rm -rf "$WHEEL_DIR" |
0 commit comments