基于昇腾适配电力潮流计算模型PowerFlowNet

摘要

       准确高效的潮流 (PF) 分析对于现代电网的运行和规划至关重要。因此,我们需要一种可扩展的算法,能够为小型和大型电网提供准确、快速的解决方案。由于电网可以理解为一张图,图神经网络 (GNN) 已成为一种颇具前景的方法,它通过利用底层图结构中的信息共享来提高 PF 近似的准确性和速度。在本研究中,我们介绍了 PowerFlowNet,这是一种用于 PF 近似的新型 GNN 架构,其性能与传统的牛顿-拉夫逊法相似,但在 IEEE 14 节点系统中,其速度提高了 4 倍,在法国高压电网 (6470rte) 的实际案例中,其速度提高了 48 倍。同时,它在性能和执行时间方面显著优于其他传统近似方法,例如直流潮流;因此,PowerFlowNet 将成为实际 PF 分析中极具前景的解决方案。此外,我们通过深入的实验评估验证了该方法的有效性,全面考察了 PowerFlowNet 的性能、可扩展性、可解释性和架构可靠性。此次评估深入了解了 GNN 在电力系统分析中的行为和潜在应用

1. 介绍

       PowerFlowNet是由代尔夫特理工大学和荷兰应用科学研究组织开发的一种基于深度学习的新一代智能流体模拟模型,专注于高效预测复杂流体运动与多物理场耦合现象。该模型通过融合卷积神经网络(CNN)与物理约束模块,显著提升了流体仿真的计算效率与精度,广泛应用于工程流体力学、气象预测、航空航天设计等领域。PowerFlowNet采用自适应网格优化和并行计算技术,能够在保持高分辨率模拟的同时降低计算资源消耗。其开源框架提供从数据预处理、模型训练到实时推理的全流程工具链,为科研与工业界提供了可扩展的流体模拟解决方案。

2.  网络架构

       PowerFlowNet 是一种 GNN 方法,它根据问题的部分信息(例如图 𝐴 的邻接矩阵、已知节点特征 (其中未知特征填充为 0)以及每条线 (𝑖, 𝑗) ∈的边特征 ,重建每个节点的完整特征向量。我们提出的模型由一个掩码编码器和一堆我们新颖的 Power Flow 卷积层 (PowerFlowConv) 组成。首先,掩码编码层使用特征掩码对输入特征进行移位,以区分已知和未知特征。然后,如图 1所示,编码后的图特征被输入到由独特排列的消息传递层和 TAGConv 层组成的 Power Flow 卷积运算堆栈中。这样,来自每个节点和边的信息都会被聚合,从而预测完整的特征矩阵

图1:PowerFlowNet 模型架构由一个掩码编码器和 𝐿 PowerFlowConv 层组成。包含不完整特征信息的输入图被逐个节点地输入到掩码编码器,以生成编码后的图特征,其中每个节点 𝑛 ∈ 𝑁,且 (𝒙𝑖, 𝒎𝑖)。然后,编码后的图特征由一系列 𝐿 顺序 PowerFlowConv 层处理,每个层包含一个单步消息传递和一个高阶 TAGConv。最终生成完整的输出图。

2.1 掩码编码器

       在 PF 问题中,每个节点都有不同的已知和未知特征。目标是在保持已知特征不变的情况下预测未知特征。这意味着我们的神经网络应该知道哪些特征需要预测。因此,对于每个具有特征向量 𝒙𝑖 的输入节点,我们创建一个二元掩码 ,其中 0 表示已知特征,1 表示未知特征。例如,一个负载 (PQ) 节点的特征向量 和未知值 𝑉𝑚 和 𝜃,其掩码为 𝒎𝑖 = (1, 1, 0, 0)。此外,我们建议使用一个能够学习表示不同类型节点的掩码编码器(参见图1中的掩码编码器模块)。实际上,它由两个全连接层组成,将二值掩码映射到连续值向量。值得注意的是,也可以使用固定的(非学习的)掩码嵌入,但我们的掩码编码器可以学习更灵活的掩码表示,从而提升最终性能。对于每个 ,其中,这是一个函数,权重矩阵 和偏差 是可训练参数。最后,为了生成编码图特征,我们将输入节点特征𝑋与学习到的表示𝒎̂𝑖进行平移,即

2.2 功率流卷积层

       我们提出的架构的第二部分由 𝐿 连接的 PowerFlowConv 层组成,这些层按顺序处理编码后的图特征并预测最终的特征矩阵 ,其中 =和  。每个 PowerFlowConv 层由一个初始的单跳消息传递步骤和一个𝐾跳TAGConv组成,TAGConv 学习自动从边缘特征(即线路电阻和电抗)中提取信息,并将其融入相邻节点特征 。消息传递利用来自边缘特征的信息,而 TAGConv 则聚合大邻域中的节点特征。然而,在 PF 公式​​中,线路特征和节点状态都发挥着重要作用。因此,通过结合这两种技术,所提出的架构可以提供高质量的 PF 近似值。

更具体地说,我们计算传递给节点 ∀𝑖 ∈ 𝑁 的消息为

是上述向量的串联向量,输入到带有中间 ReLU 激活函数的双层多层感知器 (MLP)。这里再次显示权重矩阵和偏置向量是第 𝑙 层 MLP 的可训练参数。之后,我们通过将图特征 与消息相加来更新图特征,即。然后,TAGConv 层处理信号,生成新的编码图特征

        在  中,图的邻接矩阵𝐴由对角度矩阵𝐷进行归一化。归一化的邻接矩阵通常用于图神经网络 (GNN) 中,以提供计算稳定性保证。然后,将第𝑙个 PowerFlowConv 层生成的编码图特征传递到下一层,直到𝑙 =𝐿。最后,在最后一层使用消息传递步骤,而丢弃 TAGConv 步骤,如图1所示。一般而言,GNN 适用于快速功率因数 (PF) 近似,因为它们具有函数逼近器的性质,这使得它们能够有效地捕捉电力系统中的复杂关系。此外,它们的单次突变等变性确保模型能够有效地处理输入数据,而不受总线顺序的影响,从而实现并行化,提高计算效率。与传统的迭代方法不同,该方法采用端到端机器学习范式,输入特征只需一步即可直接映射到输出特征,从而简化了流程,无需迭代收敛。

2.3 模型损失函数

选择合适的模型损失函数对于生成高质量的PF近似值至关重要。现有的机器学习方法通​​常使用纯物理的模型损失。然而,由于PF问题的非线性,仅使用物理模型损失是不够的。我们建议利用均方误差(MSE)来训练PowerFlowNet,并开发Masked L2损失作为更好的评估指标。具体而言,MSE定义为

其中𝒚𝑖表示特征的实际值,𝒙̂𝑖 表示节点𝑖的预测值。为了更精确地计算仅预测未知特征的实际误差值,我们开发了 Masked L2 损失函数。该损失函数类似于 MSE,但仅计算未知特征的误差

这里,o 是元素乘法运算符,而𝒎𝑖是节点 𝑖 的二进制掩码。

3. 实验

3.1 组件版本

hdk:24.1.rc3

cann:8.0.RC3

python:3.11.6

torch:2.1.0

torch_npu:2.1.0.post8

3.2 新建conda环境

conda create -n PowerFlowNet -c conda-forge python=3.11.6

(注:有时候在默认channels找不到3.11.6版本的python,所以需要使用-c参数手动指定在conda-forge中安装)

3.3 安装依赖包

3.3.1 安装tensorboard、wandb、matplotlib、numpy、torchvision、torch-scatter、torch-geometric

直接pip install 安装即可

3.3.2 安装torch&torch_npu

(1).安装torch

pip install torch==2.1.0

(2).安装torch_npu

a. 先下载whl离线包

wget https://gitee.com/ascend/pytorch/releases/download/v6.0.rc3-pytorch2.1.0/torch_npu-2.1.0.post8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

b. pip install 安装

pip3 install torch_npu-2.1.0.post8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

c. 查看是否安装成功

d. 验证npu是否可用

先source cann

source /usr/local/Ascend/ascend-toolkit/set_env.sh

设置环境变量指定npu卡

export ASCEND_RT_VISIBLE_DEVICES=7

执行python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);"

报错

根据报错安装decorator和其它依赖

再次验证

成功输出

3.4下载数据集

地址:https://surfdrive.surf.nl/files/index.php/s/Qw4RHLvI2RPBIBL

下载之后将case118v2_edge_features.npy 和case118v2_node_features.npy 放到 /PoweFlowNet/data/raw目录下

3.5 执行训练

3.5.1 导包

在开始训练前,先在训练脚本中导入torch_npu(这样才能使用npu)

vi train_time_view.py

(注:from torch_npu.contrib import transfer_to_npu会自动将源码中的cuda api更换至torch_npu的api,不需要再额外手动处理)

3.5.2  训练

在命令行执行

python train_time_view.py --cfg_json ./configs/standard.json --num-epochs 5 --data-dir ./data --batch-size 128 --train_loss_fn mse_loss --lr 0.001 --case 118v2 --model MaskEmbdMultiMPN --save

进行训练

(注:源码中已经启用DDP的方式进行数据并行分布式训练,所以,如果想使用多卡训练,只需要设置环境变量ASCEND_RT_VISIBLE_DEVICES即可。例:使用前4卡,export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3)

输入npu-smi info查看显存占用

训练完成

4.性能分析

后续如果想进行性能优化,需要用到此章节采集profiling性能数据,本章节将介绍两种npu采集profiling的方法。第一种是使用torch_npu.frofile接口的方式采集(推荐)。第二种是使用msprof工具进行采集。

4.1 torch_npu.profile方式

参考 mstt: 针对训练&大模型场景,提供端到端命令行&可视化调试调优工具,帮助用户快速提高模型开发效率 - Gitee.com

vi train_time_view.py进入训练脚本

在训练循环前添加

experimental_config = torch_npu.profiler._ExperimentalConfig(
    aic_metrics=torch_npu.profiler.AiCMetrics.PipeUtilization,
    profiler_level=torch_npu.profiler.ProfilerLevel.Level1,
    l2_cache=False
)
prof = torch_npu.profiler.profile(
    activities=[
        torch_npu.profiler.ProfilerActivity.CPU, 
        torch_npu.profiler.ProfilerActivity.NPU
    ],
    record_shapes=True,
    profile_memory=True,
    with_stack=True,
    experimental_config=experimental_config,
on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./profiling_data"))
在训练循环中,在合适位置添加
if epoch == 3:
    prof.start()
prof.step()
if epoch == 3:
    prof.stop()

(注:为了避免前两个epoch中初始化,预热阶段干扰数据,这里采集第三个epoch的性能数据)

保存退出,再次执行训练,即可在训练过程中采集.

输出

4.2 msprof方式

msprof的方式更为简单,但与torch_npu.profile的方式相比,缺点是不能采集单个epoch的数据,只能进行全量采集,具体操作如下。

参考:性能调优工具-CANN商用版8.0.RC3-昇腾社区 (hiascend.com)

直接在命令行输入msprof + 数据保存路径 + 脚本启动命令

msprof --output=/data1 /output python train_time_view.py --cfg_json ./configs/standard.json --num-epochs 5 --data-dir ./data --batch-size 128 --train_loss_fn mse_loss --lr 0.001 --case 118v2 --model MaskEmbdMultiMPN --save

训练执行前会Start profiling

训练结束之后会自动进行解析、导出

输出

4.3 性能对比

如果想要进行性能对比,来有针对性的调优,需要先跑出基准性能数据文件。使用msprof-analyze工具进行对比。

参考:profiler/msprof_analyze/compare_tools/README.md · Ascend/mstt - Gitee.com

4.3.1 安装msprof-analyze工具

可以直接使用pip install msprof-analyze的方式安装。Pypi中有相应的源。

(注:如果安装不上,也可以使用whl包或源码的方式安装)

4.3.2 执行命令

msprof-analyze compare -d [比对性能数据文件所在路径] -bp [基准性能数据文件所在路径] --output_path=[比对结果文件存放路径]

msprof-analyze compare -d /data1 /PoweFlowNet/profiling_data/fd4588b266f4_28626_20250610092002401_ascend_pt/ASCEND_PROFILER_OUTPUT/ -bp /data1/PoweFlowNet/gpu_profiling/p-I_238661.1749580427151870472.pt.trace.json -o /data1 /PoweFlowNet/compare_profiling_new

5. 参考

Nan Lin, Stavros Orfanoudakis, Nathan Ordonez Cardenas, Juan S. Giraldo, Pedro P. Vergara,

PowerFlowNet: Power flow approximation using message passing Graph Neural Networks,

International Journal of Electrical Power & Energy Systems,

Volume 160,

2024,

110112,

ISSN 0142-0615,

https://doi.org/10.1016/j.ijepes.2024.110112.

(https://www.sciencedirect.com/science/article/pii/S0142061524003338)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值