[RFC]: DLPack based exchange of dtype and Device

Abierto
#972 3 comentarios 3 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Necesita aclaración
Estado de actividad
Tranquilo
Stack tecnológico
python
Área
api

Línea de trabajo

No se especifican archivos de implementación ni pruebas. Empieza revisando las interfaces dtype y Device existentes de array API junto con las definiciones de DLDataType y DLDevice de DLPack, y determina después si los métodos propuestos y la compatibilidad con from_dlpack deben formar parte del alcance. Se considera terminado cuando se hayan acordado el alcance y la especificación de la interfaz.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

API extension Needs Discussion RFC topic: Device Handling topic: DLPack

Background

As of now we have standard interface for exchanging tensors through DLPack. One minor but still useful thing is to also provide a mechanism for solutions. Motivating example

import numpy
import torch

# results in error
torch.empty((1, 2), dtype=numpy.float16)
# results in error
numpy.empty((1, 2), dtype=torch.float16)

It could be useful for the package.dtype and package.Device to be able to provide an interface for exchange such information. Given we already have DLDataType and DLDevice in dlpack, it might be helpful to bringup interfaces to transparently expose them. Such information can also be helpful for bindings to implement generic support for these types

Proposal

# defined in dtype
class dtype:
    def __dlpack_data_type__():
         """Return a tuple (code, bits, lanes) in DLDataType format 
         """

# defined in Device
class Device:
    def __dlpack_device__():
         """Return a tuple of (device_type, device_id) """

Then if desirable, the interface could implement something like

def empty(shape, dtype):
     if hasattr(dtype, "___dlpack_data_type__"):
           convert

There is also possibility of trying to run general value conversion. I do not think we have to update from_dlpack to also support these values, but there is an option to do so

def from_dlpack(src):
      if hasattr(src, "__dlpack__"):
            # this is an array
      if hasattr(src, "__dlpack_data_type__"):
            # this is a dtype
      if hasattr(src, "__dlpack_device__"):
            # this is a device
Lenguaje dominante
Python
Estrellas
281
Forks
52
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de data-apis/array-api

Todos los issues de data-apis/array-api

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.