6

Paralelisasi Operator dan Optimasi Kompilasi

AI999第4课:现代计算底座与张量化并行演化
00:00

Dalam EvoX sebagai basis komputasi modern, unit eksekusi terkecil operator evolusi bukan lagi "individu", melainkan seluruhtensor populasi: operator seperti mutasi, persilangan, dan seleksi dapat mencakup seluruh individu dalam satu pemanggilan; di atas itu,kompilasi graf komputasimenyusun urutan operator menjadi rencana eksekusi yang dapat dioptimalkan, meningkatkan efisiensi eksekusi tanpa mengubah semantik algoritma.

Paralelisasi Operator dan Optimasi KompilasiEvolusi batch berbasis tensor · Kompilasi graf komputasi untuk mengoptimalkan rencana eksekusitensor populasi[N, D] · Seluruh individuDimensi individu berperan sebagai dimensi batchSatu pemanggilan mencakup seluruh individuSatu pemanggilanMencakup seluruh populasiGraf komputasi operator evolusiMutasiPersilanganSeleksiHubungan dependensi operator → Graf komputasiOptimasi global pada seluruh grafBukan memanggil implementasi siap pakai per operatorKompilasiSebelum kompilasiLoop per individu · Peluncuran kernel terbanyakPeluncuran kernel banyak, dimensi batch hanya 1Fusi operator · Generasi kernel · Penggunaan ulang memori · Optimasi penjadwalanSetelah kompilasiGraf komputasi terfusi · Sedikit kernel efisienSatu forward batch menyelesaikan seluruh generasi evolusiBagaimana menghitung · Cara eksekusiJumlah kernelTensor perantaraMemori dan strategi penjadwalanOptimasi hanya terjadi di lapisan eksekusi, tidak mengubah aturan pembaruan operatorMenghitung apa · Semantik algoritmaMutasiPersilanganSeleksiDengan seed acak yang sama, hasil evolusi tetap konsisten≠

Paralelisasi operator: evolusi batch berbasis tensor

  • Operator tingkat tensor: mutasi, persilangan, dan seleksi dapat bekerja langsung pada tensor populasi berbentuk [N, D] (N adalah ukuran populasi, D adalah dimensi variabel keputusan), satu pemanggilan operator mencakup seluruh N individu.
  • Menghilangkan loop per individu: tidak perlu lagi menulis for ind in population: ind = mutate(ind) loop serial Python/CPU seperti ini, sehingga mengurangi overhead penjadwalan fungsi dan pemanggilan framework yang sering.
  • Menukar dimensi batch dengan throughput: setelah dimensi individu berperan sebagai dimensi batch, operator dieksekusi secara paralel berskala besar di perangkat, dan throughput evolusi batch meningkat seiring ukuran populasi.

Kompilasi graf komputasi: dari urutan operator ke rencana eksekusi

Menyusun hubungan dependensi operator "mutasi → persilangan → seleksi" menjadi sebuahgraf komputasi, sehingga kompilator dapat melakukan optimasi global pada seluruh graf, bukan hanya memanggil implementasi siap pakai per operator:

  • Fusi operator: menggabungkan beberapa operasi element-wise menjadi satu kernel, mengurangi pembentukan tensor perantara dan pembacaan/penulisan berulang.
  • Generasi dan penjadwalan kernel: menghasilkan kernel efisien untuk subgraf yang telah difusi, menyelesaikan seluruh generasi evolusi dengan peluncuran kernel yang lebih sedikit.
  • Penggunaan ulang memori: merencanakan buffer terlebih dahulu untuk hasil perantara, mengurangi overhead alokasi memori GPU dan pemindahan data.

Efisiensi berubah, semantik tidak

Perlu dibedakan antara"bagaimana menghitung"dengan"menghitung apa". Paralelisasi operator dan optimasi kompilasi hanya mengubah cara eksekusi—jumlah kernel, skala tensor perantara, memori dan strategi penjadwalan—tanpa mengubah makna logis dari mutasi, persilangan, dan seleksi itu sendiri. Lapisan algoritma tetap menggabungkan operator sesuai semantik evolusi, sehingga dengan seed acak yang sama, lintasan evolusi dan hasil sebelum dan sesudah optimasi harus konsisten. Dalam satu kalimat: tensorisasi menyelesaikan "seberapa cepat batch dihitung", kompilasi graf komputasi menyelesaikan "seberapa optimal penjadwalan kernel", sedangkan "apa yang dihitung" tetap tidak berubah.

Kesalahpahaman umum
Menganggap "tensorisasi" sebagai "mengganti algoritma evolusi". Tensorisasi hanya menerapkan operator yang sama ke seluruh tensor populasi, aturan pembaruan antarindividu tidak berubah; optimasi kompilasi juga tidak membuat algoritma "menjadi lebih pintar". Yang benar-benar perlu diwaspadai adalah tidak melakukan verifikasi regresi setelah optimasi, dan keliru menganggap perbedaan implementasi sebagai peningkatan algoritma.