รีวิว: MXNet deep learning ส่องประกายด้วย Gluon

เมื่อฉันตรวจสอบ MXNet v0.7 ในปี 2559 ฉันรู้สึกว่ามันเป็นเฟรมเวิร์กการเรียนรู้เชิงลึกที่มีแนวโน้มดีพร้อมความสามารถในการปรับขนาดที่ยอดเยี่ยม (เกือบจะเป็นเชิงเส้นบนคลัสเตอร์ GPU) การสร้างความแตกต่างอัตโนมัติที่ดีและการรองรับ CUDA GPU ที่ทันสมัย ฉันยังรู้สึกว่ามันต้องทำงานเกี่ยวกับเอกสารและแบบฝึกหัดของมันและต้องการตัวอย่างอีกมากมายในสวนสัตว์จำลองของมัน นอกจากนี้ฉันอยากเห็นอินเทอร์เฟซระดับสูงสำหรับ MXNet ซึ่งฉันคิดว่าน่าจะเป็น Keras

ตั้งแต่นั้นมาก็มีความคืบหน้าไม่น้อย MXNet ย้ายมาอยู่ภายใต้ร่ม Apache Software Foundation ในช่วงต้นปี 2017 และแม้ว่ามันจะยัง "ฟักตัว" ในเวอร์ชัน 1.3 แต่ก็ให้ความรู้สึกที่ดีพอสมควร

แม้ว่าจะมีการใช้งาน Keras กับส่วนหลัง MXNet แต่อินเทอร์เฟซระดับสูงที่แตกต่างกันก็มีความสำคัญมากขึ้น: Gluon ก่อนการรวมตัวของ Gluon คุณสามารถเขียนโค้ดที่จำเป็นง่าย ๆ หรือรหัสสัญลักษณ์อย่างรวดเร็วใน MXNet แต่ไม่ใช่ทั้งสองอย่างพร้อมกัน ด้วย Gluon คุณสามารถรวมสิ่งที่ดีที่สุดของทั้งสองโลกเข้าด้วยกันในแบบที่แข่งขันกับทั้ง Keras และ PyTorch

Gluon สำหรับ MXNet คืออะไร?

ข้อดีที่อ้างว่าสำหรับ Gluon ได้แก่ โค้ดแบบง่ายการสร้างแบบจำลองที่ยืดหยุ่นกราฟไดนามิกและประสิทธิภาพสูง:

  1. โค้ดที่เรียบง่ายและเข้าใจง่าย : Gluon นำเสนอบล็อกการสร้างเครือข่ายประสาทเทียมแบบพลักแอนด์เพลย์ครบชุดรวมถึงเลเยอร์ที่กำหนดไว้ล่วงหน้าเครื่องมือเพิ่มประสิทธิภาพและตัวเริ่มต้น
  2. โครงสร้างที่ยืดหยุ่นและจำเป็น : กลูออนไม่จำเป็นต้องกำหนดรูปแบบเครือข่ายประสาทเทียมอย่างเข้มงวด แต่นำอัลกอริธึมการฝึกอบรมและแบบจำลองเข้ามาใกล้กันเพื่อให้เกิดความยืดหยุ่นในกระบวนการพัฒนา
  3. กราฟแบบไดนามิก : Gluon ช่วยให้นักพัฒนาสามารถกำหนดแบบจำลองเครือข่ายประสาทเทียมที่เป็นแบบไดนามิกซึ่งหมายความว่าสามารถสร้างขึ้นได้ทันทีด้วยโครงสร้างใดก็ได้และใช้โฟลว์การควบคุมเนทีฟของ Python
  4. ประสิทธิภาพสูง : Gluon ให้ประโยชน์ทั้งหมดข้างต้นโดยไม่ส่งผลกระทบต่อความเร็วในการฝึกอบรมที่เครื่องยนต์พื้นฐานมีให้

ทั้งสี่รายการนี้พร้อมกับคอลเลกชันตัวอย่างโมเดลที่เพิ่มขึ้นอย่างมากมายทำให้ Gluon / MXNet มีความเท่าเทียมกันอย่างคร่าวๆกับ Keras / TensorFlow และ PyTorch เพื่อความสะดวกในการพัฒนาและความเร็ว คุณสามารถดูตัวอย่างโค้ด Gluon ที่แสดงคุณลักษณะเหล่านี้ในหน้าหลักของ Gluon และทำซ้ำในหน้าภาพรวมสำหรับ Gluon API

Gluon API ประกอบด้วยฟังก์ชันสำหรับเลเยอร์เครือข่ายประสาทเทียม, เครือข่ายประสาทที่เกิดซ้ำ, ฟังก์ชันการสูญเสีย, วิธีการชุดข้อมูลและชุดข้อมูลการมองเห็น, สวนสัตว์แบบจำลองและชุดวิธีการทดลองของเครือข่ายประสาทเทียม คุณได้อย่างอิสระสามารถรวม gluon มาตรฐาน MXNet และ NumPy โมดูลตัวอย่างเช่นmodule, autogradและndarray-as เดียวกับกับงูหลามควบคุมกระแส

Gluon มีเลเยอร์ที่ดีสำหรับการสร้างโมเดลรวมถึงเลเยอร์พื้นฐาน (Dense, Dropout ฯลฯ ) เลเยอร์ Convolutional เลเยอร์รวมและเลเยอร์การเปิดใช้งาน แต่ละรายการเป็นการโทรแบบบรรทัดเดียว สิ่งเหล่านี้สามารถใช้ร่วมกับสถานที่อื่น ๆ ภายในคอนเทนเนอร์เครือข่ายเช่นgluon.nn.Sequential().

HybridSequentialเครือข่ายสามารถแคช (กลายเป็นสัญลักษณ์ของกราฟ) ที่มีประสิทธิภาพสูงโดยใช้hybridize()วิธีการ:

สุทธิ = nn.HybridSequential ()

ด้วย net.name_scope ():

    net.add (nn.Dense (256, การเปิดใช้งาน = "relu"))

    net.add (nn.Dense (128, การเปิดใช้งาน = "relu"))

    net.add (nn. หนาแน่น (2))

net.hybridize ()

สังเกตวิธีที่Denseเมธอดเลเยอร์สามารถใช้ชื่อเลเยอร์การเปิดใช้งานเป็นพารามิเตอร์ นั่นเป็นหนึ่งในความคล้ายคลึงกันระหว่าง Gluon และ Keras

ทั้งคอนเทนเนอร์SequentialหรือHybridSequentialคอนเทนเนอร์ไม่ได้รับการบันทึกเป็นส่วนหนึ่งของ Gluon API ดังที่ฉันค้นพบโดยการค้นหาแผนผังซอร์สโค้ดพวกมันจะถูกนำไปใช้ใน incubator-mxnet / python / mxnet / gluon / nn / basic_layers.py

มีอะไรใหม่ใน MXNet 1.3

MXNet v1.3 ประกอบด้วยรายการคุณสมบัติใหม่การปรับปรุงและการแก้ไขข้อบกพร่องมากมาย จุดเด่น ได้แก่ ความสามารถในการผสมเลเยอร์ RNN (เครือข่ายประสาทที่เกิดขึ้นซ้ำ) เพื่อประสิทธิภาพโมเดลการมองเห็นที่ได้รับการฝึกฝนก่อนและใหม่ที่อัปเดตการส่งออกโมเดลไปยังรูปแบบ ONNX (Open Neural Network Exchange) และการรวมรันไทม์ของ Nvidia TensorRT เข้ากับ MXNet เพื่อเร่งการอนุมาน . ยิ่งไปกว่านั้นการรวม Intel MKL (Math Kernel Library) เข้ากับ MXNet ทำให้ประสิทธิภาพของ CPU Intel ดีขึ้นถึง 4 เท่าสำหรับการดำเนินการที่เข้มข้นรวมถึงโหนด Convolution

ชุมชน MXNet ยังให้ความสำคัญกับ QA และการบูรณาการอย่างต่อเนื่อง ขั้นตอนที่ดำเนินการคือการรวมสมุดบันทึกตัวอย่างจากบทช่วยสอน Deep Learning: The Straight Dope เข้ากับการทดสอบ CI ทุกคืน

การติดตั้ง MXNet โดยไม่มีน้ำตา

หากคุณมีโน้ตบุ๊ก Python, MXNet และ Jupyter ที่ใช้งานได้อยู่แล้วคุณสามารถข้ามไปยังส่วนถัดไปได้ มิฉะนั้นโปรดติดตาม

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

เป็นตัวเลือกการติดตั้งเดียวที่เป็นไปได้หรือไม่? ไม่ไม่แน่นอน ง่ายยิ่งขึ้นในการเรียกใช้ MXNet ใน Amazon SageMaker หรือเรียกใช้ Deep Learning AMI บน AWS ซึ่งมีทุกสิ่งที่คุณต้องการติดตั้งอยู่แล้ว

เริ่มต้นด้วยการติดตั้ง Python 3 เวอร์ชันล่าสุดสำหรับแพลตฟอร์มของคุณ (ฉันมีปัญหาในการเรียกใช้ MXNet ด้วย Python 2 หรือรุ่นก่อนหน้าของ Python 3) ฉันขอแนะนำให้ติดตั้ง Python 3 จาก Python.org หากคุณต้องการสภาพแวดล้อมแบบ Anaconda หรือ MiniConda คุณสามารถติดตั้ง Python 3 ด้วยหนึ่งในนั้นแทนและอาจข้ามขั้นตอนการติดตั้ง Jupyter ไป

ตรวจสอบว่าคุณสามารถเรียกใช้python3จากบรรทัดคำสั่งและรายงานเวอร์ชันล่าสุด ในการติดตั้งปลายเดือนตุลาคม 2018 python3 -Vส่งคืน Python 3.7.1; เวอร์ชันของคุณอาจใช้ในภายหลัง

จากนั้นติดตั้ง Jupyter ฉันใช้ pip ขั้นตอนนี้ไม่จำเป็นหากคุณติดตั้ง Anaconda ซึ่งจะติดตั้ง Jupyter ตามค่าเริ่มต้น

python3 -m pip install - อัพเกรด pip

python3 -m pip ติดตั้ง jupyter

หากคุณเรียกใช้jupyter notebookจากบรรทัดคำสั่งคุณจะเห็นหน้าต่างเบราว์เซอร์เปิดอยู่และสามารถสร้างสมุดบันทึกใหม่ด้วยเคอร์เนล Python 3 ปิดสองหน้าต่างนั้นและหยุดเซิร์ฟเวอร์โน้ตบุ๊กโดยปกติแล้วจะกด Ctrl-c สองครั้งที่บรรทัดคำสั่ง

ตอนนี้ติดตั้ง Notedown โดยใช้ tarball ตามที่อธิบายไว้ใน Readme ของ Gluon crash course ปลั๊กอิน Notedown ช่วยให้ Jupyter อ่านโน้ตบุ๊กที่บันทึกในรูปแบบมาร์กดาวน์ซึ่งมีประโยชน์ทั้งสำหรับหลักสูตรความผิดพลาดและสำหรับ Deep Learning: The Straight Dope

pip install //github.com/mli/notedown/tarball/master

ทดสอบควันโดยเรียกใช้ Jupyter ด้วย Notedown:

สมุดบันทึก jupyter --NotebookApp.contents_manager_class = 'namedown.NotedownContentsManager'

ปิดหน้าเว็บอีกครั้งและหยุดเซิร์ฟเวอร์โน้ตบุ๊ก

ตอนนี้เราพร้อมที่จะสร้างสภาพแวดล้อมเสมือนสำหรับ MXNet หากคุณเป็นผู้ใช้ Anaconda คุณสามารถสร้างสภาพแวดล้อมเสมือนจริงด้วย conda แทนได้ ฉันใช้สิ่งอำนวยความสะดวก Python3 venv ดั้งเดิมโดยเริ่มจากโฮมไดเร็กทอรีของฉัน:

python3 -m venv envs / mxnet

ตอนนี้เปิดใช้งานสภาพแวดล้อมเสมือนและติดตั้ง MXNet สำหรับแพลตฟอร์มของคุณ ฉันเลือกสร้าง MXNet ด้วย MKL (ไลบรารีประสิทธิภาพสูงของ Intel สำหรับซีพียู) เนื่องจากฉันใช้ Mac (ซึ่งไม่มีไบนารี MXNet สำหรับ CUDA GPU) แต่ถ้าคุณมี Nvidia GPU ล่าสุดที่ติดตั้ง CUDA บน Linux หรือ Windows คุณสามารถติดตั้งเวอร์ชัน MXNet ที่รองรับทั้ง CUDA และ MKL บน Bash เชลล์การติดตั้ง MXNet ในสภาพแวดล้อมเสมือนเป็นดังนี้:

แหล่งที่มา envs / mxnet / bin / เปิดใช้งาน

pip ติดตั้ง mxnet-mkl

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

แหล่ง ~ / envs / mxnet / bin / เปิดใช้งาน

ทดสอบการติดตั้ง MXNet ที่บรรทัดคำสั่งโดยเรียกใช้ Python 3 และนำเข้าไลบรารี MXNet ที่เราเพิ่งติดตั้ง โปรดทราบว่า(mxnet)คำนำหน้าในบรรทัดคำสั่งหมายความว่าเราอยู่ในสภาพแวดล้อมเสมือนจริง

(mxnet) Martins-Retina-MacBook: ~ martinheller $ python3

Python 3.7.1 (v3.7.1: 260ec2c36a, 20 ต.ค. 2018, 03:13:28 น.)

[เสียงดัง 6.0 (clang-600.0.57)] บนดาร์วิน

พิมพ์ "help", "copyright", "credit" หรือ "license" เพื่อดูข้อมูลเพิ่มเติม

>>> นำเข้า mxnet เป็น mx

>>> จาก mxnet import nd

>>> nd.array (((1,2,3), (5,6,7)))

[[1. 2. 3. ]

 [5. 6. 7. ]]

>>> ^ ง

(mxnet) Martins-Retina-MacBook: ~ martinheller $

ตอนนี้เราพร้อมที่จะทดสอบ MXNet ภายในสมุดบันทึก Jupyter ด้วย Notedown ในสภาพแวดล้อมเสมือนจริงที่เราติดตั้ง MXNet:

เมื่อคุณได้ทดสอบการติดตั้ง MXNet ในโน้ตบุ๊ก Jupyter แล้วคุณสามารถทำตามขั้นตอนต่อไปและทดสอบ Gluon ได้เต็มที่ยิ่งขึ้น เรียกดู gluon-api / gluon-api repo บน GitHub และดาวน์โหลดสมุดบันทึก Jupyter ของโค้ดตัวอย่าง เปลี่ยนเป็นไดเร็กทอรีที่คุณดาวน์โหลดโน้ตบุ๊กเปิดใช้งานสภาพแวดล้อมเสมือน MXNet ของคุณหากจำเป็นเรียกใช้สมุดบันทึก Jupyter เปิดตัวอย่างและเรียกใช้ อาจใช้เวลาสักครู่ในการฝึกอบรมให้เสร็จสิ้น หากทุกอย่างเรียบร้อยคุณจะเห็นสิ่งต่อไปนี้:

บทเรียน Gluon และ MXNet Module

ตอนนี้ MXNet มีบทช่วยสอนมากมายสำหรับ Gluon และ Module API ฉันได้กล่าวถึงหลักสูตรระยะยาวเกี่ยวกับการเรียนรู้เชิงลึกด้วย Gluon แล้ว, Deep Learning: The Straight Dope และเวอร์ชันสั้น 60-Minute Gluon Crash Course

นอกจากนี้ยังมีบทเรียนเกี่ยวกับ Gluon สำหรับ Python ประมาณ 30 บท ในฝั่ง Module API มีบทช่วยสอนเกี่ยวกับ Python ประมาณ 24 บท, ห้าสำหรับ Scala, สองสำหรับ C ++, เก้าสำหรับ R และสี่สำหรับ Perl

เมื่อฉันตรวจสอบ Keras ในเดือนกันยายนของปีนี้ฉันได้กล่าวว่า“ ถ้าฉันเริ่มโครงการเรียนรู้เชิงลึกใหม่ในวันนี้ฉันมักจะทำวิจัยกับ Keras” ฉันไม่แน่ใจเกี่ยวกับเรื่องนั้นอีกต่อไป Gluon / MXNet เกือบจะเป็นตัวเลือกที่ดีพอ ๆ กับ Keras / TensorFlow สำหรับการวิจัยเชิงลึกเกี่ยวกับ CPU และ GPU

ในด้านลบขณะนี้ MXNet ขาดการสนับสนุน TPU หรือ FPGA ซึ่งแตกต่างจาก TensorFlow และไม่มี TensorBoard ของ TensorFlow ที่เทียบเท่าสำหรับการแสดงภาพกราฟ นอกจากนี้ Keras / TensorFlow ยังมีระบบนิเวศที่ใหญ่กว่า Gluon / MXNet

Keras สามารถปรับใช้กับสภาพแวดล้อมได้มากกว่า Gluon แต่คุณสามารถปรับใช้โมเดล Gluon สำหรับการคาดการณ์กับอุปกรณ์ Android, iOS, Raspberry Pi และ Nvidia Jetson ได้นอกจากคอมพิวเตอร์ที่สามารถฝึกโมเดลและ TensorRT ได้ ปัจจุบัน Gluon และ Keras เป็นผู้ใหญ่มากกว่า PyTorch ซึ่งยังอยู่ในสถานะเบต้า PyTorch และ Gluon สามารถสร้างโมเดลแบบไดนามิกได้ Keras ไม่สามารถทำได้ในขณะนี้

ท้ายที่สุดแล้วการเลือกกรอบการเรียนรู้เชิงลึกที่จะใช้อาจเกี่ยวข้องกับความต้องการเฉพาะของคุณหรือสิ่งที่คุณรู้และชอบ แต่ต้องขอบคุณ Gluon และการปรับปรุงที่น่าทึ่งอื่น ๆ (ในเอกสารบทแนะนำแบบจำลองและอื่น ๆ ) MXNet กำลังสร้างตัวเลือกที่ดีพอ ๆ กับ TensorFlow หรือ PyTorch สำหรับการเรียนรู้เชิงลึก