Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CI] Set up CI for Mac M1 #9699

Merged
merged 13 commits into from
Oct 23, 2023
Merged
2 changes: 1 addition & 1 deletion src/collective/comm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Comm::Comm(std::string const& host, std::int32_t port, std::chrono::seconds time
retry_{retry},
tracker_{host, port, -1},
task_id_{std::move(task_id)},
loop_{std::make_shared<Loop>(timeout)} {}
loop_{std::shared_ptr<Loop>{new Loop{timeout}}} {}

Result ConnectTrackerImpl(proto::PeerInfo info, std::chrono::seconds timeout, std::int32_t retry,
std::string const& task_id, TCPSocket* out, std::int32_t rank,
Expand Down
8 changes: 8 additions & 0 deletions tests/buildkite/pipeline-mac-m1.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
steps:
- block: ":rocket: Run this test job"
if: build.pull_request.id != null || build.branch =~ /^dependabot\//
- label: ":macos: Build and Test XGBoost for MacOS M1 with Clang 11"
command: "tests/buildkite/test-macos-m1-clang11.sh"
key: mac-m1-appleclang11
agents:
queue: mac-mini-m1
33 changes: 33 additions & 0 deletions tests/buildkite/test-macos-m1-clang11.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/bash

set -euo pipefail

source tests/buildkite/conftest.sh

# Display system info
echo "--- Display system information"
set -x
system_profiler SPSoftwareDataType
sysctl -n machdep.cpu.brand_string
uname -m
set +x

# Create new Conda env
echo "--- Set up Conda env"
. $HOME/mambaforge/etc/profile.d/conda.sh
. $HOME/mambaforge/etc/profile.d/mamba.sh
conda_env=xgboost_dev_$(uuidgen | tr '[:upper:]' '[:lower:]' | tr -d '-')
mamba create -y -n ${conda_env} python=3.8
conda activate ${conda_env}
mamba env update -n ${conda_env} --file tests/ci_build/conda_env/macos_cpu_test.yml

# Ensure that XGBoost can be built with Clang 11
echo "--- Build and Test XGBoost with MacOS M1, Clang 11"
set -x
LLVM11_PATH=$(brew --prefix llvm\@11)
mkdir build
pushd build
cmake .. -GNinja -DCMAKE_C_COMPILER=${LLVM11_PATH}/bin/clang \
-DCMAKE_CXX_COMPILER=${LLVM11_PATH}/bin/clang++ -DGOOGLE_TEST=ON \
-DUSE_DMLC_GTEST=ON
ninja -v
3 changes: 1 addition & 2 deletions tests/ci_build/conda_env/macos_cpu_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,10 @@ dependencies:
- jsonschema
- boto3
- awscli
- py-ubjson
- cffi
- pyarrow
- pyspark>=3.4.0
- cloudpickle
- pip:
- sphinx_rtd_theme
- datatable
- py-ubjson
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any difficulty installing it from conda-forge?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, Conda-forge doesn't yet offer py-ujson for Apple M1.

2 changes: 1 addition & 1 deletion tests/cpp/collective/test_allreduce.cc
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class AllreduceWorker : public WorkerForTest {
Context ctx;
std::vector<std::uint32_t> data(comm_.World(), 0);
data[comm_.Rank()] = ~std::uint32_t{0};
auto pcoll = std::make_shared<Coll>();
auto pcoll = std::shared_ptr<Coll>{new Coll{}};
auto rc = pcoll->Allreduce(&ctx, comm_, EraseType(common::Span{data.data(), data.size()}),
ArrayInterfaceHandler::kU4, Op::kBitwiseOR);
ASSERT_TRUE(rc.OK()) << rc.Report();
Expand Down
2 changes: 1 addition & 1 deletion tests/cpp/collective/test_loop.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class LoopTest : public ::testing::Test {
rc = pair_.first.NonBlocking(true);
ASSERT_TRUE(rc.OK());

loop_ = std::make_shared<Loop>(timeout);
loop_ = std::shared_ptr<Loop>{new Loop{timeout}};
}

void TearDown() override {
Expand Down
Loading