โมดูล AI ภาพ วิดีโอ และเสียง
รุ่นล่าสุดของแผนเดิม: ตอนนี้โค้ดทั้งสายสร้างเสร็จและขึ้นระบบแล้ว (studio, หน้าติดตั้งใน control, หน้า ComfyUI สำหรับแอดมิน) สิ่งที่ยังไม่รู้คือพฤติกรรมจริงบน GPU ของ PGX เอกสารนี้สรุปว่ามีอะไรแล้ว ทำงานอย่างไร ใช้พื้นที่เท่าไร และเสนอสิ่งที่ควรทำต่อ
1. สถานะตอนนี้
แยกตามที่ยืนยันได้จริง ที่ทำแล้วแต่ยังไม่ลองบนเครื่อง และที่ยังไม่ได้ทำ
ทำแล้ว และทดสอบด้วยของจำลอง
- catalog 5 บริการ พร้อมขนาดไฟล์จริงจาก Hugging Face และ workflow ของ ComfyUI 6 ไฟล์ (ตรวจกับ ComfyUI v0.38.2 จริงบน CPU: ชื่อ node และ input ถูกต้อง)
- runner เริ่ม/หยุด container ของ engine (ปักด้วย digest, เปิดแค่ 127.0.0.1)
- agent: ติดตั้ง/ลบโมดูล (ดาวน์โหลดต่อจากเดิมได้), รันงาน, เริ่ม engine ตามคำขอ, หยุดเมื่อว่าง 10 นาที
- server: คิวงาน (หนึ่งงานต่อเครื่อง, ส่งซ้ำเมื่อเครื่องหลุดหรือเจ้าของกลับมา), เก็บผล 7 วัน
- studio.wxch.org: ฟอร์มสร้างจาก catalog, อัปโหลดไฟล์, ดูผล
- comfy.wxch.org: หน้า ComfyUI เต็มสำหรับแอดมิน ผ่านการเชื่อมต่อของ agent
- หน้า "โมดูล AI" ใน control: เลือกติดตั้ง/ลบ เห็นขนาดรวมก่อน และส่วน "ไฟล์ที่เพิ่มเอง" แสดงไฟล์โมเดลที่แอดมินลงเองผ่านหน้า ComfyUI พร้อมขนาดและปุ่มลบ (ถอนโมดูลจะไม่ลบไฟล์เหล่านี้)
- API สำหรับโปรแกรมอื่น (ใช้ API key):
/v1/jobs(ทุกบริการรวมวิดีโอ) และแบบ OpenAI ที่รอผลให้ ได้แก่/v1/images/generations,/v1/images/edits,/v1/audio/transcriptions,/v1/audio/translations(ดู docs/API.md)
เขียนแล้ว แต่ยังไม่เคยรันจริงบน PGX
- การดึง image engine 38.5 GB ผ่าน runner และการเริ่ม ComfyUI ด้วยคำสั่งที่กำหนด
whisper_server.py(ยังไม่เคยรัน เพราะเครื่อง dev ไม่มี transformers)- ชื่อ output ของวิดีโอในประวัติของ ComfyUI (
imagesหรือvideos) - หน่วยความจำและเวลาจริงต่องาน (ทุกตัวเลขยังเป็นค่าประมาณ)
- หน้า ComfyUI ผ่านอุโมงค์: ทดสอบกับ engine จำลอง ยังไม่เคยลองกับหน้าเว็บ ComfyUI จริง
- การที่ Owner Guard ไม่นับ GPU ของ container ของเราเป็นเจ้าของ (ต้อง agent 0.12.2 และ runner ใหม่)
ยังไม่ได้ทำ
- แก้วิดีโอแบบ "ต่อความยาว" (extend)
- โควตาต่อผู้ใช้ (ตอนนี้รหัสผ่านเดียว คิวรวมสูงสุด 20 งาน)
- ปุ่ม Update agent ในหน้า Models ใช้ไม่ได้ผลบน PGX (ยังไม่รู้สาเหตุ)
- ทดสอบตัวติดตั้งอัตโนมัติ (Docker บนเครื่อง dev ใช้ไม่ได้)
- ล้างไฟล์ที่แอดมินสร้างผ่านหน้า comfy (อยู่ในโฟลเดอร์ output ของ engine)
2. ภาพรวมการทำงาน
ไม่มีพอร์ตเปิดบนเครื่อง GPU เครื่องเชื่อมออกไปหา server เอง และทุกอย่างวิ่งผ่านการเชื่อมต่อนั้น
เส้นทางของงานหนึ่งงาน
- ผู้ใช้กรอกฟอร์มใน studio → server ตรวจข้อมูลตามกฎของ catalog แล้วเก็บไฟล์ที่อัปโหลดและใส่คิว
- server เลือกเครื่องที่ติดตั้งบริการนั้น พร้อมรับงาน และหน่วยความจำเหลือมากสุด แล้วส่งข้อความ
job - agent เริ่ม engine ถ้ายังไม่รัน (ครั้งแรกอาจนานเพราะลงแพ็กเกจ Python) แล้วปล่อยโมเดลภาษาถ้าหน่วยความจำไม่พอ
- agent ดึงไฟล์เข้าจาก server ใส่ workflow ส่งให้ ComfyUI (หรือส่งเสียงให้ Whisper) รายงานความคืบหน้า
- agent อัปโหลดผลลัพธ์กลับ server และลบไฟล์ชั่วคราวบนเครื่อง ผู้ใช้เห็นผลและดาวน์โหลดได้ 7 วัน
- ถ้าเจ้าของเครื่องกลับมาใช้ (เมาส์/คีย์บอร์ด) งานจะถูกยกเลิกบนเครื่องและกลับเข้าคิวเอง
3. บริการ 5 อย่าง และพื้นที่ที่ใช้
ทั้งหมดไม่ได้ติดตั้งมาให้ ผู้ให้บริการเลือกเองต่อเครื่อง ตัวเลขขนาดไฟล์อ่านจากเซิร์ฟเวอร์ของ Hugging Face จริง ส่วนหน่วยความจำเป็นค่าประมาณจนกว่าจะวัด
| บริการ | โมเดล | ไฟล์โมเดล | หน่วยความจำ (ประมาณ) |
|---|---|---|---|
| image.generate สร้างภาพจากข้อความ | FLUX.1-schnell fp8 (Apache-2.0) | 17.2 GB | ~24 GB |
| image.edit แก้ภาพด้วยคำสั่ง | Qwen-Image-Edit 2511 fp8 + ตัวเข้ารหัสข้อความ Qwen2.5-VL 7B + VAE + LoRA Lightning 4 ขั้น | 31.0 GB | ~38 GB |
| video.generate ข้อความ/ภาพเป็นวิดีโอ | Wan2.2 TI2V-5B + UMT5 + VAE (Apache-2.0) | 18.1 GB | ~30 GB |
| video.edit ขยายความละเอียด / เพิ่มเฟรม | Real-ESRGAN x4 + FILM | 0.14 GB | ~6 GB |
| audio.transcribe เสียงเป็นข้อความ + คำบรรยาย | Whisper large-v3-turbo (MIT) | 1.6 GB | ~5 GB |
| รวมไฟล์โมเดลทั้ง 5 | 68.2 GB | ||
image ของ engine (NVIDIA PyTorch ใช้ร่วมกัน ขนาดบนดิสก์ที่ docker images รายงานบน PGX) | 38.5 GB | ||
| โฟลเดอร์ engine (โค้ด ComfyUI + แพ็กเกจ Python ประมาณ) | ~3.5 GB | ||
| รวมทุกอย่าง | ~110 GB | ||
ติดตั้งแค่ถอดเสียงอย่างเดียว ≈ 42 GB เพราะ image ของ engine เป็นต้นทุนก้อนใหญ่ที่ทุกบริการจ่ายร่วมกัน ถ้าลงบริการที่ใช้ ComfyUI ตัวที่สองจะเพิ่มแค่ไฟล์โมเดลของตัวนั้น
4. วิธีติดตั้ง (ผู้ให้บริการเลือกเอง)
ตอนติดตั้งเต็ม
curl -fsSL https://control.wxch.org/get | WXCH_TOKEN=… WXCH_MODULES=all sh
หรือระบุชื่อ เช่น image.generate,audio.transcribe
ทีหลัง (เครื่องที่ติดตั้งแล้ว)
curl -fsSL https://control.wxch.org/get | sh -s -- modules image.generate video.generate
ขั้นนี้อัปเดต runner ด้วย ไม่ต้องใช้ token
จากหน้าเว็บ
control.wxch.org → "โมดูล AI" ติ๊กเลือก เห็นขนาดรวมและพื้นที่ว่างก่อนกดติดตั้ง ลบได้ (ไฟล์ที่บริการอื่นใช้อยู่จะไม่ถูกลบ)
ผู้ให้บริการที่ไม่เปิดบริการภาพ/วิดีโอ จะเห็น studio ขึ้นว่า "ผู้ให้บริการยังไม่เปิดบริการนี้" และไม่รับงาน
5. หลักการให้บริการ
ตามที่ตกลง: เป็นผู้ให้บริการ ต้องพร้อมใช้ ไม่ใช่ให้ใครไปหยุดอะไรเพื่อให้อีกอย่างทำงาน
แชตกับภาพ/วิดีโอใช้พร้อมกัน
- GPU ที่ถูกใช้โดย container ของเราเอง ไม่ถูกนับเป็น "เจ้าของเครื่องใช้" (runner บอก id ของ container ให้ agent เทียบกับ cgroup)
- เจ้าของนั่งใช้เครื่องจริง หรือโปรแกรมอื่นใช้ GPU ยังหยุดรับงานและปล่อยโมเดลเหมือนเดิม
- หน่วยความจำไม่พอ → ปล่อยโมเดลภาษาที่โหลดอยู่ก่อนเริ่มงาน (แชตถัดไปจะโหลดกลับเอง) engine ที่เพิ่งทำงานเสร็จถือว่าอุ่นอยู่ ไม่ปล่อยซ้ำ
คิวและการเก็บผล
- หนึ่งงานต่อเครื่อง งานที่เครื่องปฏิเสธ (เจ้าของกลับมา/ไม่ว่าง) กลับเข้าคิว ไม่นับว่าล้มเหลว
- เครื่องหลุดระหว่างทำ → ส่งใหม่ (ไม่เกิน 3 ครั้ง) · คิวสูงสุด 20 งาน · เก็บผลลัพธ์ 7 วัน แล้วลบอัตโนมัติ
- engine หยุดเองเมื่อว่าง 10 นาที (หน้า comfy ที่เปิดอยู่นับว่ากำลังใช้)
ความปลอดภัย
- agent ไม่มีสิทธิ์ Docker เอง runner เป็นตัวเดียวที่เริ่ม container และกำหนด image (ปักด้วย digest), พอร์ต, โฟลเดอร์ และคำสั่งเอง agent ระบุได้แค่ชื่อ engine
- container: ไม่ privileged, cap-drop ALL, no-new-privileges, รันด้วยผู้ใช้ของ agent, เปิดพอร์ตแค่ 127.0.0.1, ปิด API node ของ ComfyUI ที่เรียกบริการภายนอก
- comfy.wxch.org ต้องใช้รหัสผ่าน (+2FA) เพราะ ComfyUI รัน workflow อะไรก็ได้ · cookie ของเราไม่ถูกส่งต่อให้ engine
6. งานถัดไป (ข้อเสนอ)
เรียงตามที่ฉันแนะนำ อยากเปลี่ยนลำดับหรือเพิ่มอะไร เขียนในกล่องข้อเสนอแนะด้านล่าง
| # | งาน | ทำไม |
|---|---|---|
| 1ทดลองบน PGX | ติดตั้ง image.generate ให้เสร็จ สั่งงานใน studio หนึ่งงาน แล้ววัดเวลาและหน่วยความจำ | ทุกอย่างบน GPU ยังไม่เคยรันจริง ผลนี้ตัดสินว่าตัวเลขประมาณใช้ได้ไหม และเจอข้อผิดพลาดแรกๆ |
| 2แก้ปุ่ม Update agent | หาสาเหตุที่การอัปเดตจากหน้า Models ไม่เปลี่ยนไบนารีบน PGX | ทุกครั้งที่ออกรุ่นใหม่ต้องใช้ตัวติดตั้งเต็มแทน ซึ่งช้าและเสี่ยงกว่า |
| 3API สำหรับโปรแกรมอื่น ทำแล้ว 5 ต.ค. | /v1/jobs และแบบ OpenAI (images, audio) ใช้ API key เดิม จำกัด 5 งานต่อ key ดูตัวอย่างใน docs/API.md | ให้โปรแกรมภายนอกเรียกสร้างภาพ/เสียงได้เหมือนแชต ถ้าจะเปิดเป็นบริการให้คนอื่น ยังไม่ได้ทดสอบกับเครื่อง GPU จริง |
| 4ผู้ใช้และโควตา | บัญชีผู้ใช้แยกคน จำกัดจำนวนงาน/วัน ดูประวัติของตัวเอง | ตอนนี้รหัสผ่านเดียวกับแอดมินและคิวรวมกัน ถ้ามีผู้ใช้หลายคนจะชนกัน |
| 5ทางเลือกโมเดล | FLUX.1-dev (คุณภาพสูงกว่า ช้ากว่า), Wan 14B, โมเดลภาพอื่น ให้ผู้ให้บริการเลือกในหน้าโมดูล | ตอนนี้แต่ละบริการมีโมเดลเดียว ยังไม่ได้เลือกคุณภาพ/ความเร็ว |
| 6ล้างไฟล์หน้า comfy | ล้างโฟลเดอร์ output/ input ของ ComfyUI ที่แอดมินสร้างเองตามอายุไฟล์ | ตอนนี้ระบบลบเฉพาะไฟล์ของงานจาก studio ไฟล์ของแอดมินสะสมจนดิสก์เต็มได้ |
| 7ทดสอบตัวติดตั้ง | เอา Docker กลับมา (หรือใช้ CI) รัน tests/installer กับหลาย distro | ขั้น modules และ vllm ที่แก้ยังไม่ได้ทดสอบอัตโนมัติ |
| 8exchange.wxch.org | บอกว่าตั้งใจใช้ทำอะไร | มี DNS แล้วแต่ยังไม่มีเนื้อหาในโปรเจกต์ |
7. ข้อเสนอแนะ
เขียนได้เลย บันทึกไว้ในระบบ (ไม่ส่งไปที่อื่น) ที่หน้าแรกของ note.wxch.org มีรายการรวมและปุ่มคัดลอกทั้งหมด เพื่อนำไปบอกฉันได้ในแชต
เอกสารนี้แทนรุ่นร่างเดิมที่เคยอยู่ที่ notepad.wxch.org/doc/modules-ai (ลบแล้ว) · แก้ไขที่ web/private/modules-ai.html ในโปรเจกต์