- MLC-LLM ทำให้สามารถคอมไพล์และดีพลอย LLM บน AMD GPU ด้วย ROCm โดย Radeon RX 7900 XTX ทำความเร็วในการอนุมาน Llama 2 7B/13B ได้ถึง 80% ของ RTX 4090 และ 94% ของ RTX 3090 Ti
- GPU ทั้งสามรุ่นที่เปรียบเทียบกันมี หน่วยความจำ 24GB และแบนด์วิดท์ใกล้เคียงกัน ดังนั้นในการอนุมาน LLM ที่ไวต่อ latency คอขวดด้านหน่วยความจำจึงมีผลมากกว่าประสิทธิภาพการประมวลผล FP16
- ช่องว่างของ AMD มาจาก การรองรับซอฟต์แวร์และการปรับแต่งที่ยังไม่เพียงพอ มากกว่าตัวฮาร์ดแวร์เอง และการลงทุนใน ROCm กับการคอมไพล์สำหรับแมชชีนเลิร์นนิงก็ทำหน้าที่เป็นแกนหลักที่ช่วยลดต้นทุนการรองรับหลาย backend
- ROCm ถูกนำไปใช้กับ Radeon 7900 XTX ส่วน Vulkan ถูกนำไปใช้กับ SteamDeck AMD APU แสดงให้เห็นว่าสามารถรัน Llama-7B แบบ quantization 4 บิตบนอุปกรณ์ AMD สำหรับผู้บริโภคได้เช่นกัน
- ผลลัพธ์อิงจาก benchmark แบบ batch เดี่ยว และการปรับแต่ง attention อาจเปลี่ยนตัวเลขของทั้ง AMD และ NVIDIA ได้ จึงควรตีความโดยเผื่อ ช่วงคลาดเคลื่อน 10%
การอนุมาน LLM บน AMD GPU ด้วย ROCm
- MLC-LLM ทำให้สามารถคอมไพล์และดีพลอย LLM บน AMD GPU โดยใช้ ROCm
- ประสิทธิภาพ Llama 2 7B/13B ของ Radeon RX 7900 XTX อยู่ในระดับต่อไปนี้
- 80% ของความเร็ว NVIDIA GeForce RTX 4090
- 94% ของความเร็ว NVIDIA GeForce RTX 3090 Ti
- นอกจาก ROCm แล้วยังรองรับ Vulkan จึงขยายขอบเขตการดีพลอย LLM ไปยังอุปกรณ์อย่าง SteamDeck ที่มี AMD APU
การเปรียบเทียบฮาร์ดแวร์และคอขวดจริง
- AMD RX 7900 XTX อยู่ในตำแหน่งที่เทียบเคียงได้กับ RTX 4090 และ RTX 3090 Ti ในเชิงสเปก
- GPU ทั้งสามรุ่นมี หน่วยความจำ 24GB จึงสามารถโหลดโมเดลขนาดเดียวกันได้
- แบนด์วิดท์หน่วยความจำก็ใกล้เคียงกัน
- RTX 4090 มีประสิทธิภาพ FP16 สูงกว่า RX 7900 XTX 2 เท่า และ RTX 3090 Ti สูงกว่า 1.3 เท่า
- การอนุมาน LLM ที่ไวต่อ latency ส่วนใหญ่ติด คอขวดด้านหน่วยความจำ ดังนั้นความต่างด้านประสิทธิภาพ FP16 จึงไม่ใช่คอขวดหลักในกรณีนี้
- RX 7900 XTX ราคาถูกกว่า RTX 4090 40%
- RTX 3090 Ti เป็นผลิตภัณฑ์รุ่นก่อนหน้า จึงเปรียบเทียบราคาได้ยากกว่า และถูกใช้เป็นจุดอ้างอิง
สาเหตุของช่องว่าง AMD และแนวทางของ MLC
- เหตุผลที่ AMD ตามหลังใกล้เคียงกับการขาด การรองรับซอฟต์แวร์และการปรับแต่งสำหรับโมเดลที่เกี่ยวข้อง มากกว่าฮาร์ดแวร์
- การเปลี่ยนแปลงสองอย่างช่วยลดช่องว่างนี้
- AMD ลงทุนใน ROCm stack เพื่อไล่ตาม
- การคอมไพล์สำหรับแมชชีนเลิร์นนิงช่วยลดต้นทุนการรองรับซอฟต์แวร์ทั่วไปสำหรับหลาย backend
- การคอมไพล์สำหรับแมชชีนเลิร์นนิงไม่ได้เขียน kernel แยกโดยตรงสำหรับ ROCm หรือ CUDA แต่คอมไพล์งานแมชชีนเลิร์นนิงและทำให้การปรับแต่งเป็นอัตโนมัติ
- MLC-LLM เป็นโซลูชันดีพลอย LLM ที่อิงการคอมไพล์สำหรับแมชชีนเลิร์นนิง ซึ่งสร้างบน Apache TVM Unity
- มี workflow การพัฒนาที่เน้น Python
- รวมถึงการแปลงกราฟคำนวณ การปรับ layout และ schedule ของ GPU kernel และ API สำหรับดีพลอยแบบ native
- รองรับ CUDA, Metal, ROCm, Vulkan, OpenCL
- ขยายขอบเขตตั้งแต่ GPU ระดับเซิร์ฟเวอร์ไปจนถึงอุปกรณ์พกพาอย่าง iPhone และ Android
วิธีรองรับ AMD GPU และ APU
- เส้นทางการรองรับ AMD GPU มี ROCm, OpenCL, Vulkan และ WebGPU
- ROCm เป็น stack ที่ AMD กำลังผลักดันในช่วงหลัง และมีองค์ประกอบคล้าย CUDA
- Vulkan เป็นมาตรฐานกราฟิกสมัยใหม่ และรองรับอย่างกว้างขวางในอุปกรณ์ GPU โดยรวม
- WebGPU เป็นมาตรฐานเว็บสมัยใหม่ที่ทำให้สามารถรันการคำนวณในเว็บเบราว์เซอร์ได้
- ซอฟต์แวร์แมชชีนเลิร์นนิงที่สร้างโซลูชันนอกเหนือจาก CUDA ยังมีน้อย และต้นทุนวิศวกรรมในการทำ stack ซ้ำสำหรับฮาร์ดแวร์ใหม่หรือโมเดลการเขียนโปรแกรม GPU ใหม่แต่ละแบบนั้นสูง
- MLC รองรับหลายเส้นทางด้วย การสร้างโค้ดอัตโนมัติ โดยไม่ต้องเขียน GPU kernel ใหม่สำหรับแต่ละ backend
- ประสิทธิภาพจริงขึ้นอยู่กับคุณภาพของ GPU runtime ระดับล่างและความพร้อมใช้งานบนแต่ละแพลตฟอร์ม
การใช้งานการปรับแต่ง ROCm
- เลือกใช้ ROCm สำหรับ Radeon 7900 XTX และ Vulkan สำหรับ SteamDeck APU
- ROCm stack ทำงานได้ทันที และด้วย pipeline การพัฒนาบน Python ของ TVM Unity จึงเพิ่มเวอร์ชันที่ปรับแต่งแล้วได้ภายในไม่กี่ชั่วโมง
- การรองรับ ROCm นำองค์ประกอบเดิมกลับมาใช้ใหม่
- pipeline ทั้งหมดของ MLC สำหรับ target เดิมอย่าง CUDA และ Metal
- การวางแผนหน่วยความจำ
- operator fusion
- พื้นที่การปรับแต่ง GPU kernel แบบทั่วไปที่เขียนด้วย TVM TensorIR
- flow การสร้างโค้ด ROCm ของ TVM ที่สร้าง ROCm kernel ระดับล่างผ่าน LLVM
- pipeline ทั้งหมดของ MLC สำหรับ target เดิมอย่าง CUDA และ Metal
- โค้ดที่สร้างขึ้นสามารถ export เป็น shared library หรือ static library และเรียกใช้ได้จาก CLI, Python, REST API
เงื่อนไขและการตีความ benchmark Llama 2
- benchmark วัด Llama 2 7B และ 13B ด้วย quantization 4 บิต
- ประสิทธิภาพการ decode วัดโดยใส่ prompt token เดี่ยวและสร้าง token 512 ตัว
- ผลลัพธ์ทั้งหมดอิงจาก การอนุมานแบบ batch เดี่ยว
- ณ release ROCm 5.6 ประสิทธิภาพการอนุมานแบบ batch เดี่ยวทำได้ถึง 80% ของความเร็ว NVIDIA 4090
- baseline ของ CUDA ถือว่าอยู่ในระดับสูงสุดในขณะนั้นสำหรับงานดังกล่าว
- ยังมีพื้นที่ให้ปรับปรุง เช่น การปรับแต่ง attention ที่ดีขึ้น และหากการปรับแต่งดังกล่าวถูกนำเข้า MLC ตัวเลขของทั้ง AMD และ NVIDIA ก็อาจดีขึ้น
- หากการปรับแต่งถูกใช้งานเฉพาะฝั่ง NVIDIA ช่องว่างอาจเพิ่มจาก 20% เป็น 30% จึงแนะนำให้เผื่อ ช่วงคลาดเคลื่อน 10% ในการตีความตัวเลข
เงื่อนไขการรันเองและตัวอย่าง
- มี pre-built wheel และคำแนะนำการรันสำหรับทำซ้ำ benchmark
- เงื่อนไขการรันคือ AMD GPU ที่ใช้งาน ROCm 5.6 ขึ้นไปบน Linux
- การติดตั้งแพ็กเกจ MLC แบบ pre-built ที่เปิดใช้ ROCm ให้ทำตาม เอกสารทดลองใช้ MLC-LLM
- ตัวอย่าง Python โหลดโมเดล
Llama-2-7b-chat-hf-q4f16_1ด้วยmlc_chat.ChatModuleและวัดประสิทธิภาพด้วยbenchmark_generate("Hi", generate_length=512) - MLC-LLM ยังมี CLI แบบโต้ตอบ แต่บน ROCm ต้อง build CLI จาก source และให้ทำตาม เอกสารการ build CLI
การใช้ Vulkan และหน่วยความจำรวมบน SteamDeck
- SteamDeck ถูกใช้เป็นตัวอย่างของกลุ่มอุปกรณ์ AMD ที่กว้างขึ้นซึ่งติดตั้ง AMD APU
- GPU VRAM ที่ใช้ได้บน ROCm ถูกจำกัดไว้ที่ 4GB ใน BIOS
- ไดรเวอร์ Mesa Vulkan ทำให้ buffer ใช้งานได้เกินข้อจำกัดนี้ผ่านหน่วยความจำรวม สูงสุดถึง 16GB
- ความจุหน่วยความจำนี้เพียงพอสำหรับรัน Llama-7B แบบ quantization 4 บิต
- ผลลัพธ์จึงยืนยันความเป็นไปได้ในการรองรับ LLM บนอุปกรณ์ AMD สำหรับผู้บริโภคหลากหลายประเภท
งานในอนาคตและลิงก์โครงการ
- ในยุค generative AI ความพร้อมใช้งานของฮาร์ดแวร์กลายเป็นประเด็นสำคัญ
- การคอมไพล์สำหรับแมชชีนเลิร์นนิงช่วยบรรเทาปัญหานี้ได้ โดยทำให้ การดีพลอยทั่วไปประสิทธิภาพสูง บน backend ฮาร์ดแวร์หลายแบบเป็นไปได้
- งานวิจัยปัจจุบันมุ่งเน้น GPU ระดับผู้บริโภค
- จากประสบการณ์เดิม การปรับแต่ง MLC สำหรับ GPU ผู้บริโภคบางครั้งสามารถ generalize ไปยัง cloud GPU ได้ เช่น จาก RTX 4090 ไปสู่ A100 และ A10g
- ขอบเขตงานในอนาคตมีดังนี้
- การรองรับ batching และ multi-GPU
- การผสานรวมกับ ecosystem ของ PyTorch
- การรองรับวิธี quantization และสถาปัตยกรรมโมเดลเพิ่มเติม
- การขยายการปรับแต่งอัตโนมัติไปยัง backend ฮาร์ดแวร์เพิ่มเติม
- NVIDIA ยังคงอยู่ในตำแหน่งผู้นำด้วยนวัตกรรมต่อเนื่อง และสภาพแวดล้อมอาจเปลี่ยนไปตามฮาร์ดแวร์ใหม่อย่าง H100 และวิวัฒนาการของซอฟต์แวร์
- คู่มือ MLC-LLM มีอยู่ที่ หน้าโครงการ และซอร์สโค้ดอยู่ใน GitHub repository
ยังไม่มีความคิดเห็น