تتكون هذه الحزمة من مكتبة تمديد صغيرة من عمليات المصفوفة المتفرقة المحسنة مع دعم Autograd. تتكون هذه الحزمة حاليًا من الطرق التالية:
جميع العمليات المشمولة تعمل على أنواع البيانات المختلفة ويتم تنفيذها لكل من وحدة المعالجة المركزية و GPU. لتجنب الكزارة الخاصة بإنشاء torch.sparse_coo_tensor ، تحدد هذه الحزمة العمليات على الموترات المتفرقة ببساطة عن طريق تمرير index value التوترات كوسيطات (مع نفس الأشكال كما هو محدد في pytorch). لاحظ أن value فقط تأتي مع دعم Autograd ، حيث أن index منفصل وبالتالي غير قابل للتمييز.
تحديث: يمكنك الآن تثبيت pytorch-sparse عبر Anaconda لجميع مجموعات OS/Pytorch/CUDA الرئيسية؟ بالنظر إلى أن لديك pytorch >= 1.8.0 مثبت ، ما عليك سوى تشغيل
conda install pytorch-sparse -c pyg
بدلاً من ذلك ، نقدم عجلات PIP لجميع مجموعات OS/Pytorch/CUDA الرئيسية ، انظر هنا.
لتثبيت الثنائيات لـ Pytorch 2.5.0 ، ما عليك سوى تشغيل
pip install torch-scatter torch-sparse -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-scatter torch-sparse -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.7.0 على الأقل والتحقق من أن cuda/bin و cuda/include في طريقك $PATH و $CPATH على التوالي ، على سبيل المثال :
$ python -c "import torch; print(torch.__version__)"
>>> 1.7.0
$ echo $PATH
>>> /usr/local/cuda/bin:...
$ echo $CPATH
>>> /usr/local/cuda/include:...
إذا كنت ترغب في إنشاء torch-sparse بالإضافة إلى دعم Metis ، على سبيل المثال ، للتشكيل ، يرجى تنزيل مكتبة Metis وتثبيتها باتباع الإرشادات الواردة في ملف Install.txt . لاحظ أنه يجب تثبيت METIS مع 64 بت IDXTYPEWIDTH عن طريق تغيير include/metis.h . بعد ذلك ، قم بتعيين متغير البيئة WITH_METIS=1 .
ثم قم بالتشغيل:
pip install torch-scatter torch-sparse
عند التشغيل في حاوية Docker بدون برنامج تشغيل Nvidia ، يحتاج Pytorch إلى تقييم قدرات الحساب وقد يفشل. في هذه الحالة ، تأكد من تعيين إمكانيات الحساب عبر TORCH_CUDA_ARCH_LIST ، على سبيل المثال :
export TORCH_CUDA_ARCH_LIST="6.0 6.1 7.2+PTX 7.5+PTX"
torch_sparse.coalesce(index, value, m, n, op="add") -> (torch.LongTensor, torch.Tensor)
index فرز الصف ويزيل الإدخالات المكررة. تتم إزالة الإدخالات المكررة عن طريق تشتتها معًا. للتناثر ، يمكن استخدام أي عملية من torch_scatter .
"add" ) import torch
from torch_sparse import coalesce
index = torch . tensor ([[ 1 , 0 , 1 , 0 , 2 , 1 ],
[ 0 , 1 , 1 , 1 , 0 , 0 ]])
value = torch . Tensor ([[ 1 , 2 ], [ 2 , 3 ], [ 3 , 4 ], [ 4 , 5 ], [ 5 , 6 ], [ 6 , 7 ]])
index , value = coalesce ( index , value , m = 3 , n = 2 ) print(index)
tensor([[0, 1, 1, 2],
[1, 0, 1, 0]])
print(value)
tensor([[6.0, 8.0],
[7.0, 9.0],
[3.0, 4.0],
[5.0, 6.0]])
torch_sparse.transpose(index, value, m, n) -> (torch.LongTensor, torch.Tensor)
أبعاد النقل 0 و 1 من مصفوفة متناثرة.
False ، فلن يؤدي إلى تجميع الإخراج. (افتراضي: True ) import torch
from torch_sparse import transpose
index = torch . tensor ([[ 1 , 0 , 1 , 0 , 2 , 1 ],
[ 0 , 1 , 1 , 1 , 0 , 0 ]])
value = torch . Tensor ([[ 1 , 2 ], [ 2 , 3 ], [ 3 , 4 ], [ 4 , 5 ], [ 5 , 6 ], [ 6 , 7 ]])
index , value = transpose ( index , value , 3 , 2 ) print(index)
tensor([[0, 0, 1, 1],
[1, 2, 0, 1]])
print(value)
tensor([[7.0, 9.0],
[5.0, 6.0],
[6.0, 8.0],
[3.0, 4.0]])
torch_sparse.spmm(index, value, m, n, matrix) -> torch.Tensor
منتج مصفوفة من مصفوفة متناثرة مع مصفوفة كثيفة.
import torch
from torch_sparse import spmm
index = torch . tensor ([[ 0 , 0 , 1 , 2 , 2 ],
[ 0 , 2 , 1 , 0 , 1 ]])
value = torch . Tensor ([ 1 , 2 , 4 , 1 , 3 ])
matrix = torch . Tensor ([[ 1 , 4 ], [ 2 , 5 ], [ 3 , 6 ]])
out = spmm ( index , value , 3 , 3 , matrix ) print(out)
tensor([[7.0, 16.0],
[8.0, 20.0],
[7.0, 19.0]])
torch_sparse.spspmm(indexA, valueA, indexB, valueB, m, k, n) -> (torch.LongTensor, torch.Tensor)
مصفوفة المنتج من اثنين من الموترات المتفرقة. كلتا المصفوفات المتفرقة في الإدخال تحتاج إلى تجميع (استخدم السمة coalesced للقوة).
True ، فسيقوم بتجميع كلا من المصفوفات المتفرقة الإدخال. (افتراضي: False ) import torch
from torch_sparse import spspmm
indexA = torch . tensor ([[ 0 , 0 , 1 , 2 , 2 ], [ 1 , 2 , 0 , 0 , 1 ]])
valueA = torch . Tensor ([ 1 , 2 , 3 , 4 , 5 ])
indexB = torch . tensor ([[ 0 , 2 ], [ 1 , 0 ]])
valueB = torch . Tensor ([ 2 , 4 ])
indexC , valueC = spspmm ( indexA , valueA , indexB , valueB , 3 , 3 , 2 ) print(indexC)
tensor([[0, 1, 2],
[0, 1, 1]])
print(valueC)
tensor([8.0, 6.0, 8.0])
pytest
يوفر torch-sparse أيضًا واجهة برمجة تطبيقات C ++ التي تحتوي على C ++ المكافئة لنماذج Python. لهذا ، نحتاج إلى إضافة TorchLib إلى -DCMAKE_PREFIX_PATH ( على سبيل المثال ، قد يكون موجودًا في {CONDA}/lib/python{XX}/site-packages/torch إذا تم تثبيته عبر conda ):
mkdir build
cd build
# Add -DWITH_CUDA=on support for CUDA support
cmake -DCMAKE_PREFIX_PATH="..." ..
make
make install