diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8444fd0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# AMD R9700 vLLM Toolbox +amd-r9700-vllm-toolboxes/ diff --git a/Dockerfile b/Dockerfile index 9fe662a..28f2e58 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ ARG ROCM_MAJOR_VER=7 ARG GFX=gfx120X-all RUN set -euo pipefail; \ BASE="https://therock-nightly-tarball.s3.amazonaws.com"; \ - PREFIX="therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}-${ROCM_MAJOR_VER}"; \ + PREFIX="therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}"; \ KEY="$(curl -s "${BASE}?list-type=2&prefix=${PREFIX}" \ | tr '<' '\n' \ | grep -o "therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}\..*\.tar\.gz" \ @@ -64,7 +64,7 @@ RUN python -m pip install \ WORKDIR /opt ENV FLASH_ATTENTION_TRITON_AMD_ENABLE="TRUE" -RUN git clone https://github.com/ROCm/flash-attention.git &&\ \ +RUN git clone https://github.com/ROCm/flash-attention.git &&\ cd flash-attention &&\ git checkout main_perf &&\ python setup.py install && \ @@ -75,16 +75,20 @@ RUN git clone https://github.com/vllm-project/vllm.git /opt/vllm WORKDIR /opt/vllm # --- PATCHING --- +# vLLM relies on 'amdsmi' to detect AMD GPUs. If it's missing or fails (common in containers), +# vLLM falls back to CPU. We patch it to force ROCm detection. RUN echo "import sys, re" > patch_vllm.py && \ echo "from pathlib import Path" >> patch_vllm.py && \ + # Patch 1: __init__.py - Force is_rocm=True and bypass amdsmi checks echo "p = Path('vllm/platforms/__init__.py')" >> patch_vllm.py && \ echo "txt = p.read_text()" >> patch_vllm.py && \ echo "txt = txt.replace('import amdsmi', '# import amdsmi')" >> patch_vllm.py && \ - echo "txt = re.sub(r'import is_rocm = .*', 'is_rocm = True', txt)" >> patch_vllm.py && \ + echo "txt = re.sub(r'is_rocm = .*', 'is_rocm = True', txt)" >> patch_vllm.py && \ echo "txt = re.sub(r'if len\(amdsmi\.amdsmi_get_processor_handles\(\)\) > 0:', 'if True:', txt)" >> patch_vllm.py && \ echo "txt = txt.replace('amdsmi.amdsmi_init()', 'pass')" >> patch_vllm.py && \ echo "txt = txt.replace('amdsmi.amdsmi_shut_down()', 'pass')" >> patch_vllm.py && \ echo "p.write_text(txt)" >> patch_vllm.py && \ + # Patch 2: rocm.py - Mock amdsmi and force device name echo "p = Path('vllm/platforms/rocm.py')" >> patch_vllm.py && \ echo "txt = p.read_text()" >> patch_vllm.py && \ echo "header = 'import sys\nfrom unittest.mock import MagicMock\nsys.modules[\"amdsmi\"] = MagicMock()\n'" >> patch_vllm.py && \ @@ -107,6 +111,8 @@ ENV AMDGPU_TARGETS="gfx1201" ENV MAX_JOBS="4" # --- FIX FOR SEGFAULT --- +# We force the Host Compiler (CC/CXX) to be the ROCm Clang, not Fedora GCC. +# This aligns the ABI of the compiled vLLM extensions with PyTorch. ENV CC="/opt/rocm/llvm/bin/clang" ENV CXX="/opt/rocm/llvm/bin/clang++"