Deploy AI Model บน Low-end Hardware: Quantization สอนทำเอง!

สอน Deploy AI Model บนเครื่องสเปคต่ำ (Low-end Hardware) โดยใช้เทคนิค Quantization

ผมเคยเจอสถานการณ์แบบนี้เมื่อปี 2025 เรากำลังพัฒนาโมเดล Natural Language Processing (NLP) สำหรับแอปพลิเคชันตอบคำถามเกี่ยวกับสินค้าภายในร้านค้าออนไลน์ของเรา โดยทีมงานต้องการให้โมเดลนี้ตอบคำถามได้แบบเรียลไทม์ แต่ปัญหาคือเครื่อง Server ที่เราใช้ตอนนั้นมี CPU เป็นแค่ Intel Celeron G5905 และ RAM แค่ 4GB ซึ่งมันช้าเกินไปสำหรับการทำ inference ด้วยโมเดลขนาดใหญ่ที่ใช้ TensorFlow หรือ PyTorch การ deploy แบบเดิมๆ ด้วยโมเดล full-precision (float32) ทำให้ระบบหน่วงเวลามากจนลูกค้าไม่พอใจ สถานการณ์นี้ทำให้เราต้องหาทางออกใหม่ๆ เพื่อให้โมเดลทำงานได้บน hardware ที่มีข้อจำกัด

ปัญหาหลักคือโมเดล AI โดยทั่วไปแล้วต้องการทรัพยากรในการประมวลผลสูงมาก ซึ่งหมายถึง CPU และ RAM ที่เยอะ ทำให้การ deploy บนเครื่องสเปคต่ำเป็นเรื่องยาก การใช้โมเดลขนาดใหญ่โดยตรงบนเครื่องที่มี resources น้อย จะทำให้ inference ช้ามากจนใช้งานไม่ได้ และในยุคที่ Cloud Computing เริ่มเป็นที่นิยม แต่ค่าใช้จ่ายในการ run model บน cloud ก็มีราคาค่อนข้างสูง ทำให้เราต้องมองหาทางเลือกอื่น

Quantization: ทางออกสำหรับ Hardware จำกัด

man in gray long sleeve shirt standing in front of blue and yellow puzzle mat
Photo by Per Lööv on Unsplash

Quantization คือเทคนิคที่ช่วยลดขนาดของโมเดล AI โดยการแปลงค่าของ weights และ activations จาก float32 (32-bit floating point) เป็น int8 (8-bit integer) หรือแม้แต่ int4 (4-bit integer) การแปลงนี้จะช่วยลดขนาดของโมเดลลงอย่างมาก (ประมาณ 4 เท่าสำหรับ int8) และยังช่วยให้การคำนวณเร็วขึ้นด้วย เนื่องจาก integer arithmetic นั้นเร็วกว่า floating point arithmetic ในปัจจุบัน เทคนิค Quantization แบบ Post-Training Quantization (PTQ) เป็นที่นิยมเนื่องจากง่ายต่อการใช้งานและไม่ต้องมีการ retraining โมเดล

การใช้ TensorFlow Lite กับ Quantization

ผมแนะนำให้ใช้ TensorFlow Lite (TFLite) ร่วมกับเทคนิค Quantization TFLite ถูกออกแบบมาสำหรับการ deploy โมเดล AI บนอุปกรณ์ที่มี resources จำกัด เช่น smartphones, embedded devices หรือ even low-end servers การใช้ TFLite กับโมเดลที่ผ่าน quantization แล้ว จะช่วยให้เราได้โมเดลที่ lightweight และสามารถ run ได้อย่างรวดเร็ว ตัวอย่างเช่น เราสามารถใช้ TFLite Converter เพื่อแปลงโมเดล TensorFlow ที่ train แล้วมาเป็น TFLite model ที่มี int8 weights


import tensorflow as tf

# Load the original TensorFlow model
model = tf.keras.models.load_model('my_model.h5')

# Convert the model to TFLite
converter = tf.lite.TFLiteConverter.from_keras_model(model)

# Perform quantization
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()

# Save the TFLite model
with open('my_model.tflite', 'wb') as f:
  f.write(tflite_model)
  
print("TFLite model created successfully!")
  

การใช้ Python 3.11 เป็น baseline ในการทำงานนี้ จะช่วยให้เราใช้ประโยชน์จาก optimizations ต่างๆ ที่มีใน Python ได้อย่างเต็มที่ การ Quantization สามารถทำได้ทั้งในระหว่าง training หรือ post-training แต่ในกรณีของเรา เราเลือกใช้ post-training quantization เพราะมันง่ายกว่าและไม่ต้อง retraining โมเดลใหม่ทั้งหมด เราใช้ `tf.lite.TFLiteConverter` เพื่อทำการ quantization และ save โมเดลเป็นไฟล์ .tflite

การใช้งาน TFLite Interpreter

a man holding a yellow marker
Photo by Lala Azizli on Unsplash

หลังจากที่เราได้ไฟล์ .tflite แล้ว เราสามารถใช้ TFLite Interpreter เพื่อ run โมเดลบนเครื่องสเปคต่ำได้ TFLite Interpreter จะทำหน้าที่ในการ decode โมเดล .tflite และทำการ inference ด้วยโมเดลที่ quantized แล้ว การใช้ Interpreter จะช่วยให้เราสามารถ deploy โมเดลบนภาษาโปรแกรมต่างๆ เช่น Python, C++, Java หรือ JavaScript ได้


import tflite.Interpreter

# Load the TFLite model
interpreter = tflite.Interpreter(model_path="my_model.tflite")
interpreter.allocate_tensors()

# Get input and output tensor details
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# Run inference
interpreter.run()

# Get the output value
output_data = interpreter.get_tensor(output_details[0]['index'])

print("Output:", output_data)
  

ตัวอย่างโค้ดนี้แสดงให้เห็นวิธีการโหลดโมเดล .tflite, allocate tensors, run inference, และ get output value การใช้ TFLite Interpreter จะช่วยให้เราสามารถ deploy โมเดลได้อย่างรวดเร็วและมีประสิทธิภาพ โดยเฉพาะอย่างยิ่งเมื่อใช้ร่วมกับ quantization

สิ่งที่ควรระวัง / ข้อผิดพลาดที่เจอบ่อย

มีบางจุดที่เราต้องระวังเป็นพิเศษเมื่อทำการ deploy AI model บนเครื่องสเปคต่ำโดยใช้ quantization ประการแรกคือ **การสูญเสียความแม่นยำ (Accuracy Loss)** การ Quantization อาจทำให้เกิดการสูญเสียความแม่นยำของโมเดลได้บ้าง โดยเฉพาะอย่างยิ่งเมื่อใช้ int4 quantization ดังนั้นเราควรทำการ evaluation โมเดลหลังจากการ quantization เพื่อตรวจสอบว่าความแม่นยำยังอยู่ในระดับที่ยอมรับได้หรือไม่ จริงๆ ผมไม่ค่อยชอบวิธีนี้เพราะมันทำให้ performance ลดลง

ประการที่สองคือ **การเลือก quantization method ที่เหมาะสม** มีหลายรูปแบบของการ quantization เช่น PTQ, Quantization Aware Training (QAT) และ dynamic quantization PTQ นั้นง่ายต่อการใช้งาน แต่ QAT มักจะให้ผลลัพธ์ที่ดีกว่า เราควรทำการทดลองเพื่อหา quantization method ที่เหมาะสมกับโมเดลของเรา

ประการที่สามคือ **การ optimization ของ code** นอกจากการ quantization แล้ว เรายังสามารถ optimization code เพื่อให้การ run โมเดลเร็วขึ้นได้ ตัวอย่างเช่น การใช้ vectorized operations หรือ การใช้ efficient data structures

สรุปและประสบการณ์ส่วนตัว

การ deploy AI model บนเครื่องสเปคต่ำโดยใช้ quantization เป็นวิธีที่มีประสิทธิภาพในการลด resource consumption ของโมเดล เทคนิคนี้เหมาะสำหรับผู้ที่ต้องการ deploy โมเดล AI บนอุปกรณ์ที่มี resources จำกัด เช่น low-end servers, embedded devices หรือ smartphones ประสบการณ์ของผมคือการใช้ TFLite ร่วมกับ quantization ทำให้เราสามารถ deploy โมเดล NLP ของเราบนเครื่อง Celeron G5905 ได้อย่างราบรื่น ซึ่งช่วยให้เราสามารถตอบคำถามเกี่ยวกับสินค้าได้อย่างรวดเร็วและมีประสิทธิภาพ ผมคิดว่าเทคนิคนี้เป็นสิ่งสำคัญสำหรับทุกคนที่ต้องการ deploy AI model บน hardware ที่มีข้อจำกัด

Next Step: เราควรศึกษาเพิ่มเติมเกี่ยวกับ Quantization Aware Training (QAT) ซึ่งจะช่วยให้เราได้โมเดลที่แม่นยำกว่าเมื่อเทียบกับ PTQ นอกจากนี้ เรายังควรทดลองใช้ dynamic quantization ซึ่งจะช่วยปรับ quantization scheme ให้เหมาะสมกับแต่ละ input สุดท้าย เราควรทำการ monitor ประสิทธิภาพของโมเดลอย่างต่อเนื่อง เพื่อให้แน่ใจว่าโมเดลยังคงทำงานได้อย่างมีประสิทธิภาพ

คำถาม

คำถาม: โมเดลที่ผ่าน Quantization แล้ว จะมีประสิทธิภาพเท่ากับโมเดล full-precision เดิมหรือไม่?

คำตอบ: ไม่เสมอไป การ Quantization อาจทำให้เกิดการสูญเสียความแม่นยำบ้าง แต่โดยทั่วไปแล้ว โมเดลที่ผ่าน Quantization แล้วจะทำงานได้เร็วกว่าโมเดล full-precision อย่างเห็นได้ชัด โดยเฉพาะอย่างยิ่งเมื่อใช้ TFLite Interpreter

คำถาม: มี quantization method อื่นๆ นอกจาก PTQ และ QAT อีกหรือไม่?

คำตอบ: มี quantization methods อื่นๆ อีก เช่น Dynamic Quantization ซึ่งปรับ quantization scheme ให้เหมาะสมกับแต่ละ input และ Post-Training Quantization (PTQ) ซึ่งง่ายต่อการใช้งานและไม่ต้องมีการ retraining โมเดล

คำถาม: เทคนิค Quantization เหมาะกับ use case ใดบ้าง?

คำตอบ: เทคนิค Quantization เหมาะกับ use case ที่ต้องการ deploy โมเดล AI บนอุปกรณ์ที่มี resources จำกัด เช่น การตอบคำถามอัตโนมัติ (question answering), การจำแนกรูปภาพ (image classification) หรือการตรวจจับวัตถุ (object detection) โดยเฉพาะอย่างยิ่งเมื่อความแม่นยำของโมเดลไม่จำเป็นต้องสูงมาก

Boonyadol Morruchai (Senior Full-stack Developer)

ผมเป็น IT Professional ที่มีประสบการณ์ในสายงานมากว่า 20 ปี เชี่ยวชาญการออกแบบระบบ Enterprise และ Automation Tools ปัจจุบันมุ่งเน้นการประยุกต์ใช้ AI (Gemini/OpenAI) เพื่อเพิ่มประสิทธิภาพในการเขียน Code และการจัดการข้อมูลขนาดใหญ่ บล็อกนี้สร้างขึ้นเพื่อแชร์ "ประสบการณ์หน้างาน" ปัญหาจริงที่เจอ และวิธีแก้ปัญหาฉบับ Senior Dev ครับ

แสดงความคิดเห็น

ใหม่กว่า เก่ากว่า