paint-brush
GPU 없이 Llama를 실행해보세요! LLMWare 및 Quantized Dragon을 사용한 양자화 LLM~에 의해@shanglun
3,225 판독값
3,225 판독값

GPU 없이 Llama를 실행해보세요! LLMWare 및 Quantized Dragon을 사용한 양자화 LLM

~에 의해 Shanglun Wang12m2024/01/07
Read on Terminal Reader

너무 오래; 읽다

GPU 리소스가 더욱 제한됨에 따라 소형화 및 전문 LLM이 서서히 주목을 받고 있습니다. 오늘 우리는 특별한 하드웨어 없이도 높은 매개변수 모델을 실행할 수 있는 최첨단 소형화 기술인 양자화를 탐구합니다.
featured image - GPU 없이 Llama를 실행해보세요! LLMWare 및 Quantized Dragon을 사용한 양자화 LLM
Shanglun Wang HackerNoon profile picture
0-item

소개

LLM 기술이 더욱 주류로 채택되고 에코시스템이 성숙해지기 시작하면서 조직에서는 LLM 기술 사용에 따른 한계와 비용을 인식하기 시작했습니다. 원래 LLM 기술 적용에 열광했던 많은 기업은 중앙 집중식 이니셔티브를 포기하고 대신 ChatGPT 및 Claude와 같은 서비스를 워크플로에 통합하기 위한 분산 노력을 장려하는 전략을 추구했습니다.


이 현상에는 여러 가지 이유가 있습니다. LLM 전문 지식 부족, MLOps 요구 사항 및 특수 GPU 인프라에 대한 의존도는 모두 대규모 AI 이니셔티브를 구현하는 데 장애가 됩니다. 그러나 이 중에서 가장 까다로운 문제는 GPU에 대한 의존도입니다.


이 기사에서는 GPU 의존으로 인해 발생하는 구체적인 어려움에 대해 논의하고, 잠재적인 솔루션을 탐색하며, 이 분야에서 활동하고 있는 선구적인 회사 중 한 곳의 흥미로운 사례를 살펴볼 것입니다.

LLM에 대한 제한 사항인 GPU 가용성


GPT-4, Llama 2, Claude 등 가장 공개적으로 사용 가능한 고성능 모델은 모두 고도로 전문화된 GPU 인프라를 사용합니다. 상업적으로 이용 가능한 가장 큰 모델 중 하나인 GPT-4는 8개의 A100 GPU 클러스터에서 실행되는 것으로 유명합니다. 훨씬 작은 Llama 2의 70B 모델은 합리적인 속도로 실행하려면 최소한 A40 GPU가 필요합니다.


이러한 수준의 GPU 요구 사항은 실제로 이러한 모델을 로컬에서 실행할 가능성을 배제합니다. 판매자를 찾을 수 있다고 가정하면 A100 GPU의 가격은 거의 $25,000에 가깝습니다. GPU를 확보한 후에는 서버를 설정하고 유지 관리하기 위한 전문 기술이 필요합니다. LLM 기술을 실험하기 위해 그러한 비용을 기꺼이 지출하려는 조직은 거의 없습니다.


이 문제를 해결하기 위해 여러 스타트업과 클라우드 제공업체가 광범위한 PaaS 제품을 개발했습니다. 지난 기사와 프로젝트에서 사용한 Replicate와 같은 일부 서비스를 사용하면 사용자가 GPU 서버를 임대하고 사용한 컴퓨팅 시간에 대해 비용을 지불할 수 있습니다. OpenAI 및 Anthropic과 같은 다른 제공업체는 토큰별 API로 모델을 제공하여 인프라 복잡성을 더욱 추상화합니다. 그러나 이러한 서비스를 사용하려면 데이터를 외부 네트워크로 전송해야 하므로 개인 정보 보호에 민감한 조직에서는 이러한 서비스를 사용하기가 쉽지 않습니다. 또한 이러한 서비스 중 다수는 GPU 사용량이 가용성을 초과하여 수요 급증 중에 부족 현상을 겪게 되어 프로덕션에 중요한 워크로드에 대한 신뢰할 수 없는 옵션이 됩니다.


또한 GPU 시간은 비용이 어떻게 청구되든 대규모 컴퓨팅 작업에는 비용이 많이 듭니다. 결국 이러한 GPU를 소유하고 운영하는 회사는 투자 수익이 필요합니다. 이러한 비용은 실험적 사용 사례에서는 거의 무시할 수 있지만, 상업적 사용 사례에서는 대규모 컨텍스트, 미세 조정 또는 다중 샷 예제를 삽입해야 하는 경우가 많습니다. 이러한 비용은 특히 대규모 데이터 세트를 보유한 조직이나 미국 대형 기업의 재정 자원이 부족한 조직의 경우 채택에 심각한 장벽이 됩니다.


이전 기사에서는 GPU 의존도를 줄이기 위한 전략 중 하나로 매개변수 압축을 살펴봤습니다. 오늘 기사에서는 양자화(Quantization)라는 또 다른 흥미로운 기술을 살펴보겠습니다.


그러나 탐색을 시작하기 전에 먼저 양자화에 대해 조금 배우고 싶을 수도 있습니다.

양자화(선택 읽기)

이번 장에서는 양자화의 기본에 대해 간단히 살펴보겠습니다. 그러나 단순히 컴퓨터에서 로컬로 강력한 LLM을 실행하는 방법을 찾고 있다면 지금은 이 섹션을 건너뛰고 나중에 다시 돌아와도 됩니다. 오늘 우리가 사용할 기술을 보유한 회사인 LLMWare는 그 뒤에 있는 핵심적인 C/C++ 구현에 들어가지 않고도 양자화된 모델을 시작할 수 있는 몇 가지 놀라운 도구를 만들었습니다.

양자화란 무엇입니까?

양자화는 정밀도가 낮은 숫자 유형을 사용하여 LLM 실행에 필요한 계산 및 메모리 요구 사항을 줄이는 기술입니다. Llama, Falcon 및 Alpaca와 같은 많은 인기 오픈 소스 모델은 PyTorch를 기본 프레임워크로 사용합니다. 기본적으로 PyTorch 모델은 32비트 부동 소수점을 사용합니다. 즉, 단일 매개변수가 GPU 메모리에서 32 "비트"를 차지합니다. 양자화는 이러한 매개변수를 16비트 부동 소수점, 8비트 정수 또는 심지어 4비트 정수로 대체하는 것을 목표로 합니다. 성공적인 양자화는 계산 속도를 획기적으로 향상시키고 메모리 사용량을 감소시킵니다. 즉, 대형 모델을 저가형 GPU, 내장 그래픽 칩, 심지어 CPU에서도 실행할 수 있게 됩니다. 이 아이디어는 한동안 존재해 왔습니다. PyTorch 자체는 기술이 발전함에 따라 16비트 부동 소수점 및 모델 컴파일에 대한 지원을 추가했지만 PyTorch 프레임워크의 초기 설계 결정으로 인해 진행 속도가 느렸습니다.

양자화가 성능을 저하시키나요?

이쯤되면 모델의 정확도가 심각하게 저하되지 않을까 하는 의문이 드는 것은 당연합니다. 짧은 대답은 '그렇다'입니다. 하지만 부주의하게 할 경우에만 가능합니다. 모든 최적화에는 고유한 장단점이 있지만, 연구원들은 일부 특수 기술을 사용하여 고도로 양자화된 모델에서 놀라울 정도로 안정적인 성능을 끌어낼 수 있었습니다. 극단적인 기술적인 세부 사항을 다루지는 않지만 현재 사용되는 가장 일반적인 전략을 광범위하게 살펴보겠습니다. 더 자세히 알고 싶다면 HuggingFace의 가이드 에서 자세히 알아볼 수 있습니다.


보정된 양자화

양자화 프로세스 중에 교정 데이터 세트가 모델을 통해 실행됩니다. 각 매개변수의 값이 기록되고, 범위는 매개변수가 양자화되는 방식을 결정하는 데 사용됩니다. 교정 데이터 세트가 모델이 접하게 될 입력을 대표한다고 가정하면 결과 모델의 정확도가 향상됩니다.


양자화 인식

Calibrated Quantization은 훈련 후에 발생하는 반면, Quantization-Aware Training은 훈련 중에 모델을 최적화하려고 합니다. 모델이 학습하는 동안 활성화는 "가짜 양자화"를 통해 양자화 프로세스에서 발생할 수 있는 오류를 시뮬레이션합니다. 그런 다음 모델은 오류에 적응할 수 있으므로 잠재적인 왜곡에 특별히 적응할 수 있는 보다 강력한 모델이 생성됩니다.

Llama.cpp 및 GGUF

PyTorch 양자화 및 최적화는 오랫동안 프레임워크 설계로 인해 차단되어 왔지만, 최근 두 가지 오픈 소스 기술이 이러한 장벽을 뛰어넘어 일반 대중이 양자화 기술에 훨씬 더 쉽게 접근할 수 있게 되었습니다. 아래에서 이에 대해 간단히 다루겠습니다.


라마.cpp

Llama.cpp는 Llama 모델을 C/C++로 이식하기 위한 Georgi Gerganov의 프로젝트였습니다. 이는 PyTorch에 의해 도입된 복잡성을 제거했으며 기본 구현을 통해 양자화를 직접 구현할 수 있었습니다. 따라서 결과 모델은 최대 4비트 정수 양자화로 실행될 수 있으므로 특수 GPU 없이도 매개변수 수가 많은 Llama 모델을 실행할 수 있습니다.


이후 이 프로젝트는 Falcon 및 Mistral과 같은 인기 모델을 포함하여 오픈 소스 모델 목록을 포함하도록 커뮤니티에 의해 확장되었습니다.


GGUF

GGUF는 모델 정보를 저장하고 전송하기 위한 Llama.cpp의 파일 형식입니다. 양자화된 모델은 최종 사용자가 로드하고 실행할 수 있도록 이 형식으로 저장됩니다. GGUF는 GGML의 후속 형식으로 더 많은 확장성, 이전 버전과의 호환성 및 안정성을 제공하는 동시에 빠른 개발을 허용하여 GGML을 개선하는 것을 목표로 합니다.


범용 파일 형식의 개발은 오픈 소스 커뮤니티에서 Llama.cpp를 확장하여 다른 모델을 최적화할 수 있는 문을 열었으며 TheBloke 및 LLMWare와 같은 혁신가는 지난 몇 달 동안 인기 있는 오픈 소스 모델을 소형화하기 위해 노력해 왔습니다.

LLMWare의 Quantized Dragon 모델

오늘의 예에서는 특화된 RAG 워크플로우를 신속하게 구축하기 위한 편리한 도구를 제공하는 LLMWare에서 제공하는 오픈 소스 라이브러리와 양자화 모델을 사용할 것입니다.

LLMWare는 누구입니까?

법률 및 금융 산업을 전문으로 하는 생성 AI 회사인 LLMWare는 양자화 커뮤니티에 적극적으로 참여해 왔습니다. 이전에 쓴 것처럼 개인 정보 보호를 중시하는 분야에 중점을 두고 있기 때문에 소형화 기술을 실험하고 혁신할 수 있는 자연스러운 후보가 되었습니다.


이전에는 계약 검토 및 재무 분석과 같은 전문 작업을 위해 10억~30억 개의 매개변수 모델 중에서 놀라운 성능을 끌어내는 RAG 최적화 BLING 모델에 대해 썼습니다. 이러한 매개변수 수를 갖춘 대부분의 오픈 소스 모델은 장난감 문제에만 유용한 경향이 있지만 LLMWare는 좁은 대상 작업에 대해 교육하여 이러한 모델에서 생산 준비 성능을 생성할 수 있습니다. 이렇게 소형화된 모델은 외부 GPU 없이 실행될 수 있어 개인 정보 보호와 확장성이 향상됩니다.

드래곤이란 무엇입니까?

Dragon은 BLING 사촌의 더욱 강력한 버전으로 생각할 수 있는 LLM 모음입니다. Dragon의 원래 의도는 동일한 명령 미세 조정 기술을 사용하여 더 높은 매개변수 모델을 훈련하여 더 많은 성능이 필요하고 저가형 GPU에 액세스할 수 있는 사용자에게 옵션을 제공하는 것이었습니다.


추가된 매개변수 수로 인해 더 큰 컨텍스트 창을 활용하고 더 복잡한 출력을 생성할 수 있는 더 강력한 모델이 탄생했지만 사용자에게는 GPU 내장 노트북이나 GPU가 연결된 클라우드 컴퓨팅 컨테이너와 같은 더 전문화된 하드웨어가 필요했습니다. 그러나 부족한 A40 또는 A100 GPU에 액세스할 때까지 기다려야 하는 초대형 모델에 비해 여전히 개선이 이루어졌습니다.

양 세계의 최고인 양자화된 드래곤

위의 내용을 고려하면 양자화가 LLMWare의 AI 도구 제품군에 상당한 향상을 가져온 이유를 쉽게 알 수 있습니다. 양자화를 통해 사용자는 BLING 모델과 동일한 환경에서 Dragon-tier 모델을 실행할 수 있으므로 상용 컴퓨터에 대한 훨씬 더 강력한 분석이 가능합니다.


지난 달 동안 LLMWare는 여러 Dragon 모델의 양자화 버전을 출시했습니다. 오늘은 법률분석 RAG 문제로 Llama를 기반으로 구축된 LLMWare의 Dragon 모델을 평가하고 유사한 BLING 모델과 비교해보겠습니다. 관심 있는 사용자는 다른 모델도 탐색할 수 있습니다. Mistral 기반 모델과 Yi 기반 모델은 이 글을 쓰는 시점에 LLMWare에서 사용할 수 있습니다. 또한 LLMWare는 ctransformers 라이브러리와의 긴밀한 통합을 통해 Llama.cpp 모델에 대한 추론 실행을 간편하게 만들어 gguf 모델을 PyTorch 기반 모델과 원활하게 교체할 수 있도록 했습니다.


이 실험에서는 M1 칩이 탑재된 Macbook Air를 사용할 것입니다. 즉, 이 실험에서는 널리 사용되는 하드웨어만 사용할 것입니다.

양자화 드래곤 테스트

이전 기사에서 입법 검색에 초점을 맞춘 RAG 애플리케이션을 구축했다는 점을 기억하십시오. 우리는 벡터 검색을 사용하여 여러 대규모 법률을 신속하게 검색하고 적격 기회 구역 파트너십 관심에 관한 질문과 관련된 섹션을 찾은 다음 BLING 모델을 통해 질문을 실행했습니다. 오늘 기사에서는 LLMWare의 양자화된 Dragon 모델을 통해 동일한 질문을 실행하고 BLING 모델보다 성능이 더 나은지 판단할 것입니다.


모델 비교에 집중하고 필요한 사전 지식의 양을 줄이기 위해 PDF 구문 분석 및 벡터 검색을 수동으로 많이 수행할 것입니다. 이는 모델에 대해 문제를 인위적으로 더 어렵게 만드는 추가적인 이점이 있습니다. LLMWare의 기본 임베딩 검색 청크는 소스 자료를 약 1000개의 토큰으로 분할하지만 수동으로 구문 분석을 처리하면 컨텍스트를 약 3000개의 토큰까지 늘릴 수 있습니다. 이는 Dragon과 BLING 모델의 차이점을 명확하게 보여주는 데 도움이 될 것입니다.


그러나 LLMWare에 대한 지난 기사의 설정 단계에 따라 해당 도구를 활용하려는 경우 나머지 LLMWare 생태계와 쉽게 통합할 수 있어야 합니다. 실제로 BLING 모델의 이름을 이 기사의 양자화된 Dragon 모델로 바꾸면 모든 것이 원활하게 실행됩니다.


더 이상 고민하지 말고 시작해 보세요!


먼저 필요한 종속성을 가져오겠습니다.


 import sklearn import sklearn.metrics # for cosine similarity from llmware.prompts import Prompt import time import os from openai import OpenAI from PyPDF2 import PdfReader client = OpenAI() # the library now loads the key automatically as an environment variable.


이제 PDF를 로드할 수 있습니다. 이전 예에서는 여러 가지 대규모 법안을 로드했지만 오늘은 2017년 세금 감면 및 고용법의 PDF 버전에만 중점을 둘 것입니다.

 reader = PdfReader([path to PDF of tax cuts and jobs act])


이제 각 페이지에 대한 임베딩을 생성할 수 있습니다.

 embeddings = [] for pg in reader.pages: text = pg.extract_text() embeddings.append(client.embeddings.create( input=text, model="text-embedding-ada-002" ).data[0].embedding)


질문할 질문에 대한 임베딩도 생성해 보겠습니다.

 question = 'What is a qualified opportunity zone partnership interest?' q_embed = client.embeddings.create( input=question, model="text-embedding-ada-002" ).data[0].embedding


임베딩을 사용하면 벡터 검색을 수행할 수 있습니다. 검색 공간이 작기 때문에 수동으로 수행할 수 있습니다.


 cos_sim = [(idx, sklearn.metrics.pairwise.cosine_similarity([e], [q_embed])[0][0]) for idx, e in enumerate(embeddings)]


이제 가장 관련성이 높은 페이지(색인 132 또는 결과를 확인하려는 경우 133페이지)를 선택할 수 있습니다.

 most_relevant = sorted(cos_sim, key=lambda x: x[1], reverse=True)[0][0]


이로써 우리는 가장 중요한 단계에 이르렀습니다. 양자화된 Llama Dragon 모델을 사용하여 LLMWare Prompter 개체를 인스턴스화합니다. Prompter 클래스는 우리를 위해 프롬프트 엔지니어링을 처리하고 프롬프트가 Dragon의 훈련 데이터 구조와 일치하는지 확인하기 때문에 여기에서 핵심입니다. 프롬프트 클래스는 llamacpp 바인딩도 자동으로 처리하므로 다른 모델과 똑같이 양자화된 Dragon 모델을 사용할 수 있습니다.


 model_name = "llmware/dragon-llama-7b-gguf" prompter = Prompt().load_model(model_name) response = prompter.prompt_main(question, context='\n\n'.join([reader.pages[132].extract_text()]), prompt_name="default_with_context", temperature=0.3)


잠시 기다리면 함수 호출이 반환되는 것을 볼 수 있습니다. 이제 결과를 인쇄합니다.

 print(response['llm_response'])


그러면 다음과 같은 내용이 표시됩니다.

 • A capital or profits interest acquired by the qualified opportunity fund after December 31, 2017, from the partnership solely in exchange for cash; •As of the time such interest was acquired, the partnership was a qualified opportunity zone business (or, in the case of a new partnership, it was being organized for purposes of being a qualified opportunity zone business); •During substantially all of the qualified opportunity fund's holding period for such interest, the partnership qualified as a qualified opportunity zone business.


이것은 꽤 좋은 답변입니다!


비교를 위해 BLING 모델이 동일한 문제에 대해 어떻게 수행되는지 살펴보겠습니다. 우리가 예상할 수 있는 문제 중 하나는 큰 컨텍스트 크기가 낮은 매개변수 모델을 "압도"하여 덜 유용한 답변으로 이어질 수 있다는 것입니다. 이전 실험에서 sheared llama 2.7b가 이 문제에 대해 가장 뛰어난 성능을 발휘한 것 중 하나였기 때문에 이를 BLING 모델의 대표로 사용하기로 결정했습니다.

 model_name_2 = "llmware/bling-sheared-llama-2.7b-0.1" prompter2 = Prompt().load_model(model_name_2) response = prompter2.prompt_main(question, context='\n\n'.join([reader.pages[132].extract_text()]), prompt_name="default_with_context", temperature=0.3)


일부 처리를 마치면 다음과 같은 내용이 표시됩니다.


 A qualified opportunity zone partnership interest is a capital or profits interest in a domestic partnership if such interest is acquired by the qualified opportunity fund after December 31, 2017, from the partnership solely in exchange for cash.


반응은 여전히 좋지만 Dragon 모델이 포착한 세부 사항 중 일부가 누락되었습니다. 특히 답변은 보유 기간 요건과 새로운 비즈니스 사례를 놓치고 있습니다. 이는 더 큰 컨텍스트를 처리하는 데 있어 낮은 매개변수 모델의 어려움에 대한 우리의 기대와 일치합니다. 관심 있는 독자는 더 낮은 매개변수 모델을 사용하거나 주어진 컨텍스트의 크기를 늘려 이 실험을 확장할 수 있습니다. 효과가 점점 더 뚜렷해지고 나면 모델이 짧고 왜곡된 답변을 제공하는 것을 볼 수 있습니다.


이 실험을 통해 양자화된 Dragon 모델이 모델의 정확도를 눈에 띄게 손상시키지 않으면서 의도한 사용 사례에 대해 낮은 매개변수 모델보다 성능이 뛰어날 수 있다는 것이 분명해졌습니다.


이를 통해 우리는 양자화된 모델을 사용하여 실제 사용 사례를 해결하고 그 과정에서 성능 특성에 대해 배웠습니다!

결론

오늘 우리는 LLM 양자화라는 흥미로운 분야를 탐구하고 LLMWare와 같은 회사가 이러한 개발을 활용하여 전문 언어 모델을 향상시키는 방법을 살펴보았습니다. 이전에 주장했듯이 소형화는 AI 기술의 광범위한 채택을 위한 가장 유망한 경로 중 하나를 나타냅니다. AI 분야의 혁신가는 전문화, 미세 조정 및 양자화를 결합하여 실제 문제를 해결하는 확장 가능하고 성능이 뛰어난 모델을 만들 수 있습니다.


Github 에서 LLMWare의 RAG 프레임워크를 찾을 수 있고 LLMWare의 Hugging Face 저장소 에서 해당 DRAGON 및 BLING 모델을 찾을 수 있습니다.


그건 그렇고, 저는 개발 도상국의 교육에 혁명을 일으키기 위해 언어 AI와 소형화를 사용하려는 흥미로운 프로젝트를 진행하고 있습니다. 우리는 전 세계의 뛰어난 활동가 및 교육자들과 협력하고 있으며 전 세계의 디지털 격차를 해소하기 위해 노력하고 있습니다. 내 프로젝트에 대해 더 자세히 알고 싶거나 LLM 공간의 흥미로운 발전에 대해 이야기하고 싶다면 주저하지 말고 Github 또는 LinkedIn을 통해 저에게 연락하세요.