mirror of
https://github.com/ROCm/jax.git
synced 2025-04-14 10:56:06 +00:00

See https://opensource.google/documentation/reference/releasing/contributions#copyright for more details. PiperOrigin-RevId: 476167538
120 lines
3.7 KiB
Bash
Executable File
120 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright 2022 The JAX Authors.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# Usage: ci_build.sh [--dockerfile <DOCKERFILE_PATH> --keep_image]
|
|
# <COMMAND>
|
|
#
|
|
# DOCKERFILE_PATH: (Optional) Path to the Dockerfile used for docker build.
|
|
# If this optional value is not supplied (via the --dockerfile flag)
|
|
# Dockerfile.rocm (located in the same directory as this script)
|
|
# will be used.
|
|
# KEEP_IMAGE: (Optional) If this flag is set, the container will be committed as an image
|
|
#
|
|
# COMMAND: Command to be executed in the docker container
|
|
|
|
set -eux
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPT_DIR}/build_common.sh"
|
|
CONTAINER_TYPE="rocm"
|
|
|
|
DOCKERFILE_PATH="${SCRIPT_DIR}/Dockerfile.rocm"
|
|
DOCKER_CONTEXT_PATH="${SCRIPT_DIR}"
|
|
KEEP_IMAGE="--rm"
|
|
POSITIONAL_ARGS=()
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--dockerfile)
|
|
DOCKERFILE_PATH="$2"
|
|
DOCKER_CONTEXT_PATH=$(dirname "${DOCKERFILE_PATH}")
|
|
shift 2
|
|
;;
|
|
--keep_image)
|
|
KEEP_IMAGE=""
|
|
shift 1
|
|
;;
|
|
*)
|
|
POSITIONAL_ARGS+=("$1")
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ ! -f "${DOCKERFILE_PATH}" ]]; then
|
|
die "Invalid Dockerfile path: \"${DOCKERFILE_PATH}\""
|
|
fi
|
|
|
|
ROCM_EXTRA_PARAMS="--device=/dev/kfd --device=/dev/dri --group-add video \
|
|
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined --shm-size 16G"
|
|
|
|
# Helper function to traverse directories up until given file is found.
|
|
function upsearch (){
|
|
test / == "$PWD" && return || \
|
|
test -e "$1" && echo "$PWD" && return || \
|
|
cd .. && upsearch "$1"
|
|
}
|
|
|
|
# Set up WORKSPACE and BUILD_TAG. Jenkins will set them for you or we pick
|
|
# reasonable defaults if you run it outside of Jenkins.
|
|
WORKSPACE="${WORKSPACE:-$(upsearch WORKSPACE)}"
|
|
BUILD_TAG="${BUILD_TAG:-jax_ci}"
|
|
|
|
# Determine the docker image name
|
|
DOCKER_IMG_NAME="${BUILD_TAG}.${CONTAINER_TYPE}"
|
|
|
|
# Under Jenkins matrix build, the build tag may contain characters such as
|
|
# commas (,) and equal signs (=), which are not valid inside docker image names.
|
|
DOCKER_IMG_NAME=$(echo "${DOCKER_IMG_NAME}" | sed -e 's/=/_/g' -e 's/,/-/g')
|
|
|
|
# Convert to all lower-case, as per requirement of Docker image names
|
|
DOCKER_IMG_NAME=$(echo "${DOCKER_IMG_NAME}" | tr '[:upper:]' '[:lower:]')
|
|
|
|
# Print arguments.
|
|
echo "WORKSPACE: ${WORKSPACE}"
|
|
echo "COMMAND: ${POSITIONAL_ARGS[*]}"
|
|
echo "BUILD_TAG: ${BUILD_TAG}"
|
|
echo " (docker container name will be ${DOCKER_IMG_NAME})"
|
|
echo ""
|
|
|
|
echo "Building container (${DOCKER_IMG_NAME})..."
|
|
docker build -t ${DOCKER_IMG_NAME} \
|
|
-f "${DOCKERFILE_PATH}" "${DOCKER_CONTEXT_PATH}"
|
|
|
|
# Check docker build status
|
|
if [[ $? != "0" ]]; then
|
|
die "ERROR: docker build failed. Dockerfile is at ${DOCKERFILE_PATH}"
|
|
fi
|
|
|
|
# Run the command inside the container.
|
|
echo "Running '${POSITIONAL_ARGS[*]}' inside ${DOCKER_IMG_NAME}..."
|
|
|
|
|
|
docker run ${KEEP_IMAGE} --name ${DOCKER_IMG_NAME} --pid=host \
|
|
-v ${WORKSPACE}:/workspace \
|
|
-w /workspace \
|
|
${ROCM_EXTRA_PARAMS} \
|
|
"${DOCKER_IMG_NAME}" \
|
|
${POSITIONAL_ARGS[@]}
|
|
|
|
if [[ "${KEEP_IMAGE}" != "--rm" ]] && [[ $? == "0" ]]; then
|
|
echo "Committing the docker container as jax-rocm"
|
|
docker stop ${DOCKER_IMG_NAME}
|
|
docker commit ${DOCKER_IMG_NAME} jax-rocm
|
|
docker rm ${DOCKER_IMG_NAME}
|
|
fi
|
|
|
|
echo "ROCm build was successful!"
|