141 lines
3.7 KiB
Bash
141 lines
3.7 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
exec > >(tee -a ~/pytorch-build.log) 2>&1
|
|
|
|
echo "=========================================="
|
|
echo " PyTorch 2.5.1 Build for BC-250 (gfx1010)"
|
|
echo " ROCm 7.2.0 | HIP 7.2 | $(date)"
|
|
echo "=========================================="
|
|
|
|
BUILD_DIR="$HOME/pytorch-build"
|
|
ROCM_ARCH="gfx1010"
|
|
|
|
##############################################
|
|
# Phase 1: Fix incomplete clone
|
|
##############################################
|
|
echo ""
|
|
echo "[1/5] Fixing submodules..."
|
|
cd "$BUILD_DIR"
|
|
|
|
# Reset any partial checkouts
|
|
git submodule sync --recursive
|
|
git submodule update --init --recursive --force --jobs 4 2>&1 || {
|
|
echo "WARN: Some submodules failed, retrying one by one..."
|
|
git submodule foreach --recursive 'git checkout . 2>/dev/null; true'
|
|
git submodule update --init --recursive --force 2>&1 || true
|
|
}
|
|
|
|
echo "Clone/submodule size: $(du -sh "$BUILD_DIR" | cut -f1)"
|
|
|
|
##############################################
|
|
# Phase 2: Install build dependencies
|
|
##############################################
|
|
echo ""
|
|
echo "[2/5] Checking build dependencies..."
|
|
for pkg in cmake ninja gcc python3; do
|
|
if ! command -v $pkg &>/dev/null; then
|
|
echo "ERROR: $pkg not found!"
|
|
exit 1
|
|
fi
|
|
echo " $pkg: $(command -v $pkg)"
|
|
done
|
|
|
|
# Ensure python build deps
|
|
pip3 install --user cmake ninja pyyaml typing-extensions setuptools wheel 2>&1 | tail -3
|
|
|
|
##############################################
|
|
# Phase 3: Hipify (CUDA -> HIP conversion)
|
|
##############################################
|
|
echo ""
|
|
echo "[3/5] Running hipify (CUDA -> HIP)..."
|
|
cd "$BUILD_DIR"
|
|
|
|
if [ ! -f "aten/src/ATen/hip" ] || [ ! -d "aten/src/ATen/hip" ]; then
|
|
python3 tools/amd_build/build_amd.py 2>&1 | tail -20
|
|
echo "Hipify complete."
|
|
else
|
|
echo "Hipify already done, skipping."
|
|
fi
|
|
|
|
##############################################
|
|
# Phase 4: Configure environment
|
|
##############################################
|
|
echo ""
|
|
echo "[4/5] Configuring build environment..."
|
|
|
|
# ROCm paths
|
|
export ROCM_PATH=/opt/rocm
|
|
export HIP_PATH=/opt/rocm
|
|
export ROCM_HOME=/opt/rocm
|
|
export HCC_HOME=/opt/rocm/hcc
|
|
export HIP_PLATFORM=amd
|
|
|
|
# Target architecture
|
|
export PYTORCH_ROCM_ARCH="$ROCM_ARCH"
|
|
export AMDGPU_TARGETS="$ROCM_ARCH"
|
|
|
|
# Build configuration
|
|
export USE_ROCM=1
|
|
export USE_CUDA=0
|
|
export USE_NCCL=0
|
|
export USE_DISTRIBUTED=0
|
|
export USE_MKLDNN=0
|
|
export USE_FBGEMM=0
|
|
export USE_KINETO=0
|
|
export USE_QNNPACK=0
|
|
export USE_PYTORCH_QNNPACK=0
|
|
export USE_NNPACK=0
|
|
export USE_XNNPACK=0
|
|
export BUILD_TEST=0
|
|
export BUILD_CAFFE2=0
|
|
export USE_FLASH_ATTENTION=0
|
|
export USE_MEM_EFF_ATTENTION=0
|
|
|
|
# BC-250 has limited RAM — reduce parallel jobs
|
|
export MAX_JOBS=3
|
|
|
|
# Fix CMake 4.x compatibility
|
|
export CMAKE_POLICY_VERSION_MINIMUM=3.5
|
|
|
|
# Compiler
|
|
export CC=gcc
|
|
export CXX=g++
|
|
export CMAKE_C_COMPILER=gcc
|
|
export CMAKE_CXX_COMPILER=g++
|
|
|
|
# HIP compiler
|
|
export HIP_CLANG_PATH=/opt/rocm/llvm/bin
|
|
export HIPCC_COMPILE_FLAGS_APPEND="--offload-arch=$ROCM_ARCH"
|
|
|
|
# BC-250 specific: need managed memory
|
|
export HSA_ENABLE_SDMA=0
|
|
|
|
echo " PYTORCH_ROCM_ARCH=$PYTORCH_ROCM_ARCH"
|
|
echo " MAX_JOBS=$MAX_JOBS"
|
|
echo " ROCM_PATH=$ROCM_PATH"
|
|
echo " Python: $(python3 --version)"
|
|
|
|
##############################################
|
|
# Phase 5: Build
|
|
##############################################
|
|
echo ""
|
|
echo "[5/5] Building PyTorch wheel..."
|
|
echo " Start time: $(date)"
|
|
|
|
cd "$BUILD_DIR"
|
|
|
|
# Clean any previous build artifacts
|
|
python3 setup.py clean 2>/dev/null || true
|
|
|
|
# Build wheel
|
|
python3 setup.py bdist_wheel 2>&1
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo " BUILD COMPLETE: $(date)"
|
|
echo "=========================================="
|
|
ls -lh dist/*.whl 2>/dev/null || echo "ERROR: No wheel file found!"
|
|
echo ""
|
|
echo "Install with:"
|
|
echo " pip install dist/torch-*.whl"
|