Pada postingan saya sebelumnya, saya membahas tentang teknik umum yang digunakan untuk komputasi dan efisiensi energi jaringan saraf pada perangkat keras yang tersedia. Pada postingan kali ini kita akan membahas jenis perangkat keras yang disebut FPGA, yang telah menjadi perbincangan beberapa tahun setelah dimulainya era jaringan saraf.

Pertanyaan pertama yang terlintas di benak adalah, mengapa FPGA?

Jadi CPU pada umumnya dapat melakukan 10–100 GFLOP per detik. GPU menawarkan performa puncak hingga 10 TFLOP/dtk. Oleh karena itu, CPU tidak lagi menjadi pertanyaan karena mereka dikalahkan dengan buruk oleh GPU. Namun GPU masih memiliki kelemahan dalam hal efisiensi energi dan masih digunakan untuk tujuan umum agar dapat dioptimalkan untuk tugas tertentu.
Kita semua tahu bahwa ASIC adalah chip yang digunakan untuk tugas tertentu, namun masalah dengan otak silikon adalah, sekali chip tersebut dirancang dan dibakar, tidak dapat didesain ulang lagi. Inilah FPGA, ASIC yang dapat diprogram ulang, begitulah saya menyebutnya.
Dengan kemampuan untuk dapat diprogram ulang ini, muncullah kekuatan untuk merancang chip dengan mempertimbangkan strategi paralelisme tinggi (yang mana jaringan saraf sangat berkembang pesat) dan menghadirkan komputasi beban dan efisiensi dibandingkan dengan GPU.

Masalah terkini dengan FPGA

  • frekuensi kerja FPGA adalah sekitar 100–300MHz, jauh lebih kecil dibandingkan CPU dan GPU.
  • Implementasi jaringan saraf pada FPGA jauh lebih sulit dibandingkan pada CPU dan GPU.

Yang disebutkan di atas adalah alasan mengapa ada penelitian seputar jenis silikon ini, untuk menjadikan siklus jam setara dengan CPU dan GPU dan idealnya melampaui mereka. Ada beberapa teknik yang dibahas di bagian bawah yang menyebutkan teknik pengoptimalan perangkat keras untuk FPGA.
Desain akselerator Jaringan saraf canggih saat ini memperkirakan setidaknya efisiensi energi 10x lebih baik dibandingkan GPU saat ini.

Lapisan konvolusi dan FC

  • Lapisan konvolusi dan FC memegang sebagian besar proporsi beban komputasi jaringan saraf. Ada jenis lapisan lain yaitu lapisan penggabungan, lapisan normalisasi batch, concat, dll. tetapi sebagian besar bobot terkonsentrasi pada lapisan konvolusi dan FC yang melibatkan operasi perkalian dan akumulasi (MAC).

Ikhtisar Akselerator berbasis FPGA

  • Sistem ini terdiri dari CPU dan bagian FPGA. Chip FPGA murni biasanya bekerja dengan PC/server host melalui koneksi PCIe. Baik host maupun FPGA dapat bekerja dengan memori eksternalnya masing-masing dan mengakses memori satu sama lain melalui koneksi.
  • Chip FPGA memiliki unit penyimpanan on-chip yang besar seperti register dan SRAM, namun masih terlalu kecil dibandingkan model NN. Masih kecil untuk menampung parameter jaringan saraf dan oleh karena itu kesenjangan ini memerlukan memori eksternal seperti DDR SDRAM. Bandwidth dan konsumsi daya DDR membatasi kinerja sistem.

Metodologi dan Kriteria Desain

  • Secara umum, target desain akselerator inferensi jaringan saraf mencakup dua aspek (i) Kecepatan Tinggi (throughput tinggi dan latensi rendah) (ii) Efisiensi energi tinggi.

Kecepatan

  • Sumber daya on-chip dari FPGA tertentu dapat ditingkatkan dengan meningkatkan jumlah unit komputasi di dalamnya, yang dapat ditingkatkan dengan mengurangi ukuran masing-masing unit komputasi. Hal ini dapat dicapai dengan mengurangi presisi representasi data yaitu menggunakan representasi titik tetap 16 bit dari 8 bit dibandingkan representasi titik mengambang di jaringan saraf.
  • Kedua, dengan meningkatkan frekuensi kerja chip yang dapat dicapai dengan merancang chip secara cermat dalam artian data yang diproses dapat ditempatkan tepat di sebelah chip. Rasio penggunaan chip yang tinggi dijamin dengan penerapan paralelisme dan sistem memori yang efisien. Pola akses data dan rasio komputasi data juga mempengaruhi apakah perangkat keras digunakan sepenuhnya atau tidak.
    Throughput teoritis yaitu jumlah inferensi per detik, rumusnya diberikan oleh persamaan berikut :

di mana OPSact -› jumlah operasi yang dilakukan per detik saat run-time oleh akselerator.
W -› total beban kerja teoritis jaringan.
OPSpeak -› jumlah maksimum operasi yang dapat diproses per detik.
n -› Rasio pemanfaatan unit komputasi, diukur dengan rasio rata-rata unit komputasi yang bekerja di seluruh unit komputasi pada setiap inferensi.
f -› frekuensi kerja unit komputasi.
P -› jumlah unit komputasi.

  • Sebagian besar akselerator NN berbasis FPGA menghitung input berbeda satu per satu sementara beberapa desain memproses input berbeda secara paralel. Jadi latensi akselerator dinyatakan sebagai:

dimana L -› Latensi pemrosesan inferensi
C -› Konkurensi akselerator, diukur dengan jumlah inferensi yang diproses secara paralel.
IPS -› Throughput sistem, diukur dengan jumlah inferensi yang diproses setiap detik.

Efisiensi energi

  • Setiap operasi dilakukan oleh unit DSP yang memiliki logika transistor tertentu yang memerlukan sejumlah tegangan listrik untuk melakukan suatu tugas. Oleh karena itu, energi yang diperlukan untuk melakukan jumlah total operasi dalam jaringan adalah yang kami pertimbangkan, bukan jumlah inferensi seperti halnya dengan kecepatan inferensi.
  • Jika beban kerja jaringan tetap, meningkatkan efisiensi energi akselerator jaringan saraf berarti mengurangi total biaya energi.

Eff -› efisiensi energi sistem, diukur dengan jumlah operasi yang dapat diproses dalam satuan energi.
W -› Beban kerja untuk setiap inferensi, diukur dengan jumlah operasi dalam jaringan, terutama penjumlahan dan perkalian untuk jaringan saraf.
Etotal terdiri dari komponen energi akses ram statis + komponen energi akses ram dinamis + Energi Statis.

Kami memisahkan energi akses memori menjadi bagian DRAM dan bagian SRAM. Nx acc dapat dikurangi dengan kuantisasi, sparsifikasi, sistem memori on-chip yang efisien, dan metode penjadwalan. Jadi metode ini membantu mengurangi energi memori dinamis.

Artikel ini kita akan fokus pada optimasi desain perangkat keras daripada optimasi sisi jaringan saraf yang melibatkan kuantisasi data, pengurangan bobot yaitu sparsifikasi, pemangkasan bobot, teknik pengelompokan bobot.

Desain Perangkat Keras: Arsitektur Efisien

Desain Unit Komputasi

Unit komputasi yang lebih kecil berarti, lebih banyak unit komputasi yang dapat ditanamkan pada chip yang berarti performa puncak lebih tinggi. Array unit komputasi yang dirancang dengan cermat dapat meningkatkan frekuensi kerja sistem dan dengan demikian meningkatkan kinerja puncak.

  • Unit Komputasi Lebar Bit Rendah:
    Mengurangi lebar bit akan mengurangi ukuran unit komputasi, sehingga meningkatkan cakupan penambahan lebih banyak unit komputasi dalam array. Lebih banyak desain canggih menggantikan unit floating point 32 bit dengan unit titik tetap. Representasi titik tetap 16 bit dan 12 bit digunakan untuk menyematkan larik unit komputasi yang efisien pada FPGA. Binarized NN mengungguli CPU dan GPU dalam hal performa, namun kurang akurat.
    Di bawah ini adalah tabel perbandingan untuk representasi data yang berbeda pada chip FPGA yang berbeda

  • Metode Konvolusi Cepat :
    Operasi konvolusi pada unit DSP dapat lebih cepat dengan menggunakan transformasi Fourier Diskrit (DFT). Untuk filter FxF yang dikonvolusi dengan filter KxK, DFT mengubah perkalian (F-K + 1)^2 * ^2 dalam domain ruang menjadi perkalian kompleks F² dalam domain frekuensi. Untuk lapisan CONV dengan saluran masukan M dan saluran keluaran N, diperlukan MN kali perkalian domain frekuensi dan ¹M + Nº kali DFT/IDFT.
    Peningkatan kinerja teoretis dari konvolusi cepat bergantung pada ukuran konvolusi. Dibatasi oleh sumber daya on-chip dan pertimbangan fleksibilitas, desain saat ini tidak memilih ukuran konvolusi yang besar. Penelitian yang ada menunjukkan bahwa peningkatan kinerja teoretis hingga 4x dapat dicapai dengan konvolusi cepat dengan FFT atau Winograd dengan ukuran kernel yang wajar.
  • Metode Optimasi Frekuensi :
    FPGA terbaru mendukung frekuensi kerja puncak teoritis DSP 700–900 MHz. Namun desain yang ada biasanya bekerja pada 100–400 MHz. Frekuensi kerja dibatasi oleh perutean antara SRAM on-chip dan unit DSP.
    Irisan tetangga ke setiap unit DSP digunakan sebagai RAM lokal untuk memisahkan domain jam.
    Desain prototipe mencapai frekuensi kerja DSP puncak pada 741MHz dan 891MHz pada chip FPGA dengan tingkat kecepatan berbeda. Xilinx juga mengusulkan CHaiDNN-v2 dan xfDNN dengan teknik ini dan mencapai frekuensi kerja DSP hingga 700MHz. Dibandingkan dengan desain yang ada yang frekuensinya berada dalam 300MHz, teknik ini menghasilkan peningkatan kinerja puncak setidaknya 2x.

Strategi Pembukaan Lingkaran

Bagaimana kita mengulang lapisan konv dan lapisan FC untuk operasi konvolusi dan akumulasi perkalian juga merupakan pertanyaan penelitian yang penting. Strategi perulangan yang tidak efisien dapat memakan banyak waktu dan menurunkan efisiensi pemrosesan sistem.

Di atas adalah strategi loop unrolling yang biasanya digunakan. Untuk jumlah filter sebanyak N, kami mengulang setiap filter dan untuk setiap saluran filter dan untuk setiap peta keluaran dan untuk setiap elemen kernel, kami menghasilkan setiap elemen dari peta fitur keluaran dengan mengalikan nilai peta fitur masukan dengan setiap nilai dari kernel. Setiap peta keluaran kemudian ditambahkan dengan bias per saluran.
Anda dapat membaca kode semu strategi perulangan untuk pemahaman yang lebih baik.

  • Memilih Parameter Buka Gulungan
    Jumlah iterasi yang diparalelkan pada perangkat keras disebut parameter buka gulungan. Pemilihan parameter unroll yang tidak tepat dapat menyebabkan kurangnya pemanfaatan perangkat keras.
    Misalkan jumlah trip loop adalah M dan paralelismenya adalah m. Rasio pemanfaatan perangkat keras adalah pemrosesan lapisan NN, rasio pemanfaatan total akan menjadi produk dari rasio pemanfaatan pada masing-masing loop.
    Selain masalah underutilization, loop unrolling juga mempengaruhi jalur data dan on-chip desain memori. Jadi strategi loop unrolling adalah fitur utama untuk desain jaringan saraf.
  • Transfer data dan Desain Memori On-chip
    Sistem memori on-chip harus secara efisien menawarkan data yang diperlukan ke setiap unit komputasi setiap siklus. Untuk menerapkan paralelisme tinggi, akselerator jaringan saraf biasanya menggunakan kembali data di antara sejumlah besar unit komputasi. Hanya dengan menyiarkan data ke unit komputasi yang berbeda akan menyebabkan fan-out yang besar dan biaya perutean yang tinggi sehingga mengurangi frekuensi kerja.
    Data bersama ditransfer dari satu unit komputasi ke unit komputasi berikutnya dalam mode berantai. Jadi datanya tidak disiarkan, dan hanya diperlukan koneksi lokal antar unit komputasi yang berbeda. Kekurangannya adalah peningkatan latensi. Perintah eksekusi loop dijadwalkan sesuai untuk menutupi latensi

Desain sistem

  • Bagian logika dari keseluruhan sistem ditandai dengan kotak biru. CPU host mengeluarkan beban kerja atau perintah ke bagian logika FPGA dan memantau status kerjanya. Pada bagian logika FPGA, pengontrol biasanya diimplementasikan untuk berkomunikasi dengan host dan menghasilkan sinyal kontrol ke semua modul lain di FPGA. Pengontrol dapat berupa FSM atau dekoder instruksi.
  • Bagian logika on the fly diimplementasikan untuk desain tertentu jika data yang dimuat dari memori eksternal memerlukan praproses. Modul ini dapat berupa modul pengaturan data, pemindah data, modul FFT, dll. SRAM
    pada chip pada chip FPGA terlalu terbatas dibandingkan dengan model NN yang besar. Jadi untuk desain umum, hierarki memori dua tingkat digunakan dengan DDR dan memori on-chip.
  • Model Garis Atap:

Rasio komputasi terhadap komunikasi (CTC) sebagai sumbu x dan kinerja
perangkat keras sebagai sumbu y. CTC adalah jumlah operasi yang dapat dieksekusi dengan ukuran satuan akses memori. Setiap desain perangkat keras dapat dianggap sebagai titik pada gambar. Jadi y/x sama dengan kebutuhan bandwidth desain.
Batas bandwidth sebenarnya berada di bawah batas teoritis karena bandwidth DDR yang dapat dicapai bergantung pada pola akses data. Akses DDR sekuensial mencapai bandwidth yang jauh lebih tinggi daripada akses acak. Atap lainnya adalah atap komputasi, yang dibatasi oleh sumber daya yang tersedia pada FPGA.

  • Ubinan Loop dan Pertukaran :

Strategi pembukaan loop untuk meningkatkan paralelisme sekaligus mengurangi pemborosan komputasi untuk jaringan tertentu. Ketika strategi pembukaan loop diputuskan, penjadwalan bagian loop lainnya memutuskan bagaimana perangkat keras dapat menggunakan kembali data dengan buffer on-chip. Hal ini melibatkan strategi loop tiling dan pertukaran loop.
Loop tiling adalah tingkat pembukaan loop yang lebih tinggi. Semua data input dari ubin loop akan disimpan pada chip, dan kernel perangkat keras yang membuka gulungan loop bekerja pada data ini. Ukuran ubin loop yang lebih besar berarti setiap ubin akan dimuat dari memori eksternal ke memori on-chip lebih sedikit. Strategi pertukaran loop
menentukan urutan pemrosesan ubin loop.
Susunan data dalam buffer on-chip dikontrol melalui instruksi agar sesuai dengan ukuran peta fitur yang berbeda. Ini berarti perangkat keras selalu dapat sepenuhnya memanfaatkan buffer on-chip untuk menggunakan ukuran ubin terbesar sesuai dengan ukuran buffer on-chip. Karya ini juga mengusulkan urutan eksekusi loop "bolak-balik" untuk menghindari penyegaran data total pada chip ketika loop terdalam selesai.

  • Penjadwalan Lintas Lapisan:
    Masalah akses memori eksternal dengan menggabungkan dua lapisan yang berdekatan untuk menghindari transfer hasil antara antara dua
    lapisan. Strategi ini membantu mengurangi 95% transfer data on-chip dengan tambahan 20% biaya memori on-chip. Bahkan program perangkat lunak memperoleh 2 percepatan dengan strategi penjadwalan ini.
  • Regulerkan Pola Akses Data:
    Selain meningkatkan CTC, meningkatkan batas bandwidth aktual juga membantu meningkatkan kinerja yang dapat dicapai dengan rasio CTC tertentu. Hal ini dicapai dengan mengatur pola akses DDR. Format peta fitur umum di memori eksternal mencakup NCHW atau CHWN, dengan N berarti dimensi batch, C berarti dimensi saluran, H danW berarti peta fitur dimensi y dan x. Dengan menggunakan salah satu format ini, petak peta fitur dapat dipotong menjadi blok data kecil yang disimpan dalam alamat terputus-putus.

Artikel ini masih merupakan puncak gunung es dan hanya gambaran umum tentang teknik tercanggih yang digunakan di bidang ini untuk mendapatkan komputasi dan efisiensi energi yang lebih baik pada FPGA.
Tentu saja AI yang terdepan adalah hal besar berikutnya yang diperlukan untuk beralih dari kebutuhan komputasi di cloud yang merupakan bidang penelitian yang memiliki nilai paling besar.

Sampai jumpa lagi, teruslah membaca dan terus berkembang :)

Referensi: https://arxiv.org/pdf/1712.08934.pdf