mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-17 22:00:40 -07:00
fix(mlx): bundle native libs and broaden error handling for Apple Silicon
The distributed macOS aarch64 binary shipped without MLX acceleration despite the model and backend code supporting it. Two root causes: 1. **OSError not caught in platform_detect.py** PyInstaller bundles isolate the filesystem, so when MLX tries to load its Metal shader libraries (.metallib) it raises OSError, not ImportError. platform_detect.get_backend_type() only caught ImportError, causing a silent fallback to PyTorch even on Apple Silicon hardware. Fix: broaden the except clause to (ImportError, OSError, RuntimeError) and import mlx.core instead of mlx (forces native lib loading eagerly). 2. **collect_data_files used instead of collect_all for MLX** build_binary.py and voicebox-server.spec used --collect-data / collect_data_files for mlx and mlx_audio. This copies Python source and pure-Python data, but NOT native shared libraries (.dylib, .metallib). Fix: switch to --collect-all / collect_all which captures binaries too, then pass them to Analysis(binaries=...) in the spec. Result: macOS Apple Silicon users now get MLX inference (~4-5x faster than PyTorch CPU), matching the performance documented in the README.
This commit is contained in:
@@ -83,9 +83,13 @@ def build_server():
|
||||
'--hidden-import', 'mlx_audio.stt',
|
||||
'--collect-submodules', 'mlx',
|
||||
'--collect-submodules', 'mlx_audio',
|
||||
# Collect MLX data files including Metal shader libraries (.metallib)
|
||||
'--collect-data', 'mlx',
|
||||
'--collect-data', 'mlx_audio',
|
||||
# Use --collect-all so PyInstaller bundles both data files AND
|
||||
# native shared libraries (.dylib, .metallib) for MLX.
|
||||
# Previously only --collect-data was used, which caused MLX to
|
||||
# raise OSError at runtime inside the bundled binary because
|
||||
# the Metal shader libraries were missing.
|
||||
'--collect-all', 'mlx',
|
||||
'--collect-all', 'mlx_audio',
|
||||
])
|
||||
else:
|
||||
print("Building for non-Apple Silicon platform - PyTorch only")
|
||||
|
||||
Reference in New Issue
Block a user