세이프텐서, CKPT, ONNX, GGUF 및 기타 주요 AI 모델 형식 [2025]

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

인공지능과 머신러닝의 발전으로 인해 효율적이고 안전하며 다양한 시스템과 호환되는 모델 저장 및 배포 방법에 대한 필요성이 커졌습니다. 모델이 점점 더 복잡해지고 다양한 환경에서 사용됨에 따라 직렬화 형식의 선택은 중요한 결정이 되었습니다. 이 선택은 AI 시스템의 성능, 리소스 사용량, 보안에 영향을 미칩니다.

이 보고서는 세이프텐서(Safetensors), CKPT, ONNX, GGUF를 포함한 주요 모델 직렬화 형식을 검토합니다. 각 형식의 고유한 특징, 일반적인 사용 사례, 그리고 상호 비교를 중점적으로 다룹니다.

1. AI/ML에서의 모델 직렬화 소개

모델 직렬화는 훈련된 머신러닝 모델을 파일에 저장하는 과정입니다. 이 파일은 나중에 예측, 추가 훈련 또는 분석과 같은 용도로 저장, 공유 또는 다시 로드할 수 있습니다. 이 기능은 연구 개발부터 대규모 배포에 이르기까지 전체 AI/ML 수명 주기에서 필수적입니다.

AI/ML 수명 주기에서 모델 형식의 중요한 역할

모델을 표준 형식으로 저장하는 것은 여러 가지 이유로 중요합니다.

  • 재현성: 연구 실험을 정확하게 복제하고 검증할 수 있게 합니다.
  • 협업: 팀이 쉽게 모델을 공유하여 협업하고 모델을 더 큰 시스템에 통합할 수 있게 합니다.
  • 배포: 직렬화는 훈련된 모델을 휴대 가능한 파일로 변환하여 클라우드 서버에서부터 엣지 디바이스에 이르기까지 다양한 환경에서 로드하고 실행할 수 있도록 합니다.
  • 전이 학습: 사전 훈련된 모델을 새로운 작업의 기초로 사용할 수 있게 하여 상당한 훈련 시간과 데이터를 절약합니다.

최신 형식이 해결하는 과제 개요

머신러닝이 발전함에 따라 최신 직렬화 형식은 몇 가지 주요 과제를 해결하기 위해 진화했습니다.

  • 보안: 주요 우려 사항은 전통적인 방법, 특히 파이썬의 pickle 모듈을 사용하는 방법의 보안 위험입니다. 이러한 방법은 모델을 로드할 때 악성 코드가 실행될 수 있도록 허용하여, 신뢰할 수 없는 출처의 모델일 경우 심각한 보안 위협을 초래합니다.
  • 성능: 오늘날의 크고 복잡한 모델은 매우 빠른 로딩과 효율적인 메모리 관리가 필요합니다. 이는 휴대폰과 같이 리소스가 제한된 장치나 즉각적인 응답이 필요한 애플리케이션에 특히 중요합니다.
  • 이식성과 상호운용성: 머신러닝 세계는 파이토치(PyTorch), 텐서플로우(TensorFlow), JAX와 같은 다양한 프레임워크를 사용합니다. 큰 수정 없이 이러한 프레임워크 간에 모델을 쉽게 이동하고 다른 하드웨어(GPU, TPU)에서 실행할 수 있는 형식이 필요합니다.

최근 몇 년 동안 AI 커뮤니티는 GGUF 및 세이프텐서와 같이 더 효율적이고 안전한 형식으로 전환했으며, 이는 이러한 문제를 해결하기 위한 공동의 노력을 반영합니다.

파이토치가 .pt.pth 파일에 파이썬 pickle 모듈을 사용했던 것과 같은 초기 ML 모델 저장 방식은 사용의 용이성 때문에 선택되었습니다. 모델의 설계와 옵티마이저 같은 훈련 상태를 포함한 복잡한 파이썬 객체를 쉽게 저장할 수 있었습니다. 이는 파이썬 환경에서의 연구에는 편리했지만, 심각한 보안 결함을 만들었습니다. pickle 모듈은 로딩 과정에서 파일 내에 포함된 모든 코드를 실행할 수 있도록 설계되었습니다. 이는 신뢰할 수 없는 출처에서 겉보기에 무해해 보이는 모델을 로드하는 것이 전체 시스템을 위험에 빠뜨릴 수 있음을 의미합니다.

세이프텐서와 같은 형식의 생성과 ONNX 및 GGUF의 사용 증가는 이러한 보안 위험뿐만 아니라 더 나은 성능과 이식성에 대한 필요성에 대한 직접적인 대응입니다. 예를 들어 세이프텐서는 악성 코드 실행을 방지하기 위해 특별히 제작되었습니다. 이는 머신러닝 분야가 성숙하고 AI가 연구에서 실제 애플리케이션으로 이동함에 따라 보안과 효율성이 더 이상 부차적인 고려 사항이 아니라 새로운 형식을 설계하는 핵심 원칙이 되었음을 보여줍니다. 이 변화는 연구 중심의 유연성에서 프로덕션 수준의 보안과 견고성으로의 필요한 전환을 나타내며, 더 오래되고 허용적인 방법의 "기술 부채"를 해결합니다.

파이토치의 .pt/.pth나 텐서플로우/케라스의 .ckpt/.h5와 같은 프레임워크 네이티브 형식은 특정 프레임워크와 긴밀하게 통합되어 있습니다. 이는 단일 생태계 내에서는 효율적이지만 상호운용성에 심각한 문제를 야기합니다. 한 프레임워크에서 훈련된 모델은 복잡한 변환이나 각 프레임워크에 대한 별도의 시스템 유지 없이는 다른 프레임워크에서 쉽게 사용할 수 없습니다. 이는 단절된 개발 및 배포 워크플로우로 이어집니다.

Open Neural Network Exchange (ONNX) 형식은 이러한 장벽을 허물기 위해 만들어졌습니다. 이는 모델에 대한 "플랫폼 간" 및 "벤더 중립적" 표준을 제공합니다. 이는 단일 프레임워크와 독립적인 추상적인 방식으로 모델의 구조(계산 그래프)를 정의함으로써 이를 달성합니다. 유사하게, GGUF는 원래 llama.cpp 프로젝트를 위해 만들어졌지만, 다양한 플랫폼에서 대규모 언어 모델(LLM)의 호환성을 개선하는 데 중점을 둡니다.

오늘날 형식의 다양성은 ML 산업의 핵심적인 긴장 상태를 반영합니다. 즉, 개발 중 프레임워크별 기능(예: 연구 유연성을 위한 파이토치의 동적 그래프)에 대한 요구와 보편적이고 효율적이며 안전한 배포에 대한 필요성 사이의 긴장입니다. 이 긴장 상태는 여러 형식이 계속 공존할 것임을 의미하며, 모델 개발과 배포를 연결하기 위해 변환 도구와 고급 MLOps 파이프라인이 점점 더 중요해질 것입니다. 각 형식의 고유한 강점에 따라 ML 수명 주기의 특정 단계에서 계속해서 다른 형식이 사용될 것입니다.

2. 세이프텐서 이해하기

세이프텐서는 기존 모델 저장 방식의 보안 및 효율성 문제를 해결하기 위해 특별히 설계된, 모델 직렬화의 중요한 진일보입니다.

정의 및 핵심 설계 원칙

세이프텐서는 허깅페이스(Hugging Face)에서 만든 딥러닝 모델을 위한 현대적이고 안전하며 빠른 직렬화 형식입니다. 주요 목표는 머신러닝의 기본 데이터 구성 요소인 다차원 배열, 즉 텐서를 안전하게 저장하고 공유하는 방법을 제공하는 것입니다. 이 형식은 pickle과 같은 구형 형식보다 더 안전하고 빠르게 설계되었습니다.

세이프텐서의 핵심 원칙은 모델 가중치(텐서)를 실행 가능한 코드와 엄격하게 분리하는 것입니다. 이 설계는 구형 직렬화 방법에서 발견되는 보안 결함을 직접적으로 해결합니다.

주요 특징

  • 제로 카피 및 지연 로딩: 세이프텐서 성능의 핵심은 "제로 카피" 기능입니다. 이를 통해 추가 복사본을 만들지 않고도 모델 데이터를 디스크에서 메모리로 직접 매핑할 수 있어 메모리를 절약하고 로딩 속도를 높입니다. 또한 "지연 로딩"을 지원하여, 필요할 때 대규모 모델의 필요한 부분만 RAM에 로드합니다. 이는 매우 큰 모델이나 메모리가 제한된 시스템에 매우 유용합니다.
  • 구조화된 메타데이터 처리: 모든 세이프텐서 파일에는 JSON 형식의 별도 메타데이터 섹션이 포함됩니다. 이 섹션에는 모양, 데이터 유형, 이름과 같은 세부 정보와 함께 모델의 모든 텐서가 나열됩니다. 메타데이터는 실제 텐서 데이터가 파일 내에 별도로 저장된 위치를 가리키므로 가독성과 보안을 모두 향상시킵니다.
  • 텐서 전용 데이터 저장: 세이프텐서의 가장 중요한 보안 특징은 "원시 텐서 데이터와 관련 메타데이터만" 포함하도록 설계되었다는 점입니다. 구조상 "임의의 파이썬 코드 직렬화를 허용하지 않습니다." 이 근본적인 설계 선택은 모델을 로드할 때 악성 코드가 실행될 위험을 제거합니다.
  • 양자화 지원: 세이프텐서는 양자화된 텐서를 처리할 수 있어 모델을 더 작게 만들고 메모리 사용량을 줄이는 데 도움이 됩니다. 그러나 파이토치 프레임워크에서 제공하는 기능에 의존하기 때문에 양자화 지원이 "GGUF만큼 유연하지는 않습니다".

주요 이점

  • 향상된 보안 (임의 코드 실행 완화): 이것이 세이프텐서의 가장 큰 장점입니다. 설계상 파이썬 코드가 파일에 저장되는 것을 완전히 방지합니다. 이는 pickle 기반 형식에서 발견되는 가장 심각한 보안 위험, 즉 모델 로드 시 악성 코드 실행을 제거합니다. 이로 인해 세이프텐서는 공개 또는 신뢰할 수 없는 출처의 모델을 공유하고 사용하는 데 가장 좋은 선택이 됩니다. 이 형식은 또한 데이터 변조를 방지하기 위해 "고급 암호화 기술" 및 접근 제어와 같은 다른 보안 기능을 포함합니다.
  • 성능 최적화: 제로 카피와 지연 로딩을 사용하면 "더 빠른 로딩 시간과 더 낮은 메모리 사용량"을 얻을 수 있습니다. 벤치마크에 따르면 pickle보다 훨씬 "빠르며", "기존 파이토치 저장 방식에 비해 CPU에서 76.6배, GPU에서 2배 빠를 수 있습니다".
  • 이식성: 이 형식은 이식 가능하도록 설계되어 다른 프로그래밍 언어에서도 작동합니다. 이를 통해 다양한 소프트웨어 시스템에서 모델을 더 쉽게 공유하고 사용할 수 있습니다.
  • 원활한 통합: 세이프텐서는 "기존 머신러닝 프레임워크 및 라이브러리와 원활하게 통합"됩니다. 이를 통해 개발자는 현재 워크플로우를 크게 변경하지 않고도 이 안전한 형식을 쉽게 채택할 수 있습니다.

전통적인 직렬화(예: Pickle)와의 비교

파이토치의 .pt.pth 파일에 사용되는 파이썬의 pickle 모듈은 본질적으로 안전하지 않습니다. 직렬화된 파일 내에 코드를 숨기고 파일이 로드될 때 자동으로 실행되도록 할 수 있습니다. 이는 특히 공개 웹사이트에서 다운로드한 모델을 사용할 때 잘 알려진 심각한 취약점입니다. picklescan과 같은 도구가 일부 악성 패턴을 탐지할 수 있지만, 완벽하지 않으며 안전을 보장할 수 없습니다.

세이프텐서는 이 보안 문제를 해결하기 위해 특별히 만들어졌습니다. 파일에 원시 텐서 데이터와 구조화된 메타데이터만 허용함으로써 악성 코드 실행 가능성을 제거합니다. 보안 외에도 세이프텐서는 훨씬 더 나은 성능을 제공합니다. 메모리 매핑과 지연 로딩을 위한 설계는 전체 모델을 한 번에 메모리에 로드하는 pickle에 비해 훨씬 빠른 로딩과 더 효율적인 메모리 사용을 가능하게 합니다.

파이썬 pickle의 보안 결함은 신뢰할 수 없는 출처에서 .pt 또는 .pth 파일을 다운로드하는 것이 단순히 데이터를 다운로드하는 것이 아니라 잠재적으로 유해한 프로그램을 실행하는 것과 같다는 것을 의미합니다. "실행 없이 pickle 파일의 안전성을 검증할 100% 완벽한 해결책은 없다"고 알려져 있습니다. 이는 파일의 안전성 확인 부담을 사용자에게 지우며, 이는 어렵고 신뢰할 수 없습니다.

세이프텐서는 애초에 유해한 코드가 포함되는 것을 방지하도록 형식 자체를 재설계하여 이러한 역학을 바꿉니다. 보안 책임을 사용자의 어려운 검증 과정에서 형식의 내장된 안전성으로 전환합니다. 이는 오픈 소스 AI 커뮤니티에서 "검증 후 신뢰" 접근 방식에서 "설계에 의한 신뢰" 모델로의 중대한 전환을 의미합니다. 이 변화는 복잡한 파일에서 가능한 모든 위협을 스캔하는 것이 거의 불가능하다는 점을 인정합니다. 공격 벡터(임의 코드 실행)를 차단함으로써 세이프텐서는 모델을 더 안전하게 널리 공유할 수 있게 하여 협업을 장려하고 더 많은 사람들이 사전 훈련된 모델을 더 쉽게 사용할 수 있도록 합니다. 이 "설계에 의한 신뢰" 원칙은 전체 AI 생태계의 성장과 보안에 필수적입니다.

세이프텐서는 주로 보안상의 이유(pickle의 취약점 해결)로 만들어졌지만, 더 빠른 로딩, 더 낮은 메모리 사용량, 제로 카피 작업과 같은 주요 성능 향상도 제공합니다. 이러한 성능 향상은 단지 부수적인 효과가 아니라, 데이터 처리를 효율적으로 하기 위해 메모리 매핑과 지연 로딩을 사용하는 세이프텐서의 최적화된 설계의 직접적인 결과입니다. 이는 대규모 모델에 대해 자연스럽게 더 효율적으로 만듭니다.

이러한 향상된 보안과 상당한 성능 개선의 조합이 널리 채택된 핵심 동력이었습니다. 만약 세이프텐서가 더 나은 보안만을 제공했다면, 특히 보안에 즉각적으로 집중하지 않는 사용자들 사이에서 채택이 더뎠을 수 있습니다. 그러나 명확하고 측정 가능한 성능 이점은 모든 사람이 전환할 강력한 이유를 제공하여 허깅페이스와 같은 주요 플랫폼으로의 통합을 가속화했습니다. 이는 AI 엔지니어링에서 기술이 업계에서 빠르고 광범위하게 수용되려면 보안과 성능 이점을 모두 제공해야 하는 경우가 많다는 것을 보여줍니다.

3. 주요 모델 형식 개요

세이프텐서 외에도 머신러닝 세계에는 각각 고유한 특징과 사용 사례를 가진 몇 가지 다른 중요한 형식이 있습니다.

3.1. CKPT (체크포인트)

AI 체크포인트는 단일 파일 형식이 아니라 훈련 중 특정 시점에 저장된 모델 상태의 스냅샷입니다. 체크포인트는 긴 훈련 작업 중 진행 상황을 저장하는 데 필수적입니다.

특징 및 일반적인 사용 사례

체크포인트는 일반적으로 모델의 가중치와 편향과 같은 학습된 매개변수를 포함합니다. 또한 옵티마이저의 상태, 현재 에포크 번호, 학습률 스케줄과 같이 훈련을 재개하는 데 필요한 다른 중요한 정보도 저장할 수 있습니다. 체크포인트의 파일 확장자는 프레임워크에 따라 다릅니다. 파이토치의 경우 보통 .pt 또는 .pth이며, 텐서플로우/케라스의 경우 .ckpt 또는 .h5입니다.

CKPT 파일의 주요 이점은 다음과 같습니다.

  • 재현성: 다시 로드했을 때 모델이 일관되게 작동하도록 보장하여 연구 검증 및 신뢰할 수 있는 성능 유지에 필수적입니다.
  • 협업: 공유하기 쉬워 개발자가 결과를 복제하거나 기존 작업을 기반으로 구축할 수 있습니다.
  • 유연성: 파이토치의 .pt/.pth 형식은 특히 유연하여 연구 목적으로 모델을 간단하게 저장하고 로드할 수 있습니다.

CKPT 파일의 일반적인 사용 사례는 다음과 같습니다.

  • 훈련 재개: 중단된 훈련 세션을 계속하여 상당한 시간과 계산 리소스를 절약합니다.
  • 미세 조정: 사전 훈련된 모델을 새롭고 더 구체적인 데이터셋에 대한 훈련의 시작점으로 사용합니다.
  • 모델 평가: 모델을 다시 훈련할 필요 없이 훈련의 여러 단계에서 성능을 테스트합니다.
  • 추론: 완전히 훈련된 모델을 프로덕션 시스템에 로드하여 예측을 수행합니다.
  • 연구 및 실험: 모델이 시간에 따라 어떻게 발전하는지 분석하고 체계적으로 매개변수를 조정합니다.
  • 전이 학습: 관련 작업에 대한 강력한 출발점 역할을 하여 훈련 시간과 데이터 요구량을 줄입니다.
  • 재해 복구: 긴 훈련 과정 중 장애 발생 후 작업을 재개하기 위한 백업 역할을 합니다.

보안 고려 사항

CKPT 파일, 특히 파이토치의 .pt.pth 형식의 가장 큰 보안 위험은 파이썬의 pickle 모듈에 의존한다는 점입니다. 이는 이러한 파일이 로드될 때 (torch.load 함수가 weights_only=True 설정 없이 사용될 경우) 악성 파이썬 코드를 포함하고 실행하도록 설계될 수 있음을 의미합니다. 이 취약점(CWE-502: 신뢰할 수 없는 데이터의 역직렬화)은 데이터 도난, 모델 동작 변경 또는 심지어 전체 시스템 장악과 같은 심각한 결과를 초래할 수 있습니다.

업계는 이 위험을 인지했으며, 세이프텐서가 더 안전한 대안으로 부상했습니다. 언급된 바와 같이, "대부분의 스테이블 디퓨전 AI 체크포인트는 .ckpt 또는 .safetensors와 같은 형식으로 저장됩니다... .safetensors는 악성 코드 실행을 방지하도록 설계된 더 안전한 대안입니다." 이는 모델 공유를 위해 더 안전한 형식으로의 명확한 추세를 보여줍니다.

CKPT, 특히 파이토치의 .pt/.pth 형식은 "매우 유연한" 것으로 알려져 있습니다. 이 유연성 덕분에 모델 가중치뿐만 아니라 옵티마이저 상태, 심지어 사용자 정의 파이썬 클래스까지 저장할 수 있어 훈련을 정확하게 재개하는 데 매우 유용합니다.

그러나 바로 이 유연성이 보안 취약점을 만듭니다. 이 형식은 어떤 파이썬 객체든 저장할 수 있기 때문에 공격자가 모델 파일 안에 악성 코드를 숨길 수 있습니다. 적절한 예방 조치 없이 파일을 로드하면 해당 코드가 실행됩니다. 이는 시스템 설계의 근본적인 트레이드오프를 보여줍니다. 즉, 유연성이 높을수록 공격 표면이 넓어지고 보안 위험이 커지는 경향이 있습니다.

업계의 해결책은 통제된 환경에서 훈련을 위해 더 유연한 .pt/.pth 형식을 계속 사용하더라도, 모델 배포를 위해 세이프텐서와 같은 형식을 채택하는 것입니다. 이는 ML 수명 주기의 여러 단계에서 서로 다른 수준의 보안이 필요하다는 인식이 커지고 있음을 보여줍니다. 전체 훈련 상태를 저장하는 강력한 기능은 신뢰할 수 있는 개발 환경 내에서 유지하는 것이 가장 좋으며, 공유 및 배포에는 내장된 보안 보증이 있는 형식이 필요합니다.

3.2. ONNX (Open Neural Network Exchange)

ONNX(Open Neural Network Exchange)는 머신러닝 모델을 위한 개방형 표준 형식입니다. 모델이 다양한 딥러닝 프레임워크에서 작동할 수 있도록 설계되었습니다.

특징 및 주요 사용 사례

ONNX 파일은 연산 순서(계산 그래프), 학습된 가중치 및 기타 메타데이터를 포함하여 모델의 전체 구조를 담고 있습니다. ONNX의 주요 강점은 보편적인 번역기 역할을 한다는 것입니다. 파이토치, 텐서플로우 또는 scikit-learn과 같은 프레임워크에서 훈련된 모델을 ONNX 형식으로 변환하여 "한 번 훈련하고 어디서든 배포"하는 접근 방식을 가능하게 합니다.

세이프텐서나 GGUF처럼 모델 가중치만 저장하는 형식과 달리, ONNX는 모델의 계산 그래프를 포함합니다. 이 그래프 기반 구조는 "다른 프레임워크 간에 모델을 변환할 때 더 많은 유연성을 제공합니다." ONNX는 많은 플랫폼, 장치 및 하드웨어 가속기(CPU, GPU, AI 칩)에서 뛰어난 이식성을 제공합니다. 모델은 구조화된 데이터를 효율적이고 플랫폼 중립적인 방식으로 저장하는 Protobuf 형식으로 저장됩니다.

ONNX의 주요 사용 사례는 다음과 같습니다.

  • 교차 프레임워크 배포: 훈련된 프레임워크나 환경과 다른 곳에서 모델을 실행합니다.
  • 고성능 추론: ONNX 런타임은 특정 하드웨어에 맞게 모델을 자동으로 최적화하는 추론 엔진으로, 종종 더 빠른 성능을 제공합니다.
  • 엣지 및 모바일 배포: 작은 설치 공간과 최적화된 런타임 덕분에 ONNX는 리소스가 제한된 장치에서 모델을 실행하기에 좋은 선택입니다.
  • 프로덕션 시스템: 견고성과 이식성 덕분에 까다로운 프로덕션 환경에 모델을 배포하는 데 널리 사용됩니다.

보안 고려 사항

ONNX 모델의 미묘하지만 심각한 보안 위험은 아키텍처 백도어의 가능성입니다. 공격자는 특정 입력에 의해서만 트리거되는 숨겨진 경로를 포함하도록 모델의 계산 그래프를 수정할 수 있습니다. 활성화되면 이 백도어는 모델이 악의적이거나 예상치 못한 출력을 생성하게 할 수 있으며, 일반적인 입력에서는 정상적으로 작동하여 탐지하기 어렵게 만듭니다. 다른 위험으로는 모델 반전 공격(민감한 훈련 데이터 추출)과 적대적 공격(모델을 속이기 위해 악의적인 입력 사용)이 있습니다.

이러한 위협을 줄이기 위해 몇 가지 관행이 권장됩니다.

  • ONNX 모델에 디지털 서명을 하여 변조되지 않았음을 보장합니다.
  • 강력한 네트워크 보안이 적용된 도커 컨테이너와 같은 격리된 환경에 모델을 배포합니다.
  • 모니터링 도구를 사용하여 모델 동작을 추적하고 이상을 탐지합니다.
  • 입력 정제 및 소프트웨어 최신 상태 유지와 같은 일반적인 보안 모범 사례를 따릅니다.

ONNX는 로드 시 임의 코드를 실행하지 않기 때문에 일반적으로 pickle 기반 형식보다 안전합니다. 그러나 ONNX 모델이 외부에서 구현된 사용자 정의 레이어를 사용하는 경우, 해당 레이어는 신중하게 관리되지 않으면 잠재적으로 악성 파이썬 코드를 포함할 수 있습니다.

단점

ONNX는 양자화된 모델을 지원하지만, GGUF만큼 원활하게 "양자화된 텐서를 기본적으로 지원하지는 않습니다." 별도의 정수 텐서와 스케일 팩터 텐서로 분해하여 "품질 저하를 초래할 수 있습니다." ONNX에서 표준이 아닌 복잡하거나 사용자 정의된 레이어를 가진 모델을 변환하는 것도 어려울 수 있으며, 성능을 저하시킬 수 있는 사용자 정의 작업이 필요할 수 있습니다.

파이썬의 pickle에 기반한 전통적인 형식(.pt 파일 등)은 실행 가능한 코드를 포함할 수 있는 파이썬 객체를 저장합니다. 이는 모델을 프로그램으로 취급합니다. 반면, ONNX는 특정 코드 구현이 아닌, 연산과 데이터 흐름의 더 추상적인 표현인 모델의 "계산 그래프"를 저장하는 데 중점을 둡니다.

이러한 그래프 중심 접근 방식은 ONNX에 뛰어난 교차 프레임워크 이식성을 제공하고 다른 하드웨어에 최적화될 수 있게 합니다. 모델의 논리를 더 높은 수준에서 정의함으로써 훈련된 프레임워크와 독립적이 됩니다. 이는 프레임워크별 구현에서 이식 가능한 계산 표현으로 이동하는 중요한 개념적 전환입니다. 이는 배포 유연성을 크게 향상시키지만, 아키텍처 백도어와 같은 새로운 보안 문제를 야기하며, 이는 pickle 기반 형식에 사용되는 것과는 다른 보안 전략을 필요로 합니다.

3.3. GGUF (GPT-Generated Unified Format)

GGUF(GPT-Generated Unified Format)는 대규모 언어 모델(LLM)을 효율적으로 저장하고 실행하기 위해 특별히 설계된 파일 형식입니다. 이전 버전인 GGML의 개선된 버전이며, 특히 개인용 컴퓨터에서 LLM을 더 쉽게 사용할 수 있도록 하는 것을 목표로 합니다.

특징 및 주요 사용 사례

GGUF는 LLM을 더 작고 훨씬 빠르게 로드하도록 설계되었습니다. 이는 저장 공간과 RAM이 종종 제한적인 로컬 환경에서 모델을 실행하는 데 중요합니다. 이 형식은 이를 달성하기 위해 "고급 압축 기술"을 사용합니다. 또한 모델의 가중치, 아키텍처 및 메타데이터를 패키징하는 표준 방법을 제공하여, 특히 llama.cpp 기반의 추론 엔진과 함께 사용할 때 다양한 소프트웨어에서 일관되게 작동하도록 보장합니다.

GGUF의 핵심 기능은 양자화에 대한 뛰어난 지원입니다. 양자화는 모델 가중치의 수치 정밀도를 낮추어(예: 16비트에서 4비트 숫자로) 파일 크기와 실행에 필요한 계산량을 크게 줄입니다. GGUF 모델은 다양한 양자화 수준(Q2에서 Q8까지)으로 제공되어 크기와 품질 사이의 다양한 트레이드오프를 제공합니다.

  • 낮은 양자화 수준(Q2 또는 Q3 등)은 RAM이 적은 하드웨어에서 실행할 수 있는 매우 작은 파일을 생성하지만 모델 품질이 약간 저하될 수 있습니다.
  • 높은 양자화 수준(Q6 또는 Q8 등)은 더 나은 품질을 유지하지만 더 많은 저장 공간과 RAM이 필요합니다.

GGUF의 주요 사용 사례는 다음과 같습니다.

  • 로컬 LLM 배포: Ollama와 같은 도구는 GGUF를 사용하여 사용자가 자신의 컴퓨터에서 강력한 LLM을 쉽게 실행할 수 있도록 합니다.
  • 오프라인 AI 비서: 많은 애플리케이션이 GGUF 모델을 사용하여 클라우드 기반 AI 도구에 대한 로컬, 비공개 대안을 제공합니다.
  • 코드 지원: IDE 및 코드 편집기는 지능형 코드 완성을 위해 GGUF 모델을 사용하기 시작했습니다.
  • 로컬 챗봇: GGUF 모델은 비공개 및 응답성이 뛰어난 대화형 AI 시스템에 자주 사용됩니다.
  • AI 연구: 유연성과 양자화 지원 덕분에 접근 가능한 하드웨어에서 LLM을 실험하는 연구자들 사이에서 인기가 있습니다.

보안 고려 사항

일반적인 믿음과는 달리, GGUF의 기반이 되는 GGML 라이브러리는 "입력 파일에 대한 불충분한 검증"과 관련된 취약점이 문서화된 바 있습니다. 이러한 결함은 "파싱 중 잠재적으로 악용 가능한 메모리 손상 취약점"으로 이어질 수 있습니다. 검증되지 않은 사용자 입력이 힙 오버플로를 일으켜 공격자가 악성 코드를 실행할 수 있게 하는 특정 보안 문제가 확인되었습니다.

GGUF 파일이 "코드를 포함할 수 없고" "단순히 모델 파일"이라는 일반적인 오해가 있습니다. 그러나 데이터브릭스(Databricks)의 보안 보고서에 따르면, GGUF 파일 자체에는 실행 가능한 파이썬 코드가 포함되어 있지 않지만, 특수하게 조작된 파일은 파서(파일을 읽는 소프트웨어)의 결함을 악용하여 메모리 손상을 일으키고 코드 실행을 달성할 수 있습니다.

이러한 위험을 줄이려면 다음을 수행하는 것이 가장 좋습니다.

  • 잘 알려지고 평판이 좋은 출처(예: Koboldcpp)의 모델과 도구를 사용합니다.
  • LLM을 격리된 환경(예: 도커 컨테이너)에서 실행합니다.
  • 매우 민감한 작업의 경우 인터넷에 연결되지 않은 전용 머신 사용을 고려합니다.

단점

GGUF의 주요 단점은 대부분의 모델이 다른 프레임워크(예: 파이토치)에서 먼저 개발된 후 GGUF 형식으로 변환되어야 한다는 것입니다. 이 변환 과정이 항상 쉬운 것은 아니며, 일부 모델은 GGUF 호환 도구에서 완전히 지원되지 않을 수 있습니다. 또한 GGUF 형식으로 변환된 후 모델을 수정하거나 미세 조정하는 것은 일반적으로 "간단하지 않습니다."

GGUF는 빠른 로딩과 효율적인 VRAM 사용량을 위해 설계되었지만, 실제 추론 속도(모델이 응답을 생성하는 속도)는 때때로 비양자화 모델보다 느릴 수 있습니다. 이는 낮은 양자화 수준에서 추론 중 가중치를 역양자화하는 데 필요한 추가 작업 때문에 발생할 수 있습니다. GGUF의 주요 성능 이점은 VRAM을 절약하여 대형 모델을 소비자용 하드웨어에서 실행할 수 있게 하는 것이지, 반드시 더 빠르게 만드는 것은 아닙니다.

GGUF의 결정적인 특징은 양자화와의 깊은 통합으로, 강력한 LLM이 제한된 VRAM을 가진 "소비자 등급 하드웨어"에서 실행될 수 있게 합니다. 이는 AI에 대한 접근성을 민주화하는 데 도움이 됩니다. 그러나 이러한 효율성에는 트레이드오프가 따릅니다. 양자화는 모델을 더 작게 만들지만, 낮은 수준은 모델 품질을 약간 저하시킬 수 있습니다. 또한 추론 속도는 때때로 비양자화 모델보다 느릴 수 있으며, 특히 비양자화 버전이 VRAM에 완전히 들어가는 경우 그렇습니다.

GGUF의 "속도" 이점은 보통 원시 성능보다는 더 빠른 로딩과 제한된 하드웨어에서 더 큰 모델을 실행할 수 있는 능력을 의미합니다. GGUF는 고급 모델을 더 많은 사람들에게 접근 가능하게 만들어 "AI의 민주화" 추세를 완벽하게 포착합니다. 이를 위해서는 사용자가 하드웨어의 한계와 모델 품질의 균형을 맞춰야 합니다. 여러 양자화 수준을 사용할 수 있다는 점은 사용자가 특정 요구에 맞게 모델을 조정할 수 있게 해주며, 이는 이 형식이 로컬 AI 커뮤니티에서 인기 있는 핵심 이유입니다.

4. 형식 비교 분석

적절한 모델 직렬화 형식을 선택하는 것은 보안, 성능, 리소스 효율성, 상호운용성 및 특정 애플리케이션 컨텍스트를 포함한 다양한 요소를 균형 있게 고려해야 하는 전략적인 결정입니다. 아래 표는 이러한 중요한 차원에서 세이프텐서, CKPT, ONNX 및 GGUF를 비교한 개요를 제공합니다.

특징 / 형식 세이프텐서 CKPT (.pt/.pth) ONNX GGUF
주요 목적 딥러닝 모델을 위한 안전하고 빠른 텐서 저장 훈련 체크포인트, 모델 매개변수, 상태 보존 교차 프레임워크 상호운용성, 다양한 하드웨어 배포 효율적인 LLM 저장, 소비자 하드웨어에서의 최적화된 로컬 추론
보안 프로필 높음 (설계상 임의 코드 실행 불가) 낮음 (Pickle 역직렬화를 통한 임의 코드 실행 가능) 중간 (임의 코드 실행 불가, 단 아키텍처 백도어 가능) 중간 (기반 라이브러리 취약점, 단 파일 자체는 실행 가능한 파이썬 코드가 아님)
로딩 속도 매우 빠름 (제로 카피, 지연 로딩) 다양함 (전체 로드로 인해 세이프텐서보다 느릴 수 있음) 빠름 (최적화된 런타임, 그래프 최적화) 빠름 (mmap, LLM에 효율적)
메모리 사용량 효율적 (지연 로딩, 부분 로딩) 높을 수 있음 (전체 객체 그래프 로드) 효율적 (런타임 최적화) 매우 효율적 (양자화, VRAM 절약)
디스크 공간 효율적 (압축, 텐서 전용) 다양함 (클 수 있음, 전체 상태 포함) 효율적 (Protobuf 형식) 매우 효율적 (양자화, 고급 압축)
양자화 지원 있음, 단 GGUF보다 유연성 낮음 (파이토치 의존적) 있음 (프레임워크 의존적) 제한적인 네이티브 지원 (텐서 분해) 강력함 (다양한 수준, Q2-Q8, 특화된 변형)
이식성 높음 (다른 프로그래밍 언어 간) 낮음 (특정 프레임워크에 긴밀하게 결합) 매우 높음 (교차 프레임워크, 교차 플랫폼, 다양한 하드웨어) 높음 (특히 llama.cpp 생태계에 대해)
주요 적용 분야 안전한 모델 공유, 허깅페이스 기본값 훈련, 미세 조정, 연구, 모델 저장 프로덕션 배포, 모바일/엣지, 상호운용성 로컬 LLM 추론, 소비자 하드웨어, 챗 애플리케이션
핵심 장점 설계에 의한 보안, 빠른 로딩, 낮은 메모리 사용량 훈련 상태 보존, 상세한 재현성 범용 배포, 런타임 최적화, 프레임워크 독립성 소비자 하드웨어에서의 LLM 효율성, 유연한 양자화
핵심 단점 C++에서 메타데이터를 위한 JSON 파서 필요 임의 코드 실행 위험, 큰 파일 크기 사용자 정의 레이어의 복잡성, 제한적인 네이티브 양자화 변환이 종종 필요, 낮은 양자화 수준에서 추론 속도 저하 가능성

5. 결론

머신러닝 모델 형식의 세계는 더 나은 보안, 성능 및 상호운용성에 대한 요구에 의해 끊임없이 진화하고 있습니다. pickle 기반 CKPT 파일과 같은 전통적인 형식은 연구에는 유연했지만 임의 코드 실행을 허용하여 심각한 보안 위험을 초래했습니다. 이로 인해 더 새롭고 안전한 형식의 개발과 채택이 이루어졌습니다.

세이프텐서는 이러한 변화의 대표적인 예입니다. 데이터와 코드를 분리하고 효율적인 로딩 기술을 사용하여, 특히 허깅페이스 생태계에서 딥러닝 모델을 공유하기 위한 안전하고 고성능의 대안을 제공합니다. 보안과 속도의 두 가지 이점 덕분에 현대 AI 워크플로우에서 인기 있는 선택이 되었습니다.

ONNX는 프레임워크 비호환성이라는 주요 문제를 해결합니다. 모델을 추상적인 계산 그래프로 표현함으로써 다양한 하드웨어와 소프트웨어에 배포할 수 있게 합니다. ONNX는 pickle에서 볼 수 있는 임의 코드 실행을 방지하지만, 아키텍처 백도어와 같은 자체적인 보안 우려 사항이 있어 다른 보호 조치가 필요합니다.

GGUF는 소비자 하드웨어에서 대규모 언어 모델을 실행하기 위한 특화된 솔루션입니다. 강력한 양자화 기능은 모델 크기와 메모리 사용량을 극적으로 줄여 더 많은 사람들이 강력한 LLM에 접근할 수 있게 합니다. 그러나 이러한 효율성은 때때로 더 느린 추론 속도를 초래할 수 있으며, 기반 라이브러리에서 사용자의 주의를 요하는 취약점이 발견되었습니다.

궁극적으로 최상의 형식은 특정 상황에 따라 달라집니다.

  • 세이프텐서는 딥러닝 모델을 안전하고 효율적으로 공유하는 데 가장 좋은 선택입니다.
  • ONNX는 다양한 프레임워크와 하드웨어에 모델을 배포하는 데 이상적입니다.
  • GGUF는 리소스가 제한된 로컬 장치에서 대규모 언어 모델을 실행하는 데 있어 타의 추종을 불허하는 효율성을 제공합니다.

전통적인 CKPT 형식은 통제된 환경에서 훈련 진행 상황을 저장하는 데 여전히 유용하지만, 공개 배포를 위해 더 안전한 대안으로 대체되고 있습니다. AI 분야가 성숙함에 따라 이러한 특화된 형식의 지속적인 개발은 머신러닝의 힘과 범위를 발전시키는 데 필수적일 것입니다.

댓글 달기

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