Safetensors là gì và tại sao chúng tốt hơn .ckpt (pickletensor)

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

Safetensors là một định dạng mô hình vượt trội được thiết kế để lưu trữ tensor một cách an toàn, đồng thời tự hào về tốc độ và hiệu suất ấn tượng so với nhiều định dạng thay thế khác trong lĩnh vực này. Không chỉ nhanh chóng vượt trội, Safetensors còn được thiết kế với sự đơn giản và an toàn làm trọng tâm, điều này tạo nên sự khác biệt so với nhiều định dạng truyền thống được sử dụng trong lĩnh vực học máy.

Tại sao nên chọn Safetensors?

Với vô số định dạng có sẵn cho học máy và lưu trữ dữ liệu, bạn có thể tự hỏi điều gì khiến Safetensors trở nên khác biệt. Vậy thì, hãy dành chút thời gian so sánh một số định dạng này để hiểu rõ hơn về cách Safetensors đáp ứng các thông số chính:

  • An toàn: Một tệp được tải xuống ngẫu nhiên có đảm bảo không chạy mã tùy ý không?
  • Zero-copy (Không sao chép): Việc đọc tệp có yêu cầu nhiều bộ nhớ hơn so với tệp gốc không?
  • Lazy loading (Tải chậm): Có thể kiểm tra tệp mà không cần tải mọi thứ không? Và có thể chỉ tải một số tensor trong đó mà không cần quét toàn bộ tệp không (điều này rất quan trọng trong môi trường phân tán)?
  • Kiểm soát bố cục: Có thể kiểm soát vị trí của tensor trong tệp để đảm bảo truy cập nhanh vào từng tensor không?
  • Không giới hạn kích thước tệp: Có giới hạn về kích thước tệp không?
  • Linh hoạt: Có thể lưu mã tùy chỉnh trong định dạng và sử dụng sau này mà không cần thêm mã bổ sung không?
  • Bfloat16: Định dạng có hỗ trợ bfloat16 gốc mà không cần các giải pháp kỳ lạ không?

Mỗi biểu tượng ✔ đại diện cho sự hiện diện, ❌ sự vắng mặt, ~ sự hiện diện một phần và ? sự hiện diện không rõ của một tính năng.

Định dạngAn toànZero-copyLazy loadingKhông giới hạn kích thước tệpKiểm soát bố cụcLinh hoạtBfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

Từ so sánh này, bạn có thể thấy rằng Safetensors đáp ứng hoặc vượt trội hơn các tính năng được cung cấp bởi các định dạng mô hình khác. Định dạng này đặc biệt đáng chú ý với khả năng thao tác dữ liệu ‘zero-copy’ và tải chậm, có thể tăng cường đáng kể hiệu quả xử lý dữ liệu trong các tác vụ học máy.

Một số so sánh đáng chú ý

Mặc dù tất cả các định dạng đều có những ưu điểm riêng, nhưng hãy cùng xem Safetensors so với một số định dạng phổ biến hơn như thế nào:

  • Pickle (PyTorch): Một định dạng được sử dụng rộng rãi, nhưng pickle có một nhược điểm đáng kể – đó là không an toàn vì nó cho phép thực thi mã tùy ý.
  • H5 (Tensorflow): Mặc dù an toàn, nhưng nó không hỗ trợ zero-copy, một tính năng không thể thiếu để thao tác dữ liệu hiệu quả.
  • SavedModel (Tensorflow): Định dạng này dành riêng cho Tensorflow và thiếu tính linh hoạt cho các ứng dụng khác.
  • Numpy (npz): Mặc dù phổ biến, nhưng định dạng này không hỗ trợ bfloat16, một tính năng ngày càng quan trọng trong thế giới ML.

Bên trong Safetensors

Đi sâu hơn một chút vào Safetensors, chúng ta thấy rằng nó không chỉ là một định dạng dữ liệu, mà còn là sự kết hợp của các lựa chọn thiết kế chu đáo giúp tăng cường tính an toàn, hiệu quả và tiện ích:

  • Zero-copy: Thiết kế của Safetensors cho phép zero-copy thực sự trên CPU nếu tệp đã có trong bộ nhớ cache. Trên GPU, mặc dù việc sao chép luôn cần thiết do không có bộ nhớ cache trên đĩa, nhưng thiết kế này bỏ qua nhu cầu phân bổ tất cả các tensor trên CPU tại bất kỳ thời điểm nào.
  • Endianness (Thứ tự byte): Safetensors sử dụng thứ tự byte little-endian, một lựa chọn phổ biến trong lưu trữ dữ liệu.
  • Order (Thứ tự): Nó áp dụng thứ tự ‘C’ hoặc thứ tự hàng chính. Lựa chọn này phù hợp với tiêu chuẩn phổ biến trong lưu trữ dữ liệu.
  • Stride (Bước nhảy): Striding không được hỗ trợ. Tất cả các tensor cần được đóng gói trước khi được tuần tự hóa. Quyết định thiết kế này được đưa ra dựa trên các mẫu sử dụng hiện tại trong các định dạng tuần tự hóa.

Những ưu điểm vượt trội

Ngoài việc đơn giản là một định dạng lưu trữ dữ liệu hiệu quả và an toàn, Safetensors còn mang lại một số lợi thế bổ sung:

  • Ngăn chặn tấn công DOS: Thiết kế của Safetensors giảm thiểu khả năng các tệp độc hại gây ra các cuộc tấn công DOS. Có giới hạn về kích thước của tiêu đề để ngăn chặn việc phân tích cú pháp JSON cực lớn và có một sự đảm bảo rằng các địa chỉ trong tệp không chồng lấn, có nghĩa là việc tải một tệp không bao giờ được vượt quá kích thước của tệp đó trong bộ nhớ.
  • Tải nhanh hơn: Safetensors bỏ qua việc sao chép CPU bổ sung trong PyTorch, cho phép thời gian tải CPU cực nhanh so với pickle. Thời gian tải GPU nhanh bằng hoặc nhanh hơn so với các định dạng tương đương của PyTorch.
  • Lazy Loading (Tải chậm): Trong môi trường phân tán (đa nút hoặc đa GPU), Safetensors cho phép chỉ tải một phần của tensor, giúp tăng tốc đáng kể thời gian tải mô hình và cải thiện vòng lặp phản hồi phát triển.

Ứng dụng rộng rãi

Safetensors đã được áp dụng rộng rãi tại các doanh nghiệp AI hàng đầu như  Hugging FaceEleutherAI, và StabilityAI. Một số dự án nổi bật sử dụng Safetensors bao gồm:

Tóm lại, Safetensors, với bộ tính năng và lợi ích độc đáo của mình, đã sẵn sàng trở thành một yếu tố thay đổi cuộc chơi trong thế giới học máy và lưu trữ dữ liệu. Vậy nên, hãy tiếp tục và trải nghiệm nó – tương lai của các định dạng mô hình đang chờ đợi bạn!

Leave a comment

Your email address will not be published. Required fields are marked *