การพัฒนา Large Language Model ใหม่ที่เขียนด้วย Rust เต็มรูปแบบได้ดึงดูดความสนใจจากนักพัฒนา แต่อาจไม่ใช่ด้วยเหตุผลที่ผู้สร้างตั้งใจไว้ โปรเจกต์นี้อ้างว่าสร้างโมเดลภาษาแบบ transformer จากศูนย์โดยใช้ dependency พื้นฐานเท่านั้น แต่กลับกลายเป็นจุดศูนย์กลางของการถกเถียงอย่างเดือดดาลเกี่ยวกับโค้ดที่สร้างด้วย AI และแนวทางการพัฒนาสมัยใหม่
สัญญาณที่ชี้ไปสู่ต้นกำเนิดจาก AI
สมาชิกในชุมชนสามารถระบุสัญญาณที่บ่งชี้ได้อย่างรวดเร็วว่าโปรเจกต์นี้ส่วนใหญ่ถูกสร้างโดยเครื่องมือ AI มากกว่าการเขียนด้วยมือ หลักฐานรวมถึงคอมเมนต์ที่ยาวเยื่อเกินไปแต่ให้คุณค่าน้อย โครงสร้างโค้ดที่ซ้ำซ้อน และ README ที่เต็มไปด้วยอีโมจิและภาษาแบบการตลาดที่เป็นลักษณะเฉพาะของผลลัพธ์จาก AI นักพัฒนาคนหนึ่งสังเกตเห็นการมีอยู่ของคอมเมนต์แบบ // Increased for better learning ที่ไม่ให้ข้อมูลที่มีความหมาย พร้อมกับการนิยามค่าคงที่ซ้ำซ้อนที่เพิกเฉยต่อการ import ที่มีอยู่แล้วจากไฟล์ library ของโปรเจกต์
ผู้เขียนยืนยันในภายหลังบน Reddit ว่าเครื่องมือ AI ถูกใช้ในการสร้างโปรเจกต์จริง ซึ่งพิสูจน์ความสงสัยของชุมชน การเปิดเผยนี้จุดประกายคำถามที่กว้างขึ้นเกี่ยวกับคุณภาพและความแท้จริงของการพัฒนาที่ช่วยเหลือด้วย AI
ความขัดแย้งเรื่อง From Scratch
แม้จะอ้างว่าสร้างทุกอย่างจากพื้นฐาน แต่โปรเจกต์นี้อาศัย dependency ภายนอกหลายตัว รวมถึง ndarray สำหรับการดำเนินการเมทริกซ์ rand สำหรับการสร้างตัวเลขสุ่ม และ rand_distr สำหรับการแจกแจงทางสถิติ นักวิจารณ์โต้แย้งว่าสิ่งนี้ขัดแย้งกับเรื่องเล่าแบบ from scratch แม้ว่าผู้สนับสนุนจะชี้ให้เห็นว่า dependency tree ยังคงสะอาดค่อนข้างมากด้วย dependency ตรงเพียงสามตัวที่ขยายไปเป็นชุด transitive dependency ที่จัดการได้
การถกเถียงนี้เน้นให้เห็นความตึงเครียดที่ดำเนินต่อไปในชุมชนนักพัฒนาเกี่ยวกับสิ่งที่ถือเป็นการพัฒนา from scratch ที่แท้จริงเทียบกับการใช้ประโยชน์จาก library ที่มีอยู่และผ่านการทดสอบแล้วสำหรับการดำเนินการพื้นฐาน
การพึ่งพาโดยตรง
- ndarray v0.16.1 - อาร์เรย์หลายมิติสำหรับการดำเนินการเมทริกซ์
- rand v0.9.0 - การสร้างตัวเลขสุ่มสำหรับการเริ่มต้นค่า
- rand_distr v0.5.1 - การแจกแจงทางสถิติสำหรับการเริ่มต้นพารามิเตอร์
Python Dependency Hell เทียบกับความเรียบง่ายของ Rust
การถกเถียงหันไปสู่ทิศทางที่น่าสนใจในการเปรียบเทียบประสบการณ์การพัฒนาข้ามภาษา นักพัฒนาหลายคนชื่นชมความเรียบง่ายของระบบ cargo ของ Rust โดยเปรียบเทียบกับความท้าทายในการจัดการ dependency ที่มีชื่อเสียงของ Python อย่างไรก็ตาม สิ่งนี้จุดประกายการถกเถียงของตัวเองเกี่ยวกับว่าการรวม dependency ที่ง่ายนั้นเป็นประโยชน์เสมอหรือไม่
ความยากในการรวม dependency ควรเป็นสัดส่วนกับความเสี่ยงที่คุณกำลังรับ หมายความว่าไม่ควรยากเหมือนใน C ที่ทุก library อื่นกำลังคิดค้น utility เดิมๆ 5 ตัวอย่างต่อเนื่อง แต่ก็ไม่ควรง่ายเหมือนใน npm หรือ cargo เพราะคุณจะได้ dependency clutter ที่บ้าคลั่ง
บางคนโต้แย้งว่าการทำให้ dependency ง่ายเกินไปในการเพิ่มอาจนำไปสู่โปรเจกต์ที่บวมและความกังวลด้านความปลอดภัย ในขณะที่คนอื่นๆ โต้กลับว่าเครื่องมือสมัยใหม่เช่น uv สำหรับ Python ได้แก้ปัญหาการจัดการแพ็กเกจแบบดั้งเดิมไปแล้วส่วนใหญ่
คุณค่าทางการศึกษาแม้จะมีต้นกำเนิดแบบนั้น
ไม่ว่าโค้ดจะถูกสร้างมาอย่างไร นักพัฒนาหลายคนพบคุณค่าทางการศึกษาในโครงสร้างที่ชัดเจนและการครอบคลุมการทดสอบที่ครอบคลุมของโปรเจกต์ การพัฒนานี้แสดงให้เห็นแนวคิดหลักของ machine learning รวมถึงสถาปัตยกรรม transformer, backpropagation และขั้นตอนการฝึกโมเดลภาษา การออกแบบแบบโมดูลาร์ทำให้เข้าใจส่วนประกอบแต่ละส่วนได้ง่าย เช่น กลไก self-attention และ feed-forward network
โปรเจกต์นี้ทำหน้าที่เป็นตัวอย่างปฏิบัติของวิธีที่เครื่องมือ AI สมัยใหม่สามารถผลิตโค้ดที่อ่านได้และมีโครงสร้างดีที่ใช้เพื่อวัตถุประสงค์ทางการศึกษา แม้ว่าจะขาดความเข้าใจลึกซึ้งที่มาจากการพัฒนาด้วยมือ
การกำหนดค่าโมเดล
- ขนาดคำศัพท์: แบบไดนามิก (สร้างจากข้อมูลการฝึก)
- มิติการฝัง: 128
- มิติที่ซ่อน: 256
- ความยาวลำดับสูงสุด: 80 โทเค็น
- สถาปัตยกรรม: 3 บล็อก Transformer + การฝัง + การฉายภาพเอาต์พุต
ข้อจำกัดด้านประสิทธิภาพและการปฏิบัติ
การพัฒนานี้ทำงานบน CPU เต็มรูปแบบด้วยการฝึกใน memory ทำให้เป็นการฝึกหัดการเรียนรู้มากกว่าเครื่องมือที่ใช้งานได้จริง สมาชิกในชุมชนสังเกตว่าแม้เวลาตอบสนองทันทีจะน่าประทับใจสำหรับการตั้งค่าที่เรียบง่ายเช่นนี้ แต่ความสามารถของโมเดลถูกจำกัดอย่างรุนแรงด้วยชุดข้อมูลฝึกขนาดเล็กของข้อความข้อเท็จจริงประมาณ 50 ข้อที่ฝังอยู่ในซอร์สโค้ดโดยตรง
การทดสอบเผยให้เห็นว่าโมเดลพังทลายอย่างรวดเร็วเมื่อถูกกระตุ้นด้วยหัวข้อนอกเหนือจากขอบเขตการฝึกที่แคบ ผลิตผลลัพธ์ที่ไร้สาระซึ่งแสดงให้เห็นข้อจำกัดของแนวทางการฝึกที่น้อยที่สุดเช่นนี้
โปรเจกต์นี้ในที่สุดแสดงถึงทั้งศักยภาพและข้อผิดพลาดของการพัฒนาที่ช่วยเหลือด้วย AI - สามารถผลิตโค้ดที่สะอาดและให้การศึกษาในขณะที่ทำให้เกิดคำถามเกี่ยวกับความแท้จริงและคุณค่าของการเข้าใจการพัฒนาพื้นฐาน
อ้างอิง: Rust LLM from Scratch