pytorch/torch/csrc/utils/tensor_numpy.h
Kaichao You 59f9b25f3c [cuda][cupy] Improve cupy device placement when device is provided (#158320)
This is an improvement over https://github.com/pytorch/pytorch/pull/132595 . That PR improves the case where `device` is not given. This PR tries to improve the case where `device` is given but the first step of auto-infer device from `cudaPointerGetAttributes` can be wrong (undesired). See https://github.com/pytorch/pytorch/issues/158316 for more details on when this can happen.

I think this is a reasonable improvement, as people expect `torch.as_tensor` + cupy should be zero-copy as much as possible. However, it does change some behaviors, because previously it might incur a device-to-device copy.

I will leave it to pytorch developers to see if the improvement is worthwhile.

Pull Request resolved: https://github.com/pytorch/pytorch/pull/158320
Approved by: https://github.com/ezyang
2025-07-16 07:12:36 +00:00

33 lines
875 B
C++

#pragma once
#include <ATen/core/Tensor.h>
#include <torch/csrc/python_headers.h>
namespace torch::utils {
TORCH_API PyObject* tensor_to_numpy(
const at::Tensor& tensor,
bool force = false);
TORCH_API at::Tensor tensor_from_numpy(
PyObject* obj,
bool warn_if_not_writeable = true);
TORCH_API int aten_to_numpy_dtype(const at::ScalarType scalar_type);
TORCH_API at::ScalarType numpy_dtype_to_aten(int dtype);
TORCH_API bool is_numpy_available();
TORCH_API bool is_numpy_int(PyObject* obj);
TORCH_API bool is_numpy_bool(PyObject* obj);
TORCH_API bool is_numpy_scalar(PyObject* obj);
void warn_numpy_not_writeable();
at::Tensor tensor_from_cuda_array_interface(
PyObject* obj,
std::optional<c10::Device> device_opt = std::nullopt);
void validate_numpy_for_dlpack_deleter_bug();
bool is_numpy_dlpack_deleter_bugged();
} // namespace torch::utils