PyPI บล็อก URL ของ Wheel โดยตรง ทำลายโซลูชันข้ามแพลตฟอร์มของ PyTorch

ทีมชุมชน BigGo
PyPI บล็อก URL ของ Wheel โดยตรง ทำลายโซลูชันข้ามแพลตฟอร์มของ PyTorch

โซลูชันสร้างสรรค์ของนักพัฒนาคนหนึ่งสำหรับแก้ปัญหาการติดตั้ง PyTorch ข้ามแพลตฟอร์มที่มีชื่อเสียงในด้านความยุ่งยากได้เจออุปสรรคใหญ่ วิธีการนี้ซึ่งใช้ URL ของ wheel โดยตรงเพื่อจัดการกับ hardware accelerator และระบบปฏิบัติการที่แตกต่างกัน กลับกลายเป็นว่าไม่เข้ากันกับข้อกำหนดการเผยแพร่ของ PyPI

โซลูชันเดิมพยายามแก้ไขความหงุดหงิดที่แพร่หลายในชุมชน Python machine learning การติดตั้ง PyTorch มักจะล้มเหลวหรือติดตั้งเวอร์ชันที่ไม่ถูกต้องขึ้นอยู่กับการตั้งค่าฮาร์ดแวร์ของผู้ใช้ - ไม่ว่าจะมี GPU ของ NVIDIA, กราฟิกของ AMD, Intel XPU accelerator หรือต้องการเวอร์ชันที่ใช้ CPU เท่านั้น ความซับซ้อนเพิ่มขึ้นเมื่อต้องรองรับระบบปฏิบัติการและเวอร์ชัน Python ที่แตกต่างกัน

ข้อจำกัดการเผยแพร่ของ PyPI สร้างอุปสรรคใหม่

การแก้ไขที่เสนอใช้ PEP 508 dependency specifications เพื่อลิงก์โดยตรงไปยังไฟล์ wheel ของ PyTorch ที่โฮสต์บนเซิร์ฟเวอร์ของ PyTorch สิ่งนี้ช่วยให้นักพัฒนาสามารถระบุ URL ของ wheel ที่แน่นอนสำหรับการกำหนดค่าฮาร์ดแวร์ที่แตกต่างกัน รวมกับข้อจำกัดเวอร์ชัน Python อย่างไรก็ตาม สมาชิกในชุมชนได้ชี้ให้เห็นข้อบกพร่องที่สำคัญอย่างรวดเร็ว: PyPI ห้ามการอ้างอิงโดยตรงในการแจกจ่ายที่อัปโหลดอย่างชัดเจน

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

รูปแบบการระบุ Dependency ของ PEP 508:

  • รูปแบบพื้นฐาน: package-name @ wheel-url; python_version == "version"
  • รองรับข้อจำกัดของฮาร์ดแวร์และการกำหนดเป้าหมายเวอร์ชัน Python
  • ถูกบล็อกโดย PyPI สำหรับการแจกจ่ายแพ็กเกจสาธารณะ
  • มีจุดประสงค์สำหรับผู้รวมซอฟต์แวร์ ไม่ใช่ผู้เผยแพร่

ชุมชนแนะนำ Package Manager ทางเลือก

นักพัฒนาที่มีประสบการณ์ในการสนทนาเน้นย้ำว่า conda และ mamba ยังคงเป็นโซลูชันที่เชื่อถือได้มากที่สุดสำหรับการติดตั้ง PyTorch package manager เหล่านี้สามารถตรวจจับการกำหนดค่าฮาร์ดแวร์และติดตั้งเวอร์ชันที่เหมาะสมโดยอัตโนมัติ ต่างจาก pip พวกมันจัดการแพ็กเกจที่คอมไพล์แล้วได้อย่างมีประสิทธิภาพมากกว่าและหลีกเลี่ยงข้อผิดพลาดทั่วไปของการติดตั้งแพ็กเกจ CUDA ขนาดใหญ่บนระบบที่ไม่รองรับ

ฉันพบว่ามันเป็น package manager เดียวสำหรับ python ที่จะตรวจจับฮาร์ดแวร์ของฉันได้อย่างน่าเชื่อถือและติดตั้งเวอร์ชันที่ถูกต้องของ dependency ทุกตัว

สมาชิกในชุมชนหลายคนยังเน้นเครื่องมือใหม่ๆ เช่น Pixi ซึ่งรวมการจัดการแพ็กเกจ conda และ PyPI ในอินเทอร์เฟซเดียว เครื่องมือทางเลือกเหล่านี้มีการตรวจจับฮาร์ดแวร์ที่ดีกว่าและสามารถเลือกเวอร์ชัน PyTorch ที่ดีที่สุดสำหรับระบบเฉพาะโดยอัตโนมัติ

ตัวเลือกการติดตั้ง PyTorch แยกตามแพลตฟอร์ม:

แพลตฟอร์ม เครื่องมือที่แนะนำ การตรวจจับฮาร์ดแวร์ รองรับ CUDA
Linux conda/mamba อัตโนมัติ รองรับ
Windows/Mac pip (ค่าเริ่มต้น) แบบแมนนวล รองรับจำกัด
ข้ามแพลตฟอร์ม Pixi อัตโนมัติ รองรับ
เฉพาะทาง torchruntime อัตโนมัติ รองรับ
องค์ประกอบนามธรรมนี้จับแก่นแท้ของโซลูชันที่เป็นนวัตกรรมใหม่ที่เกิดขึ้นในขอบเขตของการติดตั้ง PyTorch
องค์ประกอบนามธรรมนี้จับแก่นแท้ของโซลูชันที่เป็นนวัตกรรมใหม่ที่เกิดขึ้นในขอบเขตของการติดตั้ง PyTorch

ปัญหาการแพ็กเกจในวงกว้างยังคงอยู่

โซลูชันที่ล้มเหลวเน้นให้เห็นปัญหาที่ลึกกว่าของการแพ็กเกจ Python สำหรับไลบรารีที่เฉพาะเจาะจงกับฮาร์ดแวร์ ความซับซ้อนของ PyTorch เกิดจากความจำเป็นในการปรับให้เหมาะสมสำหรับ GPU หลายสิบประเภทและระบบปฏิบัติการหลายตัว สิ่งนี้สร้างความไม่ตรงกันพื้นฐานกับระบบการแพ็กเกจของ Python ซึ่งถือว่าแพลตฟอร์มฮาร์ดแวร์ที่แตกต่างกันอย่างมีนัยสำคัญเป็นสิ่งเดียวกัน

นักพัฒนาบางคนประสบความสำเร็จกับเครื่องมือเฉพาะทาง เช่น torchruntime ซึ่งจัดการการติดตั้ง PyTorch แยกจากการจัดการแพ็กเกจทั่วไป คนอื่นๆ ยืนยันว่าวิธีการที่เชื่อถือได้เพียงอย่างเดียวคือการหลีกเลี่ยง PyTorch dependencies ในโค้ดที่คอมไพล์แล้วทั้งหมด โดยใช้เทคนิคเช่น ctypes เพื่อโหลดไลบรารีแบบไดนามิก

การสนทนาเผยให้เห็นว่าแม้วิธีแก้ปัญหาเชิงสร้างสรรค์จะยังคงเกิดขึ้นต่อไป แต่ความตึงเครียดพื้นฐานระหว่างข้อจำกัดการแพ็กเกจของ Python และข้อกำหนดการปรับให้เหมาะสมเฉพาะฮาร์ดแวร์ยังคงไม่ได้รับการแก้ไข จนกว่าการแพ็กเกจ Python จะพัฒนาให้เข้าใจแพลตฟอร์มฮาร์ดแวร์ได้ดีขึ้น หรือ PyTorch จะทำให้โมเดลการแจกจ่ายง่ายขึ้น นักพัฒนาจะยังคงเผชิญกับฝันร้ายการติดตั้งเหล่านี้ต่อไป

อ้างอิง: How I Solved PyTorch's Cross-Platform Nightmare