← All tasks
cpppytorch/vision #8222Not a task: not reproduced

Build fails on Mac; Linker missing Metal and Objc libraries

envgap__pytorch__vision-8222

01 / FAILURE SIGNATURE

As reported upstream

No identifying execution failure has been captured.
Not a benchmark task.
  • In a clean container the reported failure did not reproduce, or the known fix did not make the project run.

02 / ENVIRONMENT RECIPE

Base commit
315f31527e720999eecbb986679b3177d4ed5e37
Manifest
CMakeLists.txt
Reproduce
Awaiting issue-specific recipe
Run under trace
Awaiting a meaningful runtime command

03 / ORIGINAL ISSUE TEXT

pytorch/vision #8222 · read the original issue
### 🐛 Describe the bug

When I build the library from source according to the instructions I get the following linker errors:

```bash

Undefined symbols for architecture arm64:

  "_OBJC_CLASS_$_MTLCompileOptions", referenced from:

      objc-class-ref in nms_kernel.mm.o

      objc-class-ref in ps_roi_align_kernel.mm.o

      objc-class-ref in ps_roi_pool_kernel.mm.o

      objc-class-ref in roi_align_kernel.mm.o

      objc-class-ref in roi_pool_kernel.mm.o

  "_OBJC_CLASS_$_NSString", referenced from:

      objc-class-ref in nms_kernel.mm.o

      objc-class-ref in ps_roi_align_kernel.mm.o

      objc-class-ref in ps_roi_pool_kernel.mm.o

      objc-class-ref in roi_align_kernel.mm.o

      objc-class-ref in roi_pool_kernel.mm.o

  "_objc_autorelease", referenced from:

      vision::ops::mps::compileVisionOpsLibrary(id<MTLDevice>) in nms_kernel.mm.o

      vision::ops::mps::compileVisionOpsLibrary(id<MTLDevice>) in ps_roi_align_kernel.mm.o

      vision::ops::mps::compileVisionOpsLibrary(id<MTLDevice>) in ps_roi_pool_kernel.mm.o

      vision::ops::mps::compileVisionOpsLibrary(id<MTLDevice>) in roi_align_kernel.mm.o

      vision::ops::mps::compileVisionOpsLibrary(id<MTLDevice>) in roi_pool_kernel.mm.o

  "_objc_autoreleasePoolPop", referenced from:

      ____ZN6vision3ops12_GLOBAL__N_110nms_kernelERKN2at6TensorES5_d_block_invoke in nms_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_127ps_roi_align_forward_kernelERKN2at6TensorES5_dxxx_block_invoke in ps_roi_align_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_128ps_roi_align_backward_kernelERKN2at6TensorES5_S5_dxxxxxxx_block_invoke in ps_roi_align_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_126ps_roi_pool_forward_kernelERKN2at6TensorES5_dxx_block_invoke in ps_roi_pool_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_127ps_roi_pool_backward_kernelERKN2at6TensorES5_S5_dxxxxxx_block_invoke in ps_roi_pool_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_124roi_align_forward_kernelERKN2at6TensorES5_dxxxb_block_invoke in roi_align_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_125roi_align_backward_kernelERKN2at6TensorES5_dxxxxxxxb_block_invoke in roi_align_kernel.mm.o

      ...

  "_objc_autoreleasePoolPush", referenced from:

      ____ZN6vision3ops12_GLOBAL__N_110nms_kernelERKN2at6TensorES5_d_block_invoke in nms_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_127ps_roi_align_forward_kernelERKN2at6TensorES5_dxxx_block_invoke in ps_roi_align_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_128ps_roi_align_backward_kernelERKN2at6TensorES5_S5_dxxxxxxx_block_invoke in ps_roi_align_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_126ps_roi_pool_forward_kernelERKN2at6TensorES5_dxx_block_invoke in ps_roi_pool_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_127ps_roi_pool_backward_kernelERKN2at6TensorES5_S5_dxxxxxx_block_invoke in ps_roi_pool_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_124roi_align_forward_kernelERKN2at6TensorES5_dxxxb_block_invoke in roi_align_kernel.mm.o

      ____ZN6vision3ops12_GLOBAL__N_125roi_align_backward_kernelERKN2at6TensorES5_dxxxxxxxb_block_invoke in roi_align_kernel.mm.o

      ...

  "_objc_opt_new", referenced from:

      vision::ops::mps::compileVisionOpsLibrary(id<MTLDevice>) in nms_kernel.mm.o

      vision::ops::mps::compileVisionOpsLibrary(id<MTLDevice>) in ps_roi_align_kernel.mm.o

      vision::ops::mps::compileVisionOpsLibrary(id<MTLDevice>) in ps_roi_pool_kernel.mm.o

      vision::ops::mps::compileVisionOpsLibrary(id<MTLDevice>) in roi_align_kernel.mm.o

      vision::ops::mps::compileVisionOpsLibrary(id<MTLDevice>) in roi_pool_kernel.mm.o

ld: symbol(s) not found for architecture arm64

``` 

I use cmake to set up the build like so: ` /opt/homebrew/bin/cmake -DCMAKE_PREFIX_PATH=`python3 -c 'import torch;print(torch.utils.cmake_prefix_path)'` -DWITH_MPS=1`. Torchvision builds when I turn MPS builds off. 



What can I do to build the project from source with MPS successfully? 





### Versions

Collecting environment information...

PyTorch version: 2.1.0

Is debug build: False

CUDA used to build PyTorch: None

ROCM used to build PyTorch: N/A



OS: macOS 13.4.1 (arm64)

GCC version: Could not collect

Clang version: 14.0.3 (clang-1403.0.22.14.1)

CMake version: version 3.27.1

Libc version: N/A



Python version: 3.9.6 (default, May  7 2023, 23:32:44)  [Clang 14.0.3 (clang-1403.0.22.14.1)] (64-bit runtime)

Python platform: macOS-13.4.1-arm64-arm-64bit

Is CUDA available: False

CUDA runtime version: No CUDA

CUDA_MODULE_LOADING set to: N/A

GPU models and configuration: No CUDA

Nvidia driver version: No CUDA

cuDNN version: No CUDA

HIP runtime version: N/A

MIOpen runtime version: N/A

Is XNNPACK available: True



CPU:

Apple M2 Max



Versions of relevant libraries:

[pip3] numpy==1.25.2

[pip3] torch==2.1.0

[pip3] torchdata==0.7.0

[pip3] torchtext==0.16.0

[pip3] torchvision==0.16.0

[conda] Could not collect
Continue on GitHub ↗

04 / LABELS

Labels from the report text only; not yet run

No supported category has been assigned.

Label rules and the text that matched
[]