更新时间:2025-03-03 gmt 08:00

npu服务器上配置lite server资源软件环境-九游平台

注意事项

本文旨在指导如何在snt9b裸金属服务器上,进行磁盘合并挂载、安装docker等环境配置在配置前请注意如下事项:

  • 首次装机时需要配置存储、固件、驱动、网络访问等基础内容,这部分配置尽量稳定减少变化。
  • 裸机上的开发形式建议开发者启动独立的docker容器作为个人开发环境。snt9b的裸机包含8卡算力资源,一般来说多人可以共用这个裸机完成开发与调测工作。多人使用为了避免冲突,建议各自在自己的docker容器中进行独立开发,并提前规划好每个人使用的具体卡号,避免相互影响。
  • modelarts提供了标准化基础容器镜像,在容器镜像中已经预置了基础mindspore或pytorch框架和开发调测工具链,推荐用户直接使用该镜像,用户也可以使用自己的业务镜像或昇腾ascendhub提供的镜像。如果镜像中预置的软件版本不是您期望的版本,可以自行安装替换。
  • 开发形式推荐通过容器中暴露的ssh端口以远程开发的模式(vscode ssh remote、 xshell)连接到容器中进行开发,可以在容器中挂载宿主机的个人存储目录,用于存放代码和数据。

    当前指导中很多操作步骤在最新发放的snt9b裸机环境中已经预置,无需用户再手动配置,用户在操作中如发现某个步骤已有预置配置可直接跳过该步骤。

物理机环境配置

  1. 配置超时参数。

    ssh登录到server服务器后,查看机器配置的超时参数。

    echo $tmout

    如果该值为300,则代表默认空闲等待5分钟后会断开连接,可以增大该参数延长空闲等待时间(如果值已经为0可跳过该步骤)。修改方法如下:

    vim /etc/profile 
    # 在文件最后修改tmout值,由300改为0,0表示不会空闲断开
    export tmout=0

    执行命令使其在当前terminal生效。

    tmout=0

    export tmout=0这个命令在ssh连接linux服务器时的作用是设置会话的空闲超时时间为0,意味着不会因为空闲而自动断开连接。默认情况下,ssh连接可能会在一段时间没有操作后自动断开,这是为了安全考虑。但是,如果您正在进行需要长时间保持连接的任务,可以使用这个命令来防止连接因为空闲而断开。您可以在当前的终端会话中直接执行tmout=0使设置立即生效,或者将export tmout=0添加到/etc/profile文件中,以确保所有用户的新会话都不会因为空闲而断开。

    但是在生产环境或多人使用的公共服务器上,不建议设置tmout=0,关闭自动注销功能会带来一定的安全风险。

  2. 磁盘合并挂载。

    成功购买裸金属服务器后,服务器上可能会有多个未挂载的nvme磁盘。因此在首次配置环境前,需要完成磁盘合并挂载。此操作需要放在最开始完成,避免使用一段时间后再挂载会冲掉用户已存储的内容。

    1. 首先通过“lsblk”查看是否有3个7t的磁盘未挂载,如下图所示nvme0n1、nvme1n1、nvme2n1为未挂载。
      图1 磁盘未挂载
    2. 如下图所示,每个盘后已有mountpoint,则代表已经执行过挂载操作,可跳过此章节,只用直接在/home目录下创建自己的个人开发目录即可。
      图2 磁盘已挂载
      执行自动化挂载脚本,将“/dev/nvme0n1”挂载在“/home”下供每个开发者创建自己的家目录,另两个合并挂载到“/docker”下供容器使用(如果不单独给“/docker”分配较大空间,当多人共用创建多个容器实例时容易将根目录占满)。
      cd /root/tools/
      sh create_disk_partitions.sh
      配置完成后,执行“df -h”可以看到新挂载的磁盘信息。
      图3 查看新挂载的磁盘

      磁盘合并挂载后,即可在“/home”下创建自己的工作目录,以自己的名字命名。

  3. (可选)安装固件和驱动。
    1. 首先检查npu-smi工具是否可以正常使用,该工具必须能正常使用才能继续后面的固件驱动安装,输入命令“npu-smi info”,完整输出下图内容则为正常。

      如果命令未按照下图完整输出(比如命令报错或只输出了上半部分没有展示下面的进程信息),则需要先尝试恢复npu-smi工具(提交工单),将npu-smi恢复后,再进行新版本的固件驱动安装。

      图4 检查npu-smi工具
    2. 查看环境信息。执行如下命令查看当前拿到的机器的固件和驱动版本。
      npu-smi info -t board -i 1 | egrep -i "software|firmware"
      图5 查看固件和驱动版本

      其中firmware代表固件版本,software代表驱动版本。

      如果机器上的版本不是所需的版本(例如需要换成社区最新调测版本),可以参考后续步骤进行操作。

    3. 查看机器操作系统版本,以及架构是aarch64还是x86_64,并从昇腾九游平台官网获取相关的固件驱动包。固件包名称为“ascend-hdk-型号-npu-firmware_版本号.run”,驱动包名称为“ascend-hdk-型号-npu-driver_版本号_linux-aarch64.run”,商用版是权限受控,仅华为工程师和渠道用户有权限下载,下载地址请见。
      arch
      cat /etc/os-release
      图6 查看机器操作系统版本及架构

      下文均以适配euleros 2.0(sp10)和aarch64架构的包为例来进行讲解。

    4. 安装固件和驱动包。
      1. 固件和驱动安装时,注意安装顺序:
        1. 首次安装场景:硬件设备刚出厂时未安装驱动,或者硬件设备前期安装过驱动固件但是当前已卸载,上述场景属于首次安装场景,需按照“驱动->固件”的顺序安装驱动固件。
        2. 覆盖安装场景:硬件设备前期安装过驱动固件且未卸载,当前要再次安装驱动固件,此场景属于覆盖安装场景,需按照“固件->驱动”的顺序安装固件驱动。

      通常snt9b出厂机器有预装固件驱动,因此本案例中是“覆盖安装场景”,注意:

      1. 如果新装的固件驱动比环境上已有的版本低,只要npu-smi工具可用,也是直接装新软件包即可,不用先卸载环境上已有的版本。
      2. 如果固件驱动安装失败,可先根据报错信息在开发者社区搜索九游平台的解决方案。
      安装命令如下:
      1. 安装固件,安装完后需要reboot重启机器。
        chmod 700 *.run 
        #  注意替换成实际的包名
        ./ascend-hdk-型号-npu-firmware_版本号.run  --full
        reboot
      2. 安装驱动,提示处输入“y”,安装完后直接生效不用重启机器。
        # 注意替换成实际的包名
        ./ascend-hdk-型号-npu-driver_版本号_linux-aarch64.run --full --install-for-all
      3. 安装完成后,执行下述命令检查固件和驱动版本,正常输出代表安装成功。
        npu-smi info -t board -i 1 | egrep -i "software|firmware"
        图7 检查固件和驱动版本

  4. 安装docker环境。
    1. 先执行“docker -v”检查机器是否已安装docker,如果已安装,则可跳过此步骤。
      安装docker命令如下。
      yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64
      使用docker -v检查是否安装成功:
      图8 查看docker版本
    2. 配置ip转发,用于容器内的网络访问。
      执行下述命令查看net.ipv4.ip_forward配置项值,如果为1,可跳过此步骤。
      sysctl -p | grep net.ipv4.ip_forward
      如果不为1,执行下述命令配置ip转发。
      sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf 
      sysctl -p | grep net.ipv4.ip_forward
    3. 查看环境是否已安装并配置ascend-docker-runtime。
      docker info |grep runtime
      如果输出的runtime为“ascend”,则代表已安装配置好,可跳过此步骤。
      图9 ascend-docker-runtime查询
      如果未安装,则单击链接下载社区版,该软件包是昇腾提供的docker插件,在docker run时可以自动挂载昇腾driver等路径到容器,无需在启动容器时手工指定--device参数。下载好后将包上传到服务器并进行安装。
      chmod 700 *.run
      ./ascend-hdk-型号-npu-driver_版本号_linux-aarch64.run --install

      关于ascend docker runtime的更多使用指导,请参考。

    4. 将新挂载的盘设置为docker容器使用路径。
      编辑“/etc/docker/daemon.json”文件内容,如果文件不存在则新建即可。
      vim /etc/docker/daemon.json
      增加如下两项配置,注意insecure-registries行末尾增加一个逗号,保持json格式正确。其中“data_root”代表docker数据存储路径,“default-shm-size”代表容器启动默认分配的共享内容大小,不配置时默认为64m,可以根据需要改大,避免分布式训练时共享内存不足导致训练失败。
      图10 docker配置

      保存后,执行如下命令重启docker使配置生效。
      systemctl daemon-reload && systemctl restart docker
  5. (可选)安装pip。
    1. 执行如下命令检查是否已安装pip且pip源正常访问,如果能正常执行,可跳过此章节。
      pip install numpy
    2. 如果物理机上没有安装pip,可执行如下命令安装。
      python -m ensurepip --upgrade
      ln -s /usr/bin/pip3 /usr/bin/pip
    3. 配置pip源。
      mkdir -p ~/.pip
      vim ~/.pip/pip.conf
      “~/.pip/pip.conf”中写入如下内容。
      [global]
      index-url = http://mirrors.myhuaweicloud.com/pypi/web/simple
      format = columns
      [install]
      trusted-host=mirrors.myhuaweicloud.com
  6. roce网络测试。
    1. 安装cann-toolkit。
      查看服务器是否已安装cann toolkit,如果显示有版本号则已安装。
      cat /usr/local/ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info

      如果未安装,则需要从九游平台官网下载相关软件包,其中社区版可以直接下载(),商用版是权限受控,仅华为工程师和渠道用户有权限下载()。

      安装cann toolkit,注意替换包名。
      chmod 700 *.run
      ./ascend-cann-toolkit_6.3.rc2_linux-aarch64.run --full --install-for-all
    2. 安装mpich-3.2.1.tar.gz。
      单击下载,并执行以下命令安装。
      mkdir -p /home/mpich
      mv /root/mpich-3.2.1.tar.gz /home/
      cd /home/;tar -zxvf mpich-3.2.1.tar.gz
      cd /home/mpich-3.2.1
      ./configure --prefix=/home/mpich --disable-fortran
      make && make install
    3. 设置环境变量和编译hccl算子。
      export path=/home/mpich/bin:$path
      cd /usr/local/ascend/ascend-toolkit/latest/tools/hccl_test
      export ld_library_path=/home/mpich/lib/:/usr/local/ascend/ascend-toolkit/latest/lib64:$ld_library_path
      make mpi_home=/home/mpich ascend_dir=/usr/local/ascend/ascend-toolkit/latest
      算子编译完成后显示内容如下:
      图11 算子编译完成
    4. 单机场景下进行all_reduce_test。
      进入hccl_test目录。
      cd /usr/local/ascend/ascend-toolkit/latest/tools/hccl_test
      如果是单机单卡,则执行下述命令。
      mpirun -n 1 ./bin/all_reduce_test -b 8 -e 1024m -f 2 -p 8 
      如果是单机多卡,则执行下述命令。
      mpirun -n 8 ./bin/all_reduce_test -b 8 -e 1024m -f 2 -p 8
      图12 all_reduce_test

    5. 多机roce网卡带宽测试。
      1. 执行以下命令查看昇腾的roce ip。
        cat /etc/hccn.conf
        图13 查看昇腾的roce ip

      2. roce测试。

        在session1:在接收端执行-i卡id。

        hccn_tool -i 7 -roce_test reset
        hccn_tool -i 7 -roce_test ib_send_bw -s 4096000 -n 1000 -tcp

        在session2:在发送端执行-i卡id,后面的ip为上一步接收端卡的ip。

        cd /usr/local/ascend/ascend-toolkit/latest/tools/hccl_test
        hccn_tool -i 0 -roce_test reset
        hccn_tool -i 0 -roce_test ib_send_bw -s 4096000 -n 1000 address 192.168.100.18 -tcp

        roce测试结果如图:

        图14 roce测试结果(接收端)
        图15 roce测试结果(服务端)

        • 当某网卡已经开始roce带宽测试时,再次启动任务会有如下报错:
          图16 报错信息

          需要执行下述命令后关闭roce_test任务后再启动任务。

          hccn_tool -i 7 -roce_test reset
        • 可执行如下命令查看网卡状态。
          for i in {0..7};do hccn_tool -i ${i} -link -g;done
        • 可执行如下命令查看单节点内网卡ip连通性。
          for i in $(seq 0 7);do hccn_tool -i $i -net_health -g;done

容器化个人调测环境搭建

  1. 准备业务基础镜像。

    当前推荐的开发模式是在物理机上启动自己的docker容器进行开发。容器镜像可以使用自己的实际业务镜像,也可以使用modelarts提供的基础镜像,modelarts提供两种基础镜像:ascend pytorch镜像、ascend mindspore镜像。

    1. 根据所需要的环境拉取ascend pytorch或ascend mindspore镜像,镜像地址详见modelarts产品发布说明中的章节:
      # 配套snt9b的容器镜像,示例如下:
      docker pull swr..myhuaweicloud.com/atelier/:
    2. 启动容器镜像,注意多人多容器共用机器时,需要将卡号做好预先分配,不能使用其他容器已使用的卡号。
      #  启动容器,请注意指定容器名称、镜像信息。ascend_visible_devices指定容器要用的卡,0-1,3代表0 1 3这3块卡,-用于指定范围
      # -v /home:/home_host是指将宿主机home目录挂载到容器home_host目录,建议在容器中使用该挂载目录进行代码和数据的存储,以便持久化保存数据
      docker run -itd --cap-add=sys_ptrace -e ascend_visible_devices=0  -v /home:/home_host -p 51234:22 -u=0 --name 自定义容器名称  上一步拉取的镜像swr地址  /bin/bash
    3. 执行下述命令进入容器。
      docker exec -ti 上一命令中的自定义容器名称 bash
    4. 执行下述命令进入conda环境。
      source /home/ma-user/.bashrc
      cd ~
    5. 查看容器中可以使用的卡信息。
      npu-smi info
      如果命令报如下错误,则代表容器启动时指定的“ascend_visible_devices”卡号已被其他容器占用,此时需要重新选择卡号并重新启动新的容器。
      图17 报错信息
    6. npu-smi info检测正常后,可以执行一段命令进行简单的容器环境测试,能正常输出运算结果代表容器环境正常可用。
      • pytorch镜像测试:
        python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a   a);"
      • mindspore镜像测试:
        # 由于mindspore的run_check程序当前未适配snt9b,需要先设置2个环境变量才能测试
        unset ms_ge_train 
        unset ms_enable_ge
        python -c "import mindspore;mindspore.set_context(device_target='ascend');mindspore.run_check()"
        # 测试完需要恢复环境变量,实际跑训练业务的时候需要用到
        export ms_ge_train=1
        export ms_enable_ge=1
      图18 进入conda环境并进行测试
  2. (可选)配置容器ssh可访问。

    如果在开发时,需要使用vs code或ssh工具直接连接到容器中进行开发,需要进行以下配置。

    1. 进入容器后,执行ssh启动命令来启动ssh服务:
      ssh-keygen  -a
      /usr/sbin/sshd
      #  查看ssh进程已启动
      ps -ef |grep ssh
    2. 设置容器root密码,根据提示输入密码:
      passwd
      图19 设置root密码
    3. 执行exit命令退出容器,在宿主机上执行ssh测试:
      ssh root@宿主机ip -p 51234(映射的端口号)
      图20 执行ssh测试

      如果在宿主机执行ssh容器测试时报错host key verification failed,可删除宿主机上的文件~/.ssh/known_host后再重试。

    4. 使用vs code ssh连接容器环境。

      如果之前未使用过vs code ssh功能,可参考step1 添加remote-ssh插件进行vscode环境安装和remote-ssh插件安装。

      打开vscode terminal,执行如下命令在本地计算机生成密钥对,如果您已经有一个密钥对,则可以跳过此步骤:
      ssh-keygen -t rsa
      将公钥添加到远程服务器的授权文件中,注意替换服务器ip以及容器的端口号:
      cat ~/.ssh/id_rsa.pub | ssh root@服务器ip -p 容器端口号 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"
      打开vscode的remote-ssh配置文件,添加ssh配置项,注意替换服务器ip以及容器的端口号:
      host snt9b-dev
          hostname 服务器ip
          user root
          port 容器ssh端口号
          identityfile ~\.ssh\id_rsa
          stricthostkeychecking no
          userknownhostsfile /dev/null
          forwardagent yes

      注意:这里是使用密钥登录,如果需要使用密码登录,请去掉identityfile配置,并在连接过程中根据提示多次输入密码。

      连接成功后安装python插件,请参考安装python插件

  3. (可选)安装cann toolkit。

    当前modelarts提供的预置镜像中已安装cann toolkit,如果需要替换版本或者使用自己的未预置cann toolkit的镜像,可参考如下章节进行安装。

    1. 查看容器内是否已安装cann toolkit,如果显示有版本号则已安装:
      cat /usr/local/ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info
    2. 如果未安装或需要升级版本,则需要从九游平台官网下载相关软件包,其中社区版可以直接下载(),商用版是权限受控,仅华为工程师和渠道用户有权限下载()。
      安装cann toolkit,注意替换包名。
      chmod 700 *.run
      ./ascend-cann-toolkit_6.3.rc2_linux-aarch64.run --full --install-for-all
    3. 如果已安装,但需要升级版本,注意替换包名:
      chmod 700 *.run
      ./ascend-cann-toolkit_6.3.rc2_linux-aarch64.run --upgrade --install-for-all
  4. (可选)安装mindspore lite。

    当前预置镜像中已安装mindspore lite,如果需要替换版本或者使用自己的未预置mindspore lite的镜像,可参考如下章节进行安装。

    1. 查看容器中是否已安装ms lite,如果已经显示出mindspore-lite软件信息和版本号,则是已经安装好的:
      pip show mindspore-lite
    2. 如果未安装,则从九游平台官网下载包(),下载whl包和tar.gz包并执行安装,注意替换包名:
      pip install mindspore_lite-2.1.0-cp37-cp37m-linux_aarch64.whl
      mkdir -p /usr/local/mindspore-lite
      tar -zxvf mindspore-lite-2.1.0-linux-aarch64.tar.gz -c /usr/local/mindspore-lite --strip-components 1
  5. 配置pip源。

    使用modelarts提供的预置镜像中pip源已经直接配置好可用,如果用户使用自己的业务镜像,可参考5进行配置。

  6. 配置yum源。

    华为euleros系统下配置yum源

    #在/etc/yum.repos.d/目录下,创建文件euleros.repo,
    cd /etc/yum.repos.d/
    mv euleros.repo euleros.repo.bak
    vim euleros.repo
    #根据euleros版本及系统架构选择配置euleros.repo文件内容,此处以欧拉2.10为例,请根据实际情况调整。
    [base]
    name=euleros-2.0sp10 base
    baseurl=https://mirrors.huaweicloud.com/euler/2.10/os/aarch64/
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.huaweicloud.com/euler/2.10/os/rpm-gpg-key-euleros
    #清除原有yum缓存
    yum clean all
    #生成新的yum缓存
    yum makecache
    # 测试
    yum update --allowerasing --skip-broken --nobest

    hce os系统下配置yum源

    #下载新的hce.repo文件到/etc/yum.repos.d/目录下
    wget -o /etc/yum.repos.d/hce.repo https://mirrors.huaweicloud.com/artifactory/os-conf/hce/hce.repo
    #清除原有yum缓存
    yum clean all
    #生成新的yum缓存
    yum makecache
    # 测试
    yum update --allowerasing --skip-broken --nobest
  7. git clone和git-lfs下载大模型可以参考如下操作。
    1. 由于欧拉源上没有git-lfs包,所以需要从压缩包中解压使用,在浏览器中输入如下地址下载git-lfs压缩包并上传到服务器的/home目录下,该目录在容器启动时挂载到容器/home_host目录下,这样在容器中可以直接使用。
      https://github.com/git-lfs/git-lfs/releases/download/v3.2.0/git-lfs-linux-arm64-v3.2.0.tar.gz
    2. 进入容器,执行安装git-lfs命令。
      cd /home_host
      tar -zxvf git-lfs-linux-arm64-v3.2.0.tar.gz
      cd git-lfs-3.2.0
      sh install.sh
    3. 设置git配置去掉ssl校验。
      git config --global http.sslverify false
    4. git clone代码仓,以diffusers为例(注意替换用户个人开发目录)。
      #  git clone diffusers源码,-b参数可指定分支,注意替换用户个人开发目录
      cd /home_host/用户个人目录
      mkdir sd
      cd sd
      git clone https://github.com/huggingface/diffusers.git -b v0.11.1-patch
      git clone hugging face上的模型,以sd模型为例。如果下载时如果出现“ssl_error_syscall”报错,多重试几次即可。另外由于网络限制以及文件较大,下载可能很慢需要数个小时,如果重试多次还是失败,建议直接从网站下载大文件后上传到服务器/home目录的个人开发目录中。如果下载时需要跳过大文件,可以设置git_lfs_skip_smudge=1。
      git lfs install 
      git clone https://huggingface.co/runwayml/stable-diffusion-v1-5 -b onnx
      图21 代码下载成功
  8. 容器环境保存镜像。

    配置好环境后可以进行业务代码的开发调试。通常为了避免机器重启后环境丢失,建议将已经配好的环境保存成新的镜像,命令如下:

    # 查看需要保存为镜像的容器id 
    docker ps  
    # 保存镜像 
    docker commit 容器id  自定义镜像名:自定义镜像tag  
    # 查看已保存的镜像 
    docker images  
    # 如果需要将镜像分享给其他人在其他环境使用,可将镜像保存为本地文件,该命令耗时较久,保存完后ls可查看到文件 
    docker save -o 自定义名称.tar 镜像名:镜像tag  
    # 其他机器上使用时加载文件,加载好后docker images即可查看到该镜像 
    docker load --input 自定义名称.tar

    到此环境配置就结束了,后续可以根据相关的迁移指导书做业务迁移到昇腾的开发调测工作。

相关文档

网站地图