ในฐานรากแบบเทนเซอร์ของ EvoXการคำนวณเทนเซอร์แบบกลุ่มอยู่ในชั้นการแสดงออกเชิงอัลกอริทึม โดยทำการแมปผู้สมัคร การประเมิน และสถานะภายในลูปวิวัฒนาการให้เป็นเทนเซอร์ที่มีมิติแบบกลุ่มแล้วจึงส่งให้ตัวดำเนินการแบบกลุ่มที่เหมาะกับ GPU และกราฟการคำนวณที่คอมไพล์แล้วเพื่อประมวลผล เป้าหมายชัดเจนมาก——เปลี่ยน "วิวัฒนาการแบบอนุกรมทีละ个体" ให้เป็น "วิวัฒนาการแบบขนานทั้งประชากร" เพื่อให้พลังการประมวลผลส่งผลต่อการค้นหาจริง ๆ แทนที่จะถูกใช้ไปกับการจัดตารางและการเริ่มต้น
หนึ่ง、การแสดงกระบวนการวิวัฒนาการเป็นเทนเซอร์
กำหนดให้มิติกลุ่ม N แทนจำนวนผู้สมัคร (个体) ดังนั้นองค์ประกอบสามประการในวิวัฒนาการสามารถแปลงเป็นเทนเซอร์ได้โดยตรง:
- เทนเซอร์ผู้สมัคร: ประชากร X จัดเรียงเป็น [N × D] โดย D คือจำนวนตัวแปรตัดสินใจของผู้สมัครแต่ละราย
- เทนเซอร์เป้าหมาย: เป้าหมายและข้อจำกัด F จัดเรียงเป็น [N × M] โดย M คือจำนวนรายการเป้าหมาย/ข้อจำกัด ในกรณีหลายเป้าหมาย แต่ละเป้าหมายคือคอลัมน์ต่าง ๆ ของ F
- ปริมาณสถานะ: จำนวนรุ่น ค่าที่ดีที่สุดปัจจุบัน ขนาดก้าว ฯลฯ ถูกเก็บรักษาด้วยบัฟเฟอร์สเกลาร์หรือเทนเซอร์ขนาดเล็ก แทนที่จะบันทึกทีละ个体ด้วยออบเจ็กต์ Python
ด้วยวิธีนี้ การสลับสายพันธุ์ การกลายพันธุ์ การคัดเลือก และการประเมินทั้งหมดจะประมวลผลแบบกลุ่มตามมิติ N โดยในลูปวิวัฒนาการจะไม่มีสาขาและโฟลว์ควบคุมแบบทีละ个体อีกต่อไป
สอง、ตัวดำเนินการแบบกลุ่ม: จากการเรียกทีละผู้สมัคร N ครั้ง สู่การคำนวณแบบกลุ่มครั้งเดียว
นิพจน์เปรียบเทียบขั้นต่ำสามรายการ ร่างรูปแบบพื้นฐานของตัวดำเนินการแบบกลุ่ม:
- การกลายพันธุ์: X′ = X + σ·randn(X) ผู้สมัครทั้งกลุ่มได้รับการรบกวนแบบสุ่มของแต่ละรายในการคำนวณแบบกลุ่มครั้งเดียว โดย σ ควบคุมความเข้มของการรบกวน
- การคัดเลือก: idx = topk(F, k) เลือกดัชนีของผู้สมัคร k รายแรกจากค่าความเหมาะสมของผู้สมัคร N รายในครั้งเดียว
- การประเมิน: Y = fθ(X) แทนที่การเรียกทีละผู้สมัคร N ครั้ง ด้วยการส่งต่อแบบกลุ่มหรือการจำลองแบบกลุ่มครั้งเดียว
สิ่งสำคัญไม่ได้อยู่ที่ตัวดำเนินการเฉพาะเจาะจงใด ๆ แต่อยู่ที่ผู้สมัครทั้งหมดใช้กราฟการดำเนินการเทนเซอร์เดียวกัน: การเรียกแบบกลุ่มครั้งเดียวสามารถลดค่าใช้จ่ายของอินเทอร์พรีเตอร์และการเริ่มต้นเคอร์เนล ทำให้พลังประมวลผล GPU/หลายแกนส่งผลต่อการค้นหาเชิงวิวัฒนาการจริง ๆ การจัดการข้อจำกัดและการเกินขอบเขตก็สามารถทำได้ภายในกลุ่มการคำนวณเดียวกันด้วยเทนเซอร์มาสก์ โดยไม่จำเป็นต้องแยกสาขาสำหรับผู้สมัครบางราย
สาม、การปรับแต่งกราฟการคำนวณและตัวชี้วัดอัตราการประมวลผล
การเขียนวิวัฒนาการหลายรุ่นเป็นกราฟการไหลข้อมูลที่คอมไพล์ได้ ยังสามารถรีดประสิทธิภาพเพิ่มเติมได้:การหลอมรวมตัวดำเนินการลดจำนวนการเริ่มต้นเคอร์เนลการขนานภายในกลุ่มให้ผู้สมัครทั้งหมดประมวลผลพร้อมกันการประมวลผลแบบอะซิงโครนัสให้การคำนวณและการถ่ายโอนข้อมูลซ้อนทับกันการใช้หน่วยความจำซ้ำลดการจัดสรรเทนเซอร์ระดับกลาง ดังนั้นตัวชี้วัดประสิทธิภาพจึงควรเปลี่ยนจาก "ความหน่วงต่อขั้น" ไปสู่ผู้สมัคร/วินาที หรือรุ่น/วินาทีของอัตราการประมวลผล——การประมวลผลแบบกลุ่มเพียงครั้งเดียวจัดการผู้สมัครทั้งกลุ่ม มีเพียงอัตราการประมวลผลโดยรวมเท่านั้นที่สะท้อนประสิทธิภาพการค้นหาที่แท้จริง
