You've already forked macports-ports
mirror of
https://github.com/macports/macports-ports.git
synced 2026-07-12 18:20:25 -07:00
eb55e2fb54
Signed-off-by: Paul Guyot <pguyot@kallisys.net>
239 lines
8.5 KiB
Tcl
239 lines
8.5 KiB
Tcl
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
|
|
|
|
PortSystem 1.0
|
|
PortGroup github 1.0
|
|
PortGroup mpi 1.0
|
|
PortGroup python 1.0
|
|
|
|
github.setup pytorch pytorch 2.12.0 v
|
|
revision 0
|
|
name py-${github.project}
|
|
license BSD
|
|
maintainers nomaintainer
|
|
supported_archs arm64 x86_64
|
|
github.tarball_from releases
|
|
|
|
description Tensors and dynamic neural networks in Python \
|
|
with strong GPU acceleration
|
|
|
|
long_description PyTorch is a Python package that provides two \
|
|
high-level features: Tensor computation (like \
|
|
NumPy) with strong GPU acceleration\; Deep neural \
|
|
networks built on a tape-based autograd \
|
|
system. You can reuse your favorite Python \
|
|
packages such as NumPy, SciPy and Cython to extend \
|
|
PyTorch when needed.
|
|
|
|
homepage https://pytorch.org/
|
|
|
|
distname ${github.project}-${github.tag_prefix}${version}
|
|
|
|
checksums rmd160 9e979813d9fe7a417b9c127a8773b83d6c6a607d \
|
|
sha256 7cc1deb309f402ad67e9f45bbe311a40def4db19d66fddb9b01950f9bfc5ccb1 \
|
|
size 430864016
|
|
|
|
python.versions 310 311 312 313 314
|
|
|
|
# third_party/pthreadpool needs DISPATCH_APPLY_AUTO (as of torch 2.0.0), requiring 10.12+
|
|
# But builds fail for 10.12 - 10.14, so exclude those too
|
|
platforms {darwin >= 19}
|
|
|
|
mpi.setup
|
|
|
|
# Compiler selection
|
|
compiler.cxx_standard 2017
|
|
|
|
compiler.blacklist-append *gcc*
|
|
compiler.blacklist-append {clang < 1700}
|
|
|
|
variant mkl description {Enable Intel Math Kernel Library support} { }
|
|
|
|
# py-mkl supports x86_64 and 10.12 and later only
|
|
if {${configure.build_arch} eq "x86_64" && !($universal_possible && [variant_isset universal])
|
|
&& !(${os.platform} eq "darwin" && ${os.major} <= 15)} {
|
|
default_variants-append +mkl
|
|
}
|
|
|
|
platform darwin {
|
|
if {${os.major} >= 18} {
|
|
variant mps description {Enable Apple Metal Performance Shaders (MPS) support} {
|
|
use_xcode yes
|
|
|
|
# Align the sysroot with the Xcode SDK so AvailabilityMacros.h defines
|
|
# __MAC_15_0 (and __MAC_26_0 etc.), preventing the forward-compat shims
|
|
# in MPSGraphSequoiaOps.h from being compiled when the Xcode SDK already
|
|
# provides those Metal/MPS symbols via its framework headers.
|
|
configure.sdkroot \
|
|
[exec xcrun --sdk macosx --show-sdk-path]
|
|
|
|
build.env-append \
|
|
APPLE=ON \
|
|
USE_MPS=ON \
|
|
USE_PYTORCH_METAL=ON \
|
|
USE_PYTORCH_METAL_EXPORT=ON
|
|
|
|
notes-append \
|
|
"
|
|
The port ${subport} is built with Apple Metal Performance Shaders (MPS)\
|
|
support for GPU hardware acceleration. To enable Apple GPU devices,\
|
|
use device \"mps\". Matrix multiplication example:
|
|
|
|
import torch
|
|
|
|
mpsDevice = torch.device(\"mps\" if\
|
|
torch.backends.mps.is_available() else \"cpu\")
|
|
x = torch.randn((10_000, 1_000), device=mpsDevice)
|
|
cov = (x.T @ x)/x.shape\[0]
|
|
"
|
|
}
|
|
|
|
default_variants-append +mps
|
|
}
|
|
}
|
|
|
|
if {${name} ne ${subport}} {
|
|
depends_build-append \
|
|
port:git \
|
|
path:bin/doxygen:doxygen \
|
|
port:cctools \
|
|
path:bin/cmake:cmake \
|
|
path:bin/ninja:ninja \
|
|
port:py${python.version}-requests
|
|
|
|
depends_lib-append \
|
|
path:share/pkgconfig/eigen3.pc:eigen3 \
|
|
port:gflags \
|
|
port:google-glog \
|
|
port:libomp \
|
|
port:protobuf3-cpp \
|
|
port:py${python.version}-click \
|
|
port:py${python.version}-future \
|
|
port:py${python.version}-numpy \
|
|
port:py${python.version}-pybind11 \
|
|
port:py${python.version}-six \
|
|
port:py${python.version}-sympy \
|
|
port:py${python.version}-typing_extensions \
|
|
port:py${python.version}-yaml \
|
|
port:zstd
|
|
|
|
depends_run-append \
|
|
port:py${python.version}-onnx \
|
|
port:py${python.version}-packaging \
|
|
port:py${python.version}-zstd
|
|
|
|
# remove unnecessary dependencies and version pinning
|
|
patchfiles-append patch-pyproject_toml.diff
|
|
|
|
# Patch to fix init issue with google-glog 0.5.0, caused by breaking API change.
|
|
# Refer to patch comments for detailed background.
|
|
# Upstream PyTorch issue: https://github.com/pytorch/pytorch/issues/58054
|
|
# diff -NaurdwB ./py-pytorch-orig/c10/util/Logging.cpp ./py-pytorch-new/c10/util/Logging.cpp | sed -E -e 's/\.\/py-pytorch-(orig|new)/\./g' | sed -E -e 's|/opt/local|@@PREFIX@@|g' > ~/Downloads/patch-glog-init-check.diff
|
|
patchfiles-append patch-glog-init-check.diff
|
|
|
|
# Use Intel Math kernel Library
|
|
if {[variant_isset mkl]} {
|
|
patchfiles-append FindMKL-OMP.patch
|
|
pre-build {
|
|
# Hacks to get search paths into builds
|
|
reinplace "s|/opt/intel/mkl|${python.prefix}|g" \
|
|
cmake/Modules/FindMKL.cmake
|
|
reinplace "s|mklvers \"intel64\"|mklvers \"\"|g" \
|
|
cmake/Modules/FindMKL.cmake
|
|
reinplace "s|MACPORTS_PREFIX|${prefix}|g" \
|
|
cmake/Modules/FindMKL.cmake
|
|
}
|
|
depends_lib-append port:py${python.version}-mkl
|
|
depends_build-append port:py${python.version}-mkl-include
|
|
|
|
build.env-append \
|
|
BLAS_SET_BY_USER=ON
|
|
}
|
|
|
|
compiler.cpath-append \
|
|
${prefix}/include/libomp
|
|
|
|
compiler.library_path-append \
|
|
${prefix}/lib/libomp
|
|
|
|
configure.cppflags-append \
|
|
-I${prefix}/include/libomp
|
|
|
|
# ccache configuration
|
|
configure.ccache yes
|
|
set ccache_dir ${workpath}/.ccache
|
|
|
|
if {[option configure.ccache]} {
|
|
depends_build-append \
|
|
path:bin/ccache:ccache
|
|
|
|
post-patch {
|
|
xinstall -d ${ccache_dir}
|
|
}
|
|
|
|
configure.env-append CCACHE_DIR=${ccache_dir} USE_CCACHE=ON
|
|
build.env-append CCACHE_DIR=${ccache_dir} USE_CCACHE=ON
|
|
destroot.env-append CCACHE_DIR=${ccache_dir} USE_CCACHE=ON
|
|
} else {
|
|
# commands to disable ccache
|
|
configure.ccache no
|
|
configure.env-append CCACHE_DISABLE=1 USE_CCACHE=OFF
|
|
build.env-append CCACHE_DISABLE=1 USE_CCACHE=OFF
|
|
destroot.env-append CCACHE_DISABLE=1 USE_CCACHE=OFF
|
|
|
|
# Limit cores for parallel builds
|
|
# Note: parallel builds observed to fail on 8, 24 cores without ccache
|
|
use_parallel_build yes
|
|
set max_build_jobs 4
|
|
if {[option build.jobs] < ${max_build_jobs}} {
|
|
set max_build_jobs [option build.jobs]
|
|
}
|
|
build.env-append \
|
|
CMAKE_BUILD_PARALLEL_LEVEL=${max_build_jobs}
|
|
}
|
|
|
|
build.env-append \
|
|
BUILD_CUSTOM_PROTOBUF=OFF \
|
|
USE_CUDA=OFF \
|
|
USE_DISTRIBUTED=ON \
|
|
USE_EIGEN_SPARSE=ON \
|
|
USE_GFLAGS=ON \
|
|
USE_GLOG=ON \
|
|
USE_GLOO=ON \
|
|
USE_LITE_PROTO=ON \
|
|
USE_NCCL=OFF \
|
|
USE_OPENMP=ON \
|
|
USE_RCCL=OFF \
|
|
USE_ROCM=OFF \
|
|
USE_SYSTEM_EIGEN_INSTALL=ON \
|
|
USE_SYSTEM_PYBIND11=ON \
|
|
USE_XPU=OFF
|
|
|
|
post-destroot {
|
|
set py_torch_root ${python.pkgd}/torch
|
|
foreach slib [glob -directory ${destroot}${py_torch_root} *.so] {
|
|
system "install_name_tool -add_rpath ${py_torch_root}/lib ${slib}"
|
|
}
|
|
|
|
# Upstream PyTorch bundles pybind11 headers in its include directory.
|
|
# Since we use USE_SYSTEM_PYBIND11=ON, create a symlink so downstream
|
|
# packages (torchaudio, torchvision, etc.) can find pybind11 headers.
|
|
ln -s ${python.pkgd}/pybind11/include/pybind11 \
|
|
${destroot}${py_torch_root}/include/pybind11
|
|
|
|
set docdir ${prefix}/share/doc/${subport}
|
|
xinstall -d ${destroot}${docdir}
|
|
xinstall -m 0644 -W ${worksrcpath} LICENSE README.md \
|
|
${destroot}${docdir}
|
|
}
|
|
|
|
# pytorch's tests all use GPU compilation
|
|
if { [lsearch ${build.env} {USE_CUDA=OFF}] != -1 } {
|
|
test.run yes
|
|
}
|
|
} else {
|
|
# overload the github livecheck regex to look for versions that
|
|
# are just numbers and '.', no letters (e.g., "3.7.3_rc2").
|
|
livecheck.url https://github.com/pytorch/pytorch/releases
|
|
livecheck.regex {/tree/v(([[:digit:]]+\.)+[[:digit:]]+)}
|
|
}
|