Nvidia GPU Driver Setup: Essential Steps for LLM Developers

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. Introduction — NVIDIA Driver Installation Guide r575 documentation
NVIDIA Driver Installation Guide for Linux

1.เตรียมค่า parameter ที่ต้องใช้งาน

จากตาราง Supported Linux Distributions เป็นตารางที่จะบอกเราว่า Linux ที่ support การติดตั้ง Driver มีรุ่นไหนบ้าง

3 parameter ที่เราต้องจดไว้เพื่อนำไปใช้ในขั้นตอนถัดไปคือ

  1. $distro
  2. $arch
  3. $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)
  1. เลือกว่าวิธีการติดตั้งว่าจะใช้เป็น 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 เบื้องต้น

nvidia-smi output
  1. ติดตั้ง CUDA Toolkit
apt install cuda-toolkit

CUDA Toolkit Installation

เพียงเท่านี้ก็จะได้เครื่อง Linux Ubuntu ที่มี GPU พร้อมไว้ใช้งานเรียบร้อยแล้ว

NVIDIA Container Toolkit

เล่าง่ายๆมันก็คือ Tools และ Library ที่ทำให้ container สามารถใช้งาน GPU ได้ ซึ่งเราจะมาเริ่มกันที่การติดตั้ง NVIDIA Container Toolkit กันก่อน ตัวอย่างนี้เราจะเน้นไปที่ตัว Docker container ที่ผมมองว่าหลายๆคนน่าจะใช้งานกันมากที่สุด

Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit

จากตัวอย่างนี้เราจะใช้ Ubuntu เป็นตัวอย่างในการติดตั้ง

สิ่งที่ต้องติดตั้งไว้ให้พร้อมก่อน

  • Container engine (Docker, Containerd)
  • Nvidia GPU Driver
  1. 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
  1. Update the packages list from the repository
sudo apt-get update
  1. 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

DCGM-Exporter — NVIDIA DCGM Documentation latest documentation

สำหรับการติดตั้งบน VM ปกติ จำเป็นต้องมี GPU Driver, Docker engine พร้อมกับ Nvidia Container toolkit ติดตั้งไว้ให้เรียบร้อยก่อนจึงจะใช้งานตัว DCGM ได้

สำหรับวิธีการใช้งานผมจะขอเก็บไว้เขียนแยกเป็นอีกหนึ่งบทความเต็มเลยๆดีกว่า เพราะว่าการที่จะใช้งาน DCGM ได้อย่างเต็มที่จะต้องใช้งานร่วมกับอีกหลาย Tool เลยไม่ว่าจะเป็น Prometheus และ Grafana Dashboard

สรุปส่งท้าย

ถึงตรงนี้แล้ว ผมว่าทุกคนที่ได้อ่านจนจบน่าจะสามารถ provision VM ที่มี GPU ขึ้นมาพร้อมให้ทีมใช้งานได้แล้วแหละครับ ถ้าเราค่อยๆทำความเข้าใจกับมัน ผมว่ามันง่ายกว่าการติดตั้ง Service บางตัวซะอีก ส่วนเนื้อหาที่ติดค้างไว้ ยังไงฝากทุกคนติดตามกันต่อด้วยนะครับมันน่าจะช่วยให้ทุกคนสร้าง infrasture ได้ตั้งแต่เริ่ม dev จนไปถึง production ได้เลยแหละ

Read more

ทำ E2E Test ด้วย AI โดยใช้ Midscene.js ร่วมกับ Playwright

ทำ E2E Test ด้วย AI โดยใช้ Midscene.js ร่วมกับ Playwright

E2E testing แบบที่ไม่ต้องเขียน selector ในโพสต์นี้เราจะมาลองใช้ Midscene.js สำหรับควบคุบ UI แบบที่สั่งด้วย Natural language ร่วมกับ Playwright ซึ่งเป็น framework ยอดนิยมสำหรับการทำ automated browser test Midscene.js คืออะไร? Midscene.js เป็น JavaScript SDK ที่ใช้โมเดล

By matichon maneegard
ทำ Data Extraction จาก image โดยใช้ LLM Multimodal

ทำ Data Extraction จาก image โดยใช้ LLM Multimodal

ในการทำ Data Extraction จากรูปภาพ เช่น สลิปใบเสร็จ, บัตรประชาชน, หรือแบบฟอร์มกระดาษ วิธีดั้งเดิมมักใช้ OCR (Optical Character Recognition) ร่วมกับการเขียน rule หรือ regex เพื่อแยกข้อมูลออกมา ซึ่งยุ่งยากหรือเมื่อรูปแบบข้อมูลเปลี่ยน ซึ่งจริงๆแล้วเรามี

By matichon maneegard
Self-Hosted LLMs for Enterprise #4

Self-Hosted LLMs for Enterprise #4

ตอนสุดท้ายแล้วนะครับ สำหรับการ deploy llm model ใช้งานเอง หลังจากที่แล้ว Setup ตัว service และ tools ต่างๆที่ต้องการครบถ้วนแล้ว เรามาลุยกันต่อเลยครับในการ download model และทำ API Endpoint สำหรับใครที่เพิ่งเข้ามาอ่านตอนนี้เป็นตอนแรก สามารถติดตามตอนก่อนหน้าได้

By matichon maneegard
Self-Hosted LLMs for Enterprise #3

Self-Hosted LLMs for Enterprise #3

สำหรับใครที่เพิ่งเข้ามาเจอตอนนี้สามารถย้อนกลับไปอ่าน 2 ตอนก่อนหน้าได้ที่ https://blog.float16.cloud/self-hosted-llms-for-enterprise-1/ https://blog.float16.cloud/self-hosted-llms-for-enterprise-2/ 2 ตอนที่ผ่านมา เราได้ติดตั้ง GPU Driver และเชื่อม GPU เข้ากับ Docker ได้เรียบร้อยแล้ว บทนี้เราจะมาติดตั้งเครื

By matichon maneegard