CFU Playground: Kerangka Sumber Terbuka Full-Stack untuk Akselerasi TinyML di FPGA

CFU Playground: Kerangka Sumber Terbuka Full-Stack untuk Akselerasi TinyML di FPGA

Ingin prosesor ML yang lebih cepat? Lakukan sendiri!

Proyek ini menyediakan kerangka kerja yang dapat digunakan oleh seorang insinyur, magang, atau siswa untuk merancang dan mengevaluasi peningkatan ke FPGA- berbasis prosesor “lunak”, khusus untuk meningkatkan kinerja tugas pembelajaran mesin (ML). Tujuannya adalah untuk mengabstraksikan sebagian besar detail infrastruktur sehingga pengguna dapat mempercepat dengan cepat dan hanya fokus pada penambahan instruksi prosesor baru, mengeksploitasinya dalam komputasi, dan mengukur hasilnya.

Proyek ini memungkinkan iterasi cepat pada peningkatan prosesor — beberapa iterasi per hari.

Begini cara kerjanya:

  • Pilih model TensorFlow Lite; model deteksi orang terkuantisasi disediakan, atau bawa sendiri.
  • Jalankan inferensi pada papan Arty FPGA untuk mendapatkan jumlah siklus per lapisan.
  • Pilih operator TFLite untuk mempercepat, dan gali kode itu.
  • Desain baru instruksi yang dapat menggantikan beberapa operasi dasar.
  • Membangun unit fungsi kustom (sejumlah kecil perangkat keras) yang menjalankan instruksi baru .
  • Modifikasi kernel perpustakaan TFLite/Micro untuk menggunakan instruksi baru, yang tersedia sebagai intrinsik dengan sintaks panggilan fungsi.
  • Buat ulang Soc FPGA, kompilasi ulang perpustakaan TFLM, dan jalankan kembali untuk mengukur peningkatan.

Fokus di sini adalah performa, bukan demo. Input ke inferensi ML dikalengkan/dipalsukan, dan satu-satunya output adalah jumlah siklus. Perbaikan yang dibuat di sini dapat diekspor ke demo yang sebenarnya, tetapi saat ini tidak ada jalur yang disiapkan untuk melakukannya.

Dengan pengecualian Vivado, semua yang digunakan oleh proyek ini adalah open source.

Penafian: Ini bukan proyek Google yang didukung secara resmi. Dukungan dan/atau rilis baru mungkin terbatas.

Ini adalah prototipe awal kerangka kerja eksplorasi ML; mengharapkan kurangnya dokumentasi dan kerusakan sesekali. Jika Anda ingin berkolaborasi dalam membangun kerangka kerja ini, hubungi tcal@google.com! Lihat “Pedoman kontribusi” di bawah.

Perangkat keras/OS yang diperlukan

  • Salah satu papan yang didukung oleh Papan LiteX. Sebagian besar target Papan LiteX harus berfungsi.
    Itu telah diuji pada Arty A7-35T/100T, iCEBreaker, Fomu, OrangeCrab
      , ULX3S

        , dan Nexys Video

          boards.

  • Satu-satunya OS host yang didukung adalah Linux (Debian / Ubuntu).

Anda tidak memerlukan papan apa pun jika ingin menjalankan simulasi Renode atau Verilator.

Perangkat lunak yang diasumsikan

  • FPGA Toolchain: itu tergantung pada papan yang dipilih. Jika Anda sudah memasang rantai alat untuk papan Anda, Anda dapat menggunakannya.

Untuk papan dengan bagian Xilinx XC7, Anda dapat menggunakan Vivado, yang harus diinstal secara manual (ini panduan kami), atau rantai alat SymbiFlow open-source, yang dapat dengan mudah diinstal menggunakan Conda (lihat Panduan Pemasangan).

Untuk papan dengan Lattice iCE40, ECP5, atau Nexus FPGA, Anda dapat menginstal seperangkat alat sumber terbuka yang sesuai baik melalui Conda (lihat Panduan Penyiapan) atau sendiri dengan membangun dari sumber. Atau, Anda dapat menggunakan toolchain Lattice (Radiant/Diamond).

Jika Anda ingin mencoba berbagai hal menggunakan simulasi Renode, maka Anda tidak memerlukan board atau toolchain. Anda juga dapat melakukan simulasi akurat siklus tingkat Verilog dengan Verilator, tetapi ini jauh lebih lambat. Renode diinstal oleh skrip setup.

Paket lain yang diperlukan akan diperiksa dan, jika pada sistem berbasis Debian, otomatis diinstal oleh skrip setup di bawah.

Mempersiapkan

Klon repo ini, cd ke dalamnya, lalu jalankan:

Gunakan dengan papan

Papan default adalah Arty. Jika Anda ingin menggunakan papan yang berbeda, Anda harus menentukan target, misalnya TARGET=digilent_nexys_video

    .

    1. Bangun SoC dan muat bitstream ke Arty:
      CD proj/proj_template buat prog

      Ini membangun SoC dengan CFU default dari proj/proj_template. Nanti Anda akan menyalin ini dan memodifikasinya untuk membuat proyek Anda sendiri.

    2. Buat program RISC-V dan jalankan di SoC yang baru saja Anda muat ke Arty:
    3. Gunakan tanpa papan

      Jika Anda tidak memiliki papan yang didukung oleh Papan LiteX, Anda dapat menggunakan Renode atau Verilator untuk mensimulasikannya.

      Untuk menggunakan Renode untuk mengeksekusi pada simulator pada mesin host (tidak diperlukan papan Vivado atau Arty), jalankan:

      Untuk menggunakan Verilator untuk mengeksekusi pada simulator tingkat RTL yang akurat siklus ( tidak diperlukan papan Vivado atau Arty), jalankan:

      Bendera make paling berguna

    4. Pilihan

      common_soc

      digilent_arty

      Penjelasan Contoh Bawaan
      PERON
      Pilih platform SoC yang Anda inginkan untuk membangun: hps atau sim atau umum_soc membuat bitstream PLATFORM=hps
      TARGET

      Pilih salah satu dari banyak target dari repositori LiteX Boards,
      common_soc akan mengambil BaseSoC dari yang ditentukan target.py
      buat bitstream TARGET=nexys_video_board
      USE_VIVADO
      Gunakan rantai alat Vivado buat bitstream USE_VIVADO=1 0 USE_SYMBIFLOW Gunakan rantai alat Symbiflow buat bitstream USE_SYMBIFLOW=1 0 UART_SPEED Pilih baudrate UART membuat bitstream UART_SPEED=115200 3686400 ABAIKAN_TIMING Abaikan waktu kendala (hanya untuk Vivado) buat bitstream USE_VIVADO=1 IGNORE_TIMING=1

      0

  • LiteX: Kerangka kerja sumber terbuka untuk merakit SoC (CPU + periferal)
  • VexRiscv: RISC sumber terbuka- V soft CPU yang dioptimalkan untuk FPGA
  • nMigen: Python toolbox untuk membangun perangkat keras digital
  • Berlisensi di bawah lisensi Apache-2.0

    Lihat file LISENSI.

    Pedoman kontribusi

    Jika Anda ingin berkontribusi di CFU Playground, pastikan untuk membaca panduan kontribusi. Proyek ini mematuhi kode etik Google. Dengan berpartisipasi, Anda diharapkan untuk menjunjung tinggi kode ini.

      Baca selengkapnya