#!/usr/bin/env bash
set -e
echo "=========================================="
echo "Faiss NPU Dev Container post-create setup..."
echo "=========================================="
if ! grep -q "mirrors.huaweicloud.com" /etc/apt/sources.list 2>/dev/null; then
cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
sed -i "s@http://.*archive.ubuntu.com@https://mirrors.huaweicloud.com@g" /etc/apt/sources.list
sed -i "s@http://.*security.ubuntu.com@https://mirrors.huaweicloud.com@g" /etc/apt/sources.list
fi
if ! dpkg -s libopenblas-dev >/dev/null 2>&1; then
echo "Installing system dependencies..."
apt-get update
apt-get install -y --no-install-recommends \
libopenblas-dev libopenblas0 swig python3-dev python3-numpy gawk \
libgtest-dev libomp-dev
rm -rf /var/lib/apt/lists/*
else
echo "System dependencies already installed."
fi
CMAKE_VER=$(cmake --version 2>/dev/null | head -n1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || true)
if [ -z "${CMAKE_VER}" ] || dpkg --compare-versions "${CMAKE_VER}" lt "3.24.0"; then
echo "Upgrading CMake to 3.26.4..."
ARCH=$(uname -m)
case "${ARCH}" in
x86_64) CMAKE_ARCH="x86_64" ;;
aarch64) CMAKE_ARCH="aarch64" ;;
*) echo "Unsupported arch: ${ARCH}" >&2; exit 1 ;;
esac
wget -q "https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-linux-${CMAKE_ARCH}.tar.gz" \
-O /tmp/cmake.tar.gz
tar -xzf /tmp/cmake.tar.gz -C /usr/local
ln -sf "/usr/local/cmake-3.26.4-linux-${CMAKE_ARCH}/bin/cmake" /usr/local/bin/cmake
ln -sf "/usr/local/cmake-3.26.4-linux-${CMAKE_ARCH}/bin/ctest" /usr/local/bin/ctest
rm -f /tmp/cmake.tar.gz
hash -r
fi
echo "CMake : $(cmake --version | head -n1)"
pip3 install --no-cache-dir --upgrade \
"numpy==1.26.4" packaging scipy pytest \
-i https://repo.huaweicloud.com/repository/pypi/simple
echo "Python : $(python3 --version)"
echo "GCC : $(gcc --version | head -n1)"
echo "CANN : ${ASCEND_HOME_PATH:-/usr/local/Ascend/ascend-toolkit/latest}"
if command -v npu-smi &> /dev/null; then
echo "NPU environment detected:"
npu-smi info || true
else
echo "Warning: npu-smi not found. NPU may not be available."
fi
echo ""
echo "--- 构建步骤 ---"
echo "1) 编译 NPU 算子:"
echo " cd ${PWD}/faiss/npu/ops && bash ops_build.sh"
echo " # 若芯片为 A3,使用: COMPUTE_UNIT=ascend910_93 bash ops_build.sh"
echo ""
echo "2) 编译 faiss_npu:"
echo " mkdir -p build && cd build"
echo " cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF \\"
echo " -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_NPU=ON -DBUILD_TESTING=OFF"
echo " make -j\$(nproc)"
echo ""
echo "3) 打包安装:"
echo " cd build/faiss/python && python3 setup.py bdist_wheel"
echo " pip3 install dist/faiss_ascend-*.whl"
echo "=========================================="