QA-Lora는 ICLR 2024에 의해 받아 들여졌습니다!
이 저장소는 QA-Lora의 공식 Pytorch 구현을 제공합니다 : 대형 언어 모델의 양자 인식 저 순위 적응.

QA-Lora는 몇 줄의 코드로 쉽게 구현되며, 원래 LORA에 두 배의 능력을 갖습니다. (i) 미세 조정 중에 LLM의 가중치는 시간과 기억 사용을 줄이기 위해 양자화 (예 : int4); (ii) 미세 조정 후, LLM 및 보조 중량은 정확도 손실없이 자연스럽게 양자화 된 모델에 통합된다.
최신 Auto-GPTQ 버전과의 충돌을 수정하십시오.
conda create -n qalora python=3.8
conda activate qalora
conda install pytorch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 pytorch-cuda=12.1 -c pytorch -c nvidia
git clone -b v0.3.0 https://github.com/PanQiWei/AutoGPTQ.git && cd AutoGPTQ
pip install .
cd ..
pip install bitsandbytes
pip install -r requirements.txt
pip install protobuf==3.20. * 자신의 자동 gptq 경로 (Python path/auto_gptq/utils/peft_utils.py)에서 peft_utils.py 새 제품으로 변경하십시오. gptqlora 사용자의 경우 peft_utils.py 파일 만 변경하면됩니다.
우리는 양자화에 GPTQ를 사용합니다. 비트 = 4, 그룹 크기 = 32, act-order = false 그룹 크기를 변경하면 peft_utils.py 에서 group_size를 변경하고 그에 따라 merge.py 변경해야합니다.
python qalora.py --model_path < path >모델 체크 포인트의 파일 구조는 다음과 같습니다.
config.json llama7b-4bit-32g.bin special_tokens_map.json tokenizer_config.json
generation_config.json quantize_config.json tokenizer.model
우리의 훈련 된 LORA 모듈은 양자화 된 모델로 완벽하게 병합 될 수 있습니다. 우리는이 저장소에서 간단한 병합 스크립트를 제공합니다.
치수 감소에는 두 가지 종류의 구현이 있습니다 (x는 d_in에서 d_in // l로). 둘 다 수학적 동등성입니다.
avgpooling 작업을 채택하십시오. 그러나 어댑터의 무게는 병합 중 d_in // l로 나뉩니다 ( merge.py 참조).
adapter_result = (lora_B(lora_A(lora_dropout(self.qa_pool(x)))) * scale).type_as(result)
model[tmp_key+ ' .qzeros ' ] -= (lora[ ' base_model.model. ' +tmp_key+ ' .lora_B.weight ' ] @ lora['base_model.model.'+tmp_key+'.lora_A.weight']).t () * scale / group_size / model[tmp_key+ ' .scales ' ]합계 작업을 활용하십시오. 합병 중에 어댑터를 나눌 필요가 없습니다)
adapter_result = (lora_B(lora_A(lora_dropout(self.qa_pool(x) * group_size))) * scale).type_as(result)
model[tmp_key+ ' .qzeros ' ] -= (lora[ ' base_model.model. ' +tmp_key+ ' .lora_B.weight ' ] @ lora['base_model.model.'+tmp_key+'.lora_A.weight']).t () * scale / model[tmp_key+ ' .scales ' ]GPTQ-for-Llama와 같은 일부 GPTQ 구현은 0을 Qzeros로 압축합니다. Qzeros를 먼저 해독하고 FP16 형식의 0을 복원해야합니다.
우리의 코드는 Qlora, gptqlora, auto-gptq를 기반으로합니다