Modular Diffusers: ต่อบล็อก AI สร้างสรรค์งานได้ไร้ขีดจำกัด
ในยุคที่ AI สร้างสรรค์ (Generative AI) กำลังเติบโตอย่างก้าวกระโดด การพัฒนาและปรับแต่งโมเดลให้เข้ากับความต้องการเฉพาะด้านเป็นสิ่งสำคัญ Hugging Face ได้เปิดตัว Modular Diffusers เครื่องมือใหม่ที่ปฏิวัติวงการด้วยแนวคิด "บล็อกที่ต่อกันได้" (Composable Building Blocks) ให้เหล่านักพัฒนาและผู้ที่สนใจสามารถสร้างสรรค์เวิร์กโฟลว์ AI ที่ซับซ้อนได้อย่างยืดหยุ่นและมีประสิทธิภาพ
บทความนี้จะพาคุณไปทำความรู้จักกับ Modular Diffusers ตั้งแต่การใช้งาน API แบบคุ้นเคย ไปจนถึงการสร้างบล็อกที่ปรับแต่งเองและนำมาประกอบกันเป็นไปป์ไลน์ AI ในแบบของคุณเอง พร้อมทั้งแสดงให้เห็นการทำงานร่วมกับ Mellon เครื่องมือสร้างเวิร์กโฟลว์แบบ Visual Node ที่จะช่วยให้การเชื่อมต่อบล็อกต่าง ๆ เป็นเรื่องง่าย
Modular Diffusers คืออะไร?
Modular Diffusers เป็นเฟรมเวิร์กที่ออกแบบมาเพื่อให้การทำงานกับโมเดล Diffusion มีความยืดหยุ่นมากขึ้น แทนที่จะมองว่าไปป์ไลน์ AI เป็นกล่องดำที่ทำงานตั้งแต่ต้นจนจบ Modular Diffusers มองว่ามันคือชุดของ "บล็อก" ที่ทำงานเฉพาะด้าน เช่น การเข้ารหัสข้อความ (Text Encoding), การเข้ารหัสรูปภาพ (Image Encoding), การลดสัญญาณรบกวน (Denoising) และการถอดรหัส (Decoding)

(ภาพตัวอย่าง: โครงสร้างไปป์ไลน์ที่ประกอบด้วยบล็อกย่อย)
แต่ละบล็อกจะมีความสามารถในการรับข้อมูลเข้า (Input) และส่งข้อมูลออก (Output) ที่ชัดเจน คุณสามารถ:
- เรียกใช้งานบล็อกเดี่ยว ๆ: เหมือนกับการรันไปป์ไลน์ปกติ
- เพิ่ม ลบ หรือสลับบล็อก: ระบบจะปรับการทำงานให้เข้ากับบล็อกที่เหลืออยู่โดยอัตโนมัติ
- ตรวจสอบการทำงานภายใน: เข้าใจกระบวนการทำงานของแต่ละส่วนได้อย่างลึกซึ้ง
การใช้งานเริ่มต้นทำได้ง่าย ๆ ด้วยคำสั่ง .initpipeline() เพื่อแปลงบล็อกให้เป็นไปป์ไลน์ที่ทำงานได้ และ .loadcomponents() เพื่อโหลดน้ำหนักโมเดล (Model Weights)
สร้างสรรค์บล็อก AI ในแบบของคุณเอง 🛠️
จุดเด่นที่แท้จริงของ Modular Diffusers คือความสามารถในการสร้าง "บล็อกที่กำหนดเอง" (Custom Block) ได้อย่างอิสระ บล็อกที่กำหนดเองนี้เป็นคลาส Python ที่คุณสามารถกำหนดส่วนประกอบ (Components), ข้อมูลเข้า (Inputs), ข้อมูลออก (Outputs) และตรรกะการคำนวณ (Computation Logic) ของบล็อกนั้น ๆ ได้
เมื่อคุณสร้างบล็อกเสร็จแล้ว ก็สามารถนำไปเสียบเข้ากับเวิร์กโฟลว์ใดก็ได้ที่คุณต้องการ
ตัวอย่างการสร้างบล็อก:
สมมติว่าเราต้องการสร้างบล็อกเพื่อสกัดแผนที่ความลึก (Depth Map) จากรูปภาพโดยใช้โมเดล Depth Anything V2:
class DepthProcessorBlock:
def expected_components(self):
return {"depth_estimator": "depth_anything_v2"}
# ระบุโมเดลที่บล็อกต้องการ
def __init__(self, depth_estimator, **kwargs):
self.depth_estimator = depth_estimator
def __call__(self, image: Image.Image) -> Image.Image:
# ตรรกะการคำนวณเพื่อสกัด Depth Map
depth_map = self.depth_estimator(image).depth
return depth_mapexpected_components: กำหนดว่าบล็อกนี้ต้องการโมเดลอะไรบ้าง ในที่นี้คือโมเดลสำหรับประมาณค่าความลึกinit: รับโมเดลที่ต้องการเข้ามาใช้งานcall: เป็นส่วนที่บรรจุตรรกะการทำงานหลักของบล็อก
เมื่อสร้างบล็อกเสร็จแล้ว คุณสามารถกำหนดค่าเริ่มต้นของโมเดลที่จะโหลดได้ผ่าน pretrainedmodelnameorpath ซึ่งจะทำให้ loadcomponents ดึงโมเดลมาให้โดยอัตโนมัติ หรือจะกำหนดเองใน modularmodel_index.json ก็ได้
การประกอบบล็อกเข้าด้วยกันเป็นเวิร์กโฟลว์ 🧩
หลังจากสร้างบล็อกที่กำหนดเองแล้ว เราสามารถนำไปใช้ร่วมกับเวิร์กโฟลว์ที่มีอยู่แล้วได้ เช่น การนำบล็อกสกัด Depth Map ไปใช้ร่วมกับ ControlNet ของ Qwen เพียงแค่แทรกบล็อก Depth Map เข้าไปในช่วงต้นของเวิร์กโฟลว์
# สมมติว่าได้ import บล็อกและโมเดลมาแล้ว
# ...
# สร้างไปป์ไลน์ ControlNet
controlnet_pipeline = ControlNetPipeline.from_pretrained(...)
# สร้างบล็อก DepthProcessorBlock
depth_block = DepthProcessorBlock(...)
# ประกอบบล็อกเข้าด้วยกัน (ตัวอย่างการแสดงแนวคิด)
# ในความเป็นจริงอาจต้องจัดการ Input/Output ให้ตรงกัน
composed_pipeline = Pipeline([depth_block, controlnet_pipeline])ข้อมูลระหว่างบล็อกจะถูกส่งต่อกันโดยอัตโนมัติ เช่น ข้อมูล control_image จากบล็อก Depth Map จะถูกส่งต่อไปยังบล็อกถัดไปที่ต้องการใช้ข้อมูลนี้ และถ้าบล็อกแรกไม่ได้มี Input ที่มาจากบล็อกก่อนหน้า มันก็จะถูกกำหนดให้เป็น Input ของไปป์ไลน์ทั้งหมด
แบ่งปันบล็อกที่สร้างสรรค์บน Hugging Face Hub 🚀
คุณสามารถเผยแพร่บล็อกที่สร้างขึ้นเองบน Hugging Face Hub เพื่อให้คนอื่น ๆ สามารถนำไปใช้ได้อย่างง่ายดาย เพียงแค่ใช้ trustremotecode=True Hugging Face มีเทมเพลตเตรียมไว้ให้แล้ว คุณสามารถดูรายละเอียดเพิ่มเติมได้ในคู่มือการสร้างบล็อกแบบกำหนดเอง (Building Custom Blocks)
บล็อก DepthProcessorBlock ที่กล่าวถึงในตัวอย่าง ได้ถูกเผยแพร่แล้วที่ diffusers/depth-processor-custom-block ทำให้ทุกคนสามารถโหลดและนำไปใช้งานได้ทันที
นอกจากนี้ ยังมีชุดบล็อกที่พร้อมใช้งานให้เลือกใช้มากมายบน Hub อีกด้วย
Modular Repository: การจัดการที่รวมศูนย์ 📦
Modular Diffusers ไม่เพียงแต่ทำงานร่วมกับ Repository ของ Diffusers ที่มีอยู่เดิมได้ แต่ยังเปิดตัวรูปแบบ Repository ใหม่ที่เรียกว่า Modular Repository
Modular Repository สามารถอ้างอิงส่วนประกอบ (Components) จาก Repository ของโมเดลต้นฉบับได้ ตัวอย่างเช่น diffusers/flux2-bnb-4bit-modular มี Transformer ที่ถูก Quantized ไว้ และโหลดส่วนประกอบอื่น ๆ จาก Repository ดั้งเดิม
ที่สำคัญกว่านั้น Modular Repository สามารถเก็บโค้ด Python สำหรับ Custom Pipeline Blocks และการตั้งค่า UI สำหรับเครื่องมืออย่าง Mellon ไว้ในที่เดียวได้
ชุมชนสร้างสรรค์ไปป์ไลน์ AI ด้วย Modular Diffusers 🌟
ชุมชนนักพัฒนาได้เริ่มสร้างสรรค์ไปป์ไลน์ AI ที่สมบูรณ์แบบโดยใช้ Modular Diffusers และเผยแพร่บน Hub แล้ว พร้อมทั้ง Model Weights และโค้ดที่พร้อมใช้งาน ตัวอย่างที่น่าสนใจ เช่น:
- Krea Realtime Video: โมเดลสร้างวิดีโอแบบเรียลไทม์ขนาด 14 พันล้านพารามิเตอร์ สามารถสร้างวิดีโอได้ที่ 11fps บน GPU B200 ตัวเดียว รองรับ Text-to-Video, Video-to-Video และ Streaming Video-to-Video โดยทั้งหมดถูกสร้างเป็นบล็อกแบบ Modular ทำให้ผู้ใช้สามารถปรับเปลี่ยน Prompt กลางคัน, เปลี่ยนสไตล์วิดีโอได้ทันที และเห็นเฟรมแรกภายใน 1 วินาที
- Waypoint-1: โมเดลโลกการแพร่กระจายแบบเรียลไทม์ (Real-time Diffusion World Model) ขนาด 2.3 พันล้านพารามิเตอร์ จาก Overworld ที่สร้างสภาพแวดล้อมแบบโต้ตอบได้โดยอัตโนมัติจาก Control Inputs และ Text Prompts ผู้ใช้สามารถสำรวจและโต้ตอบกับสภาพแวดล้อมที่สร้างขึ้นได้แบบเรียลไทม์บนฮาร์ดแวร์ทั่วไป
ทีมพัฒนาสามารถสร้างสถาปัตยกรรมใหม่ ๆ, แพ็กเกจเป็นบล็อก และเผยแพร่ไปป์ไลน์ทั้งหมดบน Hub ให้ใครก็ได้นำไปใช้ด้วย ModularPipeline.from_pretrained()
Mellon: เครื่องมือ Visual Workflow สำหรับ Modular Diffusers 🎨
Mellon เป็นอินเทอร์เฟซแบบ Node Graph ที่ทำงานร่วมกับ Modular Diffusers ได้อย่างลงตัว หากคุณคุ้นเคยกับเครื่องมือแบบ Node-based อย่าง ComfyUI คุณจะรู้สึกคุ้นเคยกับ Mellon แต่ก็มีความแตกต่างที่สำคัญ:
- Dynamic Nodes: แทนที่จะมี Node จำนวนมากสำหรับแต่ละโมเดล Mellon มี Node จำนวนน้อยที่อินเทอร์เฟซจะปรับเปลี่ยนโดยอัตโนมัติตามโมเดลที่คุณเลือก เรียนรู้ครั้งเดียว ใช้ได้กับทุกโมเดล
- Single-Node Workflows: ด้วยระบบบล็อกที่ต่อกันได้ของ Modular Diffusers คุณสามารถยุบทั้งไปป์ไลน์ให้กลายเป็น Node เดียวได้ ทำให้จัดการเวิร์กโฟลว์หลายอันบน Canvas เดียวกันได้โดยไม่รก
- Hub Integration: บล็อกที่เผยแพร่บน Hugging Face Hub สามารถใช้งานได้ทันทีใน Mellon มีฟังก์ชันที่ช่วยสร้างอินเทอร์เฟซ Node จากการกำหนดค่าบล็อกของคุณได้โดยอัตโนมัติ ไม่ต้องเขียนโค้ด UI เพิ่มเติม
ความสามารถในการทำงานร่วมกันนี้เป็นไปได้เพราะทุกบล็อกมีคุณสมบัติ (Inputs, Intermediate Outputs, Expected Components) ที่เหมือนกัน ทำให้ Mellon สามารถสร้าง UI ของ Node จากการกำหนดค่าบล็อกใด ๆ ก็ได้ และประกอบบล็อกเข้าด้วยกันเป็น Node ระดับสูงขึ้น
ตัวอย่างการใช้งาน Mellon:
สมมติว่าเราต้องการเพิ่ม Node ขยาย Prompt ด้วย Gemini เข้าไปในเวิร์กโฟลว์ Text-to-Image ที่มีอยู่:
- ลาก Node "Dynamic Block" มาวาง
- ป้อน
repo_idของโมดูล Gemini Prompt Expander (เช่นdiffusers/gemini-prompt-expander-mellon) - คลิก "LOAD CUSTOM BLOCK" - Node จะปรับเปลี่ยนหน้าตาโดยอัตโนมัติ แสดงช่องป้อนข้อความสำหรับ Prompt และ Output Socket ชื่อ "prompt"
- ป้อน Prompt สั้น ๆ, เชื่อมต่อ Output ไปยัง Node "Encode Prompt" แล้วรัน
Gemini จะขยาย Prompt สั้น ๆ ของคุณให้เป็นคำอธิบายที่ละเอียดก่อนที่จะสร้างรูปภาพ โดยไม่ต้องเขียนโค้ดหรือตั้งค่าใด ๆ เพียงแค่ใช้ Hub Repo ID
สรุป
Modular Diffusers นำเสนอความสามารถในการต่อยอดและยืดหยุ่นที่ชุมชนเรียกร้องมาตลอด โดยไม่ลดทอนประสิทธิภาพที่ทำให้ Diffusers เป็นที่นิยม ยังอยู่ในช่วงเริ่มต้นของการพัฒนา Hugging Face ต้องการรับฟังความคิดเห็นจากผู้ใช้เพื่อนำไปปรับปรุงในอนาคต ลองนำไปใช้งานและบอกเราว่าอะไรได้ผลดี อะไรควรปรับปรุง และมีอะไรที่ขาดหายไป
แหล่งข้อมูลเพิ่มเติม:
- [ภาพรวมของ Modular Diffusers](ขอบคุณ แหล่งข้อมูล
https://huggingface.co/blog/modular-diffusers) - [Mellon x Modular Diffusers](ขอบคุณ แหล่งข้อมูล
https://huggingface.co/docs/diffusers/main/en/modular/mellon) - [คอลเลกชัน Custom Blocks](ขอบคุณ แหล่งข้อมูล
https://huggingface.co/collections/diffusers/custom-blocks-6606d867d2785f9098236a11) - [คอลเลกชัน Community Pipelines](ขอบคุณ แหล่งข้อมูล
https://huggingface.co/collections/diffusers/community-pipelines-6606d944d2785f9098236a21)
#ModularDiffusers #GenerativeAI #HuggingFace #DiffusionModels #AIDevelopment
ขอบคุณ แหล่งข้อมูล
https://huggingface.co/blog/modular-diffusers