ปัจจุบันคือวันที่ 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):
- Ubuntu 24.04: ตรวจสอบให้แน่ใจว่าคุณใช้ Ubuntu 24.04 หรือใหม่กว่า
- GPU ของ NVIDIA: Stable Diffusion ทำงานได้ดีที่สุดบน GPU ของ NVIDIA ที่มี VRAM อย่างน้อย 6GB (แนะนำ 8GB ขึ้นไปสำหรับ LoRA และ 12GB+ สำหรับการสร้างภาพที่ละเอียด)
- สำคัญ: AMD/Intel GPU ก็สามารถใช้ได้ผ่าน ROCm/Intel IPEX/DirectML แต่การตั้งค่าจะซับซ้อนกว่าและประสิทธิภาพอาจไม่เท่า NVIDIA ในปัจจุบัน บทความนี้จะเน้น NVIDIA ครับ
- อินเทอร์เน็ต: สำหรับดาวน์โหลดไฟล์ต่างๆ
- พื้นที่ดิสก์: อย่างน้อย 30-50GB สำหรับโมเดลและ Dependencies (อาจจะเยอะกว่านี้ถ้ามีหลายโมเดล)
ขั้นตอนการติดตั้ง:
ขั้นตอนที่ 1: ติดตั้ง NVIDIA Drivers และ CUDA Toolkit
ถึงแม้ Ubuntu 24.04 จะมีการปรับปรุงเรื่อง Driver NVIDIA แต่เราจะติดตั้งแบบ Manual เพื่อให้มั่นใจและได้ CUDA toolkit ที่เหมาะสม
-
ตรวจสอบว่ามี Driver เก่าหรือไม่ (ถ้าเคยติดตั้ง):
Bashsudo apt-get purge nvidia* sudo apt autoremove
-
อัปเดตระบบ:
Bashsudo apt update sudo apt upgrade -y sudo apt autoremove -y
-
ติดตั้ง Build Essentials และ Headers สำหรับ Kernel:
Bashsudo apt install build-essential linux-headers-$(uname -r) -y
-
ดาวน์โหลดและติดตั้ง 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 ให้ตรง
- เข้าไปที่
-
ตั้งค่า PATH (ถ้ายังไม่ได้ตั้ง): เพิ่มบรรทัดนี้ในไฟล์
~/.bashrc
หรือ~/.profile
ของคุณBashexport 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 ที่คุณติดตั้ง) จากนั้นโหลดการตั้งค่าใหม่:Bashsource ~/.bashrc # หรือ source ~/.profile
-
ตรวจสอบการติดตั้ง:
Bashnvidia-smi nvcc --version
คุณควรเห็นข้อมูล Driver, CUDA version และ GPU ของคุณ
ขั้นตอนที่ 2: ติดตั้ง Dependencies อื่นๆ
sudo apt install python3 python3-pip python3-venv git -y
ขั้นตอนที่ 3: โคลน Stable Diffusion Web UI
-
เลือก directory ที่คุณต้องการติดตั้ง (เช่นใน Home folder):
Bashcd ~
-
โคลน repository:
Bashgit clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git cd stable-diffusion-webui
ขั้นตอนที่ 4: ดาวน์โหลด Stable Diffusion Model (Checkpoint)
- ไปที่
หรือHugging Face - RunDiffusion / juggernaut-xl-v9 เพื่อดาวน์โหลดโมเดล Checkpoint ที่คุณต้องการ (แนะนำเป็นCivitai .safetensors
ไฟล์)- สำหรับเริ่มต้น อาจใช้ Stable Diffusion 1.5 หรือ SDXL Base model (ขนาดใหญ่กว่า 6GB)
- ตัวอย่าง: ถ้าดาวน์โหลด
juggernaut-xl-v9-lightning.safetensors
- ย้ายไฟล์โมเดลที่ดาวน์โหลดมาไว้ใน directory:
stable-diffusion-webui/models/Stable-diffusion/
ขั้นตอนที่ 5: รัน Stable Diffusion Web UI เป็นครั้งแรก
-
รัน 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
-
เข้าถึง Web UI: เมื่อกระบวนการเริ่มต้นเสร็จสิ้น คุณจะเห็นข้อความประมาณว่า:
Running on local URL: http://127.0.0.1:7860
- เปิด Web Browser ของคุณแล้วไปที่ URL นั้น (โดยปกติคือ
http://127.0.0.1:7860
)
- เปิด Web Browser ของคุณแล้วไปที่ URL นั้น (โดยปกติคือ
ตอนนี้คุณก็สามารถใช้งาน 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
-
สร้าง Directory สำหรับ Dataset: สมมติว่าคุณจะสร้าง LoRA สำหรับ "MyCharacter" สร้าง Folder:
stable-diffusion-webui/data/my_character_dataset/
ภายใน Folder นี้ ให้สร้าง Folder ย่อยอีก Folder เช่น10_mycharacter
(ตัวเลข10
คือจำนวนรอบที่รูปภาพนี้จะถูกประมวลผลต่อ Epoch,mycharacter
คือtoken
ที่คุณจะใช้ใน prompt) -
ใส่รูปภาพของคุณ: นำรูปภาพทั้งหมดของ "MyCharacter" ใส่ใน
stable-diffusion-webui/data/my_character_dataset/10_mycharacter/
-
สร้าง 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
-
เปิด Stable Diffusion Web UI: (ถ้าปิดอยู่ก็รัน
./webui.sh
) -
ไปที่แท็บ "Train" -> "Create LoRA":
- ในเวอร์ชันใหม่ๆ ปุ่ม "Create LoRA" อาจจะอยู่ในแท็บย่อยของ "Train" หรือ "Extra"
- ถ้าหาไม่เจอ ลองติดตั้ง Extension ชื่อ "sd-webui-train-tools" หรือ "sd-webui-lora-trainer" (บางครั้ง Web UI ก็มีมาให้แล้ว)
-
กรอกรายละเอียดในหน้า "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
- LoRA name: ตั้งชื่อ LoRA ของคุณ (เช่น
-
คลิก "Train LoRA":
- กระบวนการฝึกฝนจะเริ่มต้นขึ้น คุณสามารถดูความคืบหน้าได้ในหน้า Terminal หรือบน Web UI (ถ้ามีแถบ Progress Bar)
- ระหว่างการฝึกฝน GPU จะทำงานหนักมาก
ขั้นตอนที่ 3: ทดสอบ LoRA ที่ Fine-tune แล้ว
- เมื่อการฝึกฝนเสร็จสิ้น (หรือคุณเซฟโมเดลในระหว่างการฝึก) ไฟล์
.safetensors
ของ LoRA จะถูกบันทึกไว้ในstable-diffusion-webui/models/LoRA/
- ไปที่แท็บ "txt2img" ใน Web UI
- เลือก Base Model: ตรวจสอบให้แน่ใจว่าคุณเลือก Base Model เดียวกันกับที่ใช้ในการ Fine-tune LoRA
- เรียกใช้ 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)
- ตัวอย่าง:
- เพิ่ม 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
- 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
- Overfit (ภาพออกมาเหมือนรูปใน Dataset เกินไป หรือมีลายน้ำ/พื้นหลังเดิมๆ): ลด
- Installer Error: ตรวจสอบให้แน่ใจว่า Driver NVIDIA, CUDA, Python และ Dependencies อื่นๆ ติดตั้งถูกต้องและอยู่ใน PATH
- Web UI ไม่รัน: ตรวจสอบ Log ใน Terminal เพื่อดู Error message
การ Fine-tune LoRA เป็นกระบวนการที่ต้องใช้การลองผิดลองถูกและปรับค่าต่างๆ เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดครับ ขอให้สนุกกับการสร้างสรรค์ AI Art ของคุณ!
No comments:
Post a Comment