ການປັບແຕ່ງໂມເດວ Deep Learning ສຳລັບອຸປະກອນມືຖືດ້ວຍ TFLite ຂັ້ນສູງ
ການປັບແຕ່ງໂມເດວ Deep Learning ສຳລັບອຸປະກອນມືຖືດ້ວຍ TFLite ຂັ້ນສູງ
ສະບາຍດີນັກພັດທະນາ ແລະ ວິສະວະກອນ AI ທຸກທ່ານ. ໃນຍຸກທີ່ຄວາມສາມາດຂອງ Deep Learning (DL) ກ້າວໄປຢ່າງກ້າວກະໂດດ, ພວກເຮົາສາມາດສ້າງໂມເດວທີ່ສະຫຼາດໄດ້ຫຼາຍຂຶ້ນ. ແຕ່ສິ່ງທ້າທາຍທີ່ໃຫຍ່ທີ່ສຸດສຳລັບນັກພັດທະນາໃນລາວ ບໍ່ແມ່ນການຝຶກສອນ (Training) ໂມເດວເທິງ Server ຫຼັກລ້ານ, ແຕ່ແມ່ນການນຳເອົາໂມເດວເຫຼົ່ານັ້ນມາແລ່ນເທິງ “ສະມາດໂຟນທົ່ວໄປ” ຂອງປະຊາຊົນໃຫ້ໄດ້ຢ່າງລ່ຽນໄຫຼ ແລະ ບໍ່ຕ້ອງເພິ່ງພາອິນເຕີເນັດຕະຫຼອດເວລາ (Edge AI).
ລອງນຶກພາບແອັບພລິເຄຊັນກວດຈັບພະຍາດພືດໃນສວນກາເຟທີ່ເມືອງປາກຊ່ອງ, ຊຶ່ງບາງພື້ນທີ່ອາດມີສັນຍານອິນເຕີເນັດທີ່ຈຳກັດ, ຫຼື ລະບົບກວດຈັບປ້າຍທະບຽນລົດແບບ Real-time ຕາມທ້ອງຖະໜົນໃນນະຄອນຫຼວງວຽງຈັນທີ່ລົດຕິດຂັດ. ການສົ່ງຮູບພາບເຂົ້າໄປປະມວນຜົນຢູ່ Cloud ຕະຫຼອດເວລາອາດເຮັດໃຫ້ເກີດຄວາມຊັກຊ້າ (Latency) ແລະ ສິ້ນເປືອງແບັດເຕີຣີ. ດັ່ງນັ້ນ, ທັກສະການເຮັດ Model Optimization ຈຶ່ງເປັນສິ່ງທີ່ວິສະວະກອນ AI ຂັ້ນສູງຂາດບໍ່ໄດ້.
ບັນຫາຄໍຂວດຂອງການປະມວນຜົນເທິງອຸປະກອນມືຖື (Mobile Bottlenecks)
ໂມເດວ Deep Learning ມາດຕະຖານເຊັ່ນ: ResNet50 ຫຼື VGG16 ມັກຈະໃຊ້ Parameters ຫຼາຍລ້ານຕົວ ແລະ ກິນພື້ນທີ່ໜ່ວຍຄວາມຈຳຫຼັກຮ້ອຍ Megabytes (MB). ນອກຈາກນີ້, ການຄຳນວນທາງຄະນິດສາດແບບ Floating-Point 32-bit (FP32) ຍັງຮຽກຮ້ອງພະລັງງານຈາກ CPU/GPU ສູງຫຼາຍ, ເຮັດໃຫ້ເກີດ 3 ບັນຫາຫຼັກກະທົບຕໍ່ຜູ້ໃຊ້:
- Memory Footprint: ແອັບມີຂະໜາດໃຫຍ່ເກີນໄປ, ດາວໂຫຼດຍາກ.
- Inference Latency: ປະມວນຜົນແລະຕອບສະໜອງຊ້າ (Low FPS).
- Power Consumption: ກິນແບັດເຕີຣີ ແລະ ເຮັດໃຫ້ສະມາດໂຟນຮ້ອນໄວ.
ສິລະປະແຫ່ງການຫຍໍ້ຂະໜາດ: Quantization
ສຳລັບນັກພັດທະນາຂັ້ນສູງ, ການຫຍໍ້ແຕ່ຂະໜາດ Architecture ອາດບໍ່ພຽງພໍ. ເຮົາຕ້ອງລົງເລິກເຖິງລະດັບ Precision ຂອງໂມເດວ ຜ່ານເຕັກນິກທີ່ເອີ້ນວ່າ Quantization.
Quantization ແມ່ນການແປງຄ່າ Weights ແລະ Activations ຂອງໂມເດວ ຈາກ FP32 ໃຫ້ກາຍເປັນຮູບແບບທີ່ນ້ອຍລົງ ເຊັ່ນ: Float16 (FP16) ຫຼື Integer 8-bit (INT8).
ສົມຜົນພື້ນຖານຂອງການແປງຄ່າ (Affine Quantization) ແມ່ນ:
r = S * (q - Z)
ໂດຍທີ່:
rໝາຍເຖິງຄ່າຈິງ (Real value - FP32)qໝາຍເຖິງຄ່າທີ່ຖືກ Quantize ແລ້ວ (INT8)S(Scale) ແມ່ນຄ່າສະເກວ (FP32)Z(Zero-point) ແມ່ນຈຸດສູນຂອງຄ່າ INT8
ການເຮັດ INT8 Quantization ສາມາດຫຼຸດຂະໜາດຂອງໂມເດວລົງໄດ້ເຖິງ 4 ເທົ່າ ແລະ ເພີ່ມຄວາມໄວໃນການອະນຸມານ (Inference) ໄດ້ 2-4 ເທົ່າ ເທິງໜ່ວຍປະມວນຜົນ ARM ທີ່ໃຊ້ໃນສະມາດໂຟນທົ່ວໄປໃນບ້ານເຮົາ.
ການປະຕິບັດຕົວຈິງ: TFLite Post-Training Quantization
TensorFlow Lite (TFLite) ແມ່ນເຄື່ອງມືທີ່ດີທີ່ສຸດໃນທຸກມື້ນີ້ສຳລັບການນຳໂມເດວລົງມືຖື. ນີ້ແມ່ນຕົວຢ່າງໂຄດ Python ໃນການແປງໂມເດວ Keras ໃຫ້ກາຍເປັນ TFLite ແບບ Full Integer (INT8) ເຊິ່ງຮຽກຮ້ອງໃຫ້ຕ້ອງມີ Representative Dataset ເພື່ອຊ່ວຍໃຫ້ TFLite ຄຳນວນຄ່າ Scale ແລະ Zero-point ໄດ້ຢ່າງແມ່ນຍຳ ແລະ ປ້ອງກັນບໍ່ໃຫ້ຄວາມຖືກຕ້ອງ (Accuracy) ຂອງໂມເດວຕົກລົງຫຼາຍ.
import tensorflow as tf
import numpy as np
# 1. ໂຫຼດໂມເດວ Keras ທີ່ໄດ້ຜ່ານການ Train ມາແລ້ວ (ຕົວຢ່າງ: Model ກວດພະຍາດໃບກາເຟ ເຊິ່ງ Train ດ້ວຍ Dataset ຈາກພາກໃຕ້ຂອງລາວ)
model = tf.keras.models.load_model('coffee_disease_model.h5')
# 2. ສ້າງ TFLite Converter
converter = tf.lite.TFLiteConverter.from_keras_model(model)
# 3. ກຳນົດ Optimization Flag ສຳລັບ Quantization
converter.optimizations = [tf.lite.Optimize.DEFAULT]
# 4. ສ້າງ Representative Dataset generator
# ສົມມຸດວ່າ x_train ແມ່ນຮູບພາບໃບກາເຟທີ່ຖືກ Preprocess ແລ້ວ (Normalized FP32)
def representative_data_gen():
for input_value in tf.data.Dataset.from_tensor_slices(x_train).batch(1).take(100):
# ຮັບປະກັນວ່າ data type ເປັນ float32
yield [tf.cast(input_value, tf.float32)]
converter.representative_dataset = representative_data_gen
# 5. ບັງຄັບໃຫ້ທຸກ Op ເປັນ INT8 ເພື່ອຮອງຮັບ Hardware Accelerator (ເຊັ່ນ Edge TPU ຫຼື Android NNAPI)
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.int8 # Input ຮັບເປັນ INT8
converter.inference_output_type = tf.int8 # Output ອອກເປັນ INT8
# 6. ທຳການແປງໂມເດວ (Convert)
tflite_quant_model = converter.convert()
# 7. ບັນທຶກໂມເດວ
with open('coffee_disease_model_quantized.tflite', 'wb') as f:
f.write(tflite_quant_model)
print("ແປງໂມເດວເປັນ TFLite ແບບ INT8 ສຳເລັດ!")
ຖາປັດຕະຍະກຳທີ່ເໝາະສົມສຳລັບ Edge Devices
ນອກຈາກການເຮັດ Quantization ແລ້ວ, ການເລືອກໃຊ້ Base Architecture ທີ່ອອກແບບມາເພື່ອມືຖືໂດຍສະເພາະກໍສຳຄັນບໍ່ແພ້ກັນ. ສຳລັບວຽກງານເຊັ່ນ ການວິເຄາະພາບຈະລາຈອນຢູ່ແຍກໄຟແດງນະຄອນຫຼວງວຽງຈັນ (ທີ່ຕ້ອງການຄວາມໄວລະດັບ 30 FPS+ ເພື່ອກວດຈັບປ້າຍທະບຽນ), ການໃຊ້ Standard CNN ອາດຊ້າເກີນໄປ. ແນະນຳໃຫ້ເລືອກໃຊ້:
- MobileNetV3 ຫຼື MobileNetV4: ເຊິ່ງໃຊ້ເຕັກນິກ Depthwise Separable Convolutions (ແຍກການຄຳນວນ Depthwise ສໍາລັບແຕ່ລະ Channel ແລະ Pointwise
1x1ສຳລັບລວມ Feature). ມັນຊ່ວຍຫຼຸດຈຳນວນການຄູນ-ບວກ (MACs) ລົງໄດ້ເຖິງ 8-9 ເທົ່າ ເມື່ອສົມທຽບກັບ Convolutions ແບບເກົ່າ. - EfficientNet-Lite: ຖືກປັບແຕ່ງມາເພື່ອຕັດ Operations ທີ່ບໍ່ລ່ຽນໄຫຼເທິງ Edge devices (ເຊັ່ນ Squeeze-and-Excitation networks) ແລະ ປັບແຕ່ງ Swish activation ໃຫ້ເຂົ້າກັບການປະມວນຜົນເທິງຊິບມືຖືໄດ້ດີຂຶ້ນ.
Key Takeaways
- INT8 Quantization ແມ່ນກຸນແຈສຳຄັນ: ການປ່ຽນຕົວເລກຈາກ FP32 ເປັນ INT8 ຊ່ວຍຫຼຸດຂະໜາດໂມເດວ 4 ເທົ່າ ແລະ ໄວຂຶ້ນ 3 ເທົ່າ ເຊິ່ງເໝາະສົມຫຼາຍສຳລັບສະມາດໂຟນລຸ້ນກາງເຖິງລຸ່ມ ທີ່ນິຍົມໃຊ້ກັນໃນປະເທດລາວ.
- ຢ່າລືມໃຊ້ Representative Dataset: ໃນການເຮັດ Post-Training Quantization ແບບ Full INT8, ການໃຫ້ Dataset ເປັນຕົວຢ່າງການຄຳນວນ Scale & Zero-point ຈະຊ່ວຍຮັກສາຄວາມແມ່ນຍຳ (Accuracy) ຢູ່ໄດ້ໃນລະດັບໃກ້ຄຽງກັບໂມເດວຕັ້ງຕົ້ນ.
- Edge AI ປົດລັອກຂໍ້ຈຳກັດດ້ານ Network ໃນລາວ: ການປະມວນຜົນຈົບພາຍໃນອຸປະກອນ ຊ່ວຍໃຫ້ SMEs ຫຼື ຊາວກະສິກອນລາວ ໃນພື້ນທີ່ຫ່າງໄກ ສາມາດນຳໃຊ້ເຕັກໂນໂລຊີ AI ຊັ້ນສູງໄດ້ທັນທີ ໂດຍບໍ່ຕ້ອງກັງວົນເລື່ອງສັນຍານອິນເຕີເນັດ.
ສະຫຼຸບ
ຄວາມສຳເລັດຂອງການພັດທະນາໂມເດວ AI ບໍ່ແມ່ນພຽງແຕ່ການໄດ້ຄ່າ Accuracy 99% ເທິງເຄື່ອງເຊີບເວີທີ່ມີ GPU ລາຄາແພງລະດັບສູງ, ແຕ່ແມ່ນການທີ່ເຮົາສາມາດນຳເອົາພະລັງຂອງ AI ນັ້ນ ຫຍໍ້ສ່ວນລົງມາໃຫ້ຢູ່ໃນມືຂອງຜູ້ຊົມໃຊ້ຕົວຈິງທົ່ວປະເທດລາວໄດ້ຢ່າງມີປະສິດທິຜົນ. ການເປັນຊ່ຽວຊານດ້ານ TFLite ປະສົມປະສານເທັກນິກ Model Optimization ຂັ້ນສູງ ຈະຍົກລະດັບໃຫ້ທ່ານກາຍເປັນວິສະວະກອນທີ່ສາມາດປ່ຽນທິດສະດີໃນຫ້ອງຮຽນ ໄປສູ່ແອັບພລິເຄຊັນທີ່ຊ່ວຍແກ້ໄຂບັນຫາຕົວຈິງ (Real-world local problems) ໃນສັງຄົມໄດ້ຢ່າງແທ້ຈິງ.