DSC ไลบรารี tensor ใหม่ที่เข้ากันได้กับ PyTorch ซึ่งออกแบบมาสำหรับการ inference ในด้าน machine learning ได้ดึงดูดความสนใจจากนักพัฒนาด้วย API ที่ออกแบบมาอย่างเรียบร้อยและมี dependencies น้อย อย่างไรก็ตาม การอภิปรายในชุมชนได้เผยให้เห็นปัญหาด้านประสิทธิภาพที่สำคัญซึ่งอาจส่งผลต่อการนำไปใช้ในสภาพแวดล้อมการผลิต
ไลบรารีนี้สร้างโดยนักพัฒนา nirw4nna มีเป้าหมายเพื่อให้ interface ที่คล้าย NumPy พร้อมด้วยการสนับสนุน neural network ในตัวและการสลับ backend ระหว่าง CPU และ CUDA ได้อย่างราบรื่น DSC มีคุณสมบัติการจัดสรรหน่วยความจำแบบกำหนดเองเพื่อหลีกเลี่ยงการเรียก malloc ในขณะรันไทม์ และสนับสนุนภาษาโปรแกรมหลายภาษาผ่าน C API ที่ใช้ร่วมกัน
คุณสมบัติหลักของ DSC :
- ไลบรารี tensor ที่เข้ากันได้กับ PyTorch พร้อม API แบบ NumPy
- รองรับเครือข่ายประสาทเทียมในตัวด้วย nn.Module
- รองรับ backend หลายแบบ ( CPU และ CUDA )
- ตัวจัดสรรหน่วยความจำแบบกำหนดเองพร้อมการจัดสรรล่วงหน้า
- การพึ่งพาภายนอกน้อยที่สุด
- API ระดับต่ำที่เข้ากันได้กับ C ที่ห่อหุ้มใน Python
ปัญหาคอขวดด้านประสิทธิภาพจากการออกแบบ Interface
ปัญหาที่เร่งด่วนที่สุดที่ชุมชนระบุคือการใช้ ctypes ของ DSC สำหรับการสื่อสารระหว่าง Python กับ C นักพัฒนาหลายคนได้ชี้ให้เห็นว่าการเลือกใช้การออกแบบนี้สร้าง overhead ด้านประสิทธิภาพที่มากเมื่อเปรียบเทียบกับทางเลือกสมัยใหม่
Call overhead ของการใช้ ctypes เทียบกับ nanobind/pybind นั้นมหาศาลมาก... ctypes เพียงแค่เรียกไปที่ libffi ซึ่งเป็นที่รู้จักกันว่าเป็นวิธีที่ช้าที่สุดในการทำ ffi
ช่องว่างด้านประสิทธิภาพนี้กลายเป็นสิ่งสำคัญสำหรับ workload ของ machine learning ที่ทุกไมโครวินาทีมีความสำคัญ ผู้สร้างได้รับทราบความกังวลนี้และแสดงความสนใจในการสำรวจ nanobind ซึ่งเป็นโซลูชัน binding ที่มีประสิทธิภาพมากกว่าที่คอมไพล์ interface แทนที่จะใช้การเรียก foreign function ในขณะรันไทม์
ข้อมูลเชิงลึกเปรียบเทียบประสิทธิภาพ:
- อินเทอร์เฟซ ctypes สร้างโอเวอร์เฮดการเรียกใช้งานที่มีนัยสำคัญเมื่อเทียบกับ nanobind/pybind
- การสร้างเคอร์เนล C++ แบบทดลองแสดงผลการเพิ่มประสิทธิภาพประมาณ 20%
- llama.cpp ยังคงเร็วกว่าเนื่องจากเคอร์เนลที่ปรับแต่งด้วยมือ
- สถาปัตยกรรมปัจจุบันใช้เคอร์เนลแยกหลายตัว (เช่น 5 ตัวสำหรับ softmax)
การตัดสินใจด้านสถาปัตยกรรมถูกตรวจสอบ
สมาชิกในชุมชนได้ตั้งคำถามเกี่ยวกับแนวทางสถาปัตยกรรมโดยรวมด้วย บางคนแนะนำว่าการใช้ template และ switch statement อย่างหนักของ DSC อาจได้ประโยชน์จาก intermediate representation แบบ compiler ผู้สร้างได้ยืนยันการสังเกตนี้ โดยแบ่งปันว่างานทดลองในการสร้าง C++ kernel ที่ปรับให้เหมาะสมแสดงให้เห็นการเพิ่มประสิทธิภาพประมาณ 20% เมื่อเทียบกับแนวทาง multi-kernel ปัจจุบัน
การใช้งาน C++ แบบ C-style ของไลบรารีได้จุดประกายการอภิปรายเกี่ยวกับแนวปฏิบัติการพัฒนาสมัยใหม่ ในขณะที่นักพัฒนาบางคนชอบโค้ดที่ชัดเจนและระดับต่ำเพื่อการใช้เหตุผลด้านประสิทธิภาพ คนอื่นๆ สนับสนุนการปรับให้เหมาะสมที่ขับเคลื่อนโดย profiler มากกว่าการคาดเดาเกี่ยวกับประสิทธิภาพการสร้างโค้ด
โปรเจกต์การเรียนรู้ที่มีความปรารถนาในการผลิต
DSC ที่เริ่มต้นเป็นโปรเจกต์การเรียนรู้ส่วนตัวที่ได้แรงบันดาลใจจาก llama.cpp ได้พัฒนาเกินจุดประสงค์เพื่อการศึกษาเดิม ผู้สร้างยอมรับว่าแม้ว่า llama.cpp จะยังคงเร็วกว่าเนื่องจาก kernel ที่ปรับให้เหมาะสมด้วยมือสำหรับสถาปัตยกรรมเฉพาะ แต่ DSC มีเป้าหมายเพื่อให้เครื่องมือที่มีจุดประสงค์ทั่วไปมากกว่าที่ทำให้การทดลองโมเดลง่ายขึ้นสำหรับนักพัฒนาที่ไม่มีพื้นฐาน ML ลึกซึ้ง
โปรเจกต์ปัจจุบันสนับสนุนการดำเนินการ tensor พื้นฐานและสามารถโหลดโมเดลจากไฟล์ safetensors พร้อมแผนการเพิ่มการสนับสนุนไฟล์ GGUF อย่างไรก็ตาม ความกังวลด้านประสิทธิภาพที่ชุมชนยกขึ้นแสดงให้เห็นว่าการเปลี่ยนแปลงสถาปัตยกรรมที่สำคัญอาจจำเป็นก่อนที่ DSC จะสามารถแข่งขันกับ framework ที่จัดตั้งขึ้นแล้วในสภาพแวดล้อมการผลิต
การอภิปรายนี้เน้นย้ำถึงความท้าทายที่ต่อเนื่องในพื้นที่ ML infrastructure: การสร้างสมดุลระหว่างความง่ายในการใช้งานกับการปรับประสิทธิภาพในขณะที่รักษาสถาปัตยกรรมโค้ดที่สะอาดและบำรุงรักษาได้
อ้างอิง: dsc