更新时间:2025-07-29 GMT+08:00
分享

ModelArts Lite Server

前提条件

  • 已开通Lite Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。
  • (多机运行分布式训练)已购买可挂载的存储硬盘资源,以实现多机共同访问同一存储硬盘资源,存储方案请参考配置Lite Server存储;支持在裸金属服务器中挂载的有弹性文件服务SFS和云硬盘EVS。
  • 安装过程需要连接互联网git clone,确保容器可以访问公网。

当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据

步骤一:检查环境

  1. SSH登录机器后,检查NPU设备状态。运行如下命令,返回NPU设备信息。
    npu-smi info                    # 在每个实例节点上运行此命令可以看到NPU卡状态
    npu-smi info -l | grep Total    # 在每个实例节点上运行此命令可以看到总卡数,用来确认对应卡数已经挂载
    npu-smi info -t board -i 1 | egrep -i "software|firmware"   #查看驱动和固件版本

    如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。

    驱动版本要求参考镜像驱动版本如果不符合要求请参考安装固件和驱动章节升级驱动。

  2. 检查docker是否安装。
    docker -v   #检查docker是否安装

    如尚未安装,运行以下命令安装docker。

    yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64
  3. 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。
    sysctl -p | grep net.ipv4.ip_forward
    如果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

步骤二:获取基础镜像

建议使用官方提供的镜像部署训练服务。镜像地址{image_url}参见表2获取。

docker pull {image_url}

步骤三:上传代码包和权重文件

  1. 上传安装依赖软件训练代码AscendCloud-LLM-6.5.905-xxx.zip到主机中并解压,包获取路径请参见表1,解压详解如下:
    unzip AscendCloud-*.zip && unzip ./AscendCloud/AscendCloud-LLM-*.zip
  2. 将权重文件上传到Lite Server机器中。权重文件的格式要求为Huggingface格式。开源权重文件获取地址请参见支持的模型列表
  3. 权重要求放在磁盘的指定目录,保证模型文件、权重文件(如LFS文件)已完整下载。
  4. 修改权重(tokenizer)文件,以下模型需修改,根据所选框架及模型修改相应文件,详情参考tokenizer文件说明
    • Llama-Factory:glm4-9b模型、InternVL2_5系列模型

步骤四:制作训练镜像

进入解压后代码包目录下的Dockerfile文件同级目录,通过DockerFile文件构建训练镜像制作训练镜像。安装过程需要连接互联网git clone,请确保机器环境可以访问公网。详解操作如下:

  1. 进入代码包Dockerfile文件同级目录,{work_dir}指宿主机存放代码目录,根据实际修改:
    cd {work_dir}/llm_train/AscendFactory
  2. 构建新镜像:
    docker build --build-arg install_type=xxx -t <镜像名称>:<版本名称>  .
    如无法访问公网则需配置代理,增加`--build-arg`参数指定代理地址确保访问公网。
    docker build --build-arg "https_proxy=http://xxx.xxx.xxx.xxx" --build-arg "http_proxy=http://xxx.xxx.xxx.xxx" --network=host --build-arg install_type=xxx -t <镜像名称>:<版本名称>  .

    <镜像名称>:<版本名称>:定义镜像名称。示例:pytorch_2_3_ascend:20241106

    install_type:安装类型,可选mindspeed-llm、llamafactory、verl,根据实际要求选择。

  1. Dockerfile制作镜像后,默认代码工作目录为/home/ma-user/AscendFactory,如需修改代码内容则启动容器镜像修改镜像内默认代码工作目录中代码内容或重新制作镜像。
  2. 构建镜像前需保证Dockerfile文件内容中镜像名与本文档表3保持一致,如不同则需修改为一致。
# 修改以下内容:
FROM swr.cn-southwest-2.myhuaweicloud.com/atelier/xxx

步骤五:上传数据到指定目录

MindSpeed-LLM和Llama-Factory数据要求有细小差异,如Llama-Factory框架自定义数据集或下载其他数据集要求更新dataset_info.json文件;数据可参考数据说明,数据集准备具体步骤如下:

将下载的原始数据存放在{work_dir}/llm_train/AscendFactory/data目录下。具体步骤如下:

  1. 解压data.tgz压缩包。
    tar -zxvf /home/ma-user/ws/llm_train/AscendFactory/data.tgz
  2. 进入到/home/ma-user/ws/llm_train/AscendFactory/data目录下。
    cd  /home/ma-user/ws/llm_train/AscendFactory/data
  3. 将原始数据或处理好的数据按照下面的数据存放目录要求放置,数据存放参考目录结构如下。
    ${workdir}(例如/home/ma-user/ws/llm_train )
      |── AscendFactory/data
           |── alpaca_en_demo.json                   # 代码原有数据集
           |── identity.json                         # 代码原有数据集
           ...
           |── alpaca_gpt4_data.json                 # 自定义样例数据集
  4. 是否使用Llama-Factory框架训练。
    • 是,更新代码目录下data/dataset_info.json文件。如使用以下示例数据集则命令如下。关于数据集文件格式及配置,更多样例格式信息请参考README_zh.md 的内容。
      vim dataset_info.json

      新加配置参数如下:

      "alpaca_gpt4_data": {
          "file_name": "alpaca_gpt4_data.json"
        },

      样例截图:

    • 否,数据准备结束。

多机情况下,只有在rank_0节点进行数据预处理,转换权重等工作,所以原始数据集和原始权重,包括保存结果路径,都应该在共享目录下。

步骤六:启动容器镜像

  1. 启动容器镜像前请先按照参数说明修改${}中的参数,可以根据实际需要增加修改参数,启动容器命令如下,Snt9B环境为例:
    export work_dir="自定义挂载的工作目录"     #容器内挂载的目录,例如/home/ma-user/ws
    export container_work_dir="自定义挂载到容器内的工作目录"
    export container_name="自定义容器名称"
    export image_name="镜像名称"
    docker run -itd \
        --device=/dev/davinci_manager \
        --device=/dev/devmm_svm \
        --device=/dev/hisi_hdc \
        -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
        -v /usr/local/dcmi:/usr/local/dcmi \
        -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
        --cpus 192 \
        --memory 1000g \
        --shm-size 1024g \
        --net=host \
        -v ${work_dir}:${container_work_dir} \
        --name ${container_name} \
        $image_name \
        /bin/bash

    参数说明:

    • --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如ascendspeed。
    • -v ${work_dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同。
      • 容器不能挂载/home/ma-user目录,此目录为ma-user用户家目录。
      • driver及npu-smi需同时挂载至容器。
      • 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。
    • ${image_name} 为docker镜像的ID,在宿主机上可通过docker images查询得到。
    • --shm-size:表示共享内存,用于多进程间通信。由于需要转换较大内存的模型文件,因此大小要求1024g及以上。
    • --cpus:宿主机的 CPU 核心数,一般Snt9B机型设置为192Snt9B23机型设置为320
    • --e ASCEND_VISIBLE_DEVICES=0-7 :设置卡号ID,一般Snt9B机型设置0-7Snt9B23机型设置为0-15
    • --memory:一般Snt9B机型设置为1024gSnt9B23机型设置为2048g
  2. 通过容器名称进入容器中。启动容器时默认用户为ma-user用户。
    docker exec -it ${container_name} bash

相关文档