华为云用户手册

  • 使用MME精度测评工具进行多模态模型精度评测 MME数据集获取。 请用户自行获取MME评估集,将MME评估集上传至llm_tools/llm_evaluation/mme_eval/data/eval/目录中。 获取精度测试代码。精度测试代码存放在代码包AscendCloud-LLM的llm_tools/llm_evaluation/mme_eval目录中,代码目录结构如下。 mme_eval ├──metric.py #MME精度测试脚本 ├──MME.sh #运行MME脚本 启动MME精度测试脚本。 export MODEL_PATH=/data/nfs/model/InternVL2_5-38B export MME_PATH=/llm_tools/llm_evaluation/mme_eval/data/eval/MME export MODEL_TYPE=internvl2_5 export OUTPUT_NAME=InternVL2_5-38B export ASCEND_RT_VISIBLE_DEVI CES ="0,1,2,3,4,5,6,7" bash MME.sh 参数说明: MODEL_PATH:模型权重路径,默认为空。 MME_PATH:MME数据集路径,默认当前路径。 MODEL_TYPE:模型类型。当前可选模型类型包括:internvl2_5、qwen2.5-vl。 OUTPUT_NAME:输出结果文件名称, 默认llava。 ASCEND_RT_VISIBLE_DEVICES:表示支持多个模型服务实例,同时支持模型并行,如 0,1:2,3,以冒号切分,表示0卡和1卡跑一个模型服务实例,2卡和3卡跑一个模型服务实例。默认为0卡只跑一个模型服务实例。 QUANTIZATION:为量化选项,不传入默认为None即不启用量化;支持w4a16,需配套对应的权重使用。 GPU_MEMORY_UTILIZATION:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。 DISTRIBUTED_EXECUTOR_BACKEND:分布式服务使用的后端,默认为 None,表示"mp"(多进程)。可设为"ray"。 脚本运行完成后,测试结果输出在终端。
  • 步骤五:Wan2.1文生视频推理 下载模型权重 下载权重文件至容器目录,需要用到的模型地址如下。 Wan-AI/Wan2.1-T2V-14B-Diffusers,地址:https://huggingface.co/Wan-AI/Wan2.1-T2V-14B-Diffusers Wan-AI/Wan2.1-T2V-1.3B-Diffusers, 地址:https://huggingface.co/Wan-AI/Wan2.1-T2V-1.3B-Diffusers 进行推理 修改inference.sh参数,使用此脚本开始推理任务。 cd /home/ma-user/Wan2_1 bash inference.sh inference.sh脚本参数介绍如下。 # If using T2V-1.3B, set this variable 'RESIDUAL_DIFF_THRESHOLD' to 0.03, default 0.04 export RESIDUAL_DIFF_THRESHOLD=0.04 export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 N_GPUS=8 torchrun --nproc_per_node=$N_GPUS infer.py --ckpt_dir Wan-AI/Wan2.1-T2V-14B-Diffusers --output_path ./output.mp4 --size 720*1280 RESIDUAL_DIFF_THRESHOLD: 为残差阈值,默认为0.04。使用T2V-14B推理时,修改为0.04,当使用T2V-1.3B模型进行推理时,修改为0.03,视频效果更好。 ASCEND_RT_VISIBLE_DEVICES : 使用的卡号。 N_GPUS : 使用卡数量。T2V-14B支持8卡推理,T2V-1.3B支持4卡推理。 --ckpt_dir :为模型权重路径。 --output_path :视频结果输出目录地址。 --size:生成视频的尺寸(高*宽)。使用T2V-14B推理时,尺寸设置为720*1280,当使用T2V-1.3B进行推理时,尺寸设置为480*832。 推理成功结果参考如下图:
  • 步骤三:启动容器镜像 启动容器镜像。启动前请先按照参数说明修改${}中的参数。 export work_dir="自定义挂载的工作目录" export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称或ID" // 启动一个容器去运行镜像 docker run -itd --net=bridge \ --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 \ --shm-size=256g \ -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为要挂载到的容器中的目录。为方便两个地址可以相同。 容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 --name ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 ${image_name}:容器镜像的名称。 --device=/dev/davinci0 :挂载对应卡到容器,当需要挂载多卡,请依次添加多项该配置。 通过容器名称进入容器中。默认使用ma-user用户,后续所有操作步骤都在ma-user用户下执行。 docker exec -it ${container_name} bash
  • 步骤一:准备环境 请参考Lite Server资源开通,购买Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的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
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.5.902-xxx.zip软件包中的AscendCloud-AIGC-6.5.902-xxx.zip 说明: 包名中的xxx表示具体的时间戳,以包名的实际时间为准。 获取路径:Support-E,在此路径中查找下载ModelArts 6.5.902 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像 西南-贵阳一: swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.0-py_3.10-hce_2.0.2412-aarch64-snt9b-20250207103006-97ebd68 从SWR拉取。
  • 步骤四:安装依赖和软件包 git clone和git lfs下载大模型可以参考如下操作。 由于欧拉源上没有git-lfs包,所以需要从压缩包中解压使用,在浏览器中输入如下地址下载git-lfs压缩包并上传到容器的/home/ma-user目录下。 https://github.com/git-lfs/git-lfs/releases/download/v3.2.0/git-lfs-linux-arm64-v3.2.0.tar.gz 或直接下载到容器,这样在容器中可以直接使用。 cd /home/ma-user wget https://github.com/git-lfs/git-lfs/releases/download/v3.2.0/git-lfs-linux-arm64-v3.2.0.tar.gz 进入容器,执行安装git lfs命令。 cd /home/ma-user tar -zxvf git-lfs-linux-arm64-v3.2.0.tar.gz cd git-lfs-3.2.0 sudo sh install.sh 设置git配置去掉ssl校验。 git config --global http.sslVerify false 安装Wan2.1 Ascend软件包。 将获取到的Wan2.1 Ascend软件包AscendCloud-AIGC-*.zip文件上传到容器的/home/ma-user目录下。获取路径参见获取软件和镜像。 解压AscendCloud-AIGC-*.zip文件,解压后按照步骤安装Python依赖,执行以下命令即可。 cd /home/ma-user unzip AscendCloud-AIGC-*.zip -d ./AscendCloud cp -r /home/ma-user/AscendCloud/multimodal_algorithm/Wan2_1 ./ cd /home/ma-user/Wan2_1 pip install -r requirements.txt git clone https://github.com/huggingface/diffusers cd diffusers git checkout d55f41102a93e7fa7736516e06e023b2baf73f54 pip install -e . Wan2.1 Ascend软件包内容如下: . |---- AscendX_Video.cpython-310-aarch64-linux-gnu.so torch-npu适配修改so |---- infer.py 推理代码 |---- inference.sh 推理脚本 |---- README.md 适配文档说明 |---- requirements.txt python依赖 |---- sp_fsdp.cpython-310-aarch64-linux-gnu.so torch-npu适配修改so
  • 上传代码和权重文件到工作环境 使用root用户以SSH的方式登录Lite Server。 将AscendCloud代码包AscendCloud-xxx-xxx.zip上传到${workdir}目录下并解压缩,如SFS Turbo的路径:/mnt/sfs_turbo目录下,以下都以/mnt/sfs_turbo为例,请根据实际修改。 unzip AscendCloud-*.zip unzip AscendCloud-LLM-*.zip 上传tokenizers文件,如Qwen2-7B权重到工作目录中的/mnt/sfs_turbo/model/Qwen2-7B目录下。具体步骤如下: 进入到${workdir}目录下,如:/mnt/sfs_turbo,创建tokenizers文件目录将权重和词表文件放置此处,以Llama2-70B为例。 cd /mnt/sfs_turbo mkdir -p models/Qwen2-7B
  • 上传数据到指定目录 教程使用到的训练数据集是Alpaca数据集,您也可以自行准备数据集;数据可参考数据说明,数据集准备具体步骤如下: 进入到/mnt/sfs_turbo/目录下。 创建目录“training_data”,并将原始数据放置在此处。 mkdir training_data 数据存放参考目录结构如下: ${workdir} |── training_data |── train-00000-of-00001-a09b74b3ef9c3b56.parquet # 训练原始数据集 |── alpaca_gpt4_data.json # 微调数据文件
  • 步骤三:ComfyUI部署 安装依赖和模型包 下载ComfyUI源码并切换分支。 git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI git checkout v0.3.7 如果上述方法无法下载ComfyUI源码,可参考如下操作,手动下载到本地再上传到容器中,如图1所示。 登录https://github.com/comfyanonymous/ComfyUI页面,切换Tag为v0.3.7,单击Code按钮,通过Download ZIP下载ComfyUI源码到本地。 图1 下载ComfyUI源码 访问Github下载开源软件需要连通外网,请用户自行配置网络代理。 将下载好的ComfyUI-0.3.7.zip文件上传到容器的/home/ma-user/目录下,并解压。 cd /home/ma-user/ unzip ComfyUI-0.3.7.zip cd ComfyUI-0.3.7 安装依赖,将requirements.txt中的torch修改为torch==2.1.0。 pip install -r requirements.txt 下载模型权重。 sd1.5:将v1-5-pruned-emaonly.safetensors复制到ComfyUI/models/checkpoints目录下。 https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors sdxl:将sd_xl_base_1.0.safetensors复制到ComfyUI/models/checkpoints目录下。 https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors sd3:将sd3_medium.safetensors复制到ComfyUI/models/checkpoints目录下。 https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/sd3_medium.safetensors 此外需要额外下载三个text_encoder相关模型:复制到ComfyUI/models/clip目录下。 https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/text_encoders/clip_g.safetensors https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/text_encoders/clip_l.safetensors https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/text_encoders/t5xxl_fp16.safetensors ComfyUI框架还需要下载推理所需的workflow: https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/comfy_example_workflows/sd3_medium_example_workflow_basic.json sd3.5:将sd3.5_medium.safetensors复制到ComfyUI/models/checkpoints目录下。 https://huggingface.co/stabilityai/stable-diffusion-3.5-medium/blob/main/sd3.5_medium.safetensors 此外需要额外下载三个text_encoder相关模型:复制到ComfyUI/models/clip目录下。 https://huggingface.co/Comfy-Org/stable-diffusion-3.5-fp8/blob/main/text_encoders/clip_l.safetensors https://huggingface.co/Comfy-Org/stable-diffusion-3.5-fp8/blob/main/text_encoders/clip_g.safetensors https://huggingface.co/Comfy-Org/stable-diffusion-3.5-fp8/blob/main/text_encoders/t5xxl_fp16.safetensors ComfyUI框架还需要下载推理所需的workflow: https://huggingface.co/stabilityai/stable-diffusion-3.5-medium/blob/main/SD3.5M_example_workflow.json flux.1-dev:将flux1-dev.safetensors复制到ComfyUI/models/unet目录下。 https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/flux1-dev.safetensors 将ae.safetensors复制到ComfyUI/models/vae目录下。 https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/ae.safetensors 此外需要额外下载三个text_encoder相关模型:复制到ComfyUI/models/clip目录下。 https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/text_encoders/clip_g.safetensors https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/text_encoders/clip_l.safetensors https://huggingface.co/stabilityai/stable-diffusion-3-medium/blob/main/text_encoders/t5xxl_fp16.safetensors ComfyUI框架还需要下载推理所需的workflow: https://openart.ai/workflows/datou/flux1-dev/KnSeTKHjvuTd0RiUDSmW 安装插件代码包。 将获取到的插件代码包AscendCloud-AIGC-xxx.zip和AscendCloud-OPP-6.5.902-torch-xxx.zip文件上传到容器的/home/ma-user/目录下,并解压。 cd /home/ma-user/ unzip AscendCloud-AIGC-*.zip #解压 unzip AscendCloud-OPP-6.5.902-torch-*.zip 进入ComfyUI/custom_nodes目录下,将解压AIGC包后获取的aigc_inference/torch_npu/comfyui/0.3.7/comfyui_ascend_node文件夹复制到该目录下。 cd ComfyUI/custom_nodes cp -r /home/ma-user/aigc_inference/torch_npu/comfyui/0.3.7/comfyui_ascend_node /home/ma-user/ComfyUI/custom_nodes 进入到获取的aigc_inference/torch_npu/utils/ascend_diffusers目录下进行安装。 cd /home/ma-user/aigc_inference/torch_npu/utils/ascend_diffusers pip install -e . 进入到获取的aigc_inference/torch_npu/utils/AscendX-MM目录下进行安装。 cd /home/ma-user/aigc_inference/torch_npu/utils/AscendX-MM pip install -e . 进入到/home/ma-user/目录下安装ascend_cloud_ops cd /home/ma-user/ pip install ascend_cloud_ops_custom-6.5.902-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl bash ascend_cloud_ops_custom_opp-6.5.902_linux_aarch64_ascend910b.run --install-path=/home/ma-user/ source /home/ma-user/vendors/customize/bin/set_env.bash 如果运行时出现Cannot find bin of op MatMulV2的报错,则在prestartup_script.py文件中注释以下代码。 torch_npu.npu.set_compile_mode(jit_compile=False)
  • 获取软件和镜像 表1 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.5.902软件包中的AscendCloud-AIGC-6.5.902-xxx.zip和AscendCloud-OPP-6.5.902-torch-xxx.zip 文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。 获取路径:Support-E,在此路径中查找下载ModelArts 6.5.902 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像 西南-贵阳一 snt9b: swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.0-py_3.10-hce_2.0.2412-aarch64-snt9b-20250207103006-97ebd68 从SWR拉取。
  • 步骤二:Diffusers部署 安装依赖和模型包 使用如下命令登录huggingface,并输入个人账号的token,用于自动下载模型权重。 登录成功后,直接启动Diffusers推理脚本即可实现自动下载。 huggingface-cli login 也可以手动下载模型权重,上传到容器的/home/ma-user目录下,官网下载地址(需登录)。 SD1.5下载链接:https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5 SDXL下载链接:https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main SD3下载链接:https://huggingface.co/stabilityai/stable-diffusion-3-medium-diffusers/tree/main SD3.5-medium下载链接:https://huggingface.co/stabilityai/stable-diffusion-3.5-medium/tree/main SD3.5-large下载链接:https://huggingface.co/stabilityai/stable-diffusion-3.5-large/tree/main FLUX.1-dev下载链接:https://huggingface.co/black-forest-labs/FLUX.1-dev/tree/main HUNYUAN下载链接:https://huggingface.co/Tencent-Hunyuan/HunyuanDiT-Diffusers/tree/main 安装插件代码包。 将获取到的插件代码包AscendCloud-AIGC-xxx.zip文件上传到容器的/home/ma-user/temp目录下,并解压。 cd /home/ma-user/temp unzip AscendCloud-AIGC-*.zip #解压 将AIGC包解压后,进入到获取的/home/ma-user/temp/aigc_inference/torch_npu/utils/ascend_diffusers目录下进行安装。 cd /home/ma-user/temp/aigc_inference/torch_npu/utils/ascend_diffusers pip install -e . 将AIGC包解压后,进入到获取的/home/ma-user/temp/aigc_inference/torch_npu/utils/AscendX-MM目录下进行安装。 cd /home/ma-user/temp/aigc_inference/torch_npu/utils/AscendX-MM pip install -e . 启动服务
  • 步骤一:准备环境 请参考Lite Server资源开通,购买Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买Server资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 检查环境。 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info 如出现错误,可能是机器上的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}参见表1。 docker pull {image_url} 启动容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。 docker run -itd \ --name ${container_name} \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -p 8183:8183 \ -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 ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如comfyui。 --device=/dev/davinci3:挂载主机的/dev/davinci3到容器的/dev/davinci3。可以使用npu-smi info查看空闲卡号,修改davinci后数字可以更改挂载卡。若需要启动多卡推理服务,则需要挂载多卡,例如再添加一个--device=/dev/davinci2 ${image_name} 代表 ${image_name}。 -p 8183:8183 开启一个端口,可以通过web访问,如冲突,可自行更换其他端口。 进入容器。需要将${container_name}替换为实际的容器名称,例如:comfyui。 docker exec -it ${container_name} bash
  • 步骤六:编写Config.yaml文件 首先给出单个节点训练的config.yaml文件模板,用于配置pod。而在训练中,需要按照参数说明修改${}中的参数值。该模板使用SFS Turbo挂载方案。 apiVersion: v1 kind: ConfigMap metadata: name: configmap1980-vcjob # 前缀使用“configmap1980-”不变,后接vcjob的名字 namespace: default # 命名空间自选,需要和下边的vcjob处在同一命名空间 labels: ring-controller.cce: ascend-1980 # 保持不动 data: # data内容保持不动,初始化完成,会被volcano插件自动修改 jobstart_hccl.json: | { "status":"initializing" } --- apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: vcjob # job名字,需要和configmap中名字保持联系 namespace: default # 和configmap保持一致 labels: ring-controller.cce: ascend-1980 # 保持不动 fault-scheduling: "force" spec: minAvailable: 1 schedulerName: volcano # 保持不动 policies: - event: PodEvicted action: RestartJob plugins: configmap1980: - --rank-table-version=v2 # 保持不动,生成v2版本ranktablefile env: [] svc: - --publish-not-ready-addresses=true maxRetry: 5 queue: default tasks: - name: main replicas: 1 template: metadata: name: training labels: app: ascendspeed ring-controller.cce: ascend-1980 # 保持不动 spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: volcano.sh/job-name operator: In values: - vcjob topologyKey: kubernetes.io/hostname hostNetwork: true # 采用宿主机网络模式 containers: - image: ${image_name} # 镜像地址 imagePullPolicy: IfNotPresent # IfNotPresent:默认值,镜像在宿主机上不存在时才拉取;Always:每次创建Pod都会重新拉取一次镜像;Never:Pod永远不会主动拉取这个镜像 name: ${container_name} # 容器名称 securityContext: allowPrivilegeEscalation: false runAsUser: 0 # 容器内权限设置,[0:root,1000:ma-user] env: - name: name valueFrom: fieldRef: fieldPath: metadata.name - name: ip valueFrom: fieldRef: fieldPath: status.hostIP - name: framework value: "PyTorch" command: ["/bin/sh", "-c"] args: - ${command} resources: requests: huawei.com/ascend-1980: "8" # 需求卡数,key保持不变. memory: ${requests_memory} # 容器请求的最小内存 cpu: ${requests_cpu} # 容器请求的最小 CPU limits: huawei.com/ascend-1980: "8" # 限制卡数,key保持不变 memory: ${limits_memory} # 容器可使用的最大内存 cpu: ${limits_cpu} # 容器可使用的最大 CPU volumeMounts: # 容器内部映射路径 - name: shared-memory-volume mountPath: /dev/shm - name: ascend-driver # 驱动挂载,保持不动 mountPath: /usr/local/Ascend/driver - name: ascend-add-ons # 驱动挂载,保持不动 mountPath: /usr/local/Ascend/add-ons - name: localtime mountPath: /etc/localtime - name: hccn # 驱动hccn配置,保持不动 mountPath: /etc/hccn.conf - name: npu-smi # npu-smi mountPath: /usr/local/sbin/npu-smi - name: ascend-install mountPath: /etc/ascend_install.info - name: log mountPath: /var/log/npu/ - name: sfs-volume mountPath: /mnt/sfs_turbo nodeSelector: accelerator/huawei-npu: ascend-1980 volumes: # 物理机外部路径 - name: shared-memory-volume # 共享内存 emptyDir: medium: Memory sizeLimit: "200Gi" - name: ascend-driver hostPath: path: /usr/local/Ascend/driver - name: ascend-add-ons hostPath: path: /usr/local/Ascend/add-ons - name: localtime hostPath: path: /etc/localtime - name: hccn hostPath: path: /etc/hccn.conf - name: npu-smi hostPath: path: /usr/local/sbin/npu-smi - name: ascend-install hostPath: path: /etc/ascend_install.info - name: log hostPath: path: /usr/slog - name: sfs-volume persistentVolumeClaim: claimName: ${pvc_name} #已创建的PVC名称 restartPolicy: OnFailure 双节点或多节点训练的config.yaml文件模板,用于实现双机分布式训练,与单节点yaml模板相比task区块中新加一个或多个name小区块内容,样例截图如下: 双节点config.yaml文件模板如下: apiVersion: v1 kind: ConfigMap metadata: name: configmap1980-vcjob # 前缀使用“configmap1980-”不变,后接vcjob的名字 namespace: default # 命名空间自选,需要和下边的vcjob处在同一命名空间 labels: ring-controller.cce: ascend-1980 # 保持不动 data: #data内容保持不动,初始化完成,会被volcano插件自动修改 jobstart_hccl.json: | { "status":"initializing" } --- apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: vcjob # job名字,需要和configmap中名字保持联系 namespace: default # 和configmap保持一致 labels: ring-controller.cce: ascend-1980 # 保持不动 fault-scheduling: "force" spec: minAvailable: 1 schedulerName: volcano # 保持不动 policies: - event: PodEvicted action: RestartJob plugins: configmap1980: - --rank-table-version=v2 # 保持不动,生成v2版本ranktablefile env: [] svc: - --publish-not-ready-addresses=true maxRetry: 5 queue: default tasks: - name: main replicas: 1 template: metadata: name: training labels: app: ascendspeed ring-controller.cce: ascend-1980 # 保持不动 spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: volcano.sh/job-name operator: In values: - vcjob topologyKey: kubernetes.io/hostname hostNetwork: true # 采用宿主机网络模式 containers: - image: ${image_name} # 镜像地址 imagePullPolicy: IfNotPresent # IfNotPresent:默认值,镜像在宿主机上不存在时才拉取;Always:每次创建Pod都会重新拉取一次镜像;Never:Pod永远不会主动拉取这个镜像 name: ${container_name} securityContext: # 容器内 root 权限 allowPrivilegeEscalation: false runAsUser: 0 env: - name: name valueFrom: fieldRef: fieldPath: metadata.name - name: ip valueFrom: fieldRef: fieldPath: status.hostIP - name: framework value: "PyTorch" command: ["/bin/sh", "-c"] args: - ${command} resources: requests: huawei.com/ascend-1980: "8" # 需求卡数,key保持不变. memory: ${requests_memory} # 容器请求的最小内存 cpu: ${requests_cpu} # 容器请求的最小 CPU limits: huawei.com/ascend-1980: "8" # 限制卡数,key保持不变。 memory: ${limits_memory} # 容器可使用的最大内存 cpu: ${limits_cpu} # 容器可使用的最大 CPU volumeMounts: # 容器内部映射路径 - name: shared-memory-volume mountPath: /dev/shm - name: ascend-driver # 驱动挂载,保持不动 mountPath: /usr/local/Ascend/driver - name: ascend-add-ons # 驱动挂载,保持不动 mountPath: /usr/local/Ascend/add-ons - name: localtime mountPath: /etc/localtime - name: hccn # 驱动hccn配置,保持不动 mountPath: /etc/hccn.conf - name: npu-smi # npu-smi mountPath: /usr/local/sbin/npu-smi - name: ascend-install mountPath: /etc/ascend_install.info - name: log mountPath: /var/log/npu/ - name: sfs-volume mountPath: /mnt/sfs_turbo nodeSelector: accelerator/huawei-npu: ascend-1980 volumes: # 物理机外部路径 - name: shared-memory-volume # 共享内存 emptyDir: medium: Memory sizeLimit: "200Gi" - name: ascend-driver hostPath: path: /usr/local/Ascend/driver - name: ascend-add-ons hostPath: path: /usr/local/Ascend/add-ons - name: localtime hostPath: path: /etc/localtime - name: hccn hostPath: path: /etc/hccn.conf - name: npu-smi hostPath: path: /usr/local/sbin/npu-smi - name: ascend-install hostPath: path: /etc/ascend_install.info - name: log hostPath: path: /usr/slog - name: sfs-volume persistentVolumeClaim: claimName: ${pvc_name} #已创建的PVC名称 restartPolicy: OnFailure - name: work replicas: 1 template: metadata: name: training labels: app: ascendspeed ring-controller.cce: ascend-1980 # 保持不动 spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: volcano.sh/job-name operator: In values: - vcjob topologyKey: kubernetes.io/hostname hostNetwork: true # 采用宿主机网络模式 containers: - image: ${image_name} # 镜像地址 imagePullPolicy: IfNotPresent # IfNotPresent:默认值,镜像在宿主机上不存在时才拉取;Always:每次创建Pod都会重新拉取一次镜像;Never:Pod永远不会主动拉取这个镜像 name: ${container_name} securityContext: # 容器内 root 权限 allowPrivilegeEscalation: false runAsUser: 0 env: - name: name valueFrom: fieldRef: fieldPath: metadata.name - name: ip valueFrom: fieldRef: fieldPath: status.hostIP - name: framework value: "PyTorch" command: ["/bin/sh", "-c"] args: - ${command} resources: requests: huawei.com/ascend-1980: "8" # 需求卡数,key保持不变. memory: ${requests_memory} # 容器请求的最小内存 cpu: ${requests_cpu} # 容器请求的最小 CPU limits: huawei.com/ascend-1980: "8" # 限制卡数,key保持不变。 memory: ${limits_memory} # 容器可使用的最大内存 cpu: ${limits_cpu} # 容器可使用的最大 CPU volumeMounts: # 容器内部映射路径 - name: shared-memory-volume mountPath: /dev/shm - name: ascend-driver # 驱动挂载,保持不动 mountPath: /usr/local/Ascend/driver - name: ascend-add-ons # 驱动挂载,保持不动 mountPath: /usr/local/Ascend/add-ons - name: localtime mountPath: /etc/localtime - name: hccn # 驱动hccn配置,保持不动 mountPath: /etc/hccn.conf - name: npu-smi # npu-smi mountPath: /usr/local/sbin/npu-smi - name: ascend-install mountPath: /etc/ascend_install.info - name: log mountPath: /var/log/npu/ - name: sfs-volume mountPath: /mnt/sfs_turbo nodeSelector: accelerator/huawei-npu: ascend-1980 volumes: # 物理机外部路径 - name: shared-memory-volume # 共享内存 emptyDir: medium: Memory sizeLimit: "200Gi" - name: ascend-driver hostPath: path: /usr/local/Ascend/driver - name: ascend-add-ons hostPath: path: /usr/local/Ascend/add-ons - name: localtime hostPath: path: /etc/localtime - name: hccn hostPath: path: /etc/hccn.conf - name: npu-smi hostPath: path: /usr/local/sbin/npu-smi - name: ascend-install hostPath: path: /etc/ascend_install.info - name: log hostPath: path: /usr/slog - name: sfs-volume persistentVolumeClaim: claimName: ${pvc_name} #已创建的PVC名称 restartPolicy: OnFailure 参数说明: ${container_name} 容器名称,此处可以自己定义一个容器名称,例如ascendspeed。 ${image_name} 为步骤五:修改并上传镜像中,上传至SWR上的镜像链接。 ${command} 使用config.yaml文件创建pod后,在容器内自动运行的命令。在进行训练任务中会给出替换命令。 /mnt/sfs_turbo 为宿主机中默认挂载SFS Turbo的工作目录,目录下存放着训练所需代码、数据等文件。 同样,/mnt/sfs_turbo 也可以映射至容器中,作为容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。为方便访问两个地址可以相同。 ${pvc_name} 为在CCE集群关联SFS Turbo步骤中创建的PVC名称。 在设置容器中需要的CPU与内存大小时,可通过运行以下命令查看申请的节点机器中具体的CPU与内存信息。 kubectl describe node ${requests_cpu} 指在容器中请求的最小CPU核心数量,可使用Requests中的值,例如2650m。 ${requests_memory} 指在容器中请求的最小内存空间大小,可使用Requests中的值,例如3200Mi。 ${limits_cpu} 指在容器中可使用的最大CPU核心数量,例如192。 ${limits_memory} 指在容器中可使用的最大内存空间大小,例如换算成1500Gi。
  • 步骤二:获取训练镜像 建议使用官方提供的镜像部署训练服务。镜像地址{image_url}参见镜像版本说明获取。 containerd 容器引擎有命名空间的概念。Kubernetes 下使用的 containerd 默认命名空间是 k8s.io。所以在导入镜像时需要指定命令空间为 k8s.io,否则使用 crictl images 无法查询到。以下命令可选其一进行镜像拉取: 使用 containerd 自带的工具 ctr 进行镜像拉取。 ctr -n k8s.io pull {image_url} 使用nerdctl工具拉取镜像。 nerdctl --namespace k8s.io pull {image_url} 集群有多个节点,要确保每个节点都拥有镜像。 镜像获取完成后可通过如下其中一个命令进行查看: # ctr 工具查看 ctr -n k8s.io image list # 或 crictl image # nerdctl 工具查看 nerdctl --namespace k8s.io image list
  • 支持的模型列表 本文档中基于Ascend-vLLM框架支持的推理模型列表如表1 支持的大语言模型列表和表2 支持的多模态模型列表所示,各模型支持的最小卡数和最大序列请参见各模型支持的最小卡数和最大序列章节。 表1 支持的大语言模型列表和权重获取地址 序号 模型名称 是否支持fp16/bf16推理 是否支持W4A16量化 是否支持W8A8量化 是否支持W8A16量化 是否支持 kv-cache-int8量化 是否支持reasoning-content 开源权重获取地址 1 QwQ-32B √ x x x x √ Qwen/QwQ-32B at main (huggingface.co) 2 DeepSeek-R1-Distill-Llama-8B √ x x x x x deepseek-ai/DeepSeek-R1-Distill-Llama-8B · Hugging Face 3 DeepSeek-R1-Distill-Llama-70B √ x x x x x deepseek-ai/DeepSeek-R1-Distill-Llama-70B · Hugging Face 4 DeepSeek-R1-Distill-Qwen-1.5B √ x x x x x deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B · Hugging Face 5 DeepSeek-R1-Distill-Qwen-7B √ x x x x x deepseek-ai/DeepSeek-R1-Distill-Qwen-7B · Hugging Face 6 DeepSeek-R1-Distill-Qwen-14B √ x x x x x deepseek-ai/DeepSeek-R1-Distill-Qwen-14B · Hugging Face 7 DeepSeek-R1-Distill-Qwen-32B √ x x x x x deepseek-ai/DeepSeek-R1-Distill-Qwen-32B · Hugging Face 8 bge-reranker-v2-m3 √ x x x x x bge-reranker-v2-m3 · 模型库 (modelscope.cn) 表2 支持的多模态模型列表和权重获取地址 序号 模型名称 是否支持fp16/bf16推理 是否支持W4A16量化 是否支持W8A8量化 是否支持W8A16量化 是否支持 kv-cache-int8量化 开源权重获取地址 1 internvl2.5-38B √ x x x x https://huggingface.co/OpenGVLab/InternVL2_5-38B 2 qwen2.5-vl-7B √ x x x x https://huggingface.co/Qwen/Qwen2.5-VL-7B-Instruct 3 qwen2.5-vl-72B √ x x x x https://huggingface.co/Qwen/Qwen2.5-VL-72B-Instruct 父主题: 主流开源大模型基于Lite Server适配Ascend-vLLM PyTorch NPU推理指导(6.5.902)
  • 方式二:通过加密弹性云服务器创建加密镜像 用户选择弹性云服务器创建私有镜像时,如果该云服务器的系统盘已加密,那么使用该云服务器创建的私有镜像也是加密的。镜像加密使用的密钥为创建该系统盘时使用的密钥。 EVS系统盘加密,详见EVS服务端加密。 购买弹性云服务器,“磁盘类型”选择步骤 1中已加密的系统盘。 创建私有镜像。进入IMS管理控制台,选择“私有镜像”页签,在页面右上角,单击“创建私有镜像”。 “创建方式”:选择“创建私有镜像”。 “镜像类型”:选择“系统盘镜像”。 “选择镜像源”:在“云服务器”列表中,选择步骤 2中购买的弹性云服务器。 其他参数:具体配置详见注册镜像。 图3 创建私有镜像 单击“下一步”,根据界面提示完成操作。
  • 方式一:通过外部镜像文件创建加密镜像 准备符合平台要求的外部镜像文件。 Windows私有镜像:参考创建Windows私有镜像准备工作完成相关操作。 Linux私有镜像:参考创建Linux私有镜像准备工作完成相关操作。 上传外部镜像文件到OBS个人桶中,请参考上传镜像文件。 创建私有镜像。选择“私有镜像”页签,在页面右上角,单击“创建私有镜像”。 “创建方式”:选择“导入私有镜像”。 “镜像类型”:选择“系统盘镜像”。 “选择镜像文件”:选择步骤 2中保存镜像文件的桶。 “加密”:勾选“KMS加密”。默认为“从KMS密钥中选择”,“密钥名称”默认选择“ims/default”。 其他参数:具体配置详见注册镜像。 图2 加密配置 使用镜像创建弹性云服务器。 请按照通过镜像创建云服务器中的操作指导创建弹性云服务器。 在配置参数时,需要注意以下几点: “区域”:必须选择私有镜像所在的区域。 “规格”:在选择规格时,需要结合镜像的操作系统类型以及弹性云服务器类型与支持的操作系统版本了解支持选择的规格范围。 “镜像”:选择“私有镜像”,并在下拉列表中选择步骤 3中所创建的私有镜像。 (可选)数据盘:添加数据盘,该数据盘使用随系统盘镜像一起创建出来的数据盘镜像来创建,这样便可以将原平台虚拟机的系统盘和数据盘数据一起迁移到当前云平台。
  • 应用场景 IMS服务端(即镜像),是用于创建服务器或磁盘的模板,分为公共镜像、私有镜像、共享镜像、市场镜像。IMS创建私有镜像时,支持KMS加密,确保IMS服务端镜像数据安全性。 用户可以通过以下两种方式,创建加密镜像: 方式一:通过外部镜像文件创建加密镜像 用户使用OBS桶中已上传的外部镜像文件创建私有镜像,可以在注册镜像时选择KMS加密及密钥完成镜像加密。 方式二:通过加密弹性云服务器创建加密镜像 用户选择弹性云服务器创建私有镜像时,如果该云服务器的系统盘已加密,那么使用该云服务器创建的私有镜像也是加密的。加密镜像使用的密钥和系统盘的密钥保持一致。 本实践为您讲解如何通过KMS提供的默认密钥,为IMS镜像文件加密。
  • 资源与成本规划 表1 资源和成本规划 资源 资源说明 每月费用 OBS桶 计费模式:包年/包月 资源包类型:标准存储多AZ包 规格:100G 购买数量:1 具体的计费方式及标准请参考计费说明。 IMS 镜像服务 镜像类型:系统盘镜像 计费模式:免费 免费。具体的计费方式及标准请参考计费说明。 密钥管理服务 计费模式:按需计费 密钥类型:默认密钥。此处为“ims/default” 具体的计费方式及标准请参考计费说明。
  • 通用类 对接KMS时,必须有重试,包括不限于504、502、500、429等错误码,且推荐重试3~5次。针对502和504错误码,推荐超时时间5~8秒。不建议配置过长超时时间,否则会造成客户侧无法响应。 DEW服务提供了哪些功能? DEW采用的是什么加解密算法? 什么是配额? DEW服务资源分配的机制是什么? 什么是区域和可用区? 数据加密 服务是否可跨账号使用? 数据加密服务支持通过哪些方式进行使用? 为什么配置了数据加密服务的权限没有立即生效?
  • 操作场景 登录Windows操作系统的弹性云服务器时,需要使用密码方式登录。此时,用户需要先根据购买弹性云服务器时下载的私钥文件,获取该弹性云服务器初始安装时系统生成的管理员密码(Administrator账号或Cloudbase-init设置的账号)。该密码为随机密码,安全性高,请放心使用。 用户可以通过管理控制台获取Windows弹性云服务器的登录密码。 为安全起见,建议用户获取初始密码后,执行清除密码操作,清除系统中记录的初始密码信息。 该操作不会影响弹性云服务器的正常登录与运行。清除密码后,系统不能恢复获取密码功能,因此,请在执行清除密码操作前,记录弹性云服务器密码信息。详细信息请参见《弹性云服务器用户指南》。 用户也可以通过调用API接口的方式获取Windows弹性云服务器的初始密码,请参考《弹性云服务器API参考》。
  • 访问控制 DEW支持通过 统一身份认证 服务(Identity and Access Management, IAM )实现精细化的访问控制。默认情况下,新建的IAM用户没有任何权限,您需要将其加入用户组,并给用户组授予策略或角色,才能使用户组中的用户获得相应的权限,这一过程称为授权。授权后,用户就可以基于已有权限对云服务进行操作,请参见权限管理。 针对KMS子服务,还另外提供了在KMS页面配置授权功能。用户可以为其他IAM用户或账号创建授权,授予其使用自身的用户主密钥(CMK)的权限,一个用户主密钥下最多可创建100个授权,请参见KMS管理授权。
  • 身份认证 用户访问DEW的方式有多种,包括DEW控制台、API、SDK,无论访问方式封装成何种形式,其本质都是通过DEW提供的REST风格的API接口进行请求。 DEW的接口支持多种认证请求,以AK/SK举例:经过认证的请求总是需要包含一个签名值,该签名值以请求者的访问密钥(AK/SK)作为加密因子,结合请求体携带的特定信息计算而成。通过访问密钥(AK/SK)认证方式进行认证鉴权,即使用Access Key ID(AK)/Secret Access Key(SK)加密的方法来验证某个请求发送者身份。详情请参见认证鉴权。
  • 本地使用Linux操作系统 如果您是在Linux操作系统上登录Linu弹性云服务器,可以按照下面方式登录。下面步骤以私钥文件是“kp-123.ppk”为例进行介绍。 在您的Linux计算机的命令行中执行以下命令,变更权限。 chmod 600 /path/kp-123.ppk path为密钥文件的存放路径。 执行以下命令登录弹性云服务器。 ssh -i /path/kp-123 root@弹性IP地址 path为密钥文件的存放路径。 弹性IP地址为弹性云服务器绑定的弹性IP地址。
  • 自定义密钥与默认密钥有什么区别? 自定义密钥和默认密钥的区别,如表 自定义密钥和默认密钥的区别所示。 表1 自定义密钥和默认密钥的区别 名称 概念 区别 自定义密钥 是用户自行通过KMS创建或导入的密钥,是一种密钥加密密钥,主要用于加密并保护DEK。 一个自定义密钥可以加密多个DEK。 支持禁用、计划删除等操作。 创建或导入成功后进行按需计费。 默认密钥 是用户第一次通过对应云服务使用KMS加密时,系统自动生成的,其名称后缀为“/default”。 例如:evs/default 不支持禁用、计划删除等操作。 使用对应云服务系统自动生成时不计费,调用API请求次数超过20000次后,收取请求费用。 父主题: 密钥管理类
  • 密钥管理 表1 密钥管理 功能 服务内容 密钥全生命周期管理 创建、查看、启用、禁用、计划删除、取消删除自定义密钥 修改自定义密钥的别名和描述 用户自带密钥 导入密钥、删除密钥材料 小数据加解密 在线工具加解密小数据 签名验签 消息或消息摘要的签名、签名验证 说明: 仅支持通过API调用。 密钥标签 添加、搜索、编辑、删除标签 密钥轮换 开启、修改、关闭密钥轮换周期 密钥授权 创建、撤销、查询授权 退役授权 说明: 仅支持通过API调用。 密钥区域性 跨区域创建副本密钥 云服务加密 对象存储服务 OBS加密 云硬盘服务EVS加密 镜像服务IMS加密 弹性文件服务SFS加密(SFS文件系统加密) 弹性文件服务SFS加密(SFS Turbo文件系统加密) 云数据库RDS(MySQL、PostgreSQL、SQL Server引擎)加密 文档数据库服务DDS加密 数据仓库 服务DWS加密 数据加密密钥管理 创建、加密、解密数据加密密钥 说明: 仅支持通过API调用。 生成硬件真随机数 生成512bit的随机数,为加密系统提供基于硬件真随机数的密钥材料和加密参数 说明: 仅支持通过API调用。 消息认证码 生成、验证消息认证码 说明: 仅支持通过API调用。 密钥库管理 创建、禁用、删除密钥库
  • 什么是密钥管理? 密钥管理,即密钥管理服务(Key Management Service, KMS),是一种安全、可靠、简单易用的密钥托管服务,帮助您轻松创建和管理密钥,保护密钥的安全。 KMS通过使用硬件安全模块HSM(Hardware Security Module, HSM)保护密钥的安全,所有的用户密钥都由HSM中的根密钥保护,避免密钥泄露。并且HSM模块满足FIPS 140-2 Level 3安全要求。 KMS对密钥的所有操作都会进行访问控制及日志跟踪,提供所有密钥的使用记录,满足审计和合规性要求。 父主题: 密钥管理类
  • 什么是专属加密? 专属加密(Dedicated Hardware Security Module,Dedicated HSM)是一种云上数据加密的服务,可处理加解密、签名、验签、产生密钥和密钥安全存储等操作。 Dedicated HSM为您提供经国家密码管理局检测认证的加密硬件,帮助您保护弹性云服务器上数据的安全性与完整性,满足FIPS 140-2安全要求。同时,您能够对专属加密实例生成的密钥进行安全可靠的管理,也能使用多种加密算法来对数据进行可靠的加解密运算。 父主题: 专属加密类
  • 礼品仓库 我的礼品库是企业维护所有礼品的总仓库,企业配置人员在创建活动或者配置积分商城之前需要在我的礼品库创建活动所需礼品,同时通过礼品库企业可以查看所属实物、虚拟、现金红包等礼品具体信息,包括礼品名称、发放数量、剩余等。 图7 礼品仓库 积分设置:查看积分数据,设置积分的相关规则。 图8 积分设置 礼品商店:企业除了自己创建礼品外,还可以通过礼品商店可在线采购虚拟礼品和现金红包。目前超8支持现金红包、虚拟卡券两种类型礼品可供采购 图9 礼品商店 采购订单:从礼品商店完成现金红包充值,订单生成成功后,由运营人员进行审核,订单状态可在采购订单页面进行查看 图10 采购订单
  • 数据分析 扫码数据报表:显示扫码时间、参与数码、用户名、角色、所属组织、手机号、OpenId、位置、是否中奖、奖项名称、奖项内容等信息。 图13 扫码数据报表 中奖数据报表:统计当日0:00开始,截止到刷新前累计中奖金额总量(包含发放成功、发放中、发放失败状态) 图14 中奖数据报表 用户数据排名:用户扫码排名top500,包括用户名、手机号、openid、扫码量、最后扫码时间等。 图15 用户数据排名 地域扫码排名:地域扫码排名top500,包括排名、地区、扫码量、占比等。 图16 地域扫码排名 营销驾驶舱:营销活动数据大屏,包括扫码数量、访客数量、中奖金额、中奖积分及对应趋势图、用户分析、商品扫码占比分析等数据。 图17 营销驾驶舱 活动数据分析:单活动数据大屏,包括扫码数量、访客数量、中奖金额、中奖积分、扫码数量趋势图、活动预算消耗等。 图18 活动数据分析
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全