Apache MXNet - บทนำ

บทนี้จะเน้นคุณสมบัติของ Apache MXNet และพูดถึงเวอร์ชันล่าสุดของเฟรมเวิร์กซอฟต์แวร์การเรียนรู้เชิงลึกนี้

MXNet คืออะไร?

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

นั่นคือเหตุผลที่ Apache MXNet รองรับโดย:

  • บริษัท ใหญ่ ๆ บางแห่งเช่น Intel, Baidu, Microsoft, Wolfram Research เป็นต้น

  • ผู้ให้บริการระบบคลาวด์สาธารณะรวมถึง Amazon Web Services (AWS) และ Microsoft Azure

  • สถาบันวิจัยขนาดใหญ่บางแห่งเช่น Carnegie Mellon, MIT, University of Washington และ HongKong University of Science & Technology

ทำไมต้อง Apache MXNet

มีแพลตฟอร์มการเรียนรู้เชิงลึกมากมายเช่น Torch7, Caffe, Theano, TensorFlow, Keras, Microsoft Cognitive Toolkit เป็นต้นแล้วคุณอาจสงสัยว่าทำไม Apache MXNet? ลองดูสาเหตุบางประการที่อยู่เบื้องหลัง:

  • Apache MXNet แก้ปัญหาที่ใหญ่ที่สุดอย่างหนึ่งของแพลตฟอร์มการเรียนรู้เชิงลึกที่มีอยู่ ปัญหาคือในการใช้แพลตฟอร์มการเรียนรู้เชิงลึกเราต้องเรียนรู้ระบบอื่นสำหรับรสชาติการเขียนโปรแกรมที่แตกต่างกัน

  • ด้วยความช่วยเหลือของนักพัฒนา Apache MXNet สามารถใช้ประโยชน์จากความสามารถทั้งหมดของ GPU รวมทั้งการประมวลผลแบบคลาวด์

  • Apache MXNet สามารถเร่งการคำนวณตัวเลขและให้ความสำคัญเป็นพิเศษในการเร่งการพัฒนาและการปรับใช้ DNN ขนาดใหญ่ (deep neural networks)

  • ช่วยให้ผู้ใช้มีความสามารถในการเขียนโปรแกรมทั้งแบบจำเป็นและเชิงสัญลักษณ์

คุณสมบัติต่างๆ

หากคุณกำลังมองหาไลบรารีการเรียนรู้เชิงลึกที่ยืดหยุ่นได้อย่างรวดเร็วเพื่อพัฒนางานวิจัยเชิงลึกที่ล้ำสมัยอย่างรวดเร็วหรือแพลตฟอร์มที่มีประสิทธิภาพเพื่อผลักภาระงานการผลิตการค้นหาของคุณจะสิ้นสุดที่ Apache MXNet เป็นเพราะคุณสมบัติดังต่อไปนี้:

การฝึกอบรมแบบกระจาย

ไม่ว่าจะเป็นการฝึกอบรมแบบ multi-gpu หรือ multi-host ที่มีประสิทธิภาพในการปรับขนาดใกล้เชิงเส้น Apache MXNet ช่วยให้นักพัฒนาใช้ประโยชน์สูงสุดจากฮาร์ดแวร์ของตน MXNet ยังรองรับการทำงานร่วมกับ Horovod ซึ่งเป็นโอเพ่นซอร์สที่เผยแพร่กรอบการเรียนรู้เชิงลึกที่สร้างขึ้นที่ Uber

สำหรับการผสานรวมนี้ต่อไปนี้เป็น API แบบกระจายทั่วไปที่กำหนดไว้ใน Horovod:

  • horovod.broadcast()

  • horovod.allgather()

  • horovod.allgather()

ในเรื่องนี้ MXNet มีความสามารถดังต่อไปนี้:

  • Device Placement - ด้วยความช่วยเหลือของ MXNet เราสามารถระบุโครงสร้างข้อมูล (DS) แต่ละรายการได้อย่างง่ายดาย

  • Automatic Differentiation - Apache MXNet ทำการคำนวณความแตกต่างโดยอัตโนมัติเช่นการคำนวณอนุพันธ์

  • Multi-GPU training - MXNet ช่วยให้เราบรรลุประสิทธิภาพในการปรับขนาดด้วย GPU ที่มีอยู่จำนวนมาก

  • Optimized Predefined Layers - เราสามารถโค้ดเลเยอร์ของเราเองใน MXNet รวมทั้งปรับแต่งเลเยอร์ที่กำหนดไว้ล่วงหน้าเพื่อความเร็ว

การผสมพันธ์

Apache MXNet มอบ front-end แบบไฮบริดให้กับผู้ใช้ ด้วยความช่วยเหลือของ Gluon Python API มันสามารถเชื่อมช่องว่างระหว่างความสามารถที่จำเป็นและเชิงสัญลักษณ์ สามารถทำได้โดยเรียกว่าฟังก์ชันไฮบริดไลซ์

การคำนวณที่เร็วขึ้น

การดำเนินการเชิงเส้นเช่นการคูณเมทริกซ์หลายสิบหรือหลายร้อยเป็นคอขวดของการคำนวณสำหรับอวนประสาทแบบลึก เพื่อแก้ปัญหาคอขวด MXNet นี้ให้ -

  • เพิ่มประสิทธิภาพการคำนวณเชิงตัวเลขสำหรับ GPU

  • การคำนวณเชิงตัวเลขที่ปรับให้เหมาะสมสำหรับระบบนิเวศแบบกระจาย

  • การทำงานอัตโนมัติของเวิร์กโฟลว์ทั่วไปด้วยความช่วยเหลือซึ่ง NN มาตรฐานสามารถแสดงได้สั้น ๆ

การผูกภาษา

MXNet มีการรวมเข้ากับภาษาระดับสูงเช่น Python และ R อย่างลึกซึ้งนอกจากนี้ยังให้การสนับสนุนสำหรับภาษาโปรแกรมอื่น ๆ เช่น -

  • Scala

  • Julia

  • Clojure

  • Java

  • C/C++

  • Perl

เราไม่จำเป็นต้องเรียนรู้ภาษาการเขียนโปรแกรมใหม่ใด ๆ แทน MXNet เมื่อรวมกับคุณสมบัติไฮบริดไลเซชันช่วยให้สามารถเปลี่ยนจาก Python ไปสู่การปรับใช้ในภาษาโปรแกรมที่เราเลือกได้อย่างราบรื่น

เวอร์ชั่นล่าสุด MXNet 1.6.0

Apache Software Foundation (ASF) ได้เปิดตัว Apache MXNet เวอร์ชันเสถียร 1.6.0 ในวันที่ 21 กุมภาพันธ์ 2020 ภายใต้ Apache License 2.0 นี่เป็น MXNet รุ่นสุดท้ายที่รองรับ Python 2 เนื่องจากชุมชน MXNet โหวตให้ไม่สนับสนุน Python 2 อีกต่อไปในรุ่นต่อไป ให้เราตรวจสอบคุณสมบัติใหม่บางอย่างที่รุ่นนี้นำเสนอสำหรับผู้ใช้

อินเตอร์เฟซที่เข้ากันได้กับ NumPy

เนื่องจากความยืดหยุ่นและลักษณะทั่วไป NumPy จึงถูกใช้อย่างกว้างขวางโดยผู้ปฏิบัติงาน Machine Learning นักวิทยาศาสตร์และนักเรียน แต่อย่างที่เราทราบกันดีว่าตัวเร่งฮาร์ดแวร์ในปัจจุบันเช่นหน่วยประมวลผลกราฟิก (GPU) ได้ถูกหลอมรวมเข้ากับชุดเครื่องมือ Machine Learning (ML) มากขึ้นผู้ใช้ NumPy เพื่อใช้ประโยชน์จากความเร็วของ GPU จำเป็นต้องเปลี่ยนไปใช้เฟรมเวิร์กใหม่ ด้วยไวยากรณ์ที่แตกต่างกัน

ด้วย MXNet 1.6.0 Apache MXNet กำลังก้าวไปสู่ประสบการณ์การเขียนโปรแกรมที่เข้ากันได้กับ NumPy อินเทอร์เฟซใหม่ให้การใช้งานที่เทียบเท่าและการแสดงออกสำหรับผู้ปฏิบัติงานที่คุ้นเคยกับไวยากรณ์ NumPy นอกจากนี้ MXNet 1.6.0 ยังช่วยให้ระบบ Numpy ที่มีอยู่สามารถใช้ตัวเร่งฮาร์ดแวร์เช่น GPU เพื่อเร่งความเร็วในการคำนวณขนาดใหญ่

การผสานรวมกับ Apache TVM

Apache TVM ซึ่งเป็นสแต็กคอมไพเลอร์การเรียนรู้เชิงลึกแบบ end-to-end แบบโอเพนซอร์สสำหรับฮาร์ดแวร์แบ็กเอนด์เช่นซีพียู GPU และตัวเร่งความเร็วพิเศษมีจุดมุ่งหมายเพื่อเติมเต็มช่องว่างระหว่างเฟรมเวิร์กการเรียนรู้เชิงลึกที่เน้นการผลิตและแบ็กเอนด์ฮาร์ดแวร์ที่เน้นประสิทธิภาพ . ด้วย MXNet 1.6.0 รุ่นล่าสุดผู้ใช้สามารถใช้ประโยชน์จาก Apache (การบ่มเพาะ) TVM เพื่อใช้เคอร์เนลตัวดำเนินการประสิทธิภาพสูงในภาษาโปรแกรม Python ข้อดีหลักสองประการของคุณลักษณะใหม่นี้มีดังต่อไปนี้ -

  • ลดความซับซ้อนของกระบวนการพัฒนาที่ใช้ C ++ ในอดีต

  • เปิดใช้งานการแชร์การใช้งานเดียวกันในแบ็กเอนด์ฮาร์ดแวร์หลายตัวเช่นซีพียู GPU เป็นต้น

การปรับปรุงคุณสมบัติที่มีอยู่

นอกเหนือจากคุณสมบัติที่ระบุไว้ข้างต้นของ MXNet 1.6.0 แล้วยังมีการปรับปรุงบางอย่างเหนือคุณสมบัติที่มีอยู่ การปรับปรุงมีดังนี้ -

การจัดกลุ่มการทำงานที่ชาญฉลาดขององค์ประกอบสำหรับ GPU

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

การลดความซับซ้อนของนิพจน์ทั่วไป

MXNet 1.6.0 กำจัดนิพจน์ซ้ำซ้อนและลดความซับซ้อนของนิพจน์ทั่วไป การปรับปรุงดังกล่าวยังช่วยปรับปรุงการใช้หน่วยความจำและเวลาดำเนินการทั้งหมด

การเพิ่มประสิทธิภาพ

MXNet 1.6.0 ยังมีการเพิ่มประสิทธิภาพต่างๆให้กับคุณสมบัติและตัวดำเนินการที่มีอยู่ซึ่งมีดังต่อไปนี้:

  • ความแม่นยำผสมอัตโนมัติ

  • Gluon Fit API

  • MKL-DNN

  • รองรับเทนเซอร์ขนาดใหญ่

  • TensorRT บูรณาการ

  • รองรับการไล่ระดับสีลำดับที่สูงขึ้น

  • Operators

  • โปรไฟล์ประสิทธิภาพของผู้ปฏิบัติงาน

  • นำเข้า / ส่งออก ONNX

  • การปรับปรุง Gluon API

  • การปรับปรุง Symbol API

  • แก้ไขข้อบกพร่องมากกว่า 100 รายการ