• อธิบายวิธีสร้างโมเดล GPT-2 (124M) ขึ้นมาใหม่ด้วย llm.c ภายใน 90 นาทีด้วยค่าใช้จ่าย $20
  • GPT-2 (124M) เป็นโมเดลขนาดเล็กที่สุดที่ OpenAI เผยแพร่ในปี 2019
  • หากใช้โหนด 8X A100 80GB SXM บน Lambda จะมีค่าใช้จ่ายราว $14 ต่อชั่วโมง รวมทั้งหมดประมาณ $20
    • สามารถฝึกด้วย GPU เดี่ยวได้เช่นกัน แต่จะใช้เวลานานกว่า (4-24 ชั่วโมง)

การเปรียบเทียบผลลัพธ์

  • บนชุดข้อมูลตรวจสอบ FineWeb ให้ประสิทธิภาพดีกว่าเช็กพอยต์ที่ OpenAI เผยแพร่
    • อย่างไรก็ตาม GPT-2 ถูกฝึกด้วย WebText จึงไม่ใช่การเปรียบเทียบที่ยุติธรรมทั้งหมด
  • มีการวัดความแม่นยำบน HellaSwag ด้วย และทำได้ 29.9 ซึ่งใกล้เคียงกับ 33.7 ของ GPT-3 Small (124M)
    • แซง GPT-2 (124M) ที่ได้ 29.4 ไปแล้ว
    • แต่ในที่นี้ฝึกด้วยโทเค็น 10B ขณะที่ GPT-3 ฝึกด้วยโทเค็น 300B

การตั้งค่าสภาพแวดล้อมขั้นต่ำ

  • ต้องใช้ GPU (แนะนำ Lambda Labs)
  • คู่มือนี้อ้างอิง Linux x86 64bit Ubuntu 22.04 พร้อม CUDA 12
  • ติดตั้ง miniconda แล้วติดตั้ง PyTorch nightly version (ไม่บังคับ)
  • ติดตั้งแพ็กเกจที่จำเป็นสำหรับ tokenizer
  • ติดตั้ง cuDNN เพื่อความเร็ว (ไม่บังคับ)
  • ติดตั้ง MPI เมื่อต้องการใช้หลาย GPU (ไม่บังคับ)
  • เตรียมข้อมูลชุด FineWeb 10B โทเค็นล่วงหน้า (~1 ชั่วโมง)
  • คอมไพล์ llm.c (ใช้ mixed precision และ cuDNN FlashAttention)

การรันการฝึก

  • มีตัวอย่างคำสั่งสำหรับการใช้ GPU เดี่ยว
  • หากใช้หลาย GPU (8 ตัว) ให้รันด้วย mpirun
  • คำอธิบายพารามิเตอร์หลัก
    • -i, -j : พาธข้อมูลฝึก/ตรวจสอบ
    • -o : พาธสำหรับบันทึกล็อกและเช็กพอยต์
    • -e : การกำหนดค่าเริ่มต้นโมเดล (depth 12 GPT-2)
    • -b : ขนาดไมโครบัช (หากหน่วยความจำไม่พอให้ลดลง)
    • -t : ความยาวลำดับสูงสุด
    • -d : ขนาดบัชรวม (อ้างอิงตามบทความ GPT-3)
    • -r : การตั้งค่า Recompute (ประหยัดหน่วยความจำ)
    • -z : ZeRO-1 (sharding สถานะ optimizer)
    • รวมถึงการตั้งค่าอื่น ๆ เช่น weight decay, learning rate, รอบการบันทึกเช็กพอยต์ ฯลฯ

กระบวนการฝึก

  • หากใช้โทเค็นฝึก 10B และขนาดบัช 0.5M จะคาดว่าต้องใช้ประมาณ 20K สเต็ป
  • บน A100 40GB PCIe GPU จะมีการแสดงเวลาในแต่ละสเต็ป, MFU และอัตราการประมวลผลโทเค็น
  • ช่วงต้นของการฝึกมีอาการ gradient exploding แต่แก้ได้ด้วย clipping

การทำภาพข้อมูล

  • มี Jupyter notebook สำหรับแยกวิเคราะห์ไฟล์ล็อกและสร้างกราฟเส้นโค้งการฝึก

Tokenizer

  • จำเป็นสำหรับแปลงโทเค็นจำนวนเต็มให้เป็นสตริง
  • สามารถสร้างได้ด้วยสคริปต์ PyTorch

Sampling

  • ตอนนี้ยังไม่ได้ปรับให้เหมาะกับงานอนุมาน
  • แก้โค้ดเล็กน้อยก็สามารถทำ unconditional/conditional sampling ได้

โครงสร้างโค้ด

  • การติดตั้งส่วนใหญ่รวมอยู่ในไฟล์ train_gpt2.cu
  • 500 บรรทัดแรกเป็นการตั้งค่า MPI, NCCL, cuDNN, cuBLAS เป็นต้น
  • ถัดมา 1500 บรรทัดเป็น forward/backward ของ Transformer
  • 1000 บรรทัดถัดไปเป็นการติดตั้งโมเดล GPT-2
  • 1000 บรรทัดสุดท้ายเป็นลูปการฝึก การพาร์สอาร์กิวเมนต์ เป็นต้น

โมเดล 350M

  • โทเค็น 10B ยังไม่เพียงพอ จึงใช้ 30B โทเค็น
  • ใช้เวลา 14 ชั่วโมงบน 8X A100 80GB และมีค่าใช้จ่ายราว $200

FAQ

  • รองรับการ sampling หรือไม่: รองรับ แต่ยังไม่มีประสิทธิภาพนัก
  • สามารถแชตได้หรือไม่: ตอนนี้รองรับเฉพาะ pretraining ยังไม่รองรับการ fine-tune สำหรับแชต
  • การฝึกแบบกระจายหลายโหนด: ทำได้ แต่ยังไม่ได้ทดสอบ
  • เป็น deterministic ระดับบิตหรือไม่: เกือบ deterministic แต่ยังต้องแพตช์เคอร์เนลบางส่วน
  • รองรับการฝึกด้วย FP8 หรือไม่: ตอนนี้ฝึกด้วย BF16 และมีแผนรองรับ FP8 เร็ว ๆ นี้
  • รองรับ GPU ที่ไม่ใช่ NVIDIA หรือไม่: ตอนนี้รองรับเฉพาะ C/CUDA

ความเห็นของ GN⁺

  • GPT-2 เป็นโมเดลสำคัญมากในฐานะจุดเริ่มต้นของ LLM ยุคใหม่ หลังจากนั้น GPT-3 และ LLM อื่น ๆ ก็ไม่ได้แตกต่างจาก GPT-2 อย่างมีนัยสำคัญนัก
  • โปรเจกต์นี้ช่วยให้ใครก็ตามสามารถทดลองฝึกโมเดลระดับ GPT-2 ได้ด้วยตนเองในต้นทุนที่สมเหตุสมผล น่าจะช่วยเพิ่มความเข้าใจเกี่ยวกับ LLM ได้มาก
  • อย่างไรก็ตาม ตอนนี้ยังไม่ได้ปรับให้เหมาะกับงานอนุมาน จึงยังมีข้อจำกัดหากจะนำไปใช้ในบริการจริง และยังไม่รองรับการ fine-tune ให้เป็นโมเดลสนทนา
  • ปัจจุบันรองรับเฉพาะ NVIDIA GPU แต่ในอนาคตคาดว่าจะรองรับแพลตฟอร์มที่หลากหลายขึ้น เช่น AMD หรือ Apple Silicon
  • โครงการโอเพนซอร์สที่มีเป้าหมายคล้ายกัน ได้แก่ Megatron-LM, DeepSpeed และ FairSeq ซึ่งแต่ละตัวก็มีข้อดีข้อเสียต่างกัน ควรเลือกให้เหมาะกับการใช้งาน
  • เป็นโปรเจกต์ที่น่าตื่นเต้นมากในมุมของการกระตุ้นระบบนิเวศการพัฒนา LLM และน่าจับตาต่อไปในอนาคต

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

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