diff --git a/cmssw-tool-conf.spec b/cmssw-tool-conf.spec
index 7a2d8271051..fbae596f906 100644
--- a/cmssw-tool-conf.spec
+++ b/cmssw-tool-conf.spec
@@ -182,6 +182,7 @@ Requires: xtensor
Requires: xtl
Requires: xgboost
Requires: pytorch
+Requires: pytorch-custom-ops
## INCLUDE cmssw-vectorization
## INCLUDE cmssw-drop-tools
diff --git a/pytorch-cluster.spec b/pytorch-cluster.spec
new file mode 100644
index 00000000000..26fbec0f3cc
--- /dev/null
+++ b/pytorch-cluster.spec
@@ -0,0 +1,43 @@
+### RPM external pytorch-cluster 1.6.3
+## INCLUDE compilation_flags
+## INCLUDE cpp-standard
+%define tag f2d99195a0003ca2d2ba9ed50d0117e2f23360e0
+%define branch master
+%define github_user rusty1s
+
+Source: git+https://github.com/%{github_user}/pytorch_cluster.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz
+
+BuildRequires: cmake
+Requires: pytorch cudnn
+%define build_flags -Wall -Wextra -pedantic %{?arch_build_flags}
+
+%prep
+%setup -n %{n}-%{realversion}
+# Make sure the default c++sdt stand is c++14
+grep -q 'CMAKE_CXX_STANDARD *14' CMakeLists.txt
+sed -i -e 's|CMAKE_CXX_STANDARD *14|CMAKE_CXX_STANDARD %{cms_cxx_standard}|' CMakeLists.txt
+
+%build
+
+rm -rf ../build && mkdir ../build && cd ../build
+
+
+cmake ../%{n}-%{realversion} \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=%{i} \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_PREFIX_PATH="%{cmake_prefix_path}" \
+ -DCMAKE_CXX_STANDARD=%{cms_cxx_standard} \
+ -DCMAKE_CXX_FLAGS="%{build_flags}" \
+ -DBUILD_TEST=OFF \
+ -DWITH_PYTHON=OFF \
+ -DWITH_CUDA=OFF \
+ -DBUILD_TEST=OFF \
+ -DBUILD_SHARED_LIBS=ON
+
+
+make %{makeprocesses} VERBOSE=1
+
+%install
+cd ../build
+make %{makeprocesses} install VERBOSE=1
diff --git a/pytorch-custom-ops.spec b/pytorch-custom-ops.spec
new file mode 100644
index 00000000000..b95b2ca2fde
--- /dev/null
+++ b/pytorch-custom-ops.spec
@@ -0,0 +1,8 @@
+### RPM external pytorch-custom-ops 1.0
+Source: none
+Requires: pytorch-scatter
+Requires: pytorch-cluster
+Requires: pytorch-sparse
+%prep
+%build
+%install
diff --git a/pytorch-scatter.spec b/pytorch-scatter.spec
new file mode 100644
index 00000000000..943d8f4df18
--- /dev/null
+++ b/pytorch-scatter.spec
@@ -0,0 +1,43 @@
+### RPM external pytorch-scatter 2.1.2
+## INCLUDE compilation_flags
+## INCLUDE cpp-standard
+%define tag c095c62e4334fcd05e4ac3c4bb09d285960d6be6
+%define branch master
+%define github_user rusty1s
+
+Source: git+https://github.com/%{github_user}/pytorch_scatter.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz
+
+BuildRequires: cmake
+Requires: pytorch cudnn
+%define build_flags -Wall -Wextra -pedantic %{?arch_build_flags}
+
+%prep
+%setup -n %{n}-%{realversion}
+# Make sure the default c++sdt stand is c++14
+grep -q 'CMAKE_CXX_STANDARD *14' CMakeLists.txt
+sed -i -e 's|CMAKE_CXX_STANDARD *14|CMAKE_CXX_STANDARD %{cms_cxx_standard}|' CMakeLists.txt
+
+%build
+
+rm -rf ../build && mkdir ../build && cd ../build
+
+
+cmake ../%{n}-%{realversion} \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=%{i} \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_PREFIX_PATH="%{cmake_prefix_path}" \
+ -DCMAKE_CXX_STANDARD=%{cms_cxx_standard} \
+ -DCMAKE_CXX_FLAGS="%{build_flags}" \
+ -DBUILD_TEST=OFF \
+ -DWITH_PYTHON=OFF \
+ -DWITH_CUDA=OFF \
+ -DBUILD_TEST=OFF \
+ -DBUILD_SHARED_LIBS=ON
+
+
+make %{makeprocesses} VERBOSE=1
+
+%install
+cd ../build
+make %{makeprocesses} install VERBOSE=1
diff --git a/pytorch-sparse.spec b/pytorch-sparse.spec
new file mode 100644
index 00000000000..cbef709381a
--- /dev/null
+++ b/pytorch-sparse.spec
@@ -0,0 +1,43 @@
+### RPM external pytorch-sparse 0.6.18
+## INCLUDE compilation_flags
+## INCLUDE cpp-standard
+%define tag 2d559810c6af7f8b2cf88553dd5a5824a667a07d
+%define branch master
+%define github_user rusty1s
+
+Source: git+https://github.com/%{github_user}/pytorch_sparse.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz
+
+BuildRequires: cmake
+Requires: pytorch cudnn
+%define build_flags -Wall -Wextra -pedantic %{?arch_build_flags}
+
+%prep
+%setup -n %{n}-%{realversion}
+# Make sure the default c++sdt stand is c++14
+grep -q 'CMAKE_CXX_STANDARD *14' CMakeLists.txt
+sed -i -e 's|CMAKE_CXX_STANDARD *14|CMAKE_CXX_STANDARD %{cms_cxx_standard}|' CMakeLists.txt
+
+%build
+
+rm -rf ../build && mkdir ../build && cd ../build
+
+
+cmake ../%{n}-%{realversion} \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=%{i} \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_PREFIX_PATH="%{cmake_prefix_path}" \
+ -DCMAKE_CXX_STANDARD=%{cms_cxx_standard} \
+ -DCMAKE_CXX_FLAGS="%{build_flags}" \
+ -DBUILD_TEST=OFF \
+ -DWITH_PYTHON=OFF \
+ -DWITH_CUDA=OFF \
+ -DBUILD_TEST=OFF \
+ -DBUILD_SHARED_LIBS=ON
+
+
+make %{makeprocesses} VERBOSE=1
+
+%install
+cd ../build
+make %{makeprocesses} install VERBOSE=1
diff --git a/scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml b/scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml
new file mode 100644
index 00000000000..6d5befff06b
--- /dev/null
+++ b/scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/scram-tools.file/tools/pytorch-custom-ops/pytorch-custom-ops.xml b/scram-tools.file/tools/pytorch-custom-ops/pytorch-custom-ops.xml
new file mode 100644
index 00000000000..276fa00489d
--- /dev/null
+++ b/scram-tools.file/tools/pytorch-custom-ops/pytorch-custom-ops.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml b/scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml
new file mode 100644
index 00000000000..a9d2c01204d
--- /dev/null
+++ b/scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml b/scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml
new file mode 100644
index 00000000000..f89f3b1846e
--- /dev/null
+++ b/scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+