Categories
Computer Data

ROG Flow X13: การตั้งค่าและทดสอบกับ AI/ML

เดิมมี Surface Pro X แต่เครื่องอืดไปหน่อยเลยหาโน้ตบุ๊คพกพาสะดวก และเหมาะกับ AI/ML เลยซื้อ ROG Flow X13 มาติดตั้งและตั้งค่าเครื่องมือแล้วลองเทคนิค FAN และ U-Net

เดิมทีเรามีโน้ตบุ๊คตัวเก่าอย่าง Surface Pro X ที่ใช้อยู่แล้วครับ เพียงแต่ช่วงนี้เครื่องอืดไปหน่อยสำหรับการใช้งานทางด้าน AI/ML ด้าน Computer Vision แถมคอมตั้งโต๊ะที่มีอยู่ก็พกพาไปไหนก็ไม่สะดวก และคอมที่แล็บก็ต้องรีโมทเข้าไปใช้งานก็ไม่สะดวกเช่นกัน เลยมองหาโน้ตบุ๊คซักตัวสำหรับการพกพา

ตอนแรกจะเอาเครื่อง MacBook Pro ที่มันออกมาใหม่ ก็มีข่าวว่า SSD รุ่นต่ำสุดมีปัญหาเรื่องความเร็ว แถมจะอัพแรมเป็น 16GB ร่วมกับพื้นที่ SSD เป็น 1TB แล้วคำนวณราคาพบว่าราคาสูงเกินกว่างบที่ตั้งไว้ (ประมาณ 60K บาท) ส่วน MacBook Pro 14 นิ้ว รุ่นที่ให้แรม 16GB นี่ถ้าอัพ SSD เป็น 1TB แล้วราคาเกินงบไปไกลกว่าเดิมอีก

ราคา MacBook Pro 14 นิ้วที่เกินงบไปเยอะเลย

สเปคที่คิดไว้

เราเลยมองหาโน้ตบุ๊คยี่ห้ออื่น โดยตั้งสเปคในใจไว้ประมาณว่า

  • CPU ที่ไม่ใช่ตัวประหยัดพลังงานแบบรหัสรุ่นลงท้ายด้วย U
  • แรมอย่างน้อย 16GB ขึ้นไป
  • มีการ์ดจอแยกยี่ห้อ NVIDIA ที่ให้แรมอย่างน้อย 4GB (ตอนแรกจะเอา 8GB พอดูราคาแล้ว เออ เอา 4GB ก็พอทดลองโมเดลได้)
  • พื้นที่ SSD ให้อย่างน้อย 1TB
  • ขนาดจอประมาณ 13-14 นิ้ว
  • น้ำหนักไม่เกิน 1.5-1.6 Kg
  • งบไม่เกิน 60,000 บาท

เมื่อคิดไว้ประมาณนี้เลยค้นหาข้อมูล รวมถึงรีวิวบนอินเตอร์เน็ตก็เจอโน้ตบุ๊คเกมมิงหลายรุ่นนะแหละฮะ โดยโน้ตบุ๊คเหล่านี้ก็มีขนาดจอใหญ่ 15-17 นิ้ว ซึ่งพกพาไปก็ไม่สะดวก ส่วนโน้ตบุ๊คที่มีจอขนาดตามที่ระบุไว้ข้างบนก็เจอโน้ตบุ๊คบางเบา ที่ใช้ซีพียูประหยัดพลังงานและไม่มีการ์ดจอแยกมาให้ (ถึงมีก็เป็นรุ่นล่าง)

ASUS ROG Flow X13 (2022)

พอค้นไปมาก็เจอรุ่น ASUS ROG Flow X13 (2022) ที่มียูทูปรีวิวว่าเร็ว แรง พกพาสะดวก แถมตรงกับที่เราระบุไว้ข้างบนคือ

  • CPU ที่ไม่ได้เป็นตัวประหยัดพลังงาน อย่าง Ryzen 9 6900HS
  • RAM ที่มีขนาด 16GB (แถมให้มาเป็น DDR5)
  • การ์ดจอแยก NVIDIA RTX 3050 Ti ที่มีแรม 4GB (น้อยไปนิด แต่พอทดลองโมเดลได้)
  • พื้นที่ SSD 1TB
  • จอ 13.4 นิ้ว ที่มีความละเอียดสูง 1920×1200 pixel (เป็นจอกางได้จนสุด 360 องศาที่เป็นจอสัมผัส และตัวจอรองรับการใช้งานปากกา อันนี้ครบเครื่อง ๆ เอาไว้อ่าน e-book ได้)
  • น้ำหนัก 1.30 Kg
  • ราคา 59,900 บาท

เราเลยไปซื้อ แล้วจะซื้อผ่านเน็ตเหรอ ก็คงไม่ แถมช่วงนี้มีงานคอมมาร์ทอีก เลยขับรถไปซื้อที่งานเลย ได้ส่วนลด ร่วมกับของแถมหลายชิ้นอีก คุ้ม

ตั้งค่าระบบปฏิบัติการ และติดตั้งเครื่องมือที่ใช้

หลังซื้อก็เอามาตั้งค่าระบบปฏิบัติการ และติดตั้งเครื่องมือให้เรียบร้อย

เมื่อได้มาแล้ว ก็แกะกล่อง ตั้งค่าระบบปฏิบัติการ และติดตั้งเครื่องมือให้เรียบร้อย โดยเครื่องมือที่เกี่ยวข้องกับงานด้านนี้ที่เราใช้อยู่ก็ได้แก่

Visual Studio Code (VS Code) เป็นเครื่องมือที่มีไว้เขียนโค้ดนะแหละฮะ โดยโปรแกรมนี้รองรับการใช้งาน Jupyter ภายในตัวเลยโดยการติดตั้ง Python Extension

Windows Subsystem for Linux (WSL 2)

Windows Subsystem for Linux (WSL 2) เป็นเครื่องมือที่อนุญาตให้เราติดตั้ง Ubuntu ภายในระบบปฏิบัติการ Windows ได้ โดยตัวนี้รองรับไดรเวอร์ NVIDIA ที่ติดตั้งอยู่บนระบบปฏิบัติการ Windows อยู่แล้ว เราไม่จำเป็นต้องติดตั้งผ่านการพิมพ์คำสั่ง apt ภายในระบบปฏิบัติการ Ubuntu อีก จุดนี้เองที่ทำให้เราใช้งานการ์ดจอได้ทันทีครับ

อย่างไรก็ตาม ถึงแม้ว่าเราจะใช้การ์ดจอได้ แต่เรายังเอามาประมวลผลสำหรับงานทางด้าน AI/ML ยังไม่ได้นะ เราจะต้องติดตั้ง NVIDIA Cuda Toolkit เสียก่อน เราติดตั้งเครื่องมือนี้ได้โดยพิมพ์คำสั่งตามด้านล่างนี้สำหรับการติดตั้ง CUDA Toolkit รุ่น 11.7

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin

sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda-repo-wsl-ubuntu-11-7-local_11.7.0-1_amd64.deb

sudo dpkg -i cuda-repo-wsl-ubuntu-11-7-local_11.7.0-1_amd64.deb
sudo apt-get update
sudo apt-get -y install cuda

เมื่อติดตั้งเสร็จแล้ว เราสามารถใช้งาน CUDA บน Ubuntu ที่ติดตั้งอยู่บน WSL 2 แล้วครับ

ต่อมา นอกจากการติดตั้ง NVIDIA CUDA Toolkit แล้ว เรามาตั้งค่าเรื่องแรมก็ต่อ เนื่องมาจากเวลาที่ใช้งาน WSL 2 เราจะพบว่าแรมที่ใช้งานกับเครื่องนี้มีขนาด 8GB ซึ่งน้อยไปหน่อย ทำให้เวลาทดสอบบางโมเดลจะพบปัญหาว่า Process นั้นถูกปิดไป (โดยจะขึ้นคำว่า Killed)

ดังนั้นแล้ว เรามาปรับแรม และตัว swap ให้มีขนาดใหญ่ขึ้น จุดนี้เราทำได้โดยสร้างไฟล์ .wslconfig ไว้ในโฟลเดอร์ C:\Users\< User ที่ใช้งานอยู่ > โดยตัวไฟล์เราตั้งค่าตามด้านล่างนี้ครับ

[wsl2]
memory=12GB
swap=4GB

เมื่อตั้งค่าเสร็จแล้ว สั่งปิด WSL 2 แล้วเปิดใหม่ได้โดยพิมพ์คำสั่งในหน้า Command Prompt ของวินโดว์ได้โดย

wsl --shutdown

จากนั้นกดเข้า Ubuntu อีกครั้ง เราจะได้แรมที่มีขนาดเพิ่มขึ้นครับ เช็คได้โดยการพิมพ์คำสั่ง

free -m

แต่ถ้าไม่เห็นผล ให้ปิดแล้วเปิดเครื่องใหม่

Miniconda 3

Miniconda 3 ที่เป็นเครื่องมือสำหรับงานทางด้าน Data Science โดยตัวนี้จะสร้าง Environment ขึ้นมา และติดตั้ง Conda, ไพทอน และไลบรารีที่จำเป็นเท่านั้นครับ ผิดกับ Anaconda 3 ที่ให้เครื่องมือเยอะกว่านั้นซึ่งไม่จำเป็นสำหรับเรา

การดาวน์โหลดและติดตั้งทำได้ไม่ยาก เพียงแค่ดาวน์โหลดตัวติดตั้งบนเว็บของ Anaconda 3 เองได้ที่ลิ้งค์นี้ครับ โดยเลือกที่ Miniconda 3 Linux 64-bit ให้ก็อปปี้ที่อยู่ลิ้งค์นั้นแล้วพิมพ์คำสั่งบน WSL 2 ว่า

wget <ที่อยู่ลิ้งค์ของ Miniconda 3>

กดปุ่ม Enter รอให้ดาวน์โหลดให้เสร็จเรียบร้อยแล้วพิมพ์คำสั่งนี้สำหรับการอนุญาตให้รันไฟล์ติดตั้ง Miniconda 3

chmod +x <ที่อยู่ไฟล์ติดตั้ง Miniconda 3>

หลังจากนั้นก็สั่งตัวติดตั้งให้ติดตั้ง Miniconda 3 โดยทำตามที่ปรากฏบนหน้าจอครับ

เมื่อติดตั้งเสร็จแล้ว ให้ติดตั้ง Library Python ที่เกี่ยวข้อง ได้แก่ Jupyter Notebook, PyTorch, Tensorflow, ONNX runtime, Numpy, Matplotlib, Pandas และอื่น ๆ โดยติดตั้งผ่านการใช้คำสั่ง conda install หรือ pip3 ก็ได้ แต่เราแนะนำให้ใช้งานผ่าน conda ก่อนครับ ถ้าแพคเกจไหนไม่มีให้ติดตั้งผ่านทางนี้ก็ค่อยติดตั้งผ่าน pip3 แทน

ขั้นตอนต่อไป เป็นการทดสอบโน้ตบุ๊คกับงาน Facial Landmark Detection

ทดสอบโน้ตบุ๊คกับ Facial Landmark Detection

เมื่อติดตั้งเสร็จแล้ว เรามาลองทดสอบประสิทธิภาพของโน้ตบุ๊คเบื้องต้นผ่านการทำ Facial Landmark Detection โดยในบทความนี้เราจะใช้เทคนิค Face Alignment Network (FAN) ที่เป็นเทคนิคการจับจุดแลนมาร์คบนใบหน้าสำหรับการนำไปใช้งานทางด้าน Facial Recognition, Head Pose Estimation และอื่น ๆ โดยเทคนิคนี้พัฒนาต่อยอดมาจาก Stacked Hourglass Network

Face Alignment Network (FAN)

สำหรับผู้อ่านสามารถดาวน์โหลด และหาข้อมูลเพิ่มเติมได้จาก GitHub Repo นี้ครับ

การใช้งานเทคนิคนี้ทำได้ไม่ยาก ทำได้โดยการติดตั้งไลบรารีเสียก่อน โดยพิมพ์คำสั่ง

pip3 install face_alignment

จากนั้นใช้งานเทคนิคนี้ได้โดย

import face_alignment, cv2
from matplotlib import pyplot as plt

fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False, device = 'cuda') #กรณีที่ใช้ CPU ให้เปลี่ยนจาก cuda -> cpu

input = cv2.imread(<ตำแหน่งรูปภาพที่ต้องการให้จับ Facial Landmark>)
preds = fa.get_landmarks(input)

เมื่อพิมพ์คำสั่งตามข้างบน ระบบจะจับจุดแลนมาร์คบนใบหน้าได้ตามที่ต้องการแล้วครับ ต่อมาเรานำจุดแลนมาร์คที่จับได้มาวาดบนภาพโดยการเขียนโค้ดตามด้านล่างนี้

img_c_landmark = input.copy()
for pred_each in preds[0]:
    cv2.circle(img_c_landmark, (int(pred_each[0]), int(pred_each[1])), 3, (0, 255, 0), -1)

plt.figure(figsize=(4, 10))
plt.title("Result")
plt.imshow(cv2.cvtColor(img_c_landmark, cv2.COLOR_BGR2RGB))
plt.show()

เมื่อทราบวิธีการเขียนโค้ดแล้ว เรานำมาเทคนิคนี้ทดสอบกับโน้ตบุ๊คด้วยชุดข้อมูล AFLW2000-3D ที่มีภาพทั้งหมด 2,000 ภาพโดยทำ Facial Landmark Detection ทีละภาพครับ แล้วได้ตัวอย่างผลลัพธ์ของการทำ Facial Landmark Detection ตามภาพด้านล่างนี้ครับ

ผลลัพธ์ของชุดข้อมูล AFLW2000 หลังการทำ Facial Landmark Deetection

เมื่อได้ผลลัพธ์เป็นภาพจากด้านบนนี้ แล้วเราจับโน้ตบุ๊คมาทดสอบความเร็วของการทำ Facial Landmark Detection เทียบกับ Google Colab และคอมที่แล็บ

ผลลัพธ์ที่ได้แสดงตามตารางด้านล่างนี้ครับ

ระยะเวลาที่ใช้ทั้งหมด (s)ระยะเวลาที่ใช้ต่อภาพ (ms)
ROG Flow X13145.5572.78
Google Colab ที่ใช้การ์ดจอ NVIDIA Tesla T4141.8970.95
คอมที่แล็บที่ใช้ Threadripper 3960X ที่ใช้การ์ดจอ RTX A2000100.7750.39
คอมที่แล็บที่ใช้ Threadripper 3960X ที่ใช้การ์ดจอ RTX A400076.5638.28
ตารางแสดงประสิทธิภาพของการทำ Facial Landmark Detection

จะพบว่าโน้ตบุ๊ครุ่นนี้ทำงานได้ช้าเมื่อเทียบกับการ์ดจอที่ใช้กับคอมที่แล็บ และ Google Colab ครับ (แต่ก็เร็วกว่าการใช้ CPU อยู่เยอะนะ)

สำหรับผู้อ่านที่สนใจ อยากจะลองทดสอบ สามารถดาวน์โหลด Python Notebook นี้ครับ

ต่อไป เราจะเอามาทดสอบการทำ Semantic Segmentation

ทดสอบโน้ตบุ๊คกับ Semantic Segmentation

เรามาลองทดสอบประสิทธิภาพของโน้ตบุ๊คเบื้องต้นผ่านการทำ Semantic Segmentation บริเวณริมฝีปากกับชุดข้อมูล CelebA-MaskHQ (ที่ผ่านการครอบบริเวณริมฝีปาก และเป็นชุดข้อมูลที่แบ่งมาสำหรับการทดสอบทั้งหมด 2,991 ภาพ) ครับ โดยในตัวอย่างนี้เราจะทดสอบกับเทคนิค U-Net ครับ

U-Net เป็นเทคนิคการทำ Semantic Segmentation หนึ่งที่มีรูปร่าง Neural Network Architecture ที่มีการย่อขยายภาพจนเป็นรูปตัว U โดยเทคนิคนี้ได้รับความนิยมสำหรับงานทางด้าน Biomedical Image Segmentation ครับ

เทคนิค U-Net

เครื่องมือสำหรับการทดสอบครั้งนี้ เราติดตั้งตามที่กล่าวไว้ข้างบนแล้ว เราติดตั้งเครื่องมือ mmCV และ mmSegmentation สำหรับการใช้งานตามที่เราเคยเขียนมาก่อน

เนื้อหาตามลิ้งค์ข้างบนอาจจะเก่าไปนิด แถมโน้ตบุ๊ครุ่นเราที่รองรับ CUDA 11.6 อยู่แล้ว เราก็ติดตั้ง mmCV รุ่นล่าสุด และ mmSegmentation รุ่นล่าสุดไปเลยก็ได้ตามใน GitHub repo ที่แปะในลิ้งค์แล้วครับ

เมื่อติดตั้งเสร็จแล้ว เราตั้งค่าโดยกำหนด Batch Size ให้น้อยลงมาพอสมควร จากเดิมที่ใช้ Batch Size 8 หรือ 16 (หรือมากกว่านั้น) มาเป็น Batch Size เท่ากับ 4 ผลลัพธ์ที่ได้จากการทำ segment บริเวณริมฝีปากได้ตามภาพด้านล่างนี้ครับ ซึ่งยัง segment ได้ไม่เป๊ะเท่าไร ต้องเอามาพัฒนาต่อ

ภาพผลลัพธ์การทำ Semantic Segmentation

เมื่อได้ผลลัพธ์แล้ว เรานำโน้ตบุ๊คทดสอบประสิทธิภาพของการ segment เทียบกับคอมที่แล็บ และ Google Colab แล้วพบว่าเครื่องนี้สามารถ segment บริเวณริมฝีปากได้เร็วตามตารางด้านล่างนี้ครับ

ระยะเวลาที่ใช้ทั้งหมด (s)ระยะเวลาที่ใช้ต่อภาพ (ms)
ROG Flow X13734.26245.49
Google Colab ที่ใช้การ์ดจอ NVIDIA Tesla T4478.76160.00
คอมที่แล็บที่ใช้ Threadripper 3960X ที่ใช้การ์ดจอ RTX A2000284.5895.14
คอมที่แล็บที่ใช้ Threadripper 3960X ที่ใช้การ์ดจอ RTX A4000211.0970.58
ตารางผลการทดสอบประสิทธิภาพของการ segment โดยใช้เทคนิค U-Net

จากผลการทดสอบนี้พบว่าเครื่องนี้ segment พื้นที่บริเวณริมฝีปากได้ช้าเมื่อเทียบกับคอมที่แล็บ และ Google Colab (แต่เร็วกว่า CPU อยู่อีกนะ)

สำหรับผู้อ่านที่สนใจ อยากจะลองทดสอบ สามารถดาวน์โหลด Python Notebook นี้ครับ

ข้อสังเกต และข้อแนะนำ

พอเห็นความเร็วของการทดสอบโมเดลทางด้าน Facial Landmark Detection และ Semantic Segmentation แล้วก็ไม่ได้แปลกใจอะไร เพราะแหมการ์ดจอที่ใช้เป็นรุ่น NVIDIA Geforce RTX 3050 Ti ที่ให้แรม 4GB มาก็แรงไปกว่าการ์ดจอ RTX A2000, A4000 ที่ใช้กับคอมที่แล็บเหรอ ก็ไม่น่าจะได้

แถมเครื่องนี้ให้แรมการ์ดจอน้อยไปนิดทำให้ใช้จำนวน Batch Size ได้จำกัด และตัวเครื่องก็เป็นโน้ตบุ๊คก็มีข้อจำกัดด้านความร้อน ส่วนตัวโน้ตบุ๊คนี้ ถ้าเราปรับเทคนิค และโมเดลให้มีขนาดเล็กลง โดยอาจจะเปลี่ยนมาใช้ MobileNet, EfficientNet หรือปรับขนาดภาพ ปรับพารามิเตอร์อื่นที่เกี่ยวข้อง ก็ช่วยทำให้โน้ตบุ๊คนี้ทำงานได้เร็วขึ้นครับ

ส่วนโมเดลที่มีขนาดใหญ่แบบ ResNet-50 หรือ ResNet-101 เป็นต้น หรือกรณีที่เทรนกับชุดข้อมูลที่มีขนาดใหญ่ที่ใช้ระยะเวลานานเป็นวัน หรือเป็นสัปดาห์ขึ้นไป เราแนะนำว่าเอาโน้ตบุ๊คนี้มาทดลองโมเดลเบื้องต้นก่อนว่าทำงานได้ดีไหม แล้วเรานำโมเดลที่ได้รับการทดลองแล้วเอามาเทรน หรือทดสอบทีละมาก ๆ บนคอมตั้งโต๊ะ หรือคอมที่แล็บ หรือบน Google Colab อีกทีน่าจะดีกว่า

ส่วนงานอื่นที่จะเอาไปใช้ก็โค้ดดิ้ง งานเอกสาร เล่นเกม และอื่น ๆ ครับ โดยการทดสอบประสิทธิภาพสำหรับการเล่นเกม อันนี้หาอ่านได้เลยตามเว็บไซต์ทั่วไป หรือดูได้ตามยูทูปในแต่ละแชนเนลครับ มีคนทดสอบเรื่องนี้ไว้เรียบร้อยครับ

By Kittisak Chotikkakamthorn

อดีตนักศึกษาฝึกงานทางด้าน AI ที่ภาควิชาวิศวกรรมไฟฟ้า มหาวิทยาลัย National Chung Cheng ที่ไต้หวัน ที่กำลังหางานทางด้าน Data Engineer ที่มีความสนใจทางด้าน Data, Coding และ Blogging / ติดต่อได้ที่: contact [at] nickuntitled.com

One reply on “ROG Flow X13: การตั้งค่าและทดสอบกับ AI/ML”