HPyC-FPGA - Integração de Aceleradores em FPGA de Alto Desempenho com Python para Jupyter Notebooks
Resumo
O desenvolvimento de aceleradores em FPGAs (Field Programmable Gates Arrays) ainda é um desafio. Recentemente, o ambiente PYNQ da Xilinx possibilitou a integração de código Python com aceleradores em FPGA. A maioria dos exemplos está voltada para placas de prototipação utilizadas no desenvolvimento de aplicações embarcadas. Este artigo apresenta o algoritmo K-means de aprendizado de máquina não supervisionado como estudo de caso. A principal contribuição deste trabalho é o encapsulamento de 3 aceleradores acoplados com PYNQ usando o ambiente Jupyter Notebook. A avaliação foi realizada em uma máquina de alto desempenho utilizando um FPGA Alveo U55C com memória HBM (High Bandwidth Memory). Os resultados são promissores, além de mostrar as facilidades de uso do FPGA de forma encapsulada, o ganho de desempenho foi de uma a duas ordens de grandezas em comparação a um sistema com dois processadores Xeon(R) Silver 4210R com 10 núcleos cada, executando a etapa de classificação do algoritmo K-means.
Referências
Caldeira, P. and et al. (2018). From java to fpga: An experience with the intel harp system. In 2018 30th International Symposium on Computer Architecture and High Performance Computing (SBAC-PAD), pages 17-24.
Canesche, M. and et al. (2021). Google colab cad4u: Hands-on cloud laboratories for digital design. In International Symposium on Circuits and Systems (ISCAS).
Cérin, C. and et al. (2019). Where are the optimization potential of machine learning kernels. In International Conference on Big Data Intelligence and Computing.
Cong, J. and et al. (2018). Understanding performance differences of fpgas and gpus. In 2018 IEEE 26th Annual International Symposium on Field-Programmable Custom Computing Machines (FCCM), pages 93-96. IEEE.
da Silva, L. B., Almeida, D., Nacif, J. A. M., Sánchez-Osorio, I., Hernández-Martínez, C. A., and Ferreira, R. (2017). Exploring the dynamics of large-scale gene regulatory networks using hardware acceleration on a heterogeneous cpu-fpga platform. In IEEE Int. Conf. on ReConFigurable Computing and FPGAs (ReConFig).
Dheeru, D. and Karra Taniskidou, E. (2017). UCI Machine Learning Repository http://archive.ics.uci.edu/ml. In arXiv preprint arXiv:1710.11342.
He, Z., Parravicini, D., Petrica, L., O'Brien, K., Alonso, G., and Blott, M. (2021). Accl: Fpga-accelerated collectives over 100 gbps tcp-ip. In 2021 IEEE/ACM International Workshop on Heterogeneous High-performance Reconfigurable Computing (H2RC).
Kachris, C. and et al. (2017). Spynq: Acceleration of machine learning applications over spark on pynq. In 2017 International Conference on Embedded Computer Systems: Architectures, Modeling, and Simulation (SAMOS), pages 70-77. IEEE.
Kachris, C. and et al. (2018). Seamless fpga deployment over spark in cloud computing: A use case on machine learning hardware acceleration. In International Symposium on Applied Reconfigurable Computing, pages 673-684. Springer.
Lloyd, S. (1982). Least squares quantization in pcm. IEEE transactions on information theory, 28(2):129-137.
Rule, A., Tabard, A., and Hollan, J. D. (2018). Exploration and explanation in computational notebooks. In Conference on Human Factors in Computing Systems.
Silva, L. B. D., Ferreira, R., Canesche, M., Menezes, M. M., Vieira, M. D., Penha, J., Jamieson, P., and Nacif, J. A. M. (2019). Ready: A fine-grained multithreading overlay framework for modern cpu-fpga dataflow applications. ACM Transactions on Embedded Computing Systems (TECS), 18(5s):1-20.
Wang, Y. and et al. (2019). Kpynq: A work-efficient triangle-inequality based k-means on fpga. In 2019 IEEE 27th Annual International Symposium on Field-Programmable Custom Computing Machines (FCCM), pages 320-320. IEEE.
Wang, Y. and et al. (2021). Tiacc: Triangle-inequality based hardware accelerator for k-means on fpgas. In 2021 IEEE/ACM 21st International Symposium on Cluster, Cloud and Internet Computing (CCGrid), pages 133-142. IEEE.
Xilinx (2022). Python productivity for zynq. http://www.pynq.io/.