Monday, June 23, 2025

การติดตั้ง Stable Diffusion บน Ubuntu 24.04 Lts เพื่อสร้าง Text to Image อย่างง่าย ๆ ในเครื่องตัวเอง

 ปัจจุบันคือวันที่ 23 มิถุนายน 2567 นะครับ สำหรับ Ubuntu 24.04 (Noble Numbat) ซึ่งเป็น LTS (Long Term Support) version ก็เป็นตัวเลือกที่ดีในการติดตั้ง Stable Diffusion ครับ

การนำ Open Source Stable Diffusion มาใช้งานและ Fine-tune บน Ubuntu นั้น มีหลายวิธีครับ แต่วิธีที่นิยมและง่ายที่สุดในปัจจุบันคือการใช้โปรเจกต์ Automatic1111 web UI (หรือ stable-diffusion-webui) ซึ่งมีฟังก์ชันครบครัน ทั้งการสร้างภาพ, Upscaling, Inpainting, Outpainting, และที่สำคัญคือรองรับการทำ Fine-tune (โดยเฉพาะ LoRA) ได้ในตัว

ผมจะแนะนำวิธีการติดตั้งและขั้นตอนการทำ Fine-tune (แบบ LoRA) ด้วย Automatic1111 ครับ


ส่วนที่ 1: การติดตั้ง Stable Diffusion (Automatic1111 web UI) บน Ubuntu 24.04

ข้อกำหนดเบื้องต้น (Prerequisites):

  1. Ubuntu 24.04: ตรวจสอบให้แน่ใจว่าคุณใช้ Ubuntu 24.04 หรือใหม่กว่า
  2. GPU ของ NVIDIA: Stable Diffusion ทำงานได้ดีที่สุดบน GPU ของ NVIDIA ที่มี VRAM อย่างน้อย 6GB (แนะนำ 8GB ขึ้นไปสำหรับ LoRA และ 12GB+ สำหรับการสร้างภาพที่ละเอียด)
    • สำคัญ: AMD/Intel GPU ก็สามารถใช้ได้ผ่าน ROCm/Intel IPEX/DirectML แต่การตั้งค่าจะซับซ้อนกว่าและประสิทธิภาพอาจไม่เท่า NVIDIA ในปัจจุบัน บทความนี้จะเน้น NVIDIA ครับ
  3. อินเทอร์เน็ต: สำหรับดาวน์โหลดไฟล์ต่างๆ
  4. พื้นที่ดิสก์: อย่างน้อย 30-50GB สำหรับโมเดลและ Dependencies (อาจจะเยอะกว่านี้ถ้ามีหลายโมเดล)

ขั้นตอนการติดตั้ง:

ขั้นตอนที่ 1: ติดตั้ง NVIDIA Drivers และ CUDA Toolkit

ถึงแม้ Ubuntu 24.04 จะมีการปรับปรุงเรื่อง Driver NVIDIA แต่เราจะติดตั้งแบบ Manual เพื่อให้มั่นใจและได้ CUDA toolkit ที่เหมาะสม

  1. ตรวจสอบว่ามี Driver เก่าหรือไม่ (ถ้าเคยติดตั้ง):

    Bash
    sudo apt-get purge nvidia*
    sudo apt autoremove
    
  2. อัปเดตระบบ:

    Bash
    sudo apt update
    sudo apt upgrade -y
    sudo apt autoremove -y
    
  3. ติดตั้ง Build Essentials และ Headers สำหรับ Kernel:

    Bash
    sudo apt install build-essential linux-headers-$(uname -r) -y
    
  4. ดาวน์โหลดและติดตั้ง NVIDIA Driver และ CUDA Toolkit:

    • เข้าไปที่ NVIDIA CUDA Toolkit Download
    • เลือก: Linux -> x86_64 -> Ubuntu -> 24.04 -> deb (local)
    • ดาวน์โหลดไฟล์ .deb (เช่น cuda-ubuntu2404.pin, cuda-repo-ubuntu2404-12-x-local_...deb)
    • ทำตามคำสั่งที่ปรากฏบนหน้าเว็บของ NVIDIA (มันจะคล้ายๆ แบบนี้ แต่ตัวเลข version อาจต่างไป)
      Bash
      # ตัวอย่าง: ติดตั้ง CUDA 12.x
      wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin
      sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600
      wget https://developer.download.nvidia.com/compute/cuda/12.5.0/local_installers/cuda-repo-ubuntu2404-12-5-local_12.5.0-1_amd64.deb # <-- เปลี่ยน URL ตามเวอร์ชันที่ดาวน์โหลดมา
      sudo dpkg -i cuda-repo-ubuntu2404-12-5-local_12.5.0-1_amd64.deb # <-- เปลี่ยนชื่อไฟล์ตามที่ดาวน์โหลดมา
      sudo cp /var/cuda-repo-ubuntu2404-12-5-local/cuda-*-keyring.gpg /usr/share/keyrings/
      sudo apt-get update
      sudo apt-get -y install cuda-toolkit-12-5 # <-- เปลี่ยน version ให้ตรง
      
  5. ตั้งค่า PATH (ถ้ายังไม่ได้ตั้ง): เพิ่มบรรทัดนี้ในไฟล์ ~/.bashrc หรือ ~/.profile ของคุณ

    Bash
    export PATH=/usr/local/cuda-12.5/bin${PATH:+:${PATH}}
    export LD_LIBRARY_PATH=/usr/local/cuda-12.5/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
    

    (อย่าลืมเปลี่ยน 12.5 เป็นเวอร์ชัน CUDA ที่คุณติดตั้ง) จากนั้นโหลดการตั้งค่าใหม่:

    Bash
    source ~/.bashrc
    # หรือ source ~/.profile
    
  6. ตรวจสอบการติดตั้ง:

    Bash
    nvidia-smi
    nvcc --version
    

    คุณควรเห็นข้อมูล Driver, CUDA version และ GPU ของคุณ

ขั้นตอนที่ 2: ติดตั้ง Dependencies อื่นๆ

Bash
sudo apt install python3 python3-pip python3-venv git -y

ขั้นตอนที่ 3: โคลน Stable Diffusion Web UI

  1. เลือก directory ที่คุณต้องการติดตั้ง (เช่นใน Home folder):

    Bash
    cd ~
    
  2. โคลน repository:

    Bash
    git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
    cd stable-diffusion-webui
    

ขั้นตอนที่ 4: ดาวน์โหลด Stable Diffusion Model (Checkpoint)

  1. ไปที่ Hugging Face - RunDiffusion / juggernaut-xl-v9 หรือ Civitai เพื่อดาวน์โหลดโมเดล Checkpoint ที่คุณต้องการ (แนะนำเป็น .safetensors ไฟล์)
    • สำหรับเริ่มต้น อาจใช้ Stable Diffusion 1.5 หรือ SDXL Base model (ขนาดใหญ่กว่า 6GB)
    • ตัวอย่าง: ถ้าดาวน์โหลด juggernaut-xl-v9-lightning.safetensors
  2. ย้ายไฟล์โมเดลที่ดาวน์โหลดมาไว้ใน directory: stable-diffusion-webui/models/Stable-diffusion/

ขั้นตอนที่ 5: รัน Stable Diffusion Web UI เป็นครั้งแรก

  1. รัน Script:

    Bash
    ./webui.sh
    
    • ครั้งแรกที่รัน Script นี้ มันจะสร้าง Python Virtual Environment, ติดตั้ง Python Dependencies ทั้งหมด (Pytorch, Transformers, Diffusers ฯลฯ) และดาวน์โหลดโมเดล CLIP, VAE (หากจำเป็น) ซึ่งอาจใช้เวลาค่อนข้างนาน (ขึ้นอยู่กับความเร็วเน็ตและการ์ดจอ)
    • ถ้าคุณไม่มี VRAM เพียงพอ หรือเจอ Error บ่อยๆ ลองแก้ไขไฟล์ webui-user.sh (อยู่ใน directory เดียวกันกับ webui.sh) แล้วเพิ่มบรรทัดใน COMMANDLINE_ARGS เช่น --xformers (ช่วยลด VRAM), --medvram (ลด VRAM เพิ่มขึ้น), หรือ --lowvram (ถ้า VRAM น้อยมาก)
      Bash
      # ในไฟล์ webui-user.sh
      # ...
      export COMMANDLINE_ARGS="--xformers --medvram"
      # ...
      
    • หากต้องการเข้าถึง Web UI จากเครื่องอื่นในเครือข่าย ให้เพิ่ม --listen ใน COMMANDLINE_ARGS
  2. เข้าถึง Web UI: เมื่อกระบวนการเริ่มต้นเสร็จสิ้น คุณจะเห็นข้อความประมาณว่า: Running on local URL: http://127.0.0.1:7860

    • เปิด Web Browser ของคุณแล้วไปที่ URL นั้น (โดยปกติคือ http://127.0.0.1:7860)

ตอนนี้คุณก็สามารถใช้งาน Stable Diffusion Web UI เพื่อสร้างภาพได้แล้ว!


ส่วนที่ 2: ขั้นตอนการทำ Fine-tune (LoRA) ด้วย Automatic1111 web UI

การทำ Fine-tune ที่นิยมที่สุดในปัจจุบันสำหรับ Stable Diffusion คือการใช้เทคนิค LoRA (Low-Rank Adaptation) ซึ่งใช้ VRAM น้อยกว่าการ Fine-tune แบบเต็มรูปแบบและได้ผลลัพธ์ที่ดีเยี่ยมสำหรับการสร้าง "สไตล์" หรือ "ตัวละคร/วัตถุ" ใหม่ๆ

ข้อกำหนดเพิ่มเติมสำหรับการทำ LoRA Fine-tune:

  • GPU VRAM: อย่างน้อย 8GB VRAM (แนะนำ 12GB+ สำหรับความเร็วที่ดี)
  • ชุดข้อมูลรูปภาพ:
    • รูปภาพ: คุณต้องมีชุดรูปภาพที่ต้องการให้ AI เรียนรู้ (เช่น รูปตัวละครเดิมๆ หลายๆ รูป, รูปสไตล์ภาพวาดที่คุณต้องการ)
    • จำนวน: แนะนำ 10-30 รูปสำหรับสไตล์/ตัวละครที่สอดคล้องกัน (ถ้าเยอะไปอาจทำให้ Overfit, ถ้าน้อยไปอาจไม่ได้ผล)
    • ความสอดคล้อง: รูปภาพควรมีความสอดคล้องกันในแง่ของสไตล์, คุณภาพ, และตัวแบบ (ถ้าเป็นตัวละครเดียวกัน ควรแต่งกายคล้ายกัน ท่าทางคล้ายกัน)
    • คุณภาพ: รูปภาพควรมีคุณภาพดี มีความคมชัด ไม่มีสิ่งรบกวน
  • คำบรรยายภาพ (Captions/Tags): แต่ละรูปภาพควรมีไฟล์ข้อความ (.txt) ที่มีชื่อเดียวกับไฟล์รูปภาพนั้นๆ และภายในไฟล์มีคำบรรยายหรือแท็กที่อธิบายรูปภาพนั้นๆ อย่างละเอียด

ขั้นตอนการเตรียมข้อมูลและทำ LoRA Fine-tune:

ขั้นตอนที่ 1: เตรียมชุดข้อมูลรูปภาพและ Captions

  1. สร้าง Directory สำหรับ Dataset: สมมติว่าคุณจะสร้าง LoRA สำหรับ "MyCharacter" สร้าง Folder: stable-diffusion-webui/data/my_character_dataset/ ภายใน Folder นี้ ให้สร้าง Folder ย่อยอีก Folder เช่น 10_mycharacter (ตัวเลข 10 คือจำนวนรอบที่รูปภาพนี้จะถูกประมวลผลต่อ Epoch, mycharacter คือ token ที่คุณจะใช้ใน prompt)

  2. ใส่รูปภาพของคุณ: นำรูปภาพทั้งหมดของ "MyCharacter" ใส่ใน stable-diffusion-webui/data/my_character_dataset/10_mycharacter/

  3. สร้าง Captions (.txt files): สำหรับรูปภาพแต่ละรูป (เช่น image01.jpg) ให้สร้างไฟล์ .txt ที่มีชื่อเดียวกัน (image01.txt) ภายในไฟล์ .txt ให้ใส่คำบรรยายรูปภาพนั้นๆ โดยละเอียด โดยแยกด้วยคอมมา ตัวอย่าง: image01.jpg -> image01.txt a beautiful girl, long hair, blue eyes, wearing a red dress, standing in a park, sunny day, realistic style

    Tips สำหรับ Captions:

    • ใส่ token ที่คุณจะใช้ใน prompt (เช่น mycharacter) ไว้ใน caption ด้วย
    • เน้นคำบรรยายสิ่งที่ ไม่ควรเปลี่ยนแปลง (เช่น "long hair", "blue eyes")
    • คำที่ไม่ต้องการให้โมเดลเรียนรู้เป็นเอกลักษณ์ของตัวละคร ให้ลบออกจาก Caption (เช่น "wearing a red dress" ถ้าคุณอยากให้ AI สามารถเปลี่ยนชุดได้)
    • ใช้ Extension "BLIP/CLIP Interrogator" ใน Automatic1111 เพื่อช่วยสร้าง Captions เริ่มต้นอัตโนมัติ (แต่ต้องตรวจทานและแก้ไขด้วยตัวเอง)

ขั้นตอนที่ 2: ตั้งค่าและรัน Fine-tune (LoRA) ใน Automatic1111

  1. เปิด Stable Diffusion Web UI: (ถ้าปิดอยู่ก็รัน ./webui.sh)

  2. ไปที่แท็บ "Train" -> "Create LoRA":

    • ในเวอร์ชันใหม่ๆ ปุ่ม "Create LoRA" อาจจะอยู่ในแท็บย่อยของ "Train" หรือ "Extra"
    • ถ้าหาไม่เจอ ลองติดตั้ง Extension ชื่อ "sd-webui-train-tools" หรือ "sd-webui-lora-trainer" (บางครั้ง Web UI ก็มีมาให้แล้ว)
  3. กรอกรายละเอียดในหน้า "Create LoRA":

    • LoRA name: ตั้งชื่อ LoRA ของคุณ (เช่น my_character_lora)
    • Model: เลือก Base Model ที่คุณต้องการใช้เป็นพื้นฐานในการ Fine-tune (เช่น juggernaut-xl-v9-lightning.safetensors ที่คุณดาวน์โหลดมา)
    • Dataset directory: ใส่ Path เต็มของ Folder ที่มีรูปภาพและ Captions ของคุณ (เช่น /home/youruser/stable-diffusion-webui/data/my_character_dataset/)
    • Regularization directory: (ส่วนใหญ่ไม่ต้องใช้สำหรับ LoRA เริ่มต้น) ใช้สำหรับควบคุมไม่ให้โมเดล Overfit เกินไป
    • Output directory: กำหนด Folder ที่จะเซฟไฟล์ LoRA ที่ได้ (เช่น /home/youruser/stable-diffusion-webui/models/LoRA/)
    • Training steps per image: (สำคัญมาก) จำนวนครั้งที่โมเดลจะประมวลผลรูปภาพแต่ละรูปต่อ Epoch (มักจะตั้งเป็น 10-20)
    • Max train steps: กำหนดจำนวน Step สูงสุดที่จะฝึก (เช่น 1000 - 3000 Steps)
      • LoRA มักจะต้องการ Steps น้อยกว่า Full Fine-tune
      • คำนวณ Steps: (จำนวนรูปภาพ * Training steps per image) * จำนวน Epoch
      • ตัวอย่าง: 20 รูป * 10 Steps/รูป = 200 Steps/Epoch. ถ้าต้องการ 10 Epochs = 2000 Steps
    • Learning rate: (สำคัญมาก) อัตราการเรียนรู้ (เช่น 0.0001 - 0.00005 สำหรับ Text Encoder, 0.0001 - 0.00005 สำหรับ U-Net)
      • อาจต้องลองปรับดู
    • Optimizer: เลือก AdamW หรือ AdamW8bit (ถ้า VRAM จำกัด)
    • Save every N steps: บันทึกไฟล์ LoRA ทุกๆ N Steps เพื่อให้คุณสามารถทดสอบผลลัพธ์ได้ในระหว่างการฝึก
    • Clip skip: (สำหรับ Text Encoder) มักจะตั้งเป็น 2
    • Network Rank (Dimension) และ Alpha: (สำคัญมาก)
      • Network Rank (dim): กำหนดขนาดของ LoRA Model ยิ่งมากยิ่งสามารถเรียนรู้รายละเอียดได้ดีขึ้น แต่ก็ใช้ VRAM มากขึ้น (แนะนำ 64, 128 หรือ 256)
      • Network Alpha: เป็นการถ่วงน้ำหนักของ LoRA (แนะนำให้ตั้งเท่ากับ dim หรือ dim/2 เช่น 64 ถ้า dim=64)
    • Batch size: จำนวนรูปภาพที่ประมวลผลพร้อมกันในแต่ละ Batch (ถ้า VRAM น้อย ให้ตั้งเป็น 1)
    • Mixed precision: ตั้งเป็น fp16 (สำหรับ NVIDIA GPU) เพื่อความเร็วและประหยัด VRAM
  4. คลิก "Train LoRA":

    • กระบวนการฝึกฝนจะเริ่มต้นขึ้น คุณสามารถดูความคืบหน้าได้ในหน้า Terminal หรือบน Web UI (ถ้ามีแถบ Progress Bar)
    • ระหว่างการฝึกฝน GPU จะทำงานหนักมาก

ขั้นตอนที่ 3: ทดสอบ LoRA ที่ Fine-tune แล้ว

  1. เมื่อการฝึกฝนเสร็จสิ้น (หรือคุณเซฟโมเดลในระหว่างการฝึก) ไฟล์ .safetensors ของ LoRA จะถูกบันทึกไว้ใน stable-diffusion-webui/models/LoRA/
  2. ไปที่แท็บ "txt2img" ใน Web UI
  3. เลือก Base Model: ตรวจสอบให้แน่ใจว่าคุณเลือก Base Model เดียวกันกับที่ใช้ในการ Fine-tune LoRA
  4. เรียกใช้ LoRA: ใน Positive Prompt ให้พิมพ์ <lora:your_lora_name:weight>
    • ตัวอย่าง: <lora:my_character_lora:1>
    • your_lora_name: คือชื่อไฟล์ LoRA ของคุณ (ไม่ต้องใส่ .safetensors)
    • weight: คือน้ำหนักที่คุณต้องการให้ LoRA มีผล (0-1, เช่น 0.7, 0.8, 1.0)
  5. เพิ่ม Trigger Word (ถ้าใช้): ถ้าคุณใส่ token เช่น mycharacter ใน Captions ตอนเตรียมข้อมูล คุณก็ควรใช้ mycharacter ใน Prompt ของคุณด้วย ตัวอย่าง Prompt: a photo of <lora:my_character_lora:1> mycharacter, beautiful girl, long hair, blue eyes, in a garden, realistic style, highly detailed
  6. Generate ภาพ: ลองสร้างภาพและปรับค่า Prompt, LoRA Weight, และ Seed เพื่อดูผลลัพธ์ที่ดีที่สุด

การแก้ไขปัญหาที่พบบ่อย:

  • CUDA Out Of Memory: VRAM ไม่พอ ลองลด Batch size, ลด Network Rank, ใช้ fp16, หรือเพิ่ม COMMANDLINE_ARGS เช่น --medvram, --lowvram
  • LoRA ไม่ได้ผลลัพธ์ตามที่ต้องการ:
    • Overfit (ภาพออกมาเหมือนรูปใน Dataset เกินไป หรือมีลายน้ำ/พื้นหลังเดิมๆ): ลด Learning rate, ลด Max train steps, ลด Network Rank, เพิ่มความหลากหลายของรูปใน Dataset
    • Underfit (LoRA ไม่มีผลต่อภาพเลย): เพิ่ม Learning rate, เพิ่ม Max train steps, เพิ่ม Network Rank, ตรวจสอบว่า token ใน Prompt ตรงกับที่ใช้ใน Caption หรือไม่, ตรวจสอบคุณภาพของ Captions
  • Installer Error: ตรวจสอบให้แน่ใจว่า Driver NVIDIA, CUDA, Python และ Dependencies อื่นๆ ติดตั้งถูกต้องและอยู่ใน PATH
  • Web UI ไม่รัน: ตรวจสอบ Log ใน Terminal เพื่อดู Error message

การ Fine-tune LoRA เป็นกระบวนการที่ต้องใช้การลองผิดลองถูกและปรับค่าต่างๆ เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดครับ ขอให้สนุกกับการสร้างสรรค์ AI Art ของคุณ!

No comments: