Safetensors란 무엇이며, 왜 .ckpt (pickletensor)보다 더 나은가

카테고리 AI/ML, 오픈 소스 태그 , , , , ,
Save and Share:

Safetensors는 텐서를 안전하게 저장하기 위해 설계된 뛰어난 모델 형식으로, 이 분야의 다른 대안들에 비해 인상적인 속도와 성능을 자랑합니다. Safetensors는 매우 빠를 뿐만 아니라 단순성과 안전성을 핵심으로 설계되어 머신러닝에서 사용되는 많은 기존 형식과 차별화됩니다.

Safetensors를 선택해야 하는 이유?

머신러닝 및 데이터 저장을 위해 사용할 수 있는 다양한 형식이 있는데, Safetensors가 다른 형식과 차별화되는 이유는 무엇일까요? Safetensors가 제공하는 주요 매개변수를 이해하기 위해 이러한 형식들을 잠시 비교해 보겠습니다.

  • 안전성: 무작위로 다운로드한 파일이 임의의 코드를 실행하지 않을까요?
  • 제로 카피: 파일을 읽는 데 원본 파일보다 더 많은 메모리가 필요할까요?
  • 느린 로딩: 모든 것을 로드하지 않고 파일을 검사할 수 있을까요? 그리고 전체 파일을 스캔하지 않고 일부 텐서만 로드할 수 있을까요(분산 환경에서 중요)?
  • 레이아웃 제어: 개별 텐서에 대한 빠른 액세스를 보장하기 위해 파일 내에서 텐서의 위치를 제어할 수 있을까요?
  • 파일 크기 제한 없음: 파일 크기에 제한이 있을까요?
  • 유연성: 사용자 정의 코드를 형식으로 저장하고 추가 코드 없이 나중에 사용할 수 있을까요?
  • Bfloat16: 이 형식은 이상한 해결 방법 없이 기본 bfloat16을 지원할까요?

각 기호 ✔는 기능의 존재, ❌는 부재, ~는 부분적 존재, ?는 기능의 알 수 없음을 나타냅니다.

형식안전성제로 카피느린 로딩파일 크기 제한 없음레이아웃 제어유연성Bfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

이 비교에서 Safetensors가 다른 모델 형식이 제공하는 기능을 충족하거나 능가한다는 것을 알 수 있습니다. 특히 ‘제로 카피’ 데이터 조작 및 느린 로딩 기능은 머신러닝 작업에서 데이터 처리 효율성을 크게 향상시킬 수 있다는 점에서 주목할 만합니다.

주목할 만한 몇 가지 비교

모든 형식에는 고유한 강점이 있지만, Safetensors가 더 일반적으로 사용되는 형식과 비교하여 어떤지 살펴보겠습니다.

  • Pickle (PyTorch): 널리 사용되는 형식이지만, pickle은 임의의 코드 실행을 허용하므로 안전하지 않다는 심각한 단점이 있습니다.
  • H5 (Tensorflow): 안전하지만 효율적인 데이터 조작에 필수적인 기능인 제로 카피를 지원하지 않습니다.
  • SavedModel (Tensorflow): 이 형식은 Tensorflow에만 해당되며 다른 애플리케이션에 대한 유연성이 부족합니다.
  • Numpy (npz): 널리 사용되지만, 이 형식은 ML 세계에서 점점 더 중요해지는 기능인 bfloat16을 지원하지 않습니다.

Safetensors의 내부 구조

Safetensors를 좀 더 자세히 살펴보면 단순한 데이터 형식이 아니라 안전성, 효율성 및 유용성을 향상시키는 사려 깊은 설계 선택의 조합임을 알 수 있습니다.

  • 제로 카피: Safetensors 설계는 파일이 이미 캐시에 있는 경우 CPU에서 실제 제로 카피를 허용합니다. GPU에서는 디스크 캐시가 없기 때문에 항상 복사본이 필요하지만, 이 설계는 특정 시점에 CPU에 모든 텐서를 할당할 필요가 없습니다.
  • 엔디언: Safetensors는 데이터 저장에 널리 사용되는 리틀 엔디언 순서를 사용합니다.
  • 순서: ‘C’ 또는 행 우선 순서를 채택합니다. 이 선택은 데이터 저장의 일반적인 표준과 일치합니다.
  • 스트라이드: 스트라이딩은 지원되지 않습니다. 직렬화하기 전에 모든 텐서를 패킹해야 합니다. 이 설계 결정은 직렬화된 형식의 현재 사용 패턴을 기반으로 이루어졌습니다.

특별한 노력

단순히 효율적이고 안전한 데이터 저장 형식을 넘어 Safetensors는 몇 가지 추가적인 이점도 제공합니다.

  • DOS 공격 방지: Safetensors의 설계는 악성 파일로 인한 DOS 공격 가능성을 완화합니다. 매우 큰 JSON 구문 분석을 방지하기 위해 헤더 크기에 제한이 있으며, 파일의 주소가 겹치지 않도록 보장하므로 파일을 로드하는 데 메모리에서 파일 크기를 초과하지 않아야 합니다.
  • 더 빠른 로드: Safetensors는 PyTorch에서 추가 CPU 복사를 우회하여 pickle에 비해 CPU 로드 시간이 매우 빠릅니다. GPU 로드 시간은 PyTorch와 동일하거나 더 빠릅니다.
  • 느린 로딩: 분산 환경(다중 노드 또는 다중 GPU)에서 Safetensors는 텐서의 일부만 로드할 수 있으므로 모델 로드 시간을 크게 단축하고 개발 피드백 루프를 개선합니다.

실제 사용

Safetensors는 이미 Hugging Face, EleutherAIStabilityAI와 같은 주요 AI 기업에서 널리 채택되고 있습니다. Safetensors를 사용하는 몇 가지 주요 프로젝트는 다음과 같습니다.

결론적으로 Safetensors는 고유한 기능과 이점을 통해 머신러닝 및 데이터 저장 분야에서 판도를 바꿀 준비가 되었습니다. 자, 어서 사용해 보세요. 모델 형식의 미래가 여러분을 기다립니다!

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다