6 คะแนน โดย GN⁺ 2025-10-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • OpenZL ที่ Meta เปิดตัวคือ เฟรมเวิร์กบีบอัดโอเพนซอร์สแบบใหม่ ที่ให้ การบีบอัดแบบไม่สูญเสียข้อมูล สำหรับข้อมูลที่มีโครงสร้าง โดยสามารถรับรู้รูปแบบข้อมูลและทำกระบวนการแปลงได้อย่างมีประสิทธิภาพ
  • แม้จะใช้ขั้นตอนการแปลงที่แตกต่างกันตามแต่ละฟอร์แมตไฟล์ แต่ถูกออกแบบมาให้สามารถถอดกลับไฟล์ทั้งหมดได้ด้วย ตัวแตกไฟล์แบบสากลเพียงตัวเดียว
  • สามารถ ส่งโครงสร้างข้อมูลให้ตัวบีบอัดโดยตรง เพื่อปรับกระบวนการแปลงให้เหมาะสม และเลือกจุดสมดุลระหว่างความเร็วกับอัตราการบีบอัดได้ผ่าน คอนฟิกการบีบอัด (config) ที่ผ่านการฝึกแล้ว
  • จุดเด่นคือทำงานร่วมกับระบบ Managed Compression ภายในของ Meta ทำให้สามารถ ฝึกใหม่และอัปเดตอัตโนมัติ ตามการเปลี่ยนแปลงของข้อมูลได้
  • แสดงประสิทธิภาพสูงกับชุดข้อมูลที่มีโครงสร้างชัดเจน ช่วย ปรับปรุงประสิทธิภาพการประมวลผลของดาต้าเซ็นเตอร์ และชี้ให้เห็นความเป็นไปได้ในการทำให้ระบบนิเวศการบีบอัดเรียบง่ายขึ้นด้วยดีโคเดอร์เพียงตัวเดียว

ภาพรวมของ OpenZL

  • OpenZL คือ เฟรมเวิร์กบีบอัดข้อมูลแบบรับรู้ฟอร์แมต ที่ Meta เปิดตัว โดยให้ ประสิทธิภาพการบีบอัดที่ปรับให้เหมาะกับงานเฉพาะ สำหรับข้อมูลแบบมีโครงสร้าง
    • หากระบุฟอร์แมตของข้อมูลอย่างชัดเจน ระบบจะใช้กราฟการแปลงภายในเพื่อค้นหารูปแบบและความซ้ำของข้อมูล แล้วบีบอัดได้อย่างมีประสิทธิภาพยิ่งขึ้น
  • เป็นแนวคิดต่อยอดจาก Zstandard ที่รวมทั้งประสิทธิภาพของการบีบอัดที่ปรับจูนตามฟอร์แมต และความง่ายในการดูแลรักษาแบบมีไฟล์ปฏิบัติการเดียว
    • Zstandard สร้างก้าวกระโดดครั้งใหญ่ในดาต้าเซ็นเตอร์ด้วยการตอบโจทย์ทั้ง ความเร็วและอัตราการบีบอัด แต่ก็มี ข้อจำกัดของการปรับปรุงแบบค่อยเป็นค่อยไป จากความเป็นอัลกอริทึมอเนกประสงค์
  • สำหรับข้อมูลที่มีโครงสร้าง การบีบอัดแบบปรับให้เข้ากับรูปแบบข้อมูลมักได้เปรียบกว่าวิธีบีบอัดทั่วไปทั้งในด้านอัตราการบีบอัดและความเร็ว
  • อย่างไรก็ตาม การสร้างและดูแล ตัวบีบอัด/ตัวกู้คืนเฉพาะทาง สำหรับแต่ละฟอร์แมตไฟล์มี ภาระสูง
  • OpenZL มุ่งให้ได้ทั้งประสิทธิภาพของตัวบีบอัดแบบปรับแต่งเฉพาะ และ ความสะดวกของการใช้งานแบบไบนารีเดียว ไปพร้อมกัน

วิธีบีบอัดตามโครงสร้าง

  • ขณะที่ตัวบีบอัดทั่วไปประมวลผลข้อมูลแบบคาดเดารูปแบบ OpenZL จะ รับโครงสร้างข้อมูลเป็นอินพุตอย่างชัดเจน
    • ผู้ใช้สามารถอธิบายรูปร่างของข้อมูลได้ผ่าน Simple Data Description Language (SDDL) เช่น แถว คอลัมน์ enum และโครงสร้างแบบซ้อน
    • จากข้อมูลนี้ OpenZL จะสร้าง ลำดับการแปลงที่เหมาะสมที่สุด (Plan) ผ่านการฝึกแบบออฟไลน์ด้วยเทรนเนอร์
    • จากนั้นในขั้นตอนบีบอัด จะสร้าง กราฟถอดรหัสจริง (Resolved Graph) ตาม Plan และฝังไว้ในเฟรม

ตัวอย่าง: การบีบอัดข้อมูล SAO

  • โดยใช้ไฟล์ SAO จาก Silesia Compression Corpus เป็นตัวอย่าง OpenZL จะแยกแต่ละฟิลด์ออกแล้วแปลงเป็น สตรีมข้อมูลชนิดเดียวกัน ก่อนทำการปรับให้เหมาะสมแต่ละส่วน
    • พิกัดแกน X (SRA0) มีแนวโน้มเรียงลำดับ จึงใช้ การแปลงแบบ delta
    • พิกัดแกน Y (SDEC0) ใช้ข้อจำกัดของช่วงค่าเพื่อทำ transpose transformation
    • ฟิลด์ที่เหลือมีจำนวนค่าที่ไม่ซ้ำต่ำ จึงใช้ tokenize transformation เพื่อบีบอัดแบบอาศัยพจนานุกรม
  • ผลลัพธ์คือทำอัตราการบีบอัดได้ มากกว่า 2 เท่าเมื่อเทียบกับ zstd และยังมี ความเร็วสูงกว่า (340 MB/s)

การสร้างตัวบีบอัดอัตโนมัติและกระบวนการฝึก

  • เทรนเนอร์ของ OpenZL จะ ค้นหาและเรียนรู้กลยุทธ์การบีบอัดโดยอัตโนมัติ จากตัวอย่างข้อมูล
    • กระบวนการฝึก: describe(SDDL) → train(สร้าง Plan) → compress(ฝังกราฟ) → decode(กู้คืนด้วยไบนารีเดียว)
    • ใช้ control points เพื่อเลือกเส้นทางที่เหมาะสมที่สุดในรันไทม์ตามข้อมูลสถิติ
    • แม้นำ Plan ใหม่มาใช้ ก็ยัง ถอดรหัสข้อมูลเดิมได้เหมือนเดิม ทำให้คงความเข้ากันได้ย้อนหลัง

ข้อดีของตัวแตกไฟล์เพียงตัวเดียว

  • OpenZL สามารถกู้คืนข้อมูลได้ด้วย ไบนารีตัวแตกไฟล์เพียงตัวเดียว ไม่ว่าจะถูกบีบอัดด้วยฟอร์แมตใดก็ตาม
    • ทำ การตรวจสอบด้านความปลอดภัยและความเสถียร เพียงครั้งเดียว แล้วนำไปใช้ได้กับทั้งระบบ
    • เมื่ออัปเดตตัวแตกไฟล์ ก็สามารถนำ ประโยชน์ด้านประสิทธิภาพที่ดีขึ้น ไปใช้กับข้อมูลเก่าทั้งหมดได้
    • ได้ทั้ง ความเรียบง่ายในการปฏิบัติการ และ ความสม่ำเสมอทั่วทั้งฟลีต
    • จัดการหลายฟอร์แมตพร้อมกันได้โดยยัง คงความเข้ากันได้ย้อนหลัง

ผลการเปรียบเทียบประสิทธิภาพ

  • ในหลายชุดข้อมูล OpenZL ทำได้ทั้ง อัตราการบีบอัดและความเร็วที่สูงกว่า เมื่อเทียบกับตัวบีบอัดอเนกประสงค์อย่าง zstd และ xz
    • SAO: อัตราการบีบอัด 2.06 เท่า, ความเร็วในการกู้คืน 1200 MB/s
    • ERA5 (ข้อมูลเชิงตัวเลข): ได้อัตราการบีบอัดที่สูงกว่าในเวลาเท่ากัน หรือเร็วกว่าในอัตราการบีบอัดเท่ากัน
    • ในชุดข้อมูล Parquet และ CSV ก็สามารถทำ การปรับแต่งเฉพาะตามฟอร์แมต ได้จากการรับรู้รูปแบบ
  • อย่างไรก็ตาม สำหรับข้อมูล ไร้โครงสร้าง เช่นข้อความล้วน ประสิทธิภาพที่ได้มีข้อจำกัด และจะ fallback ไปใช้ zstd เพื่อรับประกันประสิทธิภาพขั้นต่ำ
  • สามารถเลือกชุดค่าผสมได้หลากหลายใน 3 แกนคือ อัตราการบีบอัด / ความเร็วการบีบอัด / ความเร็วการกู้คืน ซึ่งให้ ความยืดหยุ่นที่ต่างจากการปรับ “ระดับ” ของตัวบีบอัดแบบดั้งเดิม

การเปลี่ยนแปลงของข้อมูลและการฝึกใหม่อัตโนมัติ

  • เชื่อมต่อกับ Managed Compression ของ Meta เพื่อ ฝึกแผนการบีบอัดใหม่โดยอัตโนมัติ เมื่อฟอร์แมตข้อมูลเปลี่ยน
    • มีการสุ่มตัวอย่างและประเมินผลเป็นระยะ และหากพบ Plan ที่ดีกว่าจะอัปเดตให้อัตโนมัติ
    • ตัวแตกไฟล์ยังคงเดิม จึง ลดความเสี่ยงในการปฏิบัติการ ให้ต่ำที่สุด

การมีส่วนร่วมในระบบนิเวศโอเพนซอร์สและทิศทางในอนาคต

  • OpenZL เหมาะกับ ข้อมูลโครงสร้างแบบเวกเตอร์ ตาราง และต้นไม้ และให้ประสิทธิภาพโดดเด่นกับข้อมูลอนุกรมเวลา, ML tensor และตารางฐานข้อมูล
  • สำหรับข้อความไร้โครงสร้าง (เช่น enwik, dickens) จะใช้ zstd
  • แผนในอนาคต:
    • ขยายไลบรารีการแปลงสำหรับข้อมูลอนุกรมเวลาและข้อมูลกริด
    • เพิ่มความสามารถของ SDDL ในการแสดงข้อมูลแบบซ้อน
    • ปรับปรุงประสิทธิภาพและความเสถียรของระบบค้นหาตัวบีบอัดอัตโนมัติ
  • วิธีเข้าร่วมกับชุมชน:
    • ดูตัวอย่างและเอกสารได้ที่ เว็บไซต์ OpenZL และ GitHub repository
    • ทดสอบฟอร์แมตข้อมูลใหม่และเสนอ Plan
    • มีส่วนร่วมได้ทั้งการปรับแต่งเอนจิน C/C++, การเพิ่มการแปลงใหม่ และการทำ benchmark

บทสรุป

  • OpenZL คือแนวทางใหม่ที่ ทำให้การบีบอัดแบบรับรู้ฟอร์แมตกลายเป็นมาตรฐาน พร้อมกับ รวมระบบนิเวศเดิมให้ยึดตัวถอดรหัสเพียงตัวเดียวเป็นศูนย์กลาง
  • Meta ต้องการใช้สิ่งนี้เพื่อปรับปรุงทั้ง ประสิทธิภาพการบีบอัด ความเร็ว และความง่ายในการบำรุงรักษา ของดาต้าเซ็นเตอร์โดยรวม

1 ความคิดเห็น

 
GN⁺ 2025-10-07
ความคิดเห็นจาก Hacker News
  • หลังจากเห็นโพสต์ HN ล่าสุดเกี่ยวกับการบีบอัดข้อมูลจีโนม (ลิงก์) ก็พยายามอย่างมากที่จะไม่พูดถึง OpenZL นี่เป็นตัวอย่างที่แสดงให้เห็นชัดเจนว่าแค่แปลงข้อมูลแบบง่าย ๆ ก็เพิ่มประสิทธิภาพการบีบอัดได้มาก และ OpenZL ก็ทำการแปลงลักษณะนี้ภายในได้ง่ายเช่นกัน (ใช้ SDDL)
    • ผมนึกถึงโพสต์นั้นขึ้นมาทันที เลยอยากรู้ว่ามีใครเคยเปรียบเทียบตัวบีบอัดเฉพาะทางที่พูดถึงในนั้นกับ OpenZL บ้างไหม ตัวอย่างเช่น ชุดข้อมูล 2.6Tbp 661k ของ Grace Blackwell ถือเป็นมาตรฐานคลาสสิกในไมโครไบโอมจีโนมิกส์ และวิธี MiniPhy ของ Karel Břinda ลดขนาดจาก 2.46TiB เหลือ 27GiB (อัตราบีบอัด 91) เลยอยากรู้ว่าจะได้ผลลัพธ์ใกล้เคียงกันไหม
    • อยากเห็นผล benchmark กับฟอร์แมตจีโนมทั่วไป (fa, fq, sam, vcf) โดยเฉพาะอยากรู้ว่านำไปใช้กับข้อมูล nanopore ได้ไหม การเก็บ FAST5/POD5 ยุ่งยากมากจนทำให้ข้อมูลที่มีประโยชน์หายไปเยอะ
    • [0] ผู้เขียนบทความเอง ขอบคุณที่อดกลั้นไว้ ยินดีด้วยและทำได้ดีมาก อยากลองใช้แน่นอน อยากทราบว่านอกจากคู่มือ OpenZL สำหรับการเทรน fasta compressor (ลิงก์) แล้ว มีคำแนะนำเพิ่มเติมอะไรอีกไหม
  • พูดถึงเรื่องที่เกี่ยวกันหน่อย ช่วงหลังมีการคุยกันเกี่ยวกับฟอร์แมตไฟล์ F3 (ลิงก์) ซึ่งตรงนี้ก็สามารถทำ format-aware compression ได้ด้วยการฝังโค้ด decompressor เป็น WASM แรงจูงใจหลักของ F3 คือความเข้ากันได้ในอนาคต แต่ก็ใช้ algorithm บีบอัดแบบปรับแต่งเฉพาะได้ แนวทางต่างจาก OpenZL โดยสิ้นเชิง และ dependency ของ OpenZL ก็เบากว่ามากด้วย (ต้องมีแค่ SDDL compiler/runtime)
    • zpaq เองก็มีความสามารถฝัง decompressor มาตั้งแต่ 15 ปีก่อนแล้ว เสียดายที่ไม่มีใครพูดถึง
    • ถ้ามีโค้ดที่รันได้อยู่ในไฟล์บีบอัดด้วย แบบนี้จะเพิ่มความเสี่ยงด้านไวรัสหรือช่องโหว่มากขึ้นไหม
  • แปลกใจที่มีเครื่องมือดีขนาดนี้ออกมา รู้สึกว่าควรมีตั้งนานแล้ว ถ้าเข้าใจโครงสร้างของ data container ได้ถูกต้อง ประสิทธิภาพ deduplication จะสูงขึ้นมาก ไลเซนส์ BSD-3-Clause มี implementation C++ ที่สะอาด และเอกสารก็ดีมาก หวังว่าจะมีการเพิ่มฟอร์แมตไฟล์อีกมากในอนาคต
    • การทำให้เข้ากับลักษณะเฉพาะของฟอร์แมตไฟล์เป็นวิธีที่มีมาก่อนแล้ว (เช่น x86 opcode prefilter ของ 7-Zip, การฝัง specialized decoder bytecode ของ ZPAQ) แต่ implementation จริงของ OpenZL วิธีอธิบายข้อมูล และระบบ training น่าประทับใจมาก
  • ถ้าผมเข้าใจถูก การอธิบายโครงสร้างข้อมูลด้วย SDDL ทำให้ตัวบีบอัดวางกลยุทธ์การบีบอัดที่เหมาะกับแต่ละส่วนได้ ฟังดูเจ๋งมาก หวังว่าจะพัฒนาเป็น framework ทั่วไปสำหรับการบีบอัดฟอร์แมตแบบ custom ได้
    • ใช่เลย! SDDL (ลิงก์) เป็น toolkit แบบ no-code สำหรับงานลักษณะนี้ ตอนนี้ความสามารถยังจำกัดอยู่ แต่มีแผนขยายต่อไป ก่อนหน้านั้นก็สามารถเขียน parser ของฟอร์แมตเองด้วย C++ หรือ Python ได้ และขอเสริมว่าโค้ดนี้จำเป็นเฉพาะฝั่ง compressor เท่านั้น ส่วน decompressor ทำงานได้โดยไม่ขึ้นกับฟอร์แมต
  • อยากรู้ว่าเครื่องมือนี้รองรับ seekable compression ไหม
  • ตอนอ่านเอกสารก็สงสัยว่า AI จะช่วยแปลงคำอธิบายเทคโนโลยีเดิมอย่าง imhex หรือ Kaitai มาเป็น SDDL ได้ดีแค่ไหน ถ้าได้ก็น่าจะรวบรวม schema ดี ๆ ได้อย่างรวดเร็ว
    • เพิ่งรู้ว่ามีเครื่องมือพวกนี้ด้วย แต่ดูแล้วน่าจะแปลงเป็น SDDL ได้จริง วางแผนว่าจะไปลองดูแน่นอน
  • Nimble ของ Meta มี OpenZL (เวอร์ชันก่อนเปิดโอเพนซอร์ส) ฝังรวมแบบเนทีฟอยู่แล้ว และได้ประโยชน์อย่างมาก
    • backend compression สำหรับฟอร์แมตข้อมูลแบบคอลัมน์เข้ากับ OpenZL มาก ถ้ารู้ว่าข้อมูลที่จะบีบอัดเป็นตัวเลขอย่าง i64 หรือ float ก็จะได้ข้อได้เปรียบเหนือ Zstandard อย่างชัดเจนทันที
  • อยากรู้ว่า OpenZL เหมาะกับข้อมูล log (JSON log ที่ schema ยังไม่แน่นอน) ไหม กำลังพัฒนาเครื่องมือบีบอัด log อยู่ (ลิงก์)
  • Non-Linear Compression (การบีบอัดแบบไม่เชิงเส้น) เคยมีไอเดียและลองทำเล่น ๆ มาก่อนแต่ไปไม่ไกลนัก (ลิงก์) เลยดีใจมากที่ได้เห็นความพยายามแบบนี้ ขอบคุณที่แชร์
  • น่าสนใจแบบสุด ๆ ไปเลย คืนนี้ว่าจะลองกับ CSV ขนาดใหญ่แน่นอน
    • ถ้าได้ลองแล้วมาเล่าประสบการณ์ก็ดีนะ OpenZL เดิมทีพัฒนาไว้ใช้ภายใน Meta แต่ช่วงหลังพยายามอย่างมากให้คนนอกใช้งานได้ง่ายขึ้น ยินดีรับฟีดแบ็ก