- สแตก Rust+WASM อาจเป็นทางเลือกที่ทรงพลังแทน Python สำหรับงานอนุมาน AI
- เมื่อเทียบกับ Python แอป Rust+Wasm มีขนาดเพียง 1/100 เร็วกว่า 100 เท่า และสามารถรันได้อย่างปลอดภัยทุกที่พร้อมการเร่งฮาร์ดแวร์เต็มรูปแบบโดยไม่ต้องเปลี่ยนโค้ดไบนารี
- Rust คือภาษาสำหรับ AGI
- หากลองเขียนโปรแกรม Rust แบบง่ายเพื่อรันการอนุมาน Llama2 ด้วยความเร็วระดับเนทีฟ
- หลังคอมไพล์เป็น Wasm แล้ว ไบนารีมีขนาดเพียง 2MB แต่ยังพกพาไปยังตัวเร่งฮาร์ดแวร์ต่างสถาปัตยกรรมได้อย่างสมบูรณ์
- นอกจากนี้ Wasm runtime (WasmEdge) ยังมอบสภาพแวดล้อมการรันที่ปลอดภัยสำหรับคลาวด์ ทำงานร่วมกับเครื่องมือคอนเทนเนอร์ได้อย่างราบรื่น จึงสามารถ orchestration และรันแอปแบบพกพาบนอุปกรณ์หลากหลายชนิดได้
ทำไมไม่ใช้ Python?
- โดยทั่วไป LLM อย่าง llama2 มักถูกฝึกด้วย Python (เช่น PyTorch, Tensorflow, JAX)
- แต่การใช้ Python กับแอปพลิเคชันอนุมานซึ่งคิดเป็นราว 95% ของงานประมวลผล AI นั้นเป็นความผิดพลาดครั้งใหญ่
- แพ็กเกจ Python มี dependency ที่ซับซ้อน ตั้งค่าและใช้งานได้ยาก
- dependency ของ Python มีขนาดใหญ่มาก Docker image สำหรับ Python หรือ PyTorch มักมีขนาดหลาย GB หรือหลายสิบ GB ซึ่งเป็นปัญหาอย่างยิ่งเมื่อทำ AI inference บน edge server หรืออุปกรณ์
- Python เป็นภาษาที่ช้ามาก ช้ากว่าภาษาคอมไพล์อย่าง C, C++, Rust ได้มากสุดถึง 35,000 เท่า
- เพราะ Python ช้า เวิร์กโหลดจริงส่วนใหญ่จึงต้องมอบให้ shared library แบบเนทีฟที่อยู่ใต้ Python wrapper
- ดังนั้นแอปอนุมานด้วย Python จึงเหมาะกับเดโม แต่ปรับแก้ภายในให้ตรงกับความต้องการเฉพาะของธุรกิจได้ยากมาก
- เนื่องจากต้องพึ่งพา native library อย่างมากและการจัดการ dependency ก็ซับซ้อน จึงยากมากที่จะพอร์ตโปรแกรม AI ที่เขียนด้วย Python ไปยังหลายอุปกรณ์ พร้อมใช้ความสามารถฮาร์ดแวร์เฉพาะของแต่ละเครื่องให้เต็มที่
- แพ็กเกจ Python ที่ใช้กันทั่วไปใน toolchain ของ LLM มักขัดแย้งกันเองโดยตรง
- Chris Lattner ผู้เป็นที่รู้จักจาก LLVM, Tensorflow และภาษา Swift ได้ให้สัมภาษณ์ที่น่าสนใจในพอดแคสต์สตาร์ทอัพสัปดาห์นี้ โดยอธิบายว่าเหตุใด Python จึงยอดเยี่ยมสำหรับการฝึกโมเดล แต่เป็นตัวเลือกที่ไม่เหมาะสำหรับแอปอนุมาน
ข้อดีของ Rust+Wasm
- สแตก Rust+Wasm มอบโครงสร้างพื้นฐานคลาวด์คอมพิวติ้งแบบรวมศูนย์ ตั้งแต่อุปกรณ์ edge cloud, เซิร์ฟเวอร์ on-premise ไปจนถึง public cloud
- เป็นทางเลือกที่แข็งแกร่งแทนสแตก Python สำหรับแอป AI inference และไม่น่าแปลกใจที่ Elon Musk เคยบอกว่า Rust คือภาษาของ AGI
- เบามาก: แอปอนุมานมีขนาดเพียง 2MB รวม dependency ทั้งหมดแล้ว ซึ่งยังไม่ถึง 1% ของขนาดคอนเทนเนอร์ PyTorch ทั่วไป
- เร็วมาก: ให้ความเร็วระดับเนทีฟของ C/Rust ในทุกส่วนของแอปอนุมาน ไม่ว่าจะเป็น preprocessing, tensor operations และ postprocessing
- พกพาได้: สามารถรันแอป Wasm bytecode เดียวกันได้บนทุกแพลตฟอร์มการประมวลผลหลักที่รองรับการเร่งฮาร์ดแวร์แบบต่างสถาปัตยกรรม
- ตั้งค่า พัฒนา และดีพลอยง่าย: ไม่ต้องมี dependency ที่ซับซ้อนอีกต่อไป ใช้เครื่องมือมาตรฐานบนโน้ตบุ๊กเพื่อ build ไฟล์ Wasm เดียวแล้วนำไป deploy ได้ทุกที่
- ปลอดภัยและรองรับคลาวด์: Wasm runtime ถูกออกแบบมาเพื่อแยกโค้ดของผู้ใช้ที่ไม่น่าเชื่อถือออกจากระบบ สามารถจัดการ Wasm runtime ด้วยเครื่องมือคอนเทนเนอร์ และนำไป deploy บนแพลตฟอร์ม cloud-native ได้ง่าย
เดโมการอนุมานด้วย Rust
- เขียนด้วยโค้ด Rust เพียง 40 บรรทัด และคอมไพล์เป็น Wasm
- เมื่อได้ Wasm bytecode แล้ว ก็สามารถนำไป deploy บนอุปกรณ์ใดก็ได้ที่รองรับ WasmEdge runtime
- ปลั๊กอิน WasmEdge GGML ที่อิงกับ llama.cpp จะใช้การเร่งฮาร์ดแวร์ของอุปกรณ์โดยอัตโนมัติเพื่อรันโมเดล llama2
ขั้นถัดไป
- ชุดเครื่องมือ WasmEdge GGML พร้อมใช้งานแล้วในปัจจุบัน และมีลูกค้า cloud-native ใช้งานจริง แต่ยังอยู่ในระยะเริ่มต้น
- หากคุณสนใจมีส่วนร่วมกับโอเพนซอร์สโปรเจกต์และช่วยกำหนดทิศทางของโครงสร้างพื้นฐาน LLM inference แห่งอนาคต ต่อไปนี้คือบางส่วนที่อาจร่วมพัฒนาได้
- เพิ่มปลั๊กอิน GGML สำหรับฮาร์ดแวร์และแพลตฟอร์ม OS ให้มากขึ้น: เช่น TPU บน Linux และ Windows, ARM NPU และชิป AI เฉพาะทางอื่น ๆ
- รองรับการตั้งค่า llama.cpp ให้มากขึ้น: ปัจจุบันรองรับการส่ง option การตั้งค่าบางส่วนจาก Wasm ไปยังปลั๊กอิน GGML แล้ว แต่ตั้งใจจะรองรับทุก option ที่ GGML มี
- รองรับ WASI NN API สำหรับภาษาอื่นที่เข้ากันได้กับ Wasm: โดยเฉพาะ Go, Zig, Kotlin, JavaScript, C และ C++
5 ความคิดเห็น
แนวทางที่เป็นจริงที่สุดที่ Apple ซึ่งตอนนี้ยังเป็นรองในด้าน AI อาจเลือกใช้ ดูเหมือนจะเป็นการใช้เอนจินอนุมาน S/W ที่ปรับแต่งมาอย่างดีแบบในบทความต้นฉบับ ให้เร่งความเร็วด้วย NPU ของชิป A ใน iPhone แล้วใส่ไฟล์ foundation model ลงไปใน iPhone แบบทั้งก้อน
ช่วงหลังทั้งในแวดวงวิชาการและอุตสาหกรรม มีความเห็นไปในทิศทางเดียวกันว่าประสิทธิภาพ AI ไม่ได้ขึ้นกับขนาดเพียงอย่างเดียว แต่ข้อมูลและการทำ fine-tuning สำคัญกว่า และก็มีเสียงประเมินกันมากว่าใน Llama2 ประสิทธิภาพจากการทำ fine-tuning นั้นดีมาก จึงคิดว่าการส่งโมเดลที่ฝึกมาอย่างดีลงไปยัง edge device อย่างต่อเนื่องก็น่าจะเป็นไปได้มากพอ
ในแง่นั้น กลยุทธ์แบบยัดทุกอย่างลงไปใน iPhone ก็ดูเป็นแนวทางที่ค่อนข้างสมจริงทีเดียว.
WASM กำลังบูมขนาดนี้เลยเหรอ? แต่ Python ไม่ควรเอาไปเทียบกับ Mojo มากกว่าหรือ
เห็นด้วยครับ/ค่ะ Mojo ยังต้องถือว่าอยู่ในขั้นทดลอง
แม้ว่า Mojo จะยังไม่ได้เปิดตัวอย่างเป็นทางการ แต่ Rust ก็เป็นภาษาที่เติบโตเต็มที่พอสมควรแล้ว และกำลังเข้ามาแทนที่หลายส่วนในการใช้งานจริงอยู่แล้ว
GN⁺: การรันอนุมาน Llama2 ที่รวดเร็วและพกพาได้บน Edge แบบต่างสถาปัตยกรรม
โปรดดูสรุปของ GN⁺ และความคิดเห็นใน Hacker News ประกอบด้วย