3 คะแนน โดย GN⁺ 2025-02-17 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ผลการรันโมเดล deepseek_r1_distill_llama_8b_q40 ด้วย Raspberry Pi 5 8GB จำนวน 4 เครื่อง บน distributed-llama v0.12.2 พบว่าทั้งความเร็วในการประเมินและการสร้างสูงกว่าการจัดชุด 2 เครื่อง
  • ชุด 2 เครื่องทำได้ Evaluation 7.70 tok/s, Prediction 3.54 tok/s ส่วนชุด 4 เครื่องทำได้ Evaluation 11.68 tok/s, Prediction 6.43 tok/s
  • ล็อก Prediction ของชุด 4 เครื่องแสดงประมาณ 155.60ms ต่อโทเคน ขณะที่ชุด 2 เครื่องอยู่ที่ประมาณ 282.22ms ต่อโทเคน ทำให้เห็นความแตกต่างของความเร็วการประมวลผลตามจำนวนโหนดที่เพิ่มขึ้นในโมเดลเดียวกัน
  • ผู้ใช้รายอื่นแชร์ผลบน v0.12.7 ด้วย 8 โหนด, LAN 2.5G และชุดที่ใช้ CPU Intel รุ่นเก่า ได้ Evaluation 33.64 tok/s และ Prediction 16.63 tok/s
  • สำหรับกรณีที่โปรเซสถูกปิดเพราะหน่วยความจำไม่พอบน Raspberry Pi 5 8GB จำนวน 2 เครื่อง มีคำตอบว่าจำเป็นต้อง ลดขนาดคอนเท็กซ์ ด้วย --max-seq-len 4096

ผลการรันของชุด Raspberry Pi 5 8GB

  • โมเดลที่ทดสอบคือ deepseek_r1_distill_llama_8b_q40 และเวอร์ชัน distributed-llama คือ 0.12.2
  • ชุดที่นำมาเปรียบเทียบคือ 2 x Raspberry Pi 5 8GB และ 4 x Raspberry Pi 5 8GB
ชุด Evaluation Prediction
2 x Raspberry Pi 5 8GB 7.70 tok/s 3.54 tok/s
4 x Raspberry Pi 5 8GB 11.68 tok/s 6.43 tok/s

ตัวเลขจากล็อกของชุด 2 เครื่อง

  • ชุด 2 x Raspberry Pi 5 8GB บันทึกตัวเลขต่อไปนี้ในการประเมิน
    • nBatches: 32
    • nTokens: 19
    • tokens/s: 7.70
    • 129.89 ms/tok
  • ใน Prediction บันทึกตัวเลขต่อไปนี้
    • nTokens: 77
    • tokens/s: 3.54
    • 282.22 ms/tok
  • เมื่อการรันสิ้นสุดลง ล็อกแสดงข้อความ Network is closed

ตัวเลขจากล็อกของชุด 4 เครื่อง

  • ชุด 4 x Raspberry Pi 5 8GB บันทึกตัวเลขต่อไปนี้ในการประเมิน
    • nBatches: 32
    • nTokens: 19
    • tokens/s: 11.68
    • 85.63 ms/tok
  • ใน Prediction บันทึกตัวเลขต่อไปนี้
    • nTokens: 77
    • tokens/s: 6.43
    • 155.60 ms/tok
  • ในล็อกมีการแสดงซ้ำ ๆ ระหว่างการสร้างโทเคนว่ามีการส่ง 864 kB และรับ 1191 kB

ผล 8 โหนดจากผู้ใช้รายอื่น

  • ผู้ใช้รายหนึ่งแชร์ผลจากการใช้ 8 โหนด บน distributed-llama v0.12.7
    • ส่วนใหญ่เป็น CPU Intel รุ่นเก่า แบบ 4 คอร์หรือ 6 คอร์
    • รองรับ AVX2
    • เชื่อมต่อผ่าน LAN 2.5G
  • ผลการรันของชุดนี้เป็นดังนี้
    • Evaluation: 33.64 tok/s, 29.73 ms/tok
    • Prediction: 16.63 tok/s, 60.13 ms/tok
    • จำนวนโทเคนของ Prediction คือ 245
  • คำสั่งที่ใช้มีรูปแบบเป็นการระบุโมเดล, tokenizer, --buffer-float-type q80, --nthreads 6, --max-seq-len 4096, --workers หลายตัว และ --steps 256 ให้กับ ./dllama inference

ปัญหาการรันและคำตอบ

  • มีการแชร์กรณีที่ชุด Raspberry Pi 5 8GB จำนวน 2 เครื่องแสดง RequiredMemory: 20474 MB ระหว่างรัน แล้วจบด้วย Killed
    • คำสั่งของโหนดรากมี --buffer-float-type q80, --steps 16, --nthreads 4 และที่อยู่ worker 1 ตัว
    • คำตอบคือจำเป็นต้องลด ขนาดคอนเท็กซ์ ด้วย --max-seq-len 4096
  • ผู้ใช้รายอื่นแชร์อาการที่หลังเชื่อมต่อกับ worker หลายตัวแล้ว พรอมป์ what is 99+12 ให้ผลลัพธ์เป็นเพียงช่องว่างและจุด
    • ในล็อกแสดง RopeScaling: f=8.0, l=1.0, h=4.0, o=8192, RequiredMemory: 3310 MB, Chat template: deepSeek3
    • ผู้ดูแลถามถึงเวอร์ชันที่ใช้งาน และตอบให้ตรวจสอบว่าได้ pull การเปลี่ยนแปลงล่าสุดแล้วหรือไม่ รวมถึงรันบน CPU รุ่นใด

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

 
GN⁺ 2025-02-17
ความคิดเห็นบน Hacker News
  • ประกาศต่าง ๆ ที่บอกว่ารัน Deepseek R1 บน Raspberry Pi โดยทั่วไปมักมีรูปแบบเดียวกัน: จริง ๆ แล้วใกล้เคียงกับการรัน Llama หรือ Qwen ที่ถูกปรับด้วยเทคนิคการกลั่นของ DeepSeek มากกว่า

    • โหมดความล้มเหลวที่มักเห็นในโมเดล DeepSeek ที่ถูกกลั่น คือมันไม่รู้ตัวว่ากำลัง ย่ำอยู่กับที่
      DeepSeek กระตุ้นให้โมเดลภาษาขนาดใหญ่ที่ถูกกลั่นตัดเอาต์พุตของตัวเองด้วยคำว่า “Wait.” เพื่อให้เกิดการให้เหตุผลได้ในระดับหนึ่ง แต่ก็อ่อนกว่าความสามารถในการให้เหตุผลของโมเดลเต็มมาก และอาจติดลูปที่เอาแต่สงสัยตัวเองด้วยการพูด “Wait.” ซ้ำไม่รู้จบ แทนที่จะพัฒนาข้อสรุปที่ได้ไปแล้วด้วยนัยใหม่ ๆ
    • ไม่แน่ใจว่าชื่อที่ส่งเข้ามาถูกเปลี่ยนหรือเปล่า แต่ตอนนี้ระบุชัดเจนว่าเป็น Deepseek R1 Distill 8B Q40 ดังนั้นถ้าเรียกว่า “Deepseek R1” ก็ถือว่าบิดเบือนผลลัพธ์จริง ๆ
      อย่างไรก็ตาม ถ้าดูส่วน Distilled Model Evaluation[1] ในรีโพซิทอรี R1 อย่างเป็นทางการ DeepSeek-R1-Distill-Llama-8B ก็ถือว่าค่อนข้างดี และในบาง benchmark ยังบอกว่าดีกว่า 4o-0513 กับ Sonnet-1022 ด้วย
      ต้องจำไว้ด้วยว่ามีการ sample จาก formal grammar อยู่ด้วย ใน llama.cpp มี GBNF และตอนนี้ก็มีการตั้งค่า lazy grammar[2] แล้ว ทำให้ใช้งานได้ค่อนข้างดีในบางกรณี หมายความว่า grammar จะเข้ามาแทรกภายหลัง
      นอกจากนี้ยังมีช่องให้ fine-tune เพิ่มเติมได้อีก หลายบริษัทตอนนี้ให้บริการ “RFT” ซึ่งเป็นวิธีเพิ่มความสมบูรณ์ให้ dataset แบบ supervised fine-tuning ทั่วไปด้วยข้อมูล reasoning สังเคราะห์ที่สร้างโดย R1 ตัวใหญ่ ดังนั้นผลลัพธ์นี้อาจเป็นผลลัพธ์เบื้องต้นที่มีคุณค่ามากกว่าที่คิดมาก
      การ decode ที่ 6 tok/s ไม่ได้เร็ว แต่คนที่ใช้ Raspberry Pi ไม่ค่อยสนใจเรื่องแบบนั้นนัก
      [1] https://github.com/deepseek-ai/DeepSeek-R1#distilled-model-e...
      [2] https://github.com/ggerganov/llama.cpp/pull/9639
    • อยากให้ช่วยอธิบายว่า วิธีการกลั่น นี้หมายถึงอะไร สำหรับวิศวกรซอฟต์แวร์ที่งานหลักไม่ใช่ machine learning
      สงสัยว่า R1 ฝึกโมเดล Llama หมายความว่าอย่างไร และวิธีการกลั่นของ DeepSeek มีอะไรพิเศษ
    • นี่เป็นแค่ LLaMa ที่ fine-tune ให้สร้าง chain of thought คล้าย DeepSeek เท่านั้น
      ถ้าเป็นโมเดล ‘กลั่น’ ที่ถูกต้อง ก็ควรถูกฝึกตั้งแต่แรกให้เลียนแบบโมเดลที่ใหญ่กว่าอย่างสมบูรณ์ แต่กรณีนี้ไม่ได้เกิดขึ้น
    • ไม่ชอบเลยที่โมเดลพวกนี้สามารถถูกทำแบรนด์ในชื่อ Deepseek R1 ได้
  • เช่นเคย ตัวเลข tok/s ต้องดูแบบเผื่อใจอย่างมาก
    ในเดโม “แก้” คำถามที่มีไม่ถึง 500 โทเคน การที่ทำได้เองก็ยังน่าทึ่งอยู่ แต่สำหรับปัญหาจริงและโมเดลที่ “คิด” ด้วยความยาว context ที่ใช้งานได้จริง เช่น 8~16k โทเคน จะเข้าใกล้ความเร็วนั้นได้ยาก แม้แต่ Epyc ที่มีหลาย channel พอความยาว context เลยประมาณ 4096 ก็ร่วงลงมาเหลือ 2~4 tok/s

    • ลองดูการรันยาว ๆ บน Raspberry Pi 5 สี่เครื่อง คือดูว่าการ predict เป็นอย่างไร
      pos=0 => P 138 ms S 864 kB R 1191 kB Connect
      pos=2000 => P 215 ms S 864 kB R 1191 kB .
      pos=4000 => P 256 ms S 864 kB R 1191 kB manager
      pos=6000 => P 335 ms S 864 kB R 1191 kB the
    • หุ่นยนต์ตัวเล็ก ๆ มักจัดการกับ ปัญหาเล็ก ๆ
      แค่โมเดลช่วยได้นิดหน่อย ก็อาจทำให้มันมีความสามารถมากกว่าตอนนี้มาก
  • ผลลัพธ์ก็ไม่ได้แย่ แต่ถ้าจะจ่าย £320 กับ Pi 5 สี่เครื่อง ก็หา 3080 มือสอง 12GB ได้ และความเร็วโทเคนน่าจะเร็วกว่าเกิน 10 เท่าด้วย

    • หรือจะต่อ GPU 12GB หรือ 16GB เข้ากับ Pi 5 เครื่องเดียวโดยตรง แล้วได้ มากกว่า 20 tok/s แม้กับโมเดลที่ใหญ่กว่า
      https://github.com/geerlingguy/ollama-benchmark?tab=readme-o...
    • ถ้าเป็น “Deepseek R1 Distill 8B Q40 on 1x 3080, 60.43 tok/s (eval 110.68 tok/s)” ก็คงไม่ได้ขึ้น Hacker News หรอก
    • ถึงอย่างนั้น การใช้พลังงานคือ 48W เทียบกับ 320W
    • ใช้ 3060 12GB สักสองใบก็เป็นอีกวิธีหนึ่ง
  • จุดที่น่าสนใจตรงนี้คือสามารถรัน inference ของ Llama แบบ กระจายศูนย์ ข้ามคอมพิวเตอร์หลายเครื่องได้

    • ถ้าอย่างนั้น สิ่งที่เทียบเท่ากับ distributed GPU อยู่ที่ไหนกันนะ
      อาจเชื่อมเครื่องมือเข้ากับโมเดล R1 ตัวเต็มที่ช้าแต่กระจายอยู่ทั่วโลกแบบ Seti@HOME แล้วให้มัน reasoning งานที่ลึกและซับซ้อนแบบสาธารณะได้หรือเปล่า
  • นี่คือ คลัสเตอร์ Beowulf เวอร์ชันสมัยใหม่

    • พูดตรง ๆ ว่าไม่ค่อยเข้าใจมีม Raspberry Pi cluster
      ถ้าเพิ่มเงินอีกนิดจาก Pi 5 สี่เครื่อง ก็หาเซิร์ฟเวอร์ Dell 1U บน eBay ที่มี CPU Epyc 32 คอร์กับหน่วยความจำ 64GB ได้ และประสิทธิภาพอย่างน้อยก็น่าจะสูงกว่าระดับเลขหลักเดียว
      ถ้าจะพูดถึง Beowulf cluster ใน homelab อย่างน้อยก็ควรรันชุดอย่าง Slurm+Lustre หรือ k8s+OpenStack+Ceph บน compute node ที่ต่อเครือข่าย FDR Infiniband ราคาถูกมาก ๆ ผมว่าของแบบนี้ที่มี node ช้า ๆ สี่ตัวแล้วยัง scale แบบเชิงเส้นไม่ได้ด้วยซ้ำ มันดูยากที่จะยอมรับ
  • ยังไม่เห็นหรือไม่เข้าใจว่า Raspberry Pi หลายเครื่องถูก ใช้งานแบบขนาน อย่างไร
    ถ้ามีใครชี้ทางให้ได้ก็คงดี

  • จะถึงเมื่อไหร่กันที่เราจะติดตั้ง เครื่องมือ AI เจ๋ง ๆ รุ่นใหม่นี้ได้ด้วย apt-get install?

    • บน Mac การเริ่มจาก brew install ollama อาจเป็นจุดเริ่มต้นที่ดี
    • จะเป็นไปได้เมื่อดิสโทรที่ใช้อยู่ตอนนี้เริ่มแพ็กเกจเครื่องมือโมเดลภาษาขนาดใหญ่ หรือย้ายไปใช้ดิสโทรที่ทำแบบนั้น
    • ollama pull ก็ค่อนข้างใกล้เคียงแล้ว
    • แม้จะไม่ใช่ apt-get อย่างเคร่งครัด แต่คอมโพเนนต์โครงสร้างพื้นฐานส่วนใหญ่ภายใต้ “เครื่องมือ AI” ติดตั้งได้ด้วย conda install
    • หรือจะดาวน์โหลด lm-studio เวอร์ชัน GUI ที่หน้าตาดีก็ได้
      มันช่วยบันทึกบทสนทนาและทำให้ดาวน์โหลดโมเดลได้ง่ายด้วย
  • ถ้าอยากลองโมเดลนี้บน Mac โมเดลที่ใช้ดูเหมือนจะเป็น DeepSeek-R1-Distill-Llama-8B หรือใกล้เคียง ซึ่งรันด้วย ปลั๊กอิน llm-mlx ตัวใหม่ได้แบบนี้
    brew install llm # or pipx install llm or uv tool install llm
    llm install llm-mlx
    llm mlx download-model mlx-community/DeepSeek-R1-Distill-Llama-8B
    llm -m mlx-community/DeepSeek-R1-Distill-Llama-8B 'poem about an otter'
    ประสิทธิภาพก็ค่อนข้างดี ตอนที่เพิ่งรันได้ 22 tokens/second: https://gist.github.com/simonw/dada46d027602d6e46ba9e4f48477...

  • ถ้าเพิ่มหน่วยความจำจะช่วยไหม? ล่าสุดมี Rpi 5 ที่ใส่ RAM 16GB ออกมาแล้ว

    • ความเร็วในการ inference ขึ้นอยู่กับ ความเร็วอ่าน/เขียน มากกว่าขนาดหน่วยความจำ
      ตราบใดที่โมเดลใส่ลงหน่วยความจำได้ สิ่งที่กำหนดการทำงานจริงคือแบนด์วิดท์หน่วยความจำ
    • ตราบใดที่โมเดลและบริบทใส่ลงหน่วยความจำได้ ความจุหน่วยความจำเองก็ไม่ได้ช่วยอะไร
      โมเดล Q4 พารามิเตอร์ 8B น่าจะใส่ใน Pi 8GB เครื่องเดียวได้
    • Pi 5 รุ่น 16GB เข้ามาแล้วก็หายไปอย่างรวดเร็ว
      ตอนที่ Adafruit มีของเข้าเมื่อไม่นานนี้ ผมแทบจะซื้อมาได้เครื่องหนึ่ง แต่ไม่นานก็ขายหมดอีกทันที
      ถึงอย่างนั้น ไม่เกี่ยวกับประสิทธิภาพ ยังมีบางโมเดลที่ต้องใช้เกิน 8GB ในการรัน จน Ollama รันไม่ได้เลย
  • ต้องมีผลิตภัณฑ์แบบ Alexa หรือ Google Home
    เพียงแต่แทนที่จะเชื่อมต่อกับคลาวด์ ควรเป็นรูปแบบที่รัน โมเดลภาษาขนาดใหญ่แบบโลคัล ไม่รู้ว่าทำไมยังไม่มี หรือยังไม่มีใครทำอยู่

    • ผมเดาว่าอาจเป็นเพราะราคา
      โมเดลภาษาขนาดใหญ่ที่ดีมีราคาแพง ดังนั้นคำถามจริง ๆ คือจะทำให้ถูกพอจนยังเหลือมาร์จิน และใส่โมเดลที่มีประโยชน์พอให้คนซื้อได้หรือไม่
    • ใช้ Home Assistant ก็ไปในทางคล้าย ๆ กันได้ในระดับหนึ่ง
      ไม่แน่ใจว่ามีการใช้เครื่องมือได้หรือเปล่า แต่สามารถเปิดเผยสิ่งที่น่าถามได้ เช่น สภาพอากาศ
    • ถ้าพูดถึงโมเดลภาษาขนาดใหญ่แบบโลคัล หมายถึงอะไรอย่าง Ollama + llamacpp ใช่ไหม?