รัน DeepSeek-R1-671B-Q4_K_M บน Xeon ด้วย Arc A770 1–2 ใบ
(github.com/intel)- เอกสารเริ่มต้นใช้งานอย่างรวดเร็วของ IPEX-LLM portable zip/tgz สำหรับผู้ใช้ที่ต้องการรัน llama.cpp บน Intel GPU โดยตรง โดยแพ็กเกจล่าสุดครอบคลุมถึงการรัน DeepSeek-R1-671B-Q4_K_M ด้วย Arc A770 1–2 ใบบน Xeon
- สภาพแวดล้อมเป้าหมายรองรับทั้ง Windows และ Linux และแนะนำขั้นตอนการรันโมเดล GGUF บน Intel Core Ultra/Intel Core รุ่นที่ 11–14 และ Intel Arc A-Series/B-Series GPU
- โฟลว์พื้นฐานคือเตรียมโมเดล GGUF ไว้ในเครื่อง แล้วรันผ่าน
llama-cliพร้อมตัวเลือกอย่าง-ngl 99,-c 2500,-n 2048,--temp 0 - FlashMoE สำหรับ Linux โดยเฉพาะ เป็น CLI ที่ปรับมาสำหรับรัน MoE GGUF ตระกูล DeepSeek V3/R1 และสำหรับ DeepSeek V3/R1 ต้องใช้หน่วยความจำ CPU 380GB, Arc A770 1–8 ใบ และดิสก์ 500GB
- ในสภาพแวดล้อมที่มี Intel GPU หลายแบบปนกัน โดยค่าเริ่มต้นจะใช้ GPU ทั้งหมด ดังนั้นในชุด iGPU/dGPU สามารถระบุ GPU ด้วย
ONEAPI_DEVICE_SELECTORหรือปิดการตรวจสอบด้วยSYCL_DEVICE_CHECK=0ได้
รัน llama.cpp ด้วย portable zip/tgz
- llama.cpp portable zip เป็นแพ็กเกจที่ใช้
ipex-llmเป็นฐาน สำหรับรัน llama.cpp บน Intel GPU โดยตรง - ออกแบบตามโฟลว์ portable zip/tgz เพื่อลดการติดตั้งด้วยตนเอง และ portable zip รุ่นล่าสุดครอบคลุมการรัน DeepSeek-R1-671B-Q4_K_M บน Arc A770 1 ใบหรือ 2 ใบบน Xeon
- ขอบเขตฮาร์ดแวร์ที่ตรวจสอบแล้ว:
- Intel Core Ultra processors
- Intel Core 11th~14th gen processors
- Intel Arc A-Series GPU
- Intel Arc B-Series GPU
เริ่มต้นอย่างรวดเร็วบน Windows
-
แนะนำให้อัปเดตไดรเวอร์ Intel GPU เป็นเวอร์ชันล่าสุด
-
ดาวน์โหลด IPEX-LLM llama.cpp portable zip สำหรับ Windows จาก รีลีส v2.3.0-nightly แล้วแตกไฟล์
-
ไปยังโฟลเดอร์ที่แตกไฟล์ใน
cmdcd /d PATH\TO\EXTRACTED\FOLDER
-
ผู้ใช้ที่ใช้ GPU หลายตัวสามารถตั้งค่า การเลือก GPU ก่อนรันได้
-
รันโมเดล GGUF
- ก่อนรัน ต้องดาวน์โหลดหรือคัดลอกโมเดล GGUF จากคอมมูนิตี้ไว้ในไดเรกทอรีภายในเครื่อง
- โมเดลตัวอย่างคือ
DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.ggufจาก bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF - เปลี่ยนพาธโมเดลเป็นตำแหน่งจริง แล้วรัน
llama-cli.exe
llama-cli.exe -m PATH\TO\DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf -p "A conversation between User and Assistant. The user asks a question, and the Assistant solves it. The assistant first thinks about the reasoning process in the mind and then provides the user with the answer. The reasoning process and answer are enclosed within <think> </think> and <answer> </answer> tags, respectively, i.e., <think> reasoning process here </think> <answer> answer here </answer>. User: Question:The product of the ages of three teenagers is 4590. How old is the oldest? a. 18 b. 19 c. 15 d. 17 Assistant: <think>" -n 2048 -t 8 -e -ngl 99 --color -c 2500 --temp 0 -no-cnv- เอาต์พุตตัวอย่างจะแสดงอุปกรณ์ SYCL 1 ตัวคือ
Intel Arc A770 Graphics, KV cache, SYCL compute buffer, การตั้งค่า sampler และข้อมูลประสิทธิภาพการสร้างโทเคน
เริ่มต้นอย่างรวดเร็วบน Linux
-
ตรวจสอบเวอร์ชันไดรเวอร์ GPU และหากจำเป็น แนะนำให้ติดตั้งตาม Intel client GPU driver installation guide
-
ดาวน์โหลด IPEX-LLM llama.cpp portable tgz สำหรับ Linux จาก รีลีส v2.3.0-nightly แล้วแตกไฟล์
-
ไปยังโฟลเดอร์ที่แตกไฟล์ในเทอร์มินัล
cd /PATH/TO/EXTRACTED/FOLDER
-
เมื่อใช้ llama.cpp portable zip บน Linux ไม่ควร source oneAPI
-
รันโมเดล GGUF
- เตรียมโมเดล GGUF จากคอมมูนิตี้ เช่น
DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.ggufไว้ในเครื่องเช่นเดียวกับ Windows - เปลี่ยนพาธโมเดลเป็นตำแหน่งจริง แล้วรัน
./llama-cli
./llama-cli -m /PATH/TO/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf -p "A conversation between User and Assistant. The user asks a question, and the Assistant solves it. The assistant first thinks about the reasoning process in the mind and then provides the user with the answer. The reasoning process and answer are enclosed within <think> </think> and <answer> </answer> tags, respectively, i.e., <think> reasoning process here </think> <answer> answer here </answer>. User: Question:The product of the ages of three teenagers is 4590. How old is the oldest? a. 18 b. 19 c. 15 d. 17 Assistant: <think>" -n 2048 -t 8 -e -ngl 99 --color -c 2500 --temp 0 -no-cnv- เอาต์พุตตัวอย่างมีข้อมูลการรัน เช่น รายการอุปกรณ์ SYCL,
llama_kv_cache_init,llama_init_from_model, sampler chain,n_ctx = 2528,n_batch = 4096,n_predict = 2048
- เตรียมโมเดล GGUF จากคอมมูนิตี้ เช่น
รัน DeepSeek V3/R1 ด้วย FlashMoE
-
FlashMoE เป็นเครื่องมือบรรทัดคำสั่งที่สร้างอยู่บน
llama.cppและปรับมาสำหรับการรันโมเดล MoE อย่าง DeepSeek V3/R1 -
ปัจจุบันใช้งานได้บนแพลตฟอร์ม Linux
-
โมเดล MoE GGUF ที่ทดสอบแล้ว:
-
รองรับโมเดล MoE GGUF อื่น ๆ ด้วย
-
ข้อกำหนดและข้อควรระวัง
- ข้อกำหนดสำหรับรัน DeepSeek V3/R1:
- หน่วยความจำ CPU 380GB
- Arc A770 1–8 ใบ
-
ดิสก์ 500GB
- โมเดลที่ใหญ่กว่าหรือความละเอียดแบบอื่นอาจต้องใช้ทรัพยากรมากขึ้น
- บนแพลตฟอร์มที่มี Arc A770 1 ใบ ต้องลดความยาว context เพื่อหลีกเลี่ยง OOM เช่นเพิ่ม
-c 1024ที่ท้ายคำสั่ง - บนแพลตฟอร์ม dual socket หากเปิด
SNC (Sub-NUMA Clustering)ใน BIOS และเติมnumactl --interleave=allหน้าคำสั่งรัน จะได้ประสิทธิภาพการ decode ที่ดีขึ้น - แม้ใช้ FlashMoE ก็ ไม่ควร source oneAPI
- ข้อกำหนดสำหรับรัน DeepSeek V3/R1:
-
รัน CLI
- โมเดลตัวอย่างคือ DeepSeek-R1-Q4_K_M.gguf โดยระบุพาธของไฟล์ split ไฟล์แรก
./flash-moe -m /PATH/TO/DeepSeek-R1-Q4_K_M-00001-of-00009.gguf --prompt "What's AI?" -no-cnv- เอาต์พุตตัวอย่างจะแสดงข้อมูลการรัน เช่น KV buffer ของอุปกรณ์ SYCL 8 ตัว,
pipeline parallelism enabled, graph nodes/splits,n_threads = 48,n_ctx = 4096,n_batch = 4096
-
รัน Serving
./flash-moe -m /PATH/TO/DeepSeek-R1-Q4_K_M-00001-of-00009.gguf --serve -n 512 -np 2 -c 4096-nคือจำนวนโทเคนที่จะทำนาย,-npคือจำนวน sequence สำหรับ parallel decoding,-cคือขนาด context รวม- สามารถปรับค่าให้เหมาะกับข้อกำหนดได้
- ฟีเจอร์ Serving ใช้งานได้ตั้งแต่ v2.3.0 nightly build
- เอาต์พุตตัวอย่างมี
n_slots = 2,n_ctx_slot = 2048ของแต่ละ slot, การโหลดโมเดล, chat template และสถานะรอของเซิร์ฟเวอร์http://127.0.0.1:8080
การเลือกหลาย GPU และข้อผิดพลาด SYCL
-
ตรวจพบอุปกรณ์ SYCL ที่แตกต่างกัน
- หากมี GPU ต่างชนิดปนกัน อาจเกิดข้อผิดพลาด
Detected different sycl devices - ตัวอย่างคือสถานการณ์ที่ตรวจพบ Arc A770 2 ใบพร้อมกับ iGPU Intel UHD Graphics 770 1 ตัว
- หาก GPU ไม่เหมือนกัน งานจะถูกจัดสรรตามหน่วยความจำของอุปกรณ์ และในตัวอย่าง iGPU ได้รับงานประมวลผล 2/3 ทำให้ประสิทธิภาพลดลงอย่างมาก
- มีสองทางเลือก
- ปิดใช้งาน iGPU เพื่อให้ได้ประสิทธิภาพดีที่สุด
- ปิดการตรวจสอบและใช้อุปกรณ์ทั้งหมด
set SYCL_DEVICE_CHECK=0 export SYCL_DEVICE_CHECK=0 - หากมี GPU ต่างชนิดปนกัน อาจเกิดข้อผิดพลาด
-
ระบุ GPU ที่จะใช้
- หากมี Intel GPU หลายตัว llama.cpp จะรันบน GPU ทั้งหมดโดยค่าเริ่มต้น
- หากต้องการใช้เฉพาะ GPU บางตัว ให้ตั้งค่าตัวแปรสภาพแวดล้อม
ONEAPI_DEVICE_SELECTORก่อนเริ่มคำสั่ง llama.cpp - Windows:
set ONEAPI_DEVICE_SELECTOR=level_zero:0 set ONEAPI_DEVICE_SELECTOR="level_zero:0;level_zero:1"- Linux:
export ONEAPI_DEVICE_SELECTOR=level_zero:0 export ONEAPI_DEVICE_SELECTOR="level_zero:0;level_zero:1"- ดูรายละเอียดการเลือกหลาย GPU ได้ที่ multi_gpus_selection.md
ตัวเลือกประสิทธิภาพและการตรวจสอบลายเซ็น
-
Immediate command lists
SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTSกำหนดว่าจะใช้ immediate command lists สำหรับส่งงานไปยัง GPU หรือไม่- โดยทั่วไปอาจช่วยเพิ่มประสิทธิภาพได้ แต่ก็อาจมีข้อยกเว้น จึงแนะนำให้ทดสอบทั้งกรณีเปิดและปิดตัวแปรสภาพแวดล้อมเพื่อหาประสิทธิภาพที่ดีที่สุด
- Windows:
set SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1- Linux:
export SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1- ดูรายละเอียดเพิ่มเติมได้ที่เอกสาร Level Zero immediate command lists ของ Intel
-
การตรวจสอบลายเซ็น portable zip/tgz 2.2.0
- portable zip/tgz เวอร์ชัน 2.2.0 สามารถตรวจสอบลายเซ็นได้ด้วย
openssl - ก่อนตรวจสอบ ระบบต้องติดตั้ง
opensslไว้แล้ว
openssl cms -verify -in <portable-zip-or-tgz-file-name>.pkcs1.sig -inform DER -content <portable-zip-or-tgz-file-name> -out nul -noverify - portable zip/tgz เวอร์ชัน 2.2.0 สามารถตรวจสอบลายเซ็นได้ด้วย
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
คอนฟิกนี้น่าจะให้ประสิทธิภาพไม่ดีมากนัก เพราะ VRAM ไม่พอ จึงต้องย้ายข้อมูลระหว่างหน่วยความจำ CPU และ GPU จำนวนมาก
แต่ถึงอย่างนั้นก็มีโมเดล quantized ของ DeepSeek-R1 ที่ใช้หน่วยความจำน้อยกว่า 256GB และไม่ใช่เวอร์ชัน distilled: https://unsloth.ai/blog/deepseekr1-dynamic
แม้จะวัดความต่างกับ DSR1 แบบ FP8 เต็มรูปแบบได้ยาก แต่โมเดล quantized ระดับ ~Q2 ก็ใช้งานได้ดีกว่าที่คิดพอสมควร
อีกโมเดลที่น่าพูดถึงคือ DeepSeek v2.5 ซึ่งมีพารามิเตอร์น้อยกว่า V3/R1 แต่ถ้าจะรันบนเครื่องผู้ใช้ทั่วไปก็ยังต้อง quantize แบบค่อนข้างหนัก และมีคนทำไว้แล้วเมื่อไม่นานนี้: https://www.reddit.com/r/LocalLLaMA/comments/1irwx6q/deepsee...
DeepSeek v2.5 อาจถือว่าดีกว่า Llama 3 70B ได้ด้วยซ้ำ ดังนั้นถ้าใครอยากรัน local inference ก็น่าจะเป็นโมเดลที่ควรศึกษาให้มากกว่านี้
สำหรับ IQ2_XXS / 183GB, context 16k ถ้าใช้ CPU อย่างเดียวจะได้ prompt processing 3 โทเคน/วินาที และการตอบกลับ 1.44 โทเคน/วินาที ส่วน CPU + NVIDIA RTX 70GB VRAM ได้ prompt processing 4.74 โทเคน/วินาที และการตอบกลับ 1.87 โทเคน/วินาที
ถ้า Unsloth ออก quantization ลักษณะคล้ายกันสำหรับ DeepSeek V3 ก็น่าจะมีประโยชน์มากกว่า เพราะไม่ต้องใช้ inference token จึงอาจเร็วกว่าโดยรวมแม้จะได้จำนวนโทเคน/วินาทีเท่ากัน
ตอนนี้ผมใช้ Q2_K_XL และสำหรับผมถือว่าดีพอแล้ว จุดที่ยังด้อยกว่า FP8 คือด้าน การเขียนเชิงสร้างสรรค์ ถ้าใส่ story prompt เดิมหลายรอบแล้วเทียบกับ FP8 จะเห็นความต่าง
ในงานเขียนโค้ด 1.58 บิตสร้างข้อผิดพลาดมากกว่า Q2XXS หรือ Q2_K_XL อย่างชัดเจน
https://github.com/intel/ipex-llm/blob/main/docs/mddocs/Quic...
ข้อกำหนดสำหรับการได้ เกิน 8 โทเคน/วินาที คือ หน่วยความจำ CPU 380GB, ARC A770 จำนวน 1~8 ใบ และดิสก์ 500GB
น่าจะต่ำกว่า 10,000 ดอลลาร์ และเหมือนจะยังไม่เห็นตัวเลขโทเคน/วินาที
สงสัยว่าในสถานการณ์นี้ Xeon ทำหน้าที่อะไรแน่ ทำไมถึงใช้ซีพียู x86 ตัวอื่นไม่ได้?
เมนบอร์ดเซิร์ฟเวอร์มีสล็อต DIMM ได้มากสุดถึง 16 สล็อตต่อซ็อกเก็ต และรองรับ RDIMM/LRDIMM จึงใส่ได้ทั้งจำนวนโมดูลมากกว่าและโมดูลความจุสูงกว่า
ช่วงพีคของโควิดก็เคยมี UDIMM 128GB ออกมาด้วย
เมื่อกี้ลองค้นไม่กี่นาที ก็เห็นได้ไม่ยากว่ามีตัวเลือกต่ำกว่า 1500 ดอลลาร์ก่อนบวกการ์ดจอหรือ SSD เพิ่ม และแบบ 1024GB RAM ก็เห็นต่ำกว่า 2000 ดอลลาร์
อย่างน้อยถ้าจะใส่การ์ด PCI-Express x16 3.0 แบบวิ่งเต็มความเร็วหลายใบ ก็ต้องมีPCIe laneเพียงพอด้วย ซึ่งหาได้ยากในเมนบอร์ดเวิร์กสเตชัน Intel แบบซ็อกเก็ตเดียว
ยกตัวอย่างได้ว่ามีชุดค่อนข้างถูกหลายชุดที่มาพร้อม RAM 512GB กินไฟเยอะและน่าจะเสียงดัง แต่ฮาร์ดแวร์ x86-64 จาก hp หรือ supermicro ก็ใช้แนวทางเดียวกัน โดยมากเป็นชุด 16 x 32GB DDR4 DIMM
https://www.ebay.com/itm/186991103256?_skw=dell+poweredge+t6...
https://www.ebay.com/itm/235978320621?_skw=dell+poweredge+r7...
https://www.ebay.com/itm/115819389940?_skw=dell+poweredge+r7...
สงสัยว่าทำไมถึงไม่มีใครทำ GPU ที่ใส่ RAM ได้เยอะแต่ช้ากว่าและตัวใหญ่กว่า แบบนั้นก็น่าจะใส่โมเดลใหญ่ขึ้นได้ในขณะที่ราคายังพอรับไหว
ความต้องการ GPU สำหรับ AI มากกว่าอุปทาน และเบื้องหลังความต้องการส่วนใหญ่นั้นคือเงินร้อนจากเงินอุดหนุน เงินกู้ หรือเงินลงทุนที่หาได้ GPU maker ก็สามารถดึงเงินก้อนนั้นไปได้
น่าเสียดายที่ VRAM เป็นตัวแบ่งที่สมบูรณ์แบบระหว่างผู้ใช้เบา ๆ กับผู้ใช้ที่มีเงิน คล้ายกับที่ SSO กลายเป็นตัวแบ่งที่สมบูรณ์แบบระหว่างลูกค้าองค์กรกับไม่ใช่องค์กร จนเกิด ภาษี SSO
DeepSeek ตั้งชื่อโมเดลโดยไปเรียนจาก OpenAI มาหรือเปล่า
คำว่า K_M ดูจะเฉพาะทางกับ GGUF มากกว่า และใช้อธิบายกลยุทธ์การควอนไทซ์แบบเจาะจง
ในโพสต์ควรมีข้อมูลมากกว่านี้ อยากรู้ว่าทำไมตัวเลข TPS ถึงถูกปิดด้วย x ทั้งหมด และบนชุดนี้ควรคาดหวังประสิทธิภาพระดับไหน รวมถึงถ้าเทียบกับชุด เวิร์กสเตชัน dual Epyc ที่กำลังฮิตช่วงหลังจะเป็นอย่างไร
จากการที่ในตัวอย่างเอาต์พุตมีการปิดค่าความเร็วโทเค็น/วินาทีไว้ ดูท่าทางคงรันได้ดีมากแน่ ๆ
ดูเหมือนว่าจะมีตัวเลือกอยู่บ้างสำหรับการรันอนุมาน LLM และ Stable Diffusion นอกเหนือจาก Nvidia ตอนนี้มีทั้ง Intel Arc, Apple M series และตอนนี้ก็มี AMD Ryzen AI Max แล้ว
แน่นอนว่าการรันบน Nvidia ยังคงเหมาะสมที่สุด แต่เพราะหาซื้อการ์ด Nvidia ที่มี VRAM สูงในราคาสมเหตุสมผลได้ยาก เลยทำให้อดคิดถึงอุปกรณ์ที่ไม่ใช่ Nvidia ไม่ได้อยู่เรื่อย ๆ
ถ้าไม่ได้สนใจการเทรนหรือการปรับจูนละเอียด และต้องการแค่ การอนุมานเท่านั้น วิธีเหล่านี้ใช้งานได้จริงแค่ไหน? แล้วบนเครื่อง Linux ทำได้หรือเปล่าก็สงสัยเหมือนกัน
บทความนี้จริง ๆ ก็ใกล้เคียงกับการที่ Intel ออกมาบอกว่า “เราก็ทำ GPU นะ” มากกว่า และแม้ตัวการ์ดสายประหยัดจะดีในตัวเอง แต่ระบบนิเวศยังตามหลังมากเกินไป
พูดตรง ๆ นี่เป็นด้านที่ประหยัดงบแล้วทำให้ดีจริงได้ยาก
ถ้ามี APU สำหรับ AI ออกมา ความสนใจต่อ GPU ก็น่าจะลดลงอย่างรวดเร็ว
ด้วย AMD Halo Strix หรือ Apple M3 Studio APU ที่ใช้ RAM ได้ 512GB หรือ 128GB แล้วจะไปซื้อ Nvidia 4090 ราคาแพงทำไม
Nvidia พยายามคงราคาให้สูงและประสิทธิภาพให้ต่ำไว้ให้นานที่สุดเท่าที่จะทำได้ และตอนนี้การแข่งขันก็มาถึงแล้ว Intel เองก็ทำ APU ที่ใส่ RAM มาเยอะ ๆ ได้เหมือนกัน
หวังว่า Nvidia คงกำลังกระวนกระวายอยู่บ้าง