跳过正文
  1. 文章/

AI服务器部署流程记录

··730 字·4 分钟
自用 AI 服务器 项目部署
目录

0. 写在开头
#

仅用于记录部署流程,用户名username、项目名projectname、文件夹名等信息均为示例,实际部署时请根据实际情况全局替换。

  • 用户名:username
  • 项目名:projectname

1. 装配好服务器硬件并安装系统及基础环境
#

  1. 装配好服务器硬件,连接好电源、网线等外部设备
  2. 安装 Ubuntu20.04 系统
    • 镜像:ubuntu-20.04.6-desktop-amd64.iso
    • 更新和其他软件:正常安装、安装 Ubuntu 时下载更新、安装第三方软件
    • 安装类型:清除整个磁盘并安装 Ubuntu、选择系统盘
    • 姓名:username
    • 用户名:username
    • 选中自动登录
  3. 安装完成后,拷贝项目文件夹压缩包到服务器,解压到/home/username/username文件夹下,重命名为projectname
  4. 再打开软件和更新附加驱动,选中最新的驱动(应该是nvidia-driver-5xx),等待下载,安装完成后重启

2. 安装并设置conda
#

  1. 下载 miniforge 并安装(ps:不知具体文件,见附件

    cd /home/username/username/projectname
    chmod +x deploy/*.sh
    ./deploy/install_miniforge.sh
    
  2. 测试 conda 是否安装成功

    • 重新打开终端
      echo 'export PATH="$HOME/miniforge3/bin:$PATH"' >> ~/.bashrc
      conda -V
      
      有类似conda xx.xx就说明conda安装成功
  3. 配置 conda 和 pip([见附件](ps:不知具体文件,见附件

    cp deploy/.condarc /home/username/
    mkdir -p /home/username/.config/pip/
    cp deploy/pip.conf /home/username/.config/pip/
    

3. 创建conda环境并安装项目依赖
#

请根据当前设备是否联网选择对应的安装方式

  • ps: 记得检查scripts内脚本是否为在 conda 指定环境运行:conda run -n projectname <正常命令>,没有则添加
  • ps: 记得检查scripts内脚本是否有export PATH="/home/minifoge3/bin:$PATH" ,没有则添加

3.1 联网
#

  1. 创建 conda 环境(python 版本根据实际工程给定)

    conda create -n projectname python=3.9
    conda activate projectname
    
  2. 安装项目依赖

    cd /home/username/username/projectname
    conda activate projectname
    pip install -r requirements.txt
    
  3. 检查包(有就说明无问题,无视出现ERROR: Pipe to stdout was broken):

    conda activate projectname
    (conda list | head -n 5 ) && echo "======" && (pip list | head -n 5 )
    
  4. 测试运行程序:

    • 启动程序:
      cd /home/username/username/projectname && chmod +x ./scripts/*.sh && ./scripts/projectnamedetimgstart.sh
      
    • 等待程序完全启动后,在新终端中测试:
      conda activate projectname
      cd /home/username/username/projectname
      python test/test.py
      
  5. 查看logs文件夹下最新的以日期命名的.log文件:

    tail -f /home/username/username/projectname/logs/<修改为日期最新的那一个>.log
    
  6. 关闭程序:

    cd /home/username/username/projectname
    ./scripts/projectnamedetimgstop.sh
    

3.2 不联网
#

3.2.1 项目依赖打包
#

  1. 激活 projectname 环境:

    conda activate projectname
    ```shell
    
  2. 导出 conda 显式依赖列表:

    mkdir -p /home/username/projectname/extra && conda list --explicit > /home/username/projectname/extra/conda_env.txt
    
  3. 导出 pip 包依赖列表:

    pip freeze > /home/username/projectname/extra/pip_requirements.txt
    
  4. 下载 conda 包:

    mkdir -p /home/username/projectname/extra/conda_pkg && wget -i /home/username/projectname/extra/conda_env.txt -P /home/username/projectname/extra/conda_pkg/
    
  5. 下载 pip 包:

    mkdir -p /home/username/projectname/extra/pip_pkg && pip download -r /home/username/projectname/extra/pip_requirements.txt -d /home/username/projectname/extra/pip_pkg/
    
  6. 修改 conda 显式依赖文件conda_env.txt内包的路径为要安装的设备下的对应包位置的绝对路径

3.2.2 本地开发环境测试
#

  1. 解压我发给你的压缩包,解压后文件夹应该是/home/username/projectname

  2. 创建新的 conda 环境(输入y确认,一共2次):

    conda create --name local_test --no-default-packages && conda activate local_test
    
  3. 在新环境中安装 conda 包:

    conda install --name local_test --file /home/username/projectname/extra/conda_env_local.txt
    
  4. 安装 pip 包:

    pip install --no-index --find-links /home/username/projectname/extra/pip_pkg/ -r /home/username/projectname/extra/pip_requirements.txt
    
  5. 检查包(有就说明无问题,无视出现ERROR: Pipe to stdout was broken):

    conda activate projectname
    (conda list | head -n 5 ) && echo "======" && (pip list | head -n 5 )
    
  6. 测试运行程序:

    • 启动程序:
      cd /home/username/projectname && chmod +x ./scripts/*.sh && ./scripts/projectnamedetimgstart.sh
      
    • 等待程序完全启动后,在新终端中测试:
      conda activate projectname
      cd /home/username/projectname
      python test/test.py
      
  7. 查看logs文件夹下最新的以日期命名的.log文件:

    tail -f /home/username/projectname/logs/<修改为日期最新的那一个>.log
    
  8. 关闭程序:

    cd /home/username/projectname
    ./scripts/projectnamedetimgstop.sh
    

3.2.3 服务器部署
#

  1. 创建新的 conda 环境:
    conda create --name projectname --no-default-packages  --offline
    conda activate projectname
    
  2. 在新环境中安装 conda 包:
    conda activate projectname
    conda install --name projectname --file /home/username/username/projectname/extra/conda_env_server.txt
    
  3. 安装 pip 包:
    conda activate projectname
    pip install --no-index --find-links /home/username/username/projectname/extra/pip_pkg/ --no-deps -r /home/username/username/projectname/extra/pip_requirements.txt
    
  4. 检查包(有就说明无问题,无视出现ERROR: Pipe to stdout was broken):
    conda activate projectname
    (conda list | head -n 5 ) && echo "======" && (pip list | head -n 5 )
    
  5. 测试运行程序:
    • 启动程序:
      cd /home/username/username/projectname && chmod +x ./scripts/*.sh && ./scripts/projectnamedetimgstart.sh
      
    • 等待程序完全启动后,在新终端中测试:
      conda activate projectname
      cd /home/username/username/username/projectname
      python test/test.py
      
  6. 查看logs文件夹下最新的以日期命名的.log文件:
    tail -f /home/username/username/projectname/logs/<修改为日期最新的那一个>.log
    
  7. 关闭程序:
    cd /home/username/username/projectname
    ./scripts/projectnamedetimgstop.sh
    

4. 设置程序开机自启和守护
#

  1. 安装 supervisor 并设置开机自启动
    sudo apt install -y supervisor
    sudo systemctl enable supervisor
    sudo systemctl start supervisor
    sudo systemctl status supervisor
    
  2. 修改/home/username/username/projectname/deploy/illegaloperatedetimg.conf内的路径为实际路径
  3. 设置程序守护
    cd /home/username/username/projectname
    sudo cp deploy/illegaloperatedetimg.conf /etc/supervisor/conf.d/
    sudo supervisorctl reread
    sudo supervisorctl update
    
  4. 检查效果
    1. 手动打开/home/username/username/projectname/logs文件夹,查看是否有illegaloperatedetimg.log和以时间命名的.log文件,如果有则说明程序已经在后台运行。
    2. 重启,等待程序自启动,重复上一步操作

66. BUG修复
#

  1. 运行启动脚本正常,但是在测试时,出现非法指令 (核心已转储)
    • 解决方法: requirements.txt里面的 paddlepaddle 版本号修改为2.5.2,然后运行
      pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
      

88. 附件
#

  1. install_miniforge.sh

    # 检测系统架构并自动下载对应的 Miniforge 安装包(国内加速)
    ARCH=$(uname -m)
    if [ "$ARCH" = "x86_64" ]; then
       MINIFORGE_URL="https://gh-proxy.com/github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh"
    elif [ "$ARCH" = "aarch64" ]; then
       MINIFORGE_URL="https://gh-proxy.com/github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh"
    else
       echo "不支持的架构: $ARCH"
       exit 1
    fi
    
    # 下载 Miniforge 安装脚本
    wget $MINIFORGE_URL -O Miniforge3.sh
    
    # 赋予脚本执行权限
    chmod +x Miniforge3.sh
    
    # 执行安装脚本
    ./Miniforge3.sh -b -p $HOME/miniforge3
    
    # 添加 Miniforge 到 PATH
    echo 'export PATH="$HOME/miniforge3/bin:$PATH"' >> ~/.bashrc
    
    # 重新加载 shell(启用 Miniforge)
    source ~/.bashrc
    
    # 验证安装是否成功
    conda --version
    
  2. pip.conf

    [global]
    # 设置默认的 PyPI 镜像源为清华大学的镜像
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    
    # 设置额外的镜像源
    extra-index-url =
       https://mirrors.aliyun.com/pypi/simple/
       https://pypi.doubanio.com/simple/
    
    # 设置受信任的主机,用于避免 SSL 证书验证错误
    trusted-host =
       pypi.tuna.tsinghua.edu.cn
       mirrors.aliyun.com
       pypi.doubanio.com
    
    # 禁用 pip 版本检查
    disable-pip-version-check = true
    
    # 设置重试次数为 3 次
    retries = 3
    
    # 设置超时时间为 30 秒
    timeout = 30
    
    # 要求使用 HTTPS
    require-https = true
    
    # 显示进度条
    progress-bar = on
    
    # 允许彩色输出
    no-color = false
    
    [install]
    # 优先使用预编译的二进制包
    prefer-binary = true
    
    # 允许编译源码包
    no-compile = false
    
    # 安装依赖
    no-deps = false
    
    # 不忽略已安装的包
    ignore-installed = false
    
    # 显示脚本安装位置的警告
    no-warn-script-location = false
    
    [freeze]
    # 在 freeze 输出中排除可编辑安装的包
    exclude-editable = true
    
    # 显示所有已安装的包,包括不是直接安装的包
    all = true
    
    [search]
    # 限制搜索结果数量为 10 个
    limit = 10
    
    # 在 PyPI 上搜索包
    index = true
    
  3. .condarc

    # conda 配置文件
    
    # 配置可用的包源/频道
    channels:
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge   # 清华大学镜像的conda-forge源
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main           # 清华大学镜像的官方main源
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free           # 清华大学镜像的官方free源
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r              # 清华大学镜像的R语言源
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro            # 清华大学镜像的pro源
    - conda-forge  # 默认的conda-forge作为兜底(可选)
    
    # 不使用ssl验证
    ssl_verify: false
    
    # 显示软件包的来源频道信息
    show_channel_urls: true
    
    # 设置频道优先级为严格模式
    # strict模式下将严格按照channels的顺序查找包,只会从第一个找到的频道安装包
    channel_priority: strict
    
    # 禁止自动激活base环境
    auto_activate_base: false
    
    # 创建新环境时默认安装的包
    create_default_packages:
    - pip    # 在新环境中默认安装pip(之后一直使用pip来安装包)
    
  4. illegaloperatedetimg.conf

    [program:illegaloperatedetimg]
    # 设置程序的工作目录
    directory=/home/username/username/projectname
    
    # 指定要执行的命令
    command=bash scripts/projectnamedetimgstart.sh
    
    # 设置为 true,表示 supervisor 启动时自动启动该程序
    autostart=true
    
    # 设置为 true,表示程序崩溃时自动重启
    autorestart=true
    
    # 设置最大重启尝试次数为 200 次
    startretries=200
    
    # 设置停止程序时等待的秒数,超过后强制终止
    stopwaitsecs=10
    
    # 将标准错误重定向到标准输出
    redirect_stderr=true
    
    # 指定标准输出日志文件的位置
    stdout_logfile=/home/username/username/projectname/logs/illegaloperatedetimg.log
    
xiadengma
作者
xiadengma