Lea artículos de PyTorch FX utilizando el método de Mu Shen

Autor丨BBuf

Fuente丨GiantPandaCV

Editor丨GiantPandaCV

torch.fx es de hecho una comparación para PyTorch. Buen trabajo, ya que elimina algunas de las brechas entre imágenes dinámicas y estáticas. Por ejemplo, en términos de reescritura de gráficos, torch.fx hace que sea muy fácil para PyTorch realizar alguna optimización de fusión de operadores de otros marcos de gráficos estáticos. Y torch.fx reduce en gran medida la dificultad de implementar la cuantificación posterior al entrenamiento, la cuantificación del entrenamiento perceptual y AMP. Esto se debe al hecho de que podemos operar este IR directamente en la capa de Python, por lo que creo que es un buen trabajo. Especialmente para los ingenieros de algoritmos que desarrollan usando PyTorch, ahora pueden usar esta característica para abrir su imaginación. El punto de venta de torch.fx es que utiliza lenguaje Python puro para implementar una biblioteca que puede capturar el gráfico de cálculo del programa PyTorch y convertirlo en un IR, y es muy conveniente pasar este IR, y al mismo tiempo Al mismo tiempo, proporciona el codegen para hacer que el código Python legal IR transformado funcione. Creo que se ha logrado que escribir Pass en Eager sea tan sencillo como realizar preguntas de inserción y eliminación de listas vinculadas.

El enlace al documento de PyTorch FX es: Rendimiento en CPU Intel Xeon Gold 6138 a 2,00 GHz después del modelo reparador. La velocidad de inferencia del modelo de poscuantización implementado en base a torch.fx es 3,3 veces mayor que la del modelo de tipo flotante. Y es mucho más sencillo implementar operaciones de cuantificación basadas en torch.fx que en TorchScript IR.

torch.fx también puede realizar la fusión Op. La Figura 7 muestra la fusión Conv BN basada en torch.fx y luego aplicada en ResNet50 NVIDIA Tesla V100-SXM2 de 16 GB con CUDA versión 11.0 e Intel Xeon Gold para el rendimiento. de 6138 CPU @ 2.00GHz, se puede ver que la latencia se reduce en aproximadamente 6 en la GPU, aproximadamente 40 en la CPU (multiproceso) y aproximadamente 18 en la CPU (un solo subproceso).

Además, torch.fx también se puede utilizar en el cálculo de FLOP, análisis del uso del ancho de banda de la memoria, estimación del tamaño del valor de los datos de la carga de trabajo, etc. para analizar la memoria y la velocidad del programa cuando se está ejecutando. torch.fx también se puede utilizar para inferencia de formas, mapeo de visualización DAG correspondiente al modelo, etc.

Finalmente, torch.fx también admite la aceleración ASIC en la etapa de tiempo de ejecución (es decir, reducir los operadores en torch.fx al ASIC correspondiente. La Figura 8 a continuación muestra la inferencia de ResNet50 y LearningToPaint basada en torch). .fx y la aceleración después de bajar el operador a TensorRT:

torch.fx es de hecho un mejor trabajo para PyTorch, porque elimina la brecha entre algunos gráficos dinámicos y gráficos estáticos. Por ejemplo, en términos de reescritura de gráficos, torch.fx hace que sea muy fácil para PyTorch realizar alguna optimización de fusión de operadores de otros marcos de gráficos estáticos. Y torch.fx reduce en gran medida la dificultad de implementar la cuantificación posterior al entrenamiento, la cuantificación del entrenamiento perceptual y AMP. Esto se debe al hecho de que podemos operar este IR directamente en la capa de Python, por lo que creo que es un buen trabajo.

Especialmente para los ingenieros de algoritmos que desarrollan usando PyTorch, ahora pueden usar esta característica para abrir su imaginación. También he realizado un trabajo QAT en torno a FX anteriormente. Si está interesado, puede leer: Implementación de capacitación con reconocimiento de cuantificación basada en OneFlow: /p/397650514

Finalmente, para resumir, el punto de venta de torch. .fx es que usa Python puro El lenguaje implementa una biblioteca que puede capturar el gráfico de cálculo del programa PyTorch y convertirlo en un IR, y es muy conveniente transmitir este IR y, al mismo tiempo, proporciona el función del código Python legal codegen del IR transformado. Creo que se ha logrado que escribir Pass en Eager sea tan sencillo como realizar preguntas de inserción y eliminación de listas vinculadas.

El método de lectura de artículos de Mu Shen parece ser más científico. Me gustaría verlo nuevamente al final del artículo.