4

從候選列表到張量化計算圖

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

在演化計算中,多樣性是演算法有效的前提:只有維持足夠多的候選解,選擇壓力才不會過早把種群擠進局部最優。但多樣性同時意味著龐大的計算量——一次執行往往需要評價數萬乃至數百萬個候選解。當候選被寫成普通的物件陣列,用逐項迴圈把它們一個個送去做評價時,計算的大部分時間都消耗在逐項排程與宿主語言的控制流上,而不是真正的數值運算,這正是傳統串行 CPU 迴圈在處理數萬次候選評價時效率低下的根本原因。

從候選列表到張量化計算圖表達方式的躍遷候選列表(逐項處理)每個候選是一個獨立物件1候選 x₁2候選 x₂3候選 x₃4候選 x₄逐個候選 · 串行 CPU 迴圈評價數萬次時效率低開銷在逐項排程與控制流候選張量整代候選統一寫入[種群規模, 解維度]一行 = 一個候選解計算圖:張量化運算選擇與狀態更新進入圖中,接受編譯最佳化變異作用於整群評價一次得整代選擇張量索引狀態更新歸約節點整圖接受編譯最佳化:算子融合 · 並行排程評價輸出形狀:[種群規模] 或 [種群規模, 目標數]整體計算:變異、評價、選擇、狀態更新一次進入計算圖

表達方式的躍遷:從候選列表到張量化計算圖

EvoX 帶來的改變不是某個算子的局部加速,而是演化過程表達方式的改變:從逐個候選的列表式處理,轉向以張量為一等公民的批量計算。候選集合不再散落在物件陣列裡,而是與評價結果、演算法狀態一起被統一組織為張量,使它們可以整體參與運算。

  • 候選張量:把整代候選寫成形狀為 [種群規模, 解維度] 的張量。此時「一個候選」只是張量中的一行,而不再是一個獨立的宿主語言物件。
  • 批量算子:變異等操作直接作用於整個種群,一次呼叫即完成對全部候選的更新,而不是迴圈呼叫 N 次。
  • 批量評價:以 evaluate(候選張量) 的形式一次性得到整代的評價結果,評價的數量單位從「個」變成「批」。
  • 計算圖:選擇與狀態更新不再只是串行控制邏輯,而是圖中的節點,因而獲得算子融合、並行排程等編譯最佳化機會。

兩種寫法的對照

列表式寫法近似於:逐個取出候選、逐個評價、逐個比較並更新狀態——每一步都依賴宿主語言的迴圈,難以整體最佳化。張量化寫法則為:候選張量 → 變異 → 評價 → 選擇 → 狀態更新,整條鏈路由張量運算組成並表達為一張計算圖,編譯器可以對整張圖做融合與裝置排程。注意:演算法的邏輯(變異分佈、選擇壓力)並沒有被改寫,被改寫的是表達方式。

核心術語
張量化計算——以張量為最小處理單位,讓變異、評價、選擇、狀態更新都以批量形式作用於整個種群,並允許這些批量運算進入計算圖接受編譯最佳化。本頁的關鍵躍遷可以記作一句話:從「候選列表」到「張量化計算圖」。