Bobot aktif alih-alih matriks penuh: decoding INT8 model spiking pada CPU

27 September 202624 tampilan

Artikel ini menjelaskan implementasi C++ untuk model bahasa dengan gating spike biner: proyeksi sparse diproses dalam INT8, sementara komputasi hanya memperhitungkan bobot aktif. Dalam pengujian satu utas, versi INT8 awal menghasilkan 23,31 token/dtk dibandingkan 9,82 untuk FP32 dan mengurangi memori untuk bobot dari 3355,2 menjadi 1087,4 MiB; peralihan proyeksi padat ke INT4 menurunkan throughput dekode.

Bobot aktif alih-alih matriks penuh: decoding INT8 model spiking pada CPU

Bagaimana spike mengubah pemrosesan bobot

Dalam artikel «Spike-Aware INT8 Execution for Spiking Language Models on Commodity CPUs» Ting Liu menjelaskan decoding model bahasa spiking pada CPU.

  • Aktivasi spike biner memungkinkan pembacaan hanya pada kolom bobot yang aktif.
  • Perkalian digantikan dengan penjumlahan bobot.

Makna praktis pendekatan ini adalah tidak memproses kolom yang tidak aktif. Keuntungannya bergantung pada sparsitas aktivasi, bukan hanya format bobot.

Cara kerja jalur INT8

Implementasi C++ diuji pada model bahasa dengan gating spike berparameter 874M. Implementasi ini menggunakan mode berbeda untuk proyeksi sparse dan padat.

  • Proyeksi sparse menyimpan bobot INT8 dalam format column-major.
  • Akumulasi dilakukan dalam bilangan bulat, lalu skala diterapkan sekali untuk setiap kanal keluaran.
  • Proyeksi padat tetap menggunakan akses row-major dan aktivasi FP32.

Ini adalah skema campuran, bukan mengubah semua operasi model menjadi INT8. Kriteria pemilihannya adalah kesediaan untuk tetap menggunakan FP32 pada proyeksi padat demi jalur INT8 sparse.

Metrik kecepatan dan penyimpanan yang dilaporkan

Checkpoint awal dibandingkan dengan satu thread. Dalam pengujian ini, INT8 menunjukkan throughput decoding yang lebih tinggi dan ukuran penyimpanan bobot yang lebih kecil.

Checkpoint awal, satu threadKecepatan decodingPenyimpanan bobot
FP329.82 tokens/s3355.2 MiB
INT823.31 tokens/s1087.4 MiB

Hasil terpisah untuk checkpoint final dilaporkan pada AMD Ryzen 7 5800X. Kondisinya berbeda dari perbandingan checkpoint awal.

Mode checkpoint final INT8Metrik
Decoding, satu thread22.63 tokens/s
Decoding, empat thread47.90 tokens/s
Prefill urutan 512 token, delapan thread94.68 tokens/s

Metrik ini tidak dapat langsung disatukan dalam satu tabel perbandingan: metrik tersebut berasal dari checkpoint dan mode yang berbeda. Untuk menilai throughput, versi checkpoint dan jumlah thread sama-sama penting.

Apa yang berubah dengan varian INT4

Varian INT4 untuk proyeksi padat mengurangi ukuran penyimpanan sebesar 17.4% lagi. Namun, throughput decoding turun sebesar 46.6%.

Dalam versi artikel yang telah diperbaiki, hasil tidak valid untuk INT4 murni telah ditarik. Karena itu, kompromi yang dilaporkan berlaku untuk INT4 pada proyeksi padat, bukan model yang sepenuhnya INT4.

Kriteria pemilihannya adalah mengutamakan penyimpanan daripada kecepatan decoding. Hasil INT4 murni tidak dapat digunakan sebagai bukti performa.

Apa yang diketahui tentang konsumsi energi

Dalam studi terpisah pada output head di ARM, dua konfigurasi pemeriksaan kandidat mencatat angka konsumsi energi yang lebih tinggi pada jendela decoding yang dipersingkat.

Versi artikel yang telah diperbaiki juga menambahkan validasi numerik dan studi konsumsi energi berdasarkan wall power pada ARM. Data dari pengujian kecepatan CPU saja tidak cukup untuk menyimpulkan adanya penghematan energi.

Pertanyaan yang sering ditanyakan

Bahan terkait

Semua bahan
Bobot aktif alih-alih matriks penuh: decoding INT8 model spiking pada CPU