From ec06fb6c838b1a5dc1c76536803fe69e056e3312 Mon Sep 17 00:00:00 2001 From: lowdy1 Date: Thu, 14 May 2026 11:07:35 +0000 Subject: [PATCH 1/2] add pyg --- _static/images/pyg.png | Bin 0 -> 68146 bytes index.rst | 8 ++ sources/pyg/index.rst | 8 ++ sources/pyg/install.rst | 58 +++++++++++++ sources/pyg/quick_start.rst | 165 ++++++++++++++++++++++++++++++++++++ 5 files changed, 239 insertions(+) create mode 100644 _static/images/pyg.png create mode 100755 sources/pyg/index.rst create mode 100755 sources/pyg/install.rst create mode 100755 sources/pyg/quick_start.rst diff --git a/_static/images/pyg.png b/_static/images/pyg.png new file mode 100644 index 0000000000000000000000000000000000000000..c8bc307248f921a69267fbbc93a99b1710df8e46 GIT binary patch literal 68146 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官方链接|安装指南|快速上手 + +
+

PyG

+

基于 PyTorch 的 GNN 训练库。

+ +
+

🚀 高性能推理与服务

@@ -388,6 +395,7 @@ sources/trl/index.rst sources/VeOmni/index.rst sources/verl/index.rst + sources/pyg/index.rst .. toctree:: :maxdepth: 1 diff --git a/sources/pyg/index.rst b/sources/pyg/index.rst new file mode 100755 index 00000000..6bc19475 --- /dev/null +++ b/sources/pyg/index.rst @@ -0,0 +1,8 @@ +PyG +============ + +.. toctree:: + :maxdepth: 2 + + install.rst + quick_start.rst diff --git a/sources/pyg/install.rst b/sources/pyg/install.rst new file mode 100755 index 00000000..3a96bc40 --- /dev/null +++ b/sources/pyg/install.rst @@ -0,0 +1,58 @@ +安装指南 +============== + +本教程面向使用 PyG & 昇腾的开发者,帮助完成昇腾环境下 PyG 的安装。 + +昇腾环境安装 +------------ + +请根据已有昇腾产品型号及CPU架构等按照 :doc:`快速安装昇腾环境指引 <../ascend/quick_install>` 进行昇腾环境安装。 + +.. warning:: + CANN 最低版本为 8.0.rc1,安装 CANN 时,请同时安装 Kernel 算子包。 + +Python 环境创建 +---------------------- + +.. code-block:: shell + :linenos: + + # 创建 python 3.10 的虚拟环境 + conda create -y -n pyg python=3.11 + # 激活虚拟环境 + conda activate pyg + + +Torch 安装 +---------------------- + +使用以下指令安装 torch 和 torch-npu: + +.. code-block:: shell + :linenos: + + pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cpu + pip install torch_npu==2.6.0 + + +PyG 安装 +---------------------- + +使用以下指令安装 PyG: + +.. code-block:: shell + :linenos: + + pip install torch_geometric + + + +进阶库安装 (Optional) +---------------------- +PyG 还依赖一些进阶库,如 torch-scatter、torch-sparse 等。可以使用以下指令安装: + +.. code-block:: shell + :linenos: + + pip install pyg_lib torch_scatter torch_sparse -f https://data.pyg.org/whl/torch-2.6.0+cpu.html + diff --git a/sources/pyg/quick_start.rst b/sources/pyg/quick_start.rst new file mode 100755 index 00000000..7f20183e --- /dev/null +++ b/sources/pyg/quick_start.rst @@ -0,0 +1,165 @@ +快速开始 +================== + +.. note:: + 阅读本篇前,请确保已按照 :doc:`安装教程 <./install>` 准备好昇腾环境及 PyG + +本文档帮助昇腾开发者快速使用 PyG × 昇腾 进行 GNN 训练。你可以访问 `这篇官方论文 `_ 获取更多信息。 + +概览 +--------------------- + +PyG 包含了针对图 (Grpah) 及其他不规则结构的多种深度学习方法,这些方法来自众多已发表的论文。 + + +训练示例 +--------------------- + +示例训练实现了针对引用图中论文分类的图神经网络的训练。首先加载 Cora 数据集,并使用预定义的 GCNConv 创建了一个简单的两层 GCN 模型,然后开始训练。 + +GCN (Graph Convolutional Network) 是一种经典的图神经网络架构,适用于处理图结构数据。GCN 通过在图上进行卷积操作来捕捉节点之间的关系,从而实现节点分类、图分类等任务。 + +.. code-block:: shell + :linenos: + + import torch + from torch import Tensor + from torch_geometric.nn import GCNConv + from torch_geometric.datasets import Planetoid + + dataset = Planetoid(root='.', name='Cora') + + class GCN(torch.nn.Module): + def __init__(self, in_channels, hidden_channels, out_channels): + super().__init__() + self.conv1 = GCNConv(in_channels, hidden_channels) + self.conv2 = GCNConv(hidden_channels, out_channels) + + def forward(self, x: Tensor, edge_index: Tensor) -> Tensor: + # x: Node feature matrix of shape [num_nodes, in_channels] + # edge_index: Graph connectivity matrix of shape [2, num_edges] + x = self.conv1(x, edge_index).relu() + x = self.conv2(x, edge_index) + return x + + model = GCN(dataset.num_features, 16, dataset.num_classes) + +该示例会自动下载 Cora 数据集,并使用 GCN 模型以备训练。你可以根据需要修改模型结构、训练参数等,以适应不同的任务和数据集。 + +也可以使用 PyG 提供的示例代码进行训练,例如使用官方提供的 GCN 示例进行训练: + + +.. code-block:: shell + :linenos: + + python ./examples/gcn.py + + + +看到类似如下输出,loss 存在明显下降趋势说明训练成功: + +.. code-block:: shell + :linenos: + + Epoch: 001, Loss: 1.9458, Train: 0.2286, Val: 0.2580, Test: 0.2510 + Epoch: 002, Loss: 1.9432, Train: 0.3857, Val: 0.2300, Test: 0.2510 + Epoch: 003, Loss: 1.9374, Train: 0.7643, Val: 0.4500, Test: 0.4500 + Epoch: 004, Loss: 1.9290, Train: 0.7286, Val: 0.3860, Test: 0.4500 + Epoch: 005, Loss: 1.9223, Train: 0.7643, Val: 0.4080, Test: 0.4500 + Epoch: 006, Loss: 1.9178, Train: 0.7286, Val: 0.4140, Test: 0.4500 + Epoch: 007, Loss: 1.9078, Train: 0.7786, Val: 0.4380, Test: 0.4500 + Epoch: 008, Loss: 1.8984, Train: 0.7429, Val: 0.4320, Test: 0.4500 + Epoch: 009, Loss: 1.8855, Train: 0.7786, Val: 0.4040, Test: 0.4500 + Epoch: 010, Loss: 1.8776, Train: 0.7786, Val: 0.4220, Test: 0.4500 + Epoch: 011, Loss: 1.8649, Train: 0.7714, Val: 0.4360, Test: 0.4500 + Epoch: 012, Loss: 1.8561, Train: 0.8143, Val: 0.4900, Test: 0.4920 + Epoch: 013, Loss: 1.8508, Train: 0.8429, Val: 0.5400, Test: 0.5440 + Epoch: 014, Loss: 1.8339, Train: 0.8786, Val: 0.5680, Test: 0.5970 + Epoch: 015, Loss: 1.8220, Train: 0.9071, Val: 0.6140, Test: 0.6470 + Epoch: 016, Loss: 1.8028, Train: 0.9214, Val: 0.6540, Test: 0.6830 + Epoch: 017, Loss: 1.7940, Train: 0.9214, Val: 0.6800, Test: 0.7130 + Epoch: 018, Loss: 1.7733, Train: 0.9286, Val: 0.6900, Test: 0.7150 + Epoch: 019, Loss: 1.7586, Train: 0.9357, Val: 0.6920, Test: 0.7290 + Epoch: 020, Loss: 1.7426, Train: 0.9357, Val: 0.6980, Test: 0.7380 + Epoch: 021, Loss: 1.7214, Train: 0.9429, Val: 0.7040, Test: 0.7430 + Epoch: 022, Loss: 1.7060, Train: 0.9429, Val: 0.7080, Test: 0.7460 + Epoch: 023, Loss: 1.6939, Train: 0.9429, Val: 0.7200, Test: 0.7500 + Epoch: 024, Loss: 1.6736, Train: 0.9429, Val: 0.7160, Test: 0.7500 + Epoch: 025, Loss: 1.6517, Train: 0.9429, Val: 0.7180, Test: 0.7500 + Epoch: 026, Loss: 1.6458, Train: 0.9429, Val: 0.7220, Test: 0.7370 + Epoch: 027, Loss: 1.6297, Train: 0.9429, Val: 0.7240, Test: 0.7380 + Epoch: 028, Loss: 1.5822, Train: 0.9429, Val: 0.7140, Test: 0.7380 + Epoch: 029, Loss: 1.5706, Train: 0.9429, Val: 0.7120, Test: 0.7380 + Epoch: 030, Loss: 1.5858, Train: 0.9429, Val: 0.7220, Test: 0.7380 + Epoch: 031, Loss: 1.5373, Train: 0.9429, Val: 0.7300, Test: 0.7500 + Epoch: 032, Loss: 1.5358, Train: 0.9429, Val: 0.7260, Test: 0.7500 + Epoch: 033, Loss: 1.5177, Train: 0.9429, Val: 0.7300, Test: 0.7500 + Epoch: 034, Loss: 1.4543, Train: 0.9429, Val: 0.7420, Test: 0.7660 + Epoch: 035, Loss: 1.4536, Train: 0.9429, Val: 0.7520, Test: 0.7740 + Epoch: 036, Loss: 1.4642, Train: 0.9429, Val: 0.7560, Test: 0.7740 + Epoch: 037, Loss: 1.4009, Train: 0.9500, Val: 0.7620, Test: 0.7780 + Epoch: 038, Loss: 1.3986, Train: 0.9500, Val: 0.7560, Test: 0.7780 + Epoch: 039, Loss: 1.3620, Train: 0.9500, Val: 0.7520, Test: 0.7780 + Epoch: 040, Loss: 1.3841, Train: 0.9500, Val: 0.7580, Test: 0.7780 + Epoch: 041, Loss: 1.3488, Train: 0.9500, Val: 0.7700, Test: 0.7800 + Epoch: 042, Loss: 1.3262, Train: 0.9571, Val: 0.7680, Test: 0.7800 + Epoch: 043, Loss: 1.2861, Train: 0.9571, Val: 0.7760, Test: 0.7850 + Epoch: 044, Loss: 1.2833, Train: 0.9571, Val: 0.7800, Test: 0.7880 + Epoch: 045, Loss: 1.2255, Train: 0.9571, Val: 0.7660, Test: 0.7880 + Epoch: 046, Loss: 1.2127, Train: 0.9500, Val: 0.7620, Test: 0.7880 + Epoch: 047, Loss: 1.2455, Train: 0.9571, Val: 0.7660, Test: 0.7880 + Epoch: 048, Loss: 1.1698, Train: 0.9571, Val: 0.7660, Test: 0.7880 + Epoch: 049, Loss: 1.1380, Train: 0.9500, Val: 0.7680, Test: 0.7880 + Epoch: 050, Loss: 1.1567, Train: 0.9500, Val: 0.7680, Test: 0.7880 + Epoch: 051, Loss: 1.1356, Train: 0.9500, Val: 0.7680, Test: 0.7880 + Epoch: 052, Loss: 1.1302, Train: 0.9571, Val: 0.7680, Test: 0.7880 + Epoch: 053, Loss: 1.0982, Train: 0.9571, Val: 0.7640, Test: 0.7880 + Epoch: 054, Loss: 1.0880, Train: 0.9571, Val: 0.7620, Test: 0.7880 + Epoch: 055, Loss: 1.0617, Train: 0.9571, Val: 0.7580, Test: 0.7880 + Epoch: 056, Loss: 1.0410, Train: 0.9643, Val: 0.7600, Test: 0.7880 + Epoch: 057, Loss: 1.0352, Train: 0.9643, Val: 0.7620, Test: 0.7880 + Epoch: 058, Loss: 1.0271, Train: 0.9643, Val: 0.7680, Test: 0.7880 + Epoch: 059, Loss: 0.9928, Train: 0.9643, Val: 0.7680, Test: 0.7880 + Epoch: 060, Loss: 1.0205, Train: 0.9643, Val: 0.7720, Test: 0.7880 + Epoch: 061, Loss: 1.0038, Train: 0.9643, Val: 0.7740, Test: 0.7880 + Epoch: 062, Loss: 0.9809, Train: 0.9643, Val: 0.7740, Test: 0.7880 + Epoch: 063, Loss: 0.9509, Train: 0.9643, Val: 0.7740, Test: 0.7880 + Epoch: 064, Loss: 0.9133, Train: 0.9643, Val: 0.7720, Test: 0.7880 + Epoch: 065, Loss: 0.9303, Train: 0.9643, Val: 0.7740, Test: 0.7880 + Epoch: 066, Loss: 0.9378, Train: 0.9643, Val: 0.7780, Test: 0.7880 + Epoch: 067, Loss: 0.8676, Train: 0.9643, Val: 0.7840, Test: 0.8110 + Epoch: 068, Loss: 0.8609, Train: 0.9714, Val: 0.7840, Test: 0.8110 + Epoch: 069, Loss: 0.8127, Train: 0.9643, Val: 0.7880, Test: 0.8200 + Epoch: 070, Loss: 0.8994, Train: 0.9714, Val: 0.7880, Test: 0.8200 + Epoch: 071, Loss: 0.7771, Train: 0.9714, Val: 0.7920, Test: 0.8180 + Epoch: 072, Loss: 0.8375, Train: 0.9714, Val: 0.7880, Test: 0.8180 + Epoch: 073, Loss: 0.8174, Train: 0.9714, Val: 0.7900, Test: 0.8180 + Epoch: 074, Loss: 0.7833, Train: 0.9714, Val: 0.7920, Test: 0.8180 + Epoch: 075, Loss: 0.7510, Train: 0.9714, Val: 0.7900, Test: 0.8180 + Epoch: 076, Loss: 0.7898, Train: 0.9714, Val: 0.7880, Test: 0.8180 + Epoch: 077, Loss: 0.7931, Train: 0.9786, Val: 0.7840, Test: 0.8180 + Epoch: 078, Loss: 0.7608, Train: 0.9786, Val: 0.7860, Test: 0.8180 + Epoch: 079, Loss: 0.7193, Train: 0.9786, Val: 0.7840, Test: 0.8180 + Epoch: 080, Loss: 0.6972, Train: 0.9786, Val: 0.7900, Test: 0.8180 + Epoch: 081, Loss: 0.7126, Train: 0.9857, Val: 0.7860, Test: 0.8180 + Epoch: 082, Loss: 0.7176, Train: 0.9857, Val: 0.7840, Test: 0.8180 + Epoch: 083, Loss: 0.7042, Train: 0.9786, Val: 0.7800, Test: 0.8180 + Epoch: 084, Loss: 0.6833, Train: 0.9786, Val: 0.7820, Test: 0.8180 + Epoch: 085, Loss: 0.6981, Train: 0.9786, Val: 0.7880, Test: 0.8180 + Epoch: 086, Loss: 0.6565, Train: 0.9786, Val: 0.7880, Test: 0.8180 + Epoch: 087, Loss: 0.6837, Train: 0.9786, Val: 0.7860, Test: 0.8180 + Epoch: 088, Loss: 0.7371, Train: 0.9786, Val: 0.7900, Test: 0.8180 + Epoch: 089, Loss: 0.6373, Train: 0.9786, Val: 0.7940, Test: 0.8240 + Epoch: 090, Loss: 0.6574, Train: 0.9786, Val: 0.7980, Test: 0.8250 + Epoch: 091, Loss: 0.6248, Train: 0.9786, Val: 0.7980, Test: 0.8250 + Epoch: 092, Loss: 0.6330, Train: 0.9786, Val: 0.8020, Test: 0.8180 + Epoch: 093, Loss: 0.7066, Train: 0.9786, Val: 0.8000, Test: 0.8180 + Epoch: 094, Loss: 0.5868, Train: 0.9786, Val: 0.8060, Test: 0.8230 + Epoch: 095, Loss: 0.6133, Train: 0.9786, Val: 0.8040, Test: 0.8230 + Epoch: 096, Loss: 0.5794, Train: 0.9786, Val: 0.7960, Test: 0.8230 + Epoch: 097, Loss: 0.5593, Train: 0.9786, Val: 0.7880, Test: 0.8230 + Epoch: 098, Loss: 0.5757, Train: 0.9786, Val: 0.7840, Test: 0.8230 + Epoch: 099, Loss: 0.6419, Train: 0.9857, Val: 0.7820, Test: 0.8230 + Epoch: 100, Loss: 0.5809, Train: 0.9857, Val: 0.7780, Test: 0.8230 + + From 0019170bc2c2a90fbb063fe45c59526ceeb3fdcc Mon Sep 17 00:00:00 2001 From: lowdy1 Date: Mon, 18 May 2026 02:32:20 +0000 Subject: [PATCH 2/2] fix typos --- sources/pyg/install.rst | 2 +- sources/pyg/quick_start.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/pyg/install.rst b/sources/pyg/install.rst index 3a96bc40..5a5002a2 100755 --- a/sources/pyg/install.rst +++ b/sources/pyg/install.rst @@ -17,7 +17,7 @@ Python 环境创建 .. code-block:: shell :linenos: - # 创建 python 3.10 的虚拟环境 + # 创建 python 3.11 的虚拟环境 conda create -y -n pyg python=3.11 # 激活虚拟环境 conda activate pyg diff --git a/sources/pyg/quick_start.rst b/sources/pyg/quick_start.rst index 7f20183e..42f5f8a9 100755 --- a/sources/pyg/quick_start.rst +++ b/sources/pyg/quick_start.rst @@ -9,7 +9,7 @@ 概览 --------------------- -PyG 包含了针对图 (Grpah) 及其他不规则结构的多种深度学习方法,这些方法来自众多已发表的论文。 +PyG 包含了针对图 (Graph) 及其他不规则结构的多种深度学习方法,这些方法来自众多已发表的论文。 训练示例