| FROM ubuntu:16.04 |
| |
| # Needed for add-apt-repository |
| RUN apt-get update && apt-get install -y --no-install-recommends \ |
| software-properties-common |
| |
| # Ubuntu 16.04 does not have a python package new enough for gem5, use a PPA |
| RUN add-apt-repository ppa:deadsnakes/ppa && apt-get update |
| |
| # Should be minimal needed packages |
| RUN apt-get update && apt-get install -y --no-install-recommends \ |
| findutils \ |
| file \ |
| libunwind8 \ |
| libunwind-dev \ |
| pkg-config \ |
| build-essential \ |
| gcc-multilib \ |
| g++-multilib \ |
| git \ |
| ca-certificates \ |
| m4 \ |
| zlib1g \ |
| zlib1g-dev \ |
| libprotobuf-dev \ |
| protobuf-compiler \ |
| libprotoc-dev \ |
| libgoogle-perftools-dev \ |
| python-yaml \ |
| python3.9 \ |
| python3.9-dev \ |
| python3.9-distutils \ |
| wget \ |
| libpci3 \ |
| libelf1 \ |
| libelf-dev \ |
| cmake \ |
| openssl \ |
| libssl-dev \ |
| libboost-filesystem-dev \ |
| libboost-system-dev \ |
| libboost-dev \ |
| libpng12-dev \ |
| gdb |
| |
| # Use python 3.9 by default |
| RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1 |
| |
| # Setuptools is needed for cmake for ROCm build. Install using pip. |
| # Instructions to install PIP from https://pypi.org/project/pip/ |
| RUN wget https://bootstrap.pypa.io/get-pip.py -qO get-pip.py |
| RUN python3 get-pip.py |
| RUN pip install -U setuptools scons==3.1.2 six |
| |
| ARG gem5_dist=http://dist.gem5.org/dist/develop |
| |
| # Install ROCm 1.6 binaries |
| RUN wget -qO- ${gem5_dist}/apt_1.6.4.tar.bz2 \ |
| | tar -xjv \ |
| && cd apt_1.6.4/pool/main/ \ |
| && dpkg -i h/hsakmt-roct-dev/* \ |
| && dpkg -i h/hsa-ext-rocr-dev/* \ |
| && dpkg -i h/hsa-rocr-dev/* \ |
| && dpkg -i r/rocm-utils/* \ |
| && dpkg -i h/hcc/* \ |
| && dpkg -i r/rocm-opencl/* \ |
| && dpkg -i r/rocm-opencl-dev/* \ |
| && dpkg -i h/hip_base/* \ |
| && dpkg -i h/hip_hcc/* |
| |
| # Get ROCm libraries we need to compile from source (and ROCm-profiler) |
| RUN git clone --single-branch https://github.com/ROCmSoftwarePlatform/hipBLAS/ && \ |
| git clone --single-branch https://github.com/ROCmSoftwarePlatform/rocBLAS/ && \ |
| git clone --single-branch https://github.com/ROCmSoftwarePlatform/MIOpenGEMM/ && \ |
| git clone --single-branch https://github.com/ROCmSoftwarePlatform/MIOpen/ && \ |
| git clone --single-branch https://github.com/RadeonOpenCompute/rocm-cmake/ && \ |
| git clone --single-branch https://github.com/rocmarchive/ROCm-Profiler.git |
| |
| # Apply patches to various repos |
| RUN mkdir -p /patch && cd /patch && \ |
| wget ${gem5_dist}/rocm_patches/hipBLAS.patch && \ |
| wget ${gem5_dist}/rocm_patches/miopen-conv.patch && \ |
| wget ${gem5_dist}/rocm_patches/rocBLAS.patch |
| |
| RUN git -C /hipBLAS/ checkout ee57787e && git -C /hipBLAS/ apply /patch/hipBLAS.patch && \ |
| git -C /rocBLAS/ checkout cbff4b4e && git -C /rocBLAS/ apply /patch/rocBLAS.patch && \ |
| git -C /rocm-cmake/ checkout 12670acb && \ |
| git -C /MIOpenGEMM/ checkout 9547fb9e && \ |
| git -C /MIOpen/ checkout 01d6ca55c && git -C /MIOpen/ apply /patch/miopen-conv.patch |
| |
| ENV ROCM_PATH /opt/rocm |
| ENV HCC_HOME ${ROCM_PATH}/hcc |
| ENV HSA_PATH ${ROCM_PATH}/hsa |
| ENV HIP_PATH ${ROCM_PATH}/hip |
| ENV HIP_PLATFORM hcc |
| ENV PATH ${ROCM_PATH}/bin:${HCC_HOME}/bin:${HSA_PATH}/bin:${HIP_PATH}/bin:${PATH} |
| ENV HCC_AMDGPU_TARGET gfx801 |
| |
| # Create build dirs for machine learning ROCm installs |
| RUN mkdir -p /rocBLAS/build && \ |
| mkdir -p /hipBLAS/build && \ |
| mkdir -p /rocm-cmake/build && \ |
| mkdir -p /MIOpenGEMM/build && \ |
| mkdir -p /MIOpen/build |
| |
| # Do the builds, empty build dir to trim image size |
| WORKDIR /rocBLAS/build |
| RUN CXX=/opt/rocm/bin/hcc cmake -DCMAKE_CXX_FLAGS="--amdgpu-target=gfx801" .. && \ |
| make -j$(nproc) && make install && rm -rf * |
| |
| WORKDIR /hipBLAS/build |
| RUN CXX=/opt/rocm/bin/hcc cmake -DCMAKE_CXX_FLAGS="--amdgpu-target=gfx801" .. && \ |
| make -j$(nproc) && make install && rm -rf * |
| |
| WORKDIR /rocm-cmake/build |
| RUN cmake .. && cmake --build . --target install && rm -rf * |
| |
| WORKDIR /MIOpenGEMM/build |
| RUN cmake .. && make miopengemm && make install && rm -rf * |
| |
| # Should link this in as a volume if at all possible |
| RUN mkdir -p /.cache/miopen && chmod 777 /.cache/miopen |
| |
| # Un-set default c++ version for MIOpen compilation |
| # As MIOpen 1.7 requires c++14 or higher |
| RUN sed -i 's/INTERFACE_COMPILE_OPTIONS "-std=c++amp;-fPIC;-gline-tables-only"/#&/' /opt/rocm/hcc-1.0/lib/cmake/hcc/hcc-targets.cmake && \ |
| sed -i 's/INTERFACE_COMPILE_OPTIONS "-hc"/#&/' /opt/rocm/hcc-1.0/lib/cmake/hcc/hcc-targets.cmake |
| |
| WORKDIR /MIOpen |
| # Half is required; This is the version that MIOpen would download |
| RUN wget https://github.com/pfultz2/half/archive/1.12.0.tar.gz && \ |
| tar -xzf 1.12.0.tar.gz |
| |
| WORKDIR /MIOpen/build |
| RUN CXX=/opt/rocm/hcc/bin/hcc cmake \ |
| -DCMAKE_BUILD_TYPE=Debug \ |
| -DCMAKE_INSTALL_PREFIX=/opt/rocm \ |
| -DMIOPEN_BACKEND=HIP \ |
| -DCMAKE_PREFIX_PATH="/opt/rocm/hip;/opt/rocm/hcc;/opt/rocm/rocdl;/opt/rocm/miopengemm;/opt/rocm/hsa" \ |
| -DMIOPEN_CACHE_DIR=/.cache/miopen \ |
| -DMIOPEN_AMDGCN_ASSEMBLER_PATH=/opt/rocm/opencl/bin \ |
| -DHALF_INCLUDE_DIR=/MIOpen/half-1.12.0/include \ |
| -DCMAKE_CXX_FLAGS="-isystem /usr/include/x86_64-linux-gnu -DDGPU" .. && \ |
| make -j$(nproc) && make install && rm -rf * |
| |
| # Re-set defaults |
| RUN sed -i 's/#\(INTERFACE_COMPILE_OPTIONS "-std=c++amp;-fPIC;-gline-tables-only"\)/\1/' /opt/rocm/hcc-1.0/lib/cmake/hcc/hcc-targets.cmake && \ |
| sed -i 's/#\(INTERFACE_COMPILE_OPTIONS "-hc"\)/\1/' /opt/rocm/hcc-1.0/lib/cmake/hcc/hcc-targets.cmake |
| |
| # Create performance DB for gfx801. |
| WORKDIR /opt/rocm/miopen/share/miopen/db |
| RUN cp gfx803_64.cd.pdb.txt gfx801_4.cd.pdb.txt && \ |
| cp gfx803_64.cd.pdb.txt gfx801_8.cd.pdb.txt && \ |
| cp gfx803_64.cd.pdb.txt gfx801_16.cd.pdb.txt && \ |
| cp gfx803_64.cd.pdb.txt gfx801_32.cd.pdb.txt && \ |
| cp gfx803_64.cd.pdb.txt gfx801_64.cd.pdb.txt |
| |
| # Install profiler from .deb file, works for 1.6.2 |
| WORKDIR /ROCm-Profiler |
| RUN dpkg -i package/rocm-profiler_4.0.6036_amd64.deb |
| |
| # Always use python3 and create a link to config command for gem5 to find |
| RUN ln -sf /usr/bin/python3 /usr/bin/python |
| RUN ln -sf /usr/bin/python3.9-config /usr/bin/python3-config |
| |
| WORKDIR / |