Skip to content

Investigate ARM64 support for scientific computing libraries #33

Description

@toshi0806

Background

Currently, the PR build strategy skips Full ARM64 builds to speed up CI. This was based on the assumption that Full ARM64 ≈ Lite ARM64 because Ruby scientific gems (or-tools, torch-rb) are x86_64-only.

However, investigation reveals that Python scientific libraries ARE available on ARM64, which means Full ARM64 contains significantly more content than Lite ARM64.

Current State

Python Scientific Libraries (installed on ALL architectures)

  • numpy==2.2.6 ✅
  • pandas==2.3.2 ✅
  • scipy==1.16.1 ✅
  • scikit-learn==1.7.1 ✅
  • polars==1.31.0 ✅
  • torch==2.8.0+cpu ✅ (ARM64 supported since v1.8.0)
  • ortools==9.14.6206 ✅
  • numba==0.61.2 ⚠️ (see below)

Ruby Scientific Gems (x86_64 only)

  • or-tools:0.16.0 ❌ (requires LibTorch)
  • torch-rb ❌ (requires LibTorch)

Numba ARM64 Support

Current version in Dockerfile: numba==0.61.2

ARM64 Support Status:

  • ❌ numba < 0.62.0: No official ARM64 wheels
  • numba >= 0.62.1 (released September 2025): Official ARM64 Linux wheels available
    • Tier 1 platform support
    • Python 3.10, 3.11, 3.12, 3.13 supported

Workflow test currently skips numba on ARM64:

# Only test numba on x86_64 (not available on ARM64)
if [ "${{ matrix.platform }}" = "linux/amd64" ]; then
  echo "🔍 Testing Numba (x86_64 only)..."
  docker run --rm $IMAGE_TAG python3.13 -c "import numba; print('Numba', numba.__version__)"
fi

Proposed Actions

1. Update numba to 0.62.1+

  • Update Dockerfile to use numba>=0.62.1 for full ARM64 support
  • Remove the x86_64-only test restriction in workflow
  • Test numba on both architectures

2. Reconsider PR Build Strategy

Since Full ARM64 now contains substantial scientific computing libraries that Lite ARM64 doesn't have:

Option A: Build Full ARM64 in PRs to properly test scientific libraries

  • ✅ Better test coverage
  • ❌ Slower CI (QEMU emulation on ubuntu-latest)
  • 💡 Could use ubuntu-24.04-arm runner if available

Option B: Keep skipping Full ARM64 in PRs, rely on main branch testing

  • ✅ Faster PR CI
  • ❌ Potential ARM64-specific issues only caught after merge
  • ❌ Not testing significant portion of Full version content

3. Alternative: Add [build-all] tag documentation

Document that developers should use [build-all] in commit messages when:

  • Updating scientific library versions
  • Making changes that might affect ARM64 builds
  • Want full validation before merge

Questions to Resolve

  1. Should we update numba to 0.62.1+ now or in a separate PR?
  2. Should PR builds include Full ARM64, or is main-branch-only testing sufficient?
  3. Do we have access to ubuntu-24.04-arm runners for faster ARM64 builds?
  4. Should we verify ortools Python package actually works on ARM64?

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions