diff --git a/docker/cuda/Dockerfile b/docker/cuda/Dockerfile new file mode 100644 index 0000000..4660529 --- /dev/null +++ b/docker/cuda/Dockerfile @@ -0,0 +1,90 @@ +FROM nvidia/cuda:10.1-devel-ubuntu18.04 AS khiva-cuda-builder-base +RUN apt-get update && apt-get install -y --no-install-recommends \ + software-properties-common \ + build-essential \ + cmake \ + git \ + libboost-all-dev \ + libfftw3-dev \ + libfreeimage-dev \ + liblapack-dev \ + liblapacke-dev \ + libopenblas-dev \ + openjdk-8-jdk \ + python3-pip && \ + pip3 install setuptools && \ + pip3 install conan --upgrade && \ + conan profile new --detect default && \ + conan profile update settings.compiler.libcxx=libstdc++11 default && \ + rm -rf /var/lib/apt/lists/* /var/tmp/* /tmp/* + +# AF_DISABLE_GRAPHICS - Environment variable to disable graphics at +# runtime due to lack of graphics support by docker - visit +# http://arrayfire.org/docs/configuring_environment.htm#af_disable_graphics +# for more information +# For build instructions: https://github.com/arrayfire/arrayfire/wiki/Build-Instructions-for-Linux +ENV CXX g++-7 +ENV CC gcc-7 +WORKDIR /root + +COPY *.patch ./ +FROM khiva-cuda-builder-base AS arrayfire-cuda-builder +ENV AF_DISABLE_GRAPHICS=1 +RUN git clone -b v3.6.2 --depth 1 --recurse-submodules -j 8 https://github.com/arrayfire/arrayfire.git && \ + cd arrayfire && \ + mkdir build && cd build && \ + cmake .. -DCMAKE_INSTALL_PREFIX=/opt/arrayfire \ + -DCMAKE_BUILD_TYPE=Release \ + -DAF_BUILD_CPU=ON \ + -DAF_BUILD_CUDA=ON \ + -DAF_BUILD_OPENCL=OFF \ + -DCUDA_cublas_device_LIBRARY=/usr/local/cuda/lib64 \ + -DAF_BUILD_UNIFIED=ON \ + -DAF_WITH_GRAPHICS=OFF \ + -DAF_WITH_NONFREE=OFF \ + -DAF_BUILD_EXAMPLES=OFF \ + -DBUILD_TESTING=OFF \ + -DAF_BUILD_DOCS=OFF \ + -DAF_WITH_LOGGING=OFF \ + -DAF_WITH_STATIC_FREEIMAGE=OFF && \ + cmake --build . --target install -- -j8 + +FROM khiva-cuda-builder-base AS khiva-cuda-builder +ARG KHIVA_BRANCH=v0.5.0 +COPY --from=arrayfire-cuda-builder /opt/arrayfire /opt/arrayfire +ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 +RUN echo /opt/arrayfire/lib > /etc/ld.so.conf.d/arrayfire.conf && \ + ldconfig && \ + git clone -b ${KHIVA_BRANCH} --depth 1 --recurse-submodules -j 8 https://github.com/shapelets/khiva.git && \ + cd khiva && \ + mkdir build && \ + cd build && \ + conan install .. --build missing && \ + cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/opt/khiva \ + -DKHIVA_BUILD_TESTS=ON \ + -DKHIVA_BUILD_BENCHMARKS=ON \ + -DKHIVA_BUILD_EXAMPLES=OFF \ + -DKHIVA_BUILD_DOCUMENTATION=OFF \ + -DKHIVA_USE_CONAN=ON \ + -DKHIVA_BUILD_C_BINDINGS=ON \ + -DKHIVA_BUILD_JNI_BINDINGS=ON && \ + cmake --build . --target install -- -j8 + +FROM nvidia/cuda:10.1-runtime-ubuntu18.04 AS arrayfire-cuda +COPY --from=arrayfire-cuda-builder /opt/arrayfire /opt/arrayfire +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + libopenblas-base \ + libfftw3-3 \ + liblapacke && \ + echo /opt/arrayfire/lib > /etc/ld.so.conf.d/arrayfire.conf && \ + ldconfig && \ + rm -rf /var/lib/apt/lists/* /var/tmp/* /tmp/* + +FROM arrayfire-cuda AS khiva-cuda +ENV LD_LIBRARY_PATH="/opt/khiva/lib:${LD_LIBRARY_PATH}" +COPY --from=khiva-cuda-builder /opt/khiva /opt/khiva +RUN echo /opt/khiva/lib > /etc/ld.so.conf.d/khiva.conf && \ + ldconfig diff --git a/docker/cuda/docker-build.sh b/docker/cuda/docker-build.sh new file mode 100755 index 0000000..73eb326 --- /dev/null +++ b/docker/cuda/docker-build.sh @@ -0,0 +1,12 @@ +#! /usr/bin/env bash +docker build --target khiva-cuda-builder-base -t $PUSH_REGISTRY/shapelets/khiva-cuda-builder-base:0.5.0 . +docker build --target arrayfire-cuda-builder -t $PUSH_REGISTRY/shapelets/arrayfire-cuda-builder:3.6.2 . +docker build --target khiva-cuda-builder --build-arg KHIVA_BRANCH=v0.5.0 -t $PUSH_REGISTRY/shapelets/khiva-cuda-builder:0.5.0 . +docker run --gpus all --workdir /root/khiva/build $PUSH_REGISTRY/shapelets/khiva-cuda-builder:0.5.0 ctest --output-on-failure -j8 +docker build --target arrayfire-cuda -t $PUSH_REGISTRY/shapelets/arrayfire-cuda:3.6.2 . +docker build --target khiva-cuda -t $PUSH_REGISTRY/shapelets/khiva-cuda:0.5.0 . +docker push $PUSH_REGISTRY/shapelets/khiva-cuda-builder-base:0.5.0 +docker push $PUSH_REGISTRY/shapelets/arrayfire-cuda-builder:3.6.2 +docker push $PUSH_REGISTRY/shapelets/khiva-cuda-builder:0.5.0 +docker push $PUSH_REGISTRY/shapelets/arrayfire-cuda:3.6.2 +docker push $PUSH_REGISTRY/shapelets/khiva-cuda:0.5.0 diff --git a/docker/opencl/Dockerfile b/docker/opencl/Dockerfile new file mode 100644 index 0000000..f47a685 --- /dev/null +++ b/docker/opencl/Dockerfile @@ -0,0 +1,90 @@ +FROM intelopencl/intel-opencl:ubuntu-18.04-ppa AS khiva-opencl-builder-base +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + git \ + libboost-math-dev \ + libfftw3-dev \ + libfreeimage-dev \ + liblapack-dev \ + liblapacke-dev \ + libopenblas-dev \ + openjdk-8-jdk \ + ocl-icd-opencl-dev \ + python3-pip \ + software-properties-common && \ + pip3 install setuptools && \ + pip3 install conan --upgrade && \ + conan profile new --detect default && \ + conan profile update settings.compiler.libcxx=libstdc++11 default && \ + rm -rf /var/lib/apt/lists/* /var/tmp/* /tmp/* + +ENV CXX g++-7 +ENV CC gcc-7 +WORKDIR /root +COPY *.patch ./ + +# AF_DISABLE_GRAPHICS - Environment variable to disable graphics at +# runtime due to lack of graphics support by docker - visit +# http://arrayfire.org/docs/configuring_environment.htm#af_disable_graphics +# for more information +# For build instructions: https://github.com/arrayfire/arrayfire/wiki/Build-Instructions-for-Linux +FROM khiva-opencl-builder-base AS arrayfire-opencl-builder +ENV AF_DISABLE_GRAPHICS=1 +RUN git clone -b v3.6.2 --depth 1 --recurse-submodules -j 8 https://github.com/arrayfire/arrayfire.git && \ + cd arrayfire && \ + mkdir build && cd build && \ + cmake .. -DCMAKE_INSTALL_PREFIX=/opt/arrayfire \ + -DCMAKE_BUILD_TYPE=Release \ + -DAF_BUILD_CPU=ON \ + -DAF_BUILD_CUDA=OFF \ + -DAF_BUILD_OPENCL=ON \ + -DAF_BUILD_UNIFIED=ON \ + -DAF_WITH_GRAPHICS=OFF \ + -DAF_WITH_NONFREE=OFF \ + -DAF_BUILD_EXAMPLES=OFF \ + -DBUILD_TESTING=OFF \ + -DAF_BUILD_DOCS=OFF \ + -DAF_WITH_LOGGING=OFF \ + -DAF_WITH_STATIC_FREEIMAGE=OFF && \ + cmake --build . --target install -- -j8 + +FROM khiva-opencl-builder-base AS khiva-builder +ARG KHIVA_BRANCH=v0.5.0 +WORKDIR /root +COPY --from=arrayfire-opencl-builder /opt/arrayfire /opt/arrayfire +RUN echo /opt/arrayfire/lib > /etc/ld.so.conf.d/arrayfire.conf && \ + ldconfig && \ + git clone -b ${KHIVA_BRANCH} --depth 1 --recurse-submodules -j 8 https://github.com/shapelets/khiva.git && \ + cd khiva && \ + mkdir build && \ + cd build && \ + conan install .. --build missing && \ + cmake .. -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/opt/khiva \ + -DKHIVA_BUILD_TESTS=ON \ + -DKHIVA_BUILD_BENCHMARKS=ON \ + -DKHIVA_BUILD_EXAMPLES=OFF \ + -DKHIVA_BUILD_DOCUMENTATION=OFF \ + -DKHIVA_USE_CONAN=ON \ + -DKHIVA_BUILD_C_BINDINGS=ON \ + -DKHIVA_BUILD_JNI_BINDINGS=ON && \ + cmake --build . --target install -- -j8 + +FROM intelopencl/intel-opencl:ubuntu-18.04-ppa AS arrayfire-intel-opencl +COPY --from=arrayfire-opencl-builder /opt/arrayfire /opt/arrayfire +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + libopenblas-base \ + libfftw3-3 \ + liblapacke && \ + echo /opt/arrayfire/lib > /etc/ld.so.conf.d/arrayfire.conf && \ + ldconfig && \ + rm -rf /var/lib/apt/lists/* /var/tmp/* /tmp/* + +FROM arrayfire-intel-opencl as khiva-intel-opencl +ENV LD_LIBRARY_PATH="/opt/khiva/lib:${LD_LIBRARY_PATH}" +COPY --from=khiva-builder /opt/khiva /opt/khiva +RUN echo /opt/khiva/lib > /etc/ld.so.conf.d/khiva.conf && \ + ldconfig diff --git a/docker/opencl/docker-build.sh b/docker/opencl/docker-build.sh new file mode 100755 index 0000000..9a73145 --- /dev/null +++ b/docker/opencl/docker-build.sh @@ -0,0 +1,11 @@ +#! /usr/bin/env bash +docker build --target khiva-opencl-builder-base -t $PUSH_REGISTRY/shapelets/khiva-opencl-builder-base:0.5.0 . +docker build --target arrayfire-opencl-builder -t $PUSH_REGISTRY/shapelets/arrayfire-opencl-builder:3.6.2 . +docker build --target khiva-builder --build-arg KHIVA_BRANCH=v0.5.0 -t $PUSH_REGISTRY/shapelets/khiva-builder:0.5.0 . +docker build --target arrayfire-intel-opencl -t $PUSH_REGISTRY/shapelets/arrayfire-intel-opencl:3.6.2 . +docker build --target khiva-intel-opencl -t $PUSH_REGISTRY/shapelets/khiva:0.5.0-opencl . +docker push $PUSH_REGISTRY/shapelets/khiva-opencl-builder-base:0.5.0 +docker push $PUSH_REGISTRY/shapelets/arrayfire-opencl-builder:3.6.2 +docker push $PUSH_REGISTRY/shapelets/khiva-builder:0.5.0 +docker push $PUSH_REGISTRY/shapelets/arrayfire-intel-opencl:3.6.2 +docker push $PUSH_REGISTRY/shapelets/khiva:0.5.0-opencl