华为云用户手册

  • Step1 检查环境 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装NPU设备和驱动,或释放被挂载的NPU。 检查docker是否安装。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置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
  • benchmark方法介绍 性能benchmark包括两部分。 静态性能测试:评估在固定输入、固定输出和固定并发下,模型的吞吐与首token延迟。该方式实现简单,能比较清楚的看出模型的性能和输入输出长度、以及并发的关系。 动态性能测试:评估在请求并发在一定范围内波动,且输入输出长度也在一定范围内变化时,模型的延迟和吞吐。该场景能模拟实际业务下动态的发送不同长度请求,能评估推理框架在实际业务中能支持的并发数。 性能benchmark验证使用到的脚本存放在代码包AscendCloud-3rdLLM-x.x.x.zip的llm_tools/llm_evaluation目录下。 代码目录如下: benchmark_tools ├── benchmark_parallel.py # 评测静态性能脚本 ├── benchmark_serving.py # 评测动态性能脚本 ├── generate_dataset.py # 生成自定义数据集的脚本 ├── benchmark_utils.py # 工具函数集 ├── benchmark.py # 执行静态,动态性能评测脚本、 ├── requirements.txt # 第三方依赖
  • 动态benchmark 本章节介绍如何进行动态benchmark验证。 获取数据集。动态benchmark需要使用数据集进行测试,可以使用公开数据集,例如Alpaca、ShareGPT。也可以根据业务实际情况,使用generate_datasets.py脚本生成和业务数据分布接近的数据集。 方法一:使用公开数据集 ShareGPT下载地址: https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json Alpaca下载地址: https://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json 方法二:使用generate_dataset.py脚本生成数据集方法: generate_dataset.py脚本通过指定输入输出长度的均值和标准差,生成一定数量的正态分布的数据。具体操作命令如下,可以根据参数说明修改参数。 cd benchmark_tools python generate_dataset.py --dataset custom_datasets.json --tokenizer /path/to/tokenizer \ --min-input 100 --max-input 3600 --avg-input 1800 --std-input 500 \ --min-output 40 --max-output 256 --avg-output 160 --std-output 30 --num-requests 1000 generate_dataset.py脚本执行参数说明如下: --dataset:数据集保存路径,如custom_datasets.json --tokenizer:tokenizer路径,可以是HuggingFace的权重路径 --min-input:输入tokens最小长度,可以根据实际需求设置。 --max-input:输入tokens最大长度,可以根据实际需求设置。 --avg-input:输入tokens长度平均值,可以根据实际需求设置。 --std-input:输入tokens长度方差,可以根据实际需求设置。 --min-output:最小输出tokens长度,可以根据实际需求设置。 --max-output:最大输出tokens长度,可以根据实际需求设置。 --avg-output:输出tokens长度平均值,可以根据实际需求设置。 --std-output:输出tokens长度标准差,可以根据实际需求设置。 --num-requests:输出数据集的数量,可以根据实际需求设置。 执行脚本benchmark_serving.py测试动态benchmark。具体操作命令如下,可以根据参数说明修改参数。 cd benchmark_tools python benchmark_serving.py --backend vllm --host 127.0.0.1 --port 8085 --dataset custom_datasets.json --dataset-type custom \ --tokenizer /path/to/tokenizer --request-rate 0.01 1 2 4 8 10 20 --num-prompts 10 1000 1000 1000 1000 1000 1000 \ --max-tokens 4096 --max-prompt-tokens 3768 --benchmark-csv benchmark_serving.csv --backend:服务类型,如"tgi",vllm","mindspore" --host:服务IP地址,如127.0.0.1 --port:服务端口 --dataset:数据集路径 --dataset-type:支持三种 "alpaca","sharegpt","custom"。custom为自定义数据集。 --tokenizer:tokenizer路径,可以是huggingface的权重路径 --request-rate:请求频率,支持多个,如 0.1 1 2。实际测试时,会根据request-rate为均值的指数分布来发送请求以模拟真实业务场景。 --num-prompts:某个频率下请求数,支持多个,如 10 100 100,数量需和--request-rate的数量对应 --max-tokens:输入+输出限制的最大长度,模型启动参数--max-input-length值需要大于该值 --max-prompt-tokens:输入限制的最大长度,推理时最大输入tokens数量,模型启动参数--max-total-tokens值需要大于该值,tokenizer建议带tokenizer.json的FastTokenizer --benchmark-csv:结果保存路径,如benchmark_serving.csv 脚本运行完后,测试结果保存在benchmark_serving.csv中,示例如下图所示。 图2 动态benchmark测试结果(示意图)
  • 静态benchmark验证 本章节介绍如何进行静态benchmark验证。 已经上传benchmark验证脚本到推理容器中。如果在Step5 进入容器安装推理依赖软件步骤中已经上传过AscendCloud-3rdLLM-x.x.x.zip并解压,无需重复执行。 进入benchmark_tools目录下,执行如下命令安装性能测试的关依赖。 pip install -r requirements.txt 运行静态benchmark验证脚本benchmark_parallel.py,具体操作命令如下,可以根据参数说明修改参数。 cd benchmark_tools python benchmark_parallel.py --backend vllm --host 127.0.0.1 --port 8085 --tokenizer /path/to/tokenizer --epochs 5 \ --parallel-num 1 4 8 16 32 --prompt-tokens 1024 2048 --output-tokens 128 256 --benchmark-csv benchmark_parallel.csv 参数说明 --backend:服务类型,支持tgi、vllm、mindspore、openai等。本文档使用的推理接口是vllm。 --host:服务IP地址,如127.0.0.1。 --port:服务端口,和推理服务端口8085。 --tokenizer:tokenizer路径,HuggingFace的权重路径。 --epochs:测试轮数,默认取值为5 --parallel-num:每轮并发数,支持多个,如 1 4 8 16 32。 --prompt-tokens:输入长度,支持多个,如 128 128 2048 2048,数量需和--output-tokens的数量对应。 --output-tokens:输出长度,支持多个,如 128 2048 128 2048,数量需和--prompt-tokens的数量对应。 --benchmark-csv:结果保存路径,如benchmark_parallel.csv。 脚本运行完成后,测试结果保存在benchmark_parallel.csv中,示例如下图所示。 图1 静态benchmark测试结果(示意图)
  • 附录:模型转换样例参考 cd ***/onnx/unet source /usr/local/Ascend/ascend-toolkit/set_env.sh && converter_lite --modelFile=./model.onnx --outputFile=./unet_test --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented --inputShape="sample:2,4,64,64;timestep:1;encoder_hidden_states:2,77,768" onnx模型本身是动态的,这里以图片尺寸为512*512时,unet的输入shape为例。 更多模型转换的详细信息可以参考MindSpore Lite的官方文档:https://www.mindspore.cn/lite/docs/zh-CN/r2.3.0rc1/use/cloud_infer/converter_tool.html
  • Step5 启动推理 修改run_3_txt2img_ms.py相关配置。 35行astronaut_512x512.png为生成图片的名字,可修改。 图3 修改35行生成图片的名字 91行为占用卡号,可修改。 93-96行为模型路径,可修改。 图4 修改占用卡号和模型路径 执行如下命令进行模型推理。 cd /home/ma-user/sdv1-5_ms_code pip install pytorch_lightning diffusers==0.21.0 transformers mkdir outputs python run_3_txt2img_ms.py 也可通过在python run_txt2img_ms.py后加上相应参数进行测试,可选参数: --prompt:"在这里写提示词,请用英文" --num_inference_steps:unet模型执行步数,默认20 --height:图片高,默认为512 --width:图片宽,默认512 推理结束后,可以在outputs目录看到结果图片文件。 图5 结果图片文件
  • Step2 安装插件代码包 将获取到的SD1.5模型插件代码包ascendcloud-aigc-6.3.T041-*.tar.gz文件上传到容器的/home/ma-user/目录下并解压。获取路径参见获取软件和镜像。 cd /home/ma-user/ tar -zxvf ascendcloud-aigc-6.3.T041-*.tar.gz #解压 tar -zxvf ascendcloud-aigc-poc-stable-diffusion-v1-5mindspore_lite.tar.gz rm -rf ascendcloud-aigc-6.3.T041-*
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 ascendcloud-aigc-6.3.T041-*.tar.gz 文件名中的*表示具体的时间戳,以包名的实际时间为准。 Support网站 如果没有软件下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像Beta包 mindspore_2.3.0-cann_8.0.rc1-py_3.9-euler_2.10.7-aarch64-snt9b-20240422202644-39b975b.tar.partxx
  • Step1 准备环境 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买DevServer资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 检查环境。 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装NPU设备和驱动,或释放被挂载的NPU。 检查docker是否安装。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置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 获取基础镜像。建议使用官方提供的镜像部署推理服务。获取方式参见获取软件和镜像。 将获取到的基础镜像推到SWR上,再通过docker pull拉到容器中。 启动容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。 export work_dir="自定义挂载的工作目录" export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称或ID" // 启动一个容器去运行镜像 docker run -itd --net=host \ --device=/dev/davinci7 \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ --shm-size=32g \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /var/log/npu/:/usr/slog \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v ${work_dir}:${container_work_dir} \ --name ${container_name} \ ${image_name} \ /bin/bash 参数说明: -v ${work_dir}:${container_work_dir} 容器挂载宿主机目录,work_dir代表宿主机上的工作目录,container_work_dir代表挂载至容器中的工作目录,将解压后的代码放在宿主机工作目录下并挂载至容器内。 --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 image_name: 容器镜像的名称 --device=/dev/davinci7:7为卡号,具体使用哪张卡视情况而定,选择空闲卡号即可。卡是否空闲可在创建容器后进入容器执行npu-smi info命令查看。如果只希望映射单卡,加上--device=/dev/davinci+卡号编码即可,如--device=/dev/davinci0,本业务单卡即可运行。 进入容器。需要将${container_name}替换为实际的容器名称。 docker exec -it ${container_name} bash
  • Step4 模型转换 执行如下命令进行模型转换。如下脚本执行完后,会将4个模型都转换完成。 cd /home/ma-user/sdv1-5_ms_code source /usr/local/Ascend/ascend-toolkit/set_env.sh bash run_1_onnx_to_mindspore.sh 出现CONVERT RESULT SUCCESS:0即为转模型成功。 图2 转换成功 此处模型中默认图片大小为512*512,如果需要其他尺寸的图片大小,需要修改run_1_onnx_to_mindspore.sh后重新转换模型,具体请参见附录:模型转换样例参考。
  • Step3 下载原始模型包 从HuggingFace官网下载SD1.5模型包到本地,下载地址:https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/onnx。 下载如下图所示4个目录的模型,并将其放在插件的对应目录中。 图1 下载SDXL模型包并解压 模型包目录结构如下,将下载后的模型按照如下目录上传到对应文件夹中。 /home/ma-user/sdv1-5_ms_code/onnx/ #插件包解压后的目录 |- || safety_checker #目录safety_checker需要手动创建 |-- model.onnx 模型 |- || text_encoder #目录text_encoder需要手动创建 |-- model.onnx 模型 |- || unet |-- config.ini 配置文件 |-- model.onnx 模型 |-- weights.pb 模型 |- || vae_decoder |-- config.ini 配置文件 |-- model.onnx 模型 |- - ****** unet和vae_decoder目录不需要创建,text_encoder和safety_checker目录需要手动创建,命令如下。 cd /home/ma-user/sdv1-5_ms_code/onnx mkdir text_encoder safety_checker
  • MA-Advisor简介 MA-Advisor是一款昇腾迁移辅助工具,当前包含两大类功能: 一、迁移性能自动诊断,当前支持如下场景的自动诊断: 推理场景下的子图数据调优分析,给出对应融合算子的调优建议。 推理、训练场景下对Profiling timeline单卡数据进行调优分析,给出相关亲和API替换的调优建议。 推理、训练场景下对Profiling单卡数据进行调优分析,给出AICPU相关调优建议。 推理、训练场景下对Profiling单卡数据进行调优分析,给出block dim、operator no bound相关AOE配置以及调优建议。 支持对昇腾训练、推理环境进行预检,完成相关依赖配置项的提前检查,并在检测出问题时给出相关修复建议。 二、迁移环境问题诊断,将迁移环境常见问题一次性扫描诊断给出结果。
  • 操作流程 图1 操作流程图 表1 操作任务流程说明 阶段 任务 说明 准备工作 准备环境 本教程案例是基于ModelArts Lite DevServer运行的,需要购买并开通DevServer资源。 准备代码 准备AscendSpeed训练代码、分词器Tokenizer和推理代码。 准备数据 准备训练数据,可以用Alpaca数据集,也可以使用自己准备的数据集。 准备镜像 准备训练模型适用的容器镜像。 预训练 预训练 介绍如何进行预训练,包括训练数据处理、超参配置、训练任务、断点续训及性能查看。 微调训练 SFT全参微调 介绍如何进行SFT全参微调。 LoRA微调训练 介绍如何进行LoRA微调训练。 推理前的权重转换 - 模型训练完成后,可以将训练产生的权重文件用于推理。推理前参考本章节,将训练后生成的多个权重文件合并,并转换成Huggingface格式的权重文件。 如果无推理任务或者使用开源Huggingface权重文件进行推理,可以忽略此章节。和本文档配套的推理文档请参考《开源大模型基于DevServer的推理通用指导》。
  • 附录2:Dockerfile 基于Dockerfile可以方便的构建完整可运行的自定义镜像,在宿主机创建一个空的目录,然后vi Dockerfile将上面内容复制进去,然后参考4在创建目录中下载华为插件代码包后,执行如下docker构建命令。 docker build -t sdxl-diffusers:0.0.1 . Dockerfile文件内容如下。 FROM swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_7.0.0-py_3.9-hce_2.0.2312-aarch64-snt9b-20240312154948-219655b RUN wget https://llm-mindspore.obs.cn-southwest-2.myhuaweicloud.com/ascend-poc/stable-diffusion-xl-model.tar.gz && \ tar -zxvf stable-diffusion-xl-model.tar.gz && \ rm -rf stable-diffusion-xl-model.tar.gz RUN wget https://llm-mindspore.obs.cn-southwest-2.myhuaweicloud.com/ascend-poc/controlnet_canny.zip && \ unzip controlnet_canny.zip &&\ rm -rf controlnet_canny.zip RUN mkdir /home/ma-user/temp COPY --chown=ma-user:ma-group ascendcloud-aigc-6.3.902-20240205145924.tar.gz /home/ma-user/temp/ RUN cd /home/ma-user/temp &&\ tar -zxvf ascendcloud-aigc-6.3.902-20240205145924.tar.gz &&\ cp ascendcloud-aigc-extensions-diffusers.tar.gz /home/ma-user &&\ cd /home/ma-user && tar -zxvf ascendcloud-aigc-extensions-diffusers.tar.gz &&\ rm -rf /home/ma-user/temp && rm -rf ascendcloud-aigc-extensions-diffusers.tar.gz RUN pip install diffusers bottle invisible_watermark transformers accelerate safetensors CMD source /usr/local/Ascend/ascend-toolkit/set_env.sh && python /home/ma-user/infer_server.py
  • Step3 运行并验证SDXL模型 首先在容器中运行命令。 source /usr/local/Ascend/ascend-toolkit/set_env.sh 在/home/ma-user目录下已经存在infer_server.py脚本文件,启动infer_server.py命令如下。 python infer_server.py 图3 启动脚本 在宿主机上另外打开一个终端,使用curl命令发送请求。完整的请求参数请参考表1。 curl -kv -X POST localhost:8443/ -H "Content-Type: application/json" -d '{"prompt":"ultrarealistic shot of a furry blue bird"}' 服务端打印如下信息,表示发送请求成功。 图4 发送请求 客户端返回图像的base64编码。 图5 图像的base64编码 将客户端返回的base64编码转换为图片。 from PIL import Image from io import BytesIO import base64 def base64_to_image(base64_str): image = base64.b64decode(base64_str, altchars=None, validate=False) image = BytesIO(image) image = Image.open(image) image.save(“./out_put_image.png”)
  • Step2 安装依赖和模型包 安装Diffusers相关依赖。 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple diffusers bottle invisible_watermark transformers accelerate safetensors 获取SDXL模型包并解压到/home/ma-user目录下。提供2种模型包下载方式。 模型包直接下载(如果不能访问HuggingFace官网,推荐此方式) 下载到容器/home/ma-user目录下后,解压。 cd /home/ma-user/ wget https://llm-mindspore.obs.cn-southwest-2.myhuaweicloud.com/ascend-poc/stable-diffusion-xl-model.tar.gz tar -zxvf stable-diffusion-xl-model.tar.gz rm -rf stable-diffusion-xl-model.tar.gz 也可以从HuggingFace官网下载到本地后,通过docker cp命令拷贝到容器中/home/ma-user目录下,如下图所示。 在线下载地址: https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/tree/main 由于本实例采用的都是FP16的模型,相应模型建议都只下载FP16的,节约下载和传送时间。 图1 下载SDXL模型包并解压 获取controlnet模型包并解压到/home/ma-user目录下。提供2种模型包下载方式。 模型包直接下载(如果不能访问HuggingFace官网,推荐此方式) 下载到容器/home/ma-user目录下后,解压。 cd /home/ma-user/ wget https://llm-mindspore.obs.cn-southwest-2.myhuaweicloud.com/ascend-poc/controlnet_canny.zip unzip controlnet_canny.zip 也可以从HuggingFace官网下载到本地后,通过docker cp命令拷贝到容器中/home/ma-user目录下。 在线下载地址:https://huggingface.co/diffusers/controlnet-canny-sdxl-1.0/tree/main 图2 下载controlnet模型包并解压 安装插件代码包。 将获取到的插件代码包ascendcloud-aigc-6.3.902-*.tar.gz文件上传到容器的/home/ma-user/temp目录下。获取路径:Support网站。 解压插件代码包ascendcloud-aigc-6.3.902-*到/home/ma-user/temp目录下。 cd /home/ma-user/temp tar -zxvf ascendcloud-aigc-6.3.902-20240205145924.tar.gz #解压 将获取到的ascendcloud-aigc-extensions-diffusers.tar.gz包拷贝到/home/ma-user下后解压。 docker cp ascendcloud-aigc-extensions-diffusers.tar.gz sdxl-diffusers:/home/ma-user/ tar -zxvf ascendcloud-aigc-extensions-diffusers.tar.gz
  • Step4 运行并验证带controlnet的模型 首先下载一个默认输入文件。 https://huggingface.co/lllyasviel/sd-controlnet-canny/blob/main/images/bird_canny.png 文件下载后重命名为canny_input_bird.png,然后复制到容器/home/ma-user目录下,在宿主机上的执行命令如下。 mv bird_canny.png canny_input_bird.png chmod 777 canny_input_bird.png docker cp canny_input_bird.png sdxl-diffusers:/home/ma-user/ 在/home/ma-user目录下已经存在infer_server_with_controlnet.py脚本文件,运行带controlnet的sdxl,运行命令如下。 python infer_server_with_controlnet.py 在宿主机上另外打开一个终端,使用curl命令发送请求。完整的请求参数请参考表1。 curl -kv -X POST localhost:8443/ -H "Content-Type: application/json" -d '{"prompt":"ultrarealistic shot of a furry blue bird"}' 服务端打印如下信息,表示发送请求成功。 带controlnet时,可以读取本地图片得到输入参数。 from diffusers.utils import load_image from io import BytesIO import base64 def image_to_base64(img_path): image = load_image(img_path) buffered = BytesIO() image.save(buffered, format="PNG") return base64.b64encode(buffered.getvalue())
  • 附录1:请求参数表 使用curl命令发送请求的请求参数表如下。 表1 请求参数列表 参数 说明 prompt 正向文本,必选 negative_prompt 负向文本,非必选 height 图像高度,非必选 width 图像宽度,非必选 num_inference_steps 对图片进行噪声优化的次数,非必选 denoising_end 二阶段去噪,非必选 refiner_switch refiner模型开关,是否开启refiner,非必选 seed 添加噪音的随机数种子,非必选 image_path 带controlnet时需要,此时image_path需要赋值null,传入图片的base64编码值,非必选 image_base64 带controlnet时需要,和image_path二选一,传入图片的base64编码值,非必选
  • Step1 准备环境 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买DevServer资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 检查环境。 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装NPU设备和驱动,或释放被挂载的NPU。 检查docker是否安装。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置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}为: 西南-贵阳一:swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_7.0.0-py_3.9-hce_2.0.2312-aarch64-snt9b-20240312154948-219655b docker pull {image_url} 启动容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。 docker run -itd \ --name sdxl-diffusers \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -p 8443:8443 \ -v /etc/localtime:/etc/localtime \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ --shm-size 60g \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device=/dev/devmm_svm \ --device=/dev/davinci3 \ --network=bridge \ ${image_name} bash 参数说明: --name ${conta iner_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如sdxl-diffusers。 --device=/dev/davinci3:挂载主机的/dev/davinci3到容器的/dev/davinci3。可以使用npu-smi info查看空闲卡号,修改davinci后数字可以更改挂载卡。 ${image_name} 代表 ${image_name}。 进入容器。需要将${container_name}替换为实际的容器名称,例如:sdxl-diffusers。 docker exec -it ${container_name} bash
  • Step7 精度对比 由于NPU和GPU生成的随机数不一样,需要固定二者的随机数再进行精度对比。通常的做法是先用GPU单卡跑一遍训练,生成固定下来的随机数。然后NPU和GPU都用固定的随机数进行单机8卡训练,比较精度。 训练精度对齐。对齐前2000步的loss,观察loss在极小误差范围内。 GPU环境下,使用Github中的官方代码跑训练任务。Github中的官方代码下载路径:https://github.com/hpcaitech/Open-Sora/tree/v1.0.0 在NPU代码 configs/opensora/train/64x512x512.py中把 epochs = 200000 临时改成 epochs = 2000 图10 配置文件64x512x512.py 修改训练步数 将NPU代码中configs/opensora/train/64x512x512.py文件和configs/opensora/inference/64x512x512.py文件复制到GPU代码目录中,使用相同的参数配置文件。 将NPU代码目录中的opensora/schedulers/iddpm/__init__.py文件和opensora/schedulers/iddpm/gaussian_diffusion.py文件复制到GPU代码目录中,添加固定随机数功能。 进行GPU单机八卡训练,生成固定训练随机数,随机数会保存在noise文件夹中。 mkdir noise_train #创建文件夹noise_train,用于存放生成的随机数 export LOCK_RAND=True #是否固定随机数 export SAVE_RAND=True #是否保存生成的随机数 export NOISE_PATH="./noise_train" #将生成的随机数保存在"./noise_train"目录 torchrun --nnodes=1 --nproc_per_node=8 train.py configs/opensora/train/64x512x512.py 正常训练时不需要增加如下命令,只有训练精度对比时需要。 export LOCK_RAND=True #是否固定随机数 export SAVE_RAND=True #是否保存生成的随机数 export NOISE_PATH="./noise_train" #将生成的随机数保存在"./noise_train"目录 在NPU和GPU机器使用上面生成的固定随机数,分别跑一遍单机8卡训练,比较在相应目录下生成的loss.txt文件。在NPU训练前,需要将上面GPU单机单卡训练生成的"./noise_train"文件夹移到NPU相同目录下。NPU和GPU的训练命令相同,如下。 export LOCK_RAND=True export SAVE_RAND=False export NOISE_PATH="./noise_train" torchrun --nnodes=1 --nproc_per_node=8 train.py configs/opensora/train/64x512x512.py GPU和NPU训练脚本中的参数要保持一致,除了参数dtype。NPU环境下,dtype="fp16",GPU环境下,dtype="bf16"。 基于NPU训练后的权重文件和GPU训练后的权重文件,对比推理精度。推理精度对齐流程和训练精度对齐流程相同,先在GPU固定推理的随机数。 mkdir noise_test1 #创建文件夹noise_test1,用于存放生成的随机数 export LOCK_RAND=True #是否固定随机数 export SAVE_RAND=True #是否保存生成的随机数 export NOISE_PATH="./noise_test1" #将生成的随机数保存在"./noise_test1"目录 export CKPT_PATH=./outputs/.../ #由训练日志中获得,例如outputs/010-F16S3-STDiT-XL-2/epoch1-global_step2000/ torchrun --standalone --nproc_per_node 1 inference.py configs/opensora/inference/64x512x512.py --ckpt-path $CKPT_PATH 在NPU和GPU机器使用上面生成的固定随机数,分别跑一遍单机单卡推理,比较生成的视频是否一致。在NPU推理前,需要将上面GPU单机单卡推理生成的"./noise_test1"文件夹移到NPU相同目录下。NPU和GPU的推理命令相同,如下。 export LOCK_RAND=True export SAVE_RAND=False export NOISE_PATH="./noise_test1" export CKPT_PATH=./outputs/.../ #由训练日志中获得,例如outputs/010-F16S3-STDiT-XL-2/epoch1-global_step2000/ torchrun --standalone --nproc_per_node 1 inference.py configs/opensora/inference/64x512x512.py --ckpt-path $CKPT_PATH 基于官方权重文件分别在GPU和NPU进行推理,对比推理精度。推理精度对齐流程和训练精度对齐流程相同,先在GPU固定推理的随机数。 mkdir noise_test2 #创建文件夹noise_test2,用于存放生成的随机数 export LOCK_RAND=True #是否固定随机数 export SAVE_RAND=True #是否保存生成的随机数 export NOISE_PATH="./noise_test2" #将生成的随机数保存在"./noise_test2"目录 torchrun --standalone --nproc_per_node 1 inference.py configs/opensora/inference/64x512x512.py --ckpt-path ./OpenSora-v1-HQ-16x512x512.pth 在NPU和GPU机器使用上面生成的固定随机数,分别跑一遍单机单卡推理,比较生成的视频是否一致。在NPU推理前,需要将上面GPU单机单卡推理生成的"./noise_test2"文件夹移到NPU相同目录下。NPU和GPU的推理命令相同,如下。 export LOCK_RAND=True export SAVE_RAND=False export NOISE_PATH="./noise_test2" torchrun --standalone --nproc_per_node 1 inference.py configs/opensora/inference/64x512x512.py --ckpt-path ./OpenSora-v1-HQ-16x512x512.pth
  • Step5 启动训练服务 训练至少需要单机8卡。建议手动下载所需的权重文件,放在weights文件夹下。在/home/ma-user/ascendcloud-aigc-algorithm-open_sora/目录下进行操作。 创建weights文件夹。 mkdir weights 下载基础模型权重:PixArt-XL-2-512x512.pth和PixArt-XL-2-256x256.pth cd weights # 下载PixArt-XL-2-512x512.pth和PixArt-XL-2-256x256.pth wget https://huggingface.co/PixArt-alpha/PixArt-alpha/resolve/main/PixArt-XL-2-512x512.pth wget https://huggingface.co/PixArt-alpha/PixArt-alpha/resolve/main/PixArt-XL-2-256x256.pth 下载VAE权重:sd-vae-ft-ema 在weights文件夹下创建sd-vae-ft-ema文件夹。 mkdir sd-vae-ft-ema 然后进入官网地址: https://huggingface.co/stabilityai/sd-vae-ft-ema/tree/main,手动下载如图2所示四个文件,并上传到服务器的/home/ma-user/ascendcloud-aigc-algorithm-open_sora/weights/sd-vae-ft-ema/目录下。 图2 Huggingface中sd-vae-ft-ema模型目录内容 上传完成后,weights/sd-vae-ft-ema/目录内容如图3所示。 图3 服务器 weights/sd-vae-ft-ema/目录内容 下载Encoder模型权重:DeepFloyd/t5-v1_1-xxl 在weights文件夹下创建t5-v1_1-xxl文件夹。 mkdir t5-v1_1-xxl 然后进入官网地址 https://huggingface.co/DeepFloyd/t5-v1_1-xxl/tree/main,手动下载如图4所示文件,并放到 /home/ma-user/ascendcloud-aigc-algorithm-open_sora/weights/t5-v1_1-xxl 文件夹下。 图4 Huggingface中t5-v1_1-xxl模型目录内容 上传完成后,weights/t5-v1_1-xxl/目录下内容如图5所示。 图5 服务器 weights/t5-v1_1-xxl/目录内容 最后weights文件夹下内容目录如图6所示。 图6 服务器weights目录 从weights目录下返回到代码目录下。 cd .. 在/home/ma-user/ascendcloud-aigc-algorithm-open_sora/目录下执行如下命令启动训练脚本。 torchrun --nnodes=1 --nproc_per_node=8 train.py configs/opensora/train/64x512x512.py 正常训练过程如下图所示。训练完成后,关注loss值,loss曲线收敛,记录总耗时和单步耗时。训练过程中,训练日志会在最后的Rank节点打印。可以使用可视化工具TrainingLogParser查看loss收敛情况。 图7 正常训练过程 训练完成后权重保存在自动生成的目录,例如:outputs/010-F16S3-STDiT-XL-2/epoch1-global_step2000/。 图8 训练完成后权重保存信息
  • Step4 下载数据集 训练使用的开源数据集UCF101.rar,执行如下命令下载数据集并处理。数据集相关介绍参见https://www.crcv.ucf.edu/data/UCF101.php。 mkdir datasets cd datasets wget https://www.crcv.ucf.edu/data/UCF101/UCF101.rar unrar x UCF101.rar cd .. python -m tools.datasets.convert_dataset ucf101 ./datasets/ --split UCF-101 mv ucf101_UCF-101.csv datasets/
  • Step6 推理 执行如下命令使用官方权重推理。推理脚本inference.py 会自动下载官方权重文件。 torchrun --standalone --nproc_per_node 1 inference.py configs/opensora/inference/64x512x512.py --ckpt-path ./OpenSora-v1-HQ-16x512x512.pth 如果自动下载官方权重文件OpenSora-v1-HQ-16x512x512.pth失败,建议手动下载权重文件并上传到容器/home/ma-user/ascendcloud-aigc-algorithm-open_sora/目录中。 "OpenSora-v1-HQ-16x512x512.pth": "https://huggingface.co/hpcai-tech/Open-Sora/resolve/main/OpenSora-v1-HQ-16x512x512.pth" 执行如下命令使用训练后生成的权重推理。训练完成后会在工作目录/home/ma-user/ascendcloud-aigc-algorithm-open_sora/下自动生成一个outputs文件夹,训练后生成的权重文件存放在outputs文件夹中,例如outputs/010-F16S3-STDiT-XL-2/epoch1-global_step2000/。 export CKPT_PATH=./outputs/.../ #由训练日志中获得 torchrun --standalone --nproc_per_node 1 inference.py configs/opensora/inference/64x512x512.py --ckpt-path $CKPT_PATH 如果要使用自己的prompt进行推理,可以修改用户自己推理脚本配置文件中prompt_path。例如在configs/opensora/inference/64x512x512.py配置文件中,使用了自己的prompt文件overfit.txt。 图9 修改prompt_path
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-3rdAIGC-6.3.905-xxx.zip 文件名中的xxx表示具体的时间戳,以包名的实际时间为准。 获取路径:Support-E 如果没有软件下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像包 swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc2-py_3.9-hce_2.0.2312-aarch64-snt9b-20240528150158-b521cc0 SWR上拉取
  • Step2 启动镜像 获取基础镜像。建议使用官方提供的镜像。镜像地址{image_url}参见表2。 docker pull {image_url} 启动容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。训练至少需要单机8卡,推理需要单机单卡。 export work_dir="自定义挂载的工作目录" export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称" // 启动一个容器去运行镜像 docker run -itd \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ --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 /etc/ascend_install.info:/etc/ascend_install.info \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ --shm-size 80g \ --net=bridge \ -v ${work_dir}:${container_work_dir} \ --name ${container_name} \ ${image_name} bash 参数说明: device=/dev/davinci0,..., --device=/dev/davinci7:挂载NPU设备,示例中挂载了8张卡davinci0~davinci7。 ${work_dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的大文件系统,work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_dir为要挂载到的容器中的目录。为方便两个地址可以相同。 shm-size:共享内存大小,建议不低于80GB。 name ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 v ${work_dir}:${container_work_dir}:代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同。 ${image_name}:代表镜像地址。 容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。 进入容器。需要将${container_name}替换为实际的容器名称。 docker exec -it ${container_name} bash 启动容器默认使用ma-user用户。后续所有命令执行也建议使用ma-user用户。
  • Step1 检查环境 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买DevServer资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 SSH登录机器后,检查NPU卡状态。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装NPU设备和驱动,或释放被挂载的NPU。 检查是否安装docker。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置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
  • Step3 获取代码包并安装依赖 下载插件代码包AscendCloud-3rdAIGC-6.3.905-xxx.zip文件,上传到容器的/home/ma-user/目录下,解压并安装相关依赖。获取路径参见获取软件和镜像。 mkdir -p /home/ma-user/ascendcloud-aigc-algorithm-open_sora #创建目录 cd /home/ma-user/ascendcloud-aigc-algorithm-open_sora/ #进入目录 unzip -zxvf AscendCloud-3rdAIGC-6.3.905-*.zip tar -zxvf ascendcloud-aigc-algorithm-open_sora.tar.gz rm -rf AscendCloud-3rdAIGC-6.3.905-* 安装Python环境。 pip install -r requirements.txt cp attention_processor.py /home/ma-user/anaconda3/envs/PyTorch-2.1.0/lib/python3.9/site-packages/diffusers/models/attention_processor.py cp low_level_optim.py /home/ma-user/anaconda3/envs/PyTorch-2.1.0/lib/python3.9/site-packages/colossalai/zero/low_level/low_level_optim.py
  • query命令详解 timeline:单独对推理、训练timeline性能数据进行单算子详情查询,根据算子名称以及任务类型(AI_CPU|AI_CORE)进行查询,算子查询统计信息输出到运行终端,并在执行目录下的"log/ma_advisor.xlsx"文件中给出相关算子详细信息。 ma-advisor query timeline --data-dir='/temp/profiling_dir' --op_name='Mul' --task_type='AI_CPU'
  • auto-completion命令详解 支持自动补全模式,在终端中自动完成ma-advisor命令补全,支持“bash(默认)/zsh/fish”。 ma-advisor auto-completion Bash 图12 提示 根据提示,在terminal中输入对应的命令即可开启在bash中对MA-Advisor相关命令自动补全功能,例如,执行如下命令后,即可在bash命令行中,后续执行ma-advisor相关命令时,使用Tab键即可自动补全: eval "$(_MA_ADVISOR_COMPLETE=bash_source ma-advisor)"
  • analyze命令详解 all:同时进行融合算子图调优、亲和API替换调优、AICPU调优、算子调优等分析,并输出相关简略建议到执行终端中,并生成“ma_advisor_**.html”文件可供用户在浏览器中进行预览: ma-advisor analyze all --data-dir='/temp/profiling_dir' 图2 命令样例 命令执行后同时会生成各场景优化建议的html,相关算子问题概览会按照不同建议进行汇总。 图3 生成结果 表1 参数解释 参数 缩写 是否必填 说明 --data-dir -d 必填 代表存储Profiling单卡性能数据的目录,目前暂不支持同时分析多卡Profiling目录,Profiling数据可通过如下方法获取: 在执行推理或训练程序时,请参见“Profiling工具使用指南”完成Profiling数据的采集、解析与导出(您可以在昇腾文档页面左上角切换版本,选择对应版本的指导文档)。数据采集时需要配置“aic-metrics”参数为“PipeUtilization”,“aicpu”参数为“on”。 MA-Advisor依赖Profiling工具解析后的timeline数据、summary数据以及info.json*文件,请确保指定的“profiling_dir”目录下存在以上文件。 --cann_version -cv 选填 使用Profiling工具采集时对应的CANN软件版本,可通过在环境中执行如下命令获取其version字段,目前配套的兼容版本为“6.3.RC2”,“7.0.RC1”和“7.0.0”,此字段不填默认按“7.0.RC1”版本数据进行处理,其余版本采集的Profiling数据在分析时可能会导致不可知问题: cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info --torch_version -tv 选填 运行环境的torch版本,默认为1.11.0,支持torch1.11.0和torch2.1.0,当运行环境torch版本为其他版本如torch1.11.3时,可以忽略小版本号差异选择相近的torch版本如1.11.0。 --debug -D 选填 工具执行报错时可打开此开关,将会展示详细保存堆栈信息。 --help -h,-H 选填 在需要查询当前命令附属子命令或相关参数时,给出帮助建议。 graph:单独对推理dump的子图数据进行调优,并在分析完成后,给出相关建议到终端中,并生成“ma_advisor_graph_**.html”文件到执行目录中,目前暂不支持同时分析多卡推理性能数据: ma-advisor analyze graph --data-dir='/temp/profiling_dir' 图4 命令样例 命令执行后生成融合算子优化建议的html,相关融合算子问题概览会按照不同融合算子类型进行汇总。 图5 生成结果 表2 参数解释 参数 缩写 是否必填 说明 --data-dir -d 必填 代表存储Profiling单卡性能数据的目录,目前暂不支持同时分析多卡Profiling目录,Profiling数据可通过如下方法获取: 在执行推理或训练程序时,请参见“Profiling工具使用指南”完成Profiling数据的采集、解析与导出(您可以在昇腾文档页面左上角切换版本,选择对应版本的指导文档)。数据采集时需要配置“aic-metrics”参数为“PipeUtilization”,“aicpu”参数为“on”, “with_stack”参数为True。 MA-Advisor 依赖Profiling工具解析后的timeline数据、summary数据以及info.json*文件,请确保指定的“profiling_dir”目录下存在以上文件。 --cann_version -cv 选填 使用Profiling工具采集时对应的CANN软件版本,可通过在环境中执行如下命令获取其version字段,目前配套的兼容版本为“6.3.RC2”,“7.0.RC1”和“7.0.0”,此字段不填默认按“7.0.RC1”版本数据进行处理,其余版本采集的Profiling数据在分析时可能会导致不可知问题: cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info --debug -D 选填 工具执行报错时可打开此开关,将会展示详细保存堆栈信息。 --help -h,-H 选填 在需要查询当前命令附属子命令或相关参数时,给出帮助建议。 profiling:单独对推理、训练Profiling性能数据进行算子调优分析,在分析完成后,给出相关分析说明到执行终端中,并生成“ma_advisor_profiling_**.html”文件到执行目录中,目前暂不支持同时分析多卡Profiling性能数据。 ma-advisor analyze profiling --data-dir='/temp/profiling_dir' 图6 命令样例 命令执行后生成AICORE算子使用AOE配置优化建议、AICPU算子优化建议的html,目前由于AOE优化不支持动态shape算子优化,因此若检测到算子均为动态shape时,将不会推荐AOE调优;除此之外,单算子问题概览会按照不同算子类型进行汇总,同时根据耗时大小进行降序显示。 图7 生成结果 表3 参数解释 参数 缩写 是否必填 说明 --data-dir -d 必填 代表存储Profiling单卡性能数据的目录,目前暂不支持同时分析多卡Profiling目录,Profiling数据可通过如下方法获取: 在执行推理或训练程序时,请参见“Profiling工具使用指南”完成Profiling数据的采集、解析与导出(您可以在昇腾文档页面左上角切换版本,选择对应版本的指导文档)。数据采集时需要配置“aic-metrics”参数为“PipeUtilization”,“aicpu”参数为“on”。MA-Advisor依赖Profiling工具解析后的timeline数据、summary数据以及info.json*文件,请确保指定的“profiling_dir”目录下存在以上文件。 --cann_version -cv 选填 使用Profiling工具采集时对应的CANN软件版本,可通过在环境中执行如下命令获取其version字段,目前配套的兼容版本为“6.3.RC2”,“7.0.RC1”和“7.0.0”,此字段不填默认按“7.0.RC1”版本数据进行处理,其余版本采集的Profiling数据在分析时可能会导致不可知问题: cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info --ntework_type -t 选填 “train”或者“infer”,不填默认为“train”。 --debug -D 选填 工具执行报错时可打开此开关,将会展示详细保存堆栈信息。 --help -h,-H 选填 在需要查询当前命令附属子命令或相关参数时,给出帮助建议。 timeline:单独对推理、训练timeline性能数据进行亲和API调优分析,在分析完成后,给出相关亲和API分析说明到执行终端中,并生成“ma_advisor_timeline_**.html”文件到执行目录中,目前暂不支持同时分析多卡Profiling性能数据。 ma-advisor analyze timeline --data-dir='/temp/profiling_dir' 图8 命令样例 命令执行后生成亲和API相关优化建议的html,将会按建议替换的亲和API进行汇总聚类,同时给出对应待替换API的堆栈信息。 图9 生成结果 表4 参数解释 参数 缩写 是否必填 说明 --data-dir -d 必填 代表存储Profiling单卡性能数据的目录,目前暂不支持同时分析多卡Profiling目录,Profiling数据可通过如下方法获取: 在执行推理或训练程序时,请参见“Profiling工具使用指南”完成Profiling数据的采集、解析与导出(您可以在昇腾文档页面左上角切换版本,选择对应版本的指导文档)。数据采集时需要配置“aic-metrics”参数为“PipeUtilization”,“aicpu”参数为“on”, “with_stack”参数为True。 MA-Advisor 依赖Profiling工具解析后的timeline数据、summary数据以及info.json*文件,请确保指定的“profiling_dir”目录下存在以上文件。 --cann_version -cv 选填 使用Profiling工具采集时对应的CANN软件版本,可通过在环境中执行如下命令获取其version字段,目前配套的兼容版本为“6.3.RC2”,“7.0.RC1”和“7.0.0”,此字段不填默认按“7.0.RC1”版本数据进行处理,其余版本采集的Profiling数据在分析时可能会导致不可知问题: cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info --debug -D 选填 工具执行报错时可打开此开关,将会展示详细保存堆栈信息。 --help -h,-H 选填 在需要查询当前命令附属子命令或相关参数时,给出帮助建议。
共100000条