Lanzamiento de PyTorch 1.5, actualización importante del front-end de C ++, introducción de un nuevo formato de almacenamiento para mejorar el rendimiento

Se lanza PyTorch 1.5. Esta versión incluye varias API principales nuevas y algunas mejoras, actualizaciones importantes para el front-end C ++, formato de almacenamiento "canales últimos" para modelos de visión por computadora y capacitación paralela para modelos La versión estable del marco distribuido RPC.

Al mismo tiempo, esta versión también proporciona una nueva API para autogrado hessian y jacobian, y una API inspirada en pybind que permite la creación de una clase personalizada de C ++.

API C ++ FRONTEND (ESTABLE)

La API de front-end de C ++ que anteriormente se marcaba como experimental ahora está a la par con Python, y las características generales se han movido a un estado "estable". Algunos puntos destacados clave incluyen:

  • La cobertura ahora alcanza aproximadamente el 100%, y proporciona documentación sobre módulos / funciones de antorcha C ++ :: nn, los desarrolladores pueden convertir fácilmente sus modelos de Python API a API C ++.
  • El optimizador en C ++ es diferente al de Python: el optimizador de C ++ no puede tomar grupos de parámetros como entrada, mientras que Python sí. Además, la implementación de la función de paso no es exactamente la misma. En la versión 1.5, el optimizador de C ++ siempre se comportará igual que el equivalente de Python.
  • La falta de una API de indexación multidimensional tensorial en C ++ es un problema bien conocido y ha causado mucha discusión en el rastreador de problemas y foro PyTorch GitHub. La solución anterior era usar arrow / select / index_select / masked_select en combinación, lo cual es incómodo y propenso a errores en comparación con la elegante sintaxis tensor [:, 0, ..., máscara] de la API de Python. En la versión 1.5, los desarrolladores pueden usar tensor.index ({Slice (), 0, "...", mask}) para lograr el mismo propósito.

FORMATO DE MEMORIA 'CANALES ÚLTIMOS' PARA MODELOS DE VISIÓN INFORMÁTICA (EXPERIMENTAL)

El formato de almacenamiento "canales últimos" para los modelos de visión por computadora se encuentra actualmente en la etapa experimental. El diseño de la memoria de este formato puede dar un juego completo al rendimiento y la eficiencia de los algoritmos y hardware de convolución (Tensor Core de NVIDIA, FBGEMM, QNNPACK). Además, está diseñado para propagarse automáticamente a través de operadores, lo que permite cambiar fácilmente entre diseños de memoria.

CLASES C ++ PERSONALIZADAS (EXPERIMENTALES)

Esta versión agrega una nueva API torch.CutomClassHolder para vincular clases C ++ personalizadas a TorchScript y Python al mismo tiempo. La sintaxis de esta API es casi la misma que pybind11. Permite a los desarrolladores exponer sus clases y métodos de C ++ al sistema de tipo TorchScript y al sistema de tiempo de ejecución para que puedan crear instancias y manipular cualquier objeto C ++ en TorchScript / Python. Ejemplo de enlace de C ++:

template <class T>
struct MyStackClass : torch::CustomClassHolder {
  std::vector<T> stack_;
  MyStackClass(std::vector<T> init) : stack_(std::move(init)) {}

  void push(T x) {
    stack_.push_back(x);
  }
  T pop() {
    auto val = stack_.back();
    stack_.pop_back();
    return val;
  }
};

static auto testStack =
  torch::class_<MyStackClass<std::string>>("myclasses", "MyStackClass")
      .def(torch::init<std::vector<std::string>>())
      .def("push", &MyStackClass<std::string>::push)
      .def("pop", &MyStackClass<std::string>::pop)
      .def("size", [](const c10::intrusive_ptr<MyStackClass>& self) {
        return self->stack_.size();
      });

Expone clases que se pueden usar en Python y TorchScript, de la siguiente manera:

@torch.jit.script
def do_stacks(s : torch.classes.myclasses.MyStackClass):
    s2 = torch.classes.myclasses.MyStackClass(["hi", "mom"])
    print(s2.pop()) # "mom"
    s2.push("foobar")
    return s2 # ["hi", "foobar"]

APIS MARCO RPC DISTRIBUIDO (AHORA ESTABLE)

El marco RPC distribuido apareció en forma experimental en la versión 1.4, y ahora está en un estado estable. Este proceso implica muchas mejoras y correcciones de errores para hacer que el marco RPC distribuido sea más confiable y robusto en general. También se han agregado dos nuevas características, que incluyen soporte de creación de perfiles, el uso de funciones TorchScript en RPC y algunas mejoras fáciles de usar.

Además, a partir de 1.5, PyTorch ya no es compatible con Python 2. En el futuro, la compatibilidad con Python se limitará a Python 3, especialmente Python 3.5, 3.6, 3.7 y 3.8.

Para detalles más específicos, vea el anuncio:

https://pytorch.org/blog/pytorch-1-dot-5-released-with-new-and-updated-apis

Supongo que te gusta

Origin www.oschina.net/news/115100/pytorch-1-5-released
Recomendado
Clasificación