การพัฒนา LLM ด้วย Rust จุดประกายการถ่ายเทเรื่องคุณภาพโค้ดที่สร้างด้วย AI และการจัดการ Dependency

ทีมชุมชน BigGo
การพัฒนา LLM ด้วย Rust จุดประกายการถ่ายเทเรื่องคุณภาพโค้ดที่สร้างด้วย AI และการจัดการ Dependency

การพัฒนา 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