2 คะแนน โดย GN⁺ 2023-11-14 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

สแตก Rust+Wasm: ทางเลือกที่ทรงพลังแทน Python

  • แอปพลิเคชัน Rust+Wasm มีขนาดเล็กกว่า Python 1/100 ทำงานเร็วกว่า 100 เท่า และสามารถรันได้อย่างปลอดภัยทุกที่โดยไม่ต้องเปลี่ยนแปลงการเร่งฮาร์ดแวร์เลย
  • Rust คือภาษาสำหรับ AGI (ปัญญาประดิษฐ์ทั่วไป) และมีการสร้างโปรแกรม Rust แบบเรียบง่ายที่ใช้อนุมานโมเดล llama2 ได้ด้วยความเร็วเดิม
  • แอปพลิเคชันไบนารีที่คอมไพล์เป็น Wasm (2MB) สามารถพกพาข้ามอุปกรณ์ที่มีตัวเร่งฮาร์ดแวร์หลากหลายได้อย่างสมบูรณ์
  • Wasm runtime (WasmEdge) มอบสภาพแวดล้อมการรันที่ปลอดภัยและมั่นคงในสภาพแวดล้อมคลาวด์

การติดตั้งและรันโปรแกรม Rust

  • Step 1. ติดตั้ง WasmEdge และปลั๊กอิน GGML: ใช้คำสั่งด้านล่างเพื่อติดตั้งบนอุปกรณ์ Linux หรือ Mac
  • Step 2. ดาวน์โหลดแอป Wasm ที่บิลด์ไว้ล่วงหน้าและโมเดล: ดาวน์โหลดโมเดล llama2 ในรูปแบบ GGUF โดยตัวอย่างใช้โมเดล llama2 7B chat tuned ที่ควอนไทซ์น้ำหนักแบบ 5 บิต
  • Step 3. รัน: ใช้ WasmEdge เพื่อรันแอปอนุมานแบบ wasm แล้วส่งโมเดล GGUF เข้าไป จากนั้นป้อนคำถามเพื่อสนทนากับโมเดล

การตั้งค่าการทำงานของโมเดล

  • สามารถกำหนดวิธีโต้ตอบกับโมเดลได้ด้วยตัวเลือกบรรทัดคำสั่ง
  • ตัวอย่างเช่น สามารถระบุความยาวคอนเท็กซ์ กำหนดจำนวนโทเค็นสูงสุดที่จะทำนายในแต่ละคำตอบ แสดงสถิติ และสตรีมคำตอบของโมเดลไปยัง stdout
  • โปรแกรมสามารถสร้างโทเค็นได้ราว 25 โทเค็นต่อวินาทีบน MacBook M2 รุ่นราคาประหยัด

LLM เอเจนต์และแอป

  • ใช้ Rust และ WasmEdge เพื่อสร้างเซิร์ฟเวอร์ API ที่เข้ากันได้กับ OpenAI
  • ทำให้สามารถใช้เครื่องมือพัฒนาที่เข้ากันได้กับ OpenAI เพื่อสร้าง LLM เอเจนต์และแอปได้

ข้อดีของ Rust+Wasm เมื่อเทียบกับ Python

  • สแตก Rust+Wasm เป็นทางเลือกที่ทรงพลังแทนสแตก Python สำหรับแอปพลิเคชัน AI inference และรองรับโครงสร้างพื้นฐานคลาวด์คอมพิวติง
  • เบามาก: แอปอนุมานมีขนาดเพียง 2MB รวมทุก dependency แล้ว
  • เร็วมาก: ให้ความเร็วระดับ native C/Rust ในทุกส่วนของแอปอนุมาน
  • พกพาได้: แอป Wasm bytecode เดียวกันสามารถรันได้บนแพลตฟอร์มคอมพิวติงหลักทั้งหมดที่รองรับการเร่งฮาร์ดแวร์ที่หลากหลาย
  • ติดตั้ง พัฒนา และดีพลอยได้ง่าย: ไม่มี dependency ที่ซับซ้อน สามารถบิลด์เป็นไฟล์ Wasm เดียวด้วยเครื่องมือมาตรฐานบนโน้ตบุ๊ก และนำไปดีพลอยที่ไหนก็ได้
  • ปลอดภัยและพร้อมสำหรับคลาวด์: Wasm runtime ถูกออกแบบมาเพื่อแยกโค้ดของผู้ใช้ที่ไม่น่าเชื่อถือออกจากระบบ สามารถจัดการด้วยเครื่องมือคอนเทนเนอร์และดีพลอยบนแพลตฟอร์ม cloud-native ได้ง่าย

โปรแกรมอนุมาน Rust

  • โปรแกรมอนุมานเดโมเขียนด้วย Rust และคอมไพล์เป็น Wasm
  • ซอร์สโค้ด Rust เรียบง่ายมาก มีเพียง 40 บรรทัดของโค้ด
  • โปรแกรม Rust จัดการอินพุตของผู้ใช้ ติดตามประวัติการสนทนา แปลงข้อความเป็น chat template ของ llama2 และรันงานอนุมานผ่าน WASI NN API

รันบนคลาวด์หรือเอดจ์

  • เมื่อมีไฟล์ Wasm bytecode แล้ว ก็สามารถนำไปดีพลอยบนอุปกรณ์ใดก็ได้ที่รองรับ WasmEdge runtime
  • WasmEdge ติดตั้งมาพร้อมปลั๊กอิน GGML และจะใช้ประโยชน์จากการเร่งฮาร์ดแวร์ที่มีอยู่อย่างอัตโนมัติเพื่อรันโมเดล llama2

ขั้นตอนถัดไป

  • เครื่องมือ WasmEdge GGML พร้อมใช้งานแล้วในปัจจุบันและมีลูกค้า cloud-native ใช้งานอยู่ แต่ยังอยู่ในช่วงเริ่มต้น
  • หากสนใจมีส่วนร่วมกับโครงการโอเพนซอร์สและช่วยกำหนดทิศทางของโครงสร้างพื้นฐาน LLM inference ในอนาคต ก็ยังมีงานระดับล่างหลายอย่างที่สามารถช่วยได้

โมเดล AI อื่น ๆ

  • WasmEdge และ WASI NN สามารถใช้เป็นทางเลือกแทน Python เพื่อสร้างแอป inference ที่เบา เร็ว พกพาได้ และปลอดภัย
  • ตัวอย่างเช่น โปรเจกต์ mediapipe-rs มอบ Rust+Wasm API สำหรับโมเดล Google mediapipe Tensorflow

ความเห็นของ GN⁺

สาระสำคัญที่สุดของบทความนี้คือการนำเสนอ Rust และ WebAssembly (Wasm) เป็นทางเลือกแทน Python สำหรับ AI inference ซึ่งให้ข้อได้เปรียบอย่างชัดเจนในด้านขนาด ความเร็ว การพกพา และความปลอดภัย สแตกเทคโนโลยีนี้ยังผสานรวมโครงสร้างพื้นฐานคลาวด์คอมพิวติงเพื่อยกระดับประสิทธิภาพบนอุปกรณ์และสภาพแวดล้อมคลาวด์ที่หลากหลาย พร้อมแก้ปัญหา dependency ที่ซับซ้อน และทำให้การพัฒนาและการดีพลอยง่ายขึ้น แนวทางนี้อาจส่งผลสำคัญต่ออนาคตของ edge computing และ AI inference และเป็นหัวข้อที่น่าสนใจอย่างมากสำหรับผู้ที่สนใจเทคโนโลยี

1 ความคิดเห็น

 
GN⁺ 2023-11-14
ความเห็นจาก Hacker News
  • แม้จะแสดงจุดยืนสนับสนุน Rust และ WASM แต่โค้ดจริงกลับเป็นเพียงสคริปต์บรรทัดคำสั่งพื้นฐานที่เขียนด้วย Rust และการประมวลผลหลักก็พึ่งพาโค้ดเพียงบรรทัดเดียวที่เรียกใช้แบ็กเอนด์ WASI-NN โดยในกรณีนี้แบ็กเอนด์ดังกล่าวมาจากรันไทม์ WasmEdge ซึ่งเขียนด้วย C++
  • สำหรับนักพัฒนาแอปพลิเคชัน โปรเจ็กต์นี้มอบวิธีที่ง่ายที่สุดในการแพ็กเอนจินอนุมานเป็นไฟล์ที่พร้อมแจกจ่ายได้ โดยน้ำหนักของโมเดลนั้นพกย้ายได้อยู่แล้วและสามารถดาวน์โหลดได้ตามต้องการ
  • มีการตั้งคำถามว่าโปรเจ็กต์นี้เป็นเพียงการห่อหุ้ม llama.cpp หรือไม่ พร้อมแบ่งปันประสบการณ์การพัฒนาเฟรมเวิร์ก ML ด้วย Rust และ WebGPU
  • มีการชี้ว่าโปรเจ็กต์ที่พึ่งพา wasm-nn แท้จริงแล้วไม่ได้พกพาได้จริง และหากไม่มีการรองรับฮาร์ดแวร์เฉพาะก็อาจไม่สามารถรันได้ ซึ่งเป็นสถานการณ์ที่ไม่สอดคล้องกับเป้าหมายของ WASI
  • มีการตั้งข้อสงสัยต่อความถูกต้องของข้อมูลที่ว่าบิลด์ Mac OS ของปลั๊กอิน GGML ทำงานอนุมานผ่าน Metal API บน GPU ไม่ใช่บน Neural Engine ของ M1/M2/M3
  • มีความกังวลว่าแม้จะมีการพัฒนาวิธีทำให้สถาปัตยกรรมทรานส์ฟอร์เมอร์ทำงานบนเอดจ์คอมพิวติงได้มีประสิทธิภาพและรวดเร็วยิ่งขึ้น แต่ข้อกำหนดด้าน VRAM จะยังคงเป็นคอขวดสำคัญ และอาจไปถึงขีดจำกัดในการโหลดโมเดลขนาดใหญ่
  • มีคำถามว่าโปรเจ็กต์นี้สามารถรันแบบออฟไลน์บน iPhone ได้หรือไม่ ซึ่งอาจมีประโยชน์ในสถานการณ์ที่ไม่สามารถเชื่อมต่ออินเทอร์เน็ตได้
  • มีการวิจารณ์การทำตลาดโปรเจ็กต์ที่ใช้ตัวห่อหุ้มซึ่งเขียนด้วยภาษาอื่นราวกับเป็นนวัตกรรมด้านขนาดหรือความเร็ว ทั้งที่จริงแล้วมันเป็นโปรเจ็กต์ที่อิงกับ llama.cpp และความเร็วในการอนุมานหรือขนาดไบนารีไม่ได้ถูกจำกัดโดยการเลือกตัวห่อหุ้ม
  • มีคำถามว่าเมื่อขนาดส่วนใหญ่ของโมเดลมาจากน้ำหนักที่ผ่านการฝึกแล้ว จะสามารถลดขนาดลงโดยไม่สูญเสียความแม่นยำได้อย่างไร
  • แก่นหลักของซอร์สโค้ด Rust นั้นเรียบง่ายมาก โดยประกอบด้วยโค้ด 40 บรรทัดที่จัดการอินพุตของผู้ใช้ ติดตามประวัติการสนทนา แปลงข้อความให้อยู่ในเทมเพลตแชตของ llama2 และดำเนินการอนุมานผ่าน API ของ WASI NN