สามทางเลือกที่เลือกยากสำหรับ HPC: การเลือกระหว่างประสิทธิภาพ (Performance) ความสามารถในการย้ายระบบ (Portability) และผลิตภาพ (Productivity)
วิทยาศาสตร์กายภาพอธิบายโลกด้วยคณิตศาสตร์ประยุกต์วิทยาแผ่นดินไหว (Seismology) แม่เหล็กไฟฟ้า (Electromagnetics) และพลศาสตร์ของไหล (Fluid dynamics) ต่างก็ต้องพึ่งพาเทคนิคต่าง ๆ เช่น สมการอนุพันธ์ย่อย (Partial Differential Equations, PDE) และ การจำลองแบบ Finite-difference เพื่อสร้างแบบจำลองปรากฏการณ์ทางกายภาพ
Python และระบบนิเวศทางวิทยาศาสตร์ของไลบรารีต่าง ๆ อย่าง NumPy, SciPy และ MatPlotLib ช่วยให้นักวิทยาศาสตร์และนักวิจัยมีกรอบการทำงานในการพัฒนาโซลูชันเฉพาะทางที่ซับซ้อน โดยใช้รหัสคอมพิวเตอร์เพียงไม่กี่บรรทัดที่เขียนง่ายและเข้าถึงได้จริงด้วยความสามารถที่หลากหลายและผลิตภาพที่ยอดเยี่ยมนี้เอง ที่ช่วยผลักดันให้ Python ก้าวขึ้นมาเป็นหนึ่งในภาษาโปรแกรมชั้นนำในโลกแห่งวิทยาศาสตร์และวิศวกรรมศาสตร์ในปัจจุบันมีภาษาโปรแกรมอื่นอีกไหมที่คุณสามารถเขียนคำสั่ง import antigravity ได้แบบตรงตัวขนาดนี้
แม้ว่าภาษา Python บริสุทธิ์ (Pure Python) อาจจะทำงานได้ช้ากว่าภาษาที่ต้องผ่านการคอมไพล์ แต่บทบาทหลักของมันในระบบการประมวลผลสมรรถนะสูง (HPC) คือการทำหน้าที่เป็น ส่วนติดต่อที่เข้าถึงง่าย เพื่อเรียกใช้งานไลบรารีที่ผ่านการปรับแต่งประสิทธิภาพมาอย่างเข้มข้น ซึ่งเขียนด้วยภาษาระดับต่ำที่มีการคอมไพล์ เช่น C, C++, Fortran และรวมไปถึงภาษาเฉพาะทางอย่าง CUDA, SYCL หรือ HIP เพื่อรองรับ GPUไลบรารีทางวิทยาศาสตร์ของ Python อย่าง NumPy และ SciPy ใช้ประโยชน์จากส่วนประมวลผลเบื้องหลังที่ผ่านการคอมไพล์มาแล้วเหล่านี้ เพื่อส่งมอบประสิทธิภาพการทำงานที่สูง ในขณะที่ยังคงรักษาความง่ายในการใช้งานตามแบบฉบับของภาษา Python เอาไว้อย่างไรก็ตาม โมเดลนี้ยังต้องพึ่งพาความพร้อมใช้งานของโค้ดสำหรับ HPC ที่ผ่านการปรับแต่งให้เหมาะสมกับงานเฉพาะทางนั้น ๆ ซึ่งบ่อยครั้งการพัฒนาและบำรุงรักษาโค้ดเหล่านี้จำเป็นต้องใช้ทรัพยากรและผู้เชี่ยวชาญเฉพาะด้านในระดับสูง
โซลูชัน Devito: ปล่อยให้นักวิทยาศาสตร์เป็นนักวิทยาศาสตร์
ทีมงาน Devito Codes มุ่งมั่นที่จะนำเทคนิคการคอมไพล์แบบทันเวลาพอดี (Just-in-Time, JIT) มาใช้กับโค้ดแบบ finite-difference ที่มีประสิทธิภาพระดับ HPC เพื่อให้สามารถใช้งานได้ภายในระบบนิเวศของ Pythonด้วย Devito นักวิทยาศาสตร์สามารถทำงานภายใต้กรอบการทำงานเชิงสัญลักษณ์และคณิตศาสตร์ของ Python (SymPy) ได้โดยตรง โดยเขียนตัวแก้สมการเชิงอนุพันธ์ย่อย (partial differential equation, PDE) ที่ซับซ้อนและปัญหาการหาค่าเหมาะที่สุดตามเป้าหมาย (goal-driven optimization) และสามารถสร้างโค้ด HPC แบบขนานที่ปรับแต่งให้เหมาะกับฮาร์ดแวร์ได้อย่างราบรื่น สำหรับสถาปัตยกรรม CPU และ GPU หลักทั้งหมด
Devito Codes พบประสิทธิภาพที่เพิ่มขึ้นอย่างก้าวกระโดดบนโปรเซสเซอร์ Intel Xeon 6 (ยิ่งค่าสูงยิ่งดี)
ชุดคำสั่ง Kernel ของ Devito Codes สำหรับตัวส่งผ่านคลื่นแบบอะคูสติกแอนไอโซโทรปิก (Acoustic Anisotropic Propagator) สำหรับแบบจำลอง Tilted Transverse Isotropy (TTI) (ซึ่งเป็นแบบจำลองทางธรณีฟิสิกส์สำหรับงานสำรวจพลังงานทั่วไป) แสดงให้เห็นถึงประสิทธิภาพที่เหนือกว่าของ Intel Xeon 6 เมื่อเปรียบเทียบกับโปรเซสเซอร์ Intel Xeon Scalable เจนเนอเรชัน 51
Gerard Gorman ประธานเจ้าหน้าที่บริหารและผู้ร่วมก่อตั้ง Devito Codes กล่าวว่า “คนส่วนใหญ่มักเริ่มใช้งาน Devito ตั้งแต่แรก เพราะช่วยเพิ่มผลิตภาพ” “มันเอื้อให้เกิดรูปแบบการสร้างต้นแบบที่รวดเร็ว ทำให้พวกเขาสามารถใช้งานเสมือนเป็นห้องปฏิบัติการทางคอมพิวเตอร์”
การสร้างเฟรมเวิร์กด้วยภาษา Python ที่สามารถผลิตชุดคำสั่ง kernel ประสิทธิภาพสูงสำหรับการจำลอง การแก้สมการย้อนกลับ (inversion) และการตั้งโจทย์หาค่าเหมาะสมที่สุด (optimization) ให้ทำงานข้ามสถาปัตยกรรมฮาร์ดแวร์ที่หลากหลายได้นั้น ไม่ใช่เรื่องง่ายเลยDevito ผสมผสานเทคโนโลยี HPC หลากหลายรูปแบบเข้าด้วยกัน รวมถึง OpenMP สำหรับระบบหน่วยความจำร่วม, OpenACC สำหรับอุปกรณ์เร่งการประมวลผล และ MPI เพื่อเสริมประสิทธิภาพการประมวลผลแบบคู่ขนานและความสามารถในการย้ายระบบ (parallelism and portability)การปรับแต่งประสิทธิภาพในระดับสูงจำเป็นต้องมีการปรับจูนเครื่องให้เข้ากับฮาร์ดแวร์เฉพาะรุ่น โดยใช้ภาษาเฉพาะทางอย่าง CUDA, HIP และ SYCLDevito Codes ประยุกต์ใช้เทคนิคการปรับแต่งประสิทธิภาพแทบทุกรูปแบบเท่าที่เป็นที่รู้จักสำหรับการคำนวณแบบมีโครงสร้าง และยังบูรณาการความก้าวหน้าใหม่ ๆ เข้าสู่ระบบอย่างต่อเนื่อง ทำให้ประสิทธิภาพการทำงานเพิ่มขึ้นทวีคูณเมื่อเวลาผ่านไป ซึ่งมักจะเทียบเท่าหรือถึงขั้นเหนือกว่าโซลูชันเชิงพาณิชย์ที่ปรับแต่งด้วยมือโดยผู้เชี่ยวชาญ
ด้วยการเข้ามารับหน้าที่จัดการความซับซ้อนในการพัฒนาโค้ดสำหรับ HPC ทั้งหมด Devito Codes จึงช่วยให้ผู้ใช้สามารถย้ายโครงการข้ามระบบต่าง ๆ ได้อย่างง่ายดาย พร้อมทั้งสามารถใช้ประโยชน์จากทรัพยากรการประมวลผลที่มีอยู่ทั้งหมดได้อย่างเต็มประสิทธิภาพผู้ปฏิบัติงานด้าน HPC และผู้ให้บริการระบบสามารถคงโครงสร้างพื้นฐานเดิมไว้ พร้อมกับขยายระบบด้วยชุดหน่วยประมวลผลที่หลากหลาย (heterogeneous array) และยกระดับประสิทธิภาพขึ้นอย่างมีนัยสำคัญ โดยที่ยังคงความมั่นใจได้ว่าเวิร์กโหลดต่าง ๆ จะยังคงทำงานร่วมกันได้และมีประสิทธิภาพสูงเช่นเดิม
“ด้วย DevitoPRO นักธรณีฟิสิกส์สามารถหยิบเอาอัลกอริทึมจากงานวิจัยมาพัฒนาให้ใช้งานได้ภายในเวลาไม่เกินครึ่งวัน ซึ่งปกติแล้วงานลักษณะนี้อาจต้องใช้เวลาหลายเดือนในการเขียนโค้ดและปรับแต่งประสิทธิภาพระยะเวลาที่รวดเร็วเช่นนี้ช่วยให้ทีมสามารถทดลองและสร้างนวัตกรรมได้ในอัตราที่ไม่เคยมีมาก่อน พร้อมทั้งเร่งกระบวนการทดสอบและการนำอัลกอริทึมใหม่ไปใช้งานจริง” — มาเทียส ลูบูแตง (Mathias Louboutin) สถาปนิกโซลูชันอาวุโสแห่ง Devito
DevitoPRO
Devito เริ่มต้นขึ้นโดยเป็นส่วนหนึ่งของโครงการของ Intel Parallel Computing Centre ที่นำโดยศาสตราจารย์ Gerard Gorman จาก Imperial College London โครงการเริ่มต้นได้พัฒนาซอฟต์แวร์แบบโอเพนซอร์สที่มีประสิทธิภาพสูงสำหรับการสร้างภาพแผ่นดินไหว (seismic imaging)เมื่อโครงการพัฒนาเติบโตจนกลายเป็นคอมไพเลอร์ที่สามารถปรับแต่งประสิทธิภาพได้อย่างแท้จริงสำหรับเวิร์กโหลดด้าน HPC ทีมงานจึงได้เปิดตัว DevitoPRO ซึ่งเป็นเวอร์ชันระดับองค์กรที่มีฟีเจอร์ที่เป็นกรรมสิทธิ์ การปรับแต่งประสิทธิภาพขั้นสูง และการสนับสนุนเชิงพาณิชย์
DevitoPRO มุ่งเน้นไปที่การสำรวจธรณีฟิสิกส์ในอุตสาหกรรมพลังงานเป็นหลัก นอกจากการคอมไพล์โค้ดที่ปรับแต่งมาอย่างเต็มประสิทธิภาพและสามารถใช้งานข้ามแพลตฟอร์มได้สำหรับงานจำลองทางแผ่นดินไหวที่เขียนด้วยภาษา Python แล้ว DevitoPRO ยังมาพร้อมกับชุดคำสั่งประมวลผลการแพร่กระจายของคลื่น (propagator) และตัวดำเนินการหาค่าความชัน (gradient operator) ประสิทธิภาพสูง สำหรับงาน Full Waveform Inversion (FWI) และ Reverse Time Migration (RTM) อีกด้วยนอกจากนี้ DevitoPRO ยังให้บริการสนับสนุนทางเทคนิค การฝึกอบรม การพัฒนาซอฟต์แวร์ตามความต้องการ และการปรับแต่งประสิทธิภาพให้เหมาะสมกับฮาร์ดแวร์เฉพาะรุ่นสำหรับลูกค้าอีกด้วย
Devito ยังคงให้บริการเทคโนโลยีซอฟต์แวร์เชิงสัญลักษณ์และคอมไพเลอร์แบบอเนกประสงค์ ในรูปแบบโอเพนซอร์สที่ปราศจากสิทธิบัตร สำหรับนักวิจัยทั้งในภาควิชาการและอุตสาหกรรม
การขยายความสามารถในการทำงานข้ามแพลตฟอร์มของโค้ดด้วย SYCL และ Intel
แต่เดิมนั้น การสร้างโค้ดที่สามารถย้ายไปรันบนหน่วยประมวลผลที่หลากหลายได้นั้น จำเป็นต้องคอมไพล์ชุดคำสั่ง kernel เฉพาะ สำหรับฮาร์ดแวร์แต่ละประเภทแยกกัน เช่น การเขียน CUDA kernels สำหรับ GPU ของ NVIDIA, HIP kernels สำหรับ GPU ของ AMD และการเขียนโค้ดด้วยภาษา C/C++ สำหรับ CPU สถาปัตยกรรม x86 และ RISCในช่วงไม่กี่ปีที่ผ่านมา SYCL ได้มอบทางเลือกใหม่แบบหลายแพลตฟอร์มให้กับโปรแกรมเมอร์สาย HPC สำหรับใช้คอมไพล์โค้ด HPC ที่ได้รับการปรับแต่งประสิทธิภาพแล้ว
“การผสมผสานระหว่างการคำนวณเชิงสัญลักษณ์และเทคโนโลยีคอมไพเลอร์ขั้นสูงของ Devito ช่วยให้มั่นใจได้ว่าการสร้างโค้ดจะมีความน่าเชื่อถือ ตรวจสอบได้ และได้รับการปรับแต่งประสิทธิภาพมาอย่างดีเยี่ยม ซึ่งถือเป็นสิ่งสำคัญอย่างยิ่งสำหรับซอฟต์แวร์ทางคณิตศาสตร์ที่เน้นภารกิจสำคัญในขณะที่โค้ดจาก Generative AI ยังขาดความแม่นยำและความน่าเชื่อถือในระดับนี้ แต่การผสานเทคโนโลยีทั้งสองเข้าด้วยกันจะสามารถปลดล็อกผลิตภาพที่เหนือชั้นยิ่งขึ้นในการพัฒนาและทดสอบอัลกอริทึมใหม่ ๆ” — เจอราร์ด กอร์แมน (Gerard Gorman) ซีอีโอและผู้ร่วมก่อตั้ง Devito Codes
SYCL เป็นเลเยอร์นามธรรม (abstraction layer) ของภาษา C++ สำหรับการประมวลผลแบบขนานที่รองรับการทำงานข้ามแพลตฟอร์ม โดยมี API ที่สามารถค้นหาและจัดการทรัพยากรข้อมูล รวมถึงการประมวลผลโค้ดบนอุปกรณ์ที่หลากหลายจากผู้ผลิตหลายราย ไม่ว่าจะเป็น CPU, GPU และ FPGASYCL เป็นรากฐานของ moneAPI และ Data Parallel C++ ซึ่ง Intel ได้ปรับใช้บน GPU ของ Intel® Data Center
Devito Codes และวิศวกรของ Intel ทำงานร่วมกันเพื่อนำการสร้างโค้ด SYCL มาใช้กับ DevitoPRO ซึ่งรวมถึงการปรับแต่งเฉพาะสำหรับตัวเร่งความเร็ว Intel® Data Center GPU MAX 1100 และ 1550 ซีรีส์ในการนำไปใช้งาน ผู้ใช้ DevitoPRO เพียงแค่กำหนดเป้าหมายไปที่ Intel Data Center GPU เพื่อทำการคอมไพล์แบบทันเวลาพอดี ซึ่งจะช่วยให้ได้รับประโยชน์จากประสิทธิภาพที่เหนือชั้นของ SYCL
การขยายขีดความสามารถด้านประสิทธิภาพสำหรับการตรวจวัดคลื่นไหวสะเทือนแบบยืดหยุ่น (Elastic Wave Seismology) ด้วยการประมวลผลแบบความแม่นยำผสม (Mixed Precision Computing)
คลื่นแผ่นดินไหวเคลื่อนที่ได้ออกมาเป็น 2 รูปแบบ คือคลื่นหลักตามยาว (P-waves) และคลื่นทุติยภูมิตามขวาง (S-waves) การสร้างแบบจำลองคลื่น P-wave — ซึ่งนักแผ่นดินไหววิทยาเรียกว่า การวิเคราะห์ทางสวนศาสตร์ (acoustic analysis) — นั้นมีความเรียบง่ายค่อนข้างมากทั้งในเชิงคณิตศาสตร์และการคำนวณ เนื่องจากพลังงานของคลื่นและการเคลื่อนที่ของอนุภาคเดินทางอยู่ในมิติเดียวกันการสร้างแบบจำลองคลื่น P-wave และ S-wave ร่วมกัน — ซึ่งนักแผ่นดินไหววิทยาเรียกว่า การวิเคราะห์แบบยืดหยุ่น (elastic analysis) — ทำให้การคำนวณมีความซับซ้อนขึ้นอย่างมากในเชิงเรขาคณิต
เนื่องจากคลื่นทั้งสองรูปแบบ (P-wave และ S-wave) เคลื่อนที่ในสามมิติโดยทำมุมตั้งฉากต่อกัน การอธิบายพฤติกรรมของพวกมันจึงจำเป็นต้องใช้สมการคลื่นจำนวนมากขึ้น พร้อมด้วยส่วนประกอบที่ซับซ้อนกว่าเดิมการวิเคราะห์แบบยืดหยุ่นยังต้องการความละเอียดที่สูงกว่ามากเพื่อให้ได้ผลลัพธ์ที่แม่นยำ ซึ่งนั่นหมายถึงการต้องรวบรวมและจัดเก็บข้อมูลในปริมาณที่มหาศาลขึ้นอย่างมาก
คลื่นแผ่นดินไหวมีสองรูปแบบ ได้แก่ คลื่นปฐมภูมิ (P) ตามยาว และคลื่นทุติยภูมิ (S) ตามขวาง
“หากคุณกำลังประมวลผลแบบยืดหยุ่น ปริมาณการใช้หน่วยความจำของคุณจะสูงกว่ากรณีการประมวลผลทางสวนศาสตร์ประมาณ 4 ถึง 5 เท่าเป็นอย่างน้อย” — ฟาบิโอ ลูโพรินี (Fabio Luporini) ประธานเจ้าหน้าที่ฝ่ายเทคโนโลยี (CTO) และผู้ร่วมก่อตั้ง Devito Codes“นี่เป็นเพียงเพราะหลักฟิสิกส์เท่านั้นคุณกำลังสร้างแบบจำลองสนามคลื่นหลายสนามพร้อมกันในระบบสมการเชิงอนุพันธ์ย่อยแบบคู่ควบ (coupled partial differential equation) ซึ่งคุณจำเป็นต้องเก็บข้อมูลทั้งหมดนั้นไว้ในหน่วยความจำ"
Devito Codes กำลังพัฒนาอัลกอริทึมแบบความแม่นยำผสม (mixed-precision algorithms) ซึ่งเป็นเทคนิคการประมวลผลด้วย AI เพื่อทำให้เวิร์กโหลดการคำนวณแบบยืดหยุ่นสามารถประมวลผลบนฮาร์ดแวร์รุ่นปัจจุบันได้เวิร์กโหลดที่สามารถยอมรับการสูญเสียด้านความแม่นยำเพียงเล็กน้อยได้ จะถูกแปลงจากรูปแบบ FP-32 (เลขทศนิยม 32 บิต) ไปสู่การผสมผสานที่ออกแบบมาอย่างรอบคอบระหว่าง FP-32 และ FP-16 (เลขทศนิยม 16 บิต) ซึ่งสามารถแสดงค่าตัวเลขเดียวกันได้ด้วยหน่วยความจำเพียงครึ่งเดียวในโลกของการวิเคราะห์แบบยืดหยุ่น การลดขนาดชุดข้อมูลจากระดับ Petabyte ลงเหลือ 500TB ได้ครึ่งหนึ่งนั้น ส่งผลให้ประสิทธิภาพพุ่งสูงขึ้นอย่างต่อเนื่องในทุกขั้นตอน ตั้งแต่การจัดการหน่วยความจำและ I/O ไปจนถึงการเขียนข้อมูลสำรองลงในดิสก์
Devito Codes เพิ่มประสิทธิภาพขึ้นเป็นเท่าตัวด้วยการประมวลผลความแม่นยำผสม (ยิ่งสูงยิ่งดี)2
ผลการทดสอบของ Devito Codes แสดงให้เห็นว่า การปรับเปลี่ยนวิธีคำนวณและการใช้ความแม่นยำผสม (FP-16/FP-32) ช่วยเพิ่มประสิทธิภาพการทำงานได้ถึง 2 เท่า และลดปริมาณการใช้หน่วยความจำลงได้ 2 เท่า ซึ่งส่งผลให้ปริมาณงานที่ประมวลผลได้ต่อหน่วยเวลารวดเร็วขึ้นอย่างเห็นได้ชัด2
เวิร์กโหลดของ FP-16 ยังประมวลผลได้เร็วขึ้นบนซีพียู และ GPU ที่รองรับความแม่นยำผสม เช่น โปรเซสเซอร์ Intel® Xeon® 6 และ GPU ของ Intel Data Center ในการทดสอบครั้งแรก การวิเคราะห์คลื่นแบบยืดหยุ่นที่ประมวลผลด้วยความแม่นยำผสมร่วมกับ Devito Codes ช่วยเพิ่มประสิทธิภาพให้สูงขึ้นสูงสุด 2 เท่า1 ซึ่งเทียบเท่ากับการเปลี่ยนแปลงประสิทธิภาพครั้งใหญ่โดยไม่ต้องอัปเกรดฮาร์ดแวร์
สรุป: ทุกขีดความสามารถที่เพิ่มขึ้นนั้นล้วนมีความสำคัญ
Devito Codes และ Intel ยังคงปรับปรุงและปรับแต่งเทคโนโลยีคอมไพเลอร์อย่างต่อเนื่อง เพื่อรีดประสิทธิภาพให้มากขึ้นจากระบบ HPC ที่แตกต่างกันสำหรับการจำลอง finite differenceสำหรับผู้ใช้งานทั้งเวอร์ชันโอเพนซอร์สของ Devito และลูกค้าของ DevitoPRO งานนี้ถือว่าขาดไม่ได้
“การประมวลผลข้อมูลแผ่นดินไหวเพื่อสร้างภาพชั้นใต้ดิน (subsurface imaging) อาจมีค่าใช้จ่ายในการประมวลผลสูงถึงหลายล้านต่อหนึ่งโครงการ” — คุณกอร์แมนกล่าว“ดังนั้นเราจึงจำเป็นต้องรีดเค้นประสิทธิภาพออกมาให้ได้ทุกหยดจนถึงเปอร์เซ็นต์สุดท้าย เพราะเวลาคือเงิน”
สำหรับการอัปเดตล่าสุด โปรดเยี่ยมชม Devito Codes บน GitHub หรือ devitocodes.com