GPU & TPU คืออะไร ควรใช้อะไรในการ Train Model กันแน่?

Atichat Auppakansang
Super AI Engineer
Published in
3 min readJan 29, 2021

ในปัจจุบันปฏิเสธไม่ได้เลยว่าอาชีพด้าน Data Science เป็นที่นิยมขึ้นอย่างมาก ทำให้เกิดเทคโนโลยีที่มาอำนวยความสะดวกทางเพิ่มขึ้นและเข้าถึงได้ง่าย เช่น Kaggle , Google Colab

Google Colab และ Kaggle ตามลำดับ

ทั้งสอง Platform นั้นให้บริการ Cloud สำหรับเขียน Jupyter Notebook แบบฟรี ๆ ซึ่งยังใจดีแถมฟรี Processing unit ทั้งสองแบบให้ได้ใช้กันอีกด้วย

แล้วแต่ละแบบมันแตกต่างกันอย่างไรละ ?

เริ่มด้วยเรามาดูว่ามันย่อมาจากอะไรก่อน
โดย GPU ย่อมาจาก “Graphics Processing Unit”
และ TPU ย่อมาจาก “Tensor Processing Unit”

GPU และ TPU

จะเห็นได้ว่าจากกคำย่อนั้นเรารู้ได้ถึงจุดประสงค์ของแต่ละอย่าง โดย GPU จากพื้นฐานแล้วถูกนำไปใช้ในการประมวลผลทางด้าน Graphic หรือ ทาง 3D Randering แต่ในปัจจุบันนิยมนำมาใช้ในการ Training Model แทน CPU(Central Processing Unit) เพราะ

“การคำนวณทางด้านปัญญาประดิษฐ์มีการคำนวณรูปแบบเดียวกัน แต่มีปริมาณข้อมูลจำนวนมหาศาล เช่น นำตัวเลขพันล้านคู่มาบวกกัน ในกรณีนี้ถ้าคำนวณโดยใช้เพียงแต่ CPU เพียงอย่างเดียวก็จะใช้ระยะในการคำนวณเป็นเวลานาน เนื่องจาก CPU จะนำตัวเลขมาบวกทีละคู่ แต่ถ้าใช้ GPU ก็จะสามารถบวกตัวเลขทีละจำนวนหลายคู่มาก ๆ พร้อม ๆ กันได้ ทำให้การคำนวณรวดเร็วขึ้น ดังนั้น GPU จึงสามารถนำมาใช้เพิ่มความเร็ว ลดระยะเวลาที่ใช้ในการคำนวณได้ และเป็นที่นิยมนำมาใช้แก้ปัญหาหลาย ๆ อย่าง เช่น แก้สมการเชิงอนุพันธ์ย่อยแบบเชิงตัวเลข (สมการความร้อน สมการคลื่น สมการความเค้นความเครียด สมการของไหล ฯลฯ) จำลองการเคลื่อนที่ของประจุพลาสมา ปัญหาระบบพหุวัตถุ (แบบจำลองแกแลกซีชนกัน แบบจำลอง molecular dynamics) ปัญหา agent-based model (แบบจำลองคนเดินถนน การหนีออกจากอาคาร การจราจร ฯลฯ) แปลงฟูเรียร์จากสัญญาณคลื่นเสียงหาความถี่มูลฐาน แปลงฟูเรียร์จากคลื่นวิทยุค้นหาโมเลกุลน้ำ คอนโวลูชันสำหรับ image processing ทางด้าน AI สามารถนำ GPU มาใช้ feedforward ใน neural network ทีละหมื่นตัวพร้อม ๆ กันได้ นำมาใช้เพิ่มความเร็วในการ backpropagation ได้ ทำให้ระยะเวลาในการ train แต่ละครั้งสั้นลง”

จำนวน Core ที่มากกว่าของ GPU ทำให้การคำนวณรูปแบบเดียวกันมีประสิทธิภาพมากกว่า

โดยการพัฒนาอย่างต่อเนื่องทำให้เกิด TPU ขึ้น จากการพัฒนาของ Google เพื่อใข้ร่วมกับ TensorFlow Platform ของทาง Google เอง โดยทาง Google ได้เคลมไว้ว่า TPU นั้นมีประสิทธิภาพมากกว่า GPU และ กินไฟน้อยกว่า โดย TPU นั้นมีขนาดเล็กมาก(เมื่อเทียบกับ GPU) ทั้งนี้ยังสามารถใส่ไปใน Hard Drive Slot ได้อีกด้วย

TPU (Tensor Processing Unit)

ในเมื่อรู้ข้อแตกต่างของ Processing Unit ในแต่ละแบบกันแล้ว เรามาเริ่มดูกันว่า เราควรใช้ Processing Unit แต่ละอย่างในการ Train Model ประเภทไหนกันบ้าง

ผมได้ไปเจอ Paper ดี ๆ มา จากของทาง Harvard ที่ทำ Systematic benchmark เปรียบเทียบประสิทธิภาพของ CPU vs GPU vs TPU สำหรับงาน DeepLearning (DL) ซึ่งได้มีผู้ใจดีได้แชร์ความรู้ลงใน Facebook ต้องขอขอบคุณมา ณ ที่นี้ด้วยครับ

เอาละมาเริ่มกันเลยดีกว่า ✨

ผมต้องกล่าวไว้ก่อนว่า ไม่มีสิ่งใดจะใช้ได้กับทุกสถานการณ์ ซึ่งเราต้องเลือกใช้ให้เหมาะกับงาน จึงจะได้ประสิทธิภาพสูงสุดนั่นเอง

โดย Hardware ในการทดสอบครั้งนี้ คือ

  • Google’s Cloud TPU v2 (64 GB, 2400 GB/s memory bandwidth, peak of 180 TFLOPS) และ v3 (peak of 420 TFLOPS)
  • NVIDIA’s V100 GPU (16 GB, 900 GB/s memory bandwidth, peak of 125 TFLOPS)
  • Intel Skylake CPU (120 GB, peak of 2 TFLOPS)

ในปัจจุบัน Benchmark suite นั้นมีการทดสอบจาก DNN models ดัง ๆ แค่ไม่กี่ตัว เช่น ResNet-50 โดยการทำแบบนี้อาจทำให้ผลเกิดความเข้าใจผิด สรุปได้ไม่ดีเท่าที่ควร รวมไปถึงในอนาคต Model พวกนี้เกิดความล้าสมัย ซึ่งอาจทำให้ผล Benchmark ที่ทำมาทั้งหมดเปล่าประโยชน์

ทาง Harvard จึงแก้ปัญหานี้โดยการใช้ ParaDnn หรือ parameterized benchmark suite (for DL) ตัวใหม่ที่สร้างมาเพื่อเสริม (complement) บรรดา benchmark suites มีความสมบูรณ์มากขึ้น

“โดย ParaDnn มีความสามารถในการสร้าง parameterized multi-layer models นับพัน ที่ภายในประกอบด้วยทั้ง FC (fully connected), CNN (Convolutional Neural Network) และ/หรือ RNN (Recurrent Neural Network) ได้ ทำให้ได้ผลลัพธ์ที่ระบุในเปเปอร์ว่า >> the goal of providing large “end-to-end” models covering current and “future” applications, and parameterizing the models to explore a much larger design space of DNN model attributes.”

มาดูสรุป Result จาก Paper กัน ✨

  1. การ train DNN แบบ Fully-Connected (FC)
  • ถ้า batch ขนาดใหญ่ ควรใช้ TPU ดีสุด รองมาคือ GPU และ CPU โหล่สุด
  • ถ้าโมเดลขนาดใหญ่ ควรใช้ GPU ดีที่สุด
  • ถ้าโมเดลใหญ่และ batch ก็ใหญ่ GPU จะดีกว่า CPU เพราะ GPU มีความสามารถ parallelize ที่ดีกว่า

แต่ถ้าโมเดลขนาดใหญ่มาก ๆ กลับเป็น CPU ที่ชนะ GPU (และ GPU ก็ชนะ TPU อีกที) เพราะ CPU มีจำนวน memory per core มากที่สุด ส่วน GPU และ TPU ที่มี memory น้อยกว่า เจอโมเดลใหญ่มากๆๆเข้าก็จบด้วยการ out-of-memory ไป

สรุป สำหรับ FC model ตัว GPU ชนะ

2. สำหรับการ train DNN แบบ CNN

TPU ดีกว่า GPU และดีที่สุดสำหรับ train CNN ยิ่งถ้าเป็น CNN ตัวใหญ่ๆ ยิ่งเห็นชัดว่า TPU ถูก highly optimized มาเพื่องาน spatial reuse characteristics of CNN นี้โดยเฉพาะ

สรุป สำหรับ CNN model ตัว TPU ชนะ

3. train DNN แบบ RNN

ในแง่ความเร็ว TPU ดีกว่า GPU เยอะ แต่ก็มีพบว่า ในขณะที่ TPU ถนัดทำ dense computation แบบ MatMul มันกลับไม่ค่อยถนัดทำ non-MatMul เท่าไหร่ (GPU จะเก่งตรงนี้มากกว่า) ดังนั้นในอนาคตถ้าสามารถ optimize การทำ non-MatMul บน TPU ได้อีก TPU ก็จะยิ่งทิ้งห่าง GPU มากขึ้น

สรุป สำหรับ RNN model ตัว TPU ชนะ

โดยผมหวังว่าผู้อ่านจะได้รับความรู้ในการแยกความแตกต่างของ Processing Unit และ สามารถเลือกใช้ในการ Training Model ได้อย่างเหมาะสม สำหรับใน Part ต่อไปจะมีการ Test Run บน Jupyter Notebook ให้เห็นข้อแตกต่างของแต่ละแบบ ขอขอบคุณสำหรับการติดตาม ขอบคุณครับ

Reference

https://www.geekboots.com/story/cpu-vs-gpu-vs-tpu

https://en.wikipedia.org/wiki/Tensor_Processing_Unit

https://sites.google.com/a/bankhokschool.ac.th/itmoder61mods2559/gpu-khux-xari-tha-hnathi-xari-prayochn-khxng-gpu-mi-xari-bang?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F&showPrintDialog=1

https://www.facebook.com/BusinessAnalyticsNIDA/posts/2114326325535133/

--

--