ggml 뿐 아니라 요즘 사용되는 LLM inference 를 위한 다양한 라이브러리에 대해 정리를 해보자.
1. ggml
ggml 은 Georgi Gerganov (러시아 사람) 가 (더 가벼운 언어인) c++/c 로 만든 기계 학습 텐서 라이브러리 이다.
⇒ llama 를 일반 컴퓨터에서 inferemce하기위해 파이토치나 gpu 를 사용하지 않고 cpu 에서 llm 을 돌릴 수 있도록 만든 라이브러리.
n bit quantization 해서 사용한다.
llama.cpp 에서 사용하는 C++ 텐서 연산 라이브러리 이다.
해당 라이브러리에서 지원하는 파일 포맷도 ggml이라 부른다.
2. llama.cpp
C++로 개발된 LLM inference 소프트웨어.
초기에는 CPU 를 이용한 LLaMA 모델만을 구동 하는 것이 목적이엇지만
이후 인기가 많아져 LLaMA 외 타 모델 지원하게되었고 CPU 뿐아니라 GPU 를 지원하거나 새로운 양자화 기법 개발 및 문법 기반 샘플링 등 다양한 기능이 꾸준히 추가되고있다.
** llama.cpp 에서 cpp 는 C++ 을 말하는 것이었다. ⇒ 즉, .cpp 은 .py 처럼 씨쁠쁠 파일이라는 뜻. (나에게는 헷갈렸다)꼭 씨쁠쁠로 할 필요는 없지만 빨리 계산하도록 하기 위해 씨쁠쁠을 이용해 구현한다.
3. LangChain
LLM을 더 편하게 활용하기 위해 개발된 툴.
파이썬으로 구현되어 있다.
GPT에서 제공하는 API를 직접 다룰 필요 없이, 멀티턴(또는 Chain) 대화를 위해 프롬프트 형식 제공하거나 벡터DB를 통해 컨텍스트 길이 제한 우회 등의 기능을 쉽게 사용할 수 있도록 하는 것이 주된 기능이라고 한다.
로컬 모델도 llama.cpp를 통해 제한적으로 지원한다. llama.cpp 개발과는 상관없는 라이브러리이다.
** 랭체인과 llama.cpp, ggml 의 관계: 랭체인이 llama.cpp을 가져다가 쓰고, llama.cpp이 ggml 포맷을 지원한다.
** 여담이지만 polyglot 과의 차이점도 헷갈리는데,
llama.cpp(및 GGML)이 여러 모델 과 ggml 포맷을 지원하는 것이다.
polyglot은 '다국어자'라는 의미로 일루서ai 에서 만든 multilingual model 들이다. GPT-NeoX에 속해있고 제한적으로 ggml이 지원된다.
** 딥러닝 모델을 구현한 파일은 ggml 등에서 어떻게구현되어있는 건지 헷갈린다 (아직까지) 예를 들면 모델 자체도 새로 씨쁠쁠로 구현되있는 건지 등.
모델 파일 형식은 보통 llama.cpp 는 ggml 을 사용하고 허깅페이스는 safetensors 를 사용한다고 한다.
허깅페이스의 safetensors 는 pickle 보다 안전하게 tensor 를 저장할수있고 빠른 포맷이다.
모델 학습 코드는 자동 미분 등의 기능이 필요하기 때문에 주로 파이썬(아마 토치나 텐서플로우 라이브러리를 말함) 을 사용한다.
근데 그런 토치 프레임워크나 ML 라이브러리들은 실제로는 c++ 이나 CUDA를 사용한다고 한다.
즉, 안에 구현된 기능은 씨쁠쁠이라는뜻이다 (Torch 안에는 c로 구현되어 잇다고.. 하드웨어에 가까운 부분이. C가 사용되는 언어 중에는 하드웨어랑 가장 가까운 언어라고 한다. 그래서 리눅스 같은 os 도 c로 코딩되어 잇다.)
그래서 파이썬은 실질적인 연산을 담당한다기 보다 좀 더 편하게 조작하기위한 추상화 개념에 가깝다.
'Python 및 Torch 코딩 이모저모' 카테고리의 다른 글
리눅스에 파이썬 새로운 버전 설치하기! (0) | 2023.10.25 |
---|---|
HuggingFace 실습(PEFT) : 2. Train (0) | 2023.10.17 |
HuggingFace 실습(PEFT) : 1. Data (0) | 2023.10.15 |
*list 와 **dict : unpacking 방법 (0) | 2023.08.09 |
Pytorch Data Parallel (0) | 2021.12.30 |