1.环境准备

1.1服务器准备

一台搭载NPU的服务器即可;不需要严格区分官网给出的这些产品型号。

需要按照教程安装好CANN-toolkit和CANN-kernels。

为了避免麻烦,可以在服务器装上docker,在镜像里面操作。

1.2获取昇腾镜像并创建容器

镜像资源[RED HAT]:quay.io/ascend/vllm-ascend:main

# 1.拉取指定路径的镜像,根据服务器系统情况对应的版本
docker pull quay.io/ascend/vllm-ascend:main-openeuler

# 2.设置刚才获取的镜像
export IMAGE=quay.io/ascend/vllm-ascend:main-openeuler

# 3.利用这个镜像创建容器,挂载0-3号NPU,映射到容器内8000端口
sudo docker run -d --restart=unless-stopped \\
  --name vllm-ascend \\
  --device /dev/davinci0 \\
  --device /dev/davinci1 \\
  --device /dev/davinci2 \\
  --device /dev/davinci3 \\
  --device /dev/davinci_manager \\
  --device /dev/devmm_svm \\
  --device /dev/hisi_hdc \\
  -v /usr/local/dcmi:/usr/local/dcmi \\
  -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \\
  -v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64 \\
  -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \\
  -v /etc/ascend_install.info:/etc/ascend_install.info \\
  -v /root/.cache:/root/.cache \\
  -p 8800:8000 \\
  $IMAGE \\
  sleep infinity
  
# 4.进入容器
docker exec -it vllm-ascend bash
# 命令速查(docker开头的命令都是在宿主机执行)

1.退出容器:exit

2.把宿主机的文件夹传输到容器内:docker cp 宿主机文件夹路径 容器名:容器内目标路径

3.把容器内的文件夹传输到宿主机:docker cp 容器名:容器内文件夹路径 宿主机目标路径

P.S.传输命令格式是:docker cp 源路径 目标路径

4.查看容器状态:docker ps -a

5.进入容器:docker exec -it vllm-ascend bash1.3在本地安装MindStudio Insight性能数据分析工具

1.3在本地安装MindStudio Insight性能数据分析工具

资源下载和安装:https://www.hiascend.com/document/detail/zh/mindstudio/830/GUI_baseddevelopmenttool/msascendinsightug/Insight_userguide_0005.html

详细使用指南(PDF):

https://www.hiascend.com/doc_center/source/zh/mindstudio/830/GUI_baseddevelopmenttool/msascendinsightug/MindStudio%20Insight%208.3.0%20%E5%B7%A5%E5%85%B7%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97%2001.pdf

按照指引选择自己的设备系统和CPU架构根据指引安装即可。

2.硬件性能的试金石:softmax

2.1Softmax 算子的工程特性与硬件实现挑战

Softmax 是深度学习模型中最常见的非线性算子之一,广泛应用于分类模型的输出层以transformer中的注意力机制。尽管其数学形式十分简洁,但在高性能计算系统中,softmax 往往表现出较差的执行效率,并长期被视为硬件与系统优化中的难点算子。本节从工程与体系结构角度分析 softmax 对硬件不友好的原因,并说明其为何常被用作衡量硬件与系统成熟度的“试金石”。

2.2从数学定义到工程实现

softmax 的数学定义为:

\mathrm{softmax}(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}

在实际系统中,为避免指数运算带来的数值溢出问题,通常采用数值稳定实现,即先计算输入向量的最大值,再进行平移后的指数和归一化操作。该实现一般包含三个阶段:最大值归约、指数求和归约以及逐元素归一化。这种实现方式虽然保证了数值稳定性,却在工程层面引入了多次全量遍历和严格的阶段性依赖。

2.3softmax 对硬件不友好的主要原因

2.3.1多阶段依赖导致并行度受限

softmax 的各个阶段之间存在明确的数据依赖关系:指数计算必须等待最大值计算完成,归一化阶段又必须等待指数和的计算结果。这种顺序依赖限制了算子在时间维度上的流水化能力,使其难以充分利用现代并行硬件的执行资源。

2.3.2归约操作带来的同步与通信开销

最大值和求和本质上都是归约操作。与逐元素运算相比,归约需要线程或计算单元之间进行频繁的通信与同步,其性能往往受限于互连结构、同步机制以及调度效率,而非算术运算本身的吞吐能力。这使得 softmax 在高并行环境下难以获得线性加速。

2.3.3非线性与高延迟算术指令

softmax 依赖指数运算和除法运算,而这类运算在大多数硬件平台上的延迟和吞吐性能均显著弱于乘加运算。即使硬件提供专用的特殊函数单元,这些指令仍然容易成为执行流水线中的性能瓶颈,从而降低整体算子效率。

2.3.4数值稳定性对计算重排的限制

为了保证数值稳定性,softmax 的计算顺序受到严格约束,无法像矩阵乘法等算子那样进行大范围的计算重排和融合。这一特性限制了编译器和运行时系统在调度与优化层面的自由度。

2.3.5低算术强度与内存带宽瓶颈

在实际模型中,softmax 通常作用于较长的向量维度(如词表维度或序列长度维度),但每个元素涉及的计算量较小,算术强度较低。因此,该算子往往表现为内存带宽受限,频繁的数据访问进一步放大了其性能瓶颈。

2.4softmax 作为硬件性能试金石的原因

由于 softmax 同时涉及归约、同步、非线性运算以及复杂的访存模式,其性能表现高度依赖于硬件体系结构、编译器优化能力以及运行时调度策略的协同效果。一个系统若能够高效执行 softmax,通常意味着其在以下方面具有较为成熟的设计:

  • 高效的归约与同步机制
  • 对特殊函数指令的良好支持
  • 合理的存储层次结构与数据复用能力
  • 编译器与硬件之间良好的协同优化能力

因此,softmax 的性能往往反映的是系统整体设计的平衡性与成熟度,而非单纯的峰值算力指标。

2.5总结

softmax 的工程复杂性源于其全局依赖、归约密集、非线性运算以及对数值稳定性的严格要求。这些特性使其在现代并行硬件上难以实现高效执行。正因如此,softmax 常被视为检验硬件体系结构、编译器和运行时系统综合能力的重要算子,其性能表现具有较强的指示意义。

3.快速开始:softmax算子性能分析

项目下载地址:https://github.com/Zerone-CS/NPU-Operator-Profiling

确保环境配置完成之后,按照项目指引,即可得到visualize_data.bin文件或trace.json。将其中一个文件下载到本地。在本地打开mindstudio insight,导入文件即可。

mindstudio insight基本操作:https://www.hiascend.com/document/detail/zh/mindstudio/830/GUI_baseddevelopmenttool/msascendinsightug/Insight_userguide_0029.html

结合mindstudio官方的工具介绍即可开展性能分析工作。

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐