Skip to content

xp.eye(..., device=device) has not effect when xp is cupy #337

@PascalCarrivain

Description

@PascalCarrivain

Dear all,

I run the following command when xp is cupy

# cupy
x = cupy.asarray([1.0] * 3)
xp = array_api_compat.array_namespace(x)
E = xp.eye(3, 3, k=0, dtype='float64', device=1)
print(E.device)
with xp.cuda.Device(1):
    E = xp.eye(3, 3, k=0, dtype='float64', device=1)
    print(E.device)
# torch
x = torch.as_tensor([1.0] * 3)
xp = array_api_compat.array_namespace(x)
E = xp.eye(3, 3, k=0, dtype=torch.float64, device='cuda:1')
print(E.device)

and I get the result:

<CUDA Device 0>
<CUDA Device 1>
cuda:1

It seems that device argument of xp.eye has no effect here when xp is cupy.
It seems to work well when xp is torch.
Did I miss something?

Thank you.

array-api-compat 1.12.0
cupy-cuda12x 13.4.1

Activity

ev-br

ev-br commented on Jun 16, 2025

@ev-br
Member

Yes, this is unfortunately a known issue with CuPy that it requires a context manager. NOt sure if there are plans to change that, maybe @leofang could weight in?

betatim

betatim commented on Jun 17, 2025

@betatim
Member

Naively I'd have thought that array-api-compat is the place where we should be inserting that context manager for users when they pass device= as argument. Basically, to smooth out the differences between the different libraries. A bit like what is done in asarray

def asarray(
obj: Array | complex | NestedSequence[complex] | SupportsBufferProtocol,
/,
*,
dtype: DType | None = None,
device: Device | None = None,
copy: py_bool | None = None,
**kwargs: object,
) -> Array:
"""
Array API compatibility wrapper for asarray().
See the corresponding documentation in the array library and/or the array API
specification for more details.
"""
with cp.cuda.Device(device):
if copy is None:
return cp.asarray(obj, dtype=dtype, **kwargs)
else:
res = cp.array(obj, dtype=dtype, copy=copy, **kwargs)
if not copy and res is not obj:
raise ValueError("Unable to avoid copy while creating an array as requested")
return res

ev-br

ev-br commented on Jun 17, 2025

@ev-br
Member

Potentially, yes. The key question ATM is what's the cupy team plan. If this is something they plan to fix, we can either wait or potentially help materializing for cupy 14.x.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      xp.eye(..., device=device) has not effect when xp is cupy · Issue #337 · data-apis/array-api-compat