• 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
  • โค้ดที่สร้างขึ้นสามารถ 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

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น