2 คะแนน โดย GN⁺ 2023-11-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • llamafile เป็นโปรเจกต์ของ Mozilla Builders ที่ย่อการแจกจ่ายและการรัน LLM ให้เหลือเป็นไฟล์ปฏิบัติการไฟล์เดียว ทำให้สามารถรันแบบโลคัลได้บนระบบปฏิบัติการและสถาปัตยกรรม CPU ส่วนใหญ่โดยไม่ต้องติดตั้ง
  • การใช้งานจริงผสาน llama.cpp เข้ากับ Cosmopolitan Libc โดยพับความซับซ้อนของการรัน LLM ให้เป็นไฟล์ปฏิบัติการ “llamafile” เพียงไฟล์เดียว และ Mozilla.ai ได้ปรับโครงสร้างโปรเจกต์ใหม่
  • whisperfile ที่รวมมาด้วยเป็นเครื่องมือแปลงเสียงเป็นข้อความแบบไฟล์เดียว ซึ่งอิงแพ็กเกจแบบ Cosmopolitan เช่นเดียวกับ whisper.cpp รองรับการถอดเสียงไฟล์เสียงและการแปล
  • ตั้งแต่ v0.10.0 เป็นต้นมา ใช้ระบบบิลด์ใหม่เพื่อให้สอดคล้องกับ llama.cpp เวอร์ชันล่าสุดได้ง่ายขึ้น จึงรองรับโมเดลและฟีเจอร์ที่ใหม่กว่า แต่อาจขาดบางฟีเจอร์ที่ผู้ใช้คุ้นเคยมาก่อน
  • บน Windows ต้องเพิ่มนามสกุล .exe ก่อนรัน และ ไฟล์ปฏิบัติการที่ใหญ่กว่า 4GB ไม่สามารถรันบน Windows ได้ จึงต้องใช้ไบนารี llamafile แยกต่างหากร่วมกับ weights/โมเดล GGUF ภายนอก

รัน LLM ด้วยไฟล์เดียว

  • llamafile เป็นโปรเจกต์ที่ทำให้แจกจ่ายและรัน LLM ได้ในไฟล์เดียว
  • เป้าหมายคือเพิ่ม การเข้าถึง Open LLM ทั้งสำหรับนักพัฒนาและผู้ใช้ปลายทาง
  • ผสาน llama.cpp และ Cosmopolitan Libc เข้าด้วยกันเป็นเฟรมเวิร์กเดียว
  • ผลลัพธ์คือ ไฟล์ปฏิบัติการไฟล์เดียว ที่เรียกว่า “llamafile” ซึ่งรันแบบโลคัลได้โดยไม่ต้องติดตั้ง
  • ขอบเขตที่รองรับคือระบบปฏิบัติการและสถาปัตยกรรม CPU ส่วนใหญ่

การปรับโครงสร้างโดย Mozilla.ai และโปรเจกต์ที่เกี่ยวข้อง

  • llamafile เป็นโปรเจกต์ของ Mozilla Builders และปัจจุบัน Mozilla.ai เป็นผู้ปรับโครงสร้างใหม่
  • รายละเอียดแนะนำโปรเจกต์เชื่อมโยงไปที่ announcement blog post
  • กำลังรับความคิดเห็นจากผู้ใช้ว่าเห็นคุณค่าตรงไหน และอะไรจะทำให้มีประโยชน์ยิ่งขึ้น

รวม whisperfile มาด้วย

  • whisperfile เป็นเครื่องมือแปลงเสียงเป็นข้อความแบบไฟล์เดียวที่รวมอยู่ใน llamafile
  • อิงแพ็กเกจแบบ Cosmopolitan เช่นเดียวกับ whisper.cpp
  • รองรับ การถอดเสียง และ การแปล ไฟล์เสียง
  • ใช้งานได้โดยไม่ต้องติดตั้งบนแพลตฟอร์มครอบคลุมเดียวกับ llamafile
  • เอกสารอยู่ที่ Whisperfile

การเปลี่ยนระบบบิลด์ใน v0.10.x

  • ตั้งแต่ 0.10.0 llamafile ใช้ระบบบิลด์ใหม่
  • จุดประสงค์ของระบบบิลด์ใหม่คือทำให้โค้ดสอดคล้องกับเวอร์ชันล่าสุดของ llama.cpp ได้ง่ายขึ้น
  • การเปลี่ยนแปลงนี้ทำให้รองรับโมเดลและฟีเจอร์ที่ใหม่กว่า
  • ในขณะเดียวกัน อาจมีบางฟีเจอร์ที่ผู้ใช้เคยคุ้นหายไป
  • คำอธิบายภาพรวมระดับสูงของการเปลี่ยนแปลงอยู่ใน README_0.10.0.md
  • ผู้ใช้ที่ชอบ “classic experience” สามารถเข้าถึงเวอร์ชันก่อนหน้าได้จากหน้า releases
  • llamafile ที่บิลด์ไว้ล่วงหน้าจะแสดงว่าถูกแพ็กรวมมากับเซิร์ฟเวอร์เวอร์ชันใด

เริ่มต้นอย่างรวดเร็วและข้อจำกัดบน Windows

  • โมเดลตัวอย่างคือ Qwen3.5 0.8B และ README แสดงขั้นตอนการดาวน์โหลดและรันภายในไม่กี่นาที
curl -LO https://huggingface.co/mozilla-ai/llamafile_0.10/…
chmod +x Qwen3.5-0.8B-Q8_0.llamafile
./Qwen3.5-0.8B-Q8_0.llamafile
  • โมเดลนี้ถูกเลือกเพราะเป็นโมเดลที่เล็กที่สุดในบรรดาโมเดลที่โปรเจกต์บิลด์เป็น llamafile จึงมีโอกาสสูงที่จะทำงานได้ทันที
  • หากมีฮาร์ดแวร์ที่แรงกว่า หรือมี GPU ก็สามารถเลือกโมเดลที่ใหญ่กว่าและมีความสามารถในการแสดงออกสูงกว่า ซึ่งอาจให้คำตอบที่แม่นยำกว่า
  • ผู้ใช้ Windows ต้องเพิ่ม นามสกุล .exe ต่อท้ายชื่อไฟล์ก่อนรัน
  • บน Windows สามารถรันได้เฉพาะ ไฟล์ปฏิบัติการที่มีขนาดต่ำกว่า 4GB เท่านั้น

เอกสารและไลเซนส์

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

 
GN⁺ 2023-11-30
ความคิดเห็นจาก Hacker News
  • ดูเหมือนว่าการลองกับโมเดลข้อความ+ภาพอย่าง LLaVA จะดีที่สุด ขั้นตอนนี้อิงกับ macOS แต่ก็น่าจะทำงานคล้ายกันบนแพลตฟอร์มอื่น

    1. ดาวน์โหลด llamafile-server-0.1-llava-v1.5-7b-q4 ขนาด 4.26GB จาก https://huggingface.co/jartine/llava-v1.5-7B-GGUF/blob/main/...
      wget https://huggingface.co/jartine/llava-v1.5-7B-GGUF/…
    2. ทำให้รันได้ในเทอร์มินัลด้วย chmod 755 llamafile-server-0.1-llava-v1.5-7b-q4
    3. รัน ./llamafile-server-0.1-llava-v1.5-7b-q4 แล้วเว็บเซิร์ฟเวอร์จะขึ้นมาที่ พอร์ต 8080
    4. ไปที่ http://127.0.0.1:8080/ แล้วอัปโหลดรูป จากนั้นคุยกับโมเดลผ่านเบราว์เซอร์ได้เลย
      ภาพหน้าจออยู่ที่ https://simonwillison.net/2023/Nov/29/llamafile/
    • ดีเกือบเท่า chatgpt-web [0] เลย และน่าทึ่งตรงที่รันออฟไลน์ได้ฟรี
      ถ้ายังไม่เคยใช้ chatgpt-web ก็แนะนำ สามารถคุยด้วยโมเดล GPT-4 รุ่นใหม่ได้ในราคาถูกกว่า ChatGPT Plus มาก และยังสลับไปใช้ GPT-4 รุ่นเก่าที่จำกัดน้อยกว่าและยังเขียนโค้ดได้ดีจริง ๆ ได้ด้วย
      [0]: https://github.com/Niek/chatgpt-web
    • เพื่อจะได้พิมพ์น้อยลง เลยใส่ไว้ใน การตั้งค่า Docker: https://github.com/tluyben/llamafile-docker
    • ลองเอา llamafile-server-0.1-llava-v1.5-7b-q4 ไปรันกับการทดสอบที่โปรเจ็กต์ต้องใช้แล้ว และผ่านหมดรวมถึง คำถามด้านวิชัน ด้วย คิดว่าในเชิงกลยุทธ์มันน่าจะสร้างความเปลี่ยนแปลงให้คนจำนวนมากพอสมควร
    • ลองถามง่าย ๆ แล้วได้คำตอบแบบนี้
      User: What is the third planet from the sun?
      Llama: The third planet from the sun is called Mars.
  • งานด้านพอร์ตข้ามแพลตฟอร์มของ Justine Tunney / jart น่าทึ่งและเจ๋งมาก แต่ยังไม่ค่อยแน่ใจนักว่า กรณีใช้งาน ของเครื่องมือนี้คืออะไร
    ผมกำลังทำแอป macOS เล็ก ๆ https://www.freechat.run ที่รัน llama.cpp ด้วยฟรอนต์เอนด์ SwiftUI และในเวอร์ชันแรกก็หมกมุ่นกับการทำให้เป็นการดาวน์โหลดครั้งเดียวแล้วเปิดมาคุยได้ทันทีโดยไม่ต้องมีการเชื่อมต่อเครือข่ายเลย พอผูกโมเดลเข้าไปกับแอป มันก็ง่ายดีเพราะดาวน์โหลด เปิด แล้วใช้ได้ทันที แต่พอจะปล่อยอัปเดต UI ให้ผู้ใช้เบต้า TestFlight ก็กลายเป็นว่าต้องให้พวกเขาดาวน์โหลดอีก 3GB และทั้ง 3 คนก็บ่นกันหมด
    หลังจากนั้นเลยแยกการดาวน์โหลดโมเดลเริ่มต้นออกจาก UI เพื่อให้อัปเดตแอปได้แค่ราว 5MB ดูแล้วเครื่องมือนี้ก็น่าจะเจอปัญหาแบบเดียวกันค่อนข้างเร็ว ทันทีที่คุณเริ่มอยากได้อัปเดต llama.cpp เวอร์ชันล่าสุด บางกรณีอาจไม่ใช่ปัญหา แต่ก็ยังสงสัยว่าเหมาะกับการใช้งานแบบไหน
    https://justine.lol/cosmopolitan/, https://github.com/ggerganov/llama.cpp

    • ไม่เข้าใจความหมกมุ่นที่จะทำให้ทุกอย่างเป็นแบบ 0 คลิก เลย มันน่ารำคาญมากเวลาไม่อยากติดตั้งทุกอย่างลงในฮาร์ดดิสก์หลัก
      เราดาวน์โหลดและจัดระเบียบโมเดลไว้แล้ว พร้อมใช้งานทันที แต่แอปกลับไม่แม้แต่จะถาม และทำเหมือนผู้ใช้โง่ด้วยการดาวน์โหลดใหม่อีกครั้ง
      ตอนนี้ Makeayo ดีขึ้นหน่อยเพราะถามตำแหน่งของโมเดล ส่วนการต้องใช้ symbolic link ใน comfy/automatic นี่ชวนหงุดหงิด แค่ถามตำแหน่งไฟล์ตอนเปิดครั้งแรกและให้เปลี่ยนได้ในตั้งค่าก็พอแล้ว ไม่ใช่เรื่องยากอะไร
    • ดาวน์โหลดตัวไบนารีแยกได้เหมือนกัน: https://github.com/Mozilla-Ocho/llamafile/releases
    • ดูเหมือนว่านี่จะเป็นปัญหาที่ MAS/TestFlight ไม่ทำเดลตาอัปเดตมากกว่า
    • มันก็เป็นแค่ไฟล์ zip ดังนั้นบนแพลตฟอร์มที่ไม่ใช่ Windows ก็น่าจะอัปเดตแบบแทนที่ไฟล์เดิมได้แม้ระหว่างรันอยู่ แค่สลับไฟล์ที่เปลี่ยนไปหนึ่งไฟล์ และถ้าเป็นโหมดเซิร์ฟเวอร์ก็น่าจะ hot reload ตัว executable ได้โดยไม่ทำให้ผู้ใช้หยุดใช้งาน
    • cosmopolitan libc ดูแทบจะเป็นการโชว์เทคนิคสุดเจ๋ง และสมควรได้รับคำชม รวมถึงอาจมีกรณีใช้งานจริงอยู่บ้าง แต่สำหรับวัตถุประสงค์ส่วนใหญ่มันดูไม่ค่อยใช้งานได้จริง
      ถ้ามีฟอร์แมตแบบ ELF อ้วนมากที่รองรับสถาปัตยกรรมและระบบปฏิบัติการได้มากเท่าที่ต้องการ เราจะใช้มันไหม? คิดว่าอาจจะไม่
      แต่พอได้ใช้ zig cc มาสักพัก ก็เริ่มรู้สึกว่าการ บิลด์ครั้งเดียวเพื่อทำไบนารีอเนกประสงค์ขนาดมหึมา ก็อาจมีเหตุผลเหมือนกัน การ dispatch ตามไมโครสถาปัตยกรรมก็เป็นจุดที่ดีด้วย จนตอนนี้เหมือนยิ่งใช้ยิ่งเผลอโน้มน้าวตัวเองให้เห็นด้วยกับทางเลือกนี้
  • ดูเหมือนมันจะมองรูปไม่ค่อยออก ไม่ว่าจะอัปโหลดรูปอะไรเข้าไปก็ตาม แต่คำตอบนี้ก็ตลกดี
    User: Describe the image in the most detailed way possible
    Llama: The image is a close-up of an empty, dark room with no visible objects or people...
    User: is it just a black square?
    Llama: Yes, it is just a black square.

    • พอลองอัปโหลด PNG 50x50 สีขาวล้วน มันกลับตอบว่ามีฉากหลังสีขาวเป็นส่วนใหญ่ มีพื้นที่สีเทาเล็ก ๆ และจุดสีส้มทางขวา
      พอถามว่าเป็นสี่เหลี่ยมสีขาวล้วนหรือเปล่า มันก็ตอบว่าไม่ใช่แค่สี่เหลี่ยมสีขาวธรรมดา แต่ดูเหมือนงานนามธรรมที่มีทั้งสีเทาและสีน้ำตาลอมเหลือง
  • บทความที่เกี่ยวข้องของ Simon Willison ดีมาก: https://simonwillison.net/2023/Nov/29/llamafile/

  • วิธีที่โมเดลนี้ หลอนคำตอบ น่าสนใจดี พอลองให้ดู “In the Mountains” ของ Albert Bierstadt (https://www.wikiart.org/en/albert-bierstadt/in-the-mountains...) มันก็ยังยืนกรานอยู่เรื่อย ๆ ว่ามีวัวกระจายอยู่ทั่วฉาก
    ทั้งที่พอบอกไปว่าไม่มีวัว หรือมันอาจเข้าใจผิดว่าก้อนหินเป็นวัว มันก็ยังตอบว่าไม่ใช่ จนกระทั่งพอบอกซ้ำว่า “ไม่มีวัว” มันถึงค่อยบรรยายว่าเป็นฉากสงบที่มีภูเขา ทะเลสาบ ต้นไม้ นก และเรือ

  • ข้อมูลที่เกี่ยวข้อง: https://hacks.mozilla.org/2023/11/introducing-llamafile/ และ https://twitter.com/justinetunney/status/1729940628098969799
    มาจากกระแสที่ https://news.ycombinator.com/item?id=38463456 และ https://news.ycombinator.com/item?id=38464759 แต่คอมเมนต์ถูกรวมมาไว้ที่นี่

  • กำลังลองรันโมเดล รูปแบบ GGUF ของ llama.cpp หลายตัวในลักษณะนี้
    git clone https://github.com/ggerganov/llama.cpp
    cd llama.cpp
    make
    # M2 Max - 16 GB RAM
    wget -P ./models https://huggingface.co/TheBloke/OpenHermes-2.5-Mistral-7B-16k-GGUF/…
    ./server -m models/openhermes-2.5-mistral-7b-16k.Q8_0.gguf -c 16000 -ngl 32
    # M1 - 8 GB RAM
    wget -P ./models https://huggingface.co/TheBloke/OpenHermes-2.5-Mistral-7B-16k-GGUF/…
    ./server -m models/openhermes-2.5-mistral-7b.Q4_K_M.gguf -c 2000 -ngl 32

  • คิดว่าชื่อ Llaminate ก็ใช้ได้เหมือนกัน น่าจะใช้เป็นคำกริยาทั่วไปในความหมายว่าห่อให้เป็นก้อนที่พร้อมใช้กับโมเดลที่เข้ากันได้กับ llama ได้ทันที

    • Llamanate
  • สร้างด้วย Cosmopolitan แต่ยังมี รองรับ CUDA ด้วยนี่เจ๋งดี ดูเหมือนว่าเดือนนี้ Cosmopolitan จะเพิ่มการรองรับ dynamic linking บางส่วนเพื่อให้ใช้ GPU ได้: https://github.com/jart/cosmopolitan/commit/5e8c928f1a37349a...
    น่าเสียดายที่ยังต้องติดตั้ง CUDA developer toolkit ด้วย ถ้ามีแค่ไดรเวอร์ Nvidia แล้วสามารถแจกจ่ายแอป CUDA ให้รันได้โดยไม่มี dependency เพิ่มเติมก็น่าจะทำได้เต็มรูปแบบ ถ้าแก้จุดนี้ได้คงเป็น game changer เลย

  • ชอบประโยคที่ว่า “เก็บไฟล์นี้ใส่ USB stick แล้วเก็บไว้ในลิ้นชัก ก็เหมือนเป็นประกันรับมือวันสิ้นโลกในอนาคต เราจะไม่มีวันต้องใช้ชีวิตโดยไม่มี language model อีกต่อไป”