تتكون هذه الحزمة من مكتبة تمديد صغيرة من خوارزميات مجموعة الرسوم البيانية المحسنة للغاية للاستخدام في Pytorch. تتكون الحزمة من خوارزميات التجميع التالية:
جميع العمليات المشمولة تعمل على أنواع البيانات المختلفة ويتم تنفيذها لكل من وحدة المعالجة المركزية و GPU.
تحديث: يمكنك الآن تثبيت pytorch-cluster عبر Anaconda لجميع مجموعات OS/Pytorch/CUDA الرئيسية؟ بالنظر إلى أن لديك pytorch >= 1.8.0 مثبت ، ما عليك سوى تشغيل
conda install pytorch-cluster -c pyg
بدلاً من ذلك ، نقدم عجلات PIP لجميع مجموعات OS/Pytorch/CUDA الرئيسية ، انظر هنا.
لتثبيت الثنائيات لـ Pytorch 2.5.0 ، ما عليك سوى تشغيل
pip install torch-cluster -f https://data.pyg.org/whl/torch-2.5.0+${CUDA}.html
حيث يجب استبدال ${CUDA} إما cpu أو cu118 أو cu121 أو cu124 اعتمادًا على تثبيت pytorch.
cpu | cu118 | cu121 | cu124 | |
|---|---|---|---|---|
| Linux | ✅ | ✅ | ✅ | ✅ |
| النوافذ | ✅ | ✅ | ✅ | ✅ |
| ماكوس | ✅ |
لتثبيت الثنائيات لـ Pytorch 2.4.0 ، ما عليك سوى التشغيل
pip install torch-cluster -f https://data.pyg.org/whl/torch-2.4.0+${CUDA}.html
حيث يجب استبدال ${CUDA} إما cpu أو cu118 أو cu121 أو cu124 اعتمادًا على تثبيت pytorch.
cpu | cu118 | cu121 | cu124 | |
|---|---|---|---|---|
| Linux | ✅ | ✅ | ✅ | ✅ |
| النوافذ | ✅ | ✅ | ✅ | ✅ |
| ماكوس | ✅ |
ملاحظة: يتم توفير ثنائيات الإصدارات القديمة أيضًا لـ Pytorch 1.4.0 ، Pytorch 1.5.0 ، Pytorch 1.6.0 ، Pytorch 1.7.0/1.7.1 ، Pytorch 1.8.0/1.8.1 ، Pytorch 1.9.0 ، Pytorch 1.10.0/1.10.1/1.10.2 ، Pytor 1.11.0 ، 1.12.0/1.12.1 ، pytorch 1.13.0/1.13.1 ، pytorch 2.0.0/2.0.1 ، pytorch 2.1.0/2.1.1/2.1.2 ، pytorch 2.2.0/2.2.2/2.2.2 ، و pytorch 2.3.0/2.3.1 (بعد نفس الإجراء). بالنسبة للإصدارات القديمة ، تحتاج إلى تحديد أحدث رقم إصدار مدعوم أو تثبيت عبر pip install --no-index من أجل منع التثبيت اليدوي من المصدر. يمكنك البحث عن أحدث رقم إصدار مدعوم هنا.
تأكد من تثبيت Pytorch 1.4.0 على الأقل والتحقق من أن cuda/bin و cuda/include في $PATH الخاص بك و $CPATH على التوالي ، على سبيل المثال :
$ python -c "import torch; print(torch.__version__)"
>>> 1.4.0
$ python -c "import torch; print(torch.__version__)"
>>> 1.1.0
$ echo $PATH
>>> /usr/local/cuda/bin:...
$ echo $CPATH
>>> /usr/local/cuda/include:...
ثم قم بالتشغيل:
pip install torch-cluster
عند التشغيل في حاوية Docker بدون برنامج تشغيل Nvidia ، يحتاج Pytorch إلى تقييم قدرات الحساب وقد يفشل. في هذه الحالة ، تأكد من تعيين إمكانيات الحساب عبر TORCH_CUDA_ARCH_LIST ، على سبيل المثال :
export TORCH_CUDA_ARCH_LIST = "6.0 6.1 7.2+PTX 7.5+PTX"
خوارزمية التجميع الجشع لاختيار قمة لا تحمل علامة ومطابقة مع واحد جيرانها غير المميزة (التي تزيد من وزنها الحافة). يتم تكييف خوارزمية GPU من Fagginger Auer و Bisseling: خوارزمية GPU لمطابقة الرسم البياني الجشع (LNCS 2012)
import torch
from torch_cluster import graclus_cluster
row = torch . tensor ([ 0 , 1 , 1 , 2 ])
col = torch . tensor ([ 1 , 0 , 2 , 1 ])
weight = torch . tensor ([ 1. , 1. , 1. , 1. ]) # Optional edge weights.
cluster = graclus_cluster ( row , col , weight ) print(cluster)
tensor([0, 0, 1])
خوارزمية التجميع ، التي تتراكب شبكة منتظمة من الحجم المعرفة من قبل المستخدم على سحابة نقطة وتتجمع جميع النقاط داخل Voxel.
import torch
from torch_cluster import grid_cluster
pos = torch . tensor ([[ 0. , 0. ], [ 11. , 9. ], [ 2. , 8. ], [ 2. , 2. ], [ 8. , 3. ]])
size = torch . Tensor ([ 5 , 5 ])
cluster = grid_cluster ( pos , size ) print(cluster)
tensor([0, 5, 3, 0, 1])
خوارزمية أخذ العينات ، والتي تقوم بتأييد النقطة البعيدة فيما يتعلق بنقاط الباقي.
import torch
from torch_cluster import fps
x = torch . tensor ([[ - 1. , - 1. ], [ - 1. , 1. ], [ 1. , - 1. ], [ 1. , 1. ]])
batch = torch . tensor ([ 0 , 0 , 0 , 0 ])
index = fps ( x , batch , ratio = 0.5 , random_start = False ) print(index)
tensor([0, 3])
يحسب حواف الرسم البياني إلى أقرب نقاط K.
args:
[N, F] .[N] ، والذي يعين كل عقدة إلى مثال محدد. يجب فرز batch . (افتراضي: None )True ، فسوف يحتوي الرسم البياني على حلول ذاتية. (افتراضي: False )"source_to_target" أو "target_to_source" ). (افتراضي: "source_to_target" )True ، سيستخدم مسافة جيب التمام بدلاً من المسافة الإقليدية للعثور على أقرب جيران. (افتراضي: False )batch None ، أو تكمن المدخلات على وحدة معالجة الرسومات. (افتراضي: 1 ) import torch
from torch_cluster import knn_graph
x = torch . tensor ([[ - 1. , - 1. ], [ - 1. , 1. ], [ 1. , - 1. ], [ 1. , 1. ]])
batch = torch . tensor ([ 0 , 0 , 0 , 0 ])
edge_index = knn_graph ( x , k = 2 , batch = batch , loop = False ) print(edge_index)
tensor([[1, 2, 0, 3, 0, 3, 1, 2],
[0, 0, 1, 1, 2, 2, 3, 3]])
يحسب حواف الرسم البياني إلى جميع النقاط على مسافة معينة.
args:
[N, F] .[N] ، والذي يعين كل عقدة إلى مثال محدد. يجب فرز batch . (افتراضي: None )True ، فسوف يحتوي الرسم البياني على حلول ذاتية. (افتراضي: False )max_num_neighbors ، يتم اختيار الجيران المعتمدين بشكل عشوائي. (افتراضي: 32 )"source_to_target" أو "target_to_source" ). (افتراضي: "source_to_target" )batch None ، أو تكمن المدخلات على وحدة معالجة الرسومات. (افتراضي: 1 ) import torch
from torch_cluster import radius_graph
x = torch . tensor ([[ - 1. , - 1. ], [ - 1. , 1. ], [ 1. , - 1. ], [ 1. , 1. ]])
batch = torch . tensor ([ 0 , 0 , 0 , 0 ])
edge_index = radius_graph ( x , r = 2.5 , batch = batch , loop = False ) print(edge_index)
tensor([[1, 2, 0, 3, 0, 3, 1, 2],
[0, 0, 1, 1, 2, 2, 3, 3]])
تشير المجموعات في X معًا والتي تقع أقرب إلى نقطة استعلام معينة في Y. يجب فرز المتجهات batch_{x,y} .
import torch
from torch_cluster import nearest
x = torch . Tensor ([[ - 1 , - 1 ], [ - 1 , 1 ], [ 1 , - 1 ], [ 1 , 1 ]])
batch_x = torch . tensor ([ 0 , 0 , 0 , 0 ])
y = torch . Tensor ([[ - 1 , 0 ], [ 1 , 0 ]])
batch_y = torch . tensor ([ 0 , 0 ])
cluster = nearest ( x , y , batch_x , batch_y ) print(cluster)
tensor([0, 0, 1, 1])
عينات عشوائية من المشي طول walk_length من جميع مؤشرات العقدة في start في الرسم البياني المعطى (row, col) .
import torch
from torch_cluster import random_walk
row = torch . tensor ([ 0 , 1 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 ])
col = torch . tensor ([ 1 , 0 , 2 , 3 , 1 , 4 , 1 , 4 , 2 , 3 ])
start = torch . tensor ([ 0 , 1 , 2 , 3 , 4 ])
walk = random_walk ( row , col , start , walk_length = 3 ) print(walk)
tensor([[0, 1, 2, 4],
[1, 3, 4, 2],
[2, 4, 2, 1],
[3, 4, 2, 4],
[4, 3, 1, 0]])
pytest
تقدم torch-cluster أيضًا واجهة برمجة تطبيقات C ++ التي تحتوي على C ++ المكافئة لنماذج Python.
export Torch_DIR=`python -c 'import torch;print(torch.utils.cmake_prefix_path)'`
mkdir build
cd build
# Add -DWITH_CUDA=on support for the CUDA if needed
cmake ..
make
make install