- Free-threaded CPython เป็นการเปลี่ยนแปลงครั้งใหญ่ที่ทำให้สามารถรันหลายเธรดแบบขนานภายในอินเทอร์พรีเตอร์เดียวกันได้
- มีให้ใช้งานเป็นฟีเจอร์ทดลองใน CPython 3.13
- ขอบคุณ PEP 703 ทำให้สามารถรันโดยปิดการใช้งาน GIL ได้
- มีความสำคัญต่อการปรับปรุงประสิทธิภาพ โดยเฉพาะประสิทธิภาพแบบมัลติเธรด
- ช่วยให้ใช้หลายคอร์ของ CPU ได้อย่างมีประสิทธิภาพ
น่าตื่นเต้นก็จริง แต่มีปัญหาอะไรบ้าง?
- การทำ free-threading ในตัว CPython เองต้องใช้ความพยายามอย่างมาก
- มีปัญหาหลักสองอย่าง: ความปลอดภัยของเธรดและความเข้ากันได้ของ ABI
- ความปลอดภัยของเธรด: โค้ด Python ล้วนสามารถทำงานได้โดยไม่ต้องแก้ไข แต่โค้ดที่เขียนด้วยภาษาอื่นหรือโค้ดที่ใช้ CPython C API อาจไม่เป็นเช่นนั้น
- ความเข้ากันได้ของ ABI: อินเทอร์พรีเตอร์แบบ free-threaded ใช้ ABI ที่ต่างออกไป ดังนั้นแต่ละแพ็กเกจที่มี extension module จะต้องสร้าง wheel เพิ่มเติม
- ปัญหาด้านความปลอดภัยของเธรดนั้นเข้าใจ ปรับปรุง และทดสอบได้ยาก
- ตัวอย่าง: ความล้มเหลวที่เกิดขึ้นเป็นครั้งคราวใน numpy#26690, pywavelets#758 เป็นต้น
แผนต่อจากนี้และงานของทีม
- ต้องใช้เวลาอีกหลายปีกว่า free-threaded CPython จะกลายเป็นค่าเริ่มต้น
- หวังว่าใน Python 3.13 จะมีหลายโปรเจ็กต์ทำงานด้านความเข้ากันได้และปล่อย
cp313t wheel บน PyPI
- ทีมได้เริ่มทำงานจากส่วนล่างของสแตก PyData มาหลายเดือนแล้ว
- สำหรับแต่ละแพ็กเกจ ใช้แนวทางที่คล้ายกันดังนี้:
- เพิ่มงาน CI ตัวแรก
- แก้ปัญหาความปลอดภัยของเธรดและปัญหาสถานะแบบแชร์/โกลบอล
- เพิ่มการรองรับ free-threaded ให้กับงาน CI สำหรับการสร้าง wheel
- ทำ stress test ในเครื่องและติดตามงาน CI
- ระบุว่า extension module สามารถรันได้โดยไม่มี GIL
- ย้ายไปยังแพ็กเกจถัดไป
สรุปของ GN⁺
- Free-threaded CPython เป็นการเปลี่ยนแปลงสำคัญที่สามารถยกระดับประสิทธิภาพแบบมัลติเธรดได้อย่างมาก
- การแก้ปัญหาความปลอดภัยของเธรดและความเข้ากันได้ของ ABI คือความท้าทายหลัก
- หวังว่าใน Python 3.13 จะมีหลายโปรเจ็กต์ทำงานด้านความเข้ากันได้และสามารถทดลองใช้งานได้
- แพ็กเกจหลักอย่าง PyTorch และแพ็กเกจขนาดเล็กอีกจำนวนมากจำเป็นต้องรองรับการเปลี่ยนแปลงนี้
- โปรเจ็กต์ที่เกี่ยวข้องได้แก่ PyO3 และ PyTorch
1 ความคิดเห็น
ความเห็นบน Hacker News
การนำ GIL ออกจาก Python เปิดโอกาสให้องค์กรและโปรเจ็กต์จำนวนมากเพิ่มประสิทธิภาพได้อย่างมากโดยแทบไม่ต้องออกแรงเพิ่ม
มีการแชร์ประสบการณ์การติดตั้งและรัน Python ที่ถอด GIL ออกแล้วบน macOS
ผู้ใช้ที่ชอบความเขียนง่ายและตรรกะของ Python หวังว่าแนวทางแบบถอด GIL จะยังคล้ายกับวิธีเขียน Python แบบเดิม
มีการสรุปความคืบหน้าของ Python 3
มีการย้อนนึกว่าราวปี 2007 การประมวลผลแบบขนานกลายเป็นสิ่งจำเป็น
อธิบายว่าใน PEP703 หลังถอด GIL แล้ว การทำงาน
appendของลิสต์ยังคงรักษาความปลอดภัยต่อเธรดได้อย่างไรคาดหวังว่าการถอด GIL จะเปลี่ยนธรรมชาติของการฝึกและการอนุมานของ ML อย่างไร
กังวลว่านักพัฒนาที่ไม่เคยจัดการ multithreading จริง ๆ มาก่อน อาจนำบั๊กแบบละเอียดอ่อนรูปแบบใหม่เข้ามา
ตั้งคำถามว่าประสิทธิภาพแบบ single-thread ที่ลดลงนั้นร้ายแรงหรือไม่
แสดงความสงสัยเกี่ยวกับวิธีทำงานร่วมกับ async