By Arnon Puitrakul - 23 สิงหาคม 2024
ก่อนหน้านี้เราทำ Content เล่าความแตกต่างระหว่าง CPU, GPU และ NPU ทำให้เราเกิดคำถามขึ้นมาว่า เอาเข้าจริง เราจำเป็นต้องมี NPU อยู่ในตลาดจริง ๆ รึเปล่า หรือมันอาจจะเป็นแค่ Hardware ตัวนึงที่เข้ามาแล้วก็จากไปเท่านั้น วันนี้เราจะมาเล่าให้อ่านกัน
สมัยก่อนเครื่องคอมพิวเตอร์ที่เราใช้งานกัน ก็มีเพียงแค่ CPU ที่ถูกออกแบบมาให้เป็นเครื่องคิดเลขขนาดใหญ่ สามารถคำนวณเลขได้หลากหลายรูปแบบ และรองรับความซับซ้อนที่สูงมากได้ แต่พอมาวันนึง นักคอมพิวเตอร์มาค้นพบว่า สิ่งที่เรามักจะต้องคำนวณบ่อย ๆ มันไม่จำเป็นต้องใช้อุปกรณ์ที่มีความซับซ้อนขนาดนั้นก็ได้นี่หว่า
เช่น การคำนวณทาง Graphic ทั้งหลาย สมมุติว่า เราจะ Render เกมในความละเอียด 4K บนอัตราส่วน 16:9 นั่นหมายความว่าใน 1 Frame เราจะต้องใช้ประมาณ 8.29 MP ด้วยกัน และ Frame Rate ที่เราต้องการอยู่ที่ 60 FPS นั่นหมายความว่า ใน 1 วินาที CPU จะต้องสร้างภาพรวม ๆ กันถึง 497.64 MP เลยทีเดียว ซึ่งเป็นเรื่องยากมาก ๆ สำหรับ CPU ที่จะทำอะไรแบบนั้นได้
ทำให้มีการเริ่มคิดถึงอุปกรณ์ที่ออกแบบมาเพื่อการคำนวณงานทางด้าน Graphic อย่าง GPU ขึ้นมา เรียกว่าเป็น Accelerator ตัวแรก ๆ ในโลกคอมพิวเตอร์ที่ถูกคิดขึ้นมา และหลังจากนั้นโลกของเราก็มีการผลิต Accelerator อื่น ๆ ออกมาเรื่อย ๆ เช่น Media Accelerator ขึ้นมาเพื่อทำให้เราสามารถ Encode/Decode วีดีโอต่าง ๆ ได้รวดเร็วมากขึ้น เช่น Intel QuickSync และ Media Engine ที่อยู่ใน Apple M-Series Chip ทั้งหลาย หรือจะเป็นพวก DPU (Data Processing Unit) เข้ามาช่วยเหลือเรื่องการจัดการ Network Traffic ทั้งหลายอย่างพวก Nvidia BlueField เป็นต้น
พวก Accelerator ทั้งหลายมันออกแบบมาให้ตัวเองสามารถทำงานได้มีประสิทธิภาพสูงมาก ๆ เช่น อาจจะมีกำลังในการประมวลผลเรื่องใดเรื่องหนึ่งสูงมาก ๆ เผลอ ๆ มากกว่าเราไปสั่งให้ CPU ทำอีกด้วยซ้ำ หรือสามารถย่อส่วนมันลงทำให้มันใช้พลังงานในการทำงานที่น้อยกว่าเดิมได้ เช่น NPU บางรุ่นกินไฟกันอยู่ในระดับ 2-5W เท่านั้น แต่ถ้าเอาไปให้ CPU ทำอาจจะกดไปถึง 20-30W ใน CPU ขนาดเล็ก ๆ ได้เลย
พอในปัจจุบัน เราจะสังเกต Application หลาย ๆ ตัวมีการนำ Neural Network และ AI ต่าง ๆ เข้ามาใช้ใน Application เพิ่มมากขึ้น อารมณ์เหมือน GPU ที่เล่าไปเมื่อสักครู่เลย ทำให้ผู้ผลิต CPU ต้องเริ่มนำ Accelerator ที่ช่วยเร่งความเร็วในการทำ Neural Network ให้เร็วขึ้นมาใส่ เจ้าสิ่งนี้เราเรียกว่า NPU (Neural Processing Unit)
ก่อนเราจะไปเข้าใจว่ามันทำอะไร เราจะต้องมาดูคณิตศาสตร์ที่ต้องใช้ในการทำ Neural Network กันก่อน สมมุติว่า เราจะสร้าง Model สำหรับการทำนายฟ้าฝน โดยมีข้อมูลที่ต้องใส่เข้าไป 4 อย่างด้วยกัน และเราจะให้มันทำนายออกมาเป็น โอกาสที่ฝนจะตกในวันนั้นกัน นั่นแปลว่า Neural Network ของเราแบบเบสิกมาก ๆ จะมีหน้าตาเป็น 4 Nodes ใน Input Layer และ 1 Node ใน Output Layer ขอไม่ใส่ Hidden Layer ละกัน เพื่อความเข้าใจง่าย
เวลาเราใช้งาน Neural Network หรือเรียกว่า Inference เราจะต้องเอาข้อมูลใส่เข้าไปใน Input Layer จากนั้นมันจะต้องคูณกับค่า Weight ในแต่ละช่อง สุดท้ายก็เอาผลคูณของทุก Input มาบวกกัน แบบนี้ไปเรื่อย ๆ เราอาจจะเห็นว่า มันคำนวณแค่นี้เอง แต่อย่าลืมว่า Neural Network ที่เราใช้งานจริง มันไม่ได้เล็กแค่นี้ไง เรากำลังพูดถึงหลายล้าน Parameter นั่นเป็นสาเหตุว่า ทำไมปกติเวลาเราใช้งาน Neural Network เราถึงใช้ GPU เข้ามาช่วย เพราะ GPU มันเก่งเรื่องนี้มากกว่า CPU เยอะมาก แต่สุดท้ายก็ยังไม่เพียงพอกับการใช้งานกับ Model ขนาดใหญ่ ๆ ในปัจจุบัน หรือไม่ก็กินพลังงานมากเกินไป ไม่เหมาะกับอุปกรณ์ขนาดเล็กอยู่ดี
ตรงนี้แหละที่ NPU เข้ามาช่วย สิ่งที่มันทำคือ การเข้ามาเร่งความเร็วในการบวกคูณ หรือเราเรียกว่า Multiply–accumulate (MAC) โดยการใส่วงจรพิเศษสำหรับการทำเจ้าสิ่งนี้โดยตรง ทำให้เครื่องสามารถทำ MAC ได้มีประสิทธิภาพสูงขึ้น แต่ถามว่า ถ้าจะให้มันไปคำนวณคณิตศาสตร์อื่น ๆ นอกเหนือจากนี้ได้มั้ย คำตอบคือ อาจจะได้ แต่ยาก
อ่านมาถึงตรงนี้ อาจจะมีไอเดียว่า งั้นเราก็ใส่ Accelerator เข้าไปหลาย ๆ ตัว หลาย ๆ ชนิดไปเลยสิ เราจะได้มี Headroom ให้ CPU สามารถทำงานอย่างอื่นที่จำเป็นมากกว่าได้ แต่หยุดก่อนอานนท์ โลกเรามันไม่ได้ง่ายขนาดนั้น
โดยปกติพวก Accelerator ณ ปัจจุบันนี้ มักจะไม่ได้เป็นอุปกรณ์เชื่อมต่อแยก แต่มักจะมาภายใน Chip ที่เราใช้งานเลย เราเรียกว่า SoC (System-on-Chip) ให้เราคิดภาพว่า ด้าน Chip มันมีพวกวงจรทางไฟฟ้าเยอะมาก หลายล้าน ๆ ตัว ปัญหามันอยู่ที่ว่า พื้นที่บนแผงวงจรนี้มีจำกัด เช่น SoC เรามีขนาด 2x2 cm และเราสามารถผลิตอุปกรณ์ในวงจรได้เล็กสุดที่ 2nm นั่นหมายความว่า เราจะสามารถยัดอุปกรณ์ในวงจรได้จำกัด การจะยัดได้เพิ่มทำได้ 2 วิธีคือ การเพิ่มขนาดของ SoC และ การย่อส่วนอุปกรณ์วงจรให้เล็กลงไปอีก แต่ไม่ว่าจะเป็นทางใด มันก็มีราคาที่ต้องจ่ายของมันเช่นกัน
นั่นทำให้ พื้นที่บน Silicon หรือบน SoC นั้นเหมือนบ้านในฮ่องกง และญี่ปุ่นเลยคือ มันมีราคาแพงมาก ผู้ผลิตจำเป็นต้องเลือกว่า จะให้พื้นที่ของ CPU มากแค่ไหน ยังไม่รวมกับ I/O, Memory Controller และอื่น ๆ อีกมากมาย เช่นสมมุติว่า เขามั่นใจมากว่า คนที่ซื้อ SoC ตัวนี้ไปจะต้องเล่นวีดีโอบ่อยมากแน่ ๆ เขาก็อาจจะให้พื้นที่กับ Media Accelerator มากหน่อยเมื่อเทียบกับ Accelerator ตัวอื่น ๆ
ตอนนี้เราอาจจะเห็นว่า Chip ไม่ว่าจะเป็นพวก CPU รุ่นใหม่ ๆ จากทั้ง Intel และ AMD หรือจะเป็นพวก SoC ทั้งหลาย ก็มีการยัด NPU เข้ามาเยอะมาก ๆ ซึ่ง Demo ที่เราเห็นกันจัง ๆ ชัด ๆ ล่าสุด เราว่าน่าจะของฝั่ง Snapdragon X-Series ทั้งหลาย ที่เอามาทำ On-Device Chatbot, Image Generation และการทำ Image Segmentation ทำให้เรารู้สึกว่า หรือว่า เราจะเริ่มเอา NPU เข้ามาเป็นอุปกรณ์หลักในการใช้งาน Neural Network Application แล้ว
ส่วนตัวเรามองว่า มันเป็น Demo ที่ไร้สาระพอสมควร เพราะงานทั้งหมดที่เขาเอามา Demo นั้น GPU สามารถทำได้เช่นเดียวกัน เผลอ ๆ ใน SoC บางรุ่น GPU ทำได้ดีกว่าด้วยซ้ำ แต่เราพอจะเข้าใจได้ เพราะมันเป็นงานที่ End-User เห็นภาพได้ง่าย
แต่แก่นจริง ๆ ของการใช้ NPU ในวันนี้เราคิดว่า มันอยู่ที่คำว่า การบริโภคพลังงาน เพราะมันทำให้งานที่รัน Neural Network สามารถทำงานได้โดยที่เราใช้พลังงานน้อยลง เผลอ ๆ สามารถรันมันอยู่ใน Background Process ได้เลยด้วยซ้ำ โดยส่งผลต่อเรื่องความร้อน และระยะเวลาการใช้งานบน Battery น้อยมาก ๆ เช่น NPU ที่อยู่บน Snapdragon X Series เอาแบบ Full Load กินอยู่ไม่เกิน 5W เท่านั้นเองเทียบกับ GPU ที่อาจจะมากกว่านี้เท่าตัวหรือมากกว่าเลยด้วยซ้ำ
ทำให้เราเกิดคำถามต่อว่า หากเราผลิต NPU ออกมาเพื่อช่วยเรื่องความประหยัดพลังงาน แล้ว Desktop PC ที่เสียบปลั๊กอยู่ตลอด จำเป็นต้องใช้ NPU ด้วยมั้ย เพราะ ถ้าพูดกันตรง ๆ NPU ณ วันนี้มีประสิทธิภาพการทำงานที่ต่ำกว่า GPU มาก โดยเฉพาะ Built-in GPU ที่อยู่บน Desktop ที่ไม่ต้องกังวลเรื่องพลังงาน เช่น Intel Luna Lake ที่ Intel เคลมว่า Built-in GPU อยู่ที่ 67 TOPS เทียบกับ Built-in NPU ที่ทำได้เพียง 48 TOPS หากเราจะรัน Neural Network บน Background เราก็ไปเรียก GPU แทนก็ได้ เผลอ ๆ ดีกว่าด้วยซ้ำ
ตัวอย่างของการใช้ NPU บน Desktop PC ที่ดีคือฝั่ง Nvidia ใน RTX Series ทั้งหลาย มันมีการใส่สิ่งที่เรียกว่า Tensor Core มา ซึ่งไส้ในมันก็คือ NPU นี่แหละ ซึ่งเขาเอามาทำ Application อย่างการรันพวก DLSS สำหรับการ Upscale ภาพให้เป็นความละเอียดสูงขึ้น เพื่อเพิ่ม Frame Rate ของเกม ที่มันดี เพราะ แค่ให้ GPU Render ตัวเกมก็แย่แล้ว ถ้าจะลดกำลังมันลงมา แล้วแบ่งไปทำ Upscaling ไม่น่ารอดแน่นอน การมี Tensor Core เข้ามาเลยค่อนข้างเป็นอะไรที่ตอบโจทย์พอสมควร
จะสังเกตได้ว่า พวก Nvidia GPU ที่เป็นรุ่นสำหรับ AI Training เขาจะให้ Tensor Core มาสูงกว่า เช่น 4090 ให้มา 512 Tensor Cores แต่พวก GPU สำหรับงาน AI อย่าง H100 กดมาให้ 460 Tensor Cores ไปเลยจุก ๆ อย่าสับสนกับ RT Core นะ อันนั้นเอาไว้ใช้ในงาน Ray-Tracing
แน่นอนว่า พอเป็นของใหม่พึ่งออกมาไม่ถึง 10 ปีด้วยซ้ำ ปัญหามันก็มีเหมือนกัน ถึงเราจะบอกว่า ทั้งหมดมันรัน MAC แต่เวลาเราจะเขียนโปรแกรมเพื่อเรียกใช้ NPU ของแต่ละยี่ห้อมันมีการเรียกที่แตกต่างกัน ทั้งในเรื่องวิธีการเรียก และ Format ที่ใช้
ทำให้ ณ วันนี้ Developer จะต้องเขียนโปรแกรมแยกกัน หากเราต้องการ Target NPU ของเจ้านี้ เราจะต้องใช้ Library ตัวนึง และหากเราต้องการ Target อีกเจ้า เราก็ต้องเขียนเพื่อเรียกอีก Library ตัวนึง ยังไม่มีตัวไหนที่ออกมารันเป็น Universal ได้เลย ช่วงแรกก็จะเหนื่อยหน่อย เช่นเราเขียน Target ที่ Neural Engine เวลาเรียกมันก็จะมี Format ตามสเปกของมันอยู่ว่า เราจะต้องแปลง Model ให้อยู่ในหน้าตาแบบไหน และใช้ Library ของ Apple เป็นตัวแปลง และเรียกใช้
หรือในฝั่ง Snapdragon เอง เขามี SDK ให้เราเรียกใช้งานได้ด้วยเช่นกัน แค่ว่า เวลาเขียน เราอาจจะต้องเขียนเช็คก่อนว่า มี NPU ยี่ห้อไหนอยู่ในเครื่อง และเรียก SDK ของเจ้านั้นให้ถูกต้องไปก่อน อย่างน้อยจนกว่าจะมี Universal Library ออกมาให้เราเลือกใช้
NPU จริง ๆ มันก็คือ Accelerator ที่เกิดขึ้นมาใหม่อีกตัวหนึ่งที่ทำให้เราสามารถรัน Neural Network ทั้งในแง่การ Train และ Inference ได้มีประสิทธิภาพสูงขึ้น ผ่านการ Implement Multiply-Accumulate (MAC) ลงไปเพื่อ ส่วนใหญ่ในปัจจุบัน เราเน้นการเอามาใช้กับอุปกรณ์ขนาดเล็ก หรืออุปกรณ์ที่จำเป็นต้องใช้พลังงานต่ำ ๆ ก่อน แต่การทำงานแบบจริงจัง เน้นการ Train Model จริง ๆ เราก็ยังใช้ GPU อยู่เหมือนเดิม ดังนั้น เราอยากจะบอกว่า หากเครื่องของเราไม่มี NPU ในวันนี้จริง ๆ ไม่ต้องซีเรียสมาก เพราะมันเป็นเพียง Accelerator เท่านั้น GPU และ CPU ที่เรามีในเครื่องก็ยังสามารถทำงานได้เหมือนเดิม มีก็ดี ไม่มีก็ไม่เป็นไร
หลังจากเมื่อหลายอาทิตย์ก่อน Apple ออก Mac รัว ๆ ตั้งแต่ Mac Mini, iMac และ Macbook Pro ที่ใช้ M4 กันไปแล้ว มีหลายคนถามเราเข้ามาว่า เราควรจะเลือก M4 ตัวไหนดีถึงจะเหมาะกับเรา...
จากตอนก่อน เราเล่าเรื่องการ Host Website จากบ้านของเราอย่างปลอดภัยด้วย Cloudflare Tunnel ไปแล้ว แต่ Product ด้าน Zero-Trust ของนางยังไม่หมด วันนี้เราจะมาเล่าอีกหนึ่งขาที่จะช่วยปกป้อง Infrastructure และ Application ต่าง ๆ ของเราด้วย Cloudflare Access กัน...
ทุกคนเคยได้ยินคำว่า Mainframe Computer กันมั้ย เคยสงสัยกันมั้ยว่า มันต่างจากเครื่องคอมพิวเตอร์ที่เราใช้งานกันทั่ว ๆ ไปอย่างไรละ และ Mainframe ยังจำเป็นอยู่มั้ย มันได้ตายจากโลกนี้ไปหรือยัง วันนี้เรามาหาคำตอบไปด้วยกันเลย...
เคยมั้ยเวลา Deploy โปรแกรมสักตัว เราจะต้องมานั่ง Provision Infrastructure ไหนจะ VM และ Settings อื่น ๆ อีกมากมาย มันจะดีกว่ามั้ยถ้าเรามีเครื่องมือบางอย่างที่จะ Automate งานที่น่าเบื่อเหล่านี้ออกไป และลดความผิดพลาดที่อาจจะเกิดขึ้น วันนี้เราจะพาทุกคนมาทำความรู้จักกับ Infrastructure as Code กัน...