镜像安装

指导用户进行MindIE容器镜像安装,请确保服务器能够连接网络。

前提条件

  • 宿主机已经安装过NPU驱动和固件。如未安装,下载固件与驱动,根据产品系列和型号选择对应版本的社区版本或商用版本的固件与驱动。参考如下命令安装:
chmod +x Ascend-hdk-<chip_type>-npu-driver_<version>_linux-<arch>.run
chmod +x Ascend-hdk-<chip_type>-npu-firmware_<version>.run
./Ascend-hdk-<chip_type>-npu-driver_<version>_linux-<arch>.run --full --force
./Ascend-hdk-<chip_type>-npu-firmware_<version>.run --full
  • 用户在宿主机自行安装Docker(版本要求大于或等于24.x.x)。Docker的安装可参见安装Docker
  • 配置源之前,请确保安装环境能够连接网络。

说明

对于Atlas 200I Pro 加速模块,宿主机与容器镜像的操作系统兼容性要求如下:

  • Ubuntu 22.04宿主机支持运行Ubuntu 24.04容器镜像
  • openEuler 22.03宿主机支持运行openEuler 24.03容器镜像

请根据宿主机操作系统选择兼容的容器镜像版本。

获取MindIE镜像

  1. 单击昇腾镜像仓库链接,进入MindIE镜像下载页面。

  2. 单击页面右上角登录按钮,使用华为账号登录(若未注册,请先注册)。

  3. 在MindIE镜像下载页面的“镜像版本”页签,根据您的设备形态,单击对应镜像后方“操作”栏中的“立即下载”按钮。

  4. 根据弹出的镜像下载操作指导页面下载镜像,如图1所示。

    图 1 镜像下载

使用镜像

  1. 执行以下命令启动容器,容器启动命令仅供参考,可根据需求自行修改,命令参数介绍如表1所示。

    docker run -it -d --net=host --shm-size=1g \  # 对于多模态理解模型,若业务最大并发数较高,--shm-size建议设置不小于100g
       --name <container-name> \
       --device=/dev/davinci_manager:rwm \
       --device=/dev/hisi_hdc:rwm \
       --device=/dev/devmm_svm:rwm \
       --device=/dev/davinci0:rwm \
       -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
       -v /usr/local/Ascend/firmware/:/usr/local/Ascend/firmware:ro \
       -v /usr/local/sbin:/usr/local/sbin:ro \
       -v /path-to-weights:/path-to-weights:ro \
       mindie:3.0.0-800I-A2-py311-openeuler24.03-lts bash
    

    说明

    • mindie:3.0.0-800I-A2-py311-openeuler24.03-lts”为镜像名称和标签,可根据实际情况修改。可在宿主机执行docker images命令查看当前机器上已有的镜像。
    • 对于--device参数,挂载权限设置为rwm,而非权限较小的rw或r,原因如下:
      • 对于Atlas 800I A2 推理服务器,若设置挂载权限为rw,可以正常进入容器,同时也可以使用npu-smi命令查看npu占用信息,并正常运行MindIE业务;但如果挂载的npu(即对应挂载选项中的davinci_xxx_,如npu0对应davinci0)上有其它任务占用,则使用npu-smi命令会打印报错,且无法运行MindIE任务(此时torch.npu.set_device()会失败)。
      • 对于Atlas 800I A3 超节点服务器,若设置挂载权限为rw,进入容器后,使用npu-smi命令会打印报错,且无法运行MindIE任务,此时torch.npu.set_device()会失败。

    表 1 参数说明

    参数 说明
    --pids-limit -1 表示解除进程数限制。
    当Atlas 800I A2 推理服务器使用Alibaba Cloud Linux 3.2104 U10操作系统时,启动容器命令中必须使用该参数解除进程数限制。
    -it 表示启动一个交互式终端(-i)并将其连接到容器的标准输入输出 (-t),能够与容器内部进行交互,如运行命令行操作。
    -d 表示容器将以后台模式运行,即容器在后台启动。使用该参数后不会阻塞当前终端的操作,可以在启动容器后继续进行其他操作。
    --net 表示容器将使用宿主机的网络配置(网络共享),使容器能够直接访问宿主机的网络接口,适用于需要进行低延迟、直接访问网络资源的场景。
    --shm-size 表示指定容器的共享内存(/dev/shm)大小,用户可自行设置,1g为示例值。对于多模态理解模型,若业务最大并发数较高,--shm-size建议设置不小于100g。
    该值不能超过宿主机剩余的物理内存总量,可使用free -h命令查看。当开启数据并行(即DP>1时),需要随DP增大调整共享内存大小:
    当DP=2时,shm-size至少为2g
    当DP=4时,shm-size至少为3g
    当DP=8时,shm-size至少为5g
    当DP=16时,shm-size至少为9g
    --name 表示给容器指定一个名称。<container-name>是容器的标识符,可以自行设置,且在当前系统中具有唯一性。如果不设置,Docker会自动分配一个随机名称。
    --device 表示将宿主机的设备映射到容器内。每个--device参数将宿主机设备(例如硬件加速卡或其他硬件设备)共享给容器,以便容器可以直接访问。
    /dev/davinci_manager:davinci相关的管理设备。
    /dev/hisi_hdc:hdc相关管理设备。
    /dev/devmm_svm:内存管理相关设备。
    /dev/davinciX:NPU设备,X是ID号,如:davinci0。
    可根据ll /dev/ | grep davinci命令查询device个数及名称,根据需要绑定设备,修改上面命令中的"--device=****"。
    -v 表示将物理机的文件夹映射到容器内的相应目录,并且使用ro参数将这些目录设置为只读权限。
    /usr/local/Ascend/driver:该路径包含硬件驱动程序文件,驱动在宿主机上安装,将其映射到容器中,方可在容器中使用。请根据驱动所在实际路径修改。
    /usr/local/sbin:该路径包含npu-smi等NPU状态查看命令,请根据实际路径修改。
    /path-to-weights:该路径为设定权重挂载的路径,指向保存权重的目录,使容器能访问权重,请根据实际路径修改。(权重文件和数据集文件同时放置于该路径下)
  2. 执行以下命令进入容器。

    docker exec -it <container-name> bash
    
  3. 安装依赖。

    使用模型进行推理前需要安装对应的依赖,各模型的依赖安装文件(requirements_xxx.txt)所在路径为/usr/local/Ascend/atb-models/requirements/models。以LLaMA3系列模型为例,使用以下命令安装依赖。

    cd /usr/local/Ascend/atb-models/requirements/models
    pip3 install -r requirements_llama3.txt
    
  4. 执行以下命令开启MindIE日志打印。

    export MINDIE_LOG_TO_STDOUT="true"
    
  5. 使用模型进行推理。

    以LLaMA3系列模型为例,具体可参考容器中“$ATB_SPEED_HOME_PATH/examples/models/llama3/README.md”中的说明,其他模型请参见模型列表

    执行以下命令进行推理:

    cd $ATB_SPEED_HOME_PATH
    python examples/run_pa.py --model_path /path-to-weights  # 请修改权重路径
    

    打印默认问题“Question”和推理结果“Answer”,如下所示:

    2024-11-18 11:08:13,291 [INFO] [pid: 389497] logging.py-180: Question[0]: What's deep learning?
    2024-11-18 11:08:13,291 [INFO] [pid: 389497] logging.py-180: Answer[0]:  Deep learning is a subset of machine learning that uses neural networks to learn from data. Neural networks are
    2024-11-18 11:08:13,291 [INFO] [pid: 389497] logging.py-180: Generate[0] token num: (0, 20)
    

    若用户想要自定义输入问题,可使用“--input_texts”参数设置,如:

    python examples/run_pa.py --model_path /path-to-weights --input_texts "What is deep learning?"  # 请修改权重路径
    

    说明

    “$ATB_SPEED_HOME_PATH”已在“.bashrc”中设置好,无需自行设置。

  6. MindIE Motor是面向通用模型场景的推理服务化框架,通过开放,可扩展的推理服务化平台架构提供推理服务化能力,支持对接业界主流推理框架接口,满足大语言模型的高性能推理需求。 对接Motor的方法请参见快速入门