#!/bin/bash
show_help() {
cat << EOF
Usage: $0 ARCH
Arguments:
ARCH CPU architecture (x86|arm)
Examples:
$0 x86
$0 arm
EOF
}
detect_os() {
local os_name=""
if [ -f /etc/os-release ]; then
source /etc/os-release
os_name=$(echo "$NAME" | tr '[:upper:]' '[:lower:]')
fi
echo "$os_name"
}
install_cann_a2_x86_apt() {
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
sudo apt-get update
sudo apt-get install -y gcc python3 python3-pip linux-headers-$(uname -r)
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann_8.5.0_linux-x86_64.run
bash ./Ascend-cann_8.5.0_linux-x86_64.run --install
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann-910b-ops_8.5.0_linux-x86_64.run
bash ./Ascend-cann-910b-ops_8.5.0_linux-x86_64.run --install
}
install_cann_a2_x86_yum() {
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
sudo yum makecache
sudo yum install -y gcc python3 python3-pip kernel-headers-$(uname -r) kernel-devel-$(uname -r)
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann_8.5.0_linux-x86_64.run
bash ./Ascend-cann_8.5.0_linux-x86_64.run --install
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann-910b-ops_8.5.0_linux-x86_64.run
bash ./Ascend-cann-910b-ops_8.5.0_linux-x86_64.run --install
}
install_cann_a2_arm_apt() {
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
sudo apt-get update
sudo apt-get install -y gcc python3 python3-pip linux-headers-$(uname -r)
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann_8.5.0_linux-aarch64.run
bash ./Ascend-cann_8.5.0_linux-aarch64.run --install
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann-910b-ops_8.5.0_linux-aarch64.run
bash ./Ascend-cann-910b-ops_8.5.0_linux-aarch64.run --install
}
install_cann_a2_arm_yum() {
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
sudo yum makecache
sudo yum install -y gcc python3 python3-pip kernel-headers-$(uname -r) kernel-devel-$(uname -r)
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann_8.5.0_linux-aarch64.run
bash ./Ascend-cann_8.5.0_linux-aarch64.run --install
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann-910b-ops_8.5.0_linux-aarch64.run
bash ./Ascend-cann-910b-ops_8.5.0_linux-aarch64.run --install
}
install_cann_a3_x86_apt() {
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
sudo apt-get update
sudo apt-get install -y gcc python3 python3-pip linux-headers-$(uname -r)
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann_8.5.0_linux-x86_64.run
bash ./Ascend-cann_8.5.0_linux-x86_64.run --install
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann-A3-ops_8.5.0_linux-x86_64.run
bash ./Ascend-cann-A3-ops_8.5.0_linux-x86_64.run --install
}
install_cann_a3_x86_yum() {
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
sudo yum makecache
sudo yum install -y gcc python3 python3-pip kernel-headers-$(uname -r) kernel-devel-$(uname -r)
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann_8.5.0_linux-x86_64.run
bash ./Ascend-cann_8.5.0_linux-x86_64.run --install
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann-A3-ops_8.5.0_linux-x86_64.run
bash ./Ascend-cann-A3-ops_8.5.0_linux-x86_64.run --install
}
install_cann_a3_arm_apt() {
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
sudo apt-get update
sudo apt-get install -y gcc python3 python3-pip linux-headers-$(uname -r)
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann_8.5.0_linux-aarch64.run
bash ./Ascend-cann_8.5.0_linux-aarch64.run --install
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann-A3-ops_8.5.0_linux-aarch64.run
bash ./Ascend-cann-A3-ops_8.5.0_linux-aarch64.run --install
}
install_cann_a3_arm_yum() {
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
sudo yum makecache
sudo yum install -y gcc python3 python3-pip kernel-headers-$(uname -r) kernel-devel-$(uname -r)
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann_8.5.0_linux-aarch64.run
bash ./Ascend-cann_8.5.0_linux-aarch64.run --install
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.T63/Ascend-cann-A3-ops_8.5.0_linux-aarch64.run
bash ./Ascend-cann-A3-ops_8.5.0_linux-aarch64.run --install
}
declare -A OS_TO_PM=(
[ubuntu]="apt"
[debian]="apt"
[velinux]="apt"
[openeuler]="yum"
[centos]="yum"
[kylin]="yum"
[bclinux]="yum"
[uosv20]="yum"
[antos]="yum"
[alios]="yum"
[ctyunos]="yum"
[culinux]="yum"
[tlinux]="yum"
[mtos]="yum"
)
main() {
if [ $# -eq 0 ]; then
echo "Error: No architecture specified"
show_help
return 1
fi
local ARCH="$1"
if [ "$ARCH" != "x86" ] && [ "$ARCH" != "arm" ]; then
echo "Error: Invalid architecture '$ARCH'. Must be 'x86' or 'arm'"
return 1
fi
echo "========================================"
echo "CANN Installation"
echo "========================================"
echo ""
echo "Detected architecture: $ARCH"
local OS_TYPE=$(detect_os)
if [ -z "$OS_TYPE" ]; then
echo "Error: Unable to detect operating system"
return 1
fi
echo "Detected OS: $OS_TYPE"
local PM_TYPE="${OS_TO_PM[$OS_TYPE]}"
if [ -z "$PM_TYPE" ]; then
echo "Error: Unsupported operating system: $OS_TYPE"
echo "Supported operating systems:"
printf " APT based: "
for os in "${!OS_TO_PM[@]}"; do
if [ "${OS_TO_PM[$os]}" = "apt" ]; then
printf "$os "
fi
done
printf "\n YUM based: "
for os in "${!OS_TO_PM[@]}"; do
if [ "${OS_TO_PM[$os]}" = "yum" ]; then
printf "$os "
fi
done
echo ""
return 1
fi
echo "Package manager: $PM_TYPE"
echo ""
echo "Detecting NPU hardware type..."
local npu_device_id=$(lspci -n -D | grep -o '19e5:d[0-9a-f]\{3\}' | head -n1 | cut -d: -f2)
if [ -z "$npu_device_id" ]; then
echo "Error: No NPU device found via lspci command."
echo "Please ensure NPU device is properly installed and detected."
echo "Command 'lspci -n -D | grep -o \"19e5:d[0-9a-f]\{3\}\"' returned empty result."
return 1
fi
echo "Detected NPU device ID: $npu_device_id"
local npu_device_id_lower=$(echo "$npu_device_id" | tr '[:upper:]' '[:lower:]')
local NPU_TYPE=""
case "$npu_device_id_lower" in
d802)
NPU_TYPE="a2"
echo "NPU Type: Ascend A2 (d802)"
;;
d803)
NPU_TYPE="a3"
echo "NPU Type: Ascend A3 (d803)"
;;
*)
echo "Error: Unsupported NPU device ID: $npu_device_id"
echo "Supported device IDs: d802 (Ascend Atlas A2), d803 (Ascend Atlas A3)"
echo "Your device ID: $npu_device_id"
return 1
;;
esac
echo ""
echo "System Configuration:"
echo " Architecture: $ARCH"
echo " OS: $OS_TYPE"
echo " Package Manager: $PM_TYPE"
echo " NPU Type: $NPU_TYPE"
local INSTALL_FUNC="install_cann_${NPU_TYPE}_${ARCH}_${PM_TYPE}"
echo "Looking for installation function: $INSTALL_FUNC"
if ! declare -f "$INSTALL_FUNC" > /dev/null; then
echo "Error: Installation function '$INSTALL_FUNC' not found"
echo ""
echo "Available installation functions:"
declare -f | grep "^install_cann_" | awk '{print $1}' | sed 's/()$//' | sort
return 1
fi
echo ""
echo "Starting CANN installation for NPU $NPU_TYPE on $ARCH $OS_TYPE ($PM_TYPE)..."
$INSTALL_FUNC
if [ $? -eq 0 ]; then
echo ""
echo "CANN installation completed successfully!"
echo " OS: $OS_TYPE"
echo " Architecture: $ARCH"
echo " Package Manager: $PM_TYPE"
echo " NPU Type: $NPU_TYPE"
return 0
else
echo ""
echo "CANN installation failed!"
echo " OS: $OS_TYPE"
echo " Architecture: $ARCH"
echo " Package Manager: $PM_TYPE"
echo " NPU Type: $NPU_TYPE"
return 1
fi
}
main "$@"
exit $?