This is an automated email from the ASF dual-hosted git repository.
zhasheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git
The following commit(s) were added to refs/heads/master by this push:
new b85e446 Unify centos7 Dockerfiles and remove install scripts (#18115)
b85e446 is described below
commit b85e4468f47cc8bc687e62f30a06b2e6757ecdb0
Author: Leonard Lausen <[email protected]>
AuthorDate: Tue Apr 21 17:34:56 2020 -0700
Unify centos7 Dockerfiles and remove install scripts (#18115)
---
cd/mxnet_lib/mxnet_lib_pipeline.groovy | 4 +-
cd/python/docker/Jenkins_pipeline.groovy | 4 +-
cd/python/pypi/Jenkins_pipeline.groovy | 6 +-
ci/Jenkinsfile_utils.groovy | 6 +-
ci/build.py | 109 +++++++++++--------
ci/docker/Dockerfile.build.centos7 | 140 +++++++++++++++++++++++++
ci/docker/Dockerfile.build.centos7_cpu | 41 --------
ci/docker/Dockerfile.build.centos7_gpu | 43 --------
ci/docker/Dockerfile.publish.centos7_cpu | 41 --------
ci/docker/Dockerfile.publish.centos7_gpu_cu100 | 43 --------
ci/docker/Dockerfile.publish.centos7_gpu_cu101 | 43 --------
ci/docker/Dockerfile.publish.centos7_gpu_cu102 | 43 --------
ci/docker/Dockerfile.publish.centos7_gpu_cu92 | 43 --------
ci/docker/docker-compose.yml | 84 +++++++++++++++
ci/docker/install/centos7_adduser.sh | 42 --------
ci/docker/install/centos7_ccache.sh | 43 --------
ci/docker/install/centos7_core.sh | 62 -----------
ci/docker/install/centos7_cudnn.sh | 59 -----------
ci/docker/install/centos7_nccl.sh | 35 -------
ci/docker/install/centos7_python.sh | 32 ------
ci/docker/install/centos7_scala.sh | 42 --------
ci/docker/runtime_functions.sh | 36 +++++--
ci/docker_cache.py | 11 +-
ci/jenkins/Jenkins_steps.groovy | 14 +--
ci/publish/Jenkinsfile | 2 +-
config/distribution/linux_cu92.cmake | 2 +-
26 files changed, 342 insertions(+), 688 deletions(-)
diff --git a/cd/mxnet_lib/mxnet_lib_pipeline.groovy
b/cd/mxnet_lib/mxnet_lib_pipeline.groovy
index 1eab29d..c35db6d 100644
--- a/cd/mxnet_lib/mxnet_lib_pipeline.groovy
+++ b/cd/mxnet_lib/mxnet_lib_pipeline.groovy
@@ -75,9 +75,9 @@ def get_stash(mxnet_variant) {
// The environment corresponds to the docker files in the 'docker' directory
def get_environment(mxnet_variant) {
if (mxnet_variant.startsWith("cu")) {
- return "publish.centos7_gpu_${mxnet_variant}"
+ return "centos7_gpu_${mxnet_variant}"
}
- return "publish.centos7_cpu"
+ return "centos7_cpu"
}
// Returns the variant appropriate jenkins node test in which
diff --git a/cd/python/docker/Jenkins_pipeline.groovy
b/cd/python/docker/Jenkins_pipeline.groovy
index 693acc5..5d7a580 100644
--- a/cd/python/docker/Jenkins_pipeline.groovy
+++ b/cd/python/docker/Jenkins_pipeline.groovy
@@ -32,9 +32,9 @@ def get_pipeline(mxnet_variant) {
// The environment corresponds to the docker files in the 'docker' directory
def get_environment(mxnet_variant) {
if (mxnet_variant.startsWith("cu")) {
- return "publish.centos7_gpu_${mxnet_variant}"
+ return "centos7_gpu_${mxnet_variant}"
}
- return "publish.centos7_cpu"
+ return "centos7_cpu"
}
diff --git a/cd/python/pypi/Jenkins_pipeline.groovy
b/cd/python/pypi/Jenkins_pipeline.groovy
index dfd864f..0d813de 100644
--- a/cd/python/pypi/Jenkins_pipeline.groovy
+++ b/cd/python/pypi/Jenkins_pipeline.groovy
@@ -36,9 +36,9 @@ def get_pipeline(mxnet_variant) {
def get_environment(mxnet_variant) {
if (mxnet_variant.startsWith('cu')) {
- return "publish.centos7_gpu_${mxnet_variant}"
+ return "centos7_gpu_${mxnet_variant}"
}
- return "publish.centos7_cpu"
+ return "centos7_cpu"
}
def build(mxnet_variant) {
@@ -58,7 +58,7 @@ def test(mxnet_variant) {
// test wheel file
def environment = get_environment(mxnet_variant)
def nvidia_docker = mxnet_variant.startsWith('cu')
- ci_utils.docker_run(environment, "cd_integration_test_pypi python3
${nvidia_docker}", nvidia_docker)
+ ci_utils.docker_run(environment, "cd_integration_test_pypi
${nvidia_docker}", nvidia_docker)
}
}
diff --git a/ci/Jenkinsfile_utils.groovy b/ci/Jenkinsfile_utils.groovy
index bf6c2d7..4954963 100644
--- a/ci/Jenkinsfile_utils.groovy
+++ b/ci/Jenkinsfile_utils.groovy
@@ -159,9 +159,11 @@ def collect_test_results_windows(original_file_name,
new_file_name) {
}
-def docker_run(platform, function_name, use_nvidia, shared_mem = '500m',
env_vars = "") {
- def command = "ci/build.py %ENV_VARS% --docker-registry
${env.DOCKER_CACHE_REGISTRY} %USE_NVIDIA% --platform %PLATFORM%
--docker-build-retries 3 --shm-size %SHARED_MEM% /work/runtime_functions.sh
%FUNCTION_NAME%"
+def docker_run(platform, function_name, use_nvidia = false, shared_mem =
'500m', env_vars = "",
+ build_args = "") {
+ def command = "ci/build.py %ENV_VARS% %BUILD_ARGS% --docker-registry
${env.DOCKER_CACHE_REGISTRY} %USE_NVIDIA% --platform %PLATFORM%
--docker-build-retries 3 --shm-size %SHARED_MEM% /work/runtime_functions.sh
%FUNCTION_NAME%"
command = command.replaceAll('%ENV_VARS%', env_vars.length() > 0 ? "-e
${env_vars}" : '')
+ command = command.replaceAll('%BUILD_ARGS%', env_vars.length() > 0 ?
"${build_args}" : '')
command = command.replaceAll('%USE_NVIDIA%', use_nvidia ? '--nvidiadocker' :
'')
command = command.replaceAll('%PLATFORM%', platform)
command = command.replaceAll('%FUNCTION_NAME%', function_name)
diff --git a/ci/build.py b/ci/build.py
index c6a96d5..179910b 100755
--- a/ci/build.py
+++ b/ci/build.py
@@ -29,6 +29,7 @@ import argparse
import glob
import pprint
import re
+import os
import shutil
import signal
import subprocess
@@ -36,9 +37,15 @@ from itertools import chain
from subprocess import check_call, check_output
from typing import *
+import yaml
+
from safe_docker_run import SafeDockerClient
from util import *
+# NOTE: Temporary whitelist used until all Dockerfiles are refactored for
docker compose
+DOCKER_COMPOSE_WHITELIST = ('centos7_cpu', 'centos7_gpu_cu92',
'centos7_gpu_cu100',
+ 'centos7_gpu_cu101', 'centos7_gpu_cu102')
+
def get_dockerfiles_path():
return "docker"
@@ -55,6 +62,11 @@ def get_platforms(path: str = get_dockerfiles_path()) ->
List[str]:
def get_docker_tag(platform: str, registry: str) -> str:
""":return: docker tag to be used for the container"""
+ if platform in DOCKER_COMPOSE_WHITELIST:
+ with open("docker/docker-compose.yml", "r") as f:
+ compose_config = yaml.load(f.read(), yaml.SafeLoader)
+ return compose_config["services"][platform]["image"]
+
platform = platform if any(x in platform for x in ['build.', 'publish.'])
else 'build.{}'.format(platform)
if not registry:
registry = "mxnet_local"
@@ -66,50 +78,57 @@ def get_dockerfile(platform: str,
path=get_dockerfiles_path()) -> str:
return os.path.join(path, "Dockerfile.{0}".format(platform))
-def get_docker_binary(use_nvidia_docker: bool) -> str:
- return "nvidia-docker" if use_nvidia_docker else "docker"
-
-
-def build_docker(platform: str, docker_binary: str, registry: str,
num_retries: int, no_cache: bool,
+def build_docker(platform: str, registry: str, num_retries: int, no_cache:
bool,
cache_intermediate: bool = False) -> str:
"""
Build a container for the given platform
:param platform: Platform
- :param docker_binary: docker binary to use (docker/nvidia-docker)
:param registry: Dockerhub registry name
:param num_retries: Number of retries to build the docker image
:param no_cache: pass no-cache to docker to rebuild the images
:return: Id of the top level image
"""
tag = get_docker_tag(platform=platform, registry=registry)
- logging.info("Building docker container tagged '%s' with %s", tag,
docker_binary)
- #
- # We add a user with the same group as the executing non-root user so
files created in the
- # container match permissions of the local user. Same for the group.
- #
- # These variables are used in the docker files to create user and group
with these ids.
- # see: docker/install/ubuntu_adduser.sh
- #
- # cache-from is needed so we use the cached images tagged from the remote
via
- # docker pull see: docker_cache.load_docker_cache
- #
- # This also prevents using local layers for caching:
https://github.com/moby/moby/issues/33002
- # So to use local caching, we should omit the cache-from by using
--no-dockerhub-cache argument to this
- # script.
- #
- # This doesn't work with multi head docker files.
- #
- cmd = [docker_binary, "build",
- "-f", get_dockerfile(platform),
- "--build-arg", "USER_ID={}".format(os.getuid()),
- "--build-arg", "GROUP_ID={}".format(os.getgid())]
- if no_cache:
- cmd.append("--no-cache")
- if cache_intermediate:
- cmd.append("--rm=false")
- elif registry:
- cmd.extend(["--cache-from", tag])
- cmd.extend(["-t", tag, get_dockerfiles_path()])
+
+ # Case 1: docker-compose
+ if platform in DOCKER_COMPOSE_WHITELIST:
+ logging.info('Building docker container tagged \'%s\' based on
ci/docker/docker-compose.yml', tag)
+ # We add a user with the same group as the executing non-root user so
files created in the
+ # container match permissions of the local user. Same for the group.
+ cmd = ['docker-compose', '-f', 'docker/docker-compose.yml', 'build',
+ "--build-arg", "USER_ID={}".format(os.getuid()),
+ "--build-arg", "GROUP_ID={}".format(os.getgid())]
+ if cache_intermediate:
+ cmd.append('--no-rm')
+ cmd.append(platform)
+ else: # Case 2: Deprecated way, will be removed
+ # We add a user with the same group as the executing non-root user so
files created in the
+ # container match permissions of the local user. Same for the group.
+ #
+ # These variables are used in the docker files to create user and
group with these ids.
+ # see: docker/install/ubuntu_adduser.sh
+ #
+ # cache-from is needed so we use the cached images tagged from the
remote via
+ # docker pull see: docker_cache.load_docker_cache
+ #
+ # This also prevents using local layers for caching:
https://github.com/moby/moby/issues/33002
+ # So to use local caching, we should omit the cache-from by using
--no-dockerhub-cache argument to this
+ # script.
+ #
+ # This doesn't work with multi head docker files.
+ logging.info("Building docker container tagged '%s'", tag)
+ cmd = ["docker", "build",
+ "-f", get_dockerfile(platform),
+ "--build-arg", "USER_ID={}".format(os.getuid()),
+ "--build-arg", "GROUP_ID={}".format(os.getgid())]
+ if no_cache:
+ cmd.append("--no-cache")
+ if cache_intermediate:
+ cmd.append("--rm=false")
+ elif registry:
+ cmd.extend(["--cache-from", tag])
+ cmd.extend(["-t", tag, get_dockerfiles_path()])
+
@retry(subprocess.CalledProcessError, tries=num_retries)
def run_cmd():
@@ -117,21 +136,22 @@ def build_docker(platform: str, docker_binary: str,
registry: str, num_retries:
check_call(cmd)
run_cmd()
+
# Get image id by reading the tag. It's guaranteed (except race condition)
that the tag exists. Otherwise, the
# check_call would have failed
- image_id = _get_local_image_id(docker_binary=docker_binary, docker_tag=tag)
+ image_id = _get_local_image_id(docker_tag=tag)
if not image_id:
raise FileNotFoundError('Unable to find docker image id matching with
{}'.format(tag))
return image_id
-def _get_local_image_id(docker_binary, docker_tag):
+def _get_local_image_id(docker_tag):
"""
Get the image id of the local docker layer with the passed tag
:param docker_tag: docker tag
:return: Image id as string or None if tag does not exist
"""
- cmd = [docker_binary, "images", "-q", docker_tag]
+ cmd = ["docker", "images", "-q", docker_tag]
image_id_b = check_output(cmd)
image_id = image_id_b.decode('utf-8').strip()
if not image_id:
@@ -196,7 +216,7 @@ def container_run(docker_client: SafeDockerClient,
# Equivalent command
docker_cmd_list = [
- get_docker_binary(nvidia_runtime),
+ "nvidia-docker" if nvidia_runtime else "docker",
'run',
"--cap-add",
"SYS_PTRACE", # Required by ASAN
@@ -352,7 +372,6 @@ def main() -> int:
args = parser.parse_args()
command = list(chain(*args.command))
- docker_binary = get_docker_binary(args.nvidiadocker)
docker_client = SafeDockerClient()
environment = dict([(e.split('=')[:2] if '=' in e else (e, os.environ[e]))
@@ -363,12 +382,12 @@ def main() -> int:
elif args.platform:
platform = args.platform
tag = get_docker_tag(platform=platform, registry=args.docker_registry)
- if args.docker_registry:
+ if args.docker_registry and platform not in DOCKER_COMPOSE_WHITELIST:
+ # Caching logic for Dockerfiles not yet refactored with compose
load_docker_cache(tag=tag, docker_registry=args.docker_registry)
if not args.run_only:
- build_docker(platform=platform, docker_binary=docker_binary,
registry=args.docker_registry,
- num_retries=args.docker_build_retries,
no_cache=args.no_cache,
- cache_intermediate=args.cache_intermediate)
+ build_docker(platform=platform, registry=args.docker_registry,
num_retries=args.docker_build_retries,
+ no_cache=args.no_cache,
cache_intermediate=args.cache_intermediate)
else:
logging.info("Skipping docker build step.")
@@ -410,8 +429,8 @@ def main() -> int:
for platform in platforms:
tag = get_docker_tag(platform=platform,
registry=args.docker_registry)
load_docker_cache(tag=tag, docker_registry=args.docker_registry)
- build_docker(platform, docker_binary=docker_binary,
registry=args.docker_registry,
- num_retries=args.docker_build_retries,
no_cache=args.no_cache)
+ build_docker(platform, registry=args.docker_registry,
num_retries=args.docker_build_retries,
+ no_cache=args.no_cache)
if args.build_only:
continue
shutil.rmtree(buildir(), ignore_errors=True)
diff --git a/ci/docker/Dockerfile.build.centos7
b/ci/docker/Dockerfile.build.centos7
new file mode 100644
index 0000000..ce74d9e
--- /dev/null
+++ b/ci/docker/Dockerfile.build.centos7
@@ -0,0 +1,140 @@
+# -*- mode: dockerfile -*-
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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
+#
+# http://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.
+#
+# Dockerfile declaring CentOS 7 related images.
+# Via the CentOS 7 Dockerfiles, we ensure MXNet continues to run fine on older
systems.
+#
+# See docker-compose.yml for supported BASE_IMAGE ARGs and targets.
+
+####################################################################################################
+# The Dockerfile uses a dynamic BASE_IMAGE (for examplecentos:7,
nvidia/cuda:10.2-devel-centos7 etc)
+# On top of BASE_IMAGE we install all dependencies shared by all MXNet build
environments into a
+# "base" target. At the end of this file, we specialize "base" for specific
usecases.
+# The target built by docker can be selected via "--target" option or
docker-compose.yml
+####################################################################################################
+ARG BASE_IMAGE
+FROM $BASE_IMAGE AS base
+
+WORKDIR /work/deps
+
+RUN yum -y check-update || true && \
+ yum -y install epel-release centos-release-scl && \
+ yum install -y \
+ # Utilities
+ wget \
+ unzip \
+ patchelf \
+ pandoc \
+ # Development tools
+ git \
+ make \
+ ninja-build \
+ automake \
+ autoconf \
+ libtool \
+ protobuf-compiler \
+ protobuf-devel \
+ # CentOS Software Collections https://www.softwarecollections.org
+ devtoolset-7 \
+ rh-python35 \
+ rh-maven35 \
+ # Libraries
+ # Provide clbas headerfiles
+ atlas-devel \
+ openblas-devel \
+ lapack-devel \
+ opencv-devel \
+ openssl-devel \
+ zeromq-devel \
+ # Build-dependencies for ccache 3.7.9
+ gperf \
+ libb2-devel \
+ libzstd-devel && \
+ yum clean all && \
+ # Centos 7 only provides ninja-build
+ ln -s /usr/bin/ninja-build /usr/bin/ninja
+
+# Make GCC7, Python 3.5 and Maven 3.3 Software Collections available by default
+# during build and runtime of this container
+SHELL [ "/usr/bin/scl", "enable", "devtoolset-7", "rh-python35", "rh-maven35" ]
+
+# Install minimum required cmake version
+RUN cd /usr/local/src && \
+ wget -nv https://cmake.org/files/v3.13/cmake-3.13.5-Linux-x86_64.sh && \
+ sh cmake-3.13.5-Linux-x86_64.sh --prefix=/usr/local --skip-license && \
+ rm cmake-3.13.5-Linux-x86_64.sh
+
+# ccache 3.7.9 has fixes for caching nvcc outputs
+RUN cd /usr/local/src && \
+ git clone --recursive https://github.com/ccache/ccache.git && \
+ cd ccache && \
+ git checkout v3.7.9 && \
+ ./autogen.sh && \
+ ./configure --disable-man && \
+ make -j$(nproc) && \
+ make install && \
+ cd /usr/local/src && \
+ rm -rf ccache
+
+# Python dependencies
+RUN pip3 install --no-cache-dir --upgrade pip && \
+ pip3 install --no-cache-dir nose pylint cython numpy nose-timer requests
h5py scipy==1.2.3 wheel
+
+
+ARG USER_ID=0
+# Add user in order to make sure the assumed user the container is running
under
+# actually exists inside the container to avoid problems like missing home dir
+RUN if [[ "$USER_ID" -gt 0 ]]; then \
+ # -no-log-init required due to https://github.com/moby/moby/issues/5419
+ useradd -m --no-log-init --uid $USER_ID --system jenkins_slave; \
+ usermod -aG wheel jenkins_slave; \
+ # By default, docker creates all WORK_DIRs with root owner
+ mkdir /work/mxnet; \
+ mkdir /work/build; \
+ chown -R jenkins_slave /work/; \
+ fi
+
+ENV PYTHONPATH=./python/
+WORKDIR /work/mxnet
+
+COPY runtime_functions.sh /work/
+
+####################################################################################################
+# Specialize base image to install more gpu specific dependencies.
+# The target built by docker can be selected via "--target" option or
docker-compose.yml
+####################################################################################################
+FROM base as gpu
+# Different Cuda versions require different NCCL versions
+# https://wiki.bash-hackers.org/syntax/pe#search_and_replace
+RUN export SHORT_CUDA_VERSION=${CUDA_VERSION%.*} && \
+ if [[ ${SHORT_CUDA_VERSION} == 9.2 ]]; then \
+ export NCCL_VERSION=2.4.8; \
+ elif [[ ${SHORT_CUDA_VERSION} == 10.* ]]; then \
+ export NCCL_VERSION=2.6.4; \
+ else \
+ echo "ERROR: Cuda ${SHORT_CUDA_VERSION} not yet supported in
Dockerfile.build.centos7"; \
+ exit 1; \
+ fi && \
+ curl -fsSL
https://developer.download.nvidia.com/compute/machine-learning/repos/rhel7/x86_64/nvidia-machine-learning-repo-rhel7-1.0.0-1.x86_64.rpm
-O && \
+ rpm -i nvidia-machine-learning-repo-rhel7-1.0.0-1.x86_64.rpm && \
+ yum -y check-update || true && \
+ yum -y install \
+ libnccl-${NCCL_VERSION}-1+cuda${SHORT_CUDA_VERSION} \
+ libnccl-devel-${NCCL_VERSION}-1+cuda${SHORT_CUDA_VERSION} \
+ libnccl-static-${NCCL_VERSION}-1+cuda${SHORT_CUDA_VERSION} && \
+ yum clean all
diff --git a/ci/docker/Dockerfile.build.centos7_cpu
b/ci/docker/Dockerfile.build.centos7_cpu
deleted file mode 100644
index 0cfa5a9..0000000
--- a/ci/docker/Dockerfile.build.centos7_cpu
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- mode: dockerfile -*-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-#
-# Dockerfile to build and run MXNet on CentOS 7 for CPU
-
-FROM centos:7
-
-WORKDIR /work/deps
-
-COPY install/centos7_core.sh /work/
-RUN /work/centos7_core.sh
-COPY install/centos7_ccache.sh /work/
-RUN /work/centos7_ccache.sh
-COPY install/centos7_python.sh /work/
-RUN /work/centos7_python.sh
-COPY install/centos7_scala.sh /work/
-RUN /work/centos7_scala.sh
-
-ARG USER_ID=0
-COPY install/centos7_adduser.sh /work/
-RUN /work/centos7_adduser.sh
-
-ENV PYTHONPATH=./python/
-WORKDIR /work/mxnet
-
-COPY runtime_functions.sh /work/
diff --git a/ci/docker/Dockerfile.build.centos7_gpu
b/ci/docker/Dockerfile.build.centos7_gpu
deleted file mode 100644
index 7e49e88..0000000
--- a/ci/docker/Dockerfile.build.centos7_gpu
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- mode: dockerfile -*-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-#
-# Dockerfile to build and run MXNet on CentOS 7 for GPU
-
-FROM nvidia/cuda:10.1-devel-centos7
-
-WORKDIR /work/deps
-
-COPY install/centos7_core.sh /work/
-RUN /work/centos7_core.sh
-COPY install/centos7_ccache.sh /work/
-RUN /work/centos7_ccache.sh
-COPY install/centos7_python.sh /work/
-RUN /work/centos7_python.sh
-
-ENV CUDNN_VERSION=7.6.0.64
-COPY install/centos7_cudnn.sh /work/
-RUN /work/centos7_cudnn.sh
-
-ARG USER_ID=0
-COPY install/centos7_adduser.sh /work/
-RUN /work/centos7_adduser.sh
-
-ENV PYTHONPATH=./python/
-WORKDIR /work/mxnet
-
-COPY runtime_functions.sh /work/
diff --git a/ci/docker/Dockerfile.publish.centos7_cpu
b/ci/docker/Dockerfile.publish.centos7_cpu
deleted file mode 100644
index 3a87f8e..0000000
--- a/ci/docker/Dockerfile.publish.centos7_cpu
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- mode: dockerfile -*-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-#
-# Dockerfile to build and run MXNet on CentOS 7 for CPU
-
-FROM centos:7
-
-WORKDIR /work/deps
-
-COPY install/centos7_core.sh /work/
-RUN /work/centos7_core.sh
-COPY install/centos7_ccache.sh /work/
-RUN /work/centos7_ccache.sh
-COPY install/centos7_python.sh /work/
-RUN /work/centos7_python.sh
-COPY install/centos7_scala.sh /work/
-RUN /work/centos7_scala.sh
-
-ARG USER_ID=0
-COPY install/centos7_adduser.sh /work/
-RUN /work/centos7_adduser.sh
-
-ENV PYTHONPATH=./python/
-WORKDIR /work/mxnet
-
-COPY runtime_functions.sh /work/
diff --git a/ci/docker/Dockerfile.publish.centos7_gpu_cu100
b/ci/docker/Dockerfile.publish.centos7_gpu_cu100
deleted file mode 100644
index ce5aa3c..0000000
--- a/ci/docker/Dockerfile.publish.centos7_gpu_cu100
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- mode: dockerfile -*-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-FROM nvidia/cuda:10.0-cudnn7-devel-centos7
-
-WORKDIR /work/deps
-
-COPY install/centos7_core.sh /work/
-RUN /work/centos7_core.sh
-COPY install/centos7_ccache.sh /work/
-RUN /work/centos7_ccache.sh
-COPY install/centos7_python.sh /work/
-RUN /work/centos7_python.sh
-COPY install/centos7_scala.sh /work/
-RUN /work/centos7_scala.sh
-ENV SHORT_CUDA_VERSION=10.0
-ENV SHORT_NCCL_VERSION=2.6.4
-COPY install/centos7_nccl.sh /work/
-RUN /work/centos7_nccl.sh
-
-ARG USER_ID=0
-COPY install/centos7_adduser.sh /work/
-RUN /work/centos7_adduser.sh
-
-ENV PYTHONPATH=./python/
-WORKDIR /work/mxnet
-
-COPY runtime_functions.sh /work/
diff --git a/ci/docker/Dockerfile.publish.centos7_gpu_cu101
b/ci/docker/Dockerfile.publish.centos7_gpu_cu101
deleted file mode 100644
index 2b20774..0000000
--- a/ci/docker/Dockerfile.publish.centos7_gpu_cu101
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- mode: dockerfile -*-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-FROM nvidia/cuda:10.1-cudnn7-devel-centos7
-
-WORKDIR /work/deps
-
-COPY install/centos7_core.sh /work/
-RUN /work/centos7_core.sh
-COPY install/centos7_ccache.sh /work/
-RUN /work/centos7_ccache.sh
-COPY install/centos7_python.sh /work/
-RUN /work/centos7_python.sh
-COPY install/centos7_scala.sh /work/
-RUN /work/centos7_scala.sh
-ENV SHORT_CUDA_VERSION=10.1
-ENV SHORT_NCCL_VERSION=2.6.4
-COPY install/centos7_nccl.sh /work/
-RUN /work/centos7_nccl.sh
-
-ARG USER_ID=0
-COPY install/centos7_adduser.sh /work/
-RUN /work/centos7_adduser.sh
-
-ENV PYTHONPATH=./python/
-WORKDIR /work/mxnet
-
-COPY runtime_functions.sh /work/
diff --git a/ci/docker/Dockerfile.publish.centos7_gpu_cu102
b/ci/docker/Dockerfile.publish.centos7_gpu_cu102
deleted file mode 100644
index 564ea01..0000000
--- a/ci/docker/Dockerfile.publish.centos7_gpu_cu102
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- mode: dockerfile -*-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-FROM nvidia/cuda:10.2-cudnn7-devel-centos7
-
-WORKDIR /work/deps
-
-COPY install/centos7_core.sh /work/
-RUN /work/centos7_core.sh
-COPY install/centos7_ccache.sh /work/
-RUN /work/centos7_ccache.sh
-COPY install/centos7_python.sh /work/
-RUN /work/centos7_python.sh
-COPY install/centos7_scala.sh /work/
-RUN /work/centos7_scala.sh
-ENV SHORT_CUDA_VERSION=10.2
-ENV SHORT_NCCL_VERSION=2.6.4
-COPY install/centos7_nccl.sh /work/
-RUN /work/centos7_nccl.sh
-
-ARG USER_ID=0
-COPY install/centos7_adduser.sh /work/
-RUN /work/centos7_adduser.sh
-
-ENV PYTHONPATH=./python/
-WORKDIR /work/mxnet
-
-COPY runtime_functions.sh /work/
diff --git a/ci/docker/Dockerfile.publish.centos7_gpu_cu92
b/ci/docker/Dockerfile.publish.centos7_gpu_cu92
deleted file mode 100644
index 397954d..0000000
--- a/ci/docker/Dockerfile.publish.centos7_gpu_cu92
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- mode: dockerfile -*-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-FROM nvidia/cuda:9.2-cudnn7-devel-centos7
-
-WORKDIR /work/deps
-
-COPY install/centos7_core.sh /work/
-RUN /work/centos7_core.sh
-COPY install/centos7_ccache.sh /work/
-RUN /work/centos7_ccache.sh
-COPY install/centos7_python.sh /work/
-RUN /work/centos7_python.sh
-COPY install/centos7_scala.sh /work/
-RUN /work/centos7_scala.sh
-ENV SHORT_CUDA_VERSION=9.2
-ENV SHORT_NCCL_VERSION=2.4.8
-COPY install/centos7_nccl.sh /work/
-RUN /work/centos7_nccl.sh
-
-ARG USER_ID=0
-COPY install/centos7_adduser.sh /work/
-RUN /work/centos7_adduser.sh
-
-ENV PYTHONPATH=./python/
-WORKDIR /work/mxnet
-
-COPY runtime_functions.sh /work/
diff --git a/ci/docker/docker-compose.yml b/ci/docker/docker-compose.yml
new file mode 100644
index 0000000..4e6eb54
--- /dev/null
+++ b/ci/docker/docker-compose.yml
@@ -0,0 +1,84 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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
+#
+# http://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.
+
+# We use the cache_from feature introduced in file form version 3.4 (released
2017-11-01)
+version: "3.4"
+
+# For simplicity, only the centos7_cpu is commented. But the comments apply to
+# all other services as well.
+services:
+ centos7_cpu:
+ # The resulting image will be named build.centos7_cpu:latest and will be
+ # pushed to mxnetci under this name
+ image: build.centos7_cpu:latest
+ build:
+ context: .
+ dockerfile: Dockerfile.build.centos7
+ # Use "base" target declared in Dockerfile.build.centos7 as
"build.centos7_cpu:latest"
+ target: base
+ args:
+ # BASE_IMAGE is used to dynamically specify the FROM image in
Dockerfile.build.centos7
+ BASE_IMAGE: centos:7
+ cache_from:
+ # Due to https://github.com/moby/moby/issues/32612, we have to specify
+ # the local image tag in in addition to the dockerhub tag.
+ - build.centos7_cpu:latest
+ - mxnetci/build.centos7_cpu:latest
+ centos7_gpu_cu92:
+ image: build.centos7_gpu_cu92:latest
+ build:
+ context: .
+ dockerfile: Dockerfile.build.centos7
+ target: gpu
+ args:
+ BASE_IMAGE: nvidia/cuda:9.2-cudnn7-devel-centos7
+ cache_from:
+ - build.centos7_gpu_cu92:latest
+ - mxnetci/build.centos7_gpu_cu92:latest
+ centos7_gpu_cu100:
+ image: build.centos7_gpu_cu100:latest
+ build:
+ context: .
+ dockerfile: Dockerfile.build.centos7
+ target: gpu
+ args:
+ BASE_IMAGE: nvidia/cuda:10.0-cudnn7-devel-centos7
+ cache_from:
+ - build.centos7_gpu_cu100:latest
+ - mxnetci/build.centos7_gpu_cu100:latest
+ centos7_gpu_cu101:
+ image: build.centos7_gpu_cu101:latest
+ build:
+ context: .
+ dockerfile: Dockerfile.build.centos7
+ target: gpu
+ args:
+ BASE_IMAGE: nvidia/cuda:10.1-cudnn7-devel-centos7
+ cache_from:
+ - build.centos7_gpu_cu101:latest
+ - mxnetci/build.centos7_gpu_cu101:latest
+ centos7_gpu_cu102:
+ image: build.centos7_gpu_cu102:latest
+ build:
+ context: .
+ dockerfile: Dockerfile.build.centos7
+ target: gpu
+ args:
+ BASE_IMAGE: nvidia/cuda:10.2-cudnn7-devel-centos7
+ cache_from:
+ - build.centos7_gpu_cu102:latest
+ - mxnetci/build.centos7_gpu_cu102:latest
diff --git a/ci/docker/install/centos7_adduser.sh
b/ci/docker/install/centos7_adduser.sh
deleted file mode 100755
index f9d2402..0000000
--- a/ci/docker/install/centos7_adduser.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-# Add user in order to make sure the assumed user the container is running
under
-# actually exists inside the container to avoid problems like missing home dir
-
-
-set -ex
-
-# $USER_ID is coming from build.py:build_docker passed as --build-arg
-if [[ "$USER_ID" -gt 0 ]]
-then
- # -no-log-init required due to https://github.com/moby/moby/issues/5419
- useradd -m --no-log-init --uid $USER_ID --system jenkins_slave
- usermod -aG wheel jenkins_slave
-
- # By default, docker creates all WORK_DIRs with root owner
- mkdir /work/mxnet
- mkdir /work/build
- chown -R jenkins_slave /work/
-
- # Later on, we have to override the links because underlying build systems
ignore our compiler settings. Thus,
- # we have to give the process the proper permission to these files. This
is hacky, but unfortunately
- # there's no better way to do this without patching all our submodules.
- chown -R jenkins_slave /usr/local/bin
-fi
diff --git a/ci/docker/install/centos7_ccache.sh
b/ci/docker/install/centos7_ccache.sh
deleted file mode 100755
index 955287b..0000000
--- a/ci/docker/install/centos7_ccache.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-# Script to build ccache for centos7 based images
-
-set -ex
-
-pushd .
-
-yum -y install autoconf libb2-devel libzstd-devel gperf
-
-mkdir -p /work/deps
-cd /work/deps
-
-git clone --recursive https://github.com/ccache/ccache.git
-cd ccache
-git checkout v3.7.9
-
-./autogen.sh
-./configure --disable-man
-make -j$(nproc)
-make install
-
-cd /work/deps
-rm -rf /work/deps/ccache
-
-popd
diff --git a/ci/docker/install/centos7_core.sh
b/ci/docker/install/centos7_core.sh
deleted file mode 100755
index 119d172..0000000
--- a/ci/docker/install/centos7_core.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-# build and install are separated so changes to build don't invalidate
-# the whole docker cache for the image
-
-set -ex
-
-# Multipackage installation does not fail in yum
-yum -y install epel-release
-yum -y install git
-yum -y install wget
-yum -y install atlas-devel # Provide clbas headerfiles
-yum -y install openblas-devel
-yum -y install lapack-devel
-yum -y install opencv-devel
-yum -y install protobuf-compiler
-yum -y install protobuf-devel
-yum -y install zeromq-devel
-yum -y install openssl-devel
-yum -y install gcc-c++-4.8.*
-yum -y install gcc-gfortran
-yum -y install make
-yum -y install wget
-yum -y install unzip
-yum -y install ninja-build
-yum -y install automake
-yum -y install autoconf
-yum -y install libtool
-yum -y install patchelf
-yum -y install pandoc
-
-# gcc7
-yum -y install centos-release-scl
-yum -y install devtoolset-7
-
-# Centos 7 only provides ninja-build
-ln -s /usr/bin/ninja-build /usr/bin/ninja
-
-# CMake 3.13.2+ is required
-mkdir /opt/cmake && cd /opt/cmake
-wget -nv https://cmake.org/files/v3.13/cmake-3.13.5-Linux-x86_64.sh
-sh cmake-3.13.5-Linux-x86_64.sh --prefix=/opt/cmake --skip-license
-ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
-rm cmake-3.13.5-Linux-x86_64.sh
-cmake --version
diff --git a/ci/docker/install/centos7_cudnn.sh
b/ci/docker/install/centos7_cudnn.sh
deleted file mode 100755
index 69f2850..0000000
--- a/ci/docker/install/centos7_cudnn.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-# build and install are separated so changes to build don't invalidate
-# the whole docker cache for the image
-
-set -ex
-
-if [ -z ${CUDA_VERSION} ]; then
- echo "Error: CUDA_VERSION environment variable undefined"
- exit 1
-fi
-
-if [ -z ${CUDNN_VERSION} ]; then
- echo "Error: CUDNN_VERSION environment variable undefined"
- exit 1
-fi
-
-SHORT_CUDA_VERSION=""
-SHORT_CUDNN_VERSION=""
-
-if [[ ${CUDA_VERSION} =~ ([0-9]+\.[0-9]+)\.* ]]; then
- SHORT_CUDA_VERSION=${BASH_REMATCH[1]}
-else
- echo "Error: CUDA_VERSION (${CUDA_VERSION}) did not match expected format
[0-9]+.[0-9]+.*"
-fi
-
-if [[ ${CUDNN_VERSION} =~ ([0-9]+\.[0-9]+\.[0-9]+)\.* ]]; then
- SHORT_CUDNN_VERSION=${BASH_REMATCH[1]}
-else
- echo "Error: CUDNN_VERSION (${CUDNN_VERSION}) did not match expected
format [0-9]+.[0-9]+.[0-9]+.*"
-fi
-
-# Multipackage installation does not fail in yum
-CUDNN_PKG="cudnn-${SHORT_CUDA_VERSION}-linux-x64-v${CUDNN_VERSION}.tgz"
-CUDNN_PKG_URL="http://developer.download.nvidia.com/compute/redist/cudnn/v${SHORT_CUDNN_VERSION}/${CUDNN_PKG}"
-CUDNN_DOWNLOAD_SUM=`curl -fsSL "${CUDNN_PKG_URL}.sha256"`
-
-curl -fsSL ${CUDNN_PKG_URL} -O
-echo "${CUDNN_DOWNLOAD_SUM}" | sha256sum -c -
-tar --no-same-owner -xzf ${CUDNN_PKG} -C /usr/local
-rm ${CUDNN_PKG}
-ldconfig
diff --git a/ci/docker/install/centos7_nccl.sh
b/ci/docker/install/centos7_nccl.sh
deleted file mode 100755
index 7a14f10..0000000
--- a/ci/docker/install/centos7_nccl.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-set -ex
-
-
-if [ -z ${SHORT_CUDA_VERSION} ]; then
- echo "Error: SHORT_CUDA_VERSION environment variable undefined"
- exit 1
-fi
-if [ -z ${SHORT_NCCL_VERSION} ]; then
- echo "Error: SHORT_NCCL_VERSION environment variable undefined"
- exit 1
-fi
-
-curl -fsSL
https://developer.download.nvidia.com/compute/machine-learning/repos/rhel7/x86_64/nvidia-machine-learning-repo-rhel7-1.0.0-1.x86_64.rpm
-O
-rpm -i nvidia-machine-learning-repo-rhel7-1.0.0-1.x86_64.rpm
-yum check-update || true # exit code 100 in case of available updates
-yum install -y libnccl-${SHORT_NCCL_VERSION}-1+cuda${SHORT_CUDA_VERSION}
libnccl-devel-${SHORT_NCCL_VERSION}-1+cuda${SHORT_CUDA_VERSION}
libnccl-static-${SHORT_NCCL_VERSION}-1+cuda${SHORT_CUDA_VERSION}
diff --git a/ci/docker/install/centos7_python.sh
b/ci/docker/install/centos7_python.sh
deleted file mode 100755
index 06c53be..0000000
--- a/ci/docker/install/centos7_python.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-# build and install are separated so changes to build don't invalidate
-# the whole docker cache for the image
-
-set -ex
-
- # Python 2.7 is installed by default, install 3.6 on top
-yum -y install https://centos7.iuscommunity.org/ius-release.rpm
-yum -y install python36u
-
-# Install PIP
-curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
-python3.6 get-pip.py
-pip3 install nose pylint numpy nose-timer requests h5py scipy==1.2.3
diff --git a/ci/docker/install/centos7_scala.sh
b/ci/docker/install/centos7_scala.sh
deleted file mode 100755
index df0d7a1..0000000
--- a/ci/docker/install/centos7_scala.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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
-#
-# http://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.
-
-# build and install are separated so changes to build don't invalidate
-# the whole docker cache for the image
-
-set -ex
-
-yum install -y java-1.8.0-openjdk-devel
-export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk
-export PATH=$JAVA_HOME/bin:$PATH
-
-# Build from source with Maven
-curl -o apache-maven-3.3.9-bin.tar.gz -L
http://www.eu.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
\
- || curl -o apache-maven-3.3.9-bin.tar.gz -L
https://search.maven.org/remotecontent?filepath=org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.tar.gz
-
-tar xzf apache-maven-3.3.9-bin.tar.gz
-mkdir /usr/local/maven
-mv apache-maven-3.3.9/ /usr/local/maven/
-alternatives --install /usr/bin/mvn mvn
/usr/local/maven/apache-maven-3.3.9/bin/mvn 1
-
-echo "export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk" >>
/etc/profile.d/maven.sh
-echo "export M3_HOME=/usr/local/src/apache-maven" >> /etc/profile.d/maven.sh
-echo "export PATH=$M3_HOME/bin:$JAVA_HOME/bin:$PATH" >> /etc/profile.d/maven.sh
-chmod +x /etc/profile.d/maven.sh
-source /etc/profile.d/maven.sh
diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh
index 2b73f26..b5ca888 100755
--- a/ci/docker/runtime_functions.sh
+++ b/ci/docker/runtime_functions.sh
@@ -983,6 +983,7 @@ sanity_check() {
# $2 -> python_cmd: The python command to use to execute the tests, python or
python3
cd_unittest_ubuntu() {
set -ex
+ source /opt/rh/rh-python35/enable
export PYTHONPATH=./python/
export MXNET_MKLDNN_DEBUG=0 # Ignored if not present
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
@@ -1094,6 +1095,9 @@ unittest_ubuntu_tensorrt_gpu() {
# need to separte it from unittest_ubuntu_python3_gpu()
unittest_ubuntu_python3_quantization_gpu() {
set -ex
+ if [ -f /etc/redhat-release ]; then
+ source /opt/rh/rh-python35/enable
+ fi
export PYTHONPATH=./python/
export MXNET_MKLDNN_DEBUG=0 # Ignored if not present
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
@@ -1107,6 +1111,7 @@ unittest_ubuntu_python3_quantization_gpu() {
unittest_centos7_cpu_scala() {
set -ex
source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-maven35/enable
cd /work/mxnet
scala_prepare
cd scala-package
@@ -1240,19 +1245,19 @@ unittest_ubuntu_cpu_julia10() {
unittest_centos7_cpu() {
set -ex
- source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-python35/enable
cd /work/mxnet
- python3.6 -m "nose" $NOSE_COVERAGE_ARGUMENTS $NOSE_TIMER_ARGUMENTS
--with-xunit --xunit-file nosetests_unittest.xml --verbose tests/python/unittest
- python3.6 -m "nose" $NOSE_COVERAGE_ARGUMENTS $NOSE_TIMER_ARGUMENTS
--with-xunit --xunit-file nosetests_train.xml --verbose tests/python/train
+ python -m "nose" $NOSE_COVERAGE_ARGUMENTS $NOSE_TIMER_ARGUMENTS
--with-xunit --xunit-file nosetests_unittest.xml --verbose tests/python/unittest
+ python -m "nose" $NOSE_COVERAGE_ARGUMENTS $NOSE_TIMER_ARGUMENTS
--with-xunit --xunit-file nosetests_train.xml --verbose tests/python/train
}
unittest_centos7_gpu() {
set -ex
- source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-python35/enable
cd /work/mxnet
export CUDNN_VERSION=${CUDNN_VERSION:-7.0.3}
export DMLC_LOG_STACK_TRACE_DEPTH=10
- python3.6 -m "nose" $NOSE_COVERAGE_ARGUMENTS $NOSE_TIMER_ARGUMENTS
--with-xunit --xunit-file nosetests_gpu.xml --verbose tests/python/gpu
+ python3 -m "nose" $NOSE_COVERAGE_ARGUMENTS $NOSE_TIMER_ARGUMENTS
--with-xunit --xunit-file nosetests_gpu.xml --verbose tests/python/gpu
}
integrationtest_ubuntu_cpu_onnx() {
@@ -1942,6 +1947,7 @@ build_static_libmxnet() {
set -ex
pushd .
source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-python35/enable
export USE_SYSTEM_CUDA=1
local mxnet_variant=${1:?"This function requires a python command as the
first argument"}
source tools/staticbuild/build.sh ${mxnet_variant}
@@ -1953,6 +1959,7 @@ cd_package_pypi() {
set -ex
pushd .
source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-python35/enable
local mxnet_variant=${1:?"This function requires a python command as the
first argument"}
./cd/python/pypi/pypi_package.sh ${mxnet_variant}
popd
@@ -1961,8 +1968,9 @@ cd_package_pypi() {
# Sanity checks wheel file
cd_integration_test_pypi() {
set -ex
- local python_cmd=${1:?"This function requires a python command as the
first argument"}
- local gpu_enabled=${2:-"false"}
+ source /opt/rh/rh-python35/enable
+
+ local gpu_enabled=${1:-"false"}
local test_conv_params=''
local mnist_params=''
@@ -2008,6 +2016,7 @@ build_static_scala_cpu() {
export MAVEN_PUBLISH_OS_TYPE=linux-x86_64-cpu
export mxnet_variant=cpu
source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-maven35/enable
./ci/publish/scala/build.sh
popd
}
@@ -2017,16 +2026,18 @@ build_static_python_cpu() {
pushd .
export mxnet_variant=cpu
source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-python35/enable
./ci/publish/python/build.sh
popd
}
-build_static_python_cu101() {
+build_static_python_cu92() {
set -ex
pushd .
- export mxnet_variant=cu101
+ export mxnet_variant=cu92
export USE_SYSTEM_CUDA=1
source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-python35/enable
./ci/publish/python/build.sh
popd
}
@@ -2037,17 +2048,19 @@ build_static_python_cpu_cmake() {
export mxnet_variant=cpu
export CMAKE_STATICBUILD=1
source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-python35/enable
./ci/publish/python/build.sh
popd
}
-build_static_python_cu101_cmake() {
+build_static_python_cu92_cmake() {
set -ex
pushd .
- export mxnet_variant=cu101
+ export mxnet_variant=cu92
export CMAKE_STATICBUILD=1
export USE_SYSTEM_CUDA=1
source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-python35/enable
./ci/publish/python/build.sh
popd
}
@@ -2057,6 +2070,7 @@ publish_scala_build() {
pushd .
scala_prepare
source /opt/rh/devtoolset-7/enable
+ source /opt/rh/rh-maven35/enable
export USE_SYSTEM_CUDA=1
./ci/publish/scala/build.sh
popd
diff --git a/ci/docker_cache.py b/ci/docker_cache.py
index 254d623..ec73e93 100755
--- a/ci/docker_cache.py
+++ b/ci/docker_cache.py
@@ -74,8 +74,15 @@ def _build_save_container(platform, registry, load_cache) ->
Optional[str]:
:param load_cache: Load cache before building
:return: Platform if failed, None otherwise
"""
- docker_tag = build_util.get_docker_tag(platform=platform,
registry=registry)
+ # Case 1: docker-compose
+ if platform in build_util.DOCKER_COMPOSE_WHITELIST:
+ build_util.build_docker(platform=platform, registry=registry,
num_retries=10, no_cache=False)
+ push_cmd = ['docker-compose', 'push', platform]
+ subprocess.check_call(push_cmd)
+ return None
+ # Case 2: Deprecated way, will be removed
+ docker_tag = build_util.get_docker_tag(platform=platform,
registry=registry)
# Preload cache
if load_cache:
load_docker_cache(registry=registry, docker_tag=docker_tag)
@@ -84,7 +91,7 @@ def _build_save_container(platform, registry, load_cache) ->
Optional[str]:
logging.debug('Building %s as %s', platform, docker_tag)
try:
# Increase the number of retries for building the cache.
- image_id = build_util.build_docker(docker_binary='docker',
platform=platform, registry=registry, num_retries=10, no_cache=False)
+ image_id = build_util.build_docker(platform=platform,
registry=registry, num_retries=10, no_cache=False)
logging.info('Built %s as %s', docker_tag, image_id)
# Push cache to registry
diff --git a/ci/jenkins/Jenkins_steps.groovy b/ci/jenkins/Jenkins_steps.groovy
index 450036c..bfa5173 100644
--- a/ci/jenkins/Jenkins_steps.groovy
+++ b/ci/jenkins/Jenkins_steps.groovy
@@ -411,7 +411,7 @@ def compile_centos7_gpu() {
ws('workspace/build-centos7-gpu') {
timeout(time: max_time, unit: 'MINUTES') {
utils.init_git()
- utils.docker_run('centos7_gpu', 'build_centos7_gpu', false)
+ utils.docker_run('centos7_gpu_cu92', 'build_centos7_gpu', false)
utils.pack_lib('centos7_gpu', mx_lib)
}
}
@@ -739,7 +739,7 @@ def test_static_scala_cpu() {
ws('workspace/ut-publish-scala-cpu') {
timeout(time: max_time, unit: 'MINUTES') {
utils.init_git()
- utils.docker_run("publish.centos7_cpu", 'build_static_scala_cpu',
false)
+ utils.docker_run('centos7_cpu', 'build_static_scala_cpu', false)
}
}
}
@@ -752,7 +752,7 @@ def test_static_python_cpu() {
ws('workspace/ut-publish-python-cpu') {
timeout(time: max_time, unit: 'MINUTES') {
utils.init_git()
- utils.docker_run("publish.centos7_cpu", 'build_static_python_cpu',
false)
+ utils.docker_run('centos7_cpu', 'build_static_python_cpu', false)
}
}
}
@@ -765,7 +765,7 @@ def test_static_python_cpu_cmake() {
ws('workspace/ut-publish-python-cpu') {
timeout(time: max_time, unit: 'MINUTES') {
utils.init_git()
- utils.docker_run("publish.centos7_cpu",
'build_static_python_cpu_cmake', false)
+ utils.docker_run('centos7_cpu', 'build_static_python_cpu_cmake',
false)
}
}
}
@@ -778,7 +778,7 @@ def test_static_python_gpu() {
ws('workspace/ut-publish-python-gpu') {
timeout(time: max_time, unit: 'MINUTES') {
utils.init_git()
- utils.docker_run("publish.centos7_gpu_cu101",
'build_static_python_cu101', true)
+ utils.docker_run('centos7_gpu_cu92', 'build_static_python_cu92')
}
}
}
@@ -791,7 +791,7 @@ def test_static_python_gpu_cmake() {
ws('workspace/ut-publish-python-gpu') {
timeout(time: max_time, unit: 'MINUTES') {
utils.init_git()
- utils.docker_run("publish.centos7_gpu_cu101",
'build_static_python_cu101_cmake', true)
+ utils.docker_run('centos7_gpu_cu92',
'build_static_python_cu92_cmake')
}
}
}
@@ -1316,7 +1316,7 @@ def test_centos7_python3_gpu() {
timeout(time: max_time, unit: 'MINUTES') {
try {
utils.unpack_and_init('centos7_gpu', mx_lib)
- utils.docker_run('centos7_gpu', 'unittest_centos7_gpu', true)
+ utils.docker_run('centos7_gpu_cu92', 'unittest_centos7_gpu',
true)
utils.publish_test_coverage()
} finally {
utils.collect_test_results_unix('nosetests_gpu.xml',
'nosetests_python3_centos7_gpu.xml')
diff --git a/ci/publish/Jenkinsfile b/ci/publish/Jenkinsfile
index 366758d..b522bb0 100644
--- a/ci/publish/Jenkinsfile
+++ b/ci/publish/Jenkinsfile
@@ -57,7 +57,7 @@ for (x in labels) {
toBuild["Scala Build ${label}"] = wrapStep(nodeMap['cpu'],
"build-scala-${label}") {
withEnv(["MAVEN_PUBLISH_OS_TYPE=${scalaOSMap[label]}",
"mxnet_variant=${scalaVariantMap[label]}"]) {
utils.init_git()
- utils.docker_run("publish.centos7_cpu", 'publish_scala_build', false,
'500m', 'MAVEN_PUBLISH_OS_TYPE mxnet_variant')
+ utils.docker_run("centos7_cpu", 'publish_scala_build', false, '500m',
'MAVEN_PUBLISH_OS_TYPE mxnet_variant')
utils.pack_lib("scala_${label}", mx_scala_pub, false)
}
}
diff --git a/config/distribution/linux_cu92.cmake
b/config/distribution/linux_cu92.cmake
index 74f31c8..8499421 100644
--- a/config/distribution/linux_cu92.cmake
+++ b/config/distribution/linux_cu92.cmake
@@ -33,4 +33,4 @@ set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction
support")
set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo")
set(CUDACXX "/usr/local/cuda-9.2/bin/nvcc" CACHE STRING "Cuda compiler")
-set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0;7.2" CACHE STRING "Cuda architectures")
+set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures")