Categories
Data

#23 – แนะนำ Cloud GPU สำหรับเทรน และทดสอบ AI

ส่วนหนึ่งของงาน Data คือเทรน AI ปกติเราซื้อการ์ดจอมาใช้แต่เปลืองเงินและใช้ไฟเยอะ ในปัจจุบันมี Cloud GPU ที่ให้ใช้หลายเจ้า ในบทความนี้เรายกตัวอย่างบริการ RunPod

งานหนึ่งที่คนทำทางด้าน Data ต้องเจอคือการเทรนตัวโมเดล AI

ในปัจจุบันโมเดลที่ใช้งานสำหรับงานภาพ (Computer Vision) หรืองานข้อความ (Natural Language Processing) ก็เป็นโมเดล Deep Learning ที่มีขนาดโมเดลที่ใหญ่แบบโมเดลอย่าง Vision Transformer, GPT, BERT หรืออื่น ๆ

GPU

การเทรนโมเดลที่มีขนาดใหญ่เหล่านี้จำเป็นต้องใช้งานอุปกรณ์อย่าง GPU (Graphical Processing Unit) ที่มีสเปคสูงเพียงพอต่อการเทรน และการทดสอบโดยใช้ระยะเวลาที่น้อยที่สุดตามที่เราต้องการ ซึ่งเราก็มีคอมที่มี GPU อยู่ เสียแต่การ์ดจอนั้นสเปคต่ำไปหน่อย

GPU เป็นอุปกรณ์หนึ่งที่ใช้งานสำหรับการเล่นเกม การคำนวณทางวิทยาศาสตร์ การเรนเดอร์งาน 3D รวมถึงการใช้งานทางด้าน Artificial Intelligence/Machine Learning

Building a GPU Machine vs. Using the GPU CloudKDnuggets

เมื่อมีการ์ดจอสเปคต่ำแล้ว ต้องทำอย่างไร? วิธีหนึ่งที่คนทำกันก็คือ

  • ซื้อการ์ดจอที่มีสเปคสูงขึ้น
  • ประกอบคอมมาใหม่ในกรณีที่การ์ดจอนั้นใช้กับคอมเครื่องเก่าไม่ได้

ทั้งสองวิธีมีข้อเสีย นั่นก็คือเราจำเป็นต้องใช้เงินเยอะ แถมใช้ไฟมากกว่าเดิม ซึ่งเราไม่ได้ต้องการแบบนั้น แล้วจะทำอย่างไร?


Cloud GPU

วิธีหนึ่งเลยคือ เช่าใช้บริการอย่าง Cloud GPU (Cloud Graphical Processing Unit) [1]

Cloud GPU เป็นบริการ GPU ที่ตั้งอยู่ใน Datacenter ต่าง ๆ ตามแต่ละแห่งในโลกที่อนุญาตให้ผู้ใช้เข้ามาเช่าใช้งานผ่านทางอินเตอร์เน็ต ซึ่งบริการเหล่านี้มีเจ้าหน้าที่ดูแลให้ตลอด (Fully Managed)

บริการ Cloud GPU เหล่านี้ได้รับความนิยมมากกว่าเดิมเนื่องมาจากการมาถึงของโมเดล Large Language Model (LLM) อย่าง Mistral เป็นต้น

ข้อดีของการใช้งานเหล่านี้นอกจากใช้งานได้ง่ายแล้วยัง

  • ประหยัดค่าใช้จ่าย: โดยค่าใช้จ่ายของการใช้งาน Cloud GPU คิดเป็นต่อชั่วโมง ทำให้เราไม่จำเป็นต้องลงทุนด้วยงบจำนวนมากเพื่อซื้อการ์ดจอมาใช้งาน
  • ประสิทธิภาพดี: บริการเหล่านี้มีตัวเลือกให้เลือกได้ว่าเราต้องการใช้งานการ์ดจอกี่ตัว มีหน่วยความจำเท่าไร แลมีซีพียูเป็นอย่างไร โดยในแต่ละองค์กรสามารถเช่าใช้งานการ์ดจอหลายใบเพื่อรองรับการทำงานของแต่ละ Workload ได้
  • ไม่ต้องดูแลด้วยตัวเอง: บริการ Cloud GPU นี้เราไม่จำเป็นต้องดูแลด้วยตัวเอง บริการเหล่านี้จะมีทีมวิศวกรที่สามารถดูแลคอมพิวเตอร์ที่ให้บริการ และสามารถแก้ไขปัญหา รวมถึงให้การสนับสนุนด้านเทคนิคได้อีก ซึ่งแตกต่างกับการซื้อคอมที่มีการ์ดจอมาติดตั้งไว้ในบริษัท หรือในห้อง (On-Premises) ที่ต้องดูแลด้วยตัวเอง หรือจ้างทีมงานมาดูแลอีกทีหนึ่งทางด้าน Network, Software, Power, Disk Space และอื่น ๆ ดังนั้นแล้วทางองค์กรสามารถเปลี่ยนมาโฟกัสเป้าหมายทางธุรกิจได้

บริการเหล่านี้ก็มีหลายเจ้า ตั้งแต่เจ้าใหญ่ ๆ ที่คนรู้จักกันอย่าง

  • Amazon Web Services: ที่มี Amazon EC2 (Elastic Compute Cloud) ที่เป็น IaaS ที่ให้เช่าใช้คอมที่มีการ์ดจอ หรือใช้บริการ Amazon Sagemaker ที่รองรับการสร้าง เทรนตัวโมเดล พร้อมกับนำโมเดลไปใช้งานบน Production โดยเราไม่จำเป็นต้องดูแล Infrastructure เองเนื่องจากมีทีมงานดูแล (หรือ Fully Managed)
  • Google Cloud Platform: ที่มี Compute Engine ซึ่งเป็น IaaS ที่มีบริการให้เช่าคอมที่มีการ์ดจอใช้อยู่ หรือใช้บริการอีกอย่างก็คือ Vertex AI ที่รองรับการเทรน และการทดสอบตัวโมเดลเพื่อนำไปใช้งานบน Production
  • Microsoft Azure: ที่มีให้บริการใน Virtual Machine ซึ่งเป็น IaaS ที่มีให้เช่าคอมที่มีการ์ดจอใช้งานอยู่ หรือใช้บริการ Azure Machine Learning ที่สามารถเทรน ทดสอบตัวโมเดล พร้อมกับรองรับการนำโมเดลไปใช้งานบน Production

ข้างบนนี้เป็นตัวอย่างบริการที่ให้เช่าการ์ดจอสำหรับการนำมาใช้งานทางด้าน AI แต่ถ้าดูราคาแล้ว สำหรับคนทั่วไปที่ไม่ได้ต้องการใช้งานการ์ดจอระดับบนขนาดนั้น มันจะมีบริการ Cloud GPU ที่มีราคาถูกกว่าอย่าง

  • Paperspace ที่เป็นบริการให้เช่าการ์ดจอที่ถูกทางบริษัทคลาวด์อย่าง DigitalOcean ซื้อไป ที่รองรับการสร้าง เทรนโมเดล แถมยังนำโมเดลไปใช้งานบน Production โดยให้ใช้เป็น API ได้อีก
  • Vultr ที่เป็นผู้ให้บริการคลาวด์เช่นกัน โดยจะมีบริการ Cloud GPU ให้ใช้งาน โดยรองรับการใช้งานทางด้าน AI/ML แถมยังรองรับการนำไปใช้ทาง AR/VR, VDI, CAD ได้อีก
  • Runpod ที่เป็นบริการคลาวด์ที่รองรับการใช้งานทางด้าน AI/ML ที่ให้เช่าการ์ดจอสำหรับการสร้างกับเทรนโมเดล และมีบริการ Serverless สำหรับการนำไปใช้งานบน Production
  • นอกจากนี้ก็มีบริการอย่าง Vast.ai, Lambda และอื่น ๆ

Runpod

ตัวอย่างที่เรานำมาใช้งานคือ Runpod [2] ที่มีเซิร์ฟเวอร์ที่มีการ์ดจอให้ผู้ใช้สามารถใช้งานได้ โดยผ่านการให้บริการใน Container ที่มีชื่อเรียกว่า Pods

RunPod

การเริ่มเข้าไปใช้งาน ก่อนอื่นผู้ใช้จำเป็นต้องสมัครสมาชิกก่อน เมื่อสมัครสมาชิกแล้ว ผู้ใช้เลือกวิธีการจ่ายเงินได้ว่าจะเติมเงินเข้าไปในระบบ หรือจะผูกกับบัตรเครดิตเข้าไป

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

หน้าจอหลักของ RunPod หลัง Login

ต่อมาให้เราเลือกไปที่ GPU Cloud เพื่อเช่าใช้งานการ์ดจอ กดเข้าไปแล้วจะเจอหน้าจอเพื่อให้เลือกการ์ดจอตามที่เราต้องการ โดยแบ่งการให้เช่าออกเป็นสองประเภท ได้แก่

  • Secure Cloud ที่ให้ใช้บริการบนเซิร์ฟเวอร์ที่ตั้งอยู่ใน Tier 3/Tier 4 Data Center ที่ให้ Reliability และ Security ที่ดีกว่า แถมยังให้การ์ดจอที่ดีแบบ RTX A4000 ไปจนถึง H100 รวมถึงการ์ดเกมอย่าง RTX 3090 กับ 4090
  • Community Cloud ที่ให้ใช้บริการบนคอมพิวเตอร์ส่วนบุคคลที่เชื่อมต่อบน Peer-to-peer ที่ปลอดภัยที่มีการ์ดจอตั้งแต่ RTX A2000 ไปจนถึง H100 รวมถึงมีการ์ดเกมให้ใช้แบบ RTX 3070, 3080, 3080 Ti, 3090
Secure Cloud
Community Cloud

ผู้ใช้สามารถเลือกใช้งานเพื่อเช่าใช้การ์ดจอได้ แต่ถ้า

  • ต้องการใช้งานการ์ดจอจริงจังแนะนำ Secure Cloud
  • ไม่ต้องการจ่ายเงินเยอะ และต้องการใช้งานแปบ ๆ จบงานก็ลบ ก็ใช้แบบ Community Cloud ไปเลยก็ได้ (ซึ่งเราก็ใช้ เพราะมันถูกกว่า) โดยมีราคาเริ่มต้นประมาณ 5-6 บาทต่อชั่วโมง (ถูกกว่าร้านเกมอีก)

ต่อมา เมื่อเลือกเรียบร้อยแล้ว เราสามารถเลือก Container ที่เราต้องการใช้งานได้ โดยผู้ใช้สามารถเลือกใช้ Container ที่มีมาให้อยู่แล้วอย่าง

  • RunPod PyTorch
  • RunPod Desktop ที่มีหน้าจอ Linux Desktop ที่ให้เข้าไปใช้งานรีโหมดผ่านโปรโตคอล VNC
  • RunPod Stable Diffusion
  • RunPod Tensorflow
  • เป็นต้น

หรือผู้ใช้จะดึง Container มาจาก Container Registry อย่าง Docker Hub, GitHub Container Registry, Amazon Elastic Container Registry และอื่น ๆ

หน้าจอการตั้งค่าเพื่อสร้าง Pod สำหรับการเช่าใช้การ์ดจอบน RunPod

นอกจากนี้ ผู้ใช้สามารถตั้งค่าเพิ่มเติมที่เกี่ยวกับ Pod นั้น ๆ ได้อีกโดยผู้ใช้กดปุ่มไปที่ Customize Deployment แล้วตั้งค่า

  • Container Disk ที่ตั้งค่าขนาดพื้นที่สำหรับการใช้งานแบบชั่วคราว (Temporary) กับแบบถาวร (Persistent)
  • Volume Mount Path ที่ตั้งค่าตำแหน่งที่เราต้องการ Mount บน Disk
  • Expose HTTP กับ TCP Ports ตั้งค่าพอร์ตที่ต้องการให้เข้าถึงได้จากภายนอก
  • Environment Variables ตั้งค่าตัวแปร Environment อื่น ๆ ที่ขึ้นอยู่กับ Container ที่เลือก
หน้าจอการตั้งค่า Pod เพิ่มเติม (Customize Deployment)

เมื่อตั้งค่าทุกอย่างเรียบร้อยแล้ว ให้กด Continue ระบบจะแสดงหน้าจอรายละเอียดของ Pod ที่เราจะสร้างขึ้นเพื่อใช้งาน แถมระบุ

  • ราคาต่อชั่วโมงของเซิร์ฟเวอร์
  • ราคาต่อชั่วโมงของ Disk

เมื่อต้องการใช้งานแล้ว ให้กด Deploy

หน้าจอการ Deploy Pod

เมื่อเรากด Deploy แล้ว ระบบจะสร้าง Pod สำหรับการใช้งานการ์ดจอนั้น ๆ

หน้าจอขณะที่ระบบกำลังสร้าง Pod

เมื่อสร้างเสร็จแล้ว ระบบจะแสดง Pod ตามด้านล่างนี้ (ในตัวอย่างเราใช้การ์ดจอ RTX 3080 x 1 ที่ใช้ Container RunPod Desktop)

หน้าจอแสดงรายละเอียด Pod ที่เราสร้างขึ้น

ผู้ใช้สามารถเข้าถึงได้ผ่าน SSH, VNC หรืออื่น ๆ โดยกดปุ่มที่ Connect เมื่อกดเข้าไปแล้ว ระบบจะแสดงหน้าจอตามด้านล่างนี้ (โดยหน้าจออาจจะแตกต่างกันออกไปขึ้นอยู่กับ Container ที่เราเลือก)

ตัวอย่างนี้เรากดเข้าไปใน Pod ที่ใช้ Container อย่าง RunPod Desktop เมื่อกดเข้าไปแล้ว ระบบจะแสดงรายละเอียดตามภาพ โดยตัว Container นี้อนุญาตให้ผู้ใช้เข้าไปใช้งานได้ผ่านโปรโตคอลรีโหมดด้วยการใช้ HTTP Service (Port 6901) ให้เรากดเข้าไปที่ปุ่มนั้น

หน้าจอการเชื่อมต่อเข้ากับตัว Pod ที่สร้างขึ้น

เมื่อกดเข้าไปแล้ว ให้ใส่ Username (kasm_user) กับ Password ที่เราตั้งค่าไว้ใน Environment Variable ที่ตั้งไว้ในหน้าจอการตั้งค่า Pod เพิ่มเติม (Customize Deployment)

เมื่อใส่ข้อมูลเรียบร้อยแล้ว กดปุ่ม Login แล้วระบบจะแสดงหน้าจอตามด้านล่างนี้ ผู้ใช้สามารถเข้าไปทำอะไรก็ได้ตามที่ต้องการ รวมถึงสร้างกับเทรนโมเดล AI ได้ครับ

หน้าจอรีโหมดเข้าไปในตัว Pod ที่ใช้ Container RunPod Desktop ผ่าน HTTP Service (Port 6901)

เมื่อเราใช้งานเสร็จเรียบร้อยแล้ว ให้กดปุ่มเครื่องหมายหยุดที่มุมล่างซ้าย (Stop)

กดปุ่มที่ Stop เพื่อหยุดการใช้ Pod

เมื่อกดแล้ว ระบบจะแสดงรายละเอียดว่าเมื่อหยุด Pod แล้ว

  • เราสามารถเริ่มต้นการใช้งาน Pod อีกครั้งหนึ่ง แต่ไม่ได้การันตีว่าจะมีเซิร์ฟเวอร์นั้น ๆ ให้ใช้ในขณะนั้นขึ้นอย่กับว่ามีผู้ใช้ใช้งานเยอะหรือไม่
  • ข้อมูลที่ไม่ได้เก็บไว้ใน /workspace จะถูกลบ
  • คุณจะถูกเก็บเงิน XXX ต่อชั่วโมงสำหรับ Disk

ดังนั้นแล้ว ให้เรากด Stop Pod

หน้าจอปรากฏขึ้นเมื่อเรากดปุ่ม Stop

หลังกด Stop ระบบจะแสดงหน้าจอตามด้านล่างนี้ ให้เรากดปุ่มที่รูปถังขยะ (Terminate)

หน้าจอแสดงเมื่อ Pod นั้นถูกกดปุ่ม Stop เรียบร้อย

เมื่อเรากด Terminate แล้ว ระบบจะแสดงหน้าจอตามด้านล่างนี้ โดยกล่าวว่า

เมื่อเราลบ Pod นั้น ระบบจะลบการตั้งค่า Pod รวมถึง Disk ที่เราสร้างขึ้นไว้ การลบครั้งนี้เราจะกู้ข้อมูลกลับมาไม่ได้ คุณต้องการที่จะลบหรือไม่?

แปลจากหน้าจอ Terminate Pod

ให้เรากดปุ่ม Yes เพื่อยืนยันการลบ Pod นั้น ๆ ระบบจะลบ Pod ที่เราสร้างขึ้นครับ


สรุป

งานหนึ่งที่คนทำทางด้าน Data ต้องเจอคือการเทรนตัวโมเดล AI ที่ในปัจจุบันตัวโมเดลสำหรับงานทางด้านภาพ กับข้อความมีขนาดใหญ่ขึ้นมากกว่าเดิม ทำให้เราต้องการใช้งาน GPU

อย่างไรก็ดี การซื้อคอมที่มี GPU แรงขนาดนั้น เราจำเป็นต้องใช้เงินเยอะ แถมใช้ไฟมากกว่าเดิม ซึ่งเราไม่ได้ต้องการแบบนั้น

ในปัจจุบันมีบริการ Cloud GPU เจ้าดังแบบ Amazon Web Service, Google Cloud Platform, Microsoft Azure ที่รองรับการสร้างกับเทรนโมเดล และนำไปใช้งานบน Production

อย่างไรก็ดี สำหรับคนทั่วไปที่ไม่ได้ต้องการใช้งานการ์ดจอระดับบนขนาดนั้น มันจะมีบริการ Cloud GPU ที่มีราคาถูกกว่าอย่าง Paperspace, Vultr, Runpod, Vast.ai, Lambda และอื่น ๆ

ในบทความนี้เราจะยกตัวอย่างการใช้งานบน Runpod โดยมีราคาต่อชั่วโมงถูกมากประมาณ 5-6 บาทต่อชั่วโมง (ถูกกว่าร้านเกมอีก)

ส่งท้าย

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

ที่มา

  1. https://www.kdnuggets.com/building-a-gpu-machine-vs-using-the-gpu-cloud
  2. https://runpod.io

By Kittisak Chotikkakamthorn

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