|
| 1 | +# build |
| 2 | +FROM registry.fedoraproject.org/fedora:rawhide AS builder |
| 3 | + |
| 4 | +RUN dnf -y --nodocs --setopt=install_weak_deps=False install \ |
| 5 | + make gcc cmake lld clang clang-devel compiler-rt libcurl-devel \ |
| 6 | + radeontop git vim patch curl ninja-build tar xz aria2c \ |
| 7 | + && dnf clean all && rm -rf /var/cache/dnf/* |
| 8 | + |
| 9 | +# find & fetch the latest Linux 7.x.x tarball (gfx1151) |
| 10 | +WORKDIR /tmp |
| 11 | +ARG ROCM_MAJOR_VER=7 |
| 12 | +ARG GFX=gfx1151 |
| 13 | +RUN set -euo pipefail; \ |
| 14 | + BASE="https://therock-nightly-tarball.s3.amazonaws.com"; \ |
| 15 | + PREFIX="therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}"; \ |
| 16 | + KEY="$(curl -s "${BASE}?list-type=2&prefix=${PREFIX}" \ |
| 17 | + | tr '<' '\n' \ |
| 18 | + | grep -o "therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}\..*\.tar\.gz" \ |
| 19 | + | sort -V | tail -n1)"; \ |
| 20 | + echo "Latest tarball: ${KEY}"; \ |
| 21 | + aria2c -x 16 -s 16 -j 16 --file-allocation=none "${BASE}/${KEY}" -o therock.tar.gz |
| 22 | +RUN mkdir -p /opt/rocm-7.0 \ |
| 23 | + && tar xzf therock.tar.gz -C /opt/rocm-7.0 --strip-components=1 |
| 24 | + |
| 25 | +ENV ROCM_PATH=/opt/rocm-7.0 \ |
| 26 | + HIP_PLATFORM=amd \ |
| 27 | + HIP_PATH=/opt/rocm-7.0 \ |
| 28 | + HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin \ |
| 29 | + HIP_INCLUDE_PATH=/opt/rocm-7.0/include \ |
| 30 | + HIP_LIB_PATH=/opt/rocm-7.0/lib \ |
| 31 | + HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode \ |
| 32 | + PATH=/opt/rocm-7.0/bin:/opt/rocm-7.0/llvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \ |
| 33 | + LD_LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64:/opt/rocm-7.0/llvm/lib \ |
| 34 | + LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64 \ |
| 35 | + CPATH=/opt/rocm-7.0/include \ |
| 36 | + PKG_CONFIG_PATH=/opt/rocm-7.0/lib/pkgconfig |
| 37 | + |
| 38 | +RUN printf '%s\n' \ |
| 39 | + 'export ROCM_PATH=/opt/rocm-7.0' \ |
| 40 | + 'export HIP_PLATFORM=amd' \ |
| 41 | + 'export HIP_PATH=/opt/rocm-7.0' \ |
| 42 | + 'export HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin' \ |
| 43 | + 'export HIP_INCLUDE_PATH=/opt/rocm-7.0/include' \ |
| 44 | + 'export HIP_LIB_PATH=/opt/rocm-7.0/lib' \ |
| 45 | + 'export HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode' \ |
| 46 | + 'export PATH="$ROCM_PATH/bin:$HIP_CLANG_PATH:$PATH"' \ |
| 47 | + 'export LD_LIBRARY_PATH="$HIP_LIB_PATH:$ROCM_PATH/lib:$ROCM_PATH/lib64:$ROCM_PATH/llvm/lib"' \ |
| 48 | + 'export LIBRARY_PATH="$HIP_LIB_PATH:$ROCM_PATH/lib:$ROCM_PATH/lib64"' \ |
| 49 | + 'export CPATH="$HIP_INCLUDE_PATH"' \ |
| 50 | + 'export PKG_CONFIG_PATH="$ROCM_PATH/lib/pkgconfig"' \ |
| 51 | + 'export ROCBLAS_USE_HIPBLASLT=1' \ |
| 52 | + > /etc/profile.d/rocm.sh \ |
| 53 | + && chmod +x /etc/profile.d/rocm.sh \ |
| 54 | + && echo 'source /etc/profile.d/rocm.sh' >> /etc/bashrc |
| 55 | + |
| 56 | +WORKDIR /opt |
| 57 | +COPY ./build-rocwmma.sh . |
| 58 | +RUN chmod +x build-rocwmma.sh && ./build-rocwmma.sh |
| 59 | + |
| 60 | +WORKDIR /opt/llama.cpp |
| 61 | +RUN git clone --recursive https://github.com/ggerganov/llama.cpp.git . \ |
| 62 | + && git clean -xdf \ |
| 63 | + && git submodule update --recursive |
| 64 | + |
| 65 | +# Download and apply the PR 16827 patch |
| 66 | +RUN aria2c -x 16 -s 16 -j 16 --file-allocation=none \ |
| 67 | + "https://github.com/ggml-org/llama.cpp/pull/16827.patch?full_index=1" \ |
| 68 | + -o 16827.patch |
| 69 | +RUN git apply 16827.patch |
| 70 | + |
| 71 | +RUN cmake -S . -B build \ |
| 72 | + -DGGML_HIP=ON \ |
| 73 | + -DAMDGPU_TARGETS=gfx1151 \ |
| 74 | + -DCMAKE_BUILD_TYPE=Release \ |
| 75 | + -DLLAMA_HIP_UMA=ON \ |
| 76 | + -DGGML_HIP_ROCWMMA_FATTN=ON \ |
| 77 | + && cmake --build build --config Release -- -j$(nproc) \ |
| 78 | + && cmake --install build --config Release |
| 79 | + |
| 80 | +# keep bin; drop headers/docs/static libs; drop source tree |
| 81 | +RUN find /opt/rocm-7.0 -type f -name '*.a' -delete \ |
| 82 | + && rm -rf /opt/rocm-7.0/include /opt/rocm-7.0/share \ |
| 83 | + /opt/rocm-7.0/llvm/include /opt/rocm-7.0/llvm/share \ |
| 84 | + && rm -rf /opt/llama.cpp |
| 85 | + |
| 86 | +# runtime |
| 87 | +FROM registry.fedoraproject.org/fedora-minimal:rawhide |
| 88 | + |
| 89 | +RUN microdnf -y --nodocs --setopt=install_weak_deps=0 install \ |
| 90 | + bash ca-certificates libatomic libstdc++ libgcc radeontop vim \ |
| 91 | + && microdnf clean all && rm -rf /var/cache/dnf/* |
| 92 | + |
| 93 | +COPY --from=builder /opt/rocm-7.0 /opt/rocm-7.0 |
| 94 | +COPY --from=builder /usr/local/ /usr/local/ |
| 95 | + |
| 96 | +COPY gguf-vram-estimator.py /usr/local/bin/ |
| 97 | +RUN chmod +x /usr/local/bin/gguf-vram-estimator.py |
| 98 | + |
| 99 | +ENV ROCM_PATH=/opt/rocm-7.0 \ |
| 100 | + HIP_PLATFORM=amd \ |
| 101 | + HIP_PATH=/opt/rocm-7.0 \ |
| 102 | + HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin \ |
| 103 | + HIP_INCLUDE_PATH=/opt/rocm-7.0/include \ |
| 104 | + HIP_LIB_PATH=/opt/rocm-7.0/lib \ |
| 105 | + HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode \ |
| 106 | + PATH=/opt/rocm-7.0/bin:/opt/rocm-7.0/llvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \ |
| 107 | + LD_LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64:/opt/rocm-7.0/llvm/lib \ |
| 108 | + LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64 \ |
| 109 | + CPATH=/opt/rocm-7.0/include \ |
| 110 | + PKG_CONFIG_PATH=/opt/rocm-7.0/lib/pkgconfig |
| 111 | + |
| 112 | +RUN printf '%s\n' \ |
| 113 | + 'export ROCM_PATH=/opt/rocm-7.0' \ |
| 114 | + 'export HIP_PLATFORM=amd' \ |
| 115 | + 'export HIP_PATH=/opt/rocm-7.0' \ |
| 116 | + 'export HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin' \ |
| 117 | + 'export HIP_INCLUDE_PATH=/opt/rocm-7.0/include' \ |
| 118 | + 'export HIP_LIB_PATH=/opt/rocm-7.0/lib' \ |
| 119 | + 'export HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode' \ |
| 120 | + 'export PATH="$ROCM_PATH/bin:$HIP_CLANG_PATH:$PATH"' \ |
| 121 | + 'export LD_LIBRARY_PATH="$HIP_LIB_PATH:$ROCM_PATH/lib:$ROCM_PATH/lib64:$ROCM_PATH/llvm/lib"' \ |
| 122 | + 'export LIBRARY_PATH="$HIP_LIB_PATH:$ROCM_PATH/lib:$ROCM_PATH/lib64"' \ |
| 123 | + 'export CPATH="$HIP_INCLUDE_PATH"' \ |
| 124 | + 'export PKG_CONFIG_PATH="$ROCM_PATH/lib/pkgconfig"' \ |
| 125 | + 'export ROCBLAS_USE_HIPBLASLT=1' \ |
| 126 | + > /etc/profile.d/rocm.sh \ |
| 127 | + && chmod +x /etc/profile.d/rocm.sh \ |
| 128 | + && echo 'source /etc/profile.d/rocm.sh' >> /etc/bashrc |
| 129 | + |
| 130 | +# make /usr/local libs visible without touching env |
| 131 | +RUN echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf \ |
| 132 | + && echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local.conf \ |
| 133 | + && ldconfig |
| 134 | + |
| 135 | +CMD ["/bin/bash"] |
0 commit comments