Nvidia GPU Driver Setup: Essential Steps for LLM Developers

ยุคนี้ที่ AI มาแรงแบบสุดๆ LLM น่าจะเป็นสิ่งที่ทุกบริษัทพูดถึงกัน หลายๆที่อยากให้ LLM Solution เข้ามามีบทบาทในบริษัทมากขึ้น ไม่ว่าจะเป็นการทำ Chatbot, RAG เป็นต้น สิ่งที่ตามมาก็คือ Solution เหล่านั้นต้องอยู่ใน Infrastructure ของบริษัท ไม่ว่าจะเป็น On-premises หรือ Cloud provider จาก Requirement ที่ว่าไม่อยากให้ข้อมูลต้องถูกนำไปประมวลผลที่ LLM provider ข้างนอกเช่น OpenAI
ดังนั้นงานที่จะใหม่ๆที่จะเกิดขึ้นกับชาว infra อย่างเราก็คือต้อง provision เครื่อง GPU ขึ้นมา แต่ทว่าหลังจากได้เครื่องมาแล้วยังต้องมีอะไรที่ต้อง config อีกหลายอย่าง ไม่ว่าจะเป็นการติดตั้ง driver และ tools อื่นๆ ในบทความนี้เราจะมาแนะนำวิธีการเตรียมเครื่องเบื้องต้นสำหรับทีม Infra เพื่อให้เครื่อง GPU Instance ที่เราสร้างขึ้นมานั้นพร้อมใช้งานที่สุด
เกริ่นก่อนว่า GPU ที่เราเลือกใช้หลักๆจะเป็นของ Nvidia ซึ่งเป็นหนึ่งในเจ้าตลาดที่คนใช้งานมากสุดในตอนนี้ ดังนั้นเนื้อหาทั้งหมดเราจะงานของ Nvidia เป็นตัวเล่าเรื่องนะครับ พร้อมแล้วก็ไปกันต่อ !!
ติดตั้ง Driver
การติดตั้ง Nvidia GPU Driver นั้นไม่ใช่เรื่องยากหรือซับซ้อนอย่างที่คิดนะครับ เราสามารถทำตาม Document ของทาง Nvidia ได้เลย แต่ว่าเราต้องแก้ไขบาง parameter ให้ตรงกับ OS และ CPU Architecture ที่เราเลือกใช้ ซึ่งในบทความนี้อาจจะไม่ได้เล่าครบทุกหัวข้อที่ระบุไว้ใน Document ก็ตาม แต่ว่าเราจะสอนวิธีการติดตั้งเบื้องต้นที่ให้สามารถใช้งาน GPU ได้
Nvidia driver installtion document

1.เตรียมค่า parameter ที่ต้องใช้งาน
จากตาราง Supported Linux Distributions เป็นตารางที่จะบอกเราว่า Linux ที่ support การติดตั้ง Driver มีรุ่นไหนบ้าง
3 parameter ที่เราต้องจดไว้เพื่อนำไปใช้ในขั้นตอนถัดไปคือ
- $distro
- $arch
- $arch_ext
สมมุติว่าเราใช้ Linux Ubuntu 22.04 LTS บนเครื่อง x86 เมื่อเราเทียบค่าในตารางจะได้เป็น

ค่าที่ได้จะเป็น
$distro = ubuntu2204
$arch = x86_64
$arch_ext = amd64
2.เลือก Installation guild ตาม linux distribution
ขึ้นตอนนี้จะเป็นการเลือกวิธีการติดตั้ง Driver ตาม OS ที่เราใช้งาน จากตัวอย่างผมเลือกเป็น Ubuntu ดังนั้นเราจะไปดูกันที่หัวข้อที่ 10 ที่อธิบายวิธีการติดตั้งของ Ubuntu กัน

สิ่งที่เราต้องทำก็คือ
1. ทำตาม Pre-installation ต่างๆให้ครบ
2. ติดตั้ง kernel headers และ development packages
sudo apt install linux-headers-$(uname -r)
- เลือกว่าวิธีการติดตั้งว่าจะใช้เป็น Local Repository หรือ Network Repository ซึ่งผมจะขอเลือกเป็น Network Repository นะครับ
ใน URL https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-keyring_1.1-1_all.deb
ให้เราแทนค่า $distro และ $arch ตามที่เราได้มาจากตาราง
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
Install the new cuda-keyring package
4. ติดตั้ง Driver
sudo apt install nvidia-open
driver installation
หลักจากเสร็จขั้นตอนนี้เราจะได้ติดตั้ง Nvidia Driver และ CUDA Library ลงที่เครื่องเรียบร้อยแล้ว โดยเราสามารถ verify ได้ผ่าน command
nvidia-smi
output ที่ได้จะแสดงถึงจำนวน GPU ที่ active รวมกับ utilization เบื้องต้น

- ติดตั้ง CUDA Toolkit
apt install cuda-toolkit
CUDA Toolkit Installation
เพียงเท่านี้ก็จะได้เครื่อง Linux Ubuntu ที่มี GPU พร้อมไว้ใช้งานเรียบร้อยแล้ว
NVIDIA Container Toolkit
เล่าง่ายๆมันก็คือ Tools และ Library ที่ทำให้ container สามารถใช้งาน GPU ได้ ซึ่งเราจะมาเริ่มกันที่การติดตั้ง NVIDIA Container Toolkit กันก่อน ตัวอย่างนี้เราจะเน้นไปที่ตัว Docker container ที่ผมมองว่าหลายๆคนน่าจะใช้งานกันมากที่สุด
จากตัวอย่างนี้เราจะใช้ Ubuntu เป็นตัวอย่างในการติดตั้ง
สิ่งที่ต้องติดตั้งไว้ให้พร้อมก่อน
- Container engine (Docker, Containerd)
- Nvidia GPU Driver
- Configure the production repository
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
- Update the packages list from the repository
sudo apt-get update
- Install the NVIDIA Container Toolkit packages
sudo apt-get install -y nvidia-container-toolkit
จาก 3 ขึ้นตอนนี้เราจะได้ nvidia container toolkit ที่ติดตั้งเรียบร้อยแล้ว ขั้นนตอนต่อไปเราจะต้องทำการ config container engine ที่เราใช้งานให้ใชั toolkit นี้ได้
Docker configuration
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
สำหรับ contianer engine อื่นๆสามารถดูได้จากใน Document เพิ่มเติมได้เลยนะครับ
ส่วน Kubernetes ผมจะขอยกเป็นอีกหนึ่งหัวข้อใหญ่เลยนะครับ เพราะว่ามันจะมี Tools เฉพาะอีกตัวหนึ่งที่เหมาะกับ K8S มากกว่าการมาติดตั้ง GPU Driver และ Config toolkit ลงไปทีละ Node
Monitoring Tools
ติดตั้งเสร็จ ใช้งานได้ สิ่งต่อไปที่เราควรทำก็คือการทำ Monitor การใช้งาน ง่ายสุดสำหรับการ monitor เบื้องต้นเราอาจจะใช้แค่ nvidia-smi เพื่อดูว่ามี GPU กี่ใบ มีการใช้งานเท่าไหร่บ้างแต่ว่ามันจะยังละเอียดไม่พอ ผมเลยอยากจะแนะนำ Tools อื่นๆไว้เป็นทางเลือกในการใช้งานกัน
Nvitop
Interactive cli ที่สามารถดูการใช้งาน GPU ได้อย่างละเอียด การติดตั้งก็ง่ายมากเพียงแค่
pip3 install --upgrade nvitop
จากนั้นเราเพียงใช้คำสั่งว่า
nvitop
ก็จะได้ Interactive UI แสดงขึ้นมาผ่าน terminal


ที่เราสามารถ Drill-Down เข้าไปดูในแต่ละ process ที่ทำงานอยู่ได้
NVIDIA DCGM
Official Tools ของทาง Nvidia ที่พัฒนาด้วย Golang ทำหน้าที่เป็น API ในการดึงข้อมูลใน metric ต่างๆของ GPU Cluster

สำหรับการติดตั้งบน VM ปกติ จำเป็นต้องมี GPU Driver, Docker engine พร้อมกับ Nvidia Container toolkit ติดตั้งไว้ให้เรียบร้อยก่อนจึงจะใช้งานตัว DCGM ได้
สำหรับวิธีการใช้งานผมจะขอเก็บไว้เขียนแยกเป็นอีกหนึ่งบทความเต็มเลยๆดีกว่า เพราะว่าการที่จะใช้งาน DCGM ได้อย่างเต็มที่จะต้องใช้งานร่วมกับอีกหลาย Tool เลยไม่ว่าจะเป็น Prometheus และ Grafana Dashboard
สรุปส่งท้าย
ถึงตรงนี้แล้ว ผมว่าทุกคนที่ได้อ่านจนจบน่าจะสามารถ provision VM ที่มี GPU ขึ้นมาพร้อมให้ทีมใช้งานได้แล้วแหละครับ ถ้าเราค่อยๆทำความเข้าใจกับมัน ผมว่ามันง่ายกว่าการติดตั้ง Service บางตัวซะอีก ส่วนเนื้อหาที่ติดค้างไว้ ยังไงฝากทุกคนติดตามกันต่อด้วยนะครับมันน่าจะช่วยให้ทุกคนสร้าง infrasture ได้ตั้งแต่เริ่ม dev จนไปถึง production ได้เลยแหละ