대형 언어 모델 (LLM)이 계속 규모가 커짐에 따라 효율적인 방법을 저장, 배포 및 실행하는 효율적인 방법이 필요합니다. 이러한 모델은 강력한 기능을 제공하지만 크기와 메모리 요구는 특히 소비자 하드웨어에서 배포가 어려울 수 있습니다. 이곳은 GGUF (Generic GPT Unified Format)와 같은 모델 양자화 및 특수 스토리지 형식이 수행되는 곳입니다.
이 안내서에서는 GGUF 형식을 탐구하고 이점을 탐색하며 모델을 GGUF로 변환하는 것에 대한 단계별 자습서를 제공합니다. 그 과정에서 우리는 모델 양자화의 역사와 GGUF가 현대 LLM을 지원하기 위해 어떻게 진화했는지를 다룰 것입니다. 결국, GGUF가 중요한 이유와 자신의 모델에 사용하는 방법에 대해 깊이 이해할 수 있습니다.
이 기사는 Data Science Blogathon 의 일부로 출판되었습니다 .
GGUF를 향한 여정은 모델 양자화의 진화를 이해하는 것으로 시작됩니다. 양자화는 모델 매개 변수의 정밀도를 감소시켜 메모리 및 계산 요구를 줄이기 위해 효과적으로 압축합니다. 다음은 빠른 개요입니다.
초기에는 딥 러닝 모델이 Tensorflow 및 Pytorch와 같은 기본 형식의 프레임 워크로 저장되었습니다. Tensorflow 모델은 .pb 파일을 사용했으며 Pytorch는 .pt 또는 .pth를 사용했습니다. 이 형식은 소규모 모델에서 작동했지만 제한 사항이 있습니다.
프레임 워크에 걸쳐 상호 운용성이 증가함에 따라 ONNX가 개발되어 모델이 환경 사이를 이동할 수있었습니다. 그러나 ONNX는 일부 최적화를 제공했지만 여전히 주로 전체 정밀 가중치를 중심으로 구축되었으며 제한된 양자화 지원을 제공했습니다.
모델이 커짐에 따라 연구원들은 양자화로 바뀌었고, 이는 32 비트 플로트 (FP32)에서 16 비트 (FP16)로 8 비트 정수 (int8)와 같이 더 낮은 무게를 압축합니다. 이 접근법은 메모리 요구 사항을 크게 줄여서 더 많은 하드웨어 유형에서 모델을 실행할 수 있도록합니다. 예를 들어:
# 필요한 라이브러리 수입 토치 수입 Torch.nn을 nn으로 가져옵니다 토치를 가져 오기 Quant # 1 단계 : Pytorch의 간단한 신경망 모델 정의 클래스 simplemodel (nn.module) : def __init __ (self) : Super (simplemodel, self) .__ init __ () self.fc1 = nn.linear (10, 50) # 처음 완전히 연결된 레이어 self.fc2 = nn.linear (50, 20) # 두 번째 완전히 연결된 레이어 self.fc3 = nn.linear (20, 5) # 출력 레이어 def forward (self, x) : x = Torch.relu (self.fc1 (x)) # 첫 번째 층 후의 reb 활성화 x = Torch.relu (self.fc2 (x)) # 두 번째 층 후의 reb 활성화 x = self.fc3 (x) # 출력 레이어 반환 x # 2 단계 : 모델 초기화 및 평가 모드로 전환 model = simplemodel () model.eval () # 참조를 위해 양자화 전에 모델을 저장하십시오 Torch.save (모델, "simple_model.pth") # 3 단계 : 모델에 동적 양자화를 적용합니다 # 여기서, 우리는 선형 레이어 만 정량화하여 무게를 int8로 변경합니다. Quantized_Model = Quant.quantize_dynamic ( 모델, {nn.linear}, dtype = torch.qint8 )) # 양자화 된 모델을 저장하십시오 Torch.save (Quantized_Model, "Quantized_simple_model.pth") # 더미 데이터를 사용한 양자화 된 모델의 예제 예 dummy_input = torch.randn (1, 10) # 10 가지 기능이있는 입력 텐서 예제 출력 = Quantized_Model (dummy_input) print ( "정량화 된 모델 출력 :", 출력)
대형 언어 모델로 작업 할 때는 원래 버전과 양자화 된 버전의 크기 차이를 이해하는 것이 중요합니다. 이 비교는 모델 압축의 이점을 강조 할뿐만 아니라 효율적인 리소스 사용을위한 배포 전략을 알려줍니다.
OS 가져 오기 # 저장된 모델로가는 경로 original_model_path = "simple_model.pth" Quantized_model_path = "Quantized_simple_model.pth" # KB에서 파일 크기를 얻는 기능 def get_file_size (경로) : size_bytes = os.path.getSize (경로) size_kb = size_bytes / 1024 # kb로 변환합니다 반환 size_kb # 원본 및 양자 모델의 크기를 확인하십시오. original_size = get_file_size (original_model_path) Quantized_size = get_file_size (Quantized_Model_Path) print (f "원본 모델 크기 : {original_size : .2f} kb") print (f "정량화 된 모델 크기 : {Quantized_size : .2f} kb") print (f "크기 축소 : {((Original_Size -Quantized_Size) / Original_Size) * 100 : .2f}%")
그러나 8 비트 정밀도조차도 GPT-3 또는 LLAMA와 같은 매우 큰 언어 모델에 불충분했으며, 이는 GGML 및 결국 GGUF와 같은 새로운 형식의 개발을 촉발했습니다.
GGUF 또는 일반 GPT 통합 형식은 더 큰 모델을 지원하기 위해 GGML로의 확장으로 개발되었습니다. GGML 및 GGML을 기반으로 한 실행자와의 추론을위한 모델을 저장하기위한 파일 형식입니다. GGUF는 모델의 빠른로드 및 저장을 위해 설계된 이진 형식입니다. 모델은 전통적으로 Pytorch 또는 다른 프레임 워크를 사용하여 개발 된 다음 GGGML에서 사용하기 위해 GGUF로 변환됩니다.
GGUF는 GGML, GGMF 및 GGJT의 후속 파일 형식이며 모델을로드하는 데 필요한 모든 정보를 포함하여 모호하지 않도록 설계되었습니다. 또한 확장 가능하도록 설계되었으므로 호환성을 깨뜨리지 않고 새로운 정보를 모델에 추가 할 수 있습니다. 세 가지 목표를 염두에두고 설계되었습니다.
GGUF 형식은 성능을 희생하지 않고 제한된 하드웨어에 대규모 리소스가 많은 모델을 배포 해야하는 개발자를 위해 빛납니다. 몇 가지 핵심 장점은 다음과 같습니다.
GGUF 형식은 주요 모델 정보를 한눈에 제공하기 위해 특정 명명 규칙을 사용합니다. 이 컨벤션은 사용자가 아키텍처, 매개 변수 크기, 미세 조정 유형, 버전, 인코딩 유형 및 샤드 데이터와 같은 중요한 모델 특성을 식별하는 데 도움이됩니다. 모델 관리 및 배포가 더 쉽습니다.
GGUF 명명 컨벤션은이 구조를 따릅니다.
이름의 각 구성 요소는 모델에 대한 통찰력을 제공합니다.
이름 지정 예
전환으로 다이빙하기 전에 다음과 같은 전제 조건이 있는지 확인하십시오.
양자화 기술은 크기와 계산 요구 사항을 줄임으로써 신경망을 최적화하는 데 중추적 인 역할을합니다. 고정밀 가중치 및 활성화를 낮은 비트 표현으로 변환함으로써 이러한 방법은 성능을 크게 손상시키지 않고 모델의 효율적인 배치를 가능하게합니다.
아래는 모델을 GGUF 형식으로 변환하는 방법입니다.
이 경우 정량화 할 Google의 FLAN-T5 모델을 선택합니다. 명령을 따라 Huggingface에서 모델을 직접 다운로드 할 수 있습니다.
! PIP 설치 Huggingface-Hub huggingface_hub에서 가져 오기 Snapshot_download Model_ # 다운로드하려는 모델의 ID로 교체 snapshot_download (repo_id = model_id, local_dir = "t5")
우리는 llama.cpp를 사용하여 모델을 GGUF 형식으로 정량화합니다.
! git 클론 https://github.com/ggerganov/llama.cpp
Google Collaboratory에서 아래 코드를 따르면 요구 사항 디렉토리로 이동하여 "요구 사항-Convert_hf_to_gguf.txt"를 설치할 수 있습니다.
! pip install -r /content/llama.cpp/requirements/requirements-convert_hf_to_gguf.txt
양자화 수준은 모델 크기와 정확도 사이의 상충 관계를 결정합니다. 낮은 비트 양자화 (예 : 4 비트)는 메모리를 저장하지만 정확도를 줄일 수 있습니다. 예를 들어, CPU 전용 배포를 목표로하고 최대 정밀도가 필요하지 않은 경우 int4가 좋은 선택 일 수 있습니다. 여기서 우리는“Q8_0”을 선택합니다.
Google Collab에서 아래 스크립트를 실행하면 주석을 따르십시오.
#! python {convert_hf_to_gguf.py}로가는 경로} {hf_model} -outfile {name_of_outputfile.gguf} -outType {Quantization Type} ! python /content/llama.cpp/convert_hf_to_gguf.py/content/t5- outfile t5.gguf-outtype q8_0
머신 러닝 모델을 배포 할 때는 원래 버전과 양자화 된 버전 간의 크기 차이를 이해하는 것이 중요합니다. 이 비교는 양자화가 모델 크기를 크게 줄일 수있는 방법을 강조하여, 정확도의 상당한 손실없이 효율성을 향상시키고 추론 시간이 더 빠릅니다.
# 원본 및 양자 모델의 크기를 확인하십시오. original_model_path = "/content/t5/model.safetensors" Quantized_model_path = "t5.gguf" original_size = get_file_size (original_model_path) Quantized_size = get_file_size (Quantized_Model_Path) print (f "원본 모델 크기 : {original_size : .2f} kb") print (f "정량화 된 모델 크기 : {Quantized_size : .2f} kb") print (f "크기 축소 : {((Original_Size -Quantized_Size) / Original_Size) * 100 : .2f}%")
GGUF 양자화 기술을 사용하여 73.39%의 크기 감소를 볼 수있었습니다.
최상의 결과를 얻으려면이 팁을 명심하십시오.
모델이 계속 커짐에 따라 GGUF와 같은 형식은 대규모 AI에 액세스 할 수 있도록 점점 더 중요한 역할을합니다. 우리는 곧 메모리 요구 사항을 더욱 줄이면서 훨씬 더 정확성을 유지하는 고급 양자화 기술을 곧 볼 수 있습니다. 현재 GGUF는 최전선에 남아있어 CPU 및 에지 장치에 대형 언어 모델을 효율적으로 배포 할 수 있습니다.
GGUF 형식은 제한된 자원 소스 장치에 대형 언어 모델을 효율적으로 배포하기위한 게임 체인저입니다. 모델 양자화의 초기 노력에서 GGUF 개발에 이르기까지 AI 모델 스토리지의 환경은 더 많은 청중이 강력한 모델에 액세스 할 수 있도록 진화했습니다. 이 안내서를 따르면 이제 모델을 GGUF 형식으로 변환하여 실제 응용 프로그램에 쉽게 배포 할 수 있습니다.
양자화는 계속 발전 할 것이지만, GGUF의 다양한 정밀 수준을 지원하는 능력과 효율적인 메타 데이터 관리는 관련성을 유지할 수 있도록합니다. 모델을 GGUF로 변환하고 직접 혜택을 탐색하십시오!
A. GGUF (Generic GPT Unified Format)는 양자화 된 대형 언어 모델을 효율적으로 저장하고 실행하도록 설계된 고급 모델 스토리지 형식입니다. GGUF는 100GB를 초과하는 모델의 확장 성이 제한적인 전임자 인 GGML과 달리 광범위한 4 비트 및 8 비트 양자화 옵션을 지원하고 풍부한 메타 데이터 저장 기능을 제공하여 모델 관리 및 배포를 향상시킵니다.
Q2. 양자화는 모델 성능에 어떤 영향을 미칩니 까?A. 양자화는 모델의 매개 변수의 정밀도를 감소시켜 크기와 메모리 사용량을 크게 감소시킵니다. 정확도가 약간 떨어질 수 있지만, 잘 설계된 양자화 기술 (GGUF와 같은)은 허용 가능한 성능 수준을 유지할 수 있으므로 리소스 제약 장치에 대규모 모델을 배포 할 수 있습니다.
Q3. GGUF 명명 컨벤션의 주요 구성 요소는 무엇입니까?A. GGUF 이름 지정 규칙은베이스 이름 (모델 아키텍처), Sizelabel (매개 변수 웨이트 클래스), Finetune (미세 조정 목표), 버전 (모델 버전 번호), 인코딩 (중량 인코딩 구성표), 유형 (파일 목적) 및 샤드를 포함한 여러 구성 요소로 구성됩니다. 이 구성 요소는 함께 모델에 대한 필수 정보를 제공합니다.
Q4. GGUF 파일 이름을 어떻게 검증 할 수 있습니까?A. 적어도베이스 이름, 시젤 라벨 및 버전이 올바른 순서로 확인되는 정규 표현식을 사용하여 GGUF 파일 이름을 검증 할 수 있습니다. 이를 통해 파일이 이름 지정 규칙에 부착되도록하고 모델 식별에 필요한 정보가 포함되어 있습니다.
이 기사에 표시된 미디어는 분석 Vidhya가 소유하지 않으며 저자의 재량에 따라 사용됩니다.
위 내용은 모델을 GGUF 형식으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!