mirror of
https://github.com/ml-explore/mlx.git
synced 2025-06-24 17:31:16 +08:00
Minimum xcode / sdk (#800)
* minimum xcode /sdk * try multiple xcode versions in CI * update python * metal validation for python tests
This commit is contained in:
parent
afd5274049
commit
f512b905c7
@ -63,16 +63,20 @@ jobs:
|
|||||||
command: ./build/tests/tests
|
command: ./build/tests/tests
|
||||||
|
|
||||||
mac_build_and_test:
|
mac_build_and_test:
|
||||||
|
parameters:
|
||||||
|
xcode_version:
|
||||||
|
type: string
|
||||||
|
default: "15.2.0"
|
||||||
macos:
|
macos:
|
||||||
xcode: "15.2.0"
|
xcode: << parameters.xcode_version >>
|
||||||
resource_class: macos.m1.large.gen1
|
resource_class: macos.m1.large.gen1
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- run:
|
- run:
|
||||||
name: Install dependencies
|
name: Install dependencies
|
||||||
command: |
|
command: |
|
||||||
brew install python@3.9
|
brew install python@3.8
|
||||||
python3.9 -m venv env
|
python3.8 -m venv env
|
||||||
source env/bin/activate
|
source env/bin/activate
|
||||||
pip install --upgrade pip
|
pip install --upgrade pip
|
||||||
pip install --upgrade cmake
|
pip install --upgrade cmake
|
||||||
@ -97,7 +101,7 @@ jobs:
|
|||||||
command: |
|
command: |
|
||||||
source env/bin/activate
|
source env/bin/activate
|
||||||
LOW_MEMORY=1 DEVICE=cpu python -m xmlrunner discover -v python/tests -o test-results/cpu
|
LOW_MEMORY=1 DEVICE=cpu python -m xmlrunner discover -v python/tests -o test-results/cpu
|
||||||
LOW_MEMORY=1 DEVICE=gpu python3.9 -m xmlrunner discover -v python/tests -o test-results/gpu
|
LOW_MEMORY=1 DEVICE=gpu METAL_DEVICE_WRAPPER_TYPE=1 METAL_DEBUG_ERROR_MODE=0 python -m xmlrunner discover -v python/tests -o test-results/gpu
|
||||||
# TODO: Reenable when extension api becomes stable
|
# TODO: Reenable when extension api becomes stable
|
||||||
# - run:
|
# - run:
|
||||||
# name: Build example extension
|
# name: Build example extension
|
||||||
@ -235,7 +239,10 @@ workflows:
|
|||||||
- not: << pipeline.parameters.weekly_build >>
|
- not: << pipeline.parameters.weekly_build >>
|
||||||
- not: << pipeline.parameters.test_release >>
|
- not: << pipeline.parameters.test_release >>
|
||||||
jobs:
|
jobs:
|
||||||
- mac_build_and_test
|
- mac_build_and_test:
|
||||||
|
matrix:
|
||||||
|
parameters:
|
||||||
|
xcode_version: ["15.0.0", "15.2.0"]
|
||||||
- linux_build_and_test
|
- linux_build_and_test
|
||||||
|
|
||||||
build_pypi_release:
|
build_pypi_release:
|
||||||
@ -254,7 +261,7 @@ workflows:
|
|||||||
matrix:
|
matrix:
|
||||||
parameters:
|
parameters:
|
||||||
python_version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
python_version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
||||||
xcode_version: ["14.3.1", "15.2.0"]
|
xcode_version: ["15.0.0", "15.2.0"]
|
||||||
build_env: ["PYPI_RELEASE=1"]
|
build_env: ["PYPI_RELEASE=1"]
|
||||||
prb:
|
prb:
|
||||||
when:
|
when:
|
||||||
@ -280,7 +287,7 @@ workflows:
|
|||||||
matrix:
|
matrix:
|
||||||
parameters:
|
parameters:
|
||||||
python_version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
python_version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
||||||
xcode_version: ["14.3.1", "15.2.0"]
|
xcode_version: ["15.0.0", "15.2.0"]
|
||||||
weekly_build:
|
weekly_build:
|
||||||
when:
|
when:
|
||||||
and:
|
and:
|
||||||
@ -291,7 +298,7 @@ workflows:
|
|||||||
matrix:
|
matrix:
|
||||||
parameters:
|
parameters:
|
||||||
python_version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
python_version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
||||||
xcode_version: ["14.3.1", "15.2.0"]
|
xcode_version: ["15.0.0", "15.2.0"]
|
||||||
build_env: ["DEV_RELEASE=1"]
|
build_env: ["DEV_RELEASE=1"]
|
||||||
linux_test_release:
|
linux_test_release:
|
||||||
when:
|
when:
|
||||||
|
@ -77,10 +77,8 @@ elseif (MLX_BUILD_METAL)
|
|||||||
set(METAL_CPP_URL https://developer.apple.com/metal/cpp/files/metal-cpp_macOS14.2_iOS17.2.zip)
|
set(METAL_CPP_URL https://developer.apple.com/metal/cpp/files/metal-cpp_macOS14.2_iOS17.2.zip)
|
||||||
elseif (${MACOS_VERSION} GREATER_EQUAL 14.0)
|
elseif (${MACOS_VERSION} GREATER_EQUAL 14.0)
|
||||||
set(METAL_CPP_URL https://developer.apple.com/metal/cpp/files/metal-cpp_macOS14_iOS17-beta.zip)
|
set(METAL_CPP_URL https://developer.apple.com/metal/cpp/files/metal-cpp_macOS14_iOS17-beta.zip)
|
||||||
elseif (${MACOS_VERSION} GREATER_EQUAL 13.3)
|
else ()
|
||||||
set(METAL_CPP_URL https://developer.apple.com/metal/cpp/files/metal-cpp_macOS13.3_iOS16.4.zip)
|
message(FATAL_ERROR "MLX requires macOS >= 13.5 to be built with MLX_BUILD_METAL=ON")
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "MLX requires macOS >= 13.4 to be built with MLX_BUILD_METAL=ON" )
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
|
@ -15,7 +15,7 @@ To install from PyPI you must meet the following requirements:
|
|||||||
|
|
||||||
- Using an M series chip (Apple silicon)
|
- Using an M series chip (Apple silicon)
|
||||||
- Using a native Python >= 3.8
|
- Using a native Python >= 3.8
|
||||||
- macOS >= 13.3
|
- macOS >= 13.5
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
MLX is only available on devices running macOS >= 13.3
|
MLX is only available on devices running macOS >= 13.3
|
||||||
@ -54,7 +54,7 @@ Build Requirements
|
|||||||
|
|
||||||
- A C++ compiler with C++17 support (e.g. Clang >= 5.0)
|
- A C++ compiler with C++17 support (e.g. Clang >= 5.0)
|
||||||
- `cmake <https://cmake.org/>`_ -- version 3.24 or later, and ``make``
|
- `cmake <https://cmake.org/>`_ -- version 3.24 or later, and ``make``
|
||||||
- Xcode >= 14.3 (Xcode >= 15.0 for macOS 14 and above)
|
- Xcode >= 15.0 and macOS >= 13.5
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Ensure your shell environment is native ``arm``, not ``x86`` via Rosetta. If
|
Ensure your shell environment is native ``arm``, not ``x86`` via Rosetta. If
|
||||||
|
@ -428,12 +428,21 @@ void Matmul::eval_gpu(const std::vector<array>& inputs, array& out) {
|
|||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"[matmul] Does not yet support non-floating point types.");
|
"[matmul] Does not yet support non-floating point types.");
|
||||||
}
|
}
|
||||||
out.set_data(allocator::malloc_or_wait(out.nbytes()));
|
|
||||||
auto& s = stream();
|
auto& s = stream();
|
||||||
auto& d = metal::device(s.device);
|
auto& d = metal::device(s.device);
|
||||||
|
|
||||||
auto& a_pre = inputs[0];
|
auto& a_pre = inputs[0];
|
||||||
auto& b_pre = inputs[1];
|
auto& b_pre = inputs[1];
|
||||||
|
// Return 0s if either input is empty
|
||||||
|
if (a_pre.size() == 0 || b_pre.size() == 0) {
|
||||||
|
array zero = array(0, a_pre.dtype());
|
||||||
|
copy_gpu(zero, out, CopyType::Scalar, s);
|
||||||
|
auto command_buffer = d.get_command_buffer(s.index);
|
||||||
|
command_buffer->addCompletedHandler([zero](MTL::CommandBuffer*) {});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
out.set_data(allocator::malloc_or_wait(out.nbytes()));
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Init checks and prep
|
// Init checks and prep
|
||||||
@ -573,7 +582,6 @@ void Matmul::eval_gpu(const std::vector<array>& inputs, array& out) {
|
|||||||
[copies](MTL::CommandBuffer*) mutable { copies.clear(); });
|
[copies](MTL::CommandBuffer*) mutable { copies.clear(); });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Gemm specialization
|
// Gemm specialization
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user