GGML 소개
GGML은 조지 게르가노프(Georgi Gerganov)가 개발한 머신러닝 라이브러리로, 특히 Transformer 모델의 추론에 중점을 두고 있습니다. 순수 C/C++로 작성되어 다양한 플랫폼에서 쉽게 활용할 수 있으며, Apple Silicon을 비롯한 다양한 하드웨어에서 고성능을 구현할 수 있도록 지원합니다.
이 프로젝트는 대규모 언어 모델을 로컬 환경에서 효율적으로 실행하려는 필요성에서 시작되었습니다. 일반적으로 대규모 언어 모델의 훈련에는 엔비디아 기반의 GPU 클러스터가 필요하지만, 이미 훈련된 모델을 활용한 추론 작업에는 그만한 자원이 필요하지 않을 수 있습니다. 특히 Apple Silicon은 통합 메모리를 지원하여 대규모 언어 모델을 로컬에서 실행하기에 적합한 환경을 제공합니다. 그러나 Apple Silicon은 엔비디아 GPU를 지원하지 않으므로, 추론에 최적화된 순수 C/C++ 기반의 라이브러리가 필요했습니다. 이러한 배경에서 GGML이 개발되었으며, 이를 통해 다양한 하드웨어 환경에서 효율적인 추론이 가능해졌습니다.
GGML은 현재도 활발히 개발 중이며, 다양한 프로젝트에서 온디바이스 LLM 구현을 위해 활용되고 있습니다. 로컬 언어 모델을 운영 하기 위해서 필요한 소프트웨어들이 GGML을 기반으로 구현 되요 널리 활용 되고 있습니다. 그런 측면에서 이 프로젝트는 로컬 AI 시스템을 구동 하기 위해 핵심적인 기반이 되었습니다.
주요 특징¶
미니멀리즘: 핵심 라이브러리는 5개 미만의 파일로 구성되어 있어 간결합니다. GPU 지원을 위해 추가 파일을 포함할 수 있으나, 이는 선택 사항입니다.
쉬운 컴파일: 복잡한 빌드 도구 없이도 컴파일이 가능하며, GPU 지원이 필요 없는 경우 GCC나 Clang만으로도 충분합니다.
경량성: 컴파일된 바이너리의 크기는 1MB 미만으로, 수백 MB에 달하는 PyTorch에 비해 매우 작습니다.
우수한 호환성: x86_64, ARM, Apple Silicon, CUDA 등 다양한 하드웨어를 지원합니다.
양자화된 텐서 지원: 텐서를 양자화하여 메모리를 절약하고, 경우에 따라 성능을 향상시킬 수 있습니다.
높은 메모리 효율성: 텐서 저장 및 연산에 필요한 메모리 오버헤드가 최소화되어 있습니다.
고려 사항¶
모든 텐서 연산이 모든 백엔드에서 지원되는 것은 아닙니다. 예를 들어, 일부 연산은 CPU에서는 작동하지만 CUDA에서는 작동하지 않을 수 있습니다.
GGML로 개발하려면 저수준 프로그래밍에 대한 깊은 이해가 필요할 수 있습니다.
프로젝트가 활발히 개발 중이므로, 호환성에 영향을 미치는 변경이 발생할 수 있습니다.
활용 사례¶
GGML은 llama.cpp 및 whisper.cpp와 함께 인기를 얻고 있으며, ollama, jan, LM Studio, GPT4All 등 여러 프로젝트에서 온디바이스 LLM을 구현하기 위해 GGML을 활용하고 있습니다.
시작하기¶
GGML을 시작하려면, GitHub 저장소 https://
GGML은 경량화된 머신러닝 모델을 다양한 하드웨어에서 효율적으로 실행하려는 개발자들에게 유용한 도구입니다. 지속적인 발전과 함께, 더 많은 기능과 개선이 이루어질 것으로 기대됩니다.
GGUF¶
GGML은 주로 이미 학습된 모델을 최적화하여 다양한 환경에서 효율적으로 추론하는 데 중점을 둔 라이브러리입니다. 따라서 TensorFlow나 PyTorch와 달리 모델 학습 기능은 포함하지 않지만, 학습된 모델을 GGML 형식에 맞게 변환하여 활용할 수 있습니다. 이를 위해 GGUF(Georgi Gerganov Unified Format)라는 파일 형식이 도입되었습니다.
GGUF(Georgi Gerganov Unified Format)는 대규모 언어 모델(LLM)의 효율적인 저장과 배포를 위해 설계된 파일 형식입니다. 이 형식은 다양한 딥러닝 프레임워크와 호환되며, 모델의 메타데이터와 텐서 데이터를 하나의 바이너리 파일에 통합하여 관리합니다.
주요 특징:
범용성: TensorFlow, PyTorch, ONNX 등 다양한 플랫폼에서 사용 가능하도록 설계되었습니다. 
효율성: 데이터와 메타데이터를 효율적으로 저장하여 모델 파일의 크기와 로딩 시간을 줄입니다. 
양자화 지원: 16비트 부동 소수점뿐만 아니라 8비트, 6비트 등 다양한 양자화된 텐서 타입을 지원하여 모델 크기를 줄이고 추론 속도를 높입니다. 
확장성: 새로운 정보를 추가해도 기존 모델과의 호환성을 유지하도록 설계되었습니다. 
GGUF는 이전의 GGML 형식에서 발전된 형태로, 모델 공유와 사용의 효율성을 높이기 위해 개발되었습니다. 이를 통해 다양한 하드웨어 환경에서 LLM을 보다 쉽게 활용할 수 있습니다.