ย้อนกลับไปที่ "ข่าวสำหรับผู้พัฒนา"

Summer of open source: building more efficient AI with PyTorch

หมายเหตุ: เราขอขอบคุณเป็นพิเศษสำหรับคุณ Less Wright ซึ่งเป็นวิศวกรพาร์ทเนอร์ในฝ่าย AI ของ Meta ที่ช่วยตรวจสอบและให้ข้อมูลเชิงลึกเพิ่มเติมในโพสต์นี้

โพสต์เกี่ยวกับการสร้างปัญญาประดิษฐ์ (AI) ให้มีประสิทธิภาพนี้เป็นโพสต์ที่ 2 ในซีรีส์ "ฤดูร้อนแห่งการเรียนรู้โอเพนซอร์ส" ซีรีส์นี้มีจุดประสงค์เพื่อให้แหล่งข้อมูลจำนวนหนึ่งที่เป็นประโยชน์และให้เนื้อหาการเรียนรู้ในด้านต่างๆ ที่โปรเจ็กต์แบบโอเพนซอร์สจะเป็นประโยชน์แก่ Meta และแพลตฟอร์มอื่นๆ โปรดเรียนรู้ไปพร้อมกับเรา โดยเราจะพาไปดูด้านอื่นๆ ที่โอเพนซอร์สของ Meta จะช่วยพัฒนาอุตสาหกรรมโดยการมอบเครื่องมืออันทันสมัยและปรับขนาดได้

PyTorch: จากเทคโนโลยีพื้นฐานสู่รากฐานสำคัญ

นับตั้งแต่เปิดตัวเป็นครั้งแรกเมื่อปี 2016 ชุมชนการเรียนรู้เชิงลึกก็ได้นำ PyTorch มาใช้งานกันอย่างกว้างขวาง ส่วนรากฐานด้านการวิจัยของ PyTorch ก็ขยายตัวอย่างต่อเนื่องในปัจจุบันเพื่อการใช้งานในกรณีการใช้งานจริง ในช่วงเวลาเช่นนี้ที่แมชชีนเลิร์นนิ่ง (ML) และปัญญาประดิษฐ์ (AI) เป็นที่สนใจของผู้คน ซึ่งมีแนวทางและกรณีการใช้งานใหม่ๆ สำหรับโมเดล AI เพิ่มขึ้นอย่างต่อเนื่อง PyTorch ก็ได้ก้าวหน้าขึ้นไปอีกขั้น โดยเปลี่ยนมาเป็น PyTorch Foundation ซึ่งดำเนินงานแบบอิสระและเพิ่งเกิดขึ้นภายใต้ Linux Foundation มูลนิธินี้ประกอบขึ้นจากคณะกรรมการกำกับดูแลจากหลากหลายองค์กร ซึ่งรวมถึงตัวแทนจาก AMD, Amazon Web Services, Google Cloud, Microsoft Azure และ Nvidia โดยเราตั้งใจที่จะขยายคณะกรรมการนี้เมื่อเวลาผ่านไป ภารกิจหนึ่งของเราคือการส่งเสริมให้นำเครื่องมือ AI มาใช้ผ่านโปรเจ็กต์ที่ไม่ยึดอยู่กับผู้ให้บริการรายใดรายหนึ่ง และช่วยให้ทุกคนสามารถเข้าถึงเครื่องมือ ไลบรารี และองค์ประกอบอื่นๆ ของโอเพนซอร์สได้ การเปลี่ยนมาเป็นมูลนิธิยังช่วยให้ PyTorch และชุมชนโอเพนซอร์สสามารถย่นระยะเวลาในการสร้างต้นแบบไปจนถึงการใช้งานจริงของ AI และ ML ให้เร็วขึ้นด้วย

ยกระดับกระบวนการ AI ด้วยโอเพนซอร์สของ Meta

PyTorch คือตัวอย่างหนึ่งที่แสดงให้เห็นถึงประสิทธิภาพของโอเพนซอร์สได้เป็นอย่างดี PyTorch เป็นหนึ่งในเฟรมเวิร์กการเรียนรู้เชิงลึกผ่านโอเพนซอร์สที่มีมาตั้งแต่ช่วงแรกๆ และช่วยให้ผู้คนจากวงการต่างๆ สามารถทดลองใช้การเรียนรู้เชิงลึกและนำการทำงานต่างๆ มาปรับใช้ในหลากหลายด้าน PyTorch รองรับทุกอย่างตั้งแต่การทดลองในแอพพลิเคชั่นการค้นหาไปจนถึงการพัฒนารถยนต์ไร้คนขับ ตลอดจนเรดาร์หยั่งลึก โดยการใช้งานเหล่านี้เป็นเพียงบางส่วนที่เกิดขึ้นล่าสุด เมื่อไลบรารีอเนกประสงค์ของเครื่องมือ AI มาผสานรวมกับชุมชนโอเพนซอร์ส จึงช่วยให้สามารถปรับปรุงและนำเทคโนโลยีไปใช้ในวงกว้างสำหรับการใช้งานต่างๆ มากมายได้อย่างรวดเร็ว

เนื่องจาก AI มีการใช้งานอย่างกว้างขวางยิ่งขึ้น โมเดล AI ต่างๆ จึงมีแนวโน้มจะเพิ่มขนาดขึ้นเพื่อรับมือกับปัญหาที่ซับซ้อนกว่าเดิม ซึ่งหมายความว่าจำเป็นต้องใช้ทรัพยากรต่างๆ เพิ่มขึ้นอย่างมากในการฝึกโมเดลเหล่านี้เช่นกัน แต่โชคดีที่หลายๆ คนในชุมชนผู้พัฒนาได้ตระหนักแล้วว่าโมเดลต่างๆ จำเป็นต้องใช้ทรัพยากรให้น้อยลง ไม่ว่าจะเป็นจุดยืนในเชิงปฏิบัติหรือจุดยืนด้านสิ่งแวดล้อม ทั้งนี้ โพสต์นี้จะมาเจาะลึกถึงเหตุผลที่ควอนไทเซชั่น (Quantization) และการบีบอัดโมเดลประเภทอื่นๆ อาจเป็นปัจจัยส่งเสริมให้เกิด AI ที่มีประสิทธิภาพได้

การกำหนดเกณฑ์พื้นฐานในการใช้ PyTorch

เนื้อหาส่วนใหญ่ของโพสต์นี้จะเป็นการเจาะลึกฟีเจอร์ขั้นกลางและขั้นสูงบางส่วนของ PyTorch หากคุณเป็นมือใหม่ที่ต้องการจะเริ่มต้นใช้งานหรือเป็นผู้เชี่ยวชาญที่กำลังใช้ไลบรารีแบบอื่นอยู่ การเริ่มต้นจากเรื่องพื้นฐานจะเป็นวิธีที่ง่ายที่สุด โปรดดูคู่มือการใช้ PyTorch สำหรับมือใหม่ ซึ่งจะมีคำแนะนำเบื้องต้นเกี่ยวกับเวิร์กโฟลว์ของ ML ทั้งหมดโดยใช้ชุดข้อมูล Fashion MNIST รวมอยู่ด้วย

ต่อไปนี้เป็นแหล่งข้อมูลอื่นๆ บางส่วนที่คุณสามารถเข้ามาดูได้หากเพิ่งเริ่มใช้ PyTorch

  • เรื่องราวของชุมชน PyTorch: เรียนรู้วิธีที่ PyTorch สร้างประโยชน์ต่ออุตสาหกรรมต่างๆ เช่น เกษตรกรรม, การศึกษา, การเดินทาง และอื่นๆ
  • ซีรีส์สำหรับผู้เริ่มต้นใช้ PyTorch: สำรวจเพลย์ลิสต์วิดีโอเกี่ยวกับเทคนิคพื้นฐานต่างๆ ซึ่งรวมถึงการเริ่มต้นใช้งานเทนเซอร์ (Tensor), การสร้างโมเดล, การฝึก และการตีความใน PyTorch

ควอนไทเซชั่น (Quantization): การนำเทคนิคที่ผ่านการทดสอบตามเวลามาใช้กับ AI

การพัฒนา AI ให้มีประสิทธิภาพยิ่งขึ้นทำได้หลายวิธี การร่วมกันออกแบบฮาร์ดแวร์และซอฟต์แวร์เพื่อยกระดับ AI อาจเป็นวิธีที่มีประสิทธิภาพสูง แต่การพัฒนาโซลูชั่นฮาร์ดแวร์-ซอฟต์แวร์แบบเฉพาะตัวขึ้นมาจะใช้เวลาและทรัพยากรเป็นอย่างมาก การสร้างสถาปัตยกรรมที่รวดเร็วขึ้นและมีขนาดเล็กลงเป็นอีกวิธีหนึ่งในการเพิ่มประสิทธิภาพ แต่ในปัจจุบันนี้ สถาปัตยกรรมเหล่านี้จำนวนมากกลับมีความแม่นยำน้อยลงเมื่อเทียบกับโมเดลที่มีขนาดใหญ่กว่า วิธีที่ง่ายกว่านั้นคือการหาวิธีลดทรัพยากรที่จำเป็นต้องใช้ในการฝึกและให้บริการโมเดลที่มีอยู่ โดยวิธีหนึ่งในการทำเช่นนี้ใน PyTorch ก็คือการบีบอัดโมเดลโดยใช้ควอนไทเซชั่น (Quantization)

ควอนไทเซชั่น (Quantization) เป็นเทคนิคทางคณิตศาสตร์ที่ใช้เพื่อสร้างไฟล์เพลงดิจิทัลแบบ Lossy และแปลงสัญญาณอนาล็อกเป็นสัญญาณดิจิทัล โดยควอนไทเซชั่น (Quantization) จะช่วยให้แพลตฟอร์มฮาร์ดแวร์ต่างๆ มีประสิทธิภาพเพิ่มขึ้นอย่างมากด้วยการคำนวณทางคณิตศาสตร์ที่มีความแม่นยำน้อยลง (Reduced Precision) แล้วเหตุใดจึงควรใช้ควอนไทเซชั่น (Quantization) เพื่อทำให้ AI มีประสิทธิภาพยิ่งขึ้น ผลลัพธ์ได้แสดงให้เห็นว่า ในบางกรณี การใช้เทคนิคที่ค่อนข้างเรียบง่ายเช่นนี้อาจส่งผลให้การตีความโมเดล (Model Inference) เร็วขึ้นอย่างเห็นได้ชัด (2-4 เท่า)

พารามิเตอร์ต่างๆ ที่ประกอบขึ้นเป็นโมเดลการเรียนรู้เชิงลึกมักเป็นเลขฐานสิบที่มีความแม่นยำระดับทศนิยม (Floating Point หรือ FP) โดยพารามิเตอร์แต่ละรายการจำเป็นต้องมีหน่วยความจำแบบ 16 บิตหรือ 32 บิต เมื่อใช้ควอนไทเซชั่น (Quantization) ระบบมักแปลงตัวเลขต่างๆ เป็น INT4 หรือ INT8 ที่ครอบคลุมเฉพาะ 4 บิตหรือ 8 บิต ซึ่งเป็นการลดจำนวนหน่วยความจำที่โมเดลจำเป็นต้องใช้ นอกจากนี้ ผู้ผลิตชิปยังรวมการคำนวณแบบพิเศษเอาไว้ด้วย ซึ่งช่วยให้การดำเนินการที่ใช้จำนวนเต็มรวดเร็วกว่าการดำเนินการที่ใช้ทศนิยม

ควอนไทเซชั่น (Quantization) ที่คุณสามารถนำมาใช้พัฒนาโมเดลนั้นมีอยู่ 3 วิธี ได้แก่ ไดนามิก, สแตติก และการฝึกแบบ Quantize-aware (QAT) ภาพรวมโดยคร่าวของประโยชน์และจุดอ่อนต่างๆ จะอธิบายอยู่ในตารางด้านล่าง โปรดอ่านบล็อกโพสต์เรื่อง "ควอนไทเซชั่น (Quantization) เชิงปฏิบัติใน PyTorch" เพื่อเรียนรู้วิธีนำวิธีต่างๆ เหล่านี้มาใช้ในเวิร์กโฟลว์ AI ของคุณ

วิธีการควอนไทเซชั่น (Quantization)

ประโยชน์

จุดอ่อน

ไดนามิก

  • ใช้งานร่วมกับการเรียกใช้ API เพียงรายการเดียวได้ง่ายดาย
  • รองรับการเปลี่ยนแปลงการกระจายข้อมูลได้มากขึ้น ซึ่งส่งผลให้มีความแม่นยำเพิ่มขึ้นเล็กน้อย
  • ทำงานได้เป็นอย่างดีสำหรับโมเดลหน่วยความจำระยะสั้นแบบยาว (LSTM) และโมเดล Transformer

ใช้เวลาประมวลผลเพิ่มเติมทุกครั้งที่มีการส่งต่อไปข้างหน้า (Forward Pass)

สแตติก (หรือที่รู้จักกันในชื่อ PTQ)

  • มีการตีความรวดเร็วกว่าควอนไทเซชั่น (Quantization) แบบไดนามิกโดยขจัดเวลาที่ต้องใช้ในการประมวลผลไป

อาจจำเป็นต้องมีการสอบเทียบเป็นประจำสำหรับการเปลี่ยนแปลงการกระจายข้อมูล

การฝึกแบบ Quantize-aware (QAT)

  • มีความแม่นยำสูงกว่าควอนไทเซชั่น (Quantization) แบบสแตติก
  • มีการตีความรวดเร็วกว่าแบบไดนามิก

มีค่าใช้จ่ายในการคำนวณสูง

ฟีเจอร์เพิ่มเติมเพื่อเร่งเวิร์กโฟลว์ AI ของคุณให้รวดเร็วยิ่งขึ้น

ควอนไทเซชั่น (Quantization) ไม่ใช่วิธีเดียวในการยกระดับ AI ที่พัฒนาขึ้นด้วย PyTorch ให้มีประสิทธิภาพมากขึ้น ทั้งนี้ เราจะอัพเดตฟีเจอร์ต่างๆ เป็นประจำ และวิธีอื่นๆ บางส่วนที่ PyTorch สามารถช่วยปรับปรุงเวิร์กโฟลว์ AI ได้มีดังต่อไปนี้

  • โหมดการตีความ: คุณสามารถใช้โหมดนี้สำหรับเขียนโค้ด PyTorch ได้หากคุณใช้โค้ดเพื่อเรียกใช้การตีความเท่านั้น ทั้งนี้ โหมดการตีความจะเปลี่ยนสมมติฐานบางอย่างไปเมื่อทำงานร่วมกับเทนเซอร์เพื่อทำให้การตีความรวดเร็วขึ้น เมื่อบอก PyTorch ว่าคุณจะไม่ใช้เทนเซอร์สำหรับการใช้งานบางอย่างในภายหลัง (ในกรณีนี้คือ autograd) PyTorch ก็จะปรับเพื่อให้โค้ดรันได้เร็วขึ้นในบางกรณีเหล่านี้

  • ความแม่นยำต่ำ: ควอนไทเซชั่น (Quantization) จะทำงานในเวลาที่มีการตีความเท่านั้น กล่าวคือ เวลาหลังจากที่คุณได้ฝึกโมเดลไปแล้ว ในส่วนของกระบวนการฝึกนั้น PyTorch จะใช้การฝึกแบบ AMP ซึ่งย่อมาจาก Automatic Mixed Precision เพื่อค้นหารูปแบบที่เหมาะสมที่สุดตามเทนเซอร์ที่ใช้ (FP16, FP32 หรือ BF16) การเรียนรู้เชิงลึกแบบความแม่นยำต่ำใน PyTorch นั้นมีข้อดีหลายประการ โดยช่วยลดขนาดของโมเดล ลดหน่วยความจำที่ต้องใช้ในการฝึกโมเดล และลดกำลังไฟฟ้าที่จำเป็นในการรันโมเดลได้ โปรดเรียนรู้เพิ่มเติมที่บทแนะนำการใช้งานสำหรับการใช้ AMP ร่วมกับ GPU ที่ใช้งาน CUDA ได้

  • Channels last: เมื่อกล่าวถึงโมเดล Vision แล้ว NHWC หรือที่รู้จักกันในอีกชื่อหนึ่งว่า Channels-last คือหน่วยความจำเทนเซอร์รูปแบบหนึ่งที่รวดเร็วขึ้นใน PyTorch การจัดเก็บข้อมูลไว้ในรูปแบบ Channels-last จะช่วยให้การดำเนินการต่างๆ ใน PyTorch รวดเร็วขึ้น การจัดรูปแบบเทนเซอร์อินพุตเป็นแบบ Channels-Last จะช่วยลดเวลาประมวลผลที่จำเป็นสำหรับการแปลงไปมาระหว่างรูปแบบประเภทต่างๆ จึงช่วยให้ตีความได้เร็วขึ้น

  • เพิ่มประสิทธิภาพสำหรับการตีความ: ต้นแบบ TorchScript นี้จะใช้การเพิ่มประสิทธิภาพทั่วไปบางรูปแบบที่ควรทำให้โมเดลรวดเร็วขึ้นในทุกๆ สภาพแวดล้อม นอกจากนี้ยังสามารถช่วยเตรียมโมเดลให้พร้อมสำหรับการตีความด้วยการตั้งค่าแบบเฉพาะบิลด์อีกด้วย กรณีการใช้งานหลักจะรวมถึงโมเดล Vision บน CPU (และ GPU) ด้วยในจุดนี้ และเนื่องจากนี่เป็นเพียงต้นแบบ จึงมีความเป็นไปได้ที่คุณจะพบปัญหาต่างๆ โปรดแจ้งปัญหาที่เกิดขึ้นในที่เก็บ GitHub ของ PyTorch

การปลดล็อกศักยภาพใหม่ใน PyTorch

บล็อก PyTorch มีการสำรวจหาวิธีใหม่ๆ ในการเร่งเวิร์กโฟลว์ AI ให้เร็วยิ่งขึ้นอยู่เป็นประจำ บล็อกนี้จึงเป็นแหล่งข้อมูลที่ดีเยี่ยมในการติดตามเทคนิคต่างๆ อย่าง BetterTransformer ที่เกิดขึ้นไม่นานมานี้ ซึ่งเพิ่มการเร่งความเร็วและปริมาณงานในโมเดล Transformer ขึ้นถึง 2 เท่าสำหรับกรณีการดำเนินงานทั่วไป หากคุณสนใจที่จะเรียนรู้วิธีใช้ฟีเจอร์บางอย่างใน PyTorch หน้าสูตรจะช่วยให้คุณสามารถค้นหาตามหมวดหมู่ได้ เช่น การเพิ่มประสิทธิภาพโมเดล, การฝึกแบบกระจาย และความสามารถในการตีความ โพสต์นี้เป็นเพียงการแสดงตัวอย่างให้เห็นว่าเครื่องมือต่างๆ เช่น PyTorch จะช่วยพัฒนาโอเพนซอร์สและ AI ให้ก้าวหน้าขึ้นได้อย่างไร

โปรดติดตามข่าวสารล่าสุดเกี่ยวกับโอเพนซอร์สของ Meta สำหรับปัญญาประดิษฐ์และแมชชีนเลิร์นนิ่งที่เว็บไซต์โอเพนซอร์สของเรา, ติดตามช่อง YouTube ของเรา หรือติดตามเราที่ Facebook, Twitter และ LinkedIn