Deep Learning Academy · บทเรียน

เหตุใดการวนซ้ำจึงช้าเมื่อคำนวณคณิตศาสตร์

ต้นทุนของการวนซ้ำใน Python ทีละสมาชิก

บทเรียน 1 จาก 413 ขั้นตอน

เหตุใดการวนซ้ำจึงช้าเมื่อคำนวณคณิตศาสตร์ เป็นบทเรียน Deep Learning Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Deep Learning Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Deep Learning Academy มีบทเรียนทั้งหมด 4 บทเรียน

ความเคยชินกับการวนซ้ำ

เมื่อมาจาก Python แบบพื้นฐาน คุณมักเลือกใช้ การวนซ้ำ for เพื่อบวกสมาชิกของรายการสองรายการทีละตัว วิธีนี้ใช้ได้ แต่สำหรับการคำนวณขนาดใหญ่ นี่คือแนวทางที่ช้า 🐢

Python ต้องจ่ายต้นทุน

ทุกขั้นของการวนซ้ำใน Python มี ค่าใช้จ่ายของตัวแปลภาษา: การตรวจสอบชนิดข้อมูล การห่อหุ้มออบเจ็กต์ และการแจกจ่ายไบต์โค้ดเกิดขึ้นซ้ำแล้วซ้ำเล่าสำหรับสมาชิกแต่ละตัว

ขั้นตอนเล็ก ๆ นับล้าน

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

เวกเตอร์คือทางแก้

เวกเตอร์หมายถึงการอธิบายการดำเนินการทั้งหมดกับเทนเซอร์ในครั้งเดียว ทำให้งานหนักถูกส่งต่อไปยังโค้ด C และ CUDA ที่คอมไพล์ไว้และทำงานเร็วเบื้องหลัง

ดูวิธีที่ช้า

การวนซ้ำนี้บวกเทนเซอร์สองตัวทีละสมาชิกใน Python ผลลัพธ์ถูกต้อง แต่ต้องจ่ายค่าใช้จ่ายของตัวแปลภาษาในทุกขั้น

out = torch.empty_like(a)
for i in range(len(a)):
    out[i] = a[i] + b[i]

ดูวิธีที่เร็ว

ได้ผลลัพธ์เดียวกันด้วยบรรทัดเดียวแบบเวกเตอร์ PyTorch วนซ้ำในโค้ดที่คอมไพล์แล้ว ไม่ใช่ในตัวแปลภาษา Python ที่ช้า

out = a + b

เรียกครั้งเดียว ได้หลายตัวเลข

นิพจน์เดียวนี้ส่งอาร์เรย์ทั้งหมดให้กับเคอร์เนลที่ได้รับการปรับให้เหมาะสม เคอร์เนลจะวนซ้ำแทนคุณ โดยทำงานใกล้ฮาร์ดแวร์กว่ามากและเร็วกว่าอย่างมาก

หน่วยความจำต่อเนื่องช่วยได้

เทนเซอร์จัดเก็บตัวเลขไว้ในบล็อกหน่วยความจำก้อนเดียวที่แน่นและต่อเนื่อง CPU จึงอ่านข้อมูลตามลำดับที่เป็นมิตรต่อแคชได้ ซึ่งรายการ Python ไม่สามารถรับประกันได้

SIMD: หลายตัวพร้อมกัน

ชิปสมัยใหม่ใช้คำสั่ง SIMD ที่ดำเนินการหนึ่งอย่างกับตัวเลขหลายตัวภายในจังหวะนาฬิกาเดียว โค้ดแบบเวกเตอร์จะเปิดใช้ความสามารถนี้ แต่การวนซ้ำมักทำไม่ได้

GPU ต้องการงานก้อนใหญ่

GPU มีแกนประมวลผลหลายพันแกนที่พร้อมทำงานแบบขนาน ป้อนเทนเซอร์ทั้งก้อนแล้วจะทำงานได้เต็มประสิทธิภาพ แต่หากป้อนทีละสมาชิก ก็จะว่างเป็นส่วนใหญ่

คิดเป็นอาร์เรย์

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

ตรวจสอบอย่างรวดเร็ว

พร้อมจะบอกสาเหตุที่แท้จริงเบื้องหลังการวนซ้ำที่ช้าหรือยัง

สรุป: วนซ้ำน้อยลง ใช้เวกเตอร์มากขึ้น

การวนซ้ำของ Python มีต้นทุนต่อสมาชิก แต่การดำเนินการกับเทนเซอร์แบบเวกเตอร์หลีกเลี่ยงต้นทุนนี้ด้วยการทำงานในโค้ดที่คอมไพล์แล้ว พร้อมใช้ SIMD และเหมาะกับ GPU ให้คิดเป็นอาร์เรย์ ไม่ใช่ตัวเลขเดี่ยว ✅

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “เหตุใดการวนซ้ำจึงช้าเมื่อคำนวณคณิตศาสตร์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เหตุใดการวนซ้ำจึงช้าเมื่อคำนวณคณิตศาสตร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Deep Learning Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Deep Learning Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เหตุใดการวนซ้ำจึงช้าเมื่อคำนวณคณิตศาสตร์”

ต้นทุนของการวนซ้ำใน Python ทีละสมาชิก คุณปฏิบัติ Deep Learning Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Deep Learning Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Deep Learning Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “เหตุใดการวนซ้ำจึงช้าเมื่อคำนวณคณิตศาสตร์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Deep Learning Academy นี้ได้ไหม

ได้ บทเรียน Deep Learning Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดการวนซ้ำจึงช้าเมื่อคำนวณคณิตศาสตร์
  2. การดำเนินการทีละสมาชิกและการลดรูป
  3. คูณเมทริกซ์ด้วย matmul และ @
  4. ผลคูณจุดขับเคลื่อนทุกชั้น
← กลับไปที่ Deep Learning Academy