แพ็คเกจนี้ประกอบด้วยไลบรารีส่วนขยายขนาดเล็กของการดำเนินการเมทริกซ์เบาบางที่ได้รับการปรับปรุงด้วยการสนับสนุนอัตโนมัติ แพ็คเกจนี้ประกอบด้วยวิธีการต่อไปนี้:
รวมการดำเนินงานทั้งหมดทำงานเกี่ยวกับประเภทข้อมูลที่แตกต่างกันและมีการใช้งานทั้งสำหรับ CPU และ GPU เพื่อหลีกเลี่ยงการเกิด habzle ของการสร้าง torch.sparse_coo_tensor แพ็คเกจนี้กำหนดการดำเนินการบนเทนเซอร์เบาบางโดยเพียงแค่ผ่าน index และเทนเซอร์ value เป็นอาร์กิวเมนต์ (มีรูปร่างเดียวกับที่กำหนดไว้ใน Pytorch) โปรดทราบว่า value เท่านั้นที่มาพร้อมกับการสนับสนุนอัตโนมัติเนื่องจาก index ไม่ต่อเนื่องและไม่แตกต่างกัน
อัปเดต: ตอนนี้คุณสามารถติดตั้ง pytorch-sparse ผ่าน Anaconda สำหรับชุดที่สำคัญทั้งหมด/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 | |
|---|---|---|---|---|
| ลินเวกซ์ | ||||
| หน้าต่าง | ||||
| แม็กอส |
ในการติดตั้งไบนารีสำหรับ 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 | |
|---|---|---|---|---|
| ลินเวกซ์ | ||||
| หน้าต่าง | ||||
| แม็กอส |
หมายเหตุ: ไบนารีของรุ่นเก่ามีไว้สำหรับ 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 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.1/2.2.2 สำหรับรุ่นเก่าคุณต้องระบุหมายเลขเวอร์ชันล่าสุดที่รองรับล่าสุดหรือติดตั้งผ่าน 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 ++ API ที่มี 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