2025, Oct 03 11:31

macOS ARM पर Python 3.11 में TensorFlow इम्पोर्ट क्रैश: कारण और समाधान

macOS ARM पर Python 3.11 में TensorFlow 2.20 इम्पोर्ट पर mutex lock failed त्रुटि या Jupyter फ्रीज़ का कारण PyArrow/Protobuf टकराव है; समाधान: 2.19.x पर डाउनग्रेड।

macOS ARM पर Python 3.11 के साथ TensorFlow को इम्पोर्ट करना इंटरप्रेटर को थ्रेड‑लॉकिंग त्रुटि के साथ क्रैश करा सकता है या Jupyter कर्नेल को फ्रीज़ कर सकता है। यह लक्षण साधारण import पर ही तुरंत दिख जाता है, जिससे विफलता एक साथ ही चौंकाने वाली और यूज़र कोड से निदान करना कठिन बन जाती है। नीचे संक्षेप में बताया गया है कि क्या होता है, क्यों होता है, और सुरक्षित तरीके से आगे कैसे बढ़ें।

न्यूनतम पुनरुत्पादन

विफलता सबसे छोटे संभव इम्पोर्ट पर भी सामने आ जाती है। स्पष्टता के लिए, यहाँ importlib के जरिए वही कोड पाथ ट्रिगर करने वाला एक न्यूनतम स्निपेट दिया है।

import importlib as module_loader
pkg_tf = module_loader.import_module("tensorflow")

एक मानक REPL में यह प्रक्रिया को C++ रनटाइम त्रुटि के साथ समाप्त कर सकता है।

libc++abi: terminating due to uncaught exception of type std::__1::system_error: mutex lock failed: Invalid argument

Jupyter Notebook में, इम्पोर्ट वाली सेल चलाने के बाद कर्नेल अनिश्चित समय तक अटक सकता है।

असल में हो क्या रहा है

इम्पोर्ट के दौरान TensorFlow, PyArrow को भी लाता है। PyArrow, Protobuf पर निर्भर है। प्रभावित सेटअप में macOS पर Protobuf का एकीकरण ऐसा टकराव पैदा करता है जो लो‑लेवल mutex त्रुटि को ट्रिगर कर देता है। इस इंटरैक्शन पर सक्रिय चर्चा चल रही है, जिसमें यह विवरण शामिल है कि TensorFlow 2.20 और PyArrow दोनों Protobuf का उपयोग करते हैं पर प्रतीकों को ठीक से छिपाया नहीं गया, और TensorFlow ने Protobuf का इतना नया संस्करण अपनाया है कि प्रतीकों की टक्कर मायने रखने लगती है। अंतिम नतीजा यह है कि इम्पोर्ट के दौरान रनटाइम क्रैश हो जाता है।

दो सार्वजनिक थ्रेड इस मूल समस्या और उसके समाधान की दिशा को ट्रैक कर रहे हैं: apache/arrow#40088 और tensorflow/tensorflow#98563। एक संबंधित चर्चा यहाँ भी मिलती है: UKPLab/sentence-transformers#34919

पुष्ट अस्थायी उपाय

आज के लिए व्यावहारिक रास्ता TensorFlow 2.19.x का उपयोग करना है। इस संस्करण के साथ, macOS ARM और Python 3.11 पर इम्पोर्ट mutex क्रैश के बिना पूरा हो जाता है।

import importlib as module_loader
pkg_tf = module_loader.import_module("tensorflow")
print(getattr(pkg_tf, "__version__", "unknown"))

इससे रनटाइम स्थिर रहता है, जब तक ऊपर लिंक की गई अपस्ट्रीम समस्याएँ किसी फ़िक्स पर नहीं पहुँचतीं।

यह क्यों मायने रखता है

इम्पोर्ट पर क्रैश होना प्रोडक्शन वातावरण में बड़ा संकेत है, क्योंकि ये Python exceptions से सुरक्षित नहीं होते और सामान्य त्रुटि‑प्रबंधन को दरकिनार कर देते हैं। इस मामले में समस्या प्रोजेक्ट सीमाओं के पार जाती है: TensorFlow, PyArrow और Protobuf नेटिव लेयर पर इंटरेक्ट करते हैं, और उन बाइनरीज़ में प्रतीकों की दृश्यता सीधे इंटरप्रेटर की स्थिरता को प्रभावित करती है। पुनरुत्पाद्य वातावरण सँभालने वालों के लिए यह याद दिलाता है कि ट्रांज़िटिव C/C++ निर्भरताओं का संस्करण‑संरेखण उतना ही अहम है जितना शीर्ष‑स्तरीय Python पैकेज संस्करण।

मुख्य निष्कर्ष

यदि आप macOS ARM पर Python 3.11 के साथ TensorFlow 2.20.0 को इम्पोर्ट करते समय mutex lock failed: Invalid argument क्रैश से टकराते हैं, तो समस्या TensorFlow–PyArrow–Protobuf के संयोजन से उपजती है। TensorFlow 2.19.x पर जाने से सेटअप फिर से चलने लगता है। अपस्ट्रीम फ़िक्स के लिए apache/arrow#40088 और tensorflow/tensorflow#98563 पर चल रही थ्रेड्स पर नज़र रखें, और समाधान प्रगति पर रहते हुए टकराव फिर से न लौटे इसके लिए संस्करणों को पिन रखें।

यह लेख StackOverflow के एक प्रश्न पर आधारित है, जिसे Mikko Ohtamaa ने पूछा था, और Mikko Ohtamaa के उत्तर पर।