找回密码
 立即注册
查看: 857|回复: 0

debian下的运行脚本

[复制链接]

3868

主题

36

回帖

4268

积分

管理员

积分
4268
发表于 2024-3-11 12:10:23 | 显示全部楼层 |阅读模式
  1. #!/bin/bash

  2. set -euxo pipefail

  3. export DEBIAN_FRONTEND=noninteractive
  4. sudo dpkg --set-selections <<< "cloud-init install" || true

  5. #  设置全局变量
  6.     # 检测系统
  7.         OS="$(uname)"
  8.         case $OS in
  9.             "Linux")
  10.                 # 判断下系统发行版
  11.                 if [ -f /etc/os-release ]; then
  12.                     . /etc/os-release
  13.                     DISTRO=$ID
  14.                     VERSION=$VERSION_ID
  15.                 else
  16.                     echo "Linux 发行版不受支持。"
  17.                     exit 1
  18.                 fi
  19.                 ;;
  20.         esac

  21. # 检测是否存在 Nvidia GPU
  22. NVIDIA_PRESENT=$(lspci | grep -i nvidia || true)

  23. # 如果检测到 Nvidia 设备,则继续执行 Nvidia 相关步骤
  24. if [[ -z "$NVIDIA_PRESENT" ]]; then
  25.     echo "NVIDIA驱动不存在,准备安装."
  26. else
  27. # 查看nvidia-smi是否正常工作
  28.     if command -v nvidia-smi &>/dev/null; then
  29.         echo "CUDA drivers 已经安装 nvidia-smi 工作正常."
  30.     else

  31.         case $DISTRO in
  32.             "debian")
  33.                 case $VERSION in
  34.                     "10"|"11")
  35.                         # 支持 Debian 10 & 11
  36.                         sudo -- sh -c 'apt update; apt upgrade -y; apt autoremove -y; apt autoclean -y'
  37.                         sudo apt install linux-headers-$(uname -r) -y
  38.                         sudo apt install linux-hwe  -y
  39.                         sudo apt install linux-modules-$(uname -r)  -y
  40.                         sudo apt install linux-modules-extra-$(uname -r)  -y
  41.                         # 重新安装网卡驱动
  42.                         sudo apt-get install r8168-dkms -y

  43.                         sudo apt update -y
  44.                         sudo apt install nvidia-driver firmware-misc-nonfree
  45.                         wget https://developer.download.nvidia.com/compute/cuda/repos/debian${VERSION}/x86_64/cuda-keyring_1.1-1_all.deb
  46.                         sudo apt install nvidia-cuda-dev nvidia-cuda-toolkit
  47.                         sudo apt update -y
  48.                         ;;

  49.                     *)
  50.                         echo "debian 版本不被支持"
  51.                         exit 1
  52.                         ;;
  53.                 esac
  54.                 ;;

  55.             *)
  56.                 echo "只搞 debian 不干其它,换个系统."
  57.                 exit 1
  58.                 ;;
  59.         esac
  60.         echo " 5 秒后,即将 reboot !!! 重启后,再干一遍这个脚本,确保驱动完整 !"
  61.         sleep 5s
  62.         sudo reboot
  63.     fi
  64. fi
  65. #  测试驱动
  66. if [[ ! -z "$NVIDIA_PRESENT" ]]; then
  67.     nvidia-smi
  68. fi

  69. # 查看 docker 是否安装
  70. if command -v docker &>/dev/null; then
  71.     echo "Docker 已经安装."
  72. else
  73.     echo "Docker 没有安装..."
  74.     # 安装 Docker-ce keyring
  75.     sudo apt update -y
  76.     sudo apt install -y ca-certificates curl gnupg
  77.     sudo install -m 0755 -d /etc/apt/keyrings
  78.     FILE=/etc/apt/keyrings/docker.gpg
  79.     if [ -f "$FILE" ]; then
  80.         sudo rm "$FILE"
  81.     fi
  82.     curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o "$FILE"
  83.     sudo chmod a+r /etc/apt/keyrings/docker.gpg

  84.     # 添加 Docker-ce repository 到 Apt sources 并且 install
  85.     echo \
  86.       "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  87.       $(. /etc/os-release; echo "$VERSION_CODENAME") stable" | \
  88.       sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  89.     sudo apt update -y
  90.     sudo apt -y install docker-ce
  91. fi

  92. # 检查 docker-compose是否安装
  93. if command -v docker-compose &>/dev/null; then
  94.     echo "Docker-compose 存在."
  95. else
  96.     echo "Docker-compose 不存在. 干它一波..."

  97.     # 安装 docker-compose subcommand
  98.     sudo apt -y install docker-compose-plugin
  99.     sudo ln -sv /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose
  100.     docker-compose --version
  101. fi

  102. # Test / 安装 nvidia-docker
  103. if [[ ! -z "$NVIDIA_PRESENT" ]]; then
  104.     if sudo docker run --gpus all nvidia/cuda:11.0.3-base-ubuntu18.04 nvidia-smi &>/dev/null; then
  105.         echo "nvidia-docker 开启且已经正常工作"
  106.     else
  107.         echo "nvidia-docker没工作. 准备安装..."
  108.         distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
  109.         curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add
  110.         curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
  111.         sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
  112.         sudo systemctl restart docker
  113.         sudo docker run --gpus all nvidia/cuda:11.0.3-base-ubuntu18.04 nvidia-smi
  114.     fi
  115. fi
  116. sudo apt-mark hold nvidia* libnvidia*
  117. # 添加 docker group 和 user 到 group docker
  118. sudo groupadd docker || true
  119. sudo usermod -aG docker $USER || true
  120. newgrp docker || true
  121. # 解决 NVIDIA Docker 问题
  122. echo "正在应用解决方案,针对 NVIDIA Docker 的问题,参考 https://github.com/NVIDIA/nvidia-docker/issues/1730"
  123. # 问题及解决方案概要:
  124. # 问题发生在主机执行 daemon-reload 时,这可能导致使用 systemd 的容器失去对 NVIDIA GPU 的访问。
  125. # 要检查是否受影响,在主机上运行 `sudo systemctl daemon-reload`,然后在容器中用 `nvidia-smi` 检查 GPU 访问。
  126. # 如果受影响,请按照以下解决方案进行处理。

  127. # 解决方案步骤:
  128. # 禁用 Docker 容器的 cgroups,以防止出现问题。
  129. # 编辑 Docker 守护进程配置。
  130. sudo bash -c 'cat <<EOF > /etc/docker/daemon.json
  131. {
  132.    "runtimes": {
  133.        "nvidia": {
  134.            "path": "nvidia-container-runtime",
  135.            "runtimeArgs": []
  136.        }
  137.    },
  138.    "exec-opts": ["native.cgroupdriver=cgroupfs"]
  139. }
  140. EOF'

  141. # 重启 Docker 以应用更改。
  142. sudo systemctl restart docker
  143. echo "解决方案已应用。Docker 已配置为使用 'cgroupfs' 作为 cgroup 驱动。"

复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|金房子

GMT+8, 2024-5-20 03:27 , Processed in 0.031762 second(s), 18 queries .

© 2023 金房子|AI发烧友社区

快速回复 返回顶部 返回列表