3 poin oleh GN⁺ 2024-07-13 | 1 komentar | Bagikan ke WhatsApp
  • Free-threaded CPython adalah perubahan besar yang memungkinkan beberapa thread berjalan secara paralel dalam interpreter yang sama
  • Tersedia sebagai fitur eksperimental di CPython 3.13
  • Berkat PEP 703, kini dapat dijalankan dengan GIL dalam keadaan nonaktif
  • Penting untuk peningkatan performa, terutama performa multi-thread
  • Memungkinkan pemanfaatan beberapa inti CPU secara efektif

Menarik, tapi apa masalahnya?

  • Implementasi free-threading di CPython sendiri merupakan upaya besar
  • Ada dua masalah utama: keamanan thread dan kompatibilitas ABI
    • Keamanan thread: kode Python murni akan berjalan tanpa perubahan, tetapi kode yang ditulis dalam bahasa lain atau yang menggunakan CPython C API mungkin tidak demikian
    • Kompatibilitas ABI: interpreter free-threaded memiliki ABI yang berbeda, sehingga setiap paket yang memiliki modul ekstensi harus membangun wheel tambahan
  • Masalah keamanan thread sulit dipahami, diperbaiki, dan diuji
  • Contoh: kegagalan intermiten yang terjadi pada numpy#26690, pywavelets#758, dan lain-lain

Rencana ke depan dan pekerjaan tim

  • Diperlukan beberapa tahun hingga free-threaded CPython menjadi default
  • Mereka berharap banyak proyek akan mengerjakan kompatibilitas di Python 3.13 dan merilis wheel cp313t ke PyPI
  • Tim telah memulai pekerjaan selama beberapa bulan dari lapisan bawah stack PyData
  • Untuk setiap paket, mereka menggunakan pendekatan serupa:
    1. Menambahkan tugas CI pertama
    2. Memperbaiki masalah keamanan thread serta status bersama/global
    3. Menambahkan dukungan free-threaded ke tugas CI build wheel
    4. Melakukan stress test secara lokal dan memantau tugas CI
    5. Menandai modul ekstensi agar dapat berjalan tanpa GIL
    6. Beralih ke paket berikutnya

Ringkasan GN⁺

  • Free-threaded CPython adalah perubahan penting yang dapat sangat meningkatkan performa multi-thread
  • Menyelesaikan masalah keamanan thread dan kompatibilitas ABI adalah tantangan utama
  • Mereka berharap banyak proyek dapat mengerjakan kompatibilitas dan bereksperimen di Python 3.13
  • Paket utama seperti PyTorch dan banyak paket kecil juga harus mengadopsi perubahan ini
  • Proyek terkait mencakup PyO3 dan PyTorch

1 komentar

 
GN⁺ 2024-07-13
Opini Hacker News
  • Dengan dihapusnya GIL di Python, banyak organisasi dan proyek mendapat peluang untuk meningkatkan performa secara signifikan hampir tanpa upaya tambahan

    • Jika library lama tidak mengadopsi perubahan ini tepat waktu, proyek baru berpeluang merebut pangsa pasar
    • Kompleksitas dan bug dari multiprocessing bisa dihindari, dan thread sederhana dapat digunakan untuk memanfaatkan semua core pada mesin besar
  • Berbagi pengalaman memasang dan menjalankan Python tanpa GIL di macOS

    • Menulis skrip singkat yang menjelaskan proses instalasi dan perbedaannya
    • Tautan
  • Pengguna yang menyukai kemudahan penulisan dan logika Python berharap pendekatan tanpa GIL tetap mirip dengan cara menulis Python saat ini

    • Menyebut bahwa ia belum mendalaminya karena multithreading terasa sulit
  • Merangkum perkembangan Python 3

    • [x] Async
    • [x] Optional static typing
    • [x] Threading
    • [ ] JIT
    • [ ] Efficient dependency management
  • Mengingat kembali bahwa pemrosesan paralel menjadi hal yang esensial sekitar tahun 2007

    • Menyebut bahwa Rust unggul dalam kecepatan dan pemrosesan paralel
  • Menjelaskan dalam PEP703 bagaimana operasi append pada list tetap mempertahankan thread safety setelah GIL dihapus

    • Ditambahkan lock per-list
    • Menyebut bahwa operasi sederhana menaikkan integer saat ini thread-safe karena adanya GIL
  • Menantikan bagaimana penghapusan GIL akan mengubah sifat training dan inference ML

    • Dapat mengurangi kompleksitas pemindahan memori dan koordinasi antarproses
    • Berharap library seperti PyTorch akan dioptimalkan
  • Khawatir para programmer yang belum pernah benar-benar menangani multithreading akan memperkenalkan bug halus yang baru

  • Mengajukan pertanyaan apakah penurunan performa single-thread cukup serius

    • Tidak menemukan benchmark, dan yang tersedia hanya penenangan umum
  • Mengungkapkan rasa penasaran tentang cara kerjanya dengan async

    • Ada batas alami antara kode I/O-bound dan CPU-bound
    • Ingin melihat model yang lebih fleksibel
    • Bertanya-tanya apakah JIT akan dimungkinkan saat melakukan "gather" pada coroutine CPU-bound
    • Berpendapat bahwa model pemrograman yang fleksibel untuk berpindah cepat dengan antarmuka serupa akan sangat keren