Error conversion between hardware devices? What if there's a CPU step in the middle of a GPU processing chain?
Can't pass arbitrary array objects into a foreign array library
__array_function__
and other array protocols are numpy-specific for the purposes of this discussion; not part of the array API standardHigh-level question: do we want to do this? Is this useful?
Having talked to HW-folks, e.g. AMD,
What are the options when there is a more performant algorithm that relies on new hardware. Where do they plug in?:
These options are not particularly robust
Monkeypatching makes the system opaque - if you get strange results, it's difficult to get the failures back to the users.
Explicit import switching: difficult to support in packages that are built e.g. on top of scipy
What's the scope for this proposal? Multi-GPU libraries?
Is there any CI/CD infrastructure in place for testing on specialized hardware
uarray
?
Is there a way of defining the interface/design patterns to look at the design in a more abstract way
Numerical precision questions in testing: should be a mechanism for users to specify what precision they need from backends for testing
Clarifying the distinction between what's been done in NumPy (e.g. NEPS) and what's being proposed for scipy
__array_function__
and __array_ufunc__
seem to work well in RAPIDS ecosystem, can wait-and-see about adoptying any new dispatching mechanism in numpyBackend registration, discovery, versioning etc. How will this work?
Have some way for backend-implementers to indicate back to users how much of a given API they support. This usually isn't immediately obvious to users. Whose job is it to inform users how much of any given API is supported by a backend. Can be addressed via tooling
numba
has a similar problem (currently manually updated), but some tooling for thisdask
via __array_function__
cupy
, there may be instances where the signature looks the same as numpy
, but only a subset of options for a particular kwarg are supported.Is it possible for library/API authors to make their tests importable/usable by backends?
Who are the arbiters for deciding what's supported?
In the future, libraries may be written where the user interfaces and backend interfaces are decoupled from the start by design
Dispatching between libraries, e.g. scipy.ndimage
and scikit-image
scipy.optimize.minimize
w/in scikit-learn
Two distinct concerns: duck-typing vs. type-based dispatching and backend selection
array_api
with a function-level dispatcher to support most use-casesHaving scikit-learn
be the API is viewed as a positive, +1 for dispatching
What about a backend system for computational kernels shared by multiple GPU libs? (E.g. CUDA solvers)
Good ideas from the discussion above:
Things to document/describe better
Collaborative long-term plans between libraries and potential backend-implementers
Get a SPEC started from a distillation of the discussion on discuss.scientific-python.org
Come up with a minimal set of principles that will guide the effort
uarray
)A single SPEC has a lot less info than the blog posts + discussion + this meeting
Where to start with the concrete implementation? A formal SPEC
Explicitly layout the target audience, potential (hoped-for?) impact?
Organize another call - open to the public