|
| 1 | +################################################################################ |
| 2 | +FROM ubuntu:20.04 |
| 3 | +################################################################################ |
| 4 | + |
| 5 | +ARG GPU_DEVICE_TARGETS="gfx90a gfx942" |
| 6 | +ENV GPU_DEVICE_TARGETS=${GPU_DEVICE_TARGETS} |
| 7 | + |
| 8 | +# Install build dependencies |
| 9 | +COPY setup.packages.sh setup.packages.sh |
| 10 | +COPY builder.packages.txt builder.packages.txt |
| 11 | +RUN /setup.packages.sh /builder.packages.txt |
| 12 | + |
| 13 | +# Install ROCM |
| 14 | +ARG ROCM_VERSION=6.2.0 |
| 15 | +ARG CUSTOM_INSTALL |
| 16 | +ARG ROCM_PATH=/opt/rocm-${ROCM_VERSION} |
| 17 | +ENV ROCM_PATH=${ROCM_PATH} |
| 18 | +COPY ${CUSTOM_INSTALL} /${CUSTOM_INSTALL} |
| 19 | +COPY setup.rocm.sh /setup.rocm.sh |
| 20 | +COPY devel.packages.rocm.txt /devel.packages.rocm.txt |
| 21 | +RUN /setup.rocm63.sh 6.3.0-14901 |
| 22 | + |
| 23 | +# Install various tools. |
| 24 | +# - bats: bash unit testing framework |
| 25 | +# - bazelisk: always use the correct bazel version |
| 26 | +# - buildifier: clean bazel build deps |
| 27 | +# - buildozer: clean bazel build deps |
| 28 | +# - gcloud SDK: communicate with Google Cloud Platform (GCP) for RBE, CI |
| 29 | +RUN git clone --branch v1.7.0 https://github.com/bats-core/bats-core.git && bats-core/install.sh /usr/local && rm -rf bats-core |
| 30 | +RUN wget https://github.com/bazelbuild/bazelisk/releases/download/v1.11.0/bazelisk-linux-amd64 -O /usr/local/bin/bazel && chmod +x /usr/local/bin/bazel |
| 31 | +RUN wget https://github.com/bazelbuild/buildtools/releases/download/3.5.0/buildifier -O /usr/local/bin/buildifier && chmod +x /usr/local/bin/buildifier |
| 32 | +RUN wget https://github.com/bazelbuild/buildtools/releases/download/3.5.0/buildozer -O /usr/local/bin/buildozer && chmod +x /usr/local/bin/buildozer |
| 33 | +RUN curl -sSL https://sdk.cloud.google.com > /tmp/gcloud && bash /tmp/gcloud --install-dir=~/usr/local/bin --disable-prompts |
| 34 | + |
| 35 | + |
| 36 | +# All lines past this point are reset when $CACHEBUSTER is set. We need this |
| 37 | +# for Python specifically because we install some nightly packages which are |
| 38 | +# likely to change daily. |
| 39 | +ARG CACHEBUSTER=0 |
| 40 | +RUN echo $CACHEBUSTER |
| 41 | + |
| 42 | +# Setup Python environment. PYTHON_VERSION is e.g. "python3.8" |
| 43 | +ARG PYTHON_VERSION |
| 44 | +COPY setup.python.sh /setup.python.sh |
| 45 | +COPY devel.requirements.txt /devel.requirements.txt |
| 46 | +RUN /setup.python.sh $PYTHON_VERSION devel.requirements.txt |
| 47 | + |
| 48 | +ARG TF_WHEEL_URL |
| 49 | +RUN if [ -n "${TF_WHEEL_URL}" ]; then pip install "${TF_WHEEL_URL}"; fi |
| 50 | +ARG DWLD_TF_SRC_CMD |
| 51 | +RUN if [ -n "${DWLD_TF_SRC_CMD}" ]; then eval "${DWLD_TF_SRC_CMD}"; fi |
| 52 | + |
| 53 | +# Setup build and environment |
| 54 | +COPY devel.usertools /usertools |
| 55 | +COPY devel.bashrc /root/.bashrc |
| 56 | + |
| 57 | +# Setup ENV variables for tensorflow pip build |
| 58 | +ENV TF_NEED_ROCM=1 |
| 59 | +ENV TF_ROCM_GCC=1 |
| 60 | +ENV ROCM_TOOLKIT_PATH=${ROCM_PATH} |
| 61 | + |
| 62 | +# Don't use the bazel cache when a new docker image is created. |
| 63 | +RUN echo build --action_env=DOCKER_CACHEBUSTER=$(date +%s%N)$RANDOM >> /etc/bazel.bazelrc |
| 64 | +RUN echo build --host_action_env=DOCKER_HOST_CACHEBUSTER=$(date +%s%N)$RANDOM >> /etc/bazel.bazelrc |
| 65 | + |
| 66 | +ARG TF_TESTING_FL |
| 67 | +ENV TF_TESTING_FL=${TF_TESTING_FL} |
| 68 | +ARG CLONE_TEST_REPO |
| 69 | +COPY ${CLONE_TEST_REPO} /${CLONE_TEST_REPO} |
| 70 | +RUN if [ -n "${CLONE_TEST_REPO}" ]; then bash /${CLONE_TEST_REPO}; fi |
0 commit comments