การเร่งความเร็วด้วย GPU ใน PixInsight: การตั้งค่า CUDA และผลการทดสอบประสิทธิภาพจริง
บทความนี้เรียบเรียงจากบันทึกช่วง ค.ศ. 2021 ถึง ค.ศ. 2024 เครื่องมือบางส่วน เวอร์ชันของ CUDA และขั้นตอนการตั้งค่าอัปเดตไปแล้วบ้าง (โดยเฉพาะ PixInsight รุ่นหลังที่รองรับการตั้งค่าแบบคลิกเดียว) ขอให้พิจารณาบริบทของช่วงเวลาประกอบการอ่าน
นับตั้งแต่กระบวนการที่ใช้โครงข่ายประสาทเทียมอย่างการลบดาว การลดสัญญาณรบกวนด้วย AI และการปรับความคมชัดด้วย AI ทยอยเข้ามาอยู่ในขั้นตอนการทำงานของ PixInsight คำถามที่ว่า “ควรเพิ่มการ์ดจอให้คอมพิวเตอร์สำหรับปรับแต่งภาพหรือไม่” ก็กลายเป็นเรื่องที่ใกล้ตัวมาก บทความนี้รวบรวมประสบการณ์การทดสอบจริงและการตั้งค่าด้านการเร่งความเร็วด้วย GPU ของผมในช่วงหลายปีที่ผ่านมา ครอบคลุมตั้งแต่เหตุผลที่ควรใช้ GPU วิธีเปิดใช้งาน ประหยัดเวลาได้มากแค่ไหน ไปจนถึงความแตกต่างระหว่างแต่ละแพลตฟอร์ม
ทำไมต้องเร่งความเร็วด้วย GPU
กระบวนการใน PixInsight ที่รองรับการเร่งความเร็วด้วย GPU ในปัจจุบันส่วนใหญ่เป็นกระบวนการที่ใช้การคำนวณแบบโครงข่ายประสาทเทียมหนัก ๆ ได้แก่ StarNet++, StarNet 2, StarXTerminator (SXT), NoiseXTerminator (NXT) และ BlurXTerminator (BXT) หากกระบวนการเหล่านี้รันด้วย CPU เพียงอย่างเดียว โดยเฉพาะเมื่อขนาดภาพใหญ่ขึ้น เวลารอจะยาวนานมาก
ตัวอย่างที่เห็นผลชัดเจนคือการลบดาวแบบเป็นชุด เมื่อประมวลผลดาวหางด้วยวิธีใหม่ ต้องลบดาวออกจากภาพดาวหางแต่ละภาพที่ยังไม่ผ่าน Stacking (การซ้อนภาพ) ทีละภาพในสถานะ Linear (ก่อนผ่านการ Stretch) เช่น ภาพความละเอียด 9 ล้านพิกเซล จำนวนกว่า 200 ภาพ เมื่อเร่งความเร็วด้วย RTX 3060 Laptop แต่ละภาพใช้เวลาเพียงประมาณ 20 วินาที แต่ถ้าใช้ CPU เพียงอย่างเดียว เวลารวมทั้งหมดจะทำให้เริ่มสงสัยในชีวิต
เมื่อได้ลองใช้การเร่งความเร็วด้วย GPU สักครั้ง คงย้อนกลับไปแบบเดิมไม่ได้อีกแล้ว
ครั้งแรกที่เปิดใช้งาน CUDA สำเร็จ
ปลาย ค.ศ. 2021 หลังจากใช้เวลาหลายชั่วโมงทดสอบ NVIDIA CUDA, cuDNN และ TensorFlow หลายเวอร์ชัน ในที่สุดผมก็เปิดใช้งาน GPU (NVIDIA RTX 3060) เพื่อช่วยลบดาวได้สำเร็จ
- StarXTerminator ใช้เวลาเพียงประมาณ 15 วินาที
- StarNet++ ใช้เวลาไม่ถึง 10 วินาที
ก็ลบดาวออกจากภาพเดียวเสร็จแล้ว เมื่อเทียบกับการใช้ CPU ล้วน ความแตกต่างชัดเจนมาก

วิธีเปิดใช้งาน: จากการตั้งค่าด้วยตัวเองสู่การติดตั้งแบบคลิกเดียว
วิธีการในยุคแรก: การวางไฟล์ด้วยตัวเอง
ในยุคแรกการเปิดใช้งานการเร่งความเร็วด้วย GPU ต้องดาวน์โหลดไฟล์ CUDA, cuDNN, TensorFlow และอื่น ๆ ในเวอร์ชันที่ตรงกันด้วยตัวเองแล้ววางไว้ในตำแหน่งที่ถูกต้อง ขั้นตอนนี้ไม่ง่ายเลย และใช้ได้เฉพาะผู้ใช้ Windows ที่มีคอมพิวเตอร์ติดตั้ง PixInsight และมีการ์ดจอ NVIDIA ที่มี CUDA core เท่านั้น ผู้ใช้การ์ดจอ AMD (รวมถึงกราฟิกออนบอร์ด) ให้ข้ามขั้นตอนนี้ไปได้เลย ส่วนผู้ใช้ Linux ต้องหาข้อมูลอ้างอิงด้วยตัวเอง เมื่อตั้งค่าเสร็จแล้ว จะช่วยเพิ่มความเร็วในการทำงานของ StarNet, StarNet++, SXT, NXT และ BXT ได้อย่างมาก
ปัญหาคือทุกครั้งที่อัปเดต PixInsight มักต้องวางไฟล์เหล่านี้ใหม่อีกครั้ง ซึ่งลืมได้ง่ายมาก
วิธีการในปัจจุบัน: การตั้งค่าแบบคลิกเดียวในตัว PI
ถึงต้น ค.ศ. 2024 สถานการณ์ดีขึ้นอย่างมาก เพียงแค่เพิ่มฐานข้อมูลอัปเดต (repository) ใน PixInsight ก็ใช้การเร่งความเร็วด้วย GPU ได้ทันที ไม่ต้องติดตั้งหรือตั้งค่าเพิ่มเติม นี่คือวิธีที่ RC (Russell Croman) ผู้พัฒนาชุด XTerminator นำเสนอไว้ในฟอรัมของ PixInsight ตอนนั้นฟีเจอร์นี้ใช้ได้เฉพาะ Windows ส่วนเวอร์ชัน Linux ยังอยู่ระหว่างการพัฒนา ส่วนระบบปฏิบัติการ Mac ไม่จำเป็นต้องตั้งค่าแบบนี้อยู่แล้ว
วิธีตรวจสอบว่า GPU ทำงานอยู่จริงหรือไม่
หากต้องการรู้ว่า GPU ทำงานอยู่หรือไม่ระหว่างลบดาวหรือลดสัญญาณรบกวน บน Windows 10/11 ให้เปิด Task Manager สลับไปที่แท็บ “GPU” แล้วเลือกแท็บย่อย “CUDA” หากเห็นเปอร์เซ็นต์การใช้งานของ CUDA core ก็แสดงว่ากำลังใช้งาน GPU อยู่ (เช่น ตอนรัน SXT จะเห็น CUDA core พุ่งขึ้นไปถึงระดับการใช้งาน 87%) แต่ถ้า CUDA core ไม่ขยับเลย ก็แสดงว่าไม่ได้ใช้ GPU

ผลการทดสอบประสิทธิภาพจริง
CPU ระดับสูง เทียบกับ GPU ระดับกลางถึงล่าง
หลายคนมักถามว่า ถ้า CPU แรงพอแล้วยังต้องใช้การ์ดจออยู่ไหม ผมนำ CPU ระดับสูงสำหรับผู้บริโภค (AMD R9-7950X) มาเทียบกับการ์ดจอระดับกลางถึงล่างสำหรับผู้บริโภค (RTX 3060 12G) โดยใช้ซอฟต์แวร์ PI 1.8.9-1 และ SXT 2.05 AI 11 lite
- ชุดภาพแรก M1 (14.75MP): ลบดาวด้วย CPU ใช้เวลา 1 นาที 45 วินาที ลบดาวด้วย GPU ใช้เวลา 10.2 วินาที
- ชุดภาพที่สอง Webb NGC 3372 (123MP): ลบดาวด้วย CPU ใช้เวลา 12 นาที 31 วินาที ลบดาวด้วย GPU ใช้เวลา 1 นาที 5 วินาที
จากผลทดสอบเห็นได้ชัดสองอย่าง คือยิ่งภาพมีขนาดใหญ่ ผลของการเร่งความเร็วด้วย GPU ยิ่งเห็นชัด และแม้จะเอา CPU ระดับสูงมาเทียบกับ GPU ระดับกลางถึงล่าง CPU ก็ยังต้องใช้เวลามากกว่า GPU อย่างน้อย 10 เท่าเพื่อทำงานเดียวกันให้เสร็จ ถ้า CPU ที่ใช้ไม่ใช่รุ่นระดับสูง ความต่างจะยิ่งมากขึ้นไปอีก ดังนั้น ตราบใดที่ขั้นตอนการทำงานต้องใช้กระบวนการ AI ซ้ำ ๆ ผมแนะนำอย่างยิ่งให้หาการ์ดจอ RTX ซีรีส์ 30 ระดับกลางถึงล่างมาใช้อย่างน้อยหนึ่งตัว

อัปเดตซอฟต์แวร์ CUDA อย่างเดียว ก็เร็วขึ้นได้อีกเท่าตัว
ยังมีข้อค้นพบที่น่าประหลาดใจอีกอย่าง เมื่อกว่าหนึ่งปีก่อนผมเปิดใช้งานการเร่งความเร็วด้วย CUDA บนโน้ตบุ๊ก RTX 3060 Laptop เป็นครั้งแรก ผ่านไปกว่าหนึ่งปีโดยไม่ได้เปลี่ยนฮาร์ดแวร์ประมวลผลใด ๆ เลย (โน้ตบุ๊กก็เปลี่ยนไม่ได้อยู่แล้ว) แค่อัปเดตซอฟต์แวร์ที่เกี่ยวข้องแล้วทดสอบใหม่ด้วยภาพชุดเดิม ปรากฏว่าความเร็วเพิ่มขึ้นเกือบเท่าตัว
ยกตัวอย่างการลบดาวออกจากภาพความละเอียด 120 ล้านพิกเซล (PI 1.8.9-1, SXT 2.05 AI 11 lite, RTX 3060 Laptop 6GB)
- การตั้งค่า CUDA แบบที่หนึ่ง (CUDA 11.2.2, TensorFlow 2.6, cuDNN 8.2.1): ใช้เวลาประมาณ 2 นาทีครึ่ง
- การตั้งค่า CUDA แบบที่สอง (CUDA 11.8, TensorFlow 2.9, cuDNN 8.7, ZLib DLL x64 1.2.3): ใช้เวลาเพียง 1 นาที 20 วินาที
ดังนั้น ใครที่ติดตั้ง CUDA ไว้ตั้งแต่แรกแล้วไม่เคยอัปเดตอีกเลย อย่าลืมอัปเดตซอฟต์แวร์ CUDA ดูบ้าง ลองอ้างอิงชุดตั้งค่า “แบบที่สอง” ด้านบนได้ เท่ากับได้ประสิทธิภาพเพิ่มขึ้นครึ่งหนึ่งมาแบบฟรี ๆ

การ์ดจอเดสก์ท็อป เทียบกับการ์ดจอโน้ตบุ๊ก
ผมมี RTX 3060 12G และ RTX 3060 Laptop 6G อยู่ในมือพอดีสองตัว เวลาลบดาวภายใต้ซอฟต์แวร์เวอร์ชันเดียวกัน
- RTX 3060 12G: 1 นาที 4 วินาที
- RTX 3060 Laptop 6G: 1 นาที 20 วินาที
ทั้งสองตัวใช้ชิปเดียวกัน ต่างกันแค่ความจุหน่วยความจำและการออกแบบด้านการใช้พลังงานระหว่างรุ่นเดสก์ท็อปกับรุ่นโน้ตบุ๊ก เวลาลบดาวจึงต่างกันไม่มาก ถ้าพูดถึงความคุ้มค่า โน้ตบุ๊กเกมมิงที่ติดตั้งการ์ดจอ NVIDIA (ตอนนั้นราคาประมาณ NT$30,000) ถือเป็นตัวเลือกที่คุ้มค่าพอสมควร

แม้แต่การ์ดขุดเหมืองเก่าก็ยังรู้สึกถึงความต่าง
คอมพิวเตอร์เครื่องเก่าที่บ้านซึ่งประกอบไว้เมื่อประมาณสี่ปีก่อน (AMD R5-3600) มีการ์ดจอเดิม (R9-270) ที่ใกล้หมดอายุการใช้งานแล้ว ผมซื้อการ์ดขุดเหมืองราคาต่ำกว่า NT$3,000 จากออนไลน์มาหนึ่งตัว คือ NVIDIA GTX 1660s แล้วนำมาทดสอบลบดาวจากภาพเต็มเฟรม (ประมาณ 60 ล้านพิกเซล)
- CPU ล้วน: 5 นาที 40 วินาที
- GPU: 51 วินาที
เวลาต่างกันประมาณ 6.6 เท่า แม้ 1660s จะมีจำนวน CUDA core เพียงพันสี่ร้อยกว่าตัว แต่เวลาที่ประหยัดได้ก็ยังเห็นผลชัดเจน ตราบใดที่ต้องทำงานซ้ำ ๆ อย่างลบดาว ลดสัญญาณรบกวนด้วย AI หรือปรับความคมชัดด้วย AI การเร่งความเร็วด้วย GPU ก็เป็นการลงทุนที่คุ้มค่ามาก

ความแตกต่างระหว่างแต่ละแพลตฟอร์ม
ระบบปฏิบัติการและฮาร์ดแวร์ที่ต่างกันรองรับการเร่งความเร็วด้วย GPU สำหรับกระบวนการ AI ไม่เหมือนกัน ผมรวบรวมสถานการณ์ของทั้งสามแพลตฟอร์ม คือ Windows, Mac และ Linux ไว้ (ผลทดสอบบางส่วนบน Mac ได้รับความอนุเคราะห์จากเพื่อนคนหนึ่งที่ชื่นชอบเรื่องเดียวกัน)
- Windows + NVIDIA: เพียงตั้งค่าให้เรียบร้อย ก็เรียกใช้ CUDA เพื่อเร่งความเร็วด้วย GPU ให้กับ SXT, BXT, NXT และ StarNet ได้ทั้งหมด
- Mac ที่ใช้ Apple Silicon (เช่น M1 / M1 Ultra): BXT และ NXT ไม่ต้องตั้งค่าใด ๆ ก็เรียกใช้ Metal เพื่อเร่งความเร็วด้วย GPU โดยอัตโนมัติ ส่วน SXT เมื่อรันจะใช้ทรัพยากร CPU เพียงบางส่วนและไม่ได้ใช้ GPU ขณะที่ StarNet 2 นั้นต้องเปลี่ยนไปใช้เวอร์ชันทดลองบนเว็บไซต์ทางการ (มีเฉพาะโหมด CLI แบบบรรทัดคำสั่ง) จึงจะใช้การเร่งความเร็วด้วย GPU ได้สำเร็จ
- Mac รุ่น Intel: StarNet ใช้ได้เฉพาะ CPU ส่วน SXT, BXT และ NXT ใช้การเร่งความเร็วด้วย GPU ได้ แม้จะเป็น GPU ของ AMD ก็ใช้ได้เช่นกัน
บนแพลตฟอร์ม Apple Silicon กระบวนการอย่าง SXT รองรับการเร่งความเร็วด้วย GPU มาตั้งแต่ต้น ทำให้ประสิทธิภาพใกล้เคียงกับ “Windows + การเร่งความเร็วด้วย NVIDIA CUDA” พอสมควร ส่วนระบบ Linux บน PC ก็เรียกใช้ GPU มาช่วยเร่งการคำนวณได้เช่นกัน

สรุป
ย้อนมองการเปลี่ยนแปลงตลอดหลายปีที่ผ่านมา การเร่งความเร็วด้วย GPU พัฒนาจากการตั้งค่าแบบลงลึกที่ “ต้องใช้เวลาหลายชั่วโมงเพื่อจับคู่เวอร์ชัน CUDA ให้ลงตัว” มาเป็น “PI จัดการให้เสร็จในตัวด้วยคลิกเดียว” กระบวนการที่เร่งความเร็วได้มีมากขึ้นเรื่อย ๆ แม้แต่การ์ดขุดเหมืองเก่าราคาไม่กี่ร้อยดอลลาร์ไต้หวันก็ยังเพิ่มความเร็วได้หลายเท่า หากขั้นตอนการทำงานพึ่งพากระบวนการ AI อย่างหนัก การ์ดจอ NVIDIA ระดับกลางถึงล่างสักตัว (หรือ Mac ที่ใช้ Apple Silicon สักเครื่อง) แทบจะเป็นสิ่งจำเป็น