Safetensors คืออะไร ทำไมถึงดีกว่า .ckpt (pickletensor)

Categorized as AI/ML, Open Source Tagged , , , , ,
Save and Share:

Safetensors เป็นรูปแบบโมเดลที่โดดเด่น ออกแบบมาเพื่อจัดเก็บ Tensor อย่างปลอดภัย ด้วยความเร็วและประสิทธิภาพที่น่าประทับใจ เมื่อเทียบกับทางเลือกอื่นๆ ในวงการ Safetensors ไม่เพียงแต่รวดเร็วอย่างเหลือเชื่อเท่านั้น แต่ยังได้รับการออกแบบโดยคำนึงถึงความเรียบง่ายและความปลอดภัยเป็นหลัก ทำให้แตกต่างจากรูปแบบดั้งเดิมมากมายที่ใช้ใน Machine Learning

ทำไมต้องเลือก Safetensors

ด้วยรูปแบบที่มีให้เลือกมากมายสำหรับ Machine Learning และการจัดเก็บข้อมูล คุณอาจสงสัยว่าอะไรที่ทำให้ Safetensors แตกต่างออกไป ลองมาเปรียบเทียบรูปแบบเหล่านี้ เพื่อทำความเข้าใจว่า Safetensors ให้ผลลัพธ์ตามเกณฑ์สำคัญได้อย่างไร:

  • ปลอดภัย (Safe): ไฟล์ที่ดาวน์โหลดมาแบบสุ่ม จะไม่รันโค้ดโดยพลการใช่ไหม
  • Zero-copy: การอ่านไฟล์ต้องใช้หน่วยความจำมากกว่าไฟล์ต้นฉบับหรือไม่
  • Lazy loading: สามารถตรวจสอบไฟล์ได้โดยไม่ต้องโหลดทุกอย่างหรือไม่ และสามารถโหลดเฉพาะบาง Tensor ในไฟล์ได้หรือไม่ โดยไม่ต้องสแกนทั้งไฟล์ (สำคัญในการตั้งค่าแบบกระจาย)
  • Layout control: สามารถควบคุมตำแหน่งของ Tensor ภายในไฟล์ได้ เพื่อให้เข้าถึง Tensor แต่ละตัวได้อย่างรวดเร็วหรือไม่
  • No file size limit: มีการจำกัดขนาดไฟล์หรือไม่
  • ความยืดหยุ่น (Flexibility): สามารถบันทึกโค้ดที่กำหนดเองในรูปแบบ และใช้งานในภายหลังได้โดยไม่ต้องมีโค้ดเพิ่มเติมหรือไม่
  • Bfloat16: รูปแบบรองรับ Bfloat16 ดั้งเดิม โดยไม่จำเป็นต้องมีวิธีแก้ไขปัญหาแปลกๆ หรือไม่

แต่ละสัญลักษณ์ ✔ แทนการมีอยู่, ❌ แทนการไม่มีอยู่, ~ แทนการมีอยู่บางส่วน, และ ? แทนการมีอยู่ที่ไม่ทราบ

รูปแบบปลอดภัยZero-copyLazy loadingไม่จำกัดขนาดไฟล์ควบคุม Layoutความยืดหยุ่นBfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

จากการเปรียบเทียบนี้ คุณจะเห็นว่า Safetensors ตอบสนองหรือเหนือกว่าคุณสมบัติที่รูปแบบโมเดลอื่นๆ มีให้ โดยเฉพาะอย่างยิ่งสำหรับความสามารถในการจัดการข้อมูลแบบ ‘zero-copy’ และ Lazy loading ซึ่งสามารถเพิ่มประสิทธิภาพในการจัดการข้อมูลในงาน Machine Learning ได้อย่างมาก

การเปรียบเทียบที่น่าสนใจ

แม้ว่าทุกรูปแบบจะมีจุดแข็งที่เป็นเอกลักษณ์ของตัวเอง ลองมาพิจารณาว่า Safetensors ทำงานได้ดีเพียงใด เมื่อเทียบกับรูปแบบที่ใช้กันทั่วไป:

  • Pickle (PyTorch): เป็นรูปแบบที่ใช้กันอย่างแพร่หลาย แต่ Pickle มีข้อเสียที่สำคัญคือ ไม่ปลอดภัย เนื่องจากอนุญาตให้รันโค้ดโดยพลการได้
  • H5 (Tensorflow): แม้ว่าจะปลอดภัย แต่ไม่รองรับ Zero-copy ซึ่งเป็นคุณสมบัติสำคัญสำหรับการจัดการข้อมูลอย่างมีประสิทธิภาพ
  • SavedModel (Tensorflow): รูปแบบนี้เฉพาะสำหรับ Tensorflow และขาดความยืดหยุ่นสำหรับการใช้งานอื่นๆ
  • Numpy (npz): แม้ว่าจะเป็นที่นิยม แต่รูปแบบนี้ไม่รองรับ Bfloat16 ซึ่งเป็นคุณสมบัติที่สำคัญมากขึ้นในโลก ML

เบื้องหลัง Safetensors

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

  • Zero-copy: การออกแบบ Safetensors ช่วยให้สามารถ Zero-copy ที่แท้จริงบน CPU ได้ หากไฟล์อยู่ในแคชแล้ว บน GPU แม้ว่าจะจำเป็นต้องมีการคัดลอกเสมอ เนื่องจากไม่มีดิสก์แคช แต่การออกแบบจะหลีกเลี่ยงความจำเป็นในการจัดสรร Tensor ทั้งหมดบน CPU ณ จุดใดจุดหนึ่ง
  • Endianness: Safetensors ใช้ Little-endian ordering ซึ่งเป็นตัวเลือกยอดนิยมในการจัดเก็บข้อมูล
  • Order: ใช้ ‘C’ หรือ Row-major ordering ตัวเลือกนี้สอดคล้องกับมาตรฐานที่แพร่หลายในการจัดเก็บข้อมูล
  • Stride: ไม่รองรับ Striding ต้องแพ็ก Tensor ทั้งหมดก่อนที่จะ Serialized การตัดสินใจออกแบบนี้มีพื้นฐานมาจากรูปแบบการใช้งานปัจจุบันในรูปแบบ Serialized

เหนือกว่า

นอกเหนือจากการเป็นรูปแบบการจัดเก็บข้อมูลที่มีประสิทธิภาพและปลอดภัยแล้ว Safetensors ยังนำข้อดีเพิ่มเติมมาสู่โต๊ะ:

  • การป้องกันการโจมตี DOS: การออกแบบของ Safetensors ช่วยลดความเป็นไปได้ที่ไฟล์ที่เป็นอันตรายจะก่อให้เกิดการโจมตี DOS มีการจำกัดขนาดของ Header เพื่อป้องกันการ Parse JSON ขนาดใหญ่มาก และมีการรับประกันว่าที่อยู่ในไฟล์จะไม่ทับซ้อนกัน ซึ่งหมายความว่าการโหลดไฟล์ไม่ควรใช้หน่วยความจำเกินขนาดไฟล์
  • โหลดเร็วขึ้น: Safetensors ข้ามการคัดลอก CPU เพิ่มเติมใน PyTorch ทำให้โหลด CPU ได้เร็วมาก เมื่อเทียบกับ Pickle เวลาในการโหลด GPU เร็วเท่ากันหรือเร็วกว่า PyTorch
  • Lazy Loading: ในการตั้งค่าแบบกระจาย (Multi-node หรือ Multi-gpu) Safetensors ช่วยให้โหลดเฉพาะบางส่วนของ Tensor ได้ ซึ่งช่วยเร่งเวลาในการโหลดโมเดลอย่างมาก และปรับปรุงรอบการตอบสนองของการพัฒนา

ในโลกจริง

Safetensors ได้รับการยอมรับอย่างกว้างขวางในองค์กร AI ชั้นนำ เช่น Hugging Face, EleutherAI และ StabilityAI โครงการที่โดดเด่นหลายโครงการที่ใช้ Safetensors ได้แก่:

โดยสรุปแล้ว Safetensors ที่มีคุณสมบัติและประโยชน์ที่เป็นเอกลักษณ์ กำลังจะกลายเป็น Game-changer ในโลกของ Machine Learning และการจัดเก็บข้อมูล ลองใช้งานดูสิ อนาคตของรูปแบบโมเดลกำลังรอคุณอยู่!

Leave a comment

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *